summaryrefslogtreecommitdiffstats
path: root/src/perl_checker.ml
blob: 4459e30533795660de621985d4df9f922f9d1505 (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
open Types
open Common
open Tree
open Global_checks

let search_basedir file_name nb =
  let dir = Filename.dirname file_name in
  let config = Config_file.read dir in
  let nb = some_or config.Config_file.basedir nb in
  updir dir nb

let basedir = ref ""
let set_basedir per_files file =
  if !basedir = "" then
    let nb = List.length (split_at2 ':'':' (List.hd file.packages).package_name) - 1 in
    let dir = search_basedir file.file_name nb in
    lpush Tree.use_lib dir ;
    Config_file.read_any dir 1 ;
    read_packages_from_cache per_files dir ;
    if !Flags.verbose then print_endline_flush ("basedir is " ^ dir);
    basedir := dir

let rec parse_file from_basedir require_name per_files file =
  try
    if !Flags.verbose then print_endline_flush ("parsing " ^ file) ;
    let build_time = Unix.time() in
    let command = 
      match !Flags.expand_tabs with
      | Some width -> "expand -t " ^ string_of_int width
      | None -> "cat" in
    let channel = Unix.open_process_in (Printf.sprintf "%s \"%s\"" command file) in
    let lexbuf = Lexing.from_channel channel in
    try
      Info.start_a_new_file file ;
      let tokens = Lexer.get_token Lexer.token lexbuf in
      if not Build.debugging then ignore (Unix.close_process_in channel) ;
      let t = Parser_helper.parse_tokens Parser.prog tokens (Some lexbuf) in
      let per_file = get_global_info_from_package from_basedir require_name build_time t in
      set_basedir per_files per_file ;
      Global_checks.add_file_to_files per_files per_file ;

      let required_packages = collect (fun package -> package.required_packages) per_file.packages in
      required_packages, per_files
    with Failure s -> (
      print_endline_flush s ;
      exit 1
     )
  with 
  | Not_found -> internal_error "runaway Not_found"

and parse_package_if_needed per_files (package_name, pos) =
  if List.mem package_name !Config_file.ignored_packages then [], per_files else
  let splitted = split_at2 ':'':' package_name in
  let rel_file = String.concat "/" splitted ^ ".pm" in

  (*print_endline_flush ("wondering about " ^ package_name) ;*)
  try
    let dir = findfile (Build.fake_packages_dir :: !use_lib) rel_file in
    let file = Info.file_to_absolute_file (dir ^ "/" ^ rel_file) in
    Config_file.read_any (Filename.dirname file) (List.length splitted) ;
    let already_done =
      try
	let per_file = Hashtbl.find per_files file in
	Some (collect (fun pkg -> pkg.required_packages) per_file.packages)
      with Not_found -> None in
    match already_done with
    | Some required_packages -> required_packages, per_files
    | None -> parse_file (dir = !basedir) (Some package_name) per_files file
  with Not_found -> 
    print_endline_flush (Info.pos2sfull pos ^ Printf.sprintf "can't find package %s" package_name) ;
    [], per_files

let rec parse_required_packages state already_done = function
  | [] -> state, already_done
  | e :: l ->
      if List.mem e already_done then
	parse_required_packages state already_done l
      else
	let el, state = parse_package_if_needed state e in
	parse_required_packages state (e :: already_done) (el @ l)


let parse_options =
  let args_r = ref [] in
  let restrict_to_files = ref false in

  let pot_file = ref "" in
  let package_dependencies_graph_file = ref "" in
  let generate_pot_chosen file =
    Flags.generate_pot := true ;
    Flags.expand_tabs := None ;
    pot_file := file
  in
  let options = [
    "-v", Arg.Set Flags.verbose, "  be verbose" ;
    "-q", Arg.Set Flags.quiet, "  be quiet" ;
    "-t", Arg.Int (fun i -> Flags.expand_tabs := Some i), "  set the tabulation width (default is 8)" ;
    "--restrict-to-files", Arg.Set restrict_to_files, "  only display warnings concerning the file(s) given on command line" ;
    "--no-cache", Arg.Set Flags.no_cache, "  do not use cache" ;
    "--generate-pot", Arg.String generate_pot_chosen, "" ;
    "--generate-package-dependencies-graph", Arg.String (fun f -> package_dependencies_graph_file := f),
    "\n" ;

    "--check-unused-global-vars", Arg.Set Flags.check_unused_global_vars, "  disable unused global functions & variables check" ^
    "\nBasic warnings:";
    "--no-check-white-space", Arg.Clear Flags.check_white_space, "  disable white space check" ;
    "--no-suggest-simpler", Arg.Clear Flags.check_suggest_simpler, "  disable simpler code suggestion" ;
    "--no-suggest-functional", Arg.Clear Flags.suggest_functional, "  disable Functional Programming suggestions" ^
    "\nNormalisation warnings:";
    "--no-check-strange", Arg.Clear Flags.check_strange, "  disable strange code check" ;
    "--no-check-complex-expressions", Arg.Clear Flags.check_complex_expressions, "  disable complex expressions check" ;
    "--no-check-normalized-expressions", Arg.Clear Flags.normalized_expressions, "  don't warn about non normalized expressions" ;
    "--no-help-perl-checker", Arg.Clear Flags.check_help_perl_checker, "  beware, perl_checker doesn't understand all perl expressions, so those warnings *are* important" ^
    "\nCommon warnings:";
    "--no-check-void", Arg.Clear Flags.check_void, "  disable dropped value check" ;
    "--no-check-names", Arg.Clear Flags.check_names, "  disable variable & function usage check" ;
    "--no-check-prototypes", Arg.Clear Flags.check_prototypes, "  disable prototypes check" ;
    "--no-check-import-export", Arg.Clear Flags.check_import_export, "  disable inter modules check" ^
    "\nImportant warnings:";
    "--no-check-context", Arg.Clear Flags.check_context, "  disable context check" ;
    "--no-check-traps", Arg.Clear Flags.check_traps, "  disable traps (errors) check" ^
    "\n";

  ] in
  let usage = "Usage: perl_checker [<options>] <files>\nOptions are:" in
  Arg.parse options (lpush args_r) usage;

  let files = if !args_r = [] && Build.debugging then ["../t.pl"] else !args_r in
  let files = List.map Info.file_to_absolute_file files in

  let required_packages, per_files = collect_withenv (parse_file true None) (default_per_files()) files in
  let required_packages = uniq_ (fun (a,_) (b,_) -> a = b) required_packages in

  if !Flags.generate_pot then Parser_helper.generate_pot !pot_file else (

  let per_files, required_packages = 
    fluid_let Flags.quiet (!restrict_to_files || !Flags.quiet)
      (fun () ->
	parse_required_packages per_files [] required_packages) in
  let l_required_packages = List.map fst required_packages in

  write_packages_cache per_files !basedir ;

  (* removing non needed files from per_files (those files come from the cache) *)
  List.iter (fun k ->
    let per_file = Hashtbl.find per_files k in
    if per_file.require_name <> None && not (List.mem (some per_file.require_name) l_required_packages) && not (List.mem per_file.file_name files) then
      Hashtbl.remove per_files k
  ) (hashtbl_keys per_files);

  let state = default_state per_files in

  Hashtbl.iter (fun _ per_file -> List.iter (add_package_to_state state) per_file.packages) per_files ;

  let state = 
    let global_vars_declared = Hashtbl.create 16 in
    let package_name_to_file_name = hashtbl_collect (fun _ per_file -> List.map (fun pkg -> pkg.package_name, per_file.file_name) per_file.packages) per_files in
    Hashtbl.iter (fun _ pkg -> 
      let file_name = List.assoc pkg.package_name package_name_to_file_name in
      fluid_let Flags.quiet (!restrict_to_files || !Flags.quiet)
	(fun () -> get_vars_declaration global_vars_declared file_name pkg)
    ) state.per_packages ;
    arrange_global_vars_declared global_vars_declared state
  in

  let state = Global_checks.get_methods_available state in

  let l = hashtbl_values per_files in
  let l = if !restrict_to_files then List.filter (fun file -> List.mem file.file_name files) l else l in

  let l = uniq (collect (fun file -> List.map (fun pkg -> pkg.package_name) file.packages) l) in
  let l = List.map (Hashtbl.find state.per_packages) l in
  
  (* HACK: skip ignored_packages. Some package may have appeared in ignored_packages due to the xs bootstrap hack *)
  let l = List.filter (fun pkg -> not (List.mem pkg.package_name !Config_file.ignored_packages)) l in

  List.iter (Global_checks.check_tree state) l;

  if !Flags.check_unused_global_vars then List.iter Global_checks.check_unused_vars l;

  if !package_dependencies_graph_file <> "" then generate_package_dependencies_graph state !package_dependencies_graph_file 

  )
JIL"PfL92Pj'Q1f׹ $lXz#NsH0eP3Lg{ɈT.gC$tW+Hq4ؿt` W RοQͻ84zi !yR w1~~t'c|#qǏ4|(%qS =*vo-ޱ̲hXnb98H*rͻ͂CcLYвٻ,|L) ,Rc;ɀp/0lQc?}e#;P刂Fv JS ݕB\2yq<,, kOS!X\:thUpmtHO%:B0d^f/0d (q,$28F)38zz eL'NOEm*BP?A9݇ >oEV%nV|=2~#r $-LT>뵂px5sqgIP# 0\/$phxP9 FC:Y @P6>vI)2bzm_j=P?IE´,3r7?0hӧ v;%ԄvThCx @iQ-V@٦\I co"&$C{ EVh[& ]tUطh<6 9C/݁ ܰ 6M0ξ?@ cSHiM&p(= R"G_`Cϊ>)5颠.+VHr7[M걕`"7XT X~ÅT K PّcEj}˥WYCզ6P:x]L'݇}he/qV {e3kP{L5Ȍ%: cOcFs%cרE^{%I/zNA906zf{:E JG4GQ"ĵm%TA_NOJw䮺,f3`;IS4mktf1 ?8#xqOAjFt%^vl-cy<BKɐ5f9ex=9M,m:j Bb0v'8PgO ٜ`ZLX_;7R߀?;ZUx@Lq;[od$UAc/0ҐU{g?*뫫i|`S)3dg{yjxX{iTz[ s,-o}hS7. &Nfe@w83Ro]趪:0B$͝KĵQ]:EI]^!mկuZ(+i:5 ОP[La1 )ZHв@¡up,F0C+YzmNFxb0nT3Ю+2 Yڗȟ3 fx@4~A7dU*BTɢJUuΊ8V\.Ve 1y9^huBi>:5u8 aC\PXA](_kˑTӚ;6M!Ea# l]1Ƃg!IޟT6 -%EM]K&=٬ I{Up.Iը9& H3`Q1R*Nc V wWn|Ц*6ɽӮ3 ~$m  rqDrQ@sIz+}\7@FuW.s+" jOe>;޺϶M,?V4mL]_9U4 DSE1i}bLY2 o%ͬVBMy"%<)@:n)2e#tCPR}}Qrֱ!̧W &%V(ng'$n^7n<մ6 }"zs*a:}p w>g?]`$RH!@whaBo{v1Cm;fhuhE~{+RT`$mjʊwd:7.`v0h!Dn5Ԍjf`9Gl=yzCP8a ٿ?ZZ;T0:4SFH9|n><:I/*sGP{u%ϵo076^ߴ3¨QDww%M!Dkl]ޫd#D%,0qwNN^3p97Km5w*a8HTZ$Qϊg(&/mi_J\ɫ^&B%@ۀT5:2܂,N*jUegUr3Ky:=8ϧy4ev2p{BW{|(B([f2\+7LF/UYJ|I:Iۉǒ׋} $Y(9@;I~MGQ*|GBGU|x0P,CU8.H!-P|r; iޣ{マ ֠Is?/n̳ gK-QRLGȞƥ+]vJV2 d|0.?+U^Xr1VʆENjajެ)_>?$)$:@t+,ce o 4^[i|~4*++crÃ:s L4!͉;Q#3'ncoؤ *Zj@<nuϣh/{#x|*{\o ! PI~U wx+xP T)(݋(}eC\a<0AMS8j:r_pOP{ǟe(6tnr%A L#>2p*ɋLQ.] .UcMpy qι[Uc?׈LʺtScۤ6ƬиX*1[1].EF3&2(:c^R4s䕱 @<ۗT`\#\tXĢ#Y>f.ZE{^`ݤ8![oj2?n߶<Rq~9vgP'|YCԑ*E"kǖj8J k7̜ߴڨO:+ߕjgjKVh>)ZB@aT8~g2vD<%*QB<>MJ譨!DC1dlP/jtZO%Ay cq9c:wn=2 ڍf4j_'MQG" /PPuX@d0f0+߇s'*$F1QV%$~NQZzI;<Хy50`\Zt˾UoX s I88R: y_Z&uBc*»REO.wN:Lf#,s!%~#YџS= m,E[gɠ6-ao['VD g31l9}ڍ5pS~r6#r<# ޓ׷P} 1DnqMz-uάz o[ԚZk3Ђ7+'T g3mUƾT.ф >{e32 }C-=CI y%;%pP8ӈ(R \Rl: M 6 nϰ@!D0Q۽ګL'z-_ ޳M "*HܴZ/(#&Ģj2MYhI`ge ck*]fTTKX֏}9S,Wj V {^x8Um?UO_k.{]rwOupf8[n٠td,wGci MMr] ~K $- /rõ DihoVh'tFeCAś%A}[@c%U|[W)=E4r|_W^rw?Z*}~;['tsIa: k# $Ᏹ;P)Td(;0pudJ<>褎Ґv?oIXlլYPYmZwwo?ؕŋC~l~Y򢌏EO\ӡTjx]@%n6¢A|N Յ rsY9iw141L_7@N,1;\ue$0@<{~l&u룊ĸ[~@NOwFQ̯Ժ\7~qL(X@֒MV82 ÓKKz@`]b'My?K+Tr%zg/t nX3|J}b=y/PM$5(^Yˬ1rW Q$H 2NG՚ )-ΔOj&9AlM4zV(){H] 8ƉWOՒZb~}sVǼh3q-^Te}EO&މ6u awp`uܢCf}Rw%"wmxef}R"|P"*xI3%uw,m`*1_I\۔7r6UP2f7ɝp> XY6?P?68} PGM/U~5SjMR ;;{U\ "tKh$&.!x^K>l qZap' = _Yݥ50o?Xņ=]d@TqD%F@yyKA*(CnCe[GWJOK`_CtY?̯2? R&yK棈4ol-Q?FE^T5kӭ-.A(S#BjCD|~>4_ SοUa%v isZ6yZb+Y)i,:kkd;kUxe穴ٴrMqui'ML‹OY6?/RR'LEnhbnFc5B-t'>Y㇭G} ?Exx-D< #3Jil- [ ^|. 塙Vulqw$o`4BbCP=se > w/OF!AHz.fO1AVh@Zl-@^0eL0Sqn+^)hR= .D}*\ޒÈPW1Mdm=nf7bRELC\+zqXwbCͳ9[,R?:bfq/|&nDƝǰDoS:! d":vyBvt;ߪޔR~@vP.rQ||~1S79&8?3k8M@~%RW3}[nWC4ͫ=~:`mɄ\LyeVV%`q(shk% ǎ?KP,J&d ߞM=˴d׷3wDVal :à 咮|UAG 0wv'𓿃 xKeh USʩD(,(M$?ڣ\h(k}ckLSv)+9bcĨ}%vNzY/`!JC9Q {>q6)#HtqkI~06bVlnkSV) OF2m7.6&Dܜ3{PgXΠ B?ql.U;I9{Y%SrƤ+~HoU.6eTf MGHJB)`uXCCz+3ŸGx,WIQ-)%>`nnoi'g8u""`{ ~ Qa/D AP4DNN4`N/E ]spfVCsX-n~> 2 Dz#{#݅+6),,dbvC4%xnoʼɨ1А s_:]aؔ/ݟ5:,9mD$Phz.5J<7?Q]5_ZwwE^¶i E  ku0,`MXأ 6?'~K<QEtLv^P*և7ƥWIY^]P+}F Ys.T!_C~3o_|_x{ם.1gO#`#ByIqҜGdOR$"NӢcdrC슣W;1qLig{Q8N؇h"R&$2*ETKCRq%\>D]̵}~^G`e5&剄֤j^n"TB 0kޯm #*0JAKO!١GϐnY&]g$[X(w6m~s A@L~W.Fcoj)3i=)d%R4q ?ܴRCO+DAAez)0Hv $)P|ӑStW#Cc 'eL{ Bb  {fkɊ._Y[ beϾ-Bb%|@xUvۿrE~>ƯUSyI(AfgFR%,n/ct-dI7Bm xHԶx"NwMQ L }6EN9rLU;btǍz)umu"zxR_[+:Z"G\{k$z9Ճ@lY7 + |*FIȜj_єV=o著Il0ߨ~s!k\Ũ64䀥@frS=-ʷWЖ}?(b95"q 1GyD 1zKj( V6^nZ%eAt9tFaq&#Z٦dZ:va>J^{g=^JHSoQq.OKH)2y9LPah-ynvKأW:oM8/uD][@/^<(),*С) )Zդ3-Zc 6 u9R1AV rG/t"ю1?Qi۪N2G o*0&&B\}$䳠meDAMk6x c.n|4m"PSL*oXs==^ӢQVO9L1kfy?nHsnRfJۙGWuo$ ^eF(ګ.bտͮՠM11:‡f-QӽdYH]&5DmS?I- >%xKiv#Q]4d}ڵ9ա;![N8D8hCn)ІWPű8 vƇ]4ɚ[ Y]h&Xg*v/L/i#O%yuK.`yQˆdWHW!_SE;^7z4@*edHr,?<'C"XocĐINh7V?VpMp!3q~r1R_a 0{N$[w4mnU.+L;CQ+b?㗖8ZWf{uR.T%k\o|-HZ)Im Lv}QWg=7 L}* PV}!|| A(FŠn(;$KP&U N lX"vB.]UA9sa*K%gV=:nS.IY']e(gFs1ˏE毧QIM3X=u9rr'N>ɯ;66aO?9aU*GAudPipSܾalIO NSE"YRSGg^zoAŕ#x0ݨa Dڛ'Zɀ!pg"TJ:,RLZ.,w˴vgpUѦX7 kU͌.Mia3\ӎZ7E3I^uҸǫ0]M NekE9?Ȇ@Ylú̟a%o>zHS׽ ^Vs:s߆Fa?{^V-aC;#cIXCS8U9٪xY7\[s0nvG# JR}WZ!Q1dl ph Cf3ԑze@5^N$%EJa=0zf qJ<[T"H=.n ɢ;} @JK#/Õv滙GjPvW\Wl&@_~'_%N`Y|` "n6D! 6nJO4/U5E4}EzL`-> Uda~cv6Ka[Ы )e*G+}]|ZLtn׶ʩLǃc0diu `*vU_Dj2A;@r*`l{ciFS`$} ğ}x  ;S,5M :zT ;ptC]%*"&|ߌgf["Q_ xo2v4C*}`'_ nKҷz96 ?="Dn4v;Ÿ\n?t9>PQܘ9(5|WϏl4F F`*=v>=_7aoXma#]v< 1akY~|)^5F(dfp_fB=RpPȍyoBC~H[-hx&EX:^~;-ШF0YK+7ѣ[ZbWwzeioL|S!]PR) ZI[GУ]h$(ǝƹw[qAa l6=oErp[7M1n ceLؙut+ R9foZ?6 'Dwisɓ;WF}%^.TkN`Oc- Ednsq"h=6( ѭLgҺ|ݟ0اItM@ÐP `~Ӛ%~F .aï T+y1̡̿)vgw5`AZ 4Bz~rU* &?W)t~6w稬~)k= Pjݜ]+7B(C Y_ƢGH#f@v52 EeӜݻ5RhPd_A dEQM&w vޗ^hy;uSs'ҴZ9մ}V_\iO5okd)Gn9%4 *eZ6*U\&&^Kn"?T4∣KzlO dzӔ@%bqAE'*([(!%<ޞ&pĻ8@ѐ,Xw!{܎g]`X(} $fhv4Y:Fnm=K!{کOA ~b,f֘nˤu Uiܳ'%NjR._Y(hZL )̬r&a1,(ҳmPԕ6_ }VjV:KѧQۥPY^gX7A7ޞ`Y-f3M/ "G+!:*Q"=8kg~wtERAP%qU {?ntμ^vO_K$Q_t1Wy N g8=rE6wC+OtW)/n=W"<f0X|c!G}[gjV#]4}5C D5` ކo81PKQ. w~VG lo^!KyrM}f`x!%RoloT2Q;Y|9e] s&2"8J>Ebu{Ubv~,} "ܹn#FEW P_$QA+\eܫ|驏?oE'#DxU}2uzH:6urM) &knTV^qD$/La(sq:9nWR,sig{04] 3.eƺ7j9?ݍWﶂچ{K>i<ҳm;8jhԹ[hGvu#aBh÷e f)Rp) INL3y18C"%uUWhi%z (Ne#&>) +2X(un=,f]jg ]$6N,}z'ଣ$rAZܱtI"[זL->D=Osiū{%çb]!;w~c$hG.B_%8^ē=HG;6䅿cg\ԋ{\dB &<2O|KZ]4v;M9nK:GO =JDTy F%h?G;-1 E,6[0P}e;% amdnSN{&(ѥ?pqP0DwE7UρX5qb[Mz L̵չӁtÚÅ &Y*0*-wG6 N>| m(e):E7^ [Ƭ'>Ml>0b1Rg;-6?"S8㛠5GcPh>N&i qKSQgM>?T|*︺.KU#]N8Y3Ab*µaԊe6k^@}W,0 I c@V] zuʟ'hnsy)6k02^'jq=F 3]~'9OMvI965 ވP@@EWjn5T4])r;*JSGY|1OME ?R۩*#||:Pp -hL:#bGN  ?>.M8ykᬮK#c^Sah/r̓w\EpeNt'5i )96>pGU=ʩ,MN (r1u$OaAϔ s!/X=x;+WbϹ> Ibn!$cgK__Ub'R_Hkvs}[~|t̕& }?M騟>.iX6t&JpECw*wҲX jȺq"<pya S"^LKY^`+6Du$hL\Qv=WuF|zJ LezuT:c@I"N*C Y]fKzRХNt~9{t-hS:O.dhC=s/p=djuZvKpgQx()էj&5ǒ^rgGCt9Z_<\FnO,<'ahEZǥMB3qoT.+`;tajtݰϹѝ7v3ւ v@)Jb#zYOQ+gV[XTV%—h,$VNۥ(vXLP~qG)+*\:+y>}r;Aݮ1va꾓 @,S:(ʝp֔aa=x+@x2m2w6v<2 g Y6=v4f3憹=:\o$S{2^XCj=3ȨJ: ĎsBe[{shoc:wAtljHcws\ABؿUڥm̛׀JQSOȘŤ 7l??dBk$Jq)W[o6!V.;7ap'::u$?5q1ϯQdn3_ a!9Uh3>r_[Xcx)o'L(܋$f؂,8!RJNA dSS4 Ycyg{2gp@om geȲ)״Z?~ۖ5:c*~_u "O @f(qՆlqvԋ\Ip]/ ՀQrjktE<<ѶjvՔALGKjI; 'yZfzp%NS`L1twT tO]+jAVkKI9:qhnz~G"ڿ٧P'1+#" Rż pw39D>2d-\aYnCځnD:I](lZH4FgJiiK^׷]ڇU%,DFm~GR @6[۲Hw#5`9P9(*o (XⲧaEgH4ʙ -&JHk!f1jk$O>' ,^L h!0VH}NCt3xΟRX%c"eRQؖϛ|5ěC)Rl O_58Hk6Nm8Cd?~y}b16L06L6_ ~E'53(Sn_ ^~kC bVis= r#]Q2~w7|Z+X"58P_/5$;Gs&[)%kfO('wU;.lQc>EgᬋaFS_mԮ׭;{~XWWt+ܜͰt,khZ] ߏV޻iezCZULMvFM~~^S!08,zWà@UŁ?EQ} ɜ.½c &l+ !EEQ9+ |PռDhz…dZ%Duwn$_Cݲ[bEEL(E.N(L r;MQF7, ָ #UgB =9˭ou5ؼZ+yfF^]ui ^S+c/?R**q8#bG~pu;kj_4[֋!G[s KƩoFo|o~LnyX .C_PNrrF"n5--X%YlHJp3l9 #jſ;V`ƴwUH^uƆ9˶ *}I#aPnM8c(wbvpz# fRvn ۤǻ>VȯDQdvXA'{!Q;HP60lE(oՑCtPpעIw 807n\ύALyJY Nn_?7RhK! Rz4@TLqŗ/|Q^r*y`h)ٍ^ӢD[pA6g^uݏ{S~w[\p0ފ U:q9fJoń:[%'=P`0+X%^1c6{ ;=FZGr#H(d~U#B;ˢ1Yr0O(P!q׎QΝ p^' ,ᩇk~7z}47'KVGTez)FDGM^}:ATJ!$sl 毇|u34 b1\ClS0n2~0O8RfvPp[^yY]mr$Cѷ@cRHZ(u~yvPpE^_rJ\+lmOy~'=m^+ 7ʁf,/ f1dWgbBhB?CYTo|H2ŔCccQb'>2n揅H{geյ{SN)5p1pG wtDtͤI%@gU8R[zA ܈+9iK)# 1!k~ˮlf&U^ӭmszha͓2ʸV}6D[_xJDllI)oKa*)bEqv pEWp\{25ŕ.;'Z}}=7SG|!_8/۩mϝxqoTA8r3k+8lafB߂{yԥ;G`vQ@c5¨ep̠hpNC3PiC5,9|,F8Jj})1Mr0e#fl뗒!Q&0mL%k`o-M1צ~dWY tN()WYU}"e ~z9$:qt |*G!C]m_gSrݟpwYqo =h q6YMCjfMMTgB UKGX 8b\Vb;16 ,#/,hfqpM.h_Ha<>3mebѵi>6 vO[>.,RK vu2c,[ƍщC݄XhcO<%d`knf٨lB+j||9,k2Q./lkr 黃c^ԭ.S.O|M8=\"S|4b5:P;NkEL ^3COf{ZF0L75%JJpvwn]-՗9?n!#@ԷL 1A{<\6ψ&S YIg+XU.8GG1pɗ^LA6t}E,{9 *:g&̱^9]v{g Eņ*zFs١)UtUw7nxՍx)HN\_Y_oyxr ϾcI܀lb+Hbi_J'O)ْ+1}|x/ze9ib-AVVׂ1ăS]]-OVl<fKtZ5ii 'uCO9weB3&j'z*"K` #lW^󼱗j@ Z/.*e # u;G,,O6|fY&%5}ҍ !GZ&LH &$ CAARt>FF ] KHL3a%ۯmw};-Bf)a`Oi<3P{gczTQ}kz!O1Ӹq074hrz9 F1U-z:Gn鉦_ dϪ q|KfeQXL`s(jX2tZRD*!O*x7Xz6MX^ϑwm4[m򷗋0'~bea}bˆ_j;-X7aBv'r5$}4J*|lq $;HzeU?THNMA/Ϲe_^ 55+Nk5I|Ϫj~"ZLt!7|~snx.:. qE$a᷀!Ϡt7gp5hHGf8v)>.'G٬E(%ƶ<ߨH%|ӴuuVgh@Nl|Þ).*$1953]uu%KA[l."Re,}Hy#*:f ]ʒsJεZFQz\սcx} o$μQg (c&2DMN fv$eS)ˆnd :ca[ 0k?'-n3m :2(11gsc(Kc>,\;ϡ8updؔ"Bq3wl;E1mLAΐkҪ pn+d͈G;%TZ$)/u'T1;Xjv15!+jwLsēmyuأ)Krq\˒ruYk6EkIZFB!E1ho꿟g(Cې  I_7_ n~FDHxvʅ$'0x|&ӱRxϽWi+jM)i nUoͥ.zxkL9BӠ:jw7V0q'nm@{ DkSe&H 4w-]!?d:cLյ&m}.40k?XW5ϊͦ8BU&O0Ί!-F>U' &R;Z֘x6MYymw,n^HyhS61+xxLul:ejē`0HڱY/&z yݧBWHBICDA}"TF-H>Ci/=mh59B=;X Má&*4Z _ua3`CL'D ~OF k]Щ~|Ux"0Hi?FG BMJemKW-#1.k)Ts{>>ZAbӽȨ0BBbߣHOבʻe~s''{z($p"V1$GP<zV5!34l ُNbYZqr"l00|*ǘ$pk~/2L{6T?̗0*nX*r`Dұk!67ReSedYE /9GL JqObå_ @|q$80ӊn-a;%K%ܞ(eǬis--Q~ۜ'f̤ZWF$9Ts7v 6V| 3!9E*](0d #2<3JO.vd]H|ݤu9`I2{BtDdZ1GboKϽxXfGvņЪ5R+1һLMudJL#zMwA-gDvY,zҾ~j l=cR]ނq&sje\RV9a91u-7i[( P$'h#^Ps.d%B|VRtlIRcb+ѽEQ;:`24,ElO^vg"5xʙovz@ iaPz4ĵQ]~M%1z1zZ݅W* 28uBޓE;E[{k`q׳.]u3Co{ڢas:vB dKvRSy0ĕkΚ#6-&يCFWZZ\y9V†)Nkyqѹ`%uY3vWo>]!/eweLBKKp׈#E`aKې0&8RNM.c:";RHx,yQ+K&qIۊs˖%w69ρLHsLYD1XƎ_-{U^?,5sEav[қkUXF跳[1%=H _wL]t]NRLDݪj6opᝩ]Po'sAznwE?ǿ34x`B*{, H0ۘqϬ?({ϯE|R<:J gi54胑[ݘ!P!]b.1-$oW_$dsԔ:Ub1TGrmKD;:9w/Q*?\oO*N?xBL1HFQmz^M`Sa~)sn^T8$f;qob= 'XD#@g=Ŷe+ Y@sO<,8ݩ7L>c|ґEOaJ,Ժ˧m3($.A'M/%A/Gy Zb | z2~ v䖤+tWK8E, ԟ3Ga2q`ݛVO ,]b3Փ>W*#}N@MTRį[f皋\+}k+z뜛L;C fM /FBJX(VsW0{_A}ٹf9r\FG h&!K}A< )(5qI e YUJUҼ[0;Js9kt)A)8+q ':h~12,hAxJn Q69h>h8pfDaÊ3?ՐO+5p0 #'֢>1N/U'i85y| H f i5E{Zpfr!u1v=br<^tmw N-4ߤo |^s,4*=zF @%U֩He}`U!ee d9v+pBTaI^++9!Pג<)Ы7Ag5E|. i7ơ^taXPM79 W_ҷ؉@XԿ_ E,0ToT]T`u;j4ɝ 0 d/䂌yk=``~@ي^N;#vyki~Ju`rIq%[=ļ>5K0Җ-CGSfȑ0Ъ/ [K "m:i?c"Kk\ڰؒ~jР2_948| l̞=TcQw`2n̗.# fy—5p,ưX8*s""`!=NZm f!Gfe٥,ZCqeW[ԷZpue芫ao}8-"\ _c'p8֙%DE7Rk/::F'bKVy0VZ7bl\ZL$UZj~%ΙF <%wnqAF֣0_=˜P+HRRWGvwN[m٥z7w@2yŹ%Ǎ$ҡ#8GR#xyJ"޿#7K)Nd",-VbqZLgA9CT׭du* UvGGH%&׃\/a/hctyRD~(/&kQr Όn6^>쳠iZ^ a){>ʽokWџhګmaKEL[4pfW#8HH9.5JQ.GiHql~d[o& ̞V$|jX>. @߬ D ?h.%F.r%(+%'a mVpqw>"J5[[aL oHq%!)F7'MqXv–EhH22h)L|mL82`?ۄ/zK~S$_CaO,qʄS@(_׿Tr\5(MkQ>A RSV 8`,a]T ;3J_y+V4?b6T|̗vyG$hAdv jK mcW˺i}%UsX nҭx IN*`LJDa [ܶixQv_#kHh x,fƲ~nyNJ?p0vп V&fVi#c+kV8ķK g_X= p-r kP@}S WN։#(*H5#kU A5yܲ)S>HR+%` )ў7L Jk5V+l2~F&㮝}=JF|hZCåæ;:Wیx!(9bIukyM "CPԅ'T]97ōl gk8}M;p.O0͒ڮOy=ն}j=_gYo3DP$3.±i*Y < .dk DLφ>-֡ H́Ft?:c}z޾OQl`=L>lA>BgJWu}.YښG㍗0נXvNbJ͈ £oChţ2҄li_B1b<&&@r$Ӕ"t!|s…BR8l\$2Rxjwp+t0J1z!!u! J\v3|$6AjӯڣW9ӁLp ;̎>WCX!3%t.uՍ$(:NSP.ǎ%UqN(E24LwRau,j* 2>guN@;d5/PcpmJ<}:%5J9I%Ds-|_oV߭ϫ˃3J0XtGb%iʉYtu0hi(+6=!F>SzRn).GI!p y~ 2R԰OJX}HW6ִ9i;4wq\p3Ze)ѰV`L9Q^csV{ ՙvIc9$75]= ڼM k,~[2PJ kJ 辻W8XEB-P"RøP`h(J؇O$X_vǒ_4T{5/T]clPV/#7s<6}io}N]N߮7B@va!|{FԤܑ͟[[_-t;1..V]_|Wa=Ux"_ZU^ vrM3/Pso01qK.tZ{un3?[SRnKh_"mmTŠQo~kW>pPcgGr? O$>9^9XUP Gܑ8:G !Qod~ip g.Y'Vp|0f,n˯dZ[VD['.d.)  hz5B=5K7UbA 1En?H!f\vK*™Yop9j_[?fν;Э沆߻8 + ?b~qz"-r>7Ip[ ޚBH>WӨ#Hxi +>㮷/PH+䫛E,a龓ˍкm&c0bԭYP `{ fYO'X7dep/}%ޘ%0qƅX?dGy=7ʮD1$QHK1@$ )WvMeF$#[a2/XubI7*EZzqqjҌxH(hms^2d5brO4E6!z P"rKX2HwDb d'F%usG,ΟdqbAn؅).rP|/NJ4ެCs'<" /A/h̝<RhNL O210%SZɁ:=@0wАvLX|η|oQ[ թh辠эc0#F3xztD{=E^"gFB=B)wK νnވKkܗ(9SY%o@EK,uIטa F}dT֢l:DԧCN#p֪bm7cn^}=͹.@*Fb 6v^޵DjQ<,`V{ -ue+Wdt;Be׉--V:Օ[Y 8_'A(z.,qe6KNV!,`:K}sH:㹦bZUxٱؑImWqa,zz.$5x` U8xش;ۨMȀqM}Jyz+ۼ \jEO*7O?1LTSBz|5mƋ%U߾ꚭ?5-2^Q2&۸fŪХԄ Qݎ=\XA3Җ:ŕ?ț«H1}/`͞X(#Hby[3ѕ%KObK*^KC/o^wYn!r:#r#ݯ'#.}@NS =z,D_QV?]S)&wujfY\=|a%s^#Q2G㭍kD#i#L`rg+}YI[!X;1uϙiǁq^vŜvni0o[j P45ZI9}ȰGvNu?' Tzg1)Oהpp+~ݴ3%?%\\P=V?hp84KREװ~SZܘF듩@]dktFC,3 پj@wtšJIڭڕ/㮝Sրfb5;' Q/ՋŒ:lmD,a]>)!_*;ÈUEm brIh6 qeޓ? 9v4ޯ!u0uy:W ACZ|fi$vǼ(QUx״_!eab$qp ߭l->+XmU찜?K?J%&&T VzjҠ3gj/ԿzJtByM7 t|0/ua`$*e)Fjӕ .vJHDΦB|TS'|.6ރk断/ofsGc3ˎy@{H@^ WPOX:TyIKC2QTR/d Фaa>oS`[mPI鎖_AwOo{Ӥo+ dU U<@fNVAK_1\"( 72% Yn;1ix44뷄v;YA&xtb*\X$ i׶-Je$X? (l 6>f1NKΊfĐ)Z5FY,Umꩆg%Gg2ZOӅטl6ڝ. 1UB_QF#wB@>d Vvx5v2;"ErS<ϗc#K(ɵt=V(}Lr } &{KCq[m/uYSuakUU;0p<קDgQGAx:{PBqBWΉv.sz!)HpVz-q0|-?W=YA92y2|w%PuL)^ơ?<|C.(9X=u*xZd0+<5_,\htc7٬!GQT3]}C1?n3DF,y8aC% ^G| }n6_mTuecm7|f!ocL.9W*,,Kxtnypp{[||V82{`N&1M‘5CbvoRↈ<0K %y'\!WRmߏ3S9ڽHa5J9ߣٰu(^;>*,$<dCK<ڞ~SC>/[vDDIqhKaڲ_5 $ܤa^R(܀aTJe Rx0h|9Iʍ 8.׍L-ƽFNtWV+ X,L+׀Ob LlnԺρ‚JF] **k5 EjdcG5,6b$ͳ {:ѝ5SR s঩̥pl[ysDy7w>jKlf`P_Ӱˈ<ms1HF_xw4gEt<ðPHWIAKo잭a}gUVCFSW3h+)yB 82I_4FFQd?=Mh= lJ0]MX]ߴ0ѲE\`eH[_{گAx+ѻ#4̪?%蝻GqU]$oya08 iQf17j[e7`>}fLC>pd@ڇ 'lh_~gg'd2ͫdӫO` hi3/;[y3"*_O-9kbAb|";݉M%P+g ,3WTg3k^*E9"owb=^+6F ?{}f:P̾b^vOIg ~w̆FQlة ͜N ~b.^xT<5EKʐagml/78}kRHB | WN y"ΓgeT(<7/^0-ՌؖcJBב# &P~z}xԄ3Rwv(>PA=v-$z8`(eV5OLdn_& 6nWobr~*&.6~ʭ⹸/`|}b8I :p"`ʉE}dV)Bِ4wH7mFYb6[:?WzZI"@uu2=ǃ8IǙ X AdM2Fj(ۂFIF/{"]Ʋ@>OJ4 `spJOUba{A/R%طOl+SLV f-` K4#,O2*x$X7Ax=FD4zHb/6[?/i#ւX,nXȈ{{5?rNg[br#n@UHnn !F=> ' T\ip}{f /]|Wg&~nd<V+x_%ơ{Yy dlam2*u_ѰA*pyӍR?z!s"m ǚP[Ug:iIu6Oo=_ ".6~ :g{ͻdz/>G3p&`ϊypE$$7bIZ[>o30rpBs4ȗUSg SG/Luꄃ1qlseEHzKKJ5n.]-FMXPA~BhZai DD$Zb];Ԏ ޶hXžWENM]'j W( Ʌ(tڤDQz:ZʁrN6MDhLn2rDi \g Aʦ=va8қC@|ͻc8W]Ԅ\gJuz>佣I-T $4uy {%*"zwr69'щWhmL'EM ?K>FãARywM0,OH%D@rIJtNGdwV~LDf&1y<&GS59J_fԝ)":H\rfεRP<]s 2a]20 Z0#,3QD!,H_3ʦ#64 hkPHW36"lO| V}4 fRMaE )k1F4:Z]h<<-U"6r:2`ƶ`cRc`$L1~BNoM9SMi4\F,DOhrSTgՄK^ņCniWxz@BtvJ1+|.r-^(Ц<9]u _>̒R% zcV2+]n4#O!=܁E,u}J5ECU6GLDJw0[.Q'T>x}{^P?@`38<',\W`hj_εd"'st$M>?Cxzp_r OH(^{K 6CG}5is$Dx"tZr~XJMCE +.SDI4$Z@WnFҚ98YQ7 7U0~I.~! Rut@JWQPfP.)M|Cfkyt8gm:l!ul$裙z\+Æݸ,'ơD1]YR h:o=t-WZVAnz8G)+.؝1"k9j?Rtܵx2%QCp)h)Bjj%DO;D;{2n."\rh$@OSZ}{BoƑ_wgdB"! K +"#MZpJpć{˝JԿ0.IW5A5/nբJj0!M'?NH9g?QK)I+Hox\od)zxTvY,E פLT 0x3EIx&>YĊ`ij8ɛJ?Bg8ohB\>k`7/z"7t[P8}qzEKch)d1˄5,%f4bwKJ%dSI~W ZR-͍Xv2`V Mb,#:ԹI?03M4|;mk7s K=}wFM :oScc2,@|7wv:xԃ8^fc 䮌\`aTԨě2x#rtZ }r|]^ٓqy˚;:'ƑW&+&?$hccʞj!/(I)OFפ|j/8qbfIensO:D  {Cv,l q'R>5fk6l{{pDhB9 avyԒ,|Njx\( ^>Q{9:0ISZW&ȟmֵ; spԫ`ANӂTes#-ױ(QMOهJNilF;aG j6iy ֍ Eu%\hD -ZZP 됉z /Kc|u&I_-TұW\rVu3d3ex&s=e!{e t3F XW ^SJoASڂtR(ꨍ׹&OqrzRZk=9Ra dVH1J(+E{!M6 8aD@X{JuҮ A5`M&&l+Zq xt#>] 2濬A^N%ZgNdiy@/\OGR\x3>rvEirbYуbxZLfzk!Y9MK8XsvZKm,5Z+s1^/f,G2Py50E/-qKN.kGMNY}lP{1B&6zs{i>[+p .V7`#ϬQՍ[`Y-L1nYt&)Ί߷P]bzƲq"RpZӂ/gm6L/W2bq{.hS0`v^i & c[K ݹ6;8vpL yfrY|zX1U»hX$|͵4~ 3٣ .ǟDBI+?7Vx44W9>G瀘/rg Ovϫᰙ9QgJ#$r,x`ꃹG#5m3Ņ_* KOFIUTkcg+#߱QkH M<(l>-㢜)C9]~|0Z2/D@ YJsOKo$_[ K#/ǩ)-[i[=Rl^Hq}{Ir/I.b*!]JOȃ&˸ U>Ո)vOGĬ-hGn:4hǒy("}~?E䳜P MfkRs9L4?wQ?at⸦?;E OJg0pMRlDՆ| 5`oXRrf9*A1Qka,`5^!:HC<Ń XI e>6|7I!u"1Y #HL p?mFz2n;4=]wX֊bR/6FxlB8ׄ}wDUєe7sch9*R 5Z"[p<G%~!.ѼΒi_/8:4,|6_<+z Cc6)ݗoX`Is\pebe|+XFML3V«XL1ń] ͹aK<%R (n8g⣙%7ºXPuj,Pr^ZqV2Mq_u)e{MsQXM8C?& ?bf?`~))_cR]by3pf޶&Q \sy,mshS)f]`~}y 祹Y+^S;P}G\ZSvu:zr S1}vDʽ(idk!?g\Dg^H%'_,=2Oz`v;n Pn7 p{*cmcVD.UWޠ*[K"rKDX&Ket&By#].}&PLf`=ysoIlґY /qk%+SVX>dO@h"$laQYږ^lA$$v(d }#0@3ь.u6đ6gt1T䔇ꦚ&`y6L$^mbٖOkQƵ8XJXbdԮ0cے7)5z*j1-MFYAcVq]ټف+=ӹ)8 "YB!U&Jy`G 󂞵@2 2 ۗ#\7 ][ фMPo8O,z5prkb j=T_+ʎL,FB )JHM0^Ï8/FL}iľ`??pXZ2xk/2iˈ+/ꘀԡ?y>f53!Ҭ(W b!(@$L Vvse7@iMYpZ,8G2g?o뷅-?1LzJb*M>hͶIvoȒYYh*D]⹸v3G ox s# r+9~JEGP} $ԬL+ py l؍K,jyj(3g%6p"(Y } A3O~ŨpVm*yP6Kyⴶ7J#3 T "qhF'aDYToæ CSp|URQ@0_]}`n9oVc"ujs%ER$vbpz"},+"sNRFe"ӧ[+΂Nl#&ԢϮ%KېjT,ZRtw8"?XYPe|NUm4x-VE-yHh*0MK턳_Фj@Ѿww5Q-bՍyeD8gC\jo\U)K{& J GKl⽶VblNY$ <T 2\oB#S՘S9*2Rb^CH=Ux^?=bd=4UnEuYeɝ"l'm̩4 {DK#AJYESn\{ށ,hՎɽ` GdJCt:ɐ8Cj5n0"A~ܫYkmp3PVj9 s, R={`]=;jٮ>4)RwCidgȢ簤A4ysFkPIs !45@U LwFgy@gs 0bb`uhY NMzvP2βjN tPIP1ʼjE.N.pI[|osAkVn #Cj̶Y@wbJ/:7Yؠ0ЂC-Yc؛?mkc'0fS?\R 7ZzI[I}Z2V]_S}5ƈ0 >LXt dYv=YD4qg')̪,kRX#$T>C4nxa%P >&}6AN!f# J`R Ⱥ{*u=V\:mJ8_ǕL)Dze Jv`0cF'|oAѲOx'%v44̼E?]Uj PXe;2f-بg*^7isrcxC8,=m s<1IQ}u 7$}_Ɉe%dtc~=/@FcJgGpG3~]zSVf !X\폿_ۮr/ Hn;Xd,] ysPU^# w!V}U:"~L夕\LXusHUNg eK(wgGjB 5%Ϋ])2bѸ1է1a[އ鞤>']sio[c\k=>C빥),;&yJؖ#"4L.奭>{ӮQ'U­m:q|·5skt[xzI ߏ]t6DbXJQ¸AS#5br8DPxII?<@i{(r|[7=ЦzeF52@P F"v򺽝Cq#@ňFgTAs 4"\oMIV@8B\qTm.W>F2!qiW=ӡS]%;=O|jjъ4K`\̃y9WWQI-+u!-ѵ$z,S}yf%DVAWA@jM@rG)2`*2oGT﹭] + o}?jrnOgsϙ]NI+= ěgғ]:&6en*XLM.ćl9pYWzQ; :c/,n ۜBIWEfٿM`^BDBʑBB emfLEкfETIQ 1"Ϥr9xI1.6`YwB>){IC=|ӅT;'ٰ׽/sxS0o!H@꣭ LwC(x4=I)DWna&$͌`*@WsASyE1 O0!67oY\'կ{͘~꓇ji cn BLy(R=SEG./-^D>-oճ{qtc^~&$64Xqk-Ĉ]"p }4^5-23̜{4 3qt*<69(TxWnj$f T&' `L>!W8Ry@t};0)?v?SN;(%L =?"#bStEVPH#_0O&b֩X"ŬyB~s|=D>T;t+1n! xo1duH.0chp"_4MFncSzPjiRٟF. ̐qkH4SĨ)S"f\LUD}LS!ׅ͢mgwv_Lʈ΢ k^]+YFQ,/r/%a` 8ūQp_N5̔qrb'W<@MD~gws%K\;Zs<?Ɂu6%a0d `m * 099c3Oh[;N)+Xzl^ ga2 `{-7^LYHe t/(;lօ2[ykV)nLݒ<`WBIּ\w\4+#?rմS~GC$6`ԀQV\'جs?) R[-F;ٰզ@'m 6-"__+?GF 1X RՒ3}K 59}k˄S@clo~@k)DK& Q|Sxe/䤲ǚFY8QBI !сpvk݋n(2ESfgAg"1訊oli˄dڼ|O5;3]7!]*m9zb!= %#| 5M ovkY$D=\:eGtF2&xw|=ی,BmNw/PD ؚ>B%,uW3Lv8*<6f0piχPh=7]dv^sf7EuUcVH^S@sim!b7 %f%prܼE6EYVhE@9~q_4,*7aܯ?K[!yXu|F xo嫶"!!}by[|\=1:rXOEó4 TO΢}M  Po6;o4efRV6d,n;%Ruk/\kz Y-ޗ>R:Z~zo2@`:>§v ,/l@ 9B3x4옽ڤYn͊GƈM|0'@IʅV5jlͰ'4JbBJyEůaZa"$zPA)w\%Ä iE KIؑSY5C^ĭ2-Yⷂm=ʁ$AqqHe-{~KcG$/G۾{|;rjݳIf(|Vp8ܹD02+Ry4hi+^U,T4(ق ^ݱB3ݙ0w+?''ϼ*[ۦ2Beհe@t)Ńqn DVpx/{֤{ }Qzo Nw5K55_6o-GTu$oj^-/5wP:}~/XsL(vދFFڳ^GSm^c&'hyrv`0u8>E@Xod&| #C.Ɩ-KA eT5 %% P*JR #](N>SDx\q>a~HN9~p0&$mxRO, jDe1z9Y}"ǯǓ&z)6epɬx٭F]W̓2q3yHW#jn&s̵6 \5rF Y8qn)5 wG/5[!/ ț2^DC])4_6{u~dCL\+=IK~Ҥ t/. n7BU\9aa23C0`b+pus˷w_q+uFrV0D[:zjIJW8Slp N&KW\M! o(h*uh%]38]y EK1i1Ҧs!H 2Un/2891y"k9oYE~d/t9TY${z{WӦnh/4ܾk~TƗI8VoDzCP nl~;^TGJ&hi--WRzAi**.8RЃe6+WI8/B`qSyo wyn`bݯ΂1cc>-ai[BU7]g]RiYunUߪ踦9˙Tcߦ)o2H{~A0QTR)! q}~2bbܭh_ǔئA_Wh-9pKN9ȃTy#}k4%3u\cz|YUͫ"h== qO·zwH2JfۈF(p>;8\_+(ݸ?gl\vyt@y~ZM&X|AozСgg߭oS%>! Z~ەF!;Dx*օ#Eakˤa ( >#=pL'pтR1*6~}5\^r,cӗx}]?<6֋[cva+'0vOb59zvVW -lCpr )f-N%" F֜BahZVXP7 TO;!D[PP7X!T&`r%>cXʜUdc&-zJꢀr*"*%;:'e0XI8ֶG 5A D?٫Xɟ&&I|掗 O݁.gT x%i Jm5=K3:ȧl4€ڳ [P#ۘ82Ę'! 6@wLX¬*A;~tO.X8cE ?2,X"f=̠sC ![jn6V K+k*pO)'+;H7N`"(k@7Wj]4+0 %}T/'yC|Zr==+ry6~"~V3唔( I8Fw}b>RӒ[/f~δpW =~ַcr @g*GOrj+겔8u?H ڔ|J.ZHaMo5#jJ_[Au l"my݊nYգtzҖL>nQW3e HG y8911B?`X7TKʿ10[4z,`*zƸ/L[!]GAhWg{MjOrMs#"[ HpmYE U&gXx=4燆:u?Z"<v*-Vvq 2WI"oSWݒCD[:GZc:M* ) 0ҰBԜ]% / $hmGn\UV$gd ,{U}ΦQX1zcLQ4^٣a@3c#oǥEKOt8 suZVb/t$X_:bKg9كAptL#e|]1 ]>+Xr8RۖҖhOɥ$4T UZOξy ̸\*  !5̸="h+ /*_hGtEkwKc8l_̥ɩiefƑCY|@ 05jnvj@NnafThu+DEGT7!ݑ0=5|8 ^-Z%\P3YX.h]D$Gl~lUbi yٷטRձ޿r-cN޼z4N򃨦;YAGv1aR%UhۊU(0 ?cRcgbnOlwOj<p#$tPS <>n؈*Yu2U-EՠqOt #_.AG9XᕔAɉbXKiY"a@ÞynvѡB4_m6k+Tsu`CyS'__-W`bi#WUdJ2X?EUOc)rmdBi<(EHg4x D^ Q?Õ"ШHCEoې2 Rliszd :_8" `IrVGG1lv ZZ>XxK+駏UP|LMK|MZ4jaE Bm%LfF^apN0NJX9X4fIj3S4A$(G7.`98uq~e}k"LrՑm9LjCn)E罙 :w-B> T\16iD7i2 4VLSuRmZ_&Hs&3{Ѧy7IIڑ~ny,2EsfgvW"[}>L9ORr#߾-]=j1?EX,pU#=ݔ4YbOat\@($9ˢ <3򜽱VEM Ms4{TX~EK7όN.#d52  --KװQs׉? E3癉\`NAX~!Br,ؿk?8oEjy~K7'I)u?($QV1hnc"|TLL?JIX/lЫX;`9 )-QKg502+6OF*C"o0T`M lBӴg7 MՐ8$qwT8agZ\؀6Eg˲a Yųczd7NjGc[\Gw9ʰ5eIbB"KwɡV=>:JjDXlOu+xDDa͏ ΒGާALWqsYGO5T'\bA,i{+P.hpKCW~@A zyL&(UA_fF6O@OJ2>ecjI9$jIczp"'2'k%i7nY . l"{x#R<z& $r0sp>'#ن~@!UkIw˲ ᘊ.LQiRlYS7*iХdU^~c]hxiVСkj[mavh4! IV}]! 1h!@ TTw)s]G׉vнФ6f}Sf){ @{c6:lg&%"#WLL7Nl`]9LQyx2uگE^gTq8ƚRG?52tɴ[dEfPt(J a'"Fji) Q}b:ߜ֖ jIEŖ:W`Na. *f֨5(h/ѩa%3yP!O#PQgQ[Ê ieW-՛‰ǻxk\D^NYrgs#NuD3ϞA(oS^}hɍg:o,LOoE9;@ofk BEI}U}O5cjC&QErhyǚ[k瀔1_oJjs? {`B(aH2I2䑲~0r"\=Йb""mI_vCƷtVsT$SՁ Qk\u!(.0 ׊_dgBGP`- ꀎP~W7XoT.`Ojw0t983vEIpit%T"I]/XA!R)@W]+we@TxŠ) B=5( 'g5`m<y@<;2a##@X0-Uo kHp"o';6 *Z$F,VZ9(h勭R( oi͚fgkv) ?К 5>3/yLt_2"7VX/Y'ObF sv<ߐC3RR}f#z\)?=:B~~C&cy4<ޥshH>Er=/Gc9)9{,.tK9HS9+itLtNZ2J/QQߡ> wwpBvHP5@Mw,tQ-}ߡkf_| L8Bn|M#+\u0b!Z nrx-M#W d$fc{e(-d2O67h{HF%63=c#ѓa5Bo2V! Ӄw[ iݬq1hJm:H^gMHkgFAI?6MîC !; UFZdMy k ϺiR 84\kqj9]ձ4qJA`XW-o8(y@P<}>q-:˧>'(߁-9gU2;SWKsm' 悸1%Y$ ũO[qoFsό%2|J=Z|0#rvj ƵFjH ͹M$z|k1{w/3=:NL;Oef!EX)'U!Lkg3+]Y􄾯 Ă%^6,rRM6R6,5ʥp!$DQKڭ7qb!|/9<|dB&T)b S $gJ#ݷ+䋹?k/3zMe}pT]9@RHD3V_eU٠UQM8-!5 KqA{zt=AFBtLTU y):ZYB"ʪJb|T&TT͕5Sϗp6_Ð]f^ yE' XZ5Z8h絏i~S$ԠN}x!e.AOtd)C5EPLJ2om89"2{h㐌C|C@FQ=,C0?nVƽtKU,T3g$ax_>ΧAvXl~4wGX۹oWnrXQBr_523c3왁)@} hJXgvqc[cHp4n=2H %;.Ѷ>izK3lZ !/m`j1AߋX4vHRi z]^bn㲏 VQsi1؞۷羈GU*679D@ _AoaaUmtˬh-06S@{=iy0ehܭ+[m.zu=/~x-T74}ZLȊO4/sWls2qD)Ȩ88)C8#ij""EIdEaޤd6" #U&cƎZK!{5k7>6AK2ilSP{O$wGpv7#dNڈL¸]6~x&XJ *|,OZSfBWܾiPhH^C呡ܻ55|•]%?~!Y{r!nG%o| Q+){N|^Zիw'9<7?W;1>إA*wDm3*P.w&‰ć~~dn6/6YqQ[WQch~:=-?#+x/G.qpvZkyRn8F-9iLUA~tQVwI,d Eoq kU8ICi~x)(WhH/$ą. 0'#_:\RB s/YezZ#E_e]FkXT,&/&6tz ;kc =44 à kRfU<~f[pAwݒ{im_^H㈄)-(abⶩF}V3+"&Ar{YlaS/HYv\9+-^ⷅ`MfQ Nb=q{G)H /^M^Ժ@{\};1sIBGܣ}?)i*ec0Zڴ]l%6ѾpF ~F}{d$z1&zsoO dK!K҃B{T 홱xxؠ]b\ȋބgoqV8g HeZW!N'L[&.V&šGܑO4]{{L* CBH[RY>Dkr$gcmQcu3NzQE`NЗ'stv|VAKڐvd} 2[rGDA;hr էn=oF8|ާRjz|"'B& Bd73[ֹ>]Zi E]gjvcs6QJI CW.p,dq!SG,58kdzC$~o䰛e;;ľD M咞EI `I&wSɈ|t)~Yg]ƺѭ52x:t]bmzp#1sUa=3o@T7FAgG o>aAiRʘg1cN>+,?^{FdCcFә$Co;NA0!,s-S" uoA| XMh;*K-i2Ngi*}93O LAOʎFTӟru _Ѵ-f8b_hp"Slٞ{:jz^]bQ{јd6WIȿx8]:OG^~HCMg:-ڮ\W80eEPw羘($Mf%9ykIY:KOpTX ~0嫯b5 #]dJ&’Ꙍex&!pT~oMťWE`EQX*#NkR$l\rTrHߞvNT]P{Pʯ7d;gG`scRͮ("G~*Pu`iAu_vR;.Lm^JK&oQҳ0&k?N]Ku)`Sތ_O ,v=υo9[WCf,uv^w9QLbiLUbQC :Z̵>j#1lgκ6µ=H"xHÎ>r'B:%/$8مqa}S| 894bT@ ߵjTj7;<䴉x(W3-ڧc3r!p@L2h=0Ӓ5|O='!̭KmOk>p[?x.,:Hѭ 5%fnPFiٛ}CaViO 0ؤ H?vE;ɤ.]IHnx cUc>0XnQ%&y97XӰq#HH;Oz k&erݚn'O!BQECS!UbuSL_x;>Ne.Rx j7.͛?h̊Uq{BlH`QlO^= 7 ޓeBe/%U,U8r$U~\SQ|C m- }8,HOWqA\=*UqOdh'[9@Ñvm).8n}>'q+vG5+<7Ņ oU#ߔfAs1j;eiFVW!0H"U/N ǾYBHoh,vTv06g .:=ݢ"qÑw%Q xHȎW/Sz 2w9)̔Et3Wa"$EYO)PvXZA G5 "OxBKǑ[ +|)o>Wp+oaϼ}V ش 7Jڛ|EO" 8æy(Ly]0i0&㤴 SHj 3@-{]?B5x'tJ$sr cv 뻸{ZH΄VF7Gow_}E VU~4 .*ߪ#AX-nB΢3f][Y@BXdfZVGDe ][]Z^ )r6)vܫ#anRrlف;z3Z1uC܎srYr12,Gv7yՋ\QWuo8YN&Ϡjc_02Z.~G[3I/)琄Hãh- iY?w'dY멫B!ӹQGP`USnN9xҦRk[-=V EMtDB UM?%%_e|?dP9rc'Un#=Akv{ԫ~=_7:^ n~4Il0ȅH(ണ'`Cw%pcs?_&X) ݳjQjF#g'}I3lTFHh 쫂^bK5900OQ8}5os<'DBPB,a))SFlII *Bl{y4bdjԻݩOo(& U6Kf T_&} WٵV+jvtՠ]|q5A<}3Lp p>NAt.ѩ]~ڟb>AٝOOg/o$gkTl M(:]N-u8V\m8 O5SàyZ:ܰ+2nr|s#{bF ݱ\?13Z#uLHz褑gCRBՌZ)Aol]V},>Z ܭd N<[BuݍiOE+Ŀ+ isl2“\PiNm羠DՙL"?m~ܠXA\rNjC)w{# !:;!DBR%uŖj(\lru .8,{kЫq נ^hiNxJ^q;A9Ϧ6diB, e64c61pB5yҫHB=g| }Z3ɺt[uTƲ sИ*_:2tu\~3ܢYM/yaϽ`A`iQos:&B@~}El5jQ*Ĉ&o^\kOƻ9NlF?5hS4+[ܿ dX17nK}nue(.i9Q%ـC'MP &j&W սKA0؎l0oNfCML(X['$Q"ӗ "&#m-T"jT^xU(Ag"v&_bO(]+VB~{C-Z#5+ 7!Z)s1lj( Wm8u4\\742nL{wħFLy}y|hzOENA[hr3uԟݓv=3`H~4O}`ρ qI|)TwE|ݰ[PAAJ&}(KU .UȿeQ(83cqfMgy*E?lۄЬ?HzR5+cjT(,w5e GH;8$KT׾xytySRU$e|vav_\wl&җ=nyO_TlsY.xZz$} "1&Hg(9xSܵFGpOS%G&:+z!9GmÚsv˦cj#~JRhNa{[d,paSt%n;g-*> f9d|y#t}=[ cOr&SZt@ 9y=H҃Ϯ!Xgnxze_K,fc}(Z+#:}D}%9!$e^-`i4&$bWpzj`,"-߭ō1 vtyЄ j@qT/ NSA'ǘs/}a)eֽpoKXb)vP* A0*gs<ܻ䡜n=YRn>VG\q6n涹Ѐ ˙@`ļjkvw`c ~!^tQ Y3u0idžtz_kDOArkV2J pJޚOi[2"gZl4'/y=^5 bR*sanm=6MmW+a՚$i'|~#;Sg ٍ;/0Q:L0+$G!D.+geJ%@E%B#rtI9侉XJVڅ |Hg)Ȃ4S@ -xdl*A7gGNb ڱteRA?&ǼP>E Vb1/d9gnw"3^=5Z,@CFvE<})55V`r`)s>^LEbwr)kkRЬoPV[G\ =@^zCm娆 K6Ԫ~ɨVD䨾nz}tx*IQw_UÌr%uu`^(w8>8!쯚6X+%%-Dڿ<ӨN8*Fz!(JTƋU Ŗe&k>w}+٢,T C00=]רx'}Z P{7 DKĉl:+-Deznwāp~7m.Ąy4cnxI W;,خO湣-% ,\QMChYI{s-cx[&mti̦EM @)XW2! - I0R"+th}X_ cߜ g3^უ.̲2_eԇmL*q^;5й1΃]⭘99qSo+c"w=!mg !&0]~76-_" ML,[@S1" eLG 7? a*Pj#,+30Q\!E_[D6~ Ƕi퀙gzCׅ}ә5$PPjFX`{b>!s~wbm JT_@b*o_o ,"+>I% `'r /{p.3^>dۃ +ɿp],n$9@vݟXm ׈&haqa~ xtpX湁 {:8spֳy!lQkfRNk@rA)Y̿wNTxpb уgM%zWf8u)`¨as}w~S@RaUVƊ%j8 F;v0jT6O<[m*8WN'R_[̴[ \YVvXOjejS!"wnCzd㲯ψ$ 丁ZTC$FtceCE-5yC^'5iGoQ/b\n?_~tXφq N14e(af?R; CzUIM֨p悗V Qc*kBg/4\ؘe` "LwݬR #*N!x^]'z4w؀.?Ų ~_5a1Ƙ)Xdx("1{-:l+,@x&iC#Ӆ/Xrf͙TVk=W#i=K4n1Oۢ˩yc :!C`Ɵ1K d:"n &? q0{_û{@3EzaFn&OoTT9QZ6 5lUp9#z 4zY-j*bEnsp|0&*/RHfs16Ui$;hߢ C@֋!`E&MQHRqK2_Rϒ?JDՁp"- Ӓ0$ZU Zɋ>~^Q&5sQPg&LazTG=T`Vj.=[#FЅ߾8բviCψiMa?@.Ѱybd2&~8Oӌ+Aaa+i!0#ꞹ5\X[04j9D(G)s' P*y(FrG].%UJ,<3nCt5kua$;(,7{ɺuٜM(#E9'0K+<6^˨n"mA#>lcw󗈩9.Ei zܣ'zUzC與 0G"~"Kb.NgD,rgI%|2 4I :Ozd֭J / {tPe.D,;d uqm*tN7%N_wQ2Qu1*2 .#U>9b'C!րc1DR|NjDWټ#p$c7j(pd0RLUzƅ8$ysG:Ĉ-h$B @c(Vؗ U}/̕)!¸Fuh7vf_VJ`$bṁJf/ʡ[%$XdTo"F/i)71 0#󱒻FßJV'H' Χ:Dgec6*PυK! [VsQ e"Q֘N[*~RxhK\_{12[fN}UENj/a-cryi{ePÕGv`ި !&jqKLƦ(z2qTgf Fp%" $&&.je&FP&;+ }*eB(tO3s-,ZHQu? R@M_ CV;^i-U,,V=a:BzRN0ϓV'@ڄrcd?:su͗0Pk̼iz<"Rdr}p+q -c1b l0-^ ;{ƒ˽MTuX#kuT qthRl"l}/^/G#ls*tK&9꿯Y523ĖAA(eyA -ZUY%2ӂ5kD+r(|~F{nZTgkR3k6ƒմ•p!!C8g9&cIHdNC"4f"\&EGNqUџ.K$űmeژ`l]$4}UĩětuuYV֙MLaӀ*,C_x#l{èhorZgy%:ͼ!R!YLYPl'7Tޞ`)MX늨7 s# c,5sV~[gf\>K_< &||sшʚsB{u!b Tou8e4Amfes{>ԛ(YErpLqnU&qַcyU&41st@W 49l8|9TT%AEܭ|ЊA5X2O7AT9~Qkǥ;CƷZ6\CiӚi$ @rv 8"?9.| k;"ڸUjQ6/rT5[_sa w\0_ʹQ|PZv>Bq9K;\G|vFXX;3!ـ\ [[l^GߞČ,. `,k pm0?QI-L .+eM_AΩDU󵗸0[̊v >o9.Bq2-g!%c,kKYE 'ܟkṗ<3lُH soŷr$$A՟>9 ~'2~VBmԯ(w̝}L~05/VT\9O9\Bz,9BV"~(eC\W⇖> \>eG6%q"6怀w'oF H|AV2Wm5Rp桿FO.[?)J:Qv: w 1oQx- rQ 0NzrfWiuKR@D[C\eZ "vF\},fa2*jU,26%Fur|3QL m,8H󉐼 ݜֆ@Lpl"5)@Opg-"8*|jtHZ4}xϲԛưtPpO@Κv#fSwV>/;PE G< .!Y`T-a0NMK5FN"#FUmꁗ; ߥ ^`ZZec}ZGϦq%{s T!AOjcf(v6v %g*N0q&`AApޕ%; wm*|n22*y#!;nf,ԠćAQNd3i|>`>z08M`C尕6O/U9.'nVJe`s݁Ӄ!p>?J4c/ӛcᣄؾѧ*]߰ssÂ.fEAQ9W=v&l/l6[đYWx' LJ<ؚp6PN,9]6p"\>`՗MF$HL>'|s Vt/^l0C'(gMV<^Z瞥AωE[̖P.9 qѦY9FH*V;oxKв`wM8:/"brB> oI-s0=,mO3J+ 1˟ڜ@ieV?d&47BUok%Km/)Os Wفsz9]uMˎ=9W15>V.lA غhMz(3o[([ZSؐ#JdhfӣJNx!&ZYR3woBRK4R7>gz6=.JcD_E[a&ВA?:[$S a[3tqpFkk<2~!#.B& [YHUe(؋ӌ:{5"@հF\l+qMU0wG'X8OO >}3=L S A0T&vv/(! yxkV C)e'} Mtep.S0t%?C4^Y՜|6lu8Lp7uPq$q gy5,raky_ɷ˫ZyOj5G`ʸ/ Î<*F6! Au |>nd73o%Мs+1@M2Wlq 4GRC8+u4&lgt v;ehk}`G ZkL.t]aAw-~T{0 ۴)z&>#[kW-*(Ӵ xv@ .gHSQwP2m . 1Z7 <ABFXbaZ5X$?#wc3*~jB&˩zMk/ 4@R -y[mԡ ƹ6<&5ZšوW$hz})KY{odo]GU}kl:X%PLHj&PBJr&Q-o* Jlf/Ĩz|.zJ};yySX('trM;TA2-YNH4y1}`κ$f_|K|7G[|4w,LtRE{W^I >8e\Zբڏ58 =TLa*bON|✮Ss\%i·{ψ7 YyG"l@\#|aaMUgxrgv%cJ]aZ\ 3̊]h#S'4ʰ7ewd%KpT2'+v)7T=ޮwA-ܵ/|%i U_4~H$j6è,@rxGZ!afD&N <QN, YIVD'n)}j\Et65k*D~)[J)SbOpM7.]cy]oQ xa+ nj >Z/6ْ;UhJe3q8m{A @(; gtMOs={On(ͼCꠡr?%Uyl(_rZ@`}j$Kj\QvwtAOB\nDL<`f+ D.$h\{/94[7pE&khegD^E̲GCb՜<SrׅW B/AqReVPڕ{bpǔaޘO@yǙI!{oc,"g&ɪԯ`Q+*r0'֞0`FhWDQ_ȣS~;8^퇏yO-=J32kyuǾ Cx.d1R{E' <1ϦU lv!sOx?w@IC6.+6ӶjY#LjKbԣ R[&_f%t8g$Y桒^ҫ$qhTP (x FcBUVтrTiЭ`%i ~\@`[ꖂnE@X{ӱp[uEXgP !߰zOuX+HM߭Nfndz]^JKk*ttOlwmAwaN ?i}5' * r>>F0H xٿwt3 A"b5 hY,T7Bijņ_/ozgp$Y K|߷͜?{O꺴 T$FP4ĺ},`q3p[a#A"x#5sp!ߧ.MO5db# j/n*1}zѦudQHE]{K87E53;SVn.jc dw6r;٤J=0b1:GHW#d1RCދ~]²SJHeMIӉ4A:)mx@,=Ќaeܿ~7CwNsMA]ai(k ,CTmal(ʓ$[*X GC/t&]Hp:-1^|q){I*L:{WQˋJ`zWsR[ E@_JO_/)AxO<=xeyB|nuy,;՗6aT-(ߗ۟2FcTN}AATjנj5T'۲KU0SFh9UnU;? qY0,Qq.6O6eGtUfI?$s/a}mЧ͸Iiwwӿ-: ]v ppA#\!HTgb>9+[Foi9kɫjX}&xsgˏ   ?6&@1sV䥽[CA˱!Qu7_) >:]L;Zdzpssfɲ~=L$},BTk7"akr{"ǎp{k̀"&6IAwYi?J%9huCƱ84C3'y_͔f?(""m셷egϔ9@F#3_ʄ7X Qq^voz9m806pE ^Zuv#ggPF N\П$F.nKaS͔),ql?f V:%obӶng^Fj L>ޏ)P4F/LJw!< 5U '6>Np+ a+#S$"eNyĆ 4Ax=Bb+sLp半: l-ֲMl*:Ҧ j@؍-*W d\#]Yϙ%'睟.e$WKn S=w J>۝?1^F8ua~6$)