summaryrefslogtreecommitdiff
path: root/scripts/send-error-report
blob: c99d3876d7bc4220936c2084dd8887758c75e9a8 (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env python

# Sends an error report (if the report-error class was enabled) to a remote server.
#
# Copyright (C) 2013 Intel Corporation
# Author: Andreea Proca <andreea.b.proca@intel.com>



import httplib, urllib, os, sys, json, base64
from urllib2 import _parse_proxy as parseproxy


def handle_connection(server, data):
    params = urllib.urlencode({'data': data})
    headers = {"Content-type": "application/json"}
    proxyrequired = False
    if os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"):
        proxyrequired = True
        # we need to check that the server isn't a local one, as in no_proxy
        try:
            temp = httplib.HTTPConnection(server, strict=True, timeout=5)
            temp.request("GET", "/Errors/")
            tempres = temp.getresponse()
            if tempres.status == 200:
                proxyrequired = False
            temp.close()
        except:
            pass

    if proxyrequired:
        proxy = parseproxy(os.environ.get("http_proxy") or os.environ.get("HTTP_PROXY"))
        if proxy[1] and proxy[2]:
            auth = base64.encodestring("%s:%s" % (proxy[1], proxy[2]))
            headers["Authorization"] = "Basic %s" % auth
        conn = httplib.HTTPConnection(proxy[3])
        conn.request("POST", "http://%s/ClientPost/" % server, params, headers)
    else:
        conn = httplib.HTTPConnection(server)
        conn.request("POST", "/ClientPost/", params, headers)

    return conn


def sendData(json_file, server):

    if os.path.isfile(json_file):

        home = os.path.expanduser("~")
        userfile = os.path.join(home, ".oe-send-error")
        if os.path.isfile(userfile):
            with open(userfile) as g:
                username = g.readline()
                email = g.readline()
        else:
            print("Please enter your name and your email (optionally), they'll be saved in the file you send.")
            username = raw_input("Name: ")
            email = raw_input("E-mail (not required): ")
            if len(username) > 0 and len(username) < 50:
                with open(userfile, "w") as g:
                    g.write(username + "\n")
                    g.write(email + "\n")
            else:
                print("Invalid inputs, try again.")
                return

        with open(json_file) as f:
            data = f.read()

        try:
            jsondata = json.loads(data)
            jsondata['username'] = username.strip()
            jsondata['email'] = email.strip()
            data = json.dumps(jsondata, indent=4, sort_keys=True)
        except:
            print("Invalid json data")
            return

        try:
            conn = handle_connection(server, data)
            response = conn.getresponse()
            print response.status, response.reason
            res = response.read()
            if response.status == 200:
                print(res)
            else:
                print("There was a problem submiting your data, response written in %s.response.html" % json_file)
                with open("%s.response.html" % json_file, "w") as f:
                    f.write(res)
            conn.close()
        except Exception as e:
                print("Server connection failed: %s" % e)

    else:
        print("No data file found.")


if __name__ == '__main__':
    print ("\nSends an error report (if the report-error class was enabled) to a remote server.")
    print("\nThis scripts sends the contents of the error to a public upstream server.")
    print("\nPlease remove any identifying information before sending.")
    if len(sys.argv) < 2:
        print("\nUsage: send-error-report <error_fileName> [server]")
        print("\nIf this is the first when sending a report you'll be asked for your name and optionally your email address.")
        print("They will be associated with your report.\n")

    elif len(sys.argv) == 3:
        sendData(sys.argv[1], sys.argv[2])
    else:
        sendData(sys.argv[1], "errors.yoctoproject.org")
%*,(E Ծ}hz>믣HڧWl ݍ 4-Gh7_Qmgv @啈UWI1B!!a'c~?7/d4gvzy>'ްO^^tw0,<M~8ĥx!ɧVb;NVzUKdbfVGkȀ9+ ]z+hq]߮%ɰUt=1M>5u2۞Жer11 U]Ϫ'O]Q 鰌0Rs*S;].W݄mW)O5Z`L ,g-ݵU4f /qrc[ڜ4:0jv{d[5I_8ZRV`;1]/ZUw08WǏga"1ACŘ|N=F`VL`"U@7 8`9U+g=+>Mh-QAUhSFpԷqjIf˱woy6ULoy,Hr3Zh~y (5' QJb(Iܳ#5ӊS"6J* u7\RXEg5cl>+˹b(͓)ۊG54)(M/5JUQ!stdU>EO?'}*QHBu*;BltpZ_|7&ƚe}Fy~q'mTEځH"a>nJ;+`" ~Y>EgaP 抌SGٿ5x^MuYQ>gۣGgo#mI,!E<tcjXDU_ա}S@q U ԟ^.WWvK;")vIt"j@Ih(}/(U]U$wj* _2Lc5hэz{Р?'ʬ*rI3̫?OC)?,bɢ")Fɠ7@-(l˖*ke~ތY) >hث kH'f ͯ0lZ~Ʉ?]{mf1I0;a9 L64ϕ~,8ZB`=}VvOY `WE\ZZf|8!=ⲙ),VzL0EFZ ɳvg=Ԓr`b}5tgՋ GP59%i"yE $J臍ߟL^HRnЃO ^s g $;cEs~Y 1~'f4›e1zBZ>2Sd0λa8Ky21c1u%/JZ7Z+)C |u"@O5fe2MKGN`iUԞK^tCoQr* hT&5?,7ʮԶiw;Ps 9qf4@0FsLE5KfLarMpy?`bEfvHkI PC3 f|RMx!I 9l|$ qrhIee/M&:4E$xTq;QnۣFB2XAY_+|AܨĄ'-5 `>c0a-O,?w '/79>BbbVOrfXssy#ufP=A3u2AŮܠ& pzr4.++I+MTB$ƦTVZ`h#X6Bg!24_Q*9 θvdV;t68 OP/ZQX;q}b'#QE]2xl{tpqCx# l؜ԡGnxƧ(K|H hz$xKxR>ʟoߝVc4',2w%F%ůvT;mcJa z7buwLx2kM|tWEl$n<>e=b{T_ހ5!Ai#[ 4?ف*P=b ZH1Ŀ RCsey4!>!.!>##rWֿa?Gr!|?=/skUO*I267~_(}9f9D( b\TgWj| *>'&kex8 y pn7M*~V!`"Cq띎@oNjOfXd_(Hܧp !Mq1]4sAzUAh #p>$J?9/ C@d8YeGFq(؝[3NF#*ܵXw\cl@yU[1WxZ}$zyx?t36iL~ WҜ&mvFQ߮|}baY(~t=}0*'L3xaC_!>Nko;̈́=qZ`pϾjp#qDkop4;:1$a3:#9qRW]o2V}R -xQ,Y0USgC"'DXh">c U$ٜ{˓ŜWT Rc9FaefX zv톹jkee E,YeR c9ܦq|`CVbc؆ky6I;\.,=9{-Ny3;۬yǶT ?@)R7&V!"ɟs[39ړX;@EGAVJ![# Bc` qK]SԖszǨt@"سk0 ~|Ntw۲(P"JX>G~]Ka@v|sfCv6(Ť˓?Szzk"OHRX| Si6)jmJf6ӆ(xYP4_vtTD[rmKRvzX!ytksP䣔ʋ2ҥĒ^lɗS-$YŇ1BC:Hy_J?k uoA 7d_J׭eȁBA١FKTKg _ھ"6 3^ h׶PZu3I&;ESsT;띲(Ql' .6 kiߏJql&(O59QϠ؊?1t箙q{6-8a@{:kUM}O(&qӻV*TGE?#/֢GYxp F`1WAԩiRdӪ/FOa1J,ae32UzIIÔvr7y%:ZIW'/g6n ouIjf1{{NMu*U-F ČZ"_mFj(Lx ix4o;jv YU|ݜWZѧch'Þ&9ݣXmګֺL֕;8|pN[Z 6*:94|]Gۺq+I3 SljIi45}N tgFuUOаm5sgKHeU;VhaRԂECam>&P KՎC511 RRD#HLK!PI$U1LK1SHTPUW8AIDERk0)ZBB*(b"Bb *!}bz]!bHBbD i$ );&DbetL):8A4+Zm1sqZ:tfO~u[&Dm^^K;[F<{awUjGWt5(E(;xLC}IHpbNƑ ;ej3A-޽K FM.OTT- _.NB!AnrDEWz\p" ;ͶUlyBH$uM8˩7ȎVd3~ ƍ~"U%$3(/k|Y ^ 1R;ZcK<$g$lZ?sv%b,5 WmE]~__dL8\S^'b/Ξ0ĝi=omz;h6XPhm}Dx|XLǝO,Xm}68v^(^|el\/ _.X29Tr 8Pn)X)֗"  ⅆ`y9LvDUU֦kp>,{k{uOHbjj|;`Md\\OI$=.tYUemR${f%)iۻ,c$-Jr lsU&nh!iUjaHNFC*̘+צ:oNl{>\RF%ߣbr#[[Tw)ȺT,Xx$,kK<ˋU+j59y(NNU悙m(.cwjvfvջ4}&8d@~\J6NKrw;#ro;<úVz()=3&>ߍ?Koha GnQT89ʪ3LujAA3hV4z2(9>M{ d5Dpz@=֣,6U!:\ۮ}65aq wkwWDූ}aLwFt;Ch3]k~GJQEaGpDh~0 J5?fU{h%xTts97ȩ#,q͞ϫ'C9!or0G/ g6õݫeFYanl3h8 y{Z9>pqQu1L o'9K<θфeh:-O_N`xtuN;jq12+8gE'UKēH{hWe)k4&VNiS;NjFwu<]D);E3f5v$/4z'/n/]~}`$>voYٳe\ڨ\q [vމW)zY\~l`B4xaEFʸX[>PRp_&-6ϲmUqIFFI=S:"鑊NBG{S1%HAhMB.>"'nYd-8%UBB3Ӏ.@P"Ň]g:o$n*1^Ut"byP[G*OU˜Ɏ1^"q7ՑB;,E\U;NN^ɂ 8m$$ȼݜ]- BtUڊk>k*meF-O1|MvƏo .:.84>+;Aa,;w_GI:n}l\|5זb$.[y #;yFfC6{3t)y7#?LFaC{1BE÷L_nJ&DS09*]C_>nzg:d-NY=USwKp^u+ux_d*PU5uYGd DCZn4(ֲ%<͖yU5UjY*v >ed,gqhEo,ݎ&<VXǕ C(rD6FaڋīkRT6H*PeonuBf);-}񨍯xܔp̚9ǃQgəc1pB ċs_P&nYΖtvxt,n|L1VМ/R D:W}bE++XwO=4顥0CfnT -7taUU>j'_F(xv0ˏcco͆**OUb7gn$h~֬*]Æ+YlQ'gBhJ:o;<ɒn!n0y+ƝیNQE;'NiM$gjݯ0J}*M7M簾uJ'A܂6%9'h>yW|nkw9*O; u†Jo꼹N꧇q;  Jȴ4INɪ-AeE~)&>ũ ,i$ MJnt(a%0H :?yZ:}ϵk^? _ԧhwʎE'yqI6-1~kU!{kA"e9V囅5PB, Dy$^yAd3N׹S ,䖧a_ЉL)wkw񵘖> e,f{ 3{T!|?^M1L%2A%8Ӥk=2xkޱfqߊaF{K }l7W"CNz㿁Ml^nvɾ/~k-Vdhs2`{L [=鮎[wz9I+'|ksyY6>;\'w179/v᰽tEW)hOՋ`pkEzGo]iȔcu*A{Xd2ar4~˚t&̦ؖmLVGv%pDYB>u Zٴ&Hb8{x3FB&j3Eu&.!Y!xju:0͚/s͢X^&1( BpBY)Z)Dy!{v-vz.fC P}G}yvIv;F%́kŔ6 3$!7񶫞('ڛB̚"e6z-meD'uќ\aӒYO,nTZ3pt%M/;1)-I&fWV(uI۰C1̊q?tU[zE൓.C:47+"U#cdx[6硲xnEq.ǮɧE 7A ]Kp1Uxε+{ߤ6#ڹʎqwlk }6x~ƕs6Ҥe^n]bNFwxB? ɣmmyRKWedQUί]g6dé(6@6 {!*[" 9ͫTcKkjݢ[Ԋ6Y%kL:{QT#ݳ9g17hF|$h,9aN2y|sI)Co$jeT\}Te6N\D9)(Cޏ܁b p _(fd{z.Ov<:H40`9O43E}Il :o63Pz0 3os;澉 ƅn3biedqv`J[k (Ur<2q6"X 3\`jDˢW&|Lcbm㨪Ey!zcm=DZ7IVd9!ЌG0 9&Oڪ#k<>kA >35GP9`/?>׶JI0SB}n&b A\&2i%kØpFf8qn Ϻ:/o_t 8jxYj5% ^U".X拔%0 [}U;VocZ__YŭSUhy~df4KE2OxT6:\:XE] dubQ)R `?JP`e J *LT_,D031r,Շ?sn=s*>Al tF8ηjq۰P[.wضېg5åMhh;-! 4o\Qb-$6S .C5ڠ&s;xˍm`&&٨㦞w |8(#$i;7c{ϛM;)kt2+D97 ߾XZBcaNb=IC^]mze s|zG]{gW$GdM^񮌆n55'l4kv%m `y ^ٳD-NBЧ:ӵ՚Ukې9BRQ#@2={Fn[ësYy;hiQSri! cg!nKwT]K[{>F5\.X {)i)أ^עsh8*LkM_ɽ+Uy_Ceu)lWI6'OlƑp]ydgQ)߯\쇎0.4ρU# ;Wkc h|=<C1eZސ+^Y2jkC%Iq{$8LKVί)`7v6gya`Ԋ˕>[!H@TD4Ci`tthlb۰b9YÖ>GKҎQ=Xc1JpEtfuILˁ2M(kwtx ve8PMu޷X1RAn0$)YJB~ IQVe:"ff$[qp$i + 4F̼% _.99 v߅=b,cAT!._Al Zs)mAC MUTln<%lV4\ߚT4̴15*)X![**>w3/2'"݆褲 9◭xG'܂!R JG =R(fB1\Vy`LRmF&ffV=we/jىxO,qʾϺz){!Y=-b`#{N{#&@k-W1}mSB=|Q0: ?#͸'fƑXrL9g<|R9|]7ۭ㯿$8TF7-ܿ[hՃ;rvqs랮i~n~-զigIl hIp5-tmmLOjc\oLw9y-.G##dz,)p()( 8)}V ?y?㌦*Gpg6PQF[mQE(l8^.˺f<{aרiLTlڥ4MiOŎ՟^ z=HvCgP^́!wߦ=6(0Ef}M~R1..v[ D4Vȫ7l\ӑ戒߫є}Y.\uy$Vͫ[#G̦q9`ğ>\gn1顔ݎsx"vu[{_]]p/ӖgQO\>DB)$uN̻Qdg4E{`?ni~qYK&G%slS^1 Ng˼aXĪwMk-LIά9&yyul9798MTɫnu_SlN bj>L(re}..$=-5sYNvjnOGu4ezz`4-`޸6/^W|~79\!э1u-6bUTadTflO=tmcl ZPRawRf{9%=g=T^WYդՍVۄTN߇5MY~xOp =z[ETU fڡA;%eA)M=2u﬈?^QbT FOJ )/jc՞e|Pʊ4ՆEJaO E4JGV*QEJY+~8_ƣW✠ghO6O`_FkaypETDE=Z!u e,KX7c & 9hrHywQevrWAO'p9NpN43D˼*r"{Pύ+lm8=kPAhƞ(΋N8zIfBg =DIq4VxG7$cV2f'xmp&5uV*χ5vS܆?șS-"RuWnaJf׊B [?t&"H!v-]7M8"IG+`]ʴ {HNٔg݌V<޾-4f.B@Yx.xƟGXN,F3A$B8dS*eblf_rlI |.-(QUkθXu&_n+j+f Buo,k>;z2tp*KLEEz5q,I%#Ǖ#i5С܏Gs[ iTđH>fb2h\uM(Z͙B q Z 9xwPnjn[dMHJ1+p^v䭸|T\Kک Rt_]bR)r[ާ g϶NQz! |{Ti?L|<'7hsSNuU<](yUf? b`[I U;nSa"m"}߈PMO[%Zys4yQ;E';^Lbk.]HW G_~+rػ:-QM_:Ľ=Y4hxz{-vXzm Ngꁣ'"(bkFXQcMFOg4uf.wފ`e/`->L#v7f*5-'br{bWEEޫE4<)P>z#jr̅q&v©ۆV?GfS3]6`,/>'͎ܜ9\0դL%M/߃5zO&REO8먆%2hн,_"a, Œ{FtD[gt!3j¿̂.b&?j>9qc{X|ើI]TQuEЦ+j#eP9>3T칱{ϻ3r?os&qUXiM>2se]1 ikĆg?irkė;+B0y-+'ygCv<}L%Ѣ3K=>h[28C*a_]A唬 ۭnD OL(c5 Xף}ުK(2TrFuPxݟqa)hJ˽~ߛA3SGh5#؉L}K~篪b|WLO~`ۿg"خ4rolŵJ2E,\[_ 3;:tR<EӺD#<~ec$ÄvQ=xz]wf2~_jԔoߖT.ߍ!̆Lam gG80E;G߶bvٓA- jSMKBqѴYm#>D]\HDhqRk@(KM Ζ$B8z5s2h`wA+bRi&y1sE7TlWǼl95 5 &B2ͭ=HꞼ;c{.r/ y(ZFYCNj ϡFstP竞KM=t-hb)'taZ\q@^lMi3Q|֕nV;tӛK4ʛ@$*̋XJ0{?SLQ" ;>;_L22j/'mij[wCeCöb$=k]*(Y(}+mVBQ\sҐvrkG`gЬ#q(rH n . 29$8A>玢I߭XºK afT*0$ ZJrvIҐSs>ds* eqz9:U56b%2yLI0$7F5J>c9ޖr/VLȷYlQQH}1'QQ(P:$tXvKNoOSt 9㝑w*K(<`ICP,F~ۍU;;s, }7f<(]/Kh},'Q}?.^Khۏ}3?b諆bUדaѮ5૶f4M(l(&>/n,{uۻƕq,Q=Stx0$Clؚ8BM\ mۨs\IŸx[ԔFmWf-^]juV4nPADv@Ǣ57e:JV+0 y#XQ,z[TEvV&~cL !oIL~.8w ~_T?=o8{v֋(ש\/5b6%焀(ale= L+d m p9e~.AW(BJ+>eGJl4ґޖl C::a-Lwb>9r #Cn~7ܿ>j0 ,3V57igm{ y~1˓%(i#FpX)ω/:#-(I7!둍87rsZ2;w qic6 .Hn2/Us7㙜7I3^^Ӝ\eM~vtcgѲYY<#A6zV7y5M8&1v.(tD`J^xl>׹ƪE4Vkzϥ/Ql㊰ڿ y3d&v*RK\3`::;-1T^]AB1Y]s|ݜg7Uz<ػdk;Ӣpc[9OꤌʼnhӭkZwu6Ӛ \o2>MSbaJ< 2`Q_mdvhZB_4ށztq }Jq4"X]¸zTCb:u Ej(bN龮_(l@11V.hƝǾtDۥMIVjaMF<\NuB'º!_*Zw%{Øo(^;@|oFx4a"-ʈ4OD̜E ylF"t5EPL" ? qkKtq8n+ǟifL †`Z,R°9L2]DOG5biF*X&vnuEرyeZ[$=zQA-"TSM$Z!fNol6suC S5!g8YFcVb94Z[ (Ϳؒ"YOQvS;UI,/5I[ʢDN2*?Q3T,!#s͠[ 痔(o8=:xeEg{gGL9DAbfEpCMgkweOۿޫޜQ:eb^96xύJ`hEdY/~5{F()iBQ\t]WS< ew+"^x ­b綩`pvVU3mP;* B1VCM<ϔHi{p*/DWN?N)٤X;NhC]S[-F\lC\۞44W#L"]WCz쿂 ͕VIFLkP~{` Spj&eƥ͐!·|n+`Fo*cx:Mvo& nܟ贃gas3B+ڕU+印q'kѤӞH]Nx9 9#M:4>Ռ'0ZZՋFejW8m-z8҆l!(Б-ԫ\zڸj̅ r~VpV65E9))ca;=pP%*;iIfKYϣ(O QflE7瞹3y >qeuY!`yQ宗Y~t-m2nZ}74wFj/r|re -ryqO~x☏w{$r$wH e'G^ØJžNE3A_c69 *jg9Ձ);[2fɤ"/Oju1ukq\'kV G9l:r}NgʅvoOv,ך3Qf:5=*3d #[3r̨ERWw6vǷg[UM/Nկ+Y;kIΊ2Y=/bU}:Ncs#+T_[98*%SZ>76DA(F?8ǤR6Ry"i&U \%iuGO^e WYU*M ۾'̳T+=.mgK|4MܜlL9z1l3Eb?n\&`WE1{=U~Ʒ _5㨋Q(㪟흾_> 5nou$V|4+K3ߣ.ّ$^AY[GEܱc%jg/(ɶ!p]wZcF{rG?}6 nvsK$xt]Fi)"& /F@T UfP*D) {s9r=Vd:|<B۵F;WeXƉ+ݫ1z_nԕ4(Jt;ڭe.;7{s1&ːy mwM4]٤kڋh"У4^HbY;_޵V-c;\MNi' 0Z'?sΈQ4tмp-_Y65n-T6}q[*jffLI+!|nz!*t s]y*:Sw]*s|U%-rjN y_IFzn'wch4:I>C0Ɩ=R^JIw,T#ZH¶`zکfe#+Vs\ Qʨ6uW)fͼ# ~4Z7:vv/c>\ ЊI8WTlͼQñȎ7wvc_X,|o+E&$.]kgvh,Lզv2arT A>\pWH][/vwccIS}VTriQN׷%dSGDASS$@uw JFIFGH@c cFuiGs1nGio !$.Aa0r^@ƮDԿPe:g=M>{#ý@K_mkRÄ qh,3(5v(TbܝwS%o~tmC˫KڤQr |w&~X CɂY#,ҏzOZE \vo)S-!NX1A+s/vUoc.ڽ}3깢r{aR3/.#+vwYCN0gGCYǙݪ[[f[v^dgcHn5EkܽO^m6+4!S3"" ȦF.#<л8?c,o¸H)mVr{a߲w P;7E[!NU"8ܛq^݇8!x_ֹk\zӁU5UT{sS]OYzzv]dP۵5m5[ST0^ڵxs*5d=jh&sqת-`ǷtrɈr`=Ys}#3=1x]%{#[ǜ.z(R+PUGTʄlᢀߕ#_ʤ"Pt&v^F+qT6BEbNKi^iyduDFod9J!v߇.X4Y[.t¹%g+Q>EQ3cL[xhߏ6C@TuZV=MVMbd`Q8fcRPQ2f [p\0L,'0 P6ˣ&ƛZCn“1a@ւdD||gQ/8xm/-`_ezhń)fdw{3MI$Km؜ ]RMSgkCݴ&y0XqЏDODmC773k)'VN|z^2l-s6XeCsC$ph6!I,dT̙nL\&\W@=) uG'~bx6b5`8Ȇ$yű g,p!/޸b`M\|p[TrWrSmbQ,o0Qi.#E&U#b$QU5}xF"d!Q#ЃmϣA1-rB"EȦ6d]+əlxAaQ1h 9KAbY&(.&ߦ/]`g(ŰY[TTb΂ Yn!fhGE`^xtH}}92u:Xps ػ`c:ABQ gzv8Vz߄+%NJVW 6٬`wjʰ~r$T"t?Kю31||Q7lxSmnƆ/jhpz'X fHa3&s;@:>L<Wxe|tf}yP9ԑPz%B"qOes]׽{i)TӜ.#{ NwtmpVb.Nqx\Uq'R6h*䆕f gmMS5f8#wդohp>6.&>%uhePq@ʢ'm5U(C=vQkQ)hj9:k&0^DftSZc$ΙB'EuRlJ>3l]W_;^d(UqLy~;LO,|_~>V^}K+qѕ\%(k];K# &0g1V"ccyQ"=5e1c_u׾Wa7LWk-/}l=Ua7"+G&nW:>ifZ8\ďIT PꪤW6ԩn;t4K<Ԙh<١aߒ0.ݔ k+fM-ֿ6l}=:J)hLxBrNsZb<.9DÕUZ`O/vFr_].E<o>sF\,54fm"Άk 5J)B;S4Rrfip֜4Ut7NLr|n :!Aa Cmƻ\}s04x{CjVZ4!+țMqe3nAAQm0A!֣AxХxEg 5MʍF4 j5*pI=U_݆D&k3_/ಯM|-P+wst~ސeSI`zժn{Y:lODs)Cd3y&ByM;lSUa nDzκ!J귺e ܵrʌ%ǁ6X2P30L0fn[HaaH%ܪ3{GjnS:lٰ ݏF9퉾Ѡz7*:l#=>H.>U,T[a E.:sJ$~)R/"&MJnqĊNA7Ufб1]t6/ "DZ``]g)/;ko NMisz0qY_ůp4C9bz߳,|Xb Sa $ ;)\h,GuSlateYIl^qtE[SQkúa ~lCi _Gn 3ƢNѷ+(9PI5aʪqm"}zGU~ !UE( :yڢ+eco_$9vCI#YHkAKҔf0²^EժԫETW=%WxCSUɥKJ# 1VV\FM]oM6Iz6V'm%t|%sB0{1He$7oN=Ig(H_Vzo>o&oVlL!Z˙ɑTHƨ,sa:* tqZUXIhֻ*11>:H!D7iX+mOOFB $Ѩce"5\K3Z֎*k/{7ǫ>nur-G羜Nq̮}xorGx_?}U/o==تITcKOj^Z?e5cet9jCMU %PC"g[EB:?MKM|.!tZmBS^_vp^۫L'jj/>*"$ys-r潣Xgu1>t\z.}0)Lw`Bf!uvϲt9(qlIEtbisŻ!n>-+7&i3/6L^ݪ^;|c2ʏ#̔!B-}P/yן3NeysJIOu &߷HhT1+F_drv$v|TXuߟ޶>cJm9\F؂y+FS̷$ qrw:b ;Pm\diOm_sh*1Uw"|9޵eb Ź3}\bB?[nՎkF;4[LqŧsJwJZЫ%YȢmZlI!.2|ݶ->4eyy Ҵƺ_o9&:?:+ȵ2w{t8,מm >x]k6~]V=5Q6$oib8XḠ>HE9/512Dڊ([svZGbje^aϝy{_.8$$ ̕Ű!0@ 9*j;qi[*}Z7t+pVy{W[\y* icW˽k\,gԊqHPȇj*\[IR> 0>\vk#z9vM$ [`vL =PH(lK"ȟ33[WxW"emK~房|+r2;;'nm:,v ;F!y5-bW9(n]nny=C{n M@ : < `C#s]GӜnOKs±j)uƳ{lYՕj}5#B;;>gj<=XdźzS7z=FVيQ!)lU5f%nyIAƉDiOΈev[\įk<Pz; &aNuA~t^"F_kbeſ-{=X?Db?̫JQK_m>3*P^+25Xi]]' p`w,iZM}(cP:`0;6Z=9rGm4\P&KC7bݰ~FY' XQ1~3P]OZbmޯ}"~#ICvwT\{8qʧU1ZvaELyFnX&M^eH&@Bg#;ZJ5ǚ+{ګ*4`|d.8/Oh {\6;$?lzv`HI ʧ)^/eJ!l*c4G-VGҳknexX=tx"+߫ͩa -91bd䙎+;W1c !GsϛDGg ,zܪ,z$Ds\ugM0PlݧEX&f:P\>=7|im)bF6\5gX}IYsL6]Р͏WZରP( ,& 9h;!5Ve_-5N=hQ&x^\cMygm!nA-͚ESg_~5P-2Pyϼ\me9ܨMCC/ML)~}bs[K iߡߤY~M瞊NulW5sR,R/^F)3+ޝ2_GFC<߮f8pi( _AoJ,8bBf5 _6{<iad td}K޺dTJª=~Wl뫗nq,Ǎi {5뢉EtW ϓׅW8!]k(i,[hφe #;E< B ^p4] Q sQMg~U³/˜MZO3$ܩ AsuC_l%3 VΊr|{6FmNj8`t$gO4H7eG8u|kCء_E=MNwPz)j*(sʊ<]L|F%Ť׫ n{* l.׻GcuuZmyNz9hnYCOf\ 9dU#nWFݯKMCL5O]dRuOu0ߵ`e|9c..y=Juw'&PpXr)#U1=+cp$QDv~y< 4;9vNge͎CiOgsƽ?fo~mX]\T΋+N:.D|T/;Q\瑹)Bx1r1r>eD2 .'s߮t/~9fp,(2jӕx.Y=V͙(`A]+Gi ̂ȕyhKċ)Q1ם+w-x*S dz45(ٝ/QcL途qt(-&L?Ju4z:o%NwvbX Lm(~~/ލ6\(mUؾ-WKdM|ڬ׮f@aybpcn76?:b)!)-Ef\;R֪xdžUTҥ˕pZ߲&i9G,gh ! ;Y2DƪG+LȬMJu;v׫tcx׏r㝑ӺIz|NI$&Z3jIF;ecrZh &9hNP\تapإ~IԠ63t̯1śYq+ҾfI37[<:tx5PnςȥQ0r{YP ѫ7"N3@q| ߟr~cT 3͞7 R׭ɺ(mʏؓC:i):(w2ӯj>QlNԆmhUrl+yz^lr&ve ߂dX۾ wjX J=VE<3#C}&c߭ƅ{G$o}-@KAٞ?s c-.{vSži,gf/Ki7hs gM H&eup9F6+"p-14pX at2Gw;~O0JKɄ'F2Z\~FG\|jS4Ziũ\x;jh3357nߊ⑉8wggJ)7vI-WͨF2#ddL)a 9yo lh\|* I)ۛK]lQ⣏zVMQ&1/Zص99F؉Wb렃yȻB6d$;R#8l7. 2=y6$NZ / c`l8گFɧSKV3fk/Sn]=Ok>⏳;_v}bY9m'\W`~~)ڵg՘ J8Ģ$uwi}yk>]_fQkaV*llxf>,8)hJ,@`jR"eL (Q5([uaH^۰FgXj>ILĺLUcQi9 L 0Ɏh~ͮ=ja"ݒ3XQ cS682DUA*R.A -1PLEH䁑IK E#xX i!  rZs"!H4!rJ!*j%2#r:!)ZF`4#sH!&2$rI%"qR"jRdA@a',`ISe̤)Qlg2ѵvqv3nj|*ھ,<Uڳzq?jټ5{cl3Wߖ\v﫟̣Zamk'v۸mz_7w 8  6pQfV}]&L6e;g?wn_e* 8llGOcoѕW {J}.хmw{-o^r039nvaY(r]uAz[L׶țw$'^Ƚ_pxLM]r 2ۗZ;f\>MP Y~Rɭj̅gSoٛL5Q.l}FU;>=sSZ'ޥ&cgC|2. 1%wwyЮ*Ø"AO*#h*{%+.U8K';8xƨhUͨOٞ]Jd+1b yU҉) JUA ;X[#Dnw5*:&TF{!RF*p5WLÔ)&OT⎻ @F AE(RfOm~hBÝ߅wta}gw9fcdrdxa޾b5DEGOjvO*yɣQ<1SfB櫵Df|w҃Zlnc=ޑz#|vm{7{v3:aҾGr`Jq~mʯ;jgho{b9n> xkc?֡j.mWGp}_PϷ+FwQq~n板f_Ҝ}?))sml4Vt5LDy1<[I$~ F'FPhQH^/yp2Row2=U.3L90 b k8g{t{ܣ xykҮkEr[=({SG ;ۨv9f :hkoןVɎ1MejP_f\z|^_RQ>MQ5u@Yĺ{/f Z7ix|.K.PW͏(v(nʹꮣ:v1I >;!+ (b"$H `P" (eILe"e9IR+3'fSTTPTE!XO۰CRMQBQ?U8V,@ffHZ (dcA \( Ij0(V?Y07dh"܃6o7WH0ʋ d)lIeXFE$5"bfcCCHM<$D4ABRTLSjG**'.  ( `NG]92+dFAY> ͙r."IvޚV"d$3f! C۷Ƽ/1E&E%u;;[یW}gR|`['d-'|7$JJR CIQ 9'# XQuA@Gb"S>u%FX ,Z@cBl $%pERj #b\L1?`CbH$4@Aө^,a|\-J%,TW-1O$$jLZ"p F7j`LS")k0H)RhBA%|tbZH^6!"tκh46LLbrI:UP9HATc0 P["u`Ȟ Bd ֠(4@Sۿ~jaDyDJ?DKJ,BIRIb(R4 µNbh8dԭ]qSh`fh 1d}:7ӧ^ I"N9tdęP4˒Oٮ$Pm\ɃKe5ipQ 0lnyNk Yk[paRك<0: &A0ä2t ݣMw73l+3/g Цaƈhu)Wy SgW6&Ι XiH„[^PAl۫L"m3,n4B1B᧒I5 aG82fkI&f%xmgwY8aa-fXۚ{{Cqff3Rp>Z\a62nf%P=D˗xUZֱOLaG91L%U )c-M{\<#SWF#l. #rJta1Zk*ÓFS"SMP{(;V6ښmdǑ_.I^2 ^B;\Q$`mV!al+aN֖scGV:H-m\({]&4dK.T ;ʩQ[1׃cZCRsF2iJluL|[`=[d-ێ7# VHt2*S!]lɔn$01úzcecp8ĮeQ!8wo381a\$Ri۲O c%̑s%5iF(ܡ|Rd w,~A*Ou 1X0@"37xY031}_@Zgd6ߠƄ.-x[EѤN9$Qu^v3CTp}`~f8ϗK8VZe{X{؊AQTUfx4ӿ}97UP %N A[Ә4>Ǯ 4A0(OE٨,̊d.6tMsЋ )(ǹ$sFdKLD^IDRs!I%$Ӧ֒6 ֐Of3cP[\h9QÊ)"XUܐmttJqITq(VoqÒ`N8RytY Gv/k=&$066O25Jt 0xx"ĺ'Oi8b 8{ ׀NRUT0р>V5FCG;D 0/j 6$2 TZZ$:FJ&&1WoJ홁FR_n1IYQPdơRP)F"HʟRK|yu*&<7 E#1q:F7vl0:R4cX3)h-=fH@)lgRr5ɓĚAГ^G[؛FLFɯdIFq:Mf2ńdwL'ӊ0P@(%aY!bgaZ+U~|cj'^WWv J4{N833֐ #OVJ23-Î8 5q ~|>f، wK5ATb`o|P4Qf2|ZA$QdxH294Xk4! g8T4P! a)p>鷃Q7n(Pl&+ȵA aE8"C(9x Hɝស !xI6<81U+"A2\I mbjTެ6 0vCgзPM0 &N :Fxnuкl[TrwKt3:MEAtt1'">sna]p>]A1KA?ʍc2EDL5 [qs<_'p\fvj0t\E t{wTLhJ]B] a0RE+4 LJamr%CJo.Ȟ<`md4bX8HVlѳXDWy}RpE֪ )}=w;vjj<4eZzϼkMߏ@E'sR1cش,{KHn݌Q[Vue"6O_NL\W!"~XU0RD2U!G)Zq|bv7z '08+c=h}8ީ 1gTʏ䪪ޭ˔RI;ۙ!]ƑA ʨу0p`X.If&%,b1DBebVZԜۍFF ,&Y C⻰7m uԙvML(6M q4f";Fhgl2L`Ɇ\Lt:C T5AɜlVN9)`.;T ;o$Ř *XH:5q+IBR"(Ȁ>v!.p3PL dֱ*S08է:iyHQ BmeQ)«*$8Nv!x4y^aL6rFxOwCǑk.t I@3o}pm:#]Os&/RQzG^k2rwjb.?w~1(ODhIN4MqÅYDg:aFʘtL)/}&?=k̚v PA/2JR$a)!PtDFl62®*̜"Lxf>È۔AOfየ9 "GP^/ztW^}LbT']q^J0i@ Zx.NMB=%3 ^LA4Oxʄ", )%hzo08La^W!3Zf~Vԍ뎚pЕ g~Yy@䷓ȩ ~Ik'/HopP8Dj>hZrXS*@&$2bct뗯~FD7IU& lL>gs] Ώbstn#G،*NNlVRXgzĿViݣC::x:=L$Ub{&:W>%[}W?Y%̠_M9wYN^~#Dk[Wέr/KZ?_?CiWE⻔F1{~┍rVWup;X#5I$LK&5klmTvH =?j3m*N0y1|&~]:슄[Ӈ{:1Zo 2TW{)${z;cYC9=W< #1t͛G 0gcO\qLY˦!\u9nj;tfG4ym,0{Y8b"[ʹ}6wXUVֆu|ovX7IU^f ŨPR+>L?{f̆`_k}!˿bsmڡ#Zyqy#pa~kowgXKٍ]IU":[(4O5m:h %ѝzu|jUn*aƻ:6]s%`Ӷ׆"uDچ^ Рh+3Mv7r8mӻ^I3&oIHGE4rj1ׅ'8;sU|I}頯Ɗ`ՋEYrL]4Nɜ8D뾘 m[J:v}{K XKwʻtLǿF;#^5J:If&(⻵݆𙪜8_m9LfWvzXI 2m2jr;7pZZ#ɪw+O0l: d36 熝g(?/tnl<{i|=Z:߱?\uT7g ՝4MO/bmj}a-iB@nMCɅ<Nj*>^ n1 y{ۇb}\x8v3*i= T:} EAG>1Va*wX{wjq+[Ҋb>7ʺR9VTlb3w2 04Fh ݬj<**U]ԥe-6>OySvs?kõ/]~(PQ9.̇YWA#˼Noa|3xVK+T_;!! 3z83y;ql9't.I?|b䧛&(f!2#Eq/=&x=o) 1.}3_D& Ki8}0) &iJ %"͝A7OKjgw6^j\A x<ٻhx i|AI5EL&b2 a\7h1EJU+” 4ɌFYg(C J)"/h" PAȪJ9Wk& P VNEY)2e2Ep.1ۘ f SE$(2ir2p̤ ̡ rVI[&Z%1M8S`UE4R)K[kH`NUHR5TI7khME< #LRj1 i)("lюl6DS]]̂ ^7_z h&ƽ1"pn<_BS|3=1 ɞ4y0_ jz=G8/ ŔH4rL&Ε\a Gsb,vo򵤧mmֽvrB!$4`J~jW6._420Fq$u\} T#0 ʏ2N.hh[, )&(K,Zu 팣5#P09d`Gc&gKYn\ hU@<{3Z*b_Ć"+* ^`11)XDfك*UiPVV AOH%4r4D O~Sĝ#ߚ_}3,H0T+.t3̝-V-$PPT=744'ǣכ42H)).Tf1G[%&}6=6v2vC1w a;*kSM.;chy!HxɄ0Ffm52QH3aF jg"HZ.KN8enK *hJX٭!Ob]PPՒRVG(+ՖLSѥ(Kal7V&BpA3m odH v(IlEυXgYhyepf,bJcb"64xUkHZtZє6t?p"(+:c3i(fY 5A j& Λasi\0斂ėbNaS1Aw5ӳI,sEu82`G6c,2@ZF/|Gb8&Մ&Yy8GFhSu#I=XF״;M0[#ENAbDwӭcm2=l@m"RG|/dHvxbVbeMUEx:GqVY̏ #. щ@Ƃь(u+pAR$%:sG{|Pw@1rRCCNvFafbm@ݐX5ZL婛rRVvX@Zj99 Ɓ vW#آ*:@1?!NXh ُю{1 HUQaÅIQ^5_;2;hdjdX-)U2%M@޻̐LGB- 5zɬ,dM`!ѷYر-?ot\ k,H%:&+R2a-&Xvl H4ŧ O9fUjvSSr*S6K%fNdiת@z= 4qml|5tÈPM8Ә0)H‡Ri.`qLm\߆%#ԂAh񙅏HТC:kS w h7LR6#ױg7bcd."sA? ,6G}>3OݷsPEФ9WsFW&0;x?~[؂Wx<3Vr NVө1?kuy{e2TE *ʋX ,9YKοὅ:dDTv]C&$i)v8>cW .^%X T$Zsdy\)^rrfYߵV˸G3|/'v.B̜rm O B ꓘEl;Rwqrj%Τ.13ѩnؘPɄ! w(v!.-.,F9 ; yMJ Z`͇:ˢ[$!p&B!j17ktx}}س? XB2 k}sSG# G{hwqq+mM*ccjB:YA`ȱ)aLz47)Q[|;~8HIqRt\o^-R;rYZX #\ErJײqUŸw ~>̝qؙLRIs-vr/xNgXl"θ`"`IF^! ˃gU{^ [npQ'u{E5ic_I4ۧ,6SQS/~>C:{9(zI$(,IcWRPU6h  Ǎ|9i/]y­KiTL|=Y2fo T2Ս|S˓nj3׷F(EP8RN1>y~똇q+sh"fpTWtYuzSXdZMw\P>8bΏ.ꏛ;)Ty-ⲣXt*q۽7,3⬎8xwwõlrsv1 e`?w7ITI~"Z:~a:a:C73 e^eI+ nnQh%V$xb EZ+=تqD^lg׃[W*%pu=gYYgpKahFE/3¶Ë7kd<:y긒3d~,V#$?).',!mT/CVP+mV_Ci'B\Gt2!6,l?<1lbV%Fjb %1‰m}'-}puKPHS%,%ylM%2o_}n0D祟MB MkK5LJ9*~ia ddIlU|Dp<Ϛ:xsh2C/d\0ɂ?I);"ތkX3GJ^*y#]އ[}dȔC-d]U՟a@P9.nf*V'S.CR-!ZmMJ0nwl2r}dD7SNWnгvxmãX!$'6WP+#ZJo֛ұ]aޙX~,"v.2n$dgt^NN׳%+jg=Qf斞k@[s$({+Г;ͼX2Ni -}F:d?-|.լ|/b6cViZ^#'S|5[q}jd>.?g*ͻ4ۘlTKyv$L2:A1ǩÊt:kR2q zn/$d^ڃEО'cn~L<,.ju uJbFRbFƶ+߄Ï ^ qECsZ:}f[kbi}}<ޏ?VZ%rmcy/hH;!Rs_Y%`c ?_r.곩 #D[RM3:gd@Eō^χ}XԚF1Db(%A1)#^k2u3_?*0ІՍXFWRșk1t1A mT^[NrC6|I[)#Gު#=ӿ.[N+RV?\jO[pgg̻S%ٵl좚yV\c:H @U`|QY:n9Qэ1[3_ ب"0P KXoZ×G wE\l=<n9bI$K~3M83-!#FAqUєĈ۶‡yv[n &⦇0-i`ƘGXY݁81'+4Lw R x̝~VOϋ5HxC->C#wk Ww>P>(7jKU.sŢnKj:I630oO޳wFr}P)L#vgu|8iSNMכNugtϠnnXy||q&Ǔ^Ft*3G'u:o/n$c?{}{c] b e1Qx-= q>zֿc9ݨs9<+ю-t؂) 3v/FD=LY.\k,`o1F;bqW%Nfiiss rjKwW^yØM5<_)tN7ϜNOj&,t*Ԣ<}^3=Oh9ի)3SŅ3eΫn;(2Ӏ[5Oz']Vosg;oYsӂown~w1!ǯ ޸;g'zŏWTVny|K\Dr1Oy/8jN>'!ayroGAjOǞœ-4!;ץT/xKiVy"/ڍoul %YC/Q_wֻ}VM]^t+^_lH 0کp Ӂe͋a j11ǶS狃<}3Jf9![ԋ&<ObѱofMsˆpCf3psF9mxȚtc[^W}$Jt y(ٿ|(O|U*öƧҶ|W%wp39D+ I IbuiZ)W 'F,3TST&R 'vH2rh#*B$3 ZSa?<<)<ϕ P ߲imVئ<٠&38wI8]{b :;tY Yz)i6vyjk( tCVte !UaW_#G/Ϟ}-4qt6lظUU[AtW"1bkq'6X~SOnߘ-vg.b>H--fԞ#Ҧ BU۷"MT W"9UB5YR{-!z2geVoi^,[\II^: ojC[>OQWLծ~lIbX~#9_zhF:*/P/yu ʚRڱ[w)sin՜#ώncNmc{t֋K-d9:γO^SދW%CJ-ϴR ǟMn!xwv9.h)^*c$~>emC;M*SaqgPضŭ/*=q테?I=zv}[uk[CÕ&ZyBdh5^_xY+%Vbv^{Xϱl0v殲 j3IXTI mk% Dq&lr)YvGmJtߪBXblM  !!qOxrH}7Y!NGνu>3>ulc :?z.'sl4qSJ(]rnG!13F1k,ӉW