}T΍ǕWzّ@/,B#(63:h \#Dw`ySKhJD_NӜ~N`0W՗iRAiizg=fnFxO"fE(_5ӗ11w:%+ ^-_&^K*fEFo_-F slFa H0݊Ќgٰ>; d3JYT4 *}+x3O3BX!B"aPG}ݫ $:y`?a`,  LꯅIvVa]%LvI3z?3Hݝ%,6#}|!jQI%"Mzμ[tv WRAhG | _[Y;=#`Gυ ꙦB~_u$8'p|PZ?XQ܀C~.q9Fj(?*6Mk8MJ yhYypzڥ`%2Bad[y <8ܺmԠIYǫ,>yE rl] jM"ز%?X%l PRף@H$MXok-7S"nx^d#L NŒm6 )\߹#OZPg۸nK>>Hd|W:l$ϟ wZea[ fp--W#mLa{½V*bʊ\=樅KX:69Cy#F mPͷ l^ 4bOgP:iB!hbvYWH%,Zy)ޣb Kj͢᫢8 W&QpM1UmP`LpRwj:%Us=<Fb+`~)+cmA ʙUك <<+<# ;axH9ϒorqkz[ ^Sh&E\@X`9ƕ ,kܽSmlnG@b8 鳍!5JYp'_r_$\.#ooOCݬB $t$J)n_DTS?%2R#dJ] q)T(:( 1loOd)_ʦ(>h݃VA®郜AVQ*ζ2ǻCYŖ {Nt*O>KSʱcVnǔ\ rkSJgi6: !7#PTڵpom",5f(-s7y#tLik5OL i "u/Gk=Q&g„ 5P_=p6}|AWv0.R]= 6*b OD{phDÆ(_+ًYgZpKG.k^; erlpjW9hį AH6Y!^$re!U w}y7Z00̳J{XGA '*-֞V;Kxx@UtPVNLM$DM~ fB_Uc3 v2dC*Pe-k|rV^!^ҪRxaDs4@&B D8sR-n6BufV?=4? S2} >_C*fj>^SyéPUߘ@z_mĨYX.y^4|@G Tzg%6 ԸsG{.]1GԣIk>{C W Fx3BL85Wv W)|˿2 0":kp$3U9b cr3)fY.BKZC4ÜkVňLǚstđ{ )WE6k3|zx7܅@aM@Q>*i7 vFzQ#jU{JdY63RW!9 c;p?-çCͳ]w|4뱨mR4Koi~(;<)))v#h|] /x?#;vy6"kD4\U/zdM/S+E N(nTf}#p,BLK_eC6VB`Zࣘy从Ov=_1MUOibD !,I+6+TB`$"G?G =sBA^+#;B9)HZuOOP9=vVaIk%?ްǵ jqOhRιP0x jSn- ăy,w`t(HȲݖO|« z5yjazZm(0CSQڞZU1F +_+3B &p'似k[%9ǚM紊58]e:xL68$=5w9˛>z9ͨZ:`WyHZ-S/UạBG=KmZ3[P6*6?hZd6c4͈f׷@⊥DOȇS씆T:!շyvC ҁp|PR57$*Wq-]1Ȝ@XONvT J.?dXO`G>> zWpugEzINN)L=K2tJd>S-JWg~8f&$Q+z IX>yDZ#u}Rlfh2!0a߆1k% (j^} L 4(G$Nj9,S>g4<Ȣ]˭R-)n J5V}Jf' 3mi܅ qfKzA/eZu<"=ۿoV|xaʘ$VN h|ͥg;sლ }׊:NEݻQ5){<)kB0o l@ʧw(3OcɳQjr@*9M } K$ oNJS$6&k`|,XGR`}nEhț2(p)ͤ٨DA}8NsD $Pm.BŠ}B^|@yMgEOG6S'9$OJWL|Cv 4YP9@󶼐W2=*K7/JX=C5o2 yоsX\ |X ~g 9@0[ G(w3xlJf9ѫUm˭9k\sXf{ѢJ? r͔Su<_@wj8a[0 50[i J?'-4.%n{nv3C9_P\od_XN7BXPĆ}FDcaY 5}xTMKIq[];\+Qΰg:Ucɕ%bʰO-Sy7 ~}qȃ˞ ъ`MeVw|RcA]D2;s?v>q"WFLfdxrN 1*pּ}k=Dl;nGPOCQ71Sp1,ɛpBu+/ZabX~g/sγe;=W׆2읕(|5eb`M.)Gw,U'+Kg s(¤1.]hH] i N RRgIC>̇g $hd~Y3hx_bLd`1zN_ѻnm>ìe{"}s}ͅZĚKB~uvTs8}2)hD SIIV 4"5t逼k 8vU?5 KܧB̏Nc.+ 5Z+!y7#J/ (W1nv8.T h#:Eemi&QeRcK!?AnBؔP^;oWZ$~'?ʓUG-| =2܎߷>v88rܓ6|&xQu:-XXшl|{FzQ;85l&{"X\sq}PSfǩ"X$$5vH'EU5*jQnܓhVϬ/r #=8gG\xE/ռ̒ooUCඒwzLd[;Vkm4"RfzA⑇ptI.6l~3 D$0WNnkj7KjZϘ.|;i'8.Dn l+\ق 05,;Uց`zbm;v^xdrӈs@ba%ZxMdpԞo;}xFTrzDEgg҈.I ZN>X=:R^Ǽ0Ɂe]*ZR~Or)tY*f`qqQƉy^ {&ujh@-:ա`h ŋc8a 22$_aB*'Px{8-Sl"ABf*>s #X)}(N:VZlS U*`M*s BdCbnf| Pĉ>kKqQ` ,K?J/ЎY\hǍtZY/m紁8X3̨>EhtJݵܦ* l jnѭR^+9(`9ًOZr֓/Y|KjoEQyW eep-JdZe?v@ ^H.dNvðe–G/FQ%ltzLdЧ $ުZ?6f؂ a^D-jI"oE8hji_e U#P!0?3Cn4,Kz69Ss%r5s͏+fC9doBYi0// Clear errors to avoid confusion $this->setError(''); // Make sure we are __not__ connected if ($this->connected()) { // Already connected, generate error $this->setError('Already connected to a server'); return false; } if (empty($port)) { $port = self::DEFAULT_SMTP_PORT; } // Connect to the SMTP server $this->edebug( "Connection: opening to $host:$port, timeout=$timeout, options=".var_export($options, true), self::DEBUG_CONNECTION ); $errno = 0; $errstr = ''; if ($streamok) { $socket_context = stream_context_create($options); //Suppress errors; connection failures are handled at a higher level $this->smtp_conn = @stream_socket_client( $host . ":" . $port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context ); } else { //Fall back to fsockopen which should work in more places, but is missing some features $this->edebug( "Connection: stream_socket_client not available, falling back to fsockopen", self::DEBUG_CONNECTION ); $this->smtp_conn = fsockopen( $host, $port, $errno, $errstr, $timeout ); } // Verify we connected properly if (!is_resource($this->smtp_conn)) { $this->setError( 'Failed to connect to server', $errno, $errstr ); $this->edebug( 'SMTP ERROR: ' . $this->error['error'] . ": $errstr ($errno)", self::DEBUG_CLIENT ); return false; } $this->edebug('Connection: opened', self::DEBUG_CONNECTION); // SMTP server can take longer to respond, give longer timeout for first read // Windows does not have support for this timeout function if (substr(PHP_OS, 0, 3) != 'WIN') { $max = ini_get('max_execution_time'); // Don't bother if unlimited if ($max != 0 && $timeout > $max) { @set_time_limit($timeout); } stream_set_timeout($this->smtp_conn, $timeout, 0); } // Get any announcement $announce = $this->get_lines(); $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER); return true; } /** * Initiate a TLS (encrypted) session. * @access public * @return boolean */ public function startTLS() { if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) { return false; } // Begin encrypted connection if (!stream_socket_enable_crypto( $this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT )) { return false; } return true; } /** * Perform SMTP authentication. * Must be run after hello(). * @see hello() * @param string $username The user name * @param string $password The password * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2) * @param string $realm The auth realm for NTLM * @param string $workstation The auth workstation for NTLM * @param null|OAuth $OAuth An optional OAuth instance (@see PHPMailerOAuth) * @return bool True if successfully authenticated.* @access public */ public function authenticate( $username, $password, $authtype = null, $realm = '', $workstation = '', $OAuth = null ) { if (!$this->server_caps) { $this->setError('Authentication is not allowed before HELO/EHLO'); return false; } if (array_key_exists('EHLO', $this->server_caps)) { // SMTP extensions are available. Let's try to find a proper authentication method if (!array_key_exists('AUTH', $this->server_caps)) { $this->setError('Authentication is not allowed at this stage'); // 'at this stage' means that auth may be allowed after the stage changes // e.g. after STARTTLS return false; } self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL); self::edebug( 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']), self::DEBUG_LOWLEVEL ); if (empty($authtype)) { foreach (array('LOGIN', 'CRAM-MD5', 'NTLM', 'PLAIN', 'XOAUTH2') as $method) { if (in_array($method, $this->server_caps['AUTH'])) { $authtype = $method; break; } } if (empty($authtype)) { $this->setError('No supported authentication methods found'); return false; } self::edebug('Auth method selected: '.$authtype, self::DEBUG_LOWLEVEL); } if (!in_array($authtype, $this->server_caps['AUTH'])) { $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); return false; } } elseif (empty($authtype)) { $authtype = 'LOGIN'; } switch ($authtype) { case 'PLAIN': // Start authentication if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) { return false; } // Send encoded username and password if (!$this->sendCommand( 'User & Password', base64_encode("\0" . $username . "\0" . $password), 235 ) ) { return false; } break; case 'LOGIN': // Start authentication if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) { return false; } if (!$this->sendCommand("Username", base64_encode($username), 334)) { return false; } if (!$this->sendCommand("Password", base64_encode($password), 235)) { return false; } break; case 'XOAUTH2': //If the OAuth Instance is not set. Can be a case when PHPMailer is used //instead of PHPMailerOAuth if (is_null($OAuth)) { return false; } $oauth = $OAuth->getOauth64(); // Start authentication if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) { return false; } break; case 'NTLM': /* * ntlm_sasl_client.php * Bundled with Permission * * How to telnet in windows: * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication */ require_once 'extras/ntlm_sasl_client.php'; $temp = new stdClass; $ntlm_client = new ntlm_sasl_client_class; //Check that functions are available if (!$ntlm_client->Initialize($temp)) { $this->setError($temp->error); 9\obœc^pSuY['2Pi/u|u )WSd3g8Ϩqx+'b(ZnVKF]4Fߺ+SsupȻX-3#f1˱ So^*O_;#+`@d(fN'6I؋{(P1C6cTudJ1P߄s=5q_ay06@Y< LN~#f+ɘh5NZmͬN 5*Dw\ J&W>ϛ:NN@L*Ø\RT"-"d{髓{;VL~+urX+A+%*d@dN ԯag0$#Y @ 'LyP{&),'ҮP %oR)^Yޱv}?WR_-M|x޾+ v1+nƮ9\ @/KJCY“:V*2iߛ D-f־IWe*5}C iV6ШMDwZ=/gH^ذZï Cl:]Uv̷6)G;itcx0wJ<' l(Ͷ>['(%89PHCR}caP%Ķ{;`X2%p&a|t cF T:"%\Nf Uh -b*ŕ5 tg ~Bb?t QԞfNai8 O kcYo(-Z~C_}7h3 yUir.Tz u It A9'NHWWq\JTTt5LW J3U2qUm_s*(خ,R%h*]D].F=$wsBR{z@T: _&s"@G)ٞ(Pt{|̸R6;_!b$wx ]eeg;DޫvȓS$*YwC%jARCx@6ם ;re ڥ*crlm(H'IPo|3ZߍL{_Q4J2{& ZK(p0"T+X:2y{]'cge.,+IȾ|ٵh7bO[&(P>pl+rH"wPa0`WoG0AR75 ݃&{BnGGt9FfĦ_#;UşsO0$&楊 D 8z4WLяf:L %~QL&FS!Igc:Lc~pe5SwԬt:ݳFoE:gN4> ">C#f* bYDc !W~4+pXv­_d#6 πuƐ:eA*_v!)|^ ?yPcG([Љ*‚FG$hEjB2(`*swOghՑwȞ` Th'!+mkhX8IbWd˻n||q1U%K, f'bs̹%ն:GTGXF`j.nz5T_#zls|AfC 8Ū]p&e=mI,B c&U~qܵm[3o0M\ju3-f'yQ+6n7 J*[oo5Ć 8tG8sfvDtP`q'aCY>US5\vl1,jKˤuG$odSF]n c}:KΏwB"!6 I#;D P} Zp'Yz4ygW(NcQC"^؞RkFU =ϲNQU*~_b ,D\=HtvZ (z\܉>ep=q hC0Sa9+Mrм@4IMI}fuEV-)}V5;}~PC{r1kҨ7W:3FG3@O7KzrMtlTcYp`G!dI$B ۽ƽI\ZTf^Oָ})}/y`kFvUGIVF!2'E7%`t]Qծ脖^eDȽ2H~*4bV3~xvS`%>6`f.f!vHq6).Z^+x u]~59ʗfE0#oWDbFqG}E3{BA b@_֊ l:=Uw!cL%<ʎۀbN +*­ˆwZ`/7xה$Ԁ_H>ZgC}OٳisB7H͹%/" 4]Oz1շItmZCH>6h!½u ot0&]?DR(z!/EeҸB徐 6hqķ`PFJ|={?'Ԉ'CaH湴R ?G󅯰;YvMϜ{TVk emշGeM+_C.&a#󒓘UI U@}faH^Ԝv  sT(暷a\$XtΛ 'dHm +3HV%6졟x DLE]AmCU 4I?͘2 evGiQ \"Xm}f] @>)L{oϨ.)n|lY_IBlN}`9: 5=AT36g&aE3xȫ ҒI=vx_".˿$`"+KT 2>VܭZoyir# @@;'iP‘nmׯoK dRN>=4h7 ;%j ؞/XlR:ڽ"0+@?=pz^ |K͆W] ]&p(MD!ۗ~k`KAU2m -0h웗iXE:fLB Mt j^֎aWh{ ]:C B&<i=fwߥb*{XWWF| ZZ./۟V!ҁ_R3CkdIJB [ۯh(h&E[,Fo`XTN\U| u)hzzq#\䵨 ]!}U~8|2auY7uǺ&̙P|W{|(kw{ 5*Yu!Jd~C'r6i]A%FK9vc`ï: TB3cGzS\8l~ b7&Xq,Π'bj]/w+ yMEd9Ht1ˮDRJtDUQAB#!g&<-ONT@k!m?ZPIxUhXq&2 X!Zfj"ܲSFy`qwH;9KDkuJu>c6dI)]zi~ZԊ{M2f,!NnC&PaYJ&缉, o2O5W4k@&t1`x7]"X{YxʤM~lb,E233`^Fu.EdꖃGZJԎ*G#d@4hb:k_ӢFQ1)%VkF\u|>=;gg9g^ Z#w^~h %{dhiǗwhT ƶ;zMy9+c?RۺBf/˔6-t3bY..Mv.]8s_h5ω\{FLॼX B_F #@4f'$F' 5J`LhM{<$` ku9BSTcf.smo~}S bD$Q&N0̖5o hx^DvW@B] :ΈBuxC|2׊JDpuAӌ8q =c  dqi+O85iaa|H68ś"80p yR>`T(:`J m\c߯jc&WtAJY nB_ofWtpfv&SVTӍYp;|^;(>8B37a"کu6yOOfe:P>g?)`+Qu:BcJz(W}pBaTRW'zo!!{JeVViLx5"oB ffE3L F `t[ȖNv;+`O((ݴwkYdoB&=˜|bs2sIMEr%@i楷DË9zH0nSHv2n~ѵS:Q;è_d6e^o=D^2J-fcDΊr$ZA"fÕ3.u%O*;];MM[La? I˖͐qHb텙[`SN&NWԂtB&O -? CKxI/-ԛ&ERRe;^P/ztFF(7ŀs^k׉?7~H:l)mI) 3[=0FQѪo/B# K\-3 Q.FrG%D)"t#J׻yq@uƪȉsK=ySESk֫6G.%bT)]6\ƛ/zhqϗ 1GQ_d>NϧBIc]ԙsu"9d_=pRփYn1/|$d8$O"Y/7roF7?\"hJ9%H#>OC"$\rw*`l^8cK_ߝdo^G&Fk]:vEad?Φ913$d5m@뵑 p(s*Қj-6\^ʚ0XA*j2dsO37f4߻f_Diq^5$"={)x:ќ$gp($line_out) and $line_out[0] == '.') { $line_out = '.' . $line_out; } $this->client_send($line_out . self::CRLF); } } //Message data has been sent, complete the command //Increase timelimit for end of DATA command $savetimelimit = $this->Timelimit; $this->Timelimit = $this->Timelimit * 2; $result = $this->sendCommand('DATA END', '.', 250); //Restore timelimit $this->Timelimit = $savetimelimit; return $result; } /** * Send an SMTP HELO or EHLO command. * Used to identify the sending server to the receiving server. * This makes sure that client and server are in a known state. * Implements RFC 821: HELO * and RFC 2821 EHLO. * @param string $host The host name or IP to connect to * @access public * @return boolean */ public function hello($host = '') { //Try extended hello first (RFC 2821) return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host)); } /** * Send an SMTP HELO or EHLO command. * Low-level implementation used by hello() * @see hello() * @param string $hello The HELO string * @param string $host The hostname to say we are * @access protected * @return boolean */ protected function sendHello($hello, $host) { $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250); $this->helo_rply = $this->last_reply; if ($noerror) { $this->parseHelloFields($hello); } else { $this->server_caps = null; } return $noerror; } /** * Parse a reply to HELO/EHLO command to discover server extensions. * In case of HELO, the only parameter that can be discovered is a server name. * @access protected * @param string $type - 'HELO' or 'EHLO' */ protected function parseHelloFields($type) { $this->server_caps = array(); $lines = explode("\n", $this->last_reply); foreach ($lines as $n => $s) { //First 4 chars contain response code followed by - or space $s = trim(substr($s, 4)); if (empty($s)) { continue; } $fields = explode(' ', $s); if (!empty($fields)) { if (!$n) { $name = $type; $fields = $fields[0]; } else { $name = array_shift($fields); switch ($name) { case 'SIZE': $fields = ($fields ? $fields[0] : 0); break; case 'AUTH': if (!is_array($fields)) { $fields = array(); } break; default: $fields = true; } } $this->server_caps[$name] = $fields; } } } /** * Send an SMTP MAIL command. * Starts a mail transaction from the email address specified in * $from. Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more recipient * commands may be called followed by a data command. * Implements rfc 821: MAIL FROM: * @param string $from Source address of this message * @access public * @return boolean */ public function mail($from) { $useVerp = ($this->do_verp ? ' XVERP' : ''); return $this->sendCommand( 'MAIL FROM', 'MAIL FROM:<' . $from . '>' . $useVerp, 250 ); } /** * Send an SMTP QUIT command. * Closes the socket if there is no error or the $close_on_error argument is true. * Implements from rfc 821: QUIT * @param boolean $close_on_error Should the connection close if an error occurs? * @access public * @return boolean */ public function quit($close_on_error = true) { $noerror = $this->sendCommand('QUIT', 'QUIT', 221); $err = $this->error; //Save any error if ($noerror or $close_on_error) { $this->close(); $this->error = $err; //Restore any error from the quit command } return $noerror; } /** * Send an SMTP RCPT command. * Sets the TO argument to $toaddr. * Returns true if the recipient was accepted false if it was rejected. * Implements from rfc 821: RCPT TO: * @param string $toaddr The address the message is being sent to * @access public * @return boolean */ public function recipient($toaddr) { return $this->sendCommand( 'RCPT TO', 'RCPT TO:<' . $toaddr . '>', array(250, 251) ); } /** * Send an SMTP RSET command. * Abort any transaction that is currently in progress. * Implements rfc 821: RSET * @access public * @return boolean True on success. */ public function reset() { return $this->sendCommand('RSET', 'RSET', 250); } /** * Send a command to an SMTP server and check its return code. * @param string $command The command name - not sent to the server * @param string $commandstring The actual command to send * @param integer|array $expect One or more expected integer success codes * @access protected * @return boolean True on success. */ protected function sendCommand($command, $commandstring, $expect) { if (!$this->connected()) { $this->setError("Called $command without being connected"); return false; } $this->client_send($commandstring . self::CRLF); $this->last_reply = $this->get_lines(); // Fetch SMTP code and possible error code explanation $matches = array(); if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) { $code = $matches[1]; $code_ex = (count($matches) > 2 ? $matches[2] : null); // Cut off error code from each response line $detail = preg_replace( "/{$code}[ -]".($code_ex ? str_replace('.', '\\.', $code_ex).' ' : '')."/m", '', $this->last_reply ); } else { // Fall back to simple parsing if regex fails $code = substr($this->last_reply, 0, 3); $code_ex = null; $detail = substr($this->last_reply, 4); } $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER); if (!in_array($code, (array)$expect)) { $this->setError( "$command command failed", $detail, $code, $code_ex ); $this->edebug( 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply, self::DEBUG_CLIENT ); return false; } $this->setError(''); return true; } /** * Send an SMTP SAML command. * Starts a mail transaction from the email address specified in $from. * Returns true if successful or false otherwise. If True * the mail transaction is started and then one or more recipient * commands may be called followed by a data command. This command * will send the message to the users terminal if they are logged * in and send them an email. * Implements rfc 821: SAML FROM: * @param string $from The address the mese!\|?ȷ]9 *Gs]3l}pKJPhƎm2FUGvl+u qLBu9q]^V,=6FҕahtX Y62.F&=$qװF 4A|#du+ $6+eAN˚/ &7B<\t>̪`6H[r5l]pv)'m\Li~ z.K lAȟm BA<<5#9Hf| @55bf'w߮R;؟.0Δw9vi ម>Fr WGzIdc*#]_n\g 4ʭ+,2f֑7D )J7Y1=l12&iQ-F$߿@zmK gdL0JAO*q5rGeP{@{$ ";ZJcA|1HT. rjAԽJ!: k(Y?hOs3]e$OIZymo ѹ颅>w۱#w %HbbU=ӠQ2}YQUrxY;CZHkWZ/R|# Ō܃5Nb_uw3M2䅨Zy$ 3Z(!h@pڲ2\Bu's8оѾ -h^kTi5d7+QFvEQ+/1?GhR! _b2m5 ċ2eCrvE$/%8hwϋ~l͵7*6L~0<%R\&abs"C6;_@=|}BbKp9T:z/i|ħk2'6ј91 Tw0H"T-IZbM1v y±$' p sPĿd. 7WJZُx`z{$XH*QK^T PGߜub=I@s_tlRNrYΦ=pu(%&zIac1֔+ %Ss8Zl**`ydv 0Uv hKJ6,T!.ʍ5d,l sT (`^I/1{J6J=Z<Ϊ FJbA/jr9U*?Z SL2)>@OfkE E5맼Q9\|`%2 y,u[6@Pۘ?[&x&gTCa,*4nd\UMpdG,AIm3Dp398ϚPPȝD q7>1!5W߹;~J]qs#!zq~v&EG@}Ax4QAqH;9[mzC:"_<58|o$6Npa^ aNg)Ů +ՠ%vpS9ցj-X11ݠ%W2pS膦$G=J]p-{LE(_ϟD޶ {\.>ѝlHsFbZ`Ƣ '!#J+ͥI2|:_#{حm\'rϸX~Y6Ƒ+a3,ͻ{JєHxkeEʨ9<ʄCz‘3Vf!o{\ؔH`ƛX崅 EVƓCoDnO;_pf rWSADګbG׀aWrr#h k=}e'MͷbSNK,C[2vh̚ZNFu;w CUϫTȁ_1d d y)Ujg߉?(.Ƨz&.9GBpШ&v7kZ=vJ$mJɟxß4>f;P '$رD5ik0ߤRWG0uد ~]%3C)QAٻO{ۋywX{ coۆ~R5iHWj᲍J~:b6b 1uVfpzђ+K+_%-tO ܏=T D7Sw*%ܗS_`M8eEhЖ KIXqW(.,,`WW>i-`MUxtfA$峟<Le"a-'Q)ˬQDK[yIH!5kBr:u888&~l60v~T/!j^U{)I5o3Dlk(ev^|yJɤmtABo2[K*ƥ^X նm+<l{|#25Wqc.0[9X]%Fs2ֵ:&Zgkf^"H~k0['Z)G>dl0ևx}qA5 N8::-(8S˗vqIK aALէI ujYo2ꬶ FyᕵЙv\( uLSl~q 3r%KTxCu*sZ<:G7YpOX^zK\KRWIY)lP}Pf[[;`t'[* =݄l7ŋp~JFH 1(pbzqz2{bHBiD b'wK/popk_=sRjS.Gz(/Vp~ƴAU@QN<ʽ9L bm Vɝ2?a{=dn t΋*;6YP){WQ5 wdv.ˋTy%XTf^js&nsS96ywwVԖ~6)~^?8,S&j6dF .*Y34 ZԮRI4u,6ŝƵ rĦwƍ[s8ˢ~Ѧ]5EwKB~εWh(FxG(ji ۶Zp~`H]B;2{?*6AD񽣰aK3=&#c6%;Ėڍ[~7WsF bNft7<f 8lez7yU8=u Fv"Q; XG>[W_nKxm.Ags2Qop{gr/.;[eje# |#<^L"Ni%)蚃S.\pʁ YvV0V ҸʲTvRT b,Ǹd us|# VBԋ] bŽgӨ]5])rlK'D}eBNc#аl u5'i@.)g$E.NxR3'c#u9d;._07+(APyi)M0aȆw䶜0\!c)Z򈒡_NOئJ[BٝF$٦g6Qq05V KXP[pT.@"sIS-}»j\.f*0@^fvqTq,=;+4GGܶ%۵-{֌&LVetC(lV"8x%~uܭuջɐg8Ap &rN5RõP8»s#MПi^!c(X4#[qV^/7HoR"KN6:z m}aB'VjL_p!-GͰ  jӘ!ևyW-^1ɒW<qm (f)[Z#j˰0ïFͱI&KrKٔa/Y-m/Z$ ]B-&kح]'ZPq,,3 HU +F5߯R8W0V-7W ;-֬X9y Bn28\ZC斒iK~ʼ2큗`E80<1 "rjD@tѷeSs${ 35d! ؠƢe ̿ P^$R2RJah:qy}clÜb5BG͉&[>I;\QR Mėɿd6r20I)ad)R!_1u ?/u^}'INMEH/k8;j9g[%)􃖸˭ֶ5F$^A3:m-]DԫUYңbCoriJ#m R35a) %Ua) VDGHQDִK|U1Ҧ*=»4C񞶢nq쒠U"賔wfjdD+ ij1 F_95<&c [QlǕYK\7kNbVe++z`ncR{~;8~It-v!?plQ޻,AuG/Wcيq0>a=6~tz ZzQٌOyd9Һ,Hw QƅKq".e~|Q<2