ForumBlobPost - Utility (Ver. 0.4-0.51)

Post your FreeBASIC source, examples, tips and tricks here. Please don’t post code without including an explanation.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

ForumBlobPost - Utility (Ver. 0.4-0.51)

Post by MrSwiss »

Hi all,

after having previously released versions 0.1 to 0.3 in the "Game Dev." section, it is now
time, to post the ForumBlobPost - Utility - Version 0.4 (with Code Page switching).

The reason to build this Utility is, the limited space of a single post to approximately
60'000 Bytes in the forum. Specially images tend to quickly fill those up.
Some people on the forum also seem to have aversions, against having to copy & paste
more than once ... (can't understand that, personally).

The main objectives where:
  • works in both directions: to / from forum
  • must work with compressed files: .jpg, .png, .zip etc.
  • for forum coded file, the least possible overhead (first, converted to BASE 128,
    then shifted to "readable" (by +35) extention is now: .B128, "original" filename is
    stored inside the file "plain text" at the front)
  • with .bmp the idea is, to zip it up, before posting ...
  • create a distinguishable file extension: .B128 (loaded from forum or, to post to
    forum). A simple .txt file actually. Any Editor should do for that, e.g. "Notepad"
    on WIN.
  • output file(s) generated with automatic "filename(s)"
  • should work independent of OS (not yet tested on LIN)
  • code compiles: with 32/64bit FBC (console only)
That's it in a nutshell.

The use is really simple (after: download & compile):
  • 1) choose the direction: to / from forum (aka: *to upload* or, *from download*)
    2) enter the file name (to forum: with extension - from forum: no extension
    .B128 extension expected)
    3) output will now be created ('inputname'.B128 or "original" *filename.ext*)
Credits go to (in alphabetical order): BasicCoder2, dodicat, leopardpm (and unnamed others)

Here the code of: ForumBlobPost_V04.bas:

Code: Select all

' ForumBlobPost_V04.bas -- 2017-06-13, by MrSwiss (ver. 0.4)
' "original thread at (current end):
' https://freebasic.net/forum/viewtopic.php?f=15&p=233256#p233256

' Credits go to (in alphabetical order): BasicCoder2, dodicat,
' leopardpm (and unnamed others, of FB-Forum)
'
' added CP switching code 2017-06-13, tested it with CP 850, OK
' in order for all forum users, to use the same settings before
' the Utility itself is started ... original is restored at end
' of program -- compile with: -s console

#Include "file.bi"

Const As String ForumExt = ".B128"

Function LoadFile( _
    ByVal filen As String _
    ) As String

    Dim As String text = ""

    If FileExists(filen) Then       ' crash, if not existing!
        Var f = FreeFile
        If Open (filen For Binary Access Read As #f) = 0 Then
            If Lof(f) > 0 Then
                text = String(Lof(f), 0)
                Get #f,, text
            End If
            Close(f)
        Else
            Print "Unable to load: " + filen
        End If
    Else
        Print "File not existing: " + filen
    End If

    Return text
End Function

Sub SaveFile( _
    ByVal filen As String, _
    ByRef p     As String _         ' string might be too large for ByVal
    )

    var f = FreeFile
    If Open (filen For Binary Access Write As #f) = 0 Then
        If Len(p) > 0 Then Put #f,, p
        Close(f)
    Else
        Print "Unable to load: " + filen
    End If
End Sub

Function EncBase128( _              ' direction --> to forum
    ByRef iStr As Const String, _   ' source string-part ASCII
    ByVal n_sLen As UByte = 7 _     ' length of string-part (default = 7)
    ) As String                     ' base128 string-part

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen, 0)

    For i As UInteger = 0 To n_sLen - 1
        s_chr = s_stmp[i]           ' get a byte, then check value
        If s_chr > 127 Then         ' if leading bit is set, then
            rmdr = BitSet(rmdr, i)  ' remember in "flags" byte
            s_chr -= 128            ' clear leading bit (MSbit)
        End If
        t_sret[i] = s_chr           ' assign to return string
    Next
    t_sret += Chr(rmdr)             ' add "flags" to string

    Return t_sret
End Function

Function DecBase128( _              ' direction <-- from forum
    ByRef iStr As Const String, _   ' as EncBase128
    ByVal n_sLen As UByte = 8 _     ' string length with "flags" (+1)
    ) As String

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen - 1, 0)

    rmdr = iStr[n_sLen - 1]         ' save decoder byte "flags"
    For i As UInteger = 0 To n_sLen - 2 ' without decoder byte
        s_chr = s_stmp[i]           ' get a byte
        If Bit(rmdr, i) Then s_chr += 128   ' check "flags" and set leading bit
        t_sret[i] = s_chr           ' assign to return string
    Next

    Return t_sret
End Function

