summaryrefslogtreecommitdiffstats
path: root/Lib/quopri.py
blob: cbd979abdffc89a02fadb1f62f8a761572559ec8 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#! /usr/bin/env python3

"""Conversions to/from quoted-printable transport encoding as per RFC 1521."""

# (Dec 1991 version).

__all__ = ["encode", "decode", "encodestring", "decodestring"]

ESCAPE = b'='
MAXLINESIZE = 76
HEX = b'0123456789ABCDEF'
EMPTYSTRING = b''

try:
    from binascii import a2b_qp, b2a_qp
except ImportError:
    a2b_qp = None
    b2a_qp = None


def needsquoting(c, quotetabs, header):
    """Decide whether a particular byte ordinal needs to be quoted.

    The 'quotetabs' flag indicates whether embedded tabs and spaces should be
    quoted.  Note that line-ending tabs and spaces are always encoded, as per
    RFC 1521.
    """
    assert isinstance(c, bytes)
    if c in b' \t':
        return quotetabs
    # if header, we have to escape _ because _ is used to escape space
    if c == b'_':
        return header
    return c == ESCAPE or not (b' ' <= c <= b'~')

def quote(c):
    """Quote a single character."""
    assert isinstance(c, bytes) and len(c)==1
    c = ord(c)
    return ESCAPE + bytes((HEX[c//16], HEX[c%16]))



def encode(input, output, quotetabs, header=False):
    """Read 'input', apply quoted-printable encoding, and write to 'output'.

    'input' and 'output' are binary file objects. The 'quotetabs' flag
    indicates whether embedded tabs and spaces should be quoted. Note that
    line-ending tabs and spaces are always encoded, as per RFC 1521.
    The 'header' flag indicates whether we are encoding spaces as _ as per RFC
    1522."""

    if b2a_qp is not None:
        data = input.read()
        odata = b2a_qp(data, quotetabs=quotetabs, header=header)
        output.write(odata)
        return

    def write(s, output=output, lineEnd=b'\n'):
        # RFC 1521 requires that the line ending in a space or tab must have
        # that trailing character encoded.
        if s and s[-1:] in b' \t':
            output.write(s[:-1] + quote(s[-1:]) + lineEnd)
        elif s == b'.':
            output.write(quote(s) + lineEnd)
        else:
            output.write(s + lineEnd)

    prevline = None
    while 1:
        line = input.readline()
        if not line:
            break
        outline = []
        # Strip off any readline induced trailing newline
        stripped = b''
        if line[-1:] == b'\n':
            line = line[:-1]
            stripped = b'\n'
        # Calculate the un-length-limited encoded line
        for c in line:
            c = bytes((c,))
            if needsquoting(c, quotetabs, header):
                c = quote(c)
            if header and c == b' ':
                outline.append(b'_')
            else:
                outline.append(c)
        # First, write out the previous line
        if prevline is not None:
            write(prevline)
        # Now see if we need any soft line breaks because of RFC-imposed
        # length limitations.  Then do the thisline->prevline dance.
        thisline = EMPTYSTRING.join(outline)
        while len(thisline) > MAXLINESIZE:
            # Don't forget to include the soft line break `=' sign in the
            # length calculation!
            write(thisline[:MAXLINESIZE-1], lineEnd=b'=\n')
            thisline = thisline[MAXLINESIZE-1:]
        # Write out the current line
        prevline = thisline
    # Write out the last line, without a trailing newline
    if prevline is not None:
        write(prevline, lineEnd=stripped)

def encodestring(s, quotetabs=False, header=False):
    if b2a_qp is not None:
        return b2a_qp(s, quotetabs=quotetabs, header=header)
    from io import BytesIO
    infp = BytesIO(s)
    outfp = BytesIO()
    encode(infp, outfp, quotetabs, header)
    return outfp.getvalue()



def decode(input, output, header=False):
    """Read 'input', apply quoted-printable decoding, and write to 'output'.
    'input' and 'output' are binary file objects.
    If 'header' is true, decode underscore as space (per RFC 1522)."""

    if a2b_qp is not None:
        data = input.read()
        odata = a2b_qp(data, header=header)
        output.write(odata)
        return

    new = b''
    while 1:
        line = input.readline()
        if not line: break
        i, n = 0, len(line)
        if n > 0 and line[n-1:n] == b'\n':
            partial = 0; n = n-1
            # Strip trailing whitespace
            while n > 0 and line[n-1:n] in b" \t\r":
                n = n-1
        else:
            partial = 1
        while i < n:
            c = line[i:i+1]
            if c == b'_' and header:
                new = new + b' '; i = i+1
            elif c != ESCAPE:
                new = new + c; i = i+1
            elif i+1 == n and not partial:
                partial = 1; break
            elif i+1 < n and line[i+1:i+2] == ESCAPE:
                new = new + ESCAPE; i = i+2
            elif i+2 < n and ishex(line[i+1:i+2]) and ishex(line[i+2:i+3]):
                new = new + bytes((unhex(line[i+1:i+3]),)); i = i+3
            else: # Bad escape sequence -- leave it in
                new = new + c; i = i+1
        if not partial:
            output.write(new + b'\n')
            new = b''
    if new:
        output.write(new)

def decodestring(s, header=False):
    if a2b_qp is not None:
        return a2b_qp(s, header=header)
    from io import BytesIO
    infp = BytesIO(s)
    outfp = BytesIO()
    decode(infp, outfp, header=header)
    return outfp.getvalue()



# Other helper functions
def ishex(c):
    """Return true if the byte ordinal 'c' is a hexadecimal digit in ASCII."""
    assert isinstance(c, bytes)
    return b'0' <= c <= b'9' or b'a' <= c <= b'f' or b'A' <= c <= b'F'

def unhex(s):
    """Get the integer value of a hexadecimal number."""
    bits = 0
    for c in s:
        c = bytes((c,))
        if b'0' <= c <= b'9':
            i = ord('0')
        elif b'a' <= c <= b'f':
            i = ord('a')-10
        elif b'A' <= c <= b'F':
            i = ord(b'A')-10
        else:
            assert False, "non-hex digit "+repr(c)
        bits = bits*16 + (ord(c) - i)
    return bits



def main():
    import sys
    import getopt
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'td')
    except getopt.error as msg:
        sys.stdout = sys.stderr
        print(msg)
        print("usage: quopri [-t | -d] [file] ...")
        print("-t: quote tabs")
        print("-d: decode; default encode")
        sys.exit(2)
    deco = 0
    tabs = 0
    for o, a in opts:
        if o == '-t': tabs = 1
        if o == '-d': deco = 1
    if tabs and deco:
        sys.stdout = sys.stderr
        print("-t and -d are mutually exclusive")
        sys.exit(2)
    if not args: args = ['-']
    sts = 0
    for file in args:
        if file == '-':
            fp = sys.stdin.buffer
        else:
            try:
                fp = open(file, "rb")
            except OSError as msg:
                sys.stderr.write("%s: can't open (%s)\n" % (file, msg))
                sts = 1
                continue
        try:
            if deco:
                decode(fp, sys.stdout.buffer)
            else:
                encode(fp, sys.stdout.buffer, tabs)
        finally:
            if file != '-':
                fp.close()
    if sts:
        sys.exit(sts)



if __name__ == '__main__':
    main()
eݻgsSs_Ņj.>Q)FǙXp L\+c4!c9T؍zttPli$+HCYZc8 h_ѵ(GN0)N~\1xE;*I!SJr\29D?-JTA ć 9ju\-xޓ6}?;){0e|.A8| Js3Gt>W&Ĕ|I6w`vhM4]oWۥ$ջkZh%Ԡ@踹EL%|:d!Xg񄅱ZGP=& ׋)L0^e^ IjXpjΑCB4`&:zuA %(4̆6nBYj l]u>ڙS %xN1`q82\dM ZHv\S z f~>IPƱPC F' L[<2 o\.46cB R |GDv(g1ۚd|I5j9d%&aNݨFR^T5.goЁyRdj=ԻfcOev\k6SfftDnmj$HcMA̰5e>BsDȣ@h mQijkV6YQhQXOc iJEB]4VφgF511: ^*N>SZ BB ̟@CmKevKcI3CYf?SqpyĐuDFh3>pYiWnjTA] d$kUCTBuD;#ؾ24BuDi[k6*rv"+tn&wVJ [PV` 2?/ ѻ^<"r:C:N}v{c,ɶٞ\1\L9nljf4]ԤuT0/]LTK %ޛCEsf TL91 옮]cml1N/x6b8Ԝ*+svk Ħރ1-(I4620DzZQ| qY]#Hov+U5*( T>Xh]X]#(׻${kgAQEs$债ęJ»xkZw}]\=OOy]%p_W>ZmlLK}H}))/4,wm?ZyʫmAW\aLI}DZ,|[CTy(mqu73͚́ aae}"5Kb%ɘ񏿈oκuK{ڵknE[|uO|:oo~mpt׫zϜ~Cmms=̧>mK߸0m+_ŋK_j{ /Ї>裏nԖ}~rru]sN'½_'>񉗾mm뮻~y^s~>'G'۾h֭_Z޶?~o綷΋%/׾>30mr޲_oz۽~r+?я~s?]G/+}g7|^s~nZ۷x e%rtK_6~7,YWy{UzFjh3ԧ?r㎷nܴܭY4 ]xSݗxft?Sgy _g?lj7}M|w/aοk'>?ɏWrї-?[}YʋjpozΣߤ7|5~ꓟ__oK\[.}|?^Ug|;3Wgөoz yŖWS͙˟}~}4w9YG= X =Ѷhѥ/:|?imO\=w }?,I'=ëN#kO}ow\vD_~c^{['{O 8 o\/\/~rG?4u{_v~JOzO[K~O?y%/=6;;m?wKwx9g|cCgucK{C{P3YVo7{s+ܶw!}wQw{ڎ?C[{=ۛZ|f=_~?_:uS~/m._ϬУ?o7.lݏ5Ky΋~-x3+n8eC~=3=zϟSܾ Ǿr7~mKV^j^wn{S={;𫻮Nܾ B/u׿.{h];|g~<6oM?^w'Kf3W=3w/tnמ>=%{%g^{޼W8_:>ם{OrKzN7xo{Ǫ>~.J{w+{Ua8W/}7=pΩ] 3}޷>Eo8/F.xM߻oY] a|jy߾y)6 }ڛ/]0ʶnoY.]xʓ%~3v}?}p[{7Mo<9]vK^:~ߞ_ܻ_x씋/“j]sڋ9w=zi?Aۅ泾+nC'?>;,yωOahϜzWg诮磟킅Fvo:+KW>}gK~uw/SKS_?0YdUw|&\siGw+z_y݊%'_// ]ڗuB싎.C?vdGx_=8^cs5xs;?;ŝ˖~3wǭ?󋛧"m]Y%y?:O-wrE } >xϪ7=wY<΅C[G>g?zͩCߏ>pz'^78>4=}yoh[G"o8N/3TՅSlW/~rï= W>?sX9Caf߼ooپ/xD>x;KkYھkoY狍t˜|xk^] \wtm7_>{~\zu'_vɢvݵD_\OY9{Ժwۦ/&oһW'{x#-{xmw|̽G?λ/M7/ᬟS{fzW/\'7_zֻ.ko{ӳb+rW?iǷ:횧/_;_K,X/9t Z-|+[3E]׹eɼD-jz# /y?=YꌻG?տm==zgnY2oŧ|o|b?-;38cw7.{՟~d襻[/9:+猗3zdGۯsֿ6^ӧ\5ߚMӟ:e7.h;i[>K{=iǭ]-9///|ѻ1[GB}nKN/4Ճsmw?x;x*}'yܾ'Ow႕^?NȢ/_W9޺z7>~M)TZ|rԼ#9m-Тx+?{|,%/ϫ<{;qQuYgם9s>+tG>+f3]/uJ;G{=7Hۼw҇\֓|}G&}՚eyCmO|eނ憗'9w\ݛ>3 7ږ>ռv =Kw_|YϺsvEm 6?࡞fsw/Yk,YaFe='>pygo#=X)KfeHΞkt.XҳSطNz^vxK^kOȑw'յWܽo͂г,ywGNܾG\oC6-^>mݲpyW>pw.x;soN9g%ޟ~ўks.MϯV;p[Is{x}e θsom7Z} w.g /Mq#K;|m?z璵K^~O_|S\y脿~ +wkG??7޲Сshmζnm[rCk8iu]- ]xKm{mO_h۽O,^>{%mn]ڱ\pɑ,2v[G{nav>y_^m7_ؑ%5=mwϢގ+Oʼnsk߷ㄷoɡ_19޾|)nij kůj[. ~w/}~ouɪN{j:m'/8O7[?#K6=^qz)//ږwo\u>|O_pG/mwG͛sɿ-W+'5SϺkۖ/Eᾅ~˲λ?7Ggl9q7t۫c^qφgօל]g-uᶶֶ[w/+[zw//Ow;߻3;'}g-<Ծ[?sWy{n=1~⮳nm߽ﮭZ۞е{O>߫?]q;.}Wp~COn}{'zzm>ԇxHC/Gyn]tS#<__~i<_uǞy#;a-mm;ﻧI+fОpֳv޽ß.:w'Z~깿tS?}{N~K>Y_y.Ӊ~OT2᭪Ja_gӦPۢz4PO{;hOԦk[L^̂qL.UlϖTдͬ",$.2fjuicvww[)DVf{;N|Lb,RP5LgwJs_^&-״j\>@Zin VPcǡV'fFS(n Y'!ofHkwa(*9fM% 7`lr}ݤL==*o PS N>ޞr74\5XiƋcu:^f)VeO&2+Vs5gȀڶadf\c)+-(ϖ xU nGF !&1!`&+M)~O6|dL3&=gYa <h@~n8MifcIdTjq\ʎ̿p- TkQt8)6:YP'_/lg`i?k ;zyRx BE_ڠ&%K5&W͍5WC`ԉrnL6,ϷO4\A6@ER(CJ2 + a*ԝU w0JbČ˔hM~ Tmk6YK` uF\uf S2=` 9޺t: $l+n?c];NWV3^ Ji6UtUS,ÓsG{ti8L)0tzx,IVxTKMY4iyR%--*,$,(kRruIL\1 Lcſ\PN2((yf/N0Q pj^`2;5A"շMV)ی18ؔʯ-ln/Ձ%2.el*[5Ae̬%M UԪA{׸?^b֢SKL.y,J%kЃ"ֶk:Czg+xbTA~//fծ»VKi9HYZmd)!x\Tj(fy+H?zppń0@96y+'cZjgR r * d60|i.z%`>k|Z 1{GOEL0z![{+?l*EI^(7GYaE* ~Ѳi NR^bѻ \ff }dT#ثKh r @4ZRΓqܔe53蚛-bgf_^T*23mpNz268{m%(T`|]m+#Y(s]ER#Tx>۾yˏ$3IW2"A4~.4!Ve~󁖿NnoMbz|5'e\eϥ\m! .h*=dSyz͟W?xߦ?jV_\z:9|g2y#<Ơ>jt Z^[Bzo4a9[b>Yb?i>TĚ _L >%m2J]jX⛅S3z#C#jh㙻U߱At嗼;'69|]4S0R+| cVÇv]Fh6}Sd:'`.pUz IghˑQF<1H?eO>d^2^teѽگfK2U ).و ϓj5ebohmO^T"_I`"YEpA 9c sJEW3wEDo¬85<%OYL`dza;BW6$;@+c8=Wda^r^"e͚W $wVr?R`- @p,w:!R?"0w%)7>(֌E3 䘄fe8¯^Rl삮~g^ր8e͜O^0x8r--Cc{dB␠BS{jd w`!4^i4/=Yfhno׏|S=ț7i7lqߴyޥHKn_F  ǧBMb ˆFA 3qXKOÕfh¬/YZZ2&OI!(_8;vGءs(I@-H]z|BVMhYQOLi0{kHfG/3c ʋJa̞vnh|@A4m>MeBF@jfq|+K0ډeqI jHH[[ ["iPT"&(|I&<<0r J(诩Fq.Ps WQ #s}I^ȵt OVpd:-mk*S`;B:ź{#zzIzG mJ!+vyQՉRj%amׄ\h S`$Ct 3Y .({G?51bp)܄ ი k9pbfmTMpx ؃O!X++D ̚.}x ZF60GxN&s%NM?3tp洛:rAccLhRafQP[ґO']՜-4MHTBXF'?es OMd>Zǧsl"86S aLHI7=#ݤ ,@ h} lf !d4VW %sj84a]0Xaol6y$П@إ" xqVSA_dJЋgW_KHqiE]A Ux <h%y%~; :u(D ^`/$7\!i(]+'\ '4@71pI`1St=a # 0ߡ0߯K#fD:"baism#\H)r}X!'O:Ir))춗޽5;\HUvƥIIPU:@AxppeFHO&f8BG |:(uVlY )pt\%fV"(/.9;̹#vIҺPeo4Ô2%Pc9bDB+9QTq:7 #'Z~&jt^sNfqhÚ>mBrЦ8Jɉ s=m#H:I`Xc,=S!Q5GMq? t,^wp:9߄ ckz (Gݦk?{{ߗ FgG󽇈bЅUVGlё; [;73T #7[X)T#H O~?n5Ҷ@U/dyBẀW SP! YGv:Ryǯemcolc_&?`m,Hh7IBW<׽v}*rIU BkRE/^\b{ڮ '̵/NN^Pt[ăHFmIcFV L;ryb F τ7PP TQ@@_z}mЏ@bN{WE@}! ;T2o&ѣw%{D(HXKFan`QRڊ5[ZEEA\Z83Z1KKTK9oM\e].EkEVq+!T_E!]{(fKRjVR#Nl7HW:@Z p_^ǓpkbSђ.N/g̠7hP[Ө7:A@@xhyl~j$ e]5M+g8Jω#!)i N EkŏAwΫ]hK>렜U 4౲Uq prq֕ңr|3%>f϶boδu 0&6p*A} 's ~ Ї-PFC|+(4mvGn 5|@k+*u8- C'9!$vp{0>&!LO+: 1Pn/+4x.T*K̈́t}YgDĴ2 V ߿17 M' #'_9$>WIE CedJvmHr?K5 }z5Q\&gM> Ȃu2+g5_iH:58;Ƨ008W&}8E׎cb6 3nGx%o#x)bGek:\Ӝ0(a9̍M@Yp'; V7\(Ä VPTĜab6` M]e1G@Uc]"J|: |_0_ Cҿ6C8;8W{y폟U̗f+ds\XNrA`jQ5#cECH3u;{3013P&1>_~=G f@`/___:_&d4E~}syOLc?3S9IjM7/\|Ԁ C:L_cLeO@%1kTqsKp'nxs`wS~:r<ş͑~Q Z_/vJ$o)0`RKGH?=Du 6,e!յn_/hTfJ"'[߻@MY<>wG3D1o9"} "E!"ރ;ƛBMs9ټ?GLR~j4 y/__ǖ #%ڎtq1-F*{ZotkX #@Z֩V5 ;B(bͷb5eb> b^g0ah1o"<B R$Y 4Vx2j@JyYV*߁dS4=j$OSA%trFzOI0.)h !P!:6J< >10g:۰=u +Pp/4*gj 55mA:|׍& ':4MT#ӉЪxBkI*do{Yp PC˃M- v0h;t60|> m^"&0?[7b̩%G738}8lzxA [s֓ OwlvOn1kmٓ.G/1w~?e9~s> ^eXѣ?y=k,Fc?jgOKf`t|G[: AțTZ|HȠn=&~EtE|w~@!Pxm7@v 4i " Mwomo=,(mC,%.T & ).!q4`"}h f4m [v;l p z|pn>6olƋ Q)Mzt4G h~CBo9Upw-[L?z\p ;-ΓڼBń %r>E̾8FI, ҍ)\}꾠4/\NW v}J'*B~ B5ۻםÓ iEE“ǭ׫?z yi_? ׆X&_׊c}/~OZ(*~>n/GGpa!=()G+<(U<Цq_ _xIӯ5O7us^{S3hp#d'0sl* r v :lvLf_$w_0D 4 #?}Oy(ɘhcx'Q+#7ޕ<7N^ P @t!k$?V#_:@rZ5\Qid8DETK@<_VDTHOX$"&Ɍ-3K);7VP/,m~Ao s4qe*  XK";",o)-Ț<Q@ zN&/8lS89C dE ,O0(+@ ;o:$3Y.T""`QPuŦ"@/i|ݤR{5 ЁSƳag\ꎘY^3s?q2.26(Bsb@xOmM 鱳6WɥLf\OsY|d31Ĝ,yM.xN75{-o)i_L'GK7=%xt;K qD-ax<"0UBf"h;+ EC(.`>- K_ua#.ݾRV>6[$NIb*1;(d@BUсSmrFa6ΐ`#sOs;$:!1jZ7H}HHQx1g;";#$x⭀g++p[8j,8ˍ v:ꚬ>5OԬkG6H4rJ؇j* 6WVEE4qröܧjgosT%⫢9C]ɢ1?У4)j/4pDP"xT7-pϙ0! "\TSy*m|T\]S+aotYShE廈,QzsUFQ&g*96nJC2őq+&Xk㨷Tu.Z/Oqu fq,BP5bY~#'OJ,dzTP&$Q]꟏}/ ]ǒJ{|NSW&xcgD+Y̜r(tBR0"x̡Ju> Dӕ_ fMLL"!bOH.OA_ ? AE!KxQIrr 1ID1K8|t%R㧏`fE%uj[3,OX8;ϋp?PM\lkQNrx^8 xr C$rm@10nm'oj9z/ 2au#F폤ϋU’D^j[/9K RDH cHefԅNQ)HÜvjN^LH 0#]&iekZym x h-z&"lw5eB+L1 AfAD͂q_XnIGG-hf⤫>%ėN`b>gX_}ڝN,> hL-"b2.~#M RB݌gL\Xs*W@lG\iU &^@eZMei`,f@-rslA\ DΑe"PN9`ai`w|WO`%O5{XTK.,2%j VӚYn0P2z7=e?.T1] LڠQd+ѮLhR;ωƣd@\띤ߔMs$Xa$tMtԸ pA?d& 6kqY^BsULp~3zwyM9 ZY ㊥۴3~1bPV܋2䕪o+ )+>oo, 7A_G!~ضfz,xX#% _װ1^B- LCJG@W2I}c-dLJw ᰇJshǙe,*=`҃k0WQx0"4:z߅_iQ`2q@.-<k٣1,DžaTȌYo7z~tO"_鉼0KD>bA;>chH]޻‹;ދ;^߽ium>^LuO?U ٘g_~=?Ct::i:{muy0v~cAwQl8)cGOǘ39:Z:Zj(R͗A +#褍L.6<&4ڿm\`3RCvr!<& $΋jGbLLR/qE2"9r ;٦ ֔FA ֻҬ @U6i]52-6W3)x}532⑉P| nR^,}H"tU(| +Yڦ)\E C?X0b\:f& l,DS 65cYZG+Upnl-T(J4Έ*`*ń$H{rJ+T"E5|2oZUjy?bp8krk2e?PnyEp%Rax9hGc'a<\o#qT/aAL&,Se<;."0:hbʎ+oW*FџQ#ғfe'q"͑>8L&%ib> <^ cUoxlty-q졡 N>7\ɵp=n>#Pwi)4OPG?ghJᴼАBH~:=.]r. rT&0{fssCCdаZ F(u_atɍgRL\1&F]yx^j(apFYk-ǵe^6,XkI~7m@kԔ)Lϰ}ӷOi?y%*Irpi(2/d6H.P!D Q4K0~x#A.#k`R=@FH1=y0ШS}< Vb"a@If,@ur0e7[x|'ȲzmD=:U[ϢkvBLKX1P! UqueoY{"'YWޒLO4o4 h@LRtVacPv/$CR-/"lHElSAI3n*+G@xI\䛎9%㩈*b|S\JٵQ*Mado9=hTSPxҝ\uįa*XNs!KK)WfN^)lrpe+Xft1$A9*j\%ě1 e?Uz} }Gc R@g<Y[6Ȓva= ޘrܷ/ZaXcJrn8z-"aXm aI~#0b 4Jɏ`:srr!O8賾І ("x[>(~+?K x+4J)CN(,RFZbz|B".WG?dL(sJqv3}Iy[!SV9 Ax#5|i$kT$qEb݌Dg=0n}mbxXd徕QVl`E PLqG:$w߯pMB-R&v 7E .2F e|:x±qUoz͛Fs՚6GCY:| o?^ك0(Xr?GdXiePo">iG @ߦN;5NO*ihrSh;|pvs>fE!k4Y \Y AV3f ȱMEr#ޥ {N7%K.25XErjhmk{FCcD+rv%&6?YDhs.B# `ݎ+-iYKtj ~ds1[4B!(s؄wU,}D(QFEQ d@Esj:ϿUi{t| Ղ|=CKDﹿFxwagőR1:%Ƈ08%( *f"S4te̩~\}W7[0o*պ5Pߡ'%)Scx@j@D֚S8o,7X]!FRM*h"CԀ/AyN8eTJNY ܸڳpJ!3TX'D@GY rNVRhj!טX74 VN)vYˉ7IWf$Np&ޠvJCg֔a6 BR%O٭&3q rF Vt"q}O#R u:{OK!;YV)=:ibG(PU,ėWX3g84G0 \ 68aSl؏bحgx1peAW`QR ߩO Ba]n" thxpdSLۃІ59!]\0WU7AX;0նg$W/彬]\a,m7W5{4\֗-FrW5*hCK*iE^#~]PcZh2A&UCzSS|bAU٢oMՎ -زlJ5~U>cLMZirY}fcI^mÌn0ˮ"ς&h-5~6wt# UiXVlL W77U@'Cf-z_LYgr{6 D|YJ VKO \)i1HnD}J ?ԌzA+\/MW}ex@]3??7_ԋi Khp&EEEEF!|YB\>- 'os4 +Zp߀poEڈIi$zžnF% Mܑ*y?\8H ;Iޱ-iJc\q\9;j%[1E2a;6J-7=%eN<`ei4xo4 T{Uya`^^3nBȇ4!FV'{o*gīp{Rl@6)sTUSY;AeťL3}nmu۸}P13I|B1%uւeנ"g`ӿ|gN.ˆ{yy{|Q_,iϓSâ}z>.D?#e[p{\mLKyr8HblBM7~] ؐ$:͊i"-`L ~тB^PsY,9ȋ%kUr31뢨t۪f}KEߪ*MjKx_$N澖$~14}5 <)6Gmg+W >Y"j&,r$W> $Py:-쯒kfУfpAΰyXV*W$gVzڭ:ڎ[DE~Rt)!6(SŲ&t80 Td☒5_Y3( qgOGSRF9Vѳ8 k*Tk=\mGOm.^ȂN+3=yyh6B!Lz`#V2v Z.Y_㡩GUєPBVT SjF00xRtJBn\w N^ F:Q>A혯80 ΢I%&d%'CQ_אϩT#M4GlBK]ep]=+>@{#fltj1x{! sXά|.wu߲ۏJw'"뇡dp.ɛA9/,/k*hBX,lۭ1jk V>ˠ<=?hWD6knWݣ7}@x˽" 繽 Y]2@mT T8mZQUEwÐM۾g =$ǚNI7JR#̔dٜb8>!oyw"\5NgԌ1+ #Gۉn0DS o-0cmK x[aNPgECTcji[\J '*t* J:+ /c(Q؂o#XA(K&49Kk1="OYãXX"(Dz' ?׭n(h[j{#}L?ǓV3gBϼjim/,`:Ц"2Ys=ao0[LMaיS)s)NsڃuP;v"wr: ȍnh\F~ш3[g % 6")0'*{,nM&)ɐ3Dyl0^Sca̱[f==]Cܘ".%FRX\t^x_}r E;Zn줿wo,kɐ_*.5 Ue2&G ƙ\LRfg +-Њ:#HP:}HJeY:黈x=KQP^f0 M&# ŴgEޟpAp}JFUI:M3PXM`ޣWA~. [f[m+{5\N'4Bǥ,wixjwumK *8@.N;$7[)!^Jxu{y[kj8W{kc1OK4y`v4#`00@XC8m "݊b H$xp+髼*WL<)?rl|/= X%SWX?f=r88hPy[7zwfI"Ae% 84E?;?NDJ>'S*:ƞr7ȂrhP0 d2NN@@!ыh;Q Xf?ao$&)Ξ- f(Qq$^zyyhsjEN] )eIk*/(f}kWbuab25mZp)8\=`b[^׈qbŸ?Ib]̚m{k=.p^*W!=0""kST\BZB``ٶY$,}"f;Tw3wHԬxO΃~`0}c(@u[rwSuMr#]$ 2'#[(HE=˜GdE޼:"ee *֧/:{}LInmmpE,1|ﶂl8AT\xzNO\/ph" 3/A\OpjagomؙV9 ǜn^kH')IjBd>=ѷ>R\!I"GZGLª8h<AyoȤ @G4ɍE6 t*#ԘάQjj_Jd>e:w6 t-3QDm+ Kkfb8İN.o*;:/&GmM连!`'x"1WvKS&„xNF8`3;CX椈6 W:<* [ͯhGE_27A նZ{AOOBzU SVW-^?n ~W*m5mٲo$ p KX378qi/՞™>]A߯`7Zvw)U[d ME*0DߍƇ<"$B OtI<کv ="F镂dSD8qZ6rs1r9br,G\~2>$'CJ/\rSj` }͖-̊1t ƕ׊뷓r "ָ^}@L9ʁNʒn|yP/'ե"V<\++^:P``paxBx4X8}]*vS6i]|>;II`K#`et'y5)qXu"[ ߝ% g]P&L[~88Ss50 6aFF<(@1K re@#KQ ϲt`اQyj]Pz"Ima awyQȷ7! &0 vr0#[2 3F%Y~Y`Τ29bڸxY WF<Ζ]dbJcC2+&%8Nj&ʭ}G~_E0Y~9)kjeƙJ{ li+TryɐrNlU%3vpK7+>#lfGwAq4(-l#pEZ7 -d9ś1,hP + fZ/R+F4S56xݎmv!6El= ,iHf4qcI7bvݩ|]sG^:7qF }x yM49r>&R;O{=G֋9-FG׷7$Azx_*[+' Sm]r.yؕ+U w(6V.o爛4rDC &\D$#SJF{oiZοm3?XJR1txj[2|QhS9ZE0~Dm6cP!A]5kc+Zq2&Jq&arq;+JŹkM֞W<8K.ռr%uSU+¢f2 b8Bq-hBS YY0R$Թ AʱM8`CUQF>=g)~y%cJ M\H|_:|n䤺Qz8 ܐ0,x63hjB]x3!,,OTv0Vﶿ9=huqۻ^~L2=zsv+rTy/9jnJ_&ߠd |UMY`EvYrW7t,ߟe}S}A/e|l 3m'&)?^FY<Xk *eKUF@% YJ`,` V鎩EȘ6+UzP)νXP;ŀrL҈VSMIw'Zcp|6!.:zES,Z>ʑ io;Jʑr:0mR8k0W0,X„e$߱܆r!d2g}k,o=+=OVR W(ޕ@EW뤟WD!x)#wN;{ӹosd-eX2m&hN;qK: ju164&?>YodT1Ⱬ).aTV~&##7d#'g8NvOG.*CvVƴ2aZaS20/&F(~{Icԃ@nJ0_GL1,8*pS09cpLk(p_ b-DVJb`ڥ}S9JϏhĉ# saT -G98#t%1Gc&(^ x`d6;O9 ˌo=*GO?w= ÿ?Ap98%v.hxS"VOoHYENr 7>kQ? `:H_{=>uOh:4ɳRgx{$o(+mR]I҄2L% Qn#o2;jﯶw,,x׭_2I>#2*v{wAQ \eIj{Dυ+C6?"4BAf{ $wY@Btu0Z@%{ۼ_6wƖgs5Xf˰*fc(vR9>@s^C:,G1VY'* m\R f^Vy[Dr'r^YqgQcKi *Iߨ(`sU6҉2%= ^CQƗ,h>ks| 赡ƌUk1EX,Vd{طCbs]|Lmj9WoOAB@E4c*Gc* 觢'܆ԑ5t#.QUǦښ@28ܹՂufhrҋ6`?4 \@'EL0p%''G,V`dYRfo"likAAZ2mFFE]b&rFKΘb|Ԡ t|J|G er[|䷟dLxŅ渊=z `տ޴lX~w7ǝvgJV>7;udM U Ed%SB ^_WeߝUt'wo^_ ,ʙ9x2> }7Sߒ%;}po I$KfCnwzpx¿1}|I8 IVsu vǗj_ &qIp za!tՊ,k9@ԓV JuJUܑSHƸ) Y Z ,؏,a1 w *雗nU^H"l>,Dί0>W{=5&^{};y g`oUEV܎)Aɛ'G'0)M $a(_$M2|,9P9m GZ-Y'oP<&NܘJ}cT+x.Ue#C!u. _zWǧgR){i2ɱ6w5c bk ?ͺz˿5xmh%Xr[긮_VZ}[h1xDEMrISjzxNOu/f"NSG<.cB\%{nE3vo9T1 iD}wvg]F zպނR4~ڭ{Q#V6 wU8xr0Yz!s nN[:AQM308%l~6Kx^fv/E0!=K4G/ )\ O;«ItOK=/tu[r#<{k F1p;ֿi 4(80 qkz:cx"7۝/:yt휴CJ8v!zw??Dؒ&rUB&X_mp>Ēӂa *C'->=: /`ޒ\#$N:g!AYp)Aт`j.h[Q ƱǬ."T ?qc<.~m.}+l4(|LFmd8Yp:AJ,s9YY 7X*V*Nmi,+TG'oJIz3~ׅaȥ F2T̃-R``> XH@N7ǰ<>w7%*igzOx 4.`8 MBA,1NLMvB;f0!dGCEEA\^ $%V*a=yxywAIHJZA pZ%f\G(c h6NO&QC.\HR2EŸTX)+#侑O`6Cp4DBf:?sPݎ(D*12n5wYbtkb&0~gǫ!]2Fz 0F_%tN6Iƽ˲؁*D_ JR\DDas-&52FJL9e Fp5SƁ,` POc4 b{rN /J#؜hvX s%s#h9.Çαt-aV=PWDlW$_ɗ,F"1ql\!<T 4Dc@o+@Zƒ=hyG 8'>N\ j dXq2j0"r,Qx3T{&#Eȳ>ޝ3"NoړO}mH"C!V'D=\"{j )~s:kأbTSs(y>Tyeê R>aJdH[$`ZdZʕ.\_}*{*Q==o-JڹԯHU%s^CS8yR[X%B;KH(nIveQߤL78ԁ rs >eC-ʀ~Q1*UR 򈋰h jdRd|[ "PN"%g3z^Q<`8ʸ8j8Lbp%' UV(t5Z,E(u{Fh#i 3@ Bc&k)"ց*5jkW`t`8SJp}oI,Yq|p?l*79E_+t;oNoxd 'KdUe/>T_?梃(*83@%F6RPD|tV$xO5 ::"\\'OH>r'a\c:-"vg0e0jG(3oó_" 5*AO]?*bpqjW6Z}U&*#$X40CR lij[d ʼnIpE9F )ru,,qV 申G#;P=|rԚLb-X #b'^41&1RG0 ٘ipб|(, P#@ぇ壴T#l0 h?rYg`Ҟ!3c3fp6M|Oq-N))AbS*l}xSn}y?07|b9T^xlk.>{XoǬ9]6 5x7l#NSxKH>nu{~pEXI}#IIPP@ cQ2dz<Pd]ImP-^m2Sò%n1sSӊmt-DYp^n+өdRwz d䉶)0G Wjb̩@]le7LTSUu2REёSQ'~st& `)q1{d ϋMğt(nl -ɴƂ!>:CҺv9l dQ5k-m+cI0wՃ'25@uͲ+F@Xa鐎.']|гJLuLOj\jKW]R32 ON9W3~l1/YWR a0Ӑ",Dг7p"A;TI@i k qt`0ðM,rcc]{q )8O6w *&@.hJxy:SJOtQ [4n2 `1\ [-fb`V7~|ƄG:[Trgpݑ!q}doڇt=YӁFxc\Jqx^LAO_(2zƘqӼI*b8 S|bE'yO] "ȳũy`q(G˜WkoNk޶NWUG䃁)^W^L90=#歸?%Qx-L`WxTXo 6$DKIW ح0e*Gf@%Jd &Vl0lX7=Yx<1v0>(T{q*&SK,cDmV<ŀuj-.O &0׭>W!'ux`{< o~9O?=~}oCzxuL cD0L7"" JLW&d4fk[퇈_4P|LFtZlk|Oq¢bU:ٌ?J#zUVS%$ YO'e,xN 9fD 4HkxO~鸺y%3ɧ5q ax%BIc%QgAfy4flSҺӎd1Jll PLLЌg]'#ɄZF+%B ǁeN |ݍa.YC @my>}sq['$FrR?w1+Ε?Ĵ$IIi-Ll2nmrzmsKLOouiHg}RSNڇvǶ̟ػG #޶aѺ'W4yx8_ $$׊S@i,y˦Uңr̙[|y7][Nz;:8=Y}1:vy w7tuߴ:^x)&mЋѱ6xTPaTMGb&gގh5eWs\I#]ݕJjTf>+w64V2fm[u܃th$nPVs\m390tzmpVNu SR e#IxnBJG M=}>E<$Dm8B\yG㡧_i.! GqQ]J(E!vkKg_M^P(fsCFpǰ0mKL vVM"ճ"DuQm;F}mhPZM&%u ׃%ԂC@iF'7D4FN/YhRN`%1x4N q(-f$:u'O`<)UW)X2 ZLc.*7A&gԛmWS4y6{ȟqrf%\ $z~9\k"Tk VKI]CQ`ƮZyl81&ez4Po;L1L_rG$ Iycȟ }r$gLj5B +>6IGYs쁲;f>RibC|9nS|S%ޜ pc3pD,NܮWCx%us&eɽ7 G3@H]8֜RzM^dʫNR{6ᖎ55b v2 z]Z.YމDtzB:fЯLU:4|^_NhybhZSYF&9gN.3(x01 pBb f-Ĺ QI*&G%sPQz>\XRz~FْHpEH, ݳqJ3@ jjcV*TvDc*L:fM☣X*!aXwTSļrẗ́3О2e36&^sGQy9I'J?ZZ L|\ ^sMAڜaL.*OYAv%XL= s_[D:g(bx,DpW}s5Dރ@Nh|n{y>knB $n*֟\5b#چ8#KUX~ 1m joNSedlxP3 $~"H³0|¿&4CݰU*wb魋\e,V\m><{;~wslqwganud76L[גI4&D GD%Έ3ŀZ1#4LCb-c^m1+ݢi=5BN2̴=QGYucCL.Pn 4Z}H i5^'Hi<Xwd+c.|_TSٯPrZqwk3h gV.㦋e`Y# X``t>%Ë5Qz!8$(8AkHۦAG5{;} ozljȀZ} n^ӡ,R?96aO55JbWV(॰ExUU1 \EJ*^Mi!F ָ- 5\A-WQc čA:a2Q`SkIDDM4%_hhX+'%YLt@ b7c'ypqĽbcż EW" ͇kB7";NKmOZB'Oӝ>nvhVdY tH|TnU} A잟+y=4k{+愚}YyoPRZ[BCRxMx'-6Je Ջ˲6vK^.hT~oO3o˷#[%QLj\c(/7W:4ֶb9 Ko$uDKS:]]4\=NIt$tt2N&lZlX tjoT:ڼ]#zaQZC~U /4u3;ۼNt?Q^҆~ʊT=9iwiz~Mv˝8+='wu|Uk).m7[aTڋ5<ߔobk/}[C(ZS=hV'^VY}E+{#R 3论_#iϭRVaMZYfx)jX pB'nnx Ot]=M@Q݁R$/ŕ9UJ)NEw6ьxZh#Xj@`("Wȋ_YCQI_jmu ]o)a]e睌^LGOV{ɳT] vn-'6wÂZpo/JcsZCv\'Y Ĝ)!9t 4\_g:@(6 } cx@ (\*ׄ1mшGzbhRYk~vd3T:ռX'g:?#BC&/FDjϒ9Zqg.9`q*9y=fE딬:DѥPX0CK%ZoPx~|eOG2)0 |#f*q1:Sx 2א*˭jaOQTslcS,LP< ^-i@8f-t=}ɪϮsv; ӲZEQ|{W~~T"ʂBkTbc Coyyr\ŀQuWj!?N[W;RnF,du*YjS ϐG~kϐn0hD\yD `<)X2;($do@Y|j&DGNrx.!F3MЧ 6;檞nM,p foD;^̢%3AK1. bkF*>luwŰh~6IA2"@#_eQp:@ jL%~9&>tqJ:eNfS`jm7>((pK󝀕ي˔\hS%&x]Z${$|;1Ƶ7þ"$>hͲ,Hxy!U4{ոt07%\$5"xCj"֐4 )s^ٷ ໣O=K|hN9>b6H41Զx3-v+ BVX( b:SCcʫm#h+b p8Uy [wa'Wld1$ K#4?#uO<5q$致䰮u|W|}0E\6:IBei򭈲 +v Δ^9+DDk`V_#於G|2!u7T^OU+<;s%ۼ:w+ xh$sK^5#+gjwh Y2kR9 Eʅu0&|J̙ 4zQzp17&c7ϐU |OL UDsRd$iEd /BL܊+=ŭ/+jY<$EB L`r,0Pkw?nr-އe>3n$7$s]5 r{%t\*LY|6|oM-)aݍpb:e+sn W+4V162:^Z Xiw"-C[-ݴ~]/WYkT@/c%&{Q?ǰ&?-$f5{-|:{k?pPτCq(/AQuS6yuvmTКs.)b`Zó5KJ\NUթtXze;x%gŅ@aђʽFjMJPP%ʔ9n).U,T`p)< 'abDqKoa?)ds 9 7}m/ؽixNfPMCm!6ж–X=oRv-T9;eL!}`{Pc)C-GJ'Ms"SNYf[\,*Mr>&g₆0&20*cz &Q+FK1>Yikk73-6(6jఁ> w*kJ-,C Y ̤D(pRs2=XSc Ԡ^Wa-.f 5,㦉þ͵xK*;qn)gҹlIbl,,J&67~,yq_HU-jըAuʾJ4{Xot+ Q2!Cpnwni4dD|%FT] ǡ<;gmt_Ϫ~~8a>p?w##aڂvxeA Pg @MC-F=#^bWz)ُ?6A$t۔hU,/ ` iAx:g 8ulDqح["!15Up5+s¦@*Ȳ[;Ow&o1=aϙ~A-6DWRw*,&PĦ=yq5u_=A#CS,Ft$ĀYx6FŶ 23hAzTb1ɮ8fLb2܁}Om3߱I@5`m&t)r,͇qK&f. /|$\߸&.b H&&x57ǻ!o+_$ *y 2.p<*f…Ma[:Q?,2 Fr5/#P`&ˀzX}2rV^ds]Rn$X_I\&2#>hTɚ>k!JƔ.ĘEX4HGUOhj`|q9t/*ij޼q~rw8V%cF ίw!҉]f+0O1? 5C4EONLnlUb쨊 㟉 6#3ې+b5c-꙽>>,^tGlob0ćMeЌIcd& J77 Tޣ1iǓYh=En[lGr5+p o3Qw*+P}: *-,b,b ^5XLEՓXˌ1M$0"EP0p/& hb~XIeנI1|$NXKvQJu$ :-'ŒFb[{5`K ǰC~~k\z^߄6o wL"'-[grĚRN2 m%p`zy4|_0|YH.D᫄{RU%ʠV Je"xe)rHF<"@+?XfLy#mT=l~fݤyh&y&Yl͒z<_J+bƁ\cĔ4V䦃ɢS44h $\rC^L*[du&Z%G£2ar҄@>`; Oo3#!̧2_"8{LRfBϾJBpW+®g0 h-<n&CAFu7$k/(*;B}`+ [4\7Pl5$7̻xqrK.>,=2 x Ytr\g1[ww쿏gFB^ aO` =!ސ HR5Ň|>KqKuߏ{Oi]CExF_{N18#R]*{O{5q@<¸N?hN;ᣝ^=xcȞiK&ܶK-~Z{gY4fϒHmJ_ !rnsl71?[5H|dPi¶dqqg!--.̖!WC ƾ|(7„ћ񺆊muO>|ˑӳl3lC'X7^?\DiCE"-8ɹ4]-!5sB64`RtH#Ák0&ѤbǷCZ]{Z )dslcM(7Pl2\ʕP fÂqZp綃S=ְj%y T?iF``'Yb&ʳyM}+"SxF3,*_#Q l(:KHN ߜЛM)-$1ZD H4JcRwK!8X؝3?=bVS1TЄ)ڡr1K-,ܞ̅%`pCUd_Bzq ܲf=hWl^Ft<6gsKzLp"q!Pg kШ?%-yt5hQfa*;c)b)$wc6i4ŊǑ-cL2:걙/~t7ړC냑J(UJsetҪc)X? ,eřK}` pW?c* 4! nY{BS0z•'i*O9blMs"0”W[ Qc Z-^Q(/,6oQt̠3K!dMT=xLr6nqayN-AlZR|?[[Om?G06J 3=eA.#Gc:qNx *߸! -V"H l_9qd!h ~">bl\PT zyom&4?I }>s J+Q%Σz ~@H#<޹,K }ʁI3Z:en&]?A0mG;ý8^p.@w̰pz $x:`eg)zXe`߽<쇻b5#c |sm˦n޻Vup>߶ zZqtU=ř\~ե2݌"U雗@Q̯6ٌj=~#OcIiup c'Zh[@h, _i4=tƃA"6?:,3%:`Ւ7}'mKՅ6K5ZٷX8a2Qs)2|NJ8&uM2v!s5L^'բDqCxV7B@A##s3:CH!/)V-o7T$qsHA$&5DE.v ЃtT[J棠UT15 M )iJPY6/)&?18x 01L) ,GTI]ZyЇ"PMSi:^2i= 8lb=3>O\% x8($gayxG1&ӵt82N;xlk>GDc$m0->6v k: 1d"cp)[9LkFR <h`n^cjX4l\ƙ\i#dF` o|lvv>y|EO`6`zphf˖VRrO8R1|^EliNPB0T {y̿]bJc[>KRݷtM'79UuJ|eyoX tb @͊b ƧELguf7Ş%;| NOz'|=,K§m|A(^x\cS|#NHrIu*6>zT"-VIc~ZWDrQS MM>z\tql"t2' k#y#f$WH;.8۽v(ĂCW?~4v^'?wpeM|ŨV#A~͕{3O3 [3Cv$Woc壚D+"G>In܃꽽|3 +>|ڭůH|t̃l(bdxT{~u&=:ի?:t06QtS譬 WwtztIrbL$xn&U)&Ð4/TfBѯoaXY˂~!}Ybcu6$f:]MKֲVS*-B ?u`>_MYIX*?+A>5{X'>=zK&_jϕ[2: 6لTRؒ~C\س7`mTqiB 窱/p>/boo=*Ow)aÍGH,=1 oXGqh(SnS}/H.Ln08u@ BSmyznnbTU7^nɄ[g,K!S;Fg]IF ٬Mj]BA]xGls ` >lzlpO졟I_qmL2FW@٧n(ÒO=^f*[Plz|/`P 7iX;>=[-r\yW/S*7w;wtSdռvGlFvf 2B̅=,4% <ᣀK#vX2S e)]$_5t.ު ŋFH:mYM%Rh}^pGY5,' QkqbV!Di)F6%`u{G'x3<ܠ۞y>a h9( ĩJBeޭ8WH~r\T .HkCSZW-S*|q?(Ցsdg8p,Or~OA KK.>ߧ.G>;Y8]efϻ7i ܝ*8_vk wAC }Bq#Zcʸ*DF BoYCMrII1*줗`q!6J"3÷$FZ |Ίnx2Aq3.𔊼|NT ~ #%o^{^8Hx^(fX Bz> Oaᙬwt6c^4E ^縱Hgu &(b>]Nj^1 j_kR;4y]B̈9&aGsΏw#@ c^x\ @ i|q"" eĚx8= ! 8c*FeO;?iφ1֘*¤gFYWIIZ+4l+J(!_PR}ڡ `ohg[`1[o$U̪p@ yNl4A{5^(hNwmHDb),f{س%*8]"6 ԩ֥Z<w*dVuY|?#oeD߅mLnf <"QSGֱ1Cq@*EA "bECa^#~]/ZJ<ms`V9HeU_ʃBP]!*eȓqMHZijb ~ }_3#oGg"BQS֮)hgFA@X7TɘqyMlF89AluN fm鸦)kyܐ/?.L^}RxU/?C4V[lzSy}]|~t[ݯJ߲!o|[2o>`;n/2KUVMVREv 7:0_<ߝ8:=9>=af,nΠpʊAI>Y0{EDU4\!HHcE iy6~մ".j _q, X gi-e5w(ع8B\<^lᦂ%\_ۮa)ܶ. J}iOfNuMzދާwYJuεj=)IWK4bbf\.>( 7cVE$RM> _h友h8H=Gh\Yb&y 8^5GDH:qWW(lz 1> =r{kòPV`>W?hBeڨVdE/pӘ!9RBM)ef7)~f.D )y"㾗;x}+vבc#·݆C6zSاr8J$`lR/jϚp 5ɯ2>ӳWQdznPXW *_CfX(·NJ9 tD{p+BL0/TC5zoI'd9P!ʓl$^9]4Z\Vi3DqOtv 6. kh- i6Gjv]ѻG޾B;eJAM?zr[Wc z D+lUGq):WH=JVVhHخY:Q!jߧaDzEw!D#hKeKúH(tz(C5H$-5#UmFI" & IH_YIH9G5: {PIF嘓Iv8gј@(ÿV/A~/)Cv{P[r~tVEJfq4  \¡[yhnm@p".C~90VFsИEJ$@t`vBzMDž iui?DQ(.Vzy{lo^Tu=:nwOwbs.^vU0|_͒| o˨p:=8Wq ]Ō#t%}1ª,]`~ 'W@Aؐ1<7!a0