summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python/sctop.py
blob: 7a6ec2c7d8abe7bf01b660210811829f37eb572d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# system call top
# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
# Licensed under the terms of the GNU GPL License version 2
#
# Periodically displays system-wide system call totals, broken down by
# syscall.  If a [comm] arg is specified, only syscalls called by
# [comm] are displayed. If an [interval] arg is specified, the display
# will be refreshed every [interval] seconds.  The default interval is
# 3 seconds.

import os, sys, thread, time

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

from perf_trace_context import *
from Core import *
from Util import *

usage = "perf trace -s sctop.py [comm] [interval]\n";

for_comm = None
default_interval = 3
interval = default_interval

if len(sys.argv) > 3:
	sys.exit(usage)

if len(sys.argv) > 2:
	for_comm = sys.argv[1]
	interval = int(sys.argv[2])
elif len(sys.argv) > 1:
	try:
		interval = int(sys.argv[1])
	except ValueError:
		for_comm = sys.argv[1]
		interval = default_interval

syscalls = autodict()

def trace_begin():
	thread.start_new_thread(print_syscall_totals, (interval,))
	pass

def raw_syscalls__sys_enter(event_name, context, common_cpu,
	common_secs, common_nsecs, common_pid, common_comm,
	id, args):
	if for_comm is not None:
		if common_comm != for_comm:
			return
	try:
		syscalls[id] += 1
	except TypeError:
		syscalls[id] = 1

def print_syscall_totals(interval):
	while 1:
		clear_term()
		if for_comm is not None:
			print "\nsyscall events for %s:\n\n" % (for_comm),
		else:
			print "\nsyscall events:\n\n",

		print "%-40s  %10s\n" % ("event", "count"),
		print "%-40s  %10s\n" % ("----------------------------------------", \
						 "----------"),

		for id, val in sorted(syscalls.iteritems(), key = lambda(k, v): (v, k), \
					      reverse = True):
			try:
				print "%-40s  %10d\n" % (syscall_name(id), val),
			except TypeError:
				pass
		syscalls.clear()
		time.sleep(interval)