Function ShiftB128( _
    ByRef iStr As Const String _    ' source = ASCII string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 7, n_rem = Len(iStr) Mod 7
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = ""

    ' get encoded string (8 byte, from 7 byte "original")
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 7 + 1
        s_tstr = Mid(iStr, sPos, 7)
        s_ret += EncBase128(s_tstr) ' encode to 8 byte string
    Next
    ' string-end processing
    If n_rem > 0 Then
        Var sPos = n_run * 7 + 1
        s_estr = Mid(iStr, sPos, n_rem)  ' string remainder
        s_ret += EncBase128(s_estr, n_rem)  ' encode rem.
    End If
    ' shift every byte to "printable", add 35
    For j As UInteger = 0 To Len(s_ret) - 1
        s_tchr = s_ret[j] + 35       ' apply shift
        s_ret[j] = s_tchr            ' write back to string
    Next

    Return s_ret
End Function

Function ShiftASCII( _
    ByRef iStr As Const String _    ' source = B128 string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 8, n_rem = Len(iStr) Mod 8
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = "", s_tmp = iStr

    ' reverse shift to "B128 encoded"
    For j As UInteger = 0 To Len(s_tmp) - 1
        s_tchr = s_tmp[j] - 35      ' get shifted byte & un-shift
        s_tmp[j] = s_tchr           ' write un-shifted back
    Next
    ' get decoded string (8 byte chunks)
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 8 + 1
        s_tstr = Mid(s_tmp, sPos, 8)
        s_ret += DecBase128(s_tstr) ' decode string
    Next
    ' string-end processing (shorter than 8)
    If n_rem > 0 Then
        Var sPos = n_run * 8 + 1
        s_estr = Mid(s_tmp, sPos, n_rem)    ' string end
        s_ret += DecBase128(s_estr, n_rem)  ' decode string end
    End If

    Return s_ret
End Function

Sub GetUserInput( _
    ByRef sFle As String, _                ' file name (with or without ext)
    ByVal mode As UByte = 0 _              ' 0 = default +ext, 1 = no ext                
    )

    Dim As String q = "Please, enter INPUT file name: ", a  ' question/answer strings (local)

again:
    Line Input q, a                         ' ask for filename
    If a = "" Then GoTo again               ' file name is mandatory!
    If mode = 1 AndAlso InStr(a, ".") Then  ' ext check in mode = 1 only
        Color 12 : Print "File contains extension, enter filename without it! ";
        Sleep 1500, 1 : Color 7 : GoTo again
    End If
    If mode = 1 Then a += ForumExt          ' add extension ".B128"
    sFle = a
End Sub

' ===== MAIN =====
Width 120, 25   ' we might want a larger console window

' change code page to: 437 - US_EN, 2017-03-02, MrSwiss
Dim As ULong    fno = FreeFile, start_pos
Dim As String   orig_CP
Dim As Boolean  NoSwitch                    ' in case it is already 437
' get the currently set code page
Open Pipe "chcp" For Input As #fno
Line Input #fno, orig_CP    ' only one line to get (original code-page)
Close(fno)
' save the current code page
start_pos = InStrRev(orig_CP, " ") + 1      ' get the start_pos (in string)
orig_CP = Trim(Mid(orig_CP, start_pos))     ' save original code-page
Print "saved CP = "; orig_CP
If orig_CP = "437" Then
    NoSwitch = TRUE
Else
    Open Pipe "chcp 437" For Input As #fno
    Close(fno) : Sleep 1500, 1
EndIf 
' ### your code here: runs under CP 437 now
Scope   ' for safety's sake (in case of duplicated variables etc.)

Dim As String   sFile, sQuest, sAns, c, d, sDir = CurDir
Dim As String   sTitle = "ForumBlobPost - Utility, version 0.4 (with CodePage change)", _
                uline = String(Len(sTitle), "-")

start:
Cls : Color 15 : Print sTitle : Print uline : Print : Color 7
sQuest = "enter the direction: to/from Forum [t|f] 'q = quit' : "
Line Input sQuest, sAns ' line input accepts a string-var (input doesn't)
' evaluate user input
Select Case As Const Asc(LCase(sAns), 1)    ' check of first char only
    Case 102
        Color 10 : Print "Enter filename *without* extension, please!" : Color 7
        GetUserInput(sFile, 1)              ' f/F entered, extension ".B128" assumed
        c = LoadFile(sFile)
        Var npos = InStr(c, Chr(34))        ' extract "original" filename, shorten
        d = Left(c, npos - 1) : c = Right(c, Len(c) - npos) ' source string
        Var r = ShiftASCII(c)               ' decode
        SaveFile(d, r)                      ' ATTENTION: overwrites source file!!!
    Case 113
        Print "quiting ..." : Sleep 750, 1  ' q/Q entered (user abort)
    Case 116
        Color 11 : Print "Enter filename *with* extension, please!" : Color 7
        GetUserInput(sFile)                 ' t/T entered, get source file
        Var dot = InStr(sFile, ".")         ' get dot position
        d = Left(sFile, dot - 1)            ' extract filename only
        If Len(d) > 0 Then                  ' check whether there is something
            d += ForumExt : c = LoadFile(sFile) ' add extension, then load it 
        Else
            Print "File ERROR! " + d : Exit Select
        EndIf
        Var r = ShiftB128(c) : r = sFile + Chr(34) + r  ' encode
        SaveFile(d, r)
    Case Else
        sAns = "" : Color 12 : Print "unrecognized command" ' in red
        Color 7 : Sleep 1500, 1 : GoTo start' all else (ask again)
End Select

Print : Print "Done ..."
If CurDir <> sdir Then ChDir(sDir)          ' restore path

End Scope   ' back to original variables ...
' ### your code end
' reset the CP to original (the saved cp, at the top of prog.)
If Not NoSwitch Then                        ' only when: not TRUE
    Open Pipe "chcp " + orig_CP For Output As #fno  ' reset to original CP
    Close(fno)
EndIf

Sleep
' ===== END-MAIN =====  ' ----- EOF -----
And a little testfile:

Code: Select all

P2140875_small.jpg"¢{¢ƒ#3m2ili#$$$##3#3##¢m~#f#&%%$&%%&&&&#'&&'(+(#(''(-**#)+/-//.#-..0153#0141..3#9346788#8/2:;97#;5787¢~ƒ#f$&''(#'(,((,7#0.07777#7777777#7777777#7777777#7777777#7777777#7777777#7777¢c#S4+$O$3&C$E#%4$&#4$¢g#B#/#$($$$$#$$#########$%&'#()*+,-.#¢g#X3#%.$&&%'&(#(''##$ #$%&#'4(#5DTd)6t#„*E”7U$c4D+FeTd†8ut“GV…/•%,-9:;%<=HIJKL#MWXYZ[\#]fghijk#lmvwxyz#{|}†‡ˆ‰#Š‹Œ–—˜#™š›œ&'ƒ()*+,-5¢6789:;<¢=EFGHIJ¢KLMUVWX¢YZ[\]ef¢ghijklm¢uvwxyz{¢|}„…†‡ˆ¢‰Š‹Œ”•¢–—˜™š›œ¢¢g#B$#*&$$$$$$#$$$#######$%&'(#)*+,-.¢cg#X4#%$(%''&'*(#''#$%š##$%&4'(D#T)5dt*„#”6EU$+73e4DTd,FAVu“8…•tg-9GW„H”s:;<=IJK#LMXYZ[\#]fghijk#lmvwxyz#{|}†‡ˆ‰#Š‹Œ–—˜#™š›œ%&ƒ'()*+,-¢56789:;¢<=EFGHI¢JKLMUVW¢XYZ[\]e¢fghijkl¢muvwxyz¢{|}…†‡ˆ¢‰Š‹Œ•–¢—˜™š›œ¢¢}#/&$#&%4&4#b##…†ŒyIqX€-—L7¡—,TU?2}@0HcX]v0,zEZAL#ŽsHP`œGEƒ;‹™?vgfM›QkL:JP#XuJPk^O—axo62iˆA=#Jk€4˜v`Qœ‰F2–-œ`‹#I6d™*? Œ;?k–k27)[\s\l‡?6p*A•Gq”pIŒ:#”l?B:.ŠPD\7+',`Vprtl3%Œ/.ƒv&.žu6hV_?‰#% Œ\G…r¢#M6IL^#•Œ>SpZL7o–k&˜/<ŸŒV&p*57/™Œ\b s]u™C(Šw`#ut=#V8cŒkq‹7#e0D[Hr}f;oƒœI=vTkŒ#eŒ'Kw'v+‰$4šSK;‡Ax^J2•MI‰#CUˆdŽt[†y‰Jƒ”tS…#„N[pfE–‹‡vLjJyC¡ˆŽkˆz@e^/=ZCŽxR?“iK@-r„vNlw‰O¢k\Xf‚=ƒ#Ž:4uRŒ‘tDLwx<6wD*$vJX-7/wn};,zaSLxruFdV=8œG'+JŽ@L„ŒNqdw`Œ#˜7“_‘vw†yA*u›#B<[šJ5Tv–i‹k‹-c*A`L`{pL¢#E<A‡—#C‡t=m`Vch’?uB_y1Ctc'zŽkj†qiVLkh&;q(W#/šJBe=‹Z3q&PZ[J‘¡%=-)D: LPy?\v>E#3-ŒKŽqW;G$k<žu4pJ\Ci…ŠJs]t{‚W†b#},]s)hK’cC+•›Gh^H{DC…=fjE“<D#@–cO4Z}Œ}”Žejqw#eVo7•n—L,A7~,™˜<GUOs4†\K;xLn<—j†sS@Ch•\pYn<•i“‘*t#=‡U”ch&`Km;JyMk—^x|\\hxG7/=)u:RˆPw3xlM?˜jP#˜‹žw6kM(LyOkœ<]†-@M'@8„*7$E˜cLyFt2HmXa K$Žp_Vvc‡–rBm'#”—J)I/6ŽriK$9cž…/u2Bq$k$]uuV4jy#6W‰0:?u¢#]#,‹7[pQ[CoQ*W#viU4L{pD;7/)/1LG¡˜D.7i?s'ŠHmSvrŒo_=1#fpW=š71Œ*=#rPp7…#\GSŒwo`eL[pƒ#W˜™tq[~tY#6}~:H;jos.TTm›Ž=2S`(`‹$WJˆ–Wu›I’C (I/‰FR’pU…#GWioIWfŒtXcp7/4S0g‰oE5‡xš]hŠCJ™’s\KkAŠ`[KAƒu4c6k…Mk”†*A‹NW?hMVŠs=ŒvkR;‡~kjžtI8ml8I”:6wI‘Žx—hn‰d3A ywp„ŽvšFŸ++ƒ6y8sŸœ‡—NkLv”*;K4[L5—WTODŸM—\Œjm%VŽvNJmƒq@hkT$piFHmb}4CfwvjmNvdjm#s1Lƒu2y?W•#2y7-$poK7#fl-w”Žlc)Vm%)Ki]t=#G#‹Lžu‰0ec˜W/vkI„4}%ƒ=†m2)‹$~2HiShFoMV[Cc*S‰;fWi>7fP#m9(jˆkE5œ{;{…VBc8L‘—€…r,W0q6ŽO>4j–OR39‰™™uhF)ŠN#Wƒ0hr;N?tŸlCfI•KiL•l9GM}‘Ÿ#*=AŸw–POuRpr*_F]šP{o¡5g”I„<cœnŸf/¡xo‚HQH„™…n;&Q6[1:thvrŸ0(jfŽ2+B1ƒt˜škRŸ\…;‰3ž SEŒm)G’V1ŽfaˆC`B+˜~lqOŸFPO’<={9N(20tuldŸ Ž|i1}}D@v^iCvl†ˆ `zPoC,K{~BgizNŽvd99ŒM”ANJr•]PCWtRX[AH/)U_S<fY†1ž†H›9B„R6}qOˆŸRKm&3‘˜‹Y‘<;$@N}a0YDg†…Nž`Šk=wt_\ž†2AWœˆyAkG-E“*%qV;u?FJX›‹fY8ZU_*š)œ†20jL>EŸl)UP]5™3)CŠQ[@3Žu_J“AŽšh¡7ay˜>KEžl'’‹3t9•+k‘26#¢#mv 4•aF›Bƒ’(|_lH›9˜‘H:t_”Šr)kcD#{3B™œ_…`VS{ C˜B5{ixa@l^?v¢NUa0T‹¡[w4¡”z?~}J”`rf`ua*Z-˜™.›Q)2%\J:K›}ov*o†4/A€¡)Žl˜+0( pT^oUW:ˆ#Ž%i¢m1—2+PN›b t,W’2›*‰f9-D|—>p>Š€ˆ?&¡A€L]B&JŽz˜N0]B-(ŽYu€h’>™fo6n.–ž(UY”?%EqVrlvKwWŽ“PK‘<˜Š)ŒŠFC$=R›š“užd]Pq8QŸSv˜>|/}LPm(›?Aw“œA8l}`Bƒ†S~k”u)i%}.fr‡8ZS¢aobB•5jrn•h]g•_U4Cqf-F€wAxJM›jb~tEvGbv‘‘6v*rU“ŒFN™+“1]‡rt%\AFny`.†Jdb‚mvO6e3‡a^“™\J›Ot€~~Iy^p„:>*Mli1€˜2$_bhL~›‘J“er.DkW ZšiGqC;ML$?\˜Hrpd6jdŽfwˆ>Q:¡dJr–ezf]>L’VU1<•(5qa/w‡O--M[_Š=–AffaU“)‰TO=J$X 8ykx'9…?D—5dwTœ?4Z6&hU“J+Ÿz9¢žœ…r,›+:o\5h{…0uOD‹-'#49Œ<S–B„„’efpRS^qZaœr)]C7=(iX‰h^ >'afn_Ž&‰‘~#G‘_š#2q2d1ze|Q#Z4:&' .l8‘]šd¢Ÿ#<p„@e}kvc=w:¢2/UpG.*#|.@Qx¡.žY%Z4?Bˆ‡˜b|‚…Y`˜šB059•K„•gZUv%V ƒmfž@)¡7=š;m‚+YPDˆ™’&X€JE2@Až1›œJ+0*‡>XŽfh‚1Ÿj…X[wS‹s&7ˆ¢e#œNac'Bk^Ac–v-‘¢XR|&…pcf“Ii'xB{-]60C—Ri}^b*b+XaN›A.‡2ƒ„Œ¢#k$„Š-=5„šN11¢#tœ-9A,lb8¡‡–yaŠr}02+™—<eB0{3)1yi]s‚‚M<[ŸŽwj*Ž‹I]taq›{ˆ¡x‘cAN€B=‹¡F¡@rB8OW@j\}a›–…yyI+š–k#™^wsn?N‡/c™™R8’aEAŒU‡2,ŒsJZŒF0n&|UxrMB=) pwG™aB|v9.^;‘'.>gL[&f#_ž†H5g'@—DvB—¡8$Šb.¡P{›Fy¡0,OQP–‘DZo’N)1|%1œ@2\#Rw9tŸGQ„‰` h•~v,DV/{I¡w,/ ›<IQ9—• Šƒ`T~*…p-ˆ1+˜nF-A::0#u”š¢#=O1:_h28]A'8x>4ho2|=Œ[.+x–7‰LF-T>bv%u?†HmPIMO?-3kbK4ˆ~J`mS28sm^=“C?1—#Y>-€€xrCt™mQ[W$›SGd‚-F™VŽpbZJy$=A‹?bmŒ:V/›‡šGU=#szZ&y;‘(x/4m”•Z`S-2X•@6s[cjŽF@^Tƒ1€K%V•Œ&0dP[Ÿ>LioH/e_™†*pW“_2KP6pX”6XœWu[uŠ\Šp6pqdcH@,c&`(Bn#P#€•‘˜'&?¡ NŽIq“Q@‰Md‘7ƒ‘FJb;‚(:N8A‰qYvkc{@qlŒX–=Z’Z„pm‡6@Gn'Ldr;R~P2o/%%XT840m_…P`RE'{NT“,@<`¡7Qj•m2P*c=7~'œAC1ŠjX‰2*–YvkXk“k.–•¡8ŒL‡“RkUvŒŒ|`MzF“R)—’X~/k93ž_HnƒT&$fAu^=kœr6†q> 0”-p€+kDybT˜cŽX ‡3X2VŸƒ/l1Ÿn<zb4w¡8‰a”`R22Ÿj”PrŠœ8?VMD-oZ>ctW˜‰s^b|~l*hR”ZŸGy}¡˜99wXb|R˜’y9•Žš)“VcK0œQwaa>BF]‘Slk*oj@lEPY˜tO-=Fe)›n=œ]‹~†WYL*^–s2qS+B4›ˆ‹}Ÿ˜%~V^aAc`1˜$¢#gzx9qqy dACd†dn–’yPw˜\tš%n›Ž†X–jŸR‰@S-Dœž„ž†‚Xfi‘Xy#sd<'ˆ\kcŠPh”e¢˜\zŸB6//‡lP–cl¡ Bi#ˆ’†Œqžpœ™3‡6‹‘pŽ}<v„–”›zl’žp‹918Ÿ~OƒXa}‘œŸ~LNž‹YŠZ28›\*ŸŽ8¢ hKkž•'?¡—b@Ÿ>Œž‡ŒqMe25›`,ƒ…&OTŠ“}w‚~Nj/MbU,_46—g=„^%rv7.VŒ¡Ÿ¡v¡4\y˜¢}.i:^lG‚€{0¡E–MHVS›Zo–ZF*N?žF…Y¡ZXAb–”EjƒB*Œ^D•‘Š2j‹Sai'•'~BˆD2#‡:…a¢#r}‚Šj‡/Ÿtƒ˜CAWBtM>A2~6fyJ6N›Š„•?ƒRQ™Og¢#‹8R|rp—¢¢n#D•njO{Ÿ+Z9~ƒj $D@AL6hJWzj(|r7d_4Ž€N‰xLbB-E)ŒA^“.Lj€—wHr¡&x>‚™z“ES‚›‚pŸ26z ][…*¡^u‡ˆ•ajv~j`H>jHŸxŽLž‡›iŠ’ŸXd“?`¡ž\u1jˆ}y‚XˆB&JJ…’Vfˆ†k)™dNŸkDi†‡:š†‹`Fu0Fu_qB}–cv„j>”bc(qST‘l—ˆ&opŒ›f†‰‘8ƒž[˜9B;›‚k\=ˆb][R9‡‰;oƒ3Z—ƒv…“Zt•Xs˜•PFu/2m“r' J_K†bR“U_3_4l–:[IB}6’eA{¢›|at+c‘5Š•ƒ–Ksbt|@lJ8Ÿ]ŠcvBAA%‹zh_2›k¡X›`›{•zRH‡¡ZŸ›–ƒ•b,B2Ÿf„f|¡N›i.ž,Ž\C3d’[<3%b':F`>)h¡€‹a„>YlNe¡}^HJœ1XVLuYQ=ŠnDž[NŸc6<%&hŽQƒiC•1tŸŽ‰_2¡š'‘Šbˆreaw“I\yE›ft:WD6n¡kt9/œT/'/%+i€[B8 R„R‡<ŒAH,aoyhQoNW9‘ˆ(B*%“#l”s“Ž4>P0ktjo@Nwš*Œ—I [3;–‰Mƒ/¢CJ–N^sI/s6wƒwR6?_#w%S{8ƒ/w/”waAYM+w‹p›Q6+Z>=<‡j@M;’HmZ’Š”•j%:>Yž†-(T…dYL¡]3xŽ‚.‚qžu{G`\–}y#/‰b_[*T?ŸF2y.D •V&qI#‡ŽšQmze™4B6‰@ƒ??Xn}›ŽrZwIMMPs‘tjJ}A…\<Šx”GV@TFkYjˆ<N4‹z{•QhVƒ“,\…`CŒS~•FLVJˆƒ&›~ Y+Y07#V&/™F;žŸ*@~›q¡yŠ}Œˆ$–‘}y¡$AwQ7z$z BŠœ€~j?œŠ1…qZ”vRfUr5*2n†;€l˜E†ˆjbD*fkaŽ_ŸrIœccPk\ŸPJ~UXo*@~5p—u/ULu>82[KrAw(‡RžpU+#?ATvkŒ7ƒuƒ-[‚m2”j\py~›uY*Yc[j\˜X>n-FEC\ƒœ#%™Jio@•“9a‰ œW/>mmgsz‹Gƒd1bPl53k‰fSC ƒ)#5…E‡'YtHYR#1'…Jœ•&I$LiTF?s&E‰>G.0%jrt……:p-SPˆ<šGi]žw%}e|“.'ddd‹žF}$W,2@œo3[c_Ns=5n—‘~‹l-#r91T;`‹l¡‹nxUjC#&1kF,˜Jj#h@;oS†AA7›c>GO_E¢:,a‚PCGŒ/V)t9F>zn/=•2}1{@†“bw–j‘‘toTkP#Z~bš_1jt?Š/˜R~l@ƒ+WŽ•T\:e—rH•B92REa%zƒT505{m)cF-^q12“‹`c)2%aJd0*Q`.~U_‰Vmkc3/>r)Ÿž‘qN:5fL$~5h9”0F‹C1¢G?”w˜P¡Ž}z9Z4#}%_Ro1›ySWj]˜WzZT&l07M9’Q<2\c’˜Mžg`0’OQŠkH'†H+Œv“b8˜9t_M.”„~0¢gaYWvCM0B…YZš][J[{nKvškkH•)œRPCwX\QC\MTŸ[<,d‚™QUŽ,”ˆ{z]‰8.kl?ei{3\ƒ‡ƒ™‡™P4^QjaŽBY'¡9GuBfK4U]Y>?™5’ QŸŽ.kšt%MV#'{+&M/ŠL`N=~c¢#3_z)”†h]™P„¢r'q=Z|=›,‡vJgYZ‡%km]l‰#XUmSYŸjŒUiŽˆtSeˆ##{ƒYŽŽ~r{–g2C‹Q}0(7uOZrR@RSU8_€mq‘žC…2ŸA(Œ(š'‰Š\•NERS&¡jaI›(‘”•U›`—›'<-Hxpvežq_O+,7˜CAxH2{H†[F2“iŽzwkŠvN0qŸI#„|Y8/A'–‚zAŸGy—¢<ŸgdXvXžrY‰Ž:<ž~nNfeZ5<E_&S2o—RG†Ÿv”5~eX8tŸ[N˜’5’L~_“XQl9‡4i’ONY,MzFA“4+_1™—†G/†\Z––z†e¢TŠ.D85€Že¡Kd,WH…&nSeQ™†I€u#>@CCL–:€,bƒr<QLd”]pPh‹•kVGzoCJ‰\x†4–†v{1N—\bŒ 8†i“‡ ]oh LQynœh;œ‹žKPXczAŸ¢#VOQL”*}”“IVaH~G2…‰ˆY(QF/€–3.…_”1ŽFx[‚’EŽ‘Qx@2&†’b‡‚4Hd…1z}xcxs>dO‘~‰jJZ$v`NG“JV œ„\˜+.˜5‚7Gyf:Lš]gMkt€U…JRI$U7–1€“Ž?aepšs.%N28‚~9$.o^88k*.C+:A_zS|›Nfyz0ˆH‘=¡FŠo.¡•o9šk{%rk^Fk†s™ŸP7F:—eKdŠŠa\ž3ZAP~.`0DX@S 9X_|hvI<=Ÿ1EXeL—Šž`Y~¡,ˆ…)„ŠŽeBŸ™W>b¡Ib|‚W‚/0%tsŸ4.8‰~V‹_5¡#LHa¢3Ož’,Y‰yš5~ƒ~Œn6@‡im”‹Rš‡/•: ‚XQaGwQpP>=ŽŸDŸ^¢#%˜›9ŽlxO˜‹c9m[Bc^O18)‘c&<qbE-‹z¡,r'M’]†v”pƒ™,({_]mdMTŒ?”‚Q‚yš4€e6fMEn7-<@;-US`+FKJ…Zm:uB•¢X‚”z rg‚S+BV2*¡8`Š8J˜SNhN|*zX#~r'5$X†‡/@H.)\=BfZIŽ{¢QƒC5W‚;—&~•hYŒnf€¢,Vlv•L“b>[QaY_›d€bœR-n—;zAC&~~~12Ÿ7$>ŸœZ2DA|PMAk‹o5s46—OW‰Žb‹bU<–7žq“~IpO>b*‘™Š—Ÿ`aLJ™{‚[U34X1dƒžŠ™Œtgi‰pNp*Ž/ƒ9JK‚FC@Œr‰‰5GNVRmU7=3œŒul}‹(yN‰•['’d[Š;_†Zv•Bfœ:’x…B`lj@Žtl’„¢S“‡|M5gQS“¢1g¡˜Š%“D.xS*o• #ŒTF_›“™Y™=&€l™œd'X]8—',#–7kh2vWŠA{j‡X—zf`-†}rx—@Ž+m˜8bZ‹UiXa{…9:PSd36™$M*ncc™R9_$`BP…@be(r…Y>y]-pš‘GrVkU[5‚S&ii–›kz‹’gb.}=›f¡80%—H`X?V|‰b74œ0™3}?e[nTugŸ‡jG–pj=/HuQp<Q…ZH-f‰‘T-7MM0CUQ•;B1b0r‡œHy.@k_‘J˜€C~¡”{?/|ŠA–-‡Y]_9HŠ‹,sy@I4–“c1+w¢X€‰4kFj$ m6>\($qN”/YgY(?•T-?¢#?y_iŽM@qŽr“‡~?[œ”3}aZƒSM<mCZjc,…WDZœhœ4¢3T-i^0NKMY,h)$*J}5w™T(aŠ$@€$@SC)…IŒ0}~F#jo8/=|~›ŸS‡l|N•†&Y2m–h:^j$G†[[&[…e.(oD”–‰pƒ¡“Š’->yq(•[”szƒ†ŽzpUi˜“iš†$‹[W¡—™Z+Cu`FF'?ƒSjt”{”c8Aœi)<•qœ;?0wt€_^¡e9„žZc‡Vdg|8{dUD¡j†›wTD0¡V–l[3V4~p%\9‰ixt5j[F\X&ˆŒ)e3SC#+)l˜hWS’'8_A/?”‡=88YŠš89.•?1lC‚+w\quz*=GB“NTFq/¡Y…<#WO5BV($-/…?†a˜E#1kUSD\ƒT?os%;VJ€5K1•:\8<#+M-^x›k?—HvG.`‰œrRs¢PXI[09hG¢#H-ƒ='qq+‰{KKzT<[3IˆEci€,j†A¡7ucC¢Š}ˆrš 9ie{dO*;[rœ˜E†Ea5l†6š>Bœ`72Rœw]Fž†;4ŠJ$/†bsv™i^$>Ja#˜pvGQz*‘lde>]B‘K3ye•d{{0`\ŸŒ•\{i}S;?˜<[IgS;a…t?Yb”za˜<{qV1r? ¢'})nK‰f'cœ+d‚rX‰‚b<ƒ?›Ž{9˜•>$j‘`˜Œ^•UU[fŠ“@TŒr|g7~2*œŒ€G-rImvpoXf.VŽbZOPˆ–”;OM0_c81'Z1_?—J7/l=n,_n*ŒUkj<J$‰yO†‹X&35H|;/ŠR}Olv—c~~‹™28UV†Š+/ Ax<<0jUJv8klšŠŒ™u4š,D2FŠz’8MTyTL“…3ŸY‘#~`yuJŸEN4<Š¡};‘žŸZykŸ”w+‰':-~??%N‘h¢{IŽf˜š*_T™4|F‚jœŒ™,ŠKA†p5O‡ E]2ua*PŸ]`VU~H¡H¢#d~_Ÿ<F›¢ƒ}˜)X–F{‚™¢#’_¢P4m*6…nUXJpc#^xƒQ‡&p—u›QŠ<qqYˆ’l}.™‰“€b˜1—r7Œ6d{ya~~%kca—r•Wƒo\xG†@c”=r9ŸqufRŸŠH›“›n,]a~8*B_žj; ŸS_T/‡Yœ.iNna^›AždZI-ŸVhOtP|~Mn`i lNs0-qZYT^vO{ž_z/H‘x‰:7=™Š“:>5<HP/{—r*™b/1EMU•.tQ™‡uUKHP_…]A„LŒ]™J…w:y‘Š9Y1E6qŒ6ax“œ$cjcAA@–~/Ba4~†s\}Ž.+ˆ•_W¡(%Qš(.3g,†S`¢=…i—B3Ž}v^.œ‘PRf;Teca~;S-Vn60>kƒn1¢žx”|z‚G:W’%OŒ–5…$XO‚=,G5F—\[g7AŠˆi,H8H\X‹žB‘ju¡7w‚O˜>kueE[-CK|>MN’8#?ƒ$–šKŠz/ztB.b—<˜0‘u…ŠlfGt\A)I;Tf[x˜|#Š\‡z‰— BŽ„›Qy}liJ“|apŒGy‘76¢‰##2ea>“ @b‚#.jD0j+XQ0i>gZZ.Ksefs%9xjqKI]œ\9)˜-8J}0¡Ÿ}˜?Z6[<1[zH2acx†zqB5_1”'5œ+5‡”Cƒ~Fov^c|\›{•#6r;\P@Š™l;u‘W|A•šNŽ`=yBŠ'y—l_Ž—‘BMHy$E’št)Ub=•2=4›qq^—w_Y,QI\•tI0[)ˆi{9vMvI+k $=~”ˆwxQ}jIœƒ’.zA#=a(}‡}0^~‡+wŸgA„MF'>LKSBU–#?Ÿ‚rHŒ]pI^I~Ÿ‚|q:Y:+NG1{qx7•+Xœ`OŸc?~+J%n„P/@f<I0v>:$•\k†?U”$-š2|V’†'=’+E“xxlI‚Y¢‹I†j;m|\{1ƒ*`ZgF¢rdhk‚hHe€28¢…#‹Œy†™$“xz%u›…e’S-Š#œšMbZw¢# qE’m¡’] 4[~c™’xR-9š=JŠ6_SgŠ|t†.œ‰<BE.FCR1Ÿ[@]Ž*™†;pžgŽ^T$Œ5VA\e¢P•E J ™]amj_G/i/n3“{1;G *†wyG–-#.=Z[J#? V`‹]wtx_(Y1di\‡uŠ[—h]WO1^6ŠG?M&z[t•kRG/fŒšCgF—=d…œ—†Xœ[•C4d‹T€:QRT]‘F&k+‡&w#bbvBz}[ƒpˆRJ*&l0t@’e&B-¡—6&*‘Nc3&G…cŽ—B‡†Ayjdz5\0OXu0j^}m_&&A`b2z`¡”Ÿ)IXœ¡U›nˆhŒKF#*ƒ.2¢m ;›Q‰W_s_A4ƒNšŽ.Ysc4Y}Ll>d*C‘…b82(2–F*f4;$B¡[Gg”bB]z2[ T^žw›Œ‰y,ˆT‡†\ƒ¡‡@ŒDl'O>‰TfKŒiŠnV†Š-i{+&e”}Iz–I(\€_ƒA”BŠu{c‰x0?c“7o–l œN%pP–[*~Z¢Fw–¢#D+#d•?‡YM)Ÿ/–rXO5YGF‡5c‹yB‘tWŠU…e(@™?9Sw.‘gn˜%J3{p^5BužZš:•A=•›bŠXGK+€8T8€n%Ÿ]˜‡xhX–™3ˆe#€{Ÿ<‚¡]5^ˆ/r#F0:P*BCSbmO'Tic”#d@$‘¡eWœ„1?R<N\ƒ?–˜N-]OR)0z#™r¡—bƒ~Ccxj/f;#ƒn”h#LU`f€ˆ[}•bn—N5[kš8†C“\‡6yA‘y.[i”˜_b8_LLP-›¢Mxkq>&}1?u<xD{*‡(jBgjzsH{B_#1i,6w$hoE@>S¡JO{sŽpmƒ|ej–'†Z'1s8(EuVššŠ3$$—ŸLp7’djpBkŽqyi;žKFaŒk%43TH]*M›^œawd$|Tx+Ps/–vXŠ5œ/^%Ÿf'_ƒ˜¢#I=Kˆ(|q\ŽA†`Vq}tmmži–1*vŸLa#€onZ7†¡_R<Igo/‹M')G“¢PzNn&2…ƒ#_VuB?ŠoHIlsaBwsC%’“*C•¡-y?&/v'kŸƒ,$G1;i–(L+†(~?;tqi2m‡G2S1wVn1\¡—$&Q)y#Kw?3Fd(`]t5†–M]\cc™N MU3tNƒu˜@Y¡˜‹ekaf)<3?‡`(<6c-\G†&Q:2^‚”uSŸ‹/:Fx&/BV]K4*tp˜2Fi%eDŠ$Um/u™Žh–Vf:b*˜RPZkE‡Qj;>r%*WAf~B<l;Xkr>R;J1›L‘œ‡AŠF@‚STibqC3a˜`-5š,;¢$b}X•n>87ri„ŽˆT>ˆO\0ŒMNMC0/U›cj”VpW{…/rmŠ/j[uFbP™.Q‡ef“x)rabn „˜>GYH™s2bBVA=&;Mg8Z†8–p¡:¡ibN3CS ;OI_4z‰2P}oNJ2^F[‚jj2ibV;?qžz^Ÿ-›<‡”„¢#)a[9“[54—„bn#R€uZG-jr…E`“Ž'’~<pJ#„…b6Z2a…D‚%~g{[‰<yI<dpJJCŽA]AAw7u)\xO~f^l‰FŽ‰T[pKM’\F™ž$q D*`•]X—}…1&QJ8PwV)}Z{c†%Tkƒ¡˜^N†B8l„‚Š(“WJl_z˜VP¢#Pa/q_\Jx[‚ZIŽl^E…Qlm¡a›$N›^:x.dA)V€=‰†2U’QœR1uša.#kq#/JBmŠ˜ &f€b.p':}P{b0ŸŒ(uFŒKPIB/Rk‡UV”‰’Y€F'%GAS5dFo`”*d}’)SYZ“žfš…•Ÿ.…O(ŠX-`~‘P)‹d25H@Y‚#Tƒ9kp›“a:†JhX`}HpfYš}Œ)ˆAJž™y”0YYG0—A6›XRŒ”Œ0Œ„>.6†Hp˜Œ‰n,‡0}ky5(}T•B8–{‘…”ch‚1[›Že’J¢†9›~e.ˆ’‰q6( 5‡~$5h=?6,M)Ÿ‘C\lvXA`’ƒx }H@H]*[‚[4…$Fs..5“#y^¢›#}Bq“yTu„Zv˜r2fr’ž#•hek‹I„‰?T1FfI–dkz`D›–L?B{DWPK‹ŸX¢Ž#,*-¢Š~k~@‚qyj+”_:K81~v`uOGy€wE”‡ƒrm b,'ƒ$—J#{_šG›Ue€ ‡LG€%.ž’GOlJqœ_-bŒ6B^vŸ'†\R)_faIp„@¡znP8QXpC<F†O5S•}+q<J#1l ^z“qž˜y“j-~f=`0‘4ŽLg’/3.YrE3fžYŸ;˜qz2W7Y{œ“/LL–’vqRL™qPš:šWs^Fœ3‡Wgiœ(:*K7t•‡¢9k(;ŠQŽ<s˜™<W^xX5W€z™U$/#B‡39ub€U+L{?—'z`Dh:]1€šPPŸQTiY;2a[L;“$O.C–A=LŽ]xwŠ€|H:‡V6,Ee7)˜$}Uj'/Šˆ˜†/P—JoQš•~8{˜2,_›@—b0]@¢x‹[•Ÿm'2kP~#pN}7]*Œ3Sc2xX†¢#YgOaŠ(R<X%.„6¢#;j›zU›‘™qœ˜R(œ=w8z3‚€K^`‹›&>˜n+GIu2w†`vš3<q`h›Šey‰Š†j,|a>_e&*%'LL¢Œ@’„s,‡LF)8F•)#pW$FK‘n‘qe64m›¢Œ•]/ >”$3œJ;\bŠuE—^@V3~S–z—’75xyJ•WKžXœ&7J#1˜rA8fOCe`–€‘_fƒžQƒ–š T81j„‡0X„:Bou†jJk¡q.™B0¡^9p(3^8/t¢#oGRt•’Ae2Žƒ^•€QQH-5AhW;œf3?1~It›—Rob&]`‰0š”Zfzytp0O…Œvˆ_„INˆ~#ƒ—FJ?”ybj_A” K=:$Ÿ5–‰•‰\•¡z† d-KbKV?6?”$˜ŸO=t†žkFŒ…Dš)†™#.?#` 0$`†ƒ$DšA#›¢˜Md|œCuŽ–61VOzC…<Cxh2-[ƒ–$r`Y^-‡YM~gŠ^…[lžM˜)S1VuO1CT&/5c…]2†Œv-A1€{'4•8Xl?™Š`q3€T#8‰GƒY$\¢#b}‡0e•G—'K3ŠT‰\Ÿ]s3hr-—nTDv?DTvO2635-71.z%b\8MoUM,•@C”(&A{hˆ%NO‡$‰¡Ÿ’ŠPŽyOi\\•cay†™X\_¢MUIGSxg†?Kt)5c‘0p#)h„5E]3?jB+Jƒ\pP>†7C„)kSšš˜E„o4Bac•~CLq… (_f” k‚;j?kdX*%}5m;S;_MKk—¡w[%‰“<zŠH&8i“GA”3m¢rHOk46IžU‡60f‹ZJBP‚{&-’Hw1mz_8“L370&[8eV*Œ*&vg=cgS&<^,_UF”*Q Ja7gxxƒ4iB?3~*——‰IŽY^•U `g<[{:F*?A`N?yŸ˜)0<¡sw—P—cŠHg\Ÿ8a+\rsyZUPq^V{vu?Yj{PgŽF\-E9'‡‡R/A8qŽwVx–q‚oAFN4h›yR‘”‚o0hXXž`FN¢NžŠoAuZD+U5g”Œ={“™`F”:wP‘–†“ `a5‚¡ QFY*Mw5nBm\ˆ+œ8`{>O`a‚I™]†›Bx[y€=‰zpu;UUr‰lB•r#¡)[^bt4Ÿe“6<XK^kX`[@IŒ‡c_¢_C†W”;RCW•0eˆaŸ/$k…rXf„l‘>ƒˆ›:l„)t–c#2i\€\|šPKP=I_*dA^tŸ‘‘¡rˆb|R‡™ˆPŠƒUž‰ƒ—ƒ`bD€6o†lNNUkOƒ6‰k’Œ~”Q.…šš ŽƒJ|“GŒpŽNFœ0ŠP3E<`™Bƒc‘Ÿ?=ŠaAUŸ–@Š=Z-h–Ž_Šm:/s+dŒžt¢#aV†ŽŽ€7”pt’9I/,s_–v`9^k3C(yyŒw•Lc˜ibrirEHE:—”_l;[\fAalxŠNGMw(2?%;#drfqž”&p]'fBQdž[[;B†rX‚†3y'_5Y‡ \zƒ1 MY -Mf5iV_R„Fb–L/\,3T.ˆ0XrQa7p4i‡€:&0C1“M@\l‰>B‘.ˆƒ/ƒŠ‘–›ny‚,“a?w€4;T›Gž'†2„``NŒ•}MMM?/6(šiž$|ACx4\uR7gB¢@”[•mtG„ŸX\2gKj<5A]Šu6yRZœ'5i>• `m/RN‚cCL:S*Jžx…Œ7Qp[/?‡‰L04FS$)Y]#1,B=–”~$Zs7Š™9TrƒNvp[™3?6@O[Ÿ¢xo‹yQxxwUp‰‰95ctp>mwQO$qHi?1e#ƒ%]™_a:G?†B7—Žz4“kcW`qŒˆ3IŽgqŠ%‘k NDp,e1œ†XJ˜Bd0#¢p#Uj/ˆ-Kaž‘<<%d0„o(”^Q…Uc†JX`XQ™Š`1Q†yKY‚1~GRG\(,TkP[9V*F%›C1AeŸ˜Mb;’pHjŸE™”‰{^ƒS(z<nYE;/šŽy—@RnBe}W:Ÿ”_šyr]LS†ˆŸYj'¢#š<Œp”8C—_“i&M}6‚Yq†ŽGC Fky¢#tŠL”JPl,†™v.vq>†r1>{*%m@M|lƒ#Y¡qQlVT34%8Œ#•C/x€AiXD{\ŠG#]-d‹aDŸbz_Žzƒ€Jj]*•+QŸršaP*Q/“žK<B$$ƒYz(q?)[Ž-‚']—}hw™Z[Ol†^€{†aE…Q-‘€hv^\RE‚]LB1kšMC——”LŸh†N „N†ŽJKc@GŽ‚¡D›.fu¡@›„J€hw—Bv[R‰fKˆ„†&;fŠF?˜‹N‡pˆZ8ˆ7Oˆe•#…Vp—x&kEI–fš@†1ž…N,Wg‡_)‰V|]]–kayvAgBSDQB†—0Œb”fdb6.\LŒs:(+T‘…h™(9G™‡Y,F[1~@t—>’p.aZtŸDGlFqšz#pGJ‹‡N=Ÿq{“kx'”rH“ŒŸo’›pauan8`hX•i“|Pp4,D9[s#m†Nh*ˆ&\>Ug+`N-q‘‹‹%ˆ0<“¢6¢#L#g‰„„~;FŒV#1i‘sJe%œXvh]G”PNŒŽ–Kž2{‡l6”ƒ&00o_ƒ˜brAm%…}~>.‘,Os_K'H(%L„B7#]>—<hx U•hŠžLC1<\s9,/(;jmŸ†AxGW-iuyzaE›‡˜7Šd“†p“O”k‘GKŸV¡™vC/;B‘Š5Nˆr‘}Zt€n†rD,JikVi`ncCi&bq8|˜b&R.]€‘;$8P(W‘v%qeq;w†CƒzIl¢#A'”v6h%EHhsv„[k{_2‘@Xn:œVD†1%œ)c•Dg‡A—hP9|O&Cj0¡KuqK{~(\_žJ&“™I#žd4šL#1;%x3Š›9i]6€i“<Ÿ?/q%¢qN.8¡Xhp™AJ…m—#SKY&W…/Š_‡šQqV›<E€F<_9”l72c A0zh 8•1[yQoj$c<<XF”6o7‹_l„D_d+%}rE06…?iC‡KlŸ—rua. 7™††(-#fZ.œ>[ƒŸFwŒ2qbe¡DR|œa^tsCXE‚nŠ˜LZeD?1”JJ`B„kŽl;/¡—/Sg‘WFI=H~_˜{@w–B‚’>t}IC˜¡›^•“k‘bD8S~F”ˆ@˜j‡H:*[Qf~=-KYKOh;;†FŒb+mŸsO,4FS‘*->•jW+—U?iqƒfJZibY \cu+TJ.X,ƒlce&œ—C¢5:l^Qxi”Š[&b1K t~E9+;le¢M?ƒšGx;j.jTG<o•2–^Ai=›ˆ+\_boF–{™`‹.3fOS~U_”5‚`‡_4œ— 8K],Hs{?A”Xz1?¢W]n`yƒvJ¡3#‘‰'Egc&>Uc(`*Dœh•AU”€N™0HVnG*y5G0O“i'•n/$5i”;‚$XTWŒn‹I“F]>‚FtHyWz0QRP€“œ4Š“(,@Z{=Hž…›d4-ir•Ž8 mž##—rm›šPvž x1HTG]^i•P_ˆv?‘Ž#jD™ Rj›v”)Š˜f5fˆMV‚šŒb—6oY¡›ƒšA‚8“r~BP5TwSa€^BiYJK‡¢#L(Pw=/‡Ÿ“N`p¡L›Š}“~cZ‹Ÿ\œQmOGE€_(D0^%-.2knzV‹s~ŽYis{m:yv{K‹ˆ/‡SQJq“€o›’XOC¡ž“NJ1yuš9Kli;^BF}Œ¢:;aDYF(WnW)[rŸœgi/žAˆƒju]ƒ¢#-¡lSWœ.abO6`Y.hƒ_8†H’DnZ‰N€N2,}e¢<‰šr€+Š˜€Pž€Hƒ&lf$CB¡}BlWŽ„y)pˆAdƒ¢#&=J's0NhXev1\?J’2^\™nBq^p˜bf™C5•>]%žg[ŸŽG”\~~+‰‘”„869=y$<w r%_fg“¢#W‚$ŸH`‰fˆ™ƒ–†;Wg–)’œ13¡‰UC`‡g:•Ft OW‰#BQW.(r\¡kJD5Œ]g)ŠvI_1[zO6k–4*…›R6ŸWˆž~›R|–uEtP—+21${ E†BvA(*“X†]’x/˜ uR˜š€qŽL|mœk}@j#4ŸMJ2›+Kp`8EŽˆŽnfO‘€jia9”|qC—ŽnŽŽM#…'+G?œŠ–’u_j…¡2d0^gy6–n‡']?†‡s[dzt‚zŽ‚V›ŽpzX‡0m}’h€c0‚h*-‹-r8r„`–jmX˜’e‚,‰‹P—r8Œ%™¡CƒwfŽF“U)&Im‡yNB‘‡BmqwP[oK–vaWCr2“Š2zX’(JŸF`aJ1™vF^8™Sy|_UA¢œ`z†s“ &‡ƒbY1”oj`WC_Z’.*|7•SC¢rƒ¢.BI)—’+f01E^Wuƒ]tH–D—aEa—X“j0˜’%aˆI>faF-‚QbVš+$I>E¢ˆO¡C˜FbtkŠŸY=I{ŒMx@…ƒ™ _<˜LfP8*u5W9Ž›b=a+¡r[^’[‘“–^Qƒ•–Œjm:r/HZaš45O—[@6~‚|f`WŒO5;C4‡|Z*e&$'4zPj–;•Te†4k“)“l2œh WA*&‰)HU™Eˆ7Vb[B>nA0ux„v]mˆtAJO(ldžJ4z_a{6;i\>%ž–4Žx’t1@‡og9,)—n†/—rPSYbL˜„‡›<›s5G€4/ŠJbX}]/_’›S6Bqk™iˆ¢r7A]pm\`}%…”1™]†‰E”l[ŸCa•VZv=“'‹˜BŽ5+ˆ1U›XŠp—3™ƒ—O/q„sS†&?zFŸc–5ˆ\[Ž|–Lcq1\G<~?¡„be‡L‘leh;;$ N’R{6e@X”JdR?Œ~z;9š-cr€p]ƒ¡€**J›;C7M_–- +¢#%œœL“R…h#Ÿu0„š</Š¡€z*—wb8’r–MBe,„}j'b„¡:”x™,L}a.\'5gHc -BG„U”ZsK'&p›<:d„’—€=pgiKDnWJ.’D;uœ$kkcli+fBŽ‚q¡t¢#\+ŸœER,wWƒS™ML‚•\#]“9r5Ÿ“P¢##/“ŽfOR‘—p>[…a$‘A@~‡7]K‡l‚DZ?–jL#U–~rkmQ…{ŸE=†c=¡Hƒ’7~*%†‡4‰*Nš81“H?‘M`cWC9t€ˆk’–D|jrL|U0\{v+‘†c[em{;Q]l(ƒk3Bš“*?yI“/_V†@]n|p”(`v{C¡5|Ž™„(‰‡BA/”–3b:_Vcf)?zpN‚Ÿ,”*)˜ŸD9RD|\Ÿo“s†O:0]wŒ’›*&(–gpˆV“$aMc? tq09J .5]sœ Z™$yŸ„M‚LwXšyyI+9LIS•™B…/#e/‰G_1B*A^”|O‘W@5¡„Žx@_f:84O-/‡)%m)N3Vq[p Lp†B/AGv‘RE6gJ—UY‡Y>cY')y$?:#†/‡—Rp2”‰P†¢#]+F3Œ}l%vWHc~K8”[SmRG%1jR—Hx\^’o“]w…Ÿf@J{Ÿ;vD’60›9‚z”QOF?™=7s9`%qP[~;*=Œ‚\{\^xiF'$q]’#l¢#0HvJ¡t}B>,†~‰b™?C„–kd7ŠCBr8s›Œ.™Ž•R„_mz_^œs)~`[z4  ¢3A N€—`a/lAžžœE5dk“GwBš@%71C-ŠW7†XB*>›t‡+2I\E™E+%kDdO–4s†vA]™Pr-›w›*j—}™A~/š:LAfe[<?ž6ZŽd`NHw/YYUrŠ˜Mh'‹}l#GƒM7/?6‡sz8ŸB›]ŠiN‚H’e}€dPWHˆ”\f76‚Šj„2H€‘‰O4‘a#iAN&]Ša‡PKmT<“œE¡`Te3—@ŽˆrD/š5Rh¢6>ˆgU.‰y/|„#eK[GzryB.5ŽgœZZI%™“veB`œ ‡2“^„$A4BY`0Ÿ:”9„žI›L……-†‚žq˜qV31LN9>Vœ—\-,J~-N†™)œ„s7^k#K9k‡ABm<šS[epC<9[@aWK‡#+W'beC4h“dn„H$c;‘{$A˜“=c‹\Ž6š}Y˜svfb=+=HO,ig%Ž9e81f*†ušLA„mž=} N†`TKˆmP_;C`A_¢BRmUž~gSjZgj€qh,xPkD.#(Ž5”V(‚twzfBŒT?D¡S5Œ$ŽA['‘@Ož˜ ]z™• Rg]˜|‹ˆ4H^‹$xkbM#aJ/”=|Œl*tHP‡NC&G(hk†\B:W%v*dHf&qŸ¢#Ah‹Z‘ˆ+#L#”jbT$K=%g’&6)G6‰`SKp1€7E )$–$qB•Mi|#•eY@Bo/†?j6¡8…cPiem5djDŽ†Œvœ¢‹š&n0†<kža˜|G(D‹Hffiq‚…f¡BO0–¡Hwyy”ŒOƒ0y“&/lLŠkfcaO(\ƒ¡X^…Š{›¡ql…3sš'71S\uOrFac%r3SRY\^4Š^1xIV€nF]œ8>&[O0cƒ†&v[q~Npi…`=‡‰1‘ftŠŸbu{r@X>\¢BosP1J”WS<I‰,=6*w:GŠ?“\.M“Ÿ06v4¡HxŸŽZi ~k~k^•D~&›–€e‚Qnš3u_^Jl`uC~GœgtY•|GŠ”UŒ3\N9B,^˜0ƒjšQŒUmpo9J>lhŠ#*ž{ˆ†“Ra1APO˜-œVQH¢›ji¡†j¡›4Œ™T{}qpgŽOR“w%fQ-b;G2,KO‚-b&’>_J†9bF‰S Q™„ˆZ‚“'2‚x—b@všB“%dƒ¢¡#-š™-5hEŠžz9h?‹Tzu.…•$ž hž/}e5›>cY]Ž 2“h/M&)ƒr%#’3œKAAm}2~G—wFwœrƒ*’ipn„)C„^†™0I„#[™ZN\E‘’APZK‹¡X™š(_ŒG›:vp-œ‘poUIC—4BˆM¢?9^&uaZ›€^“I–d–@žzpB‹U†,sY/œ ujW;jJq8:“™r…'}<BgFyx‘_ZK&H8og?er(=z?”‚–Qk`pu:GYZNyqXFDbvOB8¡u(<“#›zu€m&UapHRAœ|—Oat›=†”r<¡{aC4w&hDŒy}’OG””›¡tgTAmSF”p—œJ0aB€›Gbz1}:9¢#q^A'y‡”‡rBA7C44A žwy™b1˜V/–€h>r1}Za™#DCŒ2tkj|‡P˜QLmB*W„pœ8XD‚8ŽAY8‘ˆŸfP‚g$'D‘ˆ~-BcQ_KŸ(‡d6(UO=€`y‡Kj#Pv‡‡:¢#a€¢ƒCPzD‹%s'ŽlGy=*-QTc……ŽSc`RdŸYb€xQxšo“iL“=@&”9.;'X+95>G’†D*nBot=•LjU’“hm=(›Vla>R“8 –uWd“oŠHO\5~ˆ*JeœMZzr„‚'‹™pˆGv—6ž[)& ¡U›&`?m%~* I&T}]Ž,ŸRƒr;H9lPƒ]š,™p/c_‘š|™Š”J)KrRgN@u“h‘„¢2nšŠQL}|v›0~+G_$•`(‘HLKŒ\Ÿ4*ˆW‰xNœV˜Z_HHgtjO‹R8Icž0M=+P\q8%~“ržpB/o…sPJY Io¢‹,#S~|„61z1[RšrŠ€Q8“šriAW-$RyRˆ†^“(s0&sCƒzQH›†™¢“jŽ*cœqF”^n1œ1M8v'„kFˆ_›-8H,–&¢#4mŸ5›€PM‚l ,Mž}€‹&4€6h4•b|32”ŠœyBj2&B‹b4P—›ŒQEZ”eNXP5&:[<Tah]&¡y\R|OYtp>{HžMj‘nWi&œƒF¡&-bH—›…vl&nV˜X)yb‘e$zdš[Ž›y]8„k€tObdlwVrU~•Zo›rƒ¢¢#/RŸ@N€¢#eTQ^}˜Œ•rˆ&R).y…”&‹O›\`$C—Ia,~ž{mL;r+z?&‚AxiŸ¡t‚.D_|……~[¡|;~$MRŠ‹…Bb”u¡8H“™2guŽ¡?žzXŽœ=A;iu„ŸuQbBšD˜m“¢}yQ?]WFJa)L]|šg†B„<h…L˜‚‡wŒDUjˆr>2d[‡Qœ^LˆV/i5g@c–wB:‹`–kg|ƒ]–$v&Œ-)|„€‹}`|–/1M'=šr;ŸQ’›Pƒž^iz=h{=mNY\>¡ƒ?Mln/8Qazo>ŠU$qc_=žˆj™E›x„^’‚(Kv¡œfKUVX€Y¢ypO*0vo[ŸŽ–^˜~AqGU0GZ`;K|{xQ~a‡0j#7S~)PEhv‹z‹PŠ?B“q^@_,;9:;Mdd);Z91x*Fj*2q'˜4@AOE˜g“&‰ˆZ€tzybžT21†›ŠBB,6|3fF€^j?i—bGV'IŸLrše›n¢#–yasu|eŒMv\›k#ABxTŒH›¢#wtŸŠiZ4wTu…2{P.8\€‹nc)#•[¡˜Nmy‡[–NB;˜Ÿy”’+¡E›Fpw_N5?0„P˜Wl¡kžQv;@ždSD;B:‚J8Š%~ -O+XLQ/1L-y]–grk‚•8R%•/SSfod*AœRŠBŸbžk›vnf=‘FI}‚^fŽ„KH˜‹ehˆ<a…Sfƒ4{hVC#*'18‰†|™&w˜Ku^JŒRQ9g›In€TMœˆ,}‘N%T5q27.v?xœhKPA7rXŸ$EŽG¡G[v—k= n75…HnNo“,6–ŸIZG<*FbS[;#JX ^”^c5Y› „9tn4P˜T49žp<P‡CB€8.Q‚W1>p?5”6‚;BŒ0bNB%zƒ)\ƒn^™yW ™•}Ž¢d‘A5f5#F“{gŠ(d @•pžj-bSƒG}*hH'v›&ei*[Z.5ŒVj”P‘jzm:'/A™/¢jHwo<1j7ˆyl^œ”Mjˆa<Pž—6Naœ|5J#/“~‘#lŠPs\.99Z@F}rœ?8$@‰P(fYX8cq1Vl–{z0Œ‚W¡šf—[-–…}>‹x>š4IE8K†vžH*œRŽ€D F_–<OfZl>uMw|Yn];u<#bZeukC•Š*\Ž\•+JCHQJ¢œ6ˆ™FHMmY™”lZ‰4*€/a“je+Šo¢#x|}z+ˆ—’*{nPDz™}Ÿ?jWHz'G/ns#\aœ_“F`2=vjRbP#.nY‚i]}0š85|$ƒfFFC$1Š\Žn_„‚}ff}QBU]O{w‘R#M†yPF_‹.Œ‡KlF[0?™hjUaI‡-O–R.B>8˜B,}:™q`4'“‹hcnXƒVX|r(8{–$‹&aJ`Q`š™]›.¢:DŽUŽ=w)^.[vr9*\=•7%t> Y„_8*[…\‰n2}&czb/Z4Œ]‘'r‘hG€:r)jl+‘&Mˆj:s-—R0¡}j¡3v—gu—`ŽkCMd…L(a‰G•gA†|`rXs~I,i€'›R–5X‚h¢#3e1lŠG]%;wZ4\r|‰G&={T’ia•›|*Mr”.gGŒL,1DY&Amz‰F8’A95”š'_R…0Zj:AL€M-L}xž@pJ‹7U‘'?m[J–W¡#z?›YBj“r+ŸdXž Š†~^lkX>\Q0`]ˆ&S\Gšr?Yy4žu€4;ˆuhT•G$Nz&l™ax+R^–dejmiIŽuQa<‹tq'‹_j7d[„¢#ucRb}<92']ŸLAP‚4{N?Š•,T¡_–Ž=N™D{” VP;\OB^+†ƒHƒ$3r`0=š0‚ƒ—zu…'*xZB/WgH]V?$y‚\›aB›‰.&4’˜Rr¢b,€Ž a^NT&šqsw>z^=,‹¢#Sg‘”RgPylGY;†Nk#M0jAC”$k¡jw”‚‰›t&†o:^š,&ˆ9’W@o•V‡Š\ pŸfr“jƒoi‰…–q6~“o0X;0Q‡v?ZqkkIS>BR#n5”Œ‚t|n7TV)};@‚'mTi#Š#G$lBqBV=y>-i;9TX#,5ŠP4›„t/ckvŽrp~#Vzx—^DGOˆyh;=œ)7žžu]^kIa†5V)c&œu3kCZ™”_‘'CˆraCZ“Œ=X •A@/H~™V™E”G2 x—B¡OšL‘’YWnl‘Š4IHOLm$5`N#rŸ—8‰:=0TŸp[R~Xl4gC9X•s•;?/4Hl_¢#M†gˆ…88ˆ^]‹3t˜€fŠ”|0€Ž€6iI†13l‘mbOG1k/?‡†J\jq[Mla%“oTr8~|A`L{p(%R4Šsr=vŸKqƒ4e<…pX˜0ŠrrsW›_b—WSj—BMhf%€ U_”$€5]˜RŽvW{OPFZ1BV€eD9Hƒ#H[†•Q_PR1‹€}=™]T}8\5J0&l+uW~gY)’WZ%_+uSI#‚eQW“<oU\…lž`Uš`0y–'Jxˆ | j[zhcuWŽ%rˆV¢#›%*¢e#Q`ŽA/yR+2™/™U]XO-˜@]) gR5J>=?ž˜r„Rcb=.`dŸn`NmYmˆPI‡8k|ii¢`”w2jHošš–p–.K+(nLg#12;z”8–r1o^¡?”€N~l 8XPsžU–‘%Sc%8k‹p~š/—kRZV;\V^.’uhdB…¡8:ZwW,O@t.|YFS~7FŽ¡mšR,¡aTŸ[’(Ž% '{qg]G$¡Ldd‚rDR\ŸJPfRR›zpw–,4œPs@†DqA*>¢]„ŸƒˆFŒH:xQvX;¡tŒŸ>TYzŒ€2_“a'3+XˆxFH==VE0ŒXuša‰›d†sbX|B,z.u~}5= XaAuuŠ,SJZ\@ŽNUu_`„žnz;˜‹o}g0PY~.|/<JP‘]ŠGLŽjšsz5›Rd:bb1Ÿ|”F€HŸm2<”/nOtB]f‚T—E`žfz]x:h`=jq”yG]'aHSAOwUŒ”‘9‰R•i)^9jƒQœX0-AmŒmXXqm7Hz‚GW ^bR_mwaTB|Wv~Œ9r5š–<DG‚€cIžŠ/A?—_L_J”J…zv~r&G|$]#™œ<'/•„\‘aX’%;›ŒG›•ma@-eciip=„”\AO”D(ampšS~ˆWL's-¢#IM—ˆYšŠ:yK•^™œ¢#Ucž27“:š^FŒ’Šš–2LogVi¡-{šžzOŒa8v—Kg' 7yc™0#MryZO=*B\@Žof(+Go•UEKnx9_2iHW{Er\19Up4#(r9~‹m.^›PŽ=‡–R,¢XBf˜B)KtpM0žuŸShWv#™8ZžY™2qŽa€›(ž•›@–iaKVt_V:ŠŒH|q|+‰87n”;?-‘Œ>-&A[“ŸŽ‹s7˜Tœ?yaŠx˜PJfSOAD…&^o•(GR$A$‡”Œ™B)¢Œb.'›V…wA3tigzZP.pGJ>4w/%VFlrv8œ^šZ¢RAY]”…R,XŒ‘ˆvy8™(_ZpV1ƒ†/,t#žFA”˜RŽ 2P—`žeaPFZn^~@‰]™…uœ‘dŠJ)G+8f—}€qy•EL“iE?’†’~r:}jM›ž[sU‹'Tr.=D'•,?Bch–›zj‚._n—r-uŒu_q,™+GY?¢^#O”ˆx, Œ|jŸ-a`’xXXTW[Až„ˆd=:š4u%(&\R1˜^j“y:…€zb}1;ƒ eƒe75_cEA%XJ;x:w5“VV\Fl]t‰MZiTK8\^v r^”Y“BDyZžG|$&˜OGeK˜•e”px<Z›$HjLnB4ž‡|M}{,U[—(T¡¡œRArjR#Y}pb™iRF[NUKTZ~\iƒ”<Hyv2ABMK¡˜jv‚Xr*„wyI9]XiFŒW%F–PEP™^87Ry`˜˜t`4jzŸvŽr+a0b-3_@”Ž„“%1JeT]3s<‡˜O0¡ŽŸd|›H…2)=MO“™p,q‚y—<i˜‰`“QR}¢#h}O:}**Fvu„–œuœ€wƒ/Š‚PœZb2¡[›v…†4~O•€KAŒ6$S¡*-lZ’'>*Dg–‹šv+GBYi`jX–6{G•>93‘.<Lˆv‡…Q›UpK]Vom‡p]Zt%l)EW,Š,F¢9x9š“oojf‰\j\kŒMmg^ZDw›mff™b†PBgZ•r‡#&AŽn_<‰Ÿ$ er+C”AvrG†Hg‚<¡<{~ :cj›lF7t¡mVtš@–œ\?z+hFm¢y#xB[-VAŒ~B#˜@x—)jnA~EE5–=X’¡%Z˜b+]YJ>.’$›-{”X9{‘as`2J˜QSvTk/Y$;DS+ž\J:RQ›ŸNxWN¢|Ši]7Ž]Hi@A8;?9l¢J9C‡|#b}‹—B|ŒU••G¡IQvG-”ˆŒ~–Q¢#c„1:–h>&pŸ`WM›žf¡I:~t”j%Cz]Hh0)¢#L4…\BU'$–32sŽ‚_@“|^ƒŠjn.4ƒœX0.v)jS–{^*+,%i”qi“[F(ZP›&™x^YU“W5Z]pP…‘lJAxWlyo2„”aƒ>vs:[žz:Œ¢#0AŸ’“qŒ˜@p1L‰Y˜{z‹Hj<74)/x=Všlt78Ws1Ny`¢#%œ.Ž›h¡p…‡Yj‰Š ˜\1¡‘&j*@Vo6¡,Sœ‹Q‡9‚44\(n„yrB…ˆaX˜Š$ŸX'”z(QZd19/Ÿ-zn8>&‡ŠƒC??y‡™Vid|2-•1rq*”1B¡–M~N,Y@2 7WB{šd}NŸT MŽplQw%NG(&ž:3Fa ž-‘iQ¢‡’*š6›i*)ˆŸƒ'ˆGw-)[œe]¢#}š46Fxz~[N%k]/†Q`‹G-C0h.‡8ˆV2“H”‘AŸš:€“˜†h=3Šd'DHo#4{••b`MO‚TzfnN\HUZb˜u’x.h\Brrk›iY]8`œ/1ŽŒ:ƒv4ˆ‚>3”,X™&–Rœ¡’w0JNes3‰YA$„{utox_r5v~¢ŠpINk'Xž+ŸvŒ$'BˆX`T*nŸYŠ:gx#5j[rJs¢#Y(*“‹n>R€$—iˆ0Y‚HU(C65US>]zPhIGQgUM*e%Uk?”2mT‡NWeZƒ${”${ ‹uŒ|-zdw•n¢'¡2:koYtTŒQ¡™:Uh$›YT›up“Œ>h9T¢#680z-cf532zˆX,(Y]T“76rCV3IL.>›n1ƒ%2G–%KC[|Fn¡+`›…Gˆ=y€ScmlbŽ]4…z”<&–8uv‹‚2—`9€}„VvOW{UšYHOd)T/i?1¢]ŽŸ‹sFwpISJˆ‹<hk)>o%$—tp|{™V—G2”ˆ}2$x:Gbv(Ei€SwJ&cq{žx<šG,{J<G?-%cJŸŒ0aK6ˆwudt?eA^¡˜H8H'(eS(7#šb&'¡bnyƒ=P'KAƒ/4:&#B“™…LQ?S-o8Ldjqa;bq}<?ž‰/uœD'ƒ(–cA $”*vŒXžp4XI9TebŒ[7?†¢g<ŸhrJXo›a\.˜P‘‘¡n>0SM%SujubV1]™‡”G~G-X…f‰ ›6z‡t‰UER9dS™j‘'†`qTŸ\‹Zƒ^y&fu–t?^[eœ˜ˆ<>aaK†rdAG/Ÿ]`Œ–x6Š^|l•vl>a+Gu9†g]YJ’$IcY“);`K”\2¢#ORbPš-‡˜9LKPt{&j‹v\‚({P2I*>I2}@NQ@%6l_2@nB8˜y6;ˆ$\'B_U›;—Ÿ›RCFAb}”,‡x:W_~Lh2;•S˜30_ŠKŠbSNyUUg^kfƒ—f?šŽu<}‹Sx`ƒ ˆu*¢#HM9SF3Ch6Œ‚’ `pJ‡Š¢GN¡7ƒ%*ƒB¢Ve_ž…B#0žiT1HQ|„Ž4ƒ5\w‡TjJošž–ŒŠŠ›‰uƒe(‡4=FRœŒy}7P|2H–$<;†`J2œŽ|xIM™ihv>JNE}R|¢#}5¢I)l…H™Y6e_Žˆh_ƒ?Ÿ%2‘Xb+@LEyŠO‡O“&r=zš‡] 5N'“[x¡@Apž/}1DMƒXjDPŸI+–4cf9;;qfb})rh}œqR…\O˜ R,ŸbTZ–CU1l5‚W&qhm#]A|‹–SgLm^FT}pW‚›Dƒ—k¡G›{d+EtO|‰ž,ž)5\‹l—¡<›R<›’ž -I‚{Žy+¡&vŒQH/štk‚t=Vl>_v”:“n>4)} 0›’)Ž}2-Ÿ‡”zK*‘>nUa= i&tˆ'_¢I&LNœz>.ŒGŠ([^lA&)9JP„H—8 ’Dr)VI}‚~0sq$iž&{ ]x<R9›‚fB1?WŒR˜ …r~lXqZlZ•Js1O #O2(ANW4‚yŒt[’Gœ”g/¢#,„*Š–&›znbX¢2’RŸ€uƒPy˜›—P)–vr5nOt:LWT~“d/ˆ)vt~5Vh[z‘}P˜_]w,dX{¡MB¡=i0IUU›5i`¡œTˆžŽ@tjA2Ÿ_VŠRƒ^=zrab”Rhš’/ b)_¡d–˜DHeP‹uj\99l,V<Q€ZRI–G›6|‡JuF›2YD“¢#^d9:9}h4|5G<o0•K .WO6›[/[c<ƒ&-\bf”N›š}1›,† qwŠ‚gt|}{‚GšV[ƒUTN€3K>FzGJ†$rV-T)qnv4mŠ4N€2.›šjšdXR‘_nIŒ5tFGzsWTp#Kcj/q^™iG™P‹—¢7'Ž]J+Ÿ”H.9.C‹šZ¡Byyh=rB^1'MS{3#C$–zœ„/y›92.Ÿ_“d  š.Ÿc3B}(N^I/;4=A+%ƒ}Š<G˜—˜^\2|>gAM>qgU›HRI2CŒTEjF{’C5UIsqbt/6l?‰7’e=ZDmU>Šr}Zd€:=„•›vf}ˆt^›2vwQ5šžTI‚~—A…G%:G$<Iqq]¡8’SŒ›dŸF…~PVŠžQr%ŸV%“‡p81@ VC1g?(‹EF_9‰ƒŠHL_zR›nd|@›~Kr W„€E.e›&oPLKQ’@Ivr,s—*7Zq?zd¢XxiTNŸ„zOX>lŠ)<^fgZP–M7+k?”61c•—h”i]gaUxTRJQO|‰›–ž›2…š0‡Yw2GŠ‹-jn)Q<A¢#}GššŸ˜T‚_`hŸ„‰nLG\…œ8œ{\Ÿpž‚d2|>v›6œJ€Ž5I*iF€oTczJb‡Zg—{zLŸ$a{‰awœ“z€D‹ˆzyvda@„<*t@‘\ W•oZBV;†o/#A&oŒy^Lbvn/HQŠsˆ0Q6–žrPƒ9„žGTA9b38w‹B˜(Ÿ…Zt„+„@m…ˆDv{,¢#$…bx—b|XC/G=Y:Hij¢;—P1[kAD$Šœr‹NQv¢#(D„>CXvZ}Wt4Vk6tŽk[’fUBPyy„%jTœdJv¡h¢6QD6F‚Œ™G#ˆ'IwQ9C*ar› Žšq +…˜>ž;‡”¡._0%lƒ]G^F¡ŸOBubu_\ƒRŽ)vrJ™Q:z„pe~,H^2l_9Rcorh{¡I^F–61B‰o^N-{z–?OtKu&L‹#%.h‰—¡b4–V–iJf‚“qw[q5T•_pL%„)‰.nn[ViAp–O‡/šF|›zO‹‚“nr@&p8@_3bYYlyX‹†Ljž9”2_noRR’Ÿ¢b„Ž,GlX>†H8_€k5*ƒ†€q+<‡k%[Žk’Wb>Ÿ^`Pgˆ9,žK_9U|€_Ž*5eWU—y[7L¡X[`]–xpRVs4–V™pO“¡<WhD‚ŒP6B 8aˆ”Al”7˜~€]Ÿ=“f‘6ˆYžux~IXoŸVb>‡#ž#g[uNZh,_d>…ŽPU@-„dPIŽ+J^U]’9uhGT‡“:#69—k˜R3¢B+i= *.I18RW=‹:™‰’Ž~—\ž_s=mL7“G$4•)e@;Q‰ŠM\[#s‚g“clG›^„~œr7_ZHƒib•p9¡•¢9$F‰6y›„`)+PXn9'1$Z~;5T˜[‹*Œ‚ZA:._–N€e9‚4.)TTˆdVd3¢e##jX¢mcq¢#'aŠ};xkz—|d‹<{G†‚?‡žy`’€j‡¡0›‡^†Q:†`qANž›FkŠBcT|S6iJ{hD,g,0|x-ŠCZF\PB6Ÿ,^“QC–ZAY”Œš;œX—^,07¢#_km‘¢#$‡zjbUY$L›sŽt+.”VŽ]hp\ˆT?V.6<‚AL|>“'z}ŒS“`J.OŸEW_5ˆZlRZ]g~Ÿh‘‘G™rK‡w`‚Ysrf(› Uˆ’†¢…N[3Iž)W`S_?k=uMHV8#ˆ4vG$<?Š`˜(H™(>S+1-:†‡a%[¢#,AŒ™R.Ÿ~ZŠ‰-F]Z‡T„f3yy8Q“¢}(ca˜g~.›{^+š~ˆ,M^¡xz48XM+zH‡%#_AF6k™x|G‹‡^,¡gF\'$A‹brDPdJ:‘$qxh3†ˆzš‡&›–xp‚VkTI¡•~pU¡vj¢nœŒwU4u@xDjy1>C%Y/c&—CŽLNQ*{?ƒŠ?–¡8‰`]7%&™3N[$*oI4ljH} C1mkMGŸ\¡&'š¢#[HoKm.Nh4.@T^?D]8—CŽSWCU:UQ”7<y15/”`iUdC‡$2qS˜+u_[”?`bš‹}JzI›jJX`cP˜IO+GwˆHrh€‹$aX€’v<“dvz&šš Mƒt†D}?k”A\@`Ti˜JY0.icnIa†ŒŽŽŒjX9&IžYf—y;˜&‚g`[m^š69lGYœŠ`\Ž~FnWˆ_8›yie)™¢#I 7}}f‚&I™‡‡6–m‡v.<L^Z{•mqf†&Ž…yŸy;L-nq41r<K„XvRV(:šmtMd&ša†`”}9qbLˆ/$˜r’q.$YqJ4zD/9^1›AeG‡0n?_ŸQiL]%` c8O%T:4$e†JZ&[¢#\…(‰MH5SŽFk7UC12†Žh™S[¢=Œ”|s›9yˆ{n7BP€gd-3Hc$›#”›y’pb>G}dašYn™^C8‡Sd;1=<‰'46•$œ-—–iYx†|vš•??UF\d?3%0“i<ŸT,  <MjGyUaP‘<T<Tˆ›–sZm]L˜ih››O^Fu˜FV`_`+w†krd“w‘Ip)hxšilsL/1zJwv¢*X5Xœ92€sU3lUXg}€›œ5m|(wO7# ”F?Cn24‚,†E?¢X€RQ8Q|›1TI_:mŸ#xvkŽDje^˜i=—‹y(hˆ=\ly7C’sžsl([#QYL#$,¢#˜xxGY&)yDAT@c3–¡WJ{ˆ5ks?k(\i1V˜H:V5bp1**‹/‡/ ›QN?Vš?s/;ˆˆ2^*G2¢#X€|‹*7*;sn¢9s\‘TKsh?5E„iMyi.6v”P–>nK5HV^c%fO*žu†%_r<3†4UŠ')†G™pzb…p)`‰0pe6¢‹h`eQmbDq˜vs1˜uP`_•pZq%X<C‡2’rHaIŽehi™“)7fƒ5¢-9\ƒ8;vˆšj@r›’wp‹n’D–B|XnvUg…/•*T*]€ACz1ŸŸ–r_b”yq”–X]>X6 šHœk¢#jŽN€Ÿzƒ~~ŒŽFx—){Xž.Se<a{ˆ2ƒL0*u2†{jz0Ÿ†”8:v.zg›„=‚”sWZ›QP‘™Eˆ‹1Kl›?˜‘By_Ÿ]hH'’V`o;_\H—˜B2)˜+Ÿ~ˆKrGGPj‘|#>Q[Ÿ1Mr>}†et— ˜V|yW. ~7u›JTvRŸvoZ/cTQ9BgfBRDGJ™R_“iM^=eu‚=U>#‡ŸONŒl‘}0~nL—„N™9o€˜ŒKf•T\vEQ”—Q/aUE=:iU@j‡=28_4b“–…b-_AZa:X“Xa( I€o•]/nt 3S…Tvj:{V$kŠ=ž—¢#0¡lA†2“¡F‰˜p-i¢=`$003H4|‹_‘fš?ƒ–zA`N¡€’bWXœ5ŒpdQR7(s'v04Kj#C8Ž›w”‹”M¢8Ÿe.oŽb•ib$^L†+RGx:<dš‹f–5yGVs–)(J}›Ok•PWGœ*”žu4zŒœxž‹WY*Ÿ1h’@œšy€FA5œ–5Ž€s+(™E8&#;*j¢#8:/6o**›#a8}“eN‘,x /K—{7‹‘1@\¡Yˆ}2aI_zgBPVq6†b0Z ¡Dˆ€P‚G…}yŸœ0…RU]1{%;nB”C2C/ZDEin$dpŽ¡¡XˆP>w˜`V…9(”I65@u™‘e,B$“„&5#ž•„[rcww™TŠmŠLŸZ›xIu›<a•YR€…Lvn:x[|cOMj-19D. 8‡˜…aj=”’-BX¢XŠ'‡1~Œ:bVO‘‡@JFYvy‘‰{a…8…Œ€‡4Š†2–i„sN=?Ql<hž‚4fŒŸk}>Z6,(])‰‡*k>™{›cJ[a1 ŽˆB.œ¢-‘Ÿv…œ‹Wn‹=€^=sw3h˜™Yq~PQG:Y–hˆ]Iˆ<U$9<u,)W}s8QŠ6…R~zbh=Qy<˜-|3Lbbx9Xx~~ˆOt3xbƒ‰_Šv›}†…p˜š &šnl,iŒP}Ÿo¢#`•ux=˜ J™˜tzDœEb”Š(|‘w8‹.nZC2„{(›1›F>Ž`t„bŠ09r˜3D›‚vš1@–GI>&¢cŠˆT?xHPy(‹?:„”F?¢=ŒŽOma_tˆžJp7E|y[@ŠB„Vj7x€6œ:t@JCU%S*ŽR3Ÿ>A5E”`˜‰b¡9ZQGn+%†r4dlœ~Ÿ™ˆl’:‘\9dq(œ‚&bVŠ+X‹‘6ŸfŽ„nZS rMŽpw‚hj7lUi%%84‘›vO€Sn$-U–‚i<cZ[‘ZŠ_eu7?ŠLOJ–t“šc9e`tQ€˜:Z~Œ=œZUkl)40m;06+P<F&[”=yŸv…stEBpZ“†lF%9„*†ˆ3R^\ŠAd#dQi`0˜6 .j0s‰:kSelŒ2‡.3ŠLG…{\Pj†*%ŒI‹Bg} gƒ¢#KU7€žl¢#Ÿe;wu–me]TBGC@Aƒ<F;MkJ65]B“R<aU¡rzŠ¡P”HqEO_R˜...:_”fIr-k/”…gUhEnEƒ6‘({]6š;•3S,˜n†k98-‰rhz~RVc™U9+z¢ƒz0B•R…Fz¢€]`5FnvO‘“X[2r(op}',˜~{|2$™–[J8Q9+1vb‰pp]q|0Z'—™›‘l/vŽ=V$71\>†i*‹ BB}WŒ‚&:™‹4˜*PNor‘Œ}3M^2›@fl¢#Cz.Jhpb-aHu’J)RO†P0•†{d‡T~‰[•9yŸ™v*(ˆaJ›=Hv/nK€fUY#F”“i–•„#c*ZXzO@]-ŠFb(—Rb'Z™aXN›q™|—[x‘4†'4%tœg-+>?‡L*?1X‡¡J[›b…2+}@šy&ƒ>Lu;*1~0eyTƒj¢W€…B2IBŠ~]R(’œ]rNfuY¡›euzšnmœ™&Uƒ?¢#A@k’y`jm“q‰:„>+O—RnkOF;k<ƒ/MRR&R}–Žu…]TI“b,a=B*k}œAž2@Xmd?7~=]3•86S‡•“œJ6€žhQ7lTXn—{TPjH‹`M_„>6‰M\*[ŠnyE:NWd}&Cž)+`[˜…G0ZNVZoP5Shj/Ÿovc–2m0vpz?BOˆV–4–BmWyGŠ@K-TTžBImƒt8(|7¡‘j¢”cV<z4<™WAdY5U$c@Nhm)‹8SKx™/•[FŽoEdc‹*'>†/v€/cm*€\T%F’Zab4kE{8”“ƒN)ƒS`9rR¢#=$J€(ZQvk†U‹¢8y1|ˆ87)^v#?˜&B@|l9+¢u#›š10jm“awg/‹@YzT˜abRTGL‡:œ#„_vKB*žk.\eT,,ˆ\Œ*Žk~,4Lmx†x8qTgohfY‚T#kt%,'˜KAUSkœ1]”ŠX”z¡|\@ƒ#SVp&ž™}8z[7k†A—/G”œ/<{'ˆnF1b¢#mQm†u^deUi'yJIOlD,˜>‰†d&’5’e3K@&$ykj'™C/œ~eq-#GŠ‘U”cv{¢#m>(|9K;9FG‡3^š8KuyGJN`>3–j”BHz~Y-;,87Rmg‘3U`K$9oƒ4#&U5S&eB;XH‘4AUJ’``ek<ŠeQ(TB“_žŽ•MH9Sq“qw(UCB]–i.S¢p#_wX ;vo_*uUw_@=”h<Pz–-C;ˆ‡cœ5¡0jfSh9ˆrMnX X‘@W4oM3ŽVRnE3338zC„r*y`‰m‹Db–9w<yuHm8k\Wz(…2(Y^ZzI¢#r7k{rA.8Jndˆ'Š]˜š‹hœ8“•.‰„GrqAI^w.j;‚¡|a9U“aN¢#+™r^0g]W/E@A‘e2Y;lj&^)i+rCGŠBNu_X3”^g”LJ\)_|Œ ”J$kx%œ‡ƒ€LMc_6&3“]‡6‚EŸ•% @Ÿrƒ¢#Z=q8IIŸVC:5€œjS%p;@Jˆ[dJŽ-ŠŸžMR˜¢#+¡9a;“”u˜[+\oU[92)g5k#1d‡A)[L7…Mmm>MbwO‰2t€]A x<’CE™*#)u2'‡¢%B‘xH>”‰Tƒ1#’$j•¢#MG–OH€xu#-4=Nf(cƒ#G1Qf$?™l’xbŸ—l0T“’v6$*@*[%šQ`zXnjFqN'XhKyzŠ‚T1#ui•*Hp‰Q‹-ƒ•C‡”A›Z5‡+ˆZ98\<‹UœLk|w#~kc1-m”—¢#[Qqf?[Qu+,zœ‚š‰?2m$•r,¢#.†2”xcwJn2~˜hiGŸ5…$?‡1B8–.j‰p‰n[Aƒ“~–1LMcQ“^mRn’TVwž4u7ˆEIPGw‡ƒj’9›b%a(\4€d”M€K~~h.6™žH™–ˆHr#5e#4‹Ž€WŽn~80Ÿ`”u?…jnZr:}1U{‘k%eD'W;<wKumhc>%?ˆ/KŠ{ytFoqBf>8]6iL”Uƒa‰„>d„•szk6@G#VA>œr}}Ef8N<N%tY1\B—j›:ncA8?kLyl<:†]Œ7MkQw–?ƒB;+mF(€&‡–‡™Œk-•\WJŽLJKG/ƒšCD0&Ij~~6W™™NT¢GA—(šC|‹^‰j†~XŠ‚B9˜‚4›GN€‚eV[_“^* ¢{slZG1ƒd21;VdƒAj}=—IB“f9|Z7“Y‡†Œl[=œ##)™u_8šMXlq_j1›‚™[\–(u‚g]o%2ƒwS>—ž/“BŠa††¡fXŒF…2f¢2:|H^ŽT+SS4hQŒWIju•”<{cœd¢#yjrHŒ‚Œ=¡Nd’GZ™3Nc/œš4NLB#+z@Zc‚J(B\WfH“NSŒFv‘H^Yli^MSB4-\s‘1=“Š™*“‚(R%{|4g*R%0`†ŸŠƒT-†‘¢@'Q~Œ=AXxcq8R‡R_¡b{W)r\ +yI6“†\d}LBŠ“a†>`>nPbv<JQšYlŸxŽQu—~.)2v†Š(DumsŸ'41r\imL•gQœO¢‰#AaGŽMqG6CG›b_rYt9(*<jj<š\\j UTŸN#›.”&`†Q>Hd –0ˆ—“r]etpQk|&?L*•E.C‘PX—Z|g\k€ f&5›˜uI{ \C>86>)1*†Dƒ˜Fq+s6Š'Ÿ[(˜O€Js`zŸF\%9U2My-)l0m8qw`€:ƒ–4šT”v=—n0:z*]+O™TŒ™*C“U†“| ;jŽ€7=X9_MO~(\`UT‘a€e›^E0q”Akr.‚”?TO“@ŸšUgšyUhGˆ™hi,f[“Sg?‡ŠK8rŸaX @W’*}Mš˜h|aŽ\–/(Gs>nO%:ƒ#™q CN{†(Y&?~”A`Vr4@f†O5•r#$/=`#i.pU+^|Z@Fˆ…_6-U™OpWE•b ]WFNFl4‘„(Fqas™N/\M–=Q9<Nk;o$wU3?@ *CJ_—MŠG'‰Œ$??•`Lš,v7#[@rFA3—|Q*9bCZ3?‡Dd_¢t#AL$%'l%.‡œ )„‚‰AB†t7z2Aƒd[??=k\<4T–3)|‡†=…iAIQ*k,œ”Œp#sTl–%T>Z0_AJŽ’Œn?.'‰_$(xf†Q,N€b„/p`mSœ„\*X/4)‰+4~C•cŠWJAb„cmuO„€š)KœmˆZ_—Žp‰lpRClŒ$lN_11MŒ$€}\c{/‡K#3'¡7{ƒ‹<U•mcR‘H—)u=<-ˆn%]?6$lBX}NGUI•<5E[‘i›=„xg‚a5GUP‡‡†•K“l}GSš#?)‡&œ…$7wš]Ki$dC7cq›CjYŸ<PV,csAS]3?žxcGœœ]$w%rLš•ug,Go|x7s ƒrt’oIgVhWd|‡'ƒ*ˆ}@*7AƒFHq…[@V[cŸwuYi;œ/“2>œB>ax7QysU(Ÿ5•l6;dIE\_iS~BRx;_$žxœ'mo^“.j€##–zR8Au5yDzfCrŸ˜Ÿ‹A~Y1.3q:$_ K%MqosdeN(BYz(4rŠ|)eYD?“j@`Vg'^hc€=)`P-// ‹T/iQx„]^Q‹)&U:›zng/]‡•N‚[–¢#ŽwL/x'<+kG–jŽ@SMgs+_‹J<Ÿ5f8u^j…To9wlU•ŸL¡ˆ[ˆ/”/Š¢#PcQ/4++n‰h?#ƒ—jˆyk?BKYtCD^*œŒrH|ažkZiq“iOfL‡4-gq?5[_{†¡Z/˜rƒŒ{š[*n’5a&¡{`25U6/]–‘)N8ˆC3riŠ3œ—}…UŠ“6|‚’lL‹…2UkF8as_h@^54/ `ŽsoXr1}ŽY‚d„^(QD3?YhC‚5¢+/O“h…}Ÿ]¡{q}š+XN8;2g Dr]oN7^˜XK‰yd–^g J‚8tw_HA4T[@C\xRŠ.’?.3if_*‘C“BL[pŽ›y2jx—IB—xš ‘y\s@3%L[ h€™#$z—R+4{Œ:Ž™H=fŽu¡0€wA”†r€@7?Q™%ZHkv<Gž›[g‡Š&zu]Kt™nbzL0m_HYD|Ÿˆ#a`PU`0+5<Šškš#^—J#wxbVDy„0<^k#&5MC4\t%/b^=7/ŸŽIiž:6(l‚D;_#G”˜J‰XH†Upod¢w#Ž”}=ƒŒ=qB•R€‹YKvŸ(2ˆ'#B2ejo¢)‚H#Sq†w%D&9_D†*IAa7L›-+18‚J&O#<$rŒpr(-%J8*b WMF„›f/‘NVqtƒ\|f4p[;ŸXr”V]H47ŸH{b'B›R€x[)go8…kd†/…4‘7U>Cv#•l@–'c3O~›UV7’'Ÿj? ^/v5‚nœ…ŠA~Ÿ‡$rR.‰@‘-K‹{X˜¡XV(™-*Ma‘#IEL+{[ˆoqlœrjA?xk…4]8^F7”bB>A—Ÿ/p`m”AFš@Md6M#†1$AT L#ƒŽsV14{šI“œ,W‘ˆ[*1a¢#„—K€]_ ‘~ueY]u3S)“`‰+&XCG1dhdcŸVwšš|X?”)€d‹##*¢H_7u(7N(uœrf`gš0^‹0€>*&<W,$ˆ˜x6A*k#-I]{e7{Q›&TlšK›4AcZCQz&”C¢]wZ•Dˆ.Yv/)Ž‚jcn=ONdE8CM•&Ÿ˜L7MSBV2@^c`l‰C•rY|3LLD#b,xKƒ‡A…UYŒ#k*My#E1“j6ž#FCG˜˜GŠV_(+J?ŸqFy@O=•*h\r*C—aZ`Œ)Y5cUxS}>C‹›Ž}›s(™fYd&GŠ5M{qav(ULc7Q†>`aX†€%/[„)™Š€\™G•fDyAic;C—r–„C+=Ji# x|?K@2`p$@:•R<[†“_Š=?$=LR9r$`*<9G-k{@(“^*h‰#;FU/CŠOƒ/†,iŒ$yXœZH¡’\vŸ({U|)2D\aSWˆ-S}$^?†C¡`Œ$ƒ?š.‰8->:MAV¢#yyL…4‡ƒj/H/UR%Tvlp5W5œ[}jW'A\KhMhŸEM‘dŸj¢}#}34’•‡‡e$‰SJsxJf'Œ]VD#W51\€›¡x\”–#j–A7;;rHTiƒpq“-i\‘7i08ˆ%w€so•#G†[w”4N8-zCBES?ž=A<H7k~/Yƒ/AEJA¢='Mo–d,ˆ<–vvXE-–8>,0<>”˜œ•ui_pAc~œ…PŸwUVOn`l5/ˆiES”–xa~g=9œ…„WƒEbšŒŒc0{$˜7Jmet{\\c*”H8˜z?UN%U^,`zŽ+Šeo{/5$7Œ9KžxAzHnE‡”%/¢#0ts(Š/@__…O*&B–&u]9y{UnR_(“d˜Xu‡>ˆzcw_‚g<ƒ—‹r@0e~Cˆ“LS?—…$'$Ÿc{ŽyG‡†‘†v›E•{YsƒB†$B–=)nay.Iu8q->–˜=,D‹){iH›{?ˆTƒk’HT6sGv+km1„ŸU{”tNDet={{A17`*vh_ve•oCTvš“S3:ŸŒ„Eh]}šSˆ”?AŒ@^sDx\t‰GUŠ[J}IZ[5ƒ'{2l¡9ŠCMožNPdMp';XF;j’mS$Gkbš[4Ÿc]ŸJ¢#Rc59d•C8‡kjl=7ƒ6cu`^lVK“>dFnƒ‡6—IE`TDzN–ƒ@t`Ž›9g;f“c;OJvP“D0ƒP–3‰QFK.kŠ#š¢4y?l?”?Yl3[}a„@•A`Œ™D€(b‹<l^¢Hl[OŽ;,m’5\uwA –Œ“c+%Cj¡qV‘n–$vh47.34,rm3Bz…>|5(h*CŸ5olœŒuG8cAw‡—G&}o)L0‰‘žs’6•Q]¢m2)v=9ˆ+)Mžg3›?sQ†U‘˜~Vž[œB8bn5i<Mk€A“`2HzC9^6•]Q[ƒ; P‘ \žvZn‰4išqkli›c<OIœ‡kE>)hiwƒ/žBI~˜P/ŠJ+<*#™Ÿ‹%S‹|šV$]c‘†$61_gk…5S1&#&NwB¢J{1G{F~FUˆ7‘>ž‰2‰Omn0gLn3¡x™I%%{;Sœ†ž‡˜wTTkH\‘„2]`Œ);YŠ^ZT^šG%¡aaWgu_~HdQSk#‡…36O4CXmZnAw–4p¡XxQnF$#‘bœ>YSˆ,UkM4i%:Lj`kY€‹ƒIt9ql2'šC)d_Q(l“œb›ŸfF•LuT;rwT…ZŠLH…+œ>S:…”l[ƒ3”umKŠš#J1^=€#I,>\œ%YbTr†=0›I‹Ecd\~0jJ¡NiN*›t+e&&W¡‘Žu ?8K6_Y•d;jWF$i;‡[2R[[K#“i•¢.HŽ9ed<$F4~’P{1yH;/[.cl‹Hu‘h9e0\r;@‹%WeS_Uœ4?8SŽ‰PL>v‚?T'Šs‰^:3g‘h_@”z`UoCŽ_ž<jmib8@SE5'pLl‰SˆGƒ1q$ŒK*“2KCˆ”rX_(}šl‰'ASE-ŠaK45TY^44/1¡7’#-‰i‹d€JgQdrs”unAK+/L9;Vœ h\kDc$m”Ž?žu8bx5A-1S^32Žy#Na rMTT$l?™j™HJleGN”(ƒ$—Œ¡hNNjbC6|4‚bvn):[˜h™*B3m#9t3QV?rŠ›vSF0šœyœk&>(S0$e$†f‰v4j1…u5Sc|{—…`,‘‹%uDG8›cY?Q–u7kZ*;‘K‘ƒŸ|6xa{^oKq4>|G8<@[h,E.n#7D3(‹;HœrK7$;'s5ˆ<.5O)oZCšxElR—K˜;W}†Kd EvE>ooIu^@\ˆroA8KŠg@0<™œCH:z+›žxs€Xb,]‰6H &mx…_n^N`|F+’UNC{„yi|{sU2cTŒ{y4KLG—xHLžve:YŽEp’fuPR—œž{XKJAd{$MhMVg&•”[&jJaW8Y.J>ˆ_ZžXœ0ŠmoIT&)(XV1_˜R9›z–ŠI‚Ž@'u†V0‘Et ’Ÿd27mˆpFkz_˜HO›r‘@[rwx—ˆ^“‚(|OQ˜(tŸX4ARŸ::)B-YK<G’L€'r'?U0ŠSzD…{\[–z•¡b„ŸRRF^-MŸ?h‚*›ba€`2t’RŒ”ŒT:šSjH†€:~d/N˜S-•]‡3*T\I‚}`Ÿf9ty…'DPPK8g-&\<kAJXœX‘$Ll†N’Z*]g“g4L^ …'i5w~dDn–S#C8‡ G/†/k-‰¡fH›¢)m}œ„]Ÿr}‘D–Nœ3™5p:9~<qŸ\i/ƒ™Šw–•gŸQ}^P¡Y¢#bd4‡?IUpRY—^‚Ÿb7ž10:šˆLjG]|€Ÿ:4N+‚ul˜:01*'X•Œ6g]n~<Xz~C‹gpj‘‰Œ#dK#HU”–%SŽ,l_R… >q<&iAFu5zšr{PFWvWŸ{#lS*‡•3U$#}is*)J<`d`j-kŸ:ˆDŸJu|Q†-žpENn‰~*qˆ<›ˆdV2™QclŠy?”Qw€jk||Z¡‚ 9<UeKxwˆ€˜™:ƒRš€_@˜xg™•~‘~p07V\Yk4{‰zŽX‡•œ['ƒv‡s+CJo|*.(¡XˆaaT”*ŸPpRv([voYS‚jrŒHj8…Mm9+‰•c?‘[%,ƒ'jJ87Žn‹50Qdž”e^AFŒ€UWM]5?ŽA^?X‹M”'w6bUbJ:˜žwH.hO„€.Z/ˆ:ŠK„G,7ŸMO]b‡/ ,—Lm61šRcM‹3sŒ<ˆ9‘1rf€*3Tt4C#VS'3&l')†&˜p‹4+—{‰Kq`,a—FIT3jDdG1™K Ln’OH¡Ht52d#ŸK_4<,gom87‡Ÿ&*XO)*@zC?%Gu“SœH5€5œ€žliYrb}=€g‡SWsz5ŠsW%h>GvkGU•dCv% NK/F…_T—j1, Œ'Go7Uq~3i:DnLytTEo•>&/‡†Œc%7W#@‘7&dŽs1`Vu‘žcuiDGq)v?$ru~T†Ž™cGŠF&zkŸ=<ET6JJ3f5$Rœ–‰‚W$<‡TMd%t8k*bŠ‘tR9?I¡7Š*Bj”LJ_+C^Z3“:w–/šWvBI9''5~Q7P&rX#itG‰R\cl^SaŽ< M˜ZgƒVEt5ˆ1q]K1D=LfSu1m‡5brHM~<cy Cg†)‹Vs&Y7Š-mjJ>>i]vt_Dt/(oƒ‡¢}&3GTe|‡uN|[JJA{I”cxq…=c8#}itjf=('daxg<¡U\%O~‘X\z3&ŸYb8z1“cxd$?(j;_‘lLx8E[X-?ŠA¢M8ƒkk+Hw@?f8x@TŽŽ†p‹-T1†#›’}$6]T›#Ak<\—7E—(5ƒˆn5bT¡s`=#98TXAcg Q‚žw~wXY„#–9†”šK3Qix1Tš9bš*ZŒƒpU9lškƒOA[’c,/1/„>™v`jBJŒy„4eJ9bš2<Tx[fgGLa„F2zŸL”kIZN}:.d[G|(;{95M0if3[qM›xnl^<i‘a†4kO›ˆŒ?Ÿ*C–‚#Lškpk–I•›ƒ•#c™7$HK35'>|4a”J`ŸšI>2L6B?1> GmG$.5f’P^lD—L†(…PRCœ›œ”Bo™C.”qR[–3:J#?–hth^7˜>.:G>• Œ.)Cg„d}c/Fny8-5n5{^B$o%c^h<2qvœb¢#[Eh’^l;f4/SŒ›uU+|–3pc€ MS5nJKœm([ƒq-,’=#t&‘I{3B?†‚<M…EŠ‹>‰ŠFPZ#R&“L'ŽVCo‘Š„-›%?S^M›/NƒŠ‰\hCN[3Q-N{Ldx**`œ%Jl#tšUFv6ZuO>62)eZp$¡œbG›<€+vW|•Uia;C-TŽ%cie“+=¡IšNB‰(pj;lC“Uc)?“^x7hU,kˆoGƒ‡<–-j5€S,eUG%•1U¡&7$qUYk”€8j€‚wŠŸLW/‡…I(8qkœ)S`bh]¢™ƒdKš'O{$[c*vuW~gŽ\S‘…D/NBƒ2U‰;™0-5]wii]wt5j1{e)…Gi,/ ’QbWx›#„Ÿƒ}K9_”{xH,$\7iM/O‡ —˜c6A;m*œ†Yo…c•jšŸž(g-šhC)|3/WŸ7rovb›xf‘d‚{kd31”lr…MqTcˆ-¢U‡“eƒu†:DYW/€>W‘-J[5X+kkZ+dGQpŠ&J&CI@s‡fEkd™:~></$ŒŽ—-t=œC57\b+wƒ-;g[n'mT^^žB“G)€¡r.„PUh”7,145hoe7S\vvKFC<™X;xy-gd[J^~?¢#S`}gOd.M$a))—\ƒl2F“,?kw„w%k`dAF—/8+{F[pMFM¡†Qf3¢(_o5‰‡US\}œ}>Qx(†QS1`*›uf™, gm&qgj;Il+)[G‡cm:^aR”›s“;Io~r;r“†R`¡_fK4‡M;;1rG¡7UO›e:G’GŠ#L—ŸŒ$e.knkƒnOŠbL,;*†r5˜E}^fKb›D&B‡='V)UOl†/A&=‹eU_<m–Ÿ12Œ-fuTD€h4['K?BJZ%šQfa„Dx1eƒg‘JG/œ\›*€s+špI9OcFc…<+D]ƒ?u-%Žƒx#[Š#–d_2mAZ]\%t=;œ^C>_x†DžuDiax?%j#„—Hœ/I€J{ivj‘0S2RœOUFŸhow‡#•œ˜™‰H@ŸHGM~Y4qMGpRž“@#*RRvdUL…jzˆ†Ztkg,–;zR>H(,;JFŽtW4)–_%,j|b)žuœ„<%™Ÿ[ G1GšB}˜gŽ/P+WŠ'Kr„ŒtclFPLII%fAS#c’%”M‹+t\€k—G)¡‚(Šd=Dk2#QlLi‘Q‚7C–</†-#aŒ4XgœSCŠ@)T,/Eˆ*F” ga‹'lƒSJ-R’ZDn0;'Vƒ/ŠŽclE(†žgMm\žk\WjK-—A™L'UC<GAM%#ˆ,J;Oi)”y@‘[.*O]#ž@€khD9€PE+STTUƒ†<ffB™H:*#/Cˆ†”‡BKŽa€|HC[V3x2X‘<X:Yœ‘&K#mR&P&42n<”K'M&%”jz{x‡(<rA‡#‘iZƒ42XEœuœ7ƒ@[ŠJR7QTb51cv[rƒ%[C%>•.HK}Bv~i‚=4P=izr“ŸC&4˜‘8•>Cž1‹“>&$?wˆ[-l3Ij†hc4Or3u*'Pšv‘›˜l‰LD*Œš2“Hd†S&uIVš¢#k=Š¢_lT‘'wC9–0–6B¡;7P#wuGˆL)erKf?$u I^mŸmˆd˜)ckIœ0œG#Y+rJP•m@.EŠ#jW…4ttw“Co¢^uC/^h6\Be]27v›wp•i¡{¡…>-NhNM(+&B^i…‹%V#ƒ#?#†>rovBSX4?M{Zif8o0V7Cƒ8qG6TwŸOŸŒA7/6ŸlsnZ<??A—3™4/~;y¢#9ƒ&rPCUb]'#kllA'w6g851enV•n=c#\Fi>8šZUx€pk™adUP4%]‘ŸI<a:r|i,bjq?-¡CpPW›0-J?@žv%—‚K&dW’\&?u<V‘¡8%j$Xe|.]¢#CW$[Jbr+ŒDƒ¡7$,œO‡(ˆC#“|)M„u‡Ž/‘o•jXz^5WuS-kKA€bi$NF}M9QO1fž.s'šo#0Qw†y‘lJcp-(lkBSKqVt\O•jKcE/;bˆŽ’kŒc4A]UM*}dr0AAwZ”<¡†0yj?Z5Hn•”‡`œ„@žšMœ0{w#\\K%9,d#K\G•ek*•X34‡Gumˆd8/G`Lh'UYogKF4t,<H(CA+qi}'xfK.iwE12bz}L€œh>Vfˆ‰C8•k[d’=]›MG–,\*8WISez‡VMETj–-…K9liqƒlžKr;G+N‡6QH'•dltN:4)\Ml4DcF{AX2[;om[#A[p’}#PN‰q*J“F$w@/ŽM†kxrq‡—ƒ4uiTJF;)“,k„K‡3,J'*2•wU9<Wcr¢|&
Last edited by MrSwiss on Jun 23, 2017 20:47, edited 1 time in total.
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:should work independent of OS (not yet tested on LIN)
It doesn''t seem to be working on Linux. I'm getting this after typing a file name.
sh: 1: chcp: not found
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Hi Boromir,

you can just "kick out", the code page switching "code portions", they are:
at the top and bottom of the Main Routine -- heavily "commented". Should
be easy to find ... try below on LINUX:

Code: Select all

' ForumBlobPost_V04.bas -- 2017-06-13, by MrSwiss (ver. 0.4)
' "original thread at (current end):
' https://freebasic.net/forum/viewtopic.php?f=15&p=233256#p233256

' Credits go to (in alphabetical order): BasicCoder2, dodicat,
' leopardpm (and unnamed others, of FB-Forum)
'
' added CP switching code 2017-06-13, tested it with CP 850, OK
' in order for all forum users, to use the same settings before
' the Utility itself is started ... original is restored at end
' of program -- compile with: -s console

#Include "file.bi"

Const As String ForumExt = ".B128"

Function LoadFile( _
    ByVal filen As String _
    ) As String

    Dim As String text = ""

    If FileExists(filen) Then       ' crash, if not existing!
        Var f = FreeFile
        If Open (filen For Binary Access Read As #f) = 0 Then
            If Lof(f) > 0 Then
                text = String(Lof(f), 0)
                Get #f,, text
            End If
            Close(f)
        Else
            Print "Unable to load: " + filen
        End If
    Else
        Print "File not existing: " + filen
    End If

    Return text
End Function

Sub SaveFile( _
    ByVal filen As String, _
    ByRef p     As String _         ' string might be too large for ByVal
    )

    var f = FreeFile
    If Open (filen For Binary Access Write As #f) = 0 Then
        If Len(p) > 0 Then Put #f,, p
        Close(f)
    Else
        Print "Unable to load: " + filen
    End If
End Sub

Function EncBase128( _              ' direction --> to forum
    ByRef iStr As Const String, _   ' source string-part ASCII
    ByVal n_sLen As UByte = 7 _     ' length of string-part (default = 7)
    ) As String                     ' base128 string-part

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen, 0)

    For i As UInteger = 0 To n_sLen - 1
        s_chr = s_stmp[i]           ' get a byte, then check value
        If s_chr > 127 Then         ' if leading bit is set, then
            rmdr = BitSet(rmdr, i)  ' remember in "flags" byte
            s_chr -= 128            ' clear leading bit (MSbit)
        End If
        t_sret[i] = s_chr           ' assign to return string
    Next
    t_sret += Chr(rmdr)             ' add "flags" to string

    Return t_sret
End Function

Function DecBase128( _              ' direction <-- from forum
    ByRef iStr As Const String, _   ' as EncBase128
    ByVal n_sLen As UByte = 8 _     ' string length with "flags" (+1)
    ) As String

    Dim As UByte    rmdr = 0, s_chr = 0
    Dim As String   s_stmp = iStr, t_sret = String(n_sLen - 1, 0)

    rmdr = iStr[n_sLen - 1]         ' save decoder byte "flags"
    For i As UInteger = 0 To n_sLen - 2 ' without decoder byte
        s_chr = s_stmp[i]           ' get a byte
        If Bit(rmdr, i) Then s_chr += 128   ' check "flags" and set leading bit
        t_sret[i] = s_chr           ' assign to return string
    Next

    Return t_sret
End Function

Function ShiftB128( _
    ByRef iStr As Const String _    ' source = ASCII string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 7, n_rem = Len(iStr) Mod 7
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = ""

    ' get encoded string (8 byte, from 7 byte "original")
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 7 + 1
        s_tstr = Mid(iStr, sPos, 7)
        s_ret += EncBase128(s_tstr) ' encode to 8 byte string
    Next
    ' string-end processing
    If n_rem > 0 Then
        Var sPos = n_run * 7 + 1
        s_estr = Mid(iStr, sPos, n_rem)  ' string remainder
        s_ret += EncBase128(s_estr, n_rem)  ' encode rem.
    End If
    ' shift every byte to "printable", add 35
    For j As UInteger = 0 To Len(s_ret) - 1
        s_tchr = s_ret[j] + 35       ' apply shift
        s_ret[j] = s_tchr            ' write back to string
    Next

    Return s_ret
End Function

Function ShiftASCII( _
    ByRef iStr As Const String _    ' source = B128 string
    ) As String

    Dim As ULong    n_run = Len(iStr) \ 8, n_rem = Len(iStr) Mod 8
    Dim As UByte    s_tchr = 0
    Dim As String   s_ret = "", s_tstr = "", s_estr = "", s_tmp = iStr

    ' reverse shift to "B128 encoded"
    For j As UInteger = 0 To Len(s_tmp) - 1
        s_tchr = s_tmp[j] - 35      ' get shifted byte & un-shift
        s_tmp[j] = s_tchr           ' write un-shifted back
    Next
    ' get decoded string (8 byte chunks)
    For i As UInteger = 0 To n_run - 1
        Var sPos = i * 8 + 1
        s_tstr = Mid(s_tmp, sPos, 8)
        s_ret += DecBase128(s_tstr) ' decode string
    Next
    ' string-end processing (shorter than 8)
    If n_rem > 0 Then
        Var sPos = n_run * 8 + 1
        s_estr = Mid(s_tmp, sPos, n_rem)    ' string end
        s_ret += DecBase128(s_estr, n_rem)  ' decode string end
    End If

    Return s_ret
End Function

Sub GetUserInput( _
    ByRef sFle As String, _                ' file name (with or without ext)
    ByVal mode As UByte = 0 _              ' 0 = default +ext, 1 = no ext                
    )

    Dim As String q = "Please, enter INPUT file name: ", a  ' question/answer strings (local)

again:
    Line Input q, a                         ' ask for filename
    If a = "" Then GoTo again               ' file name is mandatory!
    If mode = 1 AndAlso InStr(a, ".") Then  ' ext check in mode = 1 only
        Color 12 : Print "File contains extension, enter filename without it! ";
        Sleep 1500, 1 : Color 7 : GoTo again
    End If
    If mode = 1 Then a += ForumExt          ' add extension ".B128"
    sFle = a
End Sub

' ===== MAIN =====
Width 120, 25   ' we might want a larger console window

Dim As String   sFile, sQuest, sAns, c, d, sDir = CurDir
Dim As String   sTitle = "ForumBlobPost - Utility, version 0.4 (with CodePage change)", _
                uline = String(Len(sTitle), "-")

start:
Cls : Color 15 : Print sTitle : Print uline : Print : Color 7
sQuest = "enter the direction: to/from Forum [t|f] 'q = quit' : "
Line Input sQuest, sAns ' line input accepts a string-var (input doesn't)
' evaluate user input
Select Case As Const Asc(LCase(sAns), 1)    ' check of first char only
    Case 102
        Color 10 : Print "Enter filename *without* extension, please!" : Color 7
        GetUserInput(sFile, 1)              ' f/F entered, extension ".B128" assumed
        c = LoadFile(sFile)
        Var npos = InStr(c, Chr(34))        ' extract "original" filename, shorten
        d = Left(c, npos - 1) : c = Right(c, Len(c) - npos) ' source string
        Var r = ShiftASCII(c)               ' decode
        SaveFile(d, r)                      ' ATTENTION: overwrites source file!!!
    Case 113
        Print "quiting ..." : Sleep 750, 1  ' q/Q entered (user abort)
    Case 116
        Color 11 : Print "Enter filename *with* extension, please!" : Color 7
        GetUserInput(sFile)                 ' t/T entered, get source file
        Var dot = InStr(sFile, ".")         ' get dot position
        d = Left(sFile, dot - 1)            ' extract filename only
        If Len(d) > 0 Then                  ' check whether there is something
            d += ForumExt : c = LoadFile(sFile) ' add extension, then load it 
        Else
            Print "File ERROR! " + d : Exit Select
        EndIf
        Var r = ShiftB128(c) : r = sFile + Chr(34) + r  ' encode
        SaveFile(d, r)
    Case Else
        sAns = "" : Color 12 : Print "unrecognized command" ' in red
        Color 7 : Sleep 1500, 1 : GoTo start' all else (ask again)
End Select

Print : Print "Done ..."
If CurDir <> sdir Then ChDir(sDir)          ' restore path

Sleep
' ===== END-MAIN =====  ' ----- EOF -----
Last edited by MrSwiss on Jun 13, 2017 13:36, edited 1 time in total.
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:Hi Boromir,

you can just "kick out", the code page switching "code portions", they are:
at the top and bottom of the Main Routine -- heavily "commented". Should
be easy to find ...
Ok, I removed them but I'm getting "Erreur de segmentation (core dumped)" when trying to load your test file.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

... when trying to load your test file.
Did you name it properly:
"original-name".B128 ??? ("original-name" is the name, at the top of downloaded file)
P2140875_small.jpg -- so it becomes -->> P2140875_small.B128

the filename itself, is of no importance -- the .B128 is important.
Last edited by MrSwiss on Jun 13, 2017 13:51, edited 1 time in total.
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:
... when trying to load your test file.
Did you name it properly:
"original-name".B128 ??? ("original-name" is the name, at the top of downloaded file)
P2140875_small.jpg -- so it becomes -->> P2140875_small.B128
Yeah. It says to enter without extension so I'm typing it like this "P2140875_small"

EDIT:
the filename itself, is of no importance -- the .B128 is important.
I assumed that originally and named the file "test.B128"
Then I tried naming it exactly "P2140875_small.B128"

I'm going to try and find the exact position in the code that is crashing it by adding checkpoints.

Edit: this is where the crash occurs

Code: Select all

Var r = ShiftASCII(c)               ' decode
This is the exact spot in the ascii routine where the crash occurs

Code: Select all

    If n_rem > 0 Then
        Var sPos = n_run * 8 + 1
        s_estr = Mid(s_tmp, sPos, n_rem)    ' string end
        s_ret += DecBase128(s_estr, n_rem)  ' decode string end
    End If
And the precise line in DecBase128 that is crashing it.

Code: Select all

t_sret[i] = s_chr           ' assign to return string
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Boromir wrote:This is the exact spot in the ascii routine where the crash occurs

Code: Select all

    If n_rem > 0 Then
        Var sPos = n_run * 8 + 1
        s_estr = Mid(s_tmp, sPos, n_rem)    ' string end
        s_ret += DecBase128(s_estr, n_rem)  ' decode string end
    End If
Funny, I've hammered far larger files than the forum can take, ~ 300KB through it.
On my machine, never had a problem, there (at the position you describe)?!?

Are you using the modified program, I've posted for LINUX ?!?
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:Are you using the modified program, I've posted for LINUX ?!?
Yup. I'm using it.
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Boromir wrote:Yup. I'm using it.
Are you able, to supply more information of your system.
Such as: Terminal settings, language etc. (non US-english, might give problems).
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:
Boromir wrote:Yup. I'm using it.
Are you able, to supply more information of your system.
Such as: Terminal settings, language etc. (non US-english, might give problems).
My ststem language is french. That could be it.
St_W
Posts: 1626
Joined: Feb 11, 2009 14:24
Location: Austria
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by St_W »

It crashes for me too on Linux (segmentation fault). When I compile with "-g -exx" it prints the following error message before exiting:
Aborting due to runtime error 7 (null pointer access) at line 88 of blob.bas::DECBASE128()

I haven't looked at the code, but the error could also happen when copying the blob from the browser. I've used firefox to copy and Geany to insert and save. However, some characters do really look strange and probably there's simply some error in this copy/paste thing e.g. with the encoding. Linux tends to use UTF-8, for example. So maybe your code is correct, but just not very fault tolerant in case there are errors in the blob. To handle that it would make sense to include some error correction data and a checksum/hash to verify data integrity.

//edit: system is Ubuntu 17.04 (english)
Linux version 4.10.0-21-generic (buildd@lgw01-12) (gcc version 6.3.0 20170406 (Ubuntu 6.3.0-12ubuntu2) ) #23-Ubuntu SMP
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

St_W wrote:... and probably there's simply some error in this copy/paste thing e.g. with the encoding.
Yes, encoding (was also on WIN, a problem) solved on WIN, with pre-setting Code Page to 437
-- run it -- reset to "original" CP (whatever it was before).
I haven't a clue, how to manage that on LINUX?!? Is there a similar mechanism on LIN?
(changing terminal settings I suppose)
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:I haven't a clue, how to manage that on LINUX?!? Is there a similar mechanism on LIN?
(changing terminal settings I suppose)
Which text encoding should I set it to?
MrSwiss
Posts: 3910
Joined: Jun 02, 2013 9:27
Location: Switzerland

Re: ForumBlobPost - Utility (Ver.0.4)

Post by MrSwiss »

Boromir wrote:Which text encoding should I set it to?
No idea, it's been ages, since using any LIN system.
I wouldn't even know the existing options, you're having -- US-ASCII ?
Boromir
Posts: 463
Joined: Apr 30, 2015 19:28
Location: Oklahoma,U.S., Earth,Solar System
Contact:

Re: ForumBlobPost - Utility (Ver.0.4)

Post by Boromir »

MrSwiss wrote:I wouldn't even know the existing options, you're having -- US-ASCII ?
I don't see that as an option maybe because my system language is French.
I tried setting my language to English but it wouldn't switch.
I do have English utf8. Typing "locale -a" gave me this...

Code: Select all

C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
fr_BE.utf8
fr_CA.utf8
fr_CH.utf8
fr_FR.utf8
fr_LU.utf8
POSIX
Post Reply