summaryrefslogtreecommitdiffstats
path: root/src/ccapi/doc/CCAPI-Windows-Design.html
blob: 72af7e92a7ba28a4bf216d420cee6928d48fc7ae (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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Windows CCAPI RPC design</title>
<style type="text/css">
<!--
.style2 {color: 0}
.style3 {font-family: "Courier New", Courier, monospace}
.style5 {color: #CC3300}
.style6 {color: #999999}
.style7 {color: #000099}
-->
</style>
</head>

<body>
<h2 class="style5">Proposed RPC design for Windows CCAPI clients and server</h2>
<p>The proposal is for a single user; the solution is replicated for each user logged onto the PC.</p>
<h2>Conventions &amp; clarifications </h2>
<p>&quot;Client&quot; and &quot;server&quot; refer to the CCAPI client and server. </p>
<p>The CCAPI client acts as both an RPC client and RPC server and the CCAPI server acts as both an RPC client and RPC server. </p>
<ul>
  <li class="style2">The RPC call from the CCAPI client to the CCAPI server is called the &quot;request.&quot; In this mode, the CCAPI client is the RPC client and the CCAPI server is the RPC server.</li>
  <li class="style2">The RPC call from the CCAPI server to the CCAPI client is called the &quot;reply.&quot; In this mode, the CCAPI client is the RPC server and the CCAPI server is the RPC client. </li>
</ul>
<p>The Windows username is referred to below as &quot;&lt;USER&gt;.&quot; </p>
<p>The Windows Logon Security Identifier is referred to as &quot;&lt;LSID&gt;.&quot; </p>
<p>&lt;UUID&gt; means a thread-specific UUID.</p>
<p>&lt;SST&gt; means <strong>s</strong>erver <strong>s</strong>tart <strong>t</strong>ime, a time_t. </p>
<p>A description of client and server authentication has not been added yet.</p>
<h2>Design Requirements </h2>
<ul>
  <li>The server's OS-independent code is single threaded, because it must operate on platforms that do not allow multiple threads. </li>
  <li>The client and server must be able to maintain connections, where state is maintained between individual messages.</li>
  <li>Individual messages must be handled in a single threaded server. </li>
  <li>The server must be able to detect when a client dies, so that any connection state can be cleaned up.  </li>
</ul>
<h2>Design</h2>
<p>The server and each client create an RPC endpoint. The server's endpoint is CCS_&lt;LSID&gt; and the client's endpoint is CCAPI_&lt;UUID&gt;, where each client geta a UUID. </p>
<p>On Windows, the server's ccs_pipe_t type is a char* and is set to the client UUID.</p>
<h3>How is the request handled in the server and the reply sent to the client? </h3>
<p>One straightforward way is for the reply to be the returned data in the request RPC call (an [out] parameter). That is, data passed from the RPC server to the RPC client. The request handler calls <span class="style3">ccs_server_handle_request</span>. Eventually, the server code calls <span class="style3">ccs_os_server_send_reply, </span>which saves the reply somewhere. When the server eventually returns to the request handler, the handler  returns the saved reply to the client.</p>
<p>But this doesn't work. If two clients A and B ask for the same lock, A will acquire the lock and B will have to wait. But if the single threaded server waits for B's lock, it will never handle A's unlock message. Therefore the server must return to B's request handler and <em>not </em>send a reply to B. So this method will not work. </p>
<p>Instead, there are listener and worker threads in Windows-specific code. </p>
<p>The client's <span class="style3">cci_os_ipc </span>function waits for <span class="style3">ccs_reply</span>. The client sends the request, including <em>it's UUID, </em>from which the server can construct the endpoint on which to call <span class="style3">ccs_reply</span>. </p>
<p>The server's listener thread listens for RPC requests. The request handler puts each request/<em>reply</em> endpoint in a queue and returns to the client.</p>
<p>The server's worker thread removes items from the queue, calls <span class="style3">ccs_server_handle_request</span>. <span class="style3">ccs_server_handle_request</span> takes both the request data and the client UUID . Eventually <span class="style3">ccs_os_server_send_reply</span> is called, with the reply data and client UUID in the reply_pipe. <span class="style3">ccs_os_server_send_reply</span> calls <span class="style3">ccs_reply </span>on the client's endpoint, which sends the reply to the client. </p>
<p>Is there any security issue with the client listening for RPC calls from the server?</p>
<h3>Connections</h3>
<p>If the client wants state to be maintained on the server, the client creates a connection. When the connection is closed, the server cleans up any state associated with the connection. </p>
<p>Any given thread in an application process could want to create a connection. When cci_ipc_thread_init is called, the connection thread-local variables are initialized. New connections are created when cci_os_ipc() (via _cci_ipc_send) is called and no connection was previously established.  Basically we lazily establish connections so the client doesn't talk to the server until it has to.</p>
<h3>Detecting client exit</h3>
<p>The server must be able to detect when clients disappear, so the server can free any resources that had been held for the client. </p>
<p>The Windows RPC API does not appear to provide a notification for an endpoint disappearing. It does provide a way to ask if an endpoint is listening. This is useful for polling, but we want a better performing solution than that. </p>
<p>The client has an <em>isAlive </em>function on its endpoint. </p>
<p>To detect the client disappearing without using polling, the server makes an asynchronous call to the <em>isAlive </em>function on the client's endpoint. The <em>isAlive </em>function never returns. When the client exits for any reason, it's <em></em>endpoint will be closed and the server's function call will return an error. The asynchronous call on the server means no additional threads are used. </p>
<p>Windows provides a number of notification methods to signal I/O completion. Among them are I/O completion ports and callback functions. I chose callback functions because they appear to consume fewer resources. </p>
<h3>RPC Endpoint / Function summary</h3>
<ul>
  <li>The server creates one CCS_&lt;LSID&gt; endpoint to listen for connection requests and client requests. 
    It has the functions
    <ul>
      <li>ccs_rpc_connect(msgtype, UUIDlen, &lt;UUID&gt;, status)</li>
      <li>ccs_rpc_request(msgtype, UUIDlen, &lt;UUID&gt;, msglen, msg, SST, status) called by client. NB: The windows server sets the <span class="style3">in_client_pipe </span>to the <span class="style3">in_reply_pipe</span>.<br />
  </li>
    </ul>
  </li>
  <li>Each client thread creates a CCAPI_&lt;UUID&gt; endpoint.  It has the functions
    <ul>
      <li>isAlive [function never returns.]    </li>
      <li>ccs_rpc_request_reply(msgtype, SST, replylen, reply, status)</li>
      <li>ccs_rpc_connect_reply(msgtype, SST, status</li>
    </ul>
  </li>
</ul>
<h2>Windows-specific implementation details </h2>
<h3>Client CCAPI library initialization:</h3>
<p>This code runs when the CCAPI DLL is loaded. </p>
<ul>
  <li>?</li>
</ul>
<h3>Client initialization: </h3>
<p>This code runs when cci_os_ipc_thread_init is called: </p>
<ul>
  <li>Generate &lt;UUID&gt; and save in thread-specific storage. This serves as the client ID / ccs_pipe_t. </li>
  <li>Create client endpoint.</li>
  <li>Listen on client <em></em>endpoint.</li>
  <li>Create canonical server connection endpoint from the &lt;LSID&gt;, which the client and server should have in common. </li>
  <li>Test if server is listening to the CCS_&lt;LSID&gt; endpoint.
      <ul>
        <li>If not, quit. (! Start it?) </li>
      </ul>
  </li>
  <li>Call ccs_connect(&lt;UUID&gt;) on the CCS_&lt;LSID&gt; endpoint.</li>
  <li>Save SST in thread-specific storage. </li>
</ul>
<h3>Server initialization:</h3>
<p class="style6">[old]</p>
<ul>
  <li class="style6">Server is initialized by client starting a new process.   There should be only one server process per Windows username. </li>
</ul>
<p class="style7">[new]</p>
<ul>
  <li class="style7">Server is started by kfwlogon (as is done currently). </li>
  <li>Capture <strong>s</strong>erver <strong>s</strong>tart <strong>t</strong>ime (SST). </li>
  <li>Start listener thread, create listener endpoint, listen on CCS_&lt;LSID&gt; endpoint. </li>
</ul>
<h3>Establishing a connection: </h3>
<ul>
  <li>Client calls ccs_connect(&lt;UUID&gt;) on server's CCS_&lt;LSID&gt; endpoint.</li>
  <li>Client gets back and stores SST in thread-specific storage.</li>
  <li>If new connection, server ...
    <ul>
      <li>adds connection to connection table</li>
      <li>calls isAlive on CCAPI_&lt;UUID&gt;.
        <ul>
          <li>NB: isAlive never returns. </li>
        </ul>
      </li>
    </ul>
  </li>
</ul>
<h3>Client request:</h3>
<p>The server's reply to the client's request is not synchronous.</p>
<ul>
  <li>Client calls     ccs_rpc_request(msglen, msg, msgtype, UUIDlen, &lt;UUID&gt;, SST, status) on server's endpoint.</li>
  <li>Server listen thread receives message, queues request.</li>
  <li>Server worker thread dequeues request, processes, calls ccs_rpc_reply(replylen, reply, msgtype, status) on CCAPI_&lt;UUID&gt;.</li>
  <li>Server checks SST. If server's SST is different, it means server has restarted since client created connection. </li>
  <li>Client receives reply.  </li>
</ul>
<h3>Detecting client exit</h3>
<ul>
  <li>When connection created, client created an endpoint.</li>
  <li>Server calls isAlive on client's endpoint. </li>
  <li>When isAlive returns, the server's notification callback will be called. Call back routine queues a DISCONNECT pseudo-message. When the server's worker thread handles the DISCONNECT, it will release connection resources.</li>
</ul>
<h3>Detecting server exit </h3>
<ul>
  <li>Client's call to ccs_rpc_request will return an error if the server has gone away. </li>
</ul>
<p>&nbsp;</p>
<p>------<br />
  Stop: <br />
Start: </p>
</body>
</html>
gzDx|TߍJsA3(׾GGUCĦmn1)Eb,o{j] Tq|ѕ* U! ;&)hIt$H%;e@JB2_!lܭ2x/Pf=‰w_a6wLl&` >?G`goPn:Īc0m8eBc'_ö˨amwLun8g=HuX%Cg?5L*ꒃ4_5];-lFͺ]4ϑ\@s]1rL fprhо'+)y.г=/3!m_F˱:uYi4Ɲ'g=pǯLOpLeUi8z݆jq 59X f8qC]+I,3~<}"OQS$L@# ѽDy֦5 F]'*PZR8le)Lcy#.zשA AYOogz{ EԢ}O/.Po7il-.qOnR)և O(HA2=?-XEb~} dJ@9tw秣z)3'>ɴ-N(yN_=EiZWa=b) (7ܙЬW2;cF,r@ӹ/c1m8@6E`A:A޳b.*\ȪUXka052c-'W_g\FXHIS95/h9?3hNt`ٝ(TX)5{&V+=;.,p.e187!^ tbWf3vGN tr'@q#ڕD U)/nإENb ]rjrG 'F)hykbpspr.@GB3G6vƮ  aTɤ}jALc ~Lhעźk-Y.#'>pVQYD}[,# ߓ^8ٱ'GsZ;1]StJ>DHəTJI&ADKn㭯i^LSY~8A61>ٮLt@zͮ*8Z8qd|jFl>w3AEPW|SOn.?4\kDd@i|tg8iEmq,{6wW+F:dnen-`فdBhىaff-)ҼK͊/S56Mt$B?yQy9)5aqaaB=vDe>vsag!6Vl]}^FTzY ouq;"7P0 m''}u^ԇ3!p y5klZ>#¨l8JhoKV tqԩp^1 =|; I}ԛgmsMKOJWW*+3Lܪ1x(r WȔPPTGOXTӸ S]F@\M[iKn9Z P\5p7Xyv3f!zI{-ͻ e fLkBU4:A"}3(Nsh$o|4`<q֚ n0&A8ƕh7K:x.'64pȯW?O-c< S~Alu| ytl2SlnRzifvA6O=gkB!  g8*,f_YWGu((H&kߚ0&һ8gu1ݾھ_j"V%?Ƹ֑YwQRM;T[tl*k0[k_*6T>7e,Y!ZoJS6]py$KyK6q}UR6VW@ @diOz IŬ Švzjlz٤ė\)JmY$X/HVL)ؾD`xGrNa@CkJ\Rzᙒ[gXEVO\|ca 0 {cd^Uo uWgBsQf3;k۟fH !ژt&_MJya,y|946zҚ>@i`pأ<8Ӆ=R✮`@ހΧAChgK&Ƃ^Ⲿ(|G`iwl.5-ts@Tq$ԏйN{\ؾP6yZ Z "ڋfpvLlű2MUgGgJ9XSۧ0DVè(2/5eVbXʍKP3aL׺|YZ +ѱxU$Utz/WH`>Cևl]y'|0[mD"濮d5Y} _c{9諙5y#˝+ n"z~WH :MDq"d&!@;2 lN,;%_1xFsvUm'Ie*Tjp ]gQb%$i=h򞦏$.|P㣹lOgpp,-G#(m<]^=ecRYZ̥+rP5]1|*_F6\%ԧ2uV`.uk i>a`}s"n'x>ȠՁˍSC56 *fzEޥ!d}W(kx\p۪zN\u7ښZE\ަR3BS #;TT wT@9>X^QdMif8z aP727+a*PY/x_F[ۯ|aee%T}6^z rwnv'qOA WL2M|gnDYn(3>fϣ6քCSՙ:2nIlެ@)Hw@ <l)iR`O;bǏl,} 0P]{NSdu#X%R!aѫ(P6?-PC+By ea9]pAv]gklFޜ8"S\Ys{l ] !)B@hלO%7г~3\'o Ipuɶ }䄵)Z .)6[0XrT+$4@gUCYN> 6Q7㔺 jD{tPݣ! {ߦcڬV8̐>6 m: E'bcXtyPډثwy9V >\[~%UJ2`[SC` F@6QɌ!ݛZJ ~:l aVnm@vDnJC*&dudUV)EjZ26«P#B%.[^E0ugjjY͟3T.2J̺j蒓Dev)hWJ:3 WazEUAm7 + h0EE˽L*npXQ77`$~x'y!\%+fG`ɟvr mDtytcN=ֲ?ql腦ɉ08<48L, ,,=T<:DtvVH[Re@leԒKX(lB>cV(0d+u,޸<m܁ _ /_OH0C妚wB¬1`拟#1:gM ^iOpr !W>ckz;WtWC {k6/LjL܅BSmpnۿt5(u❹Cm\uYxA<2h!ʟ]PQܰ$?&OF;% ^R9jBQڳK']\Uu -G:B e*䄰&I~b8-) rPKkS Pa;^gHԻP"%`a/Gri B:~O&kxN&x;+i OSmW7{2@8vE1g9&$vl_gN T.·k0r(@Ų`ZE!^ᘿ:Mw #h\ ޼ ңd +n@>:ڕ=%U3s2LD R CxqĂnp1YP=8G?_ΔR4Naj0N eay/I}e+W+ŖsܼP{[kGyP"V_Q@/ܣ]ң4IE\C] |[p2'PfYC#!Psq?zAi vae(7*IV])7.gmJF\j靇{eȁ=2z]qgxH^;*{+ 4Wʈq$*VN|WZ8(qU*AgNT/@d>j_搭ui^/QaKZ2"o,e*&/~v}&elWا!CnIþƌkUQD:Oh()g|ʱc|RQ2Y`A'pVUHDx}4!`€1 cy Gw"׼s[(!h>NYNQR*70EGL{$lRkwQu?Zjyz4X8xNm!"T<ڎJ 9"SǼ"b ,~f((Yđ*$}ט .mC_!y9^;TD^EFQZ0yDɅÇGO! / ~3!(fg5I<˦cw[gY3ÎtYbJ(AOK//Koc1:aΐ_1rE]C Y јEQκuS;\߉Z^X $} 0b17Y"ua^- "ŔY̯#L/n~A }F*?eN ǹ;!`bN!=I61wĤ+T؅pb {GިxM7Gz8:/k5˶0V;w]%jW\p|5>$̰Z9cC|pyz՞Ji,b͸۾KFA3/ bHi"^JM8^ :^TwU$a9PެOifyƸ4<&,rYݦ~t4W^F FQ BA 5~2D"N0_xm&:ǷQS;R_.<5vR]!u?x&UM_#SYw; b2 ʐy2_VQXsf w(@BEH*60tYaEov&i 8(!זc*MR;{ ͵9mzz"/"*fdy*SZ¯!V错kC Gmٹ+󷟄 kR9̀YbP*I;μa,{48=gH? |Usx! E.?Ȅ= &>_J~_H?\]XZQ}^=t:.p=wX/NbWm$ZxFV%i.xEg] wTfUYޤ/I vxrۈMް8L ¯!.]`Ut@[vR $%%9{1[ D]9o= FG!|Je쪈 U>h:PT%J5md`X" D{K!S-NIy,'~h_+hkš2Pb_.mNIQOؿɻHɡ0;94DUԮ\; g\G-2naϧ˺I0&))n I0 P+y@TEd@7UX(s`| =8?KQ҃>GcB!@`X?G=]bQxK%{<7 7z̛Oտe_Aq*Ja*k*[eP݋Bˤ qխ^F~BuV+GN B>Q#aaR ?I i(^_YElG;҆S9Upj{DJؖo70V .srjaQD|d0llZ.R f` Y;qeyn6yB/S|p JE7_;8nzW|!ǡ4oX;*p _ӲI L#.lý&Ql%|R^q .<3ts$k͊Y>.gLGgJ92].@M-aKԏ/X 4k3Yz*ۦ>V"|R'xD$TkM]H J.N~t}Y0-Z2eEdaiT9]SVaǻH_"~|pŴ َ1ylG|хsyZoJ#V -m^X>ʀe* 1VJȍ柝_7ys@A}E HCQnNw̸9:0¨{`!*H~4^}~ Y@_DQ iX1˜۫ꜷ^ta;{tO3)/ :>x>Y-6,Ǜ%G c]n*8HB@>._=wvpjGNj5oB$4.b{G)G'BXSXtK YD?f;zՌGc\ch,ՙZcX-@X8qOC\>ָ!8m!khIplR(#REz2>MD^mB 8t>PJBhƪ/gې*nۺ gO_j]Lw_Et嶸&y\Fщ܃Waox}^ [wf1p8+W؍.<$!EƎ K#O}pKubI-4mB"&/ C#)pa7@1]J\ycS|?(% I8QgoTTW`5ғ7c3ڀu|c[]EQy@A RzW:6ě,}/Nii$ X5QȈN`waMK6zs9J弆P/ 3}hW~&8tC[ QKdCҼ $ F{%Yߟcgϖw;9!G ԲV_*s |dX:)1 BrܮǢ\cK|ža0 QJpx`Z IB|hOJ45oF:l|<ɷ_qJKr,P}e~P5<=F&rⓧmvKVT:zXdl*`ї|!g@5.z` |+>+ȪBtybv19>wr}=M>εNp#Ob>脬9uUWλޕdÈ_{.UW*yÔtClV+H(;%c6|ʃUx!Yzpcqzs nW)j^DЦAfjkAsfj. ZYR:oam3LwAo :3tJFQT:F0,&AɆ6fuX[߇!j AE|`v}*A s_{v^GeIw|@S cts 3*i9&oh#LfگFRno(yE"E4mV 8ƵWybQD$C9"q7Xv%[]МS͘າ|-~ReIDNilLd1c")~#>Xɤpj2Fw%=3K\63URp bQ>g0+j2Ec]ӑ0#n; У$M[ɟf@| 8uNaJEܨBݾ2vH_S ȀFvP t m<'C<nu_FMʬOq stSq>[ Ix3؜; [xޕ#8!FB+N+ {Ex8DZKa?c$\q[4% ŗŪS17^QIu(TD+7ijԦSL?YPh!UV fY9?5x^hUŧĿψjR)Zw3 `gnKez*hYػ[1UuLJ"WK_enEsGȒEe8Ixh풀S֩u͹6@+:%p,Zr34]5lɏNaƏ"|lR1b:tUlE(ws\|pqymf]i E3ԀBo؉ @#'Z8*ȅs[G+<+u Y&3AY\gQ ~ܡth0LYS~ y HmN$;N A,xlzҾ;x}"tE4i oBjb ;!Nn/C娒?YΠE⻆FWB^뻑NZyksZl؍/ULEQa6 KZ+vjbuVXM2sZÑ@}r+gEt-hˑ7U EV9ۂ+9"JKhq.sa |Mܘ^y,٬msF+S YڌoX!Xi.g~̙Y\r ΑE4~K5GSsMk/GӖjMcevGRJ][zoeA$@^M *_t Ŝ~Q:4LC:!IӸ[i; ݻuz.w!؂Lتڗ 3=kc߈a@5B 6NdU^bш:]ͦc;+9كz)zÕN 7\ʭØF,`KgN s+L`U!7z_OR;g0dhE'6Z>n_ܴ21հ[y8kǶb3oO|oE$v=)JP~]1Zx^rhOAXU߫z'>tjoZV'SEYZ@j<39:O ޏ<:K.qh7)DnM[>NTӝ^r/Wz[mPEjDdrNޑ> VK9%3 u}4iQȗ;L o  zc["3Z<Uט>s4 JហÞ+(<3kpW %LkvWzEK  |Wi،iU56Bֈcq3Ѷpζ_9/%S4l!iL_hP$&cȳMdӧ7s(Pw> 7gwﭜu({E6.0>!\\"9ΞUvG֥p/c9wjV~ +E@ҀRNzL4REc 1,ozu K_}:iFte dCIHF_W%Z,AeP/\A,FSYɼQw[5.9m+:D𳑞++D`0u%&Bh(A+r*l.SFӍʋv_ό۷5$]i#ҟ LYBgR"?z,xAau|݂Fy܉aBBu`NP@x7[ c2|}?HzV]1\vLd1Or :m4s6qT쿚""n x0Xa+y'Va͜;5]N:;S~W(mv3 jCN1^&31 rt?%C}CQWn <$P1) v u}~t7Li".;ղpꮅ:Z֏8#e%V,Kע3H[:GV^ X%1m {+Emz$K*+Ȅnq3o^pukntS_-(ٲW#zᶪ:G0Mqz4=}zfVS#.T٫Co`3 w'#F}(KڇP?PEX5|h6 A CգX&~^_7zn~[7¸.$Y$ŠaMo&#ʂ@p3r]ҰH` KΧ[ 2|Y~HH+nOJxd~xceN'ḱ#}vlFW4ޖB+&HƁ&e1}~Z1%Y('豆^C!c{צZ=8}WγanyaA.ckl|)=+/ 9cE7zÈ^1Zt{9jLҷ>Mqcy7]>WԂsO [ O=;Vn7E [: /Kb3z) xbruq}U ^6ow6XV/) 7\G zd*ghaŷ7Ğp}Ү 8qbcW{ba͍8v_cRl 2Xx9,pS}Ojnla+Sʐ]&Rg"‡N%qDV͂H,7}\'ZiQ߮0\9O^Z7 8q٬>'d¸ d( ^Hu*{%t}*wψb%A_UۋGtJ MAv.P7o+3 G@q:Nc1=l){n dLD7,vY3,h8Xݍy ]9nB#{c0/4$Z%އ7&]2;>8~*#@P~/}1zYۺ?@È|~àbŗh,e_VC}0|=_ރBc׾b Tv`ƛ$%՝5bg5EAkXXu3坯e/_i_-י KRC9zV'* u2ՙ*kYwvcP7kCD/i豐 3I pٸcosӹ'2ord+€Lk9WsbX;BD''2u̖e\\/ү2HHq;O{\Ӿ?d׿ֻ0w"=Vg?IT[jRs;A,} y%XO9!txmVtdn]N%NgQ!4T<=I{b闲 ie:_?8;FBг2Q%(6iY?2* yVSf=|aEBFV LVلN_վz,oB:Ù,a40q5An5&ho!@ø4l<<G=P,dp[N7oq*L;:]*oRW,L X1Q_A:^/PR~H:IK`.spG67fa $/塳ar)z6I%R*]T~dھ A%[\U'J !k Ib<]b90K*GReՓ JWbN_ V:)sƔ_[%5t-~zCIi.J.]l-~~#*cwӆi4K_WäcCռF+|X%erFǴ{49Jr)fH%OOCكP;IF"7i] XXC6>_.蟪XHh7kGv.{i>V_A'MJ VpK$?Y<Kѵ)0ɶ.<-5 H-/6hy$ԝϱGm_qmC'7Pt{2q, rч:ϳ ̏}V)^F1 03ޗȀ":f2"зG 0QFij~s+H8/6ꄝ WdFZNS!az^;b]^eV3s}\Q d7K&%]d*@fy︂iețIy~>q҅CVv. =.,pyf^UJ5RCWfKE`_1W"mSL9ҖbIS{4>]C}.u[(F jQڲ"t1GVC.#`g{3_3ԭdюK*TDn}jOJ5\21V^16rK\‘nmK]: дGuD9Smҥm}DAdG+f3vIDD!J(!#/TůhE_"crMхuIh[)oʫ!oOms}"ez^J:ʙ`sFMsς˟0*KCdZÏ}&Nf"N '10ߖ̸mD5 o{5b&QeŲCDZSMODmx2IGjJ$IlуА$P4n}ؙJ먂DIg{ƛDb/,Gеn;2]­a$71fn7N[ TTY _*zD,W+wTƙױ_X2= mia7g!1%C!\䁑(-ѮJGRsuwGlFQR " OblkʀbVt?pIO`JZX_ݠc~mZrwBE7@=[ͫX) eeCW~/K!#qIn|~*lϧ<`/qSY w{rifgIQx{ѵ;7Ÿ 캾;ZQnfm;]yE˪gIUOFRkl / Gv{_tvr/9Yo͕"~%J0#>:] ,xd1|e*%Mk>mp`L_xwtOa$t/w0>ä7^?+`%~f$G͔7a_v̨om:5Q-+# ͉jEVOU&dϞ+% l%uG̠Tii>] !VtWm~Z^'?k*}RUjA$h!yOdf%UX>=PHPy!a 5\h&Am(m~tu~՞Om^ǭ )/}aEGl݌70%%$7ҤYz>⌎KFEEyBY2s e&)c ]^WH;o_ 6|{O oTX?lwAbdYԻvEy=Ҽ׵5sqG=J~B!-&h}mVg!y#VF٩fRJ8bTr>9&[Jؓn0-O-^o<]Fkn)R::zEkU0O- nԍi+VBh{P,^5Afm_M3wbnpx9#_/WF7!AG'wiMu$-*puw{hŸ$\KGu#RK=q}ﰻJzڕS J0:)9`}mМVXAؠτ<>6;T}8O 3%b+[" M%:lTB :՛!C@q³2=x@;-Xl5q:;V4ԁUν[qVdv<ڼ[4k5GRy3;\<QrE$On. J'D;:h7." }MWVTVLs"7i#sxGmKG.d)ղOET9+|%'V2#Ը_ްaE_l ƒ*)*&J%䅡'Y[n䜘5e)C|<~0~UjϦ=;/;vADY[{״0D0oHpp2  dvMPv<y[$DS,Km3W ڦ֓ގYDw`1U4+Ȧf /۩_;!-4܆XFx߳h7_@AP;1ss2!dFZtj .Hh4ܺG2d'6~+JO8a@K- A,ϫNQ4Nz݋]V#1Gf2.Xo_J"_}w"hu*S1mg 0SM*mO7~E\_@L n 'LafKR0d^Z ŢIc ݮ;,}<\r3`5qYX{(xOhQhv=IJK.pXcbmӆ1p4aWdp~|ofsh>Uo}O Gȹgq^7j`A6q͈h1-o AW~je6RhwX󰪝) µ\"!S$;MUӋ,7[@lNHgnĔµ $b1$yA2 €/D՘?J3KNjz\D(Y0H:#txɖൺq#JOK`~8pfTlOI|1G홺Ԧ8C[7!uD|Ѐ&y×=ƬcWhEUS74\:輕cjY(MRqa| s>9kpiυU;mQT2 => FlG4aLik$&{m~9>N]Y^,3vcr%FJ(Z~lYPk!J^$p!]=dW8}H#QX;ɯjz'vz1f8k]mOO·*Aa*7TJET\x2΂tTNK%QߝM̥Wnwt}"JyFfUk2*p2L8Fv8z|de$:^>>h,)b.[t|EkL aod_=ЋiF,5b)O6W7`6C?`Sxc' Hz1ߺ}dļO3}l9 j~x7n23nZx*Z[f%&ӟ2Tڤ)|(kFAWFݮ ~4-Zdc520;KX:{ i*Q\< %&.':2B d9@$la=I7`W!ctMYio+(k1{P:cO @PlzujJ#0P؉]ViWQv4_'L&'+[Cd#A]LWgWS).-s$tV߯$ !Tu'i# k=4u%E+RGf#!Sz61VsIQ>o7LKZ|D,hDҴJwg @&uQ) t;(R L>X' Ό R$mGExg~_;,UVCh!pCo!Wy1 L>h0q5,B8q^J'ٴfvK֠7cvS vmV-A"@Xυ*`/(b^ :gϻ!Qw5Q`K ˋ~:ĥ/BJL Awe(qjx"t̪!90<mte%|WWB9|=,4w9 Ro?nr!C))G\n2eY=AjZ}lbgEO.X"\&# }cՏˈSltUKM./{lb,mP\&iMmiR(9&@N3S?]2tj..b HuGD7$r+iCE͋a9Kn43zBI621'&*[ y@)hrYtWa% 0tSYXAFO'ۈ t?tϯc-4>9Zl%d:v!St ,' FOhjJ"vIXoXQi3"kDW 5Zoosvϫ^x{|!1`wun"IU޲rpE˹ V JbT"*V*ep09v/2}Ej4_SV51戺;HZUlNh㫿C;Ě)̨%As4iu'^Ć;ھ;[& y]D҆쀱; 3]֕T\ȨnW =󒒌C,mϼi ΞA;H!L| y!G74jPYhKoq|Y`+G}MV;KocE@otRQ! ?zkkX 56iQ\-r>ܸMXdkŒ>}pVwOaAC.Zq}5- 6"33hWȢ'*m;aYQdRxm `թ Xļ=p?U]-Ϧt%lW"j .Dq9&2WǠث =*e"&8cejѱ k(AmchgPh{<ʒ=tEIZ(sE0 ב$`WG hx7HY6PI1,+DL?=bAxk4zr&oY^,R_dܖ=`}y3dKG{zB!6Wb8 K2{|YgpmXೂ L[Hg"mJm]V?h }í2/vWaezV6}c#& FG#h[4*=٭j}Pxf#pfRͫ#rn rw5FX ي{MْzجYdu@2Iq-@wB1WJ1t:e:\ZjT(,^el&5ᛇsJD֡tCI+Np{%E<|;x*,V;1!ZUHh6vg_i`ZEl=/eusaP/aBaW_#ƻMԃu}.*LEPC)|\_iV9L)=":}8HۓS V)آIroCЪK퐷\1B̓LCa{'wbNj)A@ m埐X 9v*avW=ʎv4ΙX@#F~Ri3j ljZ2@KfWc2:.oc qw:vs8㲯%G D :osSI4I.Uʩ3 ;nKN{iz 4 QJR%OOL[''60ႥՑMU+{Kq [ Am#|?+m,*_7({@.Vw,jԖ&sӼl囶JGg3noOc喙72Uی"g.b ~k-]gzֈ>Qែ[شYLuũp8+*KN :T0?2G-~kqvوAy~Wj r@_FBۇ~Q7&ߟ5SL6.81t98OdxHYnǚ5AB1)tL_,oneE';QgA;Z:ߞ^5I^@E=!:DNK:&o1ZW:3wg7`͉]]28TYw4_~u+Di UVM?ꄂsAJM[XW` ."`(z70ے)q.:!  kTf,Yr`[<[c%c)^U^hAۍqY *VRB aXʟ^ 5Nd)i=Nܬ ڦhb=jm7n U\hFx%'ҐvdcInH2z1`Xǰ_X9}9 N7mF]{"nF( 4t ӉnCpO-e&/DcK@ ,NLQw e07jIEAyeX!riUJ|ŮK2_\[ҷkkg+ \:ިϞg cwm=U9Ď9SwG rCEҏ 7 t?=Q}o!BQXn8ˢSF0'$`JX}i 'Qdtc7{I r? >ٖ.jȢ|Dz4]F7O顮a>D7&h>Sn{1us`PFNO 6m+A/wOZ1p2xt2Zu;6*f=FFl| W Z)ȝw/:t?hV5b͓|qo/p?65eNwk:KЂaMGgEAZ*Hdpu"mdL|£{hW}P!>êZb1'NF6Έ0Bo"2״5mضFgYqlwJ-N1S Κodp.7C0ݞ$&U$ϫ)K,LVIa}'.'pK]("w YM>I~lZ挊g' ɖV}')ii^Y\: j`PG )T9;uJi6 3'MSou*~k1Z{܉U 6*JOO&_ p E*KwG 0O:ha ?t.ZØG'-IqA㌫]b< *EäRU6 dZPn2DR mpD5L_-3I%,]ՍqkIi{ :鼴l.43\SdH8w|Hul{F`!c:DLMòpԪ8v-b?Q$Os9ةj$4Ih%+Weg8Ɓb5E 7ȿc`G 5"g0)mZcK4x!0\PLx?׍%N26ꋨU7~-!z<h`R'- uݚ(1tVً-jΤهJ>$Ue#c-uEtRz!Y}_?pܿak։J ?i}mem9V?,0Ri˹# _k4Bjðl<ܸ\V4C JM7S6Z蕔#ڂtHܮU&Nn{>~\ۘHՄv-`ĴE>/k᫃hP%Lp&Z[Zx.H 3WFc4,F} 3_wGbUhO.t٘B6}#bfʈc*:"尾z0p/ir~T~ٶ3Ͼe~#2x2^[T*̹ԇ }T#C U7^q0JCMZ^KU>kP#f#0d=tn+/kx 4Ki8覇gSrDB ܚ&::J zcG0sm<: C782l L:⠑"&w-jO!PMyq%Be}P:ɋiy_){xKW3QhY|^3];^(~1@fߵ4dITU[WI.{Ynʝ=Wp2uH l7 ZƦtr7@Xu腿t3_y͓\c]ވvB>}TԀ1s\q`[+;SdzLY/ *d2BR) f2b6vYty )([ Jgr`뢍cPQ/ \yT彘6CqzI B@){St~E+G@ސ{"A%;Y ޯ`{TDGSlhF/pK)f0 /k23FFCwSfIHٷ @0L8]gIdϾk:;SAP,U{0*`9ql V>{l%%Bc0vF,\sG5gBQd ^8_ Npïfm!2I1}%+SL/$^3zBͲgRh67Զ6Լu]$ZF0 BapN\ޓ#rX[OH)|y' : *z Qɉr;S(IY }9f4^㢍)YzW3 E@a߿{Yk'bLZP0=d^Ň@)[?qPg}GSy muO9m6뱛 :֕Z3z7zKy ]^EEH یHCSZ\C.a?Vo~D+/A@%E4g"+5(8]gbڍ\$M~-uc$4㯹7 4VIAZ٭M֚l:j+eܱGŶ|UTMA8 fa^JVEbl(}`V&':xoEfDž~[z(J6~?*>dT9 TBNC *&[v]~6O"֦y+zY#h NuO&jaEZW<<][ttвC #ѵ>9NΨdMs XU{?^d 8J h61յDBv6/xrc^ݠIdOjcߚHeGW gbţ2~ E }p~T Y .bmRP!D,e103H^ƣF+Vp:ؘH0QDQ?lP 'VBCԋa-D8D j3pP7ThRT [ &: SbgehfXdJȂO=Db4PDSe1Y#FܷgΧV)7u(Z겋 BSע^*:0mraF_ fFh7NVr4.u|YvʗN+L^Y'-QD$&d<%bO4 =wG^ mhAo[KE0hAkKg`>2Qs{`"$Cʓ\qq_fmkDbm6uל+*ȫ.S0P V&jǀX1 q޾=,Ǭ z$0Cr\sٹ[֯IA6?2(ZK̙2.>s7x$q\H)@' X9RuBcb`9}xe)'$Ydq@0QEuU/;| -R62DM4Ɨnd~Xz=+e:a񾴢Rk9tBvjE2ͮ-I g,"OY 8e;@rQ.@gCx|\>͂Gy\o~=Zn<02I&5[H <`x;[!7(HBԑB Pח %V}3m һGVGDH U߰g(TpE _7{MqS$Q%IbY Yt),GRT8c bF/ٝ/ aLS?եF\u2 1Kb&$?8s;%97y@:r Gw ˢgvVR" { Czkkeӌ\3uv4W G(Ӡ p^;2#P",O<}{W)ɗXp%ȵzqg/yFMq` (-/%U# 'J64m`LNKGA;eq}954 Xc*άSQbjbWЯ#˂sIc4JB8Ԭl`\ּ fDhI4"mqO'Wk%H:Ds< a@{h۶!sEǠi)R Ä' L7-DģL@Ù3]B!NBF+2rkVdAmL1gp#;x\mriljsᅩaah5\r1bU޶oHUħW1 S GLrqPL.#XuDZ>jxd`A'Ay <}>UW8s8ԎMx-ۘ J>տdH dXpBӲ;W>VٽV ~w]yɟm,@ٔ,0} }Ϋ"'QJX<2ǣŐ@/iWc*hQ3nP Y۟ugGc󌟸| t(xRJ*({zN#)jNy%+>7.=awqOtG>|j( 2a8cb^Po,[{)U:n*鈷 6< *%.% *$Rݎٲ umjbUׁC5۠9LF1u~br^@dxnjEѺIj́bt/"p WS߲d X @^}@>ڸyjr09.*g½d%Y㝨،,#$@`r0GfCZ4oGOԹ 7AmƵPE zD/ře2N| =bԣB$d.6c”3&sU8. @0f*W8iLp`DS#G}Sц Z^- T0Jl|؛=Ltkuc`z>5 }-ڴoKhB'.mL;j/Fucvee#ul3t>2`3̰4DJdSjEv%s(cM~R< 2C\T\ %kN֎ y-YJ%IUԝցejtc#dׄuàbj;eYWВ$ ۙDs%iǐm:Ӊ\AUU)4NFyR>^h[-jvEG:DC1;"pyAC/*UGgY} \U3'(sиuX >Exu ~4<;$~+XSP%}-hE㤒hM77/5=Lίw3lJ`dB3|Sٌo%k=Z y-?G}o (~mw~s\Ʊf6d zAN xjd-"Bq =frk$V9qq01[°V@/~y2~i-P8?c}~w4Έ"׹ vn{ѕ>2ʕ=Jig^2CE2=mr̾2g-MaX_x?mu_mL,Q+i,rg" HM>hSji_w7VSj 纟R a6vbGCcON,1Wc=B]'sH}dXz뫉4O+Bc<:E" >%F}M> h=Fz#~ g-\~1#:q"9t#Y\OPb!Lo?&Ǎ~=(lK0usH~BjƮF5byzaES+ (A}zL^۱{XDH?5\gXn wS0mQ?@c{I)wcyd=\aDa0'o\hl1IӹyTժE~9c3vfA<9b6-z@O/_c[BC`uu63NjC @בakrF) Y* E`!ԇJj{wt廒„4PCBbҒū^EԒÓ:'l u ((tcP1.S\ڤ2@\~ 뵠QMJkc;Ae֋ tO{9fb 2,VzkS #†bkgXT @,q]\D)+[\F7χ \ydpo&3OCU-%/-_مATɞ:oj*#aIqwiq{-=*ƚ;92~uo_-ϊT5 BMra3Rpl~9$u׊pi n/Q$a+4#kA&[wgtkkxb/},jK=QMlt J~ \Ct՗kG>F;WiYtxu.8ek(Ϗ`V}g5㹧4VGKUPѨ/V4j}'0puͤ9xI*hZi处aU0 :]a3Z)T$tdܤ_>klUݔd)_>{X.7q*;E^RǺ ($}p[M4ebAI`At85нH3㝅u2 9ݞy毢a^p9=,}Q"˿鞇BZ ӈTyJ_:Y؇aEhpf“`x؎?]+'fM7B 4FG~-<-o&&CF%n;i۱XIiP'Uuo|u{|F]7AsU/]p(nA߀ a_9_ !ߨƇC. >"VsL o2!q&F/+m~1ps=[ I!karɕj{󀮍e{O{ Y~̍>rKK>6-xev2 uLMUԕLĉ؏Wmxā%uQGB+EUcro4bta;\zktѦw_\}+`ŧ@q }d'XF M"V(H`"ɂok; ז{΄^Z򬱤AYk/Es.fS?((} 93H 5O̶FܺPJeVGڡœ0zSI:SY{'GXEλqj~xץѠwMq_ hoA>s],ж,0M ?3-ˋѮ.-gK/BH`#iDuΘObXYؽXW"m$7l! g<8++9`̰xFi3}GxMNʰ%u(9W%:bťCE Gn׳6EjküZ7afFdEwR%T-/eY2N~5AoGOnrAueW/ EV*Fґ^'N2_:{6;*` Jw9֠f#8 sflU9nS\+6cŢQRB^EIѨ(9o%Iz8vZ/g)5 4ݱf0nDqkv9^řq>==d5BnV|x 9M1Ury_L3 vu4RTeݯډqƈ9xtWPJSXLuX#{AXe(n[¥ĚZ|Gh&6}DĺĒ%& P;)/F2Tj~~qFDg'c ) :N+Fܽ ,wC3Ye:}5݉x5uy_h`4( wJR*PJ[eGZ۞Kt%Skwp Fi!.&"y/KDEvy!u›/VsgܚΝh ճRAmdY aC3ʖ"E<e-.[#c<cYPŰ }l.V|@gy驼Ë%wbY;ann2%,I\u"i~sjάpZ.smC u~};#tm+-/~!`h΄orÀ.mĎE4y⡲2I4::AHf L#֏["Y2]P5f02MLzT[C ᠜"dƱ*+!86D,/ tx(JMry˹8GuEfDhURp6'Zrbq y*nP\{p=44&'rtZ><Ϯ%+Z~IO8jC/h]m#o2XGLW{ }S/6ۍiY"8K =i}*˝ =F)rQKL'[CBQ ꛼W|H:p󃌡iZUH<@gyrHp$:P|8D7BM4G!MtӖ㮏K%n[;.Q?kEXңQRå.:֫™GSY$xno[0*JJ~'w#كVe&*:ẖ$ MO|ݧb_ek_z6 lmoh׃Y$0}u}2AEWIWtm{z@ҍ["{"/|Ʃ}ܘ{ڃ 3:]6oq:EUBJNmr*OP[n* F (RA9;BęˑEJ 4b~lO&-s ]_u@kF:op-C߂q.c ɠTmpB鿭n{r -7cgؕhuP0m]-ٶ? WB4so`~Mi#;4_:] xѱԛ@ڛcA#/RbeŢ T"kXۉCufsTx^$v^u1W\UFF}4.NA&ٮ_sRp|j}۳x*g<i6~Gu@a4,$>QVO:䪶 aL+|AEFQoK70sބu*ֆcjW-I'Ŝ!~+]#Ԟ͈%f0 ˁD V|S΂(.%hLzhЗ8Tcn$%3H7l|2NIjx(4aԠ t`ؽ-N⢶=!9.ֈOBw`VkR;V/_=mr[h~p'ՃHq^E'kv.=8w*|^ A8zq"94k Jvxga&;˚qJ^`3 ]罬JԐ6lг-g w.>Eb{m$g&ũ<-|g:r:1LSt Xz:[l%0" C2Q3A~1< P1Tt9V$x6\nQtQ8a|uY8aQKQkM-B,V=f{">`غqUu>^r6?Kyyp#9tI ^ 9[wՈd O 0Lc/8`y?O^aSKC-)O t02ʕu8$ܒ?Ǜ pGE:J7n#d; zrow{DKS9 H. _oѼ/׆޸(t8CRFڸZ|FJ#١gґ:I*.G^W6*7< KblbAmq˄xcdc;džG\ A7Q26/K7/QZEC P>-'cOnMr 0[30.xUd%ɺ98*wғǴ˸ _ F6e8B6^ڣ VhSi osRI1Bs^=<(cY !GPE&eacqsBH&OG G 8VcyU>P"І7Fu8֯0wi6|q5"1;osۻ-#Q8[8 "=sItIfJC]18_o I`df(_m>.  u+VK;0u3@gjv:@0X>t^frPV>J:j(+69;s/ uq><_NZCSK ? EY|9o]]߶H:"4|wN(~b΍P JmjJjfwyG>rH_=e֩Gq \h+3nitpf"q|Xg;WXx^> RΗDJa!BzG*Q[FX~ޝohr)/F -pmmW)v#1e1mT:#)9 {18{Ms[p{LEsY7fd"Gٔu<7!p*YFx)j:Jc֖kv)C &\d9+̼NlD?S2J b\VdT0/py#﷛;jDyiL5$'Wo뺊@JKZםIT` id+h/t)˜Μl2(`TؤD|#\$9 _A{u=&efF%(2G' &q,7y%=13Fnڌx>gh*\-*:Pa2̺ 9K³u{8d`GQu,CmlMަ, 2SM)RC#Ʌm=IZq "zirO%l#C]eZ5[&…[_IuߎY44j`'pC3rm /%rdз 80E?_YZu;PS)E;\)F52G"4!-]}pf^ء^BbPv&_{c)F;E | o('vz!68H: `馥 Bq.Ovnl~5u\"Ữ3+ţTf)b^'-9V7arӭЭ ;+:Fl=y Q…J?o/n"l^Dxj@7βͬQm]<] VߜcJިT h:iS} drlN*iWV&Ibe}sՒנv7 e+a A9mnd4!DPSGRS?)rO@Ü^yn7rjGQ7m`bN}ԆIBasMǗ,=4t gMQQƌ+5u'poHc8[@!aYXV%Mk-p5:j;az8d.vsoq񧈖\g^(8 W[ U&ZW2KxLΎ;˄h(|XxQ*VL! }%E>pEݏ"n7_qV>@{ ^gVwo*0RPS LtBTaբ_z\zg:z:V ##Ek9u)|)76'ĉd `EBޮ$넉1U+Tj6 . zB@4)alC"2Vz ?~_]S3NVEx]8cZ[7;SacG|qz8,ӄr.!p8vg1a$ g Eבr"[ >Z`mML%%0Vz9qf+<ʲ r5ѥR|ݐJWDC eOR^o0͜AwcW PATE6L#]QKFݮ]`+JNxP\ȿ+yn&,2INP/MvETPKEU 9 fz\Ec 5NӎYWCJ)u>kDro-h:/ãg;Wu|t-}ӂK[fovNq \+Lw!3{na4fz T$ 09uygW`ˉ8]cQ|IT Ew%JIH,p NBػlA\1z U)fKMSݎVٳg A^it~ ?aNt"6yCO=mnJmg(;AInLJd>By;>#b0a9!ːV i].EoeZyGxzkqnLA) V z8.;h1yǀ&c>ϊ2P}7Gʄң[`&T ! 9Ʌ o?+YΥeCr=,aoqEh Zc,"|*K\켯L}%j`}L+%[APJP&@H;ɯRCJA?67ѓ^;B)w?`ѥC$ .Atl>&ʥ߲3çhvH}[2Y(?t={7SQ۲YNZF|3^9 uSZ"y\~*kW ZtAmWxua#@]YY.v?iI*! V\mNn+.6qY+y8\= h1W3 8TAg.|=a̤b`ѩ@rwu(RidBcRr.KXȡ[tvjN [WUHsAYԡg&)/VFFXSTz1 Qm-Lڒ#vdEAkDhm=[E }3м;J b ܭ[ zZiqqboWtNu U`ADڮk4 \0%ϸ jj$Q)eBK 8-'q"W|ULZ^ջc717 jlGez3vtJ["=$6F;+.ȗS)ʳ+Fq,ŔjH((BGD4'ܺӾWl* ϕBD)$bTp7;s\gm*,>67lwtץEZLB}olDyqmЖa=\%#SD*q{qئNY`F Uc3QrWO `[PX9?{s|EdִdX!s+c %'AHqm\5Q?%SE4''#,(9j%t]"B޳Bd* -ӏM[<ךu0? "Q"ilڰq|_![Hϯ&F f`9}௨D5ƹ{ZQ@B 9k{UW>8ФS#VRIP3kVX~5WESn.ObG 5Y5Aَ̬CT8ZMxQH1|JO-d!7SmN苢"y-ַy(鏵$#+onxC)_(w db B/f"8eScuVJAzb^zHXjx)1sYOGS`uX 6̱r-ݍ}!^7O"Vt\\kn6GZt֋ nd1_|"9'X"[nn?y-z5 1bx"Ѓ- +-8rLL=z?M3MHk:ܵJmTI)Ŭ1ȡt 5ƥa`&{q?AF6prb_Gʰ5dE80`R5RP\?Ջg O-% D0+xt1sǴS$=L|^ "̟* b!,B uedIR1(pn'{=cr yef̗mHۯ1^gR6-zY #ΪXkYpmG/οq+%׼c^dZj\D29YD1MiQh^aSx$RԸy9`uϑϗ e_-f% *|=Pm~&K \ '85i2>,e<wrC@0v5JA9 ؼ!r!Ab&j?3F:%trͭ#:c2+e'uLl~l|y1S kfIB#&%}:jVs QCfV ANt>F(i!W1҄Eqդy&zI\H4X뱂,BRQG# &!'VF<4Eڲ@3PB6S*s-URN+88~+ =R(qt-vu(iR</%%%8Lcu8"퉘v?.o'1g%x)>Oڰ("ڙVbcw*'{+p:h)œdT((I|-"CI} % J@[PlK`A>~\Y('r{wVwO"m\I  MHJXvśOjK7*U>^oD3 QO}w#ΛS J ߳~u\EEz/ꒇė+Iee[Irͮ}Yl{tҨP?R/%ZzIy,N[IBBXJ$b^0gQ,P2[êgՊ2Zml &XpB(bp U` yjYZ`TktHf>3rSYaQkSo a)MQ^m7c3 r$Pַ(֨-OE `!-8g~YbPo#Np[pa&dҙXʵ{ΩZfA4ږKnU(|i}q@?*^=nLt6GOct4ݭͲrEo'X |MXx;gaʳ 1%;֑B S$e=4%GU'Im abiT>!;b H_-EQs; Lg+d 'I.sDw,ccD.cרM[Ny_\?Kh}p?n;}9xN9%Qa~p-QgvTǵdCMmp GD쫣Y!"~mcx6K{5q-X%s5B=>}uj0/2NÀZБ}9/j$Zrɉds<f?5dܩ)7j.utyR rIn][}cW<+ϱ*^z>gIXFֹҼ}" ȞlJS[$b߹1U VʥӶd)zX NYo'qVs$l'|?n@Os8~՚px{ΜP.4:@r![Eիьv/ a }WݶtFoJH4J,/cnG}GPp[~0 v2a>vcx΁io^@iwK{CvNkN"Y#AxvuPIȣ <Ҵ9)({=[|t5q0톕4(UEhbmZ6-YlJI>$ {QJi >e^wiV:!.0' '16u09N=5 ̱R'Vl!Dc kWщp|S8WLTb,,}Fk{FPI,r'kN!{Vl%?-3WmNt*<X/l:%f=S) գjٻZaKRτ"JwbsbkuMAus_vAkXxWu`z ,u&Q-I vNrɌx%f/,P:/xTa;{ Kafs5i;{,aq%0&5*&r 2Vkޑw` )Pwmy[,]mM1\$~7*w-)KXr' NG߬ɅY_t?{$iD dyaϸgv6wPObK\訉gr{Z^Φ~Ll FYā2UyPNԠK83$1jDenjHVX_v;?HJESsx˷i16|8xG kdyUdi]"F)όv{={EGUqs9 Nۑ4)RXͮ+e黑]~k(}ζ9$ -L: W8:@ >l%4eUv{y"U aK4_`yH6ʶMA8^}s(ĐJF$?' _^(+*ƧeH%-гƷHŽ7>HDwHTK|D+dtgG Ow͊lo8Enß6ju>koZu)[LkY$5}l>޹Ÿ́Rra5sGKR&'cy-dl(H"?ç|Tt6Bhk;PQ/ ;u|Ƕ2 /pOk@ 4ٶoC+w*E+4ΰ#tR[8*6<~SOB׾K eubu'> |U7G̋1o'1U,<ECG\MNc\ PW.AN8"%ko CSܓgʾLR{UrN7;%Nlߗʽ:I>Vg̥Pw"tmISȰmMź@~q[SL&hKYLۼY"d\έs|x "7`!lrۏ| :3I!1 d^+VM}YpQu`1gM!ϩ&KXf {>KVb^[eOj g,0xZ?*6ϯ8s/]v]M( эR72i4-<LUj x3{֏үu[1&<)^rn?@ ];xv \VI}SN\Q2F|A¹ͨYFYnW.ɢ?/*}W8c.u9D.-Bʙ@|o&ɑʫg*ߖ0XoMBPO(l<sʤދb٫P"m>w&/D @ە3l眅ҠDd IQ0bAv_ A윃(X솔1a+5b͓M 4SCܽ6۪p7si#}av^2ГZ:taDA17 "_jȍ.ut<0ܸ6LC"$r-j%3H[4 A"҄Dy*]wцU`uO 7}B`֟ niBg"UT=Y1+JLI7Spjf>0‹7RjzҕdBFjVQ+[\I-q /m?61dr2]IVjyf`ݕӊWqخ>Jn(4w Ƙ r3t/ᐯ>wfifdgXN8u PXoKaSľph iY00{i2} TLG=;mGS}tO#PH0؋M*9)_sR2 .dC O@oT/mkrbKҔ_񰜽bva /Dnq0j;M.7p.÷+[kI<<gӛJo !7HyM{Q@WGOOs\dJvQE1`{Aa-;ZYI(!?C1"" `&<9o{[!ĜFح6msv;%eKFJ(˛N@pˢY@͜!=,F;{AqC`Jk`0kF Č|'&E'Fd(. #7Id%UI줞?E(>Zco[$ôQ1^A$*kL-25fx,Cė\cx\sxG]SY}& ܍Pk?Eڅqmjc~M=q$`2ĂӳBdFaR;F5I./Xw:wJڜb5xB]Mپ,(!aƢ ^t]:)hbc94mDڌ$|[&jqܴ|>#?ym4ԓ:p[xnRGsz7=ٌR6+G3J:<Pi0]%v ǧq7{iKɟhDJߌo?|Y)DH7vyi2O{ 0odlLRYV'qc7,OO;0Jȳ~jbOv QVU \3Ep㨒籓߇Q֙Wney;XʖOAþ }IJĦAuѐ̋c(烏J}`e~$KJ@ t^?L0hTpۥnW3iSg<-=FimBJRƘЅ.!3Yxf?*CgvwߖMX~'}c~,wDe]YqHiiUivfZ %=bl],~ X~Ë~-H貝Z g>KL-N™!YKJum/r\pg͹(24gНa dM6F@5tc.S: O*U.Ua<B/ENbhڨK1e Q#@JV `i߅l$.&FYM7\#䤳A;oe){G}߼b.giIJJ7b^v6GD>27cCkj4S`Q[֘(#e@ ݎ>5'rtY.<#ffmj]8dB4Pյd_t5AxV/{AOz~F7y\[0h2؝kRmj}ڄe dNvArynrZ0ƷiSOYnh18Ы MgPž>KKҊ4\k e/y(ˎ `2a(A~]=|>aFt&;Y_.حmPlFs f2׻&dY[p쀉q85o X(cRnEv_eVM. 7HW8۔ #khbC.)8m#Ekwo:D[nQb$ OfTJI$RbZf'i8t,j.]U(sѪI'%TIk7L}e E QU$w{wbdu0 /3~4M~>m:X $&)-eNb8PC,a e0Xy"mn!B|-(NXWy.r\fIpҴ#txy:?J:Dw( P 9Q2rsܵE1jc>+Eڽ28Z;+4gjɶw6Bְ{ckr:'1ܝ1\I yyatk&+T3N& W=C4tcIH ;}GI]!˜R 2:ZtYXs }*iEd 3n}796>_]aLgٖ7x5 D3?FdO${wn_#HwElv+P c-+MInf+8^`ej EGOO6bk[Mu2B~;UcZ TY g=(w+djĸl$@; ~9,r r =0;6n엿Rx5`Wvr&Yi~t 4d7};q)rX4#Q_d͌EEŃH^FKSSFb~4k*kmsНYVr_(&k?x?BF"Dv~Cu(a_[?,"HN!Rk_:wn8mK{"ݳ(Ag/r`"xLZi7ci3WoCc ?+usՆui$ <4H!b9ۜwV|HOdo-fv*_0+n~gn^Tԙ7*Qeڿ&74C?]FmhsZu4ϿXSByO͞ ;0Qknf]v#zjW[CMq242e?˅Lݖ6Ҝ1 =  `yf/4FR]䷻{IB M""?"VC_X'Bd;_ebc'Я<%*٠Mɾ{E)9?v wl˜qh9p'ɛ=*|Dx $ L #Ma*hѹgodrD6^q'2qԱ鈌6Ht.1 "I}#gFR0GGw+fwOO9Z Wb`zRK+I ßJZȳ4dYn8hRZDZBa?|B*a~=@asϐwf:t5xrhY N8w1.^AݞFc Wǻ<}3qri W-_,퇾dp?l7u>ZGN\]f{RRjB&`ˢ |h:VgM2Uoz5]nLQ4F, ̨t. Qosx1 -<3vír}(ȭ8 NTFk4JIv`Be^-K>yt!kcoB, s5Q c&ᬎn0M~!y":G$D2XE%U US>AY3@{vQeekrdX)=oJ3D0]Aҗ(ӌ!>ɬ4O\"I<e?sؓe}SXJ!UD'Yɳ~_'w{'lg-~@ al5@)DD͇v)E ) >N;i`"VK+i8/b5KLe_S=u?}ɚ@qĬq3 %vf;W٘]*)0:V&|[cJC91Cn9ab`HIܚnpEkm*D=9~VO0J'z)}\kR8xJUmOӵ&%; e|S#Tf"<8w)I\J{VjLL͕!7P `PPGWF;Srjѯh7J&Q9$K$ԄP쨜GU4ܑh$, u6Ŀ2 ÉlEX̊Ί {.6G)cKWEĚ&KU$U P(7YKTrȌO]N BBdBGqC%У"Wh }C@5yPKO7}"fa鎥,Uő7~ܩ#R4~WXŠbCm8OiVV`rnH`CH|׸A|- űT\c<y1GE>{,Dê=Za/2 ~mxS)A6\B%EZɎkl5+NY/Ӛ"Ө.ĕ5=/ߊ x/wO޿r#&!J#GuʧN^v@ !5>ӉAʤ=W]&ΣpN!Q}qI#E`^Ҁk#XXBvFb=VA>+ )}WyT ۡ9$Â?/P] E]E֤6.(l7KPHy*ߤfRLۅW+O*ɂ [;8}*;v*d;Koӆ:LiTǭ9! ~Bk&vT'O zZDdAA  kk"D& rI|?(Vu0}idP9V~ f'>̹6zKRBAel('k?cWߡ(UxL1rN(ty{jU|GC=:n9s [mB ~L&˞qFT-ܚEn 'nMHMH]-:I|*1+K(k j~̷='9 )?"PCH"noIk XXwٰ)ŕ%sNGڌx< x%&9oDӥbդeyOcHk}Axn470ցQ~C ?7 ųv^4aJ j쏡.w CS<.98 olu򿏑hfMV>3"oN[R@~E NͰZ]bQ>e{?.+JLR)}akU<ګTOAVݛM>$-|@UY56qiR$2HI9p~'2a|NT_}+@k_sy nS{m/WC)fEVBZe_(Z4徟A(B(_9&YېQ:49 7I8?Lډot&z,}u1}tiZ1hC !lUf[eђNN7$0&ĉ`0\%ZMGhm3H fy9q8+ủwt2~GdpȻG*t,!YO-#!G ,Ú$gр̝t2岛 T;9NR>UPt46Yi?OflHY`YnfƭT܁uZ/I&> gp%3)ƥ_,5phO9d[ |Gd$M5,'Ů.旫53`$iH%r [nè}]|A>o]3<73OkZ[&.0щ#M2}W!1t:2)wdۯ95tAXf?5trLy=#25)#f׍Թ* [n{\^ɠBl .~T=i(s]Mt^,):JA^"q8Ec;< 8 .UQ#7fl^6g&W#t`aCo)la{."Z9HJq4ӴK4Ҩy4^tH #O֖}w#nLcDЙNy]Bb4E䑶> o$|c ]GdIvgQ-͋߅mTwt iBtZE".kgMWG9ž^毎i/;T1FUi Jeػ8 M&@KNHI >VU_G!'iw bE'}c a4-͆1eǔ{|EDSR"䟾y DҪkKPKusvI:z9ʞ`\'Uzh)C fy{JF ۋ6fr).;>}8C.yKNR^#bkJcpEInGS ЯB[Ymb"c4]/yAx,=[<,iZU8^bi2cЭIN,2[ΘBIL@T]?UaUɯ2w!POҖ.`5H8&y ĨRQE3ZյKb ݎzIA To4Jc:>2 4 nƝ D/zmAٟ~U&p:|bE t)^ok}b-B/p-y==+(蹺P3zEiG> ~i41;?dW9s+}A̞'A;.e"&gN3cXB0qE wcj58 C+yUh݇ 5쐲ڊ@טK8O e1<0L;j`zZz@Ag5Dm'St%&85&?DA.8 l߿$f=`-jV,R'/nVvis@aWҔL) ة NsZqxm#;v3!ΟBL7n9@/M\];3be%'-x;> df.]*"~ۑ991BCf16u,)%C,_F_GXq> Ցxl9_[ejLȊa|~r|qߞ**;M27sEJKnxHmfޒb=t`L.vC2`'>K[HRqw?[gB&_2=% -yV)O%{mJp\&tu M|/ҷ( vq@bfQ-©26]ISoHPftŝ؁p;k@H mzz455,@fD GVXKeA-ՀNQO@"񤧁>(c߫z^. mtr$ΈCf|b!OLWۂU-ϮUZ(N-ζ E6܃!oh뗾|# m\pmI&@TR[לt G)!٬/~%Rܰ߸WrAA+&mу<qPy2L(&q1$ڤ40j?|X1E$M|䷀5YB^gTt50v/Iä[-/.g~p UN֑̂:nRRub.2G+#jXqV<܅, ވ;cSe4 /PYnIENU/娾Tۚ'E@%qz5NGw -g-+K`5vfrs1J\ScCHԴ('03.tSv wmVL (,E}ބ K[2-éíys cO peӇRAm8u v =.c^L2.ǁeLVR `2Mjnc&Mͬ<-9WF00Ge(Fr+mh/> lI,7 ~u-F +aGI34Qsj+C[+l .h+hʘG>¯!&P0*_&pIP"h?>]dP1\q1zπ%j7BBM,wGrG>KPgς190f&ć ~6Dr77~7I&-qCioQ.SVD*J=nuG@G١e|^TUE[|AQk*ykhupoꅗ.9EcS_O>{w?Osq-\R~a{pIkr ~_(^2-{K:c?NE FKH]9b"1pRQq0z*m#x+i*qcɢ\Am̐zn&W-z"B6uiU ax1sL- q*q:PNWfI#6`e>7_*|^}#g)`ֈX@%#KNSl?Su-Er;W]`O[5):]Lx@F)rZ<(rsBui^i@$B5aѩ`]mᦒFcZ {I;!j@|Ẅ́tQԴB?1B<-6W4|h@bb Eɲߋ`.5Ewըo)pfCr)0aE1wnB;tޔ/0"yv8 yM`lRigW\ ?Ln/'up%QL*ZYcMA~UL)X|q>@K|,Գ=Bw Eɲ2uo:D(*m4%LufW/;\` mg]G:Ģ]V\A.m 5֤.6[ ό P|1_`mNz#SHJG }=6N7&peE-DriciɌyݏ PQ~?SCF%l=w05[q(V =+? C- LQɄ836]=!܇GBP@}T=1ژ \@ʓR7P$| [IѲ"8 CS KKx<)ʸ"W .1VC>MDku xm(5 Ԕ S6RkJ?$H oQ||ԺT ,gN;L9@m>2s E䪦5.Z اmt \43pqʹvs޹`MzKloT? ~0s5-IY6lm$rngt:C[eމ# {y?ꄮ\8#\}X7L1u888fyJt4kSt&=lRI.}##䃶fS|/RLKTf`F\۶$ݐp8AIfSC= ;Qh⓯8Zp){>E#HsX|LY3:k Ӥ7)R NͶ>※JWIbj*]ͼh͚#PNQF%uܾk?R CJDA|vV1E{ H7wl zk:hT}Ky.!ǘuf{abWCh{"NQt ˅6Գŕ$>B=$큽p#s**g=/q~ #[Ly/Ol^vP f}2}ҬZ;}+B9Tc@s)& >BjZN!f{ <e>/jŮ0DKKs!h>I-PX"ٙX'{sZ^4x uCRA,t(hdbWjDWԙwj1쯣ZCz!NQ]h۝BV eDAr\CE\ !yّpGBnde~j: ^r"QB9Oliݼd0;`ZizbʅICFPP,x E\ Ϊ"ʡ ղC~Y0@M?&S\몪n$gS U- 9^=G҇ZlyxDF; IT,3*]mnpy^`,zx!{%3zvj y}k-1AA*#p`ᝐ[+q5Eb1ui79 c5YcjMmL#e. #J/K Ds#>a1 kP S^ </mޝ4nj|0K;!GgV?G^nPtaYA,+!R?ZX4Ӓ57P/;h8SdK ^VgH/kʜnD:sn{\Ašڢ;[b>oZرnZ[OkHVڌ8FgO'q'P%9^W7W4/@{Zm @~yvZB#8nӜ`Wb.DX}@t$oaͥ9@-cnFy.Pc/?(v@2wpn/] f]T+z;?R*bMbc:8Â2/(}pPrkݗ!}W xoYUlZ{6P*Mb5sDbqo,]80>*$Oz4lQ1TPO:2\2 X(e}X49ʓ<օ(UR5&&p I9VNjHZQycKNC5#dh%LV-\y')/P-6 fR< bYU[Rwk/H׏\nB6zG=hP.+s:q0ޯF*;$N!T¯Q=BФё-L_ZRu9E1%3-0 dcddHܬaв 'ycv \f^J3 2In/Q$lZ !tmP"Mm\WwSZ+$-a9*Qb sAiBsotw!tI{9y.][d=|{w׬X{'6'npyx_rG@-:lEP^I0a#*.x45[?q~ 7{4ҟ7}8 9Eu); jܣɓJLc?Hܓ=zhX'y&W&ggBzֵWlÊ5ފy2']M&+'{7@rq{YYBdv&BXTn꫆O DJ֦. s[A+:Ά ]T%+;je3K(mf&!V}]3  mvU6a?~:!)I/+7ݘRse 10_xB:1*l@(T1g:OpN7x ؒbOSXr % 3T{pki,?%jc:c+Q~U{ KkXX(`_ @>5q Qr}}mȎX˾Hu ",SSBY-wE""4i7N_l%俺# ro`iH 1wJzK>EEǑ7] _̨"2/T>J8ʤOy,me[mfod~dYDBouɄ(O97]3ғRм[qyWGfց @8/U`}rJH~W6@D/~. 3؎P'n쎍m*<6U=GW, l CҰ.2-mY c'ӕ䏌O}fے!rqV18(簰%{^ O"yy.<]`$"u< K$B!j $t+^c@~>"`P*@s^66h5(]S9`~^&x(3Na\bJc-A7V@Hlcd$<\i9yp(bso䋷srJ#~+TuFKiU֢hWڣ\\ Bt1>Ո1RE)ԡl=⨩ [ ĪBΌqI^-m=哔Wzm9 wFؠu a|uX2B&pm)˓q?~l6 EΐF ,3hN"` jLjY~acrQ # RD& 5~)yFFM-g^}.ٲiu3bV A~ۂ* AdMB~K*XeKUo/Y:ZSG=GF3jT&#D\7H$#TQ|b 2E8[T`wƳ0iop\-\*n&"P>ls؃!dtFz~Ū̲l%,'tbݹZw'DR|>7V)0C[M Ts9Awāv;p/q׌q~$v~i_ہJ M6C(ԧ I'*)68$>1--#kmD{11x?Gˆ4uY#8$zc$T&%X@$T689-#sŁ(ͪ285Z8K¿%)v1Ń>ǜd#P X2&؄)T-ۺ(b=e}&yi 3kob I<~Onp7>4 >ngٿFqkL}Feq|eaU&` tSQe5A5(}80^_G2a]4v8֎$mi E?Tsji  y%&kT[KK`)7-pP1<#Aj,^t:%m~p+dt8o(&K/$#M[ U]D?P9ؼȢPGd M֑۟QHw Fh óX0D~ao 1Gݿ9g4 f،+!Řp6 &7)ȠQh1]m&08=nz|~ L {D#F]ylw>nzn?OvDUִH9U/R~%A CÜRN@ԍ(;O DOi654?yΓ[.j k;HY?%]j!n0pMvi$}abvA6/)gpU L-RAy.N㒡l-RXV}Ș$"b 5R1ӆc8F,utGd4;E/#;}.˗!sI&STЭ<(BtM5pO'`JybЎF Ҵ69'mPm6P*sg( {TT\TYv#-w v}.G:&%1@݃@dnڐºҳXTv@&og˰O_<\9]Y2(1q cZזK´ovRQkX Xh# ʹ5`Q[Q+ }=$r-ެ!8~QȡJ3y NJ)4wl]^YY&/;,YuinL4)b\0D_LR}78́M{9߫{Q¼;7lӟkW6q镼A?/.LuYMmM[ڈL]'~cϨ$=2C<`6сlDU+6;ʲMws/dlzvqyDC)s6 (ܤm5t1dd6CƬS:M>3&O{<<6x@$T߷&@L*x%5_W~!nx4 q]"™v+V{e+&ЙX WV|X;l$/)$I=;Ph F.1('hQ-Îl ĸl.\coQbp/nx)ԸF$zD;q+"Qmcɏ~U` J[ӄ0o!PSAy)l/48Wƒ vе&6$|" _ݍm7!+?/"݋/ tDj\dOshtr\OF er#8+>?70atqXQBk` 0{q^zCs-qUW $C k֭4g4b}(,Si ~֥ZV>!MQr`V|u}\Hw Ũ4?Ôg u#W<Kϕe$}!,p;oVGFBuj5n|sY)5spMLhAVd 8͆^y! ۫UM'Aed|竨_КdgjB4{SF^0¾I>H&K&zk\X ,SOWU1Xf?ŏ& j_`WSm6O{d|%?_u9/|,eϞA0X)g׌+T lPf$Hߵ\u\8'Pi'VHf"Xa6mK$42Ax>ٻ(jLw+zv׿Ng[D_4}*%ֺ_.3F'DY6:zԋ.5鯥˖;p^uK:*@ n<|vOs H_Q=g6E=8AeczTq؅#' DZc w{x2e&Imj ΨQHЙ-Pkw(p#P_ eӿO^?e?ゝjAES6VRv'!_x6t׭ןu#y<VckyXA@>$)k"au֢ :<\"UYxt'0.iy~ԒЭ[F8oBz>ӏ;` rcK7~?)(~gE5Qg vK?`,r)؉PR)m;U3 ŗA_{ I?%'BL3^pa@Z5do Sz"1-**jb`w S3xۧ`'-@~k=;4)C뀽/\ۺ@xt4@S0fi 3N?W!, ?,HѹOgzEs$F"}|};L곍VP174f!.kW >CFS|W~g:5X*Ἷ\9@&Aҗj"y$j'ny d=FעM܎rqF%|8s"jPAlnT^i`)a&]>~qFOXXxFVҳ=5`^&qi bҜ K` L@"QH &O&8=>L`RnFh,ܘ-(?& FݯӤ$4Rk^ ĸC\9O>oIIO.PaE.s&w>^hkL_eƫj+yqD ފ}k {\+/lSmgbDCK 72ffPA :M8` P"A;,͊/k9UYufRӽ BϮD:J2:Ɩ4(36mUv)%J:Nk}\/mWHK58i҂B@d.fŤsDcTX~|I}G˴ɲN*+So/UV9ܾ=o}_.ZDžU0!7ӦE[^ w$bT27 A B WxM:kDTDkJL^Ԯhg9t/R4iM42ʓ XSXrnGMe!6ASSu,o:-Y@Nqp  nMc[hza]W%ÏFrG4piEl:`,c@ %gT л8OPn] 6bL&|QP^.^ )u['QT7pJHc<2~5R0R=(d>o-yb ?OCOi'Cо dɏczOtA znl3<)$N[_:6veYD, ~M*_$L$X9 [2μ~Q=;Y N`rVIh駖_OdϫHF}8NǏ)Ɲ,.Û3ûk`w 9ѠzZL)ea3Ej>.&.DT8P QP$ơʌq H;0LqyNӱ8 Q7GMwH43qQ+;8n+30O\Y ?B; ZcB#oU&>20&! _rZK2^l1ߒRu2/~q_r:T_'&-f=myy }lsO{iZ[˵°{TeZGUyِ`t0I~5~o Yl7%4ZbFɦyjޙv():+c^G4q2;zP+-ׁگB#o7({N9؆h?µ02bԊtST? X[ѣ )_숪Dp+uGCjQ8?IK*0Rk0OWY!Mnȼ"0֌'OЁDGUC Wjиg-uǽ Ԅ1ؐ[Y>sK5V;85XeF!qTV7::t x]8c}v]B{ <4#7u$qfԑ⽌URAmQAn.\G,T'g2Ut{eu?/ 8%8G.=Rz7:i qk,AHϭw(r_`~yA[zn]I }tyK+|#U5' D|M(qooIB];{掟|{J(F(onwϕRJL [5,,-TwRJi!ԍbNrŃ8i)Q$51>+ pdvcBBC]oﲏnJA~.?FVLتlX{B>ӹDElw}3iČ /3FPV+Y:򀘔˝ 1au0cu(Ei)DS+cp 7` ++Tr> krq4.8V e#`gLTۘv{},o&`*8(K5!SΣmVpşI|z_}UZ\0kH"yf!L5Tm?0`j [h"BcZM71#sʳ7 ]([$ʛ)pM>+xXПOf[c2Sict5r$6q[e1tTZo[ik&}. ,NYV&l0}`e bwQ嫮 ~8xwlOnțifX{yp2 (lGqj=$ ԪPrfŸMW?+(jjTcE,23%3:ZQ&6ЪP@*R^_:v?N)re18hwGJ/uynwjD{/W#v߃\1Ob DrϙL䵵2STAԪT\!pϣ b/W1:'fd{1唬JOz!HψE5L"w~!{Ĕ 'G"DU݅? KH37 3c 8],r:|-MkLNdBE9ԮB*KM FCKk9"A{,Ş{v"ޣרRƲ7f&~F\'yXx2<&PE}Mt aɻc@ CrKڶUH5|-SъiGg k2U1#֙1CC[7~emW^j9b7;|KVR1W t0w[%\ l`slR.vL285˽MFi\8.{ўa; -gH6I^5OT[yDA]")֩[cFItǖ>7F+ac\p@[9& ;!a+)ҸQ@ibEtgJ !x #FY$S61` W{/fO.nyFbb8.Ǚ 0Wͣ-i C!14  ɢ=6];ja(MKo '[J Jhm#;E lCOs\+rM^ia|0kD_ 7l哉t8/p7V-^peP(51Kހ\F;Y l(|0tP$ M LZdž[!jq[p%B[Tsn  +nX#8mO)}ai+'.azjk++ZhaNHhܸ)҈FL yA$D.Yq- k`w0OOSc_AIW:vῈG}d"< s=O\^!˵|U<`vjs)efrו]">,EE|2C 4m_m/c] +"xoG9D+rk|c–(,a%JKuA!~1zCȄih#{:SEWdDOC~4Z>R[{JvoT؃"Q3_ S[nÍ5CX@*hsяB`8,R$ce?/nJC"n%VjB[?%'E,-@2Yh#dRZ; Ua{;^J ϰl[.ۊ6qφ:gxo_d?tR۪qq.%} *&6 _3!kTO0yu8[DKE5BOrAA.+iy{_0wyn`m|p94t0sX)tZLс%}iƑ~p{q)&FdžaNɻ,8KZG!5ex՗R]ONs>I~BX F>/j2v0?M}[F*>scƂl-NEL>Wu}!/TTZf8]D`m=AY%*$5. _`9Q31D<3E ܬ6KPrv<5HLnUubō(µ>nuyҔ[? (SI(' 7tcsngqגaGO3al`'tP%3Z ".-q&$8=o6lI5RJ:=tr :'xN9AHՆnT0;y!}UhuamDtuJԹ F'O8q^Kݏe^k XCNya [BNo_B' K~iy=z-"SGG$ةg!1 2D%L3bJdpk5Z1ͅB3Zw™ٗ]X!8~phEd^n'Cj9T#aZLaT0K_ oƬ@nm91ȸ|s |y\CHypIM됏HJ/f "|e$jl)Fe;b%پ6s񩃚+ԥ@ǜt+"i!}+ФYnNK"93$J QM gbLJH>V>th:n1TcL~2QmnM/XY8{;o#~9&@6OH#diQ dVn?܃H[@r͗ mM]0Z:ɻwjn=oA3CW{يz-ќ>tF i%Ik|I3$BnKӱN]!W}X<+̒,.?P "vl+OQ[Gk)U I~Oੵ۱NW)5VDy eܣ1 5H EVGpb$/`2iGPy\'httUUO@O$n`өmbdթQv[΃?Sb-|C.'1Q/ .&Ս:;oxr ~qzeHQ.Lo1 M9n[~EMSI&+=MU`pBGDR]y⦦ܓM cK+f8HV.പ#gG s@LqVW&BWqcIj-w}{t`r2Yclc?k$}µG$ĊZ;ӯՆAΞ|- Iȳ~|m>ti(-)pkedlQ' .9!'XJo`{" ؒү/8*+[H8]Q xz#7ټwHJU)vJ%ukY[|0 b{yS@.Y=9UF ;ߓFc6!C(jlk޴ eF]FXGظЃF)q_{]ԀO3ZŸe[P q7!9u 6<:gaEG[Le*x鬖^0V~.."/g?WQE]>jZ}3!ђr)B+COwab7LH7)]QS_دA×DAĤ"^itYe8wyAZǧϘ,Io[D}4uFSʑ lhmxaäd/pN2cb1mž<g6$?zs2` mv򣀕O3*u#` 䙋*H8*VeKC]Ki3*ֳOir"\܈u*-˪)0!d evp>wn;>@͡iK .Go I-7ۗ #ojZD[2,ݖanқ I#aυxPo_ ˰N/uޒl3]D4i3f:^OY!ô/-%0SYwr:P`Y-d)w~.)nfghmd+u&)a3%qsNg]l`oa&lZQWgP<!:%1lZ,Oﶴc+r_ F:{i'XΞYqO|ʟ@˸<.m M`"qIߘoU2/ʭ-ߗl ձ+ lv@&%2XN"'uT蘿5nTCt$&ª*NMWy ?:]bْ\[2lcx"d ρK'r,⅐8A)u`)@`5:"g6CpiUD\ Գ5Hy?LLXCU=Ӡ3\0}zd\Ó:.8AUx|fނAnoeΕ)WV R#ɕ_F̃@#nY!9\4/A,;X)&OaϗILlh=?Kvu*y~ qFWk ̤us~ w'c1>&χyUb*UC޳_MzrGu<0E lyįew͉U?+;dftcn]Ղَ܎ub{YPWߣÔlvw."7"m4a+%{U~|g7R-nί3C,kʻAQ6aCd8@w`on,vNQ .!.)"D&nC]$]X[).qyv؂#N{2Dx,j bMіa7e] }?s(Y'Nq9X4FX=堒S Lv> q%^"b)E\ŒBr3ireo}ʸB԰yYKOb yӈG;Dr}S8^0_η쉋L *c\[שZ$cP¹AKu$v5ע T :Ӱ~̦Gs1rCɋFO 5M]`EmiZ,(ͪX-e?aoD37x`/{)*aAI8%37V*6:V% ğmyI3@` ð,DF}󰒤_R!/\E JiEdN])H5^k*?:傡cʗڦ-8׋>$#ixOU6WWr8&W֗rF+~\ax:^v6nCS%̄PZw3U {Y]|it2NjHg1y,.<S,BTitԳi3f$ $,F0Ə'ԹKzX͒`:b=@}C$pQ&$1Z|$贍e5m)Bpac ӠTL*nbIu[@XEr.bqf2YyO풹0PEo%~hob=io E6ߴsq$m}-NOB%4TZ5A݌;]2!UvtgpH͹xs0 ؃.xO{