0${mRed9}tDÎHihgDrȫF6#,v*LjPЉ\q:nY*kq|2nKAuK/V% ;R,:9tɑ@$#JճFG&E X[6|q 4EwADz j3E1'ԏ2զD˺XXҹcKDH)?R޳7g(o 3j*gI).oBXCN מ]oY>+PHKL?|zZ9:gR~DK=nnJH[jB>n;mz R>,Yk)!NIؤ"ѝ6v$ߧ\Ki݋-#Gӽ];GExLwa2ca@b`CP-`+:pG툳= NW9%NOaEHi2%izS| |ݱ5_IM Nb:-('FTdM0Ya+EL!6v/\Oq )L?(KlN h&RpǕS%}ntj6#:˺7I"aiCEʝR?pHw\/~G,MW_qW3*;]f0jKxMRH I1 E貨*uz4 藙y7cssJ3F#B"W=w!Y>i$Zؤ?uG6evkh6jQUu#_<Ӿ8+,@/t^Yz2F2FGYGxwQJgZm{{{'\hэ|8DGiG솉tX`YhUfjW MBwqķas?.uVbX(xhWց/(g^0sԆ䃡, M$N#2c Z+:L T.Ipƕf#ڕvWnn"e'֤UU/9$nɸa tU&-U@xQNKpK]tGhu쭸yI1Gxtٶ]AV Ylݒz4u\OVX')xCM$:< Y :/jxHM\>ȃ!( ?KI.^(p Z^PǷڷV&---4oX#YqO֣= ,9tIuZ/߿{{n$Ėe/i^*% &4FpX̋v`E 27DZĞCjAOuFB03"o6=z;,MBA,pY"H|Xp=i=wt>lOQ>`c ;/;1nRUhz-_]黸&=ǕשI=>JZozH{ bL1bWaimx:֋ _V"%gamV jlѓ"x(œ IM)ҙPeq W}|*׻Q]vA H{4UMmU"T4rU*ǥ㹂/$D Rgv뵚id |n[Q'f: 3Tkb"Y$<F7{Ӵ/=5hwDL,+Nj*w}Vӻy|=Eyg.i9r,/-2=] <~bOo!'b1c6*}=t+.xFEMZt#:M+ƕI]Cg(:aIRi-zZ Ry\d,}egޮ.lt&UPeBvղTTbtp ;XW.)29O uL>5TZ$D3JG 9͞747ퟂ(\ *ֳ!$)%wa]矿LP\6~dzzɑ:5:.:Oa\"q'1t iN+cBbԼz  ckt!IY-?X5$BjhX'qaFyxl逨:]#ǐPS:v6'9 "9.Lve%D&;2)0``?~ zweeɐ\ 8ː0R%MGje 73PK{&_Ibmh;:?4[fP%Ñ=1FSplMծ@j6 UZ ER4SJ,)p xn#|\щL3h1N:^u2:@"]oܕdbU?WcBМÅ/FZS?۞#wIK&k|81E­ >"XAD۪DlQñהf5aȇ"/3 M hG4E*cs9!uruO:o>fg"򯱽'}7}_ޑחA  Qiߛ{E ^%|;<3 #9}Տ bMRq|IfVm! gqlD[P1]U5+)XCoƸux6Ri  ya,omcA* Ibe Ov淐6 %+kem}N+ph+ɤxP]XJ&ޖa$<9{9#S~rn}l ?xHev rֶxz+Fq8#^JvWW9 Y[u9EU&j0ԫq@|E{h{Zf޽r8oHZ qPµQ'GpBrm /C`:#w#<]trYDuV)RDPK\+ŝ9[ f5 />)-B.~muk~=w-Y*B{TӬXk,F ?ZW4#l<43&}2 ,dId:9+4I>mw_gpqYyrXv#{my>QršlcK[z{.h(ল' aBUB6Fl@VÖ @3>n4^Fj0&CI5Z[aSp9əهI`!=ɀ\ }c.pt0wYOzgOXE\OQ-Sx.mؓb=ˉer1G_0O^ 5ij:U Z;(>ըF69IwCहq)?$;G D #ދ{d~ґg9 'F3%A$@HkmoUR]،_ \8CX+tRb97"#,{Nz.tT\9!'}âZJ`0-cr!:9cq^|/sD`q7 I02נ]>YبX`$CH^PƩFY DsTyizW0h>\l`ooq&iy:Iph bzì܅'>xz;'A- ;xGK7."d~x2NУRtHEcR ՠFFt]ͦj;}:QCuvNQ8'Ae%^l.X1#x !cC`Sl,5ɗl?/듣C1\#7F >F9TД=HIRmd]upBʘ$qcL=6!H5;o*#58~͖4>(&ͫX3/9Q+!4_m=(Ft:v^0ju >]T6w|xЩNc'!.qg&1'{{Dj]|)K,%gqߑɫVBLYB%6i}o~ ɐC~MIdбn֚5IvɸyIp%]3c¸)קdzhW/y#9:pfιnm!2_IAKt{qdC{Jk삽^HK2XFt$mJ=)VS=Xt]D850h"=XvgcAv;$Irwo#ЦǢ~ћ0mhSE%^\2ܭrL` ? `(  In!+1q⯛& ⭠3з|S&S=Oݕca[= ]|l\G\BGano*|z:!#o-eBMXx()fϵѬtLn\?UZי~OS永s3(݉}LP̴mgrxޘͦQg\4vkmiڪ:E4tU+- g(¦sb"w_ZV6Thb="GZIiQ2+I=ViĝjHRNY_9,9<6i\JwߝƒN+ ~ ?C2>5扐%̀xc:=)3O;fLRp,)r돊P+UJ LBVA?jM$E5$ \} S3.|R/0oÄ@7ֲy8h7zbZo ?"EX!E?wdd,]SS0=XHqbW]>`ɽmD>,%tS/  X1x@_ #z˲FzC%3b @I@.ńP6b\~n-8t'Hy_ug●=úF >;|hUI^ly!ڋ?˂sM Z\^LKom4i #x9zj1FͯX n_eTXC$0:{_?^NL.c3T쁤M6_֑<`hM6'Y^kH!&gRݏlG"yX!4=9%*tvyw,˿SG]U**(6`jV-R 5nIG 5;Zp™%T3ԹIMZ,wnA;- djLfB3C]<ܼF ;+t!PuHNT+H+ā] gשe,j("e?5:-d/# ƿ΁'fEڏ;bjh:aHJx<`MIBZƞjf&4JO,xI-o}oǠۿj!l Ac ;P>N8œ{`щaSCBc,.=jk \8Ў,tLM!+s׭VLappÑ!l{rلsYpWPW󑴷U;'Xt'>3먤Ɩ 6VI+`Coѱ3.f6 d|Z$b>pTR#S9[]X¿"= "̮'Ts:!VHCaeBf 2%ŪwV2Nj_"ymQg(zZr3Hk JDu#{ ޑ._H=9eF8IfZn(fW~ʆ-wXp[VA^aErT7ztW[9K?;l&=ʿ!@B'U`I@ ^kp`2!(Hq %AxI)gWoUg/ Q_5;=Cog:yz3>݇oaRzP]!,#~{*uE@u/򵇅f͂I\i]o0[ QtS3-xB$і@IQ|&Oė Lsн4gڝVvĨU#@|8.!_!.}BN#ߗɻ]ZLI,YdRJׂ#9]ui9O$湜ׇFRk+w ̂NO242TUWC,Hg0#]|쾡Z߰>-8,r)Z|ǾpsYˍ1A(xt$;Ī8 SHjzZ !R$\mq"q֛K EXLt:y"c#3B OncJVt4]4]ESP`tgŢ%MKyWyJҫΙEԑp 5V޵0="?b tuJD"LW᪇(|x㟸hnWEpXBe=_ε7tU'y t{e%69d)J +I5]צCHZeZQ $QZahIn#&V0GPs T9w{OJlP;8!U!m'Q`nVeZ/3rfx bL=v JюQZf:"YaO~^C7i)"SRi{  }|1;Df?+vVjAr%+nDAt%:/= fM]6;"hCoy +& <@`s0iPm6RgR4jm^^?wi}r¢""v oG[ږ[Qd钰{0QF^Wc /&{CQv$NSA nS"3e}bZۘRLHt ,nQ@3ȍBנ0$w.+ .M_ږD {t<2¯d:I-VȔ\3e'>Cې%|.xa& FUdRӣ"t>Xd Zp+ 6j9)mLYd.4A"0D4,gxYJ]zHL$/N2ZE@ABȶڣ d8)h8;O%]U6hm91CQ.gS0,ެTWކaP`_5|TPd`}KQ%`PMٮb \F_hVYmpK<5U1[HϞ Y(|{ f`SgɫCKĭ#G&_@gɨQӡ[>ͺg`bc:Xғ OV܉iz/ M`&QkL>O̬1·Z4{a@޶?,R__K¢|_R>0sKcA{+Eر6gan&w_/BW =Aߌ$66 3!=#k[|pvVA5VCTO3O#_Z. tH^N {4N!W6ߠ? +н;|O[K NwJLk ah|]ӑfZhn FO'FNp ^a~ d-_%gii&o闥?HlR#DA@z<ǽSՏ݌O:z = a_r_?m[0a kE ~Ԝj$'+HB*-G'̯brzFl)Z/Ej%tZǥI_Eh.]k(om̶5\9u_! 67L"6qBfEn;+2L8uAsMrM3'HșJF|)8w*2kmUuH5H ~68j`vN&^.]yh>s lݞrۑZs.$w}3GW5OzVɼu#]4yPUd-Ϧ!XF[{lI,D D6 ܪigf-%XrSRwi :[ݲΥۛXK&d\+1O_UPcn}jsZDZUR ;tWdZC-kzӚpHo^٪sYƠJф|zJUU@mD~a=О6M:CUc?sE^sɛ6U9 "@v}dci Ӄ-HUZ'Džn#ʅ×;Z[?A=*?^sZ?sN C.r_9shϞ]/ )) /@vBtOmB^nL ;U Y@FƎx<*Wl|A 6 "D?)ĺ7:W vb^8,9mO`Бt'ǣyE"Sj %x!*)#[6ȣl@HOuU&m &)ꯏ܊_K$Z0ri_7 Iav}H$ec[w% TƤZgml XSq%UJlrfwWjz@_$z3h"W~N9dž8L Ҍ Z6魖0ȇíq:<شPPpQqm\ ?MWBe3 #|9I,4kbB !m<^rxI*:|I@R65Y}ͩ`f[QZPzvʏ -R0/|e& G.<ȅcy#D :A{d\sUL"5O1|W9% z\vBuGk"eS*] eD7;5 1 &[ښ-=vOpC\!AstÇ .OTOo1Ksno+{%Ŀ$׿۝0lwCM G4+{O0)SOdP p4i=: k91ʵq֭UVop2TݺwwPj4Uju%b}j*z :N3hGGs>eU P)\ߑ'hFA<Ĉads#T!6 V:,8CObuآ+2u>B/ ٞ4@cQU'@oJ븨㟯^r; DX_1cFJJswe9: OU k!,L-cF飚 I뭽KTIն btӈ In֮k==Qq,kTDŽaW~[6H ߉\7f)(<Ƃbؚ;#c A3ImE1?^YoUhn68yTQYz^En+Aӷmo=ԏڄBRA\2BŲ҄( SV._` |fBA=/;|uyMKln0#|\mHS0;Z%W`=a-"_5Jޔ$\&$M p ѣ+weFH`vS&z;vcy^5,-Cⴣ֫%IH3"'#ӈ>@r)VsDp@ 5PIlYo];\c6}ބqMGݑ9VUj^AQYmY;z}<? ][[-:GPCO&o6`>ĩ,m<2/QYɝvj(:B}o3=KҲ&v#8w_i&#*]$8=~jpk)hU+rUSa,W_2: zI? jv{Y(wd)<াP6 Ǎ2*[TY UA39 $kO5mkI$Q1P:w'ܖvp*}$ cZ m{Ԙ MU*:"j4UZi+ldMcP8&wmh LoY~?2s2ݝ00P^~H$:Bi;t+,!d^|}rxo\^w]iB-@5tP*BQz|^ٞq@;)!{]5񖐕-LI/xKN3el'gE>!<6,MLgCl$Z_N^'r}dkxV-RgajKۍ|Z+cDFEHA~Pi(#|E331o?wZHJ 3ޚ>מ\WBYl\Awa'`p!qM L1BԖAL'Im s+saCzG`::;HM J^FEs&R%w(+M72 ,?GVu'[-\҅-X La66>n:iI, yJ$WOs+xi,3Ļr!v؟:Q=X(2*y鴚i=`K::pk)k,J EjΕcVz9,N8[iC@ /,ƯY_Ij%IB+Nm圱4y `|eb:ú&WUhKT60t]~m+gWیf Vн_df@YoUQpj[QsQkgO_A+|?g tGW}6B{$b/PۧarH;ه驋[+JInJtCF HMlV̻r]a ^Ի&Щ'ڞa4ܜԖEr\-Jk/ȴȷ)& WMxuDŽA>ih_vDVuJld :~[{v9J})ijoi␑={Hi!Yͣje]&ѹA,vZ6Q9/`|%Jd}o+ELh>&Yѱ Ö&E`3Yז\&va=`un"uby0Y/_~A@@+.ʡ#)RVZFUCgV> +Kv3/d@LF =v3s(&'"[zbU ỸENL B|JfZiA\ߊr":F0،PuDec`ݑCk'=*9W,4\?D6 nƲ6?ƒ~DwPg/|w%n;uYo]&vRLE*ilLG7;~\|W3^{K1:?lpzHt/d őpywϋI-crd}iaWCzhK31aW.B:ʢYjU MoB=dŜJoݎ4}rH;>#JR mҠanV+5.e9nG@dW0sErOw Na"9࠮g];t}aXMZA]UFoء&β5uGht7Y oz- j膵*4. }hUj]$q-^)ggmVNm6d~OC 8$Ǟ=jn0&x B]NcY8(;Kd*).ls 3r҂{5qV>9v@VY-lNF҅Im\mL1ȟ LJeKn?|JoGQQ_K"wJ=F#+67DcNz]Zƞ}ٝ[um>TjѐxUFhQ56"'3+23Q{pOm#֮%Mfl-)a;c.:dm6ޑ \[|vrcP B4d,kduA*644MԬHjFѩ y^xk!kMdgG^eV>N5 Z/ghGM֊ _O9'fd:8l#zP#I'g{n}Jf;%\8uglƛ.|$iIkUn}G97ToѠ_S3#|3P8w4eۿ tknas~oyۅ4 gꉼuIyM3wvvGܞC3p[T`E @ȄVȳ㏈ء%F-yt,le,tw\Li!uA鄂 %n$]'ZrYU7'89̘(3Mz3E#/`4tALcCƒm[IK] RZ:&A\#tG.ӈ6uZѐ Fw3Tʨ*YmkH;$p)lB{ǖ'MJ+tWû=9w˹VlT)o݃;cBR"SA{KjA'd2kLnYl_tuٽ -re ̉u t 4|e(m|#<$^~RMta{bWuaWa|~iCbiNigtZ>:2&ճ^x?H8p8§#ՐUX5piTot;z*6`652ZҌP|T&|jOB(JÅ&kI~9WLMv p@oC'2- i{Go(SK鴕ίݨ-QoKLKzra4{3ƤQ<`a+;vD#p-sۇ*tM=oD 3_Fsd4 :G+H6[F咋EEk :E(%yOK#qin8T$>lS\cdj .,۝9od!fnD}+wZqز|ki0rLe|.+Ҿ>mq#E)=򰙇`Ey-wf$vIIJ!8Yi Kc2VMqJs]abo9SsG~ѽ|0\NXɈҤ@{VOp[ zd{$vxZd9Ӑ=ekU hxlWa`Nr=iLH&,B}t!`T?:GdQ,H.,̈́ Ypm ֤sAKg- #/M?|Jl\^SgȩpT S^5Aw".aLko)מK>+"I0t \]HܟHFgG]{5ںH7I*ȆC36`&mƺֳoD3ZD#W; Q]p;zv_|մ|ϭV~2GXb:J%OiEG̣hq_;ݰVIn xǟ[Fw=b^[P֏67B q"¹][H9G+]g1X fF;ȅ|EB+}WDrOF4XKmwd&:f:c$וR P5+z?<p -fͱ쇯F᧚iG|̦?j|eyw@`FࣸN1ɨkD}7[v@GAdbӦ:kV/ mDs~fqXw3볚D%,RRLUB=*$9*jt:fd92Ri$l^ǛmҠ~vPAGvCҗfW_KL=g(< Ë%ۍVQ6kR-a]i|ԿE-Źٌz=G%>}jWܨUE>5~OjMI iY!~~A7?E=Fgڂft/n'Np[~^C~.緯O:ojji=dA7p.Hy e )VSX4n fԆn%\4 O RpQm5M}["4lmϴc d1>j{SM0%b0+HFsu?@2\@j0'3z'R1ge)lUO`nʼnyR)B""F?:F-o$u~ifG87]?t⽸߼MO4+3ʆID!k>#p5$U6gsR^PMbħ47DOD^d*x%D .b\_J* wTBYg[H{5,>A*`jnиNa̕nmCqV\ed$m6Ζ`_<R#vw֥æYY3s-1%ϿMbdVhDYbQJ 6- ^pGcPS):uuOtzo]%;mvwwH$azYN #H'͛zSYnhݒ{fp~ꭄ=l72Dߖ,Фh-Py  I6A"[ ( BnҐ4)IOCdn{bf! Kk*~dk3%41>YϏD)dl={tj6g#Ӧ TfJj7 觯fތQA=Qu2*Uvn!a@1R_n9lXKIo}P%+;rȖ1>1snZ.g꧰xEvɰ1ז$e6LJY%NdƵzݽ6iRիy׎" b6j4IP:ρƞ+IΆM'5 ŔHAZWM|I+q͉RpBwmkG_ _RJfL7qhфSN>%JcxVE&yaRp?%)5a﹇pFӊN{̨R$#p@_+5~ +1QGs |#(YcB@6cOv]yՋr:Ӱ|}3W}RF(@٭ZmoTY#;_?p>."ר^JG9ƚgnβ ]TNBww-G+ޅcG/kִ4oEgK" d5}grt"B&$f}بTze pCi ATD-a$;d)st>NJ 9w8|W.UXZ%pOG[m1>6q9DM:pMrհҪ,$cg(":ҩX =D1"B&qZ:_YPbũ0zK AG#mw]0޼!õ!g9 ,9V"ip2Uy(Y_FnV6 3٥p*nŜuq$eX 8D` ^e3yt#tcnjSi&U"9,\sxjtd>v zwy~Τl6d܏0sgIz-2^;B4j]^ۚBgzh={ʿ+?qBi=Ac\[qHS4+u5\i}p߿ƾ+gd]ҏ$ZNՇ}$OJ7| -GrAQ}drkVrIK^5[a2;!&A7`x\} :#%[G ;G}L6 M$ Dnh5 $Cϓi{@Mlt0 3҃*7x6~ W! 00(W;i}a _i)XA)1)B?"Ipgo}U YaSu h/.MBp -|m(IF5BH5T 2; z"@D&j4kLbj՛y!gJR!} Tߞ2¥;9pMʳ2`D_A?Zi֒N_r3SkHXVHj/B,SQq܏_Y צ[E(60%DXVkfsL~PuT{D{26 hc]r!st)BL#BF[d8Veki%=$ 4p,slC;,c'L6gq. -;$7k K%Z_,-M7Ȟ†"wuGn${}8<\ǜ,HX`#E ù@bQm}eGKm+׍\I{4[ !&tӟzgxUZ. kK]1qyZUrx &%Q;PbTQ ͜LԨ!YvZqEBR,v_\Bؔȶ3?M_ô٬U ȧeiÄoswTVd4^Č"G%Kq|x,+6=i|p#TjMԸ>}C4DTF@5ZDj Sx|{__ Zf-y]OnY~A))rC&h؁n Oz"+!_Ù^  ]EOYJ Ɲ HN_ ]3bRS)4K:Թ L lީW[בhOF@J;cw#&Ư OEL,2_­^SqL33;-.$d2`흒&w}2r+UA@P{EILĩ.7(żv"wnZ3\cμ_g,oKo6~?*J>:njJB {ĉJ.bjϟ{<,Hr.gY7\ \.֡໭xpcA-$TmHТl71I ='ެWT~Jh>i]Zn:Se5BJBͳ(D8;@.^FG6(]^(0 \,Nl -9|ڈ{km"VM3hIxؼϽUHD0ٜJvYVY`A B;Z:m,{ObܖN$޵lɊ"i6L$K`r(u1#4LYl(h_=y8,WTAhZn,1ԐLtWFRЬ4NZt9Z/d=ʣ339P:;m1C̅x ]3tRMn?HJkZؠ?u2ĭEfzA/@n'2JRXB}o{puԖA|JtЖ d)k<(X7$cnU| iҔ' ÓEBxx 6/cmUv?Nf᡾ bryZǝKK TJ{>K 抷iwB{FSU.~B5Du2>D+ stx}zBV@ȉBA^vS 0RKWdt=W`P ]l|}& V(d r6V"0?"}S^eeC٥Cxh˿~ =VLPMZ֕I5bJ@pMZl ty4Zf5ko4ШN4S8JѸ ;8D"^zރMtMrQJeTu;uUOF=u2=ZwR;!lMTu@p)iTa(:VEu8[ʉ35+ UiS |epQ;ʿʱiN-U5LyndcLovYg;xEPJ.0Mۿ']r@c 9")pbZq>|_";4ܨ7,혇vzLW@Dj!B%us W#|IyF)%i w&q ]~GC;.vG' [LiTыN2pvO=_ӹ.ǐ#BXfk-mP$peGdH!g?n'+S&" )dH : WIH#h?NZ|tB[_C'"qe"ut39?p# >+ ԧv| 8#@z鎯CZ"5~N ,J)TkVc!WfY|v΃#F1OAΤ}po_B+[tn.-8Zm+8]/,~3+ ~G+: Ջ?}!d_=+Q*]dRr L7[?:e p\V#h\& 'L1zS@Mm: 2;Sv@,mBppvf㇌̜Y6 e.{:\X`RBWe?E /D ޵T8)9-[摍$ſLWTԇ%xF[o !$>,rXgVzeSr_uFCER`Pj&IU:AgCUNȺfGC6j~C~D#2;njF.c='ۡ!Fw?_IY?ʖ,;j, 譛 vjXuaB nTӒef[7RgּFhzw~̇Q_̀T3_b객yR^S~}dd}.9)[^7q\F{(,CT N  aaj8Swرx iT$WX`uȳէ~>ipTr5L ~nHC%Dҁm0g&rBzfh WhcGA  ~Il1bv%=H U|4ЎkY΢\(`)HdAn}ƳO7́OLfΝ-ÈO~E΋Rh:9{&$b,ᜋ92^uv s%64d-,b'-xzk7~ d MFjZ =i?aE"Q U:>o%nG<_c{,GosRs AuJ Jx0#ԾicY2d,~aP=e5-o \c\F6rLqNrC+19 OH%4g CDjhnN7t8/VˆK  sE>YM>Md2)Ojr5W6 3Jeh/'E[rceԨOLF-lt0l%7JA]Yz2O#ma?9m-^֟^0oj"W4ُ7qHڡ{kմp­߉-J},86vT~An,qXڿ4"tn"PKwwZXoV@&ⵠZº'zhBB }j,uܽcF{G !nr"q77 ݿ e4y,:{[GP9`{>0s>qdnerf&iOR+ueEf-),pOAvʕ?w;D/mh;+4n+3 Y M4  Vx 0y/>GPYQLKyP\b>&?=d+dɰ8Zñ'݀ݐi^-S:*M0:uW%F)FԚC0Gaᗜ:[f:1:YZZfGQQ]P5G m\gϝNԻ#n,/CkٳazЄ- Vs)\֬V4Sղ#݇F{eÁi2w!ȅ 7H㙵0%[B9߸ĮB z9`l-j;I(}r.ÍJ,:Rxi,*F,o j4=%)_zLLSo-jc|x>37&)"],^5  ]h5YT<3oO$iPj)U֖a URvnnk(R {zuH>ҭ^+m,Wv_`{|me"}m^ޏ^[B%xk ';s,#}hcʹ].HCz69Ӄf斶:bJ+Khސ:od@+vO| 6l%+9xj:M:HCԣΰݩ4%Q6*QjU}T IAadE}eqT(>1,)A|T}vɼK FQy~tas="͜bGYnQQrAgjmi* pukH!.`'-ͦiܪ#v!¢/C iJ 8&'5u$ Z13\C[ Skvom,IRΠUX͕CPwӌ_xZJ^5hE~'.qnxxewsʊ܍KXUZZ8|Ji)nXq.&)#4kߌir?;=d99?V']֜N呆zbx@MҠOȒYil[0o+ ncOF/jX4x璾BY.z~|:Z9_B1ѧ:S&Õ'7~4gM5,){])"A b&v#@LfvE{-N<[6&nzj\ڎzMKY_!9=:,R stsJNj}wG|* ƥu\eV0v*9F^,A8:Y#f#zIϱJgdnq^-Yɼg5Ĺs FylNX %LL*[f $P^&:C{|+CH 3> zI5faQt9@A?KaٰI]H@B'?Uj ph0A9ERYdKM3}ts>> GI!cURVQpwi=c Ja0VL2*KsJE{Z;ǵNވԸ{z!?0(md/{+)- j5ǎ?%}1Lx5E:+Pg _ koY%&bh$d]vqőQZN.y#|=WjXKWhzk 'ZD cIչ༈G?܎D+JjVb ]Y[kW;d|UF\\#PXNmuAcc ,ӯG6&,r(Hďd@[BCr0;cD&zF4܍O~nj TYz+ņM!O1ޢۉvÿ\8y93ʙi"Jޔ=XwQDhq9<~.NMsÝT5.g4h~?sEr7ɮ@Gr\ F/\-ozHvOȠi8H Tfƀi1#(.0=GwMg "?{&MJժ-F"4oK EȀX{2>mfݔZr5*k+ ΞK!9 tj*Hr|$yvDPt4C,mjpp͆9CA&2ٹoN 6[NxR(hzsVi&U&]ZǜY-?U!*9DF669\hOc%tYycXc[v)sl?ߛ}jFuГ(DmƆl,qd}"59V[nV޷:B,dG TXXʆl0fQJSv}濭MP\mlREIGjR#OPU0njd0YR~?YDRTZNN]ڭj xk2 z̕ |*w|'٣wK QKQQt9/ B4!:DǤZŁkJmD|jO]5 ߔ(GO {B_^=g82 \'aWmV:CU `J*ޕx}(z#U+Dh?MAVyR5zJא6Gn:?!xܜ۪~&_}_lKLn?<9I0̵liDee!A9`qvjVuId F/y{地u;DGz>J8:s5v:Hy&k˽%`sť&Ae̙ULmBߞ^DidҒgX&c\Q/H0g:-1fv{zr&0tin|>%mi#DjYtb(D0[rwEp5rS2< o pz&ʣ)FsDC[zR?fHi'ۛ7k5ALGN˦r"4cZfȵaa2}{C. 벅 W7>$b CQUZf" |!Ó-똞e}yy=>QjO"Y{'r3,kp|()t6Tp#͙I9Bi]mouNvH<yY͉=IK.0?U+4Z7n*M@'NjE@ u9hNfOؤCN!/C-GJab̵{[ӌ1z@@q +=SfSZd!C lPG c3GoU˚ǵ0fXt PD 'sͤꋉWF>9EGn!qjU1 &6⩇(sƴ?LVBݡjO=n@wjg5Y̞^`Mg0T2ÒhqB&9ݒWu=vdoIz[]3E϶(B_RƬ-jOeZ˾] OQS{bH\W1,,7ʴ~߮lt ZFo:RiY.[j !~9gR8ɦ|ՙHdTM%Ǡ[H;{ʋ|]ٙ(7Tr]jN |1M*55Ç3NV m);џt#ev9~3p $P=3o˿e[MeZ[GP?ًK O6"_[ @S]OWwN)l5Dh?AV!&z҆vj`~OI_{5+}a72>f 4a„[#5"[kaF2u:E: 5NE!K0>4 ozv$>\rg'ͷS洦5*Ծ҉RR,G&\Jo􀤸C),cs kI"4\2 Sg6oMnShIV7X׷jxHm~5*Su?{%Q guqF%`:H F&+VI܇`j??3܄(:#MOCsZ5j$&h>vYKn?@H`o l&; 8][ג/Ϧ/!%`E͢"~izPihuvLq}@ǔi_YۿAi c.reCv,cBT@~|NųMZ.FI-vJI䣊 `7`o="XvZY'8%@k[LۭoT`[`7-HM=j`=K>P ҄+AʘDq 18r^bM0} $C{G)wMH:JI=:YK]h0~|`n+Tc0 j|UՃ6OAa*4޺=Rॴ.3m -Xl/CǐNR~N9ȃW < 8rJ֐rFSܶ|fc#QOnS@ۓ 3CJj8@/ƶ|~Fԫ.2obU+:%/+K}{NPLs=vX^,~hH3B.im}Q`hl(3SP?-2Sѩ4>i6&mw RZsp g(a>rlyl6, 6g8#Ǚ'Η`d? oAZ&C !sr|$|(5%HNOU.-t<٥.G,ɂO H5L;@9 ˭TdsQD*(M\jhfm"3 m<"|K&˄jT.A$i.*7zAPmMcgaŠh>s<8".|&_ 8=M*"'r*F=MUd&}8 zM 룾 xMBb6|8R4I"ne8ClGZ[+V} j^U?VAfpna*X#2;Gue;Cc9)]PN83Gr^l{qt$C66,9$ ďv$)p KCv >cu ^\^li&ipo=;ܾ%^n.c};\)}?b$MQ=ynU4 -UW9i:A ,w|mI*?$ V}jK5ӧ& )ѤwM &fXv&>JVQ=M~dq}w'ho=KOX/h.MmFɶk*>e-LLvn>t.͚W?OЫMAq՜* 5nh>RVu\I:l^z:8j):{ws5~wBޢ9JP^(ծl=HF~ 4HOӔv5xlc-l~-=iyrm_JN3O)7[0ewނ AiM"s,f֫Rf$M C\˿>8{zXP-pݝh̢Z$ťZLF]mEUpףɝ`Rf4l}r:XU&dط톚t aF-3N9˿үuާr&Ú&ˋ|;.׊hf/fC׶3Tȡ^[=tkF-/lnL~v:%݃8kbJ8Q]f)osGɕs _ltShV-J|,/o̜(}RW|@뚷L`lEnߙ4`x1pOkd=hʨ?}iM1oV!'3&! pFFB&6fS#?a8!ůZ+\d0Mq3M= ^RʤL&j4 WխTCr߬ND݊jmC dfƋ!,>zY.&p䠇kC)}{?ݐ=6d>XIf\mJ=Ͻ Ѧ%\y؉ϭWoI&W՜3Npڋvݲ b=*MPkl AXΆ4ZZNp ȧ ea n6,|.5Yզ+yxNK!|G:˂2Rv+5V37!Oj iC[zO*2O#]kÂfz;$jI;^G1ȯ2`IZѮl#&t.1y[sۅ 5lNC9]ޣ=,K'C.4wo)fBb~+牮&ˆa5}[%uן$R;6;I-xu * x{qtt=L-?sK CE bd g┦7 ^Bz&j2}E;xϋ|ra9+_z/O&32̳Gc0,V€M;0(\@[=~m4!wAtctR[vՀ[|rEwx|`DavƦL}у)2Po0d;؏49m#%.$[I+ܪ+_V9y! O@v.$m?vKgL58.+⅘)?,I˳>G ?+m:ŜJ{,~ #ta1V>WRt nw)/`1}yU}]@V=Hh#iM}dPpuR26i8 !qnfeNr3[7_'/@ozϡ19[&-?6JHԣ3PINyf%^f( -=ɖE؃mc_b;Fh$S/٫ŒʣO3JB= wxp,m0kj畽&6j~ y:Ru׎:̠Mh?lPW2$NIQ2IR#L'x¾˹jR-ِ$=.u~qh׭}ul0:_ ftO!sCOz.y\]X cbIvIl.VU+[{ʟs Kp{DC yfک3H>-C*,3oFVr;>~_+Pr.Qacgi0+x[/Hn^%;>#`CF#;4caAqow 8O$l!$8TqҞ63]{T_u$% ǡ0[j`C-l哘]nEhʍ\WmfISЯtִU.C4 s/F~*)u!-G,Ν|yWP,Fv֢^5kw۝ڲZV&)_7vN٬UFjz?4(?D{Ӈ?_xV_mFV&cp\kʕRގƟ7 MOh7`Z:#H#+G`ؑ%W̧D`k1f&]Xwc4tC AJNJw$>9ca4IOIfRNŖk:&7 O!:WEǝ90Bd A_͆j4*h@g..G:k>PCub'{oco9vN q74N>)e=N[Lּnxb 邋Ha69e DVcyprB?$"Wy j7ܶx8dRiI_N;~}.}#fCoIt$VE |ւv}/zrXv/j\@ٹ+Z*롉✼TkVcQPRth-L 7M}t{Ì0c b[*p29Ey~thaY>f$Vh_θ!J=̍<`vD֌9+7\S!a$2L;z˗+ǰ ppڛ/ )~)F}.M5nr}'Bɰ"\|9ǪZf"*3G&M)L*.4vbx+u9tCrRH ҤQI]bIfڠQ5<&COC&?NJ܀e@#]P:ɭjMw#mF#Բq•aY㴌وe\ힾw1Lb\1LK̊%pr'2] |VYI| tZ5wc"{~c$qo`C0ķw?xI^l| қrE,+NVȔeL(c%8 r/;f<nxyRT^ p]tD = W!"A<$R3Gu\A R64gEޘl5>:9 q烓 (3Ez]JÔn@:ooܤ,΃lJ "NlƏ0srԻIYs.xr6ctvl;e5*4E]{g^ypueB4q/֧dI[2 >9.E [+pL­(b^w DD"LSixR`DL?d 76 "H%,Lb)Ի*E2!S;^xXxd*}p  clqy@Ac:N 87 DTN[n~nmB3a']EAUɱd$p$,[E^^gN6uزVZp? m+/s|R 5'c+d_ǏpD$YL_PZ+~Y4]/&< l[dBy!'HbsdxR/˧ ,}o23Cf}؈8]MgRf4ۊ#Ńs:΁c)Ł(Z|f\1 /C%^M8|89k}}IƆ -zklc1ק}7I4=F}V޶ L$ HƟ }q:y} וLP.rG,y#^MtޜHXBJImŊri> ~yQf<>K,tAOR5f/ X,=|NA_B]Q#\FT-{c1h!]1 WG\ *USrE3r^Ѹ WmI찼Nޞ?j^7f,KEI8NpD(2˯瘴Zzr4 炠z@Gid,B^z'(b[Nd.fnlhqYE>V+n/FO:_,ᚉB;@:,_P^>C83팃wFDTߟP sѭ9OL7ŖzO/ZWplTR{[: wp+'tv4R(Ú^fzy$H{nT,oHHsqm%:(s@H?:H}epzd+.ӻN4rExmzel9$&g̩heЛ 8pd.px㩯,7J/еȡ?@eWd>tUMDV;Pް d8]jRƥb6siIW8#ѱ>os`T + k)`M#k/xv6x1'^N'+tRC=ZICl.prKӚ іS̼@bpZ~E 9dg@RJ%%=?@l@y0: +y`/ zOP&YH>zH*}Jb:ҸO>ѡWΖo8?sbz_JN} Z&<) [Ĭc  Àp9.8P$[}ٓX|0ZAJz2K >BRܨW$o69AdJnoUrlU:Yjv yaG6O$mqd.Ӏ}g'kO&H ox2&!F2m@?bdf~Qjܙ $ܾ}3t>1^{yo@1]l<-VT5wc!*R2UN|Vt4ms 3 iX+b<m&dNxH^ȑIS/ӌ\!uKǀY~ F+p ni18`Bzuq0xsB QG)p{'9=N%%)?-XKo#˼on`|m=؟ˇz')+.9X++Ju}/1x5Grԏ cadsެe~CΚt?s$~Ծ?)>:9 ?/OtIjOX;@b+x*6M-R6 8D&G)np!2at8N1f7sC5ðafz@l.f7HG}!AX0!ogectRʛ %s39ͤ@ˍx4DQ*7, Φ7>$7 *g9K:@a'IG=,2W6C‌fMSŇfҔ^ @s{3r6v#Ush?`m ;K0UW(}8l~p8Pֹ-B;kK÷ wfTuvt[ mLGj0׉.N㱪6;:sm(JO"}EWaSh{4}upVwS8dz&][Qpj›`0 :0X['pjzR8i.Ҧ7He ;R1Iݧ gF(N{F"|Hc88wz%΂gˈ}jt>z 0`\IoIkM%CO[W\?P;{ÛLf F4:yr~W@~w<^\~vc7=x|Q]fZ5+|W<йpQD?|#:)x>^kxe'K0+ 0xAK^\/UW~/֚Vح7%xx!mz>n8BCHͰj3Py */ X{;z/ 7] X d/-Q[2.7(u w0Q OJ;?i2% uʌ*/d'`=iW-D&U"dt$[Ԡ +)6\ gto'.$a߈Ζ$[[2 SZ\byB 㛘xuGP#L[p¦q54񄋎~0;2P#l7:96h"&V"@'=_#s? @_M7@*1%a]M!3!$⊆9CG,8"$55!T6Ϲ{϶ZdSm6c"YC܊#) \s s:xĬÏ%o<9{w"`bR2p Pq &{q{$#P+N 55N,R3Rt^PWm( 8ё$:sr{oQGb@"'P>} o0XV(8fa5|)+@w1?b2i!b/EQC^;ÿ/DhӛP?.N艽a iOPdoq!1Ó2xX+0SYŶؚP%In|| +o2=-4{a']i|'+r^!1I =2[OyoȪ2k{ח 4=y0X)!dQm7I\fTxJ|Ozd򷞹T`sz}8yKf\#KѦ\.JrYzc(9H#T~;Mɏ]n[+G~2:@''0TQSc}Dpu\?-"@܌r?|BP ^RA(7~pĽsn )Ƶ采j3ᥴn! 7?@z:- _|_H&wHgd5خ):8 PydvK8SǩI༌k % F6RjMalDk%6{:c|VfGy <\+.󀱍Gin{?ЋAq*0/O}v׿*o۵´G !1&RNcG4ϯ_0"1ߔu"xʻe഼ Y<fIT=G=9uG:$釧-=y4ߠDfeCz[, PGa]ybeތÎ}YY}ϨT'dqI|?9a{3#@xQx|MxD׳HHL«ֵ~3LKSvsP D_=߾:'RQBNTz2އ\ZʢI\[ƛ~EP8vSN#kyLwsG6~?9+S&s˜K6‰i:Q8 VbɊ=FMyXngШ5WdCj]Ġ9cmn9˷G:n3W8@f 66:4R+-㓅1hU+7Fެc!ؐEK3͉G8s"#?HH= <Ր߀hq,>$хʘ8#*;Y\񯥓ޘIѢƖdK#.~%q4Z[jE1-6ZB9f_:%gLGP05F 7޳ox)(ƁAbV̠3CZhLe'=iA*tX# ^j24Ԝ,2 p !caw.GVȤtkdq ~?y)$>FIvuFYfPPYQ; =S#1 <%p_1o>e~I'oۖ|a bv0*й 3iPPW3sfiWC?#Cd\Au֘'9^"xÀh ?"OO?V~dUfe0y\[w<0 S%Si;HF#3Fpߟ&| G L3<~ֿUg{C8zj 7:SDFNP䇑bdf4xs֎Uف6Kϸ$~,M.%6KFqEt * 8 3d%fo=r NJ g?cfo_4=pF<.!ޒ+ <ވ3< $zޘHj6oKI#|3x+gRa?'aYbZ"W9}>q~J;AZΔG-_^%xH]# V>9J6ՙDhq:Ibb9ψ3,?Y%e&lEyv Ng w9ΏQjS>1P2$YF׿)0=@/ݹٌǿƀLy{]JJ]U2~*IH`vZkHȸteHNɠL*1+#?]|9M[:~c.H辠dk5%['(N[lAL3yiʉ<$(8ר+?10؀pak ?9#.KȡxكjAi4Yz'q~I .1ADJ,~ u@V0ZW >ra}IABzNJ` /UHS7R^ G ozRt|4LVmf+uahGP z7ֺr!Ey [yt  57k?c7Pku*bM|0;ghBwVY:<ˑ1C٪E%/4hvw3 { 8x<=99R\ JoolRJ&Rx;(kzA^#$qd]V߿\oi"sLYJ~DS@SW<@ Ygw%&cH46] 8 KzA7cV/P/Ji֟~u7f}x (Z^#`F P\h>1_a?&chcFmAڋ_Ж&wn?vi5]AT!ŪMdJ]ӜFc=ψ̠X=O#م K<*YԄk΍_RS%=!l'hxs}?y+SXRgR J\bz >jfntwV,!ʂM | ~5IHG;/ n۾ިk8:PY"K鹁C{Ťw@~{2ȗkOKVڕEi>c}r:':2ga}h=sJO(uҪO6_}{W_[0<5uDb])i,SbxlY5jOV]Z^Q;T-A*&6yH85xwMa3 `Z&° :涶(L۵`Me0bhӑN1 M?dw~gR.$4ͷY~7~1wsgYfl1fGR ZYX+Qchi@8HDH 6Wb1@b]"1e;qq{ vp˲Q=Lv<ɉ`/p$`Y Gf&)K83DY/@y4xHPrW nZ][q\wOFmɠ+`I-4DYiZk^ v;L!-Þ6ScCp$SBsؿi"N_DF H Zzgէj7k55 nd_;~"fo!!'3 uArT{c)AcGSzIOkϝQf46?/i-q׻?nﺾ{dVINJ43{!N0G<|[Ssy|t*-8>y8>'[` $듳?1vSw!;%7]V~-mkE mi7ыYֵR<¾*,//]ǼI/Ɗ3]=SzccRwE3ڲ@aO  8R7:M]~>?w 1xj )*꠫ZQtyC2܉"lYC(L`(224x!3fzyoZ06OZ\"J;l"߼h^_ZXkA_}/N/17yL v~x v~`c-7u3rLըȖ}LD>ѹ VqC-R_ӆ64 K]_/,[MR_WK;益K}ZCg/yZm66^3_!" 7|0(9ch^nr80wV(4aS<0+zϴ?̲m5_w A[zovG'9Hż$AKhwa9g;qԙ"N0LOРb3MsϢ~=8g4<7 ZE] (A:rBMSߙX-Hj$;'Y7y7|λq_LV+x\ B?i3%^OEH_*e/=8﹕Ê 35N  az@',= +ԋ̿,ki!}#&=l4[$~+K<2v P'v.TX`֦x{vwoo4X<"94jٍ.|`h-=,i> hȺ4xpp x:W{LKc1gkkmsoc/{\ny}U?eώ[gJ׿ҿ&pO^C`%|hۨ=Nvv{MBȷ~Ϧ,ق@&HΊ! δ9 o2ΕwZuMOm/ !e;Vv \RE;hjh [@1 y6Z?fXj/JJ