aolserver4-4.5.1/0000755000175000017500000000000011147057554013440 5ustar frankiefrankieaolserver4-4.5.1/doc/0000755000175000017500000000000011141661375014201 5ustar frankiefrankieaolserver4-4.5.1/doc/Ns_Gzip.30000644000175000017500000000637710421472532015646 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Gzip.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Gzip 3 4.5 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_Gzip, Ns_SetGzipProc \- GZIP compression support .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_Gzip\fR(\fIbuf, len, level, dsPtr\fR) .sp void \fBNs_SetGzipProc\fR(\fIproc\fR) .SH ARGUMENTS .AS Tcl_DString dsPtr out .AP Tcl_DString dsPtr out Output buffer to placed compressed string. .AP int len in Length of string pointed to by \fIbuf\fR. .AP char *buf in Pointer to string to compress. .AP int level in Requested GZIP compression level. .AP Ns_GzipProc proc in Procedure to GZIP content. .BE .SH DESCRIPTION .PP These functions enable GZIP compress of text buffers. .TP int \fBNs_Gzip\fR(\fIbuf, len, level, dsPtr\fR) This function compresses a string pointed to by \fIbuf\fR of length \fIlen\fR, appending the output to the given \fIdsPtr\fR. The output buffer must already be initialized. The \fIlevel\fR parameter specifies the compress level between 0 and 9; see the documentation in the zlib.h for details. .sp The function will return NS_OK if compression was successful, otherwise NS_ERROR. A call to \fBNs_SetGzipProc\fR to install a compression function must have already occured. The \fInszlib\fR module will install a suitable function when loaded. .TP void \fBNs_SetGzipProc\fR(\fIproc\fR) This function is used to install a compression function for \fBNs_Gzip\fR. A call to \fBNs_SetGzipProc\fR would normally be in the module-load routine of a module which provides compression support, e.g., the \fInszlib\fR module. The function should match the type \fBNs_GzipProc\fR: .sp .CS typedef int Ns_GzipProc( char *\fIbuf\fR, int \fIlen\fR, int level, Tcl_DString *\fIdsPtr\fR \fR); .CE .SH KEYWORDS compress, gzip aolserver4-4.5.1/doc/Ns_Db.30000644000175000017500000000453407645364606015273 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Db.3,v 1.5 2003/04/10 22:00:38 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Db 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_Db0or1Row, Ns_Db1Row, Ns_DbBindRow, Ns_DbCancel, Ns_DbDML, Ns_DbExec, Ns_DbFlush, Ns_DbGetRow, Ns_DbResetHandle, Ns_DbSelect, Ns_DbSetException \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_Db0or1Row\fR(\fIarg, arg\fR) .sp \fBNs_Db1Row\fR(\fIarg, arg\fR) .sp \fBNs_DbBindRow\fR(\fIarg, arg\fR) .sp \fBNs_DbCancel\fR(\fIarg, arg\fR) .sp \fBNs_DbDML\fR(\fIarg, arg\fR) .sp \fBNs_DbExec\fR(\fIarg, arg\fR) .sp \fBNs_DbFlush\fR(\fIarg, arg\fR) .sp \fBNs_DbGetRow\fR(\fIarg, arg\fR) .sp \fBNs_DbResetHandle\fR(\fIarg, arg\fR) .sp \fBNs_DbSelect\fR(\fIarg, arg\fR) .sp \fBNs_DbSetException\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Fd.30000644000175000017500000000406207645364611015267 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Fd.3,v 1.5 2003/04/10 22:00:41 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Fd 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_CloseOnExec, Ns_DupHigh, Ns_NoCloseOnExec, ns_closeonexec, ns_duphigh \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_CloseOnExec\fR(\fIarg, arg\fR) .sp \fBNs_DupHigh\fR(\fIarg, arg\fR) .sp \fBNs_NoCloseOnExec\fR(\fIarg, arg\fR) .sp \fBns_closeonexec\fR(\fIarg, arg\fR) .sp \fBns_duphigh\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Alloc.30000644000175000017500000001035610417520407015757 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Alloc.3,v 1.6 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Alloc 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_calloc, ns_free, ns_malloc, ns_realloc \- Memory allocation functions .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void * \fBns_calloc\fR(\fIsize_t num, size_t esize\fR) .sp void \fBns_free\fR(\fIvoid *ptr\fR) .sp void * \fBns_malloc\fR(\fIsize_t size\fR) .sp void * \fBns_realloc\fR(\fIvoid *ptr, size_t size\fR) .BE .SH DESCRIPTION .PP The AOLserver memory storage allocation code was moved into Tcl core beginning with Tcl 8.4.0. Starting with AOLserver 3.5, these memory allocation functions are wrappers that call Tcl_Alloc and Tcl_Free. Earlier versions of AOLserver used this fast memory storage allocator internally, or the platform's memory allocator depending on how you configured it. .PP The actual amount of memory allocated or freed will be different from the requested amount. This is because the fast memory allocation code pools memory into chunks and manages that memory internally. In addition, the Tcl distribution may be compiled to allocate even more memory which is used internally for diagnostic reasons. Using ns_free to free memory created by routines other than ns_malloc, ns_realloc and ns_calloc will almost certainly result in segmentation faults or undefined behavior. .PP The lowercase and mixed-case versions are identical; the lowercase versions are preferred. .TP \fBns_calloc\fR(\fInum, esize\fR) Allocates a block of memory that is \fInum\fR * \fIesize\fR large, zeros it, and returns a pointer to the beginning of the memory block or NULL if the operation fails. .TP \fBns_free\fR(\fIptr\fR) ns_free() frees the memory space pointed to by ptr. This pointer must have been created with a previous call to ns_malloc(), ns_calloc() or ns_realloc(). If ptr is NULL, no operation is performed. ns_free() returns no value. .TP \fBns_malloc\fR(\fIsize\fR) ns_malloc() allocates size bytes and returns a pointer to the allocated memory. The memory is not cleared. The value returned is a pointer to the allocated memory or NULL if the request fails. The memory must be freed by ns_free. .TP \fBns_realloc\fR(\fIptr, size\fR) \fBns_realloc\fR changes the size of the memory block pointed to by \fIptr\fR to \fIsize\fR bytes. The contents will be unchanged to the minimum of the old and new sizes. Newly allocated memory will be uninitialized. If \fIptr\fR is NULL, the call is equivalent to \fBns_malloc\fR(\fIsize\fR); if \fIsize\fR is equal to zero, the call is equivalent to \fBns_free\fR(\fIptr\fR). Unless \fIptr\fR is NULL, it must have been returned by an earlier call to \fBns_malloc\fR(), \fBns_calloc\fR() or \fBns_realloc\fR(). .SH "SEE ALSO" Tcl_Alloc(3), Tcl_Free(3) .SH KEYWORDS memory, allocation aolserver4-4.5.1/doc/ns_getchannels.n0000644000175000017500000000351707645364653017376 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_getchannels.n,v 1.4 2003/04/10 22:01:15 shmooved Exp $ '\" '\" .so man.macros .TH ns_getchannels n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_getchannels \- commands .SH SYNOPSIS \fBns_getchannels \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Htuu.30000644000175000017500000000362307645364612015666 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Htuu.3,v 1.5 2003/04/10 22:00:42 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Htuu 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_HtuuDecode, Ns_HtuuEncode \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_HtuuDecode\fR(\fIarg, arg\fR) .sp \fBNs_HtuuEncode\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Info.30000644000175000017500000001461010421472532015615 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Info.3,v 1.6 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Info 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_InfoAddress, Ns_InfoBootTime, Ns_InfoBuildDate, Ns_InfoConfigFile, Ns_InfoErrorLog, Ns_InfoHomePath, Ns_InfoHostname, Ns_InfoLabel, Ns_InfoNameOfExecutable, Ns_InfoPid, Ns_InfoPlatform, Ns_InfoServerName, Ns_InfoServerVersion, Ns_InfoServersStarted, Ns_InfoShutdownPending, Ns_InfoStarted, Ns_InfoTag, Ns_InfoUptime, Ns_PageRoot \- Get server information .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_InfoAddress\fR(\fIvoid\fR) .sp int \fBNs_InfoBootTime\fR(\fIvoid\fR) .sp char * \fBNs_InfoBuildDate\fR(\fIvoid\fR) .sp char * \fBNs_InfoConfigFile\fR(\fIvoid\fR) .sp char * \fBNs_InfoErrorLog\fR(\fIvoid\fR) .sp char * \fBNs_InfoHomePath\fR(\fIvoid\fR) .sp char * \fBNs_InfoHostname\fR(\fIvoid\fR) .sp char * \fBNs_InfoLabel\fR(\fIvoid\fR) .sp char * \fBNs_InfoNameOfExecutable\fR(\fIvoid\fR) .sp int \fBNs_InfoPid\fR(\fIvoid\fR) .sp char * \fBNs_InfoPlatform\fR(\fIvoid\fR) .sp char * \fBNs_InfoServerName\fR(\fIvoid\fR) .sp char * \fBNs_InfoServerVersion\fR(\fIvoid\fR) .sp int \fBNs_InfoServersStarted\fR(\fIvoid\fR) .sp int \fBNs_InfoShutdownPending\fR(\fIvoid\fR) .sp int \fBNs_InfoStarted\fR(\fIvoid\fR) .sp char * \fBNs_InfoTag\fR(\fIvoid\fR) .sp int \fBNs_InfoUptime\fR(\fIvoid\fR) .sp char * \fBNs_PageRoot\fR(\fIchar *server\fR) .BE .SH DESCRIPTION .PP These functions return information about the server. Many of the functions return pointers to strings or other types of information which, in most cases, you must not free. These are denoted as "read-only" in the sections below. .TP \fBNs_InfoAddress\fR() Return the server IP address of the server. The IP address is defined in the server configuration file. The IP address is returned as a string pointer which you must treat as read-only. If you want to alter the string, you must use \fBns_strdup\fR to copy the string to another location in memory and modify that instead. .TP \fBNs_InfoBootTime\fR() Return the time that the server was started as an int. Treat the result as time_t. .TP \fBNs_InfoBuildDate\fR() Return the date and time that this server was compiled as a string pointer. Treat the result as read-only. .TP \fBNs_InfoConfigFile\fR() Return the absolute path name of the configuration file in use as a string pointer. Treat the result as read-only. .TP \fBNs_InfoErrorLog\fR() Return the name of the error log as a string pointer. Treat the result as read-only. The name may be just a name, a relative path or an absolute path depending on how it is defined in the server configuration file. .TP \fBNs_InfoHomePath\fR() Return the absolute directory path where AOLserver is installed as a string pointer. Treat the result as read-only. .TP \fBNs_InfoHostname\fR() Return the hostname of the host that AOLserver is running on as a string pointer. The \fBgethostname\fR(2) function is used. If \fBgethostname\fR(2) fails to return a hostname, "localhost" is used instead. Treat the result as read-only. .TP \fBNs_InfoLabel\fR() Return the source code label for AOLserver as a string pointer. Statically defined in the source code. If no label was used, "unlabeled" is returned. You can use these functions to provide the source code label when you report problems with the server. Treat the result as read-only. .TP \fBNs_InfoNameOfExecutable\fR() Return the name of the running executable as a string pointer. Treat the result as read-only. .TP \fBNs_InfoPid\fR() Return the pid of the running AOLserver executable as an int. .TP \fBNs_InfoPlatform\fR() Return the platform name as a string pointer, e.g. "linux". Treat the result as read-only. .TP \fBNs_InfoServerName\fR() Return the AOLserver name string, e.g. "AOLserver". Statically defined in the source code. Treat the result as read-only. .TP \fBNs_InfoServerVersion\fR() Return the AOLserver version string, e.g. "3.5.2". Statically defined in the source code. Treat the result as read-only. .TP \fBNs_InfoServersStarted\fR() Return TRUE if the server has started, i.e., if initialization and module loading is complete. This is a compatibility function that calls \fBNs_InfoStarted\fR. .TP \fBNs_InfoShutdownPending\fR() Return TRUE if there is there a shutdown pending, i.e. if an INTR signal has been received or if \fBns_shutdown\fR has been called. .TP \fBNs_InfoStarted\fR() Return TRUE if the server has started, i.e., if initialization and module loading is complete. .TP \fBNs_InfoTag\fR() Return the CVS tag of this build of AOLserver. Statically defined in the source code. The value may be meaningless. Treat the result as read-only. .TP \fBNs_InfoUptime\fR() Return how long, in seconds, AOLserver has been running. .TP \fBNs_PageRoot\fR(\fIserver\fR) Return the path name of the AOLserver pages directory for a particular server as a string pointer. The \fIserver\fR argument is not used. Treat the result as read-only. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclDbGetHandle.30000644000175000017500000000357007645364635017513 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclDbGetHandle.3,v 1.5 2003/04/10 22:01:01 shmooved Exp $ '\" '\" .so man.macros .TH Ns_TclDbGetHandle 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclDbGetHandle \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclDbGetHandle\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnFlush.30000644000175000017500000001272010421472532016621 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnFlush.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnFlush 3 4.5 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnFlush, Ns_ConnFlushDirect \- Flush content to an open connection .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnFlush\fR(\fIconn, buf, len, stream\fR) .sp int \fBNs_ConnFlushDirect\fR(\fIconn, buf, len, stream\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP char *buf in Pointer to buffer to send. .AP Ns_Conn conn in Pointer to current connection. .AP int len in Length of bytes pointed to by \fIbuf\fR. .AP int stream in Boolean value to indicate a streamed response. .BE .SH DESCRIPTION .PP These routines support sending content to the client through the connection's communcation driver. They support generating both complete single responses or streaming content through multiple calls. They both take a pointer to the current connection specified by the \fIconn\fR argument and a pointer to content to send specified by \fIbuf\fR of length \fIlen\fR. If \fIlen\fR is negative, \fIbuf\fR is assumed to be a null terminated string and \fIlen\fR is calculated by \fBstrlen\fR. .PP The \fIstream\fR argument, if zero, indicates a single response should be generated. In this case, an appropriate \fIcontent-length\fR header is generated, the content is sent, and the connection is closed with \fBNs_ConnClose\fR. If \fIstream\fR is not zero, the call is assumed to be one of potential multiple calls which will send content incrementally to the client. Content streamed in this case is sent either in \fIchunked\fR encoding mode for HTTP/1.1 clients or directly, without a \fIcontent-length\fR as was common in pre-HTTP/1.1 applications. Applications which stream content should be sure to make a final call \fBNs_ConnFlush\fR or \fBNs_ConnFlushDirect\fR with \fIstream\fR set to zero to correctly flush and close the connection. .PP The \fBNs_ConnFlush\fR and \fBNs_ConnFlushDirect\fR differ in their treatment of the given content before sending. \fBNs_ConnFlushDirect\fR does not alter the content in anyway, treating is as an arbitrary array of bytes. \fBNs_ConnFlush\fR assumes the content is UTF-8 text, e.g., the result of an ADP page execution. In this case, if the connection has an associated output encoding set with the \fBNs_ConnSetEncoding\fR routine, it will be used to encode the content in the requested character set (e.g., from UTF-8 to iso8859-1). In addition, if the server has gzip compression enabled, the \fBnszlib\fR module is loaded, the connection has been marked for gzip compression with the \fBNs_ConnSetGzipFlag\fR, and the size of the output data is greater than the server configured minimun gzip compression size, the content will be compressed and an appropriate header will be generated for the client. Gzip compression is not supported when content is streamed to the client. .PP The first call to \fBNs_ConnFlush\fR or \fBNs_ConnFlushDirect\fR for a connection, in stream or single response mode, will result in appropriate headers being constructed and sent first before any user data. These headers include the basic headers constructed via \fBNs_ConnSetRequiredHeaders\fR plus any additional application specific headers queued for output via \fBNs_ConnSetHeaders\fR or \fBNs_ConnCondSetHeaders\fR. The \fBNs_ConnFlush\fR routine may add additional headers as needed to specify \fIchunked\fR and/or \fIgzip\fR encoding. .SH EXAMPLE The following example generates a simple text response: .CS Ns_ConnSetStatus(conn, 200); Ns_ConnSetType(conn, "text/plain"); Ns_ConnFlush(conn, "Hello", 5, 0); .CE The following example demonstrates streaming: .CS Ns_ConnSetStatus(conn, 200); Ns_ConnSetType(conn, "text/plain"); for (i = 0; i < 10; ++i) { sprintf(buf, "stream: %d\n", i); Ns_ConnFlush(conn, buf, -1, 1); } Ns_ConnFlush(conn, "done!", 5, 0); .CE .SH "SEE ALSO" Ns_ConnSend(n), Ns_ConnClose(3), Ns_ConnSetRequiredHeaders(3), Ns_ConnQueueHeaders(3) .SH KEYWORDS connection i/o, gzip, stream, encoding, flush aolserver4-4.5.1/doc/Ns_Thread.30000644000175000017500000000470507645364636016160 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Thread.3,v 1.5 2003/04/10 22:01:02 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Thread 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME , Ns_ThreadCreate, Ns_ThreadExit, Ns_ThreadGetName, Ns_ThreadGetParent, Ns_ThreadId, Ns_ThreadJoin, Ns_ThreadList, Ns_ThreadSelf, Ns_ThreadSetName, Ns_ThreadStackSize, Ns_ThreadYield \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fB\fR(\fIarg, arg\fR) .sp \fBNs_ThreadCreate\fR(\fIarg, arg\fR) .sp \fBNs_ThreadExit\fR(\fIarg, arg\fR) .sp \fBNs_ThreadGetName\fR(\fIarg, arg\fR) .sp \fBNs_ThreadGetParent\fR(\fIarg, arg\fR) .sp \fBNs_ThreadId\fR(\fIarg, arg\fR) .sp \fBNs_ThreadJoin\fR(\fIarg, arg\fR) .sp \fBNs_ThreadList\fR(\fIarg, arg\fR) .sp \fBNs_ThreadSelf\fR(\fIarg, arg\fR) .sp \fBNs_ThreadSetName\fR(\fIarg, arg\fR) .sp \fBNs_ThreadStackSize\fR(\fIarg, arg\fR) .sp \fBNs_ThreadYield\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_List.30000644000175000017500000000531107645364614015652 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_List.3,v 1.5 2003/04/10 22:00:44 shmooved Exp $ '\" '\" .so man.macros .TH Ns_List 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ListCons, Ns_ListCopy, Ns_ListDeleteDuplicates, Ns_ListDeleteIf, Ns_ListDeleteLowElements, Ns_ListDeleteWithTest, Ns_ListFree, Ns_ListLast, Ns_ListLength, Ns_ListMapcar, Ns_ListNconc, Ns_ListNmapcar, Ns_ListNreverse, Ns_ListPrint, Ns_ListSort, Ns_ListWeightSort \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_ListCons\fR(\fIarg, arg\fR) .sp \fBNs_ListCopy\fR(\fIarg, arg\fR) .sp \fBNs_ListDeleteDuplicates\fR(\fIarg, arg\fR) .sp \fBNs_ListDeleteIf\fR(\fIarg, arg\fR) .sp \fBNs_ListDeleteLowElements\fR(\fIarg, arg\fR) .sp \fBNs_ListDeleteWithTest\fR(\fIarg, arg\fR) .sp \fBNs_ListFree\fR(\fIarg, arg\fR) .sp \fBNs_ListLast\fR(\fIarg, arg\fR) .sp \fBNs_ListLength\fR(\fIarg, arg\fR) .sp \fBNs_ListMapcar\fR(\fIarg, arg\fR) .sp \fBNs_ListNconc\fR(\fIarg, arg\fR) .sp \fBNs_ListNmapcar\fR(\fIarg, arg\fR) .sp \fBNs_ListNreverse\fR(\fIarg, arg\fR) .sp \fBNs_ListPrint\fR(\fIarg, arg\fR) .sp \fBNs_ListSort\fR(\fIarg, arg\fR) .sp \fBNs_ListWeightSort\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_writefp.n0000644000175000017500000000347707645364662016570 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_writefp.n,v 1.4 2003/04/10 22:01:22 shmooved Exp $ '\" '\" .so man.macros .TH ns_writefp n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_writefp \- commands .SH SYNOPSIS \fBns_writefp \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Mime.30000644000175000017500000000663507645364616015642 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Mime.3,v 1.5 2003/04/10 22:00:46 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Mime 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_GetMimeType \- Return the MIME type of a file .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_GetMimeType\fR(\fIchar *file\fR) .BE .SH DESCRIPTION .TP \fBNs_GetMimeType\fR(\fIfile\fR) The \fBNs_GetMimeType\fR function uses the extension of \fIfile\fR and looks up the associated MIME type stored internally in the server. Case is ignored. The return value is of the form "text/html". AOLserver has a set of predefined file extension to MIME type associations. You can add to these associations by defining file extension to MIME type associations in the server configuration file in the ns/mimetypes section. If you define a file extension that already exists in the server, that file extension and MIME type association will be replaced with yours. If no MIME type association exists for a particular file extension, or there is no file extension, the default and noextension MIME types are returned, respectively. These default to "*/*" but can be set in the server configuration file. Here is an example ns/mimetypes section from the server configuration file: .CS ns_section "ns/mimetypes" ns_param ".doc" "application/msword" ns_param ".ppt" "application/vnd.ms-powerpoint" ns_param ".xls" "application/vnd.ms-excel" ns_param ".cab" "application/mscabinet" ns_param ".frl" "application/x-perfpro" ns_param ".max" "application/vviewer" ns_param ".mif" "application/x-mif" ns_param ".frz" "application/x-dffill" ns_param ".asvg" "image/svg-xml" ns_param ".asvgz" "image/svg-xml" ns_param ".svg" "image/svg-xml" ns_param ".svgz" "image/svg-xml" ns_param default "*/*" ns_param noextension "*/*" .CE .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Makefile0000644000175000017500000000361210424416401015632 0ustar frankiefrankie# The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/doc/Makefile,v 1.6 2006/04/28 13:47:45 jgdavidson Exp $ # MAN := $(wildcard *.[13n]) INSTALL=install-docs NSLIBS = $(wildcard $(AOLSERVER)/lib/libns*$(LIBEXT)) MAN3 := $(wildcard *.3) all: install include ../include/ns.mak install-docs: $(INST) -d $(AOLSERVER)/html index.adp $(INST) -d $(AOLSERVER)/include man.macros missing: @nm $(NSLIBS) | awk '/T _Ns_/ {print $$3}' | sort > lib.out @sed -n '/^.SH NAME/,/^.SH DESC/p' $(MAN3) | sed -n '/^\\fBNs_\(.*\)\\fR(\(.*\))/s//_Ns_\1/p' \ | sort | uniq | diff -y lib.out - aolserver4-4.5.1/doc/ns_shutdown.n0000644000175000017500000000430407645364661016750 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_shutdown.n,v 1.4 2003/04/10 22:01:21 shmooved Exp $ '\" '\" .so man.macros .TH ns_shutdown n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_shutdown \- commands .SH SYNOPSIS \fBns_shutdown ?\fInseconds\fR? .BE .SH DESCRIPTION .PP This command shuts down the server. If \fInseconds\fR is not specified a default value (normally 20) is used; if it is specified, it should be an integer >= 0. The server will wait for up to the specified (or default) number of seconds for existing connections to finish processing. If this time limit is exceeded then existing connections are immediately stopped. .SH "SEE ALSO" nsd(1) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnSetHeaders.30000644000175000017500000001375110421472532017574 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnSetHeaders.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnSetHeaders 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnCondSetHeaders, Ns_ConnSetExpiresHeader, Ns_ConnSetHeaders, Ns_ConnSetLastModifiedHeader, Ns_ConnSetLengthHeader, Ns_ConnSetRequiredHeaders \- Routines to manage response headers .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_ConnCondSetHeaders\fR(\fIconn, key, value\fR) .sp void \fBNs_ConnSetExpiresHeader\fR(\fIconn, expires\fR) .sp void \fBNs_ConnSetHeaders\fR(\fIconn, key, value\fR) .sp void \fBNs_ConnSetLastModifiedHeader\fR(\fIconn, mtime\fR) .sp void \fBNs_ConnSetLengthHeader\fR(\fIconn, length\fR) .sp void \fBNs_ConnSetRequiredHeaders\fR(\fIconn, type, length\fR) .sp void \fBNs_ConnSetTypeHeader\fR(\fIconn, type\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP char *expires in Pointer to string to construct an \fIexpires\fR header. .AP char *key in Pointer to string key for a header. .AP int length in Integer length of output content to construct a \fIcontent-length\fR header. .AP time_t mtime in Modification time stamp to construct a \fIlast-modified\fR header. .AP int status in HTTP result status code. .AP char *type in Pointer to mimetype string to construct a \fIcontent-type\fR header. .AP char *value in Pointer to a string value for a header. .BE .SH DESCRIPTION .PP These functions manage the output headers eventually sent through the given open connection to a client. They operate by modifying the \fIoutputheaders\fR Ns_Set of the connection Ns_Conn structure. Headers can be modified until they are queued or sent directly via the \fBNs_ConnQueueHeaders\fR or \fBNs_ConnFlushHeaders\fR routines. It is possible to modify the \fIoutputheaders\fR directly although use of these functions is preferred for consistancy. .PP Note that higher level output routines such as \fBNs_ConnFlush\fR or the various \fBNs_ConnReturn\fR routines normally generate all the headers necessary for a given response. These routines are normally only necessary for specialized applications which output additional specific headers or specialized request procedures which do not use the higher level output routines. .TP void \fBNs_ConnCondSetHeaders\fR(\fIconn, key, value\fR) Append an output header of the form \fIkey: value\fR only if the header does not already exist in the \fIoutputheaders\fR set. .TP void \fBNs_ConnSetExpiresHeader\fR(\fIconn, expires\fR) This routine is equivalent to \fBNs_ConnSetHeaders\fR(\fIconn, "Expires", expires\fR). Note that the \fIexires\fR parameter is treated as a string, not a timestamp. A timestamp can be constructed with the \fBNs_HttpTime\fR routine. .TP void \fBNs_ConnSetHeaders\fR(\fIconn, key, value\fR) Append a header of the form \fIkey: value\fR to the \fIoutputheaders\fR. This routine will append a new, possibly duplicate, header regardless of whether a matching header already exists in the \fIoutputheaders\fR. .TP void \fBNs_ConnSetLastModifiedHeader\fR(\fIconn, mtime\fR) This routine appends a \fIlast-modified\fR header if one does not already exists, formatting the given modification time as a proper HTTP timestamp with the \fBNs_HttpTime\fR routine. .TP void \fBNs_ConnSetLengthHeader\fR(\fIconn, length\fR) This routine appends a \fIcontent-length: length\fR header, formatting the given integer length as a string. This routine will also record the response length internally in the \fIconn\fR structure so that it can be later retrieved via the \fBNs_ConnResponseLength\fR routine, for example, as part of a post-connection logging callback. .TP void \fBNs_ConnSetRequiredHeaders\fR(\fIconn, type, length\fR) This routine appends the basic headers normally required for a proper HTTP transaction. These include \fImime-version\fR, \fIdate\fR, and \fIserver\fR as well as the \fIcontent-type: type\fR and \fIcontent-length: length\fR headers for the given arguments. If \fItype\fR is NULL or \fIlength\fR is less than zero, the corresponding headers will not be appended. This routine is often the only header construction routine necessary for request procedures which construct headers manually instead of calling routines such as \fBNs_ConnFlush\fR which handle header construction and queueing automatically. .TP void \fBNs_ConnSetTypeHeader\fR(\fIconn, type\fR) This routine is equivalent to \fBNs_ConnSetHeaders\fR(\fIconn, "content-type", type\fR). .SH "SEE ALSO" Ns_ConnQueueHeaders(3), Ns_ConnFlushHeaders(3), Ns_ConnFlush(3) .SH KEYWORDS headers, response aolserver4-4.5.1/doc/Ns_Adp.30000644000175000017500000000660007645364573015451 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Adp.3,v 1.5 2003/04/10 22:00:27 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Adp 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_AdpRegisterParser, Ns_AdpRequest \- Create and use ADP parsers .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_AdpRegisterParser\fR(\fIchar *extension, Ns_AdpParserProc *newParserProc\fR) .sp int \fBNs_AdpRequest\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions register new ADP parsers and run ADP requests. .TP \fBNs_AdpRegisterParser\fR(\fIextension, newParserProc\fR) Registers a new, named ADP parser procedure with the name given in \fIextension\fR. You can tie a file extension to a particular named parser in the \fBnsd.tcl\fR file. The \fInewParserProc\fR will be called when an ADP with the associated file extension needs to be parsed. If a file extension is registered as an ADP in the \fBnsd.tcl\fR but no parser is associated with that file extension, the default ADP parser is used. The \fInewParserProc\fR must accept two arguments: typedef void (Ns_AdpParserProc)(Ns_DString *out, char *in); The ADP input is pointed to by \fIin\fR. Your parser must process the content of \fIin\fR and append the parsed output to \fIout\fR. The output should be formatted as a series of concatenated "chunks". A chunk is a string of the format: where = 't' or 's'. A 't' means what follows is HTML and should be returned directly to the browser. An 's' means what follows is Tcl and should be evaluated. After the last chunk there should be an extra character. For example, the "adp" parser will take a page like this: This is a test page<%ns_puts hi%>The end<%ns_puts bye%> And create this output: "tThis is a test page\\0sns_puts hi\\0tThe end\\0sns_puts bye\\0\\0" .TP \fBNs_AdpRequest\fR(\fIconn\fR, \fIfile\fR) Parse and evaluate an ADP file. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_DbPool.30000644000175000017500000000473307645364607016127 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_DbPool.3,v 1.5 2003/04/10 22:00:39 shmooved Exp $ '\" '\" .so man.macros .TH Ns_DbPool 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DbBouncePool, Ns_DbPoolAllowable, Ns_DbPoolDefault, Ns_DbPoolDescription, Ns_DbPoolGetHandle, Ns_DbPoolGetMultipleHandles, Ns_DbPoolList, Ns_DbPoolPutHandle, Ns_DbPoolTimedGetHandle, Ns_DbPoolTimedGetMultipleHandles \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DbBouncePool\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolAllowable\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolDefault\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolDescription\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolGetHandle\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolGetMultipleHandles\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolList\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolPutHandle\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolTimedGetHandle\fR(\fIarg, arg\fR) .sp \fBNs_DbPoolTimedGetMultipleHandles\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Cls.30000644000175000017500000000366607545404743015470 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Cls.3,v 1.1 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Cls 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ClsAlloc, Ns_ClsGet, Ns_ClsSet \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_ClsAlloc\fR(\fIarg, arg\fR) .sp \fBNs_ClsGet\fR(\fIarg, arg\fR) .sp \fBNs_ClsSet\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Env.30000644000175000017500000000362507545404743015472 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Env.3,v 1.1 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Env 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_CopyEnviron, Ns_GetEnviron \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_CopyEnviron\fR(\fIarg, arg\fR) .sp \fBNs_GetEnviron\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_QuoteHtml.30000644000175000017500000000414507645364617016670 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_QuoteHtml.3,v 1.5 2003/04/10 22:00:47 shmooved Exp $ '\" '\" .so man.macros .TH Ns_QuoteHtml 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_QuoteHtml \- Quote an HTML string .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_QuoteHtml\fR(\fINs_Dstring *pds, char *string\fR) .BE .SH DESCRIPTION .TP \fBNs_QuoteHtml\fR(\fIpds, string\fR) The Ns_QuoteHtml function appends the given string to the Ns_DString, making the following substitutions that allow HTML to be included in another HTML page as plain text: .CS < < > > & & .CE .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_return.n0000644000175000017500000001253207645314307016406 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_return.n,v 1.3 2003/04/10 16:16:07 shmooved Exp $ '\" '\" .so man.macros .TH ns_return n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_connsendfp, ns_respond, ns_return, ns_returnadminnotice, ns_returnbadrequest, ns_returnerror, ns_returnfile, ns_returnforbidden, ns_returnfp, ns_returnnotfound, ns_returnnotice, ns_returnredirect, ns_returnunauthorized, ns_write \- commands .SH SYNOPSIS \fBns_connsendfp\fR \fIfp len\fR .sp \fBns_respond .sp \fBns_return\fR \fIstatus type string\fR .sp \fBns_returnadminnotice\fR \fIstatus msg\fR ?longmsg? .sp \fBns_returnbadrequest\fR \fIreason\fR .sp \fBns_returnerror\fR \fIstatus msg\fR .sp \fBns_returnfile\fR \fIstatus type filename\fR .sp \fBns_returnforbidden\fR .sp \fBns_returnfp\fR \fIstatus type fileid len\fR .sp \fBns_returnnotfound\fR .sp \fBns_returnnotice\fR \fIstatus msg\fR ?longmsg? .sp \fBns_returnredirect\fR \fIlocation\fR .sp \fBns_returnunauthorized .sp \fBns_write\fR \fIstring\fR .BE .SH DESCRIPTION .PP These procedures provide a simple interface for returning information to the client. They build HTTP/1.0 headers and send the appropriate data out the socket to the client. The script does not end at the time ns_return* is invoked so you can continue processing data after the client has gotten the data and closed the socket. .PP type should be a MIME type (see ns_guesstype manual page for a list). status is a three-digit number fitting the pattern below: .DS 1xx Informational - Not used, but reserved for future use. 2xx Success - The action was successfully received, understood, and accepted. 3xx Redirection - Further action must be taken in order to complete the request. 4xx Client Error - The request contains bad syntax or cannot be fulfilled. 5xx Server Error - The server failed to fulfill an apparently valid request. .DE Some common status values and their meanings are: .DS 201 Created 202 Accepted 203 Provisional Information 204 No Content 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 303 Method 304 Not Modified 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 None Acceptable 407 Proxy Authentication Required 408 Request Time-out 409 Conflict 410 Gone 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Time-out .DE \fBns_connsendfp\fR .RS This function writes len bytes of the specified channel or file to the conn. .RE \fBns_return\fR .RS Sends back both the headers and the string. .RE \fBns_returnadminnotice\fR .RS Wraps the text msg and longmsg in some html, appends a line with a link to "mailto:serveradministrator" based on the virtual server parameter "WebMaster". .RE \fBns_returnbadrequest\fR .RS Returns a 400 status code and a formatted HTML message containing the reason text. .RE \fBns_returnerror\fR .RS Wraps the text msg in some html and returns that to the client. .RE \fBns_returnfile\fR .RS Sends back the headers and the contents of the file. .RE \fBns_returnforbidden\fR .RS Returns a 403 status code. .RE \fBns_returnfp\fR .RS First sends the appropriate headers. Next, it writes out the contents of file from the current file position until the end of the file. .RE \fBns_returnnotfound\fR .RS Returns a 404 status code. .RE \fBns_returnnotice\fR .RS Wraps teh text msg and longmsg in some html and returns that to the client. .RE \fBns_returnredirect\fR .RS Returns a redirect to the passed in location .RE \fBns_returnunauthorized\fR .RS Returns a 401 status code .RE \fBns_write\fR .RS Writes the string out the connection. You can use it instead of the ns_return or ns_respond functions to build HTTP responses. AOLserver will not include the usual headers on the output data. The script does not end at the time ns_write* is invoked so you can continue processing data after the client has gotten the data and closed the socket. .RE .PP .SH "SEE ALSO" .sp ns_respond(n), ns_writefp(n) .SH KEYWORDS .sp aolserver4-4.5.1/doc/Ns_Log.30000644000175000017500000000430307645364615015461 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Log.3,v 1.5 2003/04/10 22:00:45 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Log 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_Fatal, Ns_Log, Ns_LogRoll, Ns_LogTime, Ns_LogTime2, Ns_TclLogError, Ns_TclLogErrorRequest, ns_serverLog \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_Fatal\fR(\fIarg, arg\fR) .sp \fBNs_Log\fR(\fIarg, arg\fR) .sp \fBNs_LogRoll\fR(\fIarg, arg\fR) .sp \fBNs_LogTime\fR(\fIarg, arg\fR) .sp \fBNs_LogTime2\fR(\fIarg, arg\fR) .sp \fBNs_TclLogError\fR(\fIarg, arg\fR) .sp \fBNs_TclLogErrorRequest\fR(\fIarg, arg\fR) .sp \fBns_serverLog\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Nsd.30000644000175000017500000000370407645364616015471 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Nsd.3,v 1.5 2003/04/10 22:00:46 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Nsd 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_Main, Ns_StopServer, Ns_WaitForStartup \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_Main\fR(\fIarg, arg\fR) .sp \fBNs_StopServer\fR(\fIarg, arg\fR) .sp \fBNs_WaitForStartup\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ThreadAlloc.30000644000175000017500000000612007645364640017117 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ThreadAlloc.3,v 1.5 2003/04/10 22:01:04 shmooved Exp $ '\" '\" .so man.macros .TH Ns_ThreadAlloc 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ThreadAlloc, Ns_ThreadCalloc, Ns_ThreadFree, Ns_ThreadMalloc, Ns_ThreadPool, Ns_ThreadRealloc, Ns_ThreadStrCopy, Ns_ThreadStrDup \- Memory allocation functions for threads (deprecated) .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void * \fBNs_ThreadAlloc\fR(\fIsize_t size\fR) .sp void * \fBNs_ThreadCalloc\fR(\fIsize_t nelem, size_t elsize\fR) .sp void \fBNs_ThreadFree\fR(\fIvoid *ptr\fR) .sp void * \fBNs_ThreadMalloc\fR(\fIsize_t size\fR) .sp Ns_Pool * \fBNs_ThreadPool\fR(\fIvoid\fR) .sp void * \fBNs_ThreadRealloc\fR(\fIvoid *ptr, size_t size\fR) .sp char * \fBNs_ThreadStrCopy\fR(\fIchar *str\fR) .sp char * \fBNs_ThreadStrDup\fR(\fIchar *str\fR) .BE .SH DESCRIPTION .PP These functions are deprecated and are actually wrappers around other functions. You should use the other functions directly. .TP \fBNs_ThreadAlloc\fR(\fIsize\fR) A wrapper for Ns_ThreadMalloc. .TP \fBNs_ThreadCalloc\fR(\fInelem, elsize\fR) A wrapper for ns_calloc. .TP \fBNs_ThreadFree\fR(\fIptr\fR) A wrapper for ns_free. .TP \fBNs_ThreadMalloc\fR(\fIsize\fR) A wrapper for ns_malloc. .TP \fBNs_ThreadPool\fR() Deprecated. Always returns a -1. .TP \fBNs_ThreadRealloc\fR(\fIptr, size\fR) A wrapper for ns_realloc. .TP \fBNs_ThreadStrCopy\fR(\fIstr\fR) A wrapper for ns_strcopy. .TP \fBNs_ThreadStrDup\fR(\fIstr\fR) A wrapper for ns_strdup. .SH "SEE ALSO" nsd(1), info(n), ns_calloc(3), ns_malloc(3), ns_realloc(3), ns_free(3), ns_strcopy(3), ns_strdup(3) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Set.30000644000175000017500000000611207645364631015471 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Set.3,v 1.5 2003/04/10 22:00:57 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Set 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_SetCopy, Ns_SetCreate, Ns_SetDelete, Ns_SetDeleteKey, Ns_SetFind, Ns_SetFindCmp, Ns_SetFree, Ns_SetGet, Ns_SetGetCmp, Ns_SetIDeleteKey, Ns_SetIFind, Ns_SetIGet, Ns_SetIUnique, Ns_SetListFind, Ns_SetListFree, Ns_SetMerge, Ns_SetMove, Ns_SetPrint, Ns_SetPut, Ns_SetPutValue, Ns_SetSplit, Ns_SetTrunc, Ns_SetUnique, Ns_SetUniqueCmp, Ns_SetUpdate \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_SetCopy\fR(\fIarg, arg\fR) .sp \fBNs_SetCreate\fR(\fIarg, arg\fR) .sp \fBNs_SetDelete\fR(\fIarg, arg\fR) .sp \fBNs_SetDeleteKey\fR(\fIarg, arg\fR) .sp \fBNs_SetFind\fR(\fIarg, arg\fR) .sp \fBNs_SetFindCmp\fR(\fIarg, arg\fR) .sp \fBNs_SetFree\fR(\fIarg, arg\fR) .sp \fBNs_SetGet\fR(\fIarg, arg\fR) .sp \fBNs_SetGetCmp\fR(\fIarg, arg\fR) .sp \fBNs_SetIDeleteKey\fR(\fIarg, arg\fR) .sp \fBNs_SetIFind\fR(\fIarg, arg\fR) .sp \fBNs_SetIGet\fR(\fIarg, arg\fR) .sp \fBNs_SetIUnique\fR(\fIarg, arg\fR) .sp \fBNs_SetListFind\fR(\fIarg, arg\fR) .sp \fBNs_SetListFree\fR(\fIarg, arg\fR) .sp \fBNs_SetMerge\fR(\fIarg, arg\fR) .sp \fBNs_SetMove\fR(\fIarg, arg\fR) .sp \fBNs_SetPrint\fR(\fIarg, arg\fR) .sp \fBNs_SetPut\fR(\fIarg, arg\fR) .sp \fBNs_SetPutValue\fR(\fIarg, arg\fR) .sp \fBNs_SetSplit\fR(\fIarg, arg\fR) .sp \fBNs_SetTrunc\fR(\fIarg, arg\fR) .sp \fBNs_SetUnique\fR(\fIarg, arg\fR) .sp \fBNs_SetUniqueCmp\fR(\fIarg, arg\fR) .sp \fBNs_SetUpdate\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_include.n0000644000175000017500000002126110417520540017322 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_include.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_include n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_argc, ns_adp_argv, ns_adp_bind_args, ns_adp_dir, ns_adp_eval, ns_adp_ident, ns_adp_include, ns_adp_parse, ns_adp_safeeval \- ADP execution commands .SH SYNOPSIS .nf \fBns_adp_argc\fR \fBns_adp_argv\fR ?\fIindex\fR? \fBns_adp_bind_args\fR \fIvar1\fR ?\fIvar2...\fR? \fBns_adp_dir\fR \fBns_adp_eval\fR \fIpage\fR ?\fIarg ...\fR? \fBns_adp_ident\fR ?\fIstring\fR? \fBns_adp_include\fR ?\fI-cache seconds\fR? ?\fI-nocache\fR? \fIfile \fR?\fIarg ...\fR? \fBns_adp_parse ?\fI-file file\fR? ?\fI-string string\fR? ?\fI-savedresult varName\fR? ?\fI-cwd path\fR? ?\fIargs ... \fR? \fBns_adp_safeeval\fR \fIpage\fR ?\fIarg ...\fR? .fi .BE .SH DESCRIPTION .PP These commands enable execution of ADP files or strings. Each call to \fBns_adp_include\fR results in a new ADP "call frame" similar to a Tcl procedure with local variable scope. Variables may be passed to these call frames as optional arguements and then accessed via the \fBns_adp_argc\fR, \fBns_adp_argv\fR, and \fBns_adp_bind_args\fR commands. The \fBns_adp_eval\fR, \fBns_adp_safeeval\fR, or \fRns_adp_parse\fR can also accept arguments via the same mechanism but execute in the same ADP call frame as their parent, i.e., with the same local variables. See the \fBns_adp\fR page for details on ADP syntax and control flow. .TP \fBns_adp_argc\fR This command returns the number of optional arguments passed to the ADP. The count includes the argument for the ADP file or string. .TP \fBns_adp_argv\fR ?\fIindex ?default?\fR? This command returns the list of arguments passed to the ADP. If the optional \fIindex\fR argument is specified, only the given argument is returned instead of the full list. If the optional \fIdefault\fR argument is specified along with an \fIindex\fR argument, it serves as the value to return if the cooresponding index was not passed to the call frame. .TP \fBns_adp_bind_args\fR \fIvar1\fR ?\fIvar2...\fR? This command can be used to set multiple optional ADP arguments to a list of local variables. Argument binding begins with argument number 1, i.e., the first argument beyond the ADP file or script. .TP \fBns_adp_dir\fR This command returns the directory in which the ADP currently being processed resides and which relative ADP files will be found. .TP \fBns_adp_eval\fR \fIpage\fR ?\fIarg ...\fR? This command evaluates the ADP specified by \fIpage\fR and returns the output as the result. If any arguments are specified, they will be passed to the ADP. .TP \fBns_adp_ident\fR ?\fIstring\fR? This command returns and/or sets an arbitrary version management string for the given ADP file. It could be used to specify a header replaced via a CVS/RCS checkin: .CS <% ns_adp_ident {$Header: /cvsroot/aolserver/aolserver/doc/ns_adp_include.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $} %> .CE .TP \fBns_adp_include\fR ?\fI-cache seconds\fR? ?\fI-nocache\fR? \fIfile \fR?\fIarg ...\fR? This command parses the specified file as an ADP, including the text blocks and any output generated by script blocks in the current output buffer. The execution occurs in a new call frame with private local variables similar to a Tcl procedure. The \fIfilename\fR is the file containing the ADP to be parsed. If the file is not an absolute filename, the file is considered relative to the current ADP working directory which is the directory of the previously included file. Optional arguments (\fIarg...\fR) can be passed to the included ADP; see the \fBns_adp_argv\fR command above for details on accessing the values of these variables. The optional \fI-cache seconds\fR argument specifies the time to cache the results of execution. All output generated by any scripts and included ADP's are saved for subsequent requests unless an included ADP has a \fI-nocache\fR option. The use of \fI-cache\fR and \fI-nocache\fR can be used to increase performance of ADP used to generated a mix of personalized, non-cacheable, content and shared content which changes more slowly. Under high load, the performance improvement can be substaintial, especially in cases where the cached content is the result of accessing a slow databases or web services. See the \fBEXAMPLES\fR section for an example of using cached output. .TP \fBns_adp_parse ?\fI-file file\fR? ?\fI-string string\fR? ?\fI-savedresult varName\fR? ?\fI-cwd path\fR? ?\fIargs ... \fR? This function processes the specified ADP file or string and returns the result as a string. Processing a second ADP from inside an ADP is normally best done with \fBns_adp_include\fR as that command resolves relative pathnames passed to it. Also note that \fBns_adp_parse\fR will ignore any directives to turn on streaming. Tcl_Eval is used to evaluate the Tcl commands in the ADP. .sp The \fI-string adp\fR option can be used to parse a string of ADP text. Although the \fI<% ... %>\fR syntax is allowed in the string, if you have this embedded in an ADP, you have to be careful in constructing the string that you do not prematurely terminate an enclosing script. .sp The \fI-file file\fR option can be used to parse ADP contained in the given file. This use is similar to that of \fBns_adp_include\fR except the result is returned by the command instead of automatically being appended to the output stream. .sp The \fI-global\fR and \fI-local\fR options are deprecated. All calls are now local to the current ADP call frame such that the \fI-local\fR option is ignored and the \fI-global\fR option generates an error. .sp Additional arguments are passed to the ADP execution and can be accessed via the \fBns_adp_argc\fR, \fBns_adp_argv\fR, and \fBns_adp_bind_args\fR commands. .TP \fBns_adp_safeeval\fR \fIstring\fR ?\fIarg ...\fR? The command evaluates the given ADP string in a safe environment which ignores all cases of \fI<% ... %>\fR and \fI<%= ... %>\fR commands, only allowing execution of per-defined registered tags. This usage can be helpful to expose a limited set of dynamic functionality to publishing staff without exposing the full command set. .SH EXAMPLE The following example demonstrates passing an argument to an included ADP file: .CS <% ns_adp_include included.adp arg1 arg2 arg3 %> .CE .PP The variables could be accessed within \fIincluded.adp\fR with: .CS ns_adp_argc \fI--> return 4\fR ns_adp_argv 1 \fI--> returns "arg1"\fR ns_adp_argv 10 MyDefault \fI--> returns "MyDefault" as there is no 10th argument\fR .CE The followiong example demonstrates using the \fI-cache\fR and \fI-nocache\fR options to the \fBns_adp_include\fR command to enhance performance through caching execution output. Given the following files: .PP \fItop.adp:\fR .CS <% ns_adp_include -cache 60 cached.adp %> .CE .PP \fIcached.adp:\fR .CS <% ns_adp_puts "Time at cache: [ns_time]" ns_adp_include -nocache nocache.adp %> .CE .PP \fInocache.adp:\fR .RE .CS <% ns_adp_puts "Time now: [ns_time]" %> .CE .PP the results of \fIcached.adp\fR will only update once every 60 seconds while the results of \fInocache.adp\fR will be executed on each request, even though it's included withing \fIcached.adp\fR. .SH "SEE ALSO" ns_adp_ctl(1), ns_adp_puts(n), ns_adp_flush(n), ns_adp_close(n) .SH KEYWORDS ADP, dynamic pages, execution aolserver4-4.5.1/doc/Ns_Tls.30000644000175000017500000000372107645364641015504 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Tls.3,v 1.5 2003/04/10 22:01:05 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Tls 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME , Ns_TlsAlloc, Ns_TlsGet, Ns_TlsSet \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fB\fR(\fIarg, arg\fR) .sp \fBNs_TlsAlloc\fR(\fIarg, arg\fR) .sp \fBNs_TlsGet\fR(\fIarg, arg\fR) .sp \fBNs_TlsSet\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Uid.30000644000175000017500000000472507645364641015470 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Uid.3,v 1.4 2003/04/10 22:01:05 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Uid 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_GetGid, Ns_GetUid, Ns_GetUserGid, Ns_GetUserHome \- Get info about users and groups on Unix system .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_GetGid\fR(\fIchar *group\fR) .sp int \fBNs_GetUid\fR(\fIchar *user\fR) .sp int \fBNs_GetUserGid\fR(\fIchar *user\fR) .sp int \fBNs_GetUserHome\fR(\fINs_DString *pds, char *user\fR) .BE .SH DESCRIPTION .TP \fBNs_GetGid\fR(\fIgroup\fR) Return the running server's Unix group id. .TP \fBNs_GetUid\fR(\fIuser\fR) Return the running server's Unix user id. .TP \fBNs_GetUserGid\fR(\fIuser\fR) Return the Unix group id for the given user. .TP \fBNs_GetUserHome\fR(\fIpds, user\fR) The Ns_GetUserHome function returns NS_TRUE and appends the user's home directory to the Ns_DString passed in, or it returns NS_FALSE if the user does not exist. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Url.30000644000175000017500000000606407645364643015511 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Url.3,v 1.4 2003/04/10 22:01:07 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Url 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_AbsoluteUrl, Ns_ParseUrl, Ns_RelativeUrl, Ns_SkipUrl \- URL manipulation routines .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_AbsoluteUrl\fR(\fINs_DString *pds, char *url, char *baseurl\fR) .sp int \fBNs_ParseUrl\fR(\fIchar *url, char **pprotocol, char **phost, char **pport, char **ppath, char **ptail\fR) .sp char * \fBNs_RelativeUrl\fR(\fIchar *url, char *location\fR) .sp char * \fBNs_SkipUrl\fR(\fINs_Request *request, int n\fR) .BE .SH DESCRIPTION .TP \fBNs_AbsoluteUrl\fR(\fIpds, url, baseurl\fR) Construct an URL based on baseurl but with as many parts of the incomplete url as possible. Return NS_OK or NS_ERROR. .TP \fBNs_ParseUrl\fR(\fIurl, pprotocol, phost, pport, ppath, ptail\fR) Parse a URL into its component parts. Pointers to the protocol, host, port, path, and "tail" (last path element) will be set by reference in the passed-in pointers. The passed-in url will be modified. .TP \fBNs_RelativeUrl\fR(\fIurl, location\fR) If the url passed in is for this server, then the initial part of the URL is stripped off. e.g., on a server whose location is http://www.foo.com, Ns_RelativeUrl of "http://www.foo.com/hello" will return "/hello". Returns a pointer to the beginning of the relative url in the passed-in url, or NULL if error. Will set errno on error. .TP \fBNs_SkipUrl\fR(\fIrequest, n\fR) Return a pointer n elements into the request's url. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnQueueHeaders.30000644000175000017500000000761710421472532020131 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnQueueHeaders.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnQueueHeaders 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnQueueHeaders, Ns_ConnFlushHeaders \- Routines to construct send HTTP response headers .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_ConnFlushHeaders\fR(\fIconn, status\fR) .sp void \fBNs_ConnQueueHeaders\fR(\fIconn, status\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP int status in HTTP response status. .BE .SH DESCRIPTION .PP These function format headers pending in the \fIoutputheaders\fR Ns_Set of the given \fIconn\fR Ns_Conn structure to be sent to the client. The headers data along with a preceeding HTTP response line with the given \fIstatus\fR code (e.g., "HTTP/1.1 200 OK") is formatted as a single string with \fI\r\n\fR separators between header \fIkey: value\fR pairs and a trailing \fI\r\n\fR to indicate end of headers. .TP int \fBNs_ConnFlushHeaders\fR(\fIconn\fR) This routine constructs the headers and then attempts to send them immediately to the client. The result is either NS_OK if the content was sent, NS_ERROR otherwise. .TP void \fBNs_ConnQueueHeaders\fR(\fIconn\fR) This routine constructs the headers as with \fBNs_ConnFlushHeaders\fR but does not send the data to the client. Instead, the resulting headers string is stored in an internal buffer to be sent later on the first call to \fBNs_ConnSend\fR. Delaying the flush of the content helps increase performance by providing the opportunity to combine the headers and content responses into a single system call. .PP Note that higher level routines which generate complete responses such as the \fBNs_ConnReturn\fR routines or \fBNs_ConnFlush\fR call \fBNs_ConnQueueHeaders\fR automatically as needed. Only custom code which constructs headers manually and sends content directly must include a call to \fBNs_ConnQueueHeaders\fR or \fBNs_ConnFlushHeaders\fR before generating the output content. .SH EXAMPLES The following example demonstrates a simple response. In this case, the headers are queued and sent with the small "hello" message on the call to \fBNs_ConnPuts\fR which internally calls \fBNs_ConnSend\fR: .CS Ns_ConnSetRequiredHeaders(conn, "text/plain", 5); Ns_ConnQueueHeaders(conn, 200); Ns_ConnPuts(conn, "hello"); .CE .SH "SEE ALSO" Ns_ConnSetHeaders(3), Ns_ConnSend(3) .SH KEYWORDS connection, headers aolserver4-4.5.1/doc/Ns_Pool.30000644000175000017500000000451707645364617015662 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Pool.3,v 1.5 2003/04/10 22:00:47 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Pool 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_PoolAlloc, Ns_PoolBlockSize, Ns_PoolCalloc, Ns_PoolCreate, Ns_PoolDestroy, Ns_PoolFlush, Ns_PoolFree, Ns_PoolRealloc, Ns_PoolStrCopy, Ns_PoolStrDup \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_PoolAlloc\fR(\fIarg, arg\fR) .sp \fBNs_PoolBlockSize\fR(\fIarg, arg\fR) .sp \fBNs_PoolCalloc\fR(\fIarg, arg\fR) .sp \fBNs_PoolCreate\fR(\fIarg, arg\fR) .sp \fBNs_PoolDestroy\fR(\fIarg, arg\fR) .sp \fBNs_PoolFlush\fR(\fIarg, arg\fR) .sp \fBNs_PoolFree\fR(\fIarg, arg\fR) .sp \fBNs_PoolRealloc\fR(\fIarg, arg\fR) .sp \fBNs_PoolStrCopy\fR(\fIarg, arg\fR) .sp \fBNs_PoolStrDup\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnReturnStatus.30000644000175000017500000001362110453352232020223 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnReturnStatus.3,v 1.3 2006/07/07 03:27:22 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnReturnStatus 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnReturnBadRequest, Ns_ConnReturnForbidden, Ns_ConnReturnInternalError, Ns_ConnReturnNoResponse, Ns_ConnReturnNotFound, Ns_ConnReturnNotImplemented, Ns_ConnReturnNotModified, Ns_ConnReturnOk, Ns_ConnReturnStatus, Ns_ConnReturnUnauthorized, Ns_RegisterRedirect \- Routines to return simple standard responses .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnReturnBadRequest\fR(\fIconn, msg\fR) .sp int \fBNs_ConnReturnForbidden\fR(\fIconn\fR) .sp int \fBNs_ConnReturnInternalError\fR(\fIconn\fR) .sp int \fBNs_ConnReturnNoResponse\fR(\fIconn\fR) .sp int \fBNs_ConnReturnNotFound\fR(\fIconn\fR) .sp int \fBNs_ConnReturnNotImplemented\fR(\fIconn\fR) .sp int \fBNs_ConnReturnNotModified\fR(\fIconn\fR) .sp int \fBNs_ConnReturnOk\fR(\fIconn\fR) .sp int \fBNs_ConnReturnStatus\fR(\fIconn, status\fR) .sp int \fBNs_ConnReturnUnauthorized\fR(\fIconn\fR) .sp void \fBNs_RegisterRedirect\fR(\fIserver, status, url\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP char *msg in String with additional message text. .AP int status in Integer HTTP status code. .AP char *url in String which specifies internal redirection url. .AP char *server in Virtual server. .BE .SH DESCRIPTION .PP These routines are used to generate complete responses, including headers, approriate status codes, content types, and possibly short HTML content messages for the most common HTTP error or status responses. They each coorespond to a particular HTTP status code, for example, \fBNs_ConnReturnNotFound\fR generates an HTTP 404 "Not Found" response. They all return NS_OK if the response was sent or NS_ERROR if an underlying routine failed. .PP The default behavior is to return an internal, server generated response possibly with a short English language message, for example "The requested URL cannot be accessed by this server". This behavior can be modified by calling the \fBNs_RegisterRedirect\fR to redirect responses internally for the cooresponding HTTP status code to another URL on the server. The "redirects" server config section can be used to map these redirects at startup .TP int \fBNs_ConnReturnBadRequest\fR(\fIconn, msg\fR) Returns an HTTP 400 response with the short HTML message "Invalid Request: The HTTP request presented by your browser is invalid." The optional \fImsg\fR string, if present, is also included in the message body. .TP int \fBNs_ConnReturnForbidden\fR(\fIconn\fR) Returns an HTTP 403 response with the short HTML message "Forbidden: The requested URL cannot be accessed by this server." .TP int \fBNs_ConnReturnInternalError\fR(\fIconn\fR) Returns an HTTP 500 response with the short HTML message "Server Error: The requested URL cannot be accessed due to a system error on this server." .TP int \fBNs_ConnReturnNoResponse\fR(\fIconn\fR) Equivalent to \fBNs_ConnReturnStatus\fR(\fIconn, 204\fR). .TP int \fBNs_ConnReturnNotFound\fR(\fIconn\fR) Returns an HTTP 404 response with the short HTML message "Not Found: The requested URL was not found on this server." .TP int \fBNs_ConnReturnNotImplemented\fR(\fIconn\fR) Returns an HTTP 404 response with the short HTML message "Not Implemented: The requested URL or method is not implemented by this server." .TP int \fBNs_ConnReturnNotModified\fR(\fIconn\fR) Equivalent to \fBNs_ConnReturnStatus\fR(\fIconn, 304\fR). .TP int \fBNs_ConnReturnOk\fR(\fIconn\fR) Equivalent to \fBNs_ConnReturnStatus\fR(\fIconn, 200\fR). .TP int \fBNs_ConnReturnStatus\fR(\fIconn, status\fR) Generates a response with the given HTTP \fIstatus\fR with no content. .TP int \fBNs_ConnReturnUnauthorized\fR(\fIconn\fR) Returns an HTTP 401 response with the short HTML message "Access Denied: The requested URL cannot be accessed because a valid username and password are required." As "WWW-Authenticate: Basic realm=\fIserver realm\fR" header is also included in the response. .TP void \fBNs_RegisterRedirect\fR(\fIserver, status, url\fR) Redirect the above responses from the given \fIserver\fR for the given \fIstatus\fR code from the simple internal messages described above to the given internal \fRurl\fR. The redirect is performed using \fBNs_ConnRedirect\fR. .SH "SEE ALSO" Ns_ConnFlush(3), Ns_ConnRedirect(3), Ns_ConnSetRequiredHeaders(3), Ns_ConnQueueHeaders(3), ns_return(n) .SH KEYWORDS connnection, response aolserver4-4.5.1/doc/Ns_Rand.30000644000175000017500000000360507645364617015632 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Rand.3,v 1.5 2003/04/10 22:00:47 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Rand 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DRand, Ns_GenSeeds \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DRand\fR(\fIarg, arg\fR) .sp \fBNs_GenSeeds\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_modulepath.n0000644000175000017500000000351307645364655017243 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_modulepath.n,v 1.4 2003/04/10 22:01:17 shmooved Exp $ '\" '\" .so man.macros .TH ns_modulepath n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_modulepath \- commands .SH SYNOPSIS \fBns_modulepath \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Reentrant.30000644000175000017500000000420607645364617016706 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Reentrant.3,v 1.5 2003/04/10 22:00:47 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Reentrant 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_asctime, ns_ctime, ns_gmtime, ns_inet_ntoa, ns_localtime, ns_readdir, ns_strtok \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBns_asctime\fR(\fIarg, arg\fR) .sp \fBns_ctime\fR(\fIarg, arg\fR) .sp \fBns_gmtime\fR(\fIarg, arg\fR) .sp \fBns_inet_ntoa\fR(\fIarg, arg\fR) .sp \fBns_localtime\fR(\fIarg, arg\fR) .sp \fBns_readdir\fR(\fIarg, arg\fR) .sp \fBns_strtok\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_DString.30000644000175000017500000002502707645364605016317 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_DString.3,v 1.5 2003/04/10 22:00:37 shmooved Exp $ '\" '\" .so man.macros .TH Ns_DString 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DStringAppend, Ns_DStringAppendArg, Ns_DStringAppendElement, Ns_DStringExport, Ns_DStringFree, Ns_DStringInit, Ns_DStringLength, Ns_DStringNAppend, Ns_DStringPop, Ns_DStringPrintf, Ns_DStringPush, Ns_DStringSetLength, Ns_DStringTrunc, Ns_DStringValue, Ns_DStringVarAppend \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_DStringAppend\fR(\fINs_DString *dsPtr, char *string\fR) .sp char * \fBNs_DStringAppendArg\fR(\fINs_DString *dsPtr, char *string\fR) .sp char * \fBNs_DStringAppendElement\fR(\fINs_DString *dsPtr, char *string\fR) .sp char * \fBNs_DStringExport\fR(\fINs_DString *dsPtr\fR) .sp void \fBNs_DStringFree\fR(\fINs_DString *dsPtr\fR) .sp void \fBNs_DStringInit\fR(\fINs_DString *dsPtr\fR) .sp int \fBNs_DStringLength\fR(\fINs_DString *dsPtr\fR) .sp char * \fBNs_DStringNAppend\fR(\fINs_DString *dsPtr, char *string, int length\fR) .sp Ns_DString * \fBNs_DStringPop\fR(\fIvoid\fR) .sp char * \fBNs_DStringPrintf\fR(\fINs_DString *dsPtr, char *fmt,...\fR) .sp void \fBNs_DStringPush\fR(\fINs_DString *dsPtr\fR) .sp void \fBNs_DStringSetLength\fR(\fINs_DString *dsPtr, int length\fR) .sp void \fBNs_DStringTrunc\fR(\fINs_DString *dsPtr, int length\fR) .sp char * \fBNs_DStringValue\fR(\fINs_DString *dsPtr\fR) .sp char * \fBNs_DStringVarAppend\fR(\fINs_DString *dsPtr, ...\fR) .BE .SH DESCRIPTION .PP These functions create, manipulate and destroy Ns_DStrings. Ns_DStrings are structures that store strings and information about the string length. These dynamic strings grow as need to fit the strings placed in them or appended to them. If the Ns_DString plus the appended string are larger than the size of original string within the Ns_DString, for example, the Ns_DString will be automatically extended by allocating more memory to it. .PP Many functions return string pointers that point directly to the string within an Ns_DString structure. You must not free these returned string pointers with Ns_Free or any other freeing function, but must instead use Ns_DStringFree to free memory associated with the Ns_DString. .TP \fBNs_DStringAppend\fR(\fIdsPtr, string\fR) Append the specified string plus a terminating null character to the end of the Ns_DString. Returns the string associated with the current Ns_DString. The Ns_DString ds of the following code would contain "foo\0" and have a length of 3: .CS Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringAppend(&ds, "foo"); /* do something with the dstring */ printf("%s\n", ds.string); /* finished with dstring */ Ns_DStringFree(&ds); .CE .TP \fBNs_DStringAppendArg\fR(\fIdsPtr, string\fR) Append the specified argument plus a terminating null character to the end of the Ns_DString. It is useful for making strings like "foo\0bar\0baz\0". The string pointer associated with the current Ns_DString is returned. .TP \fBNs_DStringAppendElement\fR(\fIdsPtr, string\fR) Append a list element to the current value of a dynamic string. The string argument is reformatted as a list element and added to the current value of the Ns_DString. The return value is a pointer to the dynamic string's new value. .TP \fBNs_DStringExport\fR(\fIdsPtr\fR) Returns the current Ns_DString string and leaves the Ns_DString in the initialized state. In this case, the string returned needs to be freed eventually with \fBNs_Free\fR because the string pointer returned is not a part of the Ns_DString any longer. .CS Ns_DString ds; char *stringdest; Ns_DStringInit(&ds); Ns_DStringAppend(&ds, "foo"); stringdest = Ns_DStringExport(&ds); /* do something with .stringdest. */ Ns_Free(stringdest); .CE .TP \fBNs_DStringFree\fR(\fIdsPtr\fR) Free any allocated memory used by an Ns_DString. .TP \fBNs_DStringInit\fR(\fIdsPtr\fR) Initialize an Ns_DString. Before using an Ns_DString, you must initialize it with Ns_DStringInit. Storage for an Ns_DString is often on the stack in the calling function. The example below shows a typical usage. .CS int MyFunctions(int a, int b) { Ns_DString ds; Ns_DStringInit(&ds); /* * ds is now initialized and ready to * pass to another function */ ... } .CE .TP \fBNs_DStringLength\fR(\fIdsPtr\fR) Return the current length of the string value that is contained within an Ns_DString. .CS Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringAppend(&ds, ""); printf("len=%d\n", Ns_DStringLength(&ds)); /* finished with dstring */ Ns_DStringFree(&ds); .CE .TP \fBNs_DStringNAppend\fR(\fIdsPtr, string, length\fR) Append n-characters of string to Ns_DString dsPtr. The function appends a string up to the specified number of characters, plus a terminating null character. Unlike the Tcl_DStringAppend function, which only works with string data, the AOLserver Ns_DStringNAppend function can append binary data. Returns the string associated with the current Ns_DString. .CS The resulting Ns_DString in this example, ds would contain "foo\0" and have a length of 3: Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringNAppend(&ds, "fooasdf", 3); printf("%s\n", ds.string); Ns_DStringFree(&ds); /* finished with dstring */ If you need a null-terminated list of null-terminated strings, such as "foo\0bar\0\0", you would add one to the length of the appended strings to get the extra terminating null character. For example: Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringNAppend(&ds, "foo", 4); Ns_DStringNAppend(&ds, "bar", 4); .CE .TP \fBNs_DStringPop\fR(\fIvoid\fR) Pop an Ns_DString from the per-thread cache, allocating the space for the Ns_DString if necessary. This will initialize Thread Local Storage (TLS) and configure parameters on first use. TLS is a means of storing data associated with a particular thread within the thread's context, so that it is always available to that thread. A pointer to the initialized Ns_DString is returned. .TP \fBNs_DStringPrintf\fR(\fIdsPtr, fmt, ...\fR) Append a formatted string to an Ns_DString. The Ns_DStringPrintf function appends a string that has been created by calling the sprintf function with the given format and optional arguments. This function currently uses a fixed length buffer of 1024 characters to sprintf() the data before appending to the Ns_DString. .CS Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringPrintf(&ds, "/path%d", getpid()); /* do something with dstring */ printf ("%s\n", ds.string); /* finished with dstring */ Ns_DStringFree(&ds); .CE .TP \fBNs_DStringPush\fR(\fIdsPtr\fR) Push an Ns_DString onto the per-thread cache. The Ns_DString will be free'd if the maximum number of entries or the maximum size parameters have been exceeded. The contents held by the Ns_DString are destroyed. This is a performance function. Creating Ns_DStrings is a more expensive operation than cleaning out an already-existing Ns_DString and storing it for later use by the same thread. .TP \fBNs_DStringSetLength\fR(\fIdsPtr, length\fR) The length of dsPtr is changed to length and a null byte is stored at that position in the string. If length is larger than the space allocated for dsPtr, then a panic occurs. .TP \fBNs_DStringTrunc\fR(\fIdsPtr, length\fR) Truncate an Ns_DString. The Ns_DStringTrunc function truncates an Ns_DString to the given length. Unlike Ns_DStringFree, which truncates the Ns_DString to length 0 and frees any memory that may have been allocated on the heap, Ns_DStringTrunc allows you to truncate the string to any length. It maintains any memory allocated on the heap. This function is useful in a loop where the Ns_DString is likely to overflow the static space each time through. Using Ns_DStringTrunc instead of Ns_DStringFree will avoid having the Ns_DString call malloc to obtain the addition space in each iteration. You will need to call Ns_DStringFree eventually to free any space that may have been allocated for the Ns_DString. .CS Ns_DString ds; int i; Ns_DStringInit(&ds); for (i=0; i < 50; i++) { Ns_DStringPrintf(&ds, "%s%d", "aBigString", i); /* do something with the dstring constructed above */ Ns_DStringTrunc(&ds, 0); } .CE .TP \fBNs_DStringValue\fR(\fIdsPtr\fR) Return the current value of an Ns_DString. The Ns_DStringValue macro returns a pointer to the current value of an Ns_DString. This may be a pointer to the Ns_DString.s static space or to a string allocated on the heap if the static space has overflowed. It is not safe to use the value returned by this macro after an intervening call to Ns_DStringAppend because the Ns_DString string could overflow to or move within the heap. .CS Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringAppend(&ds, "foo"); /* do something with the dstring */ printf ("%s\n", Ns_DStringValue(&ds)); Ns_DStringFree(&ds); .CE .TP \fBNs_DStringVarAppend\fR(\fIdsPtr, ...\fR) Append a variable number of strings to an Ns_DString. The Ns_DStringVarAppend function appends a variable number of strings to an Ns_DString. The list must end with NULL. .CS Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, "foo", "bar", NULL); /* do something with the dstring */ printf ("%s\n", ds.string); Ns_DStringFree(&ds); .CE .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Sema.30000644000175000017500000000402407645364627015630 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Sema.3,v 1.5 2003/04/10 22:00:55 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Sema 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME , Ns_SemaDestroy, Ns_SemaInit, Ns_SemaPost, Ns_SemaWait \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fB\fR(\fIarg, arg\fR) .sp \fBNs_SemaDestroy\fR(\fIarg, arg\fR) .sp \fBNs_SemaInit\fR(\fIarg, arg\fR) .sp \fBNs_SemaPost\fR(\fIarg, arg\fR) .sp \fBNs_SemaWait\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Cache.30000644000175000017500000000646307666211701015742 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Cache.3,v 1.6 2003/05/31 20:42:41 vasiljevic Exp $ '\" '\" .so man.macros .TH Ns_Cache 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_CacheBroadcast, Ns_CacheCreate, Ns_CacheCreateEntry, Ns_CacheCreateSz, Ns_CacheDeleteEntry, Ns_CacheDestroy, Ns_CacheFind, Ns_CacheFindEntry, Ns_CacheFirstEntry, Ns_CacheFlush, Ns_CacheFlushEntry, Ns_CacheFree, Ns_CacheGetValue, Ns_CacheKey, Ns_CacheLock, Ns_CacheTryLock, Ns_CacheMalloc, Ns_CacheName, Ns_CacheNextEntry, Ns_CacheSetValue, Ns_CacheSetValueSz, Ns_CacheSignal, Ns_CacheTimedWait, Ns_CacheUnlock, Ns_CacheUnsetValue, Ns_CacheWait \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_CacheBroadcast\fR(\fIarg, arg\fR) .sp \fBNs_CacheCreate\fR(\fIarg, arg\fR) .sp \fBNs_CacheCreateEntry\fR(\fIarg, arg\fR) .sp \fBNs_CacheCreateSz\fR(\fIarg, arg\fR) .sp \fBNs_CacheDeleteEntry\fR(\fIarg, arg\fR) .sp \fBNs_CacheDestroy\fR(\fIarg, arg\fR) .sp \fBNs_CacheFind\fR(\fIarg, arg\fR) .sp \fBNs_CacheFindEntry\fR(\fIarg, arg\fR) .sp \fBNs_CacheFirstEntry\fR(\fIarg, arg\fR) .sp \fBNs_CacheFlush\fR(\fIarg, arg\fR) .sp \fBNs_CacheFlushEntry\fR(\fIarg, arg\fR) .sp \fBNs_CacheFree\fR(\fIarg, arg\fR) .sp \fBNs_CacheGetValue\fR(\fIarg, arg\fR) .sp \fBNs_CacheKey\fR(\fIarg, arg\fR) .sp \fBNs_CacheLock\fR(\fIarg, arg\fR) .sp \fBNs_CacheTryLock\fR(\fIarg, arg\fR) .sp \fBNs_CacheMalloc\fR(\fIarg, arg\fR) .sp \fBNs_CacheName\fR(\fIarg, arg\fR) .sp \fBNs_CacheNextEntry\fR(\fIarg, arg\fR) .sp \fBNs_CacheSetValue\fR(\fIarg, arg\fR) .sp \fBNs_CacheSetValueSz\fR(\fIarg, arg\fR) .sp \fBNs_CacheSignal\fR(\fIarg, arg\fR) .sp \fBNs_CacheTimedWait\fR(\fIarg, arg\fR) .sp \fBNs_CacheUnlock\fR(\fIarg, arg\fR) .sp \fBNs_CacheUnsetValue\fR(\fIarg, arg\fR) .sp \fBNs_CacheWait\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnReturnData.30000644000175000017500000001113510421472532017610 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnReturnData.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnReturnData 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnReturnAdminNotice, Ns_ConnReturnData, Ns_ConnReturnHtml, Ns_ConnReturnNotice \- Routines to generate simple single-buffer responses .SH SYNOPSIS .nf \fB#include "ns.h"\fR int \fBNs_ConnReturnAdminNotice\fR(\fIconn, status, title, msg\fR) .sp int \fBNs_ConnReturnData\fR(\fIconn, status, data, len, type\fR) .sp int \fBNs_ConnReturnCharData\fR(\fIconn, status, data, len, type\fR) .sp int \fBNs_ConnReturnHtml\fR(\fIconn, status, msg, len\fR) .sp int \fBNs_ConnReturnNotice\fR(\fIconn, status, title, msg\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP int status in HTTP response status code. .AP char *type in Output content type. .AP char *title in Pointer to HTML page title string. .AP int len in Length of content buffer. .AP char *data in Pointer to content buffer. .AP char *msg in Pointer to HTML message buffer. .BE .SH DESCRIPTION .PP These routines are used to generate complete responses, including headers, status codes, content types, and the requested data. They all return a status code which is NS_OK if the response was sent or NS_ERROR if an underlying call to sent the content failed. .TP int \fBNs_ConnReturnAdminNotice\fR(\fIconn, status, title, msg\fR) This routine is equivalent to \fBNs_ConnReturnNotice\fR. In prior versions, it would format a slightly different response which was later considered inconsequential. .TP int \fBNs_ConnReturnData\fR(\fIconn, status, data, len, type\fR) Generates a reponse with the given HTTP \fIstatus\fR including a \fIcontent-type\fR header with the given \fItype\fR. Content pointed to by the \fIdata\fR argument of length \fIlen\fR is then sent without any modification via an underlying call to \fBNs_ConnFlushDirect\fR. .TP int \fBNs_ConnReturnCharData\fR(\fIconn, status, data, len, type\fR) Generates a response as with \fBNs_ConnReturnData\fR except that the given content pointed to by \fIdata\fR is assumed to be a text stream which is output encoded using the appropriate Tcl_Encoding based on the given \fItype\fR mimetype and possibly gzip compressed via an underlying call to \fBNs_ConnFlush\fR. .TP int \fBNs_ConnReturnHtml\fR(\fIconn, status, msg, len\fR) This is equivalent to \fBNs_ConnReturnCharData\fR(\fIconn, status, msg, len, "text/html"\fR). .TP int \fBNs_ConnReturnNotice\fR(\fIconn, status, title, msg\fR) Constructs a basic HTML response and sends it via \fBNs_ConnReturnHtml\fR. The \fItitle\fR string is placed both in the portion as well as an

tag in the portion of the document. If the title is NULL, it defaults to the string "Server Message". The \fImsg\fR string, if not NULL, follows the body and is copied unaltered. This routine is useful for generating very basic responses. For example, it is used by the various builtin reponse routines such as \fBNs_ConnReturnUnauthorized\fR. .SH "SEE ALSO" Ns_ConnFlush(3), Ns_ConnReturnFile, Ns_ConnReturnOpenFd, Ns_ConnReturnUnathorized. .SH KEYWORDS connnection, encoding, response aolserver4-4.5.1/doc/nsd.10000644000175000017500000000342107645314311015046 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/nsd.1,v 1.3 2003/04/10 16:16:09 shmooved Exp $ '\" '\" .so man.macros .TH nsd 1 "" AOLserver "AOLserver Applications" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME nsd \- AOLserver program .SH SYNOPSIS \fBnsd\fR ?\fIarg ...\fR? .BE .SH DESCRIPTION .PP \fBNsd\fR is the AOLserver binary. .SH "SEE ALSO" tclsh(n) aolserver4-4.5.1/doc/Ns_Sock.30000644000175000017500000000560607545404743015642 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Sock.3,v 1.2 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Sock 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_BindSock, Ns_GetSockAddr, Ns_SockAccept, Ns_SockAsyncConnect, Ns_SockAsyncConnect2, Ns_SockBind, Ns_SockCloseLater, Ns_SockConnect, Ns_SockConnect2, Ns_SockListen, Ns_SockListenEx, Ns_SockPipe, Ns_SockSetBlocking, Ns_SockSetNonBlocking, Ns_SockStrError, Ns_SockTimedConnect, Ns_SockTimedConnect2, ns_pipe, ns_sockpair \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_BindSock\fR(\fIarg, arg\fR) .sp \fBNs_GetSockAddr\fR(\fIarg, arg\fR) .sp \fBNs_SockAccept\fR(\fIarg, arg\fR) .sp \fBNs_SockAsyncConnect\fR(\fIarg, arg\fR) .sp \fBNs_SockAsyncConnect2\fR(\fIarg, arg\fR) .sp \fBNs_SockBind\fR(\fIarg, arg\fR) .sp \fBNs_SockCloseLater\fR(\fIarg, arg\fR) .sp \fBNs_SockConnect\fR(\fIarg, arg\fR) .sp \fBNs_SockConnect2\fR(\fIarg, arg\fR) .sp \fBNs_SockListen\fR(\fIarg, arg\fR) .sp \fBNs_SockListenEx\fR(\fIarg, arg\fR) .sp \fBNs_SockPipe\fR(\fIarg, arg\fR) .sp \fBNs_SockSetBlocking\fR(\fIarg, arg\fR) .sp \fBNs_SockSetNonBlocking\fR(\fIarg, arg\fR) .sp \fBNs_SockStrError\fR(\fIarg, arg\fR) .sp \fBNs_SockTimedConnect\fR(\fIarg, arg\fR) .sp \fBNs_SockTimedConnect2\fR(\fIarg, arg\fR) .sp \fBns_pipe\fR(\fIarg, arg\fR) .sp \fBns_sockpair\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_DbUtil.30000644000175000017500000000365307645364610016125 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_DbUtil.3,v 1.5 2003/04/10 22:00:40 shmooved Exp $ '\" '\" .so man.macros .TH Ns_DbUtil 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DbInterpretSqlFile, Ns_DbQuoteValue \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DbInterpretSqlFile\fR(\fIarg, arg\fR) .sp \fBNs_DbQuoteValue\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Time.30000644000175000017500000000375507645364640015646 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Time.3,v 1.5 2003/04/10 22:01:04 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Time 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_AdjTime, Ns_DiffTime, Ns_GetTime, Ns_IncrTime \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_AdjTime\fR(\fIarg, arg\fR) .sp \fBNs_DiffTime\fR(\fIarg, arg\fR) .sp \fBNs_GetTime\fR(\fIarg, arg\fR) .sp \fBNs_IncrTime\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_rollfile.n0000644000175000017500000000350307645364661016705 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_rollfile.n,v 1.4 2003/04/10 22:01:21 shmooved Exp $ '\" '\" .so man.macros .TH ns_rollfile n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_rollfile \- commands .SH SYNOPSIS \fBns_rollfile \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnContent.30000644000175000017500000001432310421472532017153 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnContent.3,v 1.3 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnContent 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnContent, Ns_ConnContentLength, Ns_ConnContentFd, Ns_ConnContentOnDisk \- Routines to access request content .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_ConnContent\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnContentLength\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnContentFd\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnContentOnDisk\fR(\fINs_Conn *conn\fR) .SH ARGUMENTS .AS Ns_Conn *conn in .AP Ns_Conn *conn in Pointer to given connection. .sp .BE .SH DESCRIPTION .PP These procedures provide access to the request content sent with a request. .TP char *\fBNs_ConnContent\fR Returns a pointer to the content in memory. The result of \fBNs_ConnContent\fR is not guarenteed to be null-terminated. Safe code should be careful to use the result of \fBNs_ConnContentLength\fR to avoid overrun. .TP int \fBNs_ConnContentFd\fR Returns a file descriptor to an open temporary file which contains the content. .TP int \fBNs_ConnContentLength\fR Returns the length of the memory buffer and/or the size of the open temporary file. Any trailing \r\n sent beyond the content from common browsers on a POST request is not included. .TP int \fBNs_ConnContentOnDisk\fR Returns 1 if the content is currently on disk, such that a call to Ns_ConnContentFd will not cause a new file to be created. When it returns 0, a call to Ns_ConnContent will not require a mmap() call. .SH "CONTENT PRE-READ" .PP While receiving the request before connection processing, the server will pre-read the entire content body and either copy the content to memory or spool it to an open file depending on virtual server config settings. Requests with content beyond the \fImaxcontent\fR virtual server setting are rejected, requests with content between \fImaxinput\fR and \fImaxcontent\fR are spooled to a temp file, and small requests (the majority of simple POST's) are copied to memory. .PP There is no need for a request processing extension to consider possible delays in reading content from the client as all content is available before connection processing begins. The rationale for this approach is that the driver thread can efficiently multiplex reading content for serveral request, tolerating any network delays. Legacy direct content reading routines, for example, \fBNs_ConnRead\fR, are now emulated on top of the \fBNs_ConnContent\fR. .SH "RESOURCE MANAGEMENT" .PP \fBNs_ConnContentFd\fR returns an open file descriptor allocated by a call \fBNs_GetTemp\fR and must not be closed as it is owned by the server core and will be closed at the end of the connection. In addition, there is no filename for the open file as the file is removed when opened for security reasons and to ensure garbage collection. In practice, the open file should be used to verify, parse, and copy content elsewhere as required. Access at the Tcl level is also available via the \fBns_conn contentchannel\fR option. .PP On a call to \fBNs_ConnContent\fR, either the existing memory buffer will be returned or the temp file will be memory mapped on the first call. This will require temporary virtual memory to support the mapping until the end of the connection. Likewise, on the first call to \fBNs_ConnContentFd\fR, if a temp file does not already exists one will be allocated and the memory content will be spooled to the file. These semantics allow one to access the content in either mode, assuming resources are available, regardless of the original location of the content. .SH "DESIGN NOTES AND LARGE CONTENT CONSIDERATIONS" .PP The design goal of the server is to support the ordinary case of reasonably small content requests (i.e., POST forms and small file uploads) in a convienent way without limiting a custom app to support very large requests. In particular, a call to \fBNs_ConnGetQuery\fR for a \fImultipart/file-upload\fR POST will result in an implicit call to \fBNs_ConnContent\fR to parse the fields. This could require significant temporary virtual memory plus dynamic memory to copy non-file fields into the resulting \fINs_Set\fR. See the \fIns_limits\fR command to control maximum resource requirements. .PP For custom apps, an extension could work with the underlying open file via \fBNs_ConnContentFd\fR or \fBns_connn contentchannel\fR to avoid large virtual memory requirements subject to disk space availability. To avoid inadvertant memory mapping of a large upload by other extensions calling \fBNs_ConnGetQuery\fR, consider using a HTTP method other than \fIGET\fR or \fIPOST\fR required by \fBNs_ConnGetQuery\fR, e.g., \fIPUT\fR. .SH "SEE ALSO" Ns_Conn(3), Ns_ConnRead(3), ns_limits(n), ns_conn(n) .SH KEYWORDS connection, content aolserver4-4.5.1/doc/Ns_ConnReturnFile.30000644000175000017500000000576610421472532017633 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnReturnFile.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnReturnFile 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnReturnFile \- Return a file as a complete response .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnReturnFile\fR(\fIconn, status, type, file\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP char *file in Pointer to filename string. .AP int status in HTTP status code. .AP char *type in Pointer to mimetype string. .BE .SH DESCRIPTION .PP This routine is used to generate complete responses, including the HTTP status code specified by the \fIstatus\fR argument and appropriate headers followed by the contents of the file specified with the \fIfile\fR argument. This routine utilizes the underlying builtin file-server code (aka, "fastpath"). As such, it shares the fastpath capabilities to automatically cache pre-read or memory mapped copies of the files and can safely support multiple, simultaneous responses. The following headers are included in the output: .TP Last-modified Constructed based on the modification time of the given file. .TP Content-length Constructed based on the size of the give file. .TP Content-type Constructed with the given \fItype\fR argument. If \fItype\fR is NULL, the type will be determined based on the filename using the \fBNs_GetMimeType\fR routine .SH "SEE ALSO" Ns_ConnFlush(3), Ns_ConnReturnOpenFd(3), Ns_GetMimeType(3) .SH KEYWORDS connnection, response aolserver4-4.5.1/doc/ns_crypt.n0000644000175000017500000000647407645364651016247 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_crypt.n,v 1.4 2003/04/10 22:01:13 shmooved Exp $ '\" '\" .so man.macros .TH ns_crypt n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_crypt \- commands .SH SYNOPSIS \fBns_crypt \fIkey \fIsalt .BE .SH DESCRIPTION .PP ns_crypt encrypted the .I key, also known as the .I password, using the .I salt and returns the result. It uses the same algorithm as the unix crypt command. .PP The result from ns_crypt is a 13-character string. The first two characters correspond to the salt, and the remaining eleven characters correspond to the .I password encrypted with the specified .I salt. .PP The .I password is a string (typically that of a password to be used for nscp and/or nsperm authentication). .PP .I salt should be two characters, typically from the set [a-zA-Z0-9./]. If the empty string is specified as the .I salt then ns_crypt returns the empty string. If a string longer than two characters is specified for the .I salt it is truncated to two characters. If a one character .I salt is provided the output will appear to have a two-character \fIsalt (the single character repeated), however, the encrypted value .B does not correspond to the same .I password being encrypted with the equivalent two character .I salt. (As a result sticking with a two character salt is highly recommended.) .PP Input to ns_crypt .B is case-sensitive. .SH EXAMPLES nscp> ns_crypt aolserver ns ns0WvClsyIL4A nscp> ns_crypt aolserver NS NSDQ1dPM.409Q nscp> ns_crypt aolserver tcl tcAbgtlzbEhVc nscp> ns_crypt aolserver tc tcAbgtlzbEhVc nscp> ns_crypt aolserver .. ..7TNvXHLxJ9Y nscp> ns_crypt aolserver . ..fwmBaZuzrRs .SH "SEE ALSO" nsd(1), info(n), nscp, nsperm, crypt(3) .SH KEYWORDS aolserver4-4.5.1/doc/ns_library.n0000644000175000017500000000347707645364654016555 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_library.n,v 1.4 2003/04/10 22:01:16 shmooved Exp $ '\" '\" .so man.macros .TH ns_library n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_library \- commands .SH SYNOPSIS \fBns_library \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Index.30000644000175000017500000000532707645364612016013 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Index.3,v 1.5 2003/04/10 22:00:42 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Index 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_IndexAdd, Ns_IndexDel, Ns_IndexDestroy, Ns_IndexDup, Ns_IndexEl, Ns_IndexFind, Ns_IndexFindInf, Ns_IndexFindMultiple, Ns_IndexInit, Ns_IndexIntInit, Ns_IndexStringAppend, Ns_IndexStringDestroy, Ns_IndexStringDup, Ns_IndexStringInit, Ns_IndexStringTrunc, Ns_IndexTrunc \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_IndexAdd\fR(\fIarg, arg\fR) .sp \fBNs_IndexDel\fR(\fIarg, arg\fR) .sp \fBNs_IndexDestroy\fR(\fIarg, arg\fR) .sp \fBNs_IndexDup\fR(\fIarg, arg\fR) .sp \fBNs_IndexEl\fR(\fIarg, arg\fR) .sp \fBNs_IndexFind\fR(\fIarg, arg\fR) .sp \fBNs_IndexFindInf\fR(\fIarg, arg\fR) .sp \fBNs_IndexFindMultiple\fR(\fIarg, arg\fR) .sp \fBNs_IndexInit\fR(\fIarg, arg\fR) .sp \fBNs_IndexIntInit\fR(\fIarg, arg\fR) .sp \fBNs_IndexStringAppend\fR(\fIarg, arg\fR) .sp \fBNs_IndexStringDestroy\fR(\fIarg, arg\fR) .sp \fBNs_IndexStringDup\fR(\fIarg, arg\fR) .sp \fBNs_IndexStringInit\fR(\fIarg, arg\fR) .sp \fBNs_IndexStringTrunc\fR(\fIarg, arg\fR) .sp \fBNs_IndexTrunc\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclConn.30000644000175000017500000000402707545404743016277 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclConn.3,v 1.2 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_TclConn 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_FreeConnInterp, Ns_GetConnInterp, Ns_TclGetConn, Ns_TclRequest \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_FreeConnInterp\fR(\fIarg, arg\fR) .sp \fBNs_GetConnInterp\fR(\fIarg, arg\fR) .sp \fBNs_TclGetConn\fR(\fIarg, arg\fR) .sp \fBNs_TclRequest\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_httptime.n0000644000175000017500000000477107645314303016727 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_httptime.n,v 1.3 2003/04/10 16:16:03 shmooved Exp $ '\" '\" .so man.macros .TH ns_httptime n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_httptime, ns_parsehttptime \- commands .SH SYNOPSIS \fBns_httptime\fR \fItime\fR .sp \fBns_parsehttptime \fIhttptime\fR .BE .SH DESCRIPTION .PP \fBns_httptime\fR .RS This function converts the time (specified as the number of seconds from 00:00:00 UTC, January 1, 1970) to the appropriate format for an HTTP header or log file. The time and date is returned with a four digit year, for example: "Sun, 06 Nov 1994 08:49:37 GMT". .RE .PP \fBns_parsehttptime\fR .RS ns_parsehttptime takes a properly formatted HTTP time and returns the number of seconds since 00:00:00 UTC Jan 1, 1970. .RE .PP .SH EXAMPLES \fBns_httptime\fR .DS set time [ns_httptime [ns_time]] Returns: Thu, 14 Nov 2002 17:29:06 GMT .DE .PP \fBns_parsehttptime\fR .DS set time "Thu, 14 Nov 2002 17:29:06 GMT" ns_parsehttptime $time Returns: 1037294946 .DE .SH "SEE ALSO" ns_time(n) .SH KEYWORDS time aolserver4-4.5.1/doc/Ns_DbDriver.30000644000175000017500000000375207645364607016451 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_DbDriver.3,v 1.5 2003/04/10 22:00:39 shmooved Exp $ '\" '\" .so man.macros .TH Ns_DbDriver 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DbDriverDbType, Ns_DbDriverName, Ns_DbRegisterDriver \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DbDriverDbType\fR(\fIarg, arg\fR) .sp \fBNs_DbDriverName\fR(\fIarg, arg\fR) .sp \fBNs_DbRegisterDriver\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_headers.n0000644000175000017500000000427307562036476016513 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_headers.n,v 1.3 2002/11/05 21:50:54 webdanb Exp $ '\" '\" .so man.macros .TH ns_headers n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_headers \- commands .SH SYNOPSIS \fBns_headers \fIconnId status \fR?\fItype length\fR? .BE .SH DESCRIPTION .PP This command immediately pushes the required HTTP headers back to the client. It is for backwords compatability only. The connId argument is made available through the ns_register_proc function. The status is the HTTP response code to return to the client. The type refers to the Content-Type header, and defaults to 'text/html'. The length argument refers to the Content-Length header. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_String.30000644000175000017500000001211407645364633016205 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_String.3,v 1.5 2003/04/10 22:00:59 shmooved Exp $ '\" '\" .so man.macros .TH Ns_String 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_Match, Ns_NextWord, Ns_StrCaseFind, Ns_StrCopy, Ns_StrDup, Ns_StrNStr, Ns_StrToLower, Ns_StrToUpper, Ns_StrTrim, Ns_StrTrimLeft, Ns_StrTrimRight, Ns_StringPrint, ns_strcopy, ns_strdup \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_Match\fR(\fIchar *a, char *b\fR) .sp char * \fBNs_NextWord\fR(\fIchar *line\fR) .sp char * \fBNs_StrCaseFind\fR(\fIchar *s1, char *s2\fR) .sp char * \fBNs_StrCopy\fR(\fIchar *str\fR) \fBns_strcopy\fR(\fIchar *str\fR) .sp char * \fBNs_StrDup\fR(\fIchar *str\fR) \fBns_strdup\fR(\fIchar *str\fR) .sp char * \fBNs_StrNStr\fR(\fIchar *pattern, char *expression\fR) .sp char * \fBNs_StrToLower\fR(\fIchar *string\fR) .sp char * \fBNs_StrToUpper\fR(\fIchar *string\fR) .sp char * \fBNs_StrTrim\fR(\fIchar *string\fR) .sp char * \fBNs_StrTrimLeft\fR(\fIchar *string\fR) .sp char * \fBNs_StrTrimRight\fR(\fIchar *string\fR) .sp void \fBNs_StringPrint\fR(\fIchar *string\fR) .BE .SH DESCRIPTION .TP \fBNs_Match\fR(\fIa, b\fR) Compare the beginnings of two strings, case insensitively. The comparison stops when the end of the shorter string is reached. Return NULL if no match, b if match. .TP \fBNs_NextWord\fR(\fIline\fR) Return a pointer to first character of the next word in a string; words are separated by white space. The returned pointer points into the original string. For example, Ns_NextWord("abc def") returns a pointer to the 'd' in that string. .TP \fBNs_StrCaseFind\fR(\fIs1, s2\fR) Locate the first occurrence of substring s2 within string s1 in a case-insensitive manner. The terminating '\0' characters are not compared. Returns a pointer that points into s1. Uses strstr(3) to do its work. .TP \fBNs_StrCopy\fR(\fIstr\fR) \fBns_strcopy\fR(\fIstr\fR) Copy a string or NULL value using Ns_Malloc. The Ns_StrCopy function is identical to the Ns_StrDup function but allows for the string parameter to be NULL, in which case Ns_StrCopy does nothing and returns NULL. .TP \fBNs_StrDup\fR(\fIstr\fR) \fBns_strdup\fR(\fIstr\fR) Copy a string using Ns_Malloc. The Ns_StrDup function calls Ns_Malloc to allocate enough memory to make a copy of the given string. .TP \fBNs_StrNStr\fR(\fIpattern, expression\fR) Search through pattern for expression, case insensitively. Return a pointer that points to where the match begins within pattern, or NULL if expression is not contained in pattern. .TP \fBNs_StrToLower\fR(\fIstring\fR) Convert string to lowercase. Returns pointer to original string. Original string will be modified. .TP \fBNs_StrToUpper\fR(\fIstring\fR) Convert string to uppercase. Returns pointer to original string. Original string will be modified. .TP \fBNs_StrTrim\fR(\fIstring\fR) Trim leading and trailing white space from string. A pointer to the trimmed string will be returned, which will be in the original string. Do not lose your original pointer to the string if you later need to free it. .TP \fBNs_StrTrimLeft\fR(\fIstring\fR) Trim leading white space from string. A pointer to the trimmed string will be returned, which will be in the original string. Do not lose your original pointer to the string if you later need to free it. .TP \fBNs_StrTrimRight\fR(\fIstring\fR) Trim trailing white space from string. The original string pointer will be returned, but the string will have been modified: a '\0's will have been placed right after the last non-whitespace character of the string. .TP \fBNs_StringPrint\fR(\fIstring\fR) Print a string to stdout. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_UrlSpecific.30000644000175000017500000001435707645364643017163 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_UrlSpecific.3,v 1.4 2003/04/10 22:01:07 shmooved Exp $ '\" '\" .so man.macros .TH Ns_UrlSpecific 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_UrlSpecificAlloc, Ns_UrlSpecificDestroy, Ns_UrlSpecificGet, Ns_UrlSpecificGetExact, Ns_UrlSpecificGetFast, Ns_UrlSpecificSet \- Store and retrieve URL-specific data .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_UrlSpecificAlloc\fR(\fIvoid\fR) .sp void * \fBNs_UrlSpecificDestroy\fR(\fIchar *server, char *method, char *url, int id, int flags\fR) .sp void * \fBNs_UrlSpecificGet\fR(\fIchar *server, char *method, char *url, int id\fR) .sp void * \fBNs_UrlSpecificGetExact\fR(\fIchar *server, char *method, char *url, int id, int flags\fR) .sp void * \fBNs_UrlSpecificGetFast\fR(\fIchar *server, char *method, char *url, int id\fR) .sp void \fBNs_UrlSpecificSet\fR(\fIchar *server, char *method, char *url, int id, void *data, int flags, void (*deletefunc) (void *)\fR) .BE .SH DESCRIPTION .PP These functions allow you to store URL-specific data in memory for later retrieval. They are used when registering procedures for example. .TP \fBNs_UrlSpecificAlloc\fR(\fI\fR) Return a unique ID used to identify a unique virtual URL-space that is then used with the Ns_UrlSpecific storage functions. You should only call this function at server startup, and not after. Here is an example: .CS static int myId; void Init(void) { /* Allocate the id once at startup. */ myId = Ns_UrlSpecificAlloc(); } void Store(char *server, char *method, char *url, char *data) { Ns_UrlSpecificSet(server, method, url, myId, data, 0, NULL); } char * Fetch(char *server, char *method, char *url) { char *data; data = Ns_UrlSpecificGet(server, method, url, myId); return (char *) data; } .CE .TP \fBNs_UrlSpecificDestroy\fR(\fIserver, method, url, id, flags\fR) The Ns_UrlSpecificDestroy function deletes URL-specific data previously stored with Ns_UrlSpecificSet with the same method/URL combination and the same inheritance setting. An id of -1 matches all ids. For example, Ns_UrlSpecificDestroy("myserver", "GET", "/", -1, NS_OP_RECURSE) removes all data for the method GET for server "myserver". The flags argument can be: .IP "" 7 NS_OP_NODELETE - If set, the deletefunc specified in Ns_UrlSpeciciSet is run. .IP NS_OP_RECURSE - If set, then data for all URLs more specific than the passed-in URL are also destroyed. .IP NS_OP_NOINHERIT - If set, data that was stored with this flag in Ns_UrlSpecificSet will be deleted. If not set, the data stored without this flag will be deleted. .TP \fBNs_UrlSpecificGet\fR(\fIserver, method, url, id\fR) The Ns_UrlSpecificGet function retrieves the best match that it can find for in the URL subspace identified by id that the passed-in URL matches. For instance, suppose you had previously registered a handle/method/url/id combination of {myserver, GET, /, 1} and {myserver, GET, /inventory, 1}. The following call would match the data registered at {myserver, GET, /inventory, 1}: .CS Ns_UrlSpecificGet("myserver", "GET", "/inventory/RJ45", 1) .CE .TP \fBNs_UrlSpecificGetExact\fR(\fIserver, method, url, id, flags\fR) Retrieves stored data for the exact method/URL/id combination specified that was stored with the same inheritance setting. If the flags argument is set to NS_OP_NOINHERIT, the data stored with NS_OP_NOINHERIT will be retrieved. If the flags argument is set to 0, the data stored without NS_OP_NOINHERIT will be retrieved. .TP \fBNs_UrlSpecificGetFast\fR(\fIserver, method, url, id\fR) Same as Ns_UrlSpecificGet but does not support wildcards, making it much faster. .TP \fBNs_UrlSpecificSet\fR(\fIserver, method, url, id, data, flags, deletefunc\fR) The Ns_UrlSpecificSet function stores data in memory, allowing subsequent retrieval using handle, method, url, id, and inheritance flag. The flags argument can be NS_OP_NOINHERIT or NS_OP_NODELETE. You can store two sets of data based on the same handle, method, url, and id combination-- one set with inheritance on and one set with inheritance off. If the NS_OP_NOINHERIT flag is set, the data is stored based on the exact URL. If NS_OP_NOINHERIT is omitted, the data is stored based on the specified URL and any URL below it. In this case, Ns_UrlSpecificGetExact will match to the closest URL when retrieving the data. The deletefunc argument is called with data as an argument when this handle/url/method/id combination is re-registered or deleted, or when this server shuts down. unless NS_OP_NODELETE is set. Normally, calling Ns_UrlSpecificSet on a handle/url/method/id combination which already has an operation registered for it causes the previous operation's delete procedure to be called. You can override this behavior by adding the NS_OP_NODELETE flag. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclSet.30000644000175000017500000000400507645364636016140 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclSet.3,v 1.5 2003/04/10 22:01:02 shmooved Exp $ '\" '\" .so man.macros .TH Ns_TclSet 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclEnterSet, Ns_TclFreeSet, Ns_TclGetSet, Ns_TclGetSet2 \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclEnterSet\fR(\fIarg, arg\fR) .sp \fBNs_TclFreeSet\fR(\fIarg, arg\fR) .sp \fBNs_TclGetSet\fR(\fIarg, arg\fR) .sp \fBNs_TclGetSet2\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclFile.30000644000175000017500000000365307645364635016273 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclFile.3,v 1.5 2003/04/10 22:01:01 shmooved Exp $ '\" '\" .so man.macros .TH Ns_TclFile 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclGetOpenChannel, Ns_TclGetOpenFd \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclGetOpenChannel\fR(\fIarg, arg\fR) .sp \fBNs_TclGetOpenFd\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnStatus.30000644000175000017500000000666210421472532017033 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnStatus.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnStatus 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnGetStatus, Ns_ConnSetStatus \- Routines to manage the HTTP response status .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnGetStatus\fR(\fIconn\fR) .sp void \fBNs_ConnSetStatus\fR(\fIconn, status\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP int status in Integer HTTP status code. .BE .SH DESCRIPTION .PP These routines manage the HTTP response code sent to the client in a later call to \fBNs_ConnFlush\fR or \fBNs_ConnFlushDirect\fR. Higher level routines such as the \fBNs_ConnReturn\fR functions normally call these routines automatically using standard HTTP status codes and the \fBNs_ConnQueueHeaders\fR routine can be used to set the status code for lower level code which bypasses \fBNs_ConnFlush\fR. .TP int \fBNs_ConnGetStatus\fR(\fIconn\fR) Return the current HTTP status to be sent. .TP int \fBNs_ConnSetStatus\fR(\fIconn, status\fR) Set the status code to be sent in the response, for example, 200 for a normal "OK" response. A later call to \fBNs_ConnFlush\fR will construct the appropriate HTTP response including the given status with the cooresponding string status code. .SH EXAMPLES .PP The following example demonstrates setting an odd status code followed by a call to \fBNs_ConnFlushDirect\fR to send some data: .CS Ns_ConnSetStatus(conn, 600); Ns_ConnSetType(conn, "text/plain"); Ns_ConnFlushDirect(conn, "hello", 5, 0); .CE .PP The following should provide similar results: .CS Ns_ConnSetRequiredHeaders(conn, "text/plain", 5); Ns_ConnQueueHeaders(conn, 600); Ns_ConnPuts(conn, "hello"); Ns_ConnClose(conn); .CE .SH "SEE ALSO" Ns_ConnGetType(3), Ns_ConnSetType(3), Ns_ConnFlush(3), Ns_ConnFlushDirect(3), Ns_ConnSetRequiredHeaders(3), Ns_ConnQueueHeaders(3), ns_conn(n) .SH KEYWORDS connectionn, response, status aolserver4-4.5.1/doc/Ns_Pathname.30000644000175000017500000001126410421472532016461 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Pathname.3,v 1.6 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Pathname 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_HomePath, Ns_LibPath, Ns_MakePath, Ns_ModulePath, Ns_NormalizePath, Ns_PathIsAbsolute \- Pathname procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_HomePath\fR(\fINs_DString *dest, ...\fR) .sp char * \fBNs_LibPath\fR(\fINs_DString *dest, ...\fR) .sp char * \fBNs_MakePath\fR(\fINs_DString *dest, ...\fR) .sp char * \fBNs_ModulePath\fR(\fINs_DString *dest, char *server, char *module, ...\fR) .sp char * \fBNs_NormalizePath\fR(\fINs_DString *dsPtr, char *path\fR) .sp int \fBNs_PathIsAbsolute\fR(\fIchar *path\fR) .BE .SH DESCRIPTION .PP These functions operate on file pathnames. They work with Unix and Windows pathnames on their respective hosts. .TP \fBNs_HomePath\fR(\fIdest, ...\fR) Construct a path name relative to the home directory of the server. The full path is constructed by appending the library directory followed by each of the variable number of string elements after the \fIdest\fR argument. The elements will be separated by a \fI/\fR character. The list must be terminated with a NULL string. .TP \fBNs_LibPath\fR(\fIdest, ...\fR) Construct a path name relative to the library directory of the server, normally the \fIlib/\fR subdirectory of the home directory. The full path is constructed by appending the library directory followed by each of the variable number of string elements after the \fIdest\fR argument. The elements will be separated by a \fI/\fR character. The list must be terminated with a NULL string. .TP \fBNs_MakePath\fR(\fIdest, ...\fR) Construct a path name from a list of path elements. The Ns_MakePath function constructs a path name by appending a list of path elements to the given Ns_DString. The path elements are separated by single slashes, and the resulting path name is appended to the given Ns_DString. The last argument needs to be NULL to indicate the end of the argument list. .TP \fBNs_ModulePath\fR(\fIdest, char *server, char *module, ...\fR) Construct a server and/or module specific pathname relative to the server home directory. The path in constructed by first appending the server home directory. Next, if the \fIserver\fR argument is not NULL, "server/\fIserver\R" will be appended to the destination and if the \fImodule\fR argument is not NULL, "module/\fImodule\fR" will be appended. Finally, all other string elements, if any, will be appended to the destination with separating \fI/\fR characters. The list must be terminated with a NULL string. .TP \fBNs_NormalizePath\fR(\fIdsPtr, path\fR) Normalize a path name. This function removes any extraneous slashes from the path and resolves "." and ".." references. The result is appended to the given Ns_DString. The following code appends "/dog" to the Ns_DString: .CS Ns_NormalizePath(&ds, "/dog/cat/../../rat/../../dog//mouse/.."); .CE .TP \fBNs_PathIsAbsolute\fR(\fIpath\fR) Check for an absolute path name. Return NS_TRUE if the path is absolute and NS_FALSE otherwise. Under Unix, an absolute path starts with a "/". On Windows, it starts with a drive letter followed immediately by a ":". .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_module.n0000644000175000017500000000347307645364655016373 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_module.n,v 1.4 2003/04/10 22:01:17 shmooved Exp $ '\" '\" .so man.macros .TH ns_module n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_module \- commands .SH SYNOPSIS \fBns_module \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_SockIO.30000644000175000017500000000370207645364633016071 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_SockIO.3,v 1.5 2003/04/10 22:00:59 shmooved Exp $ '\" '\" .so man.macros .TH Ns_SockIO 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_SockRecv, Ns_SockSend, Ns_SockWait \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_SockRecv\fR(\fIarg, arg\fR) .sp \fBNs_SockSend\fR(\fIarg, arg\fR) .sp \fBNs_SockWait\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclInit.30000644000175000017500000001106710102276630016270 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclInit.3,v 1.7 2004/07/29 22:43:36 dossy Exp $ '\" '\" .so man.macros .TH Ns_TclInit 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclInitInterps, Ns_TclInitModule, Ns_TclInterpServer, Ns_TclLibrary \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_TclInitInterps\fR(\fIserver, initProc, arg\fR) .sp \fBNs_TclInitModule\fR(\fIarg, arg\fR) .sp char * \fBNs_TclInterpServer\fR(\fIinterp\fR) .sp char * \fBNs_TclLibrary\fR(\fIvoid\fR) .SH ARGUMENTS .AS Ns_TclInterpInitProc initProc .AP char *server in Name of virtual server. .AP Ns_TclInterpInitProc *initProc in Procedure to call to initialize interps. .AP void *arg in Callback data to pass to \fIinitProc\fR. .AP Tcl_Interp *interp in Tcl interp to get server. .BE .SH DESCRIPTION .PP \fBNs_TclInitInterps\fR arranges for \fIinitProc\fR to be called on the startup initialization interp. \fIinitProc\fR should have arguments and result that match the type \fINs_TclInterpInitProc\fR: .CS typedef int Ns_TclInterpInitProc(Tcl_Interp \fI*interp\fR, void \fI*arg\fR); .CE The \fIarg\fR parameter to \fIinitProc\fR is a copy of the \fIarg\fR argument given to \fBNs_TclInitInterps\fR. A typical \fIinitProc\fR will create new commands in the given interp with Tcl_CreateCommand. The following AOLserver module example results in the \fImsg\fR command being in all interps. The command simply sets the "hello" static string as the interp result: .CS static Ns_TclInterpInitProc AddCmds; static Tcl_CmdProc MsgCmd; int Ns_ModuleInit(char *server, char *module) { static char *arg = "hello"; return Ns_TclInitInterps(server, AddCmds, arg); } static int AddCmds(Tcl_Interp *interp, void *arg) { Tcl_CreateCommand(interp, "msg", MsgCmd, arg, NULL); return TCL_OK; } static int MsgCmd(ClientData arg, Tcl_Interp *interp, int argc, char **argv) { Tcl_SetResult(interp, (char *) arg, TCL_STATIC); return TCL_OK; } .CE In AOLserver 3.x, the effect of \fBNs_TclInitInterps\fR is to invoke \fIinitProc\fR immediately on the single initializaton interp of the server and the result of \fBNs_TclInitInterps\fR is the return code of \fIinitProc\fR. The state of this interp (command, procedures) will then be copied to other interps when created via the \fBNs_TclAllocInterp\fR routine. This differs from the original AOLserver 2.0 where \fIinitProc\fR was called on each interp in an interp pool, the 2.1-2.3 behavior where \fIinitProc\fR was called once on an interp linked to the per-server shared command tables, and the upcoming 4.0 behavior where \fIinitProc\fR is called at interp create time. In fact, the 4.0 behavior is that of the \fBNs_TclRegisterAtCreate\fR routine. In practice, if your \fIinitProc\fB does nothing but create commands with NULL or shared client data the effect is the same in all releases. .PP \fBNs_TclInterpServer\fR returns the virtual server in which the given interp was created. .PP \fBNs_TclLibrary\fR returns the shared Tcl library of the server installation (e.g., /usr/local/aolserver/modules/tcl). .SH "SEE ALSO" Ns_TclRegisterAtCreate(3), Ns_TclAllocInterp(3) .SH KEYWORDS aolserver4-4.5.1/doc/ns_parseheader.n0000644000175000017500000000351707645364660017364 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_parseheader.n,v 1.4 2003/04/10 22:01:20 shmooved Exp $ '\" '\" .so man.macros .TH ns_parseheader n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_parseheader \- commands .SH SYNOPSIS \fBns_parseheader \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_url2file.n0000644000175000017500000000412007645314311016600 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_url2file.n,v 1.3 2003/04/10 16:16:09 shmooved Exp $ '\" '\" .so man.macros .TH ns_url2file n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_url2file \- commands .SH SYNOPSIS \fBns_url2file \fIURL \fI .BE .SH DESCRIPTION .PP This function returns the file or directory corresponding to the specified URL. The file returned is located in the "pages" directory on the current virtual server. .SH EXAMPLE .PP This is especially useful when using the ns_adp_include command. <% ns_adp_include [ns_url2file /include/myfile.inc] %> .SH "SEE ALSO" ns_adp_include(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_mimetype.n0000644000175000017500000000434110417520540017530 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_mimetype.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_mimetype n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_mimetype \- Set output mimetype. .SH SYNOPSIS .nf \fBns_adp_mimetype\fR ?\fImimetype\fR? .fi .BE .SH DESCRIPTION This command can be used to query the output mimetype for the HTTP connection of an ADP. If the optional \fImimetype\fR argument is specified, it is used to first set the mimetype to the given value. Updating the mimetype will invoke code to adjust output encoding if necessary, see \fBNs_ConnSetType\fR for details. .SH "SEE ALSO" ns_adp(n), ns_adp_flush(n), ns_adp_close(n), Ns_ConnSetType(3) .SH KEYWORDS ADP, dynamic pages, buffer, mimetype, encoding aolserver4-4.5.1/doc/Ns_ConnRequest.30000644000175000017500000000457607645364602017216 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnRequest.3,v 1.5 2003/04/10 22:00:34 shmooved Exp $ '\" '\" .so man.macros .TH Ns_ConnRequest 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_AuthorizeRequest, Ns_AuthorizeUser, Ns_ConnRunRequest, Ns_GetRequest, Ns_QueueConn, Ns_RegisterProxyRequest, Ns_RegisterRequest, Ns_UnRegisterProxyRequest, Ns_UnRegisterRequest \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_AuthorizeRequest\fR(\fIarg, arg\fR) .sp \fBNs_AuthorizeUser\fR(\fIarg, arg\fR) .sp \fBNs_ConnRunRequest\fR(\fIarg, arg\fR) .sp \fBNs_GetRequest\fR(\fIarg, arg\fR) .sp \fBNs_QueueConn\fR(\fIarg, arg\fR) .sp \fBNs_RegisterProxyRequest\fR(\fIarg, arg\fR) .sp \fBNs_RegisterRequest\fR(\fIarg, arg\fR) .sp \fBNs_UnRegisterProxyRequest\fR(\fIarg, arg\fR) .sp \fBNs_UnRegisterRequest\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_sched.n0000644000175000017500000001657207645314310016157 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_sched.n,v 1.3 2003/04/10 16:16:08 shmooved Exp $ '\" '\" .so man.macros .TH ns_sched n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_after, ns_cancel, ns_pause, ns_resume, ns_schedule_daily, ns_schedule_proc, ns_schedule_weekly, ns_unschedule_proc \- commands .SH SYNOPSIS \fBns_after\fR \fIseconds {script | procname ?args?}\fR .sp \fBns_cancel\fR \fIid\fR .sp \fBns_pause\fR \fIid\fR .sp \fBns_resume\fR \fIid\fR .sp \fBns_schedule_daily\fR ?-thread? ?-once? \fIhour minute {script | procname ?args?}\fR .sp \fBns_schedule_proc\fR ?-thread? ?-once? \fIinterval {script | procname ?args?}\fR .sp \fBns_schedule_weekly\fR ?-thread? ?-once? \fIday hour minute {script | procname ?args?}\fR .sp \fBns_unschedule_proc\fR \fIid\fR .BE .SH DESCRIPTION .PP \fBns_after\fR .RS run the specified script or procedure after the specified number of seconds .sp ns_after returns an id which can be used with the ns_pause, ns_cancel and ns_resume apis. .RE .PP \fBns_cancel\fR .RS stops the scheduled running of the id returned by an ns_after .sp returns 1 if unscheduled 0 if the script of procedure couldn't be unscheduled .RE .PP \fBns_pause\fR .RS pauses the scheduled running of the id returned by an ns_after .sp returns 1 if paused, 0 if the script of procedure couldn't be paused .RE .PP \fBns_resume\fR .RS resumes the scheduled running of the id returned by an ns_after .sp returns 1 if resumed, 0 if the script of procedure couldn't be resumed .RE .PP \fBns_schedule_daily\fR .RS ns_schedule_daily runs the specified Tcl script or procedure (procname) once a day at the time specified by hour and minute. The hour can be from 0 to 23, and the minute can be from 0 to 59. .sp Specify -thread if you want a thread created to run the procedure. This will allow the scheduler to continue with other scheduled procedures. Specifying -thread is appropriate in situations where the script will not return immediately, such as when the script performs network activity. .sp Specify -once if you want the script to run only one time. The default is that the script will be re-scheduled after each time it is run. .sp ns_schedule_daily returns an id number for the scheduled procedure that is needed to stop the scheduled procedure with ns_unschedule_proc. .sp .RE .PP \fBns_schedule_proc\fR .RS ns_schedule_proc runs the specified Tcl script or procedure (procname) at an interval specified by interval. The interval is the number of seconds between runs of the script. .sp Specify -thread if you want a thread created to run the procedure. This will allow the scheduler to continue with other scheduled procedures. Specifying -thread is appropriate in situations where the script will not return immediately, such as when the script performs network activity. .sp Specify -once if you want the script to run only one time. The default is that the script will be re-scheduled after each time it is run. .sp ns_schedule_proc returns an id number for the scheduled procedure that is needed to stop the scheduled procedure with ns_unschedule_proc. .sp .RE \fBns_schedule_weekly\fR .RS ns_schedule_weekly runs the specified Tcl script or procedure (procname) once a week on the day specified by day and the time specified by hour and minute. The day can be from 0 to 6, where 0 represents Sunday. The hour can be from 0 to 23, and the minute can be from 0 to 59. .sp Specify -thread if you want a thread created to run the procedure. This will allow the scheduler to continue with other scheduled procedures. Specifying -thread is appropriate in situations where the script will not return immediately, such as when the script performs network activity. .sp Specify -once if you want the script to run only one time. The default is that the script will be re-scheduled after each time it is run. .sp ns_schedule_weekly returns an id number for the scheduled procedure that is needed to stop the scheduled procedure with ns_unschedule_proc. .RE .PP \fBns_unschedule_proc\fR \fIid\fR .RS ns_unschedule_proc stops a scheduled procedure from executing anymore. The scheduled procedure to be stopped is identified by its id, which was returned by the ns_schedule* function that was used to schedule the procedure. .RE .PP .SH EXAMPLES \fBns_after ns_cancel ns_pause ns_resume\fR .RS This example illustrates a web interface used to manage jobs. Depending on the action provided a job can be created, cancelled, paused or resumed. .sp .DS set action [ns_queryget action] set job [ns_queryget job] switch $action { create { set job [ns_after 10 [ns_queryget script]] ns_puts "Job created with id: $job" } cancel { if {[ns_cancel $job]} { ns_puts "Job $job cancelled" } else { ns_puts "Job $job not cancelled" } } pause { if {[ns_pause $job]} { ns_puts "Job $job paused" } else { ns_puts "Job $job not paused } } resume { if {[ns_resume $job]} { ns_puts "Job $job resumed" } else { ns_puts "Job $job couldn't be resumed" } } default { ns_puts "Invalid action $action" } } .DE .RE .PP \fBns_schedule_daily\fR .RS This example defines a script called rolllog that uses ns_accesslog to roll the access log to a file with an extension containing the current date. The ns_schedule_daily function is used to execute the rolllog script on a daily basis. .sp .DS # Script to roll and rcp log file to host "grinder" proc rolllog {} { set suffix [ns_strftime "%y-%m-%d"] set new [ns_accesslog file].$suffix ns_accesslog roll $new exec rcp $new grinder:/logs/[file tail $new] } # Schedule "rolllog" to run at 3:30 am each morning ns_schedule_daily -thread 3 30 rolllog .DE .RE .PP \fBns_schedule_proc\fR .DS proc dosomething blah { ns_log Notice "proc with arg '$blah'" } ns_schedule_proc 10 dosomething $arg1 .DE .PP .SH "SEE ALSO" .PP .SH KEYWORDS schedule pause resume unschedule cancel after aolserver4-4.5.1/doc/ns_filter.n0000644000175000017500000002120607645364652016362 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_filter.n,v 1.4 2003/04/10 22:01:14 shmooved Exp $ '\" '\" .so man.macros .TH ns_filter n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_register_filter, ns_register_proc, ns_register_trace \- Register a filter, proc or trace callback .SH SYNOPSIS \fBns_register_filter \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_register_proc \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_register_trace \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP .SS ns_register_filter: Registers a Tcl filter script for the specified method/URL combination on a virtual server. The script can be called at one or more of three given times: pre-authorization, post-authorization before page data has been returned to the user, and after the connection has been processed and closed. This function will be called at the specified stage of a connection, if the method/URL combination for the filter matches the method/URL combination for the connection using glob style matching. The URLpattern can contain standard string-matching characters. For example, these are valid URL patterns: /employees/*.tcl /accounts/*/out Valid values for the "when" argument are: preauth, postauth, and trace. Using pre-authorization, the procedure will be called (assuming that the method/URL combination matches) just before authorization. If the procedure returns with a code of: .IP \fBTCL_OK\fR 12 (using: return "filter_ok"): The server will continue to the next pre-authorization filter for this connection, or, if there are no more pre-authorization filters, it will continue on with authorization. .IP \fBTCL_BREAK\fR 12 (using: return "filter_break"): The server will not process any more pre-authorization filters for this connection, and it will continue on with authorization. .IP \fBTCL_RETURN\fR 12 (using: return "filter_return"): The server will close the connection and will not run any more pre-authorization filters. It will not authorize the request, and it will not run the function registered for this METHOD/URL. It WILL run any trace functions registered for this METHOD/URL, usually including logging. It is assumed that the filter has sent a proper response (e.g., using ns_return) to the client before returning TCL_RETURN. .TP Using post-authorization, the procedure will be called (assuming that the method/URL combination matches) just after successful authorization. If the procedure returns: .IP \fBTCL_OK\fR 12 (using: return "filter_ok"): The server will continue to the next post-authorization filter for this connection, or, if there are no more post-authorization filters, it will run the function registered to handle this request. .IP \fBTCL_BREAK\fR 12 (using: return "filter_break"): The server will not process any more post-authorization filters for this connection, and it will run the function registered to handle this request. .IP \fBTCL_RETURN\fR 12 (using: return "filter_return"): The server will close the connection and will not run any more post-authorization filters and it will not run the function registered for this METHOD/URL. It WILL run any trace functions registered for this METHOD/URL, usually including logging. It is assumed that the filter has returned a proper response (e.g., using ns_return) to the client before returning TCL_RETURN. .TP Using trace, the procedure will be called (assuming that the method/URL combination match) after the connection has been totally processed and closed. If the procedure returns: .IP \fBTCL_OK\fR 12 (using: return "filter_ok"): The server will continue to the next trace filter. .IP \fBTCL_BREAK\fR 12 (using: return "filter_break"): The rest of the trace filters are ignored. .IP \fBTCL_RETURN\fR 12 (using: return "filter_break"): The rest of the trace filters are ignored. .PP \fBSyntax for the registered procedure:\fR The conn (connection) argument is optional for procedures registered by ns_register_filter if the procedure has 1 or 2 arguments (including why but not including conn). The following examples show the variations that can be used in this case: .CS .RE \fBns_register_filter\fR \fItrace\fR GET /noargs filter_noargs \fBns_register_filter\fR \fItrace\fR GET /context filter_context fnord \fBns_register_filter\fR \fItrace\fR GET /conncontext filter_conncontext proc filter_noargs { why } { ns_log Notice "filter noargs" return filter_ok } ;# filter_noargs proc filter_context { arg why } { ns_log Notice "filter context. Arg: $arg" return filter_ok } ;# filter_noargs proc filter_conncontext { conn arg why } { ns_log Notice "filter conn context" return filter_ok } ;# filter_noargs .CE The conn (connection) argument is required for procedures registered by ns_register_filter if the procedure has 3 or more arguments (including why but not including conn). The conn argument is automatically filled with the connection information. The first argument following conn will always take the value supplied by ns_register_filter, if there is one, or an empty value. The why argument at the end is automatically filled with the type of filter requested. All other arguments must supply a default value. The following examples show the variations that can be used in this case: .CS .RE \fBns_register_filter\fR \fIpostauth\fR GET /threeargs threeargs aaa \fBns_register_filter\fR \fIpostauth\fR GET /fourargs fourargs aaa bbb ccc proc threeargs { conn context { greeble bork } why } { ... } ; proc fourargs { conn context { greeble bork } {hoover quark} why } { ... } ; .CE When a GET of /threeargs is requested, the conn and why arguments will be filled automatically, the context argument will be assigned "aaa" and the greeble argument will be assigned the default value "bork". When a GET of /fourargs is requested, the conn and why arguments will be filled automatically, the context argument will be assigned "aaa", the greeble argument will be assigned "bbb", and the hoover argument will be assigned the default value "quark". .SS ns_register_trace: .IP "" 0 Register a Tcl trace script to a method and matching URL. (Note: This function is obsolete. Use \fBns_register_filter\fR instead.) \fBns_register_trace\fR registers a Tcl script as a trace for the specified method/URL combination. After the server handles the request for the specified method on an URL that matches the \fIURLpattern\fR, it calls the trace script with the connection id and any arguments (args) specified. The \fIURLpattern\fR can contain standard string-matching characters. For example, these are valid URLpatterns: /employees/*.tcl /accounts/*/out Note \fBns_register_trace\fR is similar to \fBns_register_proc\fR except that the pattern-matching for the URL is performed differently. With \fBns_register_proc\fR, the specified URL is used to match that URL and any URL below it in the hierarchy. Wildcards such as "*" are meaningful only for the final part of the URL, such as /scripts/*.tcl. With \fBns_register_trace\fR, the \fIURLpattern\fR is used to match URLs as a string with standard string-matching characters. \fBns_register_proc\fR results in a single match, whereas multiple ns_register_trace's can be matched and will be called. .SH "SEE ALSO" ns_register_proc(n), ns_register_tag(n), ns_register_adptag(n) .CE .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_stats.n0000644000175000017500000000474410417520540017044 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_stats.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_stats n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_stats \- Return usage statistics on cached ADP pages .SH SYNOPSIS \fBns_adp_stats\fR .BE .SH DESCRIPTION .PP This command returns a list of the format \fIfile stats file stats ...\fR for all ADP files which have been parsed and cached by the server. The \fIstats\fR elements are also a list of key/value pairs with the following elements: .TP 15 \fBdev\fR File device number. .TP 15 \fBino\fR File inode number. .TP 15 \fBmtime\fR File modification time. .TP 15 \fBrefcnt\fR Count of number of Tcl interperters in all threads sharing text regions of the file. .TP 15 \fBevals\fR Count of file evaluations. .TP 15 \fBsize\fR Size of cached text. .TP 15 \fBblocks\fR Number of independent script/text blocks. .TP 15 \fBscripts\fR Number of script blocks. .SH "SEE ALSO" ns_adp(n), ns_adp_include(n) .SH KEYWORDS ADP, statistics, cache aolserver4-4.5.1/doc/Ns_ConnReturnOpen.30000644000175000017500000001244010421472532017640 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnReturnOpen.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnReturnOpen 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnReturnOpenChannel, Ns_ConnReturnOpenFd, Ns_ConnReturnFdEx, Ns_ConnReturnOpenFile \- Routines to send open file content .SH SYNOPSIS .nf \fB#include "ns.h"\fR int .sp int \fBNs_ConnReturnOpenChannel\fR(\fIconn, status, type, chan, len\fR) .sp int \fBNs_ConnReturnOpenFd\fR(\fIconn, status, type, fd, len\fR) .sp int \fBNs_ConnReturnOpenFdex\fR(\fIconn, status, type, fd, off, len\fR) .sp int \fBNs_ConnReturnOpenFile\fR(\fIconn, status, type, fp, len\fR) .SH ARGUMENTS .AS Tcl_Channel chan in .AP Tcl_Channel chan in Pointer to Tcl_Channel open for read. .AP Ns_Conn conn in Pointer to open connection. .AP FILE *fp in Pointer to stdio FILE open for read. .AP off_t off in Seek offset. .AP int fd int File descriptor open for read. .AP int status in HTTP status code. .AP char *type in Pointer to mimetype string. .BE .SH DESCRIPTION .PP These routines are used to generate complete responses, including headers, status codes, content types, and the content copied from the given open file. They all return a status code which is NS_OK if the response was sent or NS_ERROR if an underlying call to sent the content failed. The response will include the given HTTP \fIstatus\fR code, a \fIcontent-type\fR header with the given \fItype\fR, and a \fIcontent-length\fR header with the length specified by \fIlen\fR. No character output encoding or gzip compression is performed on the content. .PP For \fBNs_ConnReturnOpenFdEx\fR, copying begins at the offset specified by the \fIoff\fR argument Otherwise, these routines copy from the current read offset in the underlying open file. No attempt is made to serialize access to the underlying object so independent open file objects and/or mutex locking is necessary if the same file is being sent simultaneously to multiple clients. .SH NOTES .TP Windows Support The \fBNs_ConnReturnOpenFdEx\fR routine is not currently supported on Windows. When called on Windows, it will always return NS_ERROR. .TP Truncated Result The server will construct a \fIcontent-length\fR header based on the given \fIlen\fR argument. However, the server will send the content with an underlying call to a cooresponding \fBNs_ConnSend\fR function, e.g., \fBNs_ConnSendFd\fR for \fBNs_ConnReturnOpenFd\fR. These functions will send the requested content or all remaining content in the open file if less bytes are avilable without reporting an error due to the truncated response. As the headers will have already been flushed before sending the content in this case, the \fIcontent-length\fR header will not be consistent with the actual bytes sent. If it is not possible to ensure the remaining bytes will be equal or greater to the requested bytes to send, it is possible to specify -1 for \fIlen\fR to supress the \fIcontent-length\fR header entirely. Most browsers will accept this resonse and simply calculate the length from the bytes receieved up until the socket is closed. .TP Performance Consideration As mentioned, these routines use underlying \fBNs_ConnSendFd\fR style routines to copy and send the content from open files. This is not the approach used by the builtin file-serving code (aka the "fastpath"). The fastpath operates with filenames, not open file objects, and maintains a cached of pre-read or memory mapped regions to accelerate the common case of rapidly sending reasonably sized content to multiple, simultaneous clients. The \fBNs_ConnReturnFile\fR routine utilizes the underlying fastpath and thus could be a faster means to send static files than directly opening files and calling these API's. .SH "SEE ALSO" Ns_ConnReturnFile(3), Ns_ConnFlush(3), Ns_ConnSendFd(3), Ns_ConnReturnData(3) .SH KEYWORDS connnection, response, file aolserver4-4.5.1/doc/ns_share.n0000644000175000017500000000462107645364661016201 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_share.n,v 1.4 2003/04/10 22:01:21 shmooved Exp $ '\" '\" .so man.macros .TH ns_share n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_share, ns_var, nsv_append, nsv_array, nsv_exists, nsv_get, nsv_incr, nsv_lappend, nsv_names, nsv_set, nsv_unset \- commands .SH SYNOPSIS \fBns_share \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_var \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_append \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_array \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_exists \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_get \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_incr \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_lappend \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_names \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_set \fIoption \fR?\fIarg arg ...\fR? .sp \fBnsv_unset \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_puts.n0000644000175000017500000001143310417520540016672 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_puts.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_puts n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_append, ns_adp_close, ns_adp_dump, ns_adp_flush, ns_adp_puts, ns_adp_stream, ns_adp_tell, ns_adp_trunc, ns_puts \- ADP output commands .SH SYNOPSIS .nf \fBns_adp_append\fR \fIstring\fR ?\fIstring ...\fR? \fBns_adp_close\fR \fBns_adp_dump\fR \fBns_adp_flush\fR \fBns_adp_puts\fR ?\fI-nonewline\fR? \fIstring\fR \fBns_adp_stream\fR \fBns_adp_tell\fR \fBns_adp_trunc\fR ?\fIlength\fR? \fBns_puts\fR ?\fI-nonewline\fR? \fIstring\fR .fi .BE .SH DESCRIPTION .PP These commands enable adding to and manipulation of the ADP output buffer. See \fBns_adp\fR for an overview on ADP pages. .TP \fBns_adp_append\fR \fIstring\fR ?\fIstring ...\fR? This command appends one or more strings to the ADP output buffer. For the case of a single argument, it is equivalent to \fBns_adp_puts -nonewline\fR \fIstring\fR. .TP \fBns_adp_close\fR This command can be used to flush and close the underlying HTTP connection. ADP execution continues after the connection is closed; any text appended to the output buffer after the close is simply discarded when processing is complete. .TP \fBns_adp_dump\fR This command returns the text of the ADP buffer. .TP \fBns_adp_flush\fR This command flushes the contents of the ADP buffer to the current connection or file channel. It will raise a Tcl exception if the underlying flush failed, for example, if the HTTP connection is closed or the channel write failed. Flushed content is returned in "chunked-encoding" format if the HTTP protocol version is at least 1.1 (normally the case for all modern browsers). A call to \fBns_adp_flush\fR is not normally needed except for specialized applications as all content is automatically flushed at the end of a connection or on buffer overflow. (see \fBns_adp_ctl bufsize\fR for details on buffer mangement). .TP \fBns_adp_puts\fR ?\fI-nonewline\fR? \fIstring\fR This function appends the specified \fIstring\fR to the ADP buffer. Unless the optional \fI-nonewline\fR argument is used, a newline will be appended to the page after the string. Note that the argument to ns_adp_puts is a single string unlike \fBns_adp_append\fR which takes a variable number of strings to append. .TP \fBns_adp_stream\fR This function begins streaming mode for the ADP. All data currently in the ADP output buffer is flushed and any subsequent data will be output directly to the connection. It is equivalent to an \fBns_adp_flush\fR followed by an \fBns_adp_ctl bufsize 0\fR. .TP \fBns_adp_tell\fR This function returns the total number of bytes current in the ADP buffer. A buffer overflow or direct call to \fBns_adp_flush\fR will reset this counter to zero so the result of \fBns_adp_tell\fR may not return the total number of bytes eventually sent. .TP \fBns_adp_trunc\fR ?\fIlength\fR? This function can be used to truncate output buffer to the requested size. This can be useful to trim unintended white space or to clear a result and generate an error message. Note that content already streamed to the client, if any, cannot be truncated. .TP \fBns_puts\fR ?\fI-nonewline\fR? \fIstring\fR This command is a deprecated name for \fBns_adp_puts\fR. .SH "SEE ALSO" ns_adp(n), ns_adp_include(n) .SH KEYWORDS ADP, dynamic pages aolserver4-4.5.1/doc/ns_markfordelete.n0000644000175000017500000000352707645364655017732 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_markfordelete.n,v 1.4 2003/04/10 22:01:17 shmooved Exp $ '\" '\" .so man.macros .TH ns_markfordelete n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_markfordelete \- commands .SH SYNOPSIS \fBns_markfordelete \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_IntPrint.30000644000175000017500000000370507645364614016513 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_IntPrint.3,v 1.5 2003/04/10 22:00:44 shmooved Exp $ '\" '\" .so man.macros .TH Ns_IntPrint 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_IntPrint \- Print an integer to stdout .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_IntPrint\fR(\fIint d\fR) .BE .SH DESCRIPTION .TP \fBNs_IntPrint\fR(\fId\fR) This function prints an integer to stdout, which is the server.log file by default. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Register.30000644000175000017500000000465407645364624016535 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Register.3,v 1.5 2003/04/10 22:00:52 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Register 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_RegisterAtExit, Ns_RegisterAtPreStartup, Ns_RegisterAtReady, Ns_RegisterAtServerShutdown, Ns_RegisterAtShutdown, Ns_RegisterAtSignal, Ns_RegisterAtStartup, Ns_RegisterServerShutdown, Ns_RegisterShutdown \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_RegisterAtExit\fR(\fIarg, arg\fR) .sp \fBNs_RegisterAtPreStartup\fR(\fIarg, arg\fR) .sp \fBNs_RegisterAtReady\fR(\fIarg, arg\fR) .sp \fBNs_RegisterAtServerShutdown\fR(\fIarg, arg\fR) .sp \fBNs_RegisterAtShutdown\fR(\fIarg, arg\fR) .sp \fBNs_RegisterAtSignal\fR(\fIarg, arg\fR) .sp \fBNs_RegisterAtStartup\fR(\fIarg, arg\fR) .sp \fBNs_RegisterServerShutdown\fR(\fIarg, arg\fR) .sp \fBNs_RegisterShutdown\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_config.n0000644000175000017500000000411507645364650016340 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_config.n,v 1.4 2003/04/10 22:01:12 shmooved Exp $ '\" '\" .so man.macros .TH ns_config n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_config, ns_configsection, ns_configsections, ns_param, ns_section \- commands .SH SYNOPSIS \fBns_config \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_configsection \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_configsections \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_param \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_section \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_requestauthorize.n0000644000175000017500000000757707645364661020537 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_requestauthorize.n,v 1.4 2003/04/10 22:01:21 shmooved Exp $ '\" '\" .so man.macros .TH ns_requestauthorize n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_requestauthorize \- commands .SH SYNOPSIS \fBns_requestauthorize \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP .sp .SS \fBns_requestauthorize\fR \fImethod\fR \fIURL\fR \fIauthuser\fR \fIauthpassword\fR \fI?ipaddr?\fR Ask the server to check permissions using nsperm. This function does the same permission check that the AOLserver does before serving a URL. If the nsperm module is loaded, the algorithm is as follows. .IP \fB1.\fR 3 If the authuser is "nsadmin", the password is correct, and the IP address of the client is allowed nsadmin access, then access is authorized. .IP \fB2.\fR 3 Find the relevant permission record. If an exact match for the method and URL combination is not found, the end of the URL is pared down until a match is found. For example, if there is no match for `/products/cereals/raisin_bran.html,' then the server looks for a permission record for the URL `/products/cereals.' If that permission record is specified as "Exact URL match is NOT required", then that permission record is used. .TP By default, the server comes with a row that says GET on `/' is open to the world. If no relevant permission record is found, access is denied (forbidden). .IP \fB1.\fR 3 If the authuser is in the "Allow Users" list, access is permitted. If the authuser is a member of a group in the "Allow Groups" list and not in the "Deny Users" list, access is permitted. .IP \fB2.\fR 3 If the host is in the "Hosts to allow" list, access is permitted. If the host is in the "Hosts to deny" list, access is denied. .IP \fB3.\fR 3 If the request does not come in with authorization data, access is denied. .IP \fB4.\fR 3 The user and password are verified. If there is no password specified in the database, any password is accepted. .IP \fB5.\fR 3 Otherwise, access is denied. .SS Return Values: The following values can be returned by ns_requestauthorize. .IP \fBOK\fR 11 The user has permission to execute this URL and method. .IP \fBDENIED\fR 11 The user does not have permission to execute this URL and method. .IP \fBFORBIDDEN\fR 11 There is no possible user/password/IP Address combination that would give authorization. .IP \fBERROR\fR 11 There was an error. .SH "SEE ALSO" ns_passwordcheck, ns_crypt .SH KEYWORDS aolserver4-4.5.1/doc/ns_sleep.n0000644000175000017500000000423607645364661016211 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_sleep.n,v 1.4 2003/04/10 22:01:21 shmooved Exp $ '\" '\" .so man.macros .TH ns_sleep n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_sleep \- commands .SH SYNOPSIS \fBns_sleep \fIseconds\fR .BE .SH DESCRIPTION .PP This function causes the thread to sleep for the number of seconds specified in \fIseconds\fR. .PP The value of \fIseconds\fR should be a positive integer (or zero, in which case the function returns immediately). An error will result if \fIseconds\fR is not specified, if a negative integer is specified, or if a non-integer is specified. .SH "SEE ALSO" nsd(1) .SH KEYWORDS aolserver4-4.5.1/doc/ns_geturl.n0000644000175000017500000000563207645364653016405 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_geturl.n,v 1.4 2003/04/10 22:01:15 shmooved Exp $ '\" '\" .so man.macros .TH ns_geturl n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_geturl \- commands .SH SYNOPSIS \fBns_geturl \fIURL \fR?\fIheadersSetId\fR? .BE .SH DESCRIPTION .PP This command retrieves the contents of the specified URL. The URL must be a remote http server, or a file relative to the pageroot (begins with /). It does not handle a relative request or follow redirects. The headerSetId option is a variable containing an ns_set Id (not expanded with a $) used to store the remote server headers (see example). ns_geturl only support HTTP version 1.0. .SH EXAMPLES .CS set page [ns_geturl "www.aolserver.com"] ns_return 200 text/html $page .CE This fetches the contents of www.aolserver.com and returns that page to the client. .CS set headers [ns_set new] set page [ns_geturl "www.aolserver.com" headers] for {set i 0} {$i < [ns_set size $headers]} {incr i} { ns_puts "Key: [ns_set key $headers $i]" ns_puts "Value: [ns_set value $headers $i]" } .CE This time, a blank headerset is passed to ns_geturl so we can retrieve the headers of the remote page, which we print out to the client. .CS set file [ns_geturl "/foo/bar.html"] ns_return 200 text/html $file .CE This example fetches the /foo/bar.html file relative to the pageroot and returns it to the client. .SH "SEE ALSO" nsd(1), info(n), ns_set(n), ns_httpget(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp.n0000644000175000017500000002267510417520413015630 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp.n,v 1.7 2006/04/13 19:05:47 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp \- ADP introduction and operation .SH DESCRIPTION .PP Several commands, normally beginning with the \fBns_adp\fR prefix, are used to support \fBAOLserver Dynamic Pages\fR, or \fBADP's\fR. ADP's are a server-side environment for embedding Tcl code within static text blocks (typically HTML or XML). The Tcl code is normally delimited within \fI<%\fR and \fI%>\fR or \fI<%=\fR and \fI%>\fR tags and can be used to generate additional text or for any other purpose, e.g., updating a database. The \fI<% ...script... %>\fR is used for cases where the result of the Tcl script is ignored while the \fI<%= ...script %>\fR syntax is used to append the script result to the output buffer. In either case, the \fBns_adp_puts\fR command can be used to add content to the output buffer. A simple ADP file could contain: .CS Hello from <%=[ns_info hostname]%> Time is: <%=[clock format [clock seconds]]%> Four links: <% for {set i 0} {$i < 4} {incr i} { ns_adp_puts "Link $i
" } %> .CE .PP Accessing this page would generate output similar to: .CS Hello from jgdavidson.local Time is: Mon Aug 01 22:15:18 EDT 2005 Ten links: Link 0
Link 1
Link 2
Link 3
.CE .PP ADP processing normally occurs in the context of an HTTP transaction when an URL request is mapped to an ADP file in the server's page root. (see \fBADP CONFIGURATION\fR below for details on configuring this mapping). The ADP request processing code allocates a Tcl interpreter and includes the cooresponding ADP file. Output generated during execution of the ADP is sent as a normal HTTP response, using default status code of "200 OK" and the mime type which corresponds to the ADP file extensions, normally .adp and text/html (commands such as \fBns_adp_mimetype\fR can be used to control the eventual response type). .PP An ADP can include additional ADP files with the \fBns_adp_include\fR command or evaluate ADP text/script code directly with \fBns_adp_eval\fR. This capability enables are large degree of reuse of presentation and code between applications. Each such included file or ADP string evaluation is performed in it's own \fIcall frame\fR similar to a Tcl procedure with a local variable namespace. Arguments can be passed to new call frames and then accessed with commands such as \fBns_adp_argv\fR. When necessary, commands such as \fBns_adp_abort\fR provide limited support to interrupt and/or return from within an ADP, unwinding the ADP call stack to the underyling C-level request processing code. .SH CONFIGURATION .PP AOLserver can be configured to execute ADP's placed with other static files within a virtual server's pages directory via the \fImap\fR parameter in the \fIadp\fR server config section, for example: .CS ns_section ns/server/server1/adp ns_param map /*.adp ns_param map {/stories/*.adp 60} .CE .sp .PP The first map will evaluate all files which end in \fI.adp\fR and do not have more specific mappings (such as the second map). The second config map will execute files which end with \fI.adp\fR located under the \fI/stories\fR directly and also specifies a cache timeout in seconds. In this case, results will be retained and returned to subsequent requests without re-executing the ADP for up to 60 seconds (see the \fI-cache\fR paramter to the \fBns_adp_include\fR command for more details). .PP Alternatively, arbitrary URL's may be mapped to individual ADP files using the \fBns_register_adp\fR command. This command would normally be included in a virtual-server initialization scripts within the \fImodules/tcl/\fR server subdirectory. .SH "ERROR HANDLING AND EXCEPTIONS" .PP By default, errors within an ADP script block are reported in the server log and interrupt execution of the current block only; subsequent text and script blocks continue to be processed and and no error message is included in the output. This approach is highly defensive and has the benefit of generating a valid, if partial, responses after minor errors. A negative aspect of this approach is that, without careful monitoring of the server log, such errors can easily be ignored. .PP The default error handling behavior can be modified by settings one or more virtual-server configuration flags: .CS ns_section ns/server/server1/adp ns_param stricterror false; # Interrupt execution on any error. ns_param displayerror false; # Include error message in output. ns_param detailerror true; # Include connection details messages. .CE These flags, along with other options, can be queried or modified for an individual ADP execution stream via the \fBns_adp_ctl\fR. .SH "SCRIPT BLOCK SCOPE" .PP By default, each Tcl block is independent of other blocks and must be a complete script. In particular, this means that conditional code cannot span blocks, e.g., the following does not work by default: .CS <% foreach elem $list { %> Here is an <%=$elem%> element. <% } %> .CE .PP This behavior can be changed with the \fIsinglescript\fR config option or via the \fBns_adp_ctl\fR command which instructs the ADP parser to converts all text/code blocks within an ADP into a single Tcl script block: .CS ns_section ns/server/server1/adp ns_param singlescript false; # Combine code blocks into one scripts. .CE .PP Setting this option would covert the script above into the following equivalent: .CS <% foreach elem $list { ns_adp_puts -nonewline "\\n Here is an " ns_adp_puts -nonewline $elem ns_adp_puts -nonewline " element.\\n" } %> .CE .PP Note that this option combines scripts within a particular ADP file, it does not combine scripts which span multiple included ADP's. In addition, error semantics described above apply to the combined script and any error within any block combined into a single script will stop execution of the entire included page. .SH "BUFFER MANAGEMENT" .PP Output including accumulated text blocks and output generated by Tcl script blocks is normally buffered internally until the end of the connection. Once complete, a single response is generated which follows HTTP response headers indicating the resulting content length. The content may optionally be gzip compressed first. .PP Alternatively, an incremental response can be be generated either in response to calling the \fBns_adp_stream\fR or \fBns_adp_flush\fR commands or automatically due to buffer overflow. In this case, an HTTP response will be generated on the first flush which specifies incremental content using HTTP/1.1 chunked-encoding. Forcing a connection into streaming mode can be useful for certain long running requests where it's reasonable to expect the browser can render incremental respnoses. .PP The size of the internal buffer and gzip compression options can be set with corresponding server and ADP config options. Note both the virtual-server wide gzip and ADP gzip options must be enabled to support compression of ADP output. .CS ns_section ns/server/server1 ns_param gzip true; # Enable compression. ns_param gziplevel 4; # Compression level. ns_param gzipmin 4096; # Minimum size before gzip. ns_section ns/server/server1/adp ns_param gzip true; # Enable ADP output compression. ns_param bufsize 102400; # Buffer size, 1meg default. .CE .SH "CHARACTER ENCODING" .PP The ADP interface uses the server's mimetype configuration to map file extensions to charsets and cooresponding encoding. This configuration is necessary to ensure the file text and script blocks are properly coverted to UTF-8 for use internally. This mimetype is also used to set the character output encoding although the \fBns_conn encoding\fR option can be used to override the encoding if necessary. .SH "SEE ALSO" ns_adp_include(n), ns_adp_puts(n), ns_adp_ctl(n) .SH KEYWORDS ADP, dynamic pages aolserver4-4.5.1/doc/ns_env.n0000644000175000017500000000354007645364652015666 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_env.n,v 1.4 2003/04/10 22:01:14 shmooved Exp $ '\" '\" .so man.macros .TH ns_env n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME env, ns_env \- commands .SH SYNOPSIS \fBenv \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_env \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclRegister.30000644000175000017500000000413107645364636017171 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclRegister.3,v 1.5 2003/04/10 22:01:02 shmooved Exp $ '\" '\" .so man.macros .TH Ns_TclRegister 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclRegisterAtCleanup, Ns_TclRegisterAtCreate, Ns_TclRegisterAtDelete, Ns_TclRegisterDeferred \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclRegisterAtCleanup\fR(\fIarg, arg\fR) .sp \fBNs_TclRegisterAtCreate\fR(\fIarg, arg\fR) .sp \fBNs_TclRegisterAtDelete\fR(\fIarg, arg\fR) .sp \fBNs_TclRegisterDeferred\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_img.n0000644000175000017500000000437407645364654015662 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_img.n,v 1.4 2003/04/10 22:01:16 shmooved Exp $ '\" '\" .so man.macros .TH ns_img n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_gifsize, ns_jpegsize, ns_pngsize \- commands .SH SYNOPSIS \fBns_gifsize \fIfile\fR .sp \fBns_jpegsize \fIfile\fR .sp \fBns_pngsize \fIfile\fR .BE .SH DESCRIPTION .PP \fBns_gifsize\fR, \fBns_jpegsize\fR and \fBns_pngsize\fR all return a list of two elements (the width and height) of the respective GIF, JPEG, or PNG \fIfile\fR. .PP An error is generated if \fIfile\fR does not exist (or the user id AOLserver is running under cannot open the file) or if the file is not a valid image (GIF, JPEG, or PNG respectively). .SH "SEE ALSO" nsd(1) .SH KEYWORDS aolserver4-4.5.1/doc/ns_job.n0000644000175000017500000001324507745275147015654 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_job.n,v 1.10 2003/10/21 18:26:47 mpagenva Exp $ '\" '\" .so man.macros .TH ns_job n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_job \- commands .SH SYNOPSIS \fBns_job\fR option ?\fIarg arg ...\fR? \fBns_job\fR create \fI?-desc description? queueId ?maxthreads? \fR \fBns_job\fR queue \fI?-detached? queueId script \fR \fBns_job\fR wait \fI?-timeout seconds:microseconds? queueId jobId \fR \fBns_job\fR waitany \fI?-timeout seconds:microseconds? queueId \fR \fBns_job\fR cancel \fIqueueId jobId \fR \fBns_job\fR delete \fIqueueId \fR \fBns_job\fR jobs \fIqueueId \fR \fBns_job\fR queues \fBns_job\fR threadlist \fBns_job\fR queuelist \fBns_job\fR joblist \fBns_job\fR genid .BE .SH DESCRIPTION .PP ns_job manages a thread pool and a set of named "queues". Queues have a max number of threads and when the current number of running thread reaches "max" then jobs are queued. New threads are created when there are less than \fI maxthread \fR number of idle threads. .SH OPTIONS .PP \fBcreate \fR .RS create \fI?-desc description? queueId ?maxthreads? \fR Create a new job queue called \fIqueueId\fR. If \fImaxthreads\fR is not specified, then the default of 4 is used. .RE \fBqueue\fR .RS queue \fI?-detached? queueId script\fR Add a new job to the queue. If there are less than \fImaxthreads\fR current running then the job will be started. If there are \fImaxthreads\fR currently running then this new job will be queued. If \fIdetached\fR is true, then the job will be cleaned up when it completes; no wait will be necessary. The new job's ID is returned. .RE \fBwait\fR .RS wait \fI?-timeout seconds:microseconds? queueId jobId \fR Wait for the specified queued or running job to finish. \fIwait\fR returns the results of the script. An error is thrown if the specified timeout period is reached. .RE \fBwaitany\fR .RS waitany \fI?-timeout seconds:microseconds? queueId \fR Wait for any job on the queue complete. An error is thrown if the specified timeout period is reached. .RE \fBcancel\fR .RS cancel \fR\fIqueueId jobId \fR Remove the specified job from the queue. If the job is currently running, then the job will be removed from the queue when it completes. \fI1 (true) \fR is returned if the job is currently running and can not be cancelled. .RE \fBdelete\fR .RS delete \fR\fIqueueId \fR Request that the specified queue be deleted. The queue will only be deleted when all jobs are removed. .RE \fBjobs \fR .RS jobs \fIqueueId \fR Return a list of the job IDs. .RE \fBqueues \fR .RS Returns a list of the queues IDs. .RE \fBthreadlist \fR .RS Returns a list of the thread pool's fields. maxthreads .RS Max number of threads for all the queues in the thread pool. .RE numthreads .RS Number of allocated threads. .RE numidle .RS Number of currently idle threads. .RE req .RS stop .RS The thread pools is being stopped. This probably means that the server is shutting down. .RE .RE .RE \fBqueuelist \fR .RS Returns a list of the queues. A queue has the following fields: name .RS Name of the queue. .RE desc .RS Description of the queue. .RE maxthreads .RS Max number of threads to run for this queue. .RE numrunning .RS Number of currently running jobs in this queue. .RE REQ .RS delete .RS Someone requested this queue be deleted. Queue will not be deleted until all the jobs on the queue are removed. .RE .RE .RE \fBjoblist \fR .RS Returns a list the jobs in the specified queue. A job has the following fields: id .RS Job's ID .RE state .RS scheduled .RS The job is schedule to run. .RE running .RS The job is currently running. .RE done .RS The job is has completed. .RE .RE results .RS If the job has completed, then this field will contain the results. If the job is running or scheduled to run, then this will contain the script. .RE code .RS When the job is done, this will contain the return code. .RS Codes .RS TCL_OK TCL_ERROR TCL_RETURN TCL_BREAK TCL_CONTINUE .RE .RE .RE TYPE .RS nondetached detached .RE REQ .RS none wait cancel .RE .RE .RE \fBgenid \fR .RS Generate a new unique ID. This new ID can be used as the queue ID without conflicting with any other queue ID. .RE .SH BUGS .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS ns_job aolserver4-4.5.1/doc/ns_log.n0000644000175000017500000000544407645314304015651 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_log.n,v 1.3 2003/04/10 16:16:04 shmooved Exp $ '\" '\" .so man.macros .TH ns_log n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_log, ns_logctl \- commands .SH SYNOPSIS \fBns_log\fR \fIseverity message\fR .BE .SH DESCRIPTION .PP While the AOLserver is running it logs various events from Notices to Fatal errors. Usually the AOLserver is running in the background, in which case these messages are placed in the server log. In absence of an ServerLog key in the AOLserver nsd.ini file, this file is the /log/error.log under the AOLserver installation directory. When the AOLserver is running in the foreground the messages are redirected to stderr. ns_log writes the message to the server error log file. Allowable values for severity are: .sp Notice - Something interesting occurred. .sp Warning - Something that could mean something bad occurred. .sp Error - Something bad occurred. .sp Fatal - Something extremely bad occurred. The server will shut down after logging the message. .sp Bug - Something occurred that implies that there is a bug in the code. .sp Debug - If the server is in Debug mode, the message is printed. Debug mode is specified in the [ns/parameters] section of the configuration file. Otherwise, the message is not printed. .sp .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_set.n0000644000175000017500000002122507645314310015653 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_set.n,v 1.3 2003/04/10 16:16:08 shmooved Exp $ '\" '\" .so man.macros .TH ns_set n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_set \- commands .SH SYNOPSIS Manipulate sets of key-value pairs. .SH SYNTAX .PP \fBns_set copy \fR?-persist?\fR \fIsetId \fR .PP \fBns_set cput \fIsetId key value\fR .PP \fBns_set create \fR?-persist? \fIname\fR .PP \fBns_set delete \fIsetId fieldNumber\fI .PP \fBns_set delkey \fIsetId key\fR .PP \fBns_set find \fIsetId key\fR .PP \fBns_set free \fIsetId\fR .PP \fBns_set get \fIsetId key\fR .PP \fBns_set icput \fIsetId key value\fR .PP \fBns_set idelkey \fIsetId key\fR .PP \fBns_set ifind \fIsetId key\fR .PP \fBns_set iget \fIsetId key\fR .PP \fBns_set isnull \fIsetId fieldNumber\fR .PP \fBns_set iunique \fIsetId key\fR .PP \fBns_set key \fIsetId fieldNumber\fR .PP \fBns_set merge \fIhigh low\fR .PP \fBns_set move \fIto from\fR .PP \fBns_set\fR \fIname setId\fR .PP \fBns_set new\fR ?-persist? \fIname\fR .PP \fBns_set print\fR \fIsetId\fR .PP \fBns_set put\fR \fIsetId key value\fR .PP \fBns_set size\fR \fIsetId\fR .PP \fBns_set split\fR ?-persist? \fIsetId\fR ?splitChar? .PP \fBns_set truncate\fR \fIsetId size\fR .PP \fBns_set unique\fR \fIsetId key\fR .PP \fBns_set update\fR \fIsetId key value\fR .PP \fBns_set value\fR \fIsetId fieldNumber\fR .PP .BE .SH DESCRIPTION .PP \fBns_set copy\fR .RS Returns a new set that has the same name and key value pairs as the passed-in set (setId). If -persist is specified, the new set will persist even after the current transaction ends, and you can free it later with ns_set free. If -persist is not specified, the new set is automatically freed when the transaction ends. .RE .PP \fBns_set cput\fR .RS appends a new field to the set with key key and value value if the field does not already exist in the set. The field number of the new field is returned. .RE .PP \fBns_set create\fR .RS (which is the same as ns_set new) allocates memory for a new set and returns the ID for the new set. If -persist is specified, the new set will persist even after the current transaction ends, and you can free it later with ns_set free. If -persist is not specified, the new set is automatically freed when the transaction ends. .RE .PP \fBns_set delete\fR .RS deletes the field in the set at field number fieldNumber. .RE .PP \fBns_set delkey\fR .RS removes the first field in the set whose key is key. Note that there could be multiple fields in the set with this key; this command only removes the first occurrence. .RE .PP \fBns_set find\fR .RS returns the index of the first field in the specified set whose key name matches the specified key. Zero (0) is the index of the first field. If no matching fields are found, ns_set find returns -1. .RE .PP \fBns_set free\fR .RS frees the specified set. Sets must be explicitly freed with ns_set free if the -persist option was used when creating the set. Otherwise, sets are automatically freed when the transaction ends. .RE .PP \fBns_set get\fR .RS returns the first value associated with the passed-in key. If the key is invalid, an empty string is returned. .RE .PP \fBns_set icput\fR .RS is the case-insensitive counterpart of ns_set cput. .RE .PP \fBns_set idelkey\fR .RS is the case-insensitive counterpart of ns_set delkey. .RE .PP \fBns_set ifind\fR .RS is the case-insensitive counterpart of ns_set find. .RE .PP \fBns_set iget\fR .RS is the case-insensitive counterpart of ns_set get. .RE .PP \fBns_set isnull\fR .RS returns 1 if the value of the field specified by fieldNumber is null and 0 if it is not. Note that an empty string is not the same as a null. ns_set isnull will return 0 for an empty string. .RE .PP \fBns_set iunique\fR .RS returns 1 if the specified key is unique in the specified set and 0 if it is not. The test for uniqueness is performed case-insensitively. ns_set unique is the case-sensitive version of this function. .PP For example, a client could send multiple "Accept:" headers which would end up in the header set for the connection. ns_set iunique would return 0 for the "Accept:" key, because there are multiple fields with the key "Accept:". .RE .PP \fBns_set key\fR .RS extracts the key of the set at field number fieldNumber. This command is useful when looping through all the key-value pairs in the set. .RE .PP \fBns_set merge\fR .RS merges two sets. Any fields in the low set are appended to the high set if a field with the same key name does not already exist in the high set. .RE .PP \fBns_set move\fR .RS moves all fields from the from set to the end of the to set, leaving the from set a valid, empty set. .RE .PP \fBns_set name\fR .RS returns the name of the set. .RE .PP \fBns_set new\fR .RS (which is the same as ns_set create) allocates memory for a new set and returns the ID for the new set. If -persist is specified, the new set will persist even after the current transaction ends, and you can free it later with ns_set free. If -persist is not specified, the new set is automatically freed when the transaction ends. .RE .PP \fBns_set print\fR .RS prints the specified set to stderr. .RE .PP \fBns_set put\fR .RS appends a new field to the set with key key and value value. Note that the field is appended so if a previous field has the same key as the new field, the previous field is returned by ns_set get command. The field number of the new field is returned. .RE .PP \fBns_set size\fR .RS returns the number of key-value pairs in the set. .RE .PP \fBns_set split\fR .RS splits one set into multiple sets based on the splitChar as described below and returns a Tcl list of the newly-allocated sets. It assumes that the keys in the specified set (setId) contain a specific character (splitChar) that can be used to separate the name of a new set and the key in the new set. The default splitChar is a period (.). .PP For example, if two fields in the original set have "dog.food" and "cat.food" as their key names and "Yummy dog food!" and "Yummy cat food!" as their values, ns_set split would return two new sets named "dog" and "cat". The dog set would have a single field whose key is "food" and whose value is "Yummy dog food!". The cat set would have a single field whose key is "food" and whose value is "Yummy cat food!". .RE .PP \fBns_set truncate\fR .RS reduces the set to the first size key-value pairs and frees the memory for the rest of the key-value pairs that may have been in the set. .RE .PP \fBns_set unique\fR .RS returns 1 if the specified key is unique in the specified set and 0 if it is not. The test for uniqueness is performed case-sensitively. ns_set iunique is the case-insensitive version of this function. .RE .PP \fBns_set update\fR .RS updates the first field in the specified set whose key is key and replaces its value with value. ns_set update is equivalent to ns_set delkey followed by ns_set put. .RE .PP \fBns_set value\fR .RS extracts the value of the set at field number fieldNumber. This command is useful when looping through all the key-value pairs in the set. .RE .SH "NOTES" The fields in the set are ordered by number. The field numbers range from 0 to one less than the total number of fields. For example, if you have a set with 5 fields, you would use "ns_set key $setid 4" to extract the key of the last field in the set. .PP .SH KEYWORDS key value aolserver4-4.5.1/doc/Ns_Encoding.30000644000175000017500000000426307545404743016467 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Encoding.3,v 1.1 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Encoding 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnGetEncoding, Ns_ConnSetEncoding, Ns_GetCharsetEncoding, Ns_GetEncoding, Ns_GetFileEncoding, Ns_GetTypeEncoding \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_ConnGetEncoding\fR(\fIarg, arg\fR) .sp \fBNs_ConnSetEncoding\fR(\fIarg, arg\fR) .sp \fBNs_GetCharsetEncoding\fR(\fIarg, arg\fR) .sp \fBNs_GetEncoding\fR(\fIarg, arg\fR) .sp \fBNs_GetFileEncoding\fR(\fIarg, arg\fR) .sp \fBNs_GetTypeEncoding\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_tmp.n0000644000175000017500000000531107645364662015675 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_tmp.n,v 1.4 2003/04/10 22:01:22 shmooved Exp $ '\" '\" .so man.macros .TH ns_tmp n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_mktemp, ns_tmpnam \- commands .SH SYNOPSIS \fBns_mktemp \fItemplate\fR .sp \fBns_tmpnam .BE .SH DESCRIPTION .PP \fBns_mktemp\fR returns a unique filename based on the \fItemplate\fR you specify. \fBns_tmpnam\fR returns a filename that can safely be used for a temporary file. .PP The \fItemplate\fR for \fBns_mktemp\fR should contain a string with six trailing Xs, which will be replaced with an alpha-numeric string of six characters chosen to make the filename unique. If \fItemplate\fR does not end with six trailing Xs the empty string will be returned. .PP \fBns_tmpnam\fR calls the tmpnam() C library function, and the results will depend on your operating system. On Irix, for example, tmpnam() always generate a file name using the path-prefix defined as P_tmpdir in the header file which is "/var/tmp/". .SH EXAMPLES .PP nscp> ns_tmpnam ;# On Linux /tmp/filevuLwaE nscp> ns_mktemp /tmp/foobar.XXXXXX /tmp/foobar.p6SlaC .SH "SEE ALSO" nsd(1), mktemp(3), tmpnam(3) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Signal.30000644000175000017500000000367207645364631016163 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Signal.3,v 1.5 2003/04/10 22:00:57 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Signal 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_sigmask, ns_signal, ns_sigwait \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBns_sigmask\fR(\fIarg, arg\fR) .sp \fBns_signal\fR(\fIarg, arg\fR) .sp \fBns_sigwait\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Encrypt.30000644000175000017500000000407707645364610016367 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Encrypt.3,v 1.5 2003/04/10 22:00:40 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Encrypt 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_Encrypt \- Encrypt string using DES .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_Encrypt\fR(\fIchar *pw, char *salt, char iobuf[ ]\fR) .BE .SH DESCRIPTION .TP \fBNs_Encrypt\fR(\fIpw, salt, iobuf\fR) The Ns_Encrypt function DES encrypts the specified key, perturbed by salt. The result is returned in iobuf, which should be at least NS_ENCRYPT_BUFSIZE bytes in size. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Thread2.30000644000175000017500000001036107645364637016236 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Thread2.3,v 1.5 2003/04/10 22:01:03 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Thread2 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_AbsTimedWaitForEvent, Ns_AllocThreadLocalStorage, Ns_BeginDetachedThread, Ns_BeginThread, Ns_BroadcastEvent, Ns_DestroyCriticalSection, Ns_DestroyEvent, Ns_DestroyMutex, Ns_DestroyRWLock, Ns_DestroySemaphore, Ns_EnterCriticalSection, Ns_ExitThread, Ns_GetThread, Ns_GetThreadId, Ns_GetThreadLocalStorage, Ns_GetThreadServer, Ns_InitializeCriticalSection, Ns_InitializeEvent, Ns_InitializeMutex, Ns_InitializeRWLock, Ns_InitializeSemaphore, Ns_LeaveCriticalSection, Ns_LockMutex, Ns_ReadLockRWLock, Ns_ReadUnlockRWLock, Ns_ReleaseSemaphore, Ns_SetEvent, Ns_SetThreadLocalStorage, Ns_SetThreadServer, Ns_TimedWaitForEvent, Ns_UTimedWaitForEvent, Ns_UnlockMutex, Ns_WaitForEvent, Ns_WaitForSemaphore, Ns_WaitForThread, Ns_WaitThread, Ns_WriteLockRWLock, Ns_WriteUnlockRWLock \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_AbsTimedWaitForEvent\fR(\fIarg, arg\fR) .sp \fBNs_AllocThreadLocalStorage\fR(\fIarg, arg\fR) .sp \fBNs_BeginDetachedThread\fR(\fIarg, arg\fR) .sp \fBNs_BeginThread\fR(\fIarg, arg\fR) .sp \fBNs_BroadcastEvent\fR(\fIarg, arg\fR) .sp \fBNs_DestroyCriticalSection\fR(\fIarg, arg\fR) .sp \fBNs_DestroyEvent\fR(\fIarg, arg\fR) .sp \fBNs_DestroyMutex\fR(\fIarg, arg\fR) .sp \fBNs_DestroyRWLock\fR(\fIarg, arg\fR) .sp \fBNs_DestroySemaphore\fR(\fIarg, arg\fR) .sp \fBNs_EnterCriticalSection\fR(\fIarg, arg\fR) .sp \fBNs_ExitThread\fR(\fIarg, arg\fR) .sp \fBNs_GetThread\fR(\fIarg, arg\fR) .sp \fBNs_GetThreadId\fR(\fIarg, arg\fR) .sp \fBNs_GetThreadLocalStorage\fR(\fIarg, arg\fR) .sp \fBNs_GetThreadServer\fR(\fIarg, arg\fR) .sp \fBNs_InitializeCriticalSection\fR(\fIarg, arg\fR) .sp \fBNs_InitializeEvent\fR(\fIarg, arg\fR) .sp \fBNs_InitializeMutex\fR(\fIarg, arg\fR) .sp \fBNs_InitializeRWLock\fR(\fIarg, arg\fR) .sp \fBNs_InitializeSemaphore\fR(\fIarg, arg\fR) .sp \fBNs_LeaveCriticalSection\fR(\fIarg, arg\fR) .sp \fBNs_LockMutex\fR(\fIarg, arg\fR) .sp \fBNs_ReadLockRWLock\fR(\fIarg, arg\fR) .sp \fBNs_ReadUnlockRWLock\fR(\fIarg, arg\fR) .sp \fBNs_ReleaseSemaphore\fR(\fIarg, arg\fR) .sp \fBNs_SetEvent\fR(\fIarg, arg\fR) .sp \fBNs_SetThreadLocalStorage\fR(\fIarg, arg\fR) .sp \fBNs_SetThreadServer\fR(\fIarg, arg\fR) .sp \fBNs_TimedWaitForEvent\fR(\fIarg, arg\fR) .sp \fBNs_UTimedWaitForEvent\fR(\fIarg, arg\fR) .sp \fBNs_UnlockMutex\fR(\fIarg, arg\fR) .sp \fBNs_WaitForEvent\fR(\fIarg, arg\fR) .sp \fBNs_WaitForSemaphore\fR(\fIarg, arg\fR) .sp \fBNs_WaitForThread\fR(\fIarg, arg\fR) .sp \fBNs_WaitThread\fR(\fIarg, arg\fR) .sp \fBNs_WriteLockRWLock\fR(\fIarg, arg\fR) .sp \fBNs_WriteUnlockRWLock\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_uuencode.n0000644000175000017500000000517707645364662016716 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_uuencode.n,v 1.4 2003/04/10 22:01:22 shmooved Exp $ '\" '\" .so man.macros .TH ns_uuencode n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_uudecode, ns_uuencode \- commands .SH SYNOPSIS \fBns_uudecode \fIstring\fR .sp \fBns_uuencode \fIstring\fR .BE .SH DESCRIPTION .PP \fBns_uudecode\fR performs HTTP-style uudecoding and returns the decoded value. .PP \fBns_uuencode\fR performs HTTP-style uuencoding and returns the encoding value. The input \fIstring\fR is limited to a maximum length of 48 characters. The encoding string will be approximately 33% longer than the original. .PP \fBNote:\fR This is HTTP-style uuencoding/uudecoding which is sometimes called "htuu" (see RFC 1113). It is not compatible with the format used by the Unix uuencode/uudecode commands, nor is it base-64 encoding. .PP For base-64 encoding, consider using the base64 Tcl package in tcllib (see http://tcllib.sourceforge.net). .SH EXAMPLES .PP nscp> ns_uuencode username dXNlcm5hbWU= nscp> ns_uudecode dXNlcm5hbWU= username .SH "SEE ALSO" nsd(1) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Sched.30000644000175000017500000000442407645364627015775 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Sched.3,v 1.5 2003/04/10 22:00:55 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Sched 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_After, Ns_Cancel, Ns_Pause, Ns_Resume, Ns_ScheduleDaily, Ns_ScheduleProc, Ns_ScheduleProcEx, Ns_ScheduleWeekly, Ns_UnscheduleProc \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_After\fR(\fIarg, arg\fR) .sp \fBNs_Cancel\fR(\fIarg, arg\fR) .sp \fBNs_Pause\fR(\fIarg, arg\fR) .sp \fBNs_Resume\fR(\fIarg, arg\fR) .sp \fBNs_ScheduleDaily\fR(\fIarg, arg\fR) .sp \fBNs_ScheduleProc\fR(\fIarg, arg\fR) .sp \fBNs_ScheduleProcEx\fR(\fIarg, arg\fR) .sp \fBNs_ScheduleWeekly\fR(\fIarg, arg\fR) .sp \fBNs_UnscheduleProc\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_logroll.n0000644000175000017500000000347507645314305016545 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_logroll.n,v 1.3 2003/04/10 16:16:05 shmooved Exp $ '\" '\" .so man.macros .TH ns_logroll n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_logroll \- commands .SH SYNOPSIS \fBns_logroll\fR .BE .SH DESCRIPTION .PP This function forces a roll of the server log .PP .SH "SEE ALSO" ns_log(n) .PP .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnCopy.30000644000175000017500000000734110421472532016455 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnCopy.3,v 1.6 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnCopy 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnCopyToChannel, Ns_ConnCopyToDString, Ns_ConnCopyToFd, Ns_ConnCopyToFile \- Copy request content to open file or dstring .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnCopyToChannel\fR(\fIconn, ncopy, chan\fR) .sp int \fBNs_ConnCopyToDString\fR(\fIconn, ncopy, dsPtr\fR) .sp int \fBNs_ConnCopyToFd\fR(\fIconn, ncopy, fd\fR) .sp int \fBNs_ConnCopyToFile\fR(\fIconn, ncopy, fp\fR) .SH ARGUMENTS .AS Ns_Channel chan in .AP Ns_Channel chan in Pointer to Tcl channel open for write. .AP Ns_Conn conn in Pointer to open connection. .AP Ns_DString dsPtr in Initialized dstring. .AP int fd in File descriptor open for write. .AP FILE fp in Stdio FILE pointer open for write. .AP int ncopy in Number of bytes to copy. .BE .SH DESCRIPTION .PP These functions copy content from an open connection request to the given open file descriptor, FILE, dstring, or Tcl_Channel. The routines work by copying from the content buffer; see the man page on \fBNs_ConnContent\fR for how this buffer is managed for both small and large requests. .PP The functions all return the number of bytes copied which will match the requested \fIncopy\fR argument unless there is an error writing the content or the requested bytes is greater than the number of bytes still available to be read. An internal offset into the connection is maintained and is shared with routines such as \fBNs_ConnRead\fR which also consume content from the same buffer. Note that routines which access the entire content, e.g., \fBNs_ConnContent\fR, \fBNs_ConnContentFd\fR, or \fBNs_ConnGetQuery\fR will continue to provide access to the entire request regardless if one of the \fBNs_ConnCopy\fR or \fBNs_ConnRead\fR functions have been used. .SH EXAMPLES The following example demonstrates copying user data to a temp file: .CS fd = open("myfile.out", O_WRONLY|O_BINARY); len = Ns_ConnContentLength(conn); if (Ns_ConnCopyToFd(conn, len, fd) != len) { ... error writing content or content already consumed ... } .CE .SH "SEE ALSO" Ns_ConnRead(3), Ns_ConnReadLine(3), Ns_ConnContent(3), Ns_ConnContentFd(3) .SH KEYWORDS connection, content, read aolserver4-4.5.1/doc/Ns_ServerSpecific.30000644000175000017500000000416607645364630017660 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ServerSpecific.3,v 1.5 2003/04/10 22:00:56 shmooved Exp $ '\" '\" .so man.macros .TH Ns_ServerSpecific 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME , Ns_ServerSpecificAlloc, Ns_ServerSpecificDestroy, Ns_ServerSpecificGet, Ns_ServerSpecificSet \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fB\fR(\fIarg, arg\fR) .sp \fBNs_ServerSpecificAlloc\fR(\fIarg, arg\fR) .sp \fBNs_ServerSpecificDestroy\fR(\fIarg, arg\fR) .sp \fBNs_ServerSpecificGet\fR(\fIarg, arg\fR) .sp \fBNs_ServerSpecificSet\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/index.adp0000644000175000017500000000115310417520540015767 0ustar frankiefrankie AOLserver Documentation <% set dir [file dirname [ns_url2file [ns_conn url]]] foreach {title section} [list "Programs" 1 "Tcl Commands" n "Library Routines" 3] { ns_adp_puts "

$title

" ns_adp_puts set n 0 set ncols 3 foreach file [lsort [glob -nocomplain $dir/*.$section.htm]] { if !$n { ns_adp_puts } set link [file tail $file] set page [file rootname [file rootname $link]] ns_adp_puts "" if {[incr n] == $ncols} { ns_adp_puts set n 0 } } ns_adp_puts
$page
} %> aolserver4-4.5.1/doc/ns_purgefiles.n0000644000175000017500000000351307645364660017242 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_purgefiles.n,v 1.4 2003/04/10 22:01:20 shmooved Exp $ '\" '\" .so man.macros .TH ns_purgefiles n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_purgefiles \- commands .SH SYNOPSIS \fBns_purgefiles \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_SockErrno.30000644000175000017500000000374407645364633016655 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_SockErrno.3,v 1.5 2003/04/10 22:00:59 shmooved Exp $ '\" '\" .so man.macros .TH Ns_SockErrno 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ClearSockErrno, Ns_GetSockErrno, Ns_SetSockErrno \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_ClearSockErrno\fR(\fIarg, arg\fR) .sp \fBNs_GetSockErrno\fR(\fIarg, arg\fR) .sp \fBNs_SetSockErrno\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnClose.30000644000175000017500000000522110421472532016603 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnClose.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnClose 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnClose \- Close an open connection .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnClose\fR(\fIconn\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .BE .SH DESCRIPTION .PP This function calls the connection's communication driver to close the connection if it is not already closed. It always returns NS_OK. .PP If the connection is marked for keep-alive, the underlying connection is not actually closed but instead returned to the driver thread to process additional requests, if any. Connections are automatically marked for keep-alive by setting the \fINS_CONN_KEEPALIVE\fR flag if the client supports it by sending an appropriate \fIconnection-keepalive\fR header. Keep alive can be disabled before a call to \fBNs_ConnClose\fR with the \fBNs_ConnSetKeepAliveFlag\fR routine with a zero value for the \fIflag\fR argument. .SH "SEE ALSO" Ns_ConnSetKeepAliveFlag(3), Ns_ConnGetKeepAliveFlag(3), Ns_ConnFlush(3) .SH KEYWORDS connection, close, keep-alive aolserver4-4.5.1/doc/Ns_TclTimeObj.30000644000175000017500000000366507545404743016742 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclTimeObj.3,v 1.1 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_TclTimeObj 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclGetTimeFromObj, Ns_TclSetTimeObj \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclGetTimeFromObj\fR(\fIarg, arg\fR) .sp \fBNs_TclSetTimeObj\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Module.30000644000175000017500000000412207645364616016165 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Module.3,v 1.5 2003/04/10 22:00:46 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Module 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ModuleGetSymbol, Ns_ModuleLoad, Ns_ModulePath, Ns_ModuleSymbol, Ns_RegisterModule \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_ModuleGetSymbol\fR(\fIarg, arg\fR) .sp \fBNs_ModuleLoad\fR(\fIarg, arg\fR) .sp \fBNs_ModulePath\fR(\fIarg, arg\fR) .sp \fBNs_ModuleSymbol\fR(\fIarg, arg\fR) .sp \fBNs_RegisterModule\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Request.30000644000175000017500000000411407645364627016373 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Request.3,v 1.5 2003/04/10 22:00:55 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Request 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_FreeRequest, Ns_ParseHeader, Ns_ParseRequest, Ns_QueryToSet, Ns_SetRequestUrl \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_FreeRequest\fR(\fIarg, arg\fR) .sp \fBNs_ParseHeader\fR(\fIarg, arg\fR) .sp \fBNs_ParseRequest\fR(\fIarg, arg\fR) .sp \fBNs_QueryToSet\fR(\fIarg, arg\fR) .sp \fBNs_SetRequestUrl\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_registertag.n0000644000175000017500000001663610417520540020231 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_registertag.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_registertag n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_registeradp, ns_adp_registerproc, ns_adp_registerscript, ns_adp_registertag, ns_register_adptag \- ADP registered tags .SH SYNOPSIS .nf \fBns_adp_registeradp\fR \fItag\fR ?\fIendtag\fR? \fIadp\fR \fBns_adp_registerproc\fR \fItag\fR ?\fIendtag\fR? \fIproc\fR \fBns_adp_registerscript\fR \fItag\fR ?\fIendtag\fR? \fIscript\fR \fBns_adp_registertag\fR \fItag\fR ?\fIendtag\fR? \fIadp\fR \fBns_register_adptag\fR \fItag\fR ?\fIendtag\fR? \fIscript\fR .fi .BE .SH DESCRIPTION .PP These commands enable definition of HTML tags within an ADP file which are expanded and evaluated by the server before returning output to the client. Tags are defined as eitehr a single tag with options, e.g., \fI\fR or as an opening/closing tag pair, e.g., \fI text \fR. This approach is an alternative to direct calls via the \fI<% script %>\fR syntax as described in the \fBns_adp\fR man page. .TP \fBns_adp_registeradp\fR \fItag\fR ?\fIendtag\fR? \fIadp\fR .TP \fBns_adp_registertag\fR \fItag\fR ?\fIendtag\fR? \fIadp\fR These commands are identical and register an ADP code fragment to be invoked when the specified tag is encountered while parsing an ADP. The \fItag\fR argument specifies the tag that will trigger invocation of the ADP fragment, which is specified by the \fIadp\fR argument. .sp If the \fIendtag\fR argument is specified, then the ADP fragment will be invoked with two arguments: The first will be the enclosed content, and the second will be the name of an ns_set with any attributes specified in the tag. If no \fIendtag\fR argument is specified, the ADP fragment will only be passed the name of the ns_set. The arguments may be retrieved using \fBns_adp_bindargs\fR or \fBns_adp_argc\fR and \fBns_adp_argv\fR. .sp When the ADP fragment is invoked, its result is inserted in the output instead of the tag (or, if the \fIendtag\fR was specified, in place of the tag, end tag, and the enclosed content). .sp Note: Care must be taken when using this function from inside an ADP, because the \fIadpstring\fR is likely to contain script delimiters (\fB<% ... %>\fR) which will prematurely terminate script fragments. It is probably easier to restrict use of this function to .tcl files. .TP \fBns_adp_registerproc\fR \fItag\fR ?\fIendtag\fR? \fIproc\fR This commands register a Tcl procedure to be evaluated when the given tag is encountered. The \fItag\fR argument specifies the tag that will trigger a call to the procedure specified by the \fIproc\fR argument. .sp The procedure will be called with a variable number of arguments, one for each of the attributes provided in the tag. If the \fIendtag\fR argument is specified, the procedure will also receive a final argument with the contents of the text enclosed between the tags. No evaluation of the content will be performed, it will be passed as a single text block. .sp When the procedure is invoked, its result is inserted in the output instead of the tag (or, if the \fIendtag\fR was specified, in place of the tag, end tag, and the enclosed content). .TP \fBns_adp_registerscript\fR \fItag\fR ?\fIendtag\fR? \fIscript\fR .TP \fBns_register_adptag\fR \fItag\fR ?\fIendtag\fR? \fIscript\fR These commands are identical and register a Tcl script to be evaluated when the given tag is encountered. The \fItag\fR argument specifies the tag that will trigger evaluation of the script specified by the \fIscript\fR argument. .sp If the \fIendtag\fR argument is specified, then the script will be modified with two arguments appended: The first will be the enclosed content, and the second will be the name of an ns_set with any attributes specified in the tag. If no \fIendtag\fR argument is specified, the script will be modified with just the name of the ns_set appended. .sp When the script is evaluated, its result is inserted in the output instead of the tag (or, if the \fIendtag\fR was specified, in place of the tag, end tag, and the enclosed content). .SH EXAMPLES .PP The following is a simple way of handling conditional content in ADPs: .CS proc remember {input tagset} { global _adp_memory set tagname [ns_set iget $tagset name] if {[string match "" $tagname]} { set _adp_memory($tagname) $input return "" } else { return $input } } proc recall {name} { global _adp_memory if {[info exists _adp_memory($name)]} { set parsecommand [list ns_adp_parse -string] lappend parsecommand $_adp_memory($name) ns_puts -nonewline [uplevel $parsecommand] } else { ns_log Error "[ns_adp_argv 0]: Unable to recall \"$name\"" } } .CE If the preceding Tcl has been executed (perhaps during server startup), then the following ADP fragment displays the results of a database query in a table, or shows "No rows in result." if there are no rows: .CS <% set rows {} set db [ns_db gethandle] ns_db exec "select somecolumn from sometable" set row [ns_db bindargs $db] while {[ns_db getrow $db $row] > 0} { lappend rows [ns_set get $row "somecolumn"] } ns_db releasehandle $db %>
<%=$column%>
No rows in result. <% if {[llength $rows] > 0} { recall "hasrows_header" foreach row $rows { set column $row recall "hasrows_rows" } recall "hasrows_footer" } else { recall "norows" } %> .CE .PP The following example demonstrates the use of \fBns_adp_registertag\fR: .CS ns_adp_registertag printdate { The current date is: <%=[ns_httptime [ns_time]]%> } .CE Once defined, typically in a startup script, you could simple include the "" tag to append the text with current date into the output buffer. .SH "SEE ALSO" ns_adp(1), ns_adp_eval(n), ns_adp_safeeval(n), ns_adp_include(n) .SH KEYWORDS ADP, dynamic pages, registered tag aolserver4-4.5.1/doc/ns_adp_exception.n0000644000175000017500000001131410417520540017673 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_exception.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_exception n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_abort, ns_adp_break, ns_adp_exception, ns_adp_return \- ADP exception handling .SH SYNOPSIS .nf \fBns_adp_abort\fR ?\fIresult\fR? \fBns_adp_break\fR ?\fIresult\fR? \fBns_adp_exception\fR ?\fIvarName\fR? \fBns_adp_return\fR ?\fIresult\fR? .fi .BE .SH DESCRIPTION .PP These commands enable early return and interrupt of an ADP execution. Internally, the exception routines sets a flag and return TCL_ERROR to begin unwinding the current Tcl call stack and return control to the ADP evaluation engine. It is possible for an enclosing \fBcatch\fR command to catch the exception and stop Tcl from returning control to ADP. The \fBns_adp_exception\fR command can be used to test for this condition. .TP \fBns_adp_abort\fR ?\fIresult\fR? This command stops ADP processing, raising an execution and unwinding the stack to the top level as an error condition. The request handling code which invokes the first ADP file will normallly generate an error message in this case, ignoring the contents of the output buffer, if any. Note that the exeception can be caught by a \fBcatch\fR command in script block which executes \fBns_adp_abort\fR. However, when that block returns control to the ADP execution engine, the stack will be continue to be unwound. The optional \fIresult\fR argument, if present, will be used to set the Tcl interpreter result string. .TP \fBns_adp_break\fR ?\fIresult\fR? This command stops execution of ADP and unwinds the ADP call stack. Unlike \fBns_adp_abort\fR, the request handling code will generate a normal HTTP response with any contents of the output buffer. The optional \fIresult\fR argument, if present, will be used to set the Tcl interpreter result string. .TP \fBns_adp_exception\fR ?\fIvarName\fR? This command returns a boolean value if an exception has been raised. The optional \fIvarName\fR provides the name of a variable to store one of \fIok\fR, \fIbreak\fR, \fIabort\fR, or \fIreturn\fR to indicate the type of exception raised. .TP \fBns_adp_return\fR ?\fIresult\fR? This function halts processing of the current ADP and sends any pending output (from ns_adp_puts or static HTML) up to the point where it was called to the browser. Nothing in the current ADP is output or executed after it is called. The \fIreturn_value\fR, if specified, becomes the return value of the ADP. Note that this function returns only one level up the call stack. By contrast, \fBns_adp_abort\fR and \fBns_adp_break\fR will return all the way up the call stack. \fBns_adp_return\fR is typically used from an ADP included by another ADP, to stop processing of the inner ADP while allowing the calling ADP to continue. The optional \fIresult\fR argument, if present, will be used to set the Tcl interpreter result string. .SH EXAMPLE The following example demonstrates halting execution of the ADP after returning a complete response with one of the \fBns_return\fR style commands: .CS <% if !$authorized { ns_returnunauthorized; # Send complete response. ns_adp_abort; # Execution stops here. } %>. .CE .SH "SEE ALSO" ns_adp(n) .SH KEYWORDS ADP, dynamic pages, exception aolserver4-4.5.1/doc/ns_parsequery.n0000644000175000017500000000351307645364660017275 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_parsequery.n,v 1.4 2003/04/10 22:01:20 shmooved Exp $ '\" '\" .so man.macros .TH ns_parsequery n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_parsequery \- commands .SH SYNOPSIS \fBns_parsequery \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Fetch.30000644000175000017500000000361707645364612015775 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Fetch.3,v 1.5 2003/04/10 22:00:42 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Fetch 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_FetchPage, Ns_FetchURL \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_FetchPage\fR(\fIarg, arg\fR) .sp \fBNs_FetchURL\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Filter.30000644000175000017500000000407307645364612016166 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Filter.3,v 1.5 2003/04/10 22:00:42 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Filter 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_RegisterCleanup, Ns_RegisterConnCleanup, Ns_RegisterFilter, Ns_RegisterServerTrace \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_RegisterCleanup\fR(\fIarg, arg\fR) .sp \fBNs_RegisterConnCleanup\fR(\fIarg, arg\fR) .sp \fBNs_RegisterFilter\fR(\fIarg, arg\fR) .sp \fBNs_RegisterServerTrace\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_thread.n0000644000175000017500000001045607645314311016334 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_thread.n,v 1.3 2003/04/10 16:16:09 shmooved Exp $ '\" '\" .so man.macros .TH ns_thread n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_thread \- commands .SH SYNOPSIS \fBns_thread begin\fR \fIscript\fR .PP \fBns_thread begindetached\fR \fIscript\fR .PP \fBns_thread get\fR .PP \fBns_thread getid .PP \fBns_thread wait \fItid\fR .PP \fBns_thread yield .BE .SH DESCRIPTION .PP ns_thread begin: .RS begins a new thread which evaluates the specified script and then exits. It returns a thread ID that must eventually be passed to ns_thread wait. (Failing to call ns_thread wait will eventually result in no new threads being created.) .RE ns_thread begindetached: .RS begins a detached thread that doesn't have to be (and can't be) waited for. .RE ns_thread get: .RS gets the thread ID of the current thread. The result is a thread ID that can be passed to ns_thread wait and may look something like "tid532". .RE ns_thread getid: .RS gets the thread integer number for the current thread. The result is a small integer used for identifying threads is a human-readable way, such as "1" or "1120", for example. .RE ns_thread wait: .RS waits for the specified thread to exit. The tid argument is a thread ID returned by ns_thread begin or ns_thread get. .RE ns_thread yield: .RS causes the current thread to yield. .RE .SH EXAMPLES .PP This example is similar to the example under the ns_sockselect function of connecting to the 10 servers and waiting to service them with the ns_sockselect command. In this case, though, each connection gets it's own thread. # This is the procedure which is evaluated for each thread and # handles a single connection to host number $i proc getpage {i} { global pages # new thread will start here - first connect to host set host [format "www%2d.foo.com" $i] set fds [ns_sockopen $host 80 set r [lindex $fds 0] set w [lindex $fds 1] # next, send request puts $w "GET /index.htm HTTP/1.0\r\n\r" flush $w # then read page set pages($i) [read $r] # and close sockets close $w close $r # thread goes away here and other threads waiting # on ns_thread wait will wakeup } # Here's the loop which creates the threads which run getpage. for {set i 1} {$i < 9} {incr i} { set tids($i) [ns_thread begin "getpage $i"] } # wait for the threads to exit and then process the pages for {set i 1} {$i < 9} {incr i} { ns_thread wait $tids($i) # output page ... process the page in $pages($i) put there by other thread ... } Note that the code here is much simpler to follow than the ns_sockselect example; that's the benefit of multithreaded programming. However, it uses more resources as threads need to be created and initialized. This can be a problem if you plan to create many threads. .SH "SEE ALSO" .PP .SH KEYWORDS threads aolserver4-4.5.1/doc/Ns_CritSec.30000644000175000017500000001176207645364605016302 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_CritSec.3,v 1.5 2003/04/10 22:00:37 shmooved Exp $ '\" '\" .so man.macros .TH Ns_CritSec 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME , Ns_CsDestroy, Ns_CsEnter, Ns_CsInit, Ns_CsLeave \- Manage and use critical section locks .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_CsDestroy\fR(\fINs_Cs *csPtr\fR) .sp void \fBNs_CsEnter\fR(\fINs_Cs *csPtr\fR) .sp void \fBNs_CsInit\fR(\fINs_Cs *csPtr\fR) .sp void \fBNs_CsLeave\fR(\fINs_Cs *csPtr\fR) .BE .SH DESCRIPTION .PP Critical section locks are used to prevent more than one thread from executing a specific section of code at one time. They are implemented as "objects", which simply means that memory is allocated to hold the lock state. They can also be called "sychronization objects". .PP While a thread is executing a critical section of code, all other threads that want to execute that same section of code must wait until the lock surrounding that critical section has been released. .PP This is crucial to prevent race conditions which could put the server into an unknown state. For example, if a section of code frees a pointer and then decrements a counter that stores how many pointers exist, it is possible that the counter value and the actual number of pointers may be different. If another section of the server relies on this counter and reads it when the pointer has been freed, but the counter has not yet been decremented, it could crash the server or put it into an unknown state. .PP Critical section locks should be used sparingly as they will adversely impact the performance of the server or module. They essentially cause the section of code they enclose into behaving in a single-threaded manner. If a critical section executes slowly or blocks, other threads that must execute that section of code will begin to block as well until the critical section lock is released. .PP You will normally want to wrap sections of code that are used to both read and write values, create and destroy pointers and structures or otherwise look at or modify data in the system. Use the same named lock for both read and write operations on the same data. .PP Threads that are waiting for a critical section lock to be released do not have to poll the lock. The critical section lock functions use thread condition functions to signal when a lock is released. .TP \fBNs_CsDestroy\fR(\fIcsPtr\fR) Destroy a critical section object. Note that you would almost never need to call this function as synchronization objects are typically created at startup and exist until the server exits. The underlying objects in the critical section are destroyed and the critical section memory returned to the heap. .TP \fBNs_CsEnter\fR(\fIcsPtr\fR) Lock a critical section object, initializing it first if needed. If the critical section is in use by another thread, the calling thread will block until it is no longer so. Note that critical sections are recursive and must be exited the same number of times as they were entered. .TP \fBNs_CsInit\fR(\fIcsPtr\fR) Initialize a critical section object. Memory will be allocated to hold the object's state. .TP \fBNs_CsLeave\fR(\fIcsPtr\fR) Unlock a critical section once. A count of threads waiting to enter the critical section is kept, and a condition is signaled if this is the final unlock of the critical section so that other threads may enter the critical section. .SH "SEE ALSO" nsd(1), info(n), Ns_MasterLock(3), Ns_MasterUnlock(3), Ns_CondDestroy(3), Ns_CondSignal(3), Ns_CondWait(3), Ns_MutexLock(3), Ns_MutexUnlock(3) .SH KEYWORDS aolserver4-4.5.1/doc/ns_at.n0000644000175000017500000000527510417520407015470 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_at.n,v 1.5 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_at n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_atclose, ns_atexit, ns_atshutdown, ns_atsignal \- Facilities to register a script callback. .SH SYNOPSIS .nf \fBns_atclose \fIscript\fR \fBns_atexit \fIscript\fR \fBns_atshutdown \fIscript\fR \fBns_atsignal \fIscript\fR .fi .BE .SH DESCRIPTION .PP These commands register a callback to execute a later time. The callbacks are executed once in the context of the current Tcl interpreter. .TP \fBns_atclose \fIscript\fR Invoke given script when the current connection is closed. The callback can be registered within the Tcl interpreter associated with the current HTTP connection; if no connection exists, and error is returned. .TP \fBns_atexit \fIscript\fR Invoke given script before the AOLserver exists after all virtual servers have stopped. .TP \fBns_atshutdown \fIscript\fR Invoke given script when the current virtual server is shutdown during AOLserver exit. .TP \fBns_atsignal \fIscript\fR Invoke given script when a SIGHUP signal is received in the main startup thread of the AOLserver. .SH "SEE ALSO" ns_shutdown(n), ns_kill(n) .SH KEYWORDS shutdown, callback aolserver4-4.5.1/doc/ns_db.n0000644000175000017500000000463607645364651015471 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_db.n,v 1.4 2003/04/10 22:01:13 shmooved Exp $ '\" '\" .so man.macros .TH ns_db n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_column, ns_db, ns_dbconfigpath, ns_dberrorcode, ns_dberrormsg, ns_dbreturnerror, ns_getcsv, ns_pooldescription, ns_quotelisttolist, ns_table \- commands .SH SYNOPSIS \fBns_column \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_db \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_dbconfigpath \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_dberrorcode \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_dberrormsg \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_dbreturnerror \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_getcsv \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_pooldescription \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_quotelisttolist \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_table \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnRedirect.30000644000175000017500000000673410421472532017311 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnRedirect.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnReturn 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnRedirect \- Internally redirect a request to a new local url .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnRedirect\fR(\fIconn, url\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP char *url in Pointer to string of local url. .BE .SH DESCRIPTION .PP This routine can be used to internally redirect to a new, local url on the server. The \fIurl\fR paramter specifies a path relative to the server, i.e., without the leading "http://host:port" portion. The server will reset the Ns_Request structure in the open connection pointed to by \fIconn\fR and restart connection handling, including authorization checks. The result is a standard AOLserver request procedure result code, either from an underlying call to \fBNs_ConnRunRequest\fR or the result of one of the authorization response routines such as \fBNs_ConnReturnForbidden\fR. Filter callbacks, if any, are not run again with the updated connection. .PP The \fBNs_ConnRedirect\fR routine is used internally in the server to support the basic file serving code (i.e., "fastpath") to redirect to specific files when a directory is opened and by the \fBNs_RegisterRedirect\fR routine to map standard reponse routines to user-provided local url's. .SH EXAMPLE .PP The following example demonstrates redirecting to an ADP help page within a custom C-level request callback whenever a ?help=topic query argument is present: .CS int MyRequest(void *arg, Ns_Conn *conn) { Ns_Set *query = Ns_ConnGetQuery(conn); /* Redirect to help.adp for /myrequest?help=topic calls. */ if (Ns_SetGet(query, "help")) != NULL) { return Ns_ConnReturnRedirect(conn, "/help.adp"); } ... handle non-help requests ... } .CE .SH "SEE ALSO" Ns_RegisterRedirct(3), Ns_ConnRunRequest(3), Ns_AuthorizeRequest(3) .SH KEYWORDS connection, redirect aolserver4-4.5.1/doc/Ns_UrlToFile.30000644000175000017500000001054607645364644016615 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_UrlToFile.3,v 1.4 2003/04/10 22:01:08 shmooved Exp $ '\" '\" .so man.macros .TH Ns_UrlToFile 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_SetUrlToFileProc, Ns_UrlIsDir, Ns_UrlIsFile, Ns_UrlToFile \- URL to file mapping procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_SetUrlToFileProc\fR(\fIchar *server, Ns_UrlToFileProc *procPtr\fR) .sp int \fBNs_UrlIsDir\fR(\fIchar *server, char *url\fR) .sp int \fBNs_UrlIsFile\fR(\fIchar *server, char *url\fR) .sp int \fBNs_UrlToFile\fR(\fINs_DString *dsPtr, char *server, char *url\fR) .BE .SH DESCRIPTION .PP These functions map URL paths to real files and directories. They are normally used to determine whether a given URL has a corresponding file or directory and to return the real filesystem path that corresponds to the URL. .TP \fBNs_SetUrlToFileProc\fR(\fIserver, procPtr\fR) Set a pointer to a custom routine to use in place of \fBNs_UrlToFile\fR. .TP \fBNs_UrlIsDir\fR(\fIserver, url\fR) Construct a directory name by appending the URL to the current AOLserver pages directory for the specified server. Return NS_TRUE if the directory exists; NS_FALSE otherwise. .TP \fBNs_UrlIsFile\fR(\fIserver, url\fR) Construct a file name by appending the URL to the current AOLserver pages directory for the specified server. Return NS_TRUE if the file exists and is a regular file; NS_FALSE otherwise. Example: .CS /* IsFile - Simple request to determine if an URL is a file. */ int IsFile(Ns_Conn *conn, void *ctx) { int isfile; char *server; server = Ns_ConnServer(conn); isfile = Ns_UrlIsFile(server, conn->request->url); if (isfile) { Ns_ConnReturnNotice(conn, 200, "File", NULL); } else { Ns_ConnReturnNotice(conn, 200, "Not a File", NULL); } return NS_OK; } .CE .TP \fBNs_UrlToFile\fR(\fIdsPtr, server, url\fR) The Ns_UrlToFile function writes the full path name of the file corresponding to the given URL. The result is appended to the Ns_DString. The function does not check that the file exists or is readable by the AOLserver process. This function returns a status of NS_OK or NS_ERROR. Normally this prepends the pageroot to the URL path. If you have created your own custom routine and used \fBNs_SetUrlToFileProc\fR to point to it, your routine is called instead. This could be used to create, for example, a module that takes the given URL and maps it to a file in a different way than the default \fBNs_UrlToFile\fR routine. Example: .CS /* A simple page fetch request function. */ int SimpleFetch(Ns_Conn *conn, void *ctx) { Ns_DString ds; FILE fp; char *server; Ns_DStringInit(&ds); server = Ns_ConnServer(conn); Ns_UrlToFile(&ds, server, conn->request->url); fp = fopen(ds.string, "r"); Ns_ConnSendOpenFp(conn, fp, -1); fclose(fp); Ns_DStringFree(&ds); return NS_OK; } .CE .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnRead.30000644000175000017500000001343710421472532016421 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnRead.3,v 1.7 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnRead 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnGets, Ns_ConnRead, Ns_ConnFlushHeaders, Ns_ConnReadHeaders, Ns_ConnReadLine \- Routines to copy connection content .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_ConnGets\fR(\fIbuf, bufsize, conn\fR) .sp int \fBNs_ConnFlushContent\fR(\fIconn\fR) .sp int \fBNs_ConnRead\fR(\fIconn, vbuf, toread\fR) .sp int \fBNs_ConnReadHeaders\fR(\fIconn, set, nreadPtr\fR) .sp int \fBNs_ConnReadLine\fR(\fIconn, dsPtr, nreadPtr\fR) .SH ARGUMENTS .AS Ns_DString dsPtr in/out .AP char *buf in Pointer to string buffer of length \fIbufsize\fR. .AP int bufsize in Length of buffer pointer to by \fIbuf\fR. .AP Ns_Conn conn in Pointer to open connection. .AP Ns_DString dsPtr out Pointer to initialized dstring to receive copied line. .AP int *nreadPtr out Pointer to integer to receive number of bytes copied. .AP Ns_Set set in/out Pointer to initialized Ns_Set to copy headers. .AP int toread in Number of bytes to copy to location starting at \fIvbuf\fR .AP void *vbuf in Pointer to memory location to copy content. .BE .SH DESCRIPTION .PP These routines support copying content from the connection. They all operate by copying from the content buffer returned by a call to \fBNs_ConnContent\fR, maintaining a private, shared offset into the content. This means that these routines are not actually reading directly from the network and thus will not block waiting for input. See the man page on \fBNs_ConnContent\fR for details on how the content is pre-read by the server and how resources are managed for small and large content requests. .TP char *\fBNs_ConnGets\fR(\fIbuf, bufsize, conn\fR) Copies the next available line of text from the content to the given \fIbuf\fR string, up to the given \fIbufsize\fR less space for a trailing null (\\0). The result is a pointer to \fIbuf\fR or NULL if an underlying call to \fBNs_ConnRead\fR fails. .TP int \fBNs_ConnFlushContent\fR(\fIconn\fR) Performs a logical flush of the underlying content available to these routines. It simply moves the private offset to the end of the content. The result is NS_OK unless an underlying call to \fBNs_ConnContent\fR failed in which case NS_ERROR is returned. .TP int \fBNs_ConnRead\fR(\fIconn, vbuf, toread\fR) Copies up to \fItoread\fR bytes from the content to the memory location pointed to by \fIvbuf\fR. The result is the number of bytes copied which will match \fItoread\fR unless less bytes are available in the input or -1 if an underlying call to \fBNs_ConnContent\fR failed. .TP int \fBNs_ConnReadHeaders\fR(\fIconn, set, nreadPtr\fR) Copies lines up to the first blank line or end of content up to the maximum header read size specified with the communication driver "maxheader" parameter (default: 32k). Each line is parsed into "key: value" pairs into the given Ns_Set pointed to be the \fIset\fR argument using the \fBNs_ParseHeader\fR routine with the \fINs_HeaderCaseDisposition\fR specified by the "headercase" server option (default: Preserve). The result is NS_OK if all lines were consumed or NS_ERROR on overflow beyond the max header limit or if there was an error with the underlying call to \fBNs_ConnRead\fR (including an error of a single line beyond the max line limit as described below). The integer pointed to by the \fInreadPtr\fR argument, if given, is updated with the total number of bytes consumed. This routine can be useful when parsing multipart/form-data content to collect headers for each part. .TP int \fBNs_ConnReadLine\fR(\fIconn, dsPtr, nreadPtr\fR) Copies the next available line to the given \fIdsPtr\fR dstring. The integer pointed to by \fInreadPtr\fR, if present, is updated with the number of bytes copied. The line will not include the trailing \\r\\n or \\n if present. The function will return NS_OK unless an underlying call to \fBNs_ConnContent\fR failed or the line exceeds the maximum line read size specified by the communication driver "maxline" parameter (default: 4k). This routine differs from \fBNs_ConnGets\fR in that it copies the result to a dstring instead of a character buffer, requires a full \n or end-of-content terminated line, and enforces the maxline limit. .SH "SEE ALSO" Ns_ConnContent(3), Ns_ParseHeader(3) .SH KEYWORDS connection, read, content aolserver4-4.5.1/doc/ns_addr.n0000644000175000017500000000447210417520407015774 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_addr.n,v 1.5 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_addr n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_addrbyhost, ns_hostbyaddr \- Domain Name Service routines. .SH SYNOPSIS .nf \fBns_addrbyhost \fIaddress\fR \fBns_hostbyaddr \fIhostname\fR .fi .BE .SH DESCRIPTION .PP These commands utilize the platforms name resolution routines which normally access the Domain Name Service (DNS) to translate IP addresses into fully qualified hostnames and vice versa. .TP \fBns_addrbyhost \fIaddress\fR Returns the fully qualified domain name for given IP address expressed in dotted decimal format (e.g., 72.14.207.99). .TP \fBns_hostbyaddr \Ihostname\fR Returns the dotted decimal address for a partial or fully qualified domain name (e.g., google.com). .SH KEYWORDS DNS, hostname, address aolserver4-4.5.1/doc/Ns_ProcInfo.30000644000175000017500000000365107645364617016466 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ProcInfo.3,v 1.5 2003/04/10 22:00:47 shmooved Exp $ '\" '\" .so man.macros .TH Ns_ProcInfo 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_GetProcInfo, Ns_RegisterProcInfo \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_GetProcInfo\fR(\fIarg, arg\fR) .sp \fBNs_RegisterProcInfo\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclThread.30000644000175000017500000000365107645364636016622 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclThread.3,v 1.5 2003/04/10 22:01:02 shmooved Exp $ '\" '\" .so man.macros .TH Ns_TclThread 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclDetachedThread, Ns_TclThread \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclDetachedThread\fR(\fIarg, arg\fR) .sp \fBNs_TclThread\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnSend.30000644000175000017500000002110210421472532016423 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnSend.3,v 1.6 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnSend 3 4.5 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnPrintfHeader, Ns_ConnPuts, Ns_ConnSend, Ns_ConnSendChannel, Ns_ConnSendDString, Ns_ConnSendFd, Ns_ConnSendFdEx, Ns_ConnSendFp, Ns_ConnWrite, Ns_WriteConn \- Routines to write data to the connection .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConnPrintfHeader(\fIconn, fmt, ...\fR) .sp int \fBNs_ConnPuts\fR(\fIconn, string\fR) .sp int \fBNs_ConnSend\fR(\fIconn, bufs, nbufs\fR) .sp int \fBNs_ConnSendChannel\fR(\fIconn, chan, nsend\fR) .sp int \fBNs_ConnSendDString\fR(\fIconn, dsPtr\fR) .sp int \fBNs_ConnSendFd\fR(\fIconn, fd, nsend\fR) .sp int \fBNs_ConnSendFdEx\fR(\fIconn, fd, off, nsend\fR) .sp int \fBNs_ConnSendFp\fR(\fIconn, fp, nsend\fR) .sp int \fBNs_ConnWrite\fR(\fIconn, buf, len\fR) .sp int \fBNs_WriteConn\fR(\fIconn, buf, len\fR) .SH ARGUMENTS .AS "struct iovec" "struct iovec" in .AP char *buf in Pointer to bytes of specified length. .AP Ns_Conn conn in Open connection on which to send content. .AP Ns_DString dsPtr in Pointer to initialized dstring with content to send. .AP int fd in File descriptor opened for read. .AP char *fmt in Pointer to \fBsprintf\fR style format string which specifies the types of the remaining variable number of arguments. .AP FILE *fp in Stdio FILE pointer opened for read. .AP int len in Length of bytes pointed to by \fIbuf\fR. .AP int nbufs in Number of iovec structures pointed to by \fIbufs\fR. .AP int nsend in Number of bytes to send from object. .AP off_t off in Offset into open file descriptor to begin sending content. .AP char *string in Pointer to null-terminated string. .AP "struct iovec" bufs in Pointer to array of iovec structures. .AP Tcl_Channel chan in Pointer to Tcl channel open for read. .BE .SH DESCRIPTION .PP These functions are the lowest level routines which support sending content directly to a connection through the connection's communications driver (e.g., nssock or nsopenssl). They all attempt to send the entire requested output, blocking the calling thread up to the driver-specific timeout if necessary. Header data queued for send with \fBNs_ConnQueueHeaders\fR, if any, will be sent before the requested user data. .PP In practice, higher level routines such as the \fBNs_ConnReturn\fR functions and \fBNs_ConnFlush\fR are used to generate complete responses instead of these lower level routines. The higher level routines construct appropriate headers, manage output character encoding, and support gzip compression, calling these lower level routines as needed. .TP int \fBNs_ConnPrintfHeader\fR(\fIconn, fmt, ...\fR) Contrary to it's name, this routine has nothing to do with HTTP headers. Instead, it simply calls \fBNs_DStringPrintf\fR with a temporary dstring, the given \fIfmt\fR argument, and any variables arguments and then calls \fBNs_ConnSendDString\fR with the temporary dstring. The result is NS_OK if all formatted bytes were sent, otherwise NS_ERROR. .TP int \fBNs_ConnPuts\fR(\fIconn, string\fR) This routines sends a null-terminated string to the client and returns NS_OK if successful or NS_ERROR on failure. It is equivalent to \fBNs_WriteConn\fR(\fIconn, string, strlen(string)\fR). .TP int \fBNs_ConnSend\fR(\fIconn, bufs, nbufs\fR) This is the lowest level routine which calls the connection's communication driver to send an array of zero or more buffers. The result is the total number of bytes sent which should equal the total requested data or -1 on error. The number of bytes sent from queued header data, if any, is not included in the result. The \fIbufs\fR argument is a pointer to an array of \fInbufs\fR iovec structures. The usage is similar to the the Unix \fBwritev\fR system call. The iovec structure is defined as: .CS struct iovec { void *iov_base; size_t iov_len } .CE Each element of the structure should contain a pointer to valid user data specified by \fIiov_base\fR of length \fIiov_len\fR. A NULL value for \fIiov_base\fR and a cooresponding value of zero for \fIiov_len\fR is valid and will simply be skipped over when sending the total requested bytes. .TP int \fBNs_ConnSendChannel\fR(\fIconn, chan, nsend\fR) This routine copies \fInsend\fR bytes from the open Tcl channel to the connection. The result is NS_OK if all bytes available in the open channel or all bytes requested where sent, otherwise NS_ERROR. .TP int \fBNs_ConnSendDString\fR(\fIconn, dsPtr\fR) This routines sends all content which exists in the dstring pointed to by \fIdsPtr\fR. The result is NS_OK if all bytes where sent, otherwise NS_ERROR. .TP int \fBNs_ConnSendFd\fR(\fIconn, fd, nsend\fR) This routine copies \fInsend\fR bytes from the open file descriptor to the connection. The result is NS_OK if all bytes available in the open file or all bytes requested where sent, otherwise NS_ERROR. Copying begins from the current offset. .TP int \fBNs_ConnSendFp\fR(\fIconn, fp, nsend\fR) This routine copies \fInsend\fR bytes from the open stdio FILE to the connection. The result is NS_OK if all bytes available in the open file or all bytes requested where sent, otherwise NS_ERROR. Copying begins from the current offset. .TP int \fBNs_ConnSendFdEx\fR(\fIconn, fd, off, nsend\fR) This routine copies \fInsend\fR bytes from the open file descriptor to the connection. The result is NS_OK if all bytes available in the open file or all bytes requested where sent, otherwise NS_ERROR. Copying begins from the offset given in the \fIoff\fR parameter. (NOTE: This routine is currently not supported on Win32 and always returns NS_ERROR). .TP int \fBNs_ConnWrite\fR(\fIconn, buf, len\fR) This routine will send a single buffer pointed to by \fIbuf\fR of length \fIlen\fR. The result is the number of bytes sent or -1 on error. It is equivalent to calling \fBNs_ConnSend\fR with an single struct iovec. .TP int \fBNs_WriteConn\fR(\fIconn, buf, len\fR) This routine will send a single buffer pointed to by \fIbuf\fR of length \fIlen\fR. The result is NS_OK if all content was sent, otherwise NS_ERROR. It is equivalent to calling \fBNs_ConnWrite\fR and mapping the bytes sent or -1 error result to NS_OK or NS_ERROR. .SH EXMPLES .PP The following example demonstrates crafting some headers and then sending two buffers of data. In this case, \fBNs_ConnSend\fR will actually call the communications driver with three buffers, the first pointing to header data queued for send by \fBNs_ConnQueueHeaders\fR followed by the two user data buffers. The result, assuming all three buffers are resonably small, is likely an efficient single send on the socket: .CS struct iovec iov[2]; int contentlength; iov[0].iov_base = firstbuf; iov[0].iov_len = firstlen; iov[1].iov_base = secondbuf; iov[1].iov_len = secondlen; contentlength = iov[0].iov_len + iov[1].iov_len; Ns_ConnSetRequiredHeaders(conn, "text/html", contentlength); Ns_ConnQueueHeaders(conn, 200); if (Ns_ConnSend(conn, iov, contentlength) != contentlength) { ... error, e.g., connection drop ... } Ns_ConnClose(conn); .CE .SH "SEE ALSO" Ns_ConnClose(3), Ns_ConnReturnHtml(3), Ns_ConnFlush(3) .SH KEYWORDS connection, i/o aolserver4-4.5.1/doc/ns_chan.n0000644000175000017500000000354110417520407015767 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_chan.n,v 1.2 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_chan n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_chan \- Facility to share open file channels between interps .SH SYNOPSIS \fBns_chan \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_conn.n0000644000175000017500000000403607645364650016032 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_conn.n,v 1.4 2003/04/10 22:01:12 shmooved Exp $ '\" '\" .so man.macros .TH ns_conn n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_conn, ns_conncptofp, ns_get_multipart_formdata, ns_writecontent \- commands .SH SYNOPSIS \fBns_conn \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_conncptofp \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_get_multipart_formdata \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_writecontent \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_ctl.n0000644000175000017500000001521410417520540016462 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_ctl.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_ctl n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_ctl \- ADP control command .SH SYNOPSIS .nf \fBns_adp_ctl bufsize\fR \fI?size?\fR \fBns_adp_ctl chan\fR \fIchannel\fR \fBns_adp_ctl autoabort\fR \fI?bool?\fR \fBns_adp_ctl detailerror\fR \fI?bool?\fR \fBns_adp_ctl displayerror\fR \fI?bool?\fR \fBns_adp_ctl expire\fR \fI?bool?\fR \fBns_adp_ctl gzip\fR \fI?bool?\fR \fBns_adp_ctl nocache\fR \fI?bool?\fR \fBns_adp_ctl safe\fR \fI?bool?\fR \fBns_adp_ctl singlescript\fR \fI?bool?\fR \fBns_adp_ctl stricterror\fR \fI?bool?\fR \fBns_adp_ctl trace\fR \fI?bool?\fR \fBns_adp_ctl trimspace\fR \fI?bool?\fR .fi .BE .SH DESCRIPTION This command enables control of the current ADP execution environment. Aside from the \fIbufsize\fR and \fIchan\fR subcommands, they all return a boolean value for a given ADP option. If the \fIbool\fR argument is given, the option is set to the given value and the previous value is returned. .TP \fBns_adp_ctl bufsize\fR \fI?size?\fR This command returns the currently ADP output buffer size, setting it to a new value if the optionial \fIsize\fR argument is specified. .TP \fBns_adp_ctl chan\fR \fIchannel\fR This command is used to specify an open file channel to receive output when the buffer is flushed. If \fIchannel\fR is the null string, the output channel is cleared. This capability can be useful for specialized uses of ADP outside the context of an HTTP connection, e.g., for debugging or testing. .TP \fBns_adp_ctl autoabort\fR \fI?bool?\fR Query or set the \fIautoabort\fR option. When enabled, failure to flush a buffer (normally the result of a closed HTTP connection) generates an ADP exception, unwinding the ADP call stack. .TP \fBns_adp_ctl detailerror\fR \fI?bool?\fR Query or set the \fIdetailerror\fR option. When enabled, errors in ADP pages are formatted with information about the context of the HTTP request. This can be very helpful in debugging ADP errors but potentially a security risk if the HTTP context (e.g., cookie headers) contains personal or sensitive data. Errors are logged to the server log and, if \fIdisplayerror\fR is enabled, appened to the output buffer. .TP \fBns_adp_ctl displayerror\fR \fI?bool?\fR Query or set the \fIdisplayerror\fR option. When enabled, errors in ADP pages are formatted and appended to the output stream, normally visiable to a user's browser. This option should generally be enabled in development and disabled in production. .TP \fBns_adp_ctl expire\fR \fI?bool?\fR Query or set the \fIexpire\fR option. When enabled, the ADP request processing code adds an "Expires: now" header in the response buffer to disable any caching. In practice, more thoughtful cache control mechanisms should be used based on the HTTP/1.1 spec. .TP \fBns_adp_ctl gzip\fR \fI?bool?\fR Query or set the \fIgzip\fR option. When enabled, the output buffer is compressed before being returned in the response. As ADP's are generally used to generate text data such as HTML or XML, compression is normally quite successful at reducing the response size. .TP \fBns_adp_ctl nocache\fR \fI?bool?\fR Query or set the \fInocache\fR option. When enabled, all requests to cache executed ADP blocks via the \fBns_adp_include -cache\fR directive are ignored, resulting in normal execution of all code. .TP \fBns_adp_ctl safe\fR \fI?bool?\fR Query or set the \fIsafe\fR option. When enabled, all code is executed in "safe" mode, disabling and ignoring any code within <% ... %> tags and only allowing execution of previously defined registered tags. .TP \fBns_adp_ctl singlescript\fR \fI?bool?\fR Query or set the \fIsinglescript\fR option. When enabled, ADP pages are converted from independent text-script blocks into a single script, which text blocks replaced with a call to \fBns_adp_append\fR with the given text. Functionally the output is the same however an error anywhere on the page will result in the entire ADP page returning instead of skipping to the next block which is the normal behavior. In practice, \fIsinglescript\fR is useful in development while in production leaving it disabled provides a more defensive execution environment where minor errors in one ADP do not inhibit execution of the overall page. .TP \fBns_adp_ctl stricterror\fR \fI?bool?\fR Query or set the \fIstricterror\fR option. When enabled, the result is similar to that of \fIsinglescript\fR in that an error in a particular block will return the entire page instead of continuing to the next text or script block. .TP \fBns_adp_ctl trace\fR \fI?bool?\fR Query or set the \fItrace\fR option which currently does nothing. .TP \fBns_adp_ctl trimspace\fR \fI?bool?\fR Query or set the \fItrimspace\fR option. When enabled, any white space at the start of the output buffer is eliminated. White space can show up in the output as a result of ADP pages which do nothing but include other ADP's in a way to reuse code with the unfortunate side effect of the training newline at the end of a "<% ns_adp_include myfile.adp %>" ending up in the output stream. .SH "SEE ALSO" ns_adp(n), ns_adp_flush(n), ns_adp_close(n), ns_adp_mimetype(n) .SH KEYWORDS ADP, dynamic pages, buffer aolserver4-4.5.1/doc/Ns_ConnQuery.30000644000175000017500000001416610421472532016653 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnQuery.3,v 1.2 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnGetQuery 3 4.5 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnGetQuery, Ns_ConnClearQuery, Ns_ConnGetFile, Ns_ConnFirstFile, Ns_ConnNextFile \- Routines to access query data included with a connection request .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp Ns_Set * \fBNs_ConnGetQuery\fR(\fINs_Conn *conn\fR) .sp void \fBNs_ConnClearQuery\fR(\fINs_Conn *conn\fR) .sp Ns_ConnFile * \fBNs_ConnGetFile\fR(\fINs_Conn *conn, char *file\fR) .sp Ns_ConnFile * \fBNs_ConnFirstFile\fR(\fINs_Conn *conn, Tcl_HashSearch *searchPtr\fR) .sp Ns_ConnFile * \fBNs_ConnNextFile\fR(\fINs_Conn *conn, Tcl_HashSearch *searchPtr\fR) .sp .SH ARGUMENTS .AS Tcl_HashSearch *searchPtr in/out .AP Ns_Conn *conn in Pointer to given connection. .AP char *file in Name of embedded file. .AP Tcl_HashSearch *searchPtr in/out Pointer to buffer to maintain state of an active search. .sp .BE .SH DESCRIPTION .PP These routines provide access to connection query data, derived from either URL query arguments (i.e., key/value pairs after the \fI?\fR in an URL) or via an HTTP POST. The server supports ordinary URL encoded forms as well as \fImultipart/form-data\fR forms which may include one or more embedded files. .PP As form processing is a common and important aspect of dynamic web applications, AOLserver provides easy access to the query data within the core. The parsing occurs on demand and the results are cached for reuse throughout the connection; there is no need to copy the returned \fINs_Set\fR or \fINs_ConnFile\fR structure(s). The results of these routines should be considered read-only. .TP Ns_Set *\fBNs_ConnGetQuery\fR(\fIconn\fR) Returns a pointer to an \fINs_Set\fR with the fields of the connection query or \fINULL\fR if no valid query was present. The keys and values are in UTF-8, decoded from the request based on the server \fIurlencoding\fR config option. Subsequent calls to \fBNs_ConnGetQuery\fR will return the same set unless the server detects the connection encoding has changed in which case the previous query is cleared and a new query result is generated. .sp Data for the query is based on any URL query arguments which may be present (i.e., key/value pairs following the \fI?\fR in the URL). If there is no URL query data, the server will parse the content of an HTTP \fBPOST\fI. .TP void \fBNs_ConnClearQuery\fR(\fIconn\fR) Frees the previous parsed query, if any. There is normally no need to call this routine as it is called automatically at the end of a connection if necessary. It is normally only called internally when \fBNs_ConnGetQuery\fI detects the url encoding has been manually updated for the connection, potentially invalidating the character encoding on the previous form parsing. .PP Ns_ConnFile *\fBNs_ConnGetFile\fR(\fIfile\fR) Returns the \fINs_ConnFile\fR structure for the given file if present which includes the following fields: .sp .CS typedef struct Ns_ConnFile { char *name; Ns_Set *headers; off_t offset; off_t length; } Ns_ConnFile; .CE .sp The \fIname\fR field is a pointer to a string which matches the name as provided by the corresponding form \fI\fR tag. The \fIheaders\fR field is a pointer to an \fINs_Set\fR with the key/value pairs for the file input meta data, e.g., a \fIContent-Type\fR header. The \fIoffset\fR and \fIlength\fR fields specfy where within the content the actual file bytes are located. See the \fBNs_ConnContent\fR man page for details on accessing the content bytes either through an in-memory buffer or open temp file. .PP \fBNs_ConnFirstFile\fR and \fBNs_ConnNextFile\fR routines allow you to manage a search through the underlying hash table of uploaded files. .SH EXAMPLE Given the following HTML form: .sp .CS
.CE the following code would dump the form strings and file info to the server log: .sp .CS void DumpQuery(Ns_Conn *conn) { Ns_Set *query; Ns_ConnFile *filePtr; Tcl_HashSearch search; query = Ns_ConnGetQuery(conn); if (query != NULL) { /* Dump key/values of all fields. */ Ns_SetPrint(query); /* Dump info on each embedded file. */ filePtr = Ns_ConnFirstFile(conn); while (filePtr != NULL) { Ns_Log(Notice, "file: %s %d %d", filePtr->name, filePtr->offset, filePtr->length); filePtr = Ns_ConnNextFile(conn); } } } .CE .SH "SEE ALSO" Ns_Set(3), Ns_Conn(3), Ns_ConnContent(3), ns_conn(n), ns_parsequery(n) .SH KEYWORDS form, query aolserver4-4.5.1/doc/Ns_ConnType.30000644000175000017500000001146710421472532016470 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnType.3,v 1.1 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnType 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnGetType, Ns_ConnSetType \- Routines to manage the HTTP response type .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_ConnGetType\fR(\fIconn\fR) .sp void \fBNs_ConnSetType\fR(\fIconn, type\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .AP char *type in Character string with response mimetype. .BE .SH DESCRIPTION .PP These routines both manage the eventual \fIcontent-type\fR header which is generated by a later call to \fBNs_ConnFlush\fR or \fBNs_ConnFlushDirect\fR as well as manage the appropriate character encoding for text output types. .TP char *\fBNs_ConnGetType\fR(\fIconn\fR) Return the current HTTP mime type (e.g., "text/html; charset=iso-8859-1") or NULL if no type has yet been set. .TP void \fBNs_ConnSetType\fR(\fIconn, type\fR) Sets the mimetype of the response to the given \fItype\fR. A later call to \fBNs_ConnFlush\fR will include a header of the form \fIcontent-type: type\fR when generating the response. .SH "CHARSETS AND ENCODINGS" .PP For text types, a call to \fBNs_ConnSetType\fR can also include an optional "charset=" attribute. If no \fIcharset\fR is specified, the server will append a default charset if specified as the \fIoutputcharset\fR server configuration variable. .PP With a given or automatically appended charset for text types, the server will then set the output encoding to the cooresponding Tcl_Encoding, for example, mapping the charset "iso-8859-1" to the Tcl_Encoding equivalent "iso8859-1". All text later sent via \fBNs_ConnFlush\fR will be first encoded using the determined Tcl_Encoding (calls to \fBNs_ConnFlushDirect\fR will bypass this encoding step). See the man pages on \fBNs_GetCharsetEncoding\fR for details on how these mappings are configured. .PP The charset modification feature was added in later versions of AOLserver to support legacy code which may have been sprinkled with direct calls to set text types without specifying the charset, e.g., calls such as: .CS ns_return 200 text/html "hello" .CE .SH EXAMPLES .PP The following example demonstrates sending Japanese character data. In this case, assume "utf8string" contains a series of UTF-8 bytes with various Japanese characters. The call to \fBNs_ConnSetType\fR will setup the appropriate "shiftjis" output Tcl_Encoding to match the given "shift_jis" charset: .CS Ns_ConnSetStatus(conn, 200); Ns_ConnSetType(conn, "text/html; charset=shift_jis"); Ns_ConnFlushDirect(conn, utf8string, -1, 0); .CE The following demonstrates the behavior of the default server charset encoding. Assume the following is set in the config file: .CS ns_section ns/server/serverName ns_param outputcharset iso-8859-1 .CE In this case, a call to \fBNs_ConnSetType\fR(\fIconn, "text/html"\fR) without a specific charset would be modified to include "charset=iso-8859-1". Based on this modification, the output encoding would be set to the "iso8859-1" Tcl_Encoding. .SH "SEE ALSO" Ns_ConnGetType(3), Ns_ConnSetType(3), Ns_ConnFlush(3), Ns_ConnFlushDirect(3), Ns_ConnSetRequiredHeaders(3), Ns_ConnQueueHeaders(3), Ns_GetCharsetEncoding(3), Ns_GetTypeEncoding(3), ns_conn(n) .SH KEYWORDS connectionn, response, status, encoding, charset aolserver4-4.5.1/doc/Ns_Driver.30000644000175000017500000000374407545404743016177 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Driver.3,v 1.2 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Driver 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DriverInit, Ns_GetDriverContext, Ns_RegisterDriver \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DriverInit\fR(\fIarg, arg\fR) .sp \fBNs_GetDriverContext\fR(\fIarg, arg\fR) .sp \fBNs_RegisterDriver\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ExtDb.30000644000175000017500000000377607645364611015757 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ExtDb.3,v 1.5 2003/04/10 22:00:41 shmooved Exp $ '\" '\" .so man.macros .TH Ns_ExtDb 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ExtDbMsgCodeToName, Ns_ExtDbMsgNameToCode, Ns_ExtDbMsgRequiresArg \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_ExtDbMsgCodeToName\fR(\fIarg, arg\fR) .sp \fBNs_ExtDbMsgNameToCode\fR(\fIarg, arg\fR) .sp \fBNs_ExtDbMsgRequiresArg\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Config.30000644000175000017500000001077710267036156016147 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Config.3,v 1.6 2005/07/18 23:34:06 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Config 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConfigGetBool, Ns_ConfigGetInt, Ns_ConfigGetInt64, Ns_ConfigGetPath, Ns_ConfigGetSection, Ns_ConfigGetSections, Ns_ConfigGetValue, .br Ns_ConfigGetValueExact \- Extract information from the server configuration files .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ConfigGetBool\fR(\fIchar *section, char *key, int *valuePtr\fR) .sp int \fBNs_ConfigGetInt\fR(\fIchar *section, char *key, int *valuePtr\fR) .sp int \fBNs_ConfigGetInt64\fR(\fIchar *section, char *key, INT64 *valuePtr\fR) .sp char * \fBNs_ConfigGetPath\fR(\fIchar *server, char *module, ...\fR) .sp Ns_Set * \fBNs_ConfigGetSection\fR(\fIchar *section\fR) .sp Ns_Set ** \fBNs_ConfigGetSections\fR(\fIvoid\fR) .sp char * \fBNs_ConfigGetValue\fR(\fIchar *section, char *key\fR) .sp char * \fBNs_ConfigGetValueExact\fR(\fIchar *section, char *key\fR) .BE .SH DESCRIPTION .PP These functions allow you to extract information from the server config files. .TP \fBNs_ConfigGetBool\fR(\fIsection, key, valuePtr\fR) Examines key in section and returns NS_TRUE for values 1, y, yes, on, t, or true, case insensitive, and sets valuePtr to 1. Returns NS_FALSE for values 0, n, no, off, f, false, case insensitive, and sets valuePtr to 0. .TP \fBNs_ConfigGetInt\fR(\fIsection, key, valuePtr\fR) Examines key in section and attempts to convert to an integer value. On success, returns NS_TRUE, otherwise NS_FALSE. The value of the integer is placed into valuePtr. .TP \fBNs_ConfigGetInt64\fR(\fIsection, key, valuePtr\fR) Like Ns_ConfigGetInt, but with INT64 data instead of system-native int types. This function isn't available on WIN32. .TP \fBNs_ConfigGetPath\fR(\fIserver, module, ...\fR) Get the full name of a config file section if it exists. Returns a pointer to to an ASCIIZ string of the full path name, or NULL if that path is not in the config file. The \fIserver\fR and/or \fImodule\fR parameters may be NULL and must be followed a variable list of additional parameters, the last element of which must be NULL. .sp Examples: .br Ns_ConfigGetPath("server1", "nscp", NULL) .br \ returns "ns/server/server1/module/nscp" .br Ns_ConfigGetPath("server1", "nscp", "users", NULL) .br \ returns "ns/server/server1/module/nscp/users" .br Ns_ConfigGetPath(NULL, "globalmod", "subsect1", "subsect2", NULL) .br \ returns "ns/module/globalmod/subsect1/subsect2" .TP \fBNs_ConfigGetSection\fR(\fIsection\fR) Returns an Ns_Set of the section's parameters, or NULL if the section does not exist. .TP \fBNs_ConfigGetSections\fR() Returns a pointer to an array of pointers to Ns_Sets, one for each config section. The result is a malloc'ed copy of the config sections. .TP \fBNs_ConfigGetValue\fR(\fIsection, key\fR) Returns a pointer to the value of the key in section, or NULL if the key doesn't exist. .TP \fBNs_ConfigGetValueExact\fR(\fIsection, key\fR) Case sensitive equivalent of Ns_ConfigGetValue. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_file.n0000644000175000017500000001261407645364652016017 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_file.n,v 1.4 2003/04/10 22:01:14 shmooved Exp $ '\" '\" .so man.macros .TH ns_file n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_chmod, ns_cp, ns_cpfp, ns_ftruncate, ns_link, ns_mkdir, ns_rename, ns_rmdir, ns_symlink, ns_truncate, ns_unlink \- File manipulation commands .SH SYNOPSIS \fBns_chmod \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_cp \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_cpfp \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_ftruncate \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_link \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_mkdir \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_rename \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_rmdir \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_symlink \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_truncate \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_unlink \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP .TP \fBns_chmod\fR \fIfilename\fR \fImode\fR Change a file's access permissions. ns_chmod changes the specified file's permissions to mode, in the same manner as the Unix chmod(1) command-line utility. .TP \fBns_cp\fR \fI-preserve\fR \fIfile1\fR \fIfile2\fR Copy one file to another. ns_cp copies the contents of file1 to file2, just like the Unix "cp" command. The default directory is the home directory for the server. If -preserve is specified, the copied file will retain the creation time, modification time, owner, and mode of the original file, just like the Unix "cp -p" command. .TP \fBns_cpfp\fR \fIfileid1\fR \fIfileid2\fR \fI?nbytes?\fR Copy a specified number of bytes from one file to another. ns_cpfp copies information from one file (fileid1) to another (fileid2). If you specify a number of bytes in the nbytes argument, only the specified number of bytes will be copied. By default, the entire file is copied. .TP \fBns_ftruncate\fR \fIfileid\fR \fI?length?\fR Truncate an open file to a specified length. ns_ftruncate causes the open file specified by fileid to have a size of length bytes. If length is not specified, it causes the file to have a size of zero bytes. The file must be open and be a regular file. .TP \fBns_link\fR \fI?-nocomplain?\fR \fIfilename1\fR \fIfilename2\fR Create a link. ns_link creates a link named filename2 that points to the file specified by filename1. If the link fails, a Tcl error is generated, unless -nocomplain is specified. .TP \fBns_mkdir\fR \fIpath\fR Create a directory. ns_mkdir creates the directory named PATH, just like the Unix mkdir command. By default, under Unix the directory is created with the file permissions set to 0755 (rwxr-xr-x.). These permissions can be modified by setting the umask parameter for the server. .TP \fBns_rename\fR \fIfile1\fR \fIfile2\fR Rename a file. ns_rename renames the first file (file1) to the file name specified by file2. Make sure that the files and the directories in which the files exist are read/write accessible to the username that's running the AOLserver. .TP \fBns_rmdir\fR \fIpath\fR Remove a directory. ns_rmdir removes the directory named path, just like the Unix rmdir command. The directory must already be empty. .TP \fBns_unlink\fR \fI[-nocomplain]\fR \fIfilename\fR Remove a file. ns_unlink attempts to remove the file filename. If -nocomplain is not passed in and the removal fails, a Tcl error is generated. .TP \fBns_truncate\fR \fIfilename\fR \fI?length?\fR Truncate a file to a specified length. ns_truncate causes the file specified by filename to have a size of length bytes. If length is not specified, it causes filename to have a size of zero bytes. The file must exist and be a regular file. .TP \fBns_unlink\fR \fI[-nocomplain]\fR \fIfilename\fR Remove a file. ns_unlink attempts to remove the file filename. If -nocomplain is not passed in and the removal fails, a Tcl error is generated. .SH "SEE ALSO" ns_chmod, ns_cp, ns_cpfp, ns_ftruncate, ns_link, ns_mkdir, ns_rename, ns_rmdir, ns_symlink, ns_truncate, ns_unlink .SH KEYWORDS aolserver4-4.5.1/doc/ns_eval.n0000644000175000017500000000346307645364652016031 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_eval.n,v 1.4 2003/04/10 22:01:14 shmooved Exp $ '\" '\" .so man.macros .TH ns_eval n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_eval \- commands .SH SYNOPSIS \fBns_eval \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_normalizepath.n0000644000175000017500000000373207645314306017745 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_normalizepath.n,v 1.3 2003/04/10 16:16:06 shmooved Exp $ '\" '\" .so man.macros .TH ns_normalizepath n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_normalizepath \- commands .SH SYNOPSIS \fBns_normalizepath\fR \fIpath\fR .BE .SH DESCRIPTION .PP \fBns_normalizepath\fR .RS Removes extraneous slashes ("/") from the given path .RE .PP .SH EXAMPLES \fBns_normalizepath\fR .RS ns_normalizepath a/b///c/d Returns: /a/b/c/d .RE .PP .SH "SEE ALSO" .PP .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Master.30000644000175000017500000000650407645364615016200 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Master.3,v 1.5 2003/04/10 22:00:45 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Master 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_MasterLock, Ns_MasterUnlock \- Enter and leave the single master critical section lock .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_MasterLock\fR(\fIvoid\fR) .sp void \fBNs_MasterUnlock\fR(\fIvoid\fR) .BE .SH DESCRIPTION .PP The single master critical section lock is used throughout the core server to protect portions of code from being run by more than one thread at a time. These are convenience functions which actually make calls to \fBNs_CsEnter\fR and \fBNs_CsLeave\fR to perform the locking and unlocking function. You should not use these functions in your modules. To protect critical sections in your modules you should create and initialize your own named locks, then wrap your critical sections with calls to \fBNs_CsEnter\fR and \fBNs_CsLeave\fR. .TP \fBNs_MasterLock\fR() Enter the single master lock. The thread that holds this lock is guaranteed exclusive access to the section of code that follows the call to \fBNs_MasterLock\fR. Other threads that attempt to enter the master critical section while another thread owns the master lock will block until the owning thread releases the master lock. Be extremely careful with code you place within the master critical section. If the thread that owns the master lock blocks for any reason while in the master critical section, other threads that need to enter that section of code will block until the master lock is released. .TP \fBNs_MasterUnlock\fR() Leave the single master critical section. The thread that owns the lock must release it after the critical section of code has completed so that other threads may execute the critical section code. .SH "SEE ALSO" nsd(1), info(n), Ns_CsEnter(3), Ns_CsLeave(3) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_SockCallback.30000644000175000017500000000407307645364631017256 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_SockCallback.3,v 1.5 2003/04/10 22:00:57 shmooved Exp $ '\" '\" .so man.macros .TH Ns_SockCallback 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_SockCallback, Ns_SockCancelCallback, Ns_SockListenCallback, Ns_SockPortBound \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_SockCallback\fR(\fIarg, arg\fR) .sp \fBNs_SockCancelCallback\fR(\fIarg, arg\fR) .sp \fBNs_SockListenCallback\fR(\fIarg, arg\fR) .sp \fBNs_SockPortBound\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_ictl.n0000644000175000017500000005067410417520540016020 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_ictl.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_ictl n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_ictl \- Facility to control AOLserver multi-threaded Tcl interpreters .SH SYNOPSIS .nf \fBns_ictl addmodule\fR \fImodule\fR \fBns_ictl cancel\fR \fIthread\fR \fBns_ictl cleanup\fR \fBns_ictl epoch\fR \fBns_ictl get\fR \fBns_ictl getmodules\fR \fBns_ictl gettraces\fR \fIwhich\fR \fBns_ictl once\fR \fIkey script\fR \fBns_ictl oncleanup\fR \fIscript\fR \fBns_ictl oncreate\fR \fIscript\fR \fBns_ictl ondelete\fR \fIscript\fR \fBns_ictl oninit\fR \fIscript\fR \fBns_ictl package\fR \fI?-exact? package ?version?\fR \fBns_ictl runtraces\fR \fIwhich\fR \fBns_ictl save\fR \fIscript\fR \fBns_ictl threads\fR \fBns_ictl trace\fR \fIwhen script\fR \fBns_ictl update\fR .fi .BE .SH DESCRIPTION .PP This command provides access to the internal facilities to control and configure multi-threaded Tcl interpreters in the context of AOLserver virtual servers. It is normally used in startup initialization scripts to define how new interpreters are initialized when created and to support cleanup and re-initalization between transactions (e.g., HTTP connections). .TP \fBns_ictl addmodule\fR \fImodule\fR Add a module to the list of modules to be initialized at startup. This command is not normally required as each module specified in the AOLserver modules config section for the corresponding server (e.g., \fIns/server/server1/modules\fR) is automatically added to the list. .TP \fBns_ictl cancel\fR \fIthread\fR Send an asynchronous interrupt request to the specified thread, cancelling any script currently executing on any AOLserver created interpreter (note the interrupt is not virtual-server specific). This command utilizes the facilities of \fBTcl_AsyncMark\fR to mark as ready a callback registered with \fBTcl_AsyncCreate\fR. The callback places an error message in the interpreter result and returns \fBTCL_ERROR\fR to unwind the call stack. The underlying Tcl facility has limitations, e.g., the interrupt will only be noticed when Tcl checks via \fBTcl_AsyncReady\fR calls between commands and the interrupt can be caught with a \fBcatch\fR command. See the man page for \fBTcl_AsyncCreate\fR for details. .TP \fBns_ictl cleanup\fR This command invokes any callbacks registered during a transaction via the C-level \fBNs_TclRegisterDefer\fR routine. Unlike callbacks registered with the \fBns_ictl trace deallocate\fR command or \fBNs_TclRegisterTrace\fR routine, these callbacks are executed only once and there is no Tcl-level access to the underlying \fBNs_TclRegisterDefer\fR routine. .TP \fBns_ictl epoch\fR This command returns the unique id for the current duplication script for the virtual server. The id starts as 0 when the virtual server is created and is incremented each time a new script is saved via the \fBns_ictl save\fR command. .TP \fBns_ictl get\fR Return the current duplication script for the virtual server. This command is useful to view the duplication script created by the initialization script at startup. .TP \fBns_ictl getmodules\fR Return the list of modules to be initialized at startup. This list corresponds to the names of modules specified in the virtual server modules config section, e.g., \fIns/server/server1/modules\fR unless additional modules are added via the \fBns_ictl addmodule\fR command. .TP \fBns_ictl gettraces\fR \fIwhich\fR Return the list of traces which will be invoked at the specified time. The \fIwhich\fR argument can be one of \fIcreate, delete, allocate, deallocate, getconn\fR, or \fIfreeconn\fR. The traces are returned in the order in which they will be executed. Script level traces are returns as strings to evaluate and C-level traces are returned with strings which specify the address of the underlying C procedure and argument. .TP \fBns_ictl once\fR \fIkey script\fR Evaluate given script once in the virtual server. The given key is a string name which uniquely identifies the corresponding script. This command is useful in a Tcl package which includes one-time initialization routines, e.g., calls to \fBns_register_proc\fR or initialization of shared variables using \fBnsv_set\fR (see \fBEXAMPLES\fR below). .TP \fBns_ictl oncleanup\fR \fIscript\fR This command is equivalent to \fBns_ictl trace deallocate\fR \fIscript\fR. .TP \fBns_ictl oncreate\fR \fIscript\fR This command is equivalent to \fBns_ictl trace create\fR \fIscript\fR. .TP \fBns_ictl ondelete\fR \fIscript\fR This command is equivalent to \fBns_ictl trace delete\fR \fIscript\fR. .TP \fBns_ictl oninit\fR \fIscript\fR This command is equivalent to \fBns_ictl trace allocate\fR \fIscript\fR. .TP \fBns_ictl package\fR \fI?-exact? package ?version?\fR This command is used to require a package in the calling interpreter and, if successfully loaded, in all other interpreters for the virtual server. In addition to ensuring version consistency for the package, it is equivalent to: .sp \fBset version [package require \fIpackage ?version?\fB] .br \fBns_ictl trace allocate [list package require \fIpackage\fB $version]\fR .TP \fBns_ictl runtraces\fR \fIwhich\fR This command runs the requested traces. The \fIwhich\fR argument must be one of \fBcreate\fR, \fBdelete\fR, \fBallocate\fR, \fBdeallocate\fR, \fBgetconn\fR, or \fBfreeconn\fR. Direct calls to this command are not normally necessary as the underlying C code will invoke the callbacks at the required times. Exceptions include calling \fBns_ictl runtraces\fR or testing purposes or to mimic the normal cleanup and initialization work performed on between transactions in a long running thread (see \fBEXAMPLES\fR below). .TP \fBns_ictl save\fR \fIscript\fR Save the given script as the duplication script, incrementing the virtual server epoch number. This command is normally called by the bootstrap script after constructing the script to duplicate the procedures defined by sourcing the various module initialization script files. .TP \fBns_ictl threads\fR Return a list of all threads with interpreters for the virtual server. The ids return are small strings which represent the underlying thread ids and can be passed to the \fBns_ictl cancel\fR command to send an asynchronous cancel request. .TP \fBns_ictl trace create\fR \fIscript\fR Register \fIscript\fR to be called when an interpreter is first created. This is useful to create procedures, require packages, or initialize other state to be used during the lifetime of the interpreter. .TP \fBns_ictl trace delete\fR \fIscript\fR Register \fIscript\fR to be called before an interpreter is destroyed. This is useful to free any resources which may have been allocated for the interpreter during the lifetime of the interpreter. .TP \fBns_ictl trace allocate\fR \fIscript\fR Register \fIscript\fR to be called each time an interpreter is allocated for use by the \fBNs_TclAllocateInterp\fR routine. This is useful for reinitializing resources which may be used during a single transaction in the interpreter. .TP \fBns_ictl trace deallocate\fR \fIscript\fR Register \fIscript\fR to be called each time an interpreter is returned after a transaction with the \fBNs_TclDeAllocateInterp\fR routine. This is useful for garbage collection, i.e., freeing any resources which may be used during a single transaction in the interpreter. .TP \fBns_ictl trace getconn\fR \fIscript\fR Register \fIscript\fR to be called each time an interpreter is returned and associated with an HTTP connection with the \fBNs_GetConnInterp\fR routine. This could be useful to define variables relative to the HTTP request. .TP \fBns_ictl trace freeconn\fR \fIscript\fR Register \fIscript\fR to be called each time an HTTP connection is closed. This could be used to log information about the request, e.g., timing statistics. Note that the interpreter may still be actively evaluating a script after the connection is closed, i.e., this is not equivalent to \fBns_ictl trace deallocate\fR for connection-related interpreters. .TP \fBns_ictl update\fR This command can be used to atomically compare the epoch of the current duplication script with the epoch of the interpreter, evaluating the script and updating the epoch in the interpreter if they do not match. This command is generally registered as a callback with \fBns_ictl trace allocate\fR by the legacy initialization code. .SH INTERPRETER ALLOCATION .PP Tcl interpreter in AOLserver are available on demand with state specific to a virtual server. These interpreters are also expected to be reused for multiple transactions (e.g., HTTP connections, scheduled procedures, socket callbacks). .PP To support reuse, AOLserver provides the C-level \fBNs_TclAllocateInterp\fR routine to allocate an interpreter from a per-thread cache (creating and initializing a new interpreter if necessary) and the \fBNs_TclDeAllocateInterp\fR routine to return an interpreter to the cache when no longer required. All interpreters in the per-thread cache are destroyed when a thread exists. .PP In general, only C-level extension writers need to call the C-level API's directly; the various Tcl-level interfaces in AOLserver (e.g., \fBADP\fR pages, \fBns_regiseter_proc\fR, \fBns_schedule_proc\fR, \fBns_thread\fR, etc.) allocate and reuse interpreters using the C-level API's automatically before invoking the cooresponding script or ADP page. .SH INTERPRETER TRACES .PP To ensure a consistent state of interpreters when allocated and enable cleanup and reinitialization between transactions, each virtual server maintains a list of callbacks to be invoked at various points in the lifetime of an interpreter. These callbacks are generally installed when the server is initialized at startup and then called automatically by the \fBNs_TclAllocateInterp\fR and \fBNs_TclDeAllocateInterp\fR API's at the appropriate times and in consistent order. The \fBNs_TclRegisterTrace\fR routine can be used to register C-level callbacks and the \fBns_ictl trace\fR command can be used to register Tcl script callbacks. The \fBns_ictl gettraces\fR command can be used to list all currently registered callbacks, both at the Tcl script and C level. .PP Callbacks registered via the tracing facility are invoked in a specific order depending on the type. Initialization style callbacks including \fBcreate\fR, \fBallocate\fR, and \fBgetconn\fR are invoked in FIFO order, with all script callbacks invoked after all C-level callbacks. This enables extension writers to utilize the facilities of previously initialized extensions. Correspondingly, cleanup style callbacks including \fBfreeconn\fR, \fBdeallocate\fR, and \fBdelete\fR are invoked in LIFO order, with all scripts callbacks invoked before C-level callbacks. This helps avoid the possibility that a cleanup callback utilizes features of a previously cleaned up extension. .PP In addition, the \fBns_ictl package\fR command can be used to consistently manage the loading of a Tcl package in all interpreters for a virtual server. This feature is mostly a convenience routine built above the generic trace framework with additional checks to ensure version number consistency. Coupled with \fBns_ictl once\fR, the \fBns_ictl package\fR command provides a clean framework to utilize Tcl packages in multi-threaded AOLserver (see \fBEXAMPLES\fR). .SH VIRTUAL SERVER TCL INITIALIZATION .PP AOLserver also supports a Tcl initialization framework for virtual servers based on callbacks registered by loadable modules and the sourcing of scripts files located in corresponding directories. Options to \fBns_ictl\fR to support this framework include \fIsave\fR, \fIget\fR, \fIepoch\fR, and \fIupdate\fR and are used in conjunction with the generic tracing facility by the virtual server bootstrap script (normally \fIbin/init.tcl\fR). The \fBns_eval\fR command also relies on this framework to support dynamic update of the state of interpreters. .PP This initialization framework pre-dates the Tcl package facilities and utilizes introspection of the state of a startup interpreter at the end of initialization to construct a single script which attempts to duplicate the state in subsequent interpreters. Steps taken during this initialization include: .TP 1. Load all modules in the server's module config section, e.g., \fIns/server/server1/modules\fR. Modules with Tcl C-level extensions typically call the legacy \fBNs_TclInitInterps\fR routine or the more general \fBNs_TclRegisterTrace\fR routine with the \fINS_TCL_TRACE_CREATE\fR flag in their module init routine to register a callback to invoke when new interpreters are created. The callback normally creates one or more new commands in the interpreter with \fBTcl_CreateObjCommand\fR but may perform any per-interpreter initialization required, e.g., creating and saving private state with the \fBTcl_SetAssocData\fR facility. In addition, as modules are loaded, the string name of the module is added to the list of known modules. .TP 2. After all C modules are loaded, AOLserver creates a new Tcl interpreter for the virtual server, executing any trace callbacks already registered via the loaded C modules (e.g., any \fBNs_TclInitInterps\fR callbacks) and then sources the virtual server bootstrap script, normally \fIbin/init.tcl\fR. This script creates a few utility procedures and then sources all \fIprivate\fR and \fIpublic\fR script files in directories which correspond to loaded modules in the order in which they were loaded. These directories are normally relative to the virtual server and to the AOLserver installation directory, e.g., initialization script files for the module \fImymod\fR in the \fIserver1\fR virtual server would be searched for in the \fIservers/server1/modules/tcl/mymod/\fR and \fImodules/tcl/mymod/\fR. Any \fIinit.tcl\fR file found in each directory is sourced first with all remaining files sourced in alphabetical order. In addition, any files in the \fIpublic\fR directory with identical names to files in the \fRprivate\fR directory are skipped as a means to enable overloading of specific functionality on a per-server basis. In practice, most modules only contain shared utility procedures defined in the \fIpublic\fR directories and the \fIprivate\fR directories are empty or non-existant. The script files normally contain a mix of commands to evaluate once for server configuration (e.g., a call to \fBns_register_proc\fR to bind a Tcl procedure to an HTTP request URL) with \fBproc\fR and \fBnamespace\fR commands to provide additional functionality in the interpreter. .TP 3. After all script files have been sourced, the bootstrap script code then uses a collection of recursive procedures to extract the definitions of all procedures defined in all namespaces. The definitions are used to construct a script which attempts to duplicate the state of the initialization interpreters. This scripts is then saved as the per-virtual server duplication script with the \fBns_ictl save\fR command which also increments the \fIepoch\fR to 1. There are limits to this approach to determine the full state, e.g., it does not attempt to duplicate any global variables which may have been defined in the startup scripts. Typically, startup scripts will use \fBnsv_set\fR or other mechanisms to store such shared state. .TP 4. The bootstrap code then uses the \fBns_ictl trace allocate\fR command to register a callback to the \fBns_ictl update\fR command each time an interpreter is allocated for use. In practice, interpreters are created with the default \fIepoch\fR of 0 and the first call to \fBns_ictl update\fR determines an out-of-date condition, evaluates the duplication script, and increments the interpreter's \fIepoch\fR to 1 to match the state created by the startup interp. .TP 5. Subsequent calls the \fBns_eval\fR, if any, will evaluate the given script and then re-generate and save the duplication script as was done at startup, incrementing the \fIepoch\fR once again. In this way, dynamic updates which are detected in other interpreters on their next call to \fBns_ictl update\fR can be supported in a limited fashion. .PP In practice, while generally successful, this duplication technique has inhibited the clean use of proper Tcl package extensions and encouraged the use of the \fBns_eval\fR command which is generally not recommended for the non-deterministic manner in which it attempts to dynamically reconfigure a server. Also, commands required to configure the server once (e.g., calls to \fBns_register_proc\fR) are inter-mixed with \fBproc\fR commands designed to extend functionality in all interpreters, complicating configuration management. .PP As an alternative, the example below illustrates a means to more explicitly manage configuration through a combination of direct calls to \fBns_ictl trace create\fR and \fBns_ictl once\fR. Unfortunately, the all encompassing nature of the legacy initialization approach makes it difficult to incrementally move to this cleaner approach because the duplication script construction code is unable to distinguish between state created with the newer, cleaner \fBns_ictl\fR commands and state created as a side effect of one or more script files being sourced. As such, it is expected the legacy initialization framework will remain in place until AOLserver 5.x when it will be removed entirely in a non-backwards compatible move towards the cleaner API's. .SH EXAMPLES .PP This example illustrates the use of \fBns_ictl package\fR and \fBns_ictl once\fR to load an AOLserver-aware Tcl package into a virtual server. The following code could be added to the virtual server bootstrap script, \fIbin/init.tcl\fR, to load \fIMyPkg\fR in the virtual server: .PP .CS # # Startup code in bin/init.tcl: # # Load MyPkg in all interps (including this one). # ns_ictl package require MyPkg .CE .PP This call will result in the package being loaded into the startup interpreter in the ordinary Tcl fashion (see the \fBpackage\fR man page for details). Ordinary Tcl extension packages would need no modifications but packages which utilize AOLserver-specific features or require garbage collection between transactions could also use \fBns_ictl\fR for finer grained control. For example, the \fIinit.tcl\fR script specified by the \fBpackage ifneeded\fR command in the \fIMyPkg\fR package's \fIpkgIndex.tcl\fR file could contains: .PP .CS # # Package code in lib/myPkg1.0/init.tcl: # # package provide MyPkg 1.0 # # Server init which will be executed the first time called, # normally in the context of the startup interpreter as above. # ns_ictl once MyPkg { # Register the run Tcl proc HTTP handler. ns_register_proc /mypkg mkpkg::run # Register a garbage collection callback. ns_ictl trace deallocate mypkg::cleanup } # # Code which will be invoked to initialize the package in # all interpreters when required. # proc mypkg::run {} { ... handle /mypkg requests ... } proc mkpkg::cleanup {} { ... cleanup transaction resources for mypkg, e.g., db handles ... } .CE .SH "SEE ALSO" Ns_TclAllocateInterp(3), Ns_TclDeAllocateInterp(3), Ns_GetConnInterp(3), Ns_FreeConnInterp(3), Ns_TclInitInterps(3), Ns_TclRegisterTrace(3), Ns_TclRegisterDeferred(3), ns_atclose(n), ns_eval(n). .SH KEYWORDS threads, interpreters, traces, initialization aolserver4-4.5.1/doc/ns_html.n0000644000175000017500000000515707645364653016051 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_html.n,v 1.4 2003/04/10 22:01:15 shmooved Exp $ '\" '\" .so man.macros .TH ns_html n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_hrefs, ns_quotehtml, ns_striphtml \- commands .SH SYNOPSIS \fBns_hrefs \fIhtml\fR .sp \fBns_quotehtml \fIhtml\fR .sp \fBns_striphtml \fIhtml\fR .BE .SH DESCRIPTION .PP \fBns_hrefs\fR returns a list of all the URLs that the \fIhtml\fR has links to. There is currently no provision for normalizing any relative URL with a specified URL. Also, for a URL to be returned the HREF attribute must come before any other attributes (such as TITLE, STYLE, etc.) within the opening tag. .PP \fBns_quotehtml\fR substitutes all instances of "<", ">", and "&" within \fIhtml\fR with their respective HTML entities ("<", ">", and "&" respectively). This command is useful if you want to include \fIhtml\fR in another page as plain text. .PP \fBns_striphtml\fR returns a new string that is \fIhtml\fR with all the HTML tags removed. HTML entities are left untouched. .SH "SEE ALSO" nsd(1) .SH KEYWORDS aolserver4-4.5.1/doc/ns_http.n0000644000175000017500000000346507545404743016056 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_http.n,v 1.1 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_http n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_http \- commands .SH SYNOPSIS \fBns_http \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_info.n0000644000175000017500000000716407645314303016023 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_info.n,v 1.3 2003/04/10 16:16:03 shmooved Exp $ '\" '\" .so man.macros .TH ns_info n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_info, ns_server, ns_stats \- commands .SH SYNOPSIS \fBns_info\fR \fIaddress\fR .sp \fBns_info\fR \fIargv0\fR .sp \fBns_info\fR \fIboottime\fR .sp \fBns_info\fR \fIbuilddate\fR .sp \fBns_info\fR \fIconfig\fR .sp \fBns_info\fR \fIhome\fR .sp \fBns_info\fR \fIhostname\fR .sp \fBns_info\fR \fIinterp\fR .sp \fBns_info\fR \fIlabel\fR .sp \fBns_info\fR \fIlog\fR .sp \fBns_info\fR \fIname\fR .sp \fBns_info\fR \fIpageroot\fR .sp \fBns_info\fR \fIplatform\fR .sp \fBns_info\fR \fIserver\fR .sp \fBns_info\fR \fItcllib\fR .sp \fBns_info\fR \fIuptime\fR .sp \fBns_info\fR \fIversion\fR .sp \fBns_server\fR \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_stats\fR \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP \fBns_info boottime\fR .RS Returns the server boot time in seconds. .RE \fBns_info config\fR .RS Returns the configuration file name. .RE \fBns_info home\fR .RS Returns the directory where the AOLserver was installed. .RE \fBns_info hostname\fR .RS Returns the name of the host on which server is running (e.g., www.myhost.com). .RE \fBns_info interp\fR .RS Returns the number of the Tcl interpreter currently being used. .RE \fBns_info label\fR .RS Returns the source code label for the server. If no label was used, "unlabeled" is returned. .RE \fBns_info log\fR .RS Returns the location of the server log file (e.g., /home/myserver/log/server.log). .RE \fBns_info name\fR .RS Returns the name of the AOLserver. It's usually "AOLserver." .RE \fBns_info pageroot\fR .RS returns the directory containing the HTML pages for this virtual server. .RE \fBns_info platform\fR .RS Returns the name of the platform that the server is running on (e.g., Solaris). .RE \fBns_info\fR server .RS returns the name of this virtual server. .RE ns_info tcllib returns the directory where the AOLserver Tcl source code resides for this virtual server. ns_info uptime returns the time in seconds that the server has been up. ns_info version returns the version of the AOLserver. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_init.n0000644000175000017500000000356410417520407016026 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_init.n,v 1.2 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_init n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_cleanup, ns_init \- commands .SH SYNOPSIS \fBns_cleanup \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_init \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_kill.n0000644000175000017500000000411507645364654016032 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_kill.n,v 1.4 2003/04/10 22:01:16 shmooved Exp $ '\" '\" .so man.macros .TH ns_kill n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_kill \- commands .SH SYNOPSIS \fBns_kill ?\fI-nocomplain\fR? \fIpid signal\fR .BE .SH DESCRIPTION .PP This function sends the specified signal to the specified process ID (\fIpid\fR). If \fI-nocomplain\fR is specified, no error will be returned on failure. \fIsignal\fR should be an integer, i.e., 1 for SIGHUP, 9 for SIGKILL, 15 for SIGTERM, etc. .SH "SEE ALSO" nsd(1) .SH KEYWORDS aolserver4-4.5.1/doc/ns_urlencode.n0000644000175000017500000000451110417520407017034 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_urlencode.n,v 1.4 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_urlencode n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_urlencode \- URL encode a string. .SH SYNOPSIS \fBns_urlencode \fIstring\fR .BE .SH DESCRIPTION .PP Encodes given string according to the encoding defined in RFC #1738, Uniform Resource Locators. The command encodes all non-alphanumeric characters in data. The encoding for a character is a "%" followed by the two-character hexadecimal representation for the character. .SH EXAMPLE .PP The following command: .CS ns_urlencode "http://www.aolserver.com/redirect.adp?url=http://www.aol.com&t=1,2,3" .CE .PP returns: .CS http%3a%2f%2fwww%2eaolserver%2ecom%2fredirect%2eadp%3furl%3dhttp%3a%2f%2fwww%2eaol%2ecom%26t%3d1%2c2%2c3 .CE .SH "SEE ALSO" ns_urldecode(n) .SH KEYWORDS encoding, url aolserver4-4.5.1/doc/ns_lctl.n0000644000175000017500000000620610417520540016013 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_lctl.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_lctl n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_for, ns_foreach, ns_while, ns_lctl \- Replacements for standard Tcl loop commands which enable monitoring and control .SH SYNOPSIS .nf \fBns_for \fIstart test next body\fR \fBns_foreach \fIvarname list body\fR \fBns_foreach \fIvarlist1 list1\fR ?\fIvarlist2 list2 ...\fR? \fIbody\fR \fBns_while \fItest body\fR \fBns_lctl cancel \fIid\fR \fBns_lctl eval \fIid script\fR \fBns_lctl info \fIid\fR \fBns_lctl install \fIcommand\fR \fBns_lctl list\fR \fBns_lctl pause \fIid\fR \fBns_lctl result \fIid\fR .fi .BE .SH DESCRIPTION .PP The \fBns_for\fR, \fBns_foreach\fR, and \fBns_while\fR commands are replacements for cooresponding Tcl commands with the additional capability of monitoring and control through the \fBns_lctl\fR command. .TP \fBns_for \fIstart test next body\fR See the \fIfor(n)\fR man page for usage. .TP \fBns_foreach \fIstart test next body\fR See the \fIforeach(n)\fR man page for usage. .TP \fBns_foreach \fIvarlist1 list1\fR ?\fIvarlist2 list2 ...\fR? \fIbody\fR See the \fIforeach(n)\fR man page for usage. .TP \fBns_while \fItest body\fR See the \fIwhile(n)\fR man page for usage. .TP \fBns_lctl cancel \fIid\fR Mark the given loop to cancel at the next iteration, resulting in the loop returning with \fBTCL_ERROR\fR. .TP \fBns_lctl eval \fIid script\fR .TP \fBns_lctl info \fIid\fR .TP \fBns_lctl install \fIcommand\fR .TP \fBns_lctl list\fR .TP \fBns_lctl pause \fIid\fR .TP \fBns_lctl result \fIid\fR .SH "SEE ALSO" for(n), foreach(n), while(n) .SH KEYWORDS threads, iteration, list, looping, cancel aolserver4-4.5.1/doc/ns_guesstype.n0000644000175000017500000001003407562033460017106 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_guesstype.n,v 1.3 2002/11/05 21:25:04 webdanb Exp $ '\" '\" .so man.macros .TH ns_guesstype n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_guesstype \- commands .SH SYNOPSIS \fBns_guesstype \fIfilename .BE .SH DESCRIPTION .PP This command guesses and returns the MIME type of filename, based on the file extention. It has an extensive set of default mappings. You can also add your own mappings in the "ns/server/servername/mimetype" section of the config file. .SH MIMETYPES .PP The following extentions and mimetypes are the default maps. .adp text/html .ai application/postscript .aif audio/aiff .aifc audio/aiff .aiff audio/aiff .ani application/x-navi-animation .art image/x-art .au audio/basic .avi video/x-msvideo .bin application/x-macbinary .bmp image/bmp .css text/css .csv application/csv .dci text/html .dcr application/x-director .dir application/x-director .dp application/commonground .dxr application/x-director .elm text/plain .eml text/plain .exe application/octet-stream .gbt text/plain .gif image/gif .gz application/x-compressed .hqx application/mac-binhex40 .htm text/html .html text/html .jfif image/jpeg .jpe image/jpeg .jpg image/jpeg .jpeg image/jpeg .js application/x-javascript .ls application/x-javascript .map application/x-navimap .mid audio/x-midi .midi audio/x-midi .mocha application/x-javascript .mov video/quicktime .mpe video/mpeg .mpeg video/mpeg .mpg video/mpeg .nvd application/x-navidoc .nvm application/x-navimap .pbm image/x-portable-bitmap .pdf application/pdf .pgm image/x-portable-graymap .pic image/pict .pict image/pict .pnm image/x-portable-anymap .png image/png .ps application/postscript .qt video/quicktime .ra audio/x-pn-realaudio .ram audio/x-pn-realaudio .ras image/x-cmu-raster .rgb image/x-rgb .rtf application/rtf .sht text/html .shtml text/html .sit application/x-stuffit .snd audio/basic .sql application/x-sql .stl application/x-navistyle .tar application/x-tar .tcl text/plain .text text/plain .tgz application/x-compressed .tif image/tiff .tiff image/tiff .txt text/plain .xbm image/x-xbitmap .xpm image/x-xpixmap .vrml x-world/x-vrml .wav audio/x-wav .wrl x-world/x-vrml .z application/x-compressed .zip application/x-zip-compressed .SH "SEE ALSO" nsd(1), info(n), ns_return(n) .SH KEYWORDS mime aolserver4-4.5.1/doc/Ns_RollFile.30000644000175000017500000000372607645364627016463 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_RollFile.3,v 1.5 2003/04/10 22:00:55 shmooved Exp $ '\" '\" .so man.macros .TH Ns_RollFile 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_PurgeFiles, Ns_RollFile, Ns_RollFileByDate \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_PurgeFiles\fR(\fIarg, arg\fR) .sp \fBNs_RollFile\fR(\fIarg, arg\fR) .sp \fBNs_RollFileByDate\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TempFile.30000644000175000017500000000363107545404743016444 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TempFile.3,v 1.1 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_TempFile 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_GetTemp, Ns_ReleaseTemp \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_GetTemp\fR(\fIarg, arg\fR) .sp \fBNs_ReleaseTemp\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Mutex.30000644000175000017500000000472707645364616016055 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Mutex.3,v 1.5 2003/04/10 22:00:46 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Mutex 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DestroyMutex, Ns_InitializeMutex, Ns_LockMutex, Ns_MutexDestroy, Ns_MutexInit, Ns_MutexList, Ns_MutexLock, Ns_MutexSetName, Ns_MutexSetName2, Ns_MutexTryLock, Ns_MutexUnlock, Ns_UnlockMutex \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DestroyMutex\fR(\fIarg, arg\fR) .sp \fBNs_InitializeMutex\fR(\fIarg, arg\fR) .sp \fBNs_LockMutex\fR(\fIarg, arg\fR) .sp \fBNs_MutexDestroy\fR(\fIarg, arg\fR) .sp \fBNs_MutexInit\fR(\fIarg, arg\fR) .sp \fBNs_MutexList\fR(\fIarg, arg\fR) .sp \fBNs_MutexLock\fR(\fIarg, arg\fR) .sp \fBNs_MutexSetName\fR(\fIarg, arg\fR) .sp \fBNs_MutexSetName2\fR(\fIarg, arg\fR) .sp \fBNs_MutexTryLock\fR(\fIarg, arg\fR) .sp \fBNs_MutexUnlock\fR(\fIarg, arg\fR) .sp \fBNs_UnlockMutex\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_RWLock.30000644000175000017500000000411607645364617016105 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_RWLock.3,v 1.5 2003/04/10 22:00:47 shmooved Exp $ '\" '\" .so man.macros .TH Ns_RWLock 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_RWLockDestroy, Ns_RWLockInit, Ns_RWLockRdLock, Ns_RWLockUnlock, Ns_RWLockWrLock \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_RWLockDestroy\fR(\fIarg, arg\fR) .sp \fBNs_RWLockInit\fR(\fIarg, arg\fR) .sp \fBNs_RWLockRdLock\fR(\fIarg, arg\fR) .sp \fBNs_RWLockUnlock\fR(\fIarg, arg\fR) .sp \fBNs_RWLockWrLock\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_UrlEncode.30000644000175000017500000000363107645364643016624 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_UrlEncode.3,v 1.4 2003/04/10 22:01:07 shmooved Exp $ '\" '\" .so man.macros .TH Ns_UrlEncode 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DecodeUrl, Ns_EncodeUrl \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DecodeUrl\fR(\fIarg, arg\fR) .sp \fBNs_EncodeUrl\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_HttpTime.30000644000175000017500000000363507645364612016502 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_HttpTime.3,v 1.5 2003/04/10 22:00:42 shmooved Exp $ '\" '\" .so man.macros .TH Ns_HttpTime 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_HttpTime, Ns_ParseHttpTime \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_HttpTime\fR(\fIarg, arg\fR) .sp \fBNs_ParseHttpTime\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_InetAddr.30000644000175000017500000000364707645364612016441 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_InetAddr.3,v 1.5 2003/04/10 22:00:42 shmooved Exp $ '\" '\" .so man.macros .TH Ns_InetAddr 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_GetAddrByHost, Ns_GetHostByAddr \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_GetAddrByHost\fR(\fIarg, arg\fR) .sp \fBNs_GetHostByAddr\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_adp_debug.n0000644000175000017500000000435710417520540016774 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_adp_debug.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_adp_debug n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_adp_debug \- ADP debugging support .SH SYNOPSIS \fBns_adp_debug\fR ?\fIprocs\fR? ?\fIhost\fR? ?\fIport\fR? .BE .SH DESCRIPTION .PP This command enables basic debugging when used with the TclPro debugger. It will connect to a remote debugger if not already connected. The \fIproc\fR argument specifics a glob pattern to match Tcl procedures to be instrumented by the debugger and the \fIhost\fR and \fIport\fR arguments are passed to the TclPro \fBdebugger_init\fR procedure to connect to the remote debugger. .SH "SEE ALSO" ns_adp(1), ns_adp_include(n) .SH KEYWORDS ADP, dynamic pages, debug aolserver4-4.5.1/doc/ns_rand.n0000644000175000017500000000467607645364661016035 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_rand.n,v 1.4 2003/04/10 22:01:21 shmooved Exp $ '\" '\" .so man.macros .TH ns_rand n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_rand \- commands .SH SYNOPSIS \fBns_rand \fR?\fImax\fR? .BE .SH DESCRIPTION .PP ns_rand generates a cryptographically-secure random number. If .I max is not specified, the random number is a floating-point value .I n such that .I 0.0 <= n < 1.0. .PP If .I max is specified, it must be a positive integer between 0 and 2147483647. The return value is an integer value such that .I 0 <= n <= (max - 1). .PP Internally ns_rand is implemented with the drand48(3) and lrand48(3) standard library functions. An internal random seed is generated the first time ns_rand is called after the server starts. .SH EXAMPLES nscp> ns_rand 0.39938485692 nscp> ns_rand 10 7 .SH "SEE ALSO" nsd(1), info(n), drand48(3), lrand48(3) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Auth.30000644000175000017500000000763007645364576015655 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Auth.3,v 1.5 2003/04/10 22:00:30 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Auth 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_AuthorizeRequest, Ns_AuthorizeUser, Ns_SetRequestAuthorizeProc, Ns_SetUserAuthorizeProc \- URL level HTTP authorization support .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_AuthorizeRequest\fR(\fIchar *server, char *method, char *url, char *user, char *passwd, char *peer\fR) .sp int \fBNs_AuthorizeUser\fR(\fIchar *user, char *passwd\fR) .sp void \fBNs_SetRequestAuthorizeProc\fR(\fIchar *server, Ns_RequestAuthorizeProc *procPtr\fR) .sp void \fBNs_SetUserAuthorizeProc\fR(\fINs_UserAuthorizeProc *procPtr\fR) .BE .SH DESCRIPTION .PP These functions provide a means to create and use your own authorization mechanisms. They are used by the nsperm module to provide authentication and authorization of users to specific URLs. .PP You can define your own authorization functions. For example, you might create functions that will authorize a user by their SSL client certificate and if that fails, then attempt to authorize the user by username and password. .TP \fBNs_AuthorizeRequest\fR(\fIserver, method, url, user, passwd, peer\fR) Used to call the function registered by \fBNs_SetRequestAuthorizeProc \fRto authorize a user's access to the given method and URL. Possible return values are: .IP "" 7 NS_OK - The user's access is authorized .IP NS_UNAUTHORIZED - Access is not public for this method or URL and either the user and password were not verified or the user does not have permission. .IP NS_FORBIDDEN - There is no possible user/password combination that would give authorization. .IP NS_ERROR - The authentication function could not perform the permission check. .TP \fBNs_AuthorizeUser\fR(\fIuser, passwd\fR) Checks that the cleartext password is correct for the specified user. Returns NS_OK if it matches or NS_ERROR if it does not match or if no authorization procedure is registered. .TP \fBNs_SetRequestAuthorizeProc\fR(\fIserver, procPtr\fR) Register the URL request authorization function. This function is called by \fBNs_AuthorizeRequest\fR and should return one of the four values give above for \fBNs_AuthorizeRequest\fR. .TP \fBNs_SetUserAuthorizeProc\fR(\fIprocPtr\fR) Register the user authorization function. This function is called by \fBNs_AuthorizeUser\fR and should return either NS_OK or NS_ERROR. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_cache.n0000644000175000017500000001774611141142014016122 0ustar frankiefrankie1'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_cache.n,v 1.6 2009/01/31 21:35:08 gneumann Exp $ '\" '\" '\" transliterated from index.html by davis@xarg.net 2002-11-10 '\" but without the useful diagrams from the html. '\" .so man.macros .TH ns_cache n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_cache \- Cache arbitrary data .SH SYNOPSIS .nf \fBns_cache append \fIcachename key string ?string ...?\fR \fBns_cache create \fIcachename\fR ?\fB-size\fI maxsize\fR?\fR ?\fB-timeout\fI timeout\fR? ?\fB-thread\fI thread\fR? \fBns_cache eval \fIcachename key script\fR \fBns_cache flush \fIcachename key\fR \fBns_cache get \fIcachename key \fR?\fIvarname\fR? \fBns_cache incr \fIcachename key ?value?\fR \fBns_cache lappend \fIcachename key string ?string ...?\fR \fBns_cache names \fIcachename ?pattern?\fR \fBns_cache set \fIcachename key string\fR .fi .BE .SH DESCRIPTION .PP AOLserver implements a C API for caching arbitrary data. This module provides a Tcl API on top of the C API. A cache, in this context, is simply a dictionary that maps keys to values. Keys are always stored as NUL-terminated strings. How values are stored depends on the type of cache. .TP \fBns_cache create \fIcachename\fR ?\fB-size\fI maxsize\fR?\fR ?\fB-timeout\fI timeout\fR? ?\fB-thread\fI thread\fR? This command creates a new cache named \fIcachename\fR. If -thread is given and is true, then it is a thread-private cache. Otherwise it is a global cache. If \fImaxsize\fR is given, then it is a sized-based cache. If \fItimeout\fR is given, then it is a timeout-based cache. Otherwise, it is a timeout-based cache with an infinite timeout, meaning it will never be flushed. This command returns nothing if it is successful. .TP \fBns_cache eval \fIcachename key script\fR This command atomically sets and gets a cache value. First, it looks up key in the cache named cachename. If it finds an entry, it returns the value of that entry. Otherwise, it executes script, stores the return value in the cache, and also returns that value. Script may optionally use the return command to return its value. For example, this will store the value "2" in mycache, if mykey is not already present: ns_cache eval mycache mykey { expr {1+1} } This will also store the value "2" in mycache: ns_cache eval mycache mykey { return [expr {1+1}] } If \fIscript\fR raises an error, or exits with break or continue, then ns_cache eval simply returns the same condition without modifying the cache. .TP \fBns_cache flush \fIcachename key\fR This command removes the entry for \fIkey\fR from the cache named \fIcachename\fR. If the cache has no entry for \fIkey\fR, then nothing happens. For global caches, \fBns_cache flush\fR interacts with \fBns_cache eval\fR. Suppose thread 1 has called get_thing A and is executing the long operation to compute the value for A. Thread 2 calls \fBget_thing A\fR and starts waiting for thread 1 to finish. Thread 3 calls \fBns_cache flush thing_cache A\fR. Thread 1 will continue executing the long operation, but thread 2 will also start the long operation. When thread 1 completes the long operation, \fBns_cache eval\fR returns the (now stale) value it computed, but it does \fInot\fR store the value in the cache. When thread 2 completes the long operation, \fBns_cache eval\fR stores the (fresh) value it computed in the cache and returns the fresh value. .TP \fBns_cache get \fIcachename key \fR?\fIvarname\fR? This command looks up \fIkey\fR in the specified cache. It operates differently depending on whether \fIvarname\fR was given. If \fIvarname\fR absent and the key exists the value is returned and if the key is missing an error is raised. If \fIvarname\fR is provided and the key exists the command sets \fIvarname\fR to the value and returns 1, otherwise it returns 0. .TP \fBns_cache names \fIcachename ?pattern?\fR This command returns a list of all keys currently in the specified cache. If \fIpattern\fR is specified, only matching entries are returned (match pattern syntax like in \fBstring match\fR). If the cache is thread-private, then the list only includes keys that are in the thread's private cache. .TP \fBns_cache set \fIcachename key value\fR This command stores value for key in the specified cache. .SH CACHE TYPES .PP ns_cache supports three types of caches: .B Global Size-Limited Cache ns_cache create cachename -size maxsize .PP Entries in a cache of this type are accessible to all threads. Each cache has its own mutex that protects access to its entries. .PP Cache values are stored as counted strings, so arbitrary binary data can be cached. A global cache stores strings instead of Tcl objects to prevent race conditions that could lead to heap corruption. .PP The cache has a maximum size specified when the cache is created. The size of the cache is the sum of the sizes of all the values in the cache; keys do not count toward a cache's size. If inserting a value into the cache makes the cache's size exceed its maximum, then cache entries are evicted starting with the least-recently used entry until the size is below the maximum size (or until only the new value remains in the cache). .B Global Time-Limited Cache ns_cache create cachename -timeout timeout .PP Entries in a cache of this type are accessible to all threads. Each cache has its own mutex that protects access to its entries. .PP Cache values are stored as counted strings, as in a global size-limited cache. .PP The cache has a maximum entry lifetime, called its \fItimeout\fR, specified (in seconds) when the cache is created. Every \fItimeout\fR seconds, AOLserver flushes all cache entries that have not were not created or accessed in the last \fItimeout\fR seconds. .B Thread-Private Size-Limited Cache ns_cache create cachename -size maxsize -thread 1 .PP Each thread in AOLserver automatically gets its own private cache named \fIcachename\fR. Since a thread-private cache is only accessed by one thread, access to it does not require a mutex. Entries in one thread's cache are not visible to any other thread. .PP Cache values are stored as Tcl objects. When a value is stored in the cache, nscache computes its string form and uses the length of the string as the size of the value. .PP The cache has a maximum size, like a global size-limited cache. However, because of the way the cache value sizes are computed, the actual memory usage of the cache values may be several times larger than \fImaxsize\fR. .PP Thread-private caches may offer higher performance if the cached values are complex objects such as lists or scripts, but require more storage than global caches. .SH "SEE ALSO" Ns_Cache(3), nsv(n) aolserver4-4.5.1/doc/Ns_DbSp.30000644000175000017500000000410407645364610015562 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_DbSp.3,v 1.5 2003/04/10 22:00:40 shmooved Exp $ '\" '\" .so man.macros .TH Ns_DbSp 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_DbSpExec, Ns_DbSpGetParams, Ns_DbSpReturnCode, Ns_DbSpSetParam, Ns_DbSpStart \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_DbSpExec\fR(\fIarg, arg\fR) .sp \fBNs_DbSpGetParams\fR(\fIarg, arg\fR) .sp \fBNs_DbSpReturnCode\fR(\fIarg, arg\fR) .sp \fBNs_DbSpSetParam\fR(\fIarg, arg\fR) .sp \fBNs_DbSpStart\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_TclInterp.30000644000175000017500000000426707545404743016651 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_TclInterp.3,v 1.2 2002/09/28 19:58:27 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_TclInterp 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_TclAllocateInterp, Ns_TclCreateInterp, Ns_TclDeAllocateInterp, Ns_TclDestroyInterp, Ns_TclEval, Ns_TclMarkForDelete \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fBNs_TclAllocateInterp\fR(\fIarg, arg\fR) .sp \fBNs_TclCreateInterp\fR(\fIarg, arg\fR) .sp \fBNs_TclDeAllocateInterp\fR(\fIarg, arg\fR) .sp \fBNs_TclDestroyInterp\fR(\fIarg, arg\fR) .sp \fBNs_TclEval\fR(\fIarg, arg\fR) .sp \fBNs_TclMarkForDelete\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Location.30000644000175000017500000000615607645364615016520 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Location.3,v 1.5 2003/04/10 22:00:45 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Location 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_SetConnLocationProc, Ns_SetLocationProc \- Set the location procedure to use .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void \fBNs_SetConnLocationProc\fR(\fINs_LocationProc *procPtr\fR) .sp void \fBNs_SetLocationProc\fR(\fIchar *ignored, Ns_LocationProc *procPtr\fR) .BE .SH DESCRIPTION .PP These functions set the procedure to run when a call to \fBNs_ConnLocation\fR is made. The location is defined in the form METHOD://HOSTNAME:PORT, e.g. http://myhost.com:8443. Setting the location procedure with these functions will cause all calls to \fBNs_ConnLocation\fR to use the location procedure you define instead of using the location procedure callback in the communication module for the connection. There may be cases where you want to do this. For example, you could create a location procedure that reports on the values returned by communication module location procedure callbacks. At the end of that procedure, you could then return that value after logging the information making your location procedure is effectively transparent to the server and other modules. .TP \fBNs_SetConnLocationProc\fR(\fIprocPtr\fR) Set the function to use when \fBNs_ConnLocation\fR is called. This function is deprecated. Use \fBNs_SetLocationProc\fR instead. .TP \fBNs_SetLocationProc\fR(\fIignored, procPtr\fR) Set the function to use when \fBNs_ConnLocation\fR is called. The \fIignored\fR argument is reserved for future use. .SH "SEE ALSO" nsd(1), info(n), Ns_ConnLocation(3) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Cond.30000644000175000017500000000422207645364600015615 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Cond.3,v 1.5 2003/04/10 22:00:32 shmooved Exp $ '\" '\" .so man.macros .TH Ns_Cond 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME , Ns_CondBroadcast, Ns_CondDestroy, Ns_CondInit, Ns_CondSignal, Ns_CondTimedWait, Ns_CondWait \- library procedures .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp \fB\fR(\fIarg, arg\fR) .sp \fBNs_CondBroadcast\fR(\fIarg, arg\fR) .sp \fBNs_CondDestroy\fR(\fIarg, arg\fR) .sp \fBNs_CondInit\fR(\fIarg, arg\fR) .sp \fBNs_CondSignal\fR(\fIarg, arg\fR) .sp \fBNs_CondTimedWait\fR(\fIarg, arg\fR) .sp \fBNs_CondWait\fR(\fIarg, arg\fR) .BE .SH DESCRIPTION .PP These functions ... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_Conn.30000644000175000017500000001742110421472532015622 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Conn.3,v 1.4 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Conn 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnAuthPasswd, Ns_ConnAuthUser, Ns_ConnHeaders, Ns_ConnHost, Ns_ConnId, Ns_ConnLocation, Ns_ConnOutputHeaders, Ns_ConnPeer, Ns_ConnPeerPort, Ns_ConnPort, Ns_ConnResponseLength, Ns_ConnResponseStatus, Ns_ConnServer, Ns_ConnSock \- Routines to access data about a connection .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp char * \fBNs_ConnAuthPasswd\fR(\fINs_Conn *conn\fR) .sp char * \fBNs_ConnAuthUser\fR(\fINs_Conn *conn\fR) .sp Ns_Set * \fBNs_ConnHeaders\fR(\fINs_Conn *conn\fR) .sp char * \fBNs_ConnHost\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnId\fR(\fINs_Conn *conn\fR) .sp char * \fBNs_ConnLocation\fR(\fINs_Conn *conn\fR) .sp Ns_Set * \fBNs_ConnOutputHeaders\fR(\fINs_Conn *conn\fR) .sp char * \fBNs_ConnPeer\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnPeerPort\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnPort\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnResponseLength\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnResponseStatus\fR(\fINs_Conn *conn\fR) .sp char * \fBNs_ConnServer\fR(\fINs_Conn *conn\fR) .sp int \fBNs_ConnSock\fR(\fINs_Conn *conn\fR) .SH ARGUMENTS .AS Ns_Conn *conn in .AP Ns_Conn *conn in Pointer to given connection. .sp .BE .SH DESCRIPTION .PP These routines provide access to data stored within an active connection. All routines take as an argument a pointer to an \fBNs_Conn\fR structure which is setup by the server and passed to request handling procedures. .SH "THE NS_CONN STRUCTURE" .PP The \fBNs_Conn\fR structure includes the following fields: .sp .CS typedef struct Ns_Conn { Ns_Request *request; Ns_Set *headers; Ns_Set *outputheaders; char *authUser; char *authPasswd; int contentLength; int flags; } Ns_Conn; .CE .PP All fields of an \fINs_Conn\fR structure should be considered read-only. The \fIrequest\fR field contains a pointer to the parsed HTTP request. See the manual page for \fBNs_ParseRequest\fR for details on what it contains. .PP The \fIheaders\fR and \fIoutputHeaders\fR fields point to \fBNs_Set\fR structures for the input and output headers, respectively. The \fIoutputHeaders\fR set will generally not contain any fields until after the request has been processed. See the manual page on \fBNs_Set\fR for details on the fields of the structure and routines to access and manipulate them. .PP The \fIauthUser\fR and \fIauthPasswd\fR fields point to the decoded username and password for the request or \fINULL\fR if no authorization was sent. .PP The \fIcontentLength\fR field is the length of the content, if any, sent with the request. See the man page on \fBNs_ConnContent\fR for details on accessing the content. .PP The \fIflags\fR field is a bitmask with one or more \fINS_CONN\fR bits: .TP \fBNS_CONN_CLOSED\fR Connection is closed. .TP \fBNS_CONN_SKIPHDRS\fR Pre-HTTP/1.0 connection which will not return headers. .TP \fBNS_CONN_SKIPBODY\fR HTTP HEAD request which will return no content. .TP \fBNS_CONN_READHDRS\fR Headers have been read (noramlly set). .TP \fBNS_CONN_SENTHDRS\fR Result headers have been sent. .TP \fBNS_CONN_KEEPALIVE\fR Connection should be kept alive for another request if possible. .TP \fBNS_CONN_WRITE_ENCODED\fR Output could be encoded when directly sent. .TP \fBNS_CONN_FILECONTENT\fR Connection contains content originally in a temp file. .TP \fBNS_CONN_RUNNING\fR Connection is currently active in a request thread. .TP \fBNS_CONN_OVERFLOW\fR Connection is being rejected due to overflow of a limit. .TP \fBNS_CONN_TIMEOUT\fR Connection has timed out waiting for service. .TP \fBNS_CONN_GZIP\fR Connection content will be compressed if possible. .TP \fBNS_CONN_CHUNK\fR Content is being sent in chunked encoding mode. .PP These flags should be considered read-only. Use the corresponding routines, e.g., \fBNs_ConnSetKeepAlive\fR, to set the flags if necessary. .SH "CONNECTION ACCESS ROUTINES" In addition to the public fields, the routines above can be used to access data contained in the private components of the connection (in retrospect, all fields should have been private). .TP char *\fBNs_ConnAuthPasswd\fR Returns the \fIauthPassword\fR field for the \fINs_Conn\fR stucture. .TP char *\fBNs_ConnAuthUser\fR Returns the \fIauthUser\fR field for the \fINs_Conn\fR stucture. .TP Ns_Set *\fBNs_ConnHeaders\fR Returns the \fIheaders\fR field for the \fINs_Conn\fR stucture. .TP char *\fBNs_ConnHost\fR Returns the IP address as a string that the communications driver is listening on, e.g., \fI127.0.0.1\fR for a server listening for connectionsn on \fIlocalhost\fR. .TP int \fBNs_ConnId\fR Returns a unique integer ID for the connection. The ids start at zero and increase monotonically with each new connection accepted by the server. .TP char *\fBNs_ConnLocation\fR Returns a pointer to a string which is the HTTP location for the connection, e.g., \fIhttp://www.mysite.com\fR. The string can be helpful to construct redirect messages. .TP Ns_Set *\fBNs_ConnOutputHeaders\fR Returns the \fIoutputHeaders\fR field for the \fINs_Conn\fR stucture. .TP char *\fBNs_ConnPeer\fR Returns a string with an IP address for the remote end of the connection (e.g., the users browser). Note this could also be the IP address of a proxy server. .TP int \fBNs_ConnPeerPort\fR Returns the port of the remote end of the connection. .TP int \fBNs_ConnPort\fR Returns the port for the server end point of the connection, by default port 80. .TP int \fBNs_ConnResponseLength\fR Returns the length of content sent to the client. The result will be zero until a result has been generated. .TP int \fBNs_ConnResponseStatus\fR Returns the HTTP status code of the responses sent to the client, 200 for normal responses. .TP char *\fBNs_ConnServer\fR Returns a pointer to the string name of the virtual server used for the connection. This string can then be passed to other virtual server specific routines, e.g., \fBNs_TclAllocateInterp\fR. .TP int \fBNs_ConnSock\fR Returns the underlying socket file descriptor for the connection. This can be useful for diagnostic or introspection routines (e.g., getpeername). It should otherwise not be manipulated or closed. .SH "SEE ALSO" Ns_Set(3), Ns_ConnContent(3), Ns_ConnGetQuery(3), Ns_ParseRequest(3), ns_conn(n) .SH KEYWORDS connection, location, headers aolserver4-4.5.1/doc/ns_sock.n0000644000175000017500000001616707645364662016047 0ustar frankiefrankie'\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_sock.n,v 1.4 2003/04/10 22:01:22 shmooved Exp $ '\" '\" .so man.macros .TH ns_sock n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_sockaccept, ns_sockblocking, ns_sockcallback, ns_sockcheck, ns_socketpair, ns_socklisten, ns_socklistencallback, ns_socknonblocking, ns_socknread, ns_sockopen, ns_sockselect \- Network socket commands .SH SYNOPSIS \fBns_sockaccept \fIsockid\fR .sp \fBns_sockblocking \fIsockid\fR .sp \fBns_sockcallback \fIsockid script when\fR .sp \fBns_sockcheck \fIfileid\fR .sp \fBns_socketpair\fR .sp \fBns_socklisten \fIaddress port\fR .sp \fBns_socklistencallback \fIaddress port script\fR .sp \fBns_socknonblocking \fIsockid\fR .sp \fBns_socknread \fIsockid\fR .sp \fBns_sockopen \fR?\fI-nonblock\fR | \fI-timeout seconds\fR? \fIhost port\fR .sp \fBns_sockselect \fR?\fI-timeout \fIseconds\fR? \fIrfds wfds efds\fR .BE .SH DESCRIPTION .PP Performs one of several network socket operations, providing a means to manipulate and use sockets directly within AOLserver. .TP \fBns_sockaccept \fIsockid\fR Accepts a new connection on the socket specified by \fIsockid\fR and returns a list containing the read and write file descriptors for the socket, respectively. The file descriptors can be used with Tcl's \fBputs\fR, \fBgets\fR, \fBread\fR or any other Tcl socket manipulation commands. \fBns_sockaccept\fR does not create a socket for you. It is normally used in conjunction with \fBns_sockcallback\fR, \fBns_socklisten\fR, and \fBns_socklistencallback\fR. You can use \fBns_sockcheck\fR to see if the socket is valid before using \fBns_sockaccept\fR on it. .TP \fBns_sockblocking \fIsockid\fR Sets the socket specified by \fIsockid\fR to blocking mode. In blocking mode, an operation on a socket must complete before the command can return. This can cause your process or thread to block forever if the operation does not complete. If that happens in an ADP, the page may never complete until the socket is interrupted, closed or a TCP timeout occurs. .TP \fBns_sockcallback \fIsockid script when\fR Registers a socket callback script that will be run when a connection is made to the socket specified by \fIsockid\fR. The socket must already exist. You can create a socket using \fBns_socklisten\fR. The \fIscript\fR should accept \fIsockid\fR and \fIwhen\fR as its first two arguments. The \fIscript\fR is responsible for doing an \fBns_sockaccept\fR on \fIsockid\fR prior to reading from and writing to the socket. If the same \fIscript\fR will handle all \fIwhen\fR values, you must still register the script four separate times, once for each type of \fIwhen\fR value. The \fIwhen\fR value is passed to \fIscript\fR when \fIscript\fR is invoked. The \fIwhen\fR value is one of: .IP "" 10 \fIr\fR - the socket is readable .IP \fIw\fR - the socket is writeable .IP \fIe\fR - the socket has an exceptional condition .IP \fIx\fR - the server is shutting down .TP \fBns_sockcheck \fIfileid\fR Uses recv() or send() calls to check if a socket is still connected. The \fIfileid\fR is the read or write file id returned by \fBns_sockopen\fR. This function is useful if you used the \fI-nonblock\fR option with \fBns_sockopen\fR after calling \fBns_sockselect\fR. .TP \fBns_socketpair\fR Creates a pair of connected sockets and returns a list of file ids: the first one for reads and the second one for writes. .TP \fBns_socklisten \fIaddress port\fR Creates a new socket and listens for connections at the specified \fIaddress\fR and \fIport\fR. An asterisk (*) can be used as the \fIaddress\fR argument to specify all addresses. The socket id is returned. You must use \fBns_sockaccept\fR to accept connections on the socket. .TP \fBns_socklistencallback \fIaddress port script\fR Creates a new socket and listens for connections at the specified \fIaddress\fR and \fIport\fR. An asterisk (*) can be used as the \fIaddress\fR argument to specify all addresses. Runs \fIscript\fR when a new connection is received. The \fIscript\fR must use \fBns_sockaccept\fR on the .TP \fBns_socknonblocking \fIsockid\fR Sets the socket specified by \fIsockid\fR to nonblocking. .TP \fBns_socknread \fIsockid\fR Returns the number of bytes waiting to be read from the socket specified by \fIsockid\fR. .TP \fBns_sockopen \fR?\fI-nonblock\fR | \fI-timeout seconds\fR? \fIhost port\fR Uses the socket(), bind() and connect() calls to connect to the remote \fIhost\fR on the specified \fIport\fR. \fBns_sockopen\fR returns a list containing the read and write fileids, respectively. The \fI-nonblock\fR option causes \fBns_sockopen\fR to return immediately, while the connect is still in progress by the operating system. Use \fBns_sockcheck\fR with the write fileid to see if the connect has completed before attempting to read from or write to the socket. The \fI-timeout\fR option specifies how long to wait for the connect to be made in \fIseconds\fR before timing out. .TP \fBns_sockselect\fR ?\fI-timeout \fIseconds\fR? \fIrfds wfds efds\fR Uses a call to select() to determine which fileids are readable, writable or have exceptional conditions. \fBns_sockselect\fR returns a list of three lists: readable fileids, writable fileids, and the fileids with exceptions. The \fI-timeout\fR option specifies how many \fIseconds\fR to wait for \fBns_sockselect\fR before timing out. The \fIrfds\fR, \fIwfds\fR and \fIefds\fR arguments are lists of readable fileids, writeable fileids, and fileids with exceptions, respectively. .PP Be careful using these socket commands in an ADP or a procedure called by an ADP. If a socket command hangs, the page may not finish being served to the user until the TCP connection times out, typically several minutes later. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_time.n0000644000175000017500000000570007645314311016017 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_time.n,v 1.3 2003/04/10 16:16:09 shmooved Exp $ '\" '\" .so man.macros .TH ns_time n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_time, ns_fmttime, ns_gmtime, ns_localtime, \- commands .SH SYNOPSIS \fBns_fmttime \fItime \fR?\fIformat string\fR? .sp \fBns_gmtime .sp \fBns_localtime .sp \fBns_time .BE .SH DESCRIPTION .PP \fBns_time\fR: Returns the value of time in seconds since 00:00:00 UTC, January 1, 1970. This return value is suitable as input to the ns_httptime function to get the current time. \fBns_fmttime\fR: Formats the time string,time,according to the format provided in format string. If no format is provided, defaults to "%a %b %e %H:%M:%S %Z %Y". \fBns_gmttime\fR: Returns a Tcl list of the pieces of the current Greenwich Mean Time. The pieces are seconds (0-59) minutes (0-59) hours (0-23) dayofmonth (1-31) monthofyear (0-11) year (year-1900)* dayofweek (Sunday=0) dayofyear (0-365) 1 if Daylight Savings Time is in effect \fBns_localtime\fR: Returns a Tcl list of the pieces of the current local time. The pieces are seconds (0-59) minutes (0-59) hours (0-23) dayofmonth (1-31) monthofyear (0-11) year (year-1900)* dayofweek (Sunday=0) dayofyear (0-365) 1 if Daylight Savings Time is in effect .SH EXAMPLES .PP ns_fmttime [ns_time] returns: Tue Nov 12 15:14:47 2002 ns_fmttime [ns_time] "%Y%m%d" returns: 20021112 .SH "SEE ALSO" ns_httptime .SH KEYWORDS aolserver4-4.5.1/doc/ns_sync.n0000644000175000017500000000413607645364662016055 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_sync.n,v 1.4 2003/04/10 22:01:22 shmooved Exp $ '\" '\" .so man.macros .TH ns_sync n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_cond, ns_critsec, ns_event, ns_mutex, ns_rwlock, ns_sema \- commands .SH SYNOPSIS \fBns_cond \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_critsec \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_event \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_mutex \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_rwlock \fIoption \fR?\fIarg arg ...\fR? .sp \fBns_sema \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_register_proc.n0000644000175000017500000002060510417520540017723 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_register_proc.n,v 1.1 2006/04/13 19:07:12 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_register_proc n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_register_adp, ns_register_proc, ns_unregister_adp, ns_unregister_proc \- Facilities to manage mappings for HTTP requests to Tcl procedures or ADP files .SH SYNOPSIS .nf \fBns_register_adp\fR ?\fI-noinherit\fR? \fImethod url file\fR \fBns_register_proc\fR ?\fI-noinherit\fR? \fImethod url proc\fR ?\fIarg\fR? \fBns_unregister_adp\fR ?\fI-noinherit\fR? \fImethod url\fR \fBns_unregister_proc\fR ?\fI-noinherit\fR? \fImethod url\fR .fi .BE .SH DESCRIPTION These commands manage mappings of HTTP request to Tcl procedures or ADP files. The server will invoke the given procedure or ADP file when the corresponding method/url combination is requested. .PP The \fImethod\fR is normally one of \fIGET\fR or \fIPOST\fR although there is no restriction as internally method is always treated simply as a string. Specialized applications, for example, a WebDav file server, could register additional methods such as \fIPUT\fR, \fIDELETE\fR, or \fIBROWSE\fR. .PP The \fIurl\fR parameter specifies the trailing, pathname portion of an url, for example, \fI/myapp/search\fR. Requests for the specified url or any url's with additional path elements which do not have more specific mappings will be handled by the given procedure or ADP file. This behavior can be changed with the optional \fI-noinherit\fR flag in which case only exact match url's will be handled. .PP In addition, for the final pathname component, a "glob-style" pattern may also be specified to further restrict the match. For example, \fI/myapp/*.adp\fR would handle requests for all url which start with \fI/myapp\fR and have a final pathname component which ends with the \fI.adp\fR extension. Note that the method cannot be specified as a glob pattern, i.e., attempting to map "*" will map the single character string "*" as the method, it will not map all possible methods. .PP Calls to \fBns_register_proc\fR and \fBns_register_adp\fR are normally placed in server initialization scripts. The \fBns_unregister_proc\fR and \fBns_unregister_adp\fR commands are rarely used, normally only in the context of development or debugging. .TP \fBns_register_adp\fR ?\fI-noinherit\fR? \fImethod url file\fR This command maps the given method/url combination to a specific ADP file. The \fIfile\fR argument must be an absolute pathname and a regular file. When the server receives a matching request, it will allocate a Tcl interpreter and invoke the \fBns_adp_include\fR command with the given file, returning the results of the output buffer to the client when the command returns. .sp Note it is also possible to provide mappings for ADP files in the config file as well although those mappings are intended to support mixing of ADP and static files in the server's basic page root. Using \fBns_register_adp\fR can provide more general mappings, not requiring actual ADP files to exist at the corresponding location in the filesystem. .TP \fBns_register_proc\fR ?\fI-noinherit\fR? \fImethod url proc\fR ?\fIarg\fR? This command maps the given method/url combination to a Tcl procedure. When the server receives a matching request, it allocates a Tcl interpreter and calls \fBTcl_Eval\fR with a script constructed of the procedure with zero, one, or two arguments depending on the arguments expected for the procedure. If the procedure accepts no arguments, none are passed and the \fIarg\fR parameter to \fBns_register_proc\fR, if given, is ignored. If it takes one argument, the procedure is passed the optional \fIarg\fR parameter or a null string if no argument was given. If the procedure accepts two arguments, the first argument will be the "connection id" followed by the argument as described for the case of one argument. The connection id is a small string of the form "cns#" where # is a monotonically increasing integer value which will eventually wrap after the server has been running for a long time. This id is also returned via the the \fBns_conn id\fR command. This connection id is for information purposes only and is is otherwise useless and not required to be passed to any other AOLserver Tcl command. See the \fBEXAMPLES\fR section for details on how various arguments are handled for request procedures. .TP \fBns_unregister_adp\fR ?\fI-noinherit\fR? \fImethod url\fR .TP \fBns_unregister_proc\fR ?\fI-noinherit\fR? \fImethod url\fR These commands are identical and can be used to remove any mapping for the given method/url. Note that no check is made to confirm the given mapping exists or was in fact a Tcl procedure, ADP file, or some other C-level mapping created with the \fBNs_RegisterRequest\fR routine. The optional \fI-noinherit\fR flag, if specified, requests removal of mappings previously made with the \fI-noinherit\fR flag with the commands above or via the \fINS_OP_NOINHERIT\fR bit set in a call to the \fBNs_RegisterRequest\fR routine. .SH EXAMPLES The following example demonstrates the use of the \fI-noinherit\fR flag. Assume the following startup initializations code: .CS ns_register_proc -noinherit GET /foo/bar Aproc ns_register_proc GET /foo/bar Bproc ns_register_proc GET /foo/bar/hmm Cproc .CE In this case, \fIAproc\fR will be called when the requested URL is exactly \fI/foo/bar\fR while \fIBproc\fR will be called when the requested URL is anything below \fI/foo/bar\fR, provided there is not already another procedure registered to be called for that exact URL or for an URL with a closer match. \fICproc\fR (not Bproc) will be called when the requested URL is equal to or below /foo/bar/hmm. .PP The following example demonstrates the multiple forms of which a Tcl procedure can be defined: .CS ns_register_proc GET /zeroargs 0args myarg ns_register_proc GET /onearg 1arg myarg ns_register_proc GET /twoargs 2args myarg ns_register_proc GET /twoargs 2args myarg proc 0args {} { ns_returnnotice 200 "no args" } ;# noargs proc 1arg {arg} { ns_returnnotice 200 "arg: $arg" } ;# context proc 2args {conn arg} { ns_returnnotice 200 "connid: $conn, arg: $arg" } ;# conncontext .CE When a request for the /twoargs URL is received, the \fI2args\fR procedure will be called with the value of the connection id as the \fIconn\fR variable and "myarg" as the value of the \fIarg\fR variable. .sp When the server receives a request for \fI/onearg\fR, the server will invoke the \fI1arg\fR procedure with just "myarg" as the value for the \fIarg\fR procedure variable. The connection id, if needed, can be obtained with \fBns_conn id\fR. .sp Finally, when the server receives a request for \fI/zeroargs\fR, the \fI0args\fR procedure will be called with no options. The "myarg" value passed to \fBns_register_proc\fR is ignored and the connection id, if needed, can be obtained with \fBns_conn id\fR. .SH "SEE ALSO" ns_adp(n), Ns_RegisterRequest(3), Ns_UrlSpecificGet(n), Ns_UrlSpecificSet(n) .SH KEYWORDS request callback, connection aolserver4-4.5.1/doc/Ns_Exec.30000644000175000017500000001017110417520407015604 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_Exec.3,v 1.7 2006/04/13 19:05:43 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_Exec 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ExecArgblk, Ns_ExecArgv, Ns_ExecProc, Ns_ExecProcess, Ns_Fork, Ns_GetEnviron, Ns_WaitForProcess, Ns_WaitProcess, ns_fork \- External process execution .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp int \fBNs_ExecArgblk\fR(\fIchar *exec, char *dir, int fdin, int fdout, char *args, Ns_Set *env\fR) .sp int \fBNs_ExecArgv\fR(\fIchar *exec, char *dir, int fdin, int fdout, char **argv, Ns_Set *env\fR) .sp int \fBNs_ExecProc\fR(\fIchar *exec, char **argv\fR) .sp int \fBNs_ExecProcess\fR(\fIchar *exec, char *dir, int fdin, int fdout, char *args, Ns_Set *env\fR) .sp int \fBNs_Fork\fR(\fIvoid\fR) .sp char \fB**Ns_GetEnviron\fR(\fIvoid\fR) .sp int \fBNs_WaitForProcess\fR(\fIint pid, int *statusPtr\fR) .sp int \fBNs_WaitProcess\fR(\fIint pid\fR) .sp int \fBns_fork\fR(\fIvoid\fR) .BE .SH DESCRIPTION .PP These functions handle fork and exec operations. See files: nsd/exec.c, nsd/tclenv.c and nsthread/fork.c. .TP \fBNs_ExecArgblk\fR(\fIexec, dir, fdin, fdout, args, env\fR) Executes a command in a child process. Return process id of child process exec\'ing the command or \-1 on failure. Provides extended error checking and error messages. .TP \fBNs_ExecArgv\fR(\fIexec, dir, fdin, fdout, argv, env\fR) Execute a command in a child process using fork(2) and execve(2), returns the process id of child process exec\'ing the command or \-1 on failure. The child sends an extended error message to the parent. .TP \fBNs_ExecProc\fR(\fIexec, argv\fR) Executes a command in a child process. Returns the process id of the child process exec\'ing the command or \-1 on failure. Simplifies call to Ns_ExecArgv. .TP \fBNs_ExecProcess\fR(\fIexec, dir, fdin, fdout, args, env\fR) Executes a command in a child process. Returns the process id of the child process exec\'ing the command or \-1 on failure. Calls Ns_ExecArgblk with same arguments. .TP \fBNs_Fork\fR(\fI\fR) Posix style fork(), using fork1() on Solaris if needed. See fork(2) man page. Calls ns_fork. .TP \fBNs_GetEnviron\fR(\fI\fR) Returns pointer to the environment vector. .TP \fBNs_WaitForProcess\fR(\fIpid, statusPtr\fR) Wait for child process. Returns NS_OK on success, or NS_ERROR on failure. *statusPtr is set to the exit code of the child process. .TP \fBNs_WaitProcess\fR(\fIpid\fR) Wait for child process. Calls Ns_WaitForProcess with NULL statusPtr. Returns NS_OK on success, or NS_ERROR on failure. .TP \fBns_fork\fR(\fI\fR) Posix style fork(), using fork1() on Solaris if needed. .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/ns_checkurl.n0000644000175000017500000000350307645364650016673 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/ns_checkurl.n,v 1.4 2003/04/10 22:01:12 shmooved Exp $ '\" '\" .so man.macros .TH ns_checkurl n 4.0 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_checkurl \- commands .SH SYNOPSIS \fBns_checkurl \fIoption \fR?\fIarg arg ...\fR? .BE .SH DESCRIPTION .PP These commands... .SH "SEE ALSO" nsd(1), info(n) .SH KEYWORDS aolserver4-4.5.1/doc/Ns_ConnDriver.30000644000175000017500000000543510421472532017000 0ustar frankiefrankie '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/doc/Ns_ConnDriver.3,v 1.6 2006/04/19 17:37:30 jgdavidson Exp $ '\" '\" .so man.macros .TH Ns_ConnDriver 3 4.0 AOLserver "AOLserver Library Procedures" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Ns_ConnDriverContext, Ns_ConnDriverName \- Routines to access communication driver data .SH SYNOPSIS .nf \fB#include "ns.h"\fR .sp void * \fBNs_ConnDriverContext\fR(\fIconn\fR) .sp char * \fBNs_ConnDriverName\fR(\fIconn\fR) .SH ARGUMENTS .AS Ns_Conn conn in .AP Ns_Conn conn in Pointer to open connection. .BE .SH DESCRIPTION .PP These functions provide access to the underyling communications driver data for an open connection. .TP char *\fBNs_ConnDriverName\fR(\fIconn\fR) Returns the string name of the communication driver, e.g., "nssock". This is the name passed in the \fINs_DriverInitData\fR structure in a call to \fBNs_DriverInit\fR, not the module name for the particular instance of the loaded driver. .TP void *\fBNs_ConnDriverContent\fR(\fIconn\fR) Returns a pointer to the connection-specific driver context for the given connection. This value is that of the \fIarg\fR element of the underlying \fINs_Sock\fR structure allocated by the server and used by communication drivers to manage private state. If the connection is closed, the value returned is always NULL. .SH "SEE ALSO" Ns_DriverInit(3) .SH KEYWORDS connection, context aolserver4-4.5.1/nsd/0000755000175000017500000000000011141661376014221 5ustar frankiefrankieaolserver4-4.5.1/nsd/binder.c0000644000175000017500000001343210300724635015625 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * binder.c -- * *Support for pre-bound privileged ports. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/binder.c,v 1.18 2005/08/17 21:18:21 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * Locals defined in this file */ static void PreBind(char *line); static Tcl_HashTable prebound; static Ns_Mutex lock; /* *---------------------------------------------------------------------- * * NsSockGetBound -- * * Get a pre-bound socket if available. * * Results: * Socket descriptor or INVALID_SOCKET on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ SOCKET NsSockGetBound(struct sockaddr_in *saPtr) { SOCKET sock = INVALID_SOCKET; Tcl_HashEntry *hPtr; Ns_MutexLock(&lock); hPtr = Tcl_FindHashEntry(&prebound, (char *) saPtr); if (hPtr != NULL) { sock = (int) Tcl_GetHashValue(hPtr); Tcl_DeleteHashEntry(hPtr); } Ns_MutexUnlock(&lock); return sock; } /* *---------------------------------------------------------------------- * * NsInitBinder -- * * Initialize the pre-bind table. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitBinder(void) { Ns_MutexSetName(&lock, "ns:binder"); Tcl_InitHashTable(&prebound, sizeof(struct sockaddr_in)/sizeof(int)); } /* *---------------------------------------------------------------------- * * NsPreBind -- * * Pre-bind any requested ports, called from Ns_Main at startup. * * Results: * None. * * Side effects: * May pre-bind to one or more ports. * *---------------------------------------------------------------------- */ void NsPreBind(char *args, char *file) { char line[1024]; FILE *fp; if (args != NULL) { PreBind(args); } if (file != NULL && (fp = fopen(file, "r")) != NULL) { while (fgets(line, sizeof(line), fp) != NULL) { PreBind(line); } fclose(fp); } } /* *---------------------------------------------------------------------- * * NsClosePreBound -- * * Close any remaining pre-bound sockets. * * Results: * None. * * Side effects: * Pre-bound sockets closed. * *---------------------------------------------------------------------- */ void NsClosePreBound(void) { Tcl_HashEntry *hPtr; Tcl_HashSearch search; char *addr; int port, sock; struct sockaddr_in *saPtr; Ns_MutexLock(&lock); hPtr = Tcl_FirstHashEntry(&prebound, &search); while (hPtr != NULL) { saPtr = (struct sockaddr_in *) Tcl_GetHashKey(&prebound, hPtr); addr = ns_inet_ntoa(saPtr->sin_addr); port = htons(saPtr->sin_port); sock = (int) Tcl_GetHashValue(hPtr); Ns_Log(Warning, "prebind: closed unused: %s:%d = %d", addr, port, sock); close(sock); hPtr = Tcl_NextHashEntry(&search); } Tcl_DeleteHashTable(&prebound); Tcl_InitHashTable(&prebound, sizeof(struct sockaddr_in)/sizeof(int)); Ns_MutexUnlock(&lock); } /* *---------------------------------------------------------------------- * * PreBind -- * * Pre-bind to one or more ports in a comma-separated list. * * Results: * None. * * Side effects: * Sockets are left in bound state for later listen * in Ns_SockListen. * *---------------------------------------------------------------------- */ static void PreBind(char *line) { Tcl_HashEntry *hPtr; int new, sock, port; struct sockaddr_in sa; char *err, *ent, *p, *q, *addr, *baddr; ent = line; do { p = strchr(ent, ','); if (p != NULL) { *p = '\0'; } baddr = NULL; addr = "0.0.0.0"; q = strchr(ent, ':'); if (q == NULL) { port = atoi(ent); } else { *q = '\0'; port = atoi(q+1); baddr = addr = ent; } if (port == 0) { err = "invalid port"; } else if (Ns_GetSockAddr(&sa, baddr, port) != NS_OK) { err = "invalid address"; } else { hPtr = Tcl_CreateHashEntry(&prebound, (char *) &sa, &new); if (!new) { err = "duplicate entry"; } else if ((sock = Ns_SockBind(&sa)) == -1) { Tcl_DeleteHashEntry(hPtr); err = strerror(errno); } else { Tcl_SetHashValue(hPtr, sock); err = NULL; } } if (q != NULL) { *q = ':'; } if (p != NULL) { *p++ = ','; } if (err != NULL) { Ns_Log(Error, "prebind: invalid entry: %s: %s", ent, err); } else { Ns_Log(Notice, "prebind: bound: %s", ent); } ent = p; } while (ent != NULL); } aolserver4-4.5.1/nsd/fd.c0000644000175000017500000003014610771242513014756 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * fd.c -- * * Manipulate file descriptors of open files. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/fd.c,v 1.13 2008/03/22 17:43:39 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #ifdef _WIN32 #define DEVNULL "nul:" #include #else #define DEVNULL "/dev/null" static int ClosePipeOnExec(int *fds); #ifdef USE_DUPHIGH static int dupHigh = 0; #endif #endif /* * The following structure maitains and open temp fd. */ typedef struct Tmp { struct Tmp *nextPtr; int fd; } Tmp; static Tmp *firstTmpPtr; static Ns_Mutex lock; static int devNull; /* * The following constants are defined for this file */ #ifndef F_CLOEXEC #define F_CLOEXEC 1 #endif /* *---------------------------------------------------------------------- * * NsInitFd -- * * Initialize the fd API's. * * Results: * None. * * Side effects: * Will open a shared fd to /dev/null and ensure stdin, stdout, * and stderr are open on something. * *---------------------------------------------------------------------- */ void NsInitFd(void) { #ifndef _WIN32 struct rlimit rl; #endif int fd; /* * Ensure fd 0, 1, and 2 are open on at least /dev/null. */ fd = open(DEVNULL, O_RDONLY); if (fd > 0) { close(fd); } fd = open(DEVNULL, O_WRONLY); if (fd > 0 && fd != 1) { close(fd); } fd = open(DEVNULL, O_WRONLY); if (fd > 0 && fd != 2) { close(fd); } #ifndef _WIN32 /* * AOLserver now uses poll() but Tcl and other components may * still use select() which will likely break when fd's exceed * FD_SETSIZE. We now allow setting the fd limit above FD_SETSIZE, * but do so at your own risk. */ if (getrlimit(RLIMIT_NOFILE, &rl) != 0) { Ns_Log(Warning, "fd: getrlimit(RLIMIT_NOFILE) failed: %s", strerror(errno)); } else { if (rl.rlim_cur != rl.rlim_max) { #if defined(__APPLE__) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ > 1040 if (rl.rlim_max == RLIM_INFINITY) { rl.rlim_cur = OPEN_MAX < rl.rlim_max ? OPEN_MAX : rl.rlim_max; } else { rl.rlim_cur = rl.rlim_max; } #else rl.rlim_cur = rl.rlim_max; #endif if (setrlimit(RLIMIT_NOFILE, &rl) != 0) { Ns_Log(Warning, "fd: setrlimit(RLIMIT_NOFILE, %lld) failed: %s", rl.rlim_max, strerror(errno)); } } #ifdef USE_DUPHIGH if (getrlimit(RLIMIT_NOFILE, &rl) == 0 && rl.rlim_cur > 256) { dupHigh = 1; } #endif } #endif /* * Open a fd on /dev/null which can be later re-used. */ devNull = open(DEVNULL, O_RDWR); if (devNull < 0) { Ns_Fatal("fd: open(%s) failed: %s", DEVNULL, strerror(errno)); } Ns_DupHigh(&devNull); Ns_CloseOnExec(devNull); } /* *---------------------------------------------------------------------- * Ns_CloseOnExec -- * * Set the close-on-exec flag for a file descriptor * * Results: * Return NS_OK on success or NS_ERROR on failure * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_CloseOnExec(int fd) { #ifdef _WIN32 return NS_OK; #else int i; int status = NS_ERROR; i = fcntl(fd, F_GETFD); if (i != -1) { i |= F_CLOEXEC; i = fcntl(fd, F_SETFD, i); status = NS_OK; } return status; #endif } /* *---------------------------------------------------------------------- * Ns_NoCloseOnExec -- * * Clear the close-on-exec flag for a file descriptor * * Results: * Return NS_OK on success or NS_ERROR on failure * * Side effects: * None. * *---------------------------------------------------------------------- */ int ns_closeonexec(int fd) { return Ns_CloseOnExec(fd); } int Ns_NoCloseOnExec(int fd) { #ifdef _WIN32 return NS_OK; #else int i; int status = NS_ERROR; i = fcntl(fd, F_GETFD); if (i != -1) { i &= ~F_CLOEXEC; i = fcntl(fd, F_SETFD, i); status = NS_OK; } return status; #endif } /* *---------------------------------------------------------------------- * Ns_DupHigh -- * * Dup a file descriptor to be 256 or higher * * Results: * Returns new file discriptor. * * Side effects: * Original file descriptor is closed. * *---------------------------------------------------------------------- */ int ns_duphigh(int *fdPtr) { return Ns_DupHigh(fdPtr); } int Ns_DupHigh(int *fdPtr) { #ifdef USE_DUPHIGH int nfd, ofd, flags; if (dupHigh) { ofd = *fdPtr; if ((flags = fcntl(ofd, F_GETFD)) < 0) { Ns_Log(Warning, "fd: duphigh failed: fcntl(%d, F_GETFD): '%s'", ofd, strerror(errno)); } else if ((nfd = fcntl(ofd, F_DUPFD, 256)) < 0) { Ns_Log(Warning, "fd: duphigh failed: fcntl(%d, F_DUPFD, 256): '%s'", ofd, strerror(errno)); } else if (fcntl(nfd, F_SETFD, flags) < 0) { Ns_Log(Warning, "fd: duphigh failed: fcntl(%d, F_SETFD, %d): '%s'", nfd, flags, strerror(errno)); close(nfd); } else { close(ofd); *fdPtr = nfd; } } #endif return *fdPtr; } /* *---------------------------------------------------------------------- * * Ns_GetTemp -- * * Pop or allocate a temp file. Temp files are immediately * removed on Unix and marked non-shared and delete on close * on NT to avoid snooping of data being sent to the CGI. * * Results: * Open file descriptor. * * Side effects: * File may be opened. * *---------------------------------------------------------------------- */ int Ns_GetTemp(void) { Tmp *tmpPtr; Ns_Time now; Ns_DString ds; char *path, buf[64]; int fd, flags, trys; Ns_MutexLock(&lock); tmpPtr = firstTmpPtr; if (tmpPtr != NULL) { firstTmpPtr = tmpPtr->nextPtr; } Ns_MutexUnlock(&lock); if (tmpPtr != NULL) { fd = tmpPtr->fd; ns_free(tmpPtr); return fd; } Ns_DStringInit(&ds); flags = O_RDWR|O_CREAT|O_TRUNC|O_EXCL; #ifdef _WIN32 flags |= _O_SHORT_LIVED|_O_NOINHERIT|_O_TEMPORARY|_O_BINARY; #endif trys = 0; do { Ns_GetTime(&now); sprintf(buf, "nstmp.%d.%d", (int) now.sec, (int) now.usec); path = Ns_MakePath(&ds, P_tmpdir, buf, NULL); #ifdef _WIN32 fd = _sopen(path, flags, _SH_DENYRW, _S_IREAD|_S_IWRITE); #else fd = open(path, flags, 0600); #endif } while (fd < 0 && trys++ < 10 && errno == EEXIST); if (fd < 0) { Ns_Log(Error, "tmp: could not open temp file %s: %s", path, strerror(errno)); #ifndef _WIN32 } else { Ns_DupHigh(&fd); Ns_CloseOnExec(fd); if (unlink(path) != 0) { Ns_Log(Warning, "tmp: unlink(%s) failed: %s", path, strerror(errno)); } #endif } Ns_DStringFree(&ds); return fd; } /* *---------------------------------------------------------------------- * * Ns_ReleaseTemp -- * * Return a temp file to the pool. * * Results: * None. * * Side effects: * File may be closed on error. * *---------------------------------------------------------------------- */ void Ns_ReleaseTemp(int fd) { Tmp *tmpPtr; off_t zero = 0; if (lseek(fd, zero, SEEK_SET) != 0 || ftruncate(fd, zero) != 0) { close(fd); } else { tmpPtr = ns_malloc(sizeof(Tmp)); tmpPtr->fd = fd; Ns_MutexLock(&lock); tmpPtr->nextPtr = firstTmpPtr; firstTmpPtr = tmpPtr; Ns_MutexUnlock(&lock); } } /* *---------------------------------------------------------------------- * * Ns_DevNull -- * * Return an open fd to /dev/null. This is a read-only, shared * fd which can not be closed. * * Results: * Open file descriptor. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_DevNull(void) { return devNull; } /* *---------------------------------------------------------------------- * ns_sockpair, ns_pipe -- * * Create a pipe/socketpair with fd's set close on exec. * * Results: * 0 if ok, -1 otherwise. * * Side effects: * Updates given fd array. * *---------------------------------------------------------------------- */ int ns_pipe(int *fds) { #ifndef _WIN32 if (pipe(fds) == 0) { return ClosePipeOnExec(fds); } #else if (_pipe(fds, 4096, _O_NOINHERIT|_O_BINARY) == 0) { return 0; } #endif return -1; } int ns_sockpair(SOCKET *socks) { #ifndef _WIN32 if (socketpair(AF_UNIX, SOCK_STREAM, 0, socks) == 0) { return ClosePipeOnExec(socks); } return -1; #else SOCKET sock; struct sockaddr_in ia[2]; int size; size = sizeof(struct sockaddr_in); sock = Ns_SockListen("127.0.0.1", 0); if (sock == INVALID_SOCKET || getsockname(sock, (struct sockaddr *) &ia[0], &size) != 0) { return -1; } size = sizeof(struct sockaddr_in); socks[1] = Ns_SockConnect("127.0.0.1", (int) ntohs(ia[0].sin_port)); if (socks[1] == INVALID_SOCKET || getsockname(socks[1], (struct sockaddr *) &ia[1], &size) != 0) { ns_sockclose(sock); return -1; } size = sizeof(struct sockaddr_in); socks[0] = accept(sock, (struct sockaddr *) &ia[0], &size); ns_sockclose(sock); if (socks[0] == INVALID_SOCKET) { ns_sockclose(socks[1]); return -1; } if (ia[0].sin_addr.s_addr != ia[1].sin_addr.s_addr || ia[0].sin_port != ia[1].sin_port) { ns_sockclose(socks[0]); ns_sockclose(socks[1]); return -1; } return 0; #endif } #ifndef _WIN32 static int ClosePipeOnExec(int *fds) { if (Ns_CloseOnExec(fds[0]) == NS_OK && Ns_CloseOnExec(fds[1]) == NS_OK) { return 0; } close(fds[0]); close(fds[1]); return -1; } #endif /* *---------------------------------------------------------------------- * * NsMap -- * * Memory map a region of a file. * * Results: * Pointer to mapped region or NULL if mapping failed. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * NsMap(int fd, off_t start, size_t len, int writable, void **argPtr) { #ifdef _WIN32 /* TODO: Make this work on Win32. */ return NULL; #else int prot; prot = PROT_READ; if (writable) { prot |= PROT_WRITE; } *argPtr = (void *) len; return mmap(NULL, len, prot, MAP_SHARED, fd, start); #endif } /* *---------------------------------------------------------------------- * * NsUnMap -- * * Unmap a previosly mmapped region. * * Results: * None. * * Side effects: * Failure is considered fatal. * *---------------------------------------------------------------------- */ void NsUnMap(void *addr, void *arg) { #ifdef _WIN32 /* TODO: Make this work on Win32. */ Ns_Fatal("NsUnMap not supported"); #else size_t len = (size_t) arg; if (munmap(addr, len) != 0) { Ns_Fatal("munmap(%p, %u) failed: %s", addr, len, strerror(errno)); } #endif } aolserver4-4.5.1/nsd/op.c0000644000175000017500000002727410321342727015012 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * op.c -- * * Routines to register, unregister, and run connection request * routines (previously known as "op procs"). */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/op.c,v 1.15 2005/10/07 00:48:23 dossy Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #define MAX_RECURSION 3 /* Max return direct recursion limit. */ /* * The following structure defines a request procedure including user * routine and client data. */ typedef struct { int refcnt; Ns_OpProc *proc; Ns_Callback *delete; void *arg; unsigned int flags; } Req; /* * Static functions defined in this file. */ static void FreeReq(void *arg); /* * Static variables defined in this file. */ static Ns_Mutex ulock; static int uid; /* *---------------------------------------------------------------------- * * NsInitRequests -- * * Initialize the request API. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitRequests(void) { uid = Ns_UrlSpecificAlloc(); Ns_MutexInit(&ulock); Ns_MutexSetName(&ulock, "nsd:requests"); } /* *---------------------------------------------------------------------- * * Ns_RegisterRequest -- * * Register a new procedure to be called to service matching * given method and url pattern. * * Results: * None. * * Side effects: * Delete procedure of previously registered request, if any, * will be called unless NS_OP_NODELETE flag is set. * *---------------------------------------------------------------------- */ void Ns_RegisterRequest(char *server, char *method, char *url, Ns_OpProc *proc, Ns_Callback *delete, void *arg, int flags) { Req *reqPtr; reqPtr = ns_malloc(sizeof(Req)); reqPtr->proc = proc; reqPtr->delete = delete; reqPtr->arg = arg; reqPtr->flags = flags; reqPtr->refcnt = 1; Ns_MutexLock(&ulock); Ns_UrlSpecificSet(server, method, url, uid, reqPtr, flags, FreeReq); Ns_MutexUnlock(&ulock); } /* *---------------------------------------------------------------------- * * Ns_GetRequest -- * * Return the procedures and context for a given method and url * pattern. * * Results: * None. * * Side effects: * * *---------------------------------------------------------------------- */ void Ns_GetRequest(char *server, char *method, char *url, Ns_OpProc **procPtr, Ns_Callback **deletePtr, void **argPtr, int *flagsPtr) { Req *reqPtr; Ns_MutexLock(&ulock); reqPtr = Ns_UrlSpecificGet(server, method, url, uid); if (reqPtr != NULL) { *procPtr = reqPtr->proc; *deletePtr = reqPtr->delete; *argPtr = reqPtr->arg; *flagsPtr = reqPtr->flags; } else { *procPtr = NULL; *deletePtr = NULL; *argPtr = NULL; *flagsPtr = 0; } Ns_MutexUnlock(&ulock); } /* *---------------------------------------------------------------------- * * Ns_UnRegisterRequest -- * * Remove the procedure which would run for the given method and * url pattern. * * Results: * None. * * Side effects: * Requests deleteProc may run. * *---------------------------------------------------------------------- */ void Ns_UnRegisterRequest(char *server, char *method, char *url, int inherit) { Ns_MutexLock(&ulock); Ns_UrlSpecificDestroy(server, method, url, uid, inherit ? 0 : NS_OP_NOINHERIT); Ns_MutexUnlock(&ulock); } /* *---------------------------------------------------------------------- * * Ns_ConnRunRequest -- * * Locate and execute the procedure for the given method and * url pattern. * * Results: * Standard request procedure result, normally NS_OK. * * Side effects: * Depends on request procedure. * *---------------------------------------------------------------------- */ int Ns_ConnRunRequest(Ns_Conn *conn) { Req *reqPtr; Conn *connPtr = (Conn *) conn; int status; char *server = Ns_ConnServer(conn); /* * Return a quick unavailable error on overflow. */ if (connPtr->flags & NS_CONN_OVERFLOW) { return Ns_ConnReturnServiceUnavailable(conn); } /* * Prevent infinite internal redirect loops. */ if (connPtr->recursionCount > MAX_RECURSION) { Ns_Log(Error, "return: failed to redirect '%s %s': " "exceeded recursion limit of %d", conn->request->method, conn->request->url, MAX_RECURSION); return Ns_ConnReturnInternalError(conn); } Ns_MutexLock(&ulock); reqPtr = Ns_UrlSpecificGet(server, conn->request->method, conn->request->url, uid); if (reqPtr == NULL) { Ns_MutexUnlock(&ulock); return Ns_ConnReturnNotFound(conn); } ++reqPtr->refcnt; Ns_MutexUnlock(&ulock); status = (*reqPtr->proc) (reqPtr->arg, conn); Ns_MutexLock(&ulock); FreeReq(reqPtr); Ns_MutexUnlock(&ulock); return status; } /* *---------------------------------------------------------------------- * * Ns_ConnRedirect -- * * Perform an internal redirect by updating the connection's * request URL and re-authorizing and running the request. This * Routine is used in FastPath to redirect to directory files * (e.g., index.html) and in return.c to redirect by HTTP result * code (e.g., custom not-found handler). * * Results: * Standard request procedure result, normally NS_OK. * * Side effects: * Depends on request procedure. * *---------------------------------------------------------------------- */ int Ns_ConnRedirect(Ns_Conn *conn, char *url) { Conn *connPtr = (Conn *) conn; int status; ++connPtr->recursionCount; /* * Update the request URL. */ Ns_SetRequestUrl(conn->request, url); /* * Re-authorize and run the request. */ status = Ns_AuthorizeRequest(Ns_ConnServer(conn), conn->request->method, conn->request->url, conn->authUser, conn->authPasswd, Ns_ConnPeer(conn)); switch (status) { case NS_OK: status = Ns_ConnRunRequest(conn); break; case NS_FORBIDDEN: status = Ns_ConnReturnForbidden(conn); break; case NS_UNAUTHORIZED: status = Ns_ConnReturnUnauthorized(conn); break; case NS_ERROR: default: status = Ns_ConnReturnInternalError(conn); break; } return status; } /* *---------------------------------------------------------------------- * * Ns_RegisterProxyRequest -- * * Register a new procedure to be called to proxy matching * given method and protocol pattern. * * Results: * None. * * Side effects: * Delete procedure of previously registered request, if any. * *---------------------------------------------------------------------- */ void Ns_RegisterProxyRequest(char *server, char *method, char *protocol, Ns_OpProc *proc, Ns_Callback *delete, void *arg) { NsServer *servPtr; Req *reqPtr; Ns_DString ds; int new; Tcl_HashEntry *hPtr; servPtr = NsGetServer(server); if (servPtr == NULL) { Ns_Log(Error, "Ns_RegisterProxyRequest: no such server: %s", server); return; } Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, method, protocol, NULL); reqPtr = ns_malloc(sizeof(Req)); reqPtr->refcnt = 1; reqPtr->proc = proc; reqPtr->delete = delete; reqPtr->arg = arg; reqPtr->flags = 0; Ns_MutexLock(&servPtr->request.plock); hPtr = Tcl_CreateHashEntry(&servPtr->request.proxy, ds.string, &new); if (!new) { FreeReq(Tcl_GetHashValue(hPtr)); } Tcl_SetHashValue(hPtr, reqPtr); Ns_MutexUnlock(&servPtr->request.plock); Ns_DStringFree(&ds); } /* *---------------------------------------------------------------------- * * Ns_UnRegisterProxyRequest -- * * Remove the procedure which would run for the given method and * protocol. * * Results: * None. * * Side effects: * Request's deleteProc may run. * *---------------------------------------------------------------------- */ void Ns_UnRegisterProxyRequest(char *server, char *method, char *protocol) { NsServer *servPtr; Ns_DString ds; Tcl_HashEntry *hPtr; servPtr = NsGetServer(server); if (servPtr != NULL) { Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, method, protocol, NULL); Ns_MutexLock(&servPtr->request.plock); hPtr = Tcl_FindHashEntry(&servPtr->request.proxy, ds.string); if (hPtr != NULL) { FreeReq(Tcl_GetHashValue(hPtr)); Tcl_DeleteHashEntry(hPtr); } Ns_MutexUnlock(&servPtr->request.plock); Ns_DStringFree(&ds); } } /* *---------------------------------------------------------------------- * * NsConnRunProxyRequest -- * * Locate and execute the procedure for the given method and * protocol pattern. * * Results: * Standard request procedure result, normally NS_OK. * * Side effects: * Depends on request procedure. * *---------------------------------------------------------------------- */ int NsConnRunProxyRequest(Ns_Conn *conn) { Conn *connPtr = (Conn *) conn; NsServer *servPtr = connPtr->servPtr; Ns_Request *request = conn->request; Req *reqPtr = NULL; int status; Ns_DString ds; Tcl_HashEntry *hPtr; Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, request->method, request->protocol, NULL); Ns_MutexLock(&servPtr->request.plock); hPtr = Tcl_FindHashEntry(&servPtr->request.proxy, ds.string); if (hPtr != NULL) { reqPtr = Tcl_GetHashValue(hPtr); ++reqPtr->refcnt; } Ns_MutexUnlock(&servPtr->request.plock); if (reqPtr == NULL) { status = Ns_ConnReturnNotFound(conn); } else { status = (*reqPtr->proc) (reqPtr->arg, conn); Ns_MutexLock(&servPtr->request.plock); FreeReq(reqPtr); Ns_MutexUnlock(&servPtr->request.plock); } Ns_DStringFree(&ds); return status; } /* *---------------------------------------------------------------------- * * FreeReq -- * * URL space callback to delete a request structure. * * Results: * None. * * Side effects: * Depends on request delete procedure. * *---------------------------------------------------------------------- */ static void FreeReq(void *arg) { Req *reqPtr = (Req *) arg; if (--reqPtr->refcnt == 0) { if (reqPtr->delete != NULL) { (*reqPtr->delete) (reqPtr->arg); } ns_free(reqPtr); } } aolserver4-4.5.1/nsd/encoding.c0000644000175000017500000003776110273502667016173 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * encoding.c -- * * Defines standard default charset to encoding mappings. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/encoding.c,v 1.17 2005/08/01 20:27:35 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * Local functions defined in this file. */ static void AddExtension(char *name, char *charset); static void AddCharset(char *name, char *charset); /* * Static variables defined in this file. */ static int eid; static Tcl_HashTable encodings; static Tcl_HashTable charsets; static Tcl_HashTable extensions; static Ns_Mutex lock; static Ns_Cond cond; #define ENC_LOCKED ((Tcl_Encoding) (-1)) /* * The default table maps file extension to Tcl encodings. */ static struct { char *extension; char *name; } builtinExt[] = { {".txt", "ascii"}, {".htm", "iso8859-1"}, {".html", "iso8859-1"}, {".adp", "iso8859-1"}, {NULL, NULL} }; /* * The following table provides charset aliases for Tcl encodings. */ static struct { char *charset; char *name; } builtinChar[] = { { "iso-2022-jp", "iso2022-jp" }, { "iso-2022-kr", "iso2022-kr" }, { "iso-8859-1", "iso8859-1" }, { "iso-8859-2", "iso8859-2" }, { "iso-8859-3", "iso8859-3" }, { "iso-8859-4", "iso8859-4" }, { "iso-8859-5", "iso8859-5" }, { "iso-8859-6", "iso8859-6" }, { "iso-8859-7", "iso8859-7" }, { "iso-8859-8", "iso8859-8" }, { "iso-8859-9", "iso8859-9" }, { "korean", "ksc5601" }, { "ksc_5601", "ksc5601" }, { "mac", "macRoman" }, { "mac-centeuro", "macCentEuro" }, { "mac-centraleupore", "macCentEuro" }, { "mac-croatian", "macCroatian" }, { "mac-cyrillic", "macCyrillic" }, { "mac-greek", "macGreek" }, { "mac-iceland", "macIceland" }, { "mac-japan", "macJapan" }, { "mac-roman", "macRoman" }, { "mac-romania", "macRomania" }, { "mac-thai", "macThai" }, { "mac-turkish", "macTurkish" }, { "mac-ukraine", "macUkraine" }, { "maccenteuro", "macCentEuro" }, { "maccentraleupore", "macCentEuro" }, { "maccroatian", "macCroatian" }, { "maccyrillic", "macCyrillic" }, { "macgreek", "macGreek" }, { "maciceland", "macIceland" }, { "macintosh", "macRoman" }, { "macjapan", "macJapan" }, { "macroman", "macRoman" }, { "macromania", "macRomania" }, { "macthai", "macThai" }, { "macturkish", "macTurkish" }, { "macukraine", "macUkraine" }, { "shift_jis", "shiftjis" }, { "us-ascii", "ascii" }, { "windows-1250", "cp1250" }, { "windows-1251", "cp1251" }, { "windows-1252", "cp1252" }, { "windows-1253", "cp1253" }, { "windows-1254", "cp1254" }, { "windows-1255", "cp1255" }, { "windows-1256", "cp1256" }, { "windows-1257", "cp1257" }, { "windows-1258", "cp1258" }, { "x-mac", "macRoman" }, { "x-mac-centeuro", "macCentEuro" }, { "x-mac-centraleupore", "macCentEuro" }, { "x-mac-croatian", "macCroatian" }, { "x-mac-cyrillic", "macCyrillic" }, { "x-mac-greek", "macGreek" }, { "x-mac-iceland", "macIceland" }, { "x-mac-japan", "macJapan" }, { "x-mac-roman", "macRoman" }, { "x-mac-romania", "macRomania" }, { "x-mac-thai", "macThai" }, { "x-mac-turkish", "macTurkish" }, { "x-mac-ukraine", "macUkraine" }, { "x-macintosh", "macRoman" }, { NULL, NULL } }; /* *---------------------------------------------------------------------- * * NsInitEncodings -- * * Add compiled-in default encodings. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitEncodings(void) { int i; /* * Allocate URL space id for input encodings. */ eid = Ns_UrlSpecificAlloc(); /* * Initialize hash table of encodings and charsets. */ Ns_MutexSetName(&lock, "ns:encodings"); Tcl_InitHashTable(&encodings, TCL_STRING_KEYS); Tcl_InitHashTable(&charsets, TCL_STRING_KEYS); Tcl_InitHashTable(&extensions, TCL_STRING_KEYS); /* * Add default charset and file mappings. */ for (i = 0; builtinChar[i].charset != NULL; ++i) { AddCharset(builtinChar[i].charset, builtinChar[i].name); } for (i = 0; builtinExt[i].extension != NULL; ++i) { AddExtension(builtinExt[i].extension, builtinExt[i].name); } } /* *---------------------------------------------------------------------- * * NsUpdateEncodings -- * * Add additional configured encodings. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsUpdateEncodings(void) { Ns_Set *set; int i; /* * Add configured charsets and file mappings. */ set = Ns_ConfigGetSection("ns/charsets"); for (i = 0; set != NULL && i < Ns_SetSize(set); ++i) { AddCharset(Ns_SetKey(set, i), Ns_SetValue(set, i)); } set = Ns_ConfigGetSection("ns/encodings"); for (i = 0; set != NULL && i < Ns_SetSize(set); ++i) { AddExtension(Ns_SetKey(set, i), Ns_SetValue(set, i)); } } /* *---------------------------------------------------------------------- * * Ns_GetFileEncoding -- * * Return the Tcl_Encoding for the given file. Note this may * not be the same as the encoding for the charset of the * file's mimetype. * * Results: * Tcl_Encoding or NULL if not found. * * Side effects: * See LoadEncoding(). * *---------------------------------------------------------------------- */ Tcl_Encoding Ns_GetFileEncoding(char *file) { Tcl_HashEntry *hPtr; char *ext, *name; ext = strrchr(file, '.'); if (ext != NULL) { hPtr = Tcl_FindHashEntry(&extensions, ext); if (hPtr != NULL) { name = Tcl_GetHashValue(hPtr); return Ns_GetEncoding(name); } } return NULL; } /* *---------------------------------------------------------------------- * * Ns_GetTypeEncoding -- * * Return the Tcl_Encoding for the given Content-type header, * e.g., "text/html; charset=iso-8859-1" returns Tcl_Encoding * for iso8859-1. * This function will utilize the ns/parameters/OutputCharset * config parameter if given a content-type "text/" with * no charset. * When no OutputCharset defined, the fall-back behavior is to * return NULL. * * Results: * Tcl_Encoding or NULL if not found. * * Side effects: * See LoadEncoding(). * *---------------------------------------------------------------------- */ Tcl_Encoding Ns_GetTypeEncoding(char *type) { char *charset; int len; charset = Ns_FindCharset(type, &len); return (charset ? Ns_GetCharsetEncodingEx(charset, len) : NULL); } /* *---------------------------------------------------------------------- * * Ns_GetCharsetEncodingEx, Ns_GetCharsetEncoding -- * * Return the Tcl_Encoding for the given charset, e.g., * "iso-8859-1" returns Tcl_Encoding for iso8859-1. * * Results: * Tcl_Encoding or NULL if not found. * * Side effects: * See LoadEncoding(). * *---------------------------------------------------------------------- */ Tcl_Encoding Ns_GetCharsetEncoding(char *charset) { return Ns_GetCharsetEncodingEx(charset, -1); } Tcl_Encoding Ns_GetCharsetEncodingEx(char *charset, int len) { Tcl_HashEntry *hPtr; Tcl_Encoding encoding; Ns_DString ds; /* * Cleanup the charset name and check for an * alias (e.g., iso-8859-1 = iso8859-1) before * assuming the charset and Tcl encoding names * match (e.g., big5). */ Ns_DStringInit(&ds); Ns_DStringNAppend(&ds, charset, len); charset = Ns_StrTrim(Ns_StrToLower(ds.string)); hPtr = Tcl_FindHashEntry(&charsets, charset); if (hPtr != NULL) { charset = Tcl_GetHashValue(hPtr); } encoding = Ns_GetEncoding(charset); Ns_DStringFree(&ds); return encoding; } /* *---------------------------------------------------------------------- * * Ns_GetEncoding -- * * Return the Tcl_Encoding for the given charset. * * Results: * Tcl_Encoding or NULL if not found. * * Side effects: * See GetEncoding(). * *---------------------------------------------------------------------- */ Tcl_Encoding Ns_GetEncoding(char *name) { Tcl_Encoding encoding; Tcl_HashEntry *hPtr; int new; Ns_MutexLock(&lock); hPtr = Tcl_CreateHashEntry(&encodings, name, &new); if (!new) { while ((encoding = Tcl_GetHashValue(hPtr)) == ENC_LOCKED) { Ns_CondWait(&cond, &lock); } } else { Tcl_SetHashValue(hPtr, ENC_LOCKED); Ns_MutexUnlock(&lock); encoding = Tcl_GetEncoding(NULL, name); if (encoding == NULL) { Ns_Log(Warning, "encoding: could not load: %s", name); } else { Ns_Log(Notice, "encoding: loaded: %s", name); } Ns_MutexLock(&lock); Tcl_SetHashValue(hPtr, encoding); Ns_CondBroadcast(&cond); } Ns_MutexUnlock(&lock); return encoding; } /* *---------------------------------------------------------------------- * * Ns_FindCharset -- * * Find start end length of charset within a type string. * * Results: * Pointer to start of charset or NULL on no charset. * * Side effects: * Will update lenPtr with length of charset if found. * *---------------------------------------------------------------------- */ char * Ns_FindCharset(char *type, int *lenPtr) { char *start, *end; start = Ns_StrCaseFind(type, "charset"); if (start != NULL) { start += 7; start += strspn(start, " "); if (*start++ == '=') { start += strspn(start, " "); end = start; while (*end && !isspace(UCHAR(*end))) { ++end; } *lenPtr = end - start; return start; } } return NULL; } /* *---------------------------------------------------------------------- * * NsTclRegisterEncodingObjCmd -- * * Implements ns_register_encoding command to register an input * encoding for a given method/URL. * * Results: * Standard Tcl result. * * Side effects: * May register a new encoding for given method/URL. * *---------------------------------------------------------------------- */ int NsTclRegisterEncodingObjCmd(ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { NsInterp *itPtr = data; int flags, idx; Tcl_Encoding encoding; char *server, *method, *url, *charset; if (objc != 4 && objc != 5) { badargs: Tcl_WrongNumArgs(interp, 1, objv, "?-noinherit? method url charset"); return TCL_ERROR; } if (STREQ(Tcl_GetString(objv[1]), "-noinherit")) { if (objc < 5) { goto badargs; } flags = NS_OP_NOINHERIT; idx = 2; } else { if (objc == 7) { goto badargs; } flags = 0; idx = 1; } if (NsTclGetServer(itPtr, &server) != TCL_OK) { return TCL_ERROR; } method = Tcl_GetString(objv[idx++]); url = Tcl_GetString(objv[idx++]); charset = Tcl_GetString(objv[idx++]); encoding = Ns_GetCharsetEncoding(charset); if (encoding == NULL) { Tcl_AppendResult(interp, "no encoding for charset: ", charset, NULL); return TCL_ERROR; } Ns_UrlSpecificSet(server, method, url, eid, encoding, flags, NULL); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclCharsetsCmd -- * * Tcl command to get the list of charsets for which we have encodings. * * Results: * TCL_OK * * Side effects: * Sets Tcl interpreter result. * *---------------------------------------------------------------------- */ int NsTclCharsetsCmd(ClientData dummy, Tcl_Interp *interp, int argc, char *argv[]) { Tcl_HashEntry *entry; Tcl_HashSearch search; Ns_MutexLock(&lock); entry = Tcl_FirstHashEntry(&charsets, &search); while (entry != NULL) { Tcl_AppendElement(interp, (char *) Tcl_GetHashKey(&charsets, entry)); entry = Tcl_NextHashEntry(&search); } Ns_MutexUnlock(&lock); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclEncodingForCharsetCmd -- * * Return the name of the encoding for the specified charset. * * Results: * Tcl result contains an encoding name or "". * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsTclEncodingForCharsetCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { Tcl_Encoding encoding; if (argc != 2) { Tcl_AppendResult(interp, "usage: ", argv[0], " charset", NULL); return TCL_ERROR; } encoding = Ns_GetCharsetEncoding(argv[1]); if (encoding == NULL) { return TCL_OK; } Tcl_SetResult(interp, (char*)Tcl_GetEncodingName(encoding), TCL_VOLATILE); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsGetInputEncoding -- * * Return the registered input encoding for the connection * method/url, if any. * * Results: * Pointer to Tcl_Encoding or NULL if no encoding registered. * * Side effects: * None. * *---------------------------------------------------------------------- */ Tcl_Encoding NsGetInputEncoding(Conn *connPtr) { Tcl_Encoding encoding; encoding = Ns_UrlSpecificGet(connPtr->server, connPtr->request->method, connPtr->request->url, eid); if (encoding == NULL) { encoding = connPtr->servPtr->inputEncoding; } return encoding; } /* *---------------------------------------------------------------------- * * AddCharset, AddExtension -- * * Add charsets and extensions to hash tables. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void AddExtension(char *ext, char *name) { Tcl_HashEntry *hPtr; int new; hPtr = Tcl_CreateHashEntry(&extensions, ext, &new); Tcl_SetHashValue(hPtr, name); } static void AddCharset(char *charset, char *name) { Tcl_HashEntry *hPtr; Ns_DString ds; int new; Ns_DStringInit(&ds); charset = Ns_StrToLower(Ns_DStringAppend(&ds, charset)); hPtr = Tcl_CreateHashEntry(&charsets, charset, &new); Tcl_SetHashValue(hPtr, name); Ns_DStringFree(&ds); } Tcl_Encoding NsGetOutputEncoding(Conn *connPtr) { Tcl_Encoding encoding; char *type, *charset; int len; /* * Determine the output type based on the charset for text/ * types, using the server default charset if necessary. */ encoding = NULL; type = Ns_GetMimeType(connPtr->request->url); if (type != NULL && (strncmp(type, "text/", 5) == 0)) { charset = Ns_FindCharset(type, &len); if (charset == NULL) { charset = connPtr->servPtr->defcharset; len = -1; } if (charset != NULL) { encoding = Ns_GetCharsetEncodingEx(charset, len); } } return encoding; } aolserver4-4.5.1/nsd/listen.c0000644000175000017500000001502610267035774015674 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * listen.c -- * * Listen on sockets and register callbacks for incoming * connections. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/listen.c,v 1.9 2005/07/18 23:32:12 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * This the context used by the socket callback. */ typedef struct ListenData { Ns_SockProc *proc; void *arg; } ListenData; /* * Local functions defined in this file */ static Ns_SockProc ListenProc; /* * Static variables defined in this file */ static Tcl_HashTable portsTable; /* Table of per-port data. */ static Ns_Mutex lock; /* Lock around portsTable. */ /* *---------------------------------------------------------------------- * * NsInitListen -- * * Initialize listen callback API. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitListen(void) { Ns_MutexInit(&lock); Ns_MutexSetName(&lock, "ns:listencallbacks"); Tcl_InitHashTable(&portsTable, TCL_ONE_WORD_KEYS); } /* *---------------------------------------------------------------------- * * Ns_SockListenCallback -- * * Listen on an address/port and register a callback to be run * when connections come in on it. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SockListenCallback(char *addr, int port, Ns_SockProc *proc, void *arg) { Tcl_HashTable *tablePtr = NULL; Tcl_HashEntry *hPtr; ListenData *ldPtr; SOCKET new, sock; int status; struct sockaddr_in sa; if (Ns_GetSockAddr(&sa, addr, port) != NS_OK) { return NS_ERROR; } if (addr != NULL) { /* * Make sure we can bind to the specified interface. */ sa.sin_port = 0; sock = Ns_SockBind(&sa); if (sock == INVALID_SOCKET) { return NS_ERROR; } ns_sockclose(sock); } status = NS_OK; Ns_MutexLock(&lock); /* * Update the global hash table that keeps track of which ports * we're listening on. */ hPtr = Tcl_CreateHashEntry(&portsTable, (char *) port, &new); if (new == 0) { tablePtr = Tcl_GetHashValue(hPtr); } else { sock = Ns_SockListen(NULL, port); if (sock == INVALID_SOCKET) { Tcl_DeleteHashEntry(hPtr); status = NS_ERROR; } else { Ns_SockSetNonBlocking(sock); tablePtr = ns_malloc(sizeof(Tcl_HashTable)); Tcl_InitHashTable(tablePtr, TCL_ONE_WORD_KEYS); Tcl_SetHashValue(hPtr, tablePtr); Ns_SockCallback(sock, ListenProc, tablePtr, NS_SOCK_READ | NS_SOCK_EXIT); } } if (status == NS_OK) { hPtr = Tcl_CreateHashEntry(tablePtr, (char *) sa.sin_addr.s_addr, &new); if (!new) { status = NS_ERROR; } else { ldPtr = ns_malloc(sizeof(ListenData)); ldPtr->proc = proc; ldPtr->arg = arg; Tcl_SetHashValue(hPtr, ldPtr); } } Ns_MutexUnlock(&lock); return status; } /* *---------------------------------------------------------------------- * * Ns_SockPortBound -- * * Determine if we're already listening on a given port on any * address. * * Results: * Boolean: true=yes, false=no. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SockPortBound(int port) { Tcl_HashEntry *hPtr; Ns_MutexLock(&lock); hPtr = Tcl_FindHashEntry(&portsTable, (char *) port); Ns_MutexUnlock(&lock); return (hPtr != NULL ? 1 : 0); } /* *---------------------------------------------------------------------- * * ListenProc -- * * This is a wrapper callback that runs the user's callback iff * a valid socket exists. * * Results: * NS_TRUE or NS_FALSE * * Side effects: * May close the socket if no user context can be found. * *---------------------------------------------------------------------- */ static int ListenProc(SOCKET sock, void *arg, int why) { struct sockaddr_in sa; int len; Tcl_HashTable *tablePtr; Tcl_HashEntry *hPtr; SOCKET new; ListenData *ldPtr; tablePtr = arg; if (why == NS_SOCK_EXIT) { ns_sockclose(sock); return NS_FALSE; } new = Ns_SockAccept(sock, NULL, NULL); if (new != INVALID_SOCKET) { Ns_SockSetBlocking(new); len = sizeof(sa); getsockname(new, (struct sockaddr *) &sa, &len); ldPtr = NULL; Ns_MutexLock(&lock); hPtr = Tcl_FindHashEntry(tablePtr, (char *) sa.sin_addr.s_addr); if (hPtr == NULL) { hPtr = Tcl_FindHashEntry(tablePtr, (char *) INADDR_ANY); } if (hPtr != NULL) { ldPtr = Tcl_GetHashValue(hPtr); } Ns_MutexUnlock(&lock); if (ldPtr == NULL) { ns_sockclose(new); } else { (*ldPtr->proc) (new, ldPtr->arg, why); } } return NS_TRUE; } aolserver4-4.5.1/nsd/Makefile0000644000175000017500000000471410450257153015663 0ustar frankiefrankie# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsd/Makefile,v 1.52 2006/06/27 16:35:55 jgdavidson Exp $ # INSTALL = install-init HDRS = nsd.h PGM = nsd PGMOBJS = main.o DLL = nsd DLLINIT = Ns_LibInit OBJS = adpcmds.o adpeval.o adpparse.o adprequest.o auth.o binder.o \ cache.o callbacks.o cls.o compress.o config.o conn.o connio.o \ crypt.o dns.o driver.o dsprintf.o dstring.o encoding.o exec.o \ fastpath.o fd.o filter.o form.o httptime.o index.o info.o \ init.o limits.o lisp.o listen.o log.o mimetypes.o modload.o \ nsconf.o nsmain.o nsthread.o op.o pathname.o pidfile.o pools.o \ proc.o queue.o quotehtml.o random.o request.o return.o \ rollfile.o sched.o server.o set.o sock.o sockcallback.o str.o \ task.o tclcache.o tclcmds.o tclconf.o tclenv.o tclfile.o \ tclhttp.o tclimg.o tclinit.o tcljob.o tclloop.o tclmisc.o \ tclobj.o tclrequest.o tclresp.o tclsched.o tclset.o tclshare.o \ tclsock.o tclthread.o tclvar.o tclxkeylist.o url.o \ urlencode.o urlopen.o urlspace.o uuencode.o stamp.o UNIXOBJS= unix.o WINOBJS = nswin32.o getopt.o include ../include/ns.mak install-init: $(INST) -d $(INSTBIN) init.tcl aolserver4-4.5.1/nsd/dsprintf.c0000644000175000017500000003346107525236666016240 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dsprintf.c -- * * Safe Ns_DStringVPrint(dsPtr, fmt, va_list) for flexible * format string based appending to a dstring. This code * is based on the vfprintf() function from the NetBSD sources * (see copyright below). */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/dsprintf.c,v 1.3 2002/08/10 16:22:14 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; /* $NetBSD: vfprintf.c,v 1.35 2000/12/30 04:13:25 itojun Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Chris Torek. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "nsd.h" #include #define quad_t ns_int64 #define u_quad_t ns_uint64 /* 11-bit exponent (VAX G floating point) is 308 decimal digits */ #define MAXEXP 308 /* 128 bit fraction takes up 39 decimal digits; max reasonable precision */ #define MAXFRACT 39 #define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */ /* * Macros for converting digits to letters and vice versa */ #define to_digit(c) ((c) - '0') #define is_digit(c) ((unsigned)to_digit(c) <= 9) #define to_char(n) ((char)((n) + '0')) /* * Flags used during conversion. */ #define ALT 0x001 /* alternate form */ #define HEXPREFIX 0x002 /* add 0x or 0X prefix */ #define LADJUST 0x004 /* left adjustment */ #ifndef NO_LONGDBL #define LONGDBL 0x008 /* long double */ #endif #define LONGINT 0x010 /* long integer */ #define QUADINT 0x020 /* quad integer */ #define SHORTINT 0x040 /* short integer */ #define ZEROPAD 0x080 /* zero (as opposed to blank) pad */ char * Ns_DStringVPrintf(Tcl_DString *dsPtr, char *fmt0, va_list ap) { CONST char *fmt;/* format string */ int ch; /* character from fmt */ int n; /* handy integers (short term usage) */ CONST char *cp; /* handy char pointer (short term usage) */ char *bp; /* handy char pointer (short term usage) */ int flags; /* flags as above */ int width; /* width from format (%8d), or 0 */ int prec; /* precision from format (%.3d), or -1 */ char sign; /* sign prefix (' ', '+', '-', or \0) */ double _double = 0; /* double precision arguments %[eEfgG] */ u_quad_t _uquad; /* integer arguments %[diouxX] */ enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */ int dprec; /* a copy of prec if [diouxX], 0 otherwise */ int realsz; /* field size expanded by dprec */ int size; /* size of converted field or string */ char *xdigs = NULL; /* digits for [xX] conversion */ char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ char ox[2]; /* space for 0x hex-prefix */ int slen, len; /* saved and current output length */ CONST char *tfmt; /* tmp fmt for float sprintf */ Tcl_DString tfmtds; /* dstring for tmp fmt copy */ #define PRINT(ptr, len) Tcl_DStringAppend(dsPtr, (ptr), (len)) #define PAD(howmany, with) { \ if ((n = (howmany)) > 0) { \ len = dsPtr->length; \ Tcl_DStringSetLength(dsPtr, len + n); \ for (bp = dsPtr->string + len; n > 0; --n) *bp++ = (with);\ }\ } /* * To extend shorts properly, we need both signed and unsigned * argument extraction methods. */ #define SARG() \ (flags&QUADINT ? va_arg(ap, quad_t) : \ flags&LONGINT ? va_arg(ap, long) : \ flags&SHORTINT ? (long)(short)va_arg(ap, int) : \ (long)va_arg(ap, int)) #define UARG() \ (flags&QUADINT ? va_arg(ap, u_quad_t) : \ flags&LONGINT ? va_arg(ap, u_long) : \ flags&SHORTINT ? (u_long)(u_short)va_arg(ap, int) : \ (u_long)va_arg(ap, u_int)) Tcl_DStringInit(&tfmtds); fmt = fmt0; slen = dsPtr->length; /* * Scan the format for conversions (`%' character). */ for (;;) { for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++) /* void */; if ((n = fmt - cp) != 0) { PRINT(cp, n); } if (ch == '\0') goto done; tfmt = fmt; /* save fmt start point */ fmt++; /* skip over '%' */ flags = 0; dprec = 0; width = 0; prec = -1; sign = '\0'; rflag: ch = *fmt++; reswitch: switch (ch) { case ' ': /* * ``If the space and + flags both appear, the space * flag will be ignored.'' * -- ANSI X3J11 */ if (!sign) sign = ' '; goto rflag; case '#': flags |= ALT; goto rflag; case '*': /* * ``A negative field width argument is taken as a * - flag followed by a positive field width.'' * -- ANSI X3J11 * They don't exclude field widths read from args. */ if ((width = va_arg(ap, int)) >= 0) goto rflag; width = -width; /* FALLTHROUGH */ case '-': flags |= LADJUST; goto rflag; case '+': sign = '+'; goto rflag; case '.': if ((ch = *fmt++) == '*') { n = va_arg(ap, int); prec = n < 0 ? -1 : n; goto rflag; } n = 0; while (is_digit(ch)) { n = 10 * n + to_digit(ch); ch = *fmt++; } prec = n < 0 ? -1 : n; goto reswitch; case '0': /* * ``Note that 0 is taken as a flag, not as the * beginning of a field width.'' * -- ANSI X3J11 */ flags |= ZEROPAD; goto rflag; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': n = 0; do { n = 10 * n + to_digit(ch); ch = *fmt++; } while (is_digit(ch)); width = n; goto reswitch; #ifdef LONGDBL case 'L': flags |= LONGDBL; goto rflag; #endif case 'h': flags |= SHORTINT; goto rflag; case 'l': if (*fmt == 'l') { fmt++; flags |= QUADINT; } else { flags |= LONGINT; } goto rflag; case 'q': flags |= QUADINT; goto rflag; case 'c': *buf = va_arg(ap, int); cp = buf; size = 1; sign = '\0'; break; case 'D': flags |= LONGINT; /*FALLTHROUGH*/ case 'd': case 'i': _uquad = SARG(); if ((quad_t)_uquad < 0) { _uquad = -_uquad; sign = '-'; } base = DEC; goto number; case 'e': case 'E': case 'f': case 'g': case 'G': /* use sprintf for complicated float/double print. */ #ifndef LONGDBL _double = va_arg(ap, double); #else if (flags & LONGDBL) { _double = (double) va_arg(ap, long double); } else { _double = va_arg(ap, double); } #endif tfmt = Tcl_DStringAppend(&tfmtds, tfmt, fmt - tfmt); n = width; if (n < BUF) { n = sprintf(buf, tfmt, _double); PRINT(buf, n); } else { len = dsPtr->length; Tcl_DStringSetLength(dsPtr, len + n); sprintf(dsPtr->string + len, tfmt, _double); Tcl_DStringSetLength(dsPtr, len + n); } Tcl_DStringSetLength(&tfmtds, 0); continue; case 'n': n = dsPtr->length - slen; if (flags & QUADINT) *va_arg(ap, quad_t *) = n; else if (flags & LONGINT) *va_arg(ap, long *) = n; else if (flags & SHORTINT) *va_arg(ap, short *) = n; else *va_arg(ap, int *) = n; continue; /* no output */ case 'O': flags |= LONGINT; /*FALLTHROUGH*/ case 'o': _uquad = UARG(); base = OCT; goto nosign; case 'p': /* * ``The argument shall be a pointer to void. The * value of the pointer is converted to a sequence * of printable characters, in an implementation- * defined manner.'' * -- ANSI X3J11 */ /* NOSTRICT */ _uquad = (u_long)va_arg(ap, void *); base = HEX; xdigs = "0123456789abcdef"; flags |= HEXPREFIX; ch = 'x'; goto nosign; case 's': if ((cp = va_arg(ap, char *)) == NULL) cp = "(null)"; if (prec >= 0) { /* * can't use strlen; can only look for the * NUL in the first `prec' characters, and * strlen() will go further. */ char *p = memchr(cp, 0, (size_t)prec); if (p != NULL) { size = p - cp; if (size > prec) size = prec; } else size = prec; } else size = strlen(cp); sign = '\0'; break; case 'U': flags |= LONGINT; /*FALLTHROUGH*/ case 'u': _uquad = UARG(); base = DEC; goto nosign; case 'X': xdigs = "0123456789ABCDEF"; goto hex; case 'x': xdigs = "0123456789abcdef"; hex: _uquad = UARG(); base = HEX; /* leading 0x/X only if non-zero */ if (flags & ALT && _uquad != 0) flags |= HEXPREFIX; /* unsigned conversions */ nosign: sign = '\0'; /* * ``... diouXx conversions ... if a precision is * specified, the 0 flag will be ignored.'' * -- ANSI X3J11 */ number: if ((dprec = prec) >= 0) flags &= ~ZEROPAD; /* * ``The result of converting a zero value with an * explicit precision of zero is no characters.'' * -- ANSI X3J11 */ bp = buf + BUF; if (_uquad != 0 || prec != 0) { /* * Unsigned mod is hard, and unsigned mod * by a constant is easier than that by * a variable; hence this switch. */ switch (base) { case OCT: do { *--bp = to_char(_uquad & 7); _uquad >>= 3; } while (_uquad); /* handle octal leading 0 */ if (flags & ALT && *bp != '0') *--bp = '0'; break; case DEC: /* many numbers are 1 digit */ while (_uquad >= 10) { *--bp = to_char(_uquad % 10); _uquad /= 10; } *--bp = to_char(_uquad); break; case HEX: do { *--bp = xdigs[(size_t) (_uquad & 15)]; _uquad >>= 4; } while (_uquad); break; default: cp = "bug in vfprintf: bad base"; size = strlen(cp); goto skipsize; } } cp = bp; size = buf + BUF - bp; skipsize: break; default: /* "%?" prints ?, unless ? is NUL */ if (ch == '\0') goto done; /* pretend it was %c with argument ch */ *buf = ch; cp = buf; size = 1; sign = '\0'; break; } /* * All reasonable formats wind up here. At this point, `cp' * points to a string which (if not flags&LADJUST) should be * padded out to `width' places. If flags&ZEROPAD, it should * first be prefixed by any sign or other prefix; otherwise, * it should be blank padded before the prefix is emitted. * After any left-hand padding and prefixing, emit zeroes * required by a decimal [diouxX] precision, then print the * string proper, then emit zeroes required by any leftover * floating precision; finally, if LADJUST, pad with blanks. * * Compute actual size, so we know how much to pad. * size excludes decimal prec; realsz includes it. */ realsz = dprec > size ? dprec : size; if (sign) realsz++; else if (flags & HEXPREFIX) realsz+= 2; /* right-adjusting blank padding */ if ((flags & (LADJUST|ZEROPAD)) == 0) PAD(width - realsz, ' '); /* prefix */ if (sign) { PRINT(&sign, 1); } else if (flags & HEXPREFIX) { ox[0] = '0'; ox[1] = ch; PRINT(ox, 2); } /* right-adjusting zero padding */ if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) PAD(width - realsz, '0'); /* leading zeroes from decimal precision */ PAD(dprec - size, '0'); /* the string or number proper */ PRINT(cp, size); /* left-adjusting padding (always blank) */ if (flags & LADJUST) PAD(width - realsz, ' '); } done: Tcl_DStringFree(&tfmtds); return (dsPtr->string); } aolserver4-4.5.1/nsd/crypt.c0000644000175000017500000002724307257755564015556 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/crypt.c,v 1.4 2001/03/27 00:14:44 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * This program implements the Proposed Federal Information Processing Data * Encryption Standard. See Federal Register, March 17, 1975 (40FR12134) */ /* * Initial permutation, */ static const char IP[] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7, }; /* * Final permutation, FP = IP^(-1) */ static const char FP[] = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25, }; /* * Permuted-choice 1 from the key bits to yield C and D. Note that bits * 8,16... are left out: They are intended for a parity check. */ static const char PC1_C[] = { 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, }; static const char PC1_D[] = { 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4, }; /* * Sequence of shifts used for the key schedule. */ static const char shifts[] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, }; /* * Permuted-choice 2, to pick out the bits from the CD array that generate * the key schedule. */ static const char PC2_C[] = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, }; static const char PC2_D[] = { 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32, }; /* * The following structure maitains the key schedule. */ struct sched { /* * The C and D arrays used to calculate the key schedule. */ char C[28]; char D[28]; /* * The key schedule. Generated from the key. */ char KS[16][48]; /* * The E bit-selection table. */ char E[48]; }; static const char e[] = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 1, }; /* * Set up the key schedule from the key. */ static void setkey_private(struct sched *sp, const char *key) { register int i, j, k; int t; /* * First, generate C and D by permuting the key. The low order bit of * each 8-bit char is not used, so C and D are only 28 bits apiece. */ for (i = 0; i < 28; i++) { sp->C[i] = key[PC1_C[i] - 1]; sp->D[i] = key[PC1_D[i] - 1]; } /* * To generate Ki, rotate C and D according to schedule and pick up a * permutation using PC2. */ for (i = 0; i < 16; i++) { /* * rotate. */ for (k = 0; k < shifts[i]; k++) { t = sp->C[0]; for (j = 0; j < 28 - 1; j++) sp->C[j] = sp->C[j + 1]; sp->C[27] = t; t = sp->D[0]; for (j = 0; j < 28 - 1; j++) sp->D[j] = sp->D[j + 1]; sp->D[27] = t; } /* * get Ki. Note C and D are concatenated. */ for (j = 0; j < 24; j++) { sp->KS[i][j] = sp->C[PC2_C[j] - 1]; sp->KS[i][j + 24] = sp->D[PC2_D[j] - 28 - 1]; } } for (i = 0; i < 48; i++) sp->E[i] = e[i]; } /* * The 8 selection functions. For some reason, they give a 0-origin index, * unlike everything else. */ static const char S[8][64] = { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 }, { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 }, { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 }, { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 }, { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 }, { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 }, { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 }, { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 }, }; /* * P is a permutation on the selected combination of the current L and key. */ static const char P[] = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25, }; /* * The payoff: encrypt a block. */ static void encrypt_private(struct sched *sp, char *block, int edflag) { /* * The current block, divided into 2 halves. */ char L[64], *R = L + 32; char tempL[32]; char f[32]; /* * The combination of the key and the input, before selection. */ char preS[48]; int i, ii; register int t, j, k; /* * First, permute the bits in the input */ for (j = 0; j < 64; j++) L[j] = block[IP[j] - 1]; /* * Perform an encryption operation 16 times. */ for (ii = 0; ii < 16; ii++) { /* * Set direction */ if (edflag) i = 15 - ii; else i = ii; /* * Save the R array, which will be the new L. */ for (j = 0; j < 32; j++) tempL[j] = R[j]; /* * Expand R to 48 bits using the E selector; exclusive-or with the * current key bits. */ for (j = 0; j < 48; j++) preS[j] = R[sp->E[j] - 1] ^ sp->KS[i][j]; /* * The pre-select bits are now considered in 8 groups of 6 bits each. * The 8 selection functions map these 6-bit quantities into 4-bit * quantities and the results permuted to make an f(R, K). The * indexing into the selection functions is peculiar; it could be * simplified by rewriting the tables. */ for (j = 0; j < 8; j++) { t = 6 * j; k = S[j][(preS[t + 0] << 5) + (preS[t + 1] << 3) + (preS[t + 2] << 2) + (preS[t + 3] << 1) + (preS[t + 4] << 0) + (preS[t + 5] << 4)]; t = 4 * j; f[t + 0] = (k >> 3) & 01; f[t + 1] = (k >> 2) & 01; f[t + 2] = (k >> 1) & 01; f[t + 3] = (k >> 0) & 01; } /* * The new R is L ^ f(R, K). The f here has to be permuted first, * though. */ for (j = 0; j < 32; j++) R[j] = L[j] ^ f[P[j] - 1]; /* * Finally, the new L (the original R) is copied back. */ for (j = 0; j < 32; j++) L[j] = tempL[j]; } /* * The output L and R are reversed. */ for (j = 0; j < 32; j++) { t = L[j]; L[j] = R[j]; R[j] = t; } /* * The final output gets the inverse permutation of the very original. */ for (j = 0; j < 64; j++) block[j] = L[FP[j] - 1]; } char * Ns_Encrypt(pw, salt, iobuf) char *pw; char *salt; char iobuf[]; { register int i, j, c; int temp; char block[66]; struct sched s; for (i = 0; i < 66; i++) block[i] = 0; for (i = 0; (c = *pw) && i < 64; pw++) { for (j = 0; j < 7; j++, i++) block[i] = (c >> (6 - j)) & 01; i++; } setkey_private(&s, block); for (i = 0; i < 66; i++) block[i] = 0; for (i = 0; i < 2; i++) { c = *salt++; iobuf[i] = c; if (c > 'Z') c -= 6; if (c > '9') c -= 7; c -= '.'; for (j = 0; j < 6; j++) { if ((c >> j) & 01) { temp = s.E[6 * i + j]; s.E[6 * i + j] = s.E[6 * i + j + 24]; s.E[6 * i + j + 24] = temp; } } } for (i = 0; i < 25; i++) encrypt_private(&s, block, 0); for (i = 0; i < 11; i++) { c = 0; for (j = 0; j < 6; j++) { c <<= 1; c |= block[6 * i + j]; } c += '.'; if (c > '9') c += 7; if (c > 'Z') c += 6; iobuf[i + 2] = c; } iobuf[i + 2] = 0; if (iobuf[1] == 0) iobuf[1] = iobuf[0]; return (iobuf); } aolserver4-4.5.1/nsd/cls.c0000644000175000017500000001064307253447115015154 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * cls.c -- * * Connection local storage. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/cls.c,v 1.1 2001/03/13 16:43:57 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * Static functions defined in this file. */ static Ns_Callback *cleanupProcs[NS_CONN_MAXCLS]; static void **GetSlot(Ns_Cls *clsPtr, Ns_Conn *conn); /* *---------------------------------------------------------------------- * * Ns_ClsAlloc -- * * Allocate the next cls id. * * Results: * None. * * Side effects: * Id is set in given clsPtr. * *---------------------------------------------------------------------- */ void Ns_ClsAlloc(Ns_Cls *clsPtr, Ns_Callback *cleanup) { static int nextId = 1; int id; Ns_MasterLock(); if (nextId == NS_CONN_MAXCLS) { Ns_Fatal("Ns_ClsAlloc: exceded max cls: %d", NS_CONN_MAXCLS); } id = nextId++; cleanupProcs[id] = cleanup; Ns_MasterUnlock(); *clsPtr = (void *) id; } /* *---------------------------------------------------------------------- * * Ns_ClsSet -- * * Set the value for a threads cls slot. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ClsSet(Ns_Cls *clsPtr, Ns_Conn *conn, void *value) { void **slotPtr; slotPtr = GetSlot(clsPtr, conn); *slotPtr = value; } /* *---------------------------------------------------------------------- * * Ns_ClsGet -- * * Get this thread's value in a cls slot. * * Results: * Pointer in slot. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * Ns_ClsGet(Ns_Cls *clsPtr, Ns_Conn *conn) { void **slotPtr; slotPtr = GetSlot(clsPtr, conn); return *slotPtr; } /* *---------------------------------------------------------------------- * * NsClsCleanup -- * * Cleanup connection local storage in a manner similar to * thread local storage. * * Results: * None. * * Side effects: * Depends on callbacks. * *---------------------------------------------------------------------- */ void NsClsCleanup(Conn *connPtr) { int i, trys, retry; void *arg; trys = 0; do { retry = 0; i = NS_CONN_MAXCLS; while (i-- > 0) { if (cleanupProcs[i] != NULL && connPtr->cls[i] != NULL) { arg = connPtr->cls[i]; connPtr->cls[i] = NULL; (*cleanupProcs[i])(arg); retry = 1; } } } while (retry && trys++ < 5); } /* *---------------------------------------------------------------------- * * GetSlot -- * * Return the cls slot for the given key. * * Results: * Pointer to slot. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void ** GetSlot(Ns_Cls *clsPtr, Ns_Conn *conn) { Conn *connPtr = (Conn *) conn; int idx = (int) *clsPtr; if (idx < 1 || idx >= NS_CONN_MAXCLS) { Ns_Fatal("Ns_Cls: invalid key: %d: must be between 1 and %d", idx, NS_CONN_MAXCLS); } return &connPtr->cls[idx]; } aolserver4-4.5.1/nsd/dns.c0000644000175000017500000002723410323466133015154 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dns.c -- * * DNS lookup routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/dns.c,v 1.16 2005/10/13 14:16:59 shmooved Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #ifndef INADDR_NONE #define INADDR_NONE (-1) #endif #ifndef NETDB_INTERNAL # ifdef h_NETDB_INTERNAL # define NETDB_INTERNAL h_NETDB_INTERNAL # endif #endif #ifdef NEED_HERRNO extern int h_errno; #endif /* * The following structure maintains a cached lookup value. */ typedef struct Value { time_t expires; char value[1]; } Value; typedef int (GetProc)(Ns_DString *dsPtr, char *key); /* * Static variables defined in this file */ static Ns_Cache *hostCache; static Ns_Cache *addrCache; static Ns_Mutex lock; static int cachetimeout; /* * Static functions defined in this file */ static GetProc GetAddr; static GetProc GetHost; static int DnsGet(GetProc *getProc, Ns_DString *dsPtr, Ns_Cache **cachePtr, char *key, int all); #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETNAMEINFO) static void DnsLogError(char *func, int h_errnop); #endif /* *---------------------------------------------------------------------- * Ns_GetHostByAddr, Ns_GetAddrByHost -- * * Convert an IP address to a hostname or vice versa. * * Results: * See DnsGet(). * * Side effects: * A new entry is entered into the hash table. * *---------------------------------------------------------------------- */ int Ns_GetHostByAddr(Ns_DString *dsPtr, char *addr) { return DnsGet(GetHost, dsPtr, &hostCache, addr, 0); } int Ns_GetAddrByHost(Ns_DString *dsPtr, char *host) { return DnsGet(GetAddr, dsPtr, &addrCache, host, 0); } int Ns_GetAllAddrByHost(Ns_DString *dsPtr, char *host) { return DnsGet(GetAddr, dsPtr, &addrCache, host, 1); } static int DnsGet(GetProc *getProc, Ns_DString *dsPtr, Ns_Cache **cachePtr, char *key, int all) { int status = NS_FALSE, new, timeout; Value *vPtr = NULL; Ns_Entry *ePtr = NULL; Ns_Cache *cache = NULL; time_t now; /* * Get the cache, if enabled. */ Ns_MutexLock(&lock); cache = *cachePtr; timeout = cachetimeout; Ns_MutexUnlock(&lock); /* * Call getProc directly or through cache. */ if (cache == NULL) { status = (*getProc)(dsPtr, key); } else { time(&now); Ns_CacheLock(cache); ePtr = Ns_CacheCreateEntry(cache, key, &new); if (!new) { while (ePtr != NULL && (vPtr = Ns_CacheGetValue(ePtr)) == NULL) { Ns_CacheWait(cache); ePtr = Ns_CacheFindEntry(cache, key); } if (ePtr == NULL) { status = NS_FALSE; } else if (vPtr->expires < now) { Ns_CacheUnsetValue(ePtr); new = 1; } else { Ns_DStringAppend(dsPtr, vPtr->value); status = NS_TRUE; } } if (new) { Ns_CacheUnlock(cache); status = (*getProc)(dsPtr, key); Ns_CacheLock(cache); ePtr = Ns_CacheCreateEntry(cache, key, &new); if (status != NS_TRUE) { Ns_CacheFlushEntry(ePtr); } else { Ns_CacheUnsetValue(ePtr); vPtr = ns_malloc(sizeof(Value) + dsPtr->length); vPtr->expires = now + timeout; strcpy(vPtr->value, dsPtr->string); Ns_CacheSetValueSz(ePtr, vPtr, 1); } Ns_CacheBroadcast(cache); } Ns_CacheUnlock(cache); } if (status == NS_TRUE && getProc == GetAddr && !all) { char *p = dsPtr->string; while (*p && !isspace(UCHAR(*p))) { ++p; } Tcl_DStringSetLength(dsPtr, p - dsPtr->string); } return status; } /* *---------------------------------------------------------------------- * NsEnableDNSCache -- * * Enable DNS results caching. * * Results: * None. * * Side effects: * Futher DNS lookups will be cached up to given timeout. * *---------------------------------------------------------------------- */ void NsEnableDNSCache(void) { int max, timeout; Ns_MutexSetName(&lock, "ns:dns"); if (NsParamBool("dnscache", 1)) { max = NsParamInt("dnscachemaxentries", 100); timeout = NsParamInt("dnscachetimeout", 60); if (max > 0 && timeout > 0) { timeout *= 60; /* NB: Config minutes, seconds internally. */ Ns_MutexLock(&lock); cachetimeout = timeout; hostCache = Ns_CacheCreateSz("ns:dnshost", TCL_STRING_KEYS, (size_t) max, ns_free); addrCache = Ns_CacheCreateSz("ns:dnsaddr", TCL_STRING_KEYS, (size_t) max, ns_free); Ns_MutexUnlock(&lock); } } } /* *---------------------------------------------------------------------- * GetHost, GetAddr -- * * Perform the actual lookup by host or address. * * NOTE: A critical section is used instead of a mutex * to ensure waiting on a condition and not mutex spin waiting. * * Results: * If a name can be found, the function returns NS_TRUE; otherwise, * it returns NS_FALSE. * * Side effects: * Result is appended to dsPtr. * *---------------------------------------------------------------------- */ static int GetHost(Ns_DString *dsPtr, char *addr) { #if defined(HAVE_GETNAMEINFO) char buf[NI_MAXHOST]; int err; #elif defined(HAVE_GETHOSTBYADDR_R) struct hostent he, *hp; char buf[2048]; int err; #else struct hostent *hp; static Ns_Cs cs; #endif struct sockaddr_in sa; char *host; host = NULL; sa.sin_family = AF_INET; sa.sin_addr.s_addr = inet_addr(addr); if (sa.sin_addr.s_addr == INADDR_NONE) { return NS_FALSE; } #if defined(HAVE_GETNAMEINFO) err = getnameinfo((const struct sockaddr *) &sa, sizeof(struct sockaddr_in), buf, sizeof(buf), NULL, 0, NI_NAMEREQD); if (err != 0) { Ns_Log(Error, "dns: getnameinfo failed: %s", gai_strerror(err)); } else { host = buf; } #elif defined(HAVE_GETHOSTBYADDR_R) hp = gethostbyaddr_r((char *) &sa.sin_addr, sizeof(struct in_addr), AF_INET, &he, buf, sizeof(buf), &err); if (hp == NULL) { DnsLogError("gethostbyaddr_r", err); } else { host = he.h_name; } #else /* * This version is not thread-safe, but we have no thread-safe * alternative on this platform. Use critsec to try and serialize * calls, but beware: Tcl core as of 8.4.6 still calls gethostbyaddr() * as well, so it's still possible for two threads to call it at * the same time. */ Ns_CsEnter(&cs); hp = gethostbyaddr((char *) &sa.sin_addr, sizeof(struct in_addr), AF_INET); if (hp == NULL) { DnsLogError("gethostbyaddr", h_errno); } else { host = hp->h_name; } Ns_CsLeave(&cs); #endif if (host == NULL) { return NS_FALSE; } Ns_DStringAppend(dsPtr, host); return NS_TRUE; } #if defined(HAVE_GETADDRINFO) static int GetAddr(Ns_DString *dsPtr, char *host) { struct addrinfo hints; struct addrinfo *res, *ptr; int result; int status = NS_FALSE; memset(&hints, 0, sizeof(hints)); hints.ai_family = PF_INET; hints.ai_socktype = SOCK_STREAM; if ((result = getaddrinfo(host, NULL, &hints, &res)) != 0) { Ns_Log(Error, "dns: getaddrinfo failed for %s: %s", host, gai_strerror(result)); } else { ptr = res; while (ptr != NULL) { Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa( ((struct sockaddr_in *) ptr->ai_addr)->sin_addr)); ptr = ptr->ai_next; } freeaddrinfo(res); status = NS_TRUE; } return status; } #elif defined(HAVE_GETHOSTBYNAME_R) static int GetAddr(Ns_DString *dsPtr, char *host) { struct hostent he, *res; struct in_addr ia, *ptr; #ifdef HAVE_GETHOSTBYNAME_R_3 struct hostent_data data; #endif char buf[2048]; int result; int i = 0; int h_errnop; int status = NS_FALSE; #if defined(HAVE_GETHOSTBYNAME_R_6) result = gethostbyname_r(host, &he, buf, sizeof(buf), &res, &h_errnop); #elif defined(HAVE_GETHOSTBYNAME_R_5) result = 0; res = gethostbyname_r(host, &he, buf, sizeof(buf), &h_errnop); if (res == NULL) { result = -1; } #elif defined(HAVE_GETHOSTBYNAME_R_3) result = gethostbyname_r(host, &he, &data); h_errnop = h_errno; #endif if (result != 0) { DnsLogError("gethostbyname_r", h_errnop); } else { while ((ptr = (struct in_addr *) he.h_addr_list[i++]) != NULL) { ia.s_addr = ptr->s_addr; Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa(ia)); status = NS_TRUE; } } return status; } #else /* * This version is not thread-safe, but we have no thread-safe * alternative on this platform. Use critsec to try and serialize * calls, but beware: Tcl core as of 8.4.6 still calls gethostbyname() * as well, so it's still possible for two threads to call it at * the same time. */ static int GetAddr(Ns_DString *dsPtr, char *host) { struct hostent *he; struct in_addr ia, *ptr; static Ns_Cs cs; int i = 0; int status = NS_FALSE; Ns_CsEnter(&cs); he = gethostbyname(host); if (he == NULL) { DnsLogError("gethostbyname", h_errno); } else { while ((ptr = (struct in_addr *) he.h_addr_list[i++]) != NULL) { ia.s_addr = ptr->s_addr; Tcl_DStringAppendElement(dsPtr, ns_inet_ntoa(ia)); status = NS_TRUE; } } Ns_CsLeave(&cs); return status; } #endif /* *---------------------------------------------------------------------- * DnsLogError - * * Log errors which may indicate a failure in the underlying * resolver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ #if !defined(HAVE_GETADDRINFO) && !defined(HAVE_GETNAMEINFO) static void DnsLogError(char *func, int h_errnop) { char *h, *e, buf[20]; e = NULL; switch (h_errnop) { case HOST_NOT_FOUND: /* Log nothing. */ return; break; case TRY_AGAIN: h = "temporary error - try again"; break; case NO_RECOVERY: h = "unexpected server failure"; break; case NO_DATA: h = "no valid IP address"; break; #ifdef NETDB_INTERNAL case NETDB_INTERNAL: h = "netdb internal error: "; e = strerror(errno); break; #endif default: sprintf(buf, "unknown error #%d", h_errnop); h = buf; } Ns_Log(Error, "dns: %s failed: %s%s", func, h, e ? e : ""); } #endif aolserver4-4.5.1/nsd/log.c0000644000175000017500000005007710302714013015140 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * log.c -- * * Manage the server log file. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/log.c,v 1.32 2005/08/23 21:41:31 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * The following define available flags bits. */ #define LOG_ROLL 1 #define LOG_EXPAND 2 #define LOG_DEBUG 4 #define LOG_DEV 8 #define LOG_NONOTICE 16 #define LOG_USEC 32 /* * The following struct maintains per-thread * cached formatted time strings and log buffers. */ typedef struct LogCache { int hold; int count; time_t gtime; time_t ltime; char gbuf[100]; char lbuf[100]; Ns_DString buffer; } LogCache; /* * Local functions defined in this file */ static int LogReOpen(void); static void Log(Ns_LogSeverity severity, char *fmt, va_list ap); static LogCache *LogGetCache(void); static Ns_TlsCleanup LogFreeCache; static void LogFlush(LogCache *cachePtr); static char *LogTime(LogCache *cachePtr, int gmtoff, long *usecPtr); static int LogStart(LogCache *cachePtr, Ns_LogSeverity severity); static void LogEnd(LogCache *cachePtr); /* * Static variables defined in this file */ static Ns_Tls tls; static Ns_Mutex lock; static Ns_LogFlushProc *flushProcPtr; static Ns_LogProc *nslogProcPtr; static char *file; static int flags; static int maxback; static int maxlevel; static int maxbuffer;; /* *---------------------------------------------------------------------- * * NsInitLog -- * * Initialize the log API and TLS slot. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitLog(void) { Ns_MutexSetName(&lock, "ns:log"); Ns_TlsAlloc(&tls, LogFreeCache); } /* *---------------------------------------------------------------------- * * NsLogConf -- * * Config the logging interface. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsLogConf(void) { if (NsParamBool("logusec", 0)) { flags |= LOG_USEC; } if (NsParamBool("logroll", 1)) { flags |= LOG_ROLL; } if (NsParamBool("logexpanded", 0)) { flags |= LOG_EXPAND; } if (NsParamBool("debug", 0)) { flags |= LOG_DEBUG; } if (NsParamBool("logdebug", 0)) { flags |= LOG_DEBUG; } if (NsParamBool("logdev", 0)) { flags |= LOG_DEV; } if (!NsParamBool("lognotice", 1)) { flags |= LOG_NONOTICE; } maxback = NsParamBool("logmaxbackup", 10); maxlevel = NsParamBool("logmaxlevel", INT_MAX); maxbuffer = NsParamBool("logmaxbuffer", 10); file = NsParamString("serverlog", "server.log"); if (!Ns_PathIsAbsolute(file)) { Ns_DString ds; Ns_DStringInit(&ds); Ns_HomePath(&ds, "log", file, NULL); file = Ns_DStringExport(&ds); } } /* *---------------------------------------------------------------------- * * Ns_InfoErrorLog -- * * Returns the filename of the log file. * * Results: * Log file name or NULL if none. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_InfoErrorLog(void) { return file; } /* *---------------------------------------------------------------------- * * Ns_LogRoll -- * * Signal handler for SIG_HUP which will roll the files. Also a * tasty snack from Stuckey's. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will rename the log file and reopen it. * *---------------------------------------------------------------------- */ int Ns_LogRoll(void) { if (file != NULL) { if (access(file, F_OK) == 0) { Ns_RollFile(file, maxback); } Ns_Log(Notice, "log: re-opening log file '%s'", file); if (LogReOpen() != NS_OK) { return NS_ERROR; } } return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_Log -- * * Spit a message out to the server log. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_Log(Ns_LogSeverity severity, char *fmt, ...) { va_list ap; va_start(ap, fmt); Log(severity, fmt, ap); va_end(ap); } /* NB: For binary compatibility with previous releases. */ void ns_serverLog(Ns_LogSeverity severity, char *fmt, va_list *vaPtr) { Log(severity, fmt, *vaPtr); } /* *---------------------------------------------------------------------- * * Ns_Fatal -- * * Spit a message out to the server log with severity level of * Fatal, and then terminate the nsd process. * * Results: * None. * * Side effects: * WILL CAUSE AOLSERVER TO EXIT! * *---------------------------------------------------------------------- */ void Ns_Fatal(char *fmt, ...) { va_list ap; va_start(ap, fmt); Log(Fatal, fmt, ap); va_end(ap); if (nsconf.debug) { abort(); } _exit(1); } /* *---------------------------------------------------------------------- * * Ns_LogTime2, Ns_LogTime -- * * Copy a local or GMT date and time string useful for common log * format enties (e.g., nslog). * * Results: * Pointer to given buffer. * * Side effects: * Will put data into timeBuf, which must be at least 41 bytes * long. * *---------------------------------------------------------------------- */ char * Ns_LogTime2(char *timeBuf, int gmt) { strcpy(timeBuf, LogTime(LogGetCache(), gmt, NULL)); return timeBuf; } char * Ns_LogTime(char *timeBuf) { return Ns_LogTime2(timeBuf, 1); } /* *---------------------------------------------------------------------- * * NsLogOpen -- * * Open the log file. Adjust configurable parameters, too. * * Results: * None. * * Side effects: * Configures this module to use the newly opened log file. * If LogRoll is turned on in the config file, then it registers * a signal callback. * *---------------------------------------------------------------------- */ void NsLogOpen(void) { /* * Open the log and schedule the signal roll. */ if (LogReOpen() != NS_OK) { Ns_Fatal("log: failed to open server log '%s': '%s'", file, strerror(errno)); } if (flags & LOG_ROLL) { Ns_RegisterAtSignal((Ns_Callback *) Ns_LogRoll, NULL); } } /* *---------------------------------------------------------------------- * * NsTclLogRollObjCmd -- * * Implements ns_logroll as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclLogRollObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { if (Ns_LogRoll() != NS_OK) { Tcl_SetResult(interp, "could not roll server log", TCL_STATIC); } return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclLogCtlObjCmd -- * * Implements ns_logctl command to manage log buffering * and release. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclLogCtlObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int len; LogCache *cachePtr; static CONST char *opts[] = { "hold", "count", "get", "peek", "flush", "release", "truncate", NULL }; enum { CHoldIdx, CCountIdx, CGetIdx, CPeekIdx, CFlushIdx, CReleaseIdx, CTruncIdx } _nsmayalias opt; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, (int *) &opt) != TCL_OK) { return TCL_ERROR; } cachePtr = LogGetCache(); switch (opt) { case CHoldIdx: cachePtr->hold = 1; break; case CPeekIdx: Tcl_SetResult(interp, cachePtr->buffer.string, TCL_VOLATILE); break; case CGetIdx: Tcl_SetResult(interp, cachePtr->buffer.string, TCL_VOLATILE); Ns_DStringFree(&cachePtr->buffer); cachePtr->count = 0; break; case CReleaseIdx: cachePtr->hold = 0; /* FALLTHROUGH */ case CFlushIdx: LogFlush(cachePtr); cachePtr->count = 0; break; case CCountIdx: Tcl_SetIntObj(Tcl_GetObjResult(interp), cachePtr->count); break; case CTruncIdx: len = 0; if (objc > 2 && Tcl_GetIntFromObj(interp, objv[2], &len) != TCL_OK) { return TCL_ERROR; } Ns_DStringTrunc(&cachePtr->buffer, len); break; } return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclLogObjCmd -- * * Implements ns_log as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclLogObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Ns_LogSeverity severity; LogCache *cachePtr; char *severitystr; int i; Ns_DString ds; if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "severity string ?string ...?"); return TCL_ERROR; } severitystr = Tcl_GetString(objv[1]); cachePtr = LogGetCache(); if (STRIEQ(severitystr, "notice")) { severity = Notice; } else if (STRIEQ(severitystr, "warning")) { severity = Warning; } else if (STRIEQ(severitystr, "error")) { severity = Error; } else if (STRIEQ(severitystr, "fatal")) { severity = Fatal; } else if (STRIEQ(severitystr, "bug")) { severity = Bug; } else if (STRIEQ(severitystr, "debug")) { severity = Debug; } else if (STRIEQ(severitystr, "dev")) { severity = Dev; } else if (Tcl_GetIntFromObj(NULL, objv[1], &i) == TCL_OK) { severity = i; } else { Tcl_AppendResult(interp, "unknown severity: \"", severitystr, "\": should be notice, warning, error, " "fatal, bug, debug, dev, or integer value", NULL); return TCL_ERROR; } Ns_DStringInit(&ds); for (i = 2; i < objc; ++i) { Ns_DStringVarAppend(&ds, Tcl_GetString(objv[i]), i < (objc-1) ? " " : NULL, NULL); } Ns_Log(severity, "%s", ds.string); Ns_DStringFree(&ds); return TCL_OK; } /* *---------------------------------------------------------------------- * * Log -- * * Add an entry to the log file if the severity is not surpressed. * Or call a custom log procedure and let that worry about the * severity. * * Results: * None. * * Side effects: * May write immediately or later through buffer. * *---------------------------------------------------------------------- */ static void Log(Ns_LogSeverity severity, char *fmt, va_list ap) { LogCache *cachePtr; cachePtr = LogGetCache(); if (nslogProcPtr == NULL) { if (LogStart(cachePtr, severity)) { Ns_DStringVPrintf(&cachePtr->buffer, fmt, ap); LogEnd(cachePtr); } } else { (*nslogProcPtr)(&cachePtr->buffer, severity, fmt, ap); ++cachePtr->count; if (!cachePtr->hold) { LogFlush(cachePtr); } } } /* *---------------------------------------------------------------------- * * LogStart -- * * Start a log entry. * * Results: * 1 if log started and should be written, 0 if given severity * is surpressed. * * Side effects: * May append log header to given dstring. * *---------------------------------------------------------------------- */ static int LogStart(LogCache *cachePtr, Ns_LogSeverity severity) { char *severityStr, buf[10]; long usec; switch (severity) { case Notice: if (flags & LOG_NONOTICE) { return 0; } severityStr = "Notice"; break; case Warning: severityStr = "Warning"; break; case Error: severityStr = "Error"; break; case Fatal: severityStr = "Fatal"; break; case Bug: severityStr = "Bug"; break; case Debug: if (!(flags & LOG_DEBUG)) { return 0; } severityStr = "Debug"; break; case Dev: if (!(flags & LOG_DEV)) { return 0; } severityStr = "Dev"; break; default: if (severity > maxlevel) { return 0; } sprintf(buf, "Level%d", severity); severityStr = buf; break; } Ns_DStringAppend(&cachePtr->buffer, LogTime(cachePtr, 0, &usec)); if (flags & LOG_USEC) { Ns_DStringTrunc(&cachePtr->buffer, cachePtr->buffer.length-1); Ns_DStringPrintf(&cachePtr->buffer, ".%ld]", usec); } Ns_DStringPrintf(&cachePtr->buffer, "[%d.%lu][%s] %s: ", Ns_InfoPid(), (unsigned long) Ns_ThreadId(), Ns_ThreadGetName(), severityStr); if (flags & LOG_EXPAND) { Ns_DStringAppend(&cachePtr->buffer, "\n "); } return 1; } /* *---------------------------------------------------------------------- * * LogEnd -- * * Complete a log entry and flush if necessary. * * Results: * None. * * Side effects: * May write to log. * *---------------------------------------------------------------------- */ static void LogEnd(LogCache *cachePtr) { Ns_DStringNAppend(&cachePtr->buffer, "\n", 1); if (flags & LOG_EXPAND) { Ns_DStringNAppend(&cachePtr->buffer, "\n", 1); } ++cachePtr->count; if (!cachePtr->hold) { LogFlush(cachePtr); } } /* *---------------------------------------------------------------------- * * LogFlush -- * * Flush per-thread log entries to buffer or open file. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void LogFlush(LogCache *cachePtr) { Ns_DString *dsPtr = &cachePtr->buffer; Ns_MutexLock(&lock); if (flushProcPtr == NULL) { (void) write(2, dsPtr->string, (size_t)dsPtr->length); } else { (*flushProcPtr)(dsPtr->string, (size_t)dsPtr->length); } Ns_MutexUnlock(&lock); Ns_DStringFree(dsPtr); cachePtr->count = 0; } /* *---------------------------------------------------------------------- * * LogReOpen -- * * Open the log file name specified in the 'logFile' global. If * it's successfully opened, make that file the sink for stdout * and stderr too. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int LogReOpen(void) { int fd; int status; status = NS_OK; fd = open(file, O_WRONLY|O_APPEND|O_CREAT, 0644); if (fd < 0) { Ns_Log(Error, "log: failed to re-open log file '%s': '%s'", file, strerror(errno)); status = NS_ERROR; } else { /* * Route stderr to the file */ if (fd != STDERR_FILENO && dup2(fd, STDERR_FILENO) == -1) { fprintf(stdout, "dup2(%s, STDERR_FILENO) failed: %s\n", file, strerror(errno)); status = NS_ERROR; } /* * Route stdout to the file */ if (dup2(STDERR_FILENO, STDOUT_FILENO) == -1) { Ns_Log(Error, "log: failed to route stdout to file: '%s'", strerror(errno)); status = NS_ERROR; } /* * Clean up dangling 'open' reference to the fd */ if (fd != STDERR_FILENO && fd != STDOUT_FILENO) { close(fd); } } return status; } /* *---------------------------------------------------------------------- * * LogTime -- * * Get formatted local or gmt log time from per-thread cache. * * Results: * Pointer to per-thread buffer. * * Side effects: * Given usecPtr updated with current microseconds. * *---------------------------------------------------------------------- */ static char * LogTime(LogCache *cachePtr, int gmtoff, long *usecPtr) { time_t *tp; struct tm *ptm; int gmtoffset, n, sign; char *bp; Ns_Time now; if (gmtoff) { tp = &cachePtr->gtime; bp = cachePtr->gbuf; } else { tp = &cachePtr->ltime; bp = cachePtr->lbuf; } Ns_GetTime(&now); if (*tp != now.sec) { *tp = now.sec; ptm = ns_localtime(&now.sec); n = strftime(bp, 32, "[%d/%b/%Y:%H:%M:%S", ptm); if (!gmtoff) { bp[n++] = ']'; bp[n] = '\0'; } else { #ifdef HAVE_TM_GMTOFF gmtoffset = ptm->tm_gmtoff / 60; #else gmtoffset = -timezone / 60; if (daylight && ptm->tm_isdst) { gmtoffset += 60; } #endif if (gmtoffset < 0) { sign = '-'; gmtoffset *= -1; } else { sign = '+'; } sprintf(bp + n, " %c%02d%02d]", sign, gmtoffset / 60, gmtoffset % 60); } } if (usecPtr != NULL) { *usecPtr = now.usec; } return bp; } /* *---------------------------------------------------------------------- * * LogGetCache -- * * Get the per-thread Cache struct. * * Results: * Pointer to per-thread struct. * * Side effects: * None. * *---------------------------------------------------------------------- */ static LogCache * LogGetCache(void) { LogCache *cachePtr; cachePtr = Ns_TlsGet(&tls); if (cachePtr == NULL) { cachePtr = ns_calloc(1, sizeof(LogCache)); Ns_DStringInit(&cachePtr->buffer); Ns_TlsSet(&tls, cachePtr); } return cachePtr; } /* *---------------------------------------------------------------------- * * LogFreeCache -- * * TLS cleanup callback to destory per-thread Cache struct. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void LogFreeCache(void *arg) { LogCache *cachePtr = arg; LogFlush(cachePtr); Ns_DStringFree(&cachePtr->buffer); ns_free(cachePtr); } /* *---------------------------------------------------------------------- * * Ns_SetLogFlushProc -- * * Set the proc to call when writing the log. You probably want * to have a Ns_RegisterAtShutdown() call too so you can * close/finish up whatever special logging you are doing. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_SetLogFlushProc(Ns_LogFlushProc *procPtr) { flushProcPtr = procPtr; } /* *---------------------------------------------------------------------- * * Ns_SetNsLogProc -- * * Set the proc to call when adding a log entry. * * There are 2 ways to use this override: * * 1. In conjunction with the Ns_SetLogFlushProc() to use the * existing AOLserver buffering and writing system. So when a * log message is added it is inserted into the log cache and * flushed later through your log flush override. To use this * write any logging data to the Ns_DString that is passed into * the Ns_Log proc. * 2. Without calling Ns_SetLogFlushProc() and handle all buffering * and writing directly. LogFlush() will be called as normal but * is a no-op because nothing will have been added. Do not write * into the Ns_DString passed into the Ns_Log proc in this case. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_SetNsLogProc(Ns_LogProc *procPtr) { nslogProcPtr = procPtr; } aolserver4-4.5.1/nsd/nsd.h0000644000175000017500000007127211125274226015163 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ #ifndef NSD_H #define NSD_H #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif #define NSD_EXPORTS #include "ns.h" #ifndef _WIN32 #include #include #endif #include #ifdef _WIN32 #include #include #define STDOUT_FILENO 1 #define STDERR_FILENO 2 #define S_ISREG(m) ((m)&_S_IFREG) #define S_ISDIR(m) ((m)&_S_IFDIR) #include "getopt.h" #include #else #include #include #include #include #include #include #endif /* WIN32 */ #ifdef HAVE_POLL #include #else #define POLLIN 1 #define POLLOUT 2 #define POLLPRI 4 #define POLLHUP 8 struct pollfd { int fd; short events; short revents; }; extern int poll(struct pollfd *, unsigned long, int); #endif #ifdef __linux #include #endif #ifdef __hp #define seteuid(i) setresuid((-1),(i),(-1)) #endif #ifdef __sun #include #include #define gethostname(b,s) (!(sysinfo(SI_HOSTNAME, b, s) > 0)) #endif #ifdef __unixware #include #endif #ifndef F_CLOEXEC #define F_CLOEXEC 1 #endif #ifdef _WIN32 #define NS_SIGTERM 1 #define NS_SIGHUP 2 #else #define NS_SIGTERM SIGTERM #define NS_SIGHUP SIGHUP #endif #define _MAX(x,y) ((x) > (y) ? (x) : (y)) #define _MIN(x,y) ((x) > (y) ? (y) : (x)) /* * constants */ #define NSD_NAME "AOLserver" #define NSD_VERSION NS_PATCH_LEVEL #define NSD_LABEL "aolserver4_5" #define NSD_TAG "$Name: aolserver_v45_r1 $" #define NS_CONFIG_PARAMETERS "ns/parameters" #define NS_CONFIG_THREADS "ns/threads" #define ADP_OK 0 #define ADP_BREAK 1 #define ADP_ABORT 2 #define ADP_RETURN 4 /* * The following is the default text/html content type * sent to the browsers. The charset is also used for * both input (url query) and output encodings. */ #define NSD_TEXTHTML "text/html; charset=iso-8859-1" /* * Typedef definitions. */ typedef int bool; struct _nsconf { char *argv0; char *nsd; char *name; char *version; char *home; char *config; char *build; int pid; time_t boot_t; char hostname[255]; char address[16]; int shutdowntimeout; int backlog; int debug; /* * The following struct maintains server state. */ struct { Ns_Mutex lock; Ns_Cond cond; int started; int stopping; } state; /* * The following struct is the maximum HTTP major/minor version * supported. */ struct { unsigned int major; unsigned int minor; } http; struct { int maxelapsed; } sched; #ifdef _WIN32 struct { bool checkexit; } exec; #endif struct { char *sharedlibrary; char *version; bool lockoninit; } tcl; }; extern struct _nsconf nsconf; /* * The following structure defines a key for hashing * a file by device/inode. */ typedef struct FileKey { dev_t dev; ino_t ino; } FileKey; #define FILE_KEYS (sizeof(FileKey)/sizeof(int)) /* * The following structure maintains an ADP call frame. */ typedef struct AdpFrame { struct AdpFrame *prevPtr; int line; int objc; Tcl_Obj *ident; Tcl_Obj **objv; char *savecwd; char *file; Ns_DString cwdbuf; Tcl_DString *outputPtr; } AdpFrame; /* * The following structure defines blocks of ADP. The * len pointer is an array of ints with positive values * indicating text to copy and negative values indicating * scripts to evaluate. The text and script chars are * packed together without null char separators starting * at base. The len data is stored at the end of the * text dstring when parsing is complete. */ typedef struct AdpCode { int nblocks; int nscripts; int *len; int *line; Tcl_DString text; } AdpCode; #define AdpCodeLen(cp,i) ((cp)->len[(i)]) #define AdpCodeLine(cp,i) ((cp)->line[(i)]) #define AdpCodeText(cp) ((cp)->text.string) #define AdpCodeBlocks(cp) ((cp)->nblocks) #define AdpCodeScripts(cp) ((cp)->nscripts) /* * Various ADP option bits. */ #define ADP_SAFE 0x01 /* Use Tcl_SafeEval for ADP. */ #define ADP_SINGLE 0x02 /* Combine blocks into a single script. */ #define ADP_DEBUG 0x04 /* Enable debugging. */ #define ADP_EXPIRE 0x08 /* Send Expires: now header on output. */ #define ADP_NOCACHE 0x10 /* Disable caching. */ #define ADP_TRACE 0x20 /* Trace execution. */ #define ADP_GZIP 0x80 /* Enable gzip compression. */ #define ADP_DETAIL 0x100 /* Log connection details on error. */ #define ADP_STRICT 0x200 /* Strict error handling. */ #define ADP_DISPLAY 0x400 /* Display error messages in output stream. */ #define ADP_TRIM 0x800 /* Display error messages in output stream. */ #define ADP_FLUSHED 0x1000 /* Some output has been sent. */ #define ADP_ERRLOGGED 0x2000 /* Error message has already been logged. */ #define ADP_AUTOABORT 0x4000 /* Raise abort on flush error. */ #define ADP_EVAL_FILE 0x8000 /* Object to evaluate is a file. */ /* * The following structure maitains data for each instance of * a driver initialized with Ns_DriverInit. */ struct NsServer; typedef struct Driver { /* * Visible in Ns_Driver. */ void *arg; /* Driver callback data. */ char *server; /* Virtual server name. */ char *module; /* Driver module. */ char *name; /* Driver name, e.g., "nssock". */ char *location; /* Location, e.g, "http://foo:9090" */ char *address; /* Address in location. */ int sendwait; /* send() I/O timeout. */ int recvwait; /* recv() I/O timeout. */ int bufsize; /* Conn bufsize (0 for SSL) */ int sndbuf; /* setsockopt() SNDBUF option. */ int rcvbuf; /* setsockopt() RCVBUF option. */ /* * Private to Driver. */ struct Driver *nextPtr; /* Next in list of drivers. */ struct NsServer *servPtr; /* Driver virtual server. */ char *fullname; /* Full name, i.e., server/module. */ int flags; /* Driver state flags. */ Ns_Thread thread; /* Thread id to join on shutdown. */ Ns_Mutex lock; /* Lock to protect lists below. */ Ns_Cond cond; /* Cond to signal reader threads, * driver query, startup, and shutdown. */ int trigger[2]; /* Wakeup trigger pipe. */ Ns_DriverProc *proc; /* Driver callback. */ int opts; /* Driver options. */ int closewait; /* Graceful close timeout. */ int keepwait; /* Keepalive timeout. */ char *bindaddr; /* Numerical listen address. */ int port; /* Port in location. */ int backlog; /* listen() backlog. */ int maxline; /* Maximum request line length to read. */ int maxheader; /* Maximum total header length to read. */ int maxinput; /* Maximum request bytes to read. */ struct Sock *freeSockPtr; /* Sock free list. */ int maxsock; /* Maximum open Sock's. */ int nactive; /* Number of active Sock's. */ unsigned int nextid; /* Next sock unique id. */ Ns_Thread *readers; /* Array of reader Ns_Thread's. */ int maxreaders; /* Max reader threads. */ int nreaders; /* Current num reader threads. */ int idlereaders; /* Idle reader threads. */ struct Sock *readSockPtr; /* Sock's waiting for reader threads. */ struct Sock *runSockPtr; /* Sock's returning from reader threads. */ struct Sock *closeSockPtr; /* Sock's returning from conn threads. */ struct Conn *firstConnPtr; /* First Conn waiting to run. */ struct Conn *lastConnPtr; /* Last Conn waiting to run. */ struct Conn *freeConnPtr; /* Conn's returning from conn threads. */ struct QueWait *freeQueWaitPtr; Tcl_DString *queryPtr; /* Buffer to copy driver query data. */ struct { unsigned int spins; unsigned int accepts; unsigned int reads; unsigned int writes; unsigned int queued; unsigned int timeout; unsigned int overflow; unsigned int dropped; } stats; } Driver; /* * The following structure maintains a socket to a * connected client. The socket is used to maintain state * during request read-ahead before connection processing * and keepalive after connection processing. */ typedef struct Sock { /* * Visible in Ns_Sock. */ struct Driver *drvPtr; SOCKET sock; void *arg; /* * Private to Sock. */ struct Sock *nextPtr; struct Conn *connPtr; struct sockaddr_in sa; unsigned int id; int state; int pidx; /* poll() index. */ Ns_Time acceptTime; Ns_Time timeout; unsigned int nreads; unsigned int nwrites; } Sock; /* * The following structure defines a per-request limits. */ typedef struct Limits { Ns_Mutex lock; char *name; unsigned int maxrun; unsigned int maxwait; unsigned int nrunning; unsigned int nwaiting; unsigned int ndropped; unsigned int noverflow; unsigned int ntimeout; size_t maxupload; int timeout; } Limits; /* * The following structure maintains state for a connection * being processed. */ typedef struct Conn { /* * Visible in an Ns_Conn: */ Ns_Request *request; Ns_Set *headers; Ns_Set *outputheaders; char *authUser; char *authPasswd; int contentLength; int flags; /* * Visible only in a Conn: */ struct Conn *nextPtr; struct Conn *prevPtr; struct Sock *sockPtr; struct Limits *limitsPtr; /* * Client http major/minor version number. */ unsigned int major; unsigned int minor; /* * Start and end of request line for later parsing. */ char *rstart; char *rend; /* * The following are copied from sockPtr so they're valid * after the connection is closed (e.g., within traces). */ char *server; char *location; struct NsServer *servPtr; struct Driver *drvPtr; unsigned int id; char idstr[16]; struct { Ns_Time accept; Ns_Time read; Ns_Time ready; Ns_Time queue; Ns_Time run; Ns_Time close; Ns_Time done; } times; struct NsInterp *itPtr; char *type; Tcl_Encoding outputEncoding; Tcl_Encoding urlEncoding; Tcl_Encoding queryEncoding; int nContentSent; int status; int responseLength; int recursionCount; Ns_Set *query; Tcl_HashTable files; /* * The following are copied from Sock. */ char peer[16]; /* Client peer address. */ int port; /* Client peer port. */ /* * The following array maintains conn local storage. */ void *cls[NS_CONN_MAXCLS]; struct QueWait *queWaitPtr; /* * The following pointers are used to access the * buffer contents after the read-ahead is complete. */ char *next; /* Next read offset. */ size_t avail; /* Bytes avail in buffer. */ char *content; /* Start of content. */ int tfd; /* Temp fd for file-based content. */ void *map; /* Mmap'ed content, if any. */ void *maparg; /* Argument for NsUnMap. */ /* * The following offsets are used to manage the * buffer read-ahead process. * * NB: The ibuf and obuf dstrings must be the last elements of * the conn as all elements before are zero'ed during conn cleanup. * */ int roff; /* Next read buffer offset. */ Tcl_DString ibuf; /* Request and content input buffer. */ Tcl_DString obuf; /* Output buffer for queued headers. */ } Conn; /* * The following structure maintains a connection thread pool. */ typedef struct Pool { Ns_Mutex lock; Ns_Cond cond; char *name; int shutdown; /* * The following struct maintains the active and waiting connection * queues, the next conn id, and the number of waiting connects. */ struct { struct { int num; struct Conn *firstPtr; struct Conn *lastPtr; } wait; struct { struct Conn *firstPtr; struct Conn *lastPtr; } active; } queue; /* * The following struct maintins the state of the threads. Min and max * threads are determined at startup and then NsQueueConn ensures the * current number of threads remains within that range with individual * threads waiting no more than the timeout for a connection to * arrive. The number of idle threads is maintained for the benefit of * the ns_server command. Threads will handle up to maxconns before * exit (default is the "connsperthread" virtual server config). */ struct { unsigned int nextid; int min; int max; int current; int idle; int waiting; int starting; int timeout; int maxconns; int spread; unsigned int queued; } threads; } Pool; #define SERV_AOLPRESS 0x0001 /* AOLpress support. */ #define SERV_CHUNKED 0x0002 /* Output can be chunked. */ #define SERV_MODSINCE 0x0004 /* Check if-modified-since. */ #define SERV_NOTICEDETAIL 0x0008 /* Add detail to notice messages. */ #define SERV_GZIP 0x0010 /* Enable GZIP compression. */ /* * The following struct maintains nsv's, shared string variables. */ typedef struct Nsv { struct Bucket *buckets; int nbuckets; } Nsv; /* * The following structure is allocated for each virtual server. */ typedef struct NsServer { char *server; Ns_LocationProc *locationProc; /* * Default charset for text/ types. */ char *defcharset; /* * The following encoding is used for decoding request URL's. * This is a server-wide config as the request must be read * and parsed before the URL can be determined to identify * a possible alternate encoding. */ Tcl_Encoding urlEncoding; /* * The following encoding is used for decoding input * query strings and forms unless a more specific encoding * is set via ns_register_encoding. */ Tcl_Encoding inputEncoding; /* * The following struct maintains various server options. */ struct { int flags; size_t gzipmin; int gziplevel; char *realm; Ns_HeaderCaseDisposition hdrcase; } opts; /* * The following struct maintains conn-related limits. */ struct { int errorminsize; int connsperthread; } limits; struct { char *pageroot; char **dirv; int dirc; char *dirproc; char *diradp; bool mmap; int cachemaxentry; Ns_UrlToFileProc *url2file; Ns_Cache *cache; } fastpath; /* * The following struct maintains request tables. */ struct { Ns_RequestAuthorizeProc *authProc; Tcl_HashTable redirect; Tcl_HashTable proxy; Ns_Mutex plock; } request; /* * The following struct maintains filters and traces. */ struct { struct Filter *firstFilterPtr; struct Trace *firstTracePtr; struct Trace *firstCleanupPtr; } filter; /* * The following struct maintains the core Tcl config. */ struct { /* * The following is the bootstrap script, normally bin/init.tcl. */ char *initfile; /* * The following support the loop control facilities. */ Tcl_HashTable loops; Ns_Mutex llock; Ns_Cond lcond; /* * The following support traces and one-time inits. */ Ns_RWLock tlock; /* Lock for trace list. */ struct TclTrace *firstTracePtr; struct TclTrace *lastTracePtr; Ns_Cs olock; /* Lock for one-time inits. */ Tcl_HashTable once; /* Table of one-time inits. */ Ns_Mutex plock; /* Lock for package table. */ Tcl_HashTable packages; /* Table of server packages. */ /* * The following support the legacy module directories config. */ char *library; /* Legacy library. */ char *script; /* Legacy init script. */ int length; int epoch; Ns_RWLock slock; /* Lock for init script. */ Tcl_DString modules; /* List of server modules. */ } tcl; /* * The following struct maintains ADP config, * registered tags, and read-only page text. */ struct { int flags; int tracesize; char *errorpage; char *startpage; char *debuginit; size_t bufsize; size_t cachesize; Ns_Cond pagecond; Ns_Mutex pagelock; Tcl_HashTable pages; Ns_RWLock taglock; Tcl_HashTable tags; } adp; /* * The following struct maintains the Ns_Set's * entered into Tcl with NS_TCL_SET_SHARED. */ struct { Ns_Mutex lock; Tcl_HashTable table; } sets; /* * The following maintains per-server nsv's. */ Nsv nsv; /* * The following struct maintains the vars and * lock for the old ns_var command. */ struct { Ns_Mutex lock; Tcl_HashTable table; } var; /* * The following struct maintains the init state * of ns_share variables, updated with the * ns_share -init command. */ struct { Ns_Cs cs; Ns_Mutex lock; Ns_Cond cond; Tcl_HashTable inits; Tcl_HashTable vars; } share; /* * The following struct maintains detached Tcl * channels for the benefit of the ns_chan command. */ struct { Ns_Mutex lock; Tcl_HashTable table; } chans; } NsServer; /* * The following structure is allocated for each interp. */ typedef struct NsInterp { struct NsInterp *nextPtr; /* Next interps for given server. */ Tcl_Interp *interp; /* Pointer to cooresponding interp. */ NsServer *servPtr; /* Pointer to interp server. */ int delete; /* Delete interp on next deallocate. */ int epoch; /* Epoch of legacy config. */ /* * The following pointer maintains the first in * a FIFO list of callbacks to invoke at interp * de-allocate time. */ struct Defer *firstDeferPtr; /* * The following pointer maintains the first in * a LIFO list of scripts to evaluate when a * connection closes. */ struct AtClose *firstAtClosePtr; /* * The following pointer and struct maintain state for * the active connection, if any, and support the ns_conn * command. */ #define CONN_TCLFORM 1 #define CONN_TCLHDRS 2 #define CONN_TCLOUTHDRS 4 Ns_Conn *conn; struct nsconn { int flags; char form[16]; char hdrs[16]; char outhdrs[16]; } nsconn; /* * The following struct maintains per-interp ADP * context including the private pages cache. */ struct adp { int flags; int exception; int refresh; size_t bufsize; int errorLevel; int debugLevel; int debugInit; char *debugFile; Ns_Cache *cache; int depth; char *cwd; struct AdpFrame *framePtr; Ns_Conn *conn; Tcl_Channel chan; Tcl_DString output; } adp; /* * The following table maintains private Ns_Set's * entered into this interp. */ Tcl_HashTable sets; /* * The following table maintains shared channels * register with the ns_chan command. */ Tcl_HashTable chans; /* * The following table maintains the Tcl HTTP requests. */ Tcl_HashTable https; } NsInterp; /* * Libnsd initialization routines. */ extern void NsInitBinder(void); extern void NsInitCache(void); extern void NsInitConf(void); extern void NsInitConfig(void); extern void NsInitEncodings(void); extern void NsInitFd(void); extern void NsInitListen(void); extern void NsInitLog(void); extern void NsInitMimeTypes(void); extern void NsInitModLoad(void); extern void NsInitNsv(void); extern void NsInitProcInfo(void); extern void NsInitQueue(void); extern void NsInitLimits(void); extern void NsInitPools(void); extern void NsInitDrivers(void); extern void NsInitSched(void); extern void NsInitServers(void); extern void NsInitTcl(void); extern void NsInitTclCache(void); extern void NsInitUrlSpace(void); extern void NsInitRequests(void); extern char *NsFindVersion(char *request, unsigned int *majorPtr, unsigned int *minorPtr); extern void NsQueueConn(Conn *connPtr); extern int NsCheckQuery(Ns_Conn *conn); extern void NsAppendConn(Tcl_DString *bufPtr, Conn *connPtr, char *state); extern void NsAppendRequest(Tcl_DString *dsPtr, Ns_Request *request); extern int NsConnSend(Ns_Conn *conn, struct iovec *bufs, int nbufs); extern void NsSockClose(Sock *sockPtr, int keep); extern int NsPoll(struct pollfd *pfds, int nfds, Ns_Time *timeoutPtr); extern void NsFreeConn(Conn *connPtr); extern NsServer *NsGetServer(char *server); extern char *NsGetServers(void); extern NsServer *NsGetInitServer(void); extern NsInterp *NsGetInterpData(Tcl_Interp *interp); extern void NsFreeConnInterp(Conn *connPtr); extern Ns_OpProc NsAdpProc; extern Ns_Cache *NsFastpathCache(char *server, int size); extern void NsAdpInit(NsInterp *itPtr); extern void NsAdpReset(NsInterp *itPtr); extern void NsAdpFree(NsInterp *itPtr); extern void NsTclRunAtClose(NsInterp *itPtr); extern int NsUrlToFile(Ns_DString *dsPtr, NsServer *servPtr, char *url); /* * External callback functions. */ extern Ns_Callback NsTclCallback; extern Ns_Callback NsTclSignalProc; extern Ns_SchedProc NsTclSchedProc; extern Ns_ArgProc NsTclArgProc; extern Ns_ThreadProc NsTclThread; extern Ns_ArgProc NsTclThreadArgProc; extern Ns_Callback NsCachePurge; extern Ns_ArgProc NsCacheArgProc; extern Ns_SockProc NsTclSockProc; extern Ns_ArgProc NsTclSockArgProc; extern Ns_ThreadProc NsConnThread; extern Ns_ArgProc NsConnArgProc; extern void NsGetCallbacks(Tcl_DString *dsPtr); extern void NsGetSockCallbacks(Tcl_DString *dsPtr); extern void NsGetScheduled(Tcl_DString *dsPtr); extern char *NsConnContent(Ns_Conn *conn, char **nextPtr, int *availPtr); extern void NsConnSeek(Ns_Conn *conn, int count); extern void *NsMap(int fd, off_t start, size_t len, int writeable, void **argPtr); extern void NsUnMap(void *addr, void *arg); #ifdef _WIN32 extern int NsConnectService(void); extern int NsInstallService(char *service); extern int NsRemoveService(char *service); #endif extern void NsCreatePidFile(char *service); extern void NsRemovePidFile(char *service); extern void NsLogOpen(void); extern void NsLogConf(void); extern void NsTclInitObjs(void); extern void NsUpdateMimeTypes(void); extern void NsUpdateEncodings(void); extern void NsRunPreStartupProcs(void); extern void NsBlockSignals(int debug); extern void NsHandleSignals(void); extern void NsStopDrivers(void); extern void NsPreBind(char *bindargs, char *bindfile); extern SOCKET NsSockGetBound(struct sockaddr_in *saPtr); extern void NsClosePreBound(void); extern void NsInitServer(char *server, Ns_ServerInitProc *initProc); extern char *NsConfigRead(char *file); extern void NsConfigEval(char *config, int argc, char **argv, int optind); extern void NsConfUpdate(void); extern void NsEnableDNSCache(void); extern void NsStartPools(void); extern void NsStopPools(Ns_Time *timeoutPtr); extern int NsTclGetPool(Tcl_Interp *interp, char *pool, Pool **poolPtrPtr); extern Tcl_ObjCmdProc NsTclListPoolsObjCmd; extern void NsCreateConnThread(Pool *poolPtr, int joinThreads); extern void NsJoinConnThreads(void); extern int NsStartDrivers(void); extern void NsWaitDriversShutdown(Ns_Time *toPtr); extern void NsStartSchedShutdown(void); extern void NsWaitSchedShutdown(Ns_Time *toPtr); extern void NsStartSockShutdown(void); extern void NsWaitSockShutdown(Ns_Time *toPtr); extern void NsStartShutdownProcs(void); extern void NsWaitShutdownProcs(Ns_Time *toPtr); extern void NsWaitDriversShutdown(Ns_Time *toPtr); extern void NsStartQueueShutdown(void); extern void NsWaitQueueShutdown(Ns_Time *toPtr); extern void NsStartJobsShutdown(void); extern void NsWaitJobsShutdown(Ns_Time *toPtr); extern void NsTclInitServer(char *server); extern int NsTclGetServer(NsInterp *itPtr, char **serverPtr); extern int NsTclGetConn(NsInterp *itPtr, Ns_Conn **connPtr); extern void NsLoadModules(char *server); extern struct Bucket *NsTclCreateBuckets(char *server, int nbuckets); extern void NsClsCleanup(Conn *connPtr); extern void NsTclAddCmds(Tcl_Interp *interp, NsInterp *itPtr); extern void NsRestoreSignals(void); extern void NsSendSignal(int sig); /* * Conn routines. */ extern Limits *NsGetRequestLimits(char *server, char *method, char *url); extern Pool *NsGetConnPool(Conn *connPtr); /* * ADP routines. */ extern Ns_Cache *NsAdpCache(char *server, int size); extern void NsAdpSetMimeType(NsInterp *itPtr, char *type); extern void NsAdpSetCharSet(NsInterp *itPtr, char *charset); extern int NsAdpGetBuf(NsInterp *itPtr, Tcl_DString **dsPtrPtr); extern int NsAdpAppend(NsInterp *itPtr, char *buf, int len); extern int NsAdpFlush(NsInterp *itPtr, int stream); extern int NsAdpDebug(NsInterp *itPtr, char *host, char *port, char *procs); extern int NsAdpEval(NsInterp *itPtr, int objc, Tcl_Obj *objv[], int flags, char *resvar); extern int NsAdpSource(NsInterp *itPtr, int objc, Tcl_Obj *objv[], int flags, char *resvar); extern int NsAdpInclude(NsInterp *itPtr, int objc, Tcl_Obj *objv[], char *file, Ns_Time *ttlPtr); extern void NsAdpParse(AdpCode *codePtr, NsServer *servPtr, char *utf, int flags); extern void NsAdpFreeCode(AdpCode *codePtr); extern void NsAdpLogError(NsInterp *itPtr); /* * Tcl support routines. */ extern int NsTclCheckConnId(Tcl_Interp *interp, Tcl_Obj *objPtr); extern void NsTclInitQueueType(void); extern void NsTclInitAddrType(void); extern void NsTclInitCacheType(void); extern void NsTclInitKeylistType(void); extern void NsTclInitTimeType(void); /* * Callback routines. */ extern int NsRunFilters(Ns_Conn *conn, int why); extern void NsRunCleanups(Ns_Conn *conn); extern void NsRunTraces(Ns_Conn *conn); extern void NsRunPreStartupProcs(void); extern void NsRunSignalProcs(void); extern void NsRunStartupProcs(void); extern void NsRunAtReadyProcs(void); extern void NsRunAtExitProcs(void); /* * Utility functions. */ extern bool NsParamBool(char *key, bool def); extern int NsParamInt(char *key, int def); extern char *NsParamString(char *key, char *def); extern int NsCloseAllFiles(int errFd); #ifndef _WIN32 extern int Ns_ConnRunRequest(Ns_Conn *conn); extern int Ns_GetGid(char *group); extern int Ns_GetUserGid(char *user); extern int Ns_TclGetOpenFd(Tcl_Interp *, char *, int write, int *fp); #endif extern void NsStopSockCallbacks(void); extern void NsStopScheduledProcs(void); extern Tcl_Encoding NsGetInputEncoding(Conn *connPtr); extern Tcl_Encoding NsGetOutputEncoding(Conn *connPtr); /* * Proxy support */ extern int NsConnRunProxyRequest(Ns_Conn *conn); #endif aolserver4-4.5.1/nsd/set.c0000644000175000017500000004060007151474605015163 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * set.c -- * * Implements the Ns_Set data type. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/set.c,v 1.4 2000/08/25 13:49:57 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* *---------------------------------------------------------------------- * * Ns_SetUpdate -- * * Remove a tuple and re-add it. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_SetUpdate(Ns_Set *set, char *key, char *value) { Ns_SetDeleteKey(set, key); Ns_SetPut(set, key, value); } /* *---------------------------------------------------------------------- * * Ns_SetCreate -- * * Initialize a new set. * * Results: * A pointer to a new set. * * Side effects: * Memory is allocated; free with Ns_SetFree. * *---------------------------------------------------------------------- */ Ns_Set * Ns_SetCreate(char *name) { Ns_Set *setPtr; setPtr = ns_malloc(sizeof(Ns_Set)); setPtr->size = 0; setPtr->maxSize = 10; setPtr->name = ns_strcopy(name); setPtr->fields = ns_malloc(sizeof(Ns_SetField) * setPtr->maxSize); return setPtr; } /* *---------------------------------------------------------------------- * * Ns_SetFree -- * * Free a set and its associated data with ns_free. * * Results: * None. * * Side effects: * Will free both the Ns_Set structure AND its tuples. * *---------------------------------------------------------------------- */ void Ns_SetFree(Ns_Set *set) { int i; if (set != NULL) { for (i = 0; i < set->size; ++i) { ns_free(set->fields[i].name); ns_free(set->fields[i].value); } ns_free(set->fields); ns_free(set->name); ns_free(set); } } /* *---------------------------------------------------------------------- * * Ns_SetPut -- * * Insert a tuple into an existing set. * * Results: * The index number of the new tuple. * * Side effects: * The key/value will be strdup'ed. * *---------------------------------------------------------------------- */ int Ns_SetPut(Ns_Set *set, char *key, char *value) { int index; index = set->size; set->size++; if (set->size > set->maxSize) { set->maxSize = set->size * 2; set->fields = ns_realloc(set->fields, sizeof(Ns_SetField) * set->maxSize); } set->fields[index].name = ns_strcopy(key); set->fields[index].value = ns_strcopy(value); return index; } /* *---------------------------------------------------------------------- * * Ns_SetUniqueCmp -- * * Using the comparison function, see if multiple keys match * key. * * Results: * NS_FALSE: multiple keys match key * NS_TRUE: 0 or 1 keys match key. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SetUniqueCmp(Ns_Set *set, char *key, int (*cmp) (char *s1, char *s2)) { int i; char *name; int found; found = 0; for (i = 0; i < set->size; ++i) { name = set->fields[i].name; if ((key == NULL && name == NULL) || (key != NULL && name != NULL && ((*cmp) (key, name)) == 0)) { if (found) { return NS_FALSE; } found = 1; } } return NS_TRUE; } /* *---------------------------------------------------------------------- * * Ns_SetFindCmp -- * * Returns the index of a tuple matching key, using a comparison * function callback. * * Results: * A tuple index or -1 if no matches. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SetFindCmp(Ns_Set *set, char *key, int (*cmp) (char *s1, char *s2)) { int i; char *name; for (i = 0; i < set->size; ++i) { name = set->fields[i].name; if ((key == NULL && name == NULL) || (key != NULL && name != NULL && ((*cmp) (key, name)) == 0)) { return i; } } return -1; } /* *---------------------------------------------------------------------- * * Ns_SetGetCmp -- * * Returns the value of a tuple matching key, using a comparison * function callback. * * Results: * A value or NULL if no matches. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_SetGetCmp(Ns_Set *set, char *key, int (*cmp) (char *s1, char *s2)) { int i; i = Ns_SetFindCmp(set, key, cmp); if (i == -1) { return NULL; } return set->fields[i].value; } /* *---------------------------------------------------------------------- * * Ns_SetUnique -- * * Check if a key in a set is unique (case sensitive). * * Results: * NS_TRUE if unique, NS_FALSE if not. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SetUnique(Ns_Set *set, char *key) { return Ns_SetUniqueCmp(set, key, (int (*) (char *, char *)) strcmp); } /* *---------------------------------------------------------------------- * * Ns_SetIUnique -- * * Check if a key in a set is unique (case insensitive). * * Results: * NS_TRUE if unique, NS_FALSE if not. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SetIUnique(Ns_Set *set, char *key) { return Ns_SetUniqueCmp(set, key, (int (*) (char *, char *)) strcasecmp); } /* *---------------------------------------------------------------------- * * Ns_SetFind -- * * Locate the index of a field in a set (case sensitive) * * Results: * A field index or -1 if not found. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SetFind(Ns_Set *set, char *key) { return Ns_SetFindCmp(set, key, (int (*) (char *, char *)) strcmp); } /* *---------------------------------------------------------------------- * * Ns_SetIFind -- * * Locate the index of a field in a set (case insensitive) * * Results: * A field index or -1 if not found. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_SetIFind(Ns_Set *set, char *key) { return Ns_SetFindCmp(set, key, (int (*) (char *, char *)) strcasecmp); } /* *---------------------------------------------------------------------- * * Ns_SetGet -- * * Return the value associated with a key, case sensitive. * * Results: * A value or NULL if key not found. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_SetGet(Ns_Set *set, char *key) { return Ns_SetGetCmp(set, key, (int (*) (char *, char *)) strcmp); } /* *---------------------------------------------------------------------- * * Ns_SetIGet -- * * Return the value associated with a key, case insensitive. * * Results: * A value or NULL if key not found. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_SetIGet(Ns_Set *set, char *key) { return Ns_SetGetCmp(set, key, (int (*) (char *, char *)) strcasecmp); } /* *---------------------------------------------------------------------- * * Ns_SetTrunc -- * * Remove all tuples after 'size' * * Results: * None. * * Side effects: * Will free tuple memory. * *---------------------------------------------------------------------- */ void Ns_SetTrunc(Ns_Set *set, int size) { if (size < set->size) { int index; for (index = size; index < set->size; index++) { ns_free(set->fields[index].name); ns_free(set->fields[index].value); } set->size = size; } } /* *---------------------------------------------------------------------- * * Ns_SetDelete -- * * Delete a tuple from a set. * * Results: * None. * * Side effects: * Will free tuple memory. * *---------------------------------------------------------------------- */ void Ns_SetDelete(Ns_Set *set, int index) { if ((index != -1) && (index < set->size)) { int i; ns_free(set->fields[index].name); ns_free(set->fields[index].value); for (i = index; i < set->size; ++i) { set->fields[i].name = set->fields[i + 1].name; set->fields[i].value = set->fields[i + 1].value; } --set->size; } } /* *---------------------------------------------------------------------- * * Ns_SetPutValue -- * * Set the value for a given tuple. * * Results: * None. * * Side effects: * Will free the old value dup the new value. * *---------------------------------------------------------------------- */ void Ns_SetPutValue(Ns_Set *set, int index, char *value) { if ((index != -1) && (index < set->size)) { ns_free(set->fields[index].value); set->fields[index].value = ns_strcopy(value); } } /* *---------------------------------------------------------------------- * * Ns_SetDeleteKey -- * * Delete a tuple from the set (case sensitive). * * Results: * None. * * Side effects: * Will free tuple memory. * *---------------------------------------------------------------------- */ void Ns_SetDeleteKey(Ns_Set *set, char *key) { Ns_SetDelete(set, Ns_SetFind(set, key)); } /* *---------------------------------------------------------------------- * * Ns_SetIDeleteKey -- * * Delete a tuple from the set (case insensitive). * * Results: * None. * * Side effects: * Will free tuple memory. * *---------------------------------------------------------------------- */ void Ns_SetIDeleteKey(Ns_Set *set, char *key) { Ns_SetDelete(set, Ns_SetIFind(set, key)); } /* *---------------------------------------------------------------------- * * Ns_SetListFind -- * * In a null-terminated array of sets, find the set with the * given name. * * Results: * A set, or NULL. * * Side effects: * None. * *---------------------------------------------------------------------- */ Ns_Set * Ns_SetListFind(Ns_Set **sets, char *name) { while (*sets != NULL) { if (name == NULL) { if ((*sets)->name == NULL) { return (*sets); } } else { if ((*sets)->name != NULL && STREQ((*sets)->name, name)) { return (*sets); } } ++sets; } return NULL; } /* *---------------------------------------------------------------------- * * Ns_SetSplit -- * * Split a set into an array of new sets. This assumes that each * key name in the fields of a set contains a separating * character. The fields of the set are partitioned into new * sets whose set names are the characters before the separator * and whose field key names are the characters after the * separator. * * Results: * A new set. * * Side effects: * Will allocate a new set and tuples. * *---------------------------------------------------------------------- */ Ns_Set ** Ns_SetSplit(Ns_Set *set, char sep) { int i; Ns_DString ds; Ns_Set *end = NULL; Ns_DStringInit(&ds); Ns_DStringNAppend(&ds, (char *) &end, sizeof(Ns_Set *)); for (i = 0; i < set->size; ++i) { Ns_Set *next; char *name; char *key; key = strchr(set->fields[i].name, sep); if (key != NULL) { *key++ = '\0'; name = set->fields[i].name; } else { key = set->fields[i].name; name = NULL; } next = Ns_SetListFind((Ns_Set **) ds.string, name); if (next == NULL) { Ns_Set **sp; next = Ns_SetCreate(name); sp = (Ns_Set **) (ds.string + ds.length - sizeof(Ns_Set *)); *sp = next; Ns_DStringNAppend(&ds, (char *) &end, sizeof(Ns_Set *)); } Ns_SetPut(next, key, set->fields[i].value); if (name != NULL) { *--key = sep; } } return (Ns_Set **) Ns_DStringExport(&ds); } /* *---------------------------------------------------------------------- * * Ns_SetListFree -- * * Free a null-terminated array of sets. * * Results: * None. * * Side effects: * Will free all sets in the array and their tuples. * *---------------------------------------------------------------------- */ void Ns_SetListFree(Ns_Set **sets) { Ns_Set **s; s = sets; while (*s != NULL) { Ns_SetFree(*s); ++s; } ns_free(sets); } /* *---------------------------------------------------------------------- * * Ns_SetMerge -- * * Combine the 'low' set into the 'high' set. * * Results: * None. * * Side effects: * Will add tuples to 'high'. * *---------------------------------------------------------------------- */ void Ns_SetMerge(Ns_Set *high, Ns_Set *low) { int i,j; for (i = 0; i < low->size; ++i) { j = Ns_SetFind(high, low->fields[i].name); if (j == -1) { Ns_SetPut(high, low->fields[i].name, low->fields[i].value); } } } /* *---------------------------------------------------------------------- * * Ns_SetCopy -- * * Make a duplicate of a set. * * Results: * A new set. * * Side effects: * Will copy tuples and alloc new memory for them, too. * *---------------------------------------------------------------------- */ Ns_Set * Ns_SetCopy(Ns_Set *old) { int i; Ns_Set *new; if (old == NULL) { return NULL; } new = Ns_SetCreate(old->name); for (i = 0; i < old->size; ++i) { Ns_SetPut(new, old->fields[i].name, old->fields[i].value); } return new; } /* *---------------------------------------------------------------------- * * Ns_SetMove -- * * Moves the data from one set to another, truncating the "from" * set. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_SetMove(Ns_Set *to, Ns_Set *from) { int i; for (i = 0; i < from->size; i++) { Ns_SetPut(to, from->fields[i].name, from->fields[i].value); } Ns_SetTrunc(from, 0); } /* *---------------------------------------------------------------------- * * Ns_SetPrint -- * * Dump the contents of a set to stderr. * * Results: * None. * * Side effects: * Will write to stderr. * *---------------------------------------------------------------------- */ void Ns_SetPrint(Ns_Set *set) { int i; fprintf(stderr, "%s:\n", set->name ? set->name : ""); for (i = 0; i < set->size; ++i) { if (set->fields[i].name == NULL) { fprintf(stderr, "\t(null) = "); } else { fprintf(stderr, "\t%s = ", set->fields[i].name); } if (set->fields[i].value == NULL) { fprintf(stderr, "(null)\n"); } else { fprintf(stderr, "%s\n", set->fields[i].value); } } } aolserver4-4.5.1/nsd/str.c0000644000175000017500000001452310061411571015170 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * str.c -- * * Functions that deal with strings. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/str.c,v 1.6 2004/06/08 19:28:57 rcrittenden0569 Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* *---------------------------------------------------------------------- * * Ns_StrTrim -- * * Trim leading and trailing white space from a string. * * Results: * A pointer to the trimmed string, which will be in the original * string. * * Side effects: * May modify passed-in string. * *---------------------------------------------------------------------- */ char * Ns_StrTrim(char *string) { return Ns_StrTrimLeft(Ns_StrTrimRight(string)); } /* *---------------------------------------------------------------------- * * Ns_StrTrimLeft -- * * Trim leading white space from a string. * * Results: * A pointer to the trimmed string, which will be in the * original string. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_StrTrimLeft(char *string) { if (string == NULL) { return NULL; } while (isspace(UCHAR(*string))) { ++string; } return string; } /* *---------------------------------------------------------------------- * * Ns_StrTrimRight -- * * Trim trailing white space from a string. * * Results: * A pointer to the trimmed string, which will be in the * original string. * * Side effects: * The string will be modified. * *---------------------------------------------------------------------- */ char * Ns_StrTrimRight(char *string) { int len; if (string == NULL) { return NULL; } len = strlen(string); while ((--len >= 0) && (isspace(UCHAR(string[len])) || string[len] == '\n')) { string[len] = '\0'; } return string; } /* *---------------------------------------------------------------------- * * Ns_StrToLower -- * * All alph. chars in a string will be made to be lowercase. * * Results: * Same string as passed in. * * Side effects: * Will modify string. * *---------------------------------------------------------------------- */ char * Ns_StrToLower(char *string) { char *s; s = string; while (*s != '\0') { if (isupper(UCHAR(*s))) { *s = tolower(UCHAR(*s)); } ++s; } return string; } /* *---------------------------------------------------------------------- * * Ns_StrToUpper -- * * All alph. chars in a string will be made to be uppercase. * * Results: * Same string as pssed in. * * Side effects: * Will modify string. * *---------------------------------------------------------------------- */ char * Ns_StrToUpper(char *string) { char *s; s = string; while (*s != '\0') { if (islower(UCHAR(*s))) { *s = toupper(UCHAR(*s)); } ++s; } return string; } /* *---------------------------------------------------------------------- * * Ns_Match -- * * Compare the beginnings of two strings, case insensitively. * The comparison stops when the end of the shorter string is * reached. * * Results: * NULL if no match, b if match. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_Match(char *a, char *b) { if (a != NULL && b != NULL) { while (*a != '\0' && *b != '\0') { char c1, c2; c1 = islower(UCHAR(*a)) ? *a : tolower(UCHAR(*a)); c2 = islower(UCHAR(*b)) ? *b : tolower(UCHAR(*b)); if (c1 != c2) { return NULL; } a++; b++; } } return (char *) b; } /* *---------------------------------------------------------------------- * * Ns_NextWord -- * * Return a pointer to first character of the next word in a * string; words are separated by white space. * * Results: * A string pointer in the original string. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_NextWord(char *line) { while (*line != '\0' && !isspace(UCHAR(*line))) { ++line; } while (*line != '\0' && isspace(UCHAR(*line))) { ++line; } return line; } /* *---------------------------------------------------------------------- * * Ns_StrCaseStr -- * * Search for first substring within string, case insensitive. * * Results: * A pointer to where substring starts or NULL. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_StrNStr(char *string, char *substring) { return Ns_StrCaseFind(string, substring); } char * Ns_StrCaseFind(char *string, char *substring) { if (strlen(string) > strlen(substring)) { while (*string != '\0') { if (Ns_Match(string, substring)) { return string; } ++string; } } return NULL; } aolserver4-4.5.1/nsd/url.c0000644000175000017500000002133707253447312015176 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * url.c -- * * Parse URLs. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/url.c,v 1.5 2001/03/13 16:46:02 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* *---------------------------------------------------------------------- * * Ns_RelativeUrl -- * * If the url passed in is for this server, then the initial * part of the URL is stripped off. e.g., on a server whose * location is http://www.foo.com, Ns_RelativeUrl of * "http://www.foo.com/hello" will return "/hello". * * Results: * A pointer to the beginning of the relative url in the * passed-in url, or NULL if error. * * Side effects: * Will set errno on error. * *---------------------------------------------------------------------- */ char * Ns_RelativeUrl(char *url, char *location) { char *v; if (url == NULL || location == NULL) { return NULL; } /* * Ns_Match will return the point in URL where location stops * being equal to it because location ends. * * e.g., if location = "http://www.foo.com" and * url="http://www.foo.com/a/b" then after the call, * v="/a/b", or NULL if there's a mismatch. */ v = Ns_Match(location, url); if (v != NULL) { url = v; } while (url[0] == '/' && url[1] == '/') { ++url; } return url; } /* *---------------------------------------------------------------------- * * Ns_ParseUrl -- * * Parse a URL into its component parts * * Results: * NS_OK or NS_ERROR * * Side effects: * Pointers to the protocol, host, port, path, and "tail" (last * path element) will be set by reference in the passed-in pointers. * The passed-in url will be modified. * *---------------------------------------------------------------------- */ int Ns_ParseUrl(char *url, char **pprotocol, char **phost, char **pport, char **ppath, char **ptail) { char *end; *pprotocol = NULL; *phost = NULL; *pport = NULL; *ppath = NULL; *ptail = NULL; /* * Set end to the end of the protocol * http://www.foo.com:8000/baz/blah/spoo.html * ^ * +--end */ end = strchr(url, ':'); if (end != NULL) { /* * There is a protocol specified. Clear out the colon. * Set pprotocol to the start of the protocol, and url to * the first character after the colon. * * http\0//www.foo.com:8000/baz/blah/spoo.html * ^ ^ ^ * | | +-- url * | +-- end * +-------- *pprotocol */ *end = '\0'; *pprotocol = url; url = end + 1; if ((*url == '/') && (*(url + 1) == '/')) { /* * There are two slashes, which means a host is specified. * Advance url past that and set *phost. * * http\0//www.foo.com:8000/baz/blah/spoo.html * ^ ^ ^ * | | +-- url, *phost * | +-- end * +-------- *pprotocol */ url = url + 2; *phost = url; /* * Look for a port number, which is optional. */ end = strchr(url, ':'); if (end != NULL) { /* * A port was specified. Clear the colon and * set *pport to the first digit. * * http\0//www.foo.com\08000/baz/blah/spoo.html * ^ ^ ^ ^ * | +-- *phost | +------ url, *pport * +----- *pprotocol +--- end */ *end = '\0'; url = end + 1; *pport = url; } /* * Move up to the slash which starts the path/tail. * Clear out the dividing slash. * * http\0//www.foo.com\08000\0baz/blah/spoo.html * ^ ^ ^ ^ ^ * | | | | +-- url * | +-- *phost | +-- end * +----- *pprotocol +-- *pport */ end = strchr(url, '/'); if (end == NULL) { /* * No path or tail specified. Return. */ *ppath = ""; *ptail = ""; return NS_OK; } *end = '\0'; url = end + 1; } else { /* * The URL must have been an odd one without a hostname. * Move the URL up past the dividing slash. * * http\0/baz/blah/spoo.html * ^ ^ ^ * | | +-- url * | +-- end * +-------- *pprotocol */ url++; } /* * Set the path to URL and advance to the last slash. * Set ptail to the character after that, or if there is none, * it becomes path and path becomes an empty string. * * http\0//www.foo.com\08000\0baz/blah/spoo.html * ^ ^ ^ ^ ^ ^^ * | | | | | |+-- *ptail * | | | | | +-- end * | | | | +-- *ppath * | +-- *phost | +-- end * +----- *pprotocol +-- *pport */ *ppath = url; end = strrchr(url, '/'); if (end == NULL) { *ptail = *ppath; *ppath = ""; } else { *end = '\0'; *ptail = end + 1; } } else { /* * This URL does not have a colon. If it begins with a slash, then * separate the tail from the path, otherwise it's all tail. */ if (*url == '/') { url++; *ppath = url; /* * Find the last slash on the right and everything after that * becomes tail; if there are no slashes then it's all tail * and path is an empty string. */ end = strrchr(url, '/'); if (end == NULL) { *ptail = *ppath; *ppath = ""; } else { *end = '\0'; *ptail = end + 1; } } else { /* * Just set the tail, there are no slashes. */ *ptail = url; } } return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_AbsoluteUrl -- * * Construct an URL based on baseurl but with as many parts of * the incomplete url as possible. * * Results: * NS_OK or NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_AbsoluteUrl(Ns_DString *dsPtr, char *url, char *base) { char *protocol, *host, *port, *path, *tail, *baseprotocol, *basehost, *baseport, *basepath, *basetail; int status = NS_OK; /* * Copy the URL's to allow Ns_ParseUrl to destory them. */ url = ns_strdup(url); base = ns_strdup(base); Ns_ParseUrl(url, &protocol, &host, &port, &path, &tail); Ns_ParseUrl(base, &baseprotocol, &basehost, &baseport, &basepath, &basetail); if (baseprotocol == NULL || basehost == NULL || basepath == NULL) { status = NS_ERROR; goto done; } if (protocol == NULL) { protocol = baseprotocol; } if (host == NULL) { host = basehost; port = baseport; } if (path == NULL) { path = basepath; } Ns_DStringVarAppend(dsPtr, protocol, "://", host, NULL); if (port != NULL) { Ns_DStringVarAppend(dsPtr, ":", port, NULL); } if (*path == '\0') { Ns_DStringVarAppend(dsPtr, "/", tail, NULL); } else { Ns_DStringVarAppend(dsPtr, "/", path, "/", tail, NULL); } done: ns_free(url); ns_free(base); return status; } aolserver4-4.5.1/nsd/queue.c0000644000175000017500000004705211125274226015515 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * queue.c -- * * Routines for the managing the virtual server connection queue * and service threads. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/queue.c,v 1.46 2008/12/27 00:36:38 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * The following structure is allocated for each new thread. The * connPtr arg is used for the proc arg callback to list conn * info for running threads. */ typedef struct ConnData { struct ConnData *nextPtr; Pool *poolPtr; Conn *connPtr; Ns_Thread thread; } ConnData; /* * Local functions defined in this file */ static void ConnRun(Conn *connPtr); /* Connection run routine. */ static void AppendConnList(Tcl_DString *dsPtr, Conn *firstPtr, char *state); /* * Static variables defined in this file. */ static Ns_Tls ctdtls; static Ns_Mutex connlock; static Ns_Mutex joinlock; static ConnData *joinPtr; /* *---------------------------------------------------------------------- * * NsInitQueue -- * * Init connection queue. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitQueue(void) { Ns_TlsAlloc(&ctdtls, NULL); Ns_MutexSetName(&connlock, "ns:connlock"); Ns_MutexSetName(&joinlock, "ns:joinlock"); } /* *---------------------------------------------------------------------- * * Ns_QueueConn -- * * Queue a connection from a loadable driver (no longer supported). * * Results: * NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_QueueConn(void *drv, void *arg) { return NS_ERROR; } /* *---------------------------------------------------------------------- * * Ns_GetConn -- * * Return the current connection in this thread. * * Results: * Pointer to conn or NULL. * * Side effects: * None. * *---------------------------------------------------------------------- */ Ns_Conn * Ns_GetConn(void) { ConnData *dataPtr; dataPtr = Ns_TlsGet(&ctdtls); return (dataPtr ? ((Ns_Conn *) dataPtr->connPtr) : NULL); } /* *---------------------------------------------------------------------- * * NsQueueConn -- * * Append a connection to the run queue. * * Results: * None. * * Side effects: * Connection will run shortly. * *---------------------------------------------------------------------- */ void NsQueueConn(Conn *connPtr) { Pool *poolPtr = NsGetConnPool(connPtr); int create = 0; /* * Queue connection. */ connPtr->flags |= NS_CONN_RUNNING; Ns_MutexLock(&poolPtr->lock); ++poolPtr->threads.queued; if (poolPtr->queue.wait.firstPtr == NULL) { poolPtr->queue.wait.firstPtr = connPtr; } else { poolPtr->queue.wait.lastPtr->nextPtr = connPtr; } poolPtr->queue.wait.lastPtr = connPtr; connPtr->nextPtr = NULL; if (poolPtr->threads.waiting == 0 && poolPtr->threads.current < poolPtr->threads.max) { /* Create a new thread if no thread is waiting and the number of currently starting or running threads is below max. */ create = 1; } poolPtr->queue.wait.num ++; if (create) { poolPtr->threads.current ++; Ns_MutexUnlock(&poolPtr->lock); NsCreateConnThread(poolPtr, 1); } else if (poolPtr->threads.waiting > 0) { /* There are threads waiting. Signal to process the request. */ Ns_CondSignal(&poolPtr->cond); Ns_MutexUnlock(&poolPtr->lock); } else { /* We might have missed signaling, since we are already using max resources, and no thread is available. In such a case the autorecovery at thread exist has to care to process the outstanding requests */ Ns_MutexUnlock(&poolPtr->lock); } } /* *---------------------------------------------------------------------- * * NsTclServerObjCmd -- * * Implement the ns_server Tcl command to return simple statistics * about the running server. * * Results: * A standard Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsTclServerObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { Pool *poolPtr; char buf[100], *pool; Tcl_DString ds; static CONST char *opts[] = { "active", "all", "connections", "keepalive", "pools", "queued", "threads", "waiting", NULL, }; enum { SActiveIdx, SAllIdx, SConnectionsIdx, SKeepaliveIdx, SPoolsIdx, SQueuedIdx, SThreadsIdx, SWaitingIdx, } _nsmayalias opt; if (objc != 2 && objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "option ?pool?"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, (int *) &opt) != TCL_OK) { return TCL_ERROR; } if (opt == SPoolsIdx) { return NsTclListPoolsObjCmd(arg, interp, objc, objv); } if (objc == 2) { pool = "default"; } else { pool = Tcl_GetString(objv[2]); } if (NsTclGetPool(interp, pool, &poolPtr) != TCL_OK) { return TCL_ERROR; } Ns_MutexLock(&poolPtr->lock); switch (opt) { case SPoolsIdx: /* NB: Silence compiler. */ break; case SWaitingIdx: Tcl_SetObjResult(interp, Tcl_NewIntObj(poolPtr->queue.wait.num)); break; case SKeepaliveIdx: Tcl_SetObjResult(interp, Tcl_NewIntObj(0/*nsconf.keepalive.npending*/)); break; case SConnectionsIdx: Tcl_SetObjResult(interp, Tcl_NewIntObj((int) poolPtr->threads.nextid)); break; case SThreadsIdx: sprintf(buf, "min %d", poolPtr->threads.min); Tcl_AppendElement(interp, buf); sprintf(buf, "max %d", poolPtr->threads.max); Tcl_AppendElement(interp, buf); sprintf(buf, "current %d", poolPtr->threads.current); Tcl_AppendElement(interp, buf); sprintf(buf, "idle %d", poolPtr->threads.idle); Tcl_AppendElement(interp, buf); sprintf(buf, "stopping 0"); Tcl_AppendElement(interp, buf); break; case SActiveIdx: case SQueuedIdx: case SAllIdx: Tcl_DStringInit(&ds); if (opt != SQueuedIdx) { AppendConnList(&ds, poolPtr->queue.active.firstPtr, "running"); } if (opt != SActiveIdx) { AppendConnList(&ds, poolPtr->queue.wait.firstPtr, "queued"); } Tcl_DStringResult(interp, &ds); } Ns_MutexUnlock(&poolPtr->lock); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsConnArgProc -- * * Ns_GetProcInfo callback for a running conn thread. * * Results: * None. * * Side effects: * See NsAppendConn. * *---------------------------------------------------------------------- */ void NsConnArgProc(Tcl_DString *dsPtr, void *arg) { ConnData *dataPtr = arg; Ns_MutexLock(&connlock); if (dataPtr->connPtr != NULL) { NsAppendConn(dsPtr, dataPtr->connPtr, "running"); } else { Tcl_DStringAppendElement(dsPtr, ""); } Ns_MutexUnlock(&connlock); } /* *---------------------------------------------------------------------- * * NsConnThread -- * * Main connection service thread. * * Results: * None. * * Side effects: * Connections are removed from the waiting queue and serviced. * *---------------------------------------------------------------------- */ void NsConnThread(void *arg) { ConnData *dataPtr = arg; Pool *poolPtr = dataPtr->poolPtr; Conn *connPtr; Ns_Time wait, *timePtr; char name[100]; int status, ncons; char *msg; double spread; /* * Set the conn thread name. */ Ns_TlsSet(&ctdtls, dataPtr); Ns_MutexLock(&poolPtr->lock); sprintf(name, "-%s:%d-", poolPtr->name, poolPtr->threads.nextid++); Ns_MutexUnlock(&poolPtr->lock); Ns_ThreadSetName(name); /* spread is a value of 1.0 +- specified percentage, i.e. between 0.0 and 2.0 when the configured percentage is 100 */ spread = 1.0 + (2 * poolPtr->threads.spread * Ns_DRand() - poolPtr->threads.spread) / 100.0; ncons = round(poolPtr->threads.maxconns * spread); msg = "exceeded max connections per thread"; /* * Start handling connections. */ Ns_MutexLock(&poolPtr->lock); poolPtr->threads.starting--; poolPtr->threads.idle++; while (poolPtr->threads.maxconns <= 0 || ncons-- > 0) { /* * Wait for a connection to arrive, exiting if one doesn't * arrive in the configured timeout period. */ if (poolPtr->threads.current <= poolPtr->threads.min) { timePtr = NULL; } else { Ns_GetTime(&wait); Ns_IncrTime(&wait, round(poolPtr->threads.timeout * spread), 0); timePtr = &wait; } status = NS_OK; while (!poolPtr->shutdown && status == NS_OK && poolPtr->queue.wait.firstPtr == NULL) { /* nothing is queued, we wait for a queue entry */ poolPtr->threads.waiting++; status = Ns_CondTimedWait(&poolPtr->cond, &poolPtr->lock, timePtr); poolPtr->threads.waiting--; } if (poolPtr->queue.wait.firstPtr == NULL) { msg = "timeout waiting for connection"; break; } /* * Pull the first connection off the waiting list. */ connPtr = poolPtr->queue.wait.firstPtr; poolPtr->queue.wait.firstPtr = connPtr->nextPtr; if (poolPtr->queue.wait.lastPtr == connPtr) { poolPtr->queue.wait.lastPtr = NULL; } connPtr->nextPtr = NULL; connPtr->prevPtr = poolPtr->queue.active.lastPtr; if (poolPtr->queue.active.lastPtr != NULL) { poolPtr->queue.active.lastPtr->nextPtr = connPtr; } poolPtr->queue.active.lastPtr = connPtr; if (poolPtr->queue.active.firstPtr == NULL) { poolPtr->queue.active.firstPtr = connPtr; } poolPtr->threads.idle--; poolPtr->queue.wait.num--; Ns_MutexUnlock(&poolPtr->lock); /* * Run the connection. */ Ns_MutexLock(&connlock); dataPtr->connPtr = connPtr; Ns_MutexUnlock(&connlock); Ns_GetTime(&connPtr->times.run); ConnRun(connPtr); Ns_MutexLock(&connlock); dataPtr->connPtr = NULL; Ns_MutexUnlock(&connlock); /* * Remove from the active list and push on the free list. */ Ns_MutexLock(&poolPtr->lock); if (connPtr->prevPtr != NULL) { connPtr->prevPtr->nextPtr = connPtr->nextPtr; } else { poolPtr->queue.active.firstPtr = connPtr->nextPtr; } if (connPtr->nextPtr != NULL) { connPtr->nextPtr->prevPtr = connPtr->prevPtr; } else { poolPtr->queue.active.lastPtr = connPtr->prevPtr; } poolPtr->threads.idle++; Ns_MutexUnlock(&poolPtr->lock); NsFreeConn(connPtr); Ns_MutexLock(&poolPtr->lock); } /* * Append this thread to list of threads to reap. */ Ns_MutexLock(&joinlock); dataPtr->nextPtr = joinPtr; joinPtr = dataPtr; Ns_MutexUnlock(&joinlock); /* * Mark this thread as no longer active. */ if (poolPtr->shutdown) { msg = "shutdown pending"; } poolPtr->threads.current--; poolPtr->threads.idle--; if (((poolPtr->queue.wait.num > 0 && poolPtr->threads.idle == 0 && poolPtr->threads.starting == 0 ) || (poolPtr->threads.current < poolPtr->threads.min) ) && !poolPtr->shutdown) { /* Recreate a thread when on of the condings hold - there are more queue entries are still waiting, but no thread is either starting or idle, or - there are less than minthreads connection threads alive. */ poolPtr->threads.current ++; Ns_MutexUnlock(&poolPtr->lock); NsCreateConnThread(poolPtr, 0); /* joinThreads == 0 to avoid deadlock */ } else if (poolPtr->queue.wait.num > 0 && poolPtr->threads.waiting > 0) { /* Wake up a waiting thread */ Ns_CondSignal(&poolPtr->cond); Ns_MutexUnlock(&poolPtr->lock); } else { Ns_MutexUnlock(&poolPtr->lock); } Ns_Log(Notice, "exiting: %s", msg); Ns_ThreadExit(dataPtr); } /* *---------------------------------------------------------------------- * * ConnRun -- * * Run a valid connection. * * Results: * None. * * Side effects: * Connection request is read and parsed and the cooresponding * service routine is called. * *---------------------------------------------------------------------- */ static void ConnRun(Conn *connPtr) { Ns_Conn *conn = (Ns_Conn *) connPtr; NsServer *servPtr = connPtr->servPtr; int i, status; Tcl_Encoding encoding = NULL; /* * Initialize the connection encodings and headers. */ connPtr->outputheaders = Ns_SetCreate(NULL); encoding = NsGetInputEncoding(connPtr); if (encoding == NULL) { encoding = NsGetOutputEncoding(connPtr); if (encoding == NULL) { encoding = connPtr->servPtr->urlEncoding; } } Ns_ConnSetUrlEncoding(conn, encoding); if (servPtr->opts.hdrcase != Preserve) { for (i = 0; i < Ns_SetSize(connPtr->headers); ++i) { if (servPtr->opts.hdrcase == ToLower) { Ns_StrToLower(Ns_SetKey(connPtr->headers, i)); } else { Ns_StrToUpper(Ns_SetKey(connPtr->headers, i)); } } } /* * Run the request. */ if (connPtr->request->protocol != NULL && connPtr->request->host != NULL) { status = NsConnRunProxyRequest((Ns_Conn *) connPtr); } else { status = NsRunFilters(conn, NS_FILTER_PRE_AUTH); if (status == NS_OK) { status = Ns_AuthorizeRequest(servPtr->server, connPtr->request->method, connPtr->request->url, connPtr->authUser, connPtr->authPasswd, connPtr->peer); switch (status) { case NS_OK: status = NsRunFilters(conn, NS_FILTER_POST_AUTH); if (status == NS_OK) { status = Ns_ConnRunRequest(conn); } break; case NS_FORBIDDEN: Ns_ConnReturnForbidden(conn); break; case NS_UNAUTHORIZED: Ns_ConnReturnUnauthorized(conn); break; case NS_ERROR: default: Ns_ConnReturnInternalError(conn); break; } } else if (status != NS_FILTER_RETURN) { /* if not ok or filter_return, then the pre-auth filter coughed * an error. We are not going to proceed, but also we * can't count on the filter to have sent a response * back to the client. So, send an error response. */ Ns_ConnReturnInternalError(conn); status = NS_FILTER_RETURN; /* to allow tracing to happen */ } } Ns_ConnClose(conn); if (status == NS_OK || status == NS_FILTER_RETURN) { status = NsRunFilters(conn, NS_FILTER_TRACE); if (status == NS_OK) { (void) NsRunFilters(conn, NS_FILTER_VOID_TRACE); NsRunTraces(conn); } } /* * Cleanup the connections, calling any registered cleanup traces * followed by free the connection interp if it was used. */ NsRunCleanups(conn); NsFreeConnInterp(connPtr); if (connPtr->type != NULL) { Ns_ConnSetType(conn, NULL); } if (connPtr->query != NULL) { Ns_ConnClearQuery(conn); } if (connPtr->outputheaders != NULL) { Ns_SetFree(connPtr->outputheaders); connPtr->outputheaders = NULL; } Ns_DStringTrunc(&connPtr->obuf, 0); } /* *---------------------------------------------------------------------- * * NsCreateConnThread -- * * Create a connection thread. * * Results: * None. * * Side effects: * New thread. * *---------------------------------------------------------------------- */ void NsCreateConnThread(Pool *poolPtr, int joinThreads) { ConnData *dataPtr; /* * Reap any dead threads. */ if (joinThreads) { NsJoinConnThreads(); } /* * Create a new connection thread. */ dataPtr = ns_malloc(sizeof(ConnData)); dataPtr->poolPtr = poolPtr; dataPtr->connPtr = NULL; Ns_MutexLock(&poolPtr->lock); poolPtr->threads.starting ++; Ns_MutexUnlock(&poolPtr->lock); Ns_ThreadCreate(NsConnThread, dataPtr, 0, &dataPtr->thread); } /* *---------------------------------------------------------------------- * * NsJoinConnThreads -- * * Join any connection threads which have exited. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsJoinConnThreads(void) { ConnData *firstPtr; void *arg; Ns_MutexLock(&joinlock); firstPtr = joinPtr; joinPtr = NULL; Ns_MutexUnlock(&joinlock); while (firstPtr != NULL) { Ns_ThreadJoin(&firstPtr->thread, &arg); firstPtr = firstPtr->nextPtr; ns_free(arg); } } /* *---------------------------------------------------------------------- * * NsAppendConn -- * * Append connection data to a dstring. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsAppendConn(Tcl_DString *dsPtr, Conn *connPtr, char *state) { Ns_Time now, diff; Ns_GetTime(&now); Ns_DiffTime(&now, &connPtr->times.queue, &diff); Tcl_DStringStartSublist(dsPtr); Ns_DStringPrintf(dsPtr, "%d", connPtr->id); Tcl_DStringAppendElement(dsPtr, Ns_ConnPeer((Ns_Conn *) connPtr)); Tcl_DStringAppendElement(dsPtr, state); NsAppendRequest(dsPtr, connPtr->request); Ns_DStringPrintf(dsPtr, " %ld.%ld %d", diff.sec, diff.usec, connPtr->nContentSent); Tcl_DStringEndSublist(dsPtr); } /* *---------------------------------------------------------------------- * * AppendConnList -- * * Append list of connection data to a dstring. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void AppendConnList(Tcl_DString *dsPtr, Conn *firstPtr, char *state) { while (firstPtr != NULL) { NsAppendConn(dsPtr, firstPtr, state); firstPtr = firstPtr->nextPtr; } } aolserver4-4.5.1/nsd/tclcache.c0000644000175000017500000004502211141142014016115 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.lcs.mit.edu/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is ArsDigita code and related documentation * distributed by ArsDigita. * * The Initial Developer of the Original Code is ArsDigita., * Portions created by ArsDigita are Copyright (C) 1999 ArsDigita. * All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * tclcache.c -- * * Tcl API for cache.c. Based on work from the nscache module. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/tclcache.c,v 1.3 2009/01/31 21:35:08 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * The following structure maintains a Tcl cache including an underlying size-based * Ns_Cache and options for a max time to live (default: infiniate) and timeout * for threads waiting on other threads to update a value (default: 2 seconds). */ typedef struct TclCache { Ns_Cache *cache; char *name; int namelen; Ns_Time atime; Ns_Time wait; Ns_Time ttl; int expires; } TclCache; /* * The following structure defines a value stored in the cache which is string * with optional expiration time. Values will store any string of bytes from * the corresponding Tcl_Obj but no type information will be preserved. */ typedef struct Val { Ns_Time expires; int length; char string[1]; } Val; static int CreateCacheObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv); static int SetResult(Tcl_Interp *interp, Val *valPtr, char *varName); static Val *NewVal(TclCache *cachePtr, Tcl_Obj *objPtr, Ns_Time *nowPtr); static int Expired(TclCache *cachePtr, Val *valPtr, Ns_Time *nowPtr); static int SetCacheFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); static void UpdateStringOfCache(Tcl_Obj *objPtr); /* * The following structure defines a Tcl type for caches which maintains a pointer * the the cooresponding TclCache structure. */ static Tcl_ObjType cacheType = { "ns:cache", (Tcl_FreeInternalRepProc *) NULL, (Tcl_DupInternalRepProc *) NULL, UpdateStringOfCache, SetCacheFromAny }; /* * The following static variables are defined in this file. */ static Tcl_HashTable caches; /* Table of all caches, process wide. */ static Ns_Mutex lock; /* Lock around list table of caches. */ /* *---------------------------------------------------------------------- * * NsTclInitCacheType -- * * Initialize the type for Tcl caches. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsTclInitCacheType(void) { Ns_MutexSetName(&lock, "nstcl:caches"); Tcl_InitHashTable(&caches, TCL_STRING_KEYS); Tcl_RegisterObjType(&cacheType); } /* *---------------------------------------------------------------------- * * NsTclCacheObjCmd -- * * Handle the ns_cache command. See the documentation for details. * Note that mixing the "eval" option with other options (e.g., * "get", "set", "incr", etc.) doesn't make sense. In particular, * there's no generally correct way to handle a "get" or "set" * encountering an in-progress "eval", i.e., a NULL value. In these * case the code below returns an immediate error. * * Results: * Standard Tcl result. * * Side effects: * May cause the current thread to wait for another thread to * update a given entry with the eval option. * *---------------------------------------------------------------------- */ int NsTclCacheObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { static CONST char *opts[] = { "create", "names", "eval", "set", "get", "incr", "append", "lappend", "flush", NULL }; enum { CCreateIdx, CNamesIdx, CEvalIdx, CSetIdx, CGetIdx, CIncrIdx, CAppendIdx, CLappendIdx, CFlushIdx } opt; TclCache *cachePtr; Val *valPtr; int i, cur, err, new, status; char *key, *pattern, *var; Ns_Entry *entry; Ns_CacheSearch search; Tcl_Obj *objPtr = NULL; Ns_Time now, timeout; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, (int *) &opt) != TCL_OK) { return TCL_ERROR; } /* * Handle create directly as all other commands require a valid * cache argument. */ if (opt == CCreateIdx) { return CreateCacheObjCmd(arg, interp, objc, objv); } if (objc < 3) { Tcl_WrongNumArgs(interp, 2, objv, "cache ?args ...?"); return TCL_ERROR; } if (Tcl_ConvertToType(interp, objv[2], &cacheType) != TCL_OK) { return TCL_ERROR; } cachePtr = objv[2]->internalRep.otherValuePtr; Ns_GetTime(&now); err = 0; switch (opt) { case CCreateIdx: /* NB: Silence compiler warning. */ break; case CNamesIdx: /* * Return keys for all cache entries, flushing any expired items first. */ if (objc < 4) { pattern = NULL; } else { pattern = Tcl_GetString(objv[3]); } Ns_CacheLock(cachePtr->cache); entry = Ns_CacheFirstEntry(cachePtr->cache, &search); while (entry != NULL) { key = Ns_CacheKey(entry); valPtr = Ns_CacheGetValue(entry); if (valPtr != NULL) { if (Expired(cachePtr, valPtr, &now)) { Ns_CacheFlushEntry(entry); } else if (pattern == NULL || Tcl_StringMatch(key, pattern)) { Tcl_AppendElement(interp, key); } } entry = Ns_CacheNextEntry(&search); } Ns_CacheUnlock(cachePtr->cache); break; case CFlushIdx: /* * Flush one or more entries from the cache. */ Ns_CacheLock(cachePtr->cache); for (i = 3; i < objc; ++i) { key = Tcl_GetString(objv[i]); entry = Ns_CacheFindEntry(cachePtr->cache, key); if (entry != NULL && (valPtr = Ns_CacheGetValue(entry)) != NULL) { Ns_CacheFlushEntry(entry); } } Ns_CacheUnlock(cachePtr->cache); break; case CGetIdx: /* * Get the current value if not expired and not currently being refreshed. */ if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "key ?valueVar?"); return TCL_ERROR; } valPtr = NULL; key = Tcl_GetString(objv[3]); Ns_CacheLock(cachePtr->cache); entry = Ns_CacheFindEntry(cachePtr->cache, key); if (entry != NULL && (valPtr = Ns_CacheGetValue(entry)) != NULL && Expired(cachePtr, valPtr, &now)) { Ns_CacheFlushEntry(entry); valPtr = NULL; } if (valPtr != NULL) { var = (objc < 5 ? NULL : Tcl_GetString(objv[4])); err = SetResult(interp, valPtr, var); } Ns_CacheUnlock(cachePtr->cache); if (err) { return TCL_ERROR; } else if (objc == 5) { Tcl_SetBooleanObj(Tcl_GetObjResult(interp), valPtr ? 1 : 0); } else if (valPtr == NULL) { Tcl_AppendResult(interp, "no such entry: ", key, NULL); return TCL_ERROR; } break; case CSetIdx: /* * Set a value, ignoring current state (if any) of the entry. */ if (objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "key value"); return TCL_ERROR; } valPtr = NewVal(cachePtr, objv[4], &now); key = Tcl_GetString(objv[3]); Ns_CacheLock(cachePtr->cache); entry = Ns_CacheCreateEntry(cachePtr->cache, key, &new); Ns_CacheSetValueSz(entry, valPtr, valPtr->length); Ns_CacheUnlock(cachePtr->cache); Tcl_SetObjResult(interp, objv[4]); break; case CIncrIdx: /* * Increment a value, assuming the previous value is a valid integer. * No value or expired value is treated as starting at zero. */ if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "key ?incr?"); return TCL_ERROR; } if (objc < 5) { i = 1; } else if (Tcl_GetIntFromObj(interp, objv[4], &i) != TCL_OK) { return TCL_ERROR; } err = 0; key = Tcl_GetString(objv[3]); Ns_CacheLock(cachePtr->cache); entry = Ns_CacheCreateEntry(cachePtr->cache, key, &new); if (!new && (valPtr = Ns_CacheGetValue(entry)) != NULL && Expired(cachePtr, valPtr, &now)) { Ns_CacheUnsetValue(entry); new = 1; } if (new) { cur = 0; } else if (valPtr == NULL) { Tcl_AppendResult(interp, "entry busy: ", key, NULL); err = 1; } else if (Tcl_GetInt(interp, valPtr->string, &cur) != TCL_OK) { err = 1; } if (!err) { objPtr = Tcl_NewIntObj(cur + i); valPtr = NewVal(cachePtr, objPtr, &now); Ns_CacheSetValueSz(entry, valPtr, valPtr->length); } Ns_CacheUnlock(cachePtr->cache); if (err) { return TCL_ERROR; } Tcl_SetObjResult(interp, objPtr); break; case CAppendIdx: case CLappendIdx: /* * Append or list append one or more elements to current value. */ if (objc < 5) { Tcl_WrongNumArgs(interp, 3, objv, "key str ?str ...?"); return TCL_ERROR; } err = 0; key = Tcl_GetString(objv[3]); objPtr = Tcl_NewObj(); Ns_CacheLock(cachePtr->cache); entry = Ns_CacheCreateEntry(cachePtr->cache, key, &new); if (!new) { valPtr = Ns_CacheGetValue(entry); if (valPtr == NULL) { Tcl_AppendResult(interp, "entry busy: ", key, NULL); err = 1; } else if (!Expired(cachePtr, valPtr, &now)) { Tcl_AppendToObj(objPtr, valPtr->string, valPtr->length); } } for (i = 4; !err && i < objc; ++i) { if (opt == CAppendIdx) { Tcl_AppendObjToObj(objPtr, objv[i]); } else if (Tcl_ListObjAppendElement(interp, objPtr, objv[i]) != TCL_OK) { err = 1; } } if (!err) { Ns_CacheUnsetValue(entry); valPtr = NewVal(cachePtr, objPtr, &now); Ns_CacheSetValueSz(entry, valPtr, valPtr->length); } Ns_CacheUnlock(cachePtr->cache); if (err) { return TCL_ERROR; } Tcl_SetObjResult(interp, objPtr); break; case CEvalIdx: /* * Get a value from cache, setting or refreshing the value with * given script when necessary. A NULL value is maintained in the * cache during the update script to avoid multiple threads updating * the same value at once. */ if (objc != 5) { Tcl_WrongNumArgs(interp, 3, objv, "key script"); return TCL_ERROR; } status = TCL_OK; key = Tcl_GetString(objv[3]); Ns_CacheLock(cachePtr->cache); entry = Ns_CacheCreateEntry(cachePtr->cache, key, &new); if (!new && (valPtr = Ns_CacheGetValue(entry)) == NULL) { /* * Wait for another thread to complete an update. */ status = NS_OK; timeout = now; Ns_IncrTime(&timeout, cachePtr->wait.sec, cachePtr->wait.usec); do { status = Ns_CacheTimedWait(cachePtr->cache, &timeout); } while (status == NS_OK && (entry = Ns_CacheFindEntry(cachePtr->cache, key)) != NULL && (valPtr = Ns_CacheGetValue(entry)) == NULL); if (entry == NULL) { Tcl_AppendResult(interp, "update failed: ", key, NULL); err = 1; } else if (valPtr == NULL) { Tcl_AppendResult(interp, "timeout waiting for update: ", key, NULL); err = 1; } else { Ns_GetTime(&now); } } if (!err) { if (!new && Expired(cachePtr, valPtr, &now)) { Ns_CacheUnsetValue(entry); new = 1; } if (!new) { /* * Return current value. */ valPtr = Ns_CacheGetValue(entry); err = SetResult(interp, valPtr, NULL); } else { /* * Refresh the entry. */ Ns_CacheUnlock(cachePtr->cache); status = Tcl_EvalObjEx(interp, objv[4], 0); Ns_CacheLock(cachePtr->cache); entry = Ns_CacheCreateEntry(cachePtr->cache, key, &new); if (status == TCL_OK || status == TCL_RETURN) { objPtr = Tcl_GetObjResult(interp); valPtr = NewVal(cachePtr, objPtr, &now); Ns_CacheSetValueSz(entry, valPtr, valPtr->length); if (status == TCL_RETURN) { status = TCL_OK; } } else { Ns_CacheFlushEntry(entry); } Ns_CacheBroadcast(cachePtr->cache); } } Ns_CacheUnlock(cachePtr->cache); if (err) { return TCL_ERROR; } return status; break; } return TCL_OK; } /* *---------------------------------------------------------------------- * * CreateCacheObjCmd -- * * Sub-command to create a new cache. * * Results: * Standard Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int CreateCacheObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { int i, new, size, expires; Ns_Time ttl, wait; Tcl_HashEntry *hPtr; TclCache *cachePtr; char *cache; static CONST char *flags[] = { "-timeout", "-size", "-thread", "-server", "-maxwait", NULL }; enum { FTimeoutIdx, FSizeIdx, FThreadIdx, FServerIdx, FWaitIdx } flag; if (objc < 3 || !(objc & 1)) { Tcl_WrongNumArgs(interp, 2, objv, "?-flag val -flag val...?"); return TCL_ERROR; } cache = Tcl_GetString(objv[2]); wait.sec = 2; ttl.sec = 60; wait.usec = ttl.usec = 0; expires = 0; size = 1024 * 1000; for (i = 3; i < objc; i += 2) { if (Tcl_GetIndexFromObj(interp, objv[i], flags, "flag", 0, (int *) &flag) != TCL_OK) { return TCL_ERROR; } switch (flag) { case FSizeIdx: if (Tcl_GetIntFromObj(interp, objv[i+1], &size) != TCL_OK) { return TCL_ERROR; } if (size < 0) { Tcl_AppendResult(interp, "invalid size: ", Tcl_GetString(objv[i+1]), NULL); return TCL_ERROR; } break; case FTimeoutIdx: if (Ns_TclGetTimeFromObj(interp, objv[i+1], &ttl) != TCL_OK) { return TCL_ERROR; } expires = 1; break; case FWaitIdx: if (Ns_TclGetTimeFromObj(interp, objv[i+1], &wait) != TCL_OK) { return TCL_ERROR; } break; case FThreadIdx: case FServerIdx: /* NB: Previous nscache options currently ignored. */ break; } } Ns_MutexLock(&lock); hPtr = Tcl_CreateHashEntry(&caches, cache, &new); if (new) { cachePtr = ns_malloc(sizeof(TclCache)); cachePtr->name = Tcl_GetHashKey(&caches, hPtr); cachePtr->namelen = strlen(cachePtr->name); cachePtr->ttl = ttl; cachePtr->wait = wait; cachePtr->expires = expires; cachePtr->cache = Ns_CacheCreateSz(cache, TCL_STRING_KEYS, (size_t) size, ns_free); Tcl_SetHashValue(hPtr, cachePtr); } Ns_MutexUnlock(&lock); if (!new) { Tcl_AppendResult(interp, "cache already exists: ", cache, NULL); return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * * Expired -- * * Check if a given value has expired. * * Results: * 0 if still valid, 1 if expired. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int Expired(TclCache *cachePtr, Val *valPtr, Ns_Time *nowPtr) { if (cachePtr->expires && Ns_DiffTime(&valPtr->expires, nowPtr, NULL) < 0) { return 1; } return 0; } /* *---------------------------------------------------------------------- * * NewVal -- * * Allocate a new Val object from the given Tcl_Obj. * * Results: * Pointer to new Val. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Val * NewVal(TclCache *cachePtr, Tcl_Obj *objPtr, Ns_Time *nowPtr) { Val *valPtr; char *str; int len; str = Tcl_GetStringFromObj(objPtr, &len); valPtr = ns_malloc(sizeof(Val) + len); valPtr->length = len; memcpy(valPtr->string, str, len); valPtr->string[len] = '\0'; if (cachePtr->expires) { valPtr->expires = *nowPtr; Ns_IncrTime(&valPtr->expires, cachePtr->ttl.sec, cachePtr->ttl.usec); } return valPtr; } /* *---------------------------------------------------------------------- * * SetResult -- * * Set a Val as the current Tcl result. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int SetResult(Tcl_Interp *interp, Val *valPtr, char *varName) { Tcl_Obj *objPtr; int err = 0; objPtr = Tcl_NewStringObj(valPtr->string, valPtr->length); Tcl_IncrRefCount(objPtr); if (varName == NULL) { Tcl_SetObjResult(interp, objPtr); } else if (Tcl_SetVar2Ex(interp, varName, NULL, objPtr, TCL_LEAVE_ERR_MSG) == NULL) { err = 1; } Tcl_DecrRefCount(objPtr); return err; } /* *---------------------------------------------------------------------- * * UpdateStringOfCache -- * * Callback to set the string of a TclCache Tcl_Obj. * * Results: * None. * * Side effects: * Will update Tcl_Obj's bytes and length. * *---------------------------------------------------------------------- */ static void UpdateStringOfCache(Tcl_Obj *objPtr) { TclCache *cachePtr = (TclCache *) objPtr->internalRep.otherValuePtr; objPtr->length = cachePtr->namelen; objPtr->bytes = ckalloc(objPtr->length + 1); strcpy(objPtr->bytes, cachePtr->name); } /* *---------------------------------------------------------------------- * * SetCacheFromAny -- * * Set a Tcl_Obj internal rep to be a pointer to the TclCache * looked up by string name. * * Results: * TCL_OK if valid cache, TCL_ERROR otherwise. * * Side effects: * Will leave an error message in given Tcl_Interp. * *---------------------------------------------------------------------- */ static int SetCacheFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr) { Tcl_ObjType *typePtr = objPtr->typePtr; TclCache *cachePtr; Tcl_HashEntry *hPtr; char *cache; cache = Tcl_GetString(objPtr); Ns_MutexLock(&lock); hPtr = Tcl_FindHashEntry(&caches, cache); if (hPtr != NULL) { cachePtr = Tcl_GetHashValue(hPtr); } Ns_MutexUnlock(&lock); if (hPtr == NULL) { Tcl_AppendResult(interp, "no such cache: ", cache, NULL); return TCL_ERROR; } if (typePtr != NULL && typePtr->freeIntRepProc != NULL) { (*typePtr->freeIntRepProc)(objPtr); } objPtr->typePtr = &cacheType; objPtr->internalRep.otherValuePtr = cachePtr; Tcl_InvalidateStringRep(objPtr); objPtr->length = 0; /* ensure there's no stumbling */ return TCL_OK; } aolserver4-4.5.1/nsd/return.c0000644000175000017500000007551210453352232015707 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * return.c -- * * Functions that return data to a browser. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/return.c,v 1.50 2006/07/07 03:27:22 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * Local functions defined in this file */ static void RegisterRedirect(NsServer *servPtr, int status, char *url); static int ReturnRedirect(Ns_Conn *conn, int status, int *resultPtr); static int ReturnOpen(Ns_Conn *conn, int status, char *type, Tcl_Channel chan, FILE *fp, int fd, off_t off, int len); static int ReturnData(Ns_Conn *conn, int status, char *data, int len, char *type, int direct); static int HdrEq(Ns_Set *hdrs, char *key, char *value); static int CheckKeep(Ns_Conn *conn, int status); /* * This structure connections HTTP response codes to their descriptions. */ static struct { int status; char *reason; } reasons[] = { {100, "Continue"}, {101, "Switching Protocols"}, {102, "Processing"}, {200, "OK"}, {201, "Created"}, {202, "Accepted"}, {203, "Non-Authoritative Information"}, {204, "No Content"}, {205, "Reset Content"}, {206, "Partial Content"}, {207, "Multi-Status"}, {300, "Multiple Choices"}, {301, "Moved"}, {302, "Found"}, {303, "See Other"}, {304, "Not Modified"}, {305, "Use Proxy"}, {307, "Temporary Redirect"}, {400, "Bad Request"}, {401, "Unauthorized"}, {402, "Payment Required"}, {403, "Forbidden"}, {404, "Not Found"}, {405, "Method Not Allowed"}, {406, "Not Acceptable"}, {407, "Proxy Authentication Required"}, {408, "Request Timeout"}, {409, "Conflict"}, {410, "Gone"}, {411, "Length Required"}, {412, "Precondition Failed"}, {413, "Request Entity Too Large"}, {414, "Request-URI Too Long"}, {415, "Unsupported Media Type"}, {416, "Requested Range Not Satisfiable"}, {417, "Expectation Failed"}, {422, "Unprocessable Entity"}, {423, "Locked"}, {424, "Method Failure"}, {425, "Insufficient Space On Resource"}, {500, "Internal Server Error"}, {501, "Not Implemented"}, {502, "Bad Gateway"}, {503, "Service Unavailable"}, {504, "Gateway Timeout"}, {505, "HTTP Version Not Supported"}, {507, "Insufficient Storage"} }; /* * Static variables defined in this file. */ static int nreasons = (sizeof(reasons) / sizeof(reasons[0])); /* *---------------------------------------------------------------------- * * Ns_RegisterRedirect, Ns_RegisterReturn -- * * Associate a URL with a status. Rather than return the * default error page for this status, a redirect will be * issued to the url. * * Results: * None. * * Side effects: * A NULL url will remove a previous redirect, if any. * *---------------------------------------------------------------------- */ void Ns_RegisterReturn(int status, char *url) { RegisterRedirect(NsGetInitServer(), status, url); } void Ns_RegisterRedirect(char *server, int status, char *url) { RegisterRedirect(NsGetServer(server), status, url); } static void RegisterRedirect(NsServer *servPtr, int status, char *url) { Tcl_HashEntry *hPtr; int new; if (servPtr != NULL) { hPtr = Tcl_CreateHashEntry(&servPtr->request.redirect, (char *) status, &new); if (!new) { ns_free(Tcl_GetHashValue(hPtr)); } if (url == NULL) { Tcl_DeleteHashEntry(hPtr); } else { Tcl_SetHashValue(hPtr, ns_strdup(url)); } } } /* *---------------------------------------------------------------------- * * Ns_ConnConstructHeaders -- * * Put the header of an HTTP response into the dstring. * * Results: * None. * * Side effects: * Content length and connection-keepalive headers will be added * if possible. * *---------------------------------------------------------------------- */ void Ns_ConnConstructHeaders(Ns_Conn *conn, Ns_DString *dsPtr) { Conn *connPtr = (Conn *) conn; int i, status; char *reason; char *value, *keep; char *key; /* * Construct the HTTP response status line. */ status = Ns_ConnGetStatus(conn); reason = "Unknown Reason"; for (i = 0; i < nreasons; i++) { if (reasons[i].status == status) { reason = reasons[i].reason; break; } } Ns_DStringPrintf(dsPtr, "HTTP/%u.%u %d %s\r\n", _MIN((connPtr->major), nsconf.http.major), _MIN((connPtr->minor), nsconf.http.minor), status, reason); /* * Output any headers. */ if (conn->outputheaders != NULL) { /* * Set keep-alive if the driver and connection support it. */ if (!Ns_ConnGetKeepAliveFlag(conn) && CheckKeep(conn, status)) { Ns_ConnSetKeepAliveFlag(conn, NS_TRUE); } if (Ns_ConnGetKeepAliveFlag(conn)) { keep = "keep-alive"; } else { keep = "close"; } Ns_ConnCondSetHeaders(conn, "Connection", keep); /* * Output all headers. */ for (i = 0; i < Ns_SetSize(conn->outputheaders); i++) { key = Ns_SetKey(conn->outputheaders, i); value = Ns_SetValue(conn->outputheaders, i); if (key != NULL && value != NULL) { Ns_DStringAppend(dsPtr, key); Ns_DStringNAppend(dsPtr, ": ", 2); Ns_DStringAppend(dsPtr, value); Ns_DStringNAppend(dsPtr, "\r\n", 2); } } } Ns_DStringNAppend(dsPtr, "\r\n", 2); } /* *---------------------------------------------------------------------- * * Ns_ConnQueueHeaders -- * * Format basic headers to be sent on the connection. * * Results: * None. * * Side effects: * See Ns_ConnConstructHeaders. * *---------------------------------------------------------------------- */ void Ns_ConnQueueHeaders(Ns_Conn *conn, int status) { Conn *connPtr = (Conn *) conn; if (!(conn->flags & NS_CONN_SENTHDRS)) { Ns_ConnSetStatus(conn, status); if (!(conn->flags & NS_CONN_SKIPHDRS)) { Ns_ConnConstructHeaders(conn, &connPtr->obuf); connPtr->nContentSent -= connPtr->obuf.length; } conn->flags |= NS_CONN_SENTHDRS; } } /* *---------------------------------------------------------------------- * * Ns_ConnFlushHeaders -- * * Send out a well-formed set of HTTP headers with the given * status. * * Results: * Number of bytes written. * * Side effects: * See Ns_ConnQueueHeaders. * *---------------------------------------------------------------------- */ int Ns_ConnFlushHeaders(Ns_Conn *conn, int status) { Ns_ConnQueueHeaders(conn, status); return Ns_WriteConn(conn, NULL, 0); } /* *---------------------------------------------------------------------- * * Ns_ConnSetHeaders -- * * Add an output header. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnSetHeaders(Ns_Conn *conn, char *field, char *value) { Ns_SetPut(conn->outputheaders, field, value); } /* *---------------------------------------------------------------------- * * Ns_ConnCondSetHeaders -- * * Add an output header, only if it doesn't already exist. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnCondSetHeaders(Ns_Conn *conn, char *field, char *value) { if (Ns_SetIGet(conn->outputheaders, field) == NULL) { Ns_SetPut(conn->outputheaders, field, value); } } /* *---------------------------------------------------------------------- * * Ns_ConnReplaceHeaders -- * * Free the existing outpheaders and set them to a copy of * newheaders. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnReplaceHeaders(Ns_Conn *conn, Ns_Set *newheaders) { Ns_SetFree(conn->outputheaders); conn->outputheaders = Ns_SetCopy(newheaders); } /* *---------------------------------------------------------------------- * * Ns_ConnSetRequiredHeaders -- * * Set a sane set of minimal headers for any response: * MIME-Version, Date, Server, Content-Type, Content-Length * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnSetRequiredHeaders(Ns_Conn *conn, char *newtype, int length) { Conn *connPtr = (Conn *) conn; char *type; Ns_DString ds; /* * Set the standard mime and date headers. */ Ns_DStringInit(&ds); Ns_ConnCondSetHeaders(conn, "MIME-Version", "1.0"); Ns_ConnCondSetHeaders(conn, "Date", Ns_HttpTime(&ds, NULL)); Ns_DStringTrunc(&ds, 0); /* * Set the standard server header, prepending "NaviServer/2.0" * if AOLpress support is enabled. */ if (connPtr->servPtr->opts.flags & SERV_AOLPRESS) { Ns_DStringAppend(&ds, "NaviServer/2.0 "); } Ns_DStringVarAppend(&ds, Ns_InfoServerName(), "/", Ns_InfoServerVersion(), NULL); Ns_ConnCondSetHeaders(conn, "Server", ds.string); /* * Set the type and/or length headers if provided. Note * that a valid length is required for connection keep-alive. */ type = Ns_ConnGetType(conn); if (type != newtype) { Ns_ConnSetType(conn, newtype); type = Ns_ConnGetType(conn); } if (type) { Ns_ConnSetTypeHeader(conn, type); } if (length >= 0) { Ns_ConnSetLengthHeader(conn, length); } Ns_DStringFree(&ds); } /* *---------------------------------------------------------------------- * * Ns_ConnSetTypeHeader -- * * Sets the Content-Type HTTP output header * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnSetTypeHeader(Ns_Conn *conn, char *type) { Ns_ConnSetHeaders(conn, "Content-Type", type); } /* *---------------------------------------------------------------------- * * Ns_ConnSetLengthHeader -- * * Set the Content-Length output header. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnSetLengthHeader(Ns_Conn *conn, int length) { char buf[100]; Conn *connPtr; connPtr = (Conn *) conn; connPtr->responseLength = length; sprintf(buf, "%d", length); Ns_ConnSetHeaders(conn, "Content-Length", buf); } /* *---------------------------------------------------------------------- * * Ns_ConnSetLastModifiedHeader -- * * Set the Last-Modified output header if it isn't already set. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnSetLastModifiedHeader(Ns_Conn *conn, time_t *mtime) { Ns_DString ds; Ns_DStringInit(&ds); Ns_ConnCondSetHeaders(conn, "Last-Modified", Ns_HttpTime(&ds, mtime)); Ns_DStringFree(&ds); } /* *---------------------------------------------------------------------- * * Ns_ConnSetExpiresHeader -- * * Set the Expires output header. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ConnSetExpiresHeader(Ns_Conn *conn, char *expires) { Ns_ConnSetHeaders(conn, "Expires", expires); } /* *---------------------------------------------------------------------- * * Ns_ConnPrintfHeader -- * * Write a printf-style string right to the conn. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will write to the conn; you're expected to format this like a * header (like "foo: bar\n"). * *---------------------------------------------------------------------- */ int Ns_ConnPrintfHeader(Ns_Conn *conn, char *fmt,...) { int result; Ns_DString ds; va_list ap; if (conn->request == NULL || conn->request->version < 1.0) { return NS_OK; } Ns_DStringInit(&ds); va_start(ap, fmt); Ns_DStringVPrintf(&ds, fmt, ap); va_end(ap); result = Ns_ConnSendDString(conn, &ds); Ns_DStringFree(&ds); return result; } /* *---------------------------------------------------------------------- * * Ns_ConnResetReturn -- * * Reset the connection, clearing any queued headers, so a * basic result may be sent. * * Results: * NS_OK if connection could be cleared, NS_ERROR if data has * already been sent. * * Side effects: * Will truncate queued headers. * *---------------------------------------------------------------------- */ int Ns_ConnResetReturn(Ns_Conn *conn) { Conn *connPtr = (Conn *) conn; if (connPtr->nContentSent) { return NS_ERROR; } /* * Clear queued headers and reset status and type. */ Ns_DStringFree(&connPtr->obuf); Ns_ConnSetType(conn, NULL); Ns_ConnSetStatus(conn, 0); return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_ConnReturnAdminNotice -- * * Return a short notice to a client to contact system * administrator. * * Results: * See Ns_ConnReturnNotice * * Side effects: * See Ns_ConnReturnNotice * *---------------------------------------------------------------------- */ int Ns_ConnReturnAdminNotice(Ns_Conn *conn, int status, char *title, char *notice) { return Ns_ConnReturnNotice(conn, status, title, notice); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnNotice -- * * Return a short notice to a client. * * Results: * See Ns_ConnReturnHtml. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_ConnReturnNotice(Ns_Conn *conn, int status, char *title, char *notice) { Conn *connPtr = (Conn *) conn; NsServer *servPtr = connPtr->servPtr; Ns_DString ds; int result; Ns_DStringInit(&ds); if (title == NULL) { title = "Server Message"; } Ns_DStringVarAppend(&ds, "\n" "\n\n" "", title, "\n" "\n\n" "

", title, "

\n", NULL); if (notice != NULL) { Ns_DStringVarAppend(&ds, notice, "\n", NULL); } /* * Detailed server information at the bottom of the page. */ if (servPtr->opts.flags & SERV_NOTICEDETAIL) { Ns_DStringVarAppend(&ds, "

", Ns_InfoServerName(), "/", Ns_InfoServerVersion(), " on ", Ns_ConnLocation(conn), "

\n", NULL); } /* * Padding that suppresses those horrible MSIE friendly errors. * NB: Because we pad inside the body we may pad more than needed. */ if (status >= 400) { while (ds.length < servPtr->limits.errorminsize) { Ns_DStringAppend(&ds, " "); } } Ns_DStringVarAppend(&ds, "\n\n", NULL); result = Ns_ConnReturnHtml(conn, status, ds.string, ds.length); Ns_DStringFree(&ds); return result; } /* *---------------------------------------------------------------------- * * Ns_ConnReturnData -- * * Sets required headers, dumps them, and then writes your data. * * Results: * NS_OK/NS_ERROR * * Side effects: * May set numerous headers, will close connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnData(Ns_Conn *conn, int status, char *data, int len, char *type) { return ReturnData(conn, status, data, len, type, 1); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnCharData -- * * Sets required headers, dumps them, and then writes your data. * * Results: * NS_OK/NS_ERROR * * Side effects: * May set numerous headers, will close connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnCharData(Ns_Conn *conn, int status, char *data, int len, char *type) { return ReturnData(conn, status, data, len, type, 0); } /* *---------------------------------------------------------------------- * * ReturnData -- * * Sets required headers, dumps them, and then writes your data. * If direct is true, calls Ns_ConnFlushDirect which bypasses * character encoding and/or gzip compression. * * Results: * NS_OK/NS_ERROR * * Side effects: * See Ns_ConnFlush. * *---------------------------------------------------------------------- */ static int ReturnData(Ns_Conn *conn, int status, char *data, int len, char *type, int direct) { Ns_ConnSetStatus(conn, status); Ns_ConnSetType(conn, type); if (direct) { return Ns_ConnFlushDirect(conn, data, len, 0); } return Ns_ConnFlush(conn, data, len, 0); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnHtml -- * * Return data of type text/html to client. * * Results: * NS_OK/NS_ERROR * * Side effects: * See Ns_ConnReturnData * *---------------------------------------------------------------------- */ int Ns_ConnReturnHtml(Ns_Conn *conn, int status, char *html, int len) { return Ns_ConnReturnCharData(conn, status, html, len, "text/html"); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnOk -- * * Return a status message to the client. * * Results: * See Ns_ReturnStatus * * Side effects: * See Ns_ReturnStatus * *---------------------------------------------------------------------- */ int Ns_ConnReturnOk(Ns_Conn *conn) { return Ns_ConnReturnStatus(conn, 200); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnNoResponse -- * * Return a status message to the client. * * Results: * See Ns_ReturnStatus * * Side effects: * See Ns_ReturnStatus * *---------------------------------------------------------------------- */ int Ns_ConnReturnNoResponse(Ns_Conn *conn) { return Ns_ConnReturnStatus(conn, 204); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnRedirect -- * * Return a 302 Redirection to the client, or 204 No Content if * url is null. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnRedirect(Ns_Conn *conn, char *url) { Ns_DString ds, msg; int result; Ns_DStringInit(&ds); Ns_DStringInit(&msg); if (url != NULL) { if (*url == '/') { Ns_DStringAppend(&ds, Ns_ConnLocation(conn)); } Ns_DStringAppend(&ds, url); Ns_ConnSetHeaders(conn, "Location", ds.string); Ns_DStringVarAppend(&msg, "
The requested URL has moved here.", NULL); result = Ns_ConnReturnNotice(conn, 302, "Redirection", msg.string); } else { result = Ns_ConnReturnNotice(conn, 204, "No Content", msg.string); } Ns_DStringFree(&msg); Ns_DStringFree(&ds); return result; } /* *---------------------------------------------------------------------- * * Ns_ConnReturnBadRequest -- * * Return an 'invalid request' HTTP status line with an error * message. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnBadRequest(Ns_Conn *conn, char *reason) { Ns_DString ds; int result; if (ReturnRedirect(conn, 400, &result)) { return result; } Ns_DStringInit(&ds); Ns_DStringAppend(&ds, "The HTTP request presented by your browser is invalid."); if (reason != NULL) { Ns_DStringVarAppend(&ds, "

\n", reason, NULL); } result = Ns_ConnReturnNotice(conn, 400, "Invalid Request", ds.string); Ns_DStringFree(&ds); return result; } /* *---------------------------------------------------------------------- * * Ns_ConnReturnUnauthorized -- * * Return a 401 Unauthorized response, which will prompt the * user for a Basic authentication username/password. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnUnauthorized(Ns_Conn *conn) { Conn *connPtr = (Conn *) conn; Ns_DString ds; int result; Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, "Basic realm=\"", connPtr->servPtr->opts.realm, "\"", NULL); Ns_ConnSetHeaders(conn, "WWW-Authenticate", ds.string); Ns_DStringFree(&ds); if (ReturnRedirect(conn, 401, &result)) { return result; } return Ns_ConnReturnNotice(conn, 401, "Access Denied", "The requested URL cannot be accessed because a " "valid username and password are required."); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnForbidden -- * * Return a 403 Forbidden response. * * Results: * NS_OK/NS_ERROR. * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnForbidden(Ns_Conn *conn) { int result; if (ReturnRedirect(conn, 403, &result)) { return result; } return Ns_ConnReturnNotice(conn, 403, "Forbidden", "The requested URL cannot be accessed by this server."); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnNotFound -- * * Return a 404 Not Found response. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnNotFound(Ns_Conn *conn) { int result; if (ReturnRedirect(conn, 404, &result)) { return result; } return Ns_ConnReturnNotice(conn, 404, "Not Found", "The requested URL was not found on this server."); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnNotModified -- * * Return a 304 Not Modified response. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnNotModified(Ns_Conn *conn) { return Ns_ConnReturnStatus(conn, 304); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnNotImplemented -- * * Return a 501 Not Implemented response. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnNotImplemented(Ns_Conn *conn) { int result; if (ReturnRedirect(conn, 501, &result)) { return result; } return Ns_ConnReturnNotice(conn, 501, "Not Implemented", "The requested URL or method is not implemented " "by this server."); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnInternalError -- * * Return a 500 Internal Error response. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnInternalError(Ns_Conn *conn) { int result; Ns_SetTrunc(conn->outputheaders, 0); if (ReturnRedirect(conn, 500, &result)) { return result; } return Ns_ConnReturnNotice(conn, 500, "Server Error", "The requested URL cannot be accessed " "due to a system error on this server."); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnServiceUnavailable -- * * Return a 503 Service Unavailable response. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnServiceUnavailable(Ns_Conn *conn) { int result; if (ReturnRedirect(conn, 503, &result)) { return result; } return Ns_ConnReturnNotice(conn, 503, "Service Unavailable", "The requested URL cannot be accessed " "because the server is temporarily unable " "to fulfill your request. Please try again later."); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnStatus -- * * Return an arbitrary status code. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will close the connection. * *---------------------------------------------------------------------- */ int Ns_ConnReturnStatus(Ns_Conn *conn, int status) { int result; if (ReturnRedirect(conn, status, &result)) { return result; } Ns_ConnSetRequiredHeaders(conn, NULL, 0); Ns_ConnFlushHeaders(conn, status); return Ns_ConnClose(conn); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnOpenChannel -- * * Send an open channel out the conn. * * Results: * See ReturnOpen. * * Side effects: * See ReturnOpen. * *---------------------------------------------------------------------- */ int Ns_ConnReturnOpenChannel(Ns_Conn *conn, int status, char *type, Tcl_Channel chan, int len) { return ReturnOpen(conn, status, type, chan, NULL, -1, -1, len); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnOpenFile -- * * Send an open file out the conn. * * Results: * See ReturnOpen. * * Side effects: * See ReturnOpen. * *---------------------------------------------------------------------- */ int Ns_ConnReturnOpenFile(Ns_Conn *conn, int status, char *type, FILE *fp, int len) { return ReturnOpen(conn, status, type, NULL, fp, -1, -1, len); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnOpenFd -- * * Send an open fd out the conn. * * Results: * See ReturnOpen. * * Side effects: * See ReturnOpen. * *---------------------------------------------------------------------- */ int Ns_ConnReturnOpenFd(Ns_Conn *conn, int status, char *type, int fd, int len) { return ReturnOpen(conn, status, type, NULL, NULL, fd, -1, len); } /* *---------------------------------------------------------------------- * * Ns_ConnReturnOpenFdEx -- * * Send an open fd out the conn starting at given offset. The * current file position is not changed. * * Results: * See ReturnOpen. * * Side effects: * See ReturnOpen. * *---------------------------------------------------------------------- */ int Ns_ConnReturnOpenFdEx(Ns_Conn *conn, int status, char *type, int fd, off_t off, int len) { return ReturnOpen(conn, status, type, NULL, NULL, fd, off, len); } /* *---------------------------------------------------------------------- * * ReturnRedirect -- * * Return the appropriate redirect for a given status code. * * Results: * 0 if no redir exists, 1 if one does. * * Side effects: * May write and close the conn. * *---------------------------------------------------------------------- */ static int ReturnRedirect(Ns_Conn *conn, int status, int *resultPtr) { Tcl_HashEntry *hPtr; Conn *connPtr; NsServer *servPtr; connPtr = (Conn *) conn; servPtr = connPtr->servPtr; hPtr = Tcl_FindHashEntry(&servPtr->request.redirect, (char *) status); if (hPtr != NULL) { *resultPtr = Ns_ConnRedirect(conn, Tcl_GetHashValue(hPtr)); return 1; } return 0; } /* *---------------------------------------------------------------------- * * ReturnOpen -- * * Dump an open 'something' to the conn. * * Results: * NS_OK/NS_ERROR. * * Side effects: * Will close the connection on success. * *---------------------------------------------------------------------- */ static int ReturnOpen(Ns_Conn *conn, int status, char *type, Tcl_Channel chan, FILE *fp, int fd, off_t off, int len) { int result; Ns_ConnSetRequiredHeaders(conn, type, len); Ns_ConnQueueHeaders(conn, status); if (chan != NULL) { result = Ns_ConnSendChannel(conn, chan, len); } else if (fp != NULL) { result = Ns_ConnSendFp(conn, fp, len); } else if (off < 0) { result = Ns_ConnSendFd(conn, fd, len); } else { result = Ns_ConnSendFdEx(conn, fd, off, len); } if (result == NS_OK) { result = Ns_ConnClose(conn); } return result; } /* *---------------------------------------------------------------------- * * HdrEq -- * * Test if given set contains a key which matches given value. * * Results: * 1 if there is a match, 0 otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int HdrEq(Ns_Set *set, char *name, char *value) { char *hdrvalue; if (set != NULL && (hdrvalue = Ns_SetIGet(set, name)) != NULL && STRIEQ(hdrvalue, value)) { return 1; } return 0; } static int CheckKeep(Ns_Conn *conn, int status) { Conn *connPtr = (Conn *) conn; char *hdr; /* * First, ensure the driver supports keep-alive, the request method * was GET, and the client sent a connection: keep-alive header. */ if (connPtr->drvPtr->keepwait > 0 && conn->request != NULL && STREQ(conn->request->method, "GET") && HdrEq(conn->headers, "connection", "keep-alive")) { /* * Status 304, without any content, is ok. */ if (status == 304) { return 1; } /* * Status 200 requires either chunked encoding or a a valid * content-length header. */ if (status == 200) { if (HdrEq(conn->outputheaders, "transfer-encoding", "chunked")) { return 1; } hdr = Ns_SetIGet(conn->outputheaders, "content-length"); if (hdr != NULL && ((int) strtol(hdr, NULL, 10) == connPtr->responseLength)) { return 1; } } } /* * Test for keep-alive failed. */ return 0; } aolserver4-4.5.1/nsd/uuencode.c0000644000175000017500000001402707256470417016206 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * uuencode.c -- * * Uuencoding and decoding routines which map 8-bit binary bytes * into 6-bit ascii characters. * */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/uuencode.c,v 1.2 2001/03/22 21:39:27 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* * The following array specify the output ascii character for each * of the 64 6-bit characters. */ static char six2pr[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' }; /* * The following array maps all 256 8-bit ascii characters to * either the corresponding 6-bit value or -1 for invalid character. */ static int pr2six[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 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, -1, -1, -1, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; #define ENC(c) (six2pr[(c)]) #define DEC(c) ((unsigned char) pr2six[(int)(c)]) /* *---------------------------------------------------------------------- * * Ns_HtuuEncode -- * * Encode a string. * * Results: * Number of bytes placed in output. * * Side effects: * Encoded characters are placed in output which must be * large enough for the result, i.e., (1 + (len * 4) / 3) * bytes. * *---------------------------------------------------------------------- */ int Ns_HtuuEncode(unsigned char *input, unsigned int len, char *output) { register unsigned char *p, *q; register int n; /* * Convert every three input bytes into four output * characters. */ p = input; q = output; for (n = len / 3; n > 0; --n) { *q++ = ENC(p[0] >> 2); *q++ = ENC(((p[0] << 4) & 060) | ((p[1] >> 4) & 017)); *q++ = ENC(((p[1] << 2) & 074) | ((p[2] >> 6) & 03)); *q++ = ENC(p[2] & 077); p += 3; } /* * Convert and pad any remaining bytes. */ n = len % 3; if (n > 0) { *q++ = ENC(p[0] >> 2); if (n == 1) { *q++ = ENC((p[0] << 4) & 060); *q++ = '='; } else { *q++ = ENC(((p[0] << 4) & 060) | ((p[1] >> 4) & 017)); *q++ = ENC((p[1] << 2) & 074); } *q++ = '='; } *q = '\0'; return (q - (unsigned char *) output); } /* *---------------------------------------------------------------------- * * Ns_HtuuDecode -- * * Decode a string. * * Results: * Number of binary bytes decoded. * * Side effects: * Decoded characters are placed in output which must be * large enough for the result, i.e., (3 + (len * 3) / 4) * bytes. * *---------------------------------------------------------------------- */ int Ns_HtuuDecode(char *input, unsigned char *output, int outputlen) { register unsigned char *p, *q; register int len, n; /* * Skip leading space, if any. */ while (*input == ' ' || *input == '\t') { ++input; } /* * Determine the maximum length of output bytes. */ p = input; while (pr2six[(int)(*p)] >= 0) { ++p; } len = p - (unsigned char *) input; /* * Decode every four input bytes. */ p = input; q = output; for (n = len / 4; n > 0; --n) { *q++ = DEC(p[0]) << 2 | DEC(p[1]) >> 4; *q++ = DEC(p[1]) << 4 | DEC(p[2]) >> 2; *q++ = DEC(p[2]) << 6 | DEC(p[3]); p += 4; } /* * Decode remaining 2 or 3 bytes. */ n = len % 4; if (n > 1) { *q++ = DEC(p[0]) << 2 | DEC(p[1]) >> 4; } if (n > 2) { *q++ = DEC(p[1]) << 4 | DEC(p[2]) >> 2; } if ((q - output) < outputlen) { *q = '\0'; } return (q - output); } aolserver4-4.5.1/nsd/sched.c0000644000175000017500000005125607633133375015470 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/sched.c,v 1.14 2003/03/10 16:02:05 mpagenva Exp $, compiled: " __DATE__ " " __TIME__; /* * sched.c -- * * Support for the background task and scheduled procedure * interfaces. The implementation is based on the paper: * * "A Heap-based Callout Implementation to Meet Real-Time Needs", * by Barkley and Lee, in "Proceeding of the Summer 1988 USENIX * Conference". * * The heap code in particular is based on: * * "Chapter 9. Priority Queues and Heapsort", Sedgewick "Algorithms * in C, 3rd Edition", Addison-Wesley, 1998. */ #include "nsd.h" /* * The following structure defines a scheduled event. */ typedef struct Event { struct Event *nextPtr; Tcl_HashEntry *hPtr; /* Entry in event hash or NULL if deleted. */ unsigned int id; /* Unique event id. */ int qid; /* Current priority queue id. */ time_t nextqueue; /* Next time to queue for run. */ time_t lastqueue; /* Last time queued for run. */ time_t laststart; /* Last time run started. */ time_t lastend; /* Last time run finished. */ int flags; /* One or more of NS_SCHED_ONCE, NS_SCHED_THREAD, * NS_SCHED_DAILY, or NS_SCHED_WEEKLY. */ int interval; /* Interval specification. */ Ns_SchedProc *proc; /* Procedure to execute. */ void *arg; /* Client data for procedure. */ Ns_SchedProc *deleteProc; /* Procedure to cleanup when done (if any). */ } Event; /* * Local functions defined in this file. */ static Ns_ThreadProc SchedThread; /* Detached event firing thread. */ static Ns_ThreadProc EventThread; /* Proc for NS_SCHED_THREAD events. */ static void QueueEvent(Event *ePtr, time_t *nowPtr); /* Queue event on heap. */ static Event *DeQueueEvent(int qid); /* Remove event from heap. */ static void FreeEvent(Event *ePtr); /* Free completed or cancelled event. */ /* * Static variables defined in this file. */ static Tcl_HashTable eventsTable; /* Hash table of events. */ static Ns_Mutex lock; /* Lock around heap and hash table. */ static Ns_Cond schedcond; /* Condition to wakeup SchedThread. */ static Ns_Cond eventcond; /* Condition to wakeup EventThread(s). */ static Event **queue; /* Heap priority queue (dynamically re-sized). */ static int nqueue; /* Number of events in queue. */ static int maxqueue; /* Max queue events (dynamically re-sized). */ static int running; static int shutdownPending; static Ns_Thread schedThread; static int nThreads; static int nIdleThreads; static Event *threadEventPtr; static Ns_Thread *eventThreads; /* * Macro to exchange two events in the heap, used in QueueEvent() and * DeQueueEvent(). */ #define EXCH(i,j) \ {\ Event *tmp = queue[(i)];\ queue[(i)] = queue[(j)], queue[(j)] = tmp;\ queue[(i)]->qid = (i), queue[(j)]->qid = (j);\ } /* *---------------------------------------------------------------------- * * NsInitSched -- * * Initialize scheduler API. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitSched(void) { Ns_MutexInit(&lock); Ns_MutexSetName(&lock, "ns:sched"); Tcl_InitHashTable(&eventsTable, TCL_ONE_WORD_KEYS); } /* *---------------------------------------------------------------------- * * Ns_After -- * * Schedule a one-shot event. * * Results: * Event id or NS_ERROR if delay is out of range. * * Side effects: * See Ns_ScheduleProcEx(). * *---------------------------------------------------------------------- */ int Ns_After(int delay, Ns_Callback *proc, void *arg, Ns_Callback *deleteProc) { if (delay < 0) { return NS_ERROR; } return Ns_ScheduleProcEx((Ns_SchedProc *) proc, arg, NS_SCHED_ONCE, delay, (Ns_SchedProc *) deleteProc); } /* *---------------------------------------------------------------------- * * Ns_ScheduleProc -- * * Schedule a proc to run at a given interval. * * Results: * Event id or NS_ERROR if interval is invalid. * * Side effects: * See Ns_ScheduleProcEx(). * *---------------------------------------------------------------------- */ int Ns_ScheduleProc(Ns_Callback *proc, void *arg, int thread, int interval) { if (interval < 0) { return NS_ERROR; } return Ns_ScheduleProcEx((Ns_SchedProc *) proc, arg, thread ? NS_SCHED_THREAD : 0, interval, NULL); } /* *---------------------------------------------------------------------- * * Ns_ScheduleDaily -- * * Schedule a proc to run once a day. * * Results: * Event id or NS_ERROR if hour and/or minute is out of range. * * Side effects: * See Ns_ScheduleProcEx * *---------------------------------------------------------------------- */ int Ns_ScheduleDaily(Ns_SchedProc * proc, void *clientData, int flags, int hour, int minute, Ns_SchedProc *cleanupProc) { int seconds; if (hour > 23 || hour < 0 || minute > 59 || minute < 0) { return NS_ERROR; } seconds = (hour * 3600) + (minute * 60); return Ns_ScheduleProcEx(proc, clientData, flags | NS_SCHED_DAILY, seconds, cleanupProc); } /* *---------------------------------------------------------------------- * * Ns_ScheduleWeekly -- * * Schedule a proc to run once a week. * * Results: * Event id or NS_ERROR if day, hour, and/or minute is out of range. * * Side effects: * See Ns_ScheduleProcEx * *---------------------------------------------------------------------- */ int Ns_ScheduleWeekly(Ns_SchedProc * proc, void *clientData, int flags, int day, int hour, int minute, Ns_SchedProc *cleanupProc) { int seconds; if (day < 0 || day > 6 || hour > 23 || hour < 0 || minute > 59 || minute < 0) { return NS_ERROR; } seconds = (((day * 24) + hour) * 3600) + (minute * 60); return Ns_ScheduleProcEx(proc, clientData, flags | NS_SCHED_WEEKLY, seconds, cleanupProc); } /* *---------------------------------------------------------------------- * * Ns_ScheduleProcEx -- * * Schedule a proc to run at a given interval. The interpretation * of interval (whether interative, daily, or weekly) is handled * by QueueEvent. * * Results: * Event id of NS_ERROR if interval is out of range. * * Side effects: * Event is allocated, hashed, and queued. * *---------------------------------------------------------------------- */ int Ns_ScheduleProcEx(Ns_SchedProc *proc, void *arg, int flags, int interval, Ns_SchedProc *deleteProc) { Event *ePtr; int id, new; static int nextId; time_t now; if (interval < 0) { return NS_ERROR; } time(&now); ePtr = ns_malloc(sizeof(Event)); ePtr->flags = flags; ePtr->nextqueue = 0; ePtr->lastqueue = ePtr->laststart = ePtr->lastend = -1; ePtr->interval = interval; ePtr->proc = proc; ePtr->deleteProc = deleteProc; ePtr->arg = arg; Ns_MutexLock(&lock); if (shutdownPending) { id = NS_ERROR; ns_free(ePtr); } else { do { id = nextId++; if (nextId < 0) { nextId = 0; } ePtr->hPtr = Tcl_CreateHashEntry(&eventsTable, (char *) id, &new); } while (!new); Tcl_SetHashValue(ePtr->hPtr, ePtr); ePtr->id = (unsigned int)id; QueueEvent(ePtr, &now); } Ns_MutexUnlock(&lock); return id; } /* *---------------------------------------------------------------------- * * Ns_Cancel, Ns_UnscheduleProc -- * * Cancel a previously scheduled event. * * Results: * Ns_UnscheduleProc: None. * Ns_Cancel: 1 if cancelled, 0 otherwise. * * Side effects: * See FreeEvent(). * *---------------------------------------------------------------------- */ void Ns_UnscheduleProc(int id) { (void) Ns_Cancel(id); } int Ns_Cancel(int id) { Tcl_HashEntry *hPtr = NULL; Event *ePtr = NULL; int cancelled; cancelled = 0; Ns_MutexLock(&lock); if (!shutdownPending) { hPtr = Tcl_FindHashEntry(&eventsTable, (char *) id); if (hPtr != NULL) { ePtr = Tcl_GetHashValue(hPtr); Tcl_DeleteHashEntry(hPtr); ePtr->hPtr = NULL; if (ePtr->qid > 0) { DeQueueEvent(ePtr->qid); cancelled = 1; } } } Ns_MutexUnlock(&lock); if (cancelled) { FreeEvent(ePtr); } return cancelled; } /* *---------------------------------------------------------------------- * * Ns_Pause -- * * Pause a schedule procedure. * * Results: * 1 if proc paused, 0 otherwise. * * Side effects: * Proc will not run at the next scheduled time. * *---------------------------------------------------------------------- */ int Ns_Pause(int id) { Tcl_HashEntry *hPtr; Event *ePtr; int paused; paused = 0; Ns_MutexLock(&lock); if (!shutdownPending) { hPtr = Tcl_FindHashEntry(&eventsTable, (char *) id); if (hPtr != NULL) { ePtr = Tcl_GetHashValue(hPtr); if (!(ePtr->flags & NS_SCHED_PAUSED)) { ePtr->flags |= NS_SCHED_PAUSED; if (ePtr->qid > 0) { DeQueueEvent(ePtr->qid); } paused = 1; } } } Ns_MutexUnlock(&lock); return paused; } /* *---------------------------------------------------------------------- * * Ns_Resume -- * * Resume a scheduled proc. * * Results: * 1 if proc resumed, 0 otherwise. * * Side effects: * Proc will be rescheduled. * *---------------------------------------------------------------------- */ int Ns_Resume(int id) { Tcl_HashEntry *hPtr; Event *ePtr; int resumed; time_t now; resumed = 0; Ns_MutexLock(&lock); if (!shutdownPending) { hPtr = Tcl_FindHashEntry(&eventsTable, (char *) id); if (hPtr != NULL) { ePtr = Tcl_GetHashValue(hPtr); if ((ePtr->flags & NS_SCHED_PAUSED)) { ePtr->flags &= ~NS_SCHED_PAUSED; time(&now); QueueEvent(ePtr, &now); resumed = 1; } } } Ns_MutexUnlock(&lock); return resumed; } /* *---------------------------------------------------------------------- * * NsStartSchedShutdown, NsWaitSchedShutdown -- * * Inititiate and then wait for sched shutdown. * * Results: * None. * * Side effects: * May timeout waiting for sched shutdown. * *---------------------------------------------------------------------- */ void NsStartSchedShutdown(void) { Ns_MutexLock(&lock); if (running) { Ns_Log(Notice, "sched: shutdown pending"); shutdownPending = 1; Ns_CondSignal(&schedcond); } Ns_MutexUnlock(&lock); } void NsWaitSchedShutdown(Ns_Time *toPtr) { int status; Ns_MutexLock(&lock); status = NS_OK; while (status == NS_OK && running) { status = Ns_CondTimedWait(&schedcond, &lock, toPtr); } Ns_MutexUnlock(&lock); if (status != NS_OK) { Ns_Log(Warning, "sched: timeout waiting for sched exit"); } else if (schedThread != NULL) { Ns_ThreadJoin(&schedThread, NULL); } } /* *---------------------------------------------------------------------- * * QueueEvent -- * * Add an event to the priority queue heap. * * Results: * None. * * Side effects: * SchedThread() may be created and/or signalled. * *---------------------------------------------------------------------- */ static void QueueEvent(Event *ePtr, time_t *nowPtr) { struct tm *tp; if (ePtr->flags & NS_SCHED_PAUSED) { return; } /* * Calculate the time from now in seconds this event should run. */ if (ePtr->flags & (NS_SCHED_DAILY | NS_SCHED_WEEKLY)) { tp = ns_localtime(nowPtr); tp->tm_sec = ePtr->interval; tp->tm_hour = 0; tp->tm_min = 0; if (ePtr->flags & NS_SCHED_WEEKLY) { tp->tm_mday -= tp->tm_wday; } ePtr->nextqueue = mktime(tp); if (ePtr->nextqueue <= *nowPtr) { tp->tm_mday += (ePtr->flags & NS_SCHED_WEEKLY) ? 7 : 1; ePtr->nextqueue = mktime(tp); } } else { ePtr->nextqueue = *nowPtr + ePtr->interval; } /* * Place the new event at the end of the queue array and * heap it up into place. The queue array is extended * if necessary. */ ePtr->qid = ++nqueue; if (maxqueue <= nqueue) { maxqueue += 1000; queue = ns_realloc(queue, (sizeof(Event *)) * (maxqueue + 1)); } queue[nqueue] = ePtr; if (nqueue > 1) { int j, k; k = nqueue; j = k / 2; while (k > 1 && queue[j]->nextqueue > queue[k]->nextqueue) { EXCH(j, k); k = j; j = k / 2; } } /* * Signal or create the SchedThread if necessary. */ if (running) { Ns_CondSignal(&schedcond); } else { running = 1; Ns_ThreadCreate(SchedThread, NULL, 0, &schedThread); } } /* *---------------------------------------------------------------------- * * DeQueueEvent -- * * Remove an event from the priority queue heap. * * Results: * Pointer to removed event. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Event * DeQueueEvent(int k) { Event *ePtr; int j; /* * Swap out the event to be removed and heap down to restore the * order of events to be fired. */ EXCH(k, nqueue); ePtr = queue[nqueue--]; ePtr->qid = 0; while ((j = 2 * k) <= nqueue) { if (j < nqueue && queue[j]->nextqueue > queue[j + 1]->nextqueue) { ++j; } if (queue[j]->nextqueue > queue[k]->nextqueue) { break; } EXCH(k, j); k = j; } return ePtr; } /* *---------------------------------------------------------------------- * * EventThread -- * * Run detached thread events. * * Results: * None. * * Side effects: * See FinishEvent(). * *---------------------------------------------------------------------- */ static void EventThread(void *arg) { Event *ePtr; char name[20], idle[20]; time_t now; sprintf(idle, "-sched:idle%d-", (int) arg); Ns_ThreadSetName(idle); Ns_Log(Notice, "starting"); Ns_MutexLock(&lock); while (1) { while (threadEventPtr == NULL && !shutdownPending) { Ns_CondWait(&eventcond, &lock); } if (threadEventPtr == NULL) { break; } ePtr = threadEventPtr; threadEventPtr = ePtr->nextPtr; if (threadEventPtr != NULL) { Ns_CondSignal(&eventcond); } --nIdleThreads; Ns_MutexUnlock(&lock); sprintf(name, "-sched:%u-", ePtr->id); Ns_ThreadSetName(name); (*ePtr->proc) (ePtr->arg, (int)ePtr->id); Ns_ThreadSetName(idle); time(&now); Ns_MutexLock(&lock); ++nIdleThreads; if (ePtr->hPtr == NULL) { Ns_MutexUnlock(&lock); FreeEvent(ePtr); Ns_MutexLock(&lock); } else { ePtr->flags &= ~NS_SCHED_RUNNING; ePtr->lastend = now; QueueEvent(ePtr, &now); } } Ns_MutexUnlock(&lock); Ns_Log(Notice, "exiting"); } /* *---------------------------------------------------------------------- * * FreeEvent -- * * Free and event after run. * * Results: * None. * * Side effects: * Event is freed or re-queued. * *---------------------------------------------------------------------- */ static void FreeEvent(Event *ePtr) { if (ePtr->deleteProc != NULL) { (*ePtr->deleteProc) (ePtr->arg, (int)ePtr->id); } ns_free(ePtr); } /* *---------------------------------------------------------------------- * * SchedThread -- * * Detached thread to fire events on time. * * Results: * None. * * Side effects: * Depends on event procedures. * *---------------------------------------------------------------------- */ static void SchedThread(void *ignored) { Event *ePtr, *readyPtr; time_t now; Ns_Time timeout; int elapsed; Ns_Thread *joinThreads; int nJoinThreads; Ns_WaitForStartup(); Ns_ThreadSetName("-sched-"); Ns_Log(Notice, "sched: starting"); readyPtr = NULL; Ns_MutexLock(&lock); while (!shutdownPending) { /* * For events ready to run, either create a thread for * detached events or add to a list of synchronous events. */ time(&now); while (nqueue > 0 && queue[1]->nextqueue <= now) { ePtr = DeQueueEvent(1); if (ePtr->flags & NS_SCHED_ONCE) { Tcl_DeleteHashEntry(ePtr->hPtr); ePtr->hPtr = NULL; } ePtr->lastqueue = now; if (ePtr->flags & NS_SCHED_THREAD) { ePtr->flags |= NS_SCHED_RUNNING; ePtr->laststart = now; ePtr->nextPtr = threadEventPtr; threadEventPtr = ePtr; } else { ePtr->nextPtr = readyPtr; readyPtr = ePtr; } } /* * Dispatch any threaded events. */ if (threadEventPtr != NULL) { if (nIdleThreads == 0) { eventThreads = ns_realloc(eventThreads, sizeof(Ns_Thread) * (nThreads+1)); Ns_ThreadCreate(EventThread, (void *) nThreads, 0, &eventThreads[nThreads]); ++nIdleThreads; ++nThreads; } Ns_CondSignal(&eventcond); } /* * Run and re-queue or free synchronous events. */ while ((ePtr = readyPtr) != NULL) { readyPtr = ePtr->nextPtr; ePtr->laststart = now; ePtr->flags |= NS_SCHED_RUNNING; Ns_MutexUnlock(&lock); (*ePtr->proc) (ePtr->arg, (int)ePtr->id); time(&now); elapsed = (int) difftime(now, ePtr->laststart); if (elapsed > nsconf.sched.maxelapsed) { Ns_Log(Warning, "sched: " "excessive time taken by proc %d (%d seconds)", ePtr->id, elapsed); } if (ePtr->hPtr == NULL) { FreeEvent(ePtr); ePtr = NULL; } Ns_MutexLock(&lock); if (ePtr != NULL) { ePtr->flags &= ~NS_SCHED_RUNNING; ePtr->lastend = now; QueueEvent(ePtr, &now); } } /* * Wait for the next ready event. */ if (nqueue == 0) { Ns_CondWait(&schedcond, &lock); } else if (!shutdownPending) { timeout.sec = queue[1]->nextqueue; timeout.usec = 0; (void) Ns_CondTimedWait(&schedcond, &lock, &timeout); } } /* * Wait for any detached event threads to exit * and then cleanup the scheduler and signal * shutdown complete. */ Ns_Log(Notice, "sched: shutdown started"); if (nThreads > 0) { Ns_Log(Notice, "sched: waiting for event threads..."); Ns_CondBroadcast(&eventcond); while (nThreads > 0) { joinThreads = eventThreads; nJoinThreads = nThreads; eventThreads = NULL; nThreads = 0; Ns_MutexUnlock(&lock); while (--nJoinThreads >= 0 ) { Ns_ThreadJoin(&joinThreads[nJoinThreads], NULL); } ns_free(joinThreads); Ns_MutexLock(&lock); } } Ns_MutexUnlock(&lock); while (nqueue > 0) { FreeEvent(queue[nqueue--]); } ns_free(queue); Tcl_DeleteHashTable(&eventsTable); Ns_Log(Notice, "sched: shutdown complete"); Ns_MutexLock(&lock); running = 0; Ns_CondBroadcast(&schedcond); Ns_MutexUnlock(&lock); } void NsGetScheduled(Tcl_DString *dsPtr) { Tcl_HashEntry *hPtr; Tcl_HashSearch search; Event *ePtr; time_t now; char buf[100]; time(&now); Ns_MutexLock(&lock); hPtr = Tcl_FirstHashEntry(&eventsTable, &search); while (hPtr != NULL) { ePtr = Tcl_GetHashValue(hPtr); Tcl_DStringStartSublist(dsPtr); sprintf(buf, "%u %d %d %ld %ld %ld %ld", ePtr->id, ePtr->flags, ePtr->interval, ePtr->nextqueue, ePtr->lastqueue, ePtr->laststart, ePtr->lastend); Tcl_DStringAppend(dsPtr, buf, -1); Ns_GetProcInfo(dsPtr, (void *) ePtr->proc, ePtr->arg); Tcl_DStringEndSublist(dsPtr); hPtr = Tcl_NextHashEntry(&search); } Ns_MutexUnlock(&lock); } aolserver4-4.5.1/nsd/mimetypes.c0000644000175000017500000003330210316126723016375 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * mimetypes.c -- * * Defines standard default mime types. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/mimetypes.c,v 1.13 2005/09/27 02:26:27 shmooved Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #define TYPE_DEFAULT "*/*" /* * Local functions defined in this file. */ static void AddType(char *ext, char *type); static char *LowerDString(Ns_DString *dsPtr, char *ext); /* * Static variables defined in this file. */ static Tcl_HashTable types; static char *defaultType = TYPE_DEFAULT; static char *noextType = TYPE_DEFAULT; /* * The default extension matching table. This should be kept up to date with * the client. Case in the extension is ignored. */ static struct exttype { char *ext; char *type; } typetab[] = { /* * Basic text/html types. */ { ".adp", NSD_TEXTHTML}, { ".dci", NSD_TEXTHTML}, { ".htm", NSD_TEXTHTML}, { ".html", NSD_TEXTHTML}, { ".sht", NSD_TEXTHTML}, { ".shtml", NSD_TEXTHTML}, /* * All other types. */ { ".ai", "application/postscript" }, { ".aif", "audio/aiff" }, { ".aifc", "audio/aiff" }, { ".aiff", "audio/aiff" }, { ".ani", "application/x-navi-animation" }, { ".art", "image/x-art" }, { ".asc", "text/plain" }, { ".au", "audio/basic" }, { ".avi", "video/x-msvideo" }, { ".bcpio", "application/x-bcpio" }, { ".bin", "application/octet-stream" }, { ".bmp", "image/bmp" }, { ".cdf", "application/x-netcdf" }, { ".cgm", "image/cgm" }, { ".class", "application/octet-stream" }, { ".cpio", "application/x-cpio" }, { ".cpt", "application/mac-compactpro" }, { ".css", "text/css" }, { ".csv", "application/csv" }, { ".dcr", "application/x-director" }, { ".der", "application/x-x509-ca-cert" }, { ".dir", "application/x-director" }, { ".dll", "application/octet-stream" }, { ".dms", "application/octet-stream" }, { ".doc", "application/msword" }, { ".dp", "application/commonground" }, { ".dvi", "applications/x-dvi" }, { ".dwg", "image/vnd.dwg" }, { ".dxf", "image/vnd.dxf" }, { ".dxr", "application/x-director" }, { ".elm", "text/plain" }, { ".eml", "text/plain" }, { ".etx", "text/x-setext" }, { ".exe", "application/octet-stream" }, { ".ez", "application/andrew-inset" }, { ".fm", "application/vnd.framemaker" }, { ".gbt", "text/plain" }, { ".gif", "image/gif" }, { ".gtar", "application/x-gtar" }, { ".gz", "application/x-gzip" }, { ".hdf", "application/x-hdf" }, { ".hpgl", "application/vnd.hp-hpgl" }, { ".hqx", "application/mac-binhex40" }, { ".ice", "x-conference/x-cooltalk" }, { ".ief", "image/ief" }, { ".igs", "image/iges" }, { ".iges", "image/iges" }, { ".jfif", "image/jpeg" }, { ".jpe", "image/jpeg" }, { ".jpg", "image/jpeg" }, { ".jpeg", "image/jpeg" }, { ".js", "application/x-javascript" }, { ".kar", "audio/midi" }, { ".latex", "application/x-latex" }, { ".lha", "application/octet-stream" }, { ".ls", "application/x-javascript" }, { ".lxc", "application/vnd.ms-excel" }, { ".lzh", "application/octet-stream" }, { ".man", "application/x-troff-man" }, { ".map", "application/x-navimap" }, { ".me", "application/x-troff-me" }, { ".mesh", "model/mesh" }, { ".mid", "audio/x-midi" }, { ".midi", "audio/x-midi" }, { ".mif", "application/vnd.mif" }, { ".mocha", "application/x-javascript" }, { ".mov", "video/quicktime" }, { ".movie", "video/x-sgi-movie" }, { ".mp2", "audio/mpeg" }, { ".mp3", "audio/mpeg" }, { ".mpe", "video/mpeg" }, { ".mpeg", "video/mpeg" }, { ".mpg", "video/mpeg" }, { ".mpga", "audio/mpeg" }, { ".ms", "application/x-troff-ms" }, { ".msh", "model/mesh" }, { ".nc", "application/x-netcdf" }, { ".nvd", "application/x-navidoc" }, { ".nvm", "application/x-navimap" }, { ".oda", "application/oda" }, { ".pbm", "image/x-portable-bitmap" }, { ".pcl", "application/vnd.hp-pcl" }, { ".pclx", "application/vnd.hp-pclx" }, { ".pdb", "chemical/x-pdb" }, { ".pdf", "application/pdf" }, { ".pgm", "image/x-portable-graymap" }, { ".pgn", "application/x-chess-pgn" }, { ".pic", "image/pict" }, { ".pict", "image/pict" }, { ".pnm", "image/x-portable-anymap" }, { ".png", "image/png" }, { ".pot", "application/vnd.ms-powerpoint" }, { ".ppm", "image/x-portable-pixmap" }, { ".pps", "application/vnd.ms-powerpoint" }, { ".ppt", "application/vnd.ms-powerpoint" }, { ".ps", "application/postscript" }, { ".qt", "video/quicktime" }, { ".ra", "audio/x-realaudio" }, { ".ram", "audio/x-pn-realaudio" }, { ".ras", "image/x-cmu-raster" }, { ".rgb", "image/x-rgb" }, { ".rm", "audio/x-pn-realaudio" }, { ".roff", "application/x-troff" }, { ".rpm", "audio/x-pn-realaudio-plugin" }, { ".rtf", "application/rtf" }, { ".rtx", "text/richtext" }, { ".sda", "application/vnd.stardivision.draw" }, { ".sdc", "application/vnd.stardivision.calc" }, { ".sdd", "application/vnd.stardivision.impress" }, { ".sdp", "application/vnd.stardivision.impress" }, { ".sdw", "application/vnd.stardivision.writer" }, { ".sgl", "application/vnd.stardivision.writer-global" }, { ".sgm", "text/sgml" }, { ".sgml", "text/sgml" }, { ".sh", "application/x-sh" }, { ".shar", "application/x-shar" }, { ".silo", "model/mesh" }, { ".sit", "application/x-stuffit" }, { ".skd", "application/vnd.stardivision.math" }, { ".skm", "application/vnd.stardivision.math" }, { ".skp", "application/vnd.stardivision.math" }, { ".skt", "application/vnd.stardivision.math" }, { ".smf", "application/vnd.stardivision.math" }, { ".smi", "application/smil" }, { ".smil", "application/smil" }, { ".snd", "audio/basic" }, { ".spl", "application/x-futuresplash" }, { ".sql", "application/x-sql" }, { ".src", "application/x-wais-source" }, { ".stc", "application/vnd.sun.xml.calc.template" }, { ".std", "application/vnd.sun.xml.draw.template" }, { ".sti", "application/vnd.sun.xml.impress.template" }, { ".stl", "application/x-navistyle" }, { ".stw", "application/vnd.sun.xml.writer.template" }, { ".swf", "application/x-shockwave-flash" }, { ".sxc", "application/vnd.sun.xml.calc" }, { ".sxd", "application/vnd.sun.xml.draw" }, { ".sxg", "application/vnd.sun.xml.writer.global" }, { ".sxl", "application/vnd.sun.xml.impress" }, { ".sxm", "application/vnd.sun.xml.math" }, { ".sxw", "application/vnd.sun.xml.writer" }, { ".t", "application/x-troff" }, { ".tar", "application/x-tar" }, { ".tcl", "x-tcl" }, { ".tex", "application/x-tex" }, { ".texi", "application/x-texinfo" }, { ".texinfo", "application/x-texinfo" }, { ".text", "text/plain" }, { ".tgz", "application/x-gtar" }, { ".tif", "image/tiff" }, { ".tiff", "image/tiff" }, { ".tr", "application/x-troff" }, { ".tsv", "text/tab-separated-values" }, { ".txt", "text/plain" }, { ".ustar", "application/x-ustar" }, { ".vcd", "application/x-cdlink" }, { ".vor", "application/vnd.stardivision.writer" }, { ".vrml", "model/vrml" }, { ".wav", "audio/x-wav" }, { ".wbmp", "image/vnd.wap.wbmp" }, { ".wkb", "application/vnd.ms-excel" }, { ".wks", "application/vnd.ms-excel" }, { ".wml", "text/vnd.wap.wml" }, { ".wmlc", "application/vnd.wap.wmlc" }, { ".wmls", "text/vnd.wap.wmlscript" }, { ".wmlsc", "application/vnd.wap.wmlscript" }, { ".wrl", "model/vrml" }, { ".xbm", "image/x-xbitmap" }, { ".xls", "application/vnd.ms-excel" }, { ".xlw", "application/vnd.ms-excel" }, { ".xpm", "image/x-xpixmap" }, { ".xht", "application/xhtml+xml" }, { ".xhtml", "application/xhtml+xml" }, { ".xml", "text/xml" }, { ".xsl", "text/xml" }, { ".xyz", "chemical/x-pdb" }, { ".xwd", "image/x-xwindowdump" }, { ".z", "application/x-compress" }, { ".zip", "application/zip" }, { NULL, NULL } }; /* *---------------------------------------------------------------------- * * Ns_GetMimeType -- * * Guess the mime type based on filename extension. Case is * ignored. * * Results: * A mime type. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_GetMimeType(char *file) { char *start, *ext; Ns_DString ds; Tcl_HashEntry *hePtr; start = strrchr(file, '/'); if (start == NULL) { start = file; } ext = strrchr(start, '.'); if (ext == NULL) { return noextType; } Ns_DStringInit(&ds); ext = LowerDString(&ds, ext); hePtr = Tcl_FindHashEntry(&types, ext); if (hePtr == NULL) { return defaultType; } return Tcl_GetHashValue(hePtr); } /* *---------------------------------------------------------------------- * * NsInitMimeTypes -- * * Add compiled-in default mime types. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitMimeTypes(void) { int i; /* * Initialize hash table of file extensions. */ Tcl_InitHashTable(&types, TCL_STRING_KEYS); /* * Add default system types first from above */ for (i = 0; typetab[i].ext != NULL; ++i) { AddType(typetab[i].ext, typetab[i].type); } } /* *---------------------------------------------------------------------- * * NsUpdateMimeTypes -- * * Add configured mime types. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsUpdateMimeTypes(void) { Ns_Set *set; int i; set = Ns_ConfigGetSection("ns/mimetypes"); if (set == NULL) { return; } defaultType = Ns_SetIGet(set, "default"); if (defaultType == NULL) { defaultType = TYPE_DEFAULT; } noextType = Ns_SetIGet(set, "noextension"); if (noextType == NULL) { noextType = defaultType; } for (i=0; i < Ns_SetSize(set); i++) { AddType(Ns_SetKey(set, i), Ns_SetValue(set, i)); } } /* *---------------------------------------------------------------------- * * NsTclGuessTypeObjCmd -- * * Implements ns_guesstype. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclGuessTypeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { char *type; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "filename"); return TCL_ERROR; } type = Ns_GetMimeType(Tcl_GetString(objv[1])); Tcl_SetResult(interp, type, TCL_VOLATILE); return TCL_OK; } /* *---------------------------------------------------------------------- * * AddType -- * * Add a mime type to the global hash table. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void AddType(char *ext, char *type) { Ns_DString ds; Tcl_HashEntry *he; int new; Ns_DStringInit(&ds); ext = LowerDString(&ds, ext); he = Tcl_CreateHashEntry(&types, ext, &new); if (new == 0) { ns_free(Tcl_GetHashValue(he)); } Tcl_SetHashValue(he, ns_strdup(type)); Ns_DStringFree(&ds); } /* *---------------------------------------------------------------------- * * LowerDString -- * * Append a string to the dstring, converting all alphabetic * characeters to lowercase. * * Results: * dsPtr->string * * Side effects: * Appends to dstring. * *---------------------------------------------------------------------- */ static char * LowerDString(Ns_DString *dsPtr, char *ext) { Ns_DStringAppend(dsPtr, ext); ext = dsPtr->string; while (*ext != '\0') { if (isupper(UCHAR(*ext))) { *ext = tolower(UCHAR(*ext)); } ++ext; } return dsPtr->string; } aolserver4-4.5.1/nsd/urlopen.c0000644000175000017500000002164307773421056016064 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * urlopen.c -- * * Make outgoing HTTP requests. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/urlopen.c,v 1.17 2003/12/28 00:22:06 scottg Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #define BUFSIZE 2048 typedef struct Stream { SOCKET sock; int error; int cnt; char *ptr; char buf[BUFSIZE+1]; } Stream; /* * Local functions defined in this file */ static int GetLine(Stream *sPtr, Ns_DString *dsPtr); static int FillBuf(Stream *sPtr); /* *---------------------------------------------------------------------- * * Ns_FetchPage -- * * Fetch a page off of this very server. Url must reference a * file in the filesystem. * * Results: * NS_OK or NS_ERROR. * * Side effects: * The file contents will be put into the passed-in dstring. * *---------------------------------------------------------------------- */ int Ns_FetchPage(Ns_DString *dsPtr, char *url, char *server) { Ns_DString path; int fd; int nread; char buf[1024]; Ns_DStringInit(&path); Ns_UrlToFile(&path, server, url); fd = open(path.string, O_RDONLY|O_BINARY); Ns_DStringFree(&path); if (fd < 0) { return NS_ERROR; } while ((nread = read(fd, buf, sizeof(buf))) > 0) { Ns_DStringNAppend(dsPtr, buf, nread); } close(fd); return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_FetchURL -- * * Open up an HTTP connection to an arbitrary URL. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Page contents will be appended to the passed-in dstring. * Headers returned to us will be put into the passed-in Ns_Set. * The set name will be changed to a copy of the HTTP status line. * *---------------------------------------------------------------------- */ int Ns_FetchURL(Ns_DString *dsPtr, char *url, Ns_Set *headers) { SOCKET sock; char *p; Ns_DString ds; Stream stream; Ns_Request *request; int status, tosend, n; status = NS_ERROR; sock = INVALID_SOCKET; Ns_DStringInit(&ds); /* * Parse the URL and open a connection. */ Ns_DStringVarAppend(&ds, "GET ", url, " HTTP/1.0", NULL); request = Ns_ParseRequest(ds.string); if (request == NULL || request->protocol == NULL || !STREQ(request->protocol, "http") || request->host == NULL) { Ns_Log(Notice, "urlopen: invalid url '%s'", url); goto done; } if (request->port == 0) { request->port = 80; } sock = Ns_SockConnect(request->host, request->port); if (sock == INVALID_SOCKET) { Ns_Log(Error, "urlopen: failed to connect to '%s': '%s'", url, ns_sockstrerror(ns_sockerrno)); goto done; } /* * Send a simple HTTP GET request. */ Ns_DStringTrunc(&ds, 0); Ns_DStringVarAppend(&ds, "GET ", request->url, NULL); if (request->query != NULL) { Ns_DStringVarAppend(&ds, "?", request->query, NULL); } Ns_DStringAppend(&ds, " HTTP/1.0\r\nAccept: */*\r\n\r\n"); p = ds.string; tosend = ds.length; while (tosend > 0) { n = send(sock, p, tosend, 0); if (n == SOCKET_ERROR) { Ns_Log(Error, "urlopen: failed to send data to '%s': '%s'", url, ns_sockstrerror(ns_sockerrno)); goto done; } tosend -= n; p += n; } /* * Buffer the socket and read the response line and then * consume the headers, parsing them into any given header set. */ stream.cnt = 0; stream.error = 0; stream.ptr = stream.buf; stream.sock = sock; if (!GetLine(&stream, &ds)) { goto done; } if (headers != NULL && strncmp(ds.string, "HTTP", 4) == 0) { if (headers->name != NULL) { ns_free(headers->name); } headers->name = Ns_DStringExport(&ds); } do { if (!GetLine(&stream, &ds)) { goto done; } if (ds.length > 0 && headers != NULL && Ns_ParseHeader(headers, ds.string, Preserve) != NS_OK) { goto done; } } while (ds.length > 0); /* * Without any check on limit or total size, foolishly read * the remaining content into the dstring. */ do { Ns_DStringNAppend(dsPtr, stream.ptr, stream.cnt); } while (FillBuf(&stream)); if (!stream.error) { status = NS_OK; } done: if (request != NULL) { Ns_FreeRequest(request); } if (sock != INVALID_SOCKET) { ns_sockclose(sock); } Ns_DStringFree(&ds); return status; } /* *---------------------------------------------------------------------- * * NsTclGetUrlObjCmd -- * * Implements ns_geturl. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclGetUrlObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsInterp *itPtr = arg; Ns_DString ds; Ns_Set *headers; int status, code; char *url; if ((objc != 3) && (objc != 2)) { Tcl_WrongNumArgs(interp, 1, objv, "url ?headersSetIdVar?"); return TCL_ERROR; } code = TCL_ERROR; if (objc == 2) { headers = NULL; } else { headers = Ns_SetCreate(NULL); } Ns_DStringInit(&ds); url = Tcl_GetString(objv[1]); if (url[0] == '/') { status = Ns_FetchPage(&ds, Tcl_GetString(objv[1]), itPtr->servPtr->server); } else { status = Ns_FetchURL(&ds, Tcl_GetString(objv[1]), headers); } if (status != NS_OK) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "could not fetch: ", Tcl_GetString(objv[1]), NULL); if (headers != NULL) { Ns_SetFree(headers); } goto done; } if (objc == 3) { Ns_TclEnterSet(interp, headers, NS_TCL_SET_DYNAMIC); if (Tcl_ObjSetVar2(interp, objv[2], NULL, Tcl_GetObjResult(interp), TCL_LEAVE_ERR_MSG) == NULL) { goto done; } } Tcl_SetResult(interp, ds.string, TCL_VOLATILE); code = TCL_OK; done: Ns_DStringFree(&ds); return code; } /* *---------------------------------------------------------------------- * * FillBuf -- * * Fill the socket stream buffer. * * Results: * 1 if fill ok, 0 otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int FillBuf(Stream *sPtr) { int n; n = recv(sPtr->sock, sPtr->buf, BUFSIZE, 0); if (n <= 0) { if (n < 0) { Ns_Log(Error, "urlopen: " "failed to fill socket stream buffer: '%s'", strerror(errno)); sPtr->error = 1; } return 0; } sPtr->buf[n] = '\0'; sPtr->ptr = sPtr->buf; sPtr->cnt = n; return 1; } /* *---------------------------------------------------------------------- * * GetLine -- * * Copy the next line from the stream to a dstring, trimming * the \n and \r. * * Results: * 1 or 0. * * Side effects: * The dstring is truncated on entry. * *---------------------------------------------------------------------- */ static int GetLine(Stream *sPtr, Ns_DString *dsPtr) { char *eol; int n; Ns_DStringTrunc(dsPtr, 0); do { if (sPtr->cnt > 0) { eol = strchr(sPtr->ptr, '\n'); if (eol == NULL) { n = sPtr->cnt; } else { *eol++ = '\0'; n = eol - sPtr->ptr; } Ns_DStringNAppend(dsPtr, sPtr->ptr, n - 1); sPtr->ptr += n; sPtr->cnt -= n; if (eol != NULL) { n = dsPtr->length; if (n > 0 && dsPtr->string[n-1] == '\r') { Ns_DStringTrunc(dsPtr, n-1); } return 1; } } } while (FillBuf(sPtr)); return 0; } aolserver4-4.5.1/nsd/nswin32.c0000644000175000017500000004200010276754234015670 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * win32.c -- * * Win32 specific routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/nswin32.c,v 1.14 2005/08/11 23:00:44 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" static Ns_Mutex lock; static Ns_Cond cond; static Ns_Thread tickThread; static Ns_ThreadProc ServiceTicker; static void StopTicker(void); static void StartTicker(DWORD pending); static VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv); static VOID WINAPI ServiceHandler(DWORD code); static BOOL WINAPI ConsoleHandler(DWORD code); static void ReportStatus(DWORD state, DWORD code, DWORD hint); static void ExitService(void); static char *GetServiceName(Ns_DString *dsPtr, char *server); static SERVICE_STATUS_HANDLE hStatus = 0; static SERVICE_STATUS curStatus; static Ns_Tls tls; static int service; static int tick; static int sigpending; #define SysErrMsg() (NsWin32ErrMsg(GetLastError())) /* *---------------------------------------------------------------------- * * DllMain -- * * Init routine for the nsd.dll which setups TLS for Win32 errors * disables thread attach/detach calls. * * Results: * TRUE or FALSE. * * Side effects: * None. * *---------------------------------------------------------------------- */ BOOL APIENTRY DllMain(HANDLE hModule, DWORD why, LPVOID lpReserved) { WSADATA wsd; if (why == DLL_PROCESS_ATTACH) { NsThreads_LibInit(); Ns_TlsAlloc(&tls, ns_free); if (WSAStartup(MAKEWORD(1, 1), &wsd) != 0) { return FALSE; } DisableThreadLibraryCalls(hModule); Ns_LibInit(); } else if (why == DLL_PROCESS_DETACH) { WSACleanup(); } return TRUE; } /* *---------------------------------------------------------------------- * * NsWin32ErrMsg -- * * Get a string message for an error code in either the kernel or * wsock dll's. * * Results: * Pointer to per-thread LocalAlloc'ed memory. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * NsWin32ErrMsg(int err) { char *msg; msg = Ns_TlsGet(&tls); if (msg == NULL) { msg = ns_malloc(100); Ns_TlsSet(&tls, msg); } sprintf(msg, "win32 error code: %d", err); return msg; } /* *---------------------------------------------------------------------- * * NsConnectService -- * * Attach to the service control manager at startup. * * Results: * None. * * Side effects: * Service control manager will create a new thread running * ServiceMain(). * *---------------------------------------------------------------------- */ int NsConnectService(void) { SERVICE_TABLE_ENTRY table[2]; char buf[PATH_MAX]; char *log, *null; int fd; BOOL ok; /* * Open a temporary log, ensuring it's opened * on fd 2 for later dup2 in NsLogOpen(). */ log = null = "nul:"; if (GetTempPath(sizeof(buf) - sizeof(NSD_NAME) - 7, buf) > 0) { strcat(buf, NSD_NAME ".XXXXXX"); log = _mktemp(buf); } if (log == NULL) { log = null; } _fcloseall(); for (fd = 0; fd < 3; ++fd) { close(fd); } freopen(null, "rt", stdin); freopen(log, "wt", stdout); freopen(log, "wt", stderr); Ns_Log(Notice, "nswin32: connecting to service control manager"); service = 1; table[0].lpServiceName = NSD_NAME; table[0].lpServiceProc = ServiceMain; table[1].lpServiceName = NULL; table[1].lpServiceProc = NULL; ok = StartServiceCtrlDispatcher(table); if (!ok) { Ns_Log(Error, "nswin32: " "failed to contact service control dispatcher: '%s'", SysErrMsg()); } else if (log != null) { unlink(log); } return (ok ? NS_OK : NS_ERROR); } /* *---------------------------------------------------------------------- * * NsRemoveService -- * * Remove a previously installed service. * * Results: * None. * * Side effects: * Service should stop and then disappear from the list in the * services control panel. * *---------------------------------------------------------------------- */ int NsRemoveService(char *server) { SC_HANDLE hmgr, hsrv; SERVICE_STATUS status; Ns_DString name; BOOL ok; Ns_DStringInit(&name); GetServiceName(&name, server); ok = FALSE; hmgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (hmgr != NULL) { hsrv = OpenService(hmgr, name.string, SERVICE_ALL_ACCESS); if (hsrv != NULL) { ControlService(hsrv, SERVICE_CONTROL_STOP, &status); ok = DeleteService(hsrv); CloseServiceHandle(hsrv); } CloseServiceHandle(hmgr); } if (ok) { Ns_Log(Notice, "nswin32: removed service: %s", name.string); } else { Ns_Log(Error, "nswin32: failed to remove %s service: %s", name.string, SysErrMsg()); } Ns_DStringFree(&name); return (ok ? NS_OK : NS_ERROR); } /* *---------------------------------------------------------------------- * * NsInstallService -- * * Install as an NT service. * * Results: * None. * * Side effects: * Service should appear in the list in the services control panel. * *---------------------------------------------------------------------- */ int NsInstallService(char *server) { SC_HANDLE hmgr, hsrv; BOOL ok; char nsd[PATH_MAX], config[PATH_MAX]; Ns_DString name, cmd; ok = FALSE; if (_fullpath(config, nsconf.config, sizeof(config)) == NULL) { Ns_Log(Error, "nswin32: invalid config path '%s'", nsconf.config); } else if (!GetModuleFileName(NULL, nsd, sizeof(nsd))) { Ns_Log(Error, "nswin32: failed to find nsd.exe: '%s'", SysErrMsg()); } else { Ns_DStringInit(&name); Ns_DStringInit(&cmd); Ns_DStringVarAppend(&cmd, "\"", nsd, "\"", " -S -s ", server, " -t \"", config, "\"", NULL); GetServiceName(&name, server); Ns_Log(Notice, "nswin32: installing %s service: %s", name.string, cmd.string); hmgr = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (hmgr != NULL) { hsrv = CreateService(hmgr, name.string, name.string, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, cmd.string, NULL, NULL, "TcpIp\0", NULL, NULL); if (hsrv != NULL) { CloseServiceHandle(hsrv); ok = TRUE; } CloseServiceHandle(hmgr); } if (!ok) { Ns_Log(Error, "nswin32: failed to install service '%s': '%s'", name.string, SysErrMsg()); } Ns_DStringFree(&name); Ns_DStringFree(&cmd); } return (ok ? NS_OK : NS_ERROR); } /* *---------------------------------------------------------------------- * * NsHandleSignals -- * * Loop endlessly, processing HUP signals until a TERM * signal arrives. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsHandleSignals(void) { int pending; /* * If running as a service, stop the ticker thread and report * startup complete. Otherwise, register a handler which will * initiate an orderly shutdown on Ctrl-C. */ if (!service) { SetConsoleCtrlHandler(ConsoleHandler, TRUE); } else { StopTicker(); ReportStatus(SERVICE_RUNNING, NO_ERROR, 0); } Ns_MutexSetName2(&lock, "ns", "signal"); do { Ns_MutexLock(&lock); while (sigpending == 0) { Ns_CondWait(&cond, &lock); } pending = sigpending; sigpending = 0; Ns_MutexUnlock(&lock); if (pending & NS_SIGHUP) { NsRunSignalProcs(); } } while (!(pending & NS_SIGTERM)); /* * If running as a service, startup the ticker thread again * to keep updating status until shutdown is complete. */ if (service) { StartTicker(SERVICE_STOP_PENDING); } } /* *---------------------------------------------------------------------- * * NsSendSignal -- * * Send a signal to wakeup NsHandleSignals. As on Unix, a signal * sent multiple times is only received once. * * Results: * None. * * Side effects: * Main thread will wakeup. * *---------------------------------------------------------------------- */ void NsSendSignal(int sig) { switch (sig) { case NS_SIGTERM: case NS_SIGHUP: Ns_MutexLock(&lock); sigpending |= sig; Ns_CondSignal(&cond); Ns_MutexUnlock(&lock); break; default: Ns_Fatal("nswin32: invalid signal: %d", sig); break; } } /* *---------------------------------------------------------------------- * * ns_socknbclose -- * * Perform a non-blocking socket close via the socket callback * thread. This is only called by a timeout in Ns_SockTimedConnect. * * Results: * 0 or SOCKET_ERROR. * * Side effects: * Socket will be closed when writable. * *---------------------------------------------------------------------- */ int ns_socknbclose(SOCKET sock) { if (Ns_SockCloseLater(sock) != NS_OK) { return SOCKET_ERROR; } return 0; } /* *---------------------------------------------------------------------- * * ns_sockdup -- * * Duplicate a socket. This is used in the old ns_sock Tcl cmds. * * Results: * New handle to underlying socket. * * Side effects: * None. * *---------------------------------------------------------------------- */ SOCKET ns_sockdup(SOCKET sock) { HANDLE hp, src, dup; src = (HANDLE) sock; hp = GetCurrentProcess(); if (!DuplicateHandle(hp, src, hp, &dup, 0, FALSE, DUPLICATE_SAME_ACCESS)) { return INVALID_SOCKET; } return (SOCKET) dup; } /* *---------------------------------------------------------------------- * * link, symlink, kill -- * * Stubs for missing Unix routines. This is done simply to avoid * more ifdef's in the code. * * Results: * -1. * * Side effects: * Sets errno to EINVAL. * *---------------------------------------------------------------------- */ int link(char *from, char *to) { errno = EINVAL; return -1; } int symlink(char *from, char *to) { errno = EINVAL; return -1; } int kill(int pid, int sig) { errno = EINVAL; return -1; } /* *---------------------------------------------------------------------- * * truncate -- * * Implement Unix truncate. * * Results: * 0 if ok or -1 on error. * * Side effects: * File is opened, truncated, and closed. * *---------------------------------------------------------------------- */ int truncate(char *file, off_t size) { int fd; fd = open(file, O_WRONLY|O_BINARY); if (fd < 0) { return -1; } size = _chsize(fd, size); close(fd); if (size != 0) { return -1; } return 0; } /* *---------------------------------------------------------------------- * * ConsoleHandler -- * * Callback when the Ctrl-C is pressed. * * Results: * TRUE. * * Side effects: * Shutdown is initiated. * *---------------------------------------------------------------------- */ static BOOL WINAPI ConsoleHandler(DWORD ignored) { SetConsoleCtrlHandler(ConsoleHandler, FALSE); NsSendSignal(NS_SIGTERM); return TRUE; } /* *---------------------------------------------------------------------- * * GetServiceName -- * * Construct the service name for the corresponding server. * * Results: * Pointer to given dstring string. * * Side effects: * None. * *---------------------------------------------------------------------- */ static char * GetServiceName(Ns_DString *dsPtr, char *server) { Ns_DStringVarAppend(dsPtr, NSD_NAME, "-", server, NULL); return dsPtr->string; } /* *---------------------------------------------------------------------- * * StartTicker, StopTicker -- * * Start and stop the background ticker thread which keeps the * service control manager informed of during startup and * shutdown. * * Results: * None. * * Side effects: * Thread is created or signalled to stop and joined. * *---------------------------------------------------------------------- */ static void StartTicker(DWORD pending) { Ns_MutexLock(&lock); tick = 1; Ns_MutexUnlock(&lock); Ns_ThreadCreate(ServiceTicker, (void *) pending, 0, &tickThread); } static void StopTicker(void) { Ns_MutexLock(&lock); tick = 0; Ns_CondBroadcast(&cond); Ns_MutexUnlock(&lock); Ns_ThreadJoin(&tickThread, NULL); } /* *---------------------------------------------------------------------- * * ServiceTicker -- * * Background ticker created by StartTicker which does nothing * but send the message repeatedly until signaled to stop. * * Results: * None. * * Side effects: * Service control manager is kept informed of progress. * *---------------------------------------------------------------------- */ static void ServiceTicker(void *arg) { Ns_Time timeout; DWORD pending = (DWORD) arg; Ns_ThreadSetName("-ticker-"); Ns_MutexLock(&lock); do { ReportStatus(pending, NO_ERROR, 2000); Ns_GetTime(&timeout); Ns_IncrTime(&timeout, 1, 0); Ns_CondTimedWait(&cond, &lock, &timeout); } while (tick); Ns_MutexUnlock(&lock); } /* *---------------------------------------------------------------------- * * ServiceMain -- * * Startup routine created by the service control manager. This * routine initializes the structure for reporting status, * starts the ticker, and then re-enters Ns_Main() where it * was left off when NsServiceConnect() was called. * * Results: * None. * * Side effects: * Server startup continues. * *---------------------------------------------------------------------- */ static VOID WINAPI ServiceMain(DWORD argc, LPTSTR *argv) { hStatus = RegisterServiceCtrlHandler(argv[0], ServiceHandler); if (hStatus == 0) { Ns_Fatal("nswin32: RegisterServiceCtrlHandler() failed: '%s'",SysErrMsg()); } curStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; curStatus.dwServiceSpecificExitCode = 0; StartTicker(SERVICE_START_PENDING); Ns_Main(argc, argv, NULL); StopTicker(); ReportStatus(SERVICE_STOP_PENDING, NO_ERROR, 100); ReportStatus(SERVICE_STOPPED, 0, 0); Ns_Log(Notice, "nswin32: service exiting"); } /* *---------------------------------------------------------------------- * * ServiceHandler -- * * Callback when the service control manager wants to signal the * server (i.e., when service is stopped via services control * panel). * * Results: * None. * * Side effects: * Signal may be sent. * *---------------------------------------------------------------------- */ static VOID WINAPI ServiceHandler(DWORD code) { if (code == SERVICE_CONTROL_STOP || code == SERVICE_CONTROL_SHUTDOWN) { NsSendSignal(NS_SIGTERM); } else { ReportStatus(code, NO_ERROR, 0); } } /* *---------------------------------------------------------------------- * * ReportStatus -- * * Update the service control manager with the current state. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void ReportStatus(DWORD state, DWORD code, DWORD hint) { static DWORD check = 1; if (state == SERVICE_START_PENDING) { curStatus.dwControlsAccepted = 0; } else { curStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; } curStatus.dwCurrentState = state; curStatus.dwWin32ExitCode = code; curStatus.dwWaitHint = hint; if (state == SERVICE_RUNNING || state == SERVICE_STOPPED) { curStatus.dwCheckPoint = 0; } else { curStatus.dwCheckPoint = check++; } if (hStatus != 0 && SetServiceStatus(hStatus, &curStatus) != TRUE) { Ns_Fatal("nswin32: SetServiceStatus(%d) failed: '%s'", state, SysErrMsg()); } } aolserver4-4.5.1/nsd/tclrequest.c0000644000175000017500000004075410302716620016561 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * tclrequest.c -- * * Routines for Tcl proc and ADP registered requests. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/tclrequest.c,v 1.13 2005/08/23 22:05:04 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #define ARGS_UNKNOWN (-1) #define ARGS_FAILED (-2) /* * The following structure defines the proc callback context. */ typedef struct { char *name; char *args; int nargs; } Proc; /* * Local functions defined in this file */ static Ns_OpProc ProcRequest; static Ns_OpProc AdpRequest; static Ns_FilterProc ProcFilter; static Proc *NewProc(char *name, char *args); static Ns_Callback FreeProc; static void AppendConnId(Tcl_DString *dsPtr, Ns_Conn *conn); static int RegisterFilterObj(NsInterp *itPtr, int when, int objc, Tcl_Obj *CONST objv[]); static int GetNumArgs(Tcl_Interp *interp, Proc *procPtr); /* *---------------------------------------------------------------------- * * Ns_TclRequest -- * * Dummy up a direct call to TclProcRequest for a connection. * * Results: * See TclDoOp. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_TclRequest(Ns_Conn *conn, char *name) { Proc proc; proc.name = name; proc.args = NULL; proc.nargs = 0; return ProcRequest(&proc, conn); } /* *---------------------------------------------------------------------- * * NsTclRegisterProcObjCmd -- * * Implements ns_register_proc as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclRegisterProcObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[], int adp) { int flags, idx; Proc *procPtr; NsInterp *itPtr = arg; char *server, *method, *url, *name, *args; if (objc < 4 || objc > 7) { badargs: Tcl_WrongNumArgs(interp, 1, objv, "?-noinherit? method url proc ?args?"); return TCL_ERROR; } if (STREQ(Tcl_GetString(objv[1]), "-noinherit")) { if (objc < 5) { goto badargs; } flags = NS_OP_NOINHERIT; idx = 2; } else { if (objc == 7) { goto badargs; } flags = 0; idx = 1; } if (NsTclGetServer(itPtr, &server) != TCL_OK) { return TCL_ERROR; } method = Tcl_GetString(objv[idx++]); url = Tcl_GetString(objv[idx++]); name = Tcl_GetString(objv[idx++]); args = (idx < objc ? Tcl_GetString(objv[idx]) : NULL); procPtr = NewProc(name, args); Ns_RegisterRequest(server, method, url, ProcRequest, FreeProc, procPtr, flags); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclRegisterAdpObjCmd -- * * Implements ns_register_adp as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclRegisterAdpObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsInterp *itPtr = arg; char *server, *method, *url, *file; if (objc != 4 && objc != 5) { badargs: Tcl_WrongNumArgs(interp, 1, objv, "?-noinherit? method url file"); return TCL_ERROR; } if (objc == 5 && !STREQ(Tcl_GetString(objv[1]), "-noinherit")) { goto badargs; } if (NsTclGetServer(itPtr, &server) != TCL_OK) { return TCL_ERROR; } method = Tcl_GetString(objv[objc-3]); url = Tcl_GetString(objv[objc-2]); file = ns_strdup(Tcl_GetString(objv[objc-1])); Ns_RegisterRequest(server, method, url, AdpRequest, ns_free, file, objc == 5 ? NS_OP_NOINHERIT : 0); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclUnRegisterObjCmd -- * * Implements ns_unregister_proc and ns_unregister_adp commands. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclUnRegisterObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsInterp *itPtr = arg; char *server; if (objc != 3 && objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "?-noinherit? method url"); return TCL_ERROR; } if (objc == 4 && !STREQ(Tcl_GetString(objv[1]), "-noinherit")) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "unknown flag \"", Tcl_GetString(objv[1]), "\": should be -noinherit", NULL); return TCL_ERROR; } if (NsTclGetServer(itPtr, &server) != TCL_OK) { return TCL_ERROR; } Ns_UnRegisterRequest(server, Tcl_GetString(objv[objc-2]), Tcl_GetString(objv[objc-1]), objc == 3 ? 1 : 0); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclRegisterFilterObjCmd -- * * Implements ns_register_filter. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclRegisterFilterObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsInterp *itPtr = arg; int lobjc; Tcl_Obj **lobjv; int when, i; static CONST char *wopt[] = { "prequeue", "preauth", "postauth", "trace", NULL }; enum { PQIdx, PRIdx, POIdx, TRIdx, } widx; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?args?"); return TCL_ERROR; } if (objc != 5 && objc != 6) { Tcl_WrongNumArgs(interp, 1, objv, "when method url script ?arg?"); return TCL_ERROR; } if (Tcl_ListObjGetElements(interp, objv[1], &lobjc, &lobjv) != TCL_OK) { return TCL_ERROR; } when = 0; for (i = 0; i < lobjc; ++i) { if (Tcl_GetIndexFromObj(interp, lobjv[i], wopt, "when", 0, (int *) &widx) != TCL_OK) { return TCL_ERROR; } switch (widx) { case PQIdx: when |= NS_FILTER_PRE_QUEUE; break; case PRIdx: when |= NS_FILTER_PRE_AUTH; break; case POIdx: when |= NS_FILTER_POST_AUTH; break; case TRIdx: when |= NS_FILTER_TRACE; break; } } if (when == 0) { Tcl_SetResult(interp, "blank filter when specification", TCL_STATIC); return TCL_ERROR; } return RegisterFilterObj(itPtr, when, objc - 2, objv + 2); } /* *---------------------------------------------------------------------- * * NsTclRegisterTraceObjCmd -- * * Implements ns_register_trace as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclRegisterTraceObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsInterp *itPtr = arg; if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 1, objv, "method urlPattern script ?arg?"); return TCL_ERROR; } return RegisterFilterObj(itPtr, NS_FILTER_VOID_TRACE, objc - 1, objv + 1); } /* *---------------------------------------------------------------------- * * NsTclRegisterFastPathObjCmd -- * * Implements ns_register_fastpath as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclRegisterFastPathObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsInterp *itPtr = arg; NsServer *servPtr = itPtr->servPtr; char *server, *method, *url; int flags, idx; if (objc < 3 || objc > 4) { badargs: Tcl_WrongNumArgs(interp, 1, objv, "?-noinherit? method url"); return TCL_ERROR; } flags = 0; idx = 1; if (objc == 4) { if (!STREQ(Tcl_GetString(objv[1]), "-noinherit")) { goto badargs; } flags = NS_OP_NOINHERIT; idx++; } server = servPtr->server; method = Tcl_GetString(objv[idx++]); url = Tcl_GetString(objv[idx++]); Ns_RegisterRequest(server, method, url, Ns_FastPathOp, NULL, servPtr, flags); return TCL_OK; } /* *---------------------------------------------------------------------- * * AdpRequest -- * * Ns_OpProc for registered ADP's. * * Results: * See Ns_AdpRequest. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int AdpRequest(void *arg, Ns_Conn *conn) { return Ns_AdpRequest(conn, (char *) arg); } /* *---------------------------------------------------------------------- * * RequstProc -- * * Ns_OpProc for ns_register_proc callbacks. Constructs and * evaluates the given script. * * Results: * Standard request result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ProcRequest(void *arg, Ns_Conn *conn) { Proc *procPtr = arg; Tcl_Interp *interp = Ns_GetConnInterp(conn); int result, cnt; Tcl_DString script; /* * Construct and evaluate the script. The legacy connId parameter is * no longer required so the code below supports three cases: * * 1. No args: Append nothing. * 2. One arg: Append the callback arg only. * 3. Two or more args: Append the connId and callback arg. */ Tcl_DStringInit(&script); Tcl_DStringAppendElement(&script, procPtr->name); cnt = GetNumArgs(interp, procPtr); if (cnt != 0) { if (cnt > 1) { AppendConnId(&script, conn); } Tcl_DStringAppendElement(&script, procPtr->args ? procPtr->args : ""); } result = Tcl_EvalEx(interp, script.string, script.length, 0); Tcl_DStringFree(&script); /* * On script error, generate an internal error response if * no content has been sent on the connection. */ if (result != TCL_OK) { Ns_TclLogError(interp); if (Ns_ConnResetReturn(conn) == NS_OK) { return Ns_ConnReturnInternalError(conn); } } return NS_OK; } /* *---------------------------------------------------------------------- * * ProcFilter -- * * Callback for Tcl-based connection filters. * * Results: * Standard filter result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ProcFilter(void *arg, Ns_Conn *conn, int why) { Proc *procPtr = arg; Tcl_Interp *interp = Ns_GetConnInterp(conn); Tcl_DString script; int status, cnt; CONST char *result; /* * Construct and evaluate the script. The filter arg and legacy connId * args will be appended before the "why" argument if present. */ Tcl_DStringInit(&script); Tcl_DStringAppendElement(&script, procPtr->name); cnt = GetNumArgs(interp, procPtr); if (cnt > 1) { if (cnt > 2) { AppendConnId(&script, conn); } Tcl_DStringAppendElement(&script, procPtr->args ? procPtr->args : ""); } switch (why) { case NS_FILTER_PRE_AUTH: Tcl_DStringAppendElement(&script, "preauth"); break; case NS_FILTER_POST_AUTH: Tcl_DStringAppendElement(&script, "postauth"); break; case NS_FILTER_TRACE: Tcl_DStringAppendElement(&script, "trace"); break; default: /* NB: Do not append a why argument. */ break; } Tcl_AllowExceptions(interp); status = Tcl_EvalEx(interp, script.string, script.length, 0); Tcl_DStringFree(&script); if (status != TCL_OK) { Ns_TclLogError(interp); } /* * Determine the filter return code from the Tcl result string. */ if (why == NS_FILTER_VOID_TRACE) { /* NB: Result string ignored for traces. */ status = NS_OK; } else if (status != TCL_OK) { /* NB: Filter error on script error. */ status = NS_ERROR; } else { result = Tcl_GetStringResult(interp); if (STREQ(result, "filter_ok")) { status = NS_OK; } else if (STREQ(result, "filter_break")) { status = NS_FILTER_BREAK; } else if (STREQ(result, "filter_return")) { status = NS_FILTER_RETURN; } else { Ns_Log(Warning, "tclfilter: %s return invalid result: %s", procPtr->name, result); status = NS_ERROR; } } return status; } /* *---------------------------------------------------------------------- * * GetNumArgs -- * * Get the number of arguments for a given callback, invoked * the first time the callback is used. * * Results: * Number of args or -1 on error. * * Side effects: * Will invoke script to determine arg count. * *---------------------------------------------------------------------- */ static int GetNumArgs(Tcl_Interp *interp, Proc *procPtr) { Tcl_Obj *objPtr; Tcl_DString ds; if (procPtr->nargs == ARGS_UNKNOWN) { Tcl_DStringInit(&ds); Tcl_DStringAppend(&ds, "llength [info args ", -1); Tcl_DStringAppendElement(&ds, procPtr->name); Tcl_DStringAppend(&ds, "]", 1); if (Tcl_Eval(interp, ds.string) != TCL_OK) { procPtr->nargs = ARGS_FAILED; } else { objPtr = Tcl_GetObjResult(interp); if (Tcl_GetIntFromObj(interp, objPtr, &procPtr->nargs) != TCL_OK) { procPtr->nargs = ARGS_FAILED; } } Tcl_DStringFree(&ds); } return procPtr->nargs; } /* *---------------------------------------------------------------------- * * RegisterFilterObj -- * * Register a Tcl filter. * * Results: * TCL_ERROR if no server, TCL_OK otherwise. * * Side effects: * Will register a filter to run later. * *---------------------------------------------------------------------- */ static int RegisterFilterObj(NsInterp *itPtr, int when, int objc, Tcl_Obj *CONST objv[]) { Proc *procPtr; char *server, *method, *url, *name, *args; if (NsTclGetServer(itPtr, &server) != TCL_OK) { return TCL_ERROR; } method = Tcl_GetString(objv[0]); url = Tcl_GetString(objv[1]); name = Tcl_GetString(objv[2]); args = (objc > 3 ? Tcl_GetString(objv[3]) : NULL); procPtr = NewProc(name, args); Ns_RegisterFilter(server, method, url, ProcFilter, when, procPtr); return TCL_OK; } /* *---------------------------------------------------------------------- * * AppendConnId -- * * Append the Tcl conn handle to a dstring. * * Results: * None. * * Side effects: * Appends to the dstring. * *---------------------------------------------------------------------- */ static void AppendConnId(Tcl_DString *dsPtr, Ns_Conn *conn) { Conn *connPtr = (Conn *) conn; Tcl_DStringAppendElement(dsPtr, connPtr->idstr); } /* *---------------------------------------------------------------------- * * NewProc, FreeProc -- * * Create or delete a Proc structure. * * Results: * For NewProc, pointer to new Proc. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Proc * NewProc(char *name, char *args) { Proc *procPtr; procPtr = ns_malloc(sizeof(Proc)); procPtr->name = ns_strdup(name); procPtr->args = ns_strcopy(args); procPtr->nargs = ARGS_UNKNOWN; return procPtr; } static void FreeProc(void *arg) { Proc *procPtr = arg; ns_free(procPtr->name); if (procPtr->args != NULL) { ns_free(procPtr->args); } ns_free(procPtr); } aolserver4-4.5.1/nsd/dstring.c0000644000175000017500000001622307632160027016040 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dstring.c -- * * Ns_DString routines. Ns_DString's are now compatible * with Tcl_DString's. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/dstring.c,v 1.17 2003/03/07 18:08:23 vasiljevic Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" /* *---------------------------------------------------------------------- * * Ns_DStringVarAppend -- * * Append a variable number of string arguments to a dstring. * * Results: * Pointer to current dstring value. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DStringVarAppend(Ns_DString *dsPtr, ...) { register char *s; va_list ap; va_start(ap, dsPtr); while ((s = va_arg(ap, char *)) != NULL) { Ns_DStringAppend(dsPtr, s); } va_end(ap); return dsPtr->string; } /* *---------------------------------------------------------------------- * * Ns_DStringExport -- * * Return a copy of the string value on the heap. * Ns_DString is left in an initialized state. * * Results: * Pointer to ns_malloc'ed string which must be eventually freed. * * Side effects: * None. * * *---------------------------------------------------------------------- */ char * Ns_DStringExport(Ns_DString *dsPtr) { char *s; if (dsPtr->string != dsPtr->staticSpace) { s = dsPtr->string; dsPtr->string = dsPtr->staticSpace; } else { s = ns_malloc((size_t)dsPtr->length+1); memcpy(s, dsPtr->string, (size_t)(dsPtr->length+1)); } Ns_DStringFree(dsPtr); return s; } /* *---------------------------------------------------------------------- * Ns_DStringAppendArg -- * * Append a string including its terminating null byte. * * Results: * Pointer to the current string value. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DStringAppendArg(Ns_DString *dsPtr, char *string) { return Ns_DStringNAppend(dsPtr, string, (int)strlen(string) + 1); } /* *---------------------------------------------------------------------- * Ns_DStringPrintf -- * * Append a sequence of values using a format string * * Results: * Pointer to the current string value. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DStringPrintf(Ns_DString *dsPtr, char *fmt,...) { char *str; va_list ap; va_start(ap, fmt); str = Ns_DStringVPrintf(dsPtr, fmt, ap); va_end(ap); return str; } /* *---------------------------------------------------------------------- * Ns_DStringAppendArgv -- * * Append an argv vector pointing to the null terminated * strings in the given dstring. * * Results: * Pointer char ** vector appended to end of dstring. * * Side effects: * None. * *---------------------------------------------------------------------- */ char ** Ns_DStringAppendArgv(Ns_DString *dsPtr) { char *s, **argv; int i, argc, len, size; /* * Determine the number of strings. */ argc = 0; s = dsPtr->string; while (*s != '\0') { ++argc; s += strlen(s) + 1; } /* * Resize the dstring with space for the argv aligned * on an 8 byte boundry. */ len = ((dsPtr->length / 8) + 1) * 8; size = len + (sizeof(char *) * (argc + 1)); Ns_DStringSetLength(dsPtr, size); /* * Set the argv elements to the strings. */ s = dsPtr->string; argv = (char **) (s + len); for (i = 0; i < argc; ++i) { argv[i] = s; s += strlen(s) + 1; } argv[i] = NULL; return argv; } /* *---------------------------------------------------------------------- * Ns_DStringPop -- * * Allocate a new dstring. * * Results: * Pointer to Ns_DString. * * Side effects: * None. * *---------------------------------------------------------------------- */ Ns_DString * Ns_DStringPop(void) { Ns_DString *dsPtr; dsPtr = ns_malloc(sizeof(Ns_DString)); Ns_DStringInit(dsPtr); return dsPtr; } /* *---------------------------------------------------------------------- * Ns_DStringPush -- * * Free a dstring. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_DStringPush(Ns_DString *dsPtr) { Ns_DStringFree(dsPtr); ns_free(dsPtr); } /* *---------------------------------------------------------------------- * Compatibility routines -- * * Wrappers for old Ns_DString functions. * * Results: * See Tcl_DString routine. * * Side effects: * See Tcl_DString routine. * *---------------------------------------------------------------------- */ #undef Ns_DStringInit void Ns_DStringInit(Ns_DString *dsPtr) { Tcl_DStringInit(dsPtr); } #undef Ns_DStringFree void Ns_DStringFree(Ns_DString *dsPtr) { Tcl_DStringFree(dsPtr); } #undef Ns_DStringSetLength void Ns_DStringSetLength(Ns_DString *dsPtr, int length) { Tcl_DStringSetLength(dsPtr, length); } #undef Ns_DStringTrunc void Ns_DStringTrunc(Ns_DString *dsPtr, int length) { Tcl_DStringTrunc(dsPtr, length); } #undef Ns_DStringNAppend char * Ns_DStringNAppend(Ns_DString *dsPtr, char *string, int length) { return Tcl_DStringAppend(dsPtr, string, length); } #undef Ns_DStringAppend char * Ns_DStringAppend(Ns_DString *dsPtr, char *string) { return Tcl_DStringAppend(dsPtr, string, -1); } #undef Ns_DStringAppendElement char * Ns_DStringAppendElement(Ns_DString *dsPtr, char *string) { return Tcl_DStringAppendElement(dsPtr, string); } #undef Ns_DStringLength int Ns_DStringLength(Ns_DString *dsPtr) { return dsPtr->length; } #undef Ns_DStringValue char * Ns_DStringValue(Ns_DString *dsPtr) { return dsPtr->string; } aolserver4-4.5.1/nsd/adpparse.c0000644000175000017500000005100510445536125016164 0ustar frankiefrankie/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * adpparse.c -- * * ADP parser. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/adpparse.c,v 1.21 2006/06/19 15:01:41 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsd.h" #define SERV_STREAM 1 #define SERV_RUNAT 2 #define SERV_NOTTCL 4 #define TAG_ADP 1 #define TAG_PROC 2 #define TAG_SCRIPT 3 #define TAG_SERVER 4 #define APPEND "ns_adp_append " #define APPEND_LEN (sizeof(APPEND)-1) #define LENSZ (sizeof(int)) /* * The following structure maintains proc and adp registered tags. * String bytes directly follow the Tag struct in the same allocated * block. */ typedef struct Tag { int type; /* Type of tag, ADP or proc. */ char *tag; /* The name of the tag (e.g., "mytag") */ char *endtag; /* The closing tag or null (e.g., "/mytag")*/ char *string; /* Proc (e.g., "ns_adp_netscape") or ADP string. */ } Tag; /* * The following strucutre maintains state while parsing an ADP block. */ typedef struct Parse { AdpCode *codePtr; /* Pointer to compiled AdpCode struct. */ int line; /* Current line number while parsing. */ Tcl_DString lens; /* Length of text or script block. */ Tcl_DString lines; /* Line number of block for debug messages. */ } Parse; /* * Local functions defined in this file */ static void AppendBlock(Parse *parsePtr, char *s, char *e, int type); static void AppendTag(Parse *parsePtr, Tag *tagPtr, char *as, char *ae, char *se); static int RegisterObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv, int type); static void Blocks2Script(AdpCode *codePtr); static void AppendLengths(AdpCode *codePtr, int *lens, int *lines); static void GetTag(Tcl_DString *dsPtr, char *s, char *e, char **aPtr); static char *GetScript(char *tag, char *a, char *e, int *streamPtr); /* *---------------------------------------------------------------------- * * Ns_AdpRegisterParser -- * * Register an ADP parser (no longer supported). * * Results: * NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_AdpRegisterParser(char *extension, Ns_AdpParserProc *proc) { return NS_ERROR; } /* *---------------------------------------------------------------------- * * NsTclAdpRegisterAdpObjCmd, NsTclAdpRegisterProcObjCmd, * NsTclAdpRegisterScriptObjCmd -- * * Register an proc, script, are ADP string tag. * * * Results: * Standard Tcl result. * * Side effects: * An ADP tag may be added to the hashtable. * *---------------------------------------------------------------------- */ int NsTclAdpRegisterAdpObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { return RegisterObjCmd(arg, interp, objc, objv, TAG_ADP); } int NsTclAdpRegisterProcObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { return RegisterObjCmd(arg, interp, objc, objv, TAG_PROC); } int NsTclAdpRegisterScriptObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { return RegisterObjCmd(arg, interp, objc, objv, TAG_SCRIPT); } static int RegisterObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv, int type) { NsInterp *itPtr = arg; NsServer *servPtr = itPtr->servPtr; char *string, *end, *tag; Tcl_HashEntry *hPtr; int new, slen, elen, tlen; Tcl_DString tbuf; Tag *tagPtr; if (objc != 4 && objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "tag ?endtag? [adp|proc]"); return TCL_ERROR; } string = Tcl_GetStringFromObj(objv[objc-1], &slen); ++slen; if (objc == 3) { end = NULL; elen = 0; } else { end = Tcl_GetStringFromObj(objv[2], &elen); ++elen; } tagPtr = ns_malloc(sizeof(Tag) + slen + elen); tagPtr->type = type; tagPtr->string = (char *) tagPtr + sizeof(Tag); memcpy(tagPtr->string, string, (size_t) slen); Tcl_UtfToLower(tagPtr->string); if (end == NULL) { tagPtr->endtag = NULL; } else { tagPtr->endtag = tagPtr->string + slen; memcpy(tagPtr->endtag, end, (size_t) elen); Tcl_UtfToLower(tagPtr->endtag); } Tcl_DStringInit(&tbuf); tag = Tcl_GetStringFromObj(objv[1], &tlen); Tcl_UtfToLower(Tcl_DStringAppend(&tbuf, tag, tlen)); Ns_RWLockWrLock(&servPtr->adp.taglock); hPtr = Tcl_CreateHashEntry(&servPtr->adp.tags, tbuf.string, &new); if (!new) { ns_free(Tcl_GetHashValue(hPtr)); } Tcl_SetHashValue(hPtr, tagPtr); tagPtr->tag = Tcl_GetHashKey(&servPtr->adp.tags, hPtr); Ns_RWLockUnlock(&servPtr->adp.taglock); Tcl_DStringFree(&tbuf); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsAdpParse -- * * Parse a string of ADP text/script. Parsing is done in a single, * top to bottom pass, looking for the following four types of * embedded script sequences: * * 1. <% tcl script %> * 2. * 3. * 4. text * * Nested sequences are handled for each case, for example: * * Text <% ns_adp_eval {<% ... %>} %> text ... * * Results: * None. * * Side effects: * Given AdpCode structure is initialized and filled in with copy * of parsed ADP. * *---------------------------------------------------------------------- */ void NsAdpParse(AdpCode *codePtr, NsServer *servPtr, char *adp, int flags) { int level, stream, streamdone; Tag *tagPtr; char *script, *s, *e, *n; char *a, *as, *ae, *text; Tcl_DString tag; Tcl_HashEntry *hPtr; enum { TagNext, TagScript, TagReg } state; Parse parse; /* * Initialize the code and parse structures. */ Tcl_DStringInit(&codePtr->text); codePtr->nscripts = codePtr->nblocks = 0; parse.line = 0; parse.codePtr = codePtr; Tcl_DStringInit(&parse.lens); Tcl_DStringInit(&parse.lines); /* * Parse ADP one tag at a time. */ text = adp; streamdone = stream = 0; level = 0; state = TagNext; Tcl_DStringInit(&tag); Ns_RWLockRdLock(&servPtr->adp.taglock); while ((s = strchr(adp, '<')) && (e = strchr(s, '>'))) { /* * Process the tag depending on the current state. */ switch (state) { case TagNext: /* * Look for a <% ... %> sequence. */ if (s[1] == '%' && s[2] != '>') { /* NB: Avoid <%>. */ /* * Find the cooresponding %> beyond any additional * nested <% ... %> sequences. */ level = 0; e = strstr(e - 1, "%>"); n = s + 2; while (e != NULL && (n = strstr(n, "<%")) != NULL && n < e) { ++level; n = n + 2; } while (e != NULL && level > 0) { e = strstr(e + 2, "%>"); --level; } if (e == NULL) { /* * No matching %> found. Append text and invalid * opening <% before searching for next ADP tag. */ AppendBlock(&parse, text, s + 2, 't'); text = s + 2; /* NB: Next text after invalid opening <%. */ } else { /* * Append text block followed by script block unless * in safe mode which suppresses in-line scripts and * continue looking for next ADP tag. */ AppendBlock(&parse, text, s, 't'); if (!(flags & ADP_SAFE)) { if (s[2] != '=') { AppendBlock(&parse, s + 2, e, 's'); } else { AppendBlock(&parse, s + 3, e, 'S'); } } text = e + 2; /* NB: Next text after valid closing %>. */ } s = text - 1; /* NB: Will incr +1, past text, below. */ } else { /* * Check for tag. */ AppendBlock(&parse, text, s, 't'); state = TagScript; level = 1; } else { hPtr = Tcl_FindHashEntry(&servPtr->adp.tags, tag.string); if (hPtr != NULL) { /* * Append text and the registered tag content * if the tag does not require a closing tag. * Otherwise, save the tag attribute offsets * and begin looking for required closing tag. */ AppendBlock(&parse, text, s, 't'); tagPtr = Tcl_GetHashValue(hPtr); if (tagPtr->endtag == NULL) { AppendTag(&parse, tagPtr, a, e, NULL); text = e + 1; } else { as = a; ae = e; level = 1; state = TagReg; } } } } break; case TagScript: /* * Look for cooresponding closing tag, handling * possible nesting of other

You must have the Fancy parameter set to On to use this syntax. The contents of the script are interpreted using the Tcl interpreter. The result is not inserted into the page, however. You can use the ns_puts Tcl function to put content into the page.

The language=tcl attribute is optional. Future enhancements to ADPs will include the capability to embed scripts in other scripting languages, and you will be able to configure the default language. If the language attribute is set to anything except tcl, the script will not be processed, and a warning will be written to the log file.

The runat=server attribute is required. If this attribute is missing, the script will not be processed. The runat=server attribute is necessary so that client-side scripts are not executed accidentally.

The stream=on attribute is optional. If it is included, all output for the rest of the page is streamed out to the browser as soon as it's ready. Streaming is useful when your script may take a long time to complete (such as a complex database query). Content is output to the page gradually as the script is running. One disadvantage of streaming is that the server cannot return a Content-length header with the response. Content-length can speed up the connection, especially if the connection is going through a proxy server.

* <% ... %>

This syntax is evaluated exactly the same as the first syntax, above, except that you cannot specify any of the attributes. The language=Tcl and runat=server attributes are implied. Streaming is not allowed with this syntax, but output within this syntax will be streamed if streaming was turned on in a previous script. This syntax can be used inside HTML tags.

* <%= ... %>

The Tcl commands within these tags are evaluated as the argument to an ns_puts command, which inserts the results into the page. This syntax can be used inside HTML tags.

Registered ADP Tags

You can define your own ADP tags with the ns_adp_registertag or the ns_register_adptag Tcl functions.

You must have the Fancy parameter set to On to use registered ADP tags. You can also set the Taglocks parameter to prevent new registered tags from being created after the first ADP has been served.

ADP Parsers

An ADP parser implements a specific syntax for ADPs. Two ADP parsers are pre-defined for AOLserver:

* adp: The "adp" parser handles only the <% ... %> syntax and the <%= ... %> syntax for ADPs. This parser offers the best performance. fancy: The "fancy" parser handles the <script language=tcl runat=server stream=on> syntax in addition to the other two syntaxes. It also handles registered ADP tags. The TagLocks parameter is enabled, and the ns_register_adptag and ns_adp_registertag commands are enabled. This parser offers a moderate performance degradation as compared to the "adp" parser.

You can register additional ADP parsers using the Ns_AdpRegisterParser C API function.

Configuration

To configure ADP parsers, set parameters in two configuration file sections as follows: 1. Map parsers to file extensions in the

 ns/server/servername/adp/parsers configuration file section. For
 example:
 ns_section "ns/server/server1/adp/parsers"
 ns_param "adp" ".adp"
 ns_param "fancy" ".fadp"

The above configuration specifies that ADPs with the .adp extension will be parsed using the "adp" parser, and ADPs with the .fadp extension will be parsed using the "fancy" parser.

2. Define a default parser in the ns/server/servername/adp section. The default parser will be used for any ADPs with file extensions not associated with a parser. For example:

 ns_section "ns/server/server1/adp"
 ns_param "map" "/*.adp"
 ns_param "map" "/*.inc"
 ns_param "map" "/*.fadp"
 ns_param "DefaultParser" "adp"
 ns_section "ns/server/server1/adp/parsers"
 ns_param "adp" ".adp"
 ns_param "fancy" ".fadp"

ADPs with the .adp extension will use the "adp" parser, and ADPs with the .fadp extension will use the "fancy" extension, as described above. The default ADP parser will be the "adp" parser. Since ADPs with the .inc extension are also allowed, the "adp" parser will be used for those ADPs, because no parser is associated with the .inc extension.

For more information on configuring ADPs, see the ADP configuration file sections starting on page page 56 of the AOLserver Administrator's Guide.

Example ADPs

This section contains the following ADP examples:

Example 1: Return partial HTML page conditionally
Example 2: Return full HTML page conditionally
Example 3: Return information from the database
Example 4: Get form information and insert into the database
Example 5: ADP sampler with includes, recursion, and streaming

Example 1: Return partial HTML page conditionally

This ADP example tests for various browsers and returns a different message in each case.

example1.adp.txt

Example 2: Return full HTML page conditionally

This example consists of a form, cookbook.html, that asks the user whether they want to view a page with or without frames, and an ADP, cookbook.adp, that determines the response and displays the appropriate page, either the page with frames or the page without frames.

This is the cookbook.html file containing the form:

example2a.adp.txt

This is the ADP, cookbook.adp, that determines the response and displays the appropriate page:

example2b.adp.txt

The cookset.html file contains a frame set for the cookbook. The cook.html file contains the cookbook without frames.

Example 3: Return information from the database

This example retrieves information from the database -- a list of tables -- and returns it as the options in a select box. When the user chooses a table from the list, another ADP is run as the POST for the form which retrieves information from the database on the chosen table.

The first ADP, db.adp, creates a form with a select box with the list of database tables:

example3a.adp.txt

The second ADP, db2.adp, is used as the POST from the first ADP:

example3b.adp.txt

Example 4: Get form information and insert into the database

This is another database example, but one where the user types information into a form, and the submit runs an ADP that enters the information into the database. Then it sends an email message to both the db administrator and the user that the record was updated. The survey.html file contains the form and calls the survey.adp file as the POST action.

Here is the survey.html file, which consists of a simple form and a submit button which calls an ADP:

example4a.adp.txt

Here is the survey.adp file, which gets the form data from the survey, inserts it into the database, sends email to the subscription administrator and the user, and displays a confirmation message:

example4b.adp.txt

Example 5: ADP sampler with includes, recursion, and streaming

The following HTML is an example of a page containing several Tcl scripts using the various ADP syntaxes. It invokes some Tcl functions, includes a file, executes another ADP, and uses streaming.

example5a.adp.txt

The standard-header file referenced in the above example looks like this:

This is a standard header.

The time.adp file referenced in the example looks like this:

The time is: <%=[ns_httptime [ns_time]]%>

Because of the streaming used in the last script, the "1...", "2...", "3!" and "End" part of the page will be displayed gradually.

aolserver4-4.5.1/docs/devel/tcl/example2a.adp.txt0000644000175000017500000000066507442210242021426 0ustar frankiefrankie The ABC's of Fruit Cookbook

The ABC's of Fruit Cookbook

How would you like to view this cookbook?

With Frames
Without Frames

aolserver4-4.5.1/docs/devel/tcl/example4b.adp.txt0000644000175000017500000000276507442210243021435 0ustar frankiefrankie Subscription Processed Successfully

Online Newsletter Subscription

Thank You for subscribing to our newsletter! <% # Get form data and assign to variables set r [ns_conn form $conn] set name [ns_set get $r name] set title [ns_set get $r title] set notify [ns_set get $r notify] set sendemail [ns_set get $r sendemail] set emailaddr [ns_set get $r emailaddr] # Set subscription options explicity to 0 if not checked if {$notify != 1} {set notify 0} if {$sendemail != 1} {set sendemail 0} # Update database with new subscription set db [ns_db gethandle] ns_db dml $db \ "insert into test values ([ns_dbquotevalue $name], [ns_dbquotevalue $title], $notify, $sendemail, [ns_dbquotevalue $emailaddr])" # Send email message to subscription administrator set body "A new newsletter subscription was added for " append body $name append body ". The database has been updated." ns_sendmail "subscript@thecompany.com" "dbadmin@thecompany.com" \ "New Subscription" $body # Send email message to user set body "Your online newsletter subscription has been successfully processed." ns_sendmail $emailaddr "dbadmin@thecompany.com" \ "Your Online Subscription" $body # Show type of subscription to user if {$notify == 1} { ns_puts "You will be notified via email when the online newsletter changes." } if {$sendemail == 1} { ns_puts "Future issues of the newsletter will be sent to you via email." } %> aolserver4-4.5.1/docs/devel/tcl/index.html0000644000175000017500000000206607442271273020251 0ustar frankiefrankie AOLserver

AOLserver Tcl Development

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tcl/index.html,v 1.2 2002/03/09 02:26:03 kriston Exp $

AOLserver Tcl API Reference

Tcl Language Manuals

AOLserver Engineering Standards Manual

AOLserver Dynamic Pages (ADP) Overview

Tcl Overview

General Tcl Information

Tcl Libraries

nsv Commands

Tcl Examples

Tcl at ActiveState.com

Tcl Programming FAQ from comp.lang.tcl

comp.lang.tcl USENET Newsgroup

aolserver4-4.5.1/docs/devel/tcl/example2.adp.txt0000644000175000017500000000211707442210242021257 0ustar frankiefrankie This is the cookbook.html file containing the form:

 
 
The ABC's of Fruit Cookbook
 
 
 

The ABC's of Fruit Cookbook

How would you like to view this cookbook?

With Frames
Without Frames

This is the ADP, cookbook.adp, that determines the response and displays the appropriate page:
 
 
The ABC's of Fruit Cookbook
 
 
 <%
 # Get form data and assign to variables
 set r [ns_conn form $conn]
 set question [ns_set get $r question]
 # Display cookbook in appropriate format
 if {$question == "yes"} {ns_adp_include cookset.html} \
 else {ns_adp_include cook.html}
 %>
 

The cookset.html file contains a frame set for the cookbook. The cook.html file contains the cookbook without frames. aolserver4-4.5.1/docs/devel/tcl/example3a.adp.txt0000644000175000017500000000073107442210242021421 0ustar frankiefrankie DB Example

DB Example

Select a db table from the default db pool:

aolserver4-4.5.1/docs/devel/tcl/tcl-libraries.html0000644000175000017500000001765607441736127021714 0ustar frankiefrankie AOLserver

AOLserver Tcl Libraries

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tcl/tcl-libraries.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

What Are Tcl Libraries?

When to Use Tcl Libraries

Tcl Libraries

Tcl Script Order of Evaluation

Tcl-only Modules

Configuration for Tcl Libraries

How to Build and Debug Tcl Scripts

What Are Tcl Libraries?

A Tcl library is simply a directory containing Tcl scripts that are sourced at startup by a virtual server. You can create private libraries for individual virtual servers and public libraries that affect all or some of an installation's virtual servers.

Each Tcl file in a library often contains one or more calls to ns_register_proc, ns_schedule_proc, or ns_register_filter to bind a script to a specific URL or URL hierarchy, plus the Tcl scripts that will handle the URL(s). This example shows the ns_register_proc function being used to bind the Tcl procedure "hello" to handle a GET request for /example/hello, plus the "hello" procedure itself: ns_register_proc GET /example/hello hello

 proc hello {conn context} {
 ns_return $conn 200 text/plain "Hello World"
 }

Tcl libraries can also be created that contain no registration functions; they may just contain Tcl scripts that are called from ADPs.

When AOLserver processes a method/URL request, it checks to see if there is a Tcl script in the virtual server's private or shared library to handle the method and URL. A private Tcl script registered to handle a URL overrides a shared Tcl script registered to handle the same URL.

When to Use Tcl Libraries

The alternative to embedding Tcl scripts in HTML pages using ADPs (see Chapter 2), is to store Tcl scripts in Tcl libraries. The situations listed below are well-suited to the Tcl libraries approach.

* Inheritance: If you want one Tcl script to handle an URL and all of its sub-URLs, it's better to store the script in a Tcl library and register it using ns_register_proc to handle an URL hierarchy. For example, you may want to manage a server domain name change by redirecting every response to the corresponding domain name on another server.

* Special Extensions: If you want one Tcl script to handle all files with a specific extension, like /*.csv, you would register the script with ns_register_proc to handle those files.

* Scheduled Procedures: If you want a Tcl script to be run at specific intervals, you can use the ns_schedule_* functions to run a script from the Tcl library at scheduled intervals. These procedures do not normally involve returning HTML pages and so are not well suited to ADPs.

* Filters: If you want a Tcl script to be called at pre-authorization, post-authorization, or trace time for a group of URLs, you would register a filter using the ns_register_filter function.

* Re-using Tcl Scripts: If there are Tcl scripts that you want to use in multiple situations, you can store them in a Tcl library and invoke them from within any ADP or Tcl script.

Tcl Libraries

Tcl libraries are initialized from a Tcl directory specified for each server. The Tcl directory is specified with the Library configuration parameter. It defaults to /servers/servername/modules/tcl.You can specify a Tcl directory for each server.

Note that the directories you specify need not reside under the AOLserver installation directory. This allows you to keep user-defined scripts physically separate from the scripts supplied by AOLserver.

Tcl Script Order of Evaluation

At server startup time, Tcl initialization is performed in the following steps for the server:

1. If a Tcl directory is specified, the init.tcl file in that directory is sourced first (if it exists), and then all the remaining .tcl files are sourced alphabetically.

2. For each module (including any Tcl-only modules as described on page 25) in the server: If a private Tcl directory is specified, the init.tcl file in the module-name subdirectory of the private directory is sourced first (if it exists), and then all the remaining .tcl files are sourced alphabetically.

Tcl-only Modules

As described in the "Tcl Libraries" section, you can define a Tcl directory for each server. However, none of the subdirectories under the Tcl directories will be initialized unless you load a corresponding module. For example, if the ServerA server has a Tcl directory defined as /home/mydir/tcl/a, and the nsdb and perm modules are loaded, then the following directories will be initialized as server start-up:
/home/mydir/tcl/a
/home/mydir/tcl/a/nsdb
/home/mydir/tcl/a/perm

If you want another directory under /home/tcl/a that contains Tcl scripts to be initialized also, you must load a Tcl-only module for it into the server using the "Tcl" keyword.

Configuration for Tcl-only Modules

To load a Tcl-only module, add the following line to your configuration file:
ns_section "ns/server/servername/modules"
ns_param mytcl Tcl

Then, at server start-up, the /home/mydir/tcl/a/mytcl directory will be initialized too. You can load any number of Tcl-only modules into a virtual server to have the Tcl scripts in the corresponding directories initialized.

For Tcl-only modules, no C module file is loaded. Only the corresponding Tcl directories are initialized.

Example of Tcl Initialization with Tcl-only Modules

This example shows demonstrates the order in which Tcl scripts are initialized at startup time for a server. The Library parameter is not set, so the library for S1 defaults to /servers/S1/modules/tcl. A Tcl-only module called M1 is loaded for S1 as follows: ns_section "ns/server/S1/modules" ns_param M1 Tcl

The library for server S1 (/servers/S1/modules/tcl) contains these files:
abc.tcl

The library for module M1 (/servers/S1/modules/tcl/M1) contains these files:
init.tcl
priv.tcl
script1.tcl

The Tcl files will be sourced in this order:
/servers/S1/module/tcl/abc.tcl
/servers/S1/module/tcl/M1/init.tcl
/servers/S1/module/tcl/M1/priv.tcl
/servers/S1/module/tcl/M1/script1.tcl

Configuration for Tcl Libraries

Configuration for Tcl libraries is handled in the ns/server/server-name/tcl section of the configuration file. The parameters in that section are described in detail on page 61 of the AOLserver Administrator's Guide. Some parameters to note are:

* Debug, which prints the names of files sourced at server startup to the log file

* Library, which defines the Tcl library for the server

To configure Tcl-only modules, see page 25.

How to Build and Debug Tcl Scripts

Follow these steps to build and debug your Tcl scripts:

1. Create a .tcl file containing a Tcl script in the directory specified by the Library parameter (see page 26) for your server. Include a call to ns_register_proc to register your script to an URL or URL hierarchy.

2. Test your script by accessing an URL that it is registered for. For example, if you registered the hello script to the /example/hello URL as follows:
ns_register_proc GET /example/hello hello

Then you would test the script by visiting the URL
http://yourserver/example/hello.

3. After testing your script, you may want to make changes to it. Edit the script file and open the URL associated with the script (such as the /example/hello URL in the above example) again in your browser and perform a Reload to see the new results.

aolserver4-4.5.1/docs/devel/tcl/tcl-examples.html0000644000175000017500000004602707441736127021550 0ustar frankiefrankie AOLserver

Tcl Examples

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tcl/tcl-examples.html,v 1.1 2002/03/07 19:15:35 kriston Exp $


 Example 1: hello

The following example script implements a simple request procedure
which returns 'Hello World'.

# Example 1: Hello World
#
# This simple operation just returns a plain text message.
#
# Things to notice:
#
# * ns_register_proc takes as arguments:
#   * the HTTP method
#   * the URL that the procedure handles
#   * the procedure that is executed
#
# * ns_return takes as arguments:
#   * the passed in connection
#   * a return status, in this case 200 for success
#   * a MIME type
#   * the actual string to return
#
# * ns_return properly formats the HTTP response for you.

ns_register_proc GET /example/hello hello

proc hello {conn context} {
   ns_return $conn 200 text/plain "Hello World"}




            
              





 Example 2: showhdrs

The following example script shows how to access the HTTP headers sent
by the client within a Tcl script.


# Example 2: Show header data
#
# Things to notice:
#
# * The same function is registered for two different URLs
#   with different context.
#
# * The headers are pulled out of the conn using the
#   ns_conn function.
#
# * The value for a particular header line is extracted
#   with "ns_set iget", the case insensitive counterpart to
#   "ns_set get".

ns_register_proc GET /example/showbrowser showheader USER-AGENT
ns_register_proc GET /example/showrefer showheader REFERER

proc showheader {conn key} {
    set value [ns_set iget [ns_conn headers $conn] $key]
  ns_return $conn 200 text/plain "$key: $value"
}





            
              





 Example 3a: genstory

The following example script provides two request procedures. The
first procedure returns an HTML page for collecting a few fields of
data from the user. The second procedure utilizes the data to generate
a short story.


# Example 3a: Form generation and handling
#
# Two functions are registered. One generates and
# returns an HTML form, and the other processes
# the data in the form.
#
# Things to notice:
#
# * Different functions are registered to the same
#   URL with different methods.  Note that some browsers
#   do not cache results properly when you do this.
#
# * The genstory function returns an error status
#   (500) if the client doesn't pass in any form data.
#
# * Form data is stored in an ns_set, and accessed
#   like any other set (e.g., header data).
#
# * A counter is used to loop through all the key
#   value pairs in the form.

ns_register_proc GET /example/genstory genstoryform
ns_register_proc POST /example/genstory genstory

proc genstoryform {conn context} {
  ns_return $conn 200 text/html \
"<HTML>
<HEAD>
<TITLE>Automatic Story Generator</TITLE>
</HEAD>
<BODY>
<H1>
Automatic Story Generator
</H1>
<FORM ACTION=http:/example/genstory
METHOD=POST>
Noun: <INPUT TYPE=text NAME=noun1><BR>
Noun: <INPUT TYPE=text NAME=noun2><BR>
Name: <INPUT TYPE=text NAME=name1><BR>
Name: <INPUT TYPE=text NAME=name2><BR>
Adjective: <INPUT TYPE=text NAME=adjective1><BR>
Adjective: <INPUT TYPE=text NAME=adjective2><BR>
Verb: <INPUT TYPE=text NAME=verb1><BR>
Verb: <INPUT TYPE=text NAME=verb2><BR>
<P><INPUT TYPE=submit VALUE=\"Generate\">
</FORM>
<P>
</BODY></HTML>
"}

proc genstory {conn ignore} {
  set formdata [ns_conn form $conn]

  if {$formdata == ""} {
    ns_return $conn 200 text/plain "Need form data!"
    return
  }

  # Build up a human-readable representation of the form data.

  set hrformdata "<dl>"
  set size [ns_set size $formdata]
  for {set i 0} {$i < $size} {incr i} {
    append hrformdata "<dt>[ns_set key $formdata $i]</dt>\
     <dd>[ns_set value $formdata $i]</dd>"
  }
  append hrformdata "</dl>"

  ns_return $conn 200 text/html \
"<HTML>
<HEAD>
<TITLE>The story of [ns_set get $formdata name1] and
[ns_set get $formdata name2]</TITLE>
</HEAD>
<BODY>
<H1>
The story of [ns_set get $formdata name1] and
[ns_set get $formdata name2]
</H1>
<P>Once upon a time [ns_set get $formdata name1] and
[ns_set get $formdata name2] went for a
walk in the woods looking for a [ns_set get $formdata noun1].
[ns_set get $formdata name1] was
feeling [ns_set get $formdata adjective1] because
[ns_set get $formdata name2] was so
[ns_set get $formdata adjective2].  So
[ns_set get $formdata name1] decided to
[ns_set get $formdata verb1] [ns_set get $formdata name2]
with a [ns_set get $formdata noun2].  This made
[ns_set get $formdata name2] [ns_set get $formdata verb2]
[ns_set get $formdata name1].
<P><CENTER>The End</CENTER>
The form data that made this possible:<BR>
$hrformdata
</BODY></HTML>"
}



            
              





 Example 3b: pagetcl/genstory

The following example script implements the same story generating
function of genstory (the previous example) but is implemented as a
page Tcl script instead of a library Tcl script. Note that the
associated HTML file (genstory.htm) is also included after the Tcl
script.


# Example 3b: Form generation and handling
#
# This operation generates a story based on the
# form data submitted from the form genstory.htm.
#
# Things to notice:
#
# * This file should be stored with the HTML pages
#   of the server.  When a client requests the URL corresponding
#   to the file, the AOLserver sets the "conn" variable and
#   evaluates the Tcl.
#
# * An error status (500) is returned if the client doesn't
#   doesn't pass in any form data.
#
# * Form data is stored in an ns_set, and accessed
#   like any other set (e.g., header data).
#
# * A counter is used to loop through all the key
#   value pairs in the form.

set formdata [ns_conn form $conn]

if {$formdata == ""} {
    ns_return $conn 200 text/plain "Need form data!"
    return
}

# Build up a human-readable representation of the form data.

set hrformdata "<dl>"
set size [ns_set size $formdata]
for {set i 0} {$i < $size} {incr i} {
    append hrformdata "<dt>[ns_set key $formdata $i]</dt>\
        <dd>[ns_set value $formdata $i]</dd>"
}
append hrformdata "</dl>"

ns_return $conn 200 text/html \
"<HTML>
<HEAD>
<TITLE>The story of [ns_set get $formdata name1] and
[ns_set get $formdata name2]</TITLE>
</HEAD>
<BODY>
<H1>
The story of [ns_set get $formdata name1] and
[ns_set get $formdata name2]
</H1>
<P>Once upon a time [ns_set get $formdata name1] and
[ns_set get $formdata name2] went for a
walk in the woods looking for a [ns_set get $formdata noun1].
[ns_set get $formdata name1] was
feeling [ns_set get $formdata adjective1] because
[ns_set get $formdata name2] was so
[ns_set get $formdata adjective2].  So
[ns_set get $formdata name1] decided to
[ns_set get $formdata verb1] [ns_set get $formdata name2]
with a [ns_set get $formdata noun2].  This made
[ns_set get $formdata name2] [ns_set get $formdata verb2]
[ns_set get $formdata name1].
<P><CENTER>The End</CENTER>
The form data that made this possible:<BR>
$hrformdata
</BODY></HTML>"

Here's the associated HTML file:

<HTML>
<HEAD>
<TITLE>Automatic Story Generator</TITLE>
</HEAD>
<BODY>
<H1>
Automatic Story Generator
</H1>
<FORM ACTION=genstory.tcl METHOD=POST>
Noun: <INPUT TYPE=text NAME=noun1><BR>
Noun: <INPUT TYPE=text NAME=noun2><BR>
Name: <INPUT TYPE=text NAME=name1><BR>
Name: <INPUT TYPE=text NAME=name2><BR>
Adjective: <INPUT TYPE=text NAME=adjective1><BR>
Adjective: <INPUT TYPE=text NAME=adjective2><BR>
Verb: <INPUT TYPE=text NAME=verb1><BR>
Verb: <INPUT TYPE=text NAME=verb2><BR>
<P><INPUT TYPE=submit VALUE="Generate">
</FORM>
<P>
</BODY></HTML>



            
              





 Example 4: redirect

The following example script shows how to use an AOLserver simple
response command (in this case, ns_returnredirect) and the equivalent
code when sending raw data to the client.


# Example 4: Implementing redirects with ns_respond and
# ns_write
#
# /example/not_here uses ns_respond to return an HTTP
#   redirect to /example/finaldest.
# /example/not_here2 does the same thing using ns_write
# /example/not_here3 does the same thing with
#   ns_returnredirect
#
# Things to notice:
#
# * When you use ns_write, you need to compose the
#   entire response.
#
# * "ns_conn location" returns the http://hostname
#   part of the URL that you can use to generate
#   fully qualified URLs.
#
# * ns_returnredirect is a lot simpler than either
#   ns_respond or ns_write.

ns_register_proc GET /example/finaldest finaldest
ns_register_proc GET /example/not_here not_here
ns_register_proc GET /example/not_here2 not_here2
ns_register_proc GET /example/not_here3 not_here3

proc not_here {conn ignore} {
  set headers [ns_set new myheaders]
  ns_set put $headers Location \
      [ns_conn location $conn]/example/finaldest
  ns_respond $conn -status 302 -type text/plain \
      -string "Redirection" -headers $headers
}

proc not_here2 {conn context} {
  set content \
"<HTML><HEAD><TITLE>Redirection</TITLE></HEAD><BODY>
<H1>Redirection</H1>The actual location of what
you were looking for is
<A HREF=\"[ns_conn location $conn]/example/finaldest\">
here.</A>
</BODY></HTML>"

  ns_write $conn \
"HTTP/1.0 302 Document follows
MIME-Version: 1.0
Content-Type: text/html
Content-Length: [string length $content]
Location: [ns_conn location $conn]/example/finaldest

$content"
}

proc finaldest {conn context} {
  ns_return $conn 200 text/plain \
      "You have arrived at the final destination."
}

proc not_here3 {conn context} {
  ns_returnredirect $conn \
      [ns_conn location $conn]/example/finaldest
}




            
              





 Example 5: desctable

The following example script provides a request procedure which
describes the columns of a database table using the AOLserver
"ns_tableinfo" command .


# Example 5: Describing a database table
#
# /example/describetable prints out a column-by-column
#   description of a database table.  The database
#   pool name and table name are specified at the end
#   of the URL -- e.g.,
#
#       /example/describetable/nsdbpool/ns_users
#
# Note: You must have the ns_db module loaded into your virtual
#       server for this example to work.
#
# Things to notice:
#
# * ns_returnbadrequest returns a nicely formatted message
#   telling the client they submitted an invalid request.
#
# * "ns_conn urlv" returns a Tcl array whose elements are the
#   slash-delimited parts of the URL.
#
# * The describetable function loops through all the columns
#   and uses "ns_column valuebyindex" to get the type of each
#   one.
#
# * ns_returnnotice nicely formats the return value.

ns_register_proc GET /example/describetable describetable

proc describetable {conn ignore} {
    if {[ns_conn urlc $conn] != 4} {
    return [ns_returnbadrequest $conn \
            "Missing table name and/or poolname"]
    }
    set pool [lindex [ns_conn urlv $conn] 2]
    if {[lsearch $pool [ns_db pools]] == -1} {
    return [ns_returnbadrequest $conn \
            "Pool $pool does not exist"]
    }
    set db [ns_db gethandle $pool]
    set table [lindex [ns_conn urlv $conn] 3]
    set tinfo [ns_table info $db $table]
    if {$tinfo == ""} {
    return [ns_returnbadrequest $conn \
            "Table $table does not exist"]
    }
    set output "<dl>"
    set size [ns_column count $tinfo]
    for {set i 0} {$i < $size} {incr i} {
    append output "<dt>[ns_column name $tinfo $i] \
                <dd>[ns_column typebyindex $tinfo $i]</dd>"
    }
    append output "</dl><hr>"
    ns_returnnotice $conn 200 "Table $table in pool $pool" $output
}



           
              





 Example 6: getemps

The following example script shows how to query a table in the
database.


# Example 6: Getting data from the database
#
# /example/getemps queries a database in the default
# pool and returns a list of all the employees listed
# in the employees table.  It assumes a table called
# employees exists with the column emp_name. You can
# use the /NS/Db/Admin to create the table.
#
# Note: You must have the ns_db module loaded into your virtual
#       server for this example to work.
#
# Things to notice:
#
# * Use "ns_db gethandle" to get a handle for the database
#   from the default database pool of the virtual server.
#
# * Use "ns_db select" to query the database and
#   "ns_db getrow" to retrieve data.
#
# * Rows are returned as ns_sets.
#

ns_register_proc GET /example/getemps getemps

proc getemps {conn context} {
        set ul "<UL>"
        set db [ns_db gethandle [ns_config [ns_dbconfigpath] "DefaultPool"]]
        set row [ns_db select $db \
        "select emp_name from employees order by emp_name;"]
        while { [ns_db getrow $db $row] } {
            append ul "<LI>[ns_set get $row emp_name] \n"
        }
        append ul "</UL>"
        ns_returnnotice $conn 200 "Employee list" $ul
}



            
              





 Example 7: wincgi

The following example script is a simple emulation of the WebSite
WinCGI interface.


#
# Example 7: simple emulation of the WebSite WinCGI interface
#
# This Tcl script emulates the WinCGI interface of the WebSite server.
# To use, move this file to your Tcl library directory (normally the
# modules/tcl directory of the AOLserver directory), set the
# following nsd.ini variables in the [ns\server\<server-name>\wincgi]
# section, and restart the server.
#
# key     default    description
# ---     -------    -----------
# prefix  /cgi-win   URL prefix for WinCGI.
# debug   off        Set to on to keep temp files for debugging.
# gmtoff  0          Minutes West of GMT for the "GMT Offset" variable.
# dir     c:\wincgi  Directory of WinCGI programs.
#
#
# Note:  This script is unsupported and not a complete emulation of the
# WebSite WinCGI interface.  In particular, not all the WinCGI variables
# are set.  Full support for WinCGI will be incorporated into the nscgi
# module in a future AOLserver release.
#

#
# Fetch the variables from the configuration file.
#
global WinCGI
set WinCGI(section) "ns\\server\\[ns_info server]\\wincgi"
if {[set WinCGI(prefix) [ns_config $WinCGI(section) prefix]] == ""} {
    set WinCGI(prefix) /cgi-win
}
if {[set WinCGI(dir) [ns_config $WinCGI(section) dir]] == ""} {
    set WinCGI(dir) [ns_info home]/$WinCGI(prefix)
}
if {[set WinCGI(gmtoff) [ns_config $WinCGI(section) gmtoff]] == ""} {
    set WinCGI(gmtoff) 0
}
if {[set WinCGI(debug) [ns_config -bool $WinCGI(section) debug]] == ""} {
    set WinCGI(debug) 0
}





#
# Register the win-cgi procedure to handle requests for WinCGI executables.
#
ns_register_proc POST $WinCGI(prefix)/*.exe win-cgi
ns_register_proc GET $WinCGI(prefix)/*.exe win-cgi


#
# win-cgi - The Tcl request procedure which emulates WinCGI.
#
proc win-cgi {conn ignored} {
    global WinCGI

    # The program is the second part of the WinCGI URL.
    set args [join [split [ns_conn query $conn] &]]
    set pgm [lindex [ns_conn urlv $conn] 1]
    regsub -all {\+} $args " " args
    foreach e [split $WinCGI(dir)/$pgm /] {
            if {$e != ""} {lappend exec $e}
    }
    set exec [join $exec \\]
    if ![file executable $exec] {
            return [ns_returnnotfound $conn]
    }

    # WinCGI requires a few temporary files.
    set ini [ns_tmpnam]
    set inp [ns_tmpnam]
    set out [ns_tmpnam]

    # Copy the request content to the input file.
    set fp [open $inp w]
    ns_writecontent $conn $fp
    set len [tell $fp]
    close $fp

    # Create the WinCGI variables .ini file.
    set fp [open $ini w]
    puts $fp {[CGI]}
    puts $fp \
"Request Protocol=HTTP/1.0
Request Method=[ns_conn method $conn]
Executable Path=$WinCGI(prefix)/$pgm
Server Software=[ns_info name]/[ns_info version]
Server Name=[ns_info name]
Server Port=[ns_info version]
Server Admin=[ns_config AOLserver WebMaster]
CGI Version=CGI/1.2 (Win)
Remote Address=[ns_conn peeraddr $conn]
Authentication Method=Basic
Authentication Realm=[ns_conn location $conn]
Content Type=application/x-www-form-urlencoded
Content Length=$len"
    puts $fp ""
    puts $fp {[System]}
    puts $fp \
"GMT Offset=$WinCGI(gmtoff)
Debug Mode=Yes
Output File=$out
Content File=$inp"

    # Set any POST or query form variables.
    puts $fp ""
    puts $fp {[Form Literal]}
    set form [ns_conn form $conn]
    if {$form != ""} {
            for {set i 0} {$i < [ns_set size $form]} {incr i} {
                    set key [ns_set key $form $i]
                    set value [ns_set value $form $i]
                    puts $fp "$key=$value"
            }
    }

    # Set the accept headers and accumulate the extra headers.
    puts $fp ""
    puts $fp {[Accept]}
    set headers [ns_conn headers $conn]
    set extras ""
    for {set i 0} {$i < [ns_set size $headers]} {incr i} {
            set key [ns_set key $headers $i]
            set ukey [string toupper $key]
            set value [ns_set value $headers $i]
            if {$ukey == "ACCEPT"} {
                    puts $fp "$value=Yes"
            } elseif {$key != "CONTENT-LENGTH" && $key != "CONTENT-TYPE"} {
                    append extras "$key=$value\n"
            }
    }
    puts $fp ""
    puts $fp {[Extra Headers]}
    puts $fp $extras
    close $fp

    # Execute the WinCGI program.
    # NB:  "catch" the exec and open because a WinCGI
    # program can be misbehaved, returning a non-zero
    # exit status or not creating the output file.
    catch {exec "$exec $ini $inp $out $args"}
    if [catch {set fp [open $out]}] {
            ns_returnerror $conn 500 "WinCGI exec failed"
    } else {
            set type text/html
            set status 200
            while {[gets $fp line] > 0} {
                    set line [string trim $line]
                    if {$line == ""} break
                    set head [split $line :]
                    set key [string tolower [string trim [lindex $head 0]]]
                    set value [string trim [lindex $head 1]]
                    if {$key == "content-type"} {
                            set type $value
                    } elseif {$key == "location"} {
                            set location $value
                    } elseif {$key == "status"} {
                            set status $status
                    }
            }
            set page [read $fp]
            close $fp

            if [info exists location] {
                    ns_returnredirect $conn $location
            } else {
                    ns_return $conn $status $type $page
            }
    }

    if $WinCGI(debug) {
            ns_log Notice "CGI $pgm: ini: $ini, inp: $inp, out: $out"
    } else {
            ns_unlink -nocomplain $ini
            ns_unlink -nocomplain $inp
            ns_unlink -nocomplain $out
    }
}


aolserver4-4.5.1/docs/devel/tcl/tcl-general.html0000644000175000017500000002100407441736127021333 0ustar frankiefrankie AOLserver

General Tcl Information

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tcl/tcl-general.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

Tcl Interpreters

Global Variables

Sharing Files Between Interpreters

Working with Ns_Set and Form Data

This chapter contains general information about using Tcl whether you are using the ADP approach or the Tcl Libraries approach, both of which use the same features of Tcl.

Tcl Interpreters

During AOLserver initialization, only one interpreter exists. While modules are loaded and initialized, they may add procedures to the interpreter. When initialization is complete (all modules are loaded and all Tcl libraries have been executed), the interpreter may no longer be changed.

Each connection thread that requires Tcl will create a copy of the original interpreter.

The AutoClose parameter, which is on by default, will close all non-shared files opened by an interpreter when Ns_TclDeAllocateInterp is invoked. Ns_TclDeAllocateInterp is called after each Tcl request procedure. It is recommended that you leave the AutoClose parameter set to on.

Global Variables

In earlier releases of the AOLserver, global variables were shared between all Tcl interpreters in a virtual server. Beginning in Version 2.2, each Tcl interpreter has its own global variable table, so global variables are shared only within each Tcl interpreter by default. The ns_share command allows you to make a variable available to all interpreters in a virtual server.

Global variables are flushed when the Tcl interpreter is deallocated. A Tcl interpreter is deallocated explicitly when Ns_TclDeallocateInterp is called or implicitly at the end of a connection. This allows Tcl filter functions to access global variables set in ADPs.

Sharing Files Between Interpreters

To share a file between the interpreters in a group, use the Tcl detach command. A shared file is left open after an interpreter is deallocated when the AutoClose parameter is on (it is on by default).
For example:
#init time:
set sharedFile [open myfile.dat]
detach $sharedFile

You must manually close the shared file (by performing a close) when it is no longer needed or when the server is shut down.

Note that there is no implicit locking between interpreters. This means that one interpreter can be performing a gets command on the shared file at the same time another interpreter performs a close on the same file. The results are unpredictable, and could potentially cause a core dump. To avoid this situation, use a mutex to protect access to the file whenever it is accessed.

For example:, at initialization time (for example, in your init.tcl script), open a shared file and create a mutex:
set sharedLock [ns_mutex create]
set sharedFile [open myfile.dat]
detach $sharedFile

At run time, use the mutex to protect any actions you perform on the shared file:
ns_share sharedLock
ns_share sharedFile
ns_mutex lock $sharedLock
puts $sharedFile ...
gets $sharedFile ...
ns_mutex unlock $sharedLock

At shutdown (for example, in your shutdown procedure registered with ns_atshutdown), close the file and destroy the lock:
ns_share sharedLock
ns_share sharedFile
close $SharedFile
ns_mutex destroy $SharedLock

Working with Ns_Set and Form Data

An AOLserver operation procedure often manipulates sets of key-value pairs of string data, for example:


rows of data from the database
HTTP header information
HTML form data

Ns_Set Data Structure

In the AOLserver C API these data are manipulated using the Ns_Set data structure. In the Tcl API the ns_set command can be used to manipulate underlying Ns_Set data structures that are generated by the AOLserver communications layer or the database services module.

The example below shows a typical use of the ns_set Tcl command to manipulate Ns_Set structures.

   # Example 2: Show header data
    #
    # Things to notice:
    # * The same function is registered for two different URLs
    # with different context.
    #
    # * The headers are pulled out of the conn using the
    # ns_conn function.
    #
    # * The value for a particular header line is extracted
    # with "ns_set get".

    ns_register_proc GET /example/showbrowser \
        showheader USER-AGENT
    ns_register_proc GET /example/showrefer \
        showheader REFER

    proc showheader {conn key} {
          set value [ns_set get [ns_conn headers $conn] $key]
          ns_return $conn 200 text/plain "$key: $value"
    }

Form Data

Some Database Services Tcl functions take formdata arguments. You can get the form data for a form by calling ns_conn form. An ns_set structure containing key/value pairs is returned, which you can manipulate using the ns_set function. The key/value pairs for search, entry, and update forms are provided below.

Search Form Data

Key

Value

ColSelected.columnname

"on" or "off"

ColOperator.columnname

search operator

(=, <, >, <=, >=, is null, is not null)

ColValue.columnname

search value for text, integer, real, or boolean fields

ColValue.columnname.NULL

"t" or "f" (true or false), indicates whether to search for the specified date, time, or timestamp field

ColValue.columnname.month

month portion of search value for date and timestamp fields

ColValue.columnname.day

day portion of search value for date and timestamp fields

ColValue.columnname.year

year portion of search value for date and timestamp fields

ColValue.columnname.time

time portion of search value for time and timestamp fields

ColValue.columnname.ampm

"AM" or "PM" designation of search value for time and timestamp fields

OrderBy.n

name of column to order the results by (where n is 0 for the first order by column, 1 for the second order by column, and so on)

Queryinfo.Distinct

"on" or "off", indicates whether query should eliminate duplicate records

Pref.MaxToReturn

integer, maximum number of records to return

Entry Form Data

Key

Value

ColValue.columnname

value for text, integer, real, or boolean fields

ColValue.columnname.NULL

"t" or "f" (true or false), indicates whether a date, time, or timestamp field is null or the value specified in the date/time portions

ColValue.columnname.month

month portion of value for date and timestamp fields

ColValue.columnname.day

day portion of value for date and timestamp fields

ColValue.columnname.year

year portion of value for date and timestamp fields

ColValue.columnname.time

time portion of value for time and timestamp fields

ColValue.columnname.ampm

"AM" or "PM" designation of value for time and timestamp fields

Update/Delete Form Data

Key

Value

ColValue.columnname

value for text, integer, real, or boolean fields

ColValue.columnname.NULL

"t" or "f" (true or false), indicates whether a date, time, or timestamp field is null or the value specified in the date/time portions

ColValue.columnname.month

month portion of value for date and timestamp fields

ColValue.columnname.day

day portion of value for date and timestamp fields

ColValue.columnname.year

year portion of value for date and timestamp fields

ColValue.columnname.time

time portion of value for time and timestamp fields

ColValue.columnname.ampm

"AM" or "PM" designation of value for time and timestamp fields

RowID.columnname

all the RowID values that specify the row to update or delete

aolserver4-4.5.1/docs/devel/tcl/example4a.adp.txt0000644000175000017500000000137507442210243021430 0ustar frankiefrankie Survey Form

Online Newsletter Subscription

Sign up to be notified when this web site changes, or to receive an ASCII version via email. Thanks!

Name

Title

Notify me by email when this newsletter changes online

Send me an ASCII version of this newsletter by email

Email Address

aolserver4-4.5.1/docs/devel/tcl/example2b.adp.txt0000644000175000017500000000054607442210242021425 0ustar frankiefrankie The ABC's of Fruit Cookbook <% # Get form data and assign to variables set r [ns_conn form $conn] set question [ns_set get $r question] # Display cookbook in appropriate format if {$question == "yes"} {ns_adp_include cookset.html} \ else {ns_adp_include cook.html} %> aolserver4-4.5.1/docs/devel/tcl/tcl-overview.html0000644000175000017500000001232507441736127021572 0ustar frankiefrankie AOLserver

AOLserver Tcl Overview

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tcl/tcl-overview.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

What is Tcl?

Why Use Tcl?

ADPs and Tcl Libraries

What is Tcl?

Tcl is a programming system developed by John Ousterhout at the University of California, Berkeley. According to Dr. Ousterhout:

Tcl is a simple scripting language for controlling and extending applications; its name stands for "tool command language". Tcl provides generic programming facilities, such as variables and loops and procedures, that are useful in a variety of applications. Furthermore, Tcl is embedable. Its interpreter is a library of C procedures that can easily be incorporated into applications, and each application can extend the core Tcl features with additional commands for that application.

AOLserver supports the Tcl v7.6 commands. When you write AOLserver extensions in Tcl, you use the core functionality of Tcl as well as a set of AOLserver-specific Tcl functions. For example, there is an AOLserver Tcl function called ns_conn that allows your Tcl script to obtain information about the current connection. In addition, functions are available for returning results to Web clients, accessing databases, and managing the permissions (access control) system.

This book describes the two different methods for extending AOLserver with Tcl, using AOLserver Dynamic Pages (Chapter 2) and Tcl libraries (see Chapter 3), plus general information on using Tcl with either method (see Chapter 4). It also provides a reference for AOLserver's Tcl API (see Chapter 5).

Recommended Reading

For more information on the Tcl language, we recommend the following sources:

* Practical Programming in Tcl and Tk, by Brent B. Welch (Prentice Hall PTR, 1995)

* Tcl and the Tk Toolkit, by John K. Ousterhout (Addison-Wesley, 1994)

* For the complete manual pages for the Tcl v7.6 commands, visit the web site http://www.scriptics.com/man.

* Philip Greenspun's web site, http://www-swiss.ai.mit.edu/wtr/dead-trees/, which includes chapters from his book, Database Backed Web Sites, The Thinking Person's Guide to Web Publishing, and numerous examples of AOLserver Tcl database applications.

* The web site: http://www.yahoo.com/Computers_and_Internet/Programming_Languages/ Tcl_Tk

Why Use Tcl?

You can extend AOLserver using Tcl, C, or CGI. However, using Tcl has the following advantages:

* Creating new Tcl scripts is very easy. You can embed Tcl scripts directly into HTML pages using AOLserver Dynamic Pages (ADPs), or you can create .tcl files and register them to handle URLs or URL hierarchies.

* Tcl's scripting language is easier to learn and use than compiled programming languages. It provides general programming capabilities, such as variables, loops, and procedures, but it doesn't require strong type definitions or compilation. Plus, AOLserver's Tcl interface provides a complete set of Tcl extensions specifically oriented towards web server applications, such as returning content to the client, accessing form data, accessing databases, and logging.

* Many of the basic AOLserver services are implemented as Tcl scripts. In fact, most of the database operations such as handling database inserts, queries, and updates, are written as Tcl scripts. Not only has the Tcl interface greatly reduced the development time for the AOLserver engineering team, it also allows you to easily modify the basic database operations by simply editing the Tcl scripts that implement the functionality.

* The Tcl and C interfaces typically provide better performance than CGI. However, if you have existing CGI programs, you may want to use AOLserver's CGI interfaces to take advantage of previously-existing code.

The C interface for AOLserver is described in the AOLserver C Developer's Guide, and the CGI interface is desribed in the AOLserver Administrator's Guide.

ADPs and Tcl Libraries

There are two ways to extend AOLserver using Tcl, and each is better-suited to different situations:

* AOLserver Dynamic Pages (ADPs): ADPs allow you to embed Tcl scripts directly into HTML pages. The script(s) are interpreted dynamically when the page is accessed. ADPs are ideal in situations where you want to generate all or part of a specific page dynamically. You can re-use code by storing Tcl scripts in Tcl libraries and invoking them from within multiple ADPs. You can also include files and parse other ADPs from within your ADPs.

* Tcl Libraries: The alternative to embedding Tcl scripts in HTML pages using ADPs, is to store Tcl scripts in Tcl libraries. You can define scripts that can be called from ADPs, schedule procedures to run at certain times, register scripts to handle specific URLs or URL hierarchies, register scripts to handle all URLs with a specific file extension, and register filters to be run in addition to a URL's registered procedure.

aolserver4-4.5.1/docs/devel/tcl/example1.adp.txt0000644000175000017500000000067607442210241021265 0ustar frankiefrankie Browser Example

Browser Example

<% ns_puts "Hello " set ua [ns_set get [ns_conn headers] "user-agent"] ns_puts "$ua " if [string match "*MSIE*" $ua] { ns_puts "This is MS Internet Explorer" } elseif [string match "*Mozilla*" $ua] { ns_puts "This is Netscape or a Netscapecompatible browser" } else { ns_puts "Couldn't determine the browser" } %> aolserver4-4.5.1/docs/devel/tcl/nsv-commands.html0000644000175000017500000001326107441514707021547 0ustar frankiefrankie AOLserver

AOLserver nsv Commands

The nsv commands provide a high performance data sharing mechanism. This facility is much flexible alternative to the obsolete ns_share command. The model uses an array syntax and includes more features. In addition, lock contention is managed in a much more scalable way--something that is not possible with the obsolete ns_share facility.

NOTE: The use of ns_share is deprecated. Careless use of ns_share commands can severely limit the scalability of an application. The nsv commands solve this and this document describes how to migrate your ns_share code to use nsv.

Basics

The following commands currently make up the nsv interface:

nsv_get - get key value
nsv_exists - check key existence
nsv_set - set key value
nsv_append - append value
nsv_lappend - append value as list element
nsv_incr - increment and return value
nsv_unset - unset a value
nsv_array - manage nsv arrays

Commands for the most part mirror the cooresponding Tcl command for ordinary variables. Basically, to set a value, simply use the nsv_set command:

nsv_set myarray foo $value

and to get a value, simply use the nsv_get command:

set value [nsv_get myarray foo]

Migrating From ns_share

Migrating from ns_share is straightforward. If your init.tcl included commands such as:

ns_share myshare
set myshare(lock) [ns_mutex create]

use instead:

nsv_set myshare lock [ns_mutex create]

In your procedures, instead of:

proc myproc {} { ns_share myshare

ns_mutex lock $myshare(lock) ...

use:

proc myproc {} {
ns_mutex lock [nsv_get myshare lock]
...

and within an ADP page, instead of:

<%
ns_share myshare
ns_puts $myshare(key1)
%>

<%=$myshare(key2)%>

use:

<%
ns_puts [nsv_get myshare key1]
%>

<%=[nsv_get myshare key2]%>

Notice that, unlike ns_share, no command is required to define the shared array. The first attempt at setting the variable through any means will automaticaly create the array. Also notice that only arrays are supported. However, to migrate from ns_share you can simply package up all existing ns_share scalars into a single array with a short name, perhaps just ".". For example, if you had:

ns_share mylock myfile
set myfile /tmp/some.file
set mylock [ns_mutex create]

you can use:

nsv_set . myfile /tmp/some.file
nsv_set . mylock [ns_mutex create]

Multithreading Features

One advantages of nsv is built in interlocking for thread safety. For example, consider a case of a "increment-by-one" unique id system. Here's the ns_share solution:

ns_share ids
set ids(lock) [ns_mutex create]
set ids(next) 0

proc nextid {} {
ns_share ids
ns_mutex lock $ids(lock)
set next [incr ids(next)]
ns_mutex unlock $ids(lock)
return $next
}

and here's an nsv solution:

nsv_set ids next 0

proc nextid {} {
return [nsv_incr ids next]
}

Note that the nsv solution does not need a mutex as the nsv_incr command is internally interlocked.

Compatibility with Tcl Arrays

Another useful feature of nsv is the nsv_array command which works much like the Tcl array command. This can be used to import and export values from ordinary Tcl arrays. For example, to copy from Tcl use:

nsv_array set meta [array get tmpmeta]

and to copy to Tcl use:

array set metacopy [nsv_array get meta]

As with all other nsv command, nsv_array is atomic and no explicit locking is required. This feature can be used to contruct a new nsv array by first filling up an ordinary temporary Tcl array via some time consuming process and then swapping it into place as above. While the new temporary array is being constructed, other threads can access the old array without delay or inconsistant data. You can even reset a complete nsv array in one step with "reset". For example, instead of:

ns_share lock meta
set lock [ns_mutex create]

ns_mutex lock $lock
unset meta
array set meta [array get tmpmeta]
ns_mutex unlock $lock

you can simply use:

nsv_array reset meta [array get tmpmeta]

The reset option will flush and then reset all values atomically, eliminating the need for the explicit lock.

Other options for the nsv_array command include:

nsv_exists array - test existance of array
nsv_size array - return # of elements in array
nsv_names array - return keys of array

Configuration

The nsv system uses a common multithreading technique to reduce the potential for lock contention which is to split the locks to acheive finer grained locking. This technique groups arrays randomly into buckets and only the arrays within a particular bucket share a lock. The number of buckets to be used can be configured by setting the "nsvbuckets" tcl parameters, e.g.:

[ns/server/server1/tcl]
nsvbuckets=20

The default is 8 which should be reasonalbe. Note that you can monitor the lock contention, if any, by enabling mutex metering:

[ns/threads]
mutexmetering=on

and then viewing the results of "ns_info locks" command after the server has been running for some time. The nsv locks all have names of the form "nsv:##". If you find many lock attempts which did not successed immediately, try increasing nsvbuckets. aolserver4-4.5.1/docs/devel/tcl/example5a.adp.txt0000644000175000017500000000165507442210243021432 0ustar frankiefrankie This is a test of ADP

This is a test of ADP

<% ## Proxies should cache this page for a maximum of 1 hour: ns_setexpires $conn 3600 set host [ns_set iget [ns_conn headers $conn] host] ## How many times has this page been accessed ## since the server was started? ns_share -init {set count 0} count incr count %> Number of accesses since server start: <%=$count%>
tcl_version: <%=$tcl_version%>
tcl_library: <%=$tcl_library%>
Host: <%= $host %>
<% ns_adp_include standard-header %>

Here's an example of streaming:

End aolserver4-4.5.1/docs/devel/tech/0000755000175000017500000000000011147060111016371 5ustar frankiefrankieaolserver4-4.5.1/docs/devel/tech/urlspace.html0000644000175000017500000000540507441736127021124 0ustar frankiefrankie AOLserver

AOLserver urlspace Data Structure

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tech/urlspace.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

The urlspace Trie


There are four basic data structures used in maintaining the urlspace
trie. They are:

1. Junction
   A junction is nothing more than a list of channels.
2. Channel
   A channel points to a branch which ultimately leads to nodes
   that match a particular "filter", such as "*.html". The filter
   is the last section of a URL mask, and is the only part of
   the mask that may contain wildcards.
3. Branch
   A branch represents one part of a URL, such as a server, method,
   directory, or wildcard filename. It has a list of branches
   representing sub-URLs as well as a pointer to a list of Nodes.
4. Node
   A node stores URL-specific data, as well as a pointer to the
   cleanup function. 

Another data structure, called an Index, which is manipulated by the
Ns_Index API calls, is used by the urlspace code. An Index is an
ordered list of pointers. The order is determined by callback
functions. See index.c for the scoop on that.

Here is what the urlspace data structure would look like after
calling

Ns_UrlSpecificSet("server1", "GET", "/foo/bar/*.html", myID, myData,
                  0, MyDeleteProc);
------------------------------------------------------------------------------
		  
urlspace: JUNCTION
  byname: INDEX [*][ ][ ][ ][ ]
                 |
  +--------------+
  |
  V		 
CHANNEL
  filter:  CHAR*   "*.html"
  trie:    TRIE
             indexnode: INDEX* (NULL)
	     branches:  INDEX  [*][ ][ ][ ][ ]
	                        |
  +-----------------------------+
  |
  V
BRANCH
  word: CHAR* "server1"
  node: TRIE
          indexnode: INDEX* (NULL)
	  branches:  INDEX  [*][ ][ ][ ][ ]
	                     |
  +--------------------------+
  |
  V
BRANCH
  word: CHAR* "GET"
  node: TRIE
          indexnode: INDEX* (NULL)
	  branches:  INDEX  [*][ ][ ][ ][ ]
	                     |
  +--------------------------+
  |
  V
BRANCH
  word: CHAR* "foo"
  node: TRIE
          indexnode: INDEX* (NULL)
	  branches:  INDEX  [*][ ][ ][ ][ ]
	                     |
  +--------------------------+
  |
  V
BRANCH
  word: CHAR* "*.html"
  node: TRIE
          indexnode: INDEX* -----------------> [*][ ][ ][ ][ ]
	  branches:  INDEX  [ ][ ][ ][ ][ ]     |
	                                        |
  +---------------------------------------------+
  |
  V
NODE
  id:                  INT               myID
  dataInherit:         VOID*             myData
  dataNoInherit:       VOID*             0
  deleteFuncInherit:   VOID(*)(VOID*)    MyDeleteProc
  deleteFuncNoInherit: VOID(*)(VOID*)    0

aolserver4-4.5.1/docs/devel/tech/index.html0000644000175000017500000000057507441736127020420 0ustar frankiefrankie AOLserver

Technical Documentation

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tech/index.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

AOLserver urlspace Data Structure

AOLserver Engineering Standards Manual

aolserver4-4.5.1/docs/devel/tech/standards.html0000644000175000017500000004650607441736127021300 0ustar frankiefrankie AOLserver

Engineering Standards Manual

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/tech/standards.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

Contributed by George Nachman.
Based on the Tcl/Tk Engineering Manual by John K. Ousterhout

Introduction

This manual is based on the Tcl/Tk Engineering Manual by John K. Ousterhout that is available at ActiveState. Most of this document is a subset of what his manual specifies, with the goal of being more practical and up-to-date than the original. For example, it is assumed that only an ANSI compiler will be used, whereas the Ousterhout's manual describes conventions that will also work with non-ANSI compilers. The Tcl/Tk Engineering Manual is still recommended reading, particularly with respect to the section on code documentation, which is not reproduced here.

Table of Contents

Overall Structure

Each module will be named nsxxx, where xxx is a short name that describes the module. Each module will have its own directory, and contain at least the following files:
  • nsxxx.c
  • Makefile

If a module exports symbols, then a header file by the name of nsxxx.h should also be in that directory.

Makefile Structure

Use this as a template for module makefiles:
#
# (dollar-sign)Header: (dollar-sign)
#
# nsexample --
#
#      Example AOLserver module Makefile.
#

#
# AOLserver's location
#
#  Since your module probably doesn't live inside the "aolserver"
#  directory, you can tell make where to find aolserver.
#
#NSHOME   =  /home/user/cvs/aolserver
NSHOME   =  ../aolserver

#
# Module name
#
MOD      =  nsexample.so

#
# Objects to build
#
OBJS     =  nsexample.o

#
# Header files in THIS directory (included with your module)
#
HDRS     =  

#
# Extra libraries required by your module (-L and -l go here)
#
MODLIBS  =  

#
# Compiler flags required by your module (-I for external headers goes here)
#
CFLAGS   =  


include  $(NSHOME)/include/Makefile.module

Header file structure

Use this as a template for all header files:
/*
 * The contents of this file are subject to the AOLserver Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://aolserver.com/.
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is AOLserver Code and related documentation
 * distributed by AOL.
 * 
 * The Initial Developer of the Original Code is America Online,
 * Inc. Portions created by AOL are Copyright (C) 1999 America Online,
 * Inc. All Rights Reserved.
 *
 * Alternatively, the contents of this file may be used under the terms
 * of the GNU General Public License (the "GPL"), in which case the
 * provisions of GPL are applicable instead of those above.  If you wish
 * to allow use of your version of this file only under the terms of the
 * GPL and not to allow others to use your version of this file under the
 * License, indicate your decision by deleting the provisions above and
 * replace them with the notice and other provisions required by the GPL.
 * If you do not delete the provisions above, a recipient may use your
 * version of this file under either the License or the GPL.
 */

/*
 * file.h --
 *
 * 	Description of file.
 *
 */

#ifndef FILE_H
#define FILE_H

static const char
*RCSID_FILE_H = "(dollar-sign)Header: (dollar-sign), compiled: " __DATE__;

/*
 * The following constants...
 */

#define ...

/*
 * The following structure defines...
 */

typedef struct ...

/*
 * Exported functions
 */

extern ...

#endif /* FILE_H */

Header files never contain static symbols.

Code File Structure

Each source code file should contain a related set of procedures. The most manageable size for files is usually in the range of 500-2000 lines. Closely related functions should be placed as close together as possible.

API functions (Ns_*) come first; exported functions that are not API calls (Ns*) come after those; static functions come last. Logical groups of functions can be separated like this:

/*
 *==========================================================================
 * This is where we torque the wingnut on the widget.
 *==========================================================================
 */

Use this as a template for all code files:

/*
 * The contents of this file are subject to the AOLserver Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://aolserver.com/.
 *
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
 * the License for the specific language governing rights and limitations
 * under the License.
 *
 * The Original Code is AOLserver Code and related documentation
 * distributed by AOL.
 * 
 * The Initial Developer of the Original Code is America Online,
 * Inc. Portions created by AOL are Copyright (C) 1999 America Online,
 * Inc. All Rights Reserved.
 *
 * Alternatively, the contents of this file may be used under the terms
 * of the GNU General Public License (the "GPL"), in which case the
 * provisions of GPL are applicable instead of those above.  If you wish
 * to allow use of your version of this file only under the terms of the
 * GPL and not to allow others to use your version of this file under the
 * License, indicate your decision by deleting the provisions above and
 * replace them with the notice and other provisions required by the GPL.
 * If you do not delete the provisions above, a recipient may use your
 * version of this file under either the License or the GPL.
 */

/*
 * file.c --
 *
 * 	Description of file.
 */
 
static const char
*RCSID = "(dollar-sign)Header: (dollar-sign), compiled: " __DATE__ " " __TIME__;

#include "file.h"

/*
 * The following constants...
 */

#define ...

/*
 * The following structure defines...
 */

typedef struct ...

/*
 * Local functions defined in this file
 */

static int FunctionName(int x);

/*
 * Static variables defined in this file
 */

static int nsNumFooBar;     /* Number of foobars allocated */
... 

/*
 *==========================================================================
 * API functions
 *==========================================================================
 */

 (API function definitions go here)

/* 
 *==========================================================================
 * Exported functions
 *==========================================================================
 */

 (Exported, non-api functions go here)
 
/*
 *==========================================================================
 * Static functions
 *==========================================================================
 */
 
(Static functions go here)

Source files should never contain extern statements; those belong in header files (called file.h in the above template).

Function definitions

Function definitions should follow this template:
/*
 *----------------------------------------------------------------------
 * FunctionName -
 *
 * 	Description of function.
 *
 * Results:
 *	This function returns ...
 *
 * Side effects:
 *	A new thread will be created.
 *
 *----------------------------------------------------------------------
 */

static int
FunctionName(int x)
{
	...
}

All functions definitions begin on a new page (which is to say they should be preceeded by a control-L character). All functions must be typed: use void if the function returns no result. The second line gives the function's name and argument list. If there are many arguments, they should spill onto additional lines as such:

static int
FunctionThatTakesLotsOfParameters(int a, int b, int c, int d, int e, 
                                  int f, int g)
{
	...
}

The same rule applies to prototypes.

Parameter order

Function parameters may be divided into three categories. In parameters only pass information into the function (either directly or by pointing to information that the function reads). Out parameters point to things in the caller's memory that the function modifies. In-out parameters do both. Below is a set of rules for deciding on the order of parameters to a function:
  1. Parameters should normally appear in the order in, in/out, out, except where overridden by the rules below.
  2. If there is a group of functions, all of which operate on structures of a particular type--such as a hash table--the token for the structure should be the first argument to each of the functions.
  3. When two parameters are the address of a callback function and a context value (or ClientData value) to pass to that function, the function address should appear in the argument list immediately before the context/ClientData.
  4. If a callback function takes a context/ClientData argument (and all callbacks should), the context/ClientData argument should be the first argument to the procedure. Typically the context/ClientData is a pointer to the structure managed by the callback, so this is really the same as rule 2.
  5. In/out parameters should not be used without a very good reason.

Naming Conventions

  1. Be consistent. Use the same name to refer to the same thing everywhere. For example, in the Tcl implementation the name interp is used consistently for pointers to the user-visible Tcl_Interp structure.
  2. Make sure a function name describes what the function actually does. Will the name make sense out of context?
  3. Sometimes it is appropriate to use one-letter variables, such as a for-loop control variable called i. For anything more complex, a short descriptive name should be used.

Basic Syntax Rules

  1. Variable names always start with a lowercase letter. Function and type names always start with an uppercase letter.
  2. In multi-word names, the first letter of each word after the first is in uppercase. For example,
    int nsThreadTimeout;
  3. Any name that refers to a pointer ends in Ptr. If it is a pointer to a pointer, then it ends in PtrPtr. Exceptions to this rule include opaque handles for structures (such as Ns_ModLogHandle) and char * variables that refer to null-terminated strings. Also, static buffers should not have the Ptr suffix, as in this case:
    char buf[32];
  4. Variables that hold address of procedures should have names ending in Proc, as should typedefs for such variables.
    typedef int (Ns_OpProc) (void *argPtr, Ns_Conn *connPtr) Ns_OpProc *opProc;
  5. #define macros and constants should be in all uppercase. Underscores separate multiple words (as in NS_TRUE).
  6. Tcl commands are always in all-lowercase.

Function names contain meaning

Public exported functions that are part of the API should begin with Ns_, as in:
extern int Ns_ConnPort(Ns_Conn *conn);

Functions that are to be used by other files in a module, but are not meant to be called from outside the module, should begin with Ns, as in:

extern void NsDbInit(void);

Global variables that do not have static scope begin with ns, as in:

Ns_Cache *nsAdpCachePtr = NULL;

C implementations of Tcl commands should be static functions ending with Cmd, as in:

static int RegisterTagCmd(ClientData ignored, Tcl_Interp *interp,
                          int argc, char **argv);

Low-level coding conventions

If you use Emacs, the following lisp (which you can put in your .emacs file) will make C-mode do much of the formatting for you (its default behavior is almost correct--this just makes indents be four spaces):
(add-hook 'c-mode-hook
	(function (lambda ()
		(setq c-basic-offset 4)
		(setq c-indent-level 4))))
  • Indents are four spaces
  • Code comments occupy full lines, with empty lines before and after, as such:
  • foo();
    
    /*
     * This is a comment.
     */
    
    bar();
    
  • Opening curly braces go at the end of a line, except for the beginnings of functions, as such:
  • 
       if (x == y) {
           FooBar();
       }
    
    

    and

       static void
       FooBar(void)
       {
          Foo();
       }
    
    
  • Always put a blank line after variable definitions:
    static void
    FooBar(void)
    {
        int blah;
    
        ...
        if (blah != 0) {
            char *string;
    
    	...
        }
    }   
    
  • Use curly braces even if you don't have to, such as in if statements that have only statement in the block. There is an exception to this, which is else if clauses which may look like this:
  • 
    if (!strcmp(cmd, "put")) {
        ...
    } else if (!strcmp(cmd, "get")) {
        ...
    } else if (!strcmp(cmd, "reset")) {
        ... 
    } else {
        ...
    }
    
  • No line should exceed 79 characters. The only exception to this is CVS headers because they have an external dependency.
  • Labels are indented four spaces fewer than statements, except when they would touch the left margin, in which case they are indented one space in from the left margin.
  • Switch statements should look like this:
  • 
    switch (adPtr->exception) {
    case ADP_OK:
        exception = "ok";
        break;
    case ADP_BREAK:
        exception = "break";
        break;
    ....
    }
    
  • Avoid macros except for extremely simple operations. Enclose arguments in parentheses, as well as the entire macro expression:
  • #define MIN(a,b) (((a) < (b)) ? (a) : (b))
    
  • Do not use bit fields
  • Goto statements may be used as long as they jump to the end of a function that then performs cleanup and returns. They are an excellent way of ensuring that functions have only one exit point. Most other uses of goto are, as usual, looked on with disdain.
  • Common sense applies when using obscure or confusing parts of the C language. For example, don't do this:

    if (++c != NULL) {
        foo();
    }
    
  • Where it is sensible, have only one return statement in each function.
  • Complex if statements (such as those with three or more expressions) should have newline breaks after the operator separating each expression. In this case, put two newlines after the open brace to separate the conditions from the code that follows.
  • if (foo == bar &&
        baz == spoo &&
        Ns_FooBarBaz() == NS_TRUE) {
    
        ...
    }
    
  • When there are multiple variables defined in a block, the first letter of each variable name should line up, with asterisks running to the left. There should not be multiple variables defined on the same line unless the relationship between them is obvious. Non-obvious variables may be commented to the right.

    The leftmost asterisk should begin on the column that is one space after the rightmost character of the longest type name. If there are no pointers, then every variable name should begin on the column that is one space after the rightmost character of the longest type name.

    void
    Foo(void)
    {
        int              bar;
        unsigned int    *fooPtr;
        int          ****extremePtrPtrPtrPtr;  /* Just an example! */     
    
        ...
    
    or
    void
    Foo(void)
    {
        int          bar;
        unsigned int foo;
        char         baz;
        
        ...
    
    Variable initializers should not be anything more complex than a constant; function calls and complicated expressions deserve their own lines of code.
  • In pointer definitions, be they local variables, global variables, parameters, or static functions prototypes, the asterisk should always make contact with the first character of the symbol. In typecasts, there should be one space between the type name and the asterik, and parentheses should make contact with both:
    static void *Foo(int *fooPtr);
    int *fooPtr = (int *) barPtr;
    
  • If a function ends with a return statement which is neither the only statement in the function body and is not preceeded by a label, an empty line should appear before it:
    static int
    Foo(void)
    {
        ...
        FooBar();
    
        return code;
    }    
    

Idioms, Canonical Forms, and Recommended Practices

The following conventions are frequently used in AOLserver. They are the recommended way of implementing a behavior.
  • Configuration parameters should be defined at the top of source files, as such:
    #define CONFIG_CACHE "Cache"     /* Enable caching in this module? */
    #define CONFIG_FOO   "Foo"       /* What is foo? */
    
    #define DEFAULT_CACHE NS_TRUE    /* Caching is on */
    #define DEFAULT_FOO   "Bar"      /* Foo is bar */
    
  • C is not PL/I. Write this:
    return foo;
    
    not
    return (foo);
    
    With very complicated expressions, parentheses are acceptable:
    return (sqrt(variance) + foo() / bar() - (MAGIC + getch()) % 99);
    
  • Booleans can only have two values: NS_TRUE and NS_FALSE. Using 0 and 1 as boolean values is discouraged. Also avoid using the conventions of if (foo) and if (!foo); rather, say:
    if (foo == NS_TRUE) {
        ...
    }
    
    or
    if (foo == NS_FALSE) {
        ...
    }
    
    Of course, this only applies to AOLserver APIs and internal boolean values. Respect the wishes of library calls; values from outside code should never be compared with NS_TRUE or NS_FALSE, nor should NS_TRUE or NS_FALSE values ever be passed to outside code.
  • Explicit checks for 0 values are usually preferred over implicit checks.

    For pointers, use NULL:

    if (fooPtr == NULL) {
        ...
    }    
    
    or
    if (fooPtr != NULL) {
        ...
    }    
    
    For characters, use '\0' when checking for equality to zero:
    if (*ch == '\0') {
        ...
    }
    
    For integers, explicitly use 0 when checking for equality to zero:
    if (foo == 0) {
        ...
    }
    

aolserver4-4.5.1/docs/devel/index.html0000644000175000017500000000073207442271273017465 0ustar frankiefrankie AOLserver

Development Documentation

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/index.html,v 1.2 2002/03/09 02:26:03 kriston Exp $

Tcl Development

Tcl Language Manuals

C Development

Driver Development

Technical Documents

aolserver4-4.5.1/docs/devel/driver/0000755000175000017500000000000011147060111016741 5ustar frankiefrankieaolserver4-4.5.1/docs/devel/driver/db/0000755000175000017500000000000011147060111017326 5ustar frankiefrankieaolserver4-4.5.1/docs/devel/driver/db/api/0000755000175000017500000000000011147060111020077 5ustar frankiefrankieaolserver4-4.5.1/docs/devel/driver/db/api/index.html0000644000175000017500000000365307441736127022126 0ustar frankiefrankie AOLserver

AOLserver Database API Reference

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/driver/db/api/index.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

Ns_PdDbBestRowId
Ns_PdDbBindRow
Ns_PdDbCancel
Ns_PdDbCleanup
Ns_PdDbClose
Ns_PdDbExec
Ns_PdDbFlush
Ns_PdDbGetRow
Ns_PdDbGetTableInfo
Ns_PdDbGetTypes
Ns_PdDbIndentify
Ns_PdDbInit
Ns_PdDbOpen
Ns_PdDbResultId
Ns_PdDbResultRows
Ns_PdDbSetMaxRows
Ns_PdDbSpExec
Ns_PdDbSpGetParams
Ns_PdDbSpReturnCode
Ns_PdDbSpSetParam
Ns_PdDbSpStart
Ns_PdDbTableList
Ns_PdFreeRowInfo
Ns_PdLog
Ns_PdParseOpenArgs
Ns_PdSendData
Ns_PdSendException
Ns_PdSendRowInfo
Ns_PdSendString

aolserver4-4.5.1/docs/devel/driver/db/index.html0000644000175000017500000006235007441736127021354 0ustar frankiefrankie AOLserver

AOLserver Database Driver Development Guide

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/driver/db/index.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

AOLserver Database API Reference

Introduction

Internal vs. External Database Drivers

The Internal Driver API

The External Driver API

Introduction

A database driver is a module that interfaces between the AOLserver database-independent nsdb API and the API of a particular DBMS. A database driver provides implementations of a standard set of functions for doing such things as opening connections to the database, sending SQL statements, returning results to a standard form, and closing connections. AOLserver takes care of managing collections of open database connections called database pools.

Database driver modules look much like ordinary AOLserver modules but are loaded differently. Instead of being listed with other modules in the ns/server/server-name/modules section of the configuration file, a database driver is listed in the ns/db/drivers section -- a database driver is not tied to a particular virtual server. The database driver initialization function must call Ns_DbRegisterDriver() with an array of pointers to functions. These functions are then later used by AOLserver to perform database operations. The virtual server initialization function is called each time nsdb is loaded into a virtual server. The server initialization function (Ns_dbms-nameServerInit) adds the Tcl command ns_dbms-name to the server's Tcl interpreters. The ns_dbms-name command can then be used to fetch driver-specific information about an active connection.

NOTE: The above naming scheme is simply based on convention. It is not enforced, and can be changed at the programmer's discretion.

Internal vs. External Database Drivers

Before developing a database driver, you need to decide whether the driver will be internal or external:

* Internal: An internal driver is tightly coupled with the AOLserver; the database client libraries are linked directly into the server.

* External: An external driver is loosely coupled; the nsext driver sends messages to an external database proxy daemon instead of calling the database client libraries directly. This database proxy daemon can be a local or remote process.

While an internal driver can be faster and can use less resources than an external driver, there are several reasons to develop an external driver:

* Many database client libraries are not thread-safe -- you'll need to be very careful about locking the libraries to use them in an internal driver, and this can unnecessarily slow down simultaneous queries.

* Many database client libraries make assumptions regarding per-process resources such as signals.

* An external driver can be used to access a database from a platform that may not be supported by the database client library.

The Internal Driver API

The set of function points that a database driver implements and what AOLserver expects is as follows:
1. Name
2. Database type
3. Server initialization
4. Open a database connection
5. Close a database connection
6. Get row from table
7. Flush
8. Cancel a database connection
9. Get information about a table
10. Get list of tables
11. Best row identifier (identifies each row uniquely)
12. Execute SQL query
13. Optional: Reset a database handle when it gets checked back into the pool.

The database driver's job is to make the appropriate DBMS-specific function calls that will implement these functions. The driver must provide an implementation of the function Ns_DbDriverInit; This function is executed once, when the server starts up. The most important thing it does is call Ns_DbRegisterDriver with an array of all the functions implemented by the driver. Here's an example from the Postgres95 db driver:

static Ns_DbProc PgProcs[] = {
    {DbFn_Name, (void *) Ns_PgName},
    {DbFn_DbType, (void *) Ns_PgDbType},
    {DbFn_OpenDb, (void *) Ns_PgOpenDb},
    {DbFn_CloseDb, (void *) Ns_PgCloseDb},
    {DbFn_DML, (void *) Ns_PgCmd},
    {DbFn_Select, (void *) Ns_PgSelect},
    {DbFn_GetRow, (void *) Ns_PgGetRow},
    {DbFn_Flush, (void *) Ns_PgFlush},
    {DbFn_Cancel, (void *) Ns_PgFlush},
    {DbFn_GetTableInfo, (void *) Ns_PgGetTableInfo},
    {DbFn_TableList, (void *) Ns_PgTableList},
    {DbFn_BestRowId, (void *) Ns_PgBestRowId},
    {DbFn_ServerInit, (void *) Ns_PgServerInit},
    {DbFn_ResetHandle, (void *) NULL},
    {0, NULL}
};

DllExport int
Ns_DbDriverInit(char *hDriver, char *configPath)
{
    /*
     * Register the Postgres95 driver functions with nsdb.
     * Nsdb will later call the Ns_PgServerInit() function
     * for each virtual server which utilizes nsdb.
     */
    if (Ns_DbRegisterDriver(hDriver, &(PgProcs[0])) != NS_OK) {
        Ns_Log(Error, "Ns_DbDriverInit(%s):  Could not register the %s driver.",
            hDriver, pgName);
        return NS_ERROR;
    }
    Ns_Log(Notice, "%s loaded.", pgName);
    return NS_OK;
}

In more detail, here's what each of these functions needs to do:

1. char *Ns_dbms-nameName(Ns_DbHandle *handle);

This function returns the string which identifies the database driver.

2. char *Ns_dbms-nameDbType(Ns_DbHandle *handle);

This function returns the string which identifies the database type. Usually it is the same as the name of the driver.

3. int Ns_dbms-nameServerInit(char *hServer, char *hModule, char *hDriver);

Ns_dbms-nameServerInit calls another function named Ns_dbms_nameInterpInit which is responsible for adding the command Ns_dbms-name to a single Tcl interpreter. Ns_dbms-nameServerInit calls Ns_dbms-nameInterpInit for each interpreter in the virtual server that is being initialized.

4. int Ns_dbms-nameOpenDb(Ns_DbHandle *dbh);

This function takes a pointer (typically known as the "handle") to the Ns_DbHandle structure as an argument. The handle contains information such as the driver name, name of the datasource, user name and password, name of the database pool and some other parameters. The structure is as follows:

typedef struct Ns_DbHandle {
    char       *driver;
    char       *datasource;
    char       *user;
    char       *password;
    void       *connection;
    char       *poolname;  /* poolname associated for this handle */
                           /* used by internal DbAPI */
    int         connected;
    int         verbose;   /* used for verbose error messages */
                           /* equivalent to [ns/db/pool/poolname] Verbose=On */
                           /* used by internal Db API */
    Ns_Set     *row;       /* used for row data during binds, getrows, etc.*/
                           /* used by internal Db API */
    char        cExceptionCode[6];
    Ns_DString  dsExceptionMsg;
    void       *context;
    void       *statement; /* used by ODBC driver statements */
    int         fetchingRows;
} Ns_DbHandle;

The statement field is used as a pointer to your allocated statement handles (hstmt). This allows you to pass a DbHandle with a pointer to the statement handle to other driver functions to invoke cancels (e.g., SQLCancel()) and error reporting (e.g., SQLError()).

This function takes the information contained in the handle and opens a connection to the database named in the handle along with the username and password. If a connection is successfully established, then OpenDb performs some database specific functions, and returns NS_OK. If it is unable to establish a connection to the database server, or if it is unable to perform the required database specific functions, it returns NS_ERROR. The status is logged by using the Ns_Log function.

Note: For more information about database-specific functions, the documentation about its API should be consulted.

5. int Ns_dbms-nameCloseDb(Ns_DbHandle *handle);

This function takes a handle as an argument and terminates the connection to the database server. It also cleans up the handle parameters. It returns with either NS_OK or NS_ERROR (in case CloseDb fails to close the connection).

6. int Ns_dbms-nameGetRow(Ns_DbHandle *handle, Ns_Set *row);

The results of a SELECT query are usually a number of rows. Ns_dbms-nameGetRow is responsible to obtain these rows from the database and return them to AOLserver for display/manipulation. This function typically does the following:

checks if it is being called from within a fetch row loop checks if the end of data is reached, and if so, stops returns the next row in the result set

You can return the values something like this:

Ns_SetPutValue(row, (int) i, colval);

This function should return either NS_ERROR or NS_OK.

7. int Ns_dbms-nameFlush(Ns_DbHandle *handle);

This function flushes any rows which are waiting to be retrieved after a SELECT is executed. The rows are irretrievably lost. The fields for columns, tuples, and current tuple in the connection structure are reset to 0. The result field is reset to NULL. This function should return either NS_ERROR or NS_OK.

8. int Ns_dbms-nameCancel(Ns_DbHandle *handle);

A call to this function results in cancelling that particular database connection.

9. Ns_DbTableInfo *Ns_dbms-nameGetTableInfo(Ns_DbHandle *handle, char *table, int fExtended);

This function returns table-specific information such as number of attributes in the table, their types etc. The third parameter is for internal use and can be ignored. Ns_DbTableInfo is a array of Ns_Set * and the sets contain something resembling the following:

    set->name           = "column_name";
    set->field[0].name  = "column_type";
    set->field[0].value = "text";
    set->field[1].name  = "column_notnull";
    set->field[1].value = "t";

A "t" or an "f" would represent whether the column is nullable or not.

10. char *Ns_dbms-nameTableList(Ns_DString *pds, Ns_DbHandle *handle, int includesystem);

This function builds a database-specific SELECT statement which returns a list of all tables in the database. The function returns this list. In case of a NULL table name, a warning is logged by Ns_Log. The list of tables should be returned in the pds parameter in the form "string\0string\0string\0", which can be implemented as follows:

Ns_DStringNAppend(pds, table, strlen(table) +1);

11. char *Ns_dbms-nameBestRowId(Ns_DString *pds, Ns_DbHandle *handle, char *table);

This function returns the unique identifier for a table. In most cases, it is usually the primary key for the table. In some cases, the system table containing table information contains a unique identifier for each table. In such cases, this identifier is returned. The pds parameter is an initialized Ns_DString that gets the primary key (e.g., in Postgres, Ns_DStringNAppend(pds, "oid", 4)).

12. int Ns_dbms-nameExec(Ns_DbHandle *handle, char *sql);

This function takes an SQL command and sends it to the DBMS. If the command is returns rows, the function should return NS_ROWS. If the command was DDL or DML, then the function should return NS_DML. And of course if there is an error executing the SQL, the function should return NS_ERROR. It is recommended that you define one Ns_dbms-nameExec procedure that handles both queries that return rows and those that do not. When Ns_DbExec is invoked in AOLserver, it calls whatever Ns_DbExec function is defined. When Ns_DbSelect is invoked, it tries Ns_DbExec first and then Ns_DbSelect.

13. int Ns_dbms-nameResetHandle(Ns_DbHandle *handle);

This function will be called with the database handle every time one is returned to the database pool. You can use this to normalize it's state for the next use; for example always setting the handle to autocommit mode and aborting any uncommitted transactions.

The External Driver API

To build an external driver, you need to provide implementations for several functions, and then link your code with the provided 'nspdmain' program, found in the nspd.a library. The resulting "database proxy daemon" is contacted by the server's "external" driver (the client in the following descriptions) for all database activities. The 'nspdmain' program handles all communication with the server's 'external' driver, calling your routines database-specific functions. Note that there is a single database proxy daemon associated with each database connection, so all of the state for each connection is encapsulated here. Database connections are managed efficiently by the server's database pool mechanism.

The next section summarizes the External Driver Proxy Daemon functions. The reference section at the end of this appendix describes each function in detail and gives a pseudo-code implementation. Each implementation of a function may be a different for each dbms-specification. Consult your database client library documentation and the freely distributed AOLServer examples of the Sybase Proxy daemons for more information and dbms-specific examples.

Functions to be Implemented

The set of functions that need to be implemented are:

1. void *Ns_PdDbInit (void)

This function is called once from the 'nspdmain' when the database driver is initialized at process startup. It normally allocates and returns a dbms-specific structure to be passed to all other routines. It also calls any dbms-specific initialization routines. This function does not open a connection to the database.

2. void Ns_PdDbCleanup(void *handle)

This function is called once from the 'nspdmain' when the database driver is initialized at process startup. It performs cleanup associated with process shutdown and frees the database-specific handle.

3. void Ns_PdDbOpen(void *handle, char *openArgs)

This function opens a connection to the database based on the openArgs passed in. The handle passed in is the handle that was returned by Ns_PdDbInit, and will usually be cast to some driver-specific data structure. If the open operation is successful, this function should call Ns_PdSendString with OK_STATUS. On failure, the function should use Ns_PdSendString to return an error string.

4. void Ns_PdDbClose(void *handle)

This function closes the database. It should not free the database handle. If the close operation is successful, this function should call Ns_PdSendString with OK_STATUS. On failure, the function should use Ns_PdSendString to return an error string.

5. void Ns_PdDbExec(void *handle, char *sql)

This function executes a SQL query. If the SQL is executed successfully, this function should call Ns_PdSendString with OK_STATUS followed by either Ns_PdSendString(EXEC_RET_ROWS) or Ns_PdSendString(EXEC_RET_DML), depending on whether the SQL returned rows or was a DML statement. On failure, the function should use Ns_PdSendException to return an error.

6. void Ns_PdDbFlush(void *handle)

Flushes any pending data. Usually this function will call Ns_PdDbCancel or something similiar along with any other database specific clean-up routines. If the flush operation is successful, this function should call Ns_PdSendString with an OK_STATUS. On failure, the function should use Ns_PdSendString to return an error string.

7. void Ns_PdDbCancel(void *handle)

This function cancels the current database operation. If the cancel operation was successful, this function should call Ns_PdSendString with OK_STATUS. On failure, the function should use Ns_PdSendString to return an error string.

8. void Ns_PdDbBindRow (void *handle)

This function should retrieve from the DBMS a list of column names of rows and return this data to the client. If the bind-row operation is successful, this function should call Ns_PdSendString with an OK_STATUS. On failure this function should return an exception code with Ns_PdSendException.

9. void Ns_PdDbGetRow(void *handle, char *columnCount)

This function should retrieve from the DBMS the row associated with the columnCount column and send this data to the client. If the get-row operation was successful, this function should call Ns_PdSendString with an OK_STATUS and then send the data with Ns_PdDbSendData. On failure, the function should use Ns_PdSendException to return an error.

10. void Ns_PdDbTableList (void *handle, char *includeSystem)

This function should retrieve the list of table names from the database associated with the handle and send this data to the client. The includeSystem parameter indicates whether to include system tables with this list. The function should implement the following protocol:

If the initial SQL query returns a successful status of DB_ROWS when generating the table names, then this function should:

+ Call Ns_PdSendString with an OK_STATUS.
+ Call Ns_PdSendString with a size of the item (table name).
+ Call Ns_PdSendData to send the actual data associated with the name and to signal the end of data.
+ If an exception occurs during the processing of the table data, then this function should send the partial data to the client and indicate an error with Ns_PdDbLog.

If an exception is raised before successfully retrieving some of the table data, then this function should call Ns_PdSendException to return an error.

11. void Ns_PdDbGetTableInfo(void *handle, char *tableName)

This function should retrieve the system catalog information (columns, types, etc.) about a table and send this to the client.

If the initial SQL select query returns a successful status of DB_ROWS, then this function should:


+ Call Ns_PdSendString with an OK_STATUS.
+ Call Ns_PdSendRowInfo to send to the client the column info.
+ Call Ns_PdSendRowInfo to send to the client subsequent row info.
+ Call Ns_PdSendData to indicate to the client that END_DATA has been reached.
+ If an exception occurs during the processing of the row info, then this function should send the partial data to the client and indicate an error with Ns_PdDbLog.

If an exception is raised before successfully retrieving some of the row info, then this function should call Ns_PdSendException to return an error.

12. void Ns_PdDbBestRowId(void *handle, char *tableName)

This function retrieves the primary key of a table from the database and sends this to the client. If a table has a primary key, AOLserver can perform row updates and deletes. If the best-row-id operation is successful, this function should call Ns_PdSendString with an OK_STATUS. If a best-row-id is found then call Ns_PdSendString with the column name; otherwise, call Ns_PdSendString with NO_BESTROWID. On failure this function should return an exception code with Ns_PdSendException.

13. void Ns_PdDbIndentify(void *handle)

This function sends a string identifying the proxy daemon name and version with Ns_PdSendString.

14. void Ns_PdDbGetTypes(void *handle)

This function sends a string of the data types for the database with Ns_PdSendString.

15. void Ns_PdDbResultId(void *handle)

This function sends to the client with Ns_PdSendString the id of the last object affected by an exec command or a null terminated string.

16. void Ns_PdDbResultRows(void *handle)

This function sends to the client with Ns_PdSendString the number of rows affected by last exec command.

17. void Ns_PdDbSetMaxRows(void *handle, char *maxRows)

This function sets the max rows for the database. If this function is successful or the SQL command is undefined for your specific DBMS, it should call Ns_PdSendString with an OK_STATUS. If set-max-rows is defined for your specific DBMS and there is an exception raised, then this function should send an exception code with Ns_PdSendException.

18. void Ns_PdDbSpExec(void *handle)

This function executes a stored procedure that has been initialized with Ns_PdDbSpStart and Ns_PdDbSpSetParam.

19. void Ns_PdDbSpGetParams(void *handle)

This function returns output parameters from a previously executed stored procedure.

20. void Ns_PdDbSpReturnCode (void *handle)

This function gets the return code from a previously executed stored procedure.

21. void Ns_PdDbSpSetParam (void *handle, char *args)

This function sets parameters in a stored procedure before executing it.

22. void Ns_PdDbSpStart(void *handle, char *procname)

This function begins the definition of a stored procedure.

Utility Functions

In implementing the above functions, you will need to call some of the various utility functions described below. When using these functions, do not pass a parameter of NULL for string values. If you do, an error message is printed to the syslog and the function returns.

1. void Ns_PdLog(Ns_PdLogMsgType errtype, char *fmt, ...)

The Ns_PdLog function sends a formatted messages to the client. Allowable values for the log type are the following with a default type of Error: Notice, Trace, Error.

2. void Ns_PdSendString(char *string)

This function sends a string to the client.

3. void Ns_PdSendException(char *code, char *msg)

This sends an exception code and an exception message to the client.

4. Ns_PdParseOpenArgs(char *openargs, char **datasource, char **user, char **password, char **param)

This function parses the datasource, user, password, and param parameters leaving missing elements as NULL. This function is normally called from within Ns_PdDbOpen.

5. void Ns_PdSendRowInfo(Ns_PdRowInfo * rowInfo)

This function sends a row encapsulated in an Ns_PdRowInfo structure to the client.

6. void Ns_PdSendData(char *data, int len)

This function sends data of length len to the client. You indicate that you are finished sending data by calling this function with END_DATA.

7. void Ns_PdFreeRowInfo(Ns_PdRowInfo * rowInfo, int fFreeData)

This function frees a Ns_PdRowInfo data structure. If fFreeData is a non-zero value, then this function frees the data associated with the Ns_PdRowData structure (encapsulated in Ns_PdRowInfo) as well.

Constants

The following constants are used in the example drivers:
#define EXCEPTION_CODE_MAX 32
#define EXCEPTION_MSG_MAX 4096

These constants are used for the buffer sizes for the database error/exception code and error/exception message, respectively. The given buffer size must include a terminating null byte. In other words, you can have an exception message of up to 4095 bytes, reserving the last byte for a null byte.

aolserver4-4.5.1/docs/devel/driver/com/0000755000175000017500000000000011147060111017517 5ustar frankiefrankieaolserver4-4.5.1/docs/devel/driver/com/index.html0000644000175000017500000002113307441736127021537 0ustar frankiefrankie AOLserver

Communications Driver Development Guide

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/driver/com/index.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

NOTICE: This document is under review for formatting and correctness. Please check back at a later date to see if the new version is ready to view.

Background

Technical Details

Interface

Communications Driver Functions

Background

NOTICE: This document is under review for formatting and correctness. Please check back at a later date to see if the new version is ready to view.

The AOLserver is modular/extensible with respect to its basic communications interface. This is accomplished by defining a set of functions that the server calls for all communications operations. So, an AOLserver communications "driver" is just a server module that implements these special functions. The communications driver framework is intended to support technical AOLserver users who must create their own communications drivers to meet their customization requirements--no matter how bizarre. Note that there are also architecturally similar, but functionally independent "database drivers" that we will not discuss here.

The standard AOLserver distribution includes socket, SSL, and file communications drivers. The socket driver implements the basic socket-based communications. The ssl driver is the same code as the socket driver, recompiled with #ifdefs that include ssl-specific code. In this document, we'll outline the basic communications driver mechanism and show how these 3 communications drivers fit into the framework. Access to AOLserver source code for existing drivers is assumed.

Technical Details

NOTICE: This document is under review for formatting and correctness. Please check back at a later date to see if the new version is ready to view.

Initialization

A communications driver module identifies itself to the server by calling Ns_RegisterDriver in its module init function. The Ns_RegisterDriver call tells the server everything it needs to know about the communications driver, including pointers to all special functions via the Ns_DrvProc structure pointer that is passed in, and a driver-specific context for future reference. The functions that are identified via the Ns_DrvProc structure are listed and explained in the Communications Driver Functions section.

Interface

NOTICE: This document is under review for formatting and correctness. Please check back at a later date to see if the new version is ready to view.

Typical calling sequence from comm driver's perspective:
1. Ns_ModuleInit
2. Start - driver initialization
3. Accept - wait for connection
4. Init - connection initialization
5. Read/Write - connection I/O occurs
6. Close
7. Free
8. goto step 3

Notes on existing drivers:

socket

Notice that the socket driver, by default, does not register the Start, Accept, or Init functions. It makes the socket, bind, and listen calls in its ModuleInit function, and sets up a callback which actually does the accept and queues the connection. If, however, you configure the nssock module via ListenThread=on (this was undocumented), the driver will register an Accept function which will be run in a separate thread by the server.

SSL

Unlike the socket driver, the SSL driver registers an Init function. This is where the SSL driver does all of the per-connection SSL session setup (see ssl_init_server() is nssock/ssl.c). After this Init function has completed for a connection, the SSL driver simply uses symmetric encryption in the Read/Write routines.

file

The file module is unique in that it doesn't really talk to a stateful peer. It simply reads and writes files. Because of this simplicity, the file module is a good place to start when studying communications drivers.

Driver Developer Guidelines

If feel the urge to create a new communications driver, first review the following: For a socket-based driver, consider modifying/extending the current socket driver to meet your needs. If modification of the existing socket driver doesn't seem appropriate, you may be able to reuse much existing code by adding #ifdefs to the existing socket code to produce a new module--analogous to the SSL approach that is currently in place. For a non-socket-based driver, you'll need to create a new driver, modeling your code after the existing socket or file driver. Review the Communications Driver Functions section and the existing drivers to determine which function points you'll need to create.

Important Files

The code that implements the framework discussed here can be found in:


* inc/nsdriver.h
* nsd/drv.c
* nsd/conn.c
* nssock/socket.c
* nsfile/file.c

Communications Driver Functions

NOTICE: This document is under review for formatting and correctness. Please check back at a later date to see if the new version is ready to view.

All communications driver functions that can be specified via the Ns_DrvProc structure are listed below. Note that the actual enumeration type for each function name (Ns_DrvId) can be derived by prepending Ns_DrvId to each name, e.g. DrvIdName, DrvIdStart, etc.

These functions are generic, and some may not make sense for certain drivers, so it's typically a subset that needs to be implemented for a particular driver. If you examine how the Ns_DrvProc structure is initialized in existing drivers, you'll notice a NULL-terminated array of ID/functionPointer pairs, where each pair identifies an implemented function. Mandatory functions are shown in bold.

Format of this reference: Name; Description; PreConditions; PostConditions

Preconditions and postconditions reflect the contract that a driver has with the server. Preconditions represent the driver developer's assumptions before the function is called. Postconditions represent the server's assumptions after the function has completed.

Name; Returns a (char *) that identifies the driver, e.g. "nssock", "nsssl", "nsfile".

Start; Called at driver initialization time (not to be confused with Init which is called when a connection is initialized); ModuleInit has already executed; All driver initialization is complete;

Accept Called when a driver can begin accepting connections; this may block; Start function has completed (if defined); Driver has established a connection with peer;

Stop Called at driver shutdown time; Driver has terminated connections with peer;

Init Called when a connection is to be initialized; A connection has been established via Accept Per connection initialization is complete;

Read Called to read data from a peer; Server is ready to receive data; Driver has received data from peer;

Write Called to write data to a peer; Server has data to transmit; Driver has transmitted data to peer;

Close Called to close a connection; A connection has been established; connection info is contained in the context; Driver has closed connection with peer;

Free Called to close a connection and free the context; A connection has been established; connection info is contained in the context;

Driver has closed connection and freed resources associated with the context;

Peer Returns the (char *) identifier of the peer (IP address in the case of socket-based drivers)

Location Returns the (char *) complete location that identifies the driver, e;g; https://www;docs-R-us;com:81

Host Returns the (char *) hostname that identifies the driver

Port Returns the (int) port number associated with the driver

SendFd Called to send an open file File descriptor is open/valid;

Driver has transmitted entire file;

SendFile Called to send a named file (currently unused by all provided drivers) Filename is valid/readable; Driver has transmitted entire file;

Detach Called to support socket KEEPALIVE function; In socket driver case: creates a new connection context that is marked as requeued; Returns a (void *) pointer to a new connection context, or NULL if existing context is NULL; Connection info is contained in the context, or the context is NULL; Driver has created a new connection context to represent the detached state;

aolserver4-4.5.1/docs/devel/driver/index.html0000644000175000017500000000052707441736127020765 0ustar frankiefrankie AOLserver

Driver Development

$Header: /cvsroot/aolserver/aolserver.com/docs/devel/driver/index.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

Communications Driver Development Guide

Database Driver Development Guide

aolserver4-4.5.1/docs/intro/0000755000175000017500000000000011147060111015502 5ustar frankiefrankieaolserver4-4.5.1/docs/intro/tcl2k/0000755000175000017500000000000011147060111016521 5ustar frankiefrankieaolserver4-4.5.1/docs/intro/tcl2k/html/0000755000175000017500000000000011147060111017465 5ustar frankiefrankieaolserver4-4.5.1/docs/intro/tcl2k/html/img073.gif0000644000175000017500000002616007363640504021206 0ustar frankiefrankieGIF89aXÂ÷(60 0///0%(%(.2/0/)J)Q0`2z/0`2|?@?/g``0`0/n:E\Ri^hb`g/DDDBP_SSS_`__f_~~~>–2 8„ÿ/0Ï@”P›LžQŸ\©\±O¢R `7G;N%Z¦/g+cª5f­;l²?r¯`Ï/gÏ/`ÿ3fÿEU’S^˜O`˜Sc™Jt´\k¡U|º`gdq§/—/ÿW‚º`ˆ½[„Àf‹Áe”Èw™Æ£Ë˜"˜!¯.>†t”}g`Å*Ç1Ë*>Ð':ÿÿ0/Î7LÛIWÓN`áVe°–ƒ„{`ϗȺ?ëÎèÏðÒëÕ(öÚ+óÚ4õà=øÞG÷áIøäY÷åiøé{„ƒ„––•Žš¼§§§»»»€Ê—Ï…¥Êˆ¦Ð›¦Å«Ð—²Ô¥¬È©±Ë¦»Ù³¼×¬¾â™Ìÿ«ÁܺÄϱÅÚ«ÀáµÈàÏ—à‰™ìµ¸í¼Áð¼ÄÁÁ¿øê†úî›úñ¦üñµÆÇÆÈÌÛÞÞÞÁÏåÆÓæÇ×ðÓÛêÛäìÚâñààÐïðÕûóÇûøØãçååëòìó÷ÿíïýøéøøø!ù§,XÂ@ÿxêGÁƒñœRxª¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb¡S/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxâðq/߇{W¾›â`·ˆ+^ÌnÓBrÇê´ËòpDËc¾ì÷/ÆÍAÆl™taÀ§M{>µyôiÔU3žM»vWÇK#ÓMHYpçΙ¿f-6ìÕ…û=<8rÕ‡•§½pi寳ÛÞν{PÜ4uKÿ.ë½¼ùóèÓo_Sìîº<ÕËŸO¿¾ýïóCv?¾÷ýÿ(à€ ±–M’ñ 6èàƒ‰¸‚ï‘—•t U5JrÔ!mÎâFÖ!Ç¡‰É-G"Š+z‹ZI(]¦TœG¯mbŽ«å¥ã‹¨'äAŽØ&"™¢‘þxdžñˆD>IgUä*:w#–YF)FT§¥abny¥•hN¤d›;BW›ŒüÑè„x¦wfž|VE'…ý-اI{jè¡õýyS \5™$aFZ¥™®mIŒˆfª©zŠBUᛆ*ê¨xvúž‚¤¦ªêªšš |¬Æ*ë¬Ü¹ú© ´æªë®[ÿÙÊ(¯À+¬Q¾Ú‰ë¨x4Ð@ ¦4[‡ÊF+í´ÔVkíµØf«í¶Üvëí·à†+î¸ä–kí)—¤«.êª[Bè¶{ ੨ÅJ*²Ãö[•½´æKÖ¾¢î„ÇÁ'¬ð 7ìðÃG,ñÄWlñÅg¬ñÆ_L)^ H` €pÏ*ðdÇ|¯¿0tÉÂ|¥,ëʨÆjsCðŒ£Eϱ&´a1g:³Â5¿¼)ΰê¬tÑPottÂI¬ßc3êÛr¨;WBÂ×`“0ÂØd—öÙ_—­öh‡½¶Úmƒý6ÙqË=7Ûuß=vÝbß¶×iëÍ·à$œ·à€ÿ£­7Þ‡û=¸ãCÞ6D ?´3«Lטj×QKT WŸ X¹C—¯š9Á\¯zç­ž•ë"¼ÐÓ™ž¾õ¦œ³Þ:èŽÞPéªÚ.kîº7ûUÇ‹~ðìV³—õÀ·kJ<_— ]覡_Ï&¤"eO»‡€•ìÀ§*¼Ó»}™úÀ&Obf'¹OèÐÔ³™”ïÌ«|unuj=¼êð{“Â÷=CÉO$ŒÈIR?ëÙï*äKà ÎÇ*âUEìì¬ó™•xO0ácßýf¹ ò‰‚«² îx¦å# U¥BÖ¹°(7œO›·¿-ÊXÿk]%†HÄ"ñˆHL¢—ÈÄ%&:ñ‰PŒ¢§HÅ*ZñŠX¬"åHH:æi†›`ñŒÇ;íPÿÎëô‚è ËBã —ÃQ‘T¹cQýz$BUÉv ,‰ÁúyÑ$0<$„îˆ,1êÑí[ßš.ØÇ‘ ò}…l "QrÆ›õ°=€"úÚØAIÊjƒ…$ÓAòA•ð±’ÿ¢ã&ÄH—¥oŒ—ôI.m“Hâæy,c£ñ¸@Ìbó˜ÈL¦2—ÉÌf:ó™ÐŒ¦4›Y‰iZóšÄ¬&6·ÉÍn³"ŒU-SwËâí²%ç¤M/ÑøI`欂bÄe45„U¿Tc0uV‚~úóŸ ¨@JЂô M¨BÊІ:ô¡]HAñPP‰Bô¢ígþ<™ÆPúOgcäÿÎÖn½ñÑÌ—ûsgÓBÊÒ–â3¥ú|§KgJÓP³¦8Í)b"á44Ä yƒC&±‘›–$Oˆˆ"Là‡¬À+XAC¤ªÓªZ5#iH Üô©P=ET£*î¼RLQ ûr´ÖWæ F äYÝÂRš~t[ï QÌË«Ÿô¡§~¥‘QD5¬OêD 0V‡0ª£8E lðpÂ!Dx*)Na8d ¸ ø®j”Y&‡´‰€Q !‘¥ "ˆœÂ§°í€…Sdá½í­´°‰µÈMîlޫܿ:W-Ì}®t§ë•ÀN臥®v·Ûÿ+ëªTsÜ ¯x‰ݾ0 ;̹ZР÷IÔkÎǺô^øÎ×KÍQïoŒ³ßñr·¼8Š‘ÄÞ=­½Îq#%4½L6 v°}9³` ûW»¾°†7\TïÆt¥±ˆÛQì®qÄ(NqF2¬âû—Å.Žñva<Gi‰À fpõº´¦/ñ¸Dn‚’¡¤&ë˜Á”Âït¢ß%/GJJ2™ˆŒ_ x¿<®r‹²,_ ¥‰¾òÍ2˜à;à2ٯˈ¡±Pª7©6IÊÌpNS‘ìåN§®wrã¬&6ʓܠíg7›éHnÖ‘ž%µJXº×R†¾ œÏ<è8ÜÙyÒêË3’£f{º¹ö —M#å79Çé-RkЬ½O»º#¡®ÌYmæIÖšÎ.“7ýê^£$Ö¾¶K-ìbØÆN6Ô­ìf÷‹ÙÎŽ6¯   d©3…'áù XýêXÏúÒËÓt€=}iQ¬(©¾uuýžmç‡ÁÛÈÖµpy“œâàþv¹Ï}n³»Û잸Ååým|ëÞw6¿Çï_[â_·-Ê®‹E×ÏÑKЍ<ÒjçÜ#¢˜À :º#$ $áê“pb.ì§1 ãi=¥#*{¾¹ºT–D“—‡´æs_’u¦=Ÿ8Ÿz Y×7h›oµçbÏÀ=C‹¿s½€&~Ÿv.|éM‡úW±Ý–¤ )öU2þÅø^œÝ¿•0O‘Åö»ÿ½ýð¿üçOÿú7Ññ˃üK¾v¤Kø64O ²}Á“~„5|å´BHqзQèWbb—]~­'W‚`¡òA×#}ìÇ|#áV›÷|;Á­b€c7dK»‡W§DI’–}¢•I¼gh>&(«—€y•i´{¢ç‚ä׸Ç=Hq~§©÷}äD@I[Q~µQƒ2tƒ9‡‚(~ X} øušB}öa}Q…ñÓ;[H‚ÿá…õ†˜—…Ê3‚‘ÿýGy‡¢†E#†&a‡na„܇„Þç™B‡1ƒ‡$!ˆŠ!…vD…—ƒmDL L؈Þ‰’8‰”˜Mʼn×ôˆ”¨M•hLšx‰žÈˆ‰xLà$Koˆ5q¸~µw@ÂGfhîsc,Aˆˆ&ƒvzX€|¨~£”‚È·=='´øyÑJ6â|Vqvx„j|2ECxà)PGbq —C·ÜØ;·SŽ%PõBHc/ê¨ r?w âÈ…µƒˆÑXvö¨;hxúx(ù¸þøEô¨zÿ8 ±xð0àS!qS60V0VŠåT¶i•%V+àTÅ‘‡%V9Ð)Vy’G!$  U\õ5k©„‡ÕX£p“¡ ð™ {@V¡+ð“R%Q…%iRõT~ðTœu‘¾Á‚x5W\òƒvÖ'iUW·¨•<˜$*H4¶gk^"B^‚¡Ç+”¶2 ”…’pyB3é‡qY—óØ‹h—zyˆxy‚{ù—]8—r˜„I ýX˜ˆÉ‡™˜Œé‹Ù˜©–ÿ‚)„Êz•©dç‘9m“I±8a.Bz®t™¡™› 3hˆ`vhZéJcš¬a± š³I›±¹šµy›—‚Vvš†’š¦`¹ie°iš¢a`½Y›²dɹjFa¶ ›¾9})k˜²š¤¡Åé(² š¸éœj ֛ع›Óù›Õyžê‰¹žîI^éùžò9'ñ9ŸöÉiõyŸúÉí¹ŸþIýùŸú: ‘ùy  šº  Ú"mAšj¡³t¡]QkêkfBºDxÀ)cvi’Æ›‚Ögyfk¼Öcç…¢W¹¢)²g´Ö¢…¦8ºi«·Ö¢²GeÔqiz$dŒ6œA&gAú£²é£j)7ŠgÜ“¤’ „"fSVdØ£¹£,Z¤Vrcñ…%–6"Ü™hOÚfŒ¶cQ&£Ÿ1h³¥/˜¦‡Ä¡h¶h„6iNòhN2¦e¦¡JA¥X1dJZ¤£Ö¥Z&e*¤}:gWfe‘eë…kwª£Çq¢M*aNö(Vªdnz_WJ$uZ£lú#1:–Vi8ö™>¡Úªÿ¬Úªúªöá§°ºl€š{g*ꢻjiºé¥´Z«À"«i4:ª¨J›’*©p*¬UE¬Krdz¦lšdË*daŠ¥Î:Sк­ûÙ­ÞzŸà®ó9®äúžæz®ë™®êzžìÚ®¾ù®ðº™ò:¯Y¯káúº¯üÚ¯þ*tªJøªÉR>À< mݦo÷pþæoê&-ñ&nëÿoã¦o;±›oîöo û°kp$[²&{²G5ó’0ïŽêh/—Šü‰GÊR"³9‹²<Û³>û³@´B+ˆ2°iQqÿš´J»´LûÒp€2;F‹FHK5 1îx1×µ[»Ž·q ç0`[¶!·µ{Ñ´lÛ¶ó1 pz=peP24Wµòqµg‘µnû·€¸J;_ˉvÿøŒRWxT¸ŒÛ¸Žû¸¹’;¹”[¹–{¹˜›¹šDË·úöªGS¶†ëŒÀ—¸5Ûv¡‹ò’.¥»‡ˆU¨ˆU×3Ì 8ÔX½Ú™ÝËKøËaHÜ°ÝØÄüØjÙ)˜ÖkµÏ¯'Ú¤ÖÇXÚpÛ.ÛÈЭÑÿQ½Ð­mǯý…©ýÛÈÜÝŠ/}Ýàmt`ÍìÝ£Þs½ËÒ}ͤÌÙè}ÊfäÛé\Þm…œÈL˜ˆ¥ØàÞàÚDŠÑÄà¢X‰.á“HŠ£8Š¢ÈàŽá’xŠÆ­ÚEÍÚGýà(žâ*~L ¾âÐÔâ.ãÉ$âãMÖnÖÔ àü:dÛómùË.dñ¼Ö4ÑcجÈ•¸½ßþÜßš½Ü:nÊ<. £K¶5N×7n×xÔº^þå`æb>æd^æf~æhžæj¾ælÞænþæp./YÎß[ÙÈr0%p )@ö¶‚ûç€þ¶ ã²yNè(¸sþäu>ÝœwNQ€è’>é)7èãˆ0ˆ®,~þ¯eO)}]Éṁ²¹¤^ê¦~ꨞꪾê§þé“w¼°^Aë(9ë´N¶~ëÿ˜ëºžb¡à’à à¼Þë"æi/@È.“´mìj Y…$SpÃîìP®ÜqX&°YñN°K&`’œ”Ðîk U[% ÀÒÿãd‘PIôã³*"ÁVp$P"pçoq«JUB™XiÙ“j±Ø9‚WYiX©ÏA“ƒMÆcÚpÝgÏ•bœ•ÁR–-Q—0!ñU‰%™uXç‚ !”i~À~p 2àYSÕ é.VDàH/’‰-òɧŒA@s¶ñ ßñ­ –ÊxW©Ô«fÙGOÝ‚òØM›ÐZEà40'@ ¶åÀu ½%ë€íTPÕXïNB5040(0p³5 ´† '÷XÀŽ\ÁÕÆ5÷w/¬ò*¿Гÿ òa—_Û™ d›O³ÿù¡ú¨;ú¤?¯¦ŸÜ¨Ÿúíºú©×ú®®°oùÜ>û®Xœû¸«º/ú¼ßû Zûï!ûÂï¬Ä/Æüµšüt±üÌŸûà±û¢ýÿéüQýÖ¿ ØŸÚï&ºý3ÿöû§ü楪áOœ¡Ê@qœ¶)þiFþ¬oþ†þ•yœ¾‹éÿÐ%ÿñã”@‚OÄs*áA† >„øÀĈ'^¬x‘bCŒ 5V<Ø$Ç7– ©eJ‘O¶TY²%Ë$ЙSçNž=}þTèP¢EEŠ´Ð©¥M™>]úCªTƒ"T˜TbMˆ(½Šä –kÄ™ÅÖüvì©´6oâtùÖf\¹ië–ÕšWï^¾}ýþ¢SÂPNµZ•aÂ…{ñ²ìJñq\¶kÉZÞ*wneÍœ7S6y·3̵ñš;YðjÖ­]¿† »ðìÃSÄÚXïäÓ’ÿ1ÓýYgï·3IŽ©ôrÏ¡! oÎ<ötêÕ­_Çn˜vTÄ· æîËÛ2FÕžËK¿Üù¹qµÈÕCg^õûùγßÇŸ_ÿþÛ #N ·¬tËK<ú|{o³•ÌJ­çìcO³sš½ú «? 7ä°CÖüs @ï®0¼àì¢Ë¥Ï¢iÁ³DÍ>¸R$IºãÜ£‘³Wô°G²?í†1ÀŲâ+9t G·vЉÁÒR›2 KšÔ»2H/¿“CŸ*Ò;ðÂD3M5×d³Í¾ÆäÎ6#Ït³N;ïÄ3O/ᬪ9KÔ3PA%´P¿ø,31: e´QGmIÑîþd RK/Å4S0%•ÓL@55TQG•mÈÂUlQRWeµUWâÔOO+}µV[o}5V#I¤W_ÖQ]G<’À`E6Y5ÿ‡¥IeŸ…6Ú™ÕYi¯Å6ÛØ¨UôSm¿7ܼ¸MÕ[qÏE7]ȰWuß…÷]v¿37^{ïÅv^^­Å·_‘Õ·Ø&Ø×€U-8%¢‚+˜ááÄŽÉ‘ž¸ÁôXÜïàz«SRbŽïÒŠâ-öKd ‘CS-£^2J“MZ˜ä­ÓÔÿ&­ÖØû^¶Žç“c†ÍçËêTyåâdLhš…z™åimçnÝÝM饷T-9_Šk VNI¬‡ÞúE±TLO&­½Aåʆ‘<°ßf›§¢áö:ÁŽéλ§µë®¸í¸o›ìÂñ^­®ƒÔ˜ê¤þöén´#«QÅ)ÿ¯V|òÊfvØ7ÎôÜ,ÊaÞ|rɾ›ÊÒ+_½õÀÑK½¿fýr—+:sÓA&ýs߇>}S¨É”º\Ç‘‚ÜoÚ{ŸYóÐq_~õàŸýòßønžyšSÿZlîa¶½u“¹WûpæÉO~äÚ±sÞ]‡uÙãß2´ó4lœß­~²Ý‡ŸÓ÷¾NfÔ“_û®w æ}Osç#àæÂ¼ö]­FM‹žô¦¾vptýÛ]öÀ7¿Zu@ʟβC¥Å}„p# îÊC6ðo7ÜQfÊG7ô¹-lÑ‹×ø&¹u ‡éë›óÌ÷ºíµƒ/쟡·8R‰=JaÂ#ÞµA-†*‹]<ÿô´7.¢ë‹`Dc#5¼8ÉjjúScåXȧ3‚KŒsÄ£›êø­;æÑiÚ£¶úøGBî‰}Ú•Àð³¶ÃiŠAäá#‡˜¼AÒ’;$ªÚGêÄΆ'”!? ;”]Ò”z äÇ\ØDPƈŒ\žêN9K;¥²“ $] ½\Ʋ”´æšlyË·52ƒ¡,ZǘDÓ™æ3¥9M¡D“š×ÄæH¬™MnvómL$¼9Înn“œç ¦9ѹNSª“ïü£;á9O9Ê“ž÷£=ñ¹O‚铟ÿÄ—?:Pyÿe²x›T!Aê/.Ô¡ÚjèC%­ˆNÔ¢3h§Þ˜Ð‹v4[õhHkR‘–tU$5é<ËØ*”>  h@ æ0Ó9ÀÔ¦7ÅiNuºSžöÔ§?jP…:T¢Õ¨GEjR•ºÔžâa¥¬j©£^ S˜B•(MOÑ€­rÕ«GÝjWo*Öœv•¬@ «VÇŠVµîô¬L…k\å:WºrwÅ+.¡sš×Üæ7ÇyÎu¾sž÷Üç<·Ÿ‹%Ž)Ž× å$@zÒI0¦7ÝéJ‡:Ò>õD]éTŸºÕÿ“Žõ¦k}ë\¯º×ÁÎt¯/ìQ¯Ä×Ï.öµ³ë$H»ÕÇv­½ìf»Ûó®u‡|·!"‡*Éúì†Äý$8<Þ±~w»ë}ñŽÏzÙ_÷É˽íI7üܽ~ŠÆ'>êvûç+/ú½Sžéœ:ä#Ï÷¿ÓöïC¿TÑÝttÄ×ñTG=ã/OúÒóžêºï=Ô5¯ú®C=ó£þÚ=o{ÅÿÞðËêq/ù¶~ùŠç¼ô©¿{¨÷Ýõ‹½¥dß&Ú'?øæ¼éϯöô«ÿ÷Ä/¾ûWyö·ß÷ó·üÛC~ûóÿ÷O=ùû?¥ó>¼z½Ó³ƒâ³àª”ë—JÈO”ªïCˆðƒ”ñcü¶s‘Àûè@K1@Àë­Ô¨’#<†ø@tC—Šq·ŸèÀº@r“s³A-Ù‹´ÀGÁÀ5ÑÀ{aÁë dŒÿÁ[@“c•´—!¬'ô®»Ò8f#Áß¼caÂxÂéØB“B´/$¶<ˆ!4BRaÁ¦)·(‚Áí ™„TÁ3\Œ/¤CCéA5Ñ@ÂYC4·§âCr»Až@œAt ²  ¿?6C,ÔŒ.K| L¬8 œB\ÉÃ4ÉBxÑÄÖE£ãD0d31T¤` Åw)ÅÕxEò;Å;,”OD“4 aÄdIÃúÊÅ¢ˆÅÈ¡A¤EpÄ „Dÿ¶U–VT—` h4Å"LF›YFL®J|À̬FÚ¸FËÆÂÛFüÆÙ³Ão$IdÆ_qF‹h·¦`9Ça¤Ÿ(D#¬AAÌo¬´*L°>GìCx,ÆG™GC<Šy¤atAìàGUóÇKÇÔF|QȽ¸H=LÇ~ŒÄ¼BV¬H äF"”ÂGäHedGl¤Hr´È‘D¬YTÇSIɉtµÌE–)HF9HqKŠŒÌ†ÜÅÕ8ÆN¼[ \t|«¤L)D 8 ­¸GÇxÁAt¡DÅPSE•¬I–Ist)˜^ÆáÝ-À„•Ý‘«ÚÎt]U…Úåaê¸ô}QÂ%Ù)ÅÙ ê}P˽ÕÕV¼•Ù«¥Ù°å’šÅ•-$™34]±E]ž bODâSâg¤Û@95x4b¢;ã€,ÃP¥ã:¶ã;¾c‡¹ó]–8.K¬X­%”=^`âi`¤¼7”ýW_ÉÈð c^­dîˆ+dpZ\ó´MæäNödøâc@òcW»«`ˆøäTVåùš-òBeñjåUžÚ*Ú¼mÆ»ò€à*¶å^öeóŠeñzåðje P h/+²$›­PFë’»Ò)e]‰Ó±kþålæä`¯a¯Ù2f g  ± ³1SæþBåWvæ0ÿæ1²#Óæy^en/oö; Kg8ƒ®uþ·6äÖdz&è‚6höjgáùaöü¸†®ÞQv舮Eˆ–èŠþÎ…vQ‹Öè@yçöè7¡èiwé‘6i*é“Vé§Áè?]é—†¦”†é™6 S`P`›ŠŽ¦éŠŽƒƒ˜„j’éž&êž…ƒÀé=x€ÐéS€XꢖjˆhêƒHƒSxp°é«nˆ£^—¨žê±~ˆ4ˆ„Sˆ6¨8*ø§n¨néL%ëºnSIˆ8pƒ5Hƒ4à€˜5`8ˆ9 P¨jp§MXp‡x숀‚‡Šˆ ìSX8ˆÇ>…ͶëRÿl)¨¡žk‡e‚É~lR`XÙí†X‚Ç…?`RðìàƒSðl† lÑí’R€0í ˆ¦Ç–m?pmÉžmhˆLXLP„AX‚Ïn'íÙÞìÉæ„â) ƒ901è€Ð˜Þÿ&(€îÇæÙî5Y‰AŘ}›ñ˜GIŸ›Ý'ùWݰա³HBÝ:P1 _³hRCAîéÞ‰=ømY[zÌW̱WÿÖ”îad›R’eÙÒEÓXV8ô >*q½€SØñ¡ˆ&Ú^L¸ï°Í.òƒØïSðBà"ØD8ˆÏ¸ìSØE`‚¿@HZÊD4VP•.?Ù’ýò]ñAÜÕÚA5ïCLh6é–f]«uˆÛrˆ ïývE˜lmøƒ? lØlRnAmøAn@O’çÑI7óŸ1Ws‚ÄÒØbîq zó2¯q8$Ðå{2‚&X‚(ènÚÆ‡hP„Qm'ðlG?xõƒ ‚`Ϧl>î]Ï&È„Ç ›&ÑEZý!Å"RQñ2÷ïí´ GH¹qbß´ŸoädqhC‚˜€"¨!‚ˆ€M„8tŸt?…8,ÀFhzÇ÷R`„ˆ'ò~ìÛ~lHO“•Šóxð£(xV‰€>È„"‚"÷ƒXw@8x·øø,8…,x×øyÏ~Oéù˜wn˜—ùšç ž¶ù‘æ“€;aolserver4-4.5.1/docs/intro/tcl2k/html/img074.gif0000644000175000017500000004067707363640504021220 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbDDDBP_TPSPXP^^^oo_po_kifjjipo`}}}>•>—2 8„ÿ@”@–HšDš HšP›LžQŸRŸ\¥]­\±O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÿÛIWÓN`áVe¿ÿ°–ƒ„{Ⱥ?ëÎèÏòÓôÖ õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøå\úåføçkøé{ƒƒƒŽ•••™—˜™™˜Žš¼ ¦  ¨ ®¨®¿¿ ²²²º»»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼ËãÀ¿ á‰•⊜뱴í¼Áð¼ÄÀÀ¯ÁÁ¿øë„ûìúî›úñ¦üñµÉÌÇÈÌÛ×××ÐØÐÞÙÞÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñàçÐàçßïçßïðÕûòÂûóËüúÕüøÛæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûåþúêóóôôõûôøýù÷þýýóùùù!ùö,XÂ@ÿ‘hIÁƒ=ÙSh¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-{/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nOx@Ì«wk^‡-½Ù4gÑ}U³N=û3ßÕ¯is.­ûòlÆÀƒ L¼¦Xº )·¼}»biæ¡[»þ‹[ºóß¾¡¿–›´vØÙ]‹ÿ­¹:xØÍɧξ½[ÇK##¯ËÓ½ýûøóëÇŸ¦|Éeí'à€h Rýg“dÉÕwàƒF(á„%Ö‚óHá†vè¡pBv€Êe¥]lÝu4v*¦È!‹´Qãr.^4ce(¦t£[;âti¨#sÁ¸âv¹éÝ’„ŨQmzeºe&šwP~'k\æØä—P2ù¥˜]j‰%uIî&eš‚­¦“`z9£’p.ùÛ‘WVÙf›ÑuyÝtf¢gšoDý8b%v(Û‡Œ’d$•rh(†$:é b–ô¨¦^ºçZxµž§#MzS¥]ù™éioÂ)e®z£Ihv½yd ^ù*­˜’™&®cÞY£ª€Ê:ݧyÆÈꉰª§Œl¾*ì˜Ï&[g™VVK+[™ U†‰×c~ã’êa¹æåí| ˆ®YsvÚ"HkN™Ñ»©ÊÛ+Gø¦«Öº Ò—o²ÄÚÊlJ²Ø*¬ SY^w؆Jm±È¢öit6Žj­“ÓvÌæ–.ª:-Ç)îêocÅ=¤Tážìòb¼½,óIÿƒkéÌ8ç¬ó„5£ºóÏ@½_ψÞ,ôÑH'ýoÊñʲÑJG-õÔJ1íŸÓdµÔ3Ðl² ^o¢ÉØ^­IÙ„mvØ_³í¶Úd‹÷ÚrŸ]wÙsçm7Ý|ë7Ü€ÿ-¸Ü>x܆Þ4ˆ7~öâbNv<ãuTgŽÑO'Õµ&”3® '¤M:'¦/nzéo³—Ú§¯Žúè¥Ó>{ì¶Ë®{î¼ãîûì´›]{ð« üðȯ¼ñ o’<ó›@Íò¦p6ÒŸ­ùö('¸rÖPõy”×ËœôÐà%½úé§½ûí›ïþmóçÕ~ý|ÅŸÿùïk?þÿæ  X¯ìm‚{ôŠÕtª¢%…k—# ^è A ZpMœ .x fpƒ a^>øÁ‚°ƒLáK(Áº9–ãæHäp|žùZhæÅ=doD ‘/A,b×´D¼4ñ‡Ilâ_HE*°†X4Ê '¾Ÿ@p¨¢ÇHÆ2šñŒ0tÞ ³ÈF l±]HùbÑHÇ:ÚñŽeŒáÛÈG–¼Q`H_ùðHÈBÞ†Ýè†/™ÈEú¢‘ŒT¤©ÈH:’¬d"5 ÉMF’“ ü¤(3JRŽÒ“¦L%&WYÉL^²•¬|¥,-IKWÖ2–´Dÿ¥.;ÉËRîÒ—½µ­p}«\áÏV²Šµ®cÍ+^÷ÚU»úu®j+]XÀº•°‡Uk1DлZUš¾ø+UéÈbx€£ÞÃûp†s¤ym½D»&Ò’VJ§=‘i%˜Zí¬–€¯…Nl8Û¶V¶®e­nq ÛÝ2‡´Äì¿·YÎ~ijÞL®r—ËÜæ:÷¹f nF°©5ãZ‘D 't·ËÝîz÷»à• 5-+\øŽÖå8?P…ðº÷½ð¯|Ñ(]ŒP·‹é•ÈP}N+Ì÷¿°€ã[ÙËN·£"¢”ó»‘ýjwÀް„'|Ç—ÿ—iç$ƒ3‚\¼P ±ˆG ú^ä¾ÖvùK‡+xø6.dŒ0㺯Æ$αŽã;^ÛÁÎfŠ'²Þô¹Ø‰Th¯‡)cÿ2çÈz€¦ ã¼èáÃNN XR=@Ct8éú¬P¿(G™Æ#ÜòŽ×Ìf:šØ"(òE\D÷]ᤌrúzx Z¥Ð azÒ3Óô w†é[lÒBÓ!ÊIFm‡0Cã‰F䳤Q€h÷Ùz(´MÛLêR“ÑÂά‚A*çŠ8˜9gf£ØC:(QÐN„Æ¢Lô™°€êbžcíD#Ó8r²“­lS;ûÙÿDõUýQ¶ÚÕ‹ôÀƒ—‹lètÚàw!ß\‘8_{"+Þ¶¸×Íîvã¥Ç†K«{mmkûîη¾¡Ýh;ÞÅ™7~å¼^‚voám)w[ÛÞ&á¾ íÃÐðÒR|âï-_¸Éð‹W±ãÇ Â.r‰—üäŸøÈUîqƒ_|å|!7EÌ}zß8Ï¹Ž¥}b k½5ºÐ‡æóU[{èHO:{h®ô¦;½%Çp ††0Â!ÊØÓWB„0D¤$ø‚CR@¤ !gºÚû@\`gÉÖ!Böœ=fOA,Ú³ÒX§d©±V”ï©aydð~œLâ/Ó™'Mb2Ê¢š|c#}r/zµ‹«t¨@%P=Ènö‰ï-pÈH‚sØã?xˆ ²á'¤ ë° „à,lc9üZ;KôE/¥O ½xBž0tØ#­˜À+&`f؃úÈìb¸ÁÛ¯ƒæ ‘¹ ÿüè×¢æ¿å³ô»ÿýB1?üçO’È¿þøÏ?Àÿãòs ëÿÿØsÔÆ~ †#R+Y‚Ó¡Á,çÑ|2(Â-XR%С€ ˆ&3%}¢1È€c¸‚è)÷ç(ò+X£‚¸‚1‡0Ââ‚ãÁãñw h2È1X‚¤r‚@8„ô'„Dx„ég„H¸„j§„Lø„Iç„P8…5'…C±)Ê2‚“)Í2ƒz(¼r& 1`-_ˆ1Ä’…ͱ ÈHâ+Z1!è$(†Ñ²_È$Y¢&H$Ø2( h|‚$}˜‡^ˆuHÇ¢~È.þg"Ãb,ƒÆ²‚C-ËÂx×r-™È‚s'^ˆ‰²‚‡ Sÿ‰ó1W&”ø†‹h‰‚׉¾B0£ØwªÈ…“‹³/„lj’è0¬Šš¨-]èVH…Ƙbŧhˆlˆ)·RƒÙb1È-Í81‰2†(†ƒØ‹Â˜ˆ˜ÛÒ"(“71­XŠ X-8‰€ÈȆ˲…Õˆ†tŽ(ˆg‘Œ¢Â‡¢Øþ˜Šñ,}lj籌\xùÀ¸í¨ƒ³ÒxØø¹*„ˆ‰±ж¸0~7†ï‰²Èx#C‘ÖÈŠvR‘"¹*æH|ê²~Ž(dÇø’UÈ’ã’U±Œ÷8Žé¨‡%C‚¸†$I¾((HŽý2‘ùŠ>xÎ"”縔В[‰÷ˆˆ¿2•¨túøy’«˜’ÃH‘å˜x­‚€”É‹=X”)fˆæh–ø‘j'üˆ‘i¹‰Íò•V)“6“~9tWù—‚™@9˜†™9…y˜Š©4ÿ‰)‚Ô—C>‘ ™›@>”i™“™™•)™›y™œ‰™©™ 9šŸYšžyš‘6œ¹™ªI™¬™š°ùš²¹š´éšµÙš¸›´É8´˜.Ó˜!ñE`ó5}³7®I7_3œÉ9œ`6ʼn7{ã7w3ÏIÒé8’c7‰ƒ‡£Ü©8¢ã5Öó:à9‡6”c9•雿ɗíg–™r:bÐ`™ìy2À r4ŸÎ¦G÷é/ùù‚ÔB%„kÔA$”fÐa "´B(t )$h¸&¡j ¿ÆB úk*`WôŸæ 1 ôD=Ôm%jlR¢DƆlC”DBDK„i-úCÅV£ÿ( aê¡&èžhÛ”S0IVTP¤U@¤5¦d|Ñ^JŠGʤФ'¢¤P*¥y¥Nš¥Qz¥õ‚¥[ÊVú¥æŸ:º£8“ôæ"J@͆žoú¦R¢lmÚBrê¦uª¶lÍ–§–£eÚ( Ú\Ó5sD@Ćf&e·qf‰z"ÄkTÆꨊª“je°v©1—mâM ZMÍtLÊTªÎdª¤zªÀ´ª¡úK­:L®JL©:«£Z«Ïd«¨*ªº«¼ «¾Êª·z«¨t«µHû§2ýG“@±ŸSuä¬4åS2µR?uS=US@5­.…àô©úÄÿü…Nð4OõäNã Pý”QäºOåOäZ®ç:®ðº®ï:Qöz¯øš¯úº¯üÚ¯ŽTQéÄNätQ•Q2W!<ÊjF1>ÒS¨ ‹>Ðà° ±[±{±èc±‹±»±Û± ;±+²!ë°éÖrG[r7@µe>òyr¿µ²&Ç[3Û²)ëp8˲.K³2«²;[³‡ä ä•jÕ¬iJpÙ†oüÙ´N `[~ {tIwsO{µXû]<gSËyUÛ Ù¦Y;¶dkH[[n] tH‡\8V¶nû¶ôµQFk^H;pCv²p›·z[Fð6·V·NWph¶·„[¸Ñ&·Óv´‹Fçµk ¶üå§ÉÕ¶†;¹$v¶3—¶8tf+TBX&¶Ì&Ag6c&AYk@õ¢f”Ûº.d¹{¦}Ùtž…_–l% ?’&S%uí 6u»zp¤·h6iÒch¡&iöA‹êaDJc(`o f-vRU`T0e0j DASÀº®;¾µÿ1¨ „·vp»R¶§Ë6ez°¾ˆÆkzº¦gœëepŠh†aÆiF„kj£7ª>4eë˨ÎJ¾ @}›¸t»¸j«¹K;F1ZÀDTl%ê¢Þ&¾/Ä¿y¹ <Â%†¸¨¸›7ÁB'¸ß5E$üÂZkÂ\+»ïÙ¸ÙÃ8œµ°+µ4Ü£k›mê´0q-»C3³¸r(û³@˳%‡ÄGœ³K¬³"Çq/'FJŒrB+Ä5»rP¬Ä —ź5R e¾.¹Êzm'û²£å³SÜÆAËÄ0ëÆHÌÆr|Çg³M¼ÇNLÅ|¼ÅsÇo |Ϫ¨Š|4è»ÈŽÌ3hþœ´<ÉéÒÈ”|ÉZ‘õà†ð 3`ƒð’p¬M#Á‰ü=wÛx‡wwŸ§Pð,Ÿigyz¼\ Á¢'z˜\Ì%Q ° @g!pq-zf'zçÍa ª° Õ ¢ - Á )0 Õl6`vC ÌöÃL¨àËeGÌ8¢x É–u™'´¸‹‘²ù¬x‰Ïy!ñA0¨‘$ÁÐ*™3øƒUQŒ-`6ÀÆœÑbÉÝÑ>ÉvëÑ"½Ñ =Ò&-)%}Ò*!½Ò.Ý=(L€ ûÒ4-]Ó8mCÿ)•¨™Ñ)h=ÓœÕÒIùÐû8—×±“Hý–D=dƒhƒ‡¡…¨ƒ@˜ƒø(ƒ<¸Šh1^íÔcm]ÕhùÔ(Õ7Rq”r˜•g™Õßh‡p/(8˜×#ȃh­Ôá8Ôj](;=|Z}Ø{Юø×øƒR­Õy튋-×_ÍØe]‹~]_½xƒ]5=<ÓÚkqÓ¢]Ú4SئÚ0}È2MµªýÚ ôÙ® Û´­Ó²Í¸µÛ+yÛ*¬Û¾ý¤ýÛÂíÁ=ÜÂ]ÜÆíÛÈÍ/M]$•øi­ì¸1Ñ ÝÍ]ÝóÂ)ûÝ›ƒÚC"Ñ(–”¸–Ò$—ñÓ^‰’)2 í–x=Þe©“ÎHÕ€ÙóýŠà‘†È‚Þ[YÞêý[(å¨ÙFé‘ð=ƒühßÖ¨•ñçÝ(¡”iyßr —~‚.a‚…\‹{h/OB’þ}’®žánÞº¨0v)ßü,'L —M22úÍ“!ÃÞ—HÝàŽ!ËíÜk™†m(Œ]¸)QI‡˜€ñß½qŠh¢ˆ)î”zräyé&Mþ”%^×"ø‹S)(dÖ"îØÍáúÝŽ‰îèÙ1Ý’’| Üí›In˜ÿ;žÜ´çŒñ.åòæôÒÜV‘Öm^ãÓ•®ç8Cççý“°ÈßvÉ% ¹âs©áãÂß n‹ñÖ‘Íàñré&Îâ¹r—ÎûýÜXÞ–þ勲ø•ŒžÞ]Aèãâ±Ò+¨nã@.ŠZ.á|~‡-RåwÙè™ãûbßÓ]’®–³>’†îënమ⹰>쀾Ú‹ÊiL¼ÎäRŽ\®—ÌØ“bî†6N2ä7©ùííP¾-gRèsÈëíÎêäøx.ÞÇÒ‘VîŽÓ 'îáRéM‰“­îàÀÑçrO˜ð ÿ®. Ïã(XìÚ=ñº( øñÿõ÷ðÅ.×>®—[Ý቎méì9æ›.è—(í&¯ÏßZ™âI>)¿éò®ñTÃñäë&þáNâΑ^ÍòYH(¤¨‘ynôH•d=Œ!þârHò?âQïó%ÿt:¿Ô<Ÿ‘C1Óå[®ˆXä¢nëq]â`_ñH¹Þç¾Ð¾ØõL÷íÞÖÑXŠ)•…˜ ßðÞö°õ|OÔ€ø8=ø„OÓ†ø.øŠ¯ÒŒßø&ýø/Ò_¨a#=—ß5^ƒù`ù›¯ùÑú˜ÿù™_ú¤ú¡oú©ú£¿ú®?úèóùšû¡?û°û¶Ÿû²¿ûµÏû´_ŸÛûÂÿû{4ù ÿÎÛ©ãƒ=¾ûͯûÃïüÑý¿/ýÕOý·¯ú­¿ý¢ßýÚïý¬ÿ9¯þ´?þ⠨Ưã{ÿË/:¿s;ª“;â9ÿÉIÿðþ»ƒÿ½S;úßÿÁ‰“&M HР„.tÈðaCˆvØdq¢¦MÏ Q¤€#hÐ8ÚC™RåJ–-]¾„SæLš5mÞÄ™SçNž=}ö´e/èP¡E‡"AšÔ’¥M™z²õçNh›4u ©ÀV®\9u0‰pà&dËž-kÖªÀ„l¶]èVì[ºsíÊÅ r£D¾ýjì«#D®7•Ô«udÉ“S?†YòdÊ•-ß$ÿšÙ¨Ð¤J™~n Uêå—7‘=m•à郬9¤n­š£lÖ«iߎ۶îÙ¼k÷ÞölÕÃ×>^ùråÅÁÚn¾¬ÕäÒ<;Ýôvîݽ^óxÎAŸš>VQu>;X}€YeòQJwåµWÊ,=JP,ƒ4´ªMÅ5Ye—]RW_Ÿ…6Z›€-¯³LŸ*tK«ˆô¯ o·ú€o«—\qÏ—>sÏ%w]®Úu×\yߥ>x»r×^zóe¶?Æf”6`¦6Pk‡Í<.»ÅwÞ†ëE7¾p7_Š×ØápëÅX>oÛM·ßÿ¸d“{-Sôˆ ïPÿ®èf™íƒ™«š¯¨ÙfÿpžoæœsÖ™gù|ÖYd$=9i¥óLYØLYÓ—ã›™ê¯zèýxúç«·ÊÚæª»"l£ÎÒ¥×fÛÆ¦~:áï\>»n»ñÅöÎ{oúæ[ïÀýüoÁ \ð¼|ñÄ7œqÉ!wlcóˆÇ;îÑ|c å(È8²Žî³!§¸•îPì ¹¡>XG$òæf,dŸe(?Ùħ”¥$å(=‰JUn•¤„¥'çsJ®°Ò”µ”¥|^iË­ˆÂI €Àÿõ˜ÇDf2•¹Lf6әτf4¥9MjF.€å+&±9<š)×ÒÔ€¤v¶V6?~¢9Õ¹Nv¶ÓíìÆöfÉ"ÿ n+KbwLãÜpà€ùKbº—F L^à’_qyxh}"JŸ‡Nt>•OEûƒÑøh”?ÍèE7*ÒŽ4¤%EiGMº’Oxô¬&C“϶Eª|çKç;uºSžöÔ§üb%»YÏK9 Ÿš¬©¤žˆÓŸ6Õ©O…ª9'9Ä¡^Ò¨HDjRûÔШvÕ«_+’¶ ÓzÊ[YÕêž|ù°¶Õ­o…k_ZU¢ÌxGM뮸W¾öÕ¯ï+]czÕLæ•R7Õ¿þºXÆ6vQA%«‚ÌNÃFj©z›‚c5»YÎiªB‰7±tÖÊJ ±@´BgU»ZÖÎÿ²‚-+agŠÖÒBi­ Bku»[Î6´u­Ö]±ZÛ­Ž·ÇEî_}+Ñ‚jÄ•Òi·’ÚäV׺]}ío­zÏáBWO—M§b¯;^ò²ó³‘ÔdŸëÝ'Iwºå…o|Í™]æ×®ßDmÙ[£µ M¼Œ²Bj3+__w¹1in~÷;¥†ê!lÓMmner5ï¿õÁ÷¨[`cw®Ú­«ziº`IWqª‚˜$¼áúÔL{ÑÛÞŠÀ§ŸQR¡”WÐCIRt½*äV²:é‹`ûŠX¿$6xG 3U¹ò”( $| “fãÃ-¦@Ýæ] ÐÈqŽQÐ<*¤)?c¬¦Ã'¯ JÜÒÁ\z˜UŽÉ+ä6Mµ ržqu^ØJV¶¤Er{¡DQ¢€³å¬>5J5RÌ(r…¬=5›ë !òä— áhœ}‰ ÕkÞ©Ò0« AǶâ àœ&“yÎdòК½ÊV¶ºfªš¯¦j:(Ϧ¼14.Íd;@£Û«”u¸gýáúÿnW¸…Å5ŽöʽƒífW6š>%&V‰©fv 4â¦üØ;ßànÕ¨€-Ÿ6éXÜ·Ók]ä?S6Ýü4|fì¦XûUŸ2Qœh+‚;QFxÈ_Dë—Ø¯·x—¤èkoåâ_U“E>óòăå.ºQ^∯3U-§yÐÙIr—˜¼»;GÐm“ r¡7]> /9Ãs>[¤—ظNÇ:‡¡^t©Ÿ›êU?Ò³>vøn½%F×9Ø ¤r²·}¼6/wˆ¾^µǽGšP§8zRŠB4IEÒûº4x¿Ã+„‡ÏÞ¿x®¾ð/zà·’wÿD¾ñ—Ÿ|æGêøÀ;ÞÿE”×|Wˆ~ö®ã÷Öu'Ðm[šÅc^¥)ÕÏêñÓúÐ3ž¥$å»ícûÝþ+´|ï_{߻ޥyCï‚æ>bÔ“†«²¿ð¡oéóžõ+ÕýõsŸ}ãkøÂÿï±ï}îGüÝçŠÙY‚ö¯7?<Ã<æ¨9ú×ßþ÷Çþõ¿ÿúÃÿ˜É7¢å;2÷#À4@)a?@;ÀdÀ¼‘t8”À ¤@Ò€@º«À ÔÀ ČҭäÀA°‡”H†”‡œ¸@æÁtA┈A{œXÁ|ÁôÁ¶i@„?H?ô@çbA•H(3P•P…'L`‰/8-`‰°,´˜B{X,ÃDÃ4¼Œ €3X€OPÿBs3½“s‰'T+<Ã¥€›èCüÃI D5 K‰X €à\Bƒ (hP]xBÈÙ =LiÈ“?D{Å®P‰Q$ÅAìCUTÅ ÄQ„ÅTL T\E” ERt‰XÅS|E–¨ÅSôÅY´EaœÀ]ÄEˈ‡p†Iˆ‡ØÁ˜¸BØÃ”h‚+„Â,`‰XДàØðT0T°‡‚”HmðB{P'@…wüB" Œ[\ cÆcŒEadE`ܯ^äG}üÇcHbDÅ{¼G{ä ‚È€ÈV,Æ–(Hœ¸†'H‚'H ˜P Xÿ‰ P bp{€"£ÃÄÀ;,+TBdÉ–4%˜€``‚ € 0V˜t˜W˜€Ÿ´°‡7p`†‘lƒtƒ` ½’dBtɨ”Ê¥ñ&pB‰“œÊ¬ÔÊ’¡–†»Ê&ÜʰKJéÊ©cН„ʱT˵Œ’²ôº³A¶”˹lKàòʸ¤Ë¼ÔËqË:ü´ÜËÀÌJ±K³L ¬ÌÄTL*)Ì·1[UÿÄV5%Ô^¥Z ÅÏšXÓÁmQu[ÀeQÃUW@-Ь[NÈmQ¾UÐeµ\¿Ó5=TÌU\Â[¾}ÏËÜÐÝõÛÒÒESÃÕÜ2ýÏÉõŽ»õCØ ÑÌeÛÏ=ÚÏ\·]]½EÖ¥‰ÝÿÖT Ò¶ÕÚ¿ÝÇáÛ(u\%õÚ£e^Ü}VÞ… áU^½E^é­ÞÀ…Öߕ޴Ý^Á½Ýã}Þé¥^òÕ^ôµÀ¦•Ðw]k ß©u^Ðå^ç]Zæ­õ­\mÞÄmÝÃMÞùÕÝå[ÜíÛ•\ìÝ_ÚÕÎ%`ìÅÚ/õÜî-ÞãEÜöl`vÜÜýVÚýÖô­[ `_ußM%ÛþÞñÕZð5Uã•E._N^¯½ßÎ^Ö^`Žá.` .`–a~àâÞUïµàˆ$^ßRõÔ®¥á ŽÝæÒ§}Ûß×\VâÅUQ•\Å]`Ðí` Þà 6PÊKåâÑí_×ERÛ…]æü_ú c5æ_$&NµÏ6Îã†_3^à'FT9öà2¦ßð]¥IÕ‹…áx]ä“ib‹}dxäÅd(¹äLæd·ÿ±â=¥Wà aAÕâ¹=ÀQ–[T~_)†ØOÎT”³Þ½ ÞRZV®‘QVe–žÇ\~¸M¾ZVNÚJæQ[Nc>ߪÕ^ž _þeW¶UÙá9&ãü8ã­ãíb¾æYÞæC6ãic2FÝü%Õ4­f NßnFânF`3UárÆc?ÞßAþàlöcÓýÓÒEæîæÊ˜æ7hôucFãø^^6Zü¥â ÆánèNæ%î]ý-h6b…ÞŠ6â¾hýb%ŽÞnÛù=h‡ödìtÌh€Ææ¾ã8V`f&_Û%b;¶Z†®ãz¦hˆÞéX^g’–çxVÓø}ãyÿ–i8®_Zi:¦b‘b“ææëcgžŒîe‰jë%fá=éšVáîg°Ö_Rîi²_ê­dîè¬%æ%¶á#iš&ë·ê¶æángªîá)Áê^îOq†ç¡&Ý?f]k¶g>ìíýæCvàÀ^UpFìs†çÇgbMd^5Ñ(†ì NìAÞè4žê‡~Ü Vl~ëõUi˼âŽ«Ž”Ô®NØXhÆâ]–mJ¡m×Üm üëNîõøíà&n¶m׿“Þ–[ŒVæ¬^›ÎmÑîæŒn¼n(®î‰®Ýü]èìni[®[åžÊéÎñ®]Sfnµ­å¾¦[ðönÍ$ï[êí_%ÜwÖÕ}Žã=žáÑÎÝúæ\p6áò}drî`Æ†ìÆæçnçÊîlAÖ\ónÀøFï½b·.^©¥é‘.kºöaöÆëë¾ðOåp£–ëxÖëGé –êçeæ/fK _ï—–häÝl_l]>k›Þ[¨Vç‰p>]äÏ.q 'èÐVq&à nñ;UKoî —ò–e'&j´¦r _ïMè .f/d%Çñ¯nk§à#Næ¿iõ…ð„òªmðFpm6ð_pU½óÄEèÃ¶ì ·n!sDÞÜ!÷ïÏìÅêÏžg;Ön—ü|óâžeH»)ÍP–ô°òK¿N¢ªô|ÕôO¿ŒGõQ@¢ètRGõõTgõã\íØDîV—uH|õä´ôYÇuʬu“õ\÷õ¨Ûuœíõ_'v•XõbõcGvMWöe—ôfwöâ†öhîi§öN¶ökÏälG hðûö’wo/ °÷s×1r÷tG÷uwwqg÷xwu‡÷yo÷zÇwz×÷{ßwyÏw~÷ðw7 mîã¾uÇØ§àŽÞà€†ÿˆÇ †—x~²xŠŸxˆ‎Žçø¯gùÓ‹’Gµ1ø*v§öž·S'’Yùïÿàv{h´ÈxÖÀ‰OŸúáÐø‹zŒ'úŠùGy¥ù¤—Ž“oz“§Ž¨' ìpš·y„÷tLjù°P(…x޹H zÖøú»ˆ‹´_¨º8û¶?¨·'(„‚{‰ ¸øƒ ² y¬çŽ›ïzM¨‚{·8 ®(üÃ? ´_{Åg{µoüÅÏ‹¸Ÿû‚¢|¹¿ŠŒHˆÂ0 Ĉû¼' <áûÑzq2–´°Mx Ÿ7|²7‹²8ú‡ý׿ø¥'yªgúÛzÛ芔ê( ¬°z•}ËðûmÉ Æ|¯7ˆ²ú´@~·‡|Ç~é·|ƒ’üë·~ºÇüëïˆèüÅÿýá'þÑ/–ÃGúÞèùØ7úõ/úö?ÿ÷ŸxÚwúù—ãû’ŸŽ‘˜÷¸Žì{,hð „ 2lèð!Ĉ'R¬hñ"FŒ¶ìmìÈñãF$"EÚCRò¤Ižì­ÌHÚ&MpÚ´©N›8;èÌyÓçΞ< JT(Ò£J2ê´¨S›?¥úœÚ“êP«Z«rÍš“gW¬6¡…½º 4hš6¹lëö-ܸrçÒ­;Ñ#^%Gšì‹ràÊ–vB{&s&€ÄŠ3nìø1äÈ’'S®lù2æÌ—Óìù3èТG“ÎkzïÈ¿~U²$-ðÌM4CË\ûvmÈÿ¹ßnŒûqïÅ»y£.-òÄÆ53oÞøÙ&N\S¯ný:öϧóòõëpk×0Óöœqï厇çV¯;-qå›áwnÿ¾oµl³óïïÿ?€m§WwªÄš`£Á¦Syèw\p’©ç|Ë¥_~Ê¡{øy8tÒ8"‰%šøÖ€ø]J­%(Úx8}8#5Úx£„ú¸#=úHPŠ­h ‚Ôňfth¦$t8験‹1Ù䔉19%–WVéd•M>%—Œu‰#i­õ#šiª‰]!ñe`‹Q· lK6¦$žbz‰g”P*–gžRÞ)(”}Zé§—_’‰cˆéÓ­ù(¤‘ÎÕ&j$±Þ‹¡i§žcþ¹§d]zg WFæ)•‰𥡋Îhæ~’Ê:+­Q:äwEºF'’®úú+°‹6Z+±Å+ ^§áú—®¤m,´ÑJÛ¬ÇZ{í£·¾yi³£=‹™á&&.âÚ1î¹åª›.dìžûncﲫn¼õ.&/céÎ;m™:bû/À'j›·.ÎÛl膻0Ãóî»n¾æB™»×[q¾Ž=l1½óëá°‹<ñêÍ;ò¼ûÎ,ð ÆÖuñÑK"îÉ[¯ûò«5£ð™]ñ}bàþá—?>úçC¦¾då‹ÏØùî+Æ~øãÓ?úÓÏwæõýóý¶:%Ì~ß; Ùw?ù-æ€ù»üêÿ7:†‚ëC_cäAý=Fsþû`Ѹ´L†€^7R¨Â²p…h! c(ÃÒ°†6¼!s¨Ãò°‡>ü!ƒ(Ä!ÆÐ<ô…­’¥Äei/tÞêÞ ñ–Âbt¢ŠÅ ¢±Ø‰+vÂ[Ô"³XÅ/f‹W4cÏXÆ5~nd£ÛÇ4ÒqŒa$£óˆÇ=Þ±`ü£©G:¾QކŒ#" 9ÇB&’‘u¤ ùI?²’´¤$9GohòHb˜@'Šæ& ÊŒP™Jèa•qe*a¹˜XÂr•¶TŒ,CK\Þ—Ýð…/<Åa³˜ÆÄ\ Jÿ%ªh[ cš· Ã2̸—¬tL/'#ËX^S2½Ìf7µ™˜j€Ý(†/à JŠÑë#0ã)ÏyÒ³žö¼'>óyOEr’þÄ$;3yÉ ´‘4h?©Ðƒ>R  (DÿIPvCÝ`¨7|‘Ð,–sŸô3 äÌß‘r€££fc¸™ÒqVf›ÖÔ¥J¿‰ÍWÆ”¥‹ùe0€Ó|¾PŸõT§> TŸ¦s¨öLŒ<O¥µ©N}*T£*Õ©RµªV½ª=ÝIÔdÞS¨\]æ€D9ƒ٤€ÇœN…ùËȳ§øT§PÓ)W`Â5®q•«]éšÔ¹"Õ¨~…«^™ŠÕÁÿ¶°†=,bKO­.©ôäêQéúU†r¤Ì+)h¾u œUŒg?ëYÆ|v1¥-P ÚÆ”vµ‰íåZ Étñvä+nñªWܰºeªcýؽµ¸àg"*ч.7¢Êµ$B£‹Üé.t£ÖuîD›«Ýç´¢ýâbÒèŒnô¸jõ(XC*V­ iíkS+_ÓÊ—³ð/}Yë˜ûŠV¿ñ…¯jã‹ß´êÔ§Ø)U«Ø3¸Á~0„ÌX}Bö§’Åiz•eÙ&B“{äÉ ñ«_Ѷ6Ä®½ïkí+`×w¿óíob̉Nu:רţt«›c†êxºÿÜeîo,dAîøºÔå1’ûäífwÉNÞ¢E:^Îö1Å&7ÐKÙº‰`Ï$ágLø4KÀñôšÛšæ`®ÍZu³šßÌØ5³ùÌs¾³ó¬f=×yÏ~î3 Û,h9:Άfs¡}h8+ºÑŒ~4žÿLçIG:Е¦4Ÿ1ígH'šÓ‹ô§; jG :˜–Ös74ÝgbxËaÝð(;lÒ²žõcÉD3 —]K†×‘ᵯ!ìÇ;3ÃvL±1“ldÛØÍV¶³™ íi7æØÕŽöµ³Â /ÖcU™&8!nM„{Üåæ¹¥“µØ„ÜRqw»Ù½îwËÞóŽA7½óï}ß»ßö†7¹Ùðx³;¶Â\¶e¬Í„WFá‹a8e®ˆO†â»~öe,þkl/œã ÇxÂ=>ñÇüòÊÜÿ掷ÙÛ4œp -w9Ìaþò–?ƒå1oùÌo®óœóÜæ=—¹Ïƒô¡ã\è/·ùNŽó´~ × ÿ8µ;u¨g;ã"¿øÔGþt­[]Ú]ÿºÔÁNõ°‡<ëXoÌd"B•ƒÐ:2Îi­ã.÷¹ÓÝ2Y6¹«Õ›ònµ:ifÝ/øÁŸ5í Y;ßûNš¿¾ñŽ< [­v. iïT¼h ùÍs¾ó¿*ùG'_Y/“TÖ˜ Ó=¯úÕ³Þ9†gâ/úϼð­¿=îs¿˜»‡þð”ïòÉJæÙ†ñº?>ò=ÿú…ijÄ/þ9ážüéS_ð ?¹HIYÓ?ß.š¯>ÃøÃ_x-‹žòëM|÷½ßÖ¦‹¿ýî×ßòÒ|î§.µ§Ýûó¯ÿhñûÍÔ>‡ _ýÅÅßMÁþ FKü%Äü ྅Á`N ÞÈõå†`¬9à¶EZA† ÚÇ–ß«ià·u`]¤Œ  ¾`e, B4  ÚEíM æ *Fÿa`·¡ ÛÕ ª´à! Ê`ïü^¥(M !FŸ0 V¡– ï^ðmBaE|Ÿ†!b!ìÿ1áùÉžbDê‰!"  ¦!\Ü`Öaþõ  ꢟ^„ñ¡"õ½aAÄaz & "#2ŸZžó"E€á"6"&²Þ#Ê_$î!R¢D¬af")®!I'na‚¢KÔÞùàŸ«b)Îâ¢àašŸ$Ò+BÄßm´À"-# JÞ-ž *nà.ªa"ž,‹£0Fãel"¦¢òa2>„ÁÑÁàì„7~#8Ž#9–£9Ž#|£t€8ž£;vÀ:’;¾#=Ö£=Þ#>æ£>î#?ö£?þ#@ä?Þåac fãD0¨O—ÿ|M:^Ps M*]¢e܆+A#¢Hcžâ@¢BJÄ ®XA•´`Xdùbd9Y†gQ4TA:árTA*5#GV¡-–¡^ã'†¤B0^C* 0IØåÙTK½ä(ŽèAØÔ†SR†gAƒpÖ´ÒLêRTRA̤Fîä£Oâ¢'N¢P¥Ö†ú\Á¼˜$ÝXN>å8µRå´]¶ g @N®Ôcø¥Ð \Ah%†LÎÒ¹¤’Ú  Y† 5Π5f 6®eBjÁe¹ìFh©V ^ÁL‚ V²RD"&àפhêÁhf%—àå,©ŽæbÒÒa¶ ÿêx–Ô†“Ðd(IU>fFæþ$e¥eÓyVV†Øaòf¸@ƒg•¦_Zg*AƒÐ%Má÷!hž L§s"N^“+¥aêœOžd¥'o¦tz‰ª$qN G" rŽ..§AÐag†VZø¥ÀgŠág+ufvŽÖ*i']^ 4h§’Ô†~Dåùèå¹L'¼ä‹v.¨g9Iù؆¦V+K‡ôçþõ$$è—¨6ªÙÔ†ÒA*)Io^€¤Š¦^Ú×÷¨’(wæøìf|O¸`ḛ̀‹kº“ (V¦ŒŽà2!ðs¥Zâ(Ah^o.è8­¨ùÀ'4¼¦˜¤©„Ït²gV&Ç“œOZ”w^§vj¥‹>ÌÆàÏŠ.hoâç—^!ù£"äšéA€a8PüÀ%ƒn¥ªüI“¢túhn8¦˜¸%X§—ö Δh|0IºŒf¢B梞ÿ¥1’é€Bª=ˆâKáO“°O§¾LŸd(|Žê–PF{„‹’ǘjµª†)HÒêAÐá­n¤¾ÀK§¢ \顿 ² ¹°¦Æ\F¥¾²& r¢ Ÿ³%ÞÇΈ‹qÈË´në ‰¸Žëþ1ëd hš©¤zªÚK‰îÌÍÔKÚkþ'æë¦+BØ*~ü+Å jÌüŒÁr$¾ž+2lîßðxLÅZ¬YÖ(Z:je:+´â Ä~¬4–k5bì*j,s®«íÊ‚¬2ù Ê¥å¬Bj¿Ö¬Ïº ¢¢+Ì„Ãþ,ÒZ`ÈšëÈÊê¾âèÑ&­Ô~ÈÅ6mr–)­žÿìÔn-~°¬dº,2í™Ê,×–­ë-mËZ­¾Ší™zCFÙžÙÆmft7¸­ÿUžÎ>-F­ÜömdTm¬^íÎò+Ç6G¯ÌâVÝÕœÄyã*.µ!’$®}P®ÓAOãžÖ%®å.×I.×uè^®Öe.éææž.s .èBà6ªÓ²í@hmÙ=\èjní ›ÓáGפ®Èõîî:GçïíŽñrî} ïèoÙMîçâîDZnê/´Y.ôxíqªíÂÊ®ñù­÷JÆëdìÊn­&¢Æé®Ù1oÄ-næ¶ïÖUÜûB¯üöZün\úºïý.®ýB®b-*‚mBŠmê&oý¢/ÿÂoþ¦ïþ’ñ¯«/0ý&°Ø­¯ã6p3pÿ¢í×ÿj/Ñr/Çð[°/0CðWðüšð£0þ–°ç®í*p ϰ §°'Føþ É*'¤¾0A–ïÔÇSW©P'1ã”#±7ñG1O±Cñ1o±wq1{qƒññ?1K1¯qW1«q_qÏ1“q›1‹ñÇñ»1$£Š¯àêírþ¨É™!‡š¤]#gZ#/²#G2©²"Or%{š%“š$Ÿ$w2'²ª&²(—2%g2¤mòš¥Ð#÷ÙÝŽé “¯,Ïrš4+-ß2.ÿ‡-ç2/÷²kì²/³0×0³1ÿsF32/33ãlöõ0Ö6³4OóGmÆR36g³Ðð£j³7ã(< D8 D8ß…5¿ì7§sºB‚@(CE(³:Ç3%Šƒ@€ƒ=„‚hÀ; Ä#H<Ë3@«à> ØC#Ð@$€;ØC Ä8$o@O4%2ØÃ13@.¨Á7ØÃ#(‚?ŸsØÒ…D ¸8iÛ5¢Ïʉa“úD[{\D<­NÀ)PÃ$Áð»@´Â´‚ ì;ÉOÀÀ=Ä1 <Ê÷{|P'¼C€BR§µ6À6ÎSÍ”C¿ÿÿ¥ßj¸hà¢4àm¬%èàƒb´ ìEhá…ÉNH†vøŸ†âUèáˆ$v¢Tý•¨âŠÉHVŠ& ãC3PcC2@ãŒ9êhc=îdŽ)‘‘8‰$‹L¾çba"¢dDSB´d’>:„ä•?f9—X IåM–IÞ“6¦Jkšéæ™Á†ŠQ¾i犡٠ž|ö™˜žÚù)è l #¡ˆ&z•¡u*êè£C1 餔%i¥˜fºÒ¥švêiHœ~*ꨅJꩨ6djª¬~ºj«°búj¬´>:k­¸lzk®¼ò¹k¯Àºùk°Ä²8l±ÈŽxl²Ì^¸l³Ð:øl´Ô8mµØÞwm¶Üº·m·à‰ڜ/6î¹ç}‹îºÑ©Ëî»Æ¹ ZÉKョًᄈŠYxtò+°rúl0c¬ða /ì°^t ?,q[Ol1Z_¬ñVoì±U,²Rþvp¹#§_É©©¢Ê0ãrÌ4oÊrmó½\óÎgÍÌóÏ"ù ôÐ MôÑÞÜ\Î#ítQF?-õCQO=uÕV?uÖHoÍ5Ñ^ ´Ï\i%™G­Ù¦Øˆmm$™5^¹¶’Z¢Ý¥EjÃm÷Úl«XuÞ^Ö8–Dn©¤Ý¾·â}ãvã4?9Ì’Ožrå–‹Œyæoιƞnqè¢KLz韎ºÂª¯npë® {ìûÎNû½¶ß>oË{ïëþü¹KÂnñÆs‹|òØ.Ï<µÎ?môÒ3K}õÈ^=±Úol÷Þó ~ø¸ŽO>­æŸkúê³Ê~û¨¾?©òÏ/jýö{ŠþšîÏ¿¬iJ#”þ÷3ÿpR< ­x²*0r tYÓH¹2 e¬à¸˜¦ ^΂ûÙG–À ª„&ì Sè8hO,ÜØ cø¦ÒÐL6¼a“r¨Cc¹Aê!ë~H!!NŒ‡F$“è‚¡%2‘CN|¢³ˆ(B),ŠV„³(-*ꌋüÚ"3äÅ ŽweÄàѸA ªq»K£áÇ6^pŽtô;˜Gv‰±öù# á#ÈAzk04d¸f–·/!n(€Sänȶ¸JV%’’”Ж7/qÒl1\àøv·#ém”Ì$Ã…D)urGaÓ˜n$ÊYâ푟)U™—¨UIH–<*³$·TÊò˜±/“À]’Ä™ËôK3yhFsev ᯭBr“:Þü¦tÂ)N‚±òPåß9Í•ÎZ‘³ñZ'<“õÎyò¦žö¬—<ó,|ò6þüg¾ö)Ð\´ ¤9(Bû\•Ͷr¡ñ#(D×'щº¯¢hCˆÎŒvJ¡­ HCŠ0Œ’ÔU&=éGSªÒL´¥«Ühaz?–Ò6½éeZE§Ûôi¥^*T™å´¨º:*RO¨Ô¥ªX°©Nm!PÍUEµªù*V…¥Õ­–éª^í XÃʱ®’uEc=«W̪V%²µ­M|+\¡(×¹Nqªo´k ëªW-òµ¯]Ä+ûÕ¿–Œ‚åãa™”ÖŠХ±Ž]Ža#ëÈR¶'–½,K2«Y•è‡A yhg-D:D´£õ+gLÚŽ¦6A¥uãAZËÎ×"¶d¬M¤mïŠ[Ù„¶»íPlïø[ÝWµ½%îi]{ÜÝ,·¨m.€†«Í¨Wº¢î ¯‹Ýi´Æí®¾»îŠAä%ŒyÏ;Þçúv¹µeï!ˆWûÞõÊ×¹ôU®}ôÒe¿ü ¤{õÞ×Ç¿Ö-°4àêæÀ žor<[G8] Þ®…/\?xÃöއ+ÝsgÄÅ-±‰«ƒbø®˜¯Š_<ΗÄ4žN‹!œcÛX½8î±9óKá3WÈÈÙq‘üÿwÉLö’gåÞsLùÈU¾§“Lå,ë“Èî²—csåøŽY“[þ°˜Ïøo No…'%áǘÀ#Þ³‰S<à ÷öÅ‘ñÛ[Þ‰n¸Çkñ‘¯5ã+(‘iL ¹ã!)›ÌW—÷æ )f)•KQΜp±ùÛ¬i[œç\oIBæáp$Lbæò"B:þÃñ|çX%-ƒ™8\žÒ–÷¥zÕ_Y·dš˜¿ü¹ÖiŽuµË–Wì)Ü0³>sOn]—ÔŒ:ÞÙ.]¸Ç}å„Û;دîvG²]ê,¯ß;òKÁqÝñºäoyÊa:šÇ]<ã½NsÀù¨–zè•9zöj>-D?:ß§^ò¼¤~ì«{ëMŽðÙÓþá¶¿=ÉP®{³œ¾÷?ù=ð1›ûᓜ÷ÆÏŠð“ïÙâ3ß'Ëþiœ/ýÍR¿úÍG>ö9_~ýíO_ûÞ‡Z÷ÃO’è“ÿ#æ?ÑÆ¯~¤¿ýy?ü“þù¿þö·>þóŸ}WZäüW*ì€ô篦qh˜€±€ 8ò÷€¨4Q_ÿV¸è~=تò HH‚h‚ ˆ‚ ¨‚È‚è‚üƒù'ƒöGƒógƒð‡ƒí§ƒêǃççƒä„á'„ÞG„ÛidGE'J(G34ge%h32B6GD;ag†;M…IVØ­n'•céN(” šï(G3šÙOg£k„'HA{Þ·4ˆ†H¯!–€^‡;t!`]ȃæ=(œ +PÝãB‰†tP|И·¼eµ‡Ì)€†Añˆƒ P &j *Pê˜îŒaT”Ÿ!âgÓ–)ˆì[ãªÜÉv2†ÆeîB!šWóV¤ƒ]_ fk]Ý^W}ß5 n[Æ5Ô·ÿëd¼wÌîÝad/ÍÃö0ˆ)u¬Óge+;Ùɪ1²Ö4cd;{¦ÏÂJY&j8K =9Ìáµ £ïÃô): ¶¶]Ëp†!‰LàA•øƒf[€X€ h@CQ§x Sˆ± | ¶5/Áj^è–5†mM®K`Û¹¿HN²a(Øôi€°ƒ¯w§LåÀÊÞ•òúDšØ”1³rø˜w¹².¢$aiT²’«Ùß—ÉÀq –›9âµr-x!IÍçk§2,¦M‚ÐÀŒ¯le º¶$øÀ¡×W€F;:¶@ÐàÊ X  P¨í¡›8úÓ„>ìÿC£»\æ–àÔ@u ЀS»z»¯Žu Œ‚8Y¤µÀx¥h[ò’@Ë3"y{mÛñ’±ÊÞý€²½üL@:¡}XH–Ê¡a¯XHqmU³¸‘ÌÆjÁ¹›rF ÕÎ¥‰øŠµgÆ0`DâŸHÄ$í]#z´µ%@}€Cº®l‚œ2<‘yÀ‹£xØ@·(øö RPk#'—²y °"sÀ d}Ê寢zMß–IZì»ÚÜÆ½ö²Í3.l_`¥^n¯ßz[ûäc<µÍÇ C1‚|»K‡:Ô½Å(’ Œ+x߸·ÿÎYsŸæë_rÕáB›L«j˜#×»)ÕâɈ(D¿H%lA£F$áüÐYS¡®Œe A†&(‘EAž@èEÓöи¡M€2Öúé®n5NÍ€ @Ý‚ñtM‚¦¯àAÜ1C£HzÈOyÚÐy¢—½k[Þö_*ðòѽ­(¨À vm‰=ÞËýèK'# ¢Ð< dÈìp9áÉ·ùC•ímÛš±ãÉ2ו<ç1qI©„󠇺!#½'€õ9à„ÁSá Fì7 8Wêщc„xÙ€¥‡Oˆ …€!@p@úÆÿb,†w±DoIçjÀj+×›§[ÉWscô (P˜t‚… €ô6J@õs½Ö€V–kg±çm¤÷DŒöiÐFh€ˆ0[€bx­KŠ—3Qí»•|%ðýÓDÐÌÇ„É7Q†Vy†`) bTG6~jV~\r~dwòÔ3Qu0—tEF'  M vx‡vèP@F®6Fñw&€}Ø÷„WˆGp ™¦Mb)æo÷6[0‰±Dzd~w[<§wX†VXV–1š0/z0(Ðð-†‰€h™0©”bSЃPdN`d¨¨ÿA)€xVvp VbÂØPÀŠ“8‰Q@i4&ŒÂXbÔhNHF²—h¶FQ07Qq8FpOíS&•tFVkd˜df¸%h-éèÈs1[dÐ?eÔ‡Ú÷ɇãE ×|n(Qy‡z4FWŽÙ׈Ht–x‰·•‰FV|µVlìóPŦA‘( ‡»˜Šq_3Q€QT  i˜ ¶eQ<`>˜WVFŒx±e  m;m=HXÄX"ecÙ· ih5SD{øtcxŽmæuC²&„nÀÒŽ¡a“3?@Ø'S°†”%°[ÿxW{å$ðÿhI€hù å–›÷¼y•”vYKwUŽ·žH¨]s5ïR[ðsp˜LÄDu ƒŠYȃ< /P“NÄÛ¸WV6RØR6Æ}wõ9F†v—K·”c$EMé”Ïd•X²ŽÌ›52E]x–í3ˆ[ö†d„–ºu>ˆh™SRq¨—çD£÷]¾I]Îy!(d6HP0 )†   I]—ù‚fhPÇÒH&‰> UàÉW–ùDWæDΨžŸù™§™|‰¨IKäjb$~®ùšP v6b(S‰~Iñ5xöZˆ÷dÚ·>+0“ÿrЖZf“ œ“9R/)€>gs)°>z¢{µžÊ‰x§&~"h[˜/† kH:ó4£"£V¤CJ<#˜„  q Ð]°v d@FФ½§z ÅOd0*ðO 0v€eó9RËæeÜGš]š×x—]p[¯æŸÿ¹´ù$²¹,gêE:3bdDKe4/'wr||¡?€e©F)€†À“unY808“uPnª|K·y¿Š#Ut*O@©¦t´tjƧ|IhafŸÓH0:\eg@[ÐgòT:¦“£ù£ð’WX:FE*wÿqc^Gú«¿jdP¥WØ¥žyµ0Q¥™Ÿöé¡{Y¦f ô!•pD•¿²¦€‰<†0–d€dàbd°>0¬r„ø&P…€S€ë#ÛµJe2Š: uP§çB§u¡8ð¦OveozjHœ±7¤;ðÍ‘qbš|3vq§’®GcyÐ5#Aƒ0$pÞeƒºå±a•3ñ8AWcÏ“?z> PÂú«+tq’·œ*P¿Z…°UU*R@ù´Dš[ú¥¨ùq—Øšeª­L’¦6̓a)x‚ø ßh 8DIÔQ(„#I¿úS °? 0$ÿpb‹c ¡‰ 3äÂ4yð=˜ª©ºƒVÖ x`(°¢5feP×£§k'pð@èŠú6-†œ6@º¦ v £(à„¡†m(@” ’ xp b@o†–!€c‡F`!0c‚f4;¥b`³!0·Mt¢‹eP8+PŒ`ƒØi峬*‰›vUFˆŸC[šüYˆÒŠ´K¢´E3絘I†PMF¹xCK†À<®DTP`1!3Px  7Mi”Ph”P)€„š@SЊ‰›€‹1ÖÐ,–D†@%WYùT†P$8°(PG„P@V›D‰‹A¸‡àJS0{+„ˆ[$@:‰À¾ÔÆh„hÀ|Sb­xoDd‹"¹¹¸(wF„J0p@š AO€Œ €EDÀ¯8wÃzëC hЊ€‚ý–bGúpƒŠvh¦y—1ÔkI¦®I½Jÿb½$æRE)¨ISªP°Iƒ¿zèJ…i$pK42Ãt)àa “6ãqÖ”¿'†‹×M°F ”cÀÈ FÆ_) †i$†y•‰`T¶Õu>3ho‰Ð`xT@‹=[™ëÙžÃ8ŒÓˆTpº<Z€0¶®˜DQ†ëh3YËwXÐbÐoxÁb0i€!ðMÀOŠ›o-†„(€‘GpOvmhs/wW'­]G-jìMlL.†€ýôOµBvD×I-lS)0L]1)àÅäUäi|¼¾›dk™œ¿ü)†§ÿÖ ã1¤¿}hɆœÉÕžÚžÆe:ŸÕUÊ ­Kte”wpÐ6$€ˆœÖ`K5¹“,]bi;9m/L/\q OÀÁJðȰµ9Ü:Í“µüièƒ>åQ ~lŠ`w?J1(4 ÃI`„‘nÅ‹øÌÐ.”aÈgÝi“?]pb0 4•É'Úž–yj%†xºTV®–>cZ ½1'RÅXØÅž!{eq* @K$ž8ŸÔè@x¡“<éÔÊÆ°O ! {+qO݃³í·P°“N¸ ølÿ–ÚO-jìcÎÙ'kYYZ\$íœn@ñ^ä2ÇŠà0ÿìIy`æ4>mF/¤6ÅTÆADFöGÝs ~jmk'*S0Y©=Rg¶²}j²¬Ù<ëh Õ6y¥Öu”>;ÛÔ(q`†Æ€¬‹`Îè}ËÉÙ- @ÑøÔ<ˆÓĈÚ%öŒ&VÔ¨m|@:ýi×Ô'juIFÍʇR‡tFv¢X}¢Ï”\É $Ë]•>™æó8€s¢] ÿ’‰m…ÅU0¼ˆ?åû9É$†úûÐaéÑ À p“ɵ«Å,†e,S\+P(`¼7¹j"å+KmàÔß ÿ÷¦€÷çJ.Ýh<‰afyºFÑôu F5€50@S…ºÂ:¹ÓÒØæÔF&%›+pA'DI0O`­í{;Vº=ÝÒÐh̺ådÚHÕΊyV^}jÓÊÎ^= b‡;b½•P £ã<óôWLDØÀù”\||ÏÝcëËBs-ÑKÎÑONœå3ìàUy»eKŸîq\[ŵŚɵÎ߀pe\~Ù(æìI´xgË`B ã1ÖÄc«2z^¨™iîiÛ!î´ýhΈè$pÚ@­#W<0ý«w¥ö¡‚îæÂ8sþ#Õyâ6'u"·ð®ã?2ãÙÿÚ™°ê«^/–œe¬ P°´DÆ,õKÝ?½âP·¡ /ùPU¥R:¥­Í”+Nçêì…@O r àñÉnuGŸá*w”Öƒ†Ì”å`˜¥cbÛÚ¥¨o·_@ jñ΃4¸ ·»‚öx§éIo%e£ ÀIoU·?YáÅ ¢ÌŠðPø kO(¥N$§^ ihH³8=äWYX|1$l¼¶°Í˜½VKGZDˆ®IDÝØ5¬bOìÆF|Ùge¥'¥ðjcrÇ®…pÛ!ª²Hy—»+^s—DeƒUoq¼×s»×é¸åæ_õ´ à s'hÛ¸œÿtBg[ÇœÚ+Œ‹XR½[lïú(.kqŸ+s/%»‚êÕýÒ?ýÚÔüa÷üvOýÓ1±Ÿ*+ãA «Ú_þ^aýÖÊMæ/-¤A<¡Kä/TF·AÑšp Ñ#æ‚‹Z1I“&@ंÊ1H0"D…-^ĘQãFŽ=~RäH’%M~¤)åJ•-W΀SÓŒ™5iæÑ„óäNž=}þTèP¢EEšTéR‘,ºTS&Mª5qêdšUëV®]½~VìÒHÙ \2ŽAI!Ÿ¾*µêÜœu‘Ê rQ‹¼]°páÂïXÂ… FÝœXñW6l@0bî[¹t«^åø°¦Àù,ép CÑL±¡êÔ«Q·í5µÅÙ]KD=:#lÛ»/ÖÎ[¸ÈÛH4ÒÄP2ÔÉ•m>Ç,2ðæ¿3élÈfÎ1"º°dÐÆß,dô¾(ð쇿‡|}|úDÌdƒ† aðQÀä4é¯.ªÐ¤ŠEDð +¬Àh2朳¬.¬êÃ0C 7ä°Cú$tŠÂçn²ËCOD1EW$ D—D¤+:g¤±FoTÌÅ—äѪq2H!‡$rÿ9a„îÇ"—d²I'gÔ1.©z$ñ¡Lk´,·$ËÓhóÒK°ÔˆÌ×Âä’µÙÐüòL5Ñ|N0åŒ3ÌŽØls´Óè<“MŽÌ,³M<óÔ“Ï.2sÐBùijNBw{ÔÍBôÐCåTTÍö"Å(ÑA ­´SN}Š$/S’(;ç|4T@CtSö^USWkVKwÕ”WHkÓµWIcÖ`…ý-Oc¿yåå°Ã×+WD>ø~úê§çÃ÷ìç>ÿtÃóÜbÂùý~§Æwüyʱ·\}ÓUw?þÓá—¿þÑ™gÞý÷·cùä»ÿBç?*/àƒ!ò°=î±oz½Ã%@Üõ®|ì ŸÑÆ·¯ îDqcý²Ç@ÑÙOrô3¡ýP˜BùåA%|^ ñC8¯†ŠpÞ$j˜ÃÒQÂqáëA ±{œ`Ÿ”Á½AL‰&ÁD1ѹúEp‚“hD WÈÂ×ðr!äâåôWÂìÍ¡uÈÃB×#¶±{|èBíÜ8Ç9"шsÈÃVÀ<±ILDÕõåÇ’P"Š›Ûœü¢§:ήØá#Ùº Ò#:©Ã@ÿt‘éiB˜ô‡¿þ! §ìºðÂ;à@–Ó„%2ˆðb yå-#’‡¤€T Â „9Ì-P (°€p€@b˜£{WÃI¬@lT #§ˆÇ5R‚†à& !×ÖÍt³KH@‚e2ó Á p@È%ò\NdŠ!§˜>ÒÉ!)çã)=oNp‡†dB ¹JŠ—¶´e]Ô‘M‚y…¨á% ‰Kt‰Ø!’g‘ðà—™îÖyJ'p T(Ä ¤L*L 8@Ð@  ‘x°Ã b'ÇßáAvv¨Q*À;ØAwn¼fH°(§;(ôòŸ8À´ºU®Ò³HöTÛü*C&’tD  ÐÍtvH¥£Ù;9Ô0Å«B:À2Ï…D ‘H S˜v€Âòº°ÊUŠš¿S#<×9ÙÉ’ …hRQ(4av  ”ÉGÒ ´iUÁ dgTŸ.u”Èã__•÷ZÊÁšxH© Ê=Ü­À·¾Do±šU0w‹],W•;Ö!ÿdbÍÊ!ùI9K•®Š^S‘ T®ó…ÒD¨$wè;¥î¯€JEozwK;9•‚²­jbåpÊýVŸeUqpJ1¨r•¸;%ú+`H–²Ö@‚ Lɦ ³M€0„¡@Ó––™¤Å05`ž’€²±ÿº`Íß®‚ºK©<}»b W¹/Öj`îþÔkT„*µ™¨D&.!Þе€Uƒmå{Êò©¢Tï|©ßÿŽ˜Å+På|}[Õè/¾f1šÉ|JßÁ m†åŒa·Ó´î¬°…õ¬áÉ’8ÄÉ“/þ@<;Ü™xÿyòÄÁ—½b­":ÑÊ]q”}›cŽáíEz $>·bÖÈQ“5Š53E6–Ò%À,ÐËNÁÕTx„Ÿ€Lf ™iU+ÅðªÍŠþ碅­h2{Å Ö0œõœg ãùÎv¶;åŒçe’vˆ'‰ûT2EýK´±Y<ãSH6>¹’9Ê%'t8àÝíîð_¾µw’¬D%V`P˜X§LK‚ @¸­`k L i(DÄ%^4¸@pfàÀõ ú;f0˜Í#f@ P–§×ÁýgÌSðå’ ¸i>å?‘ çÑ2ø8ÿvУ]€¼ÀO°Ð©ýñ4=ÛÄð€ù+?ƒwQv,*ÿ«¼_[SÜ_Gt‹Wln¡Û’î";Y§+Þ±ÈH¥]ìÆ €œ’¡‰ ì BðY  €H¦^ð„ž¬¶iL)¾…'Ó ƒ/|á7^€v–œÍ%g1 X¾yÎw^åžïüŠ×ì[>8ÃÍ´9 œôɪ>­+@- T0{ا^ö¸¶¹ÍïlkÉ&]ÕÞøÁ›éKÍ—@óÅ?ðdÏòu2¿ùÆŸ¬Óðt!'{öYœv™]Óëî(ë’ƒÇ"FR’™ÀlL‡ RÃ"… ᤵ O°éÿN†A4Á˜@¸ÉK¸ƒ€dÒd¼Èû½dzº뼕û<ÜuZÙSK¬ÐS+6«ª›¶Z+››½äƒ§ž²@Ñ«=C-œ½ÜÀ{‚SB™K+—³½äÃÁä“AËÁs: ,š9íÓ>î«¯ÈœKˆìÁ«z$„ržh>Í;æÓ'€)Dh‚(ˆ‚-Ø‚ˆ{0*H8¾Í;0ä9 x‚A¦A˜U›¾£€`z?aB„A˜‚&°µ X>€€ ÄΣ,ø€Àƒ»“8H@¦è©—³€¼C€›Dc¦€û T¨«`&9ÿÀ67«³‚£‚ X5CÀ»bD7t‚&È ¨)ÕëAàÕc  ƒ h‚)ˆƒuâÁ°&øùœ(ì.ÛŠ§!$Bq3BAƒ‰Æ’ ‹²Bèk¾ÃÂŒKüz0'G'XÃÁ@Gt<¾uŠD›kH@H 82h4°G*øE4x?›r55@[\'—Ó9Ê9à›³j+­ÎG€0`µÂ:„Cð?2H„BxŠlÅþ‹0 qt°—Û7[@ˆ<„38“( ƒ)(*Ø)¦-€07=L»§$ ‹L¸«Ðù,LKx£:0žnÅÍ”3eš9;:„”>@#è³Å4¾f¢<õ=>8®ÜDÍK¹ì<0\³Ò‹¨RGRÆ¡"4; €8ŽÙ‘¦j%4Ü1RŒÐ¡KЃXƒ'诉ÕY¥Ø'àX1àWÇ’U(W`…Î øI*œ¾ [Ù•õÃZS5è, È`cÖIsÖ75—°¢Æ±0UÚ#b¸é³„»USÙƒ>ÿXøƒFp,< `& ˜%­ÍnÅ|§”D€€Vx‚ø¤¼ð<Ü0c[~+ÀÏL(¯J•µµ ƒ‚õú»z´ÛI€¶BU< ƒX°'`[ ã/9XÜÉ]\;( ÖBQ&5PÚLÜNßJT¤\V6½P©PÓŠŽ2„L€$ŒÊ»Û¨S¢ €@Ë*D,ÀjIã·Ô °€aÒIàƒ@X ­•å­ƒø/5 € M,!€¨Äÿ”^?´€ ¸H2ÇA Géõ•½„Ê(È@Ú¾u'€ÿC&Ù;0€fÂ1#;¨€ àYó^Á[YD888Å]\øC¤¥Äd’X%£š¸ˆÙƒÔRžDÐR<Ö4=0™+]¥<]IÝÂQŠ ­Ò*5êÝú(2„–´C÷¦B(¬-p?øó¬K@¬Ä²¦Ð”ƒ­ªxZ¬2žUºy¢;²ÇËâ]DH48ƒ3ƒ0 p?þ+k‚aMÐUÅå?48& ˜€þS‚&HHE_´Vó¿Fƒ @ÃÂ,}Dƒ I’¤_x$F€© ¨4h¨€W£2 %@¦ È€Æ>¼Gx?D°ÇÜ8Û•=ÀŽ›çw¤8H X„#xt8ˆ{„þ¨÷ËÝ)x`<‹ÛéóIµÄÁ6[']áÝìeÿùeucŠÈYL~ÝÙ„êµê ¨êœû'QRëû'Ä2„¿½H%;¥KH¬<à¼wŽ¹Í»–K`Š™Šÿ+(·¶ž¹¯å35ÇÍŰÈBIvc)ˆ°%}Q†l'Àƒ3IÈ6Iâ…É 0&*8‚=”Eº=É ÉTC¸ÏFÍ•&mŽc&ȆlØÝ»›g÷K„‰„µ€‚ ¨gHMÉ^éû\Nm$]ï 6›}Ƥޥ$¦5Û ÄJîù°ð§ÅJ;X,(¸(ˆnØK%µâ€ÊE[¬÷¥nkÖ¼¸¸N–㣖ûJߨ³M4ìíßî%«Úåˆñ ÿ™q´[ŠsZ«dþH 2#!\ë30ÓëöQëcuU kjaŒRú³òÎÛ\ðr._&~{ÙÓžÙ¦ýÊd{Q9Ëà4¿0B½³jã8Þã¹ÁÆíÂM¬*­Rà01ôÔd§øÜipÜ>CïÌôR›ÛWÕÜóü€ 0ô €‘lôÈVMúQv20šÅAÐëmöNïOLÇMg—Þµùén5£Øêr´­^R%¬ræÉºþ±f²-€ok–ÔüÆIù}¦µ½^áXL»ÛáÓƒ\€àÚL[ã#„˰‹œ8Gž‚¢-¼?b9˜nߪi'@x¡Iÿ˜v­úª5ân‡Þg÷Ò¦<ƒE’TY4 ¼@0»ØÎšÜ ‚V6¹S*ÚÔ,Iº [ü†ÎxÚN~W{øú øtJ$s5ظhCQAÔ{AlAŒoH¬kVrýák­ªuÓÙŇú#]’/Vƒbø›åøöû3ßçþýl&­ÀïÅ„ˆ«¸&ÀùÎôrèyoݪœÍøÀÈ1øƒ˜Ô×ÈÎbœ÷Þ8Þ÷ÃCƒžŠ¯þÒæTEMàÕYe3“Œlp§¶³/Ó´g¾åÛ¼Z÷¼€ÏYÙÙçê٢ȷñŸOº0|³wÊÁÞ#Æ|ÿ}¹Å5\`Ñó?`JåF5GÐ¥Qœ(œ@)… TÈ *TÍ$0(aÑ"E °`A‰„$<0R£FPÐ „† ” Yà&@’(ABcÇ„$†¢(j” JàXáô&Ô¨6mBÕiÁ¤†<‰ª@!p¨…ÇB‘E YnàÖ-€9j9Ôéмzõ^´˜·/à¾4.lø0âÄŠ3nìø1䯀4M®Lùråš7kšÑù³ç<šDG.mú4êÔŠ«N\IS¥I²'ùÜk… Nwóæ­Û÷Š)ŠæEaÑ †…¨@ÿzR¨I¯ŸŒqXÈ%™&º®(Úµè“ðdÐ8„è‘ÄŠv¬;Lþa…@£Ãqçþ^¿k}£EÉXo‰†ÌyY€GÈ%Ð} ÞGŸQßéWT PQ%ÓXØÑG„d‡z¨H5½—…%š¨G ÷á‡õÔ`¬µ6#5¦fŽ˜Q¶gžùø™h¤Ù8$‘Ey$’I*¹$“M:ù$”Q™#•;òø#–£i)%—]zùed“&‡²å!š˜‰YØ$¤ y˜lµÉ&œ‡½™&…½ &Ÿ}úÉe•T^™åAþy(¢‰2Y&ax*ú(¤‘JJd :2(h™:)§ÿzú)¨¡Ši¥8bJ¨–{Žº*«­ºú*¬I¶aXy¼@°aX‘•ŠÙ©™†¶åb1¸p¬%Ç*k˜²ÇÚÀ¬&ÇáBaͲ­ „m¬Ýzû-¸áF|º‚€NÉè«¥í^z¥°@›Ø±,,‹%{ìAIb{ËGa‚¸à/µ/+ö6Pë þ^k/µIZXغ„±¶îņM¬ Ækܱ¸4ÊX1ÉS|ØÈ&k¬2Ê-gLqÊ—È2Í*§\qÈ_¾l1§¿f/ª›–æÂ /Ä3ÒI+½4ÓHúl%ñ«jÓU[}5ÖY;öô»Q=¯Öa‹=6Ùßrl–B9—½6Ûm»èÙ@Ç«öÛuÛ}7Þ”ºk)Úš‚7à >8aq{=÷ß„+¾8ãZÞ#âT7>9å•›½ÿ·©r§¸3'¶1bž{.ñ‰£óiºŸ¨w©:c¥ã<¶ë ‡.;d¬£fûç'Îþzj¥7ù¸fR§ª¤ê&î3ïCÚŽ{“̯NûóÉ#¿˜ó^V_äòÐ×x}îÒs¬=ÏÔƒ÷7b¬æ~K®¼ì·ÿ>Éð£<þô«Žºè´›ŽÿýýÇ?²þä÷1þïv¬ŸÌ Ø:ú}€óÃX ÈÀ"p€¤àʃ»Ñq0‚LàcöG? ìž÷hÄ£ïèÆ ÂqŽcé¤3~m}–³ž&ëV¾¼òS¥d'#÷ID’m­„ÝÃõÊ%¥rsž\%.s©Ë?ÕR}»ü%0ƒé¥^ŠsÂ<&2“©bÊë–Ê|&4£Y¸óýìp¶”&6³)Mf¶P›Þü&0¹9Îo)â®}`¢ZíÕÞ«ýßLÂLâÝ%ØAt¡ÅY M–O¢Ü ¸‡D6eQF`DàAd  €S>%É™ãP| (Ø Öc’&VîÖ¹Õ&ozì† B„­%p®e[‚ÿË[ŠÍpÆ{‰% f)˜%Ùpá¨@ðõ0ò›®Ignò£†>ž xâO†™àä”ASèäYD<#3BÔ^Œ…|š…AˆAí…„PØQÖ…P¤„Ѝ@xüÄSÎÅF¨&æ… àæ”ÙZ0èsùfoLèo§)ò&*Tø-ä5–”$gfÝA{JÙÇýÖ=Òãë5¢ta–žI.RÖu§ì &„ xÆÞÅ(C6d!  ðá]|Öíi!éPÔE6ÆÝI‚ÿéìKòl!¼ò€ @A„Ç "X€UTóAd_-Tÿ±GÜk jw‡p”±E4H[¨ÄYœÝÆÉ‘Eòa-JX@wtã1n£Û†GÎ4YŒ…¨®êºñ99ïØ/)³È^änn¼´œî:¯mo´óª¼³Õ´ó¨Ñùe¢e2žþx²?'ÂÇdå.G¤@JøÄÎ’ÿQÏ¢òYÀFÔÍnnB,óüì\ln†¬n |FH[„FlÀWpÅw8ÅE0zâqPæu¢öbˆ+¨‚Ì1‚臃è>7ÁDàŽ#òéÇ|u‡¬@4ŠAÔÀ¼RK3}Ð]SðS§«T UWUcÿ‚Ú]ŸFâ"î X@ œ€Odñ‰õ«¡Áˆ5ì³<ÀDh€OPÄ 'ÇBtH@Hàd€\dÅ»&¢îpQ$*¶Oär l@0€}÷EHtĽªÅtjº´5Ÿ…5ïç#*‚÷õ€PÚtp°GZ0Q¸æÿîBgÀëB'ÃdbdÀþÖ,3oˆm8AD<@Tw$jÛFXÜ4 œ€ Ô*rnGõóbNô¦SzñI&`œ–yêÅ $ù¿2\‡$@i’#QÚ EB €@“ÿ,‚Ûì†'Âäºd@Šü`|ÿ1WâaˆI„…†¤ÈnªÀ4¹äB9B,±~„€ïðŒˆ€CK¸^0€˜t³CCEãBx„Ç+'(Aàd`yBHGØnE^€v€0(ü€”‡ÀVü&øÃ5äX’€5ðíø—î¶¨ôvÓØº&Ì)˜ýAlë÷‹hws;AxÁ ÀÄ Šæ &Ÿ~ÎvqtGL."(L€ö¬Â! Bhà+@qì…a[„d劉Xdÿ¡"À5ByÏ¢»Wn"°"l;™ßø ¶3Û´1ñ,¯¯,Û5ÿ»´‹£;pÈDMÌM ……xÿf^<v µ³'D/àá&¨HSÔÒúnèº_+ I/àØz‘¯÷Ö8… üEB µ2_‚8±7Hø¼ÏëE u’+¹…@(0 <$p9 в´CÂä‚¡H.rÀ2¬ÃúpÇ37ÈU\­F€hBï46; \"²@ª^,t*…$=€€‹2É„ÔI\ŒŠ,Xe8 K©äФڈ.™ä’Kj¥•À§ÆT+G#1žµFâŠC-9'u…/®¤ËrØê¦Öåì’ÿ³Ì3Ë{ö図kùåùò£4¦ô#èÒhüVIØôÌ*t=VRBºòêóàŒa ÷>«»’—+H+¼wa‹ XÕ±+8)¥ ÐD‹ ƒ¯Œk ØÜ‰ð\ߌlºé EæŠW“¯Äó éVÖRgœï(f1gn¶æ4Ü£ÃÙ\x(>p@UÕÓ‚Ós…:ô4ÒØH‹èH¿ºÛ¯|M¹„Ÿ«öJ*Uœ‹Ê¯]6Îw¢|E³Ã¡ò°Cw=5ØS•r·¯·•’Ñw‰2i„T9HCÒ;ÂŽµ4¢ƒ‹-ǧ°Í4ØVÀQïáHn?W’w5¯ð„ºpÃ%ÏߣŽÿkœf4+¥?N„rÐ’StW?¥ Ít ˜ƒæ€Ø8àI¢l”vÁE ƒ¸Ë]ÖE¦‰j:ÛØl‡£ªK^c±~§05ŒgÄCϺ°9Èá†B1„äð e‡PØád4‰¯I${HZ ((÷¹ŸøE)ŸK`hXºÓ _8ˆƒ«êîÐ| AàgNô®7$FõfD@!±‘4ñ„¡4‚˜0‰¹Y`I3‚ËdÓðP X Ox‚tî—–à*,¾(Þ'Œ—±ùu`L†Ó²@Á­¦ìwy¹Le‚¤=íow{;ØÖöãHvc&“ „ÃÚ,æD@âã—°€‰¡„)¨¹-lY[ÎÀ–· ¢ h€Ä_æK,ŽG8,"ë9ß.È¡nèù¦ð„&…ÿ >ŸBæBˆÁ /†N€¨>)e_0L€µ ¢Þs¯÷%™'„ÄTp‚ìÛòcÄ4æ3Ž8#QI,™…Èy,Ä{è—Ò/к_`ìó¥O³M÷Ë HKO}êÈN@¹`¦¦ íÿ¢žP!¼h Ù!ƒ ’³­G=JìjǙ٫ ®ËÿÖZ’è ÁÍÜlîè®8    –NÞÚo æ ,038 œ€™„g–¨ñïp`òLÐñº@ëæ»Úï~¬Ï` 2€¤&àD `ÏœœÄÞ2âm0p ¼ ßÜb¦ÀDÐ Ž°»2ÿ  0Ã-ܨ`)øc MÁ å\c, ý2 ,°ýÞ‚-¢€ ÒóÒ‹šàß"¦ a`  (ùa©Œ­ó–Ž àíJTè>€Iä‚/õíçÀŽd@ÆþîC”|%0ÂÉî‡íÐ&°ºÛ>QM/*Ä׬Ê]–ƒoDf”C…¢Ò î ¸§>×Ô ºQ^ªLÃr©Š',4e'O£c 3Íá  0 6à?QOH dVh¨+¦`ôC+“@R 35scz£‚¾“HÕÐ( 7jƒ6VãT3’Fw$Rb36a#75ò-É è IÈ ˆSD—´ƒldkPã.\GJ§TKÕÄJ©s‘•= P4æ“´ÆT a+I>S =ä >å€MÏ1ij¡Ò äSNƒhбƒÅñêd[4@M tAÿ+QW@H4`ÐeHZ¥F |’ \¾GnÖ4vÅ0qÂ43U`L`&ì7àho^oÎ/ ÀUYõTÙËW/“ AÁ¯ðÊKãj£a}u5`G,hDHAÂne¸´Y'BY­,KyV'v#&aòtIx.»òc1Óòî  Öô\¿ ÆC¥ òLÇÊ¡ –´"l¢.œb[âˆä`ìiÀ²epNhQ)†`3†4 IÖ§Rç¦Qà4I`Š @8Ä6“6J" c-v7^öå d.š(–d]FCô5å`Š0ƒ š€ntr=÷scÿ4ojävF h¶EOq–9­chƒÖg…2h׃u-‡~¢+£ÕšŒHÕê‰r ZSÀˆÒ²’¬¶xÃ_j¾r(  (òàtÛv®¤ƒ6€àu:jàòCÙFW8Z5oDWo*µQ‡„GbGjŒ¤^Ö7L€p ­ÐêfÃG> /úBIcvEô5C@7w67V~=—rElt“ìdDÿRwKd·Y]×Hv…¶rbäìó‡.净(.A,ÀŸê‰AëÒ?ƒwMC¥Q*i`ºñ)å³+ Áš.ApÄbÀüÕz`€5(Œá¶,º—b:i}L-dëvŒ æ–h¸r}#aï¢&åúÄPàúªWé—~ù—dáFã—¤X7z ×T]ƒ‹E¶F—äm½®ëĆqÖQø/K"Y'xÛ€Ö‚iâŽ%‚¨•‡f˜{äôJî ¦†Â?£>¨ÙÔ)éb‘­6Ng˜x‚bòuO¥#?ò6ª7ª·Ó4Êz‚,‹˜2‹øü¬·F `Hì¶Œ³„*¦4(7ÄJ~à ÷Œ3VOÎ.cLq—KÁà—~Á¸5Q€‹]OŒI@ š9~+·5/3Rd‡+à 5Þ5:$$uçøü˜JÿóíøxKׄ¶d$*i"mù€$ꈑ­)-¥`š"<£6-ó`>ó Aõt¿E)°W8&à”484yˆT)lã±À÷T•f|_yn[yb´I6ÖøekƒñŒQ ‡wƒNàp ?D0á¬yre´rudá¢)™Âæê$lt|$  ÁŽi¼b,šBWqÕxq±Ù\€ÅAÊ):UAN!ÆÙ:ËÙ<*øœû¸r Ðâ9Èò ®„Æ"-ÅwßÓ>…»QOA z–Æ“«—\ЗT…¢ã\-ÆËüì68Þº5ˆ$ƒü:F›@ê~, ÈÀ1#wD·8H@ÿ~`¤Up(‚ÈO ‚‚ody£Ð>@šK'Á,™T 1öêŠvoW/71@ì7dzSsvð¤tïz7Ù¶Û6¢:§K­Z;î¸*!«µº¦æà€ú6Mñï[W lœ2-wèXÉš~Q<å@:îòt[Ì4Z¬6èTà/òÏñp6ßÔ,Ÿ€Š=Ɉ«¨6$iV4Pí-¦QõvºÕk`‡†âÞ+pÀžÀW@Œ5{39[ÂÎþÑlJÛ´¯h¯ÂFŠL;1b:FSµ0Qe®r?˜·IôÅ ë§Änŵ#Å™UÓeâŽ]ÆóËædKu¤v|Õ! Ç`+šû?>—ŒÊ³…l” `K;Ê£(²È ~l}°Ï[éO²eÕ¼á¯Á^6Ù24· ö|¦ï±ÍÀ£ˆŠ>`Bïÿí`ÐÚª‰G4VéتhŠvÁU ƒ‹šûŠˆè”â‚{#Ý·FÅç8Í‚¶k?H\·=}'8½ª^#"ØÅ…Æ)ï`N]Òi‡+Ûm‚€)ÿ>FIãRþ9¤}S‰ i]¤bwj©,Ê€„Kx€^Ð'¦t¶>¹©.eß‚äÉ R}J së‘z¬LI Ó²õ-+jªWÚ‡¬RF5{ßR×fkí³LU{,´H1ëí¸Úš[®´ªRu­²|­0œ[š¦+¦I˨R½K¨R|rÔ¯–¸Ãkò‚ ŠZ’¨ 6¼‡&.(Œ¹Ý–ëm¸Îšm´ŽR{1Çs+2ºÒzœñ¸Ø¦œ­Åèb¬îºRür[”Ø@ƒ HÁÀŸ (¥@R‹T¡ ÑOÍÛÕ ¦¥ç§2? uÔ Õ  5XÝB °ÀGÐ t­@Ð|VQ²Å!CMt‰0…t‚@J wÜrW‰´ÒÚ;wÞzïÍ uvv7ß‚N¸s~ç øÒ…/Îxã”Noâw:Nyå–ÓyÒ ~yçž^k‡WÇ9覟~zæn#59ꮿ¾¸êv+{í¶ó-ûæ´ßÎ{ïPç.cé¾O|£ÀK¾kñÊ/_äñ¤ïÎ|ôÒßè¼aÂO}ö.ÞØèÖC¯}øâcW½X׋Ӕ飿²dë/×ûVÿ–Öùñ·¯2þ÷a+ÿ]2ý¯¿Çô¯2`›À†FyI »¬uÀ§¼P¡ ´˜¿ ªÅœ ýX—¼û1k€ì`\ hA¾¤Ð1+T¡ ÷—ª0fþ   ÓrC VІ1Ë!Æ2¨—ÚO„¬þJ˜¬þ]DáCý-‚#$!ÿ8Åo¥o…ÔbÕ¥¬b±}ë{"¥xEjeŠ]r‡z\dÉDº YHôÿb*CéÉM"ДԤ,oY36²‘3#£/YÙC@’{Yñžù9—Rò”’Ä%%g Æ4j‹–Ïœ#ó˜IZÓ™Üì¥"›¹MGš°•’ '©ÙÌ ú°›Ù,#¿™Í?š£ú%8•¸Î&S+Ƭ2“yEq9³äL'/yÉÁ‚ž’ƒ×äa§ùÅ;†SžmŒç-'zPzZT– E'D+:G†VÔ›â|å;™Ç‘RðœóDd…)A¶Žvô#AèÑ]f´œ€Ü"N=éÎ(>”§¥¬")[zÓTꢤ|f&ÅøÎybšŒdªF9zÒeþ©déR}z²XbnŸVé'ÿñÐ¥mêAYšUyn«kµàT ÊL¶®U®WåfPÉ×v–¤nµêS[P‹æµ¤Ž¬¦CaÚ™†¦j5lò‘Ïr.´8«Û®Nïð£êÍbëIê Ž6Œ¦Î3¤#iŽ-hh­=­èšÂÖΟ†³¢çëk_÷”•Ûv°{-êd‹Ú—»võ«mãÕQxѳv4lÛÌé_sV×ËV#y•‰k\×Z˜æ=µ±Û<êo³¤kö³]ë RzІ,åLZda{ÛÝçæØ¾ úÇF+ûÚÃø±ylF¿›¸Ñž‹ Ho}›;Õ7õ¿ñŒpWÖ¹“9M·ºíØêk#[•O6³½ðÊÄ;M WLËSžº†ëîá,¯vk^sÓ­<ç<_×Î{tGÿý<èDGÓЋŽt*=éLÒÒ›uêÉÇ4ºÕ›7uä÷ê\wzÖG¼õ®‹]ê)ñ†I<ö´×èéjo»á¾~ö°Ÿ ãt¯»ÝïŽ÷¼ë}ï|ï»ßÿøÀ ¾À¿ƒûŠÑÎr¼Xbñ– „ãŸÕLÂñ’¯¼å+¯ˆËk~ò‘W ä;_ùKâ7›/½éOúËç¡,“¸Dê_ûÔÛ«_½VâÜa÷µ¿îó <gør˜Cæ@üâÏaùÉo>qì°;Ø¡±W"®}>h_Úï~º¯ýïó¡öä/¿¬àÆv9{*ŒoüçA_ýIð!óñG=&2!œúë?ÿö«ß¿ÿ_?{´W{·—|¹G~Ð']ÐwPy€rð€Ég|¹Gˇ|Î×|·wz×7 ܇}~Þ'‚Þg~%X{ë7?†çOU7-Šg š°xï÷òDZw ®‡z®Gz3ȃ’‡ ý÷¨+p)03˜Â'€¶'}v«'“0zá1r°ÃÅᄈhÖg}5ˆyÝ—}óÇ}!ˆ†ãg‚kX~(H7*xVOã†PÑ~îy3¨}ò=¸ƒ=ȃµ‡ƒû— a(Їú'Ò‡»×„MØ|Ì/ª·zÆ'\h‰Ã7}˜Çg¸}œ˜†$~l(ŠPÈ*èÿ‡Ó¦&sHŸ7y<Ø}~hy‡‹‚(‹³X³w{èˆÎ§¥GbX…—ˆyÐÀ}yP†ŸŠß7ŠÍh~|0|«§ŠF’~72Ráx1ØŠ®x†¶¸µè¯„áXÀGx |‰¸…ÂÈŽíè|x@}|`аz†0zÎ~ÎØŒsÐmhŠewcZ'‡zÁxïGy®~¶ØÅäÈàè§'}îH‘X‘y`£xúÈ‘æ!æwDR6’MÑ~އ w芫§†¶Øh‹7(“—€ š€ 5y¤÷ú—‘«G¨|¢ø|ÎE +p”úa…Î×íø…ò˜×‘Q‰È×&X’B2’5r•KQÙƒj¨†¹r‘°×ãX–¨—ˆ—Ш®×“PŒ† …¹‘&Ø„Iå—†RÉ‘¹†[™#YÙ"‚évHy0YÙW‚³h–@)–‘©Ò›‡}öhŠ0zó˜yœy=‰‘IŒæ§™é™ß(~óç¤÷]p…Ù|†Ivÿû4a9–Š‹‘’*‰‡aY~Ùƒ†`tI™›‡–Åiy ‰š˜™w¹†§é—¿|ªÕY~+0мw~RC˜,B›Lq“ṇ‹yŒk‹´‡œ–w Ç™žªá„ÅØxš{YšYv)šQ Ëiý¹z?ðúˆ|Û5ݹ"߹ṛ_é›&è‡ÈØž’7zZyAÙt¦™ŸþY~ôÚŸ€™Å÷€ -b $r¢I¡ ¼©Ë(ŠÔ÷‡“‘쉜xð…Z @8›g ¢%˜…A"ʆ¹wuÀ£`¢ÿh›*¶‚ˆ‡&+Š-úxÿw}Ùƒè©xƒÿ­§˜®÷¥þ— \ŸµgeYÄA p`nÊ  Dzv•Ò'ÙYÈLJ@¥$’¢¦›â颋 ££8£)ЊÀ,z—©àñ¬×® ¡æ·‹É·…èX{ÅŸ©–÷’—$Àªsª«Š+€ÎY†`…xÚ‘rp–r¹7Ѧ,AMʧˆ›‰§Vz¥þw†Qyy2 {I‚Éqp|p­šÀÅòÅ¢Žê„F™…R|¨Q”0ÚŠ­Éñ‚–š½Á)ð(P”N@÷JM°­J*@* y§¹¡k¸Ÿ´Š«åw¡ÿ©yÆHôI{+À4A)0¨#R¨r±¨q“‰¥Y*•+ª¢Šz@Zja!“‡â“`­y°¦]ЈÄ'}E‰”E™ˆÇ§ Ö ƒÅò®GѮŃDZKd0I«´ƒp¯M`¢ØY«‹äš˜·zmYª¥šw°8@AÑ£«8°±ÛÒV¬SÊ”бãY}§9²#+™' Ò:´—j©Bûæ*P`]@¸vp¸M(®úakê®,[={J1ˆ%T°´…PI»ùº¯P»*PÑ)r°‘Kx°I}IÈ·MA %`…©Šÿ6±8Ð8ð€hë¤Ñq›,h% · ú±åÙŸšy·r鬗7zd™?‹­}{‘{²y`÷ ƒPv0Ãéˆ] I9}šغxã[©KQ´$p¹Kkƒ`„À´N ¯j * ~9¸©;Š( |:‘(p…·‹»œ¶’±¼q«–‘xy Ø uk·w;ªªç„mñ‚Éa­<¹í: Ú«½† ö˜—0ÂÙ;«ˆ[‘;¹íú rªáôйL[¯÷Š Pð÷‹ºú¸b`°µª´‡ŽGŒŽvà{Ú©‘ý‡ˆ‘) űJl» ˆ»ì œ!ÿ 챦‡aˆ–‚þ¹œ¥‡·ÆIzl9 qY¡µWá;‰ÄñÅ—ˆJ /—@!, 39Âöˆ£V¸` äûš®ÚÚ·|{…0løJdPÃ÷ºK`—ÛÃ$ðÃlH{Ðw{«‡º8€Gl‚Zx£,”º:­Â§PÃÄÅVlËZÜ \ì ^,·•g d‰(` x™ÙGŸÕiÊ*°ö8ª2 ¤©÷Òù̇H}Ï|¡‰`d@Â~ È,œM©§«« ™ ™À–ålΓZªy¿“^°´J{¯‰€ƒÐ¹M( JYŸLÄx”&ˆ£IˆÄº¨‹ÿߪ‹»‡º·Ë³RQ—ƒ+Åœ€Mi˶|»¸Ü7Äê»UÂË©7ºPød¹C,•©÷x·´w–œÆ•ÇÒÕ\Œ˜hÂ… ™4}ƒ~ŒÓö¸ŽÎ÷¨†¤œi—äg… q½‰0_@ö ˜Œ8|s Õ!À‰hĨ |(ÀÊ¸Šº+@À+PÇd™„ Y{°©)ðÈM9|¸‹Å·[ż»ÜÓ»R:wo+¼¦Ç¾g~ /ò8°QiÊzzÒö©œõéÓ¢êÓ‡ýÒÒé|¥k4íǚ龉 ¹Õ;‘ 8| ¨€rð½³Z‚Àb;¶ d€hG Úü˜kNЪÿP-Û®*T{´·¿I¼Ó3‹‰¼ý|J|tð¿qLÊkH|g½h›Ù]ËlmÅM ºÜ ^œzBm~#ª1šÕ©ˆ[˜Õi«ž½ÌË|·¿AË–8œl‰àÞ—@Ó†àÞÈ”Aä÷+à¦$ñ´E™´MàùйPÐ)§³=Û`±ÂÕº½Ó‰8”!Nø¿I(˜áz}{›E)Ð|MéÖ´LÑ ×ú¶G×-¨›Éºy©ñÑN½×Y±ÜíÝþÑÙ‚šö‰¦ »Nß§ùÇ©™Wjý½Kn…P Q>º“±<ñ´7”T ½ÿh ´…@àTÛ>§ qAbØÀMá8PN½—h|ƒH\ Ýšm»lmçlŘÅqs-w.~¬0.y'ã½|H~x ¯$-á9 Ø;Ψr‰°yާ‰Í†ß!LMåÉw³EÙÎ@ÁAñ´W~Y>ÉI»¹PIýÔb.æp¿û)鏿ÂX:Î…«gÖ©>„­çVüÜ XÀ|^Š*þ¤fwxþ»Œ±›_¬y²ŠÛå·Ê¶G{ùLrÍÊL«G<³;ʠꌻžîÂh¸YH¸8JÓF}ÔZޏã å¥K|GÙ aþÞª«ÊôJà²OàþP`µ>§4aëýЏ.|Ý„]~þ\~·Zãy°Ê\¸Ó¹‡µ[ì!Oò¸[»(nË'òÒ= ÔÍ iÛ±§g T›„À7LÊÃ'Àª«Ø#›Ÿä~Ù؈HLô¤ŒŽbÞ¦ÉÙ–˜”‡+ÂÛëØîM¾ÙúÎÙH©ß[¯ðrJ¯àPàðµÞ£ Õ ѽî|m¿æ*?„s¶%âxì%ÏòÿâòrÀÖ~y”P£§×…OñŠ(ôª«/]Œ‹ÎÛÀ>”MîäžCº„ènŽ\ØäHÉÜn¸ô>œ…PêHù½ú±ïÞ+HYë ñªæ*1æ<ªàEiëµßð89áö¤¾ûÇM÷¿/ò&ò)¯÷~n+€>ÁŠ›wýH®··Ê«LñHŒïÉ{·÷ÈëîÞÓ¯ˆxÐÙDÐãšÞ&ž”7›|M¹¹î }¦ÿôâ åœo³á¦\¯ª¬:ÛqÕO]ÿ²mö· HàWÈaØÐáCˆ F¤X±á +4nä˜ÇGC~Ô('F4­dÙÒåK˜1eΤÿYÓæÍš€4éä¹Ó§ÎAƒjšAÔhÑ•y4)ÅÙÔéS¨Qaª”*•ÒÕIYµn½c2Ož;w¾~µSÖž³xЪýÚhí¤L—äNjT×Pµv,v¡¨×¡YÀxä@Q[X-C(P+v…ã Æbºð]XvñÆÄŽ¡tÑÜY# 5€Ö A´@Ô©Q—F}ÀuAƒ ÊV=4h‹/Ì“Û÷C”…kôˆr$É…]2® ZÕùsèR{NÿIThQìGY*eÝûw𚚇Ÿy•ÒVôy&ÝQôÕ">cåÏ—§n]µ2í¿tÿëaŠ4[á6ÐP A# ã/³$Zk-9ÄÈl0Èÿ.1Î ÓCÌë£Ì,$a´ÒJ¬íÄÔLkm6×Z4è5Ùf³í¶ÅXð79üÂqG†ޤ+i£ñÈ3òH§¨SÒ:¡´Ë.©¥”rÊ˜Š¤Ò¼óÐËÊ’î¾Sk¿¸üÃë/Ä4°@ÍtѵQ˜(GÀìPŒÞ±ƒ¯'Û(… 1³ 9’£‹ CÄlÄK4MÅE‘ÓX|ÑEG×L‘IˆÌÆß$sGŠÄA¹å–óÑ8â„”h….¬¤òÕ)—¤îºìjÝ.JXs=ÒU)±Ô «-ç821 Ù®F¾z¨‹\³…&PHÓL \kMi„-P`I±Íÿ*´P£>ûñT?õ¬ÐGEMTÆGE£tMKc„W WXPANê ±ìÀk`ú 6X,e*ÝT‘ r9B™Óub$e­ŽV'‚²KŠ;®Š×)EMär*ÉÄ.´²‡xvŠ)¨ ¢‰' VÚ xVÚ#ã 4™„UÎÆåˆO†ÑU]Ö 56GO4¨ZIé¥ÍÞØfM_¡9F2¹¦;²¸@öxí$«[c[‘ŠRl¶ë®Im$Eþ•d9 yO­âÓJ=-/ÉÄh­ö[éØÃ3QAŽLèÂˬb΀ 4Ð ÃæÍŸhbŠh­=S7íWöµðéÿø4·u×Ë®Ü>3+Q©U“15z[„­÷)¥mtodHŒ…tU¤+ådoÈ‘4ÂÛnêa²¸'¸3Þ¸zîgšþH`³œ„ﱞ¯¬‚ ¹ï¾•Át_’•Åè/Y†è ¡¦È|ÿB ÙŸæ'Xà8ÀÎÜÄ/%0B†ŽëR`ÀØ9ïT Í¢vÇ;ßq­w½kV·š|I #¢XH%Á„d8ßë^õ®ç“ìÙj{-¤!KXH-e¥–˜ƒÀzÓ½”åAÌÑXü¦¾º@¢?ðs˜ ±2”ÀZÍ*@ž¹4H„ÿ27…'h ŠèÐB4§v†uŸ)Áÿa÷ºÙùh\€a¼‚·A<æTc@Br ’œ®~?TV|h°­.+1™D ä`*†AU #R -Ù’å:“w.IÆ'‡“0ÚIÀ’‡90d]a%Cêƒ$6‚”™°aÀ$†ĬŠU<@c… è/sˆ@Dÿ 14Ð ÍB{i |* fbj¹:j¤(A7ÛÁ72#n’–Ÿ2c L R“Ò#Œè5F Àó, ;_³& |@ŸÒìf(HPùf2r@!º$ÊON,“LJÜnE·„® ¡ße)ç>±,rèJ}òà7õ4b2³Ì4ÿO ¥S䥋|Ö„ <\Ô"1 AÀØ%©OÒiÈP†J7½ šHËàl] ¾fN ¨]¼͈<ØÎÒH«VmçöÉOlþIAbEˆÄºih]s,è© ™’ˆÖp¡1ÔÎ ãj·‰zç¿Ê ÉâsQWÎa_¢IØbõåAž(ýBдØ3 èi/›u9ül\~ö„ ¬À§=ݥ̾¦F@©•Fe-évƧ"µâJ-Ÿµ‚l•4õ’MÍ4ÍLm!]Ý>QЙ¸ 1WŸº¹§ èÚ¤íº#ɶú®wíÞ\7éP»ÿrW¢Û«–4Q‡€ye,|¹¨ 1 <Ì3³+• dF4¢ÍÓ²»œl3@2 ‚ dhB,à› x<õee;Ø"@ÊCiÕk XXÃÏ…ÝFÜ4ÒDY0Òˆ¤µÕLeJjÓ4©¹·—{ôªW,ÀHÑ—1ÓåŒ+3êñZ˜Zqf›]áôHbâu¡ÛœL×'ÍÉlË«wDvž¥(Ë|ê˜ZîRg71ƒ@A¢O3Ýfž=¥ì. @bf΃h ‘2Ø—´•u©„ÏÚ:\¸ƒnk ½a§•8¡‘îÔ¼XåÞ¸)ž49]\Fj’NÿŒ/¢šk¢OÑÍk^¼«”ï6جyÊó6%è‘|ÝíN¹nÞmx¥,ëŽU9:W&e{½âÊÿò£ê3D›PˆD$;†h‘hél¥ iû;Û ƒð\¼ÙýîÙÇ®±u= D{“éÎp 2¬V¥@4¸cÓ¢©ÕWõ'&5»ÕâIú6édÕŸø¤_^~ÀHÝjlÞÚ@ËÖ¨~*hNИ`º¯^!®gíäY}W{·ö¸®t ^k¢½u™ÁìsX ÄT63ˆ;Ó l$;Y ÀçhNå në¬ @›÷\Z׸¸ÜäÿbZ Ý½ÚnbXÝÞÔHX«õ#‹Kª"µW—»Õx¦ýß ÁÔ£Wào~»¶¤‰ÉYˆÄœ³Ì"$¸ºuxÄWÝM¿ëö6û\ñÛIÐêlœã9yÉŸC놎ܓŽÏUムÌoEæ“°ÝKýÈ|Èž)—†“¡MÙ &@€¡ (ðl›-0ˆÍÙŒ9Í’CÓÛ¼xáXžòQ¼C;‰«ý£ý“ L˜‹EZƒÁ €6ÿÐ3<@0Â*€„B ;{‚)è;¸9ûŠ¶Ï‰‚Ã9›A €¦Ó1^ú=ÆÂ±žJ5"”+>ä3ªBƒ€CÛè1 &±9`->ù“±[§‚€IÓ­ð·jò¶³¾£¦€“¦º+òÓã{ ¶Û»† Ð1@‹B¨*ù#„PÂ…`ª¶Â® À¦è?Nz(6Àµ)@,¥t/Ðs‹F0bB„D°©B0=H(¦›)¶pªãšD°3³@œÙ©Ÿ›,ßk–G#¢"Š'™2B7C#´hH ´Cmò&ÔBt’¬±,ר¶Š«Ä{±·K 8 º´.(DxÏ¡‚)€‚&0>{ ïC­ê&hhÆx†C¶SÂqÂ?ŽXÃ8´ÿ 7´µÉÛÆ]aÌ3šKЄ@`À#:"»XŸõÁLA6œ»3 dÄ?aI“3o“3ý‰–ª£ãÂ1|°)Z)üÑ6ê¦BÃ:…<4?*ÃJ[o¢-k¡¬Ò/žsÅ)Â}» %TB¢ é¸ ¸ãj¶'0 1FÐP?û¶ø1àp¤À1”¿?z1V+*4ä8mÇ™èFÉ@¡  „ LÈ LXŠI •i"þ@ý8 8Û¡‚cbÄ;ûÃÛ6ŒöCC¸› (Æh Á1 ù‘ÌR©ä%iñ¦v Ew[>‡s¬ 61?ˆ˜4Bÿ?iy–$©ži•jÉ}ª¸lJ{–ì2 €f³a”Ø™Îl»–MC'ÆP¯ Æ;èi,„XIû+—ÖÁÆ%;ÊŠ¹‹9"9Ûüޤt Ì“‹¤¥­€„I¨C ¢*Àʱ-z‚DЄLH„&H6;€ «Óª0K B¨–>B“/„ `“T“'  €y‚):;³]r“¬k· 84Œ­x"€ÁÒáN—ÀÕ3&;0°×œ&}ZÁ ©´€,£yÚ§˜=Œü#áÓ*mK6?¤9D8„AØ)€)¸}ÒBA ˜ƒò6ÈÿIÁ»EÁ°ÆØ »ÅûÍÞd ¢ÜÍoÜÑèÐѦXÊr̲;¼ » çL”$¨3D@ƒ-À½-¸)(' §"‘>º h$vA`´ÀÕó™DÑK¶šB*x‚ Ø%Ù°v[7‡d¬°Ä§’’i‰L°ƒb*½bš=˜½‰¦hÚ>”JPýbà>/•“Ñ„ -ž„‚ì´@š0˜*© €‚D ‚ªŠEIó¶xúh%;HÉ[I¸‹ùxU< °FåtµR#éѺâM^u!ʼnLÀ„ÿ¼Ã¶-‹;år/°ÇbÒ"H0„2Ój—ë«ÿ*Hi‚hEƒi-A”Ê °À3í¢cB½e* ܈lKD)U›&K$ àBcÊ%*=H¸LÄÄi }ØürAܧ,ü£-#kË1ÎI04øÔ&°Ta ÑËq“ ¦#|k‚w%ƒ) ÐqCH 'd*ï‹Í6šMlÖÞôÕ(ûÑ`ý˜º©ê,Gd= obV®»Hq‚$„K½™ˆµƒfƒ‚ÛIÒhM{…–DD%x‚ ÀЩ34 ¦CH&3ÃØ{¸å+´Åʪ1´;˜ÖËÀh¥ÀK¨€ ƒ«Ý‚ X0hùœ&ˆ‚) A °´Å’Hˆxb€§ã¯ß;ÿ-B¦þÔ#WÔëT(h0ác€˜á»`1[õ6­‚Q«ªÑºÐ„ÂÕo¢ÍÚœÙè€YVÑ… —} dÁ¿«0§:°&¡%ÚÒl' ?UÃX¾ë»k¤SÓ¨µ@4h‚‡­dŠ‚Dˆ‚Ï!QMÆØRK| ÜJ§‘§i•½ÑS‚)IðV*ذ+Ý,.*&dB½&ÀÌa4Æù(ÈÄ^rº=ë/É›1ÞGÀ94AÓN¤6 ó¥ñ¹­‚^Ý"Ì=#ÂέQ»Æ]=ÝÑÅMìÑÍ_•Y vŠÔ½‰c©ùø‰lNÀ Ûøƒ¸]F¤(¸ÿÝÒ¬ÕœŒ­æœáv-LñÝ „E$Þ'íà ½Z;C½XäE"–´¹ Ú • È¶X(DDÈÿ¹0ÒP*S›I_2#â•ô–X… Ü£¬É ßA8̙ݚA! ›Ä ³øÎ1tIdTZþ¨L@Lˆ'µ:^¤Í JÒý?ˆÊ`›äšè`X•¸ ׿«<M¸p)ÀdL–‚Lv‚¿‹¿¾Êçm“>‘–¸(¸;ˆÏm«©CØ"HˆÒ n1T*×91{ߥˆ3‰KÔ€•8®¤18RªÀ>ÜŸë¼ 0Z>!¿òs %MÀÿŸ§ à]2„¶…RÔS^ œË £ß6“Ä¢ë1Ǫ^=€JÈŠºÈ ¨F¤ºÂ–EäÇ£`²à˜5J|Æ Ež‰bM ÷ > ÌQj^а€ù*HnMÜH±±~µµfó¯´¾›îÉ»pnt“Èj¹cwñÒÁëLN.Á‹ëÑ‘Í7:é­B“¢[DFnãí|I®R6{¸Е¸d±ò—ÀÀAˆ‚(Ðá ÑA¸]–¸ p [e ; ¢^Z Àý9l®  æöÈ%Ÿë/ßgo ô>1 ¸–FG’­æÂ¿ãÀä6Ýå–‰‡‰Ã™ÿ„ª‹IxÀÊ,=ѬÚÒÙ°UÎd-Dàê½ íþn\oå ÄEÌÅ“6Æ¥J3#––—àÅNŒ€(Þ‚–ü¦3£iÊí° æ•ð›¥3 ¹Þ-ú--È…ÜHmŽãøºÚhï&üšÁC³ÄÜddM«+n$KqÊ+q >ñ*±›È±CõA™ˆã]ÐèR.ÝkŒ]ð¶ÒÔn­ÊQNmâE’¿œÄVÝâÅ\åÒ!Æù>t‚‰K ~ h–– JÞ,bbÄ.ÐI£3I. (RMx¯]¥- þšêØp :Òz¹pÞ¡óî¼nM_ÿ5ÙÔÕ‚tÇt&ôB¯ÅaqùÀ:iì;H¿îÛÝ;±UhÕè·ætR§vá¾BæZož×¡f˜°å[æb%§½Ä ‚¿¸ZUN (RáÌ kÎq/­§z³, 1¾Ûš`öOsL}Z}âêõlM1h»éòn²övœàöC&ù•Ðv–wGf¿ˆƒÞ­&8€v¸6J÷äb‚XZ.…FØÁבw¦m± Št%‚“‰ÃÑ•ìâÀ®Þ¦çÌÇZ Ãa‰¬@mªR”[‡Ï±¨–·ÄG©xhg»/ª´ëå;–¿ÏAFù›0y¸GqC_ qσ:C7AÀJGÏÿR[e±pt‰qü`€xWNugg¡7â­¢ dÐyúO=­dêœ4é̦ïÌÝü¬Šú møNŠK0„{ùúaïj!Dv‚ˆ¦¬fèÞN5àÖûJï{ž{š{ß •W»‹ a×eÄ¿ônŠ”Ü"|Œµšz—´ÉùvÑóyW.úòs–²|=‹Ó¸ÒèL4I­÷WX'ö˜0¹¨ø"dEêíj«€ªˆ¦3 ùŸ€`ÀÀ‡‚H $ñaƒ,hH(q¢Ä %®X‘"#ÇŽ?z i$É’&O¢L©r%Ë–._¶¤I&Í™6eÎÈÿ™SÓ ž>{ŽÌ£I(Ì¢F"MŠR¤Ò¦$3•T”'O&(&ÔÀà ^>`@BY­\I<Ðp@ V¯ È L˜¢ÄĈeZ°€u/VcI¬ð‹BÇyH õÒ¤Kgå€â.åÊ"æ¤ jÉIš/­uË tÙ·”ßZÐÖ+B-šàAŠ ~ ÈëE%Jl)|xF¦N#On´&ó›êm tÝS”‚mšpÂ_¸K×1ª@ Y±à‹¯x‘S×ñE% hÖs`–nõºVX,{Ø%žÒUpé]ÅGÚž•–«\¡°ÑØîS6’‡ÒÛ!‡yHÕí$KO²{¬Ã¡Ñ*Y Z(<ñÓCÿ±‚+ø ½ö d@a'ó‹[Ý 5T¥¯°·oúm£ãŒÓOá6.1ÅõóÒü¢.íb™ˆ@΃˜:`®šÛŠ;wžÏõ*t !SÌ&€v«BY Ð~~¦‘É"R\g.!‡äoiyÀà —†‡ªPw™hÄ%nÇ¡‘\s+󯀬à‡1SÁ`  6Š2\âó›ÀÄìÐBAj4”‰@Í3ÿÑ!PØÂ¤ùÎ1ì˜!1¼Üm&”'™D½RW@ôTÈ»P·b8P‰(k›Taî*™­<0f¤ò‚‚F[)>T€„%laÁW‹òP„M Y6°4½K}ÁìK>¸‚aþ¬³3E¦Oë‡ÓfN癥 Ps$Ô©U"ÆÇu1ŒJ9@Îö#ˆ Ðü\ùM>ñ‰é $1Z&*9‰ð¢°i˜nY_3®W½ì•$‡$^ùº­±>œît­KÂbTlv°ùœgš²\6"·É ‚ ™5ø#­µ0ŽNƪ–ϯÚ3w’¦4fevôêÕtÍU‚.Èá8XA & D[ ­{?¨C`<‰Û–*£HìôT€ —@ àÒt Ò”2Èi`@hdM[r'à ÿåJª“ÌÈW¯® C…:ÙvžÔ„€÷ƒVÞR x«”P€ËÆöwÍ…ì£T‡3ô±ˆRxˈ̲˜çâÚ‹.ÕŸõWátúb–x({»‚ê%ˆ‘AÁeè%5€Ó)ÀÁ·V ‚àAÀä`Û@Hâ¡Î*Q™Uÿ¸û±€¬G‚)ƒÜsAk]œ6íE—KßSÆÐµºÐná ÓB¹ƒÐ¥±×“›“ œgÄŒ*¨Ñ9@Þ_2¼° ãm3¡gÊ(„!¸ÉûzƒVJŸÝ𶘟èwo]T„n ¶a‡&‚ !@" 4ˆÔTpû awCÿ$‚ z'Ã20;œ€«´õáåP‡ßyº¡Ÿ¶íRK§–à7ïàˆN¶Ö`þ !ðËéââ´)w3±À¢ED€ ɵמ|¡ Ý^!«¬éŒ¡Ò«<ÆíŠ`—žýì±]jÐAb©t¤L½4ˆ¾©×YŠã‰–Lµ8ö°;lÝk·3ÁŽ}#]ß)xïä%òކD ¢µ@Þ^D<ò‡"ê†1<¿;@Â×ÂwÚmñAÄyãÕ¤!Äì`^´FDý´Ñ­À`^kQÕ( ‚œ\÷ìÛðÛ´Þ”YI„X#¼@™Õÿ±Iˆ›ŒW¯A?mƵäï1ŸEÉÒ –D _ˆM!¼ÚÖ ùhE½ÄKÔAQ[ÀÄNõÍTø}RtN¹]!ø­ T‚ÑpH!ÈßšAB"ØB@PÛÍßüÕ_Ûñ]™© åö”ÍpÀ‹åAŒ)^fÕ@à^à”5à쀜J‘ˆ`‘ ˜‹D8"èU@ @!ôÝ£œ$†ïˆèÙQ^X$’žˆ¼ñàA& QÈ¢€ ‚¨ t)ù—ÂÌñnÔÈ !#4ç„ 6¡Aaôõ›vaQdáN‘ÿªLcŽH#L@$hˆ!œa!d„¡cB LYð]¨#Î_!PA4_ ¬° /-Ú DŒAœâÂá9¢!¤!a\Ú@€„À¨@œ.À´@Ì]!$B"œ!ú½ â´Y‹!@ }\ͽF#Nà[À ÈàïtÒCDDOØâ”UMvOðßáô¸b<„ZhÔáŽO·½Ù„ ÔÕFùGoL´Dc6†J5ŠOQ¥Žl#Lp$¸#8ž¡ü%‚L‚Ýe€ LALÁ ‚W®%;><Á$ øNݽ œVMÅm¢ÿˆ‰È´ud¯Ð‹‰\àIª€C¾Få]`| T ¸ÞpÁ覒k‰¶„ê„@¶¡BA§Lšd„|¼]}ªe¯¢,]’4A!(}¾¡>ABäç§R¯Ö'"6à´©#4m²êèd ÂhêÛÉ-Pm4APÁZRÁ# 7ÈÂLÁÔÚk¾h (#£âÚø¸Óìð‡*áä6îÔ‚ „DJåÇS"Òr!,šÊÏÃ.,›ÿâ›RØxŠ®SD,KpXbl8Ú t8EÖ'Ýn}2íŒè<Úxø¬¬ i€¤hÍʽ¥@HªÉX[Êí!´]!¬ÁÛiÁZvkûjÛi@ª1GHf´~Öç È\}RA"Ðí{’è‰æm*3¯tph  Án‚¬W¾_!ð !PAצM€‰àââ«6©‰ˆ¡RAý¾‹N[F&iÀ/Çá?-±­D¼ˆSÈèdWwæ™4Çi3Ÿ®ÃBsQhu¶(žd$F‚!t%ååìZd ògþi¢NÏš…Ϩà¬Yíäáà@¥=êÀÍÈÇ ðÛå-d@*Ë2Ø]rÀF(ïÀ‘ñÀÉå<CÂag@6·E0dŸÎg~Ö&ÿÀ´Þ%Y¤€×:¡”ž8-½ä4 à³Eʶ¨6A”°7¯åó*üq¦¢ÑËø¦ˆÐók¦ÝQÀaZ@Ÿ>A ¿ßëö©ÛQ­Q¯f9eKMDF,ÿÍW33é‚‘×5l\y7K„5 4$ÂÅ&‚!„Ô\ˆø„tÞÑå\êô¤@dÊš…Wøˆä%”³&51òâ`(`‡IänbÛ_Þò.Õ6€$øóRNW¬1$PW.ô@ÁʬE8°¶ð5#Â([$ÕÚA¡|HRNˆH³öDv fÎç! Ÿ"oðç'·4È1 &Ëxu?ûš+}V©Nÿ*Ú%lêflt»„¦ÿvÏj{Û^àÇ1#3w÷py'WO œ‚yKœ·IˆØÜÉ_% lætA9×ìô ¬ô4@Á½Í5]CÁD‚︀k„FHêÀUÚWÈnN $ÁÜA¯kž‹g<…°¶Hçô«ËÔZd$>ûjß½Nß4Nd"¦Mu³öq†¢•$üé ÛwHåÃ:–gPv+’Á¾I§TaÕ/G¸Oؘ?3ïû¨X‚$Ý&$±ð®€$oøL ØÁä{9ËÁ½ÝAøÌ. ¬Ù좠,¯!¤€øL‚÷ Z!|@thB €ü’žhh¥ÑZù£ˆè‡½p@D,`p! 6DÈJ$V¬c  ÒdH8 Æ”$f”H`bEŠ2Ô´Ù²%2h¨)ôÑ”&ƒ~òœp€¥E¥4,$ñ*‰%¢–HQªÕ[¹r]ñlX°4ÿ•5{mZµkÙ¶uûnÜ·€4ѵ[/Ý{÷jšáðß²y4–{qbŋՒe¬xRd(†(JdÈŽ!9]ºèb'Ož­‹ p¶³¢ôd(vì@Y Cw`Cùzi¶¬)p`ÍŠUÃÕ….]Š<ÉY[©’žâW…%4dø°ú„۹'¬®°¡Cë  €BâL¥I l<`5æ.í5rÄ@å}ûQFœX3&¥(šÉ¢,ð ¨XpŠ)ô½”–ªHƒkrJƒ§¦Šê©Hèª+±DѱÇL<EÆîZ1/¿øú ÆÀÌ"̰m¼GMJÌQ-ã(é"ÿɹÖìø º€BŽ »¸£5×4XaIÖ\smI,K3Íã2Û ‡«|+¨ mE" ­€£Î* ¨ ï:ëìü.¡ºÛ¼ð°cT@á V@‚•\Âhö;‰?þHÈ?–PbÉV°À %"pB¥€á -š "A(,€É¥P-²i!›œÓ°¹ªÌ¼ ÄRðuDy–X[dQ¯eŒq°ÂŠ}ÚµvŒ64Ì‚4d’Ò0³³C¡HáŽ% A¡ Cº¶ä0—³ØPøµµ&¡(’29ìà ¢“7¯zòŽÐì˜$´ÀŠ3åÌŠÿ!çüÄS!„à®&>íÜS»ZÍC‚J]A=Eï€#R÷£Ï¤ûP&€ P#ÐØ 5ÂÛ3à‰B )dAÈÈàÕ¤2Ri™&ö.Ã[7¬ŠLv¬h¥žÚ,du‘¯ek¶Fª½ÆqÚg¶ãÜò¸Ã5;T°CŽ&ñUŽÈWÖÎM¡‹­Ø.íC  ÈC¿/É,.íãÛ0wÃ=‡–ŠK9$7“º~§ÊÊqÇñ„¸:›l²x»ì0þNƒO pY…'^µ¥öLÊI‚Hù `J ø…’nW Ä £ ÿlöt¤ƒe‚\µ%¡…•V…nMz¡"Sÿ«^Áúõ«­|M!ì¯ÅOÑj_ŒýŸ}Ã'–5s Éã´YcMŽw5£2rÉM5yÈ›y\À+±Æ ¤Ì$âg/Ð`ÅWcjÜtJÀ„”¤ròPu”¯«ô©NÚáNLŒÆ€‰H ca 7‘“¡VíÀ{"%4þ$ƒP0ªÖo)?´YGŸö¨ ˆÍ»ÑŠæ9éE¥zÖcÚnœÆ=¨½¯}Y­ ÆY]Óâß‚ÅaÂ^˜Á–!V. ±ãÉŤÆ&uÔ›kä&/Ék ±(do_“žU€ä„Àa@¾Gÿ'B,!2ZÅ2 º^§B—ºHR@oh ÁP’°‘œd‰!kÏ,i)+×É %àTë0ª²D?C“ÕçÀs+ IñzeÊÞÓÂbÅ÷š[¼šù”•>0Ò(šÙ”ÖÔÆ‚i昉W,Às¢FKrø²u/Øl N8—P¥{ef[¸±Ãº²›Êeh!IJKù&‚³$v"IƒXè GCáCB—±ì\'J¹Ô~² äî˜8 >à2|`&L¤¨l©aŽòdûù%~$‚‚J-Q£M1ÿ"5›GMQ&4‘™uÍ/~ É,>„px[§i4c( 5ÞëŸß ÌÈf5vx¯|ÓЄ=rb`@z p’ƒì7–ÜÜè9bzr¡¢EnxºÜ•òø ,`à.P5!HJ‰¦R[Jä¦úÁÉ4òË•¨òd*[ Fô¹¦³§È| Pwõ®yåWV”*TǨT¼0Uk\ã-Tw›¢Â,3w@Îýl#‡@€5sÍX¤NÛ\÷]_ѸŽÄ6)pnÄÊ$`¯,ë«A •Þ¶N aÏfåD‹=ôa]lEL"Pì‡e>lÏ XÙ2Êúðÿ†±JÉ~ƒÚŒ‚6%-Ëe40*ŒX=5ÛÏÐXB+ AQŠe2Óˆ…ZEßpïWÅ.û|›¬¬5U¸+Ž*7ˆz=© +0„" Ûã|eKïÊqù·Ïì± xPg!Ù¦A1ibN @@P ô•¥´€ƒ6bœ«ŽAL¡XˆÌ(ôœA&":ñÔ,'$~€.»´†û¡!X9É:Ãä¦ümKk‡'ŒjÁQÔ¥~©( ]*ЀgGÙaÔ˜Œ ñˆ)÷!®P‚ÞÖ T,㯵k}qMÍR›(2Mj Gå ǃµaýUlš»z¦€Î}ygjØf¿¸zº7'¾ @å„mj&Y>€žçªpÌKÊ^t½~›“&”ˆãÀ£‹¬¤ys˜3%Pg.çÀJ0É|É!ÐJ„³§ÒcÄyˆ"4•F ‚𬀠¸’ ÄË ÏÒ¾}Š­l)‡½÷ó7[yu«¥ÿ†jà¦/Æ×âÆCUM'2à¶Rž‡¯Þ:uÈõ¹g›­p,i88—yŒd­r©KAÅ^S®MÐdÂé)ËÚ&¡RÅ5#ÁCð>±™Ûáva»m   Cø( ¼Äü`í¦$%À‡@Ì!_5ÀÎŽ•9Ï)ªÍ ƒ—Þ ¤mTOèkÔù;1Ø b8Ð èš"¦’Òÿ‘臥Bñ‹xLÌù4™H-ò¤N³‹Õ .«=ŸE’#ÆäÇáÃqò€rú'øï»,Õ±5°áÌgrßêÔ\© ‚Þé¤'ÀEä•Ó†B<¢(ä¤ë ºÿX0¢»IEp€ø?!ƒƒš°XœÂ=ík§ãèФ!î Ù p ‡9XJЊ²¥ìP“” q®Ä5‡ È êP€ ž`PñíRTʰˆÎ)ŽÉò®çÉ6Ïâ4®ô ÉãDäHoÇçôåJ°a/4î ~`9ŒlJ<#6L£6ð€IRPr¬e€ŠŠÐƒ!¨#Íö =jbTFå{@ š¯¯Òx<)!H@2I"`Xâ |â'˜pü‚gx`æ@ÝÖŽ’ 4Ä ÖNö`Ýp–€©áj#fË8JPž€wP p B þ.V"ÿäy*†è`ËL|Šâ2{ªhCðF:ðÅF› Q|Q.2Á7‘``¯À0 ÀWÞ…×ÔåC‚î[ØÆ*#>Èf™º"ƒì„ ½F B@P^¥ŠRà ±°(¨àAçð`Š#º#üÆ  ¦àÐÖ£Ãê`ÝêŒÎÖ®Ivàò ÖŽ 7x 'Ä$XF#E*Ði‡cžà - 5öPImµ\Âÿ„z*Ðâö‘Џ-ñD$QÕ(q}’jþñ-*¡8q=1ذŒlbêÍËÄê^ò¦pØ)¶¥p懮ȄË,&i”Ç$zÃizÂù~¢P•œÿ@ ˜íSøDX…(x† šà×#%pàáN àè/4N`ýrð ÒoÎMÃŒ¿ä0‡èã¿üô0UGð(‚=^Ês¾ƒè:De‹Ë+Ò C ›êš 2-£-Û"’!Kðå ‹&å?Þ%+ À/`9îéIR@ˆl¶Ä$O,N‰Û¶C³HФö°{ºÂ#Ð %Wò# + Àb&†áTBO0Æ&Âgž  d‰R ÃÐ`ÕníH¢ìíJ dh ´öíf`¥tS#`n÷wäQS@Ü Ä³„fk,ÉÒ,÷1.ßRš|ÿëãd$ä¬óYªs-æ².Oðå&aÌ +aü=ÿ²`"K˜ë~–$oüiL‰;étR' Â`%³Š®ð2pË  þrO ”È> ªð¹Cv¢gšï#¸°Ò@rÒOçº _Å9Àäî$, nòï„ÑЭxÀw N"&Hg…8Å`¨**AGòp‚RˆÆ<ŸóÇ*°â”i:‰;½f-¿È©’Z¼S-À3Ñ«3eOðä‘O)çÓ>jPW  NÇ$P3‰x)ËÛ¶ƒ²u>¦º´€þÚí«ØTP*6›d0´þ†çܶ& ³ *8æëÐ q†mò@Àp–bE%"îBœB»ô‘¶Žô,}5Zv• ŸÊdSÿXÍBX+( #‘õBÈ&9ÆPVƒ a¢äH4S1›£‘R¢b2$PEii´zú+,€UT ž@•°Ç/`]mqP(+ÜÂNBGbµ\h_ë )i8×TЃ W@`“K'dòc¿X«e4Kì&PÂo?ÀºG PNG¢Ä5 "´†Æ°†OâBÖòÊr¶¨seŸe?°W'×FZV†U!7±0Œuê"Fûjâ)’Fs’¦aVgcC$n1êÉ €G‹3Ð"bHe ‹§—‚g«H%y¤€™å€ÃØ}rÄXG'áäÊ‚ǘŠ÷V%P…Ž9FSÅPt6*Z‘(zÿæ'zˆ(ë),@y-³²ìë¾®}A ™š ü$5IJNU’j±v]+Êt9¤a¶ !dB4£@…‘ù¸‹1„<n‰îV#ÄΕK‰‰ûöz â:(5Ì#¯dN)Ñ."R¤í†›¢§r…‚›CľØ7xeÇxkÊØŒÃ;ÓX-©j&adëPDdiï8i×—g¨` ˜‘(È  $ "XÅù€‡}ÁÙ”­ÇhKçtì TY%©`u%*Ø ™CÀrfB„*dBnGg• Ÿbž-Tì–'ÛC‚Ý—!¢Œ‰‹—‰;ªŽí8wìYdD+Rf¢: ÂȺÿØV¸>ŸG˜¹-UÖ¥#šÓ(a.5ADX¶ ,–ö+4åPºYžÛ—†"É€ V’ êuÖ™²â4 €¢€ØÚ¨ … ¦ºúï~ èHTR%-ÀCsÇ¡}:žœK LÓgzb¤Z @Y—6­z}÷š}ãÁn Â>…Â`™§( ˆ)noi9±÷V*ñLvHeé-ÞÖ∠-^@^|€ÊBá)¾Ý7>Ùó ÞïÝ´\1¨½,€€áÞ,XÀTåÍWÂ~¼S^\`¼/Þ,^ã9^ça½&>ߟB->ÕØÒ³×"áU~N~áW>Îá)Aøà\À0þæ!þè)žá-a绾Ô@rÌ D8ìIÿîÔ‰ ëi^åm>I#å,–<îG<îçœîá¾,ðï;´ÓbZŠëïùƒÄ¥eï߇ͷÉïÿð!ý±óžî‡ßjâð¿Üoà]×ÏBTŽ’^éãbbžããïóñç¾î—\î›[õG¼ôÉBðýÉg?õOßôÙ\vßõï-†ô ?Ñaßk„¿Õ…>;7=óSžá~ås¾-b€â¡¿,(A ^ö ,Áö Ê"æ)!¬žtðëžöiÿõk_ÍÏŸ¹ßýoýÝŸøÙ_öÙ_õã_þçŸþ hH° Áƒ*\Ȱ¡Ã‡ Ô4q`ň3ÿ&¤‰£ÇŽ 9Î9RÓ “(OÌ£‰eB.X¸˜‰0fÌ„‚fºx¡içž=.zÔŸž2öð)ÊSãËN¼8• Õ‚©^uʵ«W¡ŠjÕ €³gÉbUk¶mU«a-–ÛV®\¨_óêÝ›7nY¾€ ~Ò$É“ˆSdé¢!>м°éBÆÁ!, ÕD„…¦¥š^Xhƒæf HêB‰/Z´l_g…mWöì´i¿Ì»÷S¬°ÇnµûwwnÚÇq« ®•bp„»›³õM½º^±ÈæPÐÀŒ4( ÄG‹ñ ÄkR ©J•C‰ÜË×thcaÂ"+N¼²eDÊ.À4SSÖHÜo&¨à‚ ç^ F(!o ìA‰ 4ØÀÞ@åñá{ bQE{‹Œ8b{'„ß}†‘´Jý5æ:¹`É„8æ¨ãŽ<öèã@F´á†e‘¢Š,vXbL.æ_PF)å”TViå•Õ­¨¤~MªäŸŒX†)æ˜d–iæ™^iYØ’/zÉšpÆ)çœtÖÉ š;aolserver4-4.5.1/docs/intro/tcl2k/html/img077.gif0000644000175000017500000002505607363640504021215 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ q¯C¿j«Ü  ¯àŒ‡+.¬—0ÖÄ!£…,Ù­e¤p›Ò’;V§Ý–€ù6䛸´hÊ¢ñ™fü°òDɰS7fýw1cÔ¬]Îíx4iÙ¾yÓ>ãêÝ­eǾ üxòáÁ{G®xuæÃu_Þn1óRÎt~ÿîYy9õÚ¶S/O¿ÑuzëßK¿Î½ní‡åŸß]ÿõûéè='‘~îwÝ~¶ø\hêýWàƒÜE˜‘w4×YYf¨á†vè¡PÖ$Vxuñôá‰(¦¨âІ–M‰g"‹4Öhã8åâf#^8^Ž@)äD6´£…ta¨ÂçŸvB9¹$töQ)%Wž”¥–T†´eOGö˜ä(õgœ•ÐýfQƒÉùÖ˜›U.æœtÂÙs†µYjêygðýYžsî9h¡‡.ȧœ‰îy[&(ž„¾Y祆:š&o£uš(›n ]^Êu ¢f¨ò#‰Jéê«°Æ™zY˜«ú8ãY_Ff*}Ùí*ëJWæŠèP¢r'ì¯Ñz“­]•ê'“yfê$©hÞùߟ:l~›fz¨³³™™'›óÑyl£F{©”ÎÙéiºª½Ëi¼ô²Ë(¶Øõªm·ÙÖgï€Ý¢KÛ¹) «d"«ð•®0à L¢ŒWlñÅ¿•ªfHJ•pÆ ‡,²¬ÇXâÈ(§¬rÿ%#|ëÊ0Ç,s„-3;óÍ8çŒVÍc¾Ì%”‹2ø¬¯¿Í+íÀ à´” êÒ¦>-ÓJ \õ°€z»èEÔÆ§ïѽ^í4ÒŠe{ô³•6XX®E{û´¥nûêկ߉é±ÏUmûv¡{— nÜiûÕïÚH«wØZÝ0¯rÊmÙ¨­Û¥œROÎ(}Ÿ ¾ëÛ~ëKx¸}>ù¹ÕŠÚ;5Ðs‡Ø1Yëìúë°ÿÄóÝÍ’=)ØæÂû­íÎõÃõm'çQÝuk¹«ûäÙ'øß™Sjvæ:ÞWÖ Ží|åÈ7J/Ü߃zºð5ÎÎ:ÞykÎ_ïZso_¸ï°è̳¿¾qÿ–^¿üê]4´·[\g?ïEÏZäÛþç¹!î}÷ Yd>Ï /vÌ  F· Ùí| ¡Gˆ‘ RŒ„(LáMx2ºð…¯ca«`HâL†­3 ê8*•+NÂùaК6¸ÿI'tb AWDx51_>tŒÇ'D êÓž|¨(¿þ4QtÜÒ_™¨;êõð‰gôš¤ÄU^)L[#ÑöÅÃ3vñŠSÚïÅ;I9ó"á.— < /ŽbÜ ¹ÅÓE RPtœûÈF+þÑx“lä}üÅ;«¸Ñ†  %È>i$Sid`$ÍhǪq‘óᤢÇ8Ä%¦Q–‰d$,«ØJWêJìÙ’HKÅåQ•©´Ÿå˜J‚í¬ƒ"ªUϸ‚;N“xÌ¢T9:‡r_º”£ÉI.n™Ö &7_yÄ(¤[Þƒ 9NÅíqØü]Ø&'TJˆ”¢ ¨@Ð)…› „Øê¿Þ T‘ =æ@'ª•‚f¥rRÌ'¡¬Ó¹vn4“$ w)7Šš4(ÿ=©JWú¡”²ô¥0ÝŽKcJÓšže¦6Í©NÛÍ-kš; ªP“‚Ó¡õ¨))*R—ÊÔ(µ©PjEž*ÕªZ•ªVÍjS±ªÕ®•«^ «NÁ*Ö²fÙCCÊÐD8Éꩪ~J;ŸA ÙE®à„À%hH`ÍJØ Ùá@¢T¿Š °%l ^Ñ¡y*{Vúº4«ž…EÍ#kûK÷&×=ü H/ñ!avÈ#Œq4£¤!ë9L`˜~ìDºÙ8d !(9ð±<ÄÖpÈJ uà#?pH°ŽÀ¶«×ýHvk8Lì‚ F`9Âάb­˜>–õRiÀ‡‚q|Ä· k`ƒDÈZØþN”¿þ p(,àÃÀN0 ÿ¬àoÁg²ÚTOtR8мT#;3üÎGÔtÉËÞ:/ L}"g–f‚–樅Ï)1›m$‰w¨B#æ‡ 1f#å7’˜§8Ó°Ž[üÄø<ÕI»Þ¹äêYË@ãCГ‡¬ &‹ÒÆβ밬å.ÏŒË^³ÊÀ,æ2‡ŒÌfN³ÅÐÌ%È!Ž£øŒüÐ6ª²…j5Q|äçFsvSÎmâ0æ %SV+quvàÐÜ™HTÖ“Å›ª".oKÓˆÒÍó·«6ëÐrŸïâ©PÍÒYr£†žø ‡êîM¤ñßð¾ö<=£v‚–¾ÞãvHì@Hy¯žgè¼ÿFXûØ,þuQ<­æfT®«³ 5¿9hEÛ9~DÞ5¯@§E`Wڟۆज़VíDpwUé°ßÔN„–×#^¬ùì —»¡|Z´·§írù;Îïf ³}Ìè¢ nÎᨺšowÊkMãêäô ‡)ˆŽËÖWd¨a=oàAhÉ wÖ„HŒöЋ#wˆ^¿X Ú”¶³g®³Óüæ,ƒ¹4ëŠóžYçt¡Ï‡>2›ýè'2º—8 ,¦—ÉépìdI„%Iew¤Ô?q¦H¾¤õöœ²E@?˜Íî"hå¥üÏ|“úºÑÍñ#³]S—úóÈMµT3ëþÄ»ÕÛGI³íÿòþu ²åý–{×Oÿ¥º˜Ÿ釘Ò?%¨{íLºâ»åÃéº#´¿Ñâ58yЛ\Zè–8§ð%áПÛzà~5Õˆ§Gm_ñ}›£ßGG*ä©iµ¿×'ÿÎÞêU{ÎX”¼qTúÈcþb£aóOý¶L¿úØfãw.ôì{_H×ÿ¾ø¯~]U²Fk7}JÒïu¿ûÄ=Ùí:£ÎùÛ»ÊæçO~ÆmßË`[ÓyŽI³ÆIwnswxšdw–?r·àFl}ç€CG®FŽ46îvW|úaoûçJvÓBãVù—2åg]¸1NÑw-¨~Ï÷;7vQ×£WFY§{Ø!)Hi|t…{’„a”Ã/×Dm„jÄDR•ÈO—x0Vçda+w;O„l@øpS¨wÌ4)×’c·h¿´ylу%x†Ca†¢özdo1¨‚Eñ‚hølÛt2·î3jˆ||Grñfp…§|8‡9£† q]|XG„Ø_†¸ˆŽxøˆ’(‘8‰–Øÿ•x‰šXB"h23´‰ XQè2¡XŠ\‘‰¦˜Š¨˜Š¥¸Š¬Š®øŠš‹²h‰´X‹’x‹¸hf…p!ð€ð ¡T: YØP‘YY´eMð( ´•ƒ…’U[Ü( ‘·u[»˜fà~pð€‰£8v‘µX·eúèÓ€ ©  &°àºP¡`ø0€âˆM0Ž!` ÞøWäØt¢¥k–ÅY·á{iãY’²‘!Z×CZÉ‘%)8ºVZ¹aj9³ZjÁ_)03嘓2@¥“>™T<És?9”$¡‹Dù}Fy”Ù—”JY}LÙ”Î÷”P yÿW–ãkxøPmxI9ˆHés‚!4–Sø7xH&‡ä–vkæGi8–iétpIsùUAÙ}M×zWr´fn:FcVÙ—òä–Uƒ:>4k¿Ög‚Ie†×aÅeƒ£(âÆ˜i‰9={gCJW{ ™0Viš–ÛDe›dqÜe¶—n'l‘@ƒé˜#gu‡é™R†™C6›Ôaev—wxˆ+h™ª™YÊ^w•£Ù˜…©pkùšÙ›¬†œ—dbó˜Ói›Îy–‚™diuBR9•G÷à9tâ9ž=Wžæys虞3·žìÙlîùžiŸòYfôYŸavŸøÙe´¨–Øb¹•K·ÿ–* 8þ©€GF†n6„eš;fwªjZ€Ñ“œ „Š™ž—¡;hJöW,Á£4üÆJUFuXF ‚¤³|)*l{tW NÅ›——Ç’ˆ3*L§Ö£**Ao×£Çd*·vXh€IJdìñc‰§MJÚM÷š,z¤…G¢}HqÁ·¬GhÈxÐm9Jƒnö¥Ô9îçCªPÿæm™¶G¨js$§ú·?ÕR[“wa¹ƒ˜S¥¥Qÿãaûã£ÆvMðÓ/ü';8J‚û9žÿúÙ¨ÖŸ®§dÚ9 ê:çò¡‰ú†|61‹ú‰VÑcUBꥲÖkƒT€#·I'©zCl^ˆ(é¢U¸‡c¸o2º{”DDÛƒI*7¢zIl³*b¹êd5Èr¹³¢Ÿº_¡šCIA§›úË ¥Ü–xì¶¡ŸGFq÷£nØ~´'¢pˆ{j—¬µ¶¥¢…®#‰'ÆI¤‚˜oS w¸zm¼z¦Í·¡šX“P_¸ìw•ø tbÁ hýqzv¢á¯øvšÒÊCõÖ€²DqÚ«›öy‹ƒ[°Eêj‰—še! © V²&[`(›²¶²,ˈÏúF/‹‹.;³fU³Û6+V8›³^µ³<«U’*š3h~#;®k} H¯Lz¯ÓútqXdL«ˆ<³µs|ÞŠšghƒi÷QƒqYÒ¦¼ÔË©“ {zM p‡gn¦¦‚¨Ë8×ú¤#DRÖGµdç uŠ/2èrHj¥G·où0þ'( £S¨ šZZ‰êª…úbx¤ h|{…hÇD®6©.×´DÅ·Yy¹{zMˆ¡Ûªo«Ûš‡Øª‡ §´Ø³k¨i…êºÇjµ[@®›lFŠZh£¸³œ­Ö©ž$º?«“ÿ>›¼Uõ”Ek¦Úµ±'øE9¸†Ñ낞k 0¨™È›•YÛvìʰY ge„ˆ÷®$»†¶Lúzyí–O8vp?ê?£u‹°}ò{~†¦ÖöJsvgrË|Ý{ࢸY¢k@ E¸›¶¶tª³7L‘c¼“[¸z£šï‚€ÊZrü¿y÷‡¦[º¼ ¨‡å3À£ê¡ŠÁ̃¹–jÉ×Y(jv.º¦&®ÛšÀàë¦DÆJª°k*XªB|¬—åŸKA(Ü”A*µò¼´¼ÌUT\Å[ÕÄX¬ŠZ¼Å­ØÅ^ ‹`Ƴ8Ædl‹f|ƹ˜ÆjìˆWœ!ì—œ—e'ÇØKR¼’+qÜ~ëWº™G—æÚÀ‡HĵnQ–~»´K†ãº¸ ̱ ,=Áº¤KÄm;™4¼¹KZ¯óZÁ“\¼ 8ÇÊÀ©ÚkD:¸\G„Pœ†lL©g¡¨ê¸5ª Žü­i÷É·*± <¤u$r½üÁÝJˬÌ™ìˈvº©,Ë¥:/ µ1ügyœŒ¯ÜÆ 3Í6ÿòÆÖL–ÕBØ ½­l´vň\c݌ǹFxÆRζÜÎX§w\Y6úÍWÇÎÇ[‡bד£ë®üÌ£%\?€KÈßêÏèëÀ¿¬­òÚº›Êl؇!fÀ hÃçË$Ü̼†µ*Ëô‚ø<‚¢š>£<ÌósÉé,kýZÒ³|Ê']¼¹g¹X7ÑêK>@l{.šÜИç§f ™ì#ÉIwÎÛ,~ÚÔ4µÇOûÎàLÔgÔÕ»Ò*¿ÖëLJ¬Ô7ÅÔïWÄBº-Ê´ºW‹Ã ÒÇLÕYaÔ·ÚÒílÖJܶX 8ñ*ÖcmÕ¸PMÊn]tp]×áy×xMžz½×çÙ×~­ž€Øí9Ø„ Ÿ†}Øó™ØŠmŸ´ŒÝØùùØÍŸ’=Ù$[Ù–Ý`CÙ4´Ùœ-}˜ýÙ*ڢݲ¤]Ú0ÛÑž­¨sžÝÚ+tÚ°]V¯=Û&۶ݳ¸Û@»Û¼}U¾ýÛ%q ¡ ¤Ú¤(Ü„¥Vø€1à àÜ| ÊMÌ-Vìp{P b@ßÜaêxŒz‘%" ϸD !¸Õ!ÀÞø •Ý!Ôw€Xí¸œ@ÞÿÞ!¦ç ÒèŒð~Ö¥ZbÏ&U @@  Ö]ÞÜ×›Ñ)`¹YÕàQ ^Ïp´Gì—Àc’³û+/ ¹ñrÀ+Ä9þ':þã8>I;2ÙòÌ òÀX`ìŒÁ%JàŒµñ ¸Ðº`Ø`;` ¤` ø@Ñ%XØ`ßܸ¦°æ¸wÁ–¹‘,’4¾Y sã"Ùãt.ä|ZqžÄAþ’iÒ’$‰©-9Ô^Là5 #êåôe_ÝQÍÌõŒéß…€IpI@0#  ã5¬0¬Ž#€–hp½ ñeõu¾à¬×­ÏœŽØøl2 ñѽÙbÞÁÎÚÃ~ÙÅâqì2›ìšÝSÆžàÐNì4íÂ^í‘*íÌîÙ®í æ"ØŽìà>ÚËn‡ÍNíå¾íçžÏQáìë.fâÞíðï^6ïèîíänï……ïîžõÎïÊ~íô®î/`þ>‚ðáÎíù¾ðU‚‹|‰ÿ ì¿uä‹rÝ—î6uÛ–v§þ u,6“1eÍëðÿ~ÿ3½c#ñ÷jªÅéƒXôδñF¡óAUñ$ÒòŸ¶O@¬µKÛœŠ zsÊ6™ špk­¾Û¿&ÚQ5õ |ó¹é»LÏÈ/¶–9FôåóôA?¿ô‹°Õ†gÃÞD?fßœ>X™„ɾâÆô|¦ön¿>Œ÷hDRfß@ɨzo±_¯ò ñO ¬p¯¡ie€I¾wB¦ø©ùϸ)ù&4M–÷?V©Û9§—¿š/¼˜öt!öcÿ¢3 ó*ÖQB+›Žù¶”´”Y›Tïö¿)´™›Õ ú¹šÿyŸ¢Ÿú£Oøÿí2§“Ÿ™S?š¥)…¶ÊGú¶òHO›—üÀ™ýg«ûÔdº¹›í^øÆ/óV_(ÌòÎÁòýPëù¤ ÃßûèoôÖŸü×ù÷XyõßÀ D˜PáB† >„QâDŠÒ‡QcFŽ‹|üˆ¯ˆH’#n‡ÒbEƒ-¶<˜Ð%™kÚ¤3§Nœoîh“§C˜/uÍIéßFƒâ[ºêP¡O{2úófÓ¨5¹fû´+O©SÅzEkÕìJ¶mݾ…7áFºE‚™·$A”*å6l*t¡Vªf¿ªZ+b™Øe}ÂTl¸0d¢‘7X)åѶªY²SÒ;1cþL•óaÕaÿ¾†[¶Äºµï‚Ü«÷dÊÙ½}ÿ\øpâÅGžüµíºxõ>çË[ùtêÕ­_Çž]ûvîsíÚvž›än¿ÝÍŸGŸ^ýzöí'2·ºIÞåÝßÇŸ_ÿ~þýÂßH>ñÈó¯@D0A—û®A¡#pA '¤°B Û£÷ŠðB?1DÌpCÝê1EWdQÄ =ÂK<úúj±FoÄñ¾o i¾èìË1H!‡$2ÿ¸MÅ"—d²I'):2F;|²J+¯2JܦTK/¿3D-{°Ë0ÏD3MÿÆôqFéÔ„3N9ÏcSÆçÄ3O=“«“K÷4PAIl0@)ËüsPEeô¡>}³Q–D“ÔBË`»SÆÜÊÔÈBã;B3±óŒÒû:½,9°Ôs¬ÔUUŒ U‰d‹ÖˆlíQQÍ× }Õ4¿²& mSc5v%`ÙZ–¡fÿÒ•ÃQc3u°M]ÝÌ1Éò,[ζÝÙª@s5-—JwܘÐ= ]u“Åö]ˆÖ= °zB*^pÛõv¬Ìºí—,wñ-ײxõ8©pFàp“.ÿÚyÕôÛ[ 6ê*g‹e1z¹1_mMã©B÷äŽ3VÙäÍXNØÞ•7~Yd–g®Yå’[žõÞž^µ6g¡C>yggâ7gn=¾V  •“8IŠ_øâ m¾4柙¹\šy&™kžÁæøÝÔ°[k›qµ|MÚíÔæº]º;ëŠí¶•ûfœŒ^· «´^fvÕzV®¨Ý²b‹ˆ5+”ÏF›hÉÉ®rX …éÒVùFWŽW}ÉË"y·»ÅôõV£©¤‰tÛG!º1¦æj¢¼ö>©4Ÿª„])Ñ‹PÕÖIŒmwÓkÞeNÖÜfHMÈ»XÒö¥FçAõ94àJÔÁŽ& !'Ûhz5‰<¦"¡©Ëµ;¼ØÅ­iwˆÈJæšnßA¹Û`ÛŸ~02óK»ØqR›ÚÃá9M)^±Ä76L"»ó­¹Ö‹.l`ÜÒkîŒ.±‰ÃÆ—Ùi>áy)á#ßÄnˆ•ì㒘ͭڛ‰ŒGÙb™ºZ5pý&FP묗£¾Ixgþžù¼6e޳[ß%»„ö¢è!‹‰H]ÒÒ{–´ ¹;E¯¥²Ê]pAÍ-gÖÕ`jõ«em¥XÏÚÖ,ÿ ´@íGè[÷Z³¹&Ó@]HMâ”ÖØnO–¥Ûf_ >Æéy”\ÐNzÕUp°ä«Ý"S»ËNæáis˜¿ZkºÈ6²uéb嘳Ûàþ6³%4mû¦œí~YÚ¼ªMÀ‘s™búf˜Þu¥~©oðš/ʘ„ÙlQy¥Ëßåeø¿ÿ‹_ŒtÈ*·rë¨æ(ÜÊì6³¸O§h¢\Ó+?eÀMjf²*>ôDq)Îg²å•7sy i …¼Úô]0g~ðŸ:èϸ‘Ù]Ï­åMÞÞ3œ{ëËv&˜Ÿûºµ^HŸó›Êš:*ÉŒîü]Y#¯0µ;׎ÒG8„ì4ÍœÑMº[Ã3á3ÉO’â.ÀñU±£½,f3~Ùt®»Þ/äö·g¼¿_äE5ÞÎâ9çï~tv—)Su;Äã)Ö÷‰ù’ºf¤GSoD/®hôjÛ´2ÛñCùf×j´$6½÷ÄûÞÇ0´À¾îko;á»øÏ?ñ¡?} IŸú×Oõ±¿ý51ßO¼æ~øƒ¤}ñ—CÞžùÕ?~ô {ýï·ùá?ìÿÈŸþ÷ŸŽýñ¿ãèŸÿÿ÷”4©?4Àýð¿T@gûhs¾„Àó@]´a‹À ,° ¶]³@ ôÀªj?üÀD$Áü¬À BŸc»B{A‘;ƒÛ­»S¾£3· s$ÀDác•Œ7ÒB™S•ÖÂÙBTÂì> ¼·"ž…“¥ã˜—¬»¹Ä³nÒ8|Ã. ÎS¼-D©Lù.j2Ø‹©ÊA¦ÉRb2[0Ùa±L[j¹¼’A(l>)” ´Â„{$"©{bNc'²¡ˆ‹$+ë(;tI,Cx꾉¹ CÂP›¸nª1Úÿ‘±[ ³Ìû»ÓãÂø’º¹·þãAkBAì)Vº˜CË£ÖòDˆjÄÍû¹"J;;bÃU£°M‚9lz¼9#98ã(,,=³‹ÅjR²°I=K«Ä%L«VŒ¶áê¬4«*d=;)ðAB(#ÅtÃ$œ›'/£1ÆëŨK7cü#´¤{(Hl¼a,E“»DL[Gª3=@óÃïóÁ=q„C¢ë¢/Ûœ^Â1Õà³M´Ä/’¤—­3E^œ;7c&š»CTûr:)(z½ÖÃÄBL•‡È]ìÃùq@@œŽ²žÿRÇWZCF”GMºl"5„;¹ ·¡IÕ›4&Ô"šœ$¢‰8Å[£Î!Xº£78: G¤±Që”=\Åâ0Aœ“l¬’«ÄÊ3IµzÿûÇôëʱÌ?k|@²DKi2K–„A}©dsBCT9ß#6u“6¶£FjËK£ZËÊ·Ãûȸ,޽ìǪDÂ$Gþø,ÄœKëËD®Â'mÂC?êÒ«%Ž#ŸäÉ:L£“©4 ÎÄ›It¼£¼Â8¼ÈÑ8C™$Ä•BMŒ5ˤEáʾë6ž ;Á¸Å:3× ÉÓäÈQ”LÎѬ8MeI}¹‚\R¨kN]"ˆ6\ÍÉ>UÕ‘Ô{ ³ÔašECÉcœº„á¢LÍÕ”|¶tE,åÕDsH½[1Ù+§·Ì±=ÖU‡åTjÖZíÎü4NGÄÉO‚2\½VÍÖÙ‚ÃÙÓÕ‹±^e¢×0EÓrÝÁ°t¿y­Å3Vz…“D5¾&ä׬ò×€5¿%Xñ3؃径UXìc؆¥¾‡…Xè“Ø‰-¾ŠµØfÃØŒíµåX[󨕵YW#ْŬ“EYÊRÙ•…¬–uYÆZ‚Ù˜E¬™¥Y²ٛ¬œÕY¾âٞūŸZºÚ¡…«¢5Z¶BÚ¤E«¥eZ¹:×§EA§•Ú°¢Úªµ«¨ÅڼڭŪ®õZ½ÒÚ°@°%Û§2Û³õ«±UÛÿLÛ¶Eª·…[ÁbÛ¹å?¹µÛœÂÛ¼5¬ºå[úÛÛ¿U À\ÅòÛÂ]?ÂEÜÿQÜÅ]>{Aǵx o Ê]‰Æ•\/i„@†¶ÐÜÍepnÀ‡O€ €‚`‹]Ñ wHˆ<À‡D€H€vÀ‡>Hˆp Ã…ݾºƒbÀ‡ae€[ƒlÀ‡E0×^·˜‡àU*{x‡m0†GP„C„=؃ €0BPGˆ„dè†Õ­FÈ]A‰ †@P0 ‡… .P((À‡ Þâ„=ÐðK]ूà0u ˆp0`ÿE(00‡T tà |`‚ð_>àÿq€ðƒï%0È ` «š‡0 þà„Èá@h(iÈY ˆ&ˆÈ‚Î`ž`khaüJ˜„9ˆ € €I8ÿ.«òú…|½wz½ß„×6ÌôAœY)Ï"ÍÂÍN=FÅ A‰FÙ¸pƒAþ³­Ò…Z€Xèa –à‰QH6>V:‰´Â6 ‰låoÞQVNåô°*>ãHV!Î`†Ø¦|@8T0àHP.X(à8W0`¸ç ZÿgaRen–;”ñ,n¾fm ÁãŠ&ç?¶ÄkNå?L9gõØ+'¨(øÈ` ö…°‚Ð…r _|È‚‡Wðßø‚XP _z ÿ5 O˜‚gð éá¨(=iÏm6Ó:ÖæVf£S|È MS˜$jè¶x‚  &À$8‚ ˜jP… ´¦´Æ‡ À‡3H^øº>º^‡^`ˆ»JZfâVèù=Ä"Påjª (…h`#`¹ˆU˜€U¸¶ì pƒ4À5ÍÖì¹Vƒ¾Ž^|ðú•àk¸b¯šrÈ®ˆ78ƒ‹íÔöµ×¥ m<±íÛ–“ ;aolserver4-4.5.1/docs/intro/tcl2k/html/sld001.htm0000644000175000017500000000210407363640504021216 0ustar frankiefrankie Tcl in AOL Digital City

First   Previous   Next   Last      Index   Text  

Slide 1 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld002.htm0000644000175000017500000000166607363640504021233 0ustar frankiefrankie Welcome To Digital City
First   Previous   Next   Last      Index   Text  

Slide 2 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld003.htm0000644000175000017500000000265607363640504021234 0ustar frankiefrankie You Just…
First   Previous   Next   Last      Index   Text  

Slide 3 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld004.htm0000644000175000017500000000233007363640504021222 0ustar frankiefrankie Overview
First   Previous   Next   Last      Index   Text  

Slide 4 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld005.htm0000644000175000017500000000170607363640504021231 0ustar frankiefrankie AOLserver and Multithreaded Tcl
First   Previous   Next   Last      Index   Text  

Slide 5 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld006.htm0000644000175000017500000000306407363640504021231 0ustar frankiefrankie AOLserver Background
First   Previous   Next   Last      Index   Text  

Slide 6 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld007.htm0000644000175000017500000000266707363640504021242 0ustar frankiefrankie AOLserver Basics
First   Previous   Next   Last      Index   Text  

Slide 7 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld008.htm0000644000175000017500000000260707363640504021235 0ustar frankiefrankie AOLserver Tcl
First   Previous   Next   Last      Index   Text  

Slide 8 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld009.htm0000644000175000017500000000251407363640504021233 0ustar frankiefrankie AOLserver Tcl Model
First   Previous   Next   Last      Index   Text  

Slide 9 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld010.htm0000644000175000017500000000302407363640504021220 0ustar frankiefrankie Example: CGI-style Request Procedures
First   Previous   Next   Last      Index   Text  

Slide 10 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld011.htm0000644000175000017500000000315207363640504021223 0ustar frankiefrankie Example: Database Access
First   Previous   Next   Last      Index   Text  

Slide 11 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld012.htm0000644000175000017500000000260107363640504021222 0ustar frankiefrankie Example: Background Tasks
First   Previous   Next   Last      Index   Text  

Slide 12 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld013.htm0000644000175000017500000000264407363640504021232 0ustar frankiefrankie Example: AOLserver Dynamic Pages
First   Previous   Next   Last      Index   Text  

Slide 13 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld014.htm0000644000175000017500000000261307363640504021227 0ustar frankiefrankie Example: Simple ADP Template
First   Previous   Next   Last      Index   Text  

Slide 14 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld015.htm0000644000175000017500000000220107363640504021221 0ustar frankiefrankie Example: ADP Debugging
First   Previous   Next   Last      Index   Text  

Slide 15 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld016.htm0000644000175000017500000000226507363640504021234 0ustar frankiefrankie AOLserver Multithreaded Tcl
First   Previous   Next   Last      Index   Text  

Slide 16 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld017.htm0000644000175000017500000000252107363640504021230 0ustar frankiefrankie What is Multithreading?
First   Previous   Next   Last      Index   Text  

Slide 17 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld018.htm0000644000175000017500000000264307363640504021236 0ustar frankiefrankie What You’ll Want to Know
First   Previous   Next   Last      Index   Text  

Slide 18 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld019.htm0000644000175000017500000000262607363640504021240 0ustar frankiefrankie What You Can Generally Ignore
First   Previous   Next   Last      Index   Text  

Slide 19 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld020.htm0000644000175000017500000000255407363640504021230 0ustar frankiefrankie Why Are Threads Good?
First   Previous   Next   Last      Index   Text  

Slide 20 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld021.htm0000644000175000017500000000453407363640504021231 0ustar frankiefrankie Example: Event-Driven vs Thread I/O
First   Previous   Next   Last      Index   Text  

Slide 21 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld022.htm0000644000175000017500000000203607363640504021225 0ustar frankiefrankie Why Threads May Be Bad
First   Previous   Next   Last      Index   Text  

Slide 22 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld023.htm0000644000175000017500000000255707363640504021236 0ustar frankiefrankie Multithreaded Tcl
First   Previous   Next   Last      Index   Text  

Slide 23 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld024.htm0000644000175000017500000000262107363640504021227 0ustar frankiefrankie Multithreaded Tcl - Mutex Protection
First   Previous   Next   Last      Index   Text  

Slide 24 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld025.htm0000644000175000017500000000273307363640504021234 0ustar frankiefrankie Multithreaded Tcl - Thread Local Storage
First   Previous   Next   Last      Index   Text  

Slide 25 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld026.htm0000644000175000017500000000302307363640504021226 0ustar frankiefrankie Multithreaded Tcl - Event Loop
First   Previous   Next   Last      Index   Text  

Slide 26 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld027.htm0000644000175000017500000000267207363640504021240 0ustar frankiefrankie Tcl 8.2 Multithreading Issues
First   Previous   Next   Last      Index   Text  

Slide 27 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld028.htm0000644000175000017500000000272107363640504021234 0ustar frankiefrankie AOLserver Multithreaded Tcl
First   Previous   Next   Last      Index   Text  

Slide 28 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld029.htm0000644000175000017500000000244207363640504021235 0ustar frankiefrankie Multithreaded Tcl Interp Initialization
First   Previous   Next   Last      Index   Text  

Slide 29 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld030.htm0000644000175000017500000000251307363640504021224 0ustar frankiefrankie AOLserver Tcl Interp Initialization
First   Previous   Next   Last      Index   Text  

Slide 30 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld031.htm0000644000175000017500000000256407363640504021233 0ustar frankiefrankie First Solution: Interp Pools
First   Previous   Next   Last      Index   Text  

Slide 31 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld032.htm0000644000175000017500000000241307363640504021225 0ustar frankiefrankie First Solution: Interp Pools
First   Previous   Next   Last      Index   Text  

Slide 32 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld033.htm0000644000175000017500000000304207363640504021225 0ustar frankiefrankie Second Solution: Direct Sharing
First   Previous   Next   Last      Index   Text  

Slide 33 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld034.htm0000644000175000017500000000245107363640504021231 0ustar frankiefrankie Second Solution: Direct Sharing
First   Previous   Next   Last      Index   Text  

Slide 34 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld035.htm0000644000175000017500000000277307363640504021241 0ustar frankiefrankie Latest Solution: Interp Cloning
First   Previous   Next   Last      Index   Text  

Slide 35 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld036.htm0000644000175000017500000000242707363640504021236 0ustar frankiefrankie Latest Solution: Interp Cloning
First   Previous   Next   Last      Index   Text  

Slide 36 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld037.htm0000644000175000017500000000230207363640504021227 0ustar frankiefrankie AOLserver Multithreaded Tcl Examples
First   Previous   Next   Last      Index   Text  

Slide 37 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld038.htm0000644000175000017500000000250407363640504021234 0ustar frankiefrankie Example - Creating Threads
First   Previous   Next   Last      Index   Text  

Slide 38 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld039.htm0000644000175000017500000000271207363640504021236 0ustar frankiefrankie Example - Sharing Memory
First   Previous   Next   Last      Index   Text  

Slide 39 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld040.htm0000644000175000017500000000257007363640504021230 0ustar frankiefrankie Example - Simple Cache
First   Previous   Next   Last      Index   Text  

Slide 40 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/space.gif0000644000175000017500000000016507363640504021270 0ustar frankiefrankieGIF89a ³€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ!ù, @"ðÉI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï¼;aolserver4-4.5.1/docs/intro/tcl2k/html/sld041.htm0000644000175000017500000000334307363640504021230 0ustar frankiefrankie Example - Real Cache
First   Previous   Next   Last      Index   Text  

Slide 41 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld042.htm0000644000175000017500000000260007363640504021224 0ustar frankiefrankie Putting AOLserver To Use
First   Previous   Next   Last      Index   Text  

Slide 42 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld043.htm0000644000175000017500000000167307363640504021236 0ustar frankiefrankie The Digital City Platform
First   Previous   Next   Last      Index   Text  

Slide 43 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld044.htm0000644000175000017500000000206007363640504021226 0ustar frankiefrankie What is Digital City?
First   Previous   Next   Last      Index   Text  

Slide 44 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld045.htm0000644000175000017500000000260607363640504021235 0ustar frankiefrankie The Digital City Challenge
First   Previous   Next   Last      Index   Text  

Slide 45 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld046.htm0000644000175000017500000000210107363640504021224 0ustar frankiefrankie And Digital City Must Scale
First   Previous   Next   Last      Index   Text  

Slide 46 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld047.htm0000644000175000017500000000207707363640504021241 0ustar frankiefrankie The Digital City Architecture
First   Previous   Next   Last      Index   Text  

Slide 47 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld048.htm0000644000175000017500000000300607363640504021233 0ustar frankiefrankie Digital City Servers
First   Previous   Next   Last      Index   Text  

Slide 48 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld049.htm0000644000175000017500000000302507363640504021235 0ustar frankiefrankie Some Numbers...
First   Previous   Next   Last      Index   Text  

Slide 49 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld050.htm0000644000175000017500000000234107363640504021225 0ustar frankiefrankie Examples
First   Previous   Next   Last      Index   Text  

Slide 50 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld051.htm0000644000175000017500000000276307363640504021236 0ustar frankiefrankie Example: NV
First   Previous   Next   Last      Index   Text  

Slide 51 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld052.htm0000644000175000017500000000264407363640504021235 0ustar frankiefrankie Example: NV
First   Previous   Next   Last      Index   Text  

Slide 52 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld053.htm0000644000175000017500000000301207363640504021224 0ustar frankiefrankie Example: Proxy
First   Previous   Next   Last      Index   Text  

Slide 53 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld054.htm0000644000175000017500000000307707363640504021240 0ustar frankiefrankie Example: Proxy
First   Previous   Next   Last      Index   Text  

Slide 54 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld055.htm0000644000175000017500000000252307363640504021234 0ustar frankiefrankie Example: Sob
First   Previous   Next   Last      Index   Text  

Slide 55 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld056.htm0000644000175000017500000000302407363640504021232 0ustar frankiefrankie Example: Sob
First   Previous   Next   Last      Index   Text  

Slide 56 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld057.htm0000644000175000017500000000217507363640504021241 0ustar frankiefrankie Sob-Powered Publishing Tools
First   Previous   Next   Last      Index   Text  

Slide 57 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld058.htm0000644000175000017500000000244707363640504021244 0ustar frankiefrankie Extensions Working Together
First   Previous   Next   Last      Index   Text  

Slide 58 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld059.htm0000644000175000017500000000226307363640504021241 0ustar frankiefrankie MovieGuide
First   Previous   Next   Last      Index   Text  

Slide 59 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld060.htm0000644000175000017500000000226607363640504021234 0ustar frankiefrankie MovieGuide Features
First   Previous   Next   Last      Index   Text  

Slide 60 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld061.htm0000644000175000017500000000247107363640504021233 0ustar frankiefrankie MovieGuide Components
First   Previous   Next   Last      Index   Text  

Slide 61 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld062.htm0000644000175000017500000000243407363640504021233 0ustar frankiefrankie MovieGuide 1.0
First   Previous   Next   Last      Index   Text  

Slide 62 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld063.htm0000644000175000017500000000266507363640504021242 0ustar frankiefrankie MovieGuide 1.0 Issues
First   Previous   Next   Last      Index   Text  

Slide 63 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld064.htm0000644000175000017500000000255307363640504021237 0ustar frankiefrankie MovieGuide 2.0
First   Previous   Next   Last      Index   Text  

Slide 64 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld065.htm0000644000175000017500000000206007363640504021231 0ustar frankiefrankie MovieGuide 2.0 Issues
First   Previous   Next   Last      Index   Text  

Slide 65 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld066.htm0000644000175000017500000000261007363640504021233 0ustar frankiefrankie MovieGuide 3.0
First   Previous   Next   Last      Index   Text  

Slide 66 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld067.htm0000644000175000017500000000260007363640504021233 0ustar frankiefrankie MovieGuide 3.0 Success
First   Previous   Next   Last      Index   Text  

Slide 67 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld068.htm0000644000175000017500000000250507363640504021240 0ustar frankiefrankie Monitoring Performance
First   Previous   Next   Last      Index   Text  

Slide 68 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld069.htm0000644000175000017500000000207307363640504021241 0ustar frankiefrankie URL Stats
First   Previous   Next   Last      Index   Text  

Slide 69 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld070.htm0000644000175000017500000000212107363640504021223 0ustar frankiefrankie Tcl Statistics
First   Previous   Next   Last      Index   Text  

Slide 70 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld071.htm0000644000175000017500000000264007363640504021232 0ustar frankiefrankie Anything Specific to Multithreading?
First   Previous   Next   Last      Index   Text  

Slide 71 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld072.htm0000644000175000017500000000201507363640504021227 0ustar frankiefrankie Cache Statistics
First   Previous   Next   Last      Index   Text  

Slide 72 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld073.htm0000644000175000017500000000200607363640504021230 0ustar frankiefrankie Lock Contention
First   Previous   Next   Last      Index   Text  

Slide 73 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld074.htm0000644000175000017500000000214407363640504021234 0ustar frankiefrankie Overall Performance
First   Previous   Next   Last      Index   Text  

Slide 74 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld075.htm0000644000175000017500000000162707363640504021242 0ustar frankiefrankie Wrap Up
First   Previous   Next   Last      Index   Text  

Slide 75 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld076.htm0000644000175000017500000000202707363640504021236 0ustar frankiefrankie Who Developed and Operates Digital City?
First   Previous   Next   Last      Index   Text  

Slide 76 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/sld077.htm0000644000175000017500000000254407363640504021243 0ustar frankiefrankie Where To Get More Information
First   Previous   Next   Last      Index   Text  

Slide 77 of 77

aolserver4-4.5.1/docs/intro/tcl2k/html/ielogo.gif0000644000175000017500000002056207363640502021454 0ustar frankiefrankieGIF89aR‡ÿÿÿÿÿÌÿÿ™ÿÿf™™3™ff™f3ÿÌÌÿÌ™ÿÌfÿÌ3™ffÿÿfÿÌfÌÿÿ™ffÌÌfÌ™f™ÿf™Ìf™™f™ff™3ffÌff™fffff3fff33ÿ3f33ÿÿ3Ìÿ3ÌÌ3™ÿ3™ÌÌÿÿÌÿÌÌÿ™3™™3™f3fÿ3fÌÌÌÌÌÌ™ÌÌfÌÌ33f™3ff3f33fÌ™fÌ™3Ì™33™33f33333333™ÿ™Ì™™fÿfÌf™ff3ÿ3™3f333™ÿÿ™ÿÌf3€€™Ìÿ™Ì̙̙™Ìf€€€€€™™ÿ™™Ì™™™™™f!ÿ NETSCAPE2.0è!ù,Rü™H° Áƒ*\ÈÐ €‡#JœH±¢Å‹3`…Ç CŠI²¤É“' vDɲ¤•–+2ŒÉñ£&qÆ„9ò抗(e.¤)påO4=ÅñÒ P§J™*ªSgJ¡LŠh-B(£7q"õÉT,Î 2ñ‰– ¯VKÊ\b#È #ñ"Uis­ß£>=V xçε†¯4rã… /FŒà:pÉ’½5•ŠÝyÓçËÁ‰ÿþÌòà ¨Gô‘b„ˆz™èõ v3NÏ{5WELósÓ¸$ .q-bÂ"THN!b²ìËf‹òœN½ ëOžGÍ|ó%û±iD*²3õž¼<=£÷ Z‘oW=ú×ñ·JÅ‘ö'©?½”A€VXà~ý©' °°‚wB„j¨QfŸQ a6PXn¸¡‡üq˜–‡i ô–‚EŒÀ #(W ¨I€Ú ‰'fae–Z~Xb<易@0¬8-BörHà@“#ÔÈ×f­ÀßQoÄTˆ:ZÙ£‰7¨`,Pð˜«Q(B“O:‚RffI…åáKÿÝÙeZ\æ™ M9\aÅ =,©’×AàL0t6ÎYå•^fYco]rÙU¥CnpÅ @(—\l]¶ÄàÅ)Ýyû¬þ$dàX‹HZÈÄ L«4jxŸ‚ä\«1å  ¡"š‚ z!‚“ˆ‚…‘š˜ŸR€e0`R?iû”€þnN9pðBʺœ¨jòÚÕ”ÜzÄ_[^4àXüuXéZù"Æ¥‚å€lE°HgÉ’UxlhããË«F,ZT°È üa$à€!ù,6ü™H° “4à0È¡†°Xذa.X@™0FE†gPPQd‰À"™,¹ñ‚B+"D $h²á"&X™3¦ #—exS 8E$‰ÒHÍ‚E'PèIµ§‘¡¼P:UÄ‹"E–Š1â)Á*F¨P!‚ÈÀ%#@8!Ä †BÖ¦QÆ\sOÄñBE?Ô®Á0ø\¤°ÚªŽ‘h†Ìˆ ŒÓ*Uêƒ'N„0ËäH´*³jäÈÖLŠ"z¦À‚ µ²Ú)~žtüØGš/ˆQÑCôè±€'¨(µ5 ST[֠‘3®ú7#A” œ~9¦Zß m*ô*Ø"N¥$7\垀&¨`A!ù,6ü™H° À´Ð`°¡Ah´`Á¡ÅL¡€aŠ "¤ð¢ÈFB¢|1‚"Š<éÐÈ ˜#FÀ„©"%“%> ‡SçΣ2Ð,8ôEŠŽJ5”`/TŒpâ…FwªXJŒ¬"¼¸d"àÞ‰ãF´" ¾pÀWB׆CUìÌI8ßÃ#è¾úÖƒÇä5x£‡Vœ" 7p Î#È Ì$Ì”4•ª^rÄ Aˆ•9ð„Û&¬ÕÛóœ´a8> ÆÌ k‹, W®» )ù³ˆà£p‹fbݧÙ"RãŠ8±Éôªw¥R·H䆠&m™¯ràü÷õóëߟ? !ù,6ü™H° Á4h0ÈÐ Bf´ÈѰá02f¸ÂGE†/^Y"Ћ™Üx¡BňE.‰Q1Æ /E¤1B…‘$Á±R#vòŒi$hA2¾!¢jUª"|þt¨peUE„¨°úÕ)A YŽ«Õ˜ Õä¥Y"DH¨úÂà›j¼<ÂaF\’ã"@€ˆ|øðd†ET„ìAµ³@OHÌ0È‹™Gü<âô§Ö¨¸q&Á&@˜0¡oA"/pä(¢n‘Ê‘áÞ&Â$Ç’"@®º­*Á7Aâ[—ÁI–ì³)±-¤;_ð%_˜5rcìU‘752’ û"õSÚ/bd«þÿ˜R@!ù,6ü™H° ÁƒæØ°Aƒ‡„ ‹À¸qC+ . ò¢È8®`„˜Ãˆ#T)hEÂ%8bÂ"bDMFNÁq‡‘˜/T¤T!‚舕KbôÔÀôÅM5k¦a$§ÁL Lé¡âÅ "DEˆ-úÑ ¦€Lx1Q`ر+ î`ªAè”)sÂ+Aì ƒF4à¢Bà Dê@‚ƒÆ# )4ƒá)* ŠhüØ’Oy¡Á@†?¦Ú„à‚„ #Ê42ú¬† _‹Xý˜ÓjA#*„ØÎƒˆG&/ LX¾Ö ‘0=h€ä†Ç""{—àW@~Ë÷oAʽ™äÀQ„›6ÅÆ–üb7“%FŠŒo0t‚½Ù`“ AøvÐsøåg•‚²AÄ`FF(á„!ù,6ü™H° Áƒ Ü¡0a‘‡ErÈÈÑàAnhDƒ†Frà¢bD‘‚ \b‡Ë’*€ˆx±Qà•[Ƹ!¤$†%E˜d²ä Žœ1}·à’DŒ°\’²x …)_ONs ËÏEˆ´›[sÍ%GÅ\$‘5_^/èfQKÈ”KÌ¥µ^EÆ¡†vèaB!ù,6ü™H° Áƒ*\ȤˆÃ" .yä†FrìP¸ÄÈAT8p Ž;ÁqCÅ7^¨¸(PƃFŒÑ£‡ 02ÈqIsî̂•W¦PP‘BDÎ+( v\ʃB‹`­œ1B„Š’Á‘AÅp`1aBв7$*Uq‚€`°°RV„ˆ8‹‘a WИ¥Ša # â0BD¤â®´hÁâɈ8ˆcÄH!A‚DN À„e#0/1äÅC"ANÌH@šB"9qª(¢ö‹- R¸;bâ‚6^ÙêÆh¨O.EHA²äH&K¸ yzåð× ñÍäzE`È\îÝ¡@Kا~‹ÅWÐ|xDz[Ñ—0¨Ä\A *äÐvuèᇠ!ù,6ü™H° Áƒ*\ȤˆÃ" .yä†.1²ñ… !KnLh¤¤‘"*€Àà€£HF&8.qY„Ȉ `ãÄ%1 ž<d…-f̸’áÅ‹’$–,DÅ„ ²fmÑTŽB]Úœ  ì °òbŒBOªPa¥,µ°²8‘âÅÁ–Uƒœ€ÒbŠ•(-®¸¸2e„Šƒ9<¡H+°pa…¼À¤tåHHp…ƒ¼ˆÑ’ˆé׫û YЈŠ9N ¹=ka~ Úòõ¤CÓ'Zè~!bÁDn|„È ¤;ª&'H5æ& )R¡Õ¼É?Õ~>=Í“ðÉ?pÉ‘%!qT’BDÀ`ßK äG 6èàƒ!ù,6ü™H° Áƒ*\ȤˆÃ" .yä†ÙHdŒ%—€DxG#ETŒ¸#ÇHŒq 4Ò `àÀÒÈK‚¡"È•-f\уɒ#gQQtJ‚« ZИ"s‡Á4GˆeÀ²ÎÐyЈIª#8xBÃE¸È±à’8^}!bD W¢X¹B€€¦_aØ$H = 1¥q΃)_pР"f$$PКáÆOA^´ÔÐ$C @âŠèqe††Œ@UܼÁ@åʘœ˜A ƒD^<ºÈñã˜>ðÅó7€QZ¿žá Œ‹HwšƒIЇoö-¨ž»H°ƒ"4òâçÅûO‰¤Pt>ÍÑW'½và‚ 6!ù,6ü™H° Áƒ*\ȤˆÃ" .y䆿ÀaÄÈ A .Y’G#ETbGÁŒqäèHdH‡b¸db„¤Á"‹¼$ˆÑWh\q “ J”AT5:%A‹pø,xƒ# #Âe€U¬9 vD ¬#záBÕ¬Õ0‚¹=zP¸RáŠjÔ¼±AÕ@z8@Bî òªx‘³W( !á@nÃjƒ¼À!ƒf 5fŒ€ ¤(fµ*Š´l¬Á )€‹žÞIÐFž880@ÀÀÔ©044ø‚É–˜cÀxN¤ â1…9BR&އè/dŽ%k®Eèq+’#{’_Hü§ý¤›}hàL!ù,6ü™H° Áƒ*\ȤˆÃ" . òâ†ÉÃÈ A–\’ñà 8rÜPÑ£ˆ‘’EJ|C!#TòGL˜1iÁC H‘ Ñ  PB^8ü2iÒ4È)•(`{B6”|,¢Â¡ J<¤G] Sh´0`ðF¶#„LiÑ …ˆëV 0Å`"/ŽÞhÒd +O€°ÛCŠýªƒi“ˬ°;ƒE^ü-rƒ)Ó+-´ ‹ø…A#:_)mà2 Ž"…a²K#3ÀJ€€Õj ʶ±„d3 Èô!ìÂÄÁÆCóçE¾Äˆºý§Ñ$ù“ÿB"y‡C©Ñ&˜P@!ù,6ü™H° Áƒ*\Ȥȋ"E\D…%L–Yh¤Ž#8^Œx‘àF„/TÜÀc„ˆ"FŒ”Ì8“à’*`Ä€!bD!a ÔxÐå /z!¤)Ð' &}A$éHM³£æ@>Sž˜2¢G h³jÈa°N"8ƒ|˜)´ ÚX]hÓ)3’˜œsŇAYØA  ˆ›:ì¨âEÇŽ.E4дù@‡YÃÔhD˜1ñ>ð†PD½ú½!³ãJ‰a§€X`@!ù,6ü™H° Áƒ*\ȤˆÃ" . ¢â†±Äâ‹/ .Y’ð…/`¨‡’3ŠqR…É4<ÌøR"M#h‚„#H!E.Ê$hòä y!5)Ì‚BUHñ"e… =¤h°Èˆ4 ȉ/(œ0šÔ   *ð¶mÛƒW¨.dD^|ôèá D‹¿SÚ²òä^ÅNø›GYÃNUm ‚Å hÌĈ –‘êöïÕ¬_TñZêh 3¬¾*pâ ´xƒÌ–šA¸Eƒ®I!âÕ‡E„à ý`‘.J󪛴—¬1¾ Ë„b—KŒ!.‘ˆÅø8¦dH¯Ð¡‘)ShÑ€xP@!ù,6ü™H° Áƒ*\ȤˆÃ" .yä†y¡bDŽB–\"á  @Œè#GŽ’ ÒˆŽ/2hØP$£˜L`à€ÁJ#NLyCHO& ž`ðÁè¤)~túS" B¨qbI‘'*Y Ñ °€ˆh`Ä x_œ`úT*ƒ@T€ qµÇ=€Th¢!êÀ©@ %"zô¨`@ƒ'B¼A  D`V=‚ãÏa¬d€dr]"A€hV¬ACƒgG€¥ Ãì]¼@`t†M°ˆ`°pæ^»¶3P&_T[U%õµG04ÄŒªèŲuÈyó"a„ø€Ò#‡Fp8&¸1ãÄ)½ðÓ~aÃOK˜C_5„Áð[ƒMq…f¸P@!ù,6ü™H° Áƒ*\ȤˆÃ" .y䆹ñB…ŠŽA .Y’ð…ˆ“#FðxqÇ‚EŽ8)b„Š6_dà#I™Pª ©b ™Ä$hR¨ˆ ¨8A±ˆ‘Ÿ—д)‚ÈÀ"?R¼8 Ñ 5‹ŠÈ„ 0¬4is¨xOò·gÁ T¡IXï} žñb&Ê”„÷Ñà— „Gb$_•¿q|²,“%mùVÄa°ˆ]¢‰Üå[ÇÒÓ Ÿ,*˜vmƒF^)‚ònÍ»A þný‚¤k?RþP„ˆÕÛ‰I„«M¹ miĈm‡ØN™rT눯°¸¢aüƒ8Bß!ù,6ü™H° Áƒ*\ȤˆÃ" . ò↹ñB…Š#^,!¸d$Â"RŽ!"&1\²¦Š+E¨€cÌ4E°ô˜2eŠ;{f,ˆrD ,ƒ8„*È !%%²Ôéâ@)­ö4X„«ÇL‹²t`S@V~ôUBX"mêÑ¢)Ñ#H^&ᮢ¸¦„¡†Éöuª3ï‘"D‚à5hÄ/Ò^¾˜ Têa"{¨èñ4cY:¥þd²äÅ^°PRM©Â4çFŠ|nüw"‡Šl¨‚GnœN_ Ÿ-ðFdE<þíM é %^ÄâB,®d€Á3bÁ3®ȱýÁ9ì !ù,6ü™H° Áƒ*\ȤˆÃ" .±ä†¹ñB…Š#F@¸dIÂ"R†ä¡B„Š‘.!‚或-m¾ÀhÒ M—-U¦‘BÄ & ¢ÄI3ˆÃ 5éYPEH"`2*b§Á"7U¹YFJ "¤~MkµmG#$8pàR«ÀŽ{ MÉw®ßD Q1ø&¸6%@p0Aä×Â8/R=bÒˆCƒF<ªèaUë ¿H:âˆÃDUd,"¯"T¾èx³ÇU«|S¾°ËCËc=©9”fMÞ¬1Y„ééE_d1…HÒæ@Š{ WvO5b™¼CÒs\! Æ Ý#nÐà!GÄûø!ù,6ü™H° Áƒ*\ȤˆÃ" .±ä†¹ñB…Š#F@¸dIÂ"RŽè!B…ˆ/Lb<¸dÄË—*F¤°éRÅE#2 Úäé2eË›*–d,ˆ²§Í ‹y0ç"F ”úréÀ"-U¹ZFJ )m$2Hη=ŽàÀ* vìØc§Ñ”u;±ö…Û«=Ć|)‚ƒ "^¼qÂcO“A/.9‚ãFÁ#S'IðÅ„ÓF)h…BË:} +XDP&X¼x¸GÈ9ÿ¦„Q…• Fм=¬sqJÉsgb²–+wUÄ &Óq|Íé÷*õƒšh°Q¨‘äKz5˜džE,ÞŽÈ¿¿ÿ‚!ù,6ü™H° Áƒ*\ȤˆÃ" .±ä†¹ñBň#F@¸dIÂ"RŽ"B…ˆ&1\2âåK—.G¤xyÑHÌ‚5kªp™²¥ÍK2D‰³f‡Dw¶üIÐ㈡#ˆT-šRéÀ"-¯^-#¥„”/ 1á꫱Jp@WƒAžX±J´(Ý¿ Dœ²Ö•V_J€à`‚Ý‚XP0Ü#… “?{212R`V‚x´Ú™É‹ ¨Û¦h Ã@®¶Ìö¯s\¹òBôÕ-×ä*bµg^p6ì1¶ÎEUÌaF“Epz|«ó¥ñ!96À°¡4{åî*®#Ì‘£¢O#œ—<ôªÐ¡ÏˆøóëO!ÿ GIFCONnb1.0  IEFR01B.GIF02.gif04.gif 06.gif 08.gif 10.gif12.gif14.gif16.gif18.gif20.gif22.gif24.gif26.gif28.gif!30.gif#32.gif%34.gif'36.gif)38.gif+40.gif;aolserver4-4.5.1/docs/intro/tcl2k/html/index.html0000644000175000017500000001523107363640504021503 0ustar frankiefrankie Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

2/16/00


Click here to start


Table of Contents

Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

Welcome To Digital City

You Just…

Overview

AOLserver and Multithreaded Tcl

AOLserver Background

AOLserver Basics

AOLserver Tcl

AOLserver Tcl Model

Example: CGI-style Request Procedures

Example: Database Access

Example: Background Tasks

Example: AOLserver Dynamic Pages

Example: Simple ADP Template

Example: ADP Debugging

AOLserver Multithreaded Tcl

What is Multithreading?

What You’ll Want to Know

What You Can Generally Ignore

Why Are Threads Good?

Example: Event-Driven vs Thread I/O

Why Threads May Be Bad

Multithreaded Tcl

Multithreaded Tcl - Mutex Protection

Multithreaded Tcl - Thread Local Storage

Multithreaded Tcl - Event Loop

Tcl 8.2 Multithreading Issues

AOLserver Multithreaded Tcl

Multithreaded Tcl Interp Initialization

AOLserver Tcl Interp Initialization

First Solution: Interp Pools

First Solution: Interp Pools

Second Solution: Direct Sharing

Second Solution: Direct Sharing

Latest Solution: Interp Cloning

Latest Solution: Interp Cloning

AOLserver Multithreaded Tcl Examples

Example - Creating Threads

Example - Sharing Memory

Example - Simple Cache

Example - Real Cache

Putting AOLserver To Use

The Digital City Platform

What is Digital City?

The Digital City Challenge

And Digital City Must Scale

The Digital City Architecture

Digital City Servers

Some Numbers...

Examples

Example: NV

Example: NV

Example: Proxy

Example: Proxy

Example: Sob

Example: Sob

Sob-Powered Publishing Tools

Extensions Working Together

MovieGuide

MovieGuide Features

MovieGuide Components

MovieGuide 1.0

MovieGuide 1.0 Issues

MovieGuide 2.0

MovieGuide 2.0 Issues

MovieGuide 3.0

MovieGuide 3.0 Success

Monitoring Performance

URL Stats

Tcl Statistics

Anything Specific to Multithreading?

Cache Statistics

Lock Contention

Overall Performance

Wrap Up

Who Developed and Operates Digital City?

Where To Get More Information

Author: Jim Davidson

Email: jgdavidson@aol.com

Other information:
Slides from the Tcl/2k Conference

aolserver4-4.5.1/docs/intro/tcl2k/html/pptani.gif0000644000175000017500000002171307363640504021472 0ustar frankiefrankieGIF89aX‡3f™Ìÿ3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿÿ3ÿfÿ™ÿÌÿÿ3333f3™3Ì3ÿ3333333f33™33Ì33ÿf3f33f3ff3™f3Ìf3ÿ™3™33™3f™3™™3Ì™3ÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿff3fff™fÌfÿ3f3f33ff3f™3fÌ3fÿffff3fffff™ffÌffÿ™f™f3™ff™f™™fÌ™fÿÌfÌf3ÌffÌf™ÌfÌÌfÿÿfÿf3ÿffÿf™ÿfÌÿfÿ™™3™f™™™Ì™ÿ3™3™33™f3™™3™Ì3™ÿf™f™3f™ff™™f™Ìf™ÿ™™™™3™™f™™™™™Ì™™ÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÌÌ3ÌfÌ™ÌÌÌÿ3Ì3Ì33Ìf3Ì™3ÌÌ3ÌÿfÌfÌ3fÌffÌ™fÌÌfÌÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™ÌÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3ÿfÿ™ÿÌÿÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿ!ÿ NETSCAPE2.0è!ù ,XüH° Áƒ*\Èpᵇ#JœH±¢Å‹3Vx•Ç CŠI²¤É“(E옲¥K— ²Zé1•V¬zIòfÎ!­dÌ…39Ö°‚éPVˆ–” 5À¦vF]J¨•¬ kµi &N¨eRÀX!“`ùug]¡8mZaµb+6ûÚ½iUkV¼{…FÅ @gÓ§Iß åHŠ€i¥L^ñ6.M¨Lofm\W0SÅ_omª3´Ù¾© —­Û£X²8‡.I»VèÍÎä²l;´îÌœNòm,¸/h§QÁšn½zX·cåBqY­æûÀ…{LýQvc«£ó-îØ¯o V÷ž?œõ.XÛØ…ؤÌJ)ÿ§lÞg…•}«•NǶ×GFGy:á'Ù ×<Æ ¨ÀT†*U…B–Ó_þ•×_^I…—V€Åè‘`f‡ €UˆsñäãFåçÛ †ü”SOäÆ#K%Å¥U$1È O·éç×P|`|ô±ŸKš$š]6í4TT1ÂØi–9â~$U¹ tR¨ÕBRðõÛXž‰%yÉÍdScNùÅ\V͵–ZjêT¥ L°Š-Ha)«äÄŸÁ}6RaÎÑ'èM£º×WpRjª"©ûSª$ä••Ý)È–° ˜œŠ×Ó©FWj©æé©§Uz²šbHr®k¥WxÉ‚MaFi˜}¿Ögh¤1·×c ëh~žfJ‚œrJ4Pá-ìÂôêz9YH ‡\c׺/a%j»Mæ·Š__ÁfÅ\qÅ_øºä\]Á¡ˆfU(Ž·UJ^…SNßÄBN ·ÄÚi2ª¦_%u¬IUR‚rJ¹²ˆ+\ú™ïÅ h–je™uÅïÅD 'à‰Å—§äÜRÇ™wå^Ô¹+¡•Ђ QØâ¦4ëÊÓÒ9¼“zèÉe¿o%¥‚)–Ym)^\÷Ù#¿=%ý äQ yMwH$¶‹wBzï-øàøÍ©†úþ­øâŒ7îøã!ù,<üH° ÁƒtŰ¡«@Lœ˜È$€„h$è°a )H”h«…pìøp‰DŠ%­ Ü8åC!'’˜reÇ@¬™zªäÉž5ž:uñ"‰*.^›©2iÃSq ’pcFšSRaE…!+V¡íòd…L¤a5–lµ",Xøð飖•¸_…°ºXWÊÄQ¤œ| 6°EVIi!¥2ŸUh©»"ZaÄ‚òbíocÎ%?¶ |…/ µ€S¾ÈTAK£±Š[®ÉnÑ tèPÓUã 1j…0Ú+®\ñÛ[È*ÀÑ¢U»‚Úê;JX1è” ÜKýÂ>íûäÇ«¥`é‹|³FA*X¨xO9ŠÌŒ%ØuI&eRœf 5èàƒ!ù,<üH° ÁƒtŰ¡«@Lœ˜È$€„h$è°a )H”h«…pìøp‰DŠT\Q‘reÇ@(BN$9°æ@–Y 25ôTÉ“>vQX –UWd}·\êÀŠÉ»ˆbg­ÙÝ) t,€|ä“Ìí¦Ð€(P@!ù,<üH° ÁƒtŰ¡«@Lœ˜È$€„h$è°a )H”h«…pìøp‰DŠT\Q‘reÇ@(BN$9°æ@–Y 25ôTÉ“>vvƒjF“<óá §V‰æ,0£Ÿ­\ D@ÆÔ ¯´Îè” Û5g”²6 WÝÑ®uÅp‡«¤X{·µÂçУ !ù,<ßH° ÁƒtŰ¡C‡¬ ¤"Á‡ZÁjEE!3bÜhÅ£Å"Gü2¥FŽ&A¢txª¦M›¯ÅlÉðTœŸ@ª˜Hñ¤À‡¦â²Â” Ó8&òtå3)Xøh…*ufêRZœh!…W‡S}® +¥­Ù¨h½2 e"PØ(‚²š€Ûp*C»-ZDɚѯ«C§ø ª­°Ü†+˜Z DÙñQŒ%VD¶r%e7K¾ò9c S‚N¥>Uz¤”±Q°¶~hw¬‹(vf;\;`lÛÏ ƒ .0 !ù,<ÄH° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§â¨\¹ÒÄÉMÅ1d¥&—šq\:D')XøÍùRàÔ¤´8ÑB ¢;a:L¹J©”«Ouf”Ú0”‰¤-¢ jB+C Á† ú‘«ÃC§ø ­­Qˆ+jZ Ä×.€‰%Väµr%߉ƒõ^9 1)A§ ›Œè¶aR¦Q€2~x¹…‹(v6;¬:€éU¿ S«^-0 !ù,<­H° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§L¥\©Ò”‰“žj§¦Íš/‚TyófÎŒ1Šìió'C”¦ˆâ„)ða(P£FU€GŽA¯FÌêp…•¯±úȵኳ_¯"Û"Ú¯V®°µ 1Ð)AwEÎHʉQ¤`Ù[×o Qì~¸JŠ€¿R¤ÌUH¹²e!ù,<€H° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§L¥\©Ò”‰“žj§¦Íš/‚TyófÎŒ1Šìió'C”¦ˆâ„)ða(P£FU€GŽA¯F̪U'×®G¿‚9VlW²gÍjUȶ­[ƒ!ù ,<ŒH° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§L¥\©Ò”‰“žj§¦Íš/¢4uófÎŒ1Šìió'ÃDqÂ(Ó„Ó§O•,à‘cЪ¯bÕ©uëÑ®^A>\Q¬Ãd+‚=H…Z¦W\ká6«Â»xó !ù ,<­H° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§L¥\©Ò”‰“žj§¦Íš/‚TyófÎŒ1Šìió'C”¦ˆâ„)P¦‰§P¡*a ã Œ ®¸Z1(ÅTtmzqŵb#zh6‹´:×B4{ÍJ ¸Gåj½Æ*P x³:l{%€@¸‚> ´‚Õ ?ŠUH¹²e‚!ù ,<»H° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§L¥\©Ò”‰“žj§¦Íš/‚TyófÎŒ1Š´¹Â'L2M-Šó(™&¢šX@T%N1®¸ÖBÅÇ ·bá5ëŭ׬”( éÙk¬µÀÖȇb¯Èö®Ã*V°Zᇡ¶Oϲ@µÂK]»`'®PäJð?:#_$´" ŒÌ C‹M0 !ù ,<ÄH° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®N‰IòÔC§L¥<µB¥J'><Õ*ŽÍ+lÆé¥)+•°É3£L‡"^cabgL3Ú\q-‹E¢4ÁÕÕkVJx:ö"UVZPÑó(Eª®ÈV«Û‰+V­`µÂ!BF¡^d±Õ /u—}«ÈÕ D}Û ÞˆÊJ ’o Àb Wlw2h² S«^-0 !ù,<ÀH° ÁƒtŰ¡Ã‡ BœHQ"Å‹ -b¼¨qãÄŽ®LˆIòÔC&â¨\¡Rå)S'>L¹’¥K“Q¶\¨„JS83ÊtH3Ίk-|žjSàÌSPbQâeS¡šjuôš•+‚2éð(«@-¨¸zQê•× uJqŪ¬Vø!D(çЉ,V ZáE®_ºW0\H/Û© ´€ñx#Ï~cõèj…€¾s7sލ°´éÓ!ù ,<ØH° ÁƒŒÃ°¡Ã‡ BœHQbW3j܈‘¡EŽ 5zÈ0¤É‘Kb<Ų¥ËSQPéê”)›§Vܼi"fœ+O5\±¢aÏŽ?I^Äxsh  º’I“åÐk-LÄ‘JuiMSW­(Á5iJ¯§L¨5±âÚµ+%øʱ-+@-¨@JwcÛ@WÜÛ5ä V‡Wø!DhªÙ™^ý®pµÂË^¾JC²À¸?˜ÏšÄ˜jE¡!æ(è®ÞY€IC‹±s+ÜÍ»·Á€!ù ,<ÕH° ÁƒŒÃ°¡Ã‡ BœHQ"Å‹ -Æqű£Ç6üHÒcH#]Zɲå)Ž'¤<ÕªaŒ a:Di’áŠ@%êÌ(ӡȆ+®±€9”!H•H¯bQ¢iœ§&²šHzÍJ 1bLÊ*P A‰Š½˜4ЕÓ^-JqŪ¬V0ÃD-Ø‹,p®ð ìߺ>Y X²“.F;+®4É6PÆNo\ oæµ?*MºtÁ€!ù,<ÅH° ÁƒìݡÇ BœHQ"Å‹ ÆÙȱ£Ç?Š’ã©“(SžòXrã)S/O­€ ÓËOµâcG›[ÆÉqE rz²è56•ndÊÊi %¤Æaj¢«‰×®Y)à¦À‘Á² ÔÒ¥8Ñ‚ t%€À·[ãŽ\±j«Là0{V.‹8+¼0[VnZV–Õ‹6ŽW¤ •(€ä©”+#0taÑ#ª^ÍÚ`@!ù,<óH° ÁƒìÄá(CÄl¹ÑpΜ† bìÄåÚµ4bz4ij±“ÆNNž8it-–˜7œ¬™ÒIÍ“ Å ÃE ‹Kâd¸…K6&ÈɳTèÀy¶L°q£Êœ'y.n<òÞ*V°ZÁ“½“=¯`±ØK€Ä©)¯Ð»‘‰%’;{6 gÅ ¹óî6¼"PÜœ…¯àtòÂËw+œN½ºÁ€!ù,<åH° ÁƒìÔÉɇŸÜhÔˆ‹N"dȱc§ oبâq£ÇŽÄ€Ñ2'Ïœ—y:™<Éð††yäÌÁSæ@†ƒJ¼áPÅ 'GΤyƒãË’?;Ž2ÔHÌ–¦ wBè‘˵kh¸ôà(ç¤Iˆ®U½jiÄŒK;‰9$FŒ„ /ŸnàqK-lÜ“³gǸy ®³ì^ #gTAÀQÉOâzÌ;‡¦fš ?ƒ6u´i‚qR«^­ÚΊ+%V£fM;õŠ@˜¨ž]›öŠÜ»ö.[¡ñãÈ !ù2,<ðH° Áƒìİ¡Ã#v"(ñá‹ :¤ØÉ‰“'A:¹Ñ¨‘.6D‚äX±I7ÀHdYqžä‘3gNž‰[2¼!†!Ï? d²éÇ‘%¹ˆ±â©š3^äQ%"ÖˆDÁl™sÔ§RB]íä“lRŽ!㎼R…]«_6ìé5¨ÃQ†LnÑØigߥ¹\»vHL½3ý>mdÍäEvU8]é·¡˜4bÄܰѓïa´·pÏב7ü³%£*mñÄFíÔ£“HTPQUåÕÎó´­˜7íF…УK/!ù,<üH° ÁƒÒ©!€†˜tºÑéÄ…dØcÃoœ¸A’UÆœ8 àä‰&Nn4:!F Œ.-hȱÓÆ(&μÁÃçIž­@4yCŒ©-sò°šu§ÀžÞàb “œ9²æàédC—T>I+³DMi]–í"—‰=¬Ü°‘çÊÑ«!ò™(†Ï–$fÅŠs®ªÞ[)ðÌzÜð.!wµÞÙ÷SX±Å ¦Ú)§ÈÑÉØÓ ­äÅÙkQðÁ“5çé•UlvBhR`ñb %Å"I‘Š Å(ãŒ!ù,<üH° Áƒ°€:1p¢Ó &:AÒIA†W°ZÑIŠ€7NH tc$GA:)Áe…“%] £¦'0‚t(°Št®%´ãdž2 ‘d%ÈS¬Íq™'(€¡+®‘ @€˜ó¸t“¡“oU8¤À¾}Ê1€’V¸Xéa¥0ž¿/ùjÙ‰>bøôÑ*6q[ŽU”lqBŒ;ˆä f+”árHi!åÆcV*d¬øél+’«£tÂÂGk4+–K‡ ´¢Ñê»ùÂ8é¯ °vŠÏ N§¢±êÄÂym·t"‹Ö£" kNXß{y±1+VX™s%ЕN­ô‡ŽùáÂVäQ¶ßPXÀ ¦2ˆ§´’ÑÞñåÄ ÑØ$Å -¨€…‡CYYËpÕÃR*¶ˆ"$ͱO z`•”R"óY•¶)b±e‹>Ž"¨n Ñö^Ö¸*$à¯àe1”¯Å™ê#èÔ©h¬fºfÚ2- @‡®½‘li½Ó^ tåŠ^×°Wô¶²Ü%‹´®•°b ЩÚ3Jõ¶Ͳ(“'cÉK<¨C+·pÅŽÞÃÅ Á @…©‘'@v’t–å§Ð&8P@!ÿ GIFCONnb1.0  button01.GIFyellow1yellow2 yellow3 yellow4 yellow5yellow6yellow7yellow8  yellowbtncursor1cursor2cursor3cursor4cursor5!cursor6#cursor7%cursor8'cursor9 ) cursor10+green1-green2/green3 1 greenote3red15red27red39redfilm;aolserver4-4.5.1/docs/intro/tcl2k/html/index.htm0000644000175000017500000001523107363640504021327 0ustar frankiefrankie Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

2/16/00


Click here to start


Table of Contents

Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

Welcome To Digital City

You Just…

Overview

AOLserver and Multithreaded Tcl

AOLserver Background

AOLserver Basics

AOLserver Tcl

AOLserver Tcl Model

Example: CGI-style Request Procedures

Example: Database Access

Example: Background Tasks

Example: AOLserver Dynamic Pages

Example: Simple ADP Template

Example: ADP Debugging

AOLserver Multithreaded Tcl

What is Multithreading?

What You’ll Want to Know

What You Can Generally Ignore

Why Are Threads Good?

Example: Event-Driven vs Thread I/O

Why Threads May Be Bad

Multithreaded Tcl

Multithreaded Tcl - Mutex Protection

Multithreaded Tcl - Thread Local Storage

Multithreaded Tcl - Event Loop

Tcl 8.2 Multithreading Issues

AOLserver Multithreaded Tcl

Multithreaded Tcl Interp Initialization

AOLserver Tcl Interp Initialization

First Solution: Interp Pools

First Solution: Interp Pools

Second Solution: Direct Sharing

Second Solution: Direct Sharing

Latest Solution: Interp Cloning

Latest Solution: Interp Cloning

AOLserver Multithreaded Tcl Examples

Example - Creating Threads

Example - Sharing Memory

Example - Simple Cache

Example - Real Cache

Putting AOLserver To Use

The Digital City Platform

What is Digital City?

The Digital City Challenge

And Digital City Must Scale

The Digital City Architecture

Digital City Servers

Some Numbers...

Examples

Example: NV

Example: NV

Example: Proxy

Example: Proxy

Example: Sob

Example: Sob

Sob-Powered Publishing Tools

Extensions Working Together

MovieGuide

MovieGuide Features

MovieGuide Components

MovieGuide 1.0

MovieGuide 1.0 Issues

MovieGuide 2.0

MovieGuide 2.0 Issues

MovieGuide 3.0

MovieGuide 3.0 Success

Monitoring Performance

URL Stats

Tcl Statistics

Anything Specific to Multithreading?

Cache Statistics

Lock Contention

Overall Performance

Wrap Up

Who Developed and Operates Digital City?

Where To Get More Information

Author: Jim Davidson

Email: jgdavidson@aol.com

Other information:
Slides from the Tcl/2k Conference

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld001.htm0000644000175000017500000000134307363640502021404 0ustar frankiefrankie Tcl in AOL Digital City

Tcl in AOL Digital City The Architecture of a Multithreaded High-Performance Web Site

    Jim Davidson

    America Online, Inc.

    February 16, 2000

Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld002.htm0000644000175000017500000000111507363640504021404 0ustar frankiefrankie Welcome To Digital City

Welcome To Digital City

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld003.htm0000644000175000017500000000210507363640504021405 0ustar frankiefrankie You Just…

You Just…

  • Included 48 dynamic template files

  • Invoked over 5000 Tcl commands:

    • 58 distinct C commands
    • 67 distinct Tcl procs
  • Locked and unlocked over 800 mutexes

  • Searched a database through a special Tcl proxy process interface

  • Selected promos for over 10 advertising slots

  • And much more… all in under 150,000 microseconds (which is actually pretty fast)

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld004.htm0000644000175000017500000000155707363640504021420 0ustar frankiefrankie Overview

Overview

  • Digital City, an online service of America Online Inc., is powered by AOLserver, a dynamic, multithreaded Tcl application development platform

  • This talk will describe AOLserver, multithreaded Tcl, and the Digital City web platform

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld005.htm0000644000175000017500000000113507363640504021411 0ustar frankiefrankie AOLserver and Multithreaded Tcl

AOLserver and Multithreaded Tcl

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld006.htm0000644000175000017500000000231307363640504021411 0ustar frankiefrankie AOLserver Background

AOLserver Background

  • AOLserver is a web application development environment used throughout AOL, e.g.:

    • Digital City, AOL.com, AOL Search, Shop@AOL,
    • AOL.com/Netscape WebCenters, and many more...
  • AOLserver is based on NaviServer:

    • NaviServer was developed by NaviSoft, a small web startup company acquired by AOL in 1994
    • NaviServer included many novel features including support for NaviPress, an HTML editor/browser, and database integration
  • AOLserver is now in OpenSource, available for download at http://www.aolserver.com

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld007.htm0000644000175000017500000000211607363640504021413 0ustar frankiefrankie AOLserver Basics

AOLserver Basics

  • AOLserver is a full featured, multithreaded web application development environment for Unix and NT

  • In addition to static page serving and CGI’s, AOLserver includes a rich and flexible C API for:

    • Dynamically loading user-written C modules (DLL’s)
    • Binding functions to arbitrary web requests
    • SQL database services
    • Cron-like background task scheduling
    • Asynchronous socket callbacks
    • And much more...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld008.htm0000644000175000017500000000203607363640504021415 0ustar frankiefrankie AOLserver Tcl

AOLserver Tcl

  • However, the most useful aspect of AOLserver has always been its complete Tcl integration

  • Tcl integration is not unique to AOLserver, other implementations include:

    • Apache’s mod_tcl
    • Binary Evolution’s VelociGen
    • Vignette’s Story Server
  • Among other advantages, integrated Tcl generally provides higher performance than CGI-based solutions

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld009.htm0000644000175000017500000000174307363640504021422 0ustar frankiefrankie AOLserver Tcl Model

AOLserver Tcl Model

  • For AOLserver, the Tcl integration model is (in general) to provide a Tcl command interface to the underlying C API

  • Tcl commands are available to:

    • Handle URL requests, query a database,
    • send email, monitor the system, and much more
  • Let’s take a look at a few examples...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld010.htm0000644000175000017500000000225207363640504021406 0ustar frankiefrankie Example: CGI-style Request Procedures

Example: CGI-style Request Procedures

  • ns_register_proc binds procs to arbitrary requests:

    ns_register_proc GET /demo/time getTime
    proc getTime {} {
    set headers [ns_conn headers]
    set browser [ns_set iget $headers User-Agent]
    set page “<html><body>\n”
    append page “Time: [clock seconds]<br>\n”
    append page “Browser: $browser\n”
    append page “</body></html>”
    ns_return 200 text/html $page
    }

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld011.htm0000644000175000017500000000240007363640504021402 0ustar frankiefrankie Example: Database Access

Example: Database Access

    ns_register_proc GET /demo/movies getMovies
    proc getMovies {} {
    set page “<html><body>\nCurrent Movies:\n”
    set db [ns_db gethandle moviedb]
    set row [ns_db select $db “select * from movies”]
    while {[ns_db getrow $db $row]} {
    append page “[ns_set get $row movie]<br>\n”
    }
    append page “</body></html>”
    ns_set free $row
    ns_db releasehandle $db
    ns_return 200 text/html $page
    }

  • ns_db can be used to access an SQL database:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld012.htm0000644000175000017500000000202707363640504021410 0ustar frankiefrankie Example: Background Tasks

Example: Background Tasks

  • ns_schedule_proc can register a background script:

    ns_schedule_proc 3600 hourlyCheck
    proc hourlyCheck {} {
    set errors [… collect errors from log file …]
    if {$errors != “”} {
    ns_sendmail errors@mydomain.com \
    aolserver@mydomain.com \
    “Errors Encountered” $errors
    }
    }

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld013.htm0000644000175000017500000000207207363640504021411 0ustar frankiefrankie Example: AOLserver Dynamic Pages

Example: AOLserver Dynamic Pages

  • AOLserver’s most useful Tcl interface is ADP - AOLserver Dynamic Pages

  • Modeled on Microsoft IIS Active Server Pages, ADP:

    • Places the logic (Tcl) in the presentation (HTML)
    • Provides easier learning curve for HTML developers
    • Supports reuse through multiply included templates
    • Is highly optimized through aggressive template and byte-code caching techniques

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld014.htm0000644000175000017500000000204107363640504021406 0ustar frankiefrankie Example: Simple ADP Template

Example: Simple ADP Template

  • Returning the time and browser is now a bit cleaner:

    <%
    set headers [ns_conn headers]
    set browser [ns_set iget $headers User-Agent]
    set time [clock seconds]
    %>
    <html><body>
    Time: <%= $time %>
    Browser: <%= $browser %>
    </body></html>

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld015.htm0000644000175000017500000000142707363640504021416 0ustar frankiefrankie Example: ADP Debugging

Example: ADP Debugging

  • Another benefit of ADP is support for TclPro:

    <html>
    <body>
    <% ns_adp_puts [ns_time]%>
    ...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld016.htm0000644000175000017500000000151307363640504021413 0ustar frankiefrankie AOLserver Multithreaded Tcl

AOLserver Multithreaded Tcl

  • While AOLserver provides a powerful Tcl interface, what’s really interesting is AOLserver’s use of multithreaded Tcl

  • First, a quick multithreading review...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld017.htm0000644000175000017500000000174707363640504021425 0ustar frankiefrankie What is Multithreading?

What is Multithreading?

  • Multithreading is an environment where more than one “thread” of execution is active in a program:

    Multithreaded: Simultaneous
    access to memory, files, etc.

    memory, open
    files, etc.

    memory, open
    files, etc.

    Single threaded: Exclusive access to memory, files, etc.

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld018.htm0000644000175000017500000000207107363640504021415 0ustar frankiefrankie What You’ll Want to Know

What You’ll Want to Know

  • Posix Threads (pthreads): A well considered threading API used as the model for Tcl 8.2 and AOLserver 3.0

  • Basic thread primitives:

    • Creating and joining (waiting for) threads
    • Mutexes (or locks) to protect shared data
    • Condition variables to signal and synchronize threads
    • Thread local storage to maintain per-thread data which can not be passed directly between functions

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld019.htm0000644000175000017500000000205407363640504021417 0ustar frankiefrankie What You Can Generally Ignore

What You Can Generally Ignore

  • Win32 Threads: Posix threads, some would say, are a more useful framework for server applications

  • Higher level objects and interfaces you can generally ignored because they’re normally a bad idea:

    • Read/Write locks
    • Critical Sections (or recursive mutexes)
    • Semaphores
    • Thread Priorities and Scheduling
    • Thread Cancellation and Exception Handling

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld020.htm0000644000175000017500000000200207363640504021400 0ustar frankiefrankie Why Are Threads Good?

Why Are Threads Good?

  • For some problems, threads can increase throughput by running simultaneously on separate CPUs

  • For some problems, threads can provide faster access to expensive shared resources (e.g., a large cache)

  • For some problems, threads can provide a simpler programming environment than event-driven models

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld021.htm0000644000175000017500000000376207363640504021417 0ustar frankiefrankie Example: Event-Driven vs Thread I/O

Example: Event-Driven vs Thread I/O

  • I/O bound apps are sometimes easier with threads:

    global done count
    proc my.read {sock} {
    global done count
    read $sock
    if [eof $sock] {
    close $sock
    if {[incr count -1] == 0} {
    set done 1
    }
    }
    }
    proc my.write {sock} {
    puts $sock "GET /index.html\r\n"
    flush $sock
    fileevent $sock readable "my.read $sock"
    }
    set count 0
    foreach host { host1 host2 host3 host4} {
    incr count
    set sock [socket -async $host 80]
    fconfigure $sock -blocking off
    fileevent $sock writable "my.write $sock"
    }
    vwait done

    proc my.thread {host} {
    set sock [socket $host 80]
    puts $sock "GET /index.html\r\n"
    flush $sock
    read $sock
    close $sock
    }
    foreach host {host1 host2 host3 host4} {
    lappend tids [ns_thread begin ”my.thread $host"]
    }
    foreach tid $tids {
    ns_thread wait $tid
    }

    Events

    Threads

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld022.htm0000644000175000017500000000126407363640504021413 0ustar frankiefrankie Why Threads May Be Bad

Why Threads May Be Bad

  • Check John’s old presentation on why threads might not be a good idea:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld023.htm0000644000175000017500000000200507363640504021406 0ustar frankiefrankie Multithreaded Tcl

Multithreaded Tcl

  • For better or worse, Tcl was not designed with thread support in mind as the single threaded, event-driven model served most purposes well (e.g., Tk)

  • However, the code was well implemented so that adding thread support was not entirely impossible

  • Let’s look at what was done in Tcl 8.2 to support threads...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld024.htm0000644000175000017500000000204707363640504021415 0ustar frankiefrankie Multithreaded Tcl - Mutex Protection

Multithreaded Tcl - Mutex Protection

  • First, various shared data had to be protected with mutexes, e.g., from tclUtil.c:

    void
    Tcl_PrintDouble(interp, value, dst)
    {
    char *p, c;
    Tcl_UniChar ch;
    Tcl_MutexLock(&precisionMutex);
    sprintf(dst, precisionFormat, value);
    Tcl_MutexUnlock(&precisionMutex);
    ...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld025.htm0000644000175000017500000000216107363640504021413 0ustar frankiefrankie Multithreaded Tcl - Thread Local Storage

Multithreaded Tcl - Thread Local Storage

  • Next, various global data had to be moved to thread local storage, e.g., from tclIO.c:

    void
    Tcl_SetStdChannel(channel, type)
    {
    ThreadSpecificData *tsdPtr = TCL_TSD_INIT(&dataKey);
    switch (type) {
    case TCL_STDIN:
    tsdPtr->stdinInitialized = 1;
    tsdPtr->stdinChannel = channel;
    break;
    ...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld026.htm0000644000175000017500000000225107363640504021414 0ustar frankiefrankie Multithreaded Tcl - Event Loop

Multithreaded Tcl - Event Loop

  • Finally, the event loop was modified so each thread maintains a (seemingly) independent event loop

    2. Notifier watches files for all
    threads with single select() loop

    Threads
    interested
    in file events:

    Other Threads

    1. Threads sends
    files to watch to
    Notifier and
    enters condition wait...

    3) Notifier wakes up
    individual threads when
    file of interest is ready

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld027.htm0000644000175000017500000000212007363640504021410 0ustar frankiefrankie Tcl 8.2 Multithreading Issues

Tcl 8.2 Multithreading Issues

  • Although Tcl 8.2 is a huge step forward, it still has some issues:

    • No commands to create, join, or synchronize threads
    • No commands to share resources (e.g., variables, open files)
    • Some code is not yet entirely thread safe (e.g., glob)
    • The event-loop and memory allocator may be bottlenecks
    • Installations normally default to not compiling with threads
  • Happily, AOLserver has addressed these issues...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld028.htm0000644000175000017500000000214707363640504021422 0ustar frankiefrankie AOLserver Multithreaded Tcl

AOLserver Multithreaded Tcl

  • AOLserver extends and patches Tcl 8.2 with:

    • Commands for creating, joining, and synchronizing threads
    • Commands for sharing “variables” (files are harder)
    • A zippy cool replacement for the memory allocator
    • Compile time patches for thread unsafe routines (e.g, -Dreaddir=ns_readdir)
  • In addition, AOLserver addresses a basic problem of multithreaded Tcl - nearly seamless multithreaded interpreter initialization

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld029.htm0000644000175000017500000000167007363640504021423 0ustar frankiefrankie Multithreaded Tcl Interp Initialization

Multithreaded Tcl Interp Initialization

  • Problem: Interps created throughout the lifetime of a a multithreaded application which include (almost) the same state (commands, procedures, etc.)

  • One solution could be the “package” interface of Tcl 8.2 for lazy, per-interp initialization

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld030.htm0000644000175000017500000000174107363640504021412 0ustar frankiefrankie AOLserver Tcl Interp Initialization

AOLserver Tcl Interp Initialization

  • However, because it pre-dates 8.2, AOLserver has instead used three different initialization solutions:

    • A “pool” of pre-initialized interps
    • Direct linking of select parts of the interp structure
    • “Cloning” of a single master interp for later interps
  • Let’s take a look at each solution...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld031.htm0000644000175000017500000000201207363640504021403 0ustar frankiefrankie First Solution: Interp Pools

First Solution: Interp Pools

  • AOLserver 2.0 used a pool of pre-initialized interps:

    • At startup, interps were initialized and place in the pool
    • Threads would allocate interps from the pool when needed

    Thread
    requiring
    an interp

    Thread allocates
    interp from pool

    Thread
    returns interp
    when done

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld032.htm0000644000175000017500000000164107363640504021413 0ustar frankiefrankie First Solution: Interp Pools

First Solution: Interp Pools

  • Results of pooling:

    • Limited locking and high performance
    • Possibility for threads to backup waiting for interps
    • Sharing variables required a command interface (ns_var)
    • Special API’s to initialize interps at startup were weird (and unfortunately persist to this day)

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld033.htm0000644000175000017500000000227007363640504021413 0ustar frankiefrankie Second Solution: Direct Sharing

Second Solution: Direct Sharing

  • AOLserver 2.1 attempted a “share everything” model by simply linking sharable parts of the interp structure:

    • At startup a single “master” interp was created and initialized
    • Later threads would create “half” interps with links to master interp structures (e.g., command and global variable tables)

    Master Interp
    initialized at
    startup

    Variable Table

    Command Table

    Additional
    threads would
    create “half”
    interps

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld034.htm0000644000175000017500000000167707363640504021426 0ustar frankiefrankie Second Solution: Direct Sharing

Second Solution: Direct Sharing

  • Direct Sharing Results:

    • Dynamic update trivial and instant
    • Unfortunate sharing of some global variables, (e.g., errorInfo)
    • Necessary locking resulted in severe lock contention
    • Extent of the modifications to the Tcl 7.4 source code made upgrades to Tcl 7.5, let alone 8.x, very difficult

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld035.htm0000644000175000017500000000222107363640504021411 0ustar frankiefrankie Latest Solution: Interp Cloning

Latest Solution: Interp Cloning

  • AOLserver 3.0 introduced an interp “cloning” model:

    • At startup, a single “master” interp is used for initialization
    • After startup, new interps are created and then updated by copying commands and procs from the master

    Master interp
    initialized at
    startup

    Variable Table

    Command Table

    Complete
    interps for
    other threads

    Commands, etc. copied from
    master

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld036.htm0000644000175000017500000000165507363640504021424 0ustar frankiefrankie Latest Solution: Interp Cloning

Latest Solution: Interp Cloning

  • Results of interp cloning:

    • Limited locking and high performance
    • Shared variables again requires a command interface (nsv)
    • Consistent with Tcl 8.2 model of interp(s) bound to threads
    • Implementation requires no code change to the Tcl 8.2 source, easing forward migration

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld037.htm0000644000175000017500000000153007363640504021415 0ustar frankiefrankie AOLserver Multithreaded Tcl Examples

AOLserver Multithreaded Tcl Examples

  • While the implementation of multithreaded Tcl is somewhat complicated and goofy, its use is still pretty straightforward

  • Let’s look at some examples...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld038.htm0000644000175000017500000000173207363640504021422 0ustar frankiefrankie Example - Creating Threads

Example - Creating Threads

  • Threads can be created and joined with ns_thread:

    proc my.thread {host} {
    … open socket, fetch page …
    }
    foreach host {host1 host2 host3 host4} {
    lappend tids [ns_thread begin ”my.thread $host"]
    }
    foreach tid $tids {ns_thread wait $tid}

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld039.htm0000644000175000017500000000214007363640504021415 0ustar frankiefrankie Example - Sharing Memory

Example - Sharing Memory

  • Data can be shared with nsv variables:

    proc my.thread {host} {
    nsv_set pages $host [… open socket, fetch page …]
    }
    foreach host {host1 host2 host3 host4} {
    lappend tids [ns_thread begin ”my.thread $host"]
    }
    foreach tid $tids {ns_thread wait $tid}
    foreach host {host1 host2 host3 host4} {
    … data available via [nsv_get pages $host] …
    }

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld040.htm0000644000175000017500000000201607363640504021407 0ustar frankiefrankie Example - Simple Cache

Example - Simple Cache

  • nsv and ns_mutex can implement a simple cache:

    proc cache.get {key} {
    set lock [nsv_get cache lock]
    ns_mutex lock $lock
    if ![nsv_exists cache value,$key] {
    nsv_set cache $key [… fetch data for $key …]
    }
    set value [nsv_get cache $key]
    ns_mutex unlock $lock
    return $value
    }

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld041.htm0000644000175000017500000000257107363640504021416 0ustar frankiefrankie Example - Real Cache

Example - Real Cache

  • Unfortunately, a real cache is generally more complicated, requiring the ns_cond command as well:

    proc cache.get {key} {
    set lock [nsv_get cache lock]; set cond [nsv_get cache cond]
    ns_mutex lock $lock
    if ![nsv_exists cache $key] {
    nsv_set cache $key “”
    ns_mutex unlock $lock
    set value [… fetch data for $key …]
    ns_mutex lock $lock
    nsv_set cache $key $value
    ns_cond broadcast $cond
    } else {
    while {[set value [nsv_get cache $key]] == “”} {
    ns_cond wait $cond $lock
    }
    }
    ns_mutex unlock $lock
    return $value
    }

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld042.htm0000644000175000017500000000202607363640504021412 0ustar frankiefrankie Putting AOLserver To Use

Putting AOLserver To Use

  • While AOLserver is a powerful and flexible platform, by itself it’s not a solution for any interesting web sites

  • Instead, web sites must generally extend AOLserver with functionality to support specific needs

  • The Digital City web platform is an example of putting AOLserver to use for a custom service solution

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld043.htm0000644000175000017500000000112107363640504021406 0ustar frankiefrankie The Digital City Platform

The Digital City Platform

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld044.htm0000644000175000017500000000130607363640504021414 0ustar frankiefrankie What is Digital City?

What is Digital City?

  • Digital City is a local entertainment and information guide available through many brands:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld045.htm0000644000175000017500000000203407363640504021414 0ustar frankiefrankie The Digital City Challenge

The Digital City Challenge

  • Digital City presents some interesting technical challenges:

    • High performance database-driven apps (e.g., MovieGuide)
    • Re-usable interactivity features (e.g, comment boards)
    • Complex advertising features and management tools
    • Rapid application development
  • Digital City also inherits AOL’s media-company legacy of continuous, instant editorial content publishing

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld046.htm0000644000175000017500000000132707363640504021421 0ustar frankiefrankie And Digital City Must Scale

And Digital City Must Scale

  • Digital City must support huge traffic from AOL, for example, from the Welcome Screen of death:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld047.htm0000644000175000017500000000132507363640504021420 0ustar frankiefrankie The Digital City Architecture

The Digital City Architecture

  • To address these challenges, Digital City maintains a complex, multi-server architecture:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld048.htm0000644000175000017500000000223407363640504021421 0ustar frankiefrankie Digital City Servers

Digital City Servers

  • Servers at Digital City all share a common AOLserver core and set of extensions:

    OS (SUN, IRIX, LINUX)

    AOLserver

    APPLICATIONS

    ADP PAGES

    APPLICATION TCL PROCS

    DCI TCL PROCS

    PROXY

    ART

    NT

    RPC

    POLL

    NV

    SOB

    NCF

    NCB

    DCI
    Module

    ROSETTA

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld049.htm0000644000175000017500000000225307363640504021423 0ustar frankiefrankie Some Numbers...

Some Numbers...

  • The Digital City platform currently comprises:

    • 6000+ ADP templates with 170,000+ lines of HTML and Tcl
    • 100,000+ lines of Tcl in an additional 800+ library files
    • 3,000+ Tcl procs and 450+ C functions, of which about 280 implement Tcl commands
    • Multiple SQL/PLS databases with collectively over 1M records
  • All of which must daily:

    • Handle millions of page views
    • Process 100,000+ database record updates
    • Publish and index 7,000+ new articles
    • Accumulate over 3gigs of log data

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld050.htm0000644000175000017500000000156707363640504021422 0ustar frankiefrankie Examples

Examples

  • Seems like there’s probably not enough time to look at all that!

  • So, let’s take a look at three interesting examples:

    • NV: Network shared variable arrays
    • Proxy: Tcl proxy process interface
    • Sob: Small Object server

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld051.htm0000644000175000017500000000221107363640504021406 0ustar frankiefrankie Example: NV

Example: NV

  • NV (Network Variable) is an extension of the nsv shared variable interface in AOLserver:

    • A client (e.g., front end server) can request streaming updates from a backend server
    • Client variable interface remains the same
  • NV is useful for several applications, e.g.:

    • Sport scores: Continuous updates, streamed incrementally
    • Movies Top 10: Recurring bulk-updates of aggregated data
    • Meta data: Occasional updates of data which must be consistent on all client, e.g., list of known cities

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld052.htm0000644000175000017500000000207207363640504021414 0ustar frankiefrankie Example: NV

Example: NV

    Pub

    2. Sports scores sent continuously to Pub by provider in weird format

    1. Front end serveres connect to Pub for scores nv array

    3. Pub reformats as nv array and streams updates to connected clients

    4. Tcl templates access scores nv array without regard to underlying network updates:
    <html>
    Current Scores:
    <%= [nv.get scores current] %>
    ...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld053.htm0000644000175000017500000000224007363640504021412 0ustar frankiefrankie Example: Proxy

Example: Proxy

  • The proxy interface is a modified Tcl-shell capable of communicating via pipes with AOLserver:

    • Processes are forked on demand and maintained in a pool
    • Pools are initialized with application-specific startup scripts, e.g., open a particular PLS database
  • The proxy interface is used for several purposes:

    • Isolation of code which is not thread safe
    • Evaluation of code which fiddles with env, e.g., env(TZ)
    • A light wait process to fork background process (forking a 500meg AOLserver can be problematic)

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld054.htm0000644000175000017500000000232507363640504021417 0ustar frankiefrankie Example: Proxy

Example: Proxy

    AOLserver Process

    Proxy Shell

    1. At startup, pool is initialized with init script, e.g., open db

    3. Script evaluated in proxy, results returned through pipe

    4. Proxy results available in
    AOLserver interp->result

    2. Scripts sent to proxy with proxy.send:
    <html>
    Search Results:
    <%
    set script “pls.search $query”
    foreach doc [proxy.send db $script] {
    ns_adp_puts [putheadline $doc]
    }
    %>
    ...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld055.htm0000644000175000017500000000175107363640504021422 0ustar frankiefrankie Example: Sob

Example: Sob

  • Sob (Small Object) is a highly optimized client/server interface:

    • Access through pools of persistent socket connections
    • Aggressive caching and optimized I/O
  • Sob is a critical platform component used for:

    • Dynamic publishing of editorial content
    • Storage of meta data for various service areas
    • Comment board fetch and post

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld056.htm0000644000175000017500000000225207363640504021420 0ustar frankiefrankie Example: Sob

Example: Sob

    Pub

    SOB Server

    SOB Clients
    (Front end Server)

    2. Member requests article; template ignores complexity and simply executes:
    <html>
    Article:
    <%= [nsob.get articleid] %>
    ...

    3. Clients checks for article in client cache and, if necessary, requests from server

    1. Editor uses Pub tool to send article to SOB

    4. SOB checks server cache and, if necessary, reads article from disk, and returns article to client

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld057.htm0000644000175000017500000000142307363640504021420 0ustar frankiefrankie Sob-Powered Publishing Tools

Sob-Powered Publishing Tools

  • What’s useful about Sob is support for forms-based publishing of content independent of presentation:

    SOB

    Templates

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld058.htm0000644000175000017500000000167507363640504021432 0ustar frankiefrankie Extensions Working Together

Extensions Working Together

  • The Digital City extensions provide a powerful set of interfaces and API’s for AOLserver

  • However, they’re most useful when used together for a particular applications

  • Let’s take a look at MovieGuide as an example...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld059.htm0000644000175000017500000000151107363640504021420 0ustar frankiefrankie MovieGuide

MovieGuide

  • The Digital City MovieGuide provides our members:

    • Theater, movie, and show time listing
    • Boards for members to provide ratings and reviews
    • “My Theaters” personalization
    • Top Ten listings by member views and clicks

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld060.htm0000644000175000017500000000151407363640504021413 0ustar frankiefrankie MovieGuide Features

MovieGuide Features

    Movie Synopsis
    (Sob)

    Member Top Clicks (NV)

    Member Ratings
    (Tally)

    Showtimes (PLS)

    My Theaters

    Movie / Theater Listing (PLS)

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld061.htm0000644000175000017500000000171707363640504021421 0ustar frankiefrankie MovieGuide Components

MovieGuide Components

  • MovieGuide uses many of our platform extensions including:

    • Fast front end PLS search database through Tcl proxies
    • Network tally system to record site activity
    • NV to broadcast aggregation of site activity
    • Sob for editorial content
    • And much more
  • However, it didn’t always work this way...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld062.htm0000644000175000017500000000166207363640504021421 0ustar frankiefrankie MovieGuide 1.0

MovieGuide 1.0

  • MovieGuide 1.0, launched summer 1997, utilized a straightforward SQL-based architecture to query listings and update Top-10’s

    “Where is the
    English Patient
    showing?

    “select movies where …”
    “update views where…”

    Alamo Drafthouse, Regal Arbor 7...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld063.htm0000644000175000017500000000211307363640504021412 0ustar frankiefrankie MovieGuide 1.0 Issues

MovieGuide 1.0 Issues

  • While it provided a convenient data model, the SQL-based MovieGuide was a disaster:

    • Threads would quickly backup waiting for database handles
    • Squid caching proxy servers rushed into production reduced the load, but broke the 100% dynamic page model
    • Direct Top-10 updates from the front ends caused locking problems with concurrent backend publishing
  • A more dynamic model which could handle direct traffic was required...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld064.htm0000644000175000017500000000200107363640504021407 0ustar frankiefrankie MovieGuide 2.0

MovieGuide 2.0

  • MovieGuide 2.0, early 1998, utilized a new file-based caching mechanism and background Top-10 updates:

    “Where is Titanic showing?

    Regal Arbor 7, Dobie 4...

    On cache miss,
    “select movies where …”

    Access listings through cache

    Background Top-10:
    “update views where…”
    “update views where…”

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld065.htm0000644000175000017500000000130607363640504021417 0ustar frankiefrankie MovieGuide 2.0 Issues

MovieGuide 2.0 Issues

  • Unfortunately, the Top-10 updates where still a problem and the cache didn’t work so well:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld066.htm0000644000175000017500000000203607363640504021421 0ustar frankiefrankie MovieGuide 3.0

MovieGuide 3.0

  • Launched in mid-1998, MovieGuide 3.0 utilized a new fast PLS-based proxy database and a special network tally mechanism for Top-10’s:

    Front End

    PLS

    Front End

    PLS

    Front End

    PLS

    Pub

    PLS

    Asynchronous Tally messages

    Periodic Tally
    sweep and broadcast

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld067.htm0000644000175000017500000000202607363640504021421 0ustar frankiefrankie MovieGuide 3.0 Success

MovieGuide 3.0 Success

  • The use of PLS provided excellent, direct search performance

  • The network tally interface eliminated contention with backend publishing tasks and reduced front end load

  • Improved performance and scalability of MovieGuide 3.0 allowed us to double our MovieGuide cities and add cool new features such as “My Theater’s”

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld068.htm0000644000175000017500000000173307363640504021426 0ustar frankiefrankie Monitoring Performance

Monitoring Performance

  • As demonstrated by the MovieGuide, one can easily fall into some deadly performance traps

  • One of the first lesson learned by Digital City is to watch for trouble by monitoring what’s happening under the covers

  • Let’s look at a few statistical interfaces...

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld069.htm0000644000175000017500000000132107363640504021420 0ustar frankiefrankie URL Stats

URL Stats

  • The “ns_server urlstats” provides timing statistics of individual URL’s, a good first place to look for performance hotspots:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld070.htm0000644000175000017500000000134707363640504021420 0ustar frankiefrankie Tcl Statistics

Tcl Statistics

  • The “ns_stats” command returns the usage counts of individual commands, a great way to look for fat procedures which could be moved to C:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld071.htm0000644000175000017500000000206607363640504021420 0ustar frankiefrankie Anything Specific to Multithreading?

Anything Specific to Multithreading?

  • A common technique when a bottleneck is discovered is to utilize some high speed cache

  • However, in multithreaded processes, caches require mutex locks which can result in lock contention

  • The ensure high hit rate and low contention:

    • Write proper cache code!
    • Monitor hit rates and contention closely

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld072.htm0000644000175000017500000000124307363640504021415 0ustar frankiefrankie Cache Statistics

Cache Statistics

  • To monitor memory cache hit rate, use the ns_cache_stats command:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld073.htm0000644000175000017500000000123407363640504021416 0ustar frankiefrankie Lock Contention

Lock Contention

  • To monitor lock contention, use the “ns_info locks” command:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld074.htm0000644000175000017500000000137207363640504021422 0ustar frankiefrankie Overall Performance

Overall Performance

  • Finally, because multithreaded applications can be so unpredictable, be sure to track overall performance under actual load - Tk is a good choice:

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld075.htm0000644000175000017500000000105507363640504021421 0ustar frankiefrankie Wrap Up

Wrap Up

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld076.htm0000644000175000017500000000125507363640504021424 0ustar frankiefrankie Who Developed and Operates Digital City?

Who Developed and Operates Digital City?

  • The Digital City Tech Team!

Previous slide Next slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/tsld077.htm0000644000175000017500000000200607363640504021420 0ustar frankiefrankie Where To Get More Information

Where To Get More Information

  • For more information on AOLserver and to download the AOLserver source visit: http://www.aolserver.com

  • For information on the Tcl 8.x thread model and to download TclPro visit: http://www.scriptics.com

  • For an excellent collection of tutorials and guides on AOLserver-based database-driven web sites visit: http://photo.net

Previous slide Back to first slide View graphic version

aolserver4-4.5.1/docs/intro/tcl2k/html/img001.gif0000644000175000017500000001320407363640502021166 0ustar frankiefrankieGIF87aXÂ÷3fÿ²²²™Ìÿÿÿÿ!ù,XÂ@ÿH @ÁƒPH ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éâ/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°®Û»xóêÝË·oE¸MȫӮßÈ+^̸$ृé&4ܸ²å˘3¯}L32ᲚC‹MºôIÎ5ÅJ®ËÓ´ë×°c‹FÖ&áÉ­eëÞÍ»÷æÀÀ«þLÙ·ñãÈ“¥-ÜöjÐÊ£KŸN=#sÏt¡Wßνûñëó@÷N¾¼ùÐàÏ}¾½û÷|Óß\¿¾ýûiåC}>¿ÿÿ¥ßj¸hà¢4àm¬%èàƒb´ ìEhá…ÿNH_PtHQ‡ ‚舑؈!z˜‰&ž¨â‡/¶¸â‹™(cŠ)>„"Ž*òH£Œ5ÒX¢‡>@ÀBbøŸ†âUÈG&©£”S9¢PBd‹YFi¥‹_j”%—1&Iæ—H†éå•jJÔe•lN”£’ 2)UtöÔæ›zñ™ç}v’…'PT"U¨f!VuèF-*g›OB:T¢øZ˜“)™f{Jå”W‚êæ¦h–ª–FR‰%©¢~Šê¨Až:#Œ`ZYf«·Êú#«²ºÚê««ºd°0*±¾&;,ŽÊºªi¯Â>Û«ª¦ž*¥´ZYZàŸÜ2æh·$iÛ`Zß‚kî¹-‰«]¦¶Ž(ì» ";*¥ïî+ºøÒ©î ùöë¯fûbúïÀ+pÁ'lppaw§À G,ñYOlñÅ3 Yxc|Öœå^dìH…†ì1^Ÿl§Óò +¬>ÆË+±ÌÂ{¬Ë*S•rÎ<÷ìÓÎ>-´cwƱ Í¡­¬RJ/›¹² u•]BÉbªdꊵ¦~þúéÓµN ´ÒDIk¯Ö56+õ‰6¹jµð暬ÜîÚüê¯tÃýïØd÷í7E‡|ÿݕɂSxᑎ,*Íjžý2¶ßÊÛõ½v¯]oãžZ|8â¼ÞQ朧´y褫ráo>o埯>läé¯ï>ií¿/fñÏocõ߯?bùïïÿ^ýûŸÝÀ0?Êkó:vÀ,Cš'x™Rð‚:ƒàÑ.…ÁòOƒ­c G¨ ’ð„=1! W(:.P‚,ŒaÆPAÊð†[Q!ª@W,‹LŽ#`£Ú1ÇÃa шŸ+S‘èÃ4Å L8 ÷³!B]ëP|:Ó1¢Å'öŠ@,™½HF‰qNkÒÍØ©R-1Š€›"ÆeEOÅ Œ_Ä£—õ¨]ÝqˆI9ÇåMo¾ôåÝnv7j-óeË$Ò0Û–9gS—2£ÜܰÍZB4Üà¶&IN¡˜ðGGâå7›8«rO‡ôzšŸ©£Ç1Mî$Ý,óIÎ}òS’þü'*P´ 2<(çÖHCjSfhü%ÜîÈZ9Í¡æShß yL|z‰£ƒL£ÖéPŠâR|E( S*¸X‚Ä¥‚D%ÝT‚Q²±”lÆÄ§bö¬EÕ””—ÃÕDkÒkns—»©JˆÊ8¿)u©|jÐTÙÔF¦Bmæ4åeºJRh~WdÔâ¦Ô±ö‘“[4¥Q{yO³zTuá ! ¡J×UHµ® ¼+^ ¨×½ °¯~õ`«¿ÁÖ~†=¬ü«X÷1¶±ê{,d3êÕ*Nv¯’½ì÷2«Ùíq¶³×û,h§'ÚÑ>¯´¦EjSK¼Õ²ö•mÞk [êÚÙî®¶¶½ns;»Ýòöu¾ý-ê‚+\}ÆV„Å$q“‹¸å2WpÎ}®ß¢+]›w®Õ5èum˜]íÆõ…ÜínB·;NñƺæízÓ›³õ²÷dî}/Æâ+_¸û®®†å­¯é«ßˆñ·¿ û/€ &à׎¼t40 ¬à~1¸Á¹Cð%!üW ó‹Â…µpÒ01ŠIòÃr­¸þl1!™ºÉªù1‰’’ñŠqLb;æ1µ1¦VãÈb"OîjD1‘¹xÆ2¾mÆ]S¤iä'û5Ȭ\%躸äeý1‹c £0ݸd.oIÊ"=+“ÉlD—Ëj®[š‹¼G0çøÆ*Ö±Õ¬\g<ÏÙ‘s޳PÙìeÅ>9n&V•«áÂ¥X1‰æç¡9Ì-˜›©Œô<‘F¬D:­3f'5[fU¬š‘³%ˆ© ÿ YrMž¾—w²’2íÒJLTCuŠë1£ñ§±Îæ×Y­‘õšˆ´þ5H—]럪5j&6/¥Élj'û¢ØÖu³aÑŠ®º*®îÔX¿ý哎:nnÜu)s9Ò`3¦6ÆfNI}îz»xÛÚÖê‡éÉo‰*«£Å´—k]Lqgòlåv+ #ê•Fÿäàéfø×ô¶‹f5àÆF$¾“¹êAžÑÙ@µ¡Ï+ÓX¯¶¶ANJhƒô­'ø3MªM{1ÒeÞþvR&Xi ç”Ö—Ãišä·rºÊ>zÐ[=t¢3Ýy¼wÍò¥{G…Ò|ú½ómt­RSçV—eÓ1ÉgŒB[{“f/vŽvì½í~;Üßô¹;¨îvGÞón ½óéߥ¢lÿ¾>¿¾Rr?üf_ÜEßÏðr|¿%¿nÿB>@ åõZ‘*7hëαR&J¯¾Ì³{Ñ"kŸ+—å]f]­Þ»¼âß#ûÙ·§ö¶7îsOžÝÛíj´¨…By„ù>–Có1·æu9?ôè;•7¡—ßN/æ-©¤ÿÞ¾j-a†þÎæÞs[ÑMg˜õ ¿ØñÏãLŽ/Üõ¤ª8PI^ó¡Ò›äz+$±{t­Ÿ÷Õñ>Ù7€Ç#€åÁv•|Y|‡lÅ.HB¦l*Ç}[‡äGbŸS3e9æ×oóU€ÛsE4—~˜‚ŸW}èK⦂"8•f‚Ús7S¸u"Øe —kYƒtÈmDøifƒEƒ$HY7Gf€ÎSPø]H8…¸#…VØX˜…»±…\(^ø…ìS…b˜:aX†¦q†h?d¸†¡£†nˆm‡…‡tˆvx‡–‘‡zˆ?s؇ÖÕ„–ta€È9|Xˆ‰qˆˆxЏˆ}шŽ@—‰±3‰”ØU‚øU—X:¸‰d‰ž¨~SÄ ñ„¡¨4´!NaЧøsÊ£Š¥Hˆ­¨^¯(W‹6‹íU‹àe¸¨‹ÐÅ‹‚¿ŒÓ%ŒsTŒÆˆE‹ ¶Œ®ÈÎÈŠÐè1©h‹¾øŒÕH‹Òˆ«(‹Û(6ÈHŠÚŽ˜ØŒÞ¨ŒæX‰Ý؋ߘ‹ë`ã¸êð›5„QöX‚í8Œ9¡ûh_€1àÖÉXŽé_øH¹ sîøi| IŒ Y‘v‘ÿ˜‘yè8‘ù‘þ"‘þx‹#I’ùb’ I*鉒.ù’æÂ’ä8“4Ù;1™8™“b“ô˜’>©“y“9”BW”AÙ“H‰!@™BÙ”I’'É“G)•ò”•Xy!~Z‰‘LÙ•ò•–bY';ùŽg “J •f¹–}—– —^)—\I—zg—o‰—þA–2y•| xTÙ’€˜}©—…i˜€‚˜ð¨˜K˜Ž<™uÙ–[¹—”y{“™™Å³™œywžù™yi™`™˜¢Y~i•yššIšeiš¬É=o¡›éš¹š´Ù{³™›‹i›ªÉ›’šj œµ9˜F‰›Ä€»™œî!œsÉœ¨¹œÐ©{Ò9ºé›Ãi´WÚ)vØùœÝ©œßy—á™ÎIžåI…㉙é©çÉžíï ›ñ)ŸÜYŸæyŸø©žÿƹ”ô¹Ÿi¨ŸŠ¢„‘G 0& 8vlk¦dìâS ¦gÛj0HhŠbÑf¯5ŸÈù‰f„/%q÷g­„‚‰cj©Öz‚dJ2Êe‚†d2¢6¬ÐLjʻ\A ½Ñ¤Ñí‡ Ò‹ñÏ$C}ÒEaÒ¿…Ñœ˜Ò %ÅkÓº»R+b2M0,};Ö<8(ê“rÓ 9ÒçSÆ+ÈÜVQŒv›–¹í6Á¸ "çÒð±ÓÆ¿ôÖSÕGŒ½¼+ÎîlTùl0ÝRÊnû¦ÕÅbÑŸ4»ß¼S>GOcÍýé–ô Ð1x¹¬ur¾¾ËÁ ‹¯¦ÛÏ-\×—y׸Ӧ1ë¸}99s°æ»–Ë‚œSs«Óe `Bí3VMiT ’ó"+’ð©Ò³œÙ¤ý}ÚH‘Úªm¬ÝÚDñÚ¡SÓ»g°|²º=4²Ó%‹Ô,°C\¹XÍÙ¦]®|3ökÙH«Á‘‹Ç,–3½Ÿ—D->(w§RvÑùŠ$ðµŠKÓ ¶ìhØ¥ùÂケ+ƒâýËë ²l\µ/س;ÔæýšèÍÌ?½NãÝ}Þô}ÿK¼Ï<ß[¥z»xÝÚç×ôû×}¶!WÄË {ëÖß\Þ¡]•Ù¹>ZV´> Í¾Š½RººÖ-¨»÷}›¶•Óµ=z~YÕÍ„)þ›°ýA/^ã¼|Ü8® :¾ã&ÑÛ>ž.^=ä4äD@~ä-tãJ¾ºFÞä‘äPN4L>åY!åV.Xžå ±å\î^þåoñäbNIU^æ«Mæh.a¾æÑænnæ3žáqÞpg^çæ¤æxž@1²£½ç§?¡çxç€þ„^è q舮è…Îè€îè{éƒ.èu.é•Néqn陎én®éÎékîé¡êh.ê¥Nêenê©"Žêb®ê­Îê_îê±ë\.ëµNëYn빎ëV®ë½®<;aolserver4-4.5.1/docs/intro/tcl2k/html/img002.gif0000644000175000017500000005174507363640502021203 0ustar frankiefrankieGIF89aXÂ÷0 '4+ '07"/.4@z2Q2e/p0/F*/{?H?@?@_Jh/HP?HO @pAB Q&O.'~c,l2'F6A@7`n:EVMPF=WeP`?mL pH0wp`}/LJM_Ze_`_oPGpXozrR|||<“36‹ÿ/0Ï@“T¥`#R„%Z¦/_—€LF1p‘`1 P¹O/°`¶j1ˆTH”kR•rm¢SE¯@o®qMŸxnÐÅ+Â3=ýý.+Î7LÏV0ÏgÞh>æh8ÛIWÓN`×mBÏaaþPQáVeéu?þli€x€ ¯gŸ€—?°–µ…/¯§Ÿ˜_‡pŸ§o­…Z¶‹g³¤I¯¥n‘È Ð/°ØOИˑ6̵˹6÷ƒ9é±9ÊWÆ“m̼Gϯv÷”Fè‹hö¥iÓÁ0÷ÍúÚ#ÿþõà=ÐÀOÖÊgÀàoüÞLàØ÷âSøäo”‚”’²Ÿ Ÿ ¯±•Œ²ª˜¸¸¸ÚŸŸÿ’¬ÌŽ°à®­Î³¶ð°Ç¿ÈÏ™Ìÿ°ÂÓ¶ÈßÌ’’˱˻­òŠî¯ú¯¬Â¶¿ï¼ÃÚÒŒÌÇ´ÏçÐè àÏ“ìÑ®òè˜ôèµÆÈÆÌÑïßàÚÛâîìØÊßæÎööö!ùÎ,XÂ@ÿ‰èŒHÁƒY9S謡Ç#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb-g/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ qoG¿n/F9¸á^zùn\x±âЇûòeü8°åËjá6­%w¬N»-?ž<º²³Â~KFœ˜uã׊U«†lútíÙqÛf½Û°iÔ±kû>Ì»7íâ)#îP7æçÐWj^Ú™nBÐ=qk'¹ypî«Á{ÿG›ºÿÿ'MGSuž•à&¨à‚ ^$`MbYWO Vhá…fxÕƒaÙäÙuj(âˆ$–hbFraØèâ‹0ƈ`ŠÒe Œ8æ¨ãŽZѸ¢-òX+ È@+5ƒLÎ$À$“M6ô¤”M>é$•Nf™%–QN ¥–Zrù¥”W‚ye”]zÙ%šVª™æšUZ§›rÖY¦˜MYešwÆÉ%™zÞYf X¶i案&Š(+Œ6 ÃiÀ bŒJji“ 9‘Jx£¦D1C£¤–jꩨ¦ªêª¬¶餬Œÿº«§öªD¥Â€ ª¦¸ ÃÀ ì B( l° ÙÊ#§7±â­A)è´VkíµØ¦:*µÙB R¶Ž+î¸Ézë³Py¤¹=e ÑðÆ+ï•Èˉ¼GÌ«ï¾üöëï¿óæ ðÀ; lðÁð,0À 7ܰ{Èì:)q¦€ßnøáWqÆwì1^ðF$1^•–Ë.º‚È®Pî>´/"œ8/'œ¨ðŠ °`Á&ð:Á $ü6´Ã+Î@±ƒ3ɽ B²3ñíÐÑÉ  ,òJ ;\¼WO‹Â \6<ð0oÚl«½CÛÇýoI{Á€Š^Ï=ýĤRÿªìŽ(8áÊÑ.÷/ÐÌ W4nñ×rG·Â SŽÄå\c^0¼i¼æš_îyÛn› pÙ çÌêÁ¬"@0ºÄ® ë«ëÂh0Y|š30 Â§€Œ®*–¬) !ƒ˜b̰áü9ŸF1$ãŒplâL3›l¢È÷Š,BQÁ"›ê÷Ê«û,á+µìPÒÿJ½0äøûK¶ç•¯ýùåÿCÁ¸æ9ÊQnsf#[ ÆÀ…åmiÓ—DVÇ d( ̨`ÄVÇŠ\8äÅ€3@¨‡64¤ ½pƠdž¶èÍ!|‹”ÉÌ•>g±ï'îC "²C”¬=7ÜJ K–Ã[ÿÕHë âIЍÄ&eˆ™b¢¦Ž(•u9‘$EŒ˜·ÈÅ.zñ‹` £ÇHÆ2šñŒhL£×ÈÆ6º±|¥:ßÉ6CGuʆWLIç5¨9­N Y  Hy!Ch…ÌýÈ?6r„t$!IEZò’˜Ì¤&wЉNÀ«“/Lžùfè-*’ÅŠy Iÿ6”Ø€h @B2JAQŽ4¬ãfjTÅ$Öò#E4ò"Ìbó˜ÈL¦2—ÉÌf "ˆfC¢ù<$¶¹M`4¤ 0@Œr:Ûšà€"Ä"ïT“ÞÙ¤"œ"3H<à€V8ƒÿ½`InIJh™ò3¾üeGŠØŒ†:ô¡¨D'JÑŠZ4¢WA§3°©Ðˆ8  i+ ŠTŠB:¨Ê::†^ô¥0©L›ÁŸ½ x³Ó‡@ªMGÓã-/7Î0Eïv—Ô£în9ÓR›ÃTòLÕ©IÀ)œ!OgÄbþôê ™Œ’:ã±H†Jª‡¡­geÅ)fPN!3Õ!qeª† tYº¤ÎzÉÒ–.ç¡4h( Û Æ2v¦,M½£\ÀBõ©Oê¡þÆ©•É oF[ÕÄ<õ¨¿¹*TŸšœ í„•9Réà «ÊÃJö¶¸ÿ(à2x`A *f= € â%¸È¥*R]c<¦.×6ÏÅ›s›{ÕÒ*µÔ….k“€0¤‰„xWáUÂÃD†*œQg|À!„ïöÒgl!©pFñL†Á8kR‘Sù¶8’í§hË—æöÁ¹}Hp= `@ΰq;Ë[ {` 'X tAk‘åauª9ít³+UáL[uÆ<àÜ9Ä Vð@pl1$Õ¾[ò‚ìö2¤úuޱ‚ ¸×dð…3hŒ‘×¢/°ì)Ê`‹¸4±`^¬cúØ0ƒ™Ì–iDp1†1HYM^ÿ.tqHdèBÀï U4C}†. :A—Ršw~ù—~l'QcVQßÇxq€$ðø/1–` …À({%Ö—b8‡«µ‚ÑQlhÇyâ·oÒwƒ~Á +Ó : Z z š  º  Ú ú ¡:¡Z¡ÚŒ÷Œþ© !Œµ²*–Ò*¯+ÿ#*¢ó¡Ø"+•R)%º¢,)(‹Å$<±qÊeZˆfb wÞÑ\:*iŒØ£-E*ºR*#ó*!Z¢¿r,B°B 706p, xýù†¸Zº¥\Ú¥^ú¥Ü¸Ÿ v¥*Ù‰Á/÷/÷2 0;0ˆ ¦C4Fƒ4A/ÖÓ/vª/ZÃ5Z³9´?“@oS:…z¨›ä09Ð¥¡¹`“uä^„Kf§¡Xš}{Ô3Nà„`ˆªˆ Šãsܪ†@„Щúb4ó~Ä4ŒÄ9° @ü‚6ƒ:9°5‚š«D0¤Ã5ÿ£6”¨þ² «0;ÿ¦Ðg°£¬JÉ;&‰¿Ã¦€ÍÍP<Þª_’r¦ Ùê  ‡f­1`ŽÝ³ ‚ Šàà#¡WqT¥ü‰©eª©†Ó/xa ›`WP–ÓGj?PC4¯ H;à°ÈÚ/˜#¬<à9 @¢3@<@¬£/3¨ûB:†šÛSA̰ «ƒ ´ó²±Ã( øÇ;"á<Î=l0=íê ì ÃP¯ãƒ²”:Jb*#åYpG;ž rRI)"I›o¥Î@ aµU[Yˆˆ†}ЏˆÓ·Cbk‹‹xˆck‰†!L’6-»Ó;•R³Ké´ÝXßj—EsnÄE‹… 4 ·}ëEË·{Û·ƒ1›·ˆ{¸zË·†Ë¸Zt¸{ÛE„븊‹¸eT¸“ûE‘»¸‚›¹žÛ¸•‹FpÔ7ú:¦üŠ~fú.»ºAS«¬ûº°»²«H£+CK»{dŠºþÚ`º˜´±DË´%!·1ÿèah·G·JN ŸÐÀ •}ÄÛr`P˜ºñL¦  Á0LÈ£ ?†;È3¾?F¾Ý[¾I%¾Î´¾ÉMÀ¼€ ÒD ñ»QÕä Õôèô•@¿Ô”¿Ñ4³Ñ ÜTÀ ñ á$Äà §FÍp ,ÀÏÑÐã -Ô -ÄugawÐ-äÓ{©Õû„4¸»q8‡Ÿ|­ zݧl§|T(~ìô$3ò4OuÒ$±°NF0WJPñQEà²R!•²Bo·{}¹Øëexrò  c0xa1\ÜnoŸ¹#øäU†ÂU[&ebQrOÿ U&u„|5Œ¥‹´Q|½*<ÀUüpü‘ ¹@ eb\S·Y~‰‰ÎxÂ)©»Ï7sÏ6QüÈ{<³‡pcpÍT0c†o œjE9µé±[¼A ˜@  ¼` ¤– ‘´ ¶<Ë·|˵|Ë—€ —ðË’ÌÂ<ÌÁìÄO«!Q«m8Éçcp†@ ” ‡`a 'p«°Í`'ppÏ,ÍÒl Òlg@”'qÌQÐ^19Feà<†Ïá 8æc½ƒ8JdÈða¨f45)Fddç…ÅK·Ç‹ƒ'…ÌŒ[[ÁJ:š®£ÿŒPÈpà ‘à ™@Í` Á Á ¶ì  ÒÎðÌÒ`¼pkg Ë  JöVà ð„ oðÑ2WÇ1’ÌÄÆPNÇ‹QßçtˆeQva!¶…ȵe»Õ=t¶„Öc[¶[ ¶Y8Ö•Öd›Ö·ƒÔk¼Ö›Â,ÑÝÌ’ásYÊ\‘ý×bwbh‘{Ø#‚ȪÈÐ Ñ*gƒNÃÕÌ6Õ‹õØÁ×XÍÃí‡Ùò‡w}}£<$Ö_ݵe=‰ZK¶]k"îlŠ ×=×àX×d(|f†lŸHfLGÙÃÇ|†GÛYYÂ+ˆÿm¥§+ÅyLÅÔÃü|RýÛSX˜O¥T0P®&V³t·qôØ?jØšÊÔ¸[Üx,Û+LŠVÛÅt–íÛËgÕÏ ‘«½uJôÞ^ÖÚ&,×(Û½·Ìwu¬·—Áâby5ÜûªØ×)xm×û=SŽg¹.ºR_‹…h‹¶ßBß™Þtß ¾à1u†Ü]nº¾¡p¨ÇÜ>ú£]UŽiTò­!VXÖnÍÕZÖ¶sL*6·pQ·ŒMrúâ)wV~äHžäoÄ8>Ú£]ãKèÝP¬áøÝyûF‡D~ª”€A²À:Žã®Àta®Ö“(Úbæ ®`á]Á6^Ú\½µ‘Èæk‡áåÿWâ™*Þ<‡Y^äÑ /è/ð…Pè­Ã ,Û Å€ ÅÐÀw÷‘0Ú;U*6’} ¤Ù‘!IÚfÚMnÚ fçMHåÈ{s„çÂ4P|‰ÕÂgÞ“,¸ðƒkÐ8vð#ȲQ)`€øº^T¡åÙ+FZ–îÙÁÑsÛ¥]Ž6i6ê8^ÚG1âvLêA.qW®lÍÙÀz™Ít©ÎÞ¯'ºpv° `ÈP‚r|ttN}tüÄ.âÔ]6ä}.QÍùîß"åó~Çnå‡Å­ Å­xáPQð/ð½3îɃ ­à€dE€Î`8pðÎãü~"ôÎ`6ÿ˜ñ"p4ÇܰjÛîÂKíMíïU~·~ïºÜ÷qo"O[‘2ZËØó>ÿó@Ï‹J¤©BŒÇè$Èø*°r¢KO2-ôÚ+?äÚ?þÐOóX¿”9Ÿõ\CœðœÀ 7 ósŽ Q ˜:°Ë°/énoH€“ i1 ÷ ) ”k¯]ÿ÷ B?*@°YÓb}{É’2Éð ¯`=q36зðJ/yúÈ}Ï“ )7£÷ù¸w1Ø>º‘:×ìƒã)éVuìÆžé›NbBêÞ<ׂÎÎpcì._êy7p“€ü*·õÂ_üùFüÆŸü´!…üÊßü¿ÄüÎýNýÒ_ýìCýÖŸýõýÚ÷ÍûÚÿý©ÿ„ý¿™×í‘ûª‰TGÊññbæþ(Øþˆiªþ&!þã{Ê)™ó¯ÑðïÀÙ@‚,˜PáB†Î lñaDƒBT8‘âFŽ=~RäH’%Mž=Z•êR¢M©Jíºu!X¬ÅšÅhujYžmݾ…Wî\Š-í¾\)sfM¾6sѨE²N shñXÂ_§5ù£bÊg¯ö ‹t+ÙË v®Èv±VÈ¢'*¦›ZõjÖ­ßÞ…Wo_Ú:m«>ìù³ÿn¶Qcõ <3oâ —N>»–4c᥋‡6žu4ôåf©KgnÙõvîݽ¯Ž {ví¾¿ŸGŸ·võ%Q·‡_¾÷ðxk¿™ßü|þýÓGͿް@ä¨>»ð#Ï6À„0B '¤°B ]Sð%óÃé¶ ?1DG$q¾ ašC¿<,±E_„1F :Q6½TìðÁwä±G¤Ï>!ïK±Áý€D2I%—d2¢‰¼ÑH›¤²J+¯ ñÉ k;K/¿3Lõ´,RÅ.ÅD3M5×4‰Ì(Íœ’M9çd3À0ÝÜ N餋• ¥ 2%gþ<ôOE ]4ÑòD]4RCmTRI¥ÔRM!hSK1U”ÒL5utÓQ=E•ÑJ=í4ÕO! ÕUYg”[o…Á¡[`E [y6^éÄ3&ä“5?'m¦Yd>=Õhi¥¶Zk¯•–Öi©m[o¿•qÇÍ•\q2„µÌbÌ1ÙÕv‚áV{ïÅ7_}÷å·_ÿÍ·^8]ƒF8a…f¸a‡F˜`}aX b‹/ÆØbÚýòÝcÏ”7.z%æ—W’OFù_w5™`è„CK+£YãXd{a@_géÙ”^ù¥c~°Á2^`cb‡ÿ´oKýâ ù­‘SÆ:k­'þ kÍD‰½ ïåß–U¾Ø!„°aéÖîáb§çôXÊ=«vkk½÷æ»o¿ÿ® ÁXE$W’‡ð XºB °ÇЍ@]êÂ$2r¥ó5£“ßSJ„±Ê„¬R@sF3¬h‚,qWdÓ£˜À)’¤Šn´œ¹àÅ+ìQu ABó–çÂ)üqÉl¤äŒÿÙHVè"¹X….aŠlê›ߜ¤„Zƒ ¤Y²lÆ&¡E8ƒí\HkIÀ_¦I—+âe/EòKÊå€ê81L/z’˜;cã`ÈÂÆÝ"„tÆ+v ÆW¼ÂÄ[Þñ<'HŽ&“£ÇÛ"C×ÑA r¤ŒT :B¥+mF0PÓ`ÔÔ¦7µ©.XNxr}¢ö¾Ç?ž¥R¬€þ‚TSäj z`CT¥*Õ4Tñ6‘ÎMlbïŒHçé:\®éžñÒ'OøY9 ø„p9[Da=##šŒ‡:ã¢+¦÷èL~”¤¤ãÀƒÿÁ6V¥; )"‘ðÇÇqÎxˆtÜKWúÈš®"Í`3€vSo²› ¹CARËfô¢Å`†3ÆINr¶"!ÍXå0šƒ’µžh:+²Òj;¶\ôrsk4QçL•¶4³ˆ¬ãñ&k¼éZvy;d®uCGYæ6îˆßoxÅKDyÄ–¿*«š‚ ²áîví…/GÎ;¬ßŠi½RŒ/Gê[ ¤¿¡3L¤Àž‰È¬`7dÁ9CšªÉÄ Å©ù•Ë|›H7¨-¨L³Ë'†#²_—˜!N¯=;¬¡#ÐÄ ù%Ðd9°ÁåFp<Þÿ š7ZžDÏ ÇøÅAP€¢ÀFŒB‘Vœ‚!“j‹Ã9üÄïrâ ù¥)Lá ™ÓœPÎPÍ•1sžÛ<ÎøùÌ‘!t›×\æGGzÒ•¾t¥'äOwÆ'žþˆLýÇpÆ#ˆ‘uªgýÎÅÔ«þtM4$ã¯D%>±q…täÀøøBŽ1w¬7é˜ÐC/J¢r*:âÂ}9AbÎtžÞð‡G|â“îôJdÎÐÄ#ÁõÈKžë¯z㟮qg@PH1:Ÿ&6<µôl(ÆJïŒÕ/DwhÃê L^¾ð^¹¼[NïÀ ¾,Í Á9Ï|á7‹øÅGÿ~ò…|å7ßù½?”5’`ª! HFös %d?û (ö@þp& úé~•Õ¿~ö·ßýïg¿óåß|Ä@"ô¯ÿ‡ð_"¹% Ь’xY(ïË>Yø>¡aˆ|?ò[óƒ¾_*>> l†ƒ˜¿ôÀ<'®Ð€D  €hK pŠ´?þË”Á %ê€\ùš»¤šQЬ0@ð)ŠBûAP‚U™XéÀ”X0(<(L€%D¹šS˜Û[À;ñ»Ý“¸Þ³@DÃ4TCY* €1è¿È €êý;ˆÿ9 Œ ¤ =œñ{¸û;öb¸3œ?æ[ÃDœ?ÄÀºCX…-8 Ø?<,"JL ?ìÃ*Ä܃82<3ü½*[¾Q4>RL?EDE® €c8„\ „2hIœD¼Ãý;1ØJ¼¿8ŽèáA BÝPŠŒž F"ìAÍ0Æd”A €˜9%ÚhÐÆømÔFðFp Go$Çr4Go„9Ÿ CwC'k´ ü=T”Gy,ˆI°GCðg˜D À€~Ä€YœÄ;4A€Lh$f€­ÐRHÛcI „P„pHt† 8-IpðUÈGÿ8“K¥\i=p†\ÉqÁ¼‚ʳ E…˜ÇšLÄ‚ðHØ^(†Ô€ Ѐ ìG;H9$€$€ œŒ¡Æ"D°aã#¾à“L›üÀ‚è‚3Ø‚38ÍôG¤¤ÅÔ€-8J0„-Ø‚°‰ƒ ÈÉÖÔ…P+ð+ ÍÚ´ÓÄÍܬÍ-¸MÞ´Íß´ÍÁ„ÉakGFCLx¤IÊTNÿLˆ`¸¦`ð&çÌ…bpEbÈJ°„kÚÎ\b(†ð,bÈK8C°JrJ>|JªDÆ`䈨|JŽ€8€ ¸FÖ$2ƒÖlMgÀ€œ¤Í +øÙÄðBÞü™ÙÄÂøÍt¼— ÄðDüª7C\Î U¾‰{Ã0ƒH(e†Hàm†Hˆ„Í]Ñ]Q -^ƒÐ’ƒ„”ž¬ÑÐzƒe†]xJèÑ7NL™ < Åá‹LÉŒÌâ{ÒÉ|Lä‹Ò)•Ò'M¾ï(F¬ü ©°¯˜ÊÁxO׀Ɯˆƒ/@†f0d Kp†<ˆÓKp†â:(†ÓÌ@†ÓÄóáÓ T `†ÐGÈG+@†` ÐÇ"­Ð!¹Ðð+4 åÐJ Áóë—4ÒAÒ—SÌX˜ÌÅ|L,=ÅR<ÅPÕ%µI…8°k°V%°WÕYm0Z°Z•UX]ˆãM}TñðDB$8JµÔJÂ1½J¦LVõ(ùd“Mì;Ã4NÞCÎÛ*Ök5Bb„O›±m dO¨DÆÞ@ÖôáÒ+Ö\*Nc±LUÌ)u>D4>PmLyý@{}¾LÜUÓÕ‚`0žè× ±Ê¨äÃ/ Sƒ-F;ñUNÿÄ`ÅPc#ÖäÃ×keNùØÄ$L/éÔ‰SÌV˜X*¥WS¥Ø,ÅTIW³ZWxùÄ$ EøsÙ—uÙå%8‚h/ÇU1¾UYaõ7 ,\ÂUÚP%\&YÞ¥?ß ‘P€íå^ãMœÚUWåÜÖ…2Ť¦•XÈüXØ•Ýz{0ø½U\m ðEYñm׿¥Éà#Zà+ÚÁ½RQLZÁ=ZÉD_lÝAÞ%Ã_¿­Ö‚Ù^>æ“RÞM`eÕ«2îX`û‚Üü}`‚°ÞÞ½`õ°ßÇmà@ asª`*-Õ&Ù¬HX÷lÊõLgÅ`Y½U nUõÃU^Ý` µ eX e]wmY˜?VÜÎT½v`Ý…`+mê­²XXZÂ…W&n'~6áÔ-bH=býÝ]/^ÃíàÕØ€uW ßñ‰ fÕÐàcÛíDÜ-C–Ý_õC\TE\4fC’(@ä?ðB†PâFväö®Ã~G*aBNã“H(¶ÎÝŒœeÆÞèܪô qAöBÎåd4Ò‹½cÅâ˜ÿ”b¶dsjÁ äTÝeANÜš@d @†UfxÏrc@†`XdÖW¸8]·xäk‰NÞÛÖ>öÔ®Åd4\ˆN&gK@äsf0†UxN&fD6fŠ(eøÔÙ²0U¦JseOÎ¥Ùz®aLŒßíÐfææ¾µe?¾-õÓå*EÕàKÚNè‰æ€5¸ø\`…ÏZˆ`€gøfã}šeâ¤äã¼åX:Õx5ZU5ůUfàý«h;°K ߪXŒ¬L’;.°50:ž_êGËãð-èå•ÜI Z•LÅb,FU,>¨®^ŠÝˆ/i¹hÿ>éÜEè*gq†>ùìá„ð顖垸Z®ä°¾ä±Á­–IfǯöfŽý= l¸j–luY… l¿îk Ä@ÁÆj'Žåùýé8¶£¾ß¤_$NN¹®ÌØÂΞh€hvì}¥k£žÐ’öY·Fi¸ÆeR¬`—>U Ùõ]‚hÏÞBÐí0S UžU n îúEí¶Æë•ýæËÆì¬¥¡[S@ï±½Eå©ìÒÏ•Ûo•aÁ¨aéHŸ„ÂëþÒ~ïÃ==nX>Vn½þãkŽÙ_V"óíÒæ ¾Cê=îæö.Dˆñïÿðð'ð'¤±Š˜„IIgp?îòSm°öTVˆ™ >›ÁÁð ×ð ·•zÙ‡ÀzQ?vÙ•^9×áð“ñðjÞ‘­m^û6î‚ã‘|añqqÇñ—×ñ÷q(dca‘àñ7ò#/ˆMˆM¸%w(ÿˆ"Gò*7ò®Úu©‚­"òÏ놰HˆWó0Wˆ)à(P2O8g s‚H¸7·ò:W è*€*°ž.ÿOnæ=ó3Ga«ñ5)t2µsX¤â€£ºÁ¸q$8ó[s@sŽtBàve©°ìŠö­ºŽíæÖÐÅá÷¤ÙQ·gV‡ZU>t4™õ²º’¸ñK§ó‚ ôKg󄈅[K_Њ¢´ˆ£°eˆs@dwXö=„Ú¼JOÿÖSnÆ/1õÑíöSçî{ÆöËí í~õdåî«æd@‚"@‚ÈX s',ˆ¦!ˆ_PgØw'ñrþsLôD'xG;‚È#Høp€Xhš€øŠs~Wƒ]Ðw‹çw½S*/øyEû3•¿¥ù“‡·óñÄ’Ïi”wùWyöfù—§ùùýžùš×ùD¿yƒÎœßù Gòž'y€ú£/m¢? Gú¦‡q¥o¦wú©i¨W©§ú¬O`«¯ ¬×ú¯??®ÿy£û²÷7±ï ¯7ûµ¯7´· µgû¸‡2·¯ ¸—û»Ç0º<“°Ñq¿Ç{ÿÑ{»w±ØçèÀ/#:‰ bŽŽ>äi¨ ìPüÀçŽÁ'û·gµ˜üè‘ËGR.tÑŸ#勸|Ìo Íg^“˜ 츎«0üÇHŽÃï ÜÇ}ÞXýÙÏØA Îà}Ù? è¡ýÚ§Ï<ôE‘}Ðg}¸p}¾‡|nŒêüÜ÷Šú£ýã Á( çG}ÕÏŒäÆë?|Ý¿þn‡ŠÓüêhþæ7ýç÷ó[ùÍçücµüôŸýâïVägÎh ƒ,¨p Ã‡&”ÈÐbĉ+N¼¸qaF?ŠÔøÐ#I“(UF\Yò¥É˜2gÒ¬ió&Μ:wòÿìé“f-gA‡ -”R¤Îˆ,mÊT +gQƼ˜Ñ!J„Z·*dè²kÈ—+ǶÜjöæ×´aO®…i5lÖ²#)ž¥(ó+FŽj â¥ê÷/àÀ‚ÞIô°Ñ¥I™2vj0êÔÂ^çNÙlÂË{arNyÙææ¼wÛzÆ ÷ª\¶¨-“î¬Ñ#ÞÊ…gÓ®mû6n…ˆw+Nê¸1T©µ¹ªù¹¤æµo)Oý3´êÑsíRwWos欧‹~í–4ñÜâÇ“/ož7âÅ×?N;<ÝéZÙb‰3vçÔ÷od޶í|öÍDÖiùáWŸ€t)ÈKÙ}^kæI8!…•oêýÖTÎp‘Í[ku!ßkŽØÙ^Çu×`„øÁÝ)ÉØ_~]÷Ÿ‰(æ8£…=úø#…è%¦!{O ç!I*éc‹K¨¢“QJ9¥FBEä†R¹%—Ï™Õd—'†9&™IZY–ìiY&›mºù&œqRyæQ‹mh$drê¹'Ÿ}úùgMtö¦T‘í! (¢‰*º(£ š¦ck6:)¥•ZzéMÚY¨¤˜zú)¨¡ò©©oœ)*ª©ªºê’¤šå©¬Ê:+­µæj¡xºg+¯½úúëCÿ¸Þi(°Å{,ªÂšš'²Í:û,¢ÊÂÊ,´ÕZ{í˜Òª+¶ÝzûmÚFÊ-¸åš{îlâG.ºíºû.NêrÈ.¼õÚ{¯¼ºz/¿ý–›/±þ K¾·àKŽ÷á|NùåO#¾³áGŽuߎcž¸Ø©Mö@À¶ë«Íö¯nïë/Ë €CÝvÓ\9ç‰SŽ:é£Gþµà§÷mtÏ£3]zñƒ‹ÞyÏ–on¼óО|ó?'oúäÍ‹¾øª›ôÙ=\öV°K<ûɳڮ°T-«p?þçë¿?ÿýûÿ?(Àpuñ“Õü™’1°"ƒ#(Á R°‚¬€Á2¨Á rPƒR9 «˜°©@Ђ&t ¥"2ò .|¡ I†Á.@? á>Ø6 ñRëRÁH˜¶×eL}²³XD"–L‰±{] ÂG6 ¤Xƒ2(f SdQvL¼"  àP‡µãaz65­·Q %Dâ)öº8¾oŽNĘú’>×Íñ Œóø>T/2™©bG d‘5‘É«,¤’Œ„"orÄ vb­3"û±n>‚|pÐŒ¾áÊÜxÂY–,Š+tÛSIÓtå$’T$qéH¾,R˜¼ŒP$«xHaæäŠ|˜)ý)PƒÊSJ¤°£¨¨6лަtåH¡ŠÓ©Rõ¤2ÍL¯:Ӭƴª^µiv*T š2SàŒDÅk…VÖÊŠû•M¿tëýb µ@o%kë`A‚ ¯*@Æš!WNÀ… ‰æ€ Ó¢¦-£¶Rÿj¿ä)’¤ƒ „GðÔ¨~µ´*ÅêU¹ªÕšª6¤8Â<@ÂI!²·ŒÒ›Ô¨N©@V¡ VºÈÅ*VñH7bW™¿¬·‹c¦oÞ‚7f=€ Pñád,a iÆ1@¡ÿE„ ŒXxÝ¡‚©¼ͱfõ§Bl¯«4Øœà±û\Ú /:À²íª `íÕjy¥ßþö¥Å Ûs£ôÝ6F0à­ V¸ûaò¦]ÓŠÄ@ ¥ØÄ&œaŒGBÃpÆÃ>‘Š $Ͳ^ó™|8¯ƒ.UÎ)€ÇANìÐüä]U­L¿,jp‡š]}9¸Å½ƒ™o¹åc†»s BÀ äIQÖû¨™üÐÚ ðãÁÄYE™ 4Bÿ¡4î5*Pçm¤¯td$~¤æZM€@¸¤3L6’LP‘M D.e’DÜ$ ØdOâÒM*Oú$.µÚBV$ÙõyXÙ¤I˜¤>¢ä$ªd%Š˜:ÁäL&ÒLäRNÒdLtePâ¤XjDXZ’€,Ó2=ÆHö Tj”ENc?®ÌZ:e­´åe½%HÆeÍ%]Ί]ÎÚ>KFúßwÍ£a&b&¦b.&c6¦c>&dF¦dN&eV¦e^&bJ$ Q$áeJ¾YUnÜt`&i–¦i&& 4fj>æj®æi¾¦k2fjƦaÒæk¦fºg†gN%hVãhžælB¦mºPOÿçmVæl§q"COglF's:çsVçt&§sÂÐqRça.'uº¦mngvj§eæ¦ììæª|¼ v¶§{¾'|Ƨ|Þ¦yU4 \fö%¶ü%ÖI%F6Ì~D:d£(‚&¨‚*h}zØ}zS~ (KZ¡~½‚±H)Zë•Tz)Ú¹è†z2”TU•肦¨ŠJXƒ¢§ª¨ç»„^™a£Ù¤¡2ZŽîhŽÑ莆hª™œòè: þèÞ¨’®(“6iJuB'xT”âãD^]E沬¤%zÝyT2Œ¨©¡¡-\”™‡Þ—•iŽyhlh’ýh³U˜"é’n’:©ž6)”ö©ŸB©¤ÁZ•ò%¥À¨»X)"‹^)€ ¦„n©/õHT¢FÉ¢v&–Þpb”¤¶Ô2,@åP¥:É¥òf¦Râ¦Fª…О œÂ*©æ£[ž*U¦ªQVÈl£®n#¬.I©¦go(×M(‡Íçb²É'@‚²‚‚²BB1(̯¾ÿh°:ê°BªBl¶f«¶n+·v«·~+¸r+`ÃN4«¹B¹š(€0´«Ÿ ƒÜL,(A(A,¸Ì ´Ì)8ÀݸŒ`DkDMk–†&èMÇ9ƒ)ƒ2„kÂ:¬[A¬ÄŠ«B<‚Å „Å>ÂMt_Nœ«²:0|(Lĺ¶«Éj„b)–›Ä‚Lp¬@°¬AøÂ.`ÂOl²¬¦Š¤DÄ·"mÒ®ájëÒr­Å"ÃÕƒÆb­Ö‚BÖbl%ÃÖ®+ׂ¬ÔšD%40<Ä1hDèʃÚÂÉâ1ƒÝªn°n<ëC$Ã$^ÕáDß‚ØßÖjà\.ö®ïþ.ð¯ð/ñ/ð>„%$0$‚ò.¯%Cò2ïóB/óšlõ./ó*oô6¯Év/0@‚ɲ«÷Ž/ù–/1C1”¯ú®/û¶ïøš‡`3œB2Ôo2(Á ¸ìDÜ.¨j» W3§ñ/ °pð& • ¢Ù¯Øo2ÈBè¯}Ì¢šj£¬­D÷dÇ‚3A+0 €ÿp30A§p “p,Œð »ð §0°Â¸Ì½¶Ö(Áßükä+¼Ö«ôLD'C+Ì€,@pì‘ê¤ø/ºpç" °“° ›°[q W± Ëð o Ë+¾š½ækÞ$@2´Ì 'ÌNÄq'CpQM@7ŠŸ 1 ²»ÈVAòlÀ—##„!SF«„[W%±‚q¹Uú(ì9WC“2Å•$ɇ½íMOèL¼þÄ)´T,@Û/'CàñDP Tì1£ô±¹04Ã/ ²0óén(2A\íÿ#GòŽDjZžr“Nf³VZF/%“WþÆÝM,Ük—³8«±ÍÁ)$M+ÜÍ)TO%ÔïSðcLL.?h†ä¥~+ûn0çâ@³A/XƒÀ10ó ²DV2O´YD³ˆðJóÜŒ3Ì»Làk»ñ8ï/Äàs>KÌ>{$~úó£Z¥D´LrWlÀ,4ŒÁ!²2kÅ#[ô‹ 2¼ñ¡Q›ÄQë.»èÀÒêoîn@GñLO5ñvÅ!¨(337³Nm54cR7ç`7û’7c1r&)%5—2§Šós¹tµÂôCH± {ð]SÿµLƒÅ‚3,´hD³4ÿÔ#+G({e57RY“56«*(W33i¥[3õÍ:5ÿ)qŒN‡^w6BSÄùRB1ð‚6a •4yè2›¼5KC¨\k)]ónñF±{öcF1ÃäÂ,´#Ÿv!€lq÷ œÀò¼ió€¨Ä„L¶Eu@ÀÀÀ ¬@l_w·w‡÷ö‰7y‹ww@¤÷y·D,õ+f‡¤?ÆtïÚvÛ·}Û5nƒqC@‚!lA3o@p ÷!ö6@w27£2co3YO²#Q8„ƒ…)«DlxLB|øŒÁˆÿÁœ@ˆŸ€ˆ—x8‚¼€„AŒAHB ŒA Œ#tÁ ¸#œÀ ¤@Ž··>[¶ßÆ·^j$mï7nwœA1p@#/w4öO'3@²‚G3rH¶YJ2kØ[ƒï’X›å/ “˜§õX«¬€@XB³2íÇ D%H!Ô +|Tœ€Aˆ#Ô3lÁ|A º#¤‚¾9ƒˆÁ8C8Cº#¹J9îù?[k@+ù’%|úX‚ 6`À”¶•o9$'8aÓJ¾Õ„$Œ3œŸ „.DÂ% þ)Ál ì•q¿Àl@⟀À XÁL½¥÷oî>õ|×u}o~çw^{}.*„ˆ·ý“‡¸Gr#cÀ ˆAa#„œÿÁ§º!Ðú¬uû‚A„}Ý“A ¾3$¿ß7?„ßoDŸBH}3H½÷ó;Có+{ ¾·´búK‹fÅ«þL+DÂnB.ì~r‚%PB€@ L%L‚ýS‚%XB. /@Ëe‰’¡3Î& @ÄÎ:Taĉ+N´ø0âBˆ=f¬h±ãF‘Q@p`ÃS(!ó`ÅCMÎ2ج©ÊUÎÄX±’P•†ÊÜâlÂhnŠ’UU«¬² “kW¯_Á†;–,×ZÎΦE»ö,·n‰;WnVgXËæÕ»—o_¿zµÂl6˜ Âÿƒ nVqãÅŽ!G–<™2Êd™­Ò¥*W04ºt1c/`¹ˆVŒ1Ö¹„¹5ïV‰)ÚæxR£WÝ´wãþ  À[¶|Q¾üË›3Ïß¼qæ!Nœ:räÀ¬ƒÉ™8£”'æ—ì/´@X‡}˜W­fþ—~}û`Õæg÷­\ÿt ¯û,ÐÀ©n1Ãcì±Çƒ°ÁÃ(«ÐBÉBFŒȈé!М¹l4Bh¨D8k 6Ô2Aûæã+F±8á‹8°“#’yÔ1ì"A)—f6##’Cƒ‡ZÐÀ=Vnì)º7~jî‹÷àÃ+°¹ì2,ÿýÀäï-ÿ³k@/ÑL3Í-ºÐÍ7átSͲfìê¶¿îœ1ƈÄg.Éä^šÙ?ƒŒ„— ƒ™ e¦ƒî:ƒg4Ð` ^Ä`F: :Xj¨:ŠAæIðÎ9Y¥/LýúûOÖïjÕÖ[ÿb3¡%‹2#óX`)óµ2ViÛȤŒ~I¸ÝœVÙ[ÀS0pæ ‚)¦ˆ¤˜ð‚Yôgv ]g²uf Ti&¼1(©Cƒ/0É®ƒ/¬0Ud˜Ñ™vÁR׃]Ý/ÌXÉœËL„!ޏ+]j¬Á |ðb^1#,lÂ)t¬ÕH")¥ÿgqSùÙi¥eùäX…dƒ(˜~c‹fê`…½ƒz!`)äÜe¥D ˆn€ ¸ ]¤^ÕL­%î¡W÷cxÖºj=Óë³m¥Ø™8Ùn›m´áŽûÖ,µäZn\ÁVK솾Ûo.Õn&Á‰5Öâ_%Ùm ¢á@Ç»tò¿)/8Kù*?;ïµöžµïÌAÏUA%„p±V<õY' &lõÅ#C©0„&ï*÷ÜqwrÉhwß¹ú]xâyÿ*ùÐq¥sæ!Þ¼­þ&[@è±Ï+ðVh@dӻϘÕ›a"îÇwûÔ §½á'wÉ㿽ñÿÛ'_~Þõ~xàíç;üýxÇËÞš.gµâMa ì€>·@ ¾GAî³ '˜ÁìLƒj’ž˜à26Z™­ƒ ÜQè6ç"vÓÓXæãÂF3ôÒX¦²Ùp‚'LáßćÄ,F.ËÊZö‘:58CüˆpòôDÛÀŒ7<¤¡Ú¬H RO„Ì"ó|D1k62#в¾X›*Ú ,Ñ*ãXœWÃ4h‹cêâçÆ Ž‘µË#󘛗1K/3 HVG,þ±/u !ßðÈÈÊŽt§kÆúxÕ Ù]2|#Œ÷^7>…1†ùȸ23ʬ€ì]aiB¼Vp–’ ‹ Ë¢H\Ú²+Ž¡õjÅË¿Q’užü^âb¡8ñ v¤«d%aw!!òæ7Å`ïl÷Êâ¥~œ“.½éÿ_Vo„á¼['Ó¾>¾ÍkË3ç0åøÎ²ŒóŽ×“'Úˆ©ÎÈ$“|ú\'bîнpP b¡'$íYЈQ’1Làžì^';Q&™Y,¢iJ‰f,… õhÁâùQ³4V\Dh0EÚ¼ÑiŒ §[_4™Ù½–²Ï|ãCab‘Ì™þ0¥Cã*GÂ2&2‹ìéA=Éž¶ ÿäãR!Ö,!¢‘-$äWÀ U” ‚JÕêšVêOÁ9U…_•gVÍJRš4© M«——Lg‚oA;%«œ*b Sì/Y" §ùVÂçyiåªÝ*Ø¡S¬wCœØ‘BÖ°¯0P™²™—ÿ ö§ª\£öBªÕÃ:Ì«Š=PSÛQÓr)³oÌìf™xÕςԨ)-0I¸ZóBýüUj3[ÝFL†»,›qßyÛr÷´+íÈÚ»Œ @eî jVåzñºõa¨ÈÀ^ñŽ·±c®ue¤ä¦Ñ²µZµ«V½±µ«‰í.}PK]÷W²(Cb{Gà'Фµ±½MƒŠÙõŠèí |¿ºÝÒÞ×/ùÕïâÎKauÁÞ”°}5Ì _¸m"±,Qœb¯˜Å-vñ‹Uœ) Æ5V@ˆ·&Ø£ÇÞ#‰1ˆL6XÀ‘<€g7Âòå}ËãThAütŒ]Ì8!ùÎX%ã˜É¢uòôìxÒÜN™,ù¤+ȰœåànY‚<ÈA,¼€1‡¸ÌPÝñšÙ,–˯r a3o.‡¤1¢SõcB—ØÁ,Ld‰¼WºóÁÖñ™ÿAøËåZºÍaMgÉŠ™jÇf˜Ôɦ¦3íÊ)ÚÏ n4n[]jÁÌÕ˜¨n&øÊËÓ\—°ÏKýó°=:ò.›Ùá½+²;Xì£ÚÊŽ–2´)(˜IcÛzéý¸¦ÐÖšÑÕÆu·'VAMòJ§Sç)iÐR˜’²¦¨Ü/º§ºýÑo~ýF“´mKí4·õÚø-á.¹>™Ö”™rmÝé”>N>†á(4xæhml?’à€îö ·MÆÖ²qÀ¦Mi)@”û[~˜¶aÇ­ñr¼¾Ç·›{…êm3D‰…=í'<ûÙŸM÷غ|¯&<ÞA[Û½oÜí¾¹ºÓŠŠ–²”r§»5›yðV¸é†e<9ßþxmËý±s* øÂ¿Í¾åºÍx×|ëQc=î¤7™é‘ç WøN®pê%' êþ¾ƒÝñ–î7¯õJÇæðÓùø¶ôŽG7%CI¡Â nº€wê_H@‚¤ ì½Û½ïŸï ß_€¨÷Ÿï\á~èƒ.F­„¥¦ÓÏü¼+þ£|§½²+o®ãuâ ÈèÂÊïòrEïúïóêÉŒæ®5OdBŽ>VR€VáiÚÈ/v©Ã– àú"p‡­öl¯ºøbÞgmVü6Ðë–f#†ϳب¿K7\meœå–æÃ~ø-XÏ€öOyÉÿ Ž¡'ÞbÇ{Zvºoò` ¸ø ` Çïþ`‚ÁŠÁ¡ ‘a0jp/”ðDêõØÿ.öÌmöšÐÔœIvN‡ p1®0µ¼"^ IQ ¡^ Ç0^9æøÏ£˜ðââc‚e¢°%ÂoIàPÅo!ÀŒ!¶0üÂ+ÍVp©³¼åo·¤¯ÉLPÍ./®,Ñ1žp%‚aüñB‘N151þ€vQ•–eZt0ô& L#|°'+õ2íÇ!i‘î¤ÎtÞLB6éÂP‚8À®à 8`¯ ‘ÁŠ¡QâÆï áÑ»¸Q¡"pnŠ{Î'š0‰ANÉ‚8€’¯` ìà,!ìXÁ Sÿ€÷‘ѽ±ãjQÒt1•œÁò$ÓÑì@#ñ„ç˜e 'èäPO« êE%–©BôÉû,&PÀ°"—Ÿñ†N›”ò~ÏvhÒ Ki.ÊP0×xë1$¯{¶Ï«®;)ð¸â}캅‡­Ñ’¼à(M*¿Ž*CrôF²B6òl òg$ÁQ$çÒÒnYðGå /0“o Ø’Üܲñmå²/çNð\Žß³–j²#oò#Á..uÒ1I².ñÉ& 's39ó1=nH/³úóãØ6%C6ÑNðôñϛϻSæVó5³Mhÿ61VÁ²C6‰³ˆ“8 ,¢!V Ì2íhò½zöÀFöBo4…³8 A9a€9Ç39ã<›áéÀ®SÖð¯èd­€æïçH&ÿ";¹â.»1/3s/wMc@Tç2é¹@”X„ !A¤"h0›b-éNbäx0³‘)RÿhôÁ@3 D3@7sc¾gA0†òÌîpž*!TEg ¤3œFwÎRbRsCóûŽ/t‘A¯ªE¯LÊA]ò…X &Ê Ùt!,34ÿ1.=T'#nDG&IÅ‘SâiVà%H‘–OS"Šü+è+|pÀµª8"—ï€!KÜTMÿ(HÅNÒŽé·£D© %€Lã³Aõó@">&õÓ8TN·T@»´(GµUJõ*NÕéâÔÚª²ÕnõU]RóÈR¡->èfX‰µXõX‘5Y•uY™µYµY…•X£Õy¦õY­õZ‘õGïÉW‘­* h *[ɵ\Íõ\Ñ5]¯¢Z³„]¯Â„`^@V­Ô5_«â.ÞHkõÜúŽ€XrðU_6ava•Õ]וXá•€h`^V+ª¢!ÿL•auÈ2U³T/V+RŒcMödQ]Ö*V+¦UcSÖ\á^£•Wçˆ[S0fuvgy¶g}¶\m6pVW‰¶h)gh6i•¶kviöiËÂUó¢i¡¶j­&J!Ž¡‘þU¯ökÁvW*Æ^ATà!HA/¨6lÙVW7ÁHáÀZœámÛd,Ö¶mõv#7ÁœÁ8À²à}HÁÔ¶kto÷4›ÁJD6aLª€8J¡ŽAjG*Um•,’ÁL&L׺â¦&n È d!NWu÷vÍŠ*÷r«ÀO÷g£ uO7!^dÀŠwx N·Ëˆ×l Ëf7!T×vq·zSê`w1WÎöw×úœ×xŸWxQ×xuà!J7n!nÀ €v¥·uM·xi×t—ÁzñW Ô PB`AÿK4§`~M÷Š7zKÅz°Q“E‰Õ¿$‚=jÅØÕªˆ‚W)Å~#Š(ß©Û4ø@ö { a¯Ö+HoÁrê„—zÃâ˜7s5‰Ò0¨zãLSQ˜¦È‰ ¥çʨ†¯ñÒ‰ƒ!ˆ˜58h—Љs˜kE`¹âxm tÅw,tÀv³!’Z—leaàl!˜7tà‹_á¢ÀKFnQЧèÒ êˆŸ8ñxQm”ªØð¿Í‰éè{Sy©˜+ÄWQâR÷œ÷dxz©wzcÁyyàbazùE’88ªÑÕªI‡yìø‡ã˜›hƒïØ ëÕ= Im” ¤i‘@  € Ú÷xy&¤@n!|a f7“áu †wy§w—¡¢à2î#Æzxˆr0‚©ùç&8?jš…jâ8À$øNŒЍ¹Q}‡eYÇy/”` ràŠàÈ’Ïd`’ÁŽÌËœA Ô`z  Úv¡—Y™Š•×t7YƒV1}C›dql^! À,!ð,fwüyæ@ þùLÚ¤ÿY¥ai[AxïW¢e:ÄDÚŸõ‚Xº¥:Wgº§u5o}:¨7¨…º¨éîƒ;aolserver4-4.5.1/docs/intro/tcl2k/html/img003.gif0000644000175000017500000002474707363640502021206 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx%â`t¯J¿n L¸pI¸MiÉ«ÓîϽ|!–œ·ádË•3^¾Œo2gÊ‘ ‹Mº´[ÄKÓMèøqfÐ_c†ÜY6lÚ·ùzŽÍ™÷쇛m›N¼¸ñŒ¨iªf\ö¸óçУK7›¼¦ØÕuyNßν»÷ï «‡ÿµÉ˜µvðèÓ«_ï\¼âëÌ[³ŸO¿¾}ê‰ó¿'½yVß! ‡‘€nÀŶ‘C1ø_h>èà}÷¹·]þ¥Ä„røZe‚af²åµ¡_%r˜à‰"ê† e0&X›Cª(áˆ8b¦£f¡±Y2îHã8"X㉑HälÖ6!…ÐY†òA)ÚgÞ=iå–WIÉ_|çq)æ˜d–)‘—7i–– ±™¤ŠU½¸¢‰¸)¨ “tbd‡Ü¹if”ú%v¡TUjèçŒCî9dŽ0Š˜èD)Bjc‘ŠÆX‘‡uÒv§™¢(ç˜J**¨¤"*¤©@>©©ˆ®ZêŸÛ¡: U…Âjë­¸r'+væýy¨™¿æ*¬V»–—ÝvžöøJjš#³“ŽZ`´ª*[í£­Z më-ZÿÅÒæ·ä–kîYáªYf°I±{î»õ¥K帤‡)œ¬:Ч¾3nûê›ØVz*Š ê§ð&,˜¼„Ò«ðÃGLÃdÕ*ñÅgLÅ9\Ò˜ê‡×ì©Àÿ&dªz1ê¤ÉKbKr¶ó˪¥¨Z;pžÓv‹ç¢D6‹ïn:ç[ôÎÚº¼¯doÄq¯\±8çÁJmõͰå\³ÁoºóÖpI)“Gz}©žCoŠ/Õi£pÍ•ž ´²™â|£žMohjS6œ÷߀cüô±QKÝÞ½=Ò„lº`¨T9¾ãkÿëíàŠø-û<õÏL~ž5褋þvpÒÑÿ.GºúÜC¾²Òª3ê*Ë£<÷©ý®bÐÜV0Ö¼ÇsñG’*9U˜[øól ïštË_T}UÍ{,±»×Cï}aÙwµ*î: ç È —Š»’g«?rØÒ/?º{+×wÅÚ#Õýüü÷/Røþ  éÀ»¸ oHª]·šÄÀ&‘ Ü—‹è Zðt>²šù"Ⱦ¶hs¥#Â"(Áæì‚„]ÌHXBßÝH…tVú TÀq0T›“u·ÎIl¹1¡Ñ`èÁöyðh›aoD¹1‰ècᘢîfg?t[‰ØBR¨† £cU?ë|i^iá^üX²?Y¶g‡û˲ ·;ëaP‹ÕkcáF”°ÐŽ{zíf»B¦Î@ë;^¢ªøÇ¼°x%ƒä×°x³rjA›Û!Ð’¸IFl„[í-9ùˆx¶ášÖ‚§Ç‰ÿôqŒ°ì cy’W>ˆ#ˆ^ìÜb³z).qk¤¥ql'ÈýhvpûîÊ7Ë’¼£ si)¡=rxªlYôB·ÌV ?ÕþÎâM °œ¹Ó_0¿ib²óðìŠ;ãIÏz&ežö̧>‚Ï}úóŸ&é'@Jз”q ‚"²‹\Á!% JКfô¦ô±Ã.00„§¤âì˜Eb*š–`¦%x…iFd™EÑH/)XTM%ßyD7OÍêЀ2HqΫMcê]„1Žf¬Ó€%@½ŸP7r˜@&ÀGLg:‘.5™BJ`|¬€15²„ˆ@øÁlÜ—8-,¿9Lì‚ F`Âάb­˜>–ÑRiÀ‡‚q|¤¶ k`ÙÒzF”Fö¶½(nw+FÝòö·þó-p‡ûÿ=á÷¸€3.&ƒv/ÏMq¹+M-ÙLäZ#Êæ¤àG7é†,yÑ•T³®KÞ€Òö¤ã,¯zç—Ýõº—\í}¯|sßùÚ÷Oõ½¯~Å”_96jŽ$Ÿ¸ÍiyRhg¢ŒòÔ\h}›Üá³>‰ºYrºu¯ÚnÃaàö×P„¤*ÍTö2•¥²Ä(¶£5=Gb‹’uÐq¾R†¼ ‘}à­¤h̯Ën·Þ¯íd^ž5uçB§V”lÑóÎJ]+i¤m¬³TzMÀÙTfŒ\ÊøòÀÌí$(uùcÝ…rËU;š€#)ãQ¾·ÈC޳zà,ç:{‡ÎWq±S¡h¶¥vUðÊöŠ¡«T\¤ ™‡&¢ C;*œj…šq¤èE§r-ŠcÙ˜5ì²²ÊE{°*ÇÛhG·Çɼ"œ©Wm&<“Gm£°¢[Ø;OÉ þoÒ:ÉëJ³š€¨6V戓¾YÊ­ÔÎÔt iÌMTnqt½þå¯×ÿãêi[[4ÕnÓ‘ ,%ë‘]’còwéHÇ.Nï·®ö5’‡ÂÓÂâýtð9É!.²Ë¢Zs4ÓöªK»°gt 377­Íz+{™{–d†û—ík;<0 ¸ÄÕ’ni1Çu2]q\î«u*˜"{7› Žb·EÆ$oqw Þº–#‘ÛpL´¬÷<³+\`5ï4Íényƒ/ØâZ‹oÈ`^gqàÞô/•à>ÿÌš¡ã8#OÈÈ\Ê ™Tëëú¬ïMþ.ÐIŸ:ÒÌF9 ³[…(³ðÅ퓈Oüíò:”—<Þ\«”ª"ÓFuÅz—x‰<kŽá>,·ãÒgL|ƒÎxÿn“OÂ/÷´ØaGxøÊ]¡•Ï|t ¿\u#Ú>NuÑ2B;rÛ ¿¹êýèeÔÇëò¶•£çùeÿ™”L,³ñbìfJZÙ™)ûý3‘·ë#fàÐ.ý5§Éø ¿XšöÖq×úþûª»^W°Oïö®Ÿy)Ëóš?QÀIæ[yé1löã¯(í¢·[ícç>åeöïZ“YÞŸr®‚CîÃ;œ“H‡``¦Mg<\ft³¶pͶ€î—ÖvÙ·V[!|ï³r¤4o*ÇUÑ—rw×{ìÆ}àõFxsugoDóÃ7]æDæ¦r$Ôq,øb«4cÒ§*höU97‚'Dsô†ä'~@TV[Ú7jfH¦Th÷Æ P7}ç×|¯£øL èf˜–Aº—lý'Cð„ñƒ©—pv—fÃ{Òƒ!(VÑ7s¨c÷çw'Vƒá5e!ø_Ìæ…hÿ5„è%x؇ƒ†~ˆ!ˆ‚Xˆ¥‡O†y†¸ˆq‡ˆ©6lŒ‰Ø’&‰–8‰Ž(lÎs‰œ„؉–ø‰ ‰¢8ŠuV÷à‚Ð /`ð ó¤H… %pTGõGåV&ÐòàVY`Sø€TouŒBÐ9WqeŠ÷UÀà@`ðpáN)ðV3Wæ0Ž1 ¨ Ò  `) ¡ % ߈30S@ÐŒøÐΦŒ2õŒQÖ#8¨¶ÃUUSUY•M¥†Mµœ³UÙ+ãu{§SUòg+)„eT•˜)036ÐX’ÈA‰ªf’*éƒ( ‰+ù’Õ’›“4‰]2™?5™“®t“:Ù“$•‰Aç“Bi¥8”pÿGgŠcqczF QÕö\‡³‘ÞÕ”Ôp”v/sHb26 ×YI•üãvz6•P k_ vö–UÉ“A%e9†±Ã•"”N)¦–ßÇ–vi”E™—Ó¶—|Éj~ù—¦˜‚ig„Y˜rv˜ˆ9dй˜ûÕ˜Žy_™ó¥˜á†z‡ÒDÄ”–lwvyx)§_7zûj‚§H<‡r]Gu*8ek(s•Ó"]y<3Ãcs‚³³rZ&‡ués7–e†—iš¾ÙKlöFÇoœ¶qÿg9®s„bh3‚”‚Õ4›d¸oˆæs«wSEà ”s‡ÐwšGètOÇhJ¨%ùgqLs´óž«9yœ|¸b.çtWHMSˆBÄ5™Þò™B§—ÿÄI™*  º^„É™$q™FÈ‚¡L‰…°ªOO™™ê);øi›Pø¡NØwT÷qüWlW3€(z‡%¤pTDt\ˆŸ·¶¢OtDh×…gÞwð&‚¶§‚YÆoÞÙ¡ËIhê·‚ÏIpwØ›ôFÙyŸ j‚:{¸µ ÎG|‹×cÔ•¥!ªw>j-ˆaA=­'¦,jE"›¢d8Êf¦"w[š åõ¦pz]r:§ÈU§Úy焞!&šçKvJ‹JlˆWiþ"|ÌÔsh8¦}jBXzv£¦Ÿ|¨yØ‘‘–’Ä65 ô/Ë©C„¨ÐÙ™Õ¹JŽ*©ŸúnjŠxJ©è6¨U¬Š®úª¤«¥á¢ž‡œÜY~0§¢²J« k¦ç–H?÷¦¨=˜«:aÉD-½º¿j–¥A:Ø{žzftH¬œjªÅZ¡Íú?´ÚP©Ú­1)žŠ(®‹ÿø¬æJQ‡Ù=ŽãmRy¬|²8ïzÁêóúfßÚ.dö„2¨D¾&…í™”-B¶–|ivûŸŒ6rEú`øœÊc¤iêŸÚ¹pRš\ùÚm šX#°Ö'…Mœ‹›pȧCš„¹·¨ýÆuRs>=Ú°×nTÆr>*—X®ø•±GasÉI¨›Ù*%dzC;±¹ê¡(´Ù:•5Æ„_ö¥PÛ§XW´8·­Ä¯Ïƒ®éê”:»µá§µ^»P™£bœÓþ•g÷zUkÛ Œ*¦ê†³ÃÔµDÑ~&ê¯XZ€Ê7Eÿ*¥(…1ºhG×a H¦U˜·k·xK˜°NË~a—u»íù:ÜZ¤Ó…¨ƒqt˶[³OëDj§x0›B Èg¸¦¸Î–kñ³]¤4û³¾¥Ÿ¸(}§¤¤·VvfVÉɬ¿9¤mA¥jZa[º@T€F×¢JªE;^‰$´uh¬ ¹{>û|¼ÙÃ7xÓK‘W†mƆܚƒ:zœÊÊ´¾º¹”i¶&!·BÁdê»`¶¿{Ô–J)¿‡¾í›~‘´·„›€q»$¡K¢óF¡«€ø[ëjL¨:©·»l ·š­{µƒ«x›À-±ÀÈŠ½ŠägYܱŒq©ùU<~úk¿'ŒQô»ÂöÿÔÂ.LO0l£hë÷[컳mûE)|nlû8@“±N§Eëª~ë šë'mµŽ“¼~\³þëëÃ~§¾¾‡À¾ëÉŽëÉ¡ëÈþìÃUìÌ~ì¶Ní­íÆìÚî^ÖžˆQáíß.ëË.î9AîåN^ážjê¾îÖÕî®îìðÎ[òŽï^ïÿyîîNïúî¦ÿü>ïÓ~z:dKðÿN÷ÎùÎzôIÄäœðØðøîïòz¹\—£—–ù+° pÊ|¿Ûoþu«ÄOà@‚ `B… >„QâDŠ-^ĘQ#DZø:~ô²c’$ñ9™¥ÀMøZnŒˆ0áE†eÊ´ysfÍš{.ÔÉ3èL A! í©ÓçÏ‚C‰ˆôfS£K•VMZÕ Ó¡QjuêÕêÔ±8Ã6<›¬V˜mݾ…W.EuEž,‰R¯Ê-_Îÿ-J–"ÓŸBÑî|š•*ÔÅ„ŸR%*¸,S›‹Å.Å|ùpfÎŒ OTl¹pâÈ?o-]Ù²ÂЧÅR[ölÚ´íÞÆ[’ï^–.ew­èX5lϤ5cæšPøáä½Â^þ:õñ´Æ/»>ZººjÎË¥ }–õôïJ¯^ýzöqÛÍ»W~_ß³qÒ4m¸ëÐÒFé>çÆoµç¸c,ÁÌF±Á¦ÛŒ:T.? -jÍAÐk¯C?të½»âÛ-¥Þþq<ð¬;ï4à&+ï>ñ -ÈÌË Aµ°b±¸ç$»19 ;ÛqÅüjÆÕ\ ëÅŸ„2ʆD‰ÄùVòK E)·ä.ôº¬íK0Ç$³Ì(© ÉÊO4³M7Q{S=1㤳N;+Bs¤¼JÄÒ¯;ÿ4PA%´PŽîÂMÍùØ4´QG…4RIáÊÿ37“®¤OËI7å´SO?}³REùbTSOE5UUãuOLK]5VYg¥õÔVu{5Ë1m”kN‰|í°¹œöòGuÎS­µYƒn½tM]ÉdV£jÿ;Ja¬Gn³E0;T¯uÖYh1í³¾]“ Àv{ôv²ìÔÑHodN;Äv$°_ló=NÅü„#ëÝß5¸X¶¼%·\NÏå3SûŠ 0G"!¤—?Ò†¼·^Íú+*äy×âwÀƒ‘0B;3cµìîe–ÄX?ÓvXVˆsõ3¶d+¾°2‘KùÛ 7A†Š¼ \leDYªý¥8\bUNZcîèe™ÇE+ÿ:çœw–¶gŸ«~ˆë{—žhÑ0ëÔ†NúW¨K^Qj±îxf¿)Óúcx÷ýú: ‡uZìUÉ^tÚu=†¬å!é®P».ð¾ƒdxF®GçÂü&òâ c†<<ÓEùðÍ·QÙGåÍq.½Æy!€%Ô·Æ×÷>(_ì„'6첄ßp÷ßM^m7Ëå>¾nØcG“vm¿¾{ï¿ÿ"ÆIå>|óÏG¿ûñk7;}÷߇?Öõ·o?~ûïÇÿÑùÓÕ4ÿÿ`›ö'±Ѐ„Òa)ñðj3_R[òÒº;5 ŒË÷¨°¥ÌxHãFàv3CYƒ'¤*”ìà㪲©KR$ê˜ô¶Ê.*›VR(3¨YŇžZ†üC:1…ÿÙcaãêW¦Ï=(FÇbÐw.E] h©«êb6*ñƒFcˆT8¢$’o‰›ŠÞÆ”å¶ÈuqˆÖóàl&8-BÅlìš Ã¸Çg±JedŸ !ÕÀŸQˆzй£|ò:”h‘ŠTy²ø²ŒŽn|ĤE4xÆLvÒ“þÛ¤ ?9JR¾/”ý+e*Uy½S®Ò•¯T\+a9KZêÌi$ýDYK^örR²äŽšx9¶M‚¨QRî|¹L)“94Û2'j&Ž™×ì39ȶBQ’‘”¡YÍ­ýí3œ\dÀ‰Mv D›LL¦Å˜Ç:É o´£7¯}â3‘Õkag;ßÙ(tªkØé!óéÈ æŽŸAôX1­ÐW” Nú¢!ñ8ÃJÞpy4ôèCwX8¥­“¢Ì´èIí¦R–²ê–zÂU QÙÒ†ÒÔ¦IéMuºÓ¶ä”§?êD|T¢• ÿC5jRŠÔNT\ar*~6¢Ge*L VTi-­rõlSíjµ¥¤Ÿ0T½)VÛƒVJª_õê4ÃJ›¼í‹›RŒ×YçúSµŠ\Ý4Ï‹úSÂtÓC×’õDd¥³±½û"!Ç#жd'»,ç*×HÃ5m-“µl^SÙ×àV¬K,õf$f=cŒdôP«ÚÆôH¡8¬¢cgûÑ# kj&«šlWÒ%©VŽl5"iHÁ¶Î°ˆ],¸$kCë׺ ­-ò˶æÊñ͉fÔìúÛº4¶ç=lAÓ{Wä^õ¥–Bó×lWºº]#é¢ÓÑê*vp»µÿâ%óBÕU5¼xãbÁüAáZ7‚pp~W©Üô4‘°öj]“Ì:Lÿš¶·Ã- šaàÄFÓ,wG¯²z¸ÁnÑ·ê($ÑŽö½ÚãŸUu¬T ïØÇ(½q.süc"ï´ÇEFrEƒS%î2ÉO¾æ‘¡žôJmºkû3ˆfNåά†öz›µu®ʬëÉ:µÂ>ðp×:¾ ,{Ü•ŒD&›ÑÉrÇû(ÉFrç= {Ÿ•4Áºv¿×ðà£jÚ ïÊÃs•ÔÜj¬ÒsžÚ¤Súñë>¬ÒocºÛÚ³ÆNí„óÖàG½—ÍìÍ—²ñQ¹Üú&¬Ÿ;-p[„ôÎt·¯÷kê½Kú©ÃÄfvì%ìû »=bp—ÒÕ%_û4º˜Ç_÷²ŸY»êšùa¾[¿?~G…?ÍäG¿¡ÌŸ~ö›jýí‡ÿÜϳ»Çßþàÿ{ÿýõ¯þùËtÿÿŸüó35´·B£¾S»âi/Å 4dÛ²äê¿[[b»ÒúºIa@´ã•¢[³¸È@·8´ûÀâ·Áé »©«Ü¢<ƒµ“CÁq+Á§yÁlóµ3–n+AÇ ¸ËA¨ó{¹+±´¶IA)¿ü¼‰!@ßʯ„*°ÑÁ:‹y0˜!1ÈaÎÊ7 Ô½ó²=p“6nÊ2'œ§€C×"œ ! Â>w«#h[ÃïÙ»³˳§O3/ #4å;¸ëž!|»¾âjÁ$)-¶~›Âï2·z*ÃÛc¹GÔ>ÚBÀZ<ïKžëC¹'¼¯=t¹g»½h£ÿ¡ÈšD1Ã7ì2¾1ì5œ›£ˆ2¦‹»8(Cd³¬Ñkº”9% $Ðû\­Ó§ÄðÁŠš‚³ºYô¯áðÄÓ ¯X!Ú’AR3ž(”+üÅE\ë08=þz¤4]Ô%^Ñú,d©ÁŠ“—©©ººÑ3,l BDB#Ç#ÂÕËA=C³ó-͹Gѱl›ÇçŠÅa/óAUÁE¤'ÆÇ!;¡…´?s½‡”/†Äȱ±HèËÈŽ´¥Î{» òÈ‘L•„$É“L Ém ½UA¾(‘H ŠI…0I‰³™¤ÇN‰0œ\><Á ÄÄË+:´ÀOáÉ£RIN’³&TL¶B|Ê)Mº¢/eÙÍA\Ý<ÒNÞ¼N>Î}N„LÓkž ÑJ¾¬8 ÃJ«\L::Íʼ6l°Ö´"ÛÈN0ùIgs1çt´Z´Û½3©ª›¡ Îȹ-δäË¡„¡Ìkµ OÍ„PD¬Ð§kËÂ4A [ÈšDIGaʤ2Ñ-”UÑÿdÑÿ픕ÑÍ MÀ¢ìÀ®s@@©Dæ°QºÀQ +ïlJýÔ+šÃGöˆD»¹É~ ÒCÉç[I©?ÙT;%íQíÌIm >$R¯œRú‹ÍA O¨“·ÁlFËÇ B5¸|4³¼¿ìÁ9 :p´Q5¶ñ Ãü”LÖôªMŒLû”µ‚[PÕÄÆê¤Ç"Ô0->…EÝ¡T×TxäβÄÃÜ-!d—ÌäP;\TêÏÇKEHí£1õ¿Ç‰b„GÊÄÔ¶êÏÎ<Ó×'kl¶CEÔãڧƤÕ-•QIuFk®Ü;Ðó9´”H‹7_œ P[¯e ­^eÖmÀ(V\Hk%ÂÉ®ü!TMÕ[±‹dU A |oõ½l×v•Rq2ru×y-bv¥×{u§!Å×}=}å×ý{XpØ…Ô‚5XlõׄeXÙ@؆ Ö……؉}‹‡¥X”´Ø‹%ÉŒÕXäØŽÍÈY†Ù‘ý¿’5YýCÙ”µ¿•eYøsÙ—e¿˜•Yôÿ£Ùš¿›ÅYæÓÙm½žõÙÅÚ õ»¡%Z¼3Ú£»¤UZ®cÚ¦²§…Ú'“Ú©E²ªµÚkЇð†ØZŒÀÚ¬e§FdÀ)‰Û‘à|ø ØxF´M[t‡‚È|Hˆ€h|胂¡²Û»ÅÈ;(|†AP°…1È|XC¨[U•@Ú˜Ä2{x‡m0†GP„C„=؃ €0BPGˆ„d蹕¬¢†@00 … .0((À‡à\£â„=ÐÔK8[Ì]B‰ ‚ÐÞ0uˆp0Ð^â%(00‡Tt8Þ |8Þ ^æmÞ r€ðƒÓ%0È Èˆ”š‡ó 0î=ß‚à h(iÈY ˆäˆÈ‚_òÝ^k¨ßJ˜„9ˆ € €I˜ÿ«”òÝó…g’ÂolÈÍBÎõ”²²Ç˜¨A:C´ð¨­H7uâ#žˆK`9Pb.Ë)]¨X€…æ^í¥ˆP¨´áJâ–¡ÔÒQt»™"â8ã/vÕu\°.®"€ºNï‰c‚8y(˜È©Ö]gÐ^ðˆ _ _jè,S˜…jXP¸|˜‡-ƇgÐ-PÐ*“!§àqã0Öx#ÖäOæä!VŽ4f‡CãAåQcušã1VW<‘Xó}a,6߆ئ|@8T`ÞHPæ-XXÞ8W`^øåßèÿáâdQöäS¦ŽPå2.e­låj&ål6bXçW^c0Še—²Þ]´'¨(ø_íõƒ°‚Ð…rÐ]|È‚‡W ÞøXPÐ]z â5 O˜‚g˜J.Bà’V›å6!cUþfJÁ‹þÆèñ"mÆý0"$ˆ'˜ `H‚#˜€  U˜€ i ˜i|˜|8ƒ4à…_øé3øéuèìlçq¬ˆÐc >_iæ 2•þlš€Rˆ&0&èiX… X…à鱞7H|Pƒ`8ë³öi5@jx­;w¦OÐ]í½†n½ yèj‹xƒ3pˆ°Åë¥:ÜÁ¦WÁ6l#{¯€;aolserver4-4.5.1/docs/intro/tcl2k/html/img004.gif0000644000175000017500000002150207363640502021171 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nOx@Ì«Wk^·€ L¸*ܦ´äŽÕiwåߊñEžŒ7"å¾{+7Œ,Y3çÍž5wíðsáÓ¨S«¾zx©bº ·äK³DÓ k‹Æ]ZôCκ?›æ»º¸ñãÈY¶¦ùzqÙäУKŸNÝìòšba×åY½»÷ïàÃÿ¼ÖæâØÜÅ«_Ͼ=tò‰³;—í¾¾ýûø­#Þß¼öç~Õf™m˜‘oÑÖ[r¡† O &hà]ŽáF ž$àPª_st˜’nVXY† ’¦âov¸âm˜=xb…÷¢‹2öåÛn:ÆhÁ ˆ`p(.¸c09à’£ÈbŠ7êE$’™59цLÂå“MÙ›’Yni¥…=º(Ò‡ò…H_j¼a5ùÅ)'Pf …¦ó¥7g‰ŽHã…PŠW'Qƒrøç¡Fªå•S©hJwÞ”gWCJi`†:ª8å˜mÊå¢PÎx‘—œrÙ¡_’xª¥© ø¨¸U‘Z%©/vú­VÉg <~Úk¨?û©­X˪©V‰‘¬ ÚÉb JµæU¯®Ö¦ pú™mRÕî‰\¤Pý7-ƒ>¢ÔíGçî*]º­zë.¤Ïº–¦´zf…¥¬ÌþZç†ù^zl­ÃvI$iG©ëh̎饧´Ú/‹¨æ°®¸²û.uàj‡žƒ&n{±E òÇ$ÿ•ñyÛ•¬òÊ,Ûw²¸õ¶,óÌ4÷ò¤5ç¬óÎݬfÌ<-ôÐJÅËܼdKôÒL7’ÏôRx-Èþ–K0SâÁ¾¢øk©bF)ܹ){™ØNæŠ(ØC¢Ýi×¼†æñ—t¯Ø0•ÀB·°u+«°ÕeãÚ§ß’ÊÔIí¦¿pKõ­éìÚµ~m&q9Úhn€omiæ¼á89è nn¬á¥11ÖŽò]¹¨vc>:p®C|Ù¿¶rzoä‹~÷Vˆ3¦¸ÓÄo¼EÁo¬y£¾wÜz7ûä×jì÷ª£âûàoW_÷ÙI~ŸõÄ3ß7eÇ'—|Ê”ò}ª`·n*øéª£º÷¿@ʶ›çßyÚÖÛ]î$¨üý r™IXØâ—¾Ó¬OD Œ ‰÷@¥Mð‚¬Y‡—Ázðbü GH²’ð„(Ì SÈŠg….Œ¡ £ÃÚð†¨©!wÈC¶è°‡@ ¢Vÿ~(Ä"Ñ(D<¢—Ø’$2ñ‰P‰£HÅ*fdŠVÌ¢‚Å-z±Š]ü¢™Æ1š±ˆe<£y˜Æ5ºq†m|£YÇ9Úq„u¼£UF ‡ì¡!eh"‚Œä‘#AÐBDv‚+8¤!0A 2É=Zr5v¸Ã†ñ ;xú™E )‚I–@’%x…µ~³™óݦp¼‚%Ùâô'H)u¸4+t%Ë$è‚#[–0ÆÑŒ¹I¤ç0 D`|@R’éÂ)Sà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀÆl8bÌ/¶Ó–8œ&vÁ#0açÀ‡ V19VLËÀÇ?)‡4àC Á8> Ú†5°á˜Ÿ,¤DyÉŠÒ1¢ý™hÔ,ÊQ²£ ÚGCJÒœÿ´¤(mÙIkô¸²Esö{›ìXç£Ùï¥.M)HWÊRÕ%°{9% O…#·ìánFïÔ©yªÔ¦î‰©N*~ *Õª¶‡ªVÍjx°ªÕ®V‡«%Yîè'°d9/¨f“õ’DÔÖˆun˜‘bÓVŠvœK«]íº-ûK¯sÕ_‘%¶š^‹®HŠ)¦>7!Ó ©UKê°ëÉëD+qíû©¦~·=ñõt®Î£k³ÐwÖ¿½O® ”‘/ »—&lGcTãd X1©¶TE:êåîzZÔVìR´=-l 'ºV,$`õªrÕ‡ÑË /³uõkí &9ÛÑ´M%.ÿð†Øµ:ÎæºžÓÝì»,ÊZ÷ ’®t¸^Ûi$»qåìÀŒÅ»‡Áô¼°º«~å»ÿ™¬¹H{.W8ë¶ ªVb{Eëdiš=&Õ¿²Ü¬/}G¸Vbo´b훆M{ÀÔn¸ký-°>ì:kw“*iÝ«ààÆ’Mp(7ºÜ?UÆÅì€ûÇØÀ–øºò“ßX×[W¶î÷uƒ}ÝÂÚª¹/ÙØko±TÕ¢¶"¬ÇqÕirER°÷˜zºÕž÷$\Ú›Þ¨¨Ûk=¼æ\þXkyë2ù„ ×Þ¦tË6Îsað¬ç>†Ï~´Z-èBwÿ…ІN´Wp.œÁam'×LB=Ê\Ö,ŒÃ3éŠL²ŠªV0}‚gó6˜p`.r‡›;ÈÈõÍ®½ÞvÝ'=Ô‚ö½ë.ŒK׺%UºÂ§›|ëÌa6‡¼È®p¨‰¦Ã1ZcìS´´iøl”AÐ8»=.HxQwŒÙ¥¥“dk]ëQçÑì$°­½kâMÛ·Äέº7ì`Æ9ìÕáVàc;ïu“¹·æ^jµaæÁ¿fv+Ÿve?é\å)üá6¸£!NqJœ¢Ïø`ЭñŽŸ„ãù™.Nc‘›üÐ$×ñÉW>Ä” ˜å0· ÈcNóˆÌ¼æ8ǨDñœûü'7ÿ9̃.ô•ó½è&?:ÒC®ô¥w¼éNÏ8Ô£Nñ©SýáV¿ú´³®uEs½ë†þ:Ø/Yˆ{8DxA`€?<™¢P‰œò”9¥2MЄ‡ @ÊÌB%ñÊe^ ÉA3›9ö=À€.@0|àèˆS°LI6Ó wÈ4P‘ iH&H,¢‹„‚óø˜$ x|4añ!0…á#ÉxÇÄhµ?2®¦X9]9ý~—© >òoÙZ]_ø¹‚ÖV+Kæ7ÍàÀs¹Ã5’‚Ì /ºØÃ¯çñ“߯æ?ÿrÓ¯~¯²¿ýZ}?ü­*ÿùKÿÑ$j߸íÂRïvÿü·SÚm*15Ã`hu;)öR7åR´#gHAxm”æ0]ö€ó…fz“iôu!Ô= îÂgº–d8…K^š+,Ö‚"è4õ÷‚(ƒ2HR4XƒhY¶}8¸t7؃õƒ@xIB8„{T„FxGH˜„s´„LøFãÇmÝ67û¢oîÖ!¸.½35&…Áæ{ï1D¦FnWFgù&fÚÖ øXnƒW¥0†jV[*V]âSg önpX&^fˆ6>çS>Û&fèbÈA\¦jÜÃZ¯Eb|óÜ#1¯‚‡Ålò†tlýö8­VnºkÂ8»6_"V…¾ÖXóÓbh[Úók–Æawd%…G]cæ8²ã]*x@¶X…­‹.Xl^S;0õm¤Ó‡ª?øõV„?¥ø[«&ê5VF¦™X‹‘%V+&^ ”m÷õq‘È&eH-ø„Wÿ•ŽîèsN¸c•H†¸ˆì‘…ªa‹žéÂ_ƤÁ‹5%lù‹õҧèS؇kfŽæfx‰ÏÃ…pæ³5Žiuc6ˆŸµb_k9«Vo³%SÌXzx…ð¢ƒ3¦r2+Ñx,'Rfàvb.V=h0¶Š´FnÇH9©˜’â%“ f`àØ8ìÒn!y’íVˆÂb_Í„(È׋¢ZUV?”mÑÕWŠø]çU_ÏÈn^©†;ÉÒGkL d6y”y?è‰lS@?ŒÓ˜;TÉVá¦X“ßa•c˜å7˜ñHsó¨.d’(íx‹f2ËÖlR§˜“§É‘ Ùm8>é9©Œ)–juI‹šù†ò†ˆ¿xl ¨ˆ‡ È!%vžˆ/‚h5=ùoºy5kX”«ø‰~È›N•½Ö†Ò“^ýv03]‘©FæÇ—ô%d'_{ yeg°BŽc“–JfS̆ãH]°¨—m©‚ú¥lÌéTBX\×ל¹˜bŸòéEôYŸZtŸøiEú¹ŸTÔŸþ E d„™útÿz —é’9örö’,æÈ†.rX^Ÿ&ŒJ@Vj™âfKΨVf¸h Ês%wpÓS›ªFeŠ•”)Š¡©•w™`ðv5¤sjo=ÿ§‹›UŽR¶…ì…—½BeÍh–µåŽõWH087$@0ª€OžÀ pÈø0ø€gÐ À`Pf Pgà Çéɶd’™äœê¡‹Nf£¨èPi^¾½w κØ]á†zà›–kNoý%æfÊ®ÞÓé9_î¯_Šáèýá‡R5Ÿ¨?]Y§Óʤ©N—MNááH‡ œÈ‚åqçâØfߢžÄœKíW$í…ÑæY¹ß†›ß•\ê íÛÈM´Ú^îŸÿýßkàÆ'”îË3nàþç îÎ3*ÏËŽ—œ†í¸¶8hØÝ`膿^Þ³cê.ØìNKîÞÖCþèÓïàíÈ! F…°ŠDç¾8»â‡È¦¼òØ%«² £îàŽæ«^e×Úì⊩ÒúàìÊíFY.ì"/¢Ýñ«Ãó9ñ¸þݤ¶ñìh”€ÕåsŠÈúä_þ¢)äJïã“®éœ"YñÉ^ëòþ®MÙ™ï*õF¿­h ôMêï>ð‡mÝöäÅ¥8oin…Kõ//ô“ò ö›r.gî›G.šßèKÉõW/’Áî ÷oÏcñ]ööŒ èîÿÍösø|fª®þ<µº›M¯%ùލ ¿ù¹Ðõê›nJߥÏã†jäÆfõ¦?–Ú¦¨ŽÙ;æó8mÑô6?ò>Ô8e`ª€p¿a®Îß·^ó™Sú¬Hø Þ¡à ’$?Ï‚ãêùçëÇÚò ÝåiMô~jö„yà?û„„Þ_êã_ßš™æ_û¶î”-î–ÿòÏÛçßë_€ þOà@‚ DH€„ .dèPâDŠ-^ĘQãFŽ=¤…/äH‘%CA‰_‘•-Y Ü„/æGš5.ˆs£ÎœmäùS`P¡?‰^< ÔgÏ¥E>…UêÿT‡$­š\™’åV—cΤöfSŽI§š¥‰V,EµÛ%ûví\ºuíÖ¼š7kÊ®\aʼÛâà‡ƒu†ØS1\ÃŒ ãCÌg䈑RfڲϠ˜7g~ìÙqbÄ£›æ\Ú èê77¦ìº´e×m߯ÍQïU­\}{œ[pê‚8‰¶^,÷óòäq%/E{¼²sæ“©#/þ<ûb¸™7÷Þ}øöïáË/?ŠûwåÂÝ¿¿»kï¾-ÿ‚uϺ©ñýÓÁ+UM:ñ¼ëŒ¬õЋ­»1SO1dï9Ï ÔÀ°f4JK·”–jSŽ3•º,¨ƒlÚÉ£^1¶"•Bêj µZH± uŠéŽ+lͳF´£²´R¯Å®šª­aκš>Tûo§/{»¨¼³cÑÈÂ} ÂÃ3ªûmÀ¯ßùþ…i¡ÌÄèÈ1üüL Ù¦1FÇ¡C²:¥Eƒ³5Íܳõ/C[n°É†ÝM:m×ô±¼d›Mþ¼¼²¶Ýsÿ¼÷×uÇZô¹sÛû)æ-:Rq²Ç ¼!«Óé¤Xô<ÎÕý°úQ7ÃÛÉ üÔyd }³­oqp<ñ4=î÷¹3ûþÿ‡OôÒf¼Š˜¯{¦ñŸè´ÿD» å€d_÷´¼óÕîB^û+ˆ»åMè:³‹]åAÕÉÈ~#ŒÐCئ9¥/‚×{\T(=©°„Ø‹ ûÔ7è@†~…ÒáD¾öÂÒ9ˆræûÞಧ–$¢‡BD¡ínÄÓÝi|IÂâú\Ø¿èPÎ.3 ‘ a4½¶ÝGœ+Lç—>ÖÝ­L+daðXÇ aÉmnLƒ8821Ѝ{#óH:üáñY¢ µ¸%~Êr%ÂÆ4W4J®­’7 /¹ÉÎyñf1äÓ#£Iq“§Då©4™JV¶rQ«LU{@‰›Y&Ê“Ü ]¹*X¢ª‹ÔH •Ó¸ÕE–QŽ[<Ë-‹YL]î’U½<Õ/ŸG=ñ•M„¸TÈ2Åò8¹ØÐ™´‚&¦îHHEÊÎxsæ×ä4·i³GÄc㯤À ³uÎ3ä™îIÀoVJÆBÙ$«tB&ðMÞ$T‘‚¸½üMhs’¨$.îoí#Ÿ’ð×OŠ /‘vQyïŠ`{èHçÙЧÅhˆµs èrGÄ‚ÊÔžµ`ÈÑ/ŠÒOÐBßÄÉ>%N§?„âíRZÄú%4Nð£#áz¨ÄÚ ‹T„*Sßt=žŠË§¶¡"—Íú¦;á•SvV,§0A¨£ˆšÑ…sjë—žHcžôTòÔ#Ò*N³«#úêGÅÚ³ZN™t;ì_•N‘™U8…ýd;+ÆNÖ²—ÕM`IPSbÖ³ŸÅHeA;ZÒD´¥E­gO›ZÖ*vµ­…m?_[Ú¶r¶µÅ-'o›[Þm·½nÏ~\âÊl¸ÅEnÉŽ›\æ¶L³@Í\g›;Ý™-—º×]˜u±»]=W[Ñ*wÅ[1íŽ×¼ë*ïyÕ®ô®×½×jï{åÛ¬øÎ׾ªï}õÛ«üî׿”õnXyö_{«¿F°§œ`7jÁ †0®ì®GØÂü°½¤{aËêÁ1ô2Ô—ØÃ#¯‰Uœª¯ØÅzC±$7übk-Æ¥ ou ¢ïØÇf»1gsüc"¦ÇEF²EŽœd&W%È mr”{úÏÍBYÊWö*•¡+ã!cÙË4Yò—£f13™ÌeFò™ÑLd5¯ÙÇmv³ŽágÏ™Î.¶óUœg=—˜Ï}ñŸÍaAÚÂ…64„Rh/šÑvô£ iIû—Ò•Öï¥1m_MoZ¾ö´{AjõŽšÔæ5õ©Å›jUo—Õ­¾î«a=]YÏš¹µ¶5rqkâîš×Àõõ¯ylaãÿ–ØÅ¦í±‘ [e/›µÍv6j¡mÒN›Ú µöµUûäÁj»ÈÙö¶eÁn×r»Âä®ñ¸ÑͲx ÄiwFÔ½n™5B ÈØÈ¼é-2p„øø„60"´æÚ¾·ëނ䉀AÐ|ô¡ á ˆ¾¾±;Ä2 `‹1d‹0ÄÁµü].Ke¿¬=Þ± c2_LœÁdLW#&je‰•È%àÈAü‡ §.j Xdîn¯H(D1¨ÊÇûÊ¿S÷÷-@JÆþŠî‹ ý³¿lZ+T¾2éÿ“Їhµ›±ás:gp;º£ˆÀ;@ð[ìËhÒ»áƒ?ƒð¼ºCˆ]Ð<À S@°ku»€…¯ûSp°3-”ÿž$Œ)tB#Bì–9üA; Â4@#tÂ%„CýÄ‘a°˜-'¨(ø¨;·óƒ°‚Ð…rp:|È‚‡WÀºøXPp:z ¬3 O˜‚g°‰Ù(#è³£á™ç»Ã¶áC”#3aÀ=¢4á>ù9Dy¿'˜ `H‚#˜€  U˜€€F xF|˜|8ƒ4à…_ØÆ3ØÆuè„x­°@ÔÛ»6ô%¤.ßÙœVš€Rˆ&0&ÈFX… X…ÀÆ~œ7H|Pƒ`È€ÔF5 G ì²ð§s»k˜=Øšr‡{¼ˆ78ƒ„иˆ¼¤äHJòÈ$P ;aolserver4-4.5.1/docs/intro/tcl2k/html/img005.gif0000644000175000017500000001010407363640502021166 0ustar frankiefrankieGIF87aXÂ÷3fÿ²²²™Ìÿÿÿÿ!ù,XÂ@ÿH @ÁƒPH ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éâ/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°®Û»xóêÝË·oE¸MȫӮßÈ+^̸$ृé&4ܸ²å˘3¯}L32ᲚC‹MºôIÎ5ÅJ®ËÓ´ë×°c‹FÖ&áÉ­eëÞÍ»÷æÀÀ«þLÙ·ñãÈ“¥-ÜöjÐÊ£KŸN=#sÏt¡Wßνûñëó@÷N¾¼ùÐàÏ}¾½û÷|Óß\¿¾ýûiåC}>¿ÿÿ¥ßj¸hà¢4àm¬%èàƒb´ ìEhá…ÿNH†vøŸ†âUèáˆ$v¢Tý•¨âŠÉHVŠ( cC2QáHãŒÕè£ý¨£C8 $‘<")ä3úX‘‘Iîhã’LBy‘ŽIò8äR©¥•EZÙ%•JङFVI¦’iz¹¦”mjÄ¥šg¢y¤‡.&¢IsÚéfQö è—wN$h˜… ZeFsrÙh–Qv™c¤m©£^ i¡’–é駆jzdŸ–rºè©rRêç %æY ‹°Æjœ« Êj뭯Ѫ®¼öZ™®0ú*ì°y»'±È&‹–±Ê6ëì²Á†ŠÇ>kíµC1‹í¶Üf-dáQÛí¸ä#²¤m¹è¦Ò¹ê¶ëîEì¾+ï¼ ÅKï½êÚ‹ï¾ãêËï¿×iú ðÀÊ LðÁÂŒð·*ÌðÃ,: ñÄ#JLñÅZŒñÆjÌñÇz òÈ÷‰LòÉòÊä©ÌòËÕ¹ óÌÊÉLó;ٌóβéÌóϦù ôÐè}ÛY¸/VKôÒ± ÍôÓ‹9 õÔ~‰IMõÕÅšz!bíuiV-6´¨M›ôØh_vÚl_µvÛp#õvÜt{[6ÒzÖ­7^sïí÷J}ÿ-¸InøºZ×6_ׇ7îvâÍ-.®ã”'Uxå˜Styæœ?´yçzæ¢^yé¦;.z•>*ê}Šº©êašè¦ÅN•îñÞº©ùÞÌ1äfçÝ“í>‰{¨À¯š¼óŸ"ªðtfzû¨”ú^êòÐC/}ô³¿j÷äÇI*÷žžß<ó¹«:>‡}³.»ìo™&”×›ï>ùl’I½ˆz^§ìG»I­Ï{´ûX'× °`“D'²üÝ "ø¿ o¯JóA®Mn„(DÜÝLx¶ºÐ#¨{áÞb(úѰ†q»!ۦæ­‡>ƒøµ!kF<"Õ’¨D¨1±‰L{"‰&Å)­ŠV䳈S³-r‘f^ü"ÌÂ(F–‘±Œ(;#I¦Æ5‚¬nä㈱9Ò‘bv¼#Äò¨G†ñ±û# &ÈA¬†ä"‰¯E2’^Ž|¤¼")IwQ²’ùf*¡äZˆÉÁ]²“åú$(û¥Éýlh”~%*·¥ÊU¬”ª•+mKíj–lk%.›¥Ë]&«—¾$0ƒ™°ZRˆ˜<4æ)‘)De2Ž™Í\á&M± ³š¶º&6c¥ÍmFÌ™'ôæÀÁÉIqN­›æ$:Ó‰'rR“Qtgá¹´uÒ3cò”å=‡fÏ}B¨Ÿþž4MùÌ€j1Ÿ·4è̪P1´¡z(Dý#щ– ¡Á²èÈ*ªQø¬N{õà{@º?ùoïk_ÒAå­ƒd•:1ª´’„4v )JÇt;þð êVZ*ÓT­T¥­¢éO°$¾¢âôRÜö®ÕMí´¨ÝË)I%E¨ñ)Ð"©í¬‡*¤z•¬Ï«QÙ¤”â´s ±L(Ÿ`êVð½TLié‡W£Nµª-+[Xª²j}g½“ëðÇ&» ¦@RG…R¢FT©,QTNÅZÒÇÎέª™ê*ØÃ*¶©X5+OËÚé…ªï;g[+@ÙÎv²îkiÿ‰Ù޾Œ£¾mpƒkžá·e½=.“«Ü72·¹r|.të(ÝéⱺÖÝ#v³ëÇír7Þý.!Ã+ÞC’·¼ŠqÔ$¬âa¥¸Åˆy1Œ«YÆâóJÆ6Þ Žsœ5—“Ǭ¬1¹)ä!ÓÇï4²µv¬äß yžMv“£L6­ÊTþe‘³Ü¡)s™+^þ²VÂ,f¯l¹Ì"3𫢿5[îÌnNP›ãlŠ”9Ó™(v¾³Pò¬çåÀ¹Ïú3 ñ£5D®ƒ®Xâ@èD'ºË‹fáA½ßG¿ÕhŒ¦tM-æHOÓ šæô‘1-iPëSÔŠæL¦OjH«ºÔ®t«åìi‚F%Ô³N5©?ëMçÚ¡µŽ%® ¿`šÕÄæí«y=ìd[ˆ6«v´³CfìÕ4{Ú‹‚6¬¯mZ/ÛÖ9áv·=øma#{ÜÔ.÷±¥nûh›Ùçn7E«MqË{Þê¶v¼ïínzÓÅÞüîw¾ë½ï€¿çÝàžtÁ .\ßzá /®Ãà ñˆ#wàÿ®¸ÅM4q…³{ãÇøÃ?òí ÜÜ$/9uN¾nY«|å7uÊ_–ë{æ4oQÌ{ó”víà=ÙÏ5täØœà8/zoŽžñ¤+}7L¹ËŸž³¡;êM³úÔ±u­ûšë]9ůö y½ìB»Ç·Žö\½íÒ‰úØÙ÷«]æt¯ûhä¾ö¯ëÝî»N8Þýþ÷½¿½ð³:<â—®øÅ‡=ð(Ï»ãKkÜøÉgýî<·üãmÉk~ŘúçgSùÑžóÛ&ºéQ\úÕ“>ôªw½bø>xÙ;¸õ¶1îsOyØ“÷=†|Ë üøì¾ø þÍ=|·Ð>óÍ×½ï™}'+éÔ¯~~ޝý¾<_ôÝ7ÿþô‰~ë£Þ¿/¿Y¾{õ«…ýéwÿVàŸ}ùg…þä·Wð¯ÿs¿ÿæ-—xÿW€Uv~‚}| yØ€lv€fè.–u8XZ±‚uˆ!M˜Y¬˜…ˆÅWk(&åƒ>…„ÈŠºŒIø=‹€XZÖHƒtŒRÕ&©¸VÒèŒÿ…ƒRrØW.…„ÞøŠ=(†èR¡¨VߘZ¸X´x€•ð˜V¾¨Š@ÕRVHŠíT‡+A…øØ‚K˜†C˜Œá˜‹úx[aµU鑳èZ¦bÁ˜X±uŒ¶øŽ®FŽsgŽ©*òs’Ph‰šZ<¸’þ¸†”H‘ºÈŽäˆt‹sh¸¸Œ.¹‰QZ(iW6è›(Ž7è‰ËG’Ù‘!%AfÈ…îèoÒAgˆ“(‘ô¨Ù†Ä‹›A0É“[x‘¡E‰Y“4”ä&’}W(€©nYÃ8—lQ—vù~#˜—T—|y~ù—û·—‚Yg„Y˜xv˜ˆ¹gй˜~FŽi™cÖ˜”Ùy™}i™š©[™Ù™JÁ™ y¢9š$4™¦)7¥™š"ñ™¬) «ùšáš²é´Y›˜›¸¹·¹›ž©›¾)!ÀœÑ›ÄI8ÃyœaœÊ9ÌÙœ*Ä–µ=ñœÔ CÉyõJ’ÚiÚÉ›ÜyÞùÖžÔ9žä /æ 虞±žÍٞð©œò9ŸqŸøé9õyœú¹ŸÛ‰š:›ýIœÿ  ºŸ ŠŸ< :Ÿ êžšžJžúÚœ*žê›zžº›Êž!Š›#Ÿ%Z›'jŸ)*›+êŸ-úš/j <1Êš3ª¡5šš7ê¡9jš;*¢=:š?j¢A šCª¢EÚ™Gê¢Iª™K*£Mz™Oj£QJ™Sª£U™W꣕>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyÝ’ ì—ðIÂ9"N̸qW¸MiÉ«ÓnKĘñZ4¼°f‰9öÜŸèÒ3£®zta¾¥;¿–Ý:¶ë†´?/VM:õmÓ¿ ŽòÒÉtZNù´jØÁ¡ÃÆ-uõѲ}¯Ö.ýuÆë·¡ÿ_]]ûìÙâ©oWŸž»fÞÞÑO'N¿>Qã4‘S.k¿¿ÿÿ( K‘(™XÉÕÅÓ€ 6èàƒ*e`dúÑÅ_„f¨á†R„_Mî·\‡$–hâ‰Ã}–M”)·`WÁ±·]ŒiÑx•wõ…cG;¶žI=¢HŸŠ²˜à…̵÷u:þuÎ…wÝ“½g[y;ê–]•óq‰Û—T‚ea¬Í'¥ož©e™ÍQ©æŒM’é\šãu¥–å… ç˜hºé'žÝ¹†“BbDd…RXè¢*Ù$£= ©W¢…Š(颒nÊ’§INÔ¥œ“.z襉¾x㔂2ù§m¤öœÙjŸ|ꉥ«µŠŠk›2ÚI뜿ë›ržlœiÎú«®dÒ(,Sz9l©[j¤ˆªR«-U[Ú*FÝn›”µ7a+î¹è¦{.¹P™)}Ñ!ûìš`K'°³>ªã²wʧ¼Wª—ë^õÆë'°øî‹ff©Çスً翲*ܰióªîIì&è"§þõÛ·Z‘,œÉ9r£+o,ÿQÇ-*èòÌ4× !ÌîfÛŸÅg›žñ†¬´Òûì“Cc¼0½@ã æ¼MÆé,À°¾úfÕWÙ,ÔOì&“¢-­kÔ“]±Íál.Ú#µ<ÊÂ]•Ül¤6¦:×­÷Þ|guwª}.øà~ˆ(Yï®øâŒƒô7ây7.ùä”?ôxe‘[¥±Á H·GŸ—©tç …^y‰—ÜS¸Ÿ-mÖ ïµòoöcŒg›¬“ºCl/é¯]ëno-:—¸¶~ºc©Ë¼üóÐ+Þ<’Ñoºé¾¿–ÆÖ#ë㺕æ‡*äšÂÊôšÂ/-^îWúÊì¾çGM|±vZÙ«ýùºzÿë´V Œ°ý_Ó ;7À¦Áî³3Öh´*M€òS,¤%/ü+ÊôW½z]ÌÜpÚÄ++™Í‚äiŽ ½7ÁçȧøkiZã°Š„ô ý%<¦…I{¬O„à B­„)`úfÀVA=@Ÿ8ÃÞ½®hSäž3˜îiñ€A´ÏÃHÆ2NjŒÿa`ûX(CÙ¡ŠÁ3_WÈÄ-b1‹UÌ¡×dÔ¯øyisa³aÝEôÜ~M[Ï èD9’ª‹OÌb¼„¦?Fn-…ÂZ¡”(™I·*| ºÞʱ¿ê^4åì¢äCä%¯NWƒc ƒ6Ø Pv´aíŽ52Wb-V]R¥{f9°`jQ‰m´•,ˆLóLrP1”$&YH`%h4#†°WCé°mž\6wæÈöK>F¬Ÿ¿ˆÅþeOw·„£)¸+€OkÓ§²Þó%@i’˜K›@‹yÁrꃱüç"y?Ú¥3ŸV$6Aÿ¹¢rR›Í(‡Æ©ÑŽz4@ý¨HG*œ’ô¤(U‹ISÊÒ–RÊpãÃÜêØy<‰ÞÓw¿œeAyé?fìvñ|dÀÀÍ®í²›”ôÎ5a ±Ö2Xù çï¦ÖNÕ‡[äMEÑ"YpÝó)!Ñ©IV¶òb¾¤æëFuÅM:ðaBÍàXó'¾²Nu£;ÏóBí Ó/¬4§ —ÉÔ¨vKŠ6ÒJ]ÊØÆÞ§«‡“)WZÕU—{•VbÅŠ£köî4ü’¢PÙhÁZ¶eNýÝÓžJ;Óžö†ÖhO—úÑÅr  ÜiÝgsš5Еq|«a#è¾Ì0±È½k"ÚZÿ¶âU­õÊch§YÇcÉ£¶u¬v·«’ìr÷»àudcªºðš·±ÄpÈR†† Â!ÈØˆwG-Dd!¸‚CJ” !ÿ=¯€7f‡;\``/LE VŠðWÿ-Kð ovtœÍèþ´áS2Šw Ãð…owap‰ Ÿ>TK'Œq4cÅ ™¯CÎaˆÀøà¯'Ò §À!SA Ìðà!&°†C–P¨!øC¢€Ë(fÀ!¶òH'€‰]0ÁL˜À9ðaƒUL ÀÇ2ð‘f À! øPC0΀8·a lxÙxL>,ûùÏ‘1 ­]AúÐ-54¢MÿRE3úÑu4´NØÓ±•vžÒÜ$,‰GËÚy fmŒ™Ì†µˆÔ´3+&H3oÏ_íó§Ÿ(Õ\:MY »Ék7.I¯½­¯ƒMëJÛœ¾5R‹íjÆHºÙÑ=6´Å ëv­mÚØé³³ÍíÊm»ÛàfÜ·ÃMnÁ{¦‚´5QÈß6²j4䨲úÊw_¶HüôšÛ^‘•º÷Ö5»ÓM‰òÓtÔ7^Õ·FnÞ¬Ús^Xé”lR|Fǵ"ƾ™BÝNí©Å”m[±Zoxç4xÖùf…5·³0w-e;óš»Ü8¯ÛÍg6^ÜuúNxåçK†ö‹Z¬Á­¢tçMÏ}–:³©Vx¾ïÈÎŒ¸f’®Ƈ 0P‡gÇ++󂽿œÕÍÏ«{Ø’/k朴f\ÞZ¤÷1b~*Š·ªU‹â1£^ÎO9¯—lëX7àQ‹®ÚÒÍq³·5ëuçÊ2Ðù%ÎåŸ1;hø¬Dg M#9Aw©j]ßôôʃáC†ÐÝ)Æ{Öµ)ä}Úú\þP°¼µ%ëþ¾àXK–ðÀ/<àsÖ g*W(–œ¼Ã¡%÷Å+ý#Ë/IôÏÛyÏWrN;ÌçLÅw† ÿí<«É¹jfOõFU7Ò›™Üª6Òš¼[}D¯·êÿþgÿþµñÏsëÿ¢ý€|cX€B€•3}Çc€4ƒ€Åez@§YÂõNò„{{’xgewñV~ —q(W TSò7LÓ•+\ãzø‡€ ¸‚ ¢‚,ø‚â‚H¡FcÅ5çHNõFT1§ÑB.´}žÕsnµt»3‚7Up„uNó&j4ÅG’wwËÖnhZvÕkJIIÕjç´{A!ƒG¡jmþô|ŸWtß4XÊTú´9ŒWp$(oc|ÚÇuœ$KÈi%—a‡AõWv:Õv=¸i¨JÑÄ…@á…Ú%Z0¨.ŠX»„²ÕI£uTâW{:ȄƕN<¤@ØÇzk¸€þÆÿ„ˆ×ˆ]UQÖ€¦¸ŠŒòˆÔ)ᤀX჋҄)áŠoSN6¨\þÄV¾EOlRO¨tz¿ØLkerá7T#7‰T”'œʈ~šø\ÅØJ˜Qt}߇[¶'zµ·nÅMºÈŠæ¨Rÿ×`þAƒNON§L|ˆ‹ ·o©'vf{øtÿTX—ˆBuyæ4*>×#ž(MLGKÖ8&?ø‰L……¦„ë„[‰ˆQŽ"ƒIPäa|E‡¨¶FÝøh‚еCôÆñ#t½ô†-7?T‡-XÈè0»æ†¸$Líᇒô>5†q{a”Kµ|yŽFÉEy”JyI¹”NYÿé(kO9• Ò”YWW¥äwƒSq—&Bñ}Z©XQù{+‘yÈ…¶¦2Iew¹¤2¶ó|Í“ý$5 ˜\WÇ>‹—}ŒØwšc͵Lfçd·¯W‚²øj½—ŠêH•né˜la•‘˜@dyb—8–£7Bš9•’©Oû‡ÖWg©©›ÝØI|ùŒ[ç>;ëBï6„¤)“Ó´’D(¶G—r$Y…¼4¨BÄ´SÙš„ã¶ÿ·õz·A¯$B·E‹³»XyWù¬³ÇmÞʰ& „ng¬$ ²-»Dsé•(7{"ÛD¤Ys“›Z½¹2!˜v—yiM…µe4­;Ž?Û—¥KŒNë·"ÇGBë·H»‰@ {™;z¯{qJ[•»ª‹]v{xlr÷òLŸ«¶Ìõ»IçkH˜V¹µµX ö~µ+uî–Ji×[d;SwµcÛu½{¦¥¨-ß[[Ý‹·äëz[¾ x¾‡°¸›&Èu–gp²«95+µïë¢ë{1×Ó£¹š|‹"ô-™‰eCµSøØH{ó[šÈoŽ‹À ¸Î¸‡ŒX™äÇÚ¨v¸ÇPÂ[=êà).guŒlyÙ³Ó…qŠj„k÷@K…f«£*¼ƒ<õ“ÁëN.9²¡wrÏÅ‘0ÅêQx¹7+ûìÿ+¨èf}’óÁè€NüÄüÅ ,¿|–æ—}«’šç¹ÌgIŒRŒª L@è‘{KE£ZÁ¸ÀÖˆ‰z?¹÷~Gó‡Øë3™ÆöP­K‰Ë8yŽ8¾ð²w1LwA+s¸l²ÙN¢0(mÛ{JG¡Ø›6Li”ûŽœŠ²ÉK¼Éè:_;¤‡ )TlaW*a,«œ²„,ÅòzʰLxÿ²<Ë9W˶\n¸œËá¶Ë¼Üm¾üËÙÌÂ|מڒØà¢Êß«wœ×ÎØ¢Ž|É ®|R­ß/NÖÂ=QAL|¶JÞ5ÃÓÿú˜)BáÚý¤ÜÍØK˜Û>ÍšKÃý:ß“Øò-±>.ÈKî¾_gä=ÁÝóMÀ2ݱgL2{LŠÚ§ÁRŠ„Ê=ÂÚ8b¾½+k|ÄâçÝi®šníÖ+~ÀLÍýÆä‰ŒàD älaáwT]ÁKæì«ç#¹š¤Óæ]ŒºQb„~á¹aÒŸ=ãžç©EÇ´«¹.®V·Mâ1.å‘Ýì½ãm¡ãšrÖ‘ÉçAžêÍ ê¬^®þêÜë²^h«^ëIë¸ÎXÿº¾ë‰vëù²žžÊ`¬•V[§£ /<îÑ~wìÔB®$§W7˜W&·[àUÇHy5¶¬í–F›B7Wá¾µy°nå6Õ7ü‹E˜‡l9ˆŽ:ÀžÇÕŠv¨g~¤“Hè‰"x†@k4«e‰Ç7ºì#Ñw‰±»½ùžÓ€ÜWeÄ¢…þ}ïdyãûÇÄ®‘¶èZ3I®‰ÅÐ\®á¶MŽjïe­ipgÅamÈ ×ðŒì~(üÔxn"½ÞQ¤Ž¿P<ï¾¾”cŒ|+Ý”ýÙV.°m í—Z»oÔwˆ…Ìñ—iŸ¸ï í̼ùÚI¸DØ¿ö†Ç¸dßú èAçí çQØ¢Ò(æ#æÅë ñ6Ú®{¬ C±uoÑ—Žï­6ç`Þ·½fïóuš¬ðGòsg¹ )§—Û‰»º‚ïñžËk'¯ÔŠ+Ê÷ÂìaŠ?ìA”óB¢/üó,!ú¦¯m„Ÿúóºú¬o¯®ÿúˆú²/8âàÇàÚp‘±_û¶^ø€1à ü|  ½ïûÆw°uð tð ¼oñªx&" ç9ŸD !9Ö!Àýø ¦ü(Õw``ºœPýÿïÍgfêižàï ß@‚ xPáB† >„QâDŠ+^Ä(1aFŽ=~2d%™>±@ ƒ& *ÒÂSfLš2‹Üĉ¯ˆNž;7áûÙ°IŠ&r•0ÂD ˆõJ<-ñLäÔƒ 7ZÄ@«Ö‚W^,U²e!nôš6+ÚªY±vu«P­Õ®l †½Û«]³}ý’ÝÊÕ¯<Ì$ÉË8Sq͘8sî„ÌógP†OC0=¨ä© Q¾Â5P— l&v˜"e K`1ÐÄSµñ•bÖk\¸¼ãÒímQlð¿Å©ò}+œøÜÞ»“G+ø7A¼yƒÿ5ž]ûEì©11„`X#ÒQ08¡`°3øÒ8\¿±ãÈõÞŸXBR¤Ûýÿ0@$°@ Db’¸! (˜`U&8gV&ÀŸðAãŒ^€yÏŒöÎðE!ùâ£Ï¾È&;°E_„1Fg¤±Æ‡NdŒúzâq m2H!‡$²H# Äq¦U$èÇ#Ÿ„2J)§¤ÒÆ$iZ’Ç|įJ/¿3L1Ǽ1G3³´KÊÈd³M7ß„óÀ+aB³ÇûÖŒ3O=÷ä³ÏˆæÔÉ1-yRÓOCE4Ñ1­3²B…4RI'‘QA™|”RM7å´Sª,}lÐL=%µTSOJ-Ô›ÝòNT_…5VHUe²U'eÅ5W]5s±F uuWa‡%ÖHZYm²Ëb—e¶Y${eìW[•u¶Zk¯5ëXLƒÅÖÈ­Þü¶Ûjÿµ•[¿s(0uå’Nu߬]2÷YrÓ4W·uÙuŽÞ¯œcÓß“wLë%ö^;oÕݪ ¦®Ýƒvø®Š#¶j_‹Óºã:X`xÒx-± F—ÞpEîØäëÊâÃ’a]v4ßxc~¹!•k69:Œ£;y]–‰&zã’{ö˜¸ aúc—¡zh‡+ÆZ^³–øg m–g`&ød˜Ó•nâ¦)f[ê³¥¹k€)~÷ë©ïæo·áF╵–›é¸ç;lh•¼´\²§Ú:pŸÓzd«ë^ûí»ë.Yí¶™ZcÍ;ï·ï¤9oúhËùÞíóÂa{Z<÷ÇÜk´GŸ=e»Õþ¶qÂ+<ô˜ÍÞûåÁ7¾mÓy—ôÕsm=Ù×Cj™k’׈+Õõ†šã݃ÙoÁŽÇþí‹‹Ç~⿵?ýrÑ—¶ùQaXwíÑŸžê§ëâÝ~¥-Núù«ž™þ <·In¼_æGÀ¥±ÏpW’–óÊò¹Áµlf”³Z÷:FÁÈ5ðz´`½§»ý0y”ÙÕ¨<nϤrŸÎ^8%»ÍІS‰áân¤ØíЇÉ!µ~8D"**ˆÏ+b•§#.щO|S¡8E*zIŠUÄb‹tE-vÑ‹2ââÅ8Æ…‘ŒgDcqÿ̘F6¶1$ktcåH8ÎÑŽw4Ñá°”8|éÄc9È8 ’‡D£!¹È/*’‘Ä¢#!ù0ÕF–Ä&Ï(ÉEsøó– ¤É f¬#]+))¢ÊNІz¤&Dm0ts+a=WŠD—ù¥‚))NfR—ß‹»¾‚Âóíkd›2C8ÀiJޏĿ'AX3 ‚Nnž3å6ŹMjr-„äŒf2¥ Ît¶Sœ’Óf7»«b®ÒšgÎZê§OJö}Ëfêhöd³{ä'@ù‰M‚†“¡€[fBE Í€ö•Ê¥B¡©Q‡V4£ùŒ(@/ºáЛÁ2P¡ê#-A2O|>snåW3áå½…Æn h›œÿÒ½üΥפ› Q‰F4¨?û¨EA Ôöp™ëü)I›zÍ‘Jô“#f¤êY‘2uªþ¬¡õ^¿ªz£þ%C7ç–džÕ¨iýêC9öUš¦õ¢…k^aÚ;µ*Õ¯IUë^ÑJÑ]m5•ëóæ7mZNÛiPiFÛTS¨Í¼UΩ”}l O‡RΩ‰u'I¹)OÌÊÏ™H3gÖàÊØÜôž¯2ì$WJ¸¬’ª¶6Œ­l=ÒAlÝv†¹Õmp_\á·pÿÄÅ£&}{Ê^w‹&àû ÖÜZR—`Ëk+ãÌ£Ýs¹„®,sæÇ~—;´]ª€Ì+UfW´Ö}$rKéRÊ5§”§gÁIßÔNÖ®üÕì9kZšqö¿ÖÌ/±úZ޶¯Õc0:÷IDù^— ¶ï[ñša wô©®l>몿·ÄÙ¬`ß Ø.õvÃqp‰¹‹Ö¾®·^†Ÿ~W{S£–µ¨^qbÅú߆X¦,åm`Ûºá¸v˜Å¸¬ê‹g:Ö·”¥%¶±¸pìK*ט¨A~2aƒã‡Ø½úôï™ d&ÿXÉOþðŽqzá[V¹È3V³·Ìe{y®X&ÿ-‘ßLN×t§ã$­~#,á2gV±¬u1j½6>®ï³„–q:Õ™à<7¼(%k£,¿¾øìâžGݰs~É·W¦¢ªW=kaÉšÖ·~ £+C\÷a¶öu°=ì=•Н>5"‰=J²—ªf>+Lk«PCLjÚb>h¦gËÕ¨-÷Ëf¥¨±OµlõÖ™±¶RÍ å@[¹ÊCnè7[Ì3îb;ÎØmoÑŒ4tC›’”Þ¨Ö2(P{ßÏÓïØT*¥ºÂ›®d•qŒQiIißòkÔvsÁÿJS)ÿ9â…ÆxÇ™êð}g´Ñ¾©xLqûéUm‹¼Pj8ÈÃIX;»Éác¦‡Iï=áAÓÜ…Q¥³=Ñp§÷·±ˆO^´šÜäÖîPeþp8cùæ]½ëŸ/.Pk\ÎRmºÓjŽô¢wZëIo±É«Í›¬ý·ÿ,¯•Ãtåf¼Ï£U·iÌÞrfÏçòæ°½¯ p Vº™%/!†ƒúuƒ{×ßrtãn wdI·Øv&מl˜sþν·Íua—~V”wùÂM¿úö¡^qªg}ìqEzÙ×N´/•çi¨ûί÷Q´èÿò;³ó~·‘Æ7XázŽ0¿¿ÿjÿýóIÓ™ÞÔÙ9à§\}}‹õÙ*½¯m„î[²å‡÷¡Ûo¿+ó|ë÷þ¦Ý/Mò¸Õ³w}JE½û›ï<Ûƒ^»šj°Žr¸o;(²{7èh2’«¦´ó¨ó±ê@£ Àɰ4«6\³„É¿P›—Óš¿9@Ÿ{Ó¡‘,„5¢c·Ó¬v¼£BÁ2›²ÌÁŒ@”ÁHë² D»Ðj=„µñ‚½Þ{Àþó*Å[;Ô9›ó$ô?¾Z›C<쓽’Âu{3 t6|Á÷ÚAô?çóèËŽÁ#°M£&©ƒ²#T¬ªÙ/~‹¿J²;²õë>ƒ*@Ë;ª‰Á±¿+0ä›0@|°ú:¹W–{½ýëãÛ¥NC}Ù¤BF´½KDD]K8×ÁÄN¤'JT8KôÄQÔ*PäDRDÅN!ÃTdÅ YÅV„ÅÿyÅX¤E™ÅZÄE¹Å\äÅÿØÅ^FãøÅ`$Æl1E¹+Æd¬’aTÆfôftÆh¼h”Æjü“c´£ÀŒ™vL•w|9f“ÁÊÂ;Ñ 7uG7Û1͉?v<ÈÎ9ªÚ±>ô @Ðñ2#´Ã¦ú6všÈQ#6õÃ7¯k:ë° >Çá ««,œ#¹ßžÜÀ=|6ò³;È«³‘¼Ct™¸¹5`ƒµäCȘ< Gk­éÓ´%ü¨9È’Ã<³6#³•¤È0ôŸA·²B¶Ž¼?„l-ߑɪt«ì“HŸtȰ?%ÊÿÓ6§ÜA¶¢Ì3¨,;tDB G¾»>¾‘ 5Ì‹7™L(,l;9»¶8!@ÛC‚³¿Ñ ¿D±-¬K7 G ,K¿ëÊr̽Œ)¯ËA‰”Ç›2<ù¡G[R³Ú‘LHÍÔ8² ?,®»äGmÿ”ÍÙ¬ÆÚ´ÍhÄÍÜlÆÝäÍdôÍß$ÆàÄIS3ÊóÒGê²G‘ NnsI<þä²¾`ÎzËGîLŽh›Ìï¤Çã<5sÄŽ«IËÒ¼ú¡ &Ý›ÁLI'uBMÌ´ÌÿÊ:ãäÏ «ñPš,Ž;Òœ\²"@tFÂ#Aͺ+ û[2¼4Îë±Ò´ÄK½ìÎ&‹”ëÑæÈË å96-ˆâ­ҷ\:4°‹2‚¸õÃËÔ{DR9ÅX<Çå%°UøðÔfŒÄRMÇöôUeˆ$N\„ÕX¥ÅYÅ•`¸êìLrd%9 JçE[]\-Îô ;æ"ÑMSY=U1I»£7úÀ¬¨êºF£Ñ>mÐ2}ÂÇLÀôÌÏ9´ÒuU@VÌQÿ\°ÆªÖ±bW9ËVx5ºxݧÄʼG$´SÀôÄs%Km-Â=0µ„J-,¨œW<ôI¹¬Ï,Cq;Vuÿ.}ΙŒT1eÒ§´BµÓ•”¥ÐÒÔ‹BÅ©# OÉdÖDŒ»lœd+%é¤UciÖVå½,+WNY0šÙœåÙ7ÚÙžZŽ Ø µ½¡%ZÙ3ÚµJOðÛÊs±Î^"¥›=¬°TÒ2´.åšÎ"!³NUÙʃÇ(¡´æS‹!ÁZøt““Eµ)ÛzlËíHZªÊ¦yS‰³P6%Pî¹ À»ÑC´ÂmЙ“Û©‚Ì$ä™Í,¸‚ Ô =Ê3ÝÖpí,©¼Xül\ ÜŽ½[AÄ=ÏŬ54¡Z×6eÔ6¾°ýSƒ}Q„ <ÈJ*MW„´×—¬ÊqE:Ü™:, SÁ•Q=MÿÖ1Û]í2-ÄΟ­’ÍXüI=u¯WÈmÞ ,ÉÛUX· Ò(¼T LÊTVÿ!ÊÜuØ"Ø| _í}ÓÓLÝö|[½RQH•¾‘TZãE/}BÃ%Q¥Ðõ³­E\(5Tý¤ÂIí,ƒßþôÝîÄßÿÜ[&²ºÃA´̵Èg$^Û”Zf&Ë´¢ æÇ è$O8}®®M½O=ÚîG^DVákDaýsVäϦ…Ùˆì\Eݶäµ'‰•¤$Kª}Ù¶0~uO Þ¼5EWF×.¿§qY`M—¥uµÇóa'¶ÚáÓáŽH߸å)jå>û%ÔùݤóÛ\UÁ!'S¾Ð í—Å\‹m¼ źÀuã’tØÊ•O0¶HÇ}]ÂEŽêUcœÿZ"[»8·màÚEÎxóS”eÀ:ØÇëÃ/ÖRþ] Dóë]¬}×f<Š$RßM·ÞíÞ¸êB˽5â@naœ»AuÓîú¿­›GêuÓ]]ïUËžKãIŽÏïmÝe=´Í^ÔEÌò5f§«Sê+àcÐ0“^žFA&B¤X¦å%¥\û HÕmäµ¼WêÙ¾í?M%ªJ½Øÿ}ߤLó‰VuFC¸ÜÔÄWòEgnýÜ=öã²Èb*Ab"¹âG$ÕâU®Äêg²%[†aM ÂP\áˆnˆ}–èY£èŠæHiÆè£½è.®Žöèàé–­‘&iH2é“f¤”VieÓè–¦U–†éA’é™þ£š¶é;Â霞ÿ£æéBzéŸNδbñdž n%Öl_Vh±5¦ž,†~a@ÞZõlj6ÁÍ&ü«ænYeÎe ¬5¤~jƒ³Qv4wbÊÏ}Ã?dAS0AT¾CÓXΰÂLÒ½¯»¦8Qr†k¿®á½¾kJáÉE#X¿íÖ EkÆ^¦%ϱÓÜéeØÄ¶‚­å¨dËN&`n‹ÎèåÂ$V [ìR$hˆž/-³ÀÈc]«´)À,äkþSr%¿Ê6ߊŒí5ÕjsNÀÁæJïÅ/õëvîäeÓvhEtaðdOåè3½Á-Ý0¾Þì­í&õ è¶3×ÍRìÞî%¦gèd³lÿ¶/[ÐËvQ³©«–ÙÓ>Åê"8M+ÊÀ^ëô¹,ë'Ú-(˳Êùé¯E†4ª|4cåkJ-­'ÁÏnLKl ÓŸ^¢ƒÏÚ£p%²ð޽ êD"ëßFÎÕó²Y÷fæAŽU¯b€6Û°®Èu¤bRCñ¢ qà›Z¯ÚDUßU…X¦^ñ7Žá–ð/5Ýok…´ëÂ[òƒë½Ãm*•ò©<Ã>­&ÇÓÕÞ©¸Æò@ÜpN©ÌÂÊ×¼À(mlLÒQ$$ï­+f2'>>ÎÚªK¿'½ºË­ºåÕ<ß®¢0lºê).Íî«Ó¼æT5ð‡Ubèè¶?ßb£Œ'®+8äØ>]I+QqÜìòþ!>—ó·¬Ù­íÑLcsÒ.+DW^*äœN/ ðNtH‡8SocÿÖÇNå!ÿºK"߬ÓQ<\¿rºæõ'=7'—ë߯o¼fÌìòÉvíÍ$üžë[L2M"O”µ…fÿ!G#47slçÚå^Ù¯õöv¤öqO5m7wàD÷tÎugw`,÷w5w—÷\Œ÷z¢{Ç÷f‰‚ð‚è÷h†odÜ÷Tl„@†Ä ÷‚/.pnÀ‡O€ €‚`„—Xx†‡$w0ˆ<À‡D€H€vÀ‡>0ˆp`ap÷ÚÔx_»ƒbÀ‡ae€[ƒlÀ‡E0Œx– ‰yhy9²‡wØcxE8„@؃=¸@ Ep„HH†n¨xˆà$jH`ƒ0œ@zPà‚ƒ!0€‚ˆ8Ûz-â„=Ѓ¦KPøžw‚ ¨@ u ¥Øþ((X sH‚@¶/RÀ¶'ˆ´ÇŒ¸§"x?`zƒ ÐŒ¨£yXŠË0¤X ƒ}ýÈ‚€††\(Ï€û¶ÏÐ猴¿§°Ê" „I˜ƒ8À€¨€˜ëÿª#/øzXŠQ¸ŒØˆâMÜ}lA„Rí8¡;ë ¨bõËŒŸÄušB›é*Œ¸pƒó?5AÒ…Z€X}þ˜ü‡Q@èí¾ãð7ÞÕ|,hð „ 2lè‚&FŒ("ĉ+ ´xÑcA=R¤ØÑ¤IŒCžL©ò!̘2gÒ¬¹ÑæÌò अÏ'ПB})Z_¤J“ Ü„ÏiB&¦:+Q"„ ‡9²âãQB µYššUm ¨[øæ‰øLÇ tQÁÙ$Ë—/ErØ÷äJ»‚îè7ïa|ü‹Ø°EÅxY.FŒWdáÌÿš7ß Ì™pÐÐC‘Mjzé@§PB1!ÕêÁRE ÜUb* |(hœBõµE ê¾–€…¯ÄS®¾šÈý¹òJņ§S)QúçìÚW×k»ß’Þ¿7¦\]ãôË©«ßîþ½]ìðkŠ®OÚ(êÓMŸÆtRÊ4¸f•Y‚.åL…O!ÈóJV3ü0Ð&¨ ÐTô’• @äÉÏV’F’¡äRd$f„ÞŠ)²8Œ8™èyzU&^K/ªÈ^‰’µ8Þ>#‘EæˆÓPÀI1ÁÔ¨2ÁQR%>àsF¼üÂå\®Ó Bö‰VÚii¦ÆßC)HeB• QÀÙœ‘œa¶Ðuê¹'ŸGf—gŸ ZÐ¥DÄLh)Ð*¬2B–‘NàFø¨L¥•n©F™£Ù‡f~Jí·ZCžLeÕ5ƒªº*«­ºú*¬¯N@Ž<‹ÆôÆ ™9¨j2Å©± ;,±Å{,²zîT¯¡Žš,´ÑJ;-µÕ»¬Pͪù¬µÝzû-¸áŠÛ¶>;aolserver4-4.5.1/docs/intro/tcl2k/html/img007.gif0000644000175000017500000002505207363640502021200 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyÝ’ ì—°IÂ+^ÌØ"ܦ´äŽÕi·%âËx-F 8óDÎø6{îÜ7ôhТK_D=º0ß¾ ]7ŒívãÛ¸s}¼T2Ý„•Sþ•8|öëâ®gVÞÚ4óÚÍIf^ÚvDêÍ;7®\6tíÜÁëÿO¾¼HÞ4}O.k¾½û÷ðã/F_Sìïº<åëßÏ¿¿–ô…eÓdÀå÷ß&¨àFfßzÁ-(á„V˜XƒêÑÅžYÑ}]‡jxÒkšÁ¦qÈqxâ]+¶W‹>‰X¢e0"ˆáƒFˆRwµæ™ˆ?¶˜"v¦¡XdxÚÉhœs5^Gât.B'å‘P"ù$“§©æcu'b—]“E¹ä˜df&•dR¹ås.×¥‰Ï}ùâltI¤œ6B¦§ƒÞ·¡…€î§d „RucŸŸ™#‚YÒ !Aš ¤Œ]ùQ‡’Rª’ŒœIäJ‡Þ”èYâá)'£œ^¹ešc®jd”Ÿc™eœ&:‰¦šZæŠå“®ÞJZw½.Ù+£b««”Ÿ»Z­g*‰)—Åæêè®S¶úfEf> T¨Pù©cˆ5jZè²ã–knIÜÞWà¹ì¶ëK ~ðÖkï½Êë­¢øöëï¿åÿé;*Àlð…{B–¡TßìðÃ#%pŽü6j]•ÜU‹±¸FËjÑB;§Æ@vÉj³×¦ cj+ûÝ«µ©ìfÊoWæ±yZm°gÂ<£Ï¡õȬ¯Sjë—ÌpzŒ´Í&MÌpÅTdz“n&‡æ_Ä’¸&ÍD'§£–bÉ$®}YrØXK«—Ù¶…Mm×A£,æØÎ–=ôÕvoœâÛV¢ØéÊ€{Mu’{—ºòtÉ‹‘Ód5ñãGŽã”AuÒ2]óÍJ# XÎᚪeÆ'c‹9ÞsÛÊù˲â̲Ò úÇ)¬Î=K^åër²ÆáŸ·‡·J½÷¯p¨6É`ÿ¦¹Õ© ¯uíÐ"·µíÇ—»ßÖ)?5ܺÅ;½á—oþùÿçxÏ¢º6f¢ÙðmZ»9Êl« òÌú y¬ªñQÖªf%6%î}œVëN76¯Ýíw ›ßJwN‰–kŒ²øçÀFoE¬!—G-O骄œ^ªSµ™i‘põ# ÇV÷Cd%°U4Öõº˜='¾Eƒéá`ã¢X)ñ´.dÛ“c×fÅB9.Ï‹sóbèÒ¨ˆ¸Bö/dcdî|–¿¾ÉÎRá7™¶‹Ùqqx¬¢(öÉRšÒ`Pô ÿŒ”)Ú ‡û«ä¯8¸Zq€Ä£ß,OÉˤR•¬_3IL*òok1$ä"IAÕEЕŠë¥4C™ÇQvpšØÌf ~iž7Ò%³"ÓhÙÂAÓZ+$#­÷Å-V±–[L'³bsÎr±M@´ßÙYGm&…›Àœ¡.‘KÖmŸÈC$Ù2&Ð!åMg›ÞgUË\2vˆüÝ Mú  ©HåÿÒn 3Ÿ±D¦=ÅùLwZ u»¼ .ox:X&P™n,ç¯Ò‰N™ŽtA%Õ ˜»o¢îˆÌ{)Ýäɽ{Ò”uõ„áRÅéGªýü)‚ªÕ®zaôYØãÆ+úñŒ¤3d9§Î{¾0«_kÓ¨É'Q‘²=HÝÙF;—QžÂ´g=™àô <¹6}tkåËØÆj…«Ž¬dÙÉZö²s «‹ÙÎz]‰Ýlï>KÚÒn¤²¦MmjQ«ÚÖz–µ®­‰á=4¤ A„CqÚÐZs¬> ‚"²‹\Á!% JÐæÊö¹²Ã.00€µÉsK°Ü«¼‚}š[aÌ®7••÷j… —GÖ6Þ:®½«ù yåûI‚ÂG3ìØ>ä&0L€ä.w"]àn 2…”ÀøXbk8d %:ð‚8$ ذ Gø«ZwÄÄ¥œ&vÁ#0açÀ‡ V1VLËÀÇ)‡4àC Á8>|܆5°!^¾µë5¡ËäËú·ÉPþé“£LeN¹ÊX–ÿ敳ÌåRny½¸3(âÄ ÏüEr©oêŸûÌ"^~nŽs—#öe¡™sM/Šèœç1ùDö¥'ŸÇ©Ô¶ÚÅsfWÍhÝ-ºÑ¦s’»5°H[ú“¾´¦ÿ•éM{Ú^îÉ ýw·šÚ~xš¥@õÚ=·ÅÑ…:4œ ߌ™¢éo§v);•¬x–±ÖA|§°cŠÅD⌓.MP¨WbCBÏïs°2ç S3ìwÚÞ¡¤xõ‰1_ýù¯Ï.,¹fl¾â2ÚEìÉò¹×y›i­ÖóºÿÊ I«‹|ŸÎwä–½)´%{¥l(&Ù”Kp‚ÍßáÆ[ÂwíÐ:´ÖãfYÙwn}îߌ|øª".hXÊÍ™c8¹zÆ;³¥«¤¬½çµ>«àùy0=7^nX–tð–6™?t¿Þî:wÙÈŽ6µ¿%õèaÐmNC˜[»Ü„e)ÈÃæVKä-á·¾·N(­sýëI\ù¾ÀNv‚y½ìh÷ÏÙÓÎv’нÒ[é(˜‡ŽAf#úgäbìñ—íâÝy}Ϲ~Ö>X¡A}‚¶þxÔOug˜ó°ñ¦S§˜Zjº/°â‰±&±.uŸ—úl˜ß^Ýq~õtº•´"µÅ½0­qô!ÿ!|—;zVÅÔ~벯 íÿn¹‹¤õà;ñ…?rÀƒp¯²ctîÿ@uwNô™Ïsû`?ÔÀÝœôž—^Ó¡?æç2×üU8ñ^}(/¿íèÏùñµêíß—÷N|úH|ßm؇]³¿å¬I_lnŸ0ñFóG %}˜·Q•S7§t^ÂnPäd€ò4pÉ÷xØyÍ·V$h ¨‘×€²~邌‚·AD!&¨{ð‡{owWû‡ntGul¡D£RÜ–LFó=Ùrlå|FUz¶â€Š”CÞ¦fìfƒ$Q$÷U$(‚PØOø&˜‚QèQS˜È'€î÷S$ƒèä%D~7ƒ¸V„W8x-¸di؆õ†J\þBm†Ç|q·‚öW‡—‚BW˜…BñFIEPµ¢q uèÿ}\¸ˆ€X3„3FnƒhT¢§„4Øh~膚¸;k(‡ÿb…iІ×~z¸‰ Ò‰ú‡WÐÄg18uIØN5ص7‰R7S´byޏN`xˆG$ŠP˜‰¦ŒâƒŠ£(¾ˆ‹ÂxXÿÀÆ£E£‡K­hzÎԃΈOǘŒ ²ŒØ¸§‡”æ‚ÜŽ#HŒø&Žæ(ÚxŽêè鸎î˜íøŽòHñ8öøõx÷˜úˆv…p!ð€ð Z:Ð]ØPÜÅ]Á]fMð( –Î…Ý%`) ‘F`ýÈuà~pðЕ•¶\f:éÓ€ ©  &°àºP¡`“ø0Ë$‰MP’!` ©\&iwðå^á+D—Hé••&3:š4Òö^ÕV'eB<&måÅ^僇*ç÷Ör7‘309p’z{äH—{ù—ÝJŠUŒ€Y˜ÉƒYކ¹˜'ÁŒ¹Žù˜É™’Œ”Y™›ÿH‚põAB¨dØop‰™g‚·×64'(Þ#š Ö—Ktƒv1îF5lél8µs•m®Vfž$?Ù›½Izצš[±| Hf² œg²æg´æJÑq7k›œ)œÃÉš|)7xÀÙ6ÇIhhišm6_àÙg¥wfÁén’•åiVq™îù‹ØŸô9ðYŸèwŸøÉvú¹ŸhןþIv _7 Ê‚rÉr­y Œi  úiúùpçšäA)¤¸zÏI¡îÇŒÎw|E±{4b!Ä WüסŠ(Ëeù@´X6´DKeF{´æ×³J«—Øš§žÚ2SJª„ò²ƒ1-rÊOVú~Ò÷±ðŸ’ˆBaDˆÕC‹´$I’jK[@²¶yädpÃÆ¨ÕT§ö}‡¶ O%§·Ý÷Z·_ú¬¹ºLi¦€\3°V˜{Õ™w+©´ó¸ôŠ|à*µ'{ˆ|+¦/š±”ǶíS¸fK‰à²«t]Z¨žûŒ” uäJjžË+§Lгˆ9³+{9‡çŠÀš»':¹dJo@¢xÊJ3>‚®KS¦*$ŠWm€£­¶F­3s‚ë·g¬cÙ¸ëÆ@ÇZ½ó7Ó‡AÑzL›~)˜º¡hµå[0ÿIÛ´Ðu™ô¢¢Ê‡Ÿê±¼'¨òÚ Ô¹mEä+[ì;©ë­­ ¸yz{‡ƒxË·kå¸cI›Û1GlGú3hº…ÂFqô‹Yý‹«4¹FDpò»§ßÛ»wÊt«ç>g£b+¡êŠY´¦[Z‹ü¾.w$ÃF††sͶÜ)nd½ÅÛ¬íiÃKÇ¥‹§sÒÛˆ/ª†Ê¯ª•¾êí ŽOÜN<Å­UŸÛ{&&®¥«yõk{¯µÁ7¥j‡Ïk­Ú[¹‚Å¥ûkÔëÜ:Æj4©¨Ã¤ ¯Öj¦°¨ź­ùʃ÷+X–‹Ȭ¬{ªêZ(lì½°j†Ñç>GX´Ñ{°ƒ €{LA—Fz“4åÚ®‚8›†XÉ9x€Îz¼Ñj¡Î T2,æ‹•¨ê–ÕÊj¼Æ«lÅî¸È¶üY¸¬Á‹‡¾(Â*@Ú¯BÌb,Y»¼+—̈t ºÃ\0 ¨„Œ§©lœ®+@;“9EçƒaŒÇPzÁ]•Ì)¼Ì¤ÌÌUÎL\pܗÄlzKœˆHÓ­Ý—p Èмˆ h}NXË÷’®v$ËÂŒ‰þœËæ˜ÌmYÿ-sâ\]¼Â›ÐUÐ}„ÏòÇÄádч›rÜ|-ðêÈ m{É»½,|®êÜ͊çnjÒ¬*³ùG˜ÿ!Ð0}/}ÓŒ•Ó:mX9ÝÐ\«ÏJÆpŠÈ-+|Á<26 Å2‡©X¡ü ÒØ¶OÞü°JU¤û<)M­ÞôºQÉÎ,Õ?(ÖÆ¬Ð# ÆiZÕŸLÕÕ3¥SÐ{t[º÷ìHçÎ[¨ÎvÖ›zÖÐñËBë×=݆<]ØýÅl¨J?±ÔZ˜kÅlҥȳŠí‰/ø­(—Ï]nnmVuÊÚ=®ËüШFÃk͹ЙÌ@MÖùìyø<'­Í¢9hì¡–¼Ùì ׳|އý¥ˆi„ýÛòYÙO-Ü“܉MíØÆÝ?=OæÌÏÔH‰Ö Ñ ÑÍu»ÈÍs}}ÖÚ±íÀ×Ý^±ÝäýŸæ}ÞšÞê] ìÝÞÚÔ߸Øð†½]ßZöÞøíi÷½ß§Ôßþíeúà–àîD~àL”à ~> Þàåóàîh>á’%q ¡ ìXáÞX¶…x. !Î4éáÎXìp{P b@ßÐáÄMÓÁ]" éð¨‘éX@R"P` =Žê°]+Ž> pÓõ’ À 6ÿ.ßs¹D ‘Aî™#†>e#QV @@  )~ã4 M6™ Ü¥\]>õÀå%ð ká€áe=Sw^Ã[µ`™Ö˽äe–3‡–j²è Ü–ái>e- À ’ ×åÏé`¡)`Q¯€ ¡ &€ &°¦@ ¦€4àaÍ… Gî‘K` ¸^`AÀF<^b èðå–æeèŽ~mÂNèiº•Ä¡ì½:é½.évú8pI -ÆQ±0é@qcdCæ„ay•O.RH087$@0ªcÀ pïø0ø€gÐ Ààcf‰ dgà 1=»3çç®oÜ2/ Q» ¯i2³ ¿ _àÔ$ñ_ñ˜zñ?ñÙ©ñïð òx4ò_ò‰ñŸñ*i,ïÔáñ/Ÿo1?ß9Aó5Ïß/óAò;Ÿe7o:ô}-ò-ôF´=óQôKóMOô.õE;õ _õVÏôÿHïóP¯¤b[šÌ­‚Ÿi1[OW‘ô)Ï|UÚ½L…©yö*1ôY¯ôÚ9¶9Äy+±± …‡U%÷r›·ÁD§N÷÷ñõ ÙuÓÈÆgÀÍI›~e¼ÌøkiQ;ùA8ö5‹ø“¡ø;ršúûöâù~¬¦Êeožñ†œ;¬àžO oö“×ø¤ŸµeúÒ¹œ{†xœ»÷±j¿a®¾±³_Ìâgû®†ËÿúFúöÐß™iõmD4ýX[ùí]ü9¯õï—WALýË‚½¾_Q¯_þÒkýÒoP7œ¡Ã´ÚÿôÜ¿‡Ë{Õg;~—jâyÈ€Ôû…&C$hÿ¡Â… :48°aDŠ-^ĘQãFŽ=~RäH’%MžDÙ‘¾•-Y¾\YD¦L|EjÞ´)p¾))N´Ô!„A‰}(QhD¤?‹^\Êô¨Ó¤‘FUúèTª¹JÅêSìX²eÍžE›V­G—maÖœiS.Nƒ;{®Å›Wï^¾}ýþXðàŠn ÃIw®Nž„?†YòdÊ•-—<ì6î\Îu_ZôhÒ¥MWÎüv³â›Œïž†[ölÚµM§v¹ºsÎÆ¯mÿ\øpâ q¿ÔÍÚuqæÍ?‡~ùx̸¬yÛž]ûvîÝONGLs·gßÞÍŸGŸ¾8øä—«‡_þ|Ðì«O_ÿ~þýÓÿÚO ¿Þü#°@Ü@ñ”A„>Ç»î³/Ä0Cè&´Ž< ?1DÚ8;OD1ÅÉHdÐD_„1ƼXt¯AoÄ1G“h¤+?2ÈÂÞ:¬½m20¢4*ê)Œ–Íɼ¤üˆÊµ¬äË”´ôŽÇÅ” J°šb6.Q Ë)ˆž<3˪Òj³¬§¤lòÍ8ɺӫ7ÇÊ3:/[321×T“Ðùò¬3£>ÙœrÏ+“Ò’NGÕZ´Ì³*uîÏ ËãS‰T«I¯Š+2ç„”Ô¬°¬ó+=]¥j!'Q54Ö„®õ+\«BJ\K”ɦÈüÔÒbI½uXbÿW-èW`{ÕUUfYåµÚg[…•;M=4KÚŽf•Ñb %·L*i×ÜI¥J¤PÙ56QqÛ¥w\pám÷\¡µ6Þ~íµ3\|¸Vu Õ7ßu±]3aIÏÛÖÇN³öÔ…~µ¡]›u4Y†~m[.5j`tGNdiïõ×Voë…ê_‚[®U^cg¾VcdÎÙã‚áÕªá]†˜H£üÒÅn+M¸^t……æ­.¶ªãQyŽÙäT Æ—ZrYk=Ë…úæ§q~˜hš¹®™c„©þ,¦º™lO‹8ÐÁ–ÒÙÛ‰šÚ€w®zZ6_.xeŒKþøo1•6ã©HŽìt:oÜge»r‹w–òWåÎ|Iѵ5Z³ûZ´0I׃zļ•Ž=ö»koöÖqç½÷uçÔwᇗ0ÿuÕV¯‘vænwŒù²‰×+Øíœ÷ øèÎÉòK×E“{Ȩ |¿BßÊ;ÅÏžû}sú,ë¡C}ä'»2ú#ß'ó½o^ýfã¾ßEÞ'¨e‘,t[»V{V:h¥É€˜ ›ÅȾAíÌWЋū§5°} Làç2ø¸eMtÒsZÊ*ˆ±P¹ÊoˆZÝØV–Z{6ƒÈÉø6 í ‡^ëáØfæ°ÅåPl–óYׯ8v!hóáqv9·½s…£™xŵ%ÑMf+"Ê„¶Åÿ/7È;’òó@+6‚‹œ¥š¦½º‰,r4]?•6*ºñ€\Œ™ÊWEÿìl‡´ÖÆ …=ÆÍÑ{û# Á1Æ­eÄK û÷5¬=L‡dD¤!D9òojâ""'µµ>ΰr2Š*EÉE&Ò€De]™BZì]¸Ô¢GF´hr<¡©žhÁd’t–œ– ]()ÂåÌš½<Öý…ÂÀÁR)²¼f-±iGq…{fÅ ø/›Á1ޤX1¹cF n0 ôô)@3"IÛ]h~‰ÏîÓ ;ê'uĺàÔ¡N=!:QŠÊF¢ÅhFë“ÐðPˆ[iHQÃQ¤J"EiJ«GÒš4 *…iLÕrQ™ÖÔ¦ßaéB“÷Ò›öÔ§ÆÉé‚vÚПÕ¨C:NI7uT¦6©ÿýTêG:U£Ò”ªWU©U±ºUj•«_¥¨WÁ:ÖƒŠ•¬g%žYѺVÞ©•­ou[á:×Éu8¥ëeòY±Ù•RñìÔ¼‚YPw¶Jå£|öz’3µO‘Ì‚æaõõB?Õ£{Ìb¡9O8v~ˆõ,ô„ù© rKëc¢fã×φ–Š€a4'¨®ÉQp"04a ]Æ1Ç…Pšî¼í:›Um°œ…|¡nÇÜi*w†ç»l…ÈÈRò‚Ã…¢ÅÇÚªIWˆâülÛÄ[ɃµÑ•Œ$eý”XÝ/Zr°³üîϼXÈl®w—æ­ïfï ,÷º¼¿ä¬ ßKÞòŽ…»êLÔÓé¸Üã²—fžÔe+³_£Á†îÛ$ØÃÓ=«g„t£}lÝ Ú÷•ó*W ¼[=:Øež%eå_¸»é[å„]œßóÌ‘‘E/héK`?ψø-raO\aüŽ8¾Evò“ÂKêØÈD2£FKºçÒ8#6–“2õ‹ÁZ²ä”"ÊzKbk—¸5n™™«\2×6Mþ­ŠÅ¼Mé:ÖÏÒ£,“»Íj9®Í\[_5 lÙa6¯#)Ÿ—'£ZŠÌönI£iøIz>—~t¨5ÿjQ—B¤þž)-–U«×V¬Þ/mΉVTëOÒ™öt`•kî¾Ïëd;LszÅg­õ&{=šVYŠŒõ·:¦N)Ï—˜tMv÷bk¸)Êx¶Ü–œš[Üaƒðe§6³Gtc*Ê{œdÝ\åžfÚà•ZšÃ¨ÇY_Y¾ α´ñØïj±¾`K›µÜÞZ’‹YøUím’>{‰îæ¬Ñ ñ|;{ÃY-š{Î1>ÖÕ»^'ŠuœÊ¯N¼$§w(Õ–á'ÞV6ÌÇ»òxŠ7¬ù¬œåÈÝÚTu9It®@pɹÍpÞ¸#÷Üe‡K¶$}ÙHèÿÃÑy²ˆ¾z¡§^t™&ÝÔg/^R[ºT´·ýFfw{ÜÍw¹×];t·{Þ3ÅèñTï7Þ÷Â鿆¯çCïu³bùy÷ÞþÆq ]}Ëþ>z¶ç¯é}Øì,ÒvêìÕÎïˆSYåŸæ;C‰É$wÊ¥ÌU%çôú#]Ë,\o¢\ÿsqÒJ^\&jhD‹³’tãfáûõû7[­Êܤ¼„ÓÕµKÕ~çeëÙ9õO7¿G/•9gÄ{-¸ü%öùgÌò!¯ðÚ©ÝÚùE®¦k¼øÐGyÓôcùFÁ.–‘d¬«½Uj'q ±ô£?[ XÒ Súº4Ƴ8ó2’?Ó=ÿq>D3=¾Ú¼ôÿà?¼h:Ó*°û${A'k¬**@)§Œ½‚Ó¾Ë1¾ÞÓ¥áû˜þº¿à#¯V‰ Û½AÁ”ÁÜ<&ÓP<%+ª%¬Á¢Q;J#¿k'¤8^›+tVÓÂÑ@BÀC‹J½¡ Ã2 ¼1œB¢2Ã5A4(5dÃ8ìŽ/ì¬iâ¼'d¸Ó"»Ñ ³ ëBÑ»>›¢C´ð¼<ÔCXë?^ô¢d BÇ3(H\+bÆ<@]ÔD^´ºù4<‹¯fTÅö;A+™ 18éÃ7T@”KÅ®ŠE¶„“@¡±FöŠl¥ÙKFqä½!ÚÀo’ÇLܾ¨XÁ€ƒÀN4zLAäÄ%ª(i,Ž?ä‰d¹‚È߀F!¡ÈŠ„«‹”Ã É‘ì ‘$ɓ̤w´>”dIæ0IXK´B<=²ÛHÃkÉýÿSIG« :/¦‰¾™¼IzIm“²›{¸&¹Fº¡-P¹F͹bCE€Åï+¾ œ¡,679Gð ¸Ía0 óM”œ}LÊù:¿c³ÊÛÈI½¹«ÒãJIlÊu@…AKb«á›;KK¼YË“’5}sH?Ô>WŒ%QœÁY?ÄüºÜcȪÜËÓÀJlÄÇܪȔ̚¤LŒ²ÌÌäL~ŠB¡JÃÎM/ìK*ÍÓ$ŒÍDÍÎTÍ—ë·+œË;tÍ0yJ›$ÊÏ+Ì|ÄÒœE3½>ÜÃ÷“Í̪MŽœM>Ü5lMÛ{¤.ÛËÇ(¥¦ÜDØHPlÅ•‹Ë$³@Hù&Ù[Åpš„·JÔ<²RÍz¿e´%äËŠËËú‹ÀaL²œËô K»KŽC@ú¤JþÔMXüÌËbË¿Ä9¹ì¸›“É蓱‘¹5PpÌAròá…KçôÏÉ,ªå4¼øë$±œ.<$p¹ÙCÅÏôÅ{L>WŒÊKòN_|=9èO ý)‘ÿ¤Ý'ÅŒ !5OÞ\Í#ÿ EÒ›TÒ%eÉ&uÒ“„Òð*¼çà=<ÇáŒÒ/3Òå©KäÄŠ4î4Î-õLê“Â7¬BÚkÈUÁïO%zÆzÌN."Æ)»Ó,eÊpDÑO,Áê,Ͻ]Ô‹.þÀ…“'òËÆq;m¾ä“¥;=ÈÿSÌèc®Ú3Ì7Ë&\uRWED3¥µL=EÖ×1Öf5Ãg…Ö0”Öi¼jµV½ÃVÄ3ÄHÌÖ¶RÖ¶ôIÉüVp ÐFPÛNÕU!Ì@Æ Âã«-Õa5±r»p¥ ôŒÐ å¹ýÔ?Ó3Ôú F{ÝŽmUDz,΀5Jƒì¢yLP‚E{sí»Þ< RP8%Ñ[ÝÓ`ÀþLH­ÃQˆMM|Ù’åR‰U=“UÙ#Ù•uYŽR(ÐTÓ—¥Yƒ0ØšíÈ–ÅY‘½Ù]«žõYdÓÙ -W %Z°2ڣ媤UZ¬bÚ¦Eº¡…Úf}Ú©mªªµÚ£ÂÚ¬ÝP©åÚbõÚ¯EÿÒ­Û›"Û²ÝM”%C´…Ö³e[˜rÛ·M©¸•[‘¢ÛºuGµ M¼Ò»å[Í Û¿}L¿܉"ÜÂ…‘x0o0ʼnÃE\i@’€ÜÈpnÀ‡O€ €ƒ`„¸\ÌÅw ˆ<À‡D€H€vÀ‡> ˆpP‰À5ÝG»ƒbÀ‡ae€[ƒlÀ‡E0Òµ]’˜‡Ûí){x‡m0†GP„C„=؃ €0BPGˆ„dè†Ðå³¢†@¨0 ‹ .¨((À‡PÞŒâ„=ÐëK°ÜÀ¥‚0à0u0ˆ0o0`ù(00‡T0t¨ß |¨_ƒ_ýÝ_Šr€ðƒê%0È ‰‹š‡ 0ž`Šháˆh(iÈY ˆû5ˆÈ‚n`>`ka‡J˜„9ˆ € €Ipÿ­‹òô …xE?åT<í ¿CÑ­ß´ŠXãW£=Òzã¹É¥¤ã)7“¸pƒ<¦1šÒ…Z€Xˆa6`QØ´8^WXM±:FLýGÐÃDXmäOÒú­ðÓ8–c]±ãµ8y(„ÒÛ™½ˆ-F_g0``ajè,S˜…jXP¸|˜EƇgÐ-PÐ* ”6VJ^QæÄÓíÑfÖd9cgÆd¨˜fHöÎlVf:ŽÑP‹’à->䊰ᾈ]aÀ S@ýmuÐ߀…üýSpý5v¾ÿOöSföfj†@h>iž‚Μ:~fÿ»fmèˆîæm>è Y÷9^|p‚*€‚/ 6`¨+](ôŇ,yxù0ˆ%0ô¥R_ð„)x˜”R|aœ³3–ä¥dƒþMg‚Ïj†PÓ©0kFJŒN‰'˜ `H‚#˜€  U˜€k øj|˜|8ƒ4à…_Xë3Xëuè…3M¨ÒÉ‹HUâ þgàð¬ŒÆ¨×d,Œš€Rˆ&0&HkX… X…@ëÈž7H|Pƒ`¨ìÊVk5 kã±ët­O@_¾†%ƪ yXlxƒ3ÀˆÒ5íÚíØvÖ¦íh娀;aolserver4-4.5.1/docs/intro/tcl2k/html/img008.gif0000644000175000017500000002431407363640502021201 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyݦ ì‘°àÈ+& ·)-¹cuÚmi_åÊ cŒwâfÍ#‚îk9´_Ó¥IoÜœº"ëŰcËVÜx)dº '~ý×!ßߪ}ï=uqÓ¯ò>~:xÆäÅ…;ŸM½ºu®µiÞŽ\öº÷ïàËÿOœ½¦XÜuyŽ_Ͼ½û÷,ˇµ9·zøøóëß_þãóÜéÆß€hàaþmGWwZ¡&Üxø›EZ7á^Ó)×Ûƒ‡U(^‚.( Jí6]g†¦¢rj]‹È1ç¡kÁ§×qÚxZ‹œ¥æÜŒ<ò¸¡‹%–¶#‡FÒø×H‡@¦HI ™¡‘Pb†c•Æø"•:r¶drhHz x•j¢Åf›p¶dæMÞ§Ö›BáIÙ•ké ŽQ^é§UƒÆÙÕœP¡9bVÀ¹¢eA:9哲頊€~©ÚŒ16Çg–¢Qz¤£5ö…é“›2Gaª¶Êe§Ò•;x餙]øª©?ŠÚ¤¡T!Šž}’É«‰ÃbÈg±íùZ_zÈ6ëì³Ð6¤¬¢vFkíµØ¾7mÙvëí·Þÿm+bµà–kî¹f‰+Õ¢è¶ëî»D©K»&ÙÚѬ~íz$h»Úˆë¾`þ;j˜ü¶z©±H†Ée­ڤ·6ɾúöX%§´Zì[¤„]–ñ­”jÃb&œjÈìÉ+¹Œžè±«ÛÚh¬»Œb¥7‹ÉjÅÚËp¿Ÿ1ÙÜÅ;sɳ +Î4zvr…™J¹!”NçòªR©˜&ëØ×ÿÉ-¼d—möJ*Ë•—Ò™\)ÑC·æ¢ÉC¼ðÈ ;\óÇÿl÷«VŽ1Ç]Ÿm¸Gi3»öǃs­·ã-)ážâªõ„IKîo ”ë¹®4gþøá¤[”x𥧮:é§îÓ;ÛÔ(Wî)Œç¤Ór×^ªÒK[ÎøêÀ»Õ:˰e=ä˜47î3׸“š|Û–vüwðÔ«5|õØgÿíõÞ)œóñVcùûÝp?/þŽzIëÔKÿ òÎB‡p§¼kï-÷×I;ÀßçjìÌ Á£>£1Îx®©UÁâ'½Ê=M`[³ßöÀæ­‹xÌ „¿üñ gcÊ\ï.ľÛáMg§Z褤¤΀ûÛ  %ÒÁïøonà“]褴åh‰‡ã Tµq†HtH “ÈÄ&~g‰NŒ¢Å)ZñŠÖ£ mBtA,zñ‹eÒÿ¢v¸8/ V¥~}’R Å66Hd+qcÝw9žq|±©b½Ð¨À"Å ‚]*ÅNØ3ÍáqŽm+¤ÆÎ77º9²‘1T$ÖðôÂò!2o àI>BvTs•óšIKÒŽgÑ#ø.VºÅ•áåYì˜Uò‡–œü.ƒ²Ë´ ’%?Œ$£w”^ò,—k±åKÕ9’i2”-Ì‘!1¹Kvh×¼[%'¸ ~WÓÈ/oöÍM&²jî#&úþØ@:f“y,¬É IOL qb4ØÆÕc F–ÀD%Jeô O>çC'~&ô¡í‰A#JÑŠfd¢ͨFð‚Ñz´¢ý¨HÒ‘š´tÄpÈR†† Â!ÈØHI=-Dd!¸‚CJ” !?=©P d‡;\``‰-y*‚Ÿ–À§%xu6Å¢af&€Ã*àà$¨Â`•ªZÍׯžãÑìEu`¦0ÆÑ F$¤ç0 D`|ðÔ§éÂSSà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀeÚ8ÔNVŠÀÄ.˜`&Làø°Á*&Њ àcø0-à|¨!gÀGkÛ°6Ðp¡akh+Ëۇδ·ÀÝàoƒK\í ·¸È ÿÞq“ËÜÒ-÷9§*™’ÎY5{½zLš¥æ#è J÷l® Ÿ‹5 Ó¼Ô­cvEæC¹•a÷‚šÅ{EòÒ÷¾í²/~÷ .ýò÷¿Øò/€ü,øÀÃ2ðé˜Ãj¶ok›ËØ›d²ÝqÎjY3¢ï&fÈŽ&»óì£èÖ9bÏ9û.©l–MŸÉÌw‹´. ™b ·,c?ÃÉÎó¦è¼Ú$Æb<ã°:x”B²XÀÉÌ +ot„»‘Æž)VÛ½óMS²v?©e³Ê·ÉU>–÷NVþDÁN³šÐLVVÒ›ÓSŸŠ•æâ¢1…@üÔI c«‘„\)­gwÌ®ÁîÅC„9uWgñ1{l‰¿¢,ÌISÌD6'èÆ ±)§uŽV–›9ºM;9Ë+4 ÷ã—5Ó½c®§™Ýi5Ûz?µ¾µ®µ…c2®l×À¾_¯÷¹Û`;Z¹>¶²«“ì‘è —³†®_çÖÿI÷ÒÕî¦ãTkAK[Õ0+'¸ëé^y’›‘ÖŒ°(Í}îL“ÚÔ£~¶?)£/«ÄëŽä‰Õånù˜×ÿiv,½ºh/%'T¶÷$Î…·L—?xË“ã_/îÈ–Œ!ç¼o$—{›ÛD·6y÷æC–›ï”8[Îˈ«üåÒ¶nul­B<߇yež¨±ÙÐô‘N=»Ü›Püâ/:ó~òƒü¥Æ÷úßßÝ KÊ;DáªßÎòóà+W}wz˜.ÿ¸zoô6'n¦Ä€óWUè%jßôD&£Aiå–qlsNÓÓ0@¯ÇI¸b<³dê¥^ 82}2É·Iû'IÃ÷|°a)Qz“äj&fVDvD3CpÉW@æ§~óÃ@°ãIL2N¶Bæa˜~@(ƒÿsvaL¸7_öaÌG„˜&ðdaîö€'aƒ8†u€\G†hXb˜†l¸†lˆ†nø†c‡rH€tX‡¦w‡x¨f…p!ð€ð aK:UØPOõTñTreMð( r•A…P5Wœ( ‘uUW{H`à~pðŽÐª”såSue¸èÓ€ ©  &°àºP¡@‹ø0>¢ˆM0Š!` žØS¤GS¢ƒ`?ù¢9qrbµ1ŸöUF&eWµx1¡|ßx.÷,áˆfXw‘309PŠøxz˜•·üyþøwwYPwÉt ¹0ÿ'p¦?×!Q^­çàÑl²!9‘ ÉÆC MX#é5…@v>öh%ù^)’"®Óf€’^&9„¦*}#$c ÇazÖŽ2I4iF!Ñ^8™ˆ^³”&dçø‘P©%PY”r”X¹•o¥•\ù•¸ÅP=‡y`‰• Y–ºv–hikj¹–iÖ–ny`p—6—tù_vy—ûòe!Û¶cD!o³ÔŽö·eLF”Å„˜‚Ñm.¹]áóHýG|¸^m´;0Ø“²7™3öoþFƒ,øƒÓ§‚(™™Ÿie&øj̓"ç‚”†ƒµg9Ó•nðÖŒI•}Oxbh¨v8w‚‰{³‡›ëwšö$tùH©nÇ×qȤ/ªyb”i^:™…¢É~b6þF•½â•[Ñ—æƒq½£ƒÞAÓÉNyœßyx(f@üJØ}x¦&BîgDžwÊù“6ž\&b¡Ù‚ÜçƒY—zÄf}zÙpÿ˜—J_vÉw•ùp¯G½$˜’¦˜…a¡I¤–‰§€û&}êxmÃ…$yIAhd[%)¸¹“Ið†|Êw¢ê0Hø‚ï¥tÈ)|)W=þÈvT¥›¥tt6æN!'›p—qõ‰Hn‡ž3¤¨‰ ãæ7ÈœØ|ÜdvÖiÜÙø†„öù}>¸hþé@à™‹v†qr¶}ˆ–¦Ág3óv™ùéfò—aFŸMšA J"j(Jm \yº Ì¨‚Š\„Z¨Äu¨ˆ ¨Yº¨{¨¨ŽZY©B5©”jR–z©"µ£7Ù›Wª¥*ѧ?!ª»…U'¤Jzqö9n`*) ÄŸ…´héã…~Ö{QÉ0Z¸] ¦BÅ×`Ë™%kÚ¦$˜“Õ5Ÿü³…E˜£ÚW«Ý¤ì†w:sªå›$ªbOæ˜<È™=ØdIjÏŠ«Uz™½zdÝzœ÷…O­6JhúYdj‡*ÚoWo^3­cÙy€ÙM®ê€AÆ£;x|÷Z¤XҜۊœéd~ä„mø#Bú¦ä ›-)žåZUö¦iôF{¿C¥à¸§—O‡€ß¢í’ª\²Åÿ’©šêQ| ²(Ëp-W¡9ײµªWqJ)Äg@ó2;©a· «ï÷vð*>”šÖGpÚžÈ €\ù²hÚ±ºyñ†¯ [tKê?¿ê›+kR «&+“Pûj¹WjdD ‹ƒDe舟4šUìÆ’3|1+z,[·6k8,›·µ·|KQ~‹°’m*K®ƒv¸kËMß·šC—}¢¤‘tex„·‰«D8KmV*r`Ç*ú®ƒ'x×Y1–{¹a™[ûj ìQºEÁ“¦²µ1²gøº£·¸´ FÛµeu£ë´g…­WjsPx ¹+§-8¹Ž ¢R¶¢K9Šç‚ì5V(Zv=0œ¡[”ÅÛeÏ{v/™…ÁÙ¼»¹ôƶkœ[¶;ª…{»”¹îKyë¿Vÿ”½í–”ÿyŽäʤΖ¿ô†ð+Þ8¹„G½Sj°ãb«iœãeZ»¬»ëL›s¿2*P?tž»xeun;rÿ{³úºuòØþ·5ÂtW“*ütóûÂLÃ2ŒD4\ÃãÀ8ü:¼Ã*wÃ>,A@ÄÆÕÃwä— §)¼»þy­ÌʪOL›F¼LÎ D­J;W8„ÜÚÀî7¤ tÉŠ/‡B‰Ö´Gše¯zbgL«X<…rÆŸ† ¯:iÆi¬CòäJ’û©ÈÂzÇzê{[½ J^ëD{ƒ›¹Áp¬»“µ¨"¼€ ¶é j`,É-J¬n{¸ç„ „9n´zÁÜ«ª| xZÈ7ú¶8HHAè¥-†|rû£.걓æš f1ªÀ+Ë®ü—±ƒ™÷iš÷‡Ë¹ ¹,Òc¶µ4Å«´ÄérŒÌŠÍC!ÍW1ÄDŒ=Ö\¤þ4¾/:˜ÔÜ¢êm´zgí ¼6Y³°«E²[ÂTQǪ¦ÁZb¹*È3Ê/ZhÀ< ­w hYk´}¦~m|ÅóÌ«iŒÇI‹NðÕÍ¢Y§ú<ÏN|xöj…\ÈÅu †%ÿ1¶KktàëȪ|Û{Ê–¼ÌDµ7O\Ú³!úoë*‚IX¢»IÇóyÉáyÏY¾¼,0]rí÷Dz¨Ì9ÈK®**œ´,Ìœ‰® ‘|¶˜¶ ¸ÔF¨È«ÍkLŸÊ¶ô®ÏÃí¡²ÇÕe+¸Ñûñ͘|ÍåÓj–lÝÖlùÖpý–r=×rY×v]—x×x¹×|½—~ý×÷•Í‚}6„]Øes؈ /Š½Ø´ØŽm¨Ù`$q ¡ ¨'²ª7»”=R+…x. ¡Í==ÊdùÙ&Åw°uð tð ›»ÍÎñT" éð¨$ðˆ›èX@R"`W ¿êàT¬}6 pFÕŠ À ·ÿ­Î¹í:’èˆÃ½ÕVÎ|ºâíD•™ðd`К Úœ] Õ*M´˜ OÕSß=õàÝ%ð }¢¿û)½©Æ\eàeÖ¶æ8Ž&ºà¦20^ö¡áúë.ïˆòÌ ò T:ìˆ%Jàˆsñ ¸Ðº`Ø`;` ¤` ø@TØÜœ¸¦ÐãvÀd±[eÞàpÛ&\䟆’ÙØÁCþUÈQᾎßX6ÎÔÀYLà5 #¦å°%[¦ÃÖŠõˆÕÝ„€IpI@0#  Ÿ5¬0|Ž#€hp½ ­e±u¾°ÂóM­$Ëæ†(ËÒºí能P-é.Léâ%—îÙšÎ_œNßéHùéÉêŒî“nê§n颮ê™ÎêÅ…ê©{¤.ëFë[wë¸ꮞê¼Þëø¥ë‘îéÂÞêÙÑé«~ì¼EìèìÌÞ\ÎÐíÈ.FÊëÖ~RÓNÕîQhÝÿÝßns,”&\‘…¹í1î9Qî»Ar\£î¶áÎÚînëÆ®§t†1.…Ÿì”i'ÏqÓz”ì^†Éþêð¾&8Jï•&D¤¢ÐÉ”“5Ð9Hñ /ÂØÎðûλÿ~ðß½=´”r{òW›Ý ñ Ÿï£ò69òó³ò½®èž™®k²9Ðï¿^ë1¿ì‡ó5ïò=Á\;m”óN¾?s ì2¿gêË Þ [^ÇÚòRÙô ÄòQ/õOõD_ÁœžæÑVìÖ&ПY™Rè6cïñ‘í¥Žöb/´M >>´öÇ+ø@;øÖó°ž÷uß·=A¿ëU¿ø…ø ù.ÛøÅ~ö”Q’ÿø™¸–ÿìœßùšÿùÔú¢OR¤ïí¦úµù˜ÏúåúÚûÿ%ûŠOû¸›úä¾ú¸ïE¶ßûõûÀŸQÂ?ü ¥ûïÎûÆ/EÅ¿ü£?õBŸøÎïùÐïø¯o6̼8ÄùsÙÄ3Yý—?ûyNSõ—PÜrŒWÞ4kõ(È´#x'êàú×Ͼ§ÍæªÓŒÁñ?¸Oà@‚ à Á„ :d¨Ä…-^Ę‘ E=~i‘¾‘%IžYD¥J|EZ¾t)p¾™!;6Éq Ć=%rúÓ'E¢'Ú3#Ò£>w2]ÈtèÓ©§B}hô(U¥MzuôiE¬e¡"5*µjÖµk#ZU¡ÎUÑZUZ”kW°Z÷ê4ÿûÕæ`Â( ›L¹Òåb˜gÖ,,WðR´aýnÅÜ•çåÍqéZÎéWìçËpãš&ù­E±ªë®nmÚõEÐrÙrž[zvÖÕ»y{Ö½•®ì×¼§ ;8ñác›G†Þñᓊ_wL3úA¬”¹çVŽP|æÊΑß}NV´VËw¿G/NâïOÛ-ï:ös÷nWÏ>Û~ó­.üÔ+°¯ù®’¯¨þ–Ó½³&ۮ…¦Ã°%ÅcL&í,d+´÷RÃk£‰NSOB?:îµôz‹°>ß:cMÅ—‹MµæZìí¿àvÄQ>áξÍ[1DaPÇõš1Jê2´ŽÃ—<„L›ÊÁ†ÛÌ¿ $쎾¿p"Q22mÌÆý&Ì-5këÁÛÄR­ÉdN¾ÞÜ“?Ò’ŠÓN¾ÊãÒǯ^\SP1µŒ2ÃéªÄ.&í²d´RK¡ƒðRM7å4ÉN?5TQ5uÔ0H­ÄrTU9=rUW_½)SXg¥µVFK5éTìRµµW_6Xa‡%¶R\«Û0Òì(-¶YgŸ…6Zi§%ìÿØÄV²RÒÇœm•UY©½´ÛPÅ·\s ³VCl•åµXrÃý–Q½¸•õ]>»c’HO;Íñ\#KWׯÚ%ÖÞJ –7ÞY[E8ß}Cj8²ˆÿ¥øÂ)MMÕI{5‹94ã¼ÏÍ1Á<4°=•s ß,9å6;^¹½¼T†f#çA]~Ùd=O®øÜ€3Þucai$éðâÓˆÇ?…쾨ޭ6—¤1µ¨œzH¦CÖW¸'½»Hãl Úß¡×Õx[[åDm<–wŽh¬ðÀ%¥^Ïn ßÊq^³¬›fôójÑ{6÷b¬:@²ÓŽvm–Ø5šV§Á4¹Ã¥zèóGGÜó‡ÿ>›HÁ¿N|ï¦Ñ¦š<¾Ã¾E!×vÊÁµ\Ym?Ôî©™ó1S¼“ñ i—-ï:wÖ[ñ¾'”g‘™´yéæ­oùå{éô™¾®w‡¶÷l—%ß»ôUxý‡Ý‡;ó1w;þÃí÷ÿ-¯×¿ÿæoðü7@Ѐ`Ñêw@6ЬU–9VЂÄ …$Ø! fЃa²Á+uP„'Da HÂß1K…/„a x±\m‚ ”au¸Ãf±}<b…8+lˆGDbµTD*щO„¢thÿˆ,¶)P€QÄbµ8ÅVñ†WÜbÅ(D&âpŒgD# ËÆ4¶Ñ\£ ß8G:20ŽuÄc xG=öÑðãã9ÈK`4#!¹Hg²\ícd$=Éô9VΫÑûbw°ÆUˆ’¯ÓÒ'A)1ÐMïvi;¥-ù¶xµO”“T˜»b ,Hž¬PÌóW*+¸J •–sZÝo—‰¯{ÆtÙÈbF¼ù)yø¡ôÂÔÌÀ'šÓ3%3·—¤B|3 4}ùqžé™Þ¬$Õu¹ÊSüÃÈøZ·¦°Yík™t\rRç:$òžfóÔêôrÊÖ”IuBj’ÒdÐ×½)t^¹cÔ:©P±Å—Ñ1\ë#ºâ@4©32jS%ªÍ²m³¥RU=u“Ršnô¦øTÙÞÅÕÏu“»èÂúF·%Êœ5u(žÎ¤LÈÙ&£u}ÿ²÷P| ³›oµ[S"BMC.fì÷ì™Ô¼&3œ9õ©!mˆH6¾ð•)¼, g)ô~ð®P̬C‹ÁÎJÒ´§UÿUiQ»ZÖ^JµçmÛÖÚñ§“ jeWuYÚêÔŸ“ÑÄf»ÙÚŠðµæêí/ ­á‰ÇýÔÜd&]¤5–{8E&ôrö³¹v™ßk«›–W×lz¸Î… tùe:i>‰¢ýØW«^Ê©m/}ç+»û¡7„êÍŸôœ´OÃVó°ö ¦Lùë"ØÁ¾ü|ðR ›\ÿ À›òèì<9—NÃqäÈÛß Æj…sxaMeø±p*ž€©‹`ìæ²åuëI#ü]ê*6Æ R±YLKâÙÈò¯(|d&ÿ+ÉM†òiŸe*/rÊUÆò¯œe.ãqËÁâí,`‹¼?ª‚µË~ü²’Oj“±Ž™Íâš›ÏÅ4ûê'ÄÓQŠO¾‘š8±Æ¼§Ÿa*79Ïù‰uNØgù›cÉÙ®Ñ_jÝ€GãÕãÒÐnDtð6ÜO’"´¢”é*Ø&mi“øÒoÿÌô‚b5wì©tU³fº5ãõ¼§cªÁ\h\÷zTº&²¯…ý,`ÛØœ½­)ëÎc7{‹Åvv´ÿ›lvZ‘ÙÒÆv¡=ªi¶ø¥Y5sÃêÕI(©oeÙN§d•ÛkK«¤¡äµJ1ú-A“ºÌ;A÷î¶-ª óùDæQÑ-›ØÓ˜§ñaï}e}ÔÚìçÓúõw¾‰µïwÞ•¥+u,§™gµ‚>Ú¬ï×5;íèùèYãà<9¯%N*jûî‡ݨ5>¼˜vØà1’¹Xwôo¯õɬ#ßgYW>ñ–ŸÏˆ°Å8ÎÏ#bÒ…5Ð’ôà>Þ¸:}èw1PF4$&Ÿ¨(¬`S4¡“1Ç»9¥*·+µ™K¾Û©7c¼Åz¯FS.zj(OôBJ¾[Ó¥ž‹>ûªÄR¾Z¼`aDx2¶:¸ [EÔq=Œcf)¥ó±üò±Í1DpÅÅ”)Â9EìÙªf©]|±Œÿ3¯ëóDl¶Ó?#´²"9+FTÜ©oLB¦ºÝÑÄ;Æ[SÇ+*Ík¼©Û†!7KEÒÉDsÄ<ãYÀkœ;ñûòš±Gt0¿Ú¾ÄAìź½â«›®¿cÇëÊ.Z4¥fªÈi433ªbê®Å1È4ñ(,üÔ´'®WQÄô“%s!In“EjÄŒä;‘«˜˜DI‘”?0|BäI)iÉž¤¿ŸQª%œŒõ[¿\2J™,Œ”Ü¡<ʨڎôÇ+\JWYF)lCE ò“Â,tJ€Ê"œÊB KpÛ¬,KÅSD¿7i1Á<|HêÉGŽ¼ÃƒŒ>ŽfüE,=¬ÃŠÌCÜÃã1LÔ+L’Ñ1Ùã¿ÄÃ4Dgâ.브£ËØË¬¹¬G1¾>ƒDÈt¬E“«™jìDÏü¹kÅøÊ\°ésÆŒôž{+Å Åe¸ÇÔ|5×ÿÒI¡RÉ\Ô>ìåiL˜ÂD—¯x$L›ª¯èìÆ7¬Í‘2Ʀ»Ìê¼MÇlM`’Äa4ƬìÅEK:Ó\0'AÊÁàLé̾B\MÇkºé¬½JD¬Äkªœ*öÍûͳºÚÓD‡YÂUêDH$”OB¼ƒÏ¾´1„j,GD¸EÏʧ|Î ’­TÌ5›ÌºTÈò‚Ì€¤PéQŠÄP,\O¢°³J" N·sÉþ±IÅëÑ=úÑl,Ò$Ë#UÒ&ޱtÒ¼ƒÒ(­»)¥R¸³Ò+U»,ÕR³ãÒ.åº/Ó•Ó1Í·25ÓlCÓ4•¶5eSgsÓ7=¶8•Óaÿ£Ó:õµ;ÅS\ÓÓ=½´>õÓ9Ô@í²A%Ô,3ÔC­²DUÔ(cÔFm²G…Ô³cÒImRIµÔ9Їð†ØÔÀÔL­£FdPÏJUóà|ø ØxFxPTMÕÂs‡‚È|Hˆ€h|胂Õ[£;(|†AP°…1È|XC¨U~D½J™då2{x‡m0†GP„C„=؃ €0BPGˆ„dèYÍ袆@00 ‡ƒ .0((À‡àVÿâ„=ÐtK8UlÀŒ ‚ÐØ0uˆp0ÐX‚%(00‡Tt8Ø |8Ø X†mØâr€ðƒs%0È °‰´š‡“ 0Ž=Ù‚Ú h(iÈY ˆ„ˆÈ‚  Y’ÝXk¨ÙÕJ˜„9ˆ € €IØÿ¬´ò}“…¡õÓ:|›Ð=Ë.®¾RÑhšÛ°[È \ÈUûKž»Ê JO¸pƒÆ-²ÎÒ…Z€X(ZŽÕØŽQè•›¨P“ß«ÛÒ=¿%&¶¼3ÈÛ*Öý‹’¼6Q"X«”‡@[5ˆ·ÕWgÐXÕˆ Y Yjè,S˜…jXP¸|˜ÏŇgÐ-PÐ*°”´ \Ûý½=ëÕQÜÁ ß¹¼ÀE_×eËñ%]ïe_óE\|K\MWI+“}ÛÍ5¥ مأ¥|@8T`ØHP†-XXØ8W`ÿXàP’]»µ]øÝõeŽòÝó%Ý9 _ñm_úí`øõ^¿•Ýv"ðs‚*€‚/ ÕX0+](}Ň,yx‚ˆ%0}¥R Xð„)x1$>i=BÛ.½Ýb:ÝøáÙC-.ÜŽ›°°½÷ a$Z\‹x‚  &À$8‚ ˜jP… <¦<Ƈ À‡3H^øB>B^‡^ÈÀ)* ìˆð]ª=Y Î%¹´7Þ’Eš€Rˆ&0&dX… X…äTž7H|Pƒ`håVd5häRydÄOÐW½†¯5¶ yåxƒ3¨ˆcõeIBædf¤effEJ—€;aolserver4-4.5.1/docs/intro/tcl2k/html/img009.gif0000644000175000017500000002251207363640502021200 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyݦ ì‘ðÞ¿ùöiXccÁ#KÞ·)-¹cuÚmÙ¸3^‹†ûýÜÁùª|”⣷%ažûˆãßÓ#^&õ¬zöÆ?ÿ%ls²Ýàä„?LÙ{»CÿŒ‡:ÑG 4`çDG³÷íG~Ä‹š÷fç°4…ðtѲï'6Ü!ð€ÛŽgH8¾Ï•Ð|Ä‹a÷´¶ÂÒoX-œ›ô:è¨ã gíK¢ÝWÄù1iKŒ¢õåÁ)ZñŠ"ª"·ÈÅi1GåZ“Àf>ΑtŒ9ã‘(Ô».å‹*a–6ñnÅ¢›ȧØÑÉÉ#–¹f+ù±J¡£Ýó·7Ù!ÐzrcKà(ÉJ–Ñ’ñiÿâH3Lzò“‘¡$(GIJ­ˆ²”¨L¥QN©ÊVºr’šÌз:ùÊZÚr%¬¼¥.w©‘\òò—ÀtI,K4K$ó˜ÈæÑžø¶d:™¾|¦4SÍiZ”Õ¼¦6+™ÍmzSfÄpÈR†† Â!È Ì0‘ÖLŸA ÙE®à„À%hH>¿ÉÏýØá@âK{Š Ÿ%Àg ^!<¿<‚RKLD§6Ñ7MêOjt(vZQŽ>#—’hi*§ž@ãhFF•©IvNN#ç0 D`|ØŸéBBSà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀgI8²Ò`V•ª˜œ&vÁ#0açÀ‡ V1VLËÀÇY)‡4àC Á8>ÜÚ†5°A"Ýì§^“˜×½úÕw}ý«`ÙØÁ¶gÿ…=¬b‰¸LNÓ¤ª[ž!Z8zUÏx ”,¥AâI|âjàáLG¿Õ=‹³‹íÏ:™ùÒy¹ qO×28F¹ån‘“íHtà´±ÐzM<½á]mS«ÚÆŠÄM.aWëXä*÷¹ˆeîqÛ ÝêÖ,±ÖÍ.º°«Ýe Ûò0Œi¯êßÀœÇHÖ…/¸´-àhuA²Wz&Ì]þ,;ÃHÞ/ƒ}¤ÖcÒ:9:rzý®tÙ•²­tª½‰Ìšd¡ä4*íp½MaÚîÆµ9ŠkÐÝÚn«Â½±ðÄ,°ë&\ˆ2X¦#÷¨û+sÞͱÇÀë“ú!¯s¯eÅ1eŒßbpÀ~Â^À!ÂP¦±’§ ;òý×Êûc\å8aä»,• Ì<*Û«u¾jQxìÚó)Å×Jò×¶Çe8Ó1x®ÓÕâl­ŒéªI—ô…b7!K„ý“íØÜÆõ¢ïÌÃfüÝÐÓ”š[Ùð»)-×Ê{4s€Õœ? Ÿm-cž”;­îÑ~ ÉïýâJë/W>›Mäx§×¼RÇØn}ã°äj³›Üêt¨—[b<¹Øƒö±›–Æe°ÁÏÎvQü±m{µßî\¹Û½+-'³¹íë?GXÄ„&#—Ýb†M^›BUœ+Þ¼5%~ϵ~!²\Ôϲë¶zõaÆ6ÈCw¼²çeèù~ÀÒÉ×ðuC²”#hj ²:†Ä¯H¾zjÒºwÏ}V,¯ûÞ_„÷¾>^oßZá}ÿÄÇññ—ÿà3?øÎ~ï£/ýÜS¿úv¿>öã®ýí³½ûÞ7;øÃ/öñ“?µ…¸‡CщDøÃC ÑËäú!:P(6JЄ>$¡2eMð( 2•û„ 5S ( ‘5USç÷Wà~pðniwc÷×)0SøTSæ‚1 ¨ Ò  `) ¡ % %ˆ3€O@øÐ¦À€÷$®iVR5&…7…„Pø4J…¼!Q!Õ„K¸QãÓaµQ71zw•3090Ûg~hnj¸†ÓÖ†nølp‡Ë6‡t xlvx‡Ã–‡zøjÿe·td[¢raHY£wˆ™‚/_‡ar"§Y!‹ˆ[Фg9gˆžõ…ØÇs´E‰…£hæåQ˜:å¥hHæe—'ˆ]I‰–rž¸g”uŠ Ø‡Ã‚ž¦>$¡r³Š‘Xd^Ö%2$rºˆ‰³%A¼å7”‹ÀõZøt´X Œ»8Š5‹Ñ1³‰TØFÒ¸½ÅНø[ž#&ØøŒÃ$Kjw渆|¸ŽÝÕŽî˜]ðÕ5ôø\öxÉ•ú˜ZüØŠõiX9‚•‡—H76ašèp¿–ˆk‘F‘Gq(YŽû’w€XYBÇG`tG¶a¤'oJ‡o:‡[–%ù‘÷P&DZ÷z³6rùæ‘ y…FkÏÓ’„SG&y‘ï¡‘“ˆnýÆŠRG-¨Çq<Ùyƒ´RZ·own“ì¶a'Æh¹vrGIi°‚*u&c6<®ó#ùyô©GZh–f}×Q¬Gq ùbg)x§b y_™ç=Avq©GiÞ–gy—t‰ŠOY— f‹ãÖŽX4“(–ÿö‡‹ } ?UŠuÔ>Iu'y —˜s—ùwé”1–"FA.Y^à1_¡G{ŸQòv<ÇCxåf‘1†šFk³y´©k®™š¬y“hÓä•a” oaIr¾¹˜o™7²^‰‡r‹f•4V–éÆt­VuÖy•¹exSÙíEÕÚ„!OÝÕ^ÕHMÕ\½Ôc]°ZŽ9aÕi½W`mÖnýÖGÝDaÖt}Lq½Õs×Þ´×l}}í×_½Ö76Ø„MÖv-×PØkjØCÝØ¼$ºò¬ˆú§ÿ ˆ]ÙDét”¼¹„èg¾µ[”퉙8€}Ø’½"_i”¦Í)ÜØÙ³º4–ýÙ˜]Ö|½Ú&ሕúÚª& ÙdÚˆ^&Io0äÛ˨eUŠŸ½Hܶm}™›]$†8ÚåhCJ¶_h¦YäÚŒG2—º©jD§A©Ó¾— ݸØU­ÛiD™ÖMŒò‰ÊØ›1iß$jŒKI–×YßU\»èßî˜Ú‘-Ö‰ßà8ß!÷§¤mŠÛ;ßÈÈ‹«[±ø[˜ÅŒ°*àëHàšíÞ!Áà ¾¶Eáò½ÝIâŽÜ"^ÝÜm”Žâ¥~.ÝžßAwÝžWŒ0Þº¨•3á@ä™Öèâ¾â(Þ‡3NÓM۪ب)Ú—z+QY¼.šßÌÍŸžâæmßg[å™äQ±äïíãeÜ õ©üµß˜ªßmŸ'ßvtÞÍæ¨ÝJ^ãŽ}¿væxžç·æmÝç~¾s{è>è^è‚-舾­ë­Ú‡ÞèØªèíé’îè‹Û–~é¶÷èŽ×œÞé™ÎÞg}Õ¡.êÿ•qצ~ê¥苾鬎M”^ê±þK®^é ^ëŸtë´®ëz:ëbîë¨ÄëÁ.ì: ìŒnìnDìÉ®KéžC#›mÆDžÞá°.³³{àú}憾©hZ9+í·7«¶ëé¯Ï®.È~í?·“ú°Ô.ÞþáPvsé^®g!î¬íÃëžë©H²Ð«©Á¹kPùt ¿›E»ª«_Ú­ïø«ež˜ª ©ïB)ñOŠÿ¼ðºA+¼Âì잉yfÌ+´oû«Ó9bEg´ë¯¬úµæÖ¶Ak¾‹aô³CIîØ{°›šóo¼ùzï:Zí4^òÎK.6• ¿¨1{æµg"ô®¢ÄyžÙÎMó)©ñ`‹òsÚ/ÌŸýóž÷Lê)õÛášF0kþxþغ•º¾ØŒ þ@à@øÄ—Paƒ64ذ É ¤1ãÁ…%vy±âF‡C’ÄQ£J„+?jü(’£Ì™!S²,‰SbN˜;¢œ¸óä˘ }Ö:òäR¦Mž¤…/êT©U£ÁŠ_‘­]¹&Ü„/ìS²eÞ4iÑcБ)Ѧ}»V¤Q¥ÛÖ«vnZ¾{oþ-øÖ-ÞºC Óµ»4¯ÞÄr£ܸ¯dÈlÛ¬Xy/c¸…ÿ[Ìw±æË¥IsFmVõê…T][Ýš•ël¯ ÃŽe›¬`¶B÷ŽYÙ%aÅwß|:y`㼓Ž.ÊTyiÉÕ;W¼Y­ïß“?gç ØwèÌD1s7M3öòèu¿'ûZ~쬵iƒ _¿aÇŸ»§^î2ÑûÏ:ïÊ3P8¹œp=œìÁÔìë4å0bð¿ ‘³ÁâtŽ<³¦ðB÷CѬù^“6mË/E¹ó©Âöz¢©¦ éj):»Vâ̽œ:ÎÇçžâMGƒ+ÊDí4«ÑƇиçp<.J&DI§ï¢HÇ\¶íë ?ÜÆdÓ?6Y£rFßÿ¤³N;ïÄ3O=÷ä³OØÊ<óůò[ÓOéÄ4´)7õ[4QG…4RI'¥4¾?/ M5+å´SO?5TQG%5¡2©ÊôÅMKeµUW_…5VYý<µªTk[uV$çÜÖÄIžüsÓOGýÑÌu.=u×_‡ÌÐ…ZspcÇ=wÝ›Z]ñÖw>xÝ{'}sáGuâÓ\|ñkþ¾ùñÏGÝòO¿}÷ƒ]ßø÷ç§Öø©¯?ý=½ÿÿïÿTÿ8@&J€ÁR°¨+qA§€m;`¥Ž’´Ž k¯’ØYŽVAäC—µ¡ r(ee´bÿÅDQµ0ES#ÆPØÁŸi­@Û±Zc2”7$þÆ_I™K˜x˜A8y#Ñ ÙØ'7Ê©„ttà¸ÖXÆž±¬JzL™$´ÅÝd2#Öá×ÐÆh4®m’\¤£)AÂÌäK®Ì#'BB¬'a;Òú¸Ôµ!EKb¾Œa.{HK )2•uZå1•¹Ì¸9qdÌc3¥©ÌdNÓš¬æ5µ ÀlnÓ›ùëæ7Åé¾pÂ*Œïñ™)d/cꩤZ”›Þ9ÎÖ8stДÕŸtÎl+ÕN×–ª£F5ÙBjVïÔÅ;u«e½é@ßsгÆu‘_ÏXçÚפ®µTMýkblÕÅFvw}ël7³}2æUã`vI›‰ÇÖÍwÇËþ÷Ùß~£µ'%n¨›¶°>òjHÄmvç)ÚÐEð´á-+r?ðØÎ^îÖ€âSèL0‹âÁ¥—f¼Ã®‘߇$OÀ¯TpY®…j褾"þðñðq›¡†£&a(Jƒç ‰ìØ—"\؉Å‹òžÒ€“ÆSÐŽ+Öo+ç½HŒ[<¦÷béÑ H’|Ép+ÉãÞ[Táä fPÒˆd¡QË™œ°ÄñmÚeG‘NS¿¹ËÛdã9­h+br¾Étm›¿1{ˆAvÞÛû¦x”ã=!k±Â«U|âÔö9Å£Nm˜2•cG|«–ÂÖw¿ÿ¿1<ÂÉ,ËZ.|‰ gãÜ“=µYfK~ò¬¬|ÕK|yÎÿÊò}ž>zÒÓiô¥G}ŠNŸzÖ¿gõ­‡=ÂÌm]óÅÞö’zýíuÍ×~÷¿çSî|á÷Å7þ푟üØ/Ÿù­wþóS}é—žúÕýõ±ßyíoÿòZÝ÷~²ÁþbŸü¿6ÿùs~õg~ö$ö}ûåßöÏ?Õõ·ÿ¨ñŸÿOïŸÿšö¿ÿ³´@I#Àt´D@ESÀ,´tÀ?ƒÀ̳ ¤@ܲÀ Œ­ ÔÀÖÿâÀL­ÁƒÁ§4A¸ê½hJAãCÁ¤º÷ã³^ƒAÛ{Áœ¦ÄAfÒÁ¤¦ì3l> ¤A!´´xPoP$d4Âði„„@ÝpÂ'|pHnÀ‡O€ €…`„Õ¨B+ wèˆ<À‡D€H€vÀ‡>èˆp°D42Dµ;(|†AP°…1È|XCC"Ä“y°Cf²‡wØcxE8„@؃=¸@ Ep„HH†nøÂ§('jH`0@z à!0„€‚Hˆ8|(D NØ=¨D0°*4ħ ‚0Æv0uPˆ00ÆX\(00‡TPt Å | E…ˆÅ\ÔÅýq€ðJ$0È ÈUš‡i 0dœÆŽhÇXh(iÈY ˆ‚ZTˆÈ‚vlFh•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ À'ß¾ùBü;Xpà¼% sT,’±>ÇzBžè˜0ÚÉ‘ÂmjKîXvYbŽø°ÄÒˆVN­:5dņ_³Þ8ú°iɨ ßFmºöêÞ³cÏ~<œ4ïàÃ…ßn½9ðåÄû.~ÚùsãУk§œ±ìæËÿÿÆŽ;»ÞÍK=ÓMzåqËã™ ï\wyÞöïç.Oû=tÿÞgÑ{ºÑgžø XœeÑ%(ß~úõõ[‚Ú6y¶qçàƒBØ ‡JÈÚdþEX›YèѤÞgeeæâ‹0Æ(ãŒi¥X“XëÕÅ<öèã@i‘aÙô{; ©ä’L6é¤UDv†#‹í=iå•Xf©eFQ®HW‹[zDc'&†aV·ši>Ùå”_V‰Ò†(݉ÆY˜r¸5¨&‡„•™ça}J¨ †¶V¨Šê§‚…5*iŸÔ1È£˜VÇ £˜ºÖœ¦°ý'âšz–ff§Ÿ†(à Îø¦‘9‚µÙ&Ex…¨’·Î:g®!ñª«Kœ+%¬T&ùë±È&«lR¯ÞTì²ÐF+í´&5 U¬rR«í¶ÜRkmŽHÅf·2új’¹äj9nOß©£¸¹á†Cò>$ï½Õ ‘¾ûÎÛ¿úLï½þ\ð¿÷›¿ ÌpÁÓ œ¡á­›è©§.8ê¦Gúç¡"š[B ÜÉ¡‘ʱ¬É0“ìrºª1+,g^J•íOÓìóÏÈö¼ÿR»Ø ”Ð@'­4–H§Dô³E5½ôÔT)õIOÇi4Ï/ºLòË_Ísv¾¢[õÙI]]íÍéÁ©óÖ~}|ÔÌiñ¹˜Úhçm«Í6æLÖÎqŸUkxŸivVƒk”xF–ê-8ßlé¬ÖðŽä¡©*˜|–B8_€ŸcΡâwnz­¢(Ÿª!c¨rvròƒ€Fè±ã—AŽžß ÁÝSá¸/|UÀ‹”õÛ•“„y¥={z1Æ oGû˜è:?iê wi·¸=FÖ‡à’z/·žbL»ú™jÎ9¥ãS?ñº³Í{¸Q¯ÿþkÒñóÝ]”71è|æKTô¬·ÿÉL*? „ŸIÅ<òM0c ÔX†ø“1òïIþ {—¼šð„T áGFˆ?¢¨0m/LŒkÖÁ6¯p‡;J®4ø¼:‘­y3 R ß¹‹rùÍ]¨¶¶¥qÜ‚¢­†ø"*j„…ïJb8µ=qqŠ( R°(«½ð}¡’žêüôºÙIL!bŽW*¡O~qÔOíÚ—=ålgC¢_çÚ(E šî‹ü³"—Š(¹kAÍ…aLŸàÉQò"dÜïX¾Šïc¦ë!ªÅÀ6f‰£¼`)GÅGö=p•y ågYÉÜ‘‘Úò´XË^úò\õƒËý²IË™9Ù£!,»wÇÈÑ•oì¤4IÅ*ïqJS¼¦¢d M yÊ‚©Ô-)F¥àr˜e<9×ÉÎŽ\rHÿçt[Kx»vÚ“œï¬H&(šïÝóŸ½Ì'Eö ЂÔJ=¨Bú£„2ô¡u‘C#JÑŠ¢e¢ͨF¡Ï#îr£ iQ0*Ò’šT%$=©JW*ÂŽêrž,©L‰Ø7y’p¦8ÍéDRªÓž®ÓéCCÌÐE8Dá)J„°…ˆô"Xpˆ Bp4Ī>Íê¯ð‡ -­©GaJ‘©ŠÀª&¨ª bÁ£ÝÐPzds¦åz½e¹NLtu+]ÅQ†4´Ò_lúzb”ãjSêDÒq‚ˆàú˜jU'â…´ªÀ!T Сôà!'À†C˜`°C!M‚C¤ r2N«Ú$C' ‰^4áM˜@:ôqƒVLàÐG3ô\ ÈA úXÃ0Рä¾ mˆbaK]‹N·ºØ}èu³Ë]ƒn·»àµÿçwÃKÞ_Ž÷#'Šë*Ö:Ðu{ïíκPW=^­ @ìÝ  ,öA±D ð~ý ;ì傇|ˆV5`2¿üáˆX™óŽqS/ÕÛßgÒó¥^} ×LÿbŽ„Ëœ€O¬ß ón/±EõC7²XCäY±L:DÅÂBôñ¬>xЧK•[¶ü»TZ’³´ñ­Íš•MÑì»æˆ´üÉ©NÇøÑõD¦ú)z^¬Ò $5¦U©B·ø|Éë*xêRÚÈXK2¸ˆ™å^óѾv·€-ìbO‹Øx5¶²gN±¾ô¦ÅìQĶ8M¹Z¿®£"ª¹âµ“…­’¸Ž²ÝÙ•iSÅÜÔfbWèÑpËÙJþèPܽl,ÓÛ!ã^L½÷­’{7$ß´á·ÀyKxï:\«&­§é+•¡ŒÝ[Ë$¶ŠÇìnçƒôÀ¯äo\ÿ6òàštíÆG®ï‚!ï§1eë^{áªÌ`éÞ*êhþ1Ílú$)ifW7—_©/8Nœvà~%¹ÒnòÝÙ´…ó× c$ä^¹Û¾¨saòÕgx;ºw_‰I– Æ`8¹•8Y˜@YyÞä˜&™¯Æ’&‚Šs˜—^—^9–yšm XiI˜©6>UÙ@F"jæ—隇”U‰ ¯¦L9”7†c¿išI"œ;v”©œu—ø—%.iWLùvÿÓ¹l(ÉÑ4ÕI Ùd×™’yøàY‡â9žpXžæ¹†è™žg¸žì †îùžRŸò¹ôé#Ûy˜ncC:Ê’Ÿšáœ¸+tT~™gBN“Vœ«&yVbô‘Jk—šž´L;ç–¿éG©6W™k˜&I«)k¯IM“g|| ×Ckª†–DGsÝ™Tê…ÆT  “ ¸€+j¡ ˆ€±çJµG¢ãç~í“vƒj?Ú˜rÓ7ÆjªMi¬ÄiÙÆLŽ"”ƒ¤h£e¨nB‡u g1÷f£ãz_Š{R‰ggÆg£Qj£dÖCµ gh‚„—W„)*gkj`¯§aYc¼Y„h4F'º6¢¹¿2“:ô¢>iBÓY¨=ÿrŸõÙ|’:©}W©–ªt˜š©#·©œ:p׉_¢:ª¤Zª¦zª¨šªªºª¬Úª®úª°«²:«´Z«£ê„mC†0˜Œú©Á#†¹zšpin]¤”ïÈ£‘Ánެ*b…Ñf/ú2­“0ñ2­30Ùj0ã0Õª­Ò ®ã/Ö*­äÚ­Øú0âŠndQù~ã—`µö¡ÏC{®6—¯%#6—2wqçm>ã¬F$¬2úyæ:/íøRÓ°ãÚ0õ2±K­ ›°±[®áª±›±Þ ±}dGcªq8è^3—`zfx¦*;8##3ü³ÿ³ûJ³ÞF³1¢#³`#³6;°¸ú¬º…¾ªRûq·«sR´M}.8´WÈ´F´oÉ|RËRG›KV‹—˜µ'µµdG´` Rb ­¨ç$Ìj{EÇweëN[…P­Ù¤~1'Jûš³»·ç¯~;qdz|ë¶m»£o›‚T‹´H·n&¨rzGa³‡³7¹”«³’ °;»¶|Ê=‡k9‰Ëµ §´Z÷¹&ÿu¶s›¶¦k¶¡;¶Q«ŸÆ«¸©ÉªuCD»¿„º»¥¥›ï“q6×sØ—{X¸F<š£GJÞ×¢ÊËzËK¼X|Ô¥»]ûœÄz¸ËqÙ©QÔ;ºd»ºÕ½Iû½V±½åk¾\ʘY}½Juè«<­‹¶XkuBʼ:Gä'AÖÖ¦ü»AØV·?×¼ÃÇð:À=–~|¡Afù[¸ÃûÀìw9ýë²-÷¼Å«ºýw¨Wûµ/yh2•€É¦-W²tª‚;'¯Šº‚c„}$;sd3Ƙ¨'+¨{”GîSG6˜†çx(T jH!¾‹‹ÁàkQD,Š,lÙ{dI<šKþÜŸfá€|ÄCþi¸™† ØJؾÜ¿©;¿2¨ \ܼäNÎe5U^®KpŠŽ% ºÐ¼pÚp<€ ¦€ úPªuUÚÐâµÈ¨ðé‘%*w›¾éA·Œæ­feî·‰zÕ¦î¢8ÿ¡zÕ¬ç7Öp[Mà60 #°ÁåËÕ\ðäá=¥…ŠîXã•J€J@0#À º5®0à®# i€¿Œ ÈuÌ…À ]í—šdîÒ² ïÅF$Gï4mfï¨ïÅÍïUæï ð¯©Œ”ï!}ðÆFð½lð ¿q¿kñ7ñó¾ðïkŸ#¿ñõÖñŸññ ¯l"O$_ò÷žðÿ®ñ*Oe')ÿòÏòïò4ï6ÿð8?d§Ý’?I‹œ%ÿ1Ÿ3ϾOÉǘôF™á¼Ø‚Õnê”ÉôØôjQôqô¾›Ò)ÖhÂ7§ywE9£Ãé"UöWïõg¡õÁõF õÄI›€v¦ÔÜ›L˜ö¥õÄ<¢Z½÷­i£Ì|œv¦Ãëu¿kY˜„§"æ Œ_–Ý®XŸì‘£ðõ®Ì{/,»>û!;(J—¶ œÌYú®9²)úÈ©`­©ö¼y¢ƒÖ™`:÷¸,øuûùAŒ¦±û¬oøæÂºÏöîž"˜¿ïL¨ÔcøÄi™.‰•š?˜PÏüڛÙ›7·™‘_b·¯øïJ¡jOÁÙ¶™¶ý²¯ýCŸ¸ÅðÒo˜ÿešœ†_þÑüô­”È/ˆ†¬@LþÃ@ } ê˜PaÁ <Ø0"ć "¼èP¢CŽ-nôȤÁ†#'~”häÈ•I¢Üh±ãLš5mÞÄYЖ¾=yþÜiD¨P}FŠ5Z°“¾¥9žÌ™±"Á—T+jtyU+T­&Ÿvô*2«X«[£Ê4{U%Ű8c²KVnU¬VÛÖMH×mܹ\놜y°ßÁfá–µùñëbÆ9}>Zt¨QÊH .mÚø¦`µY.!–4^‹7æ¸c,1ÞUcG&¹d Ÿ¥pÛˆõ5S;ñôñÛ—[Fdc%ž÷å™+õog5õ¹¹ž 7hMm–ç†^”é½Fuæ.cf6jK‘ÎV&óD/¿ÖdB©Æ·bæ#½Ä A°#{ưd»íß‹{íëVR±·{DÒlöä^(#šïÁ¹ï6±Ë>Ûo1ÅZà+ï­¾S<>ÛÈÃM;±.?ëçÌëÛyó‡N‡[¿©~õÑÿ9w›uÐgG½òÚi÷üv;s¼ó¿5W½õýðZ¯õlQ†R匕Öò-<ôÅE}uµç\vãy§½ÁÒƒwýwÓ£¯ÍÀ×O÷íó»—[xðA?o 7¿µ«·Ülòu'òhäÕT^Ș·5¦­ïvÅ3ôjg£Âùî)ã[D¾‡¿Ù /ÜÞêˆ>í1pƒìƒàïzW¸ ¾T3à¹gÁçað‚û x3–õ)sÎ+Ÿýn„·ÃéCAÛîðֿÉO„oÃaûT8ÄÑnN”{b„8¯%Î=»SÛ‚ÈD¿IqE.lT亅.«5©Œ¦:£¿Òh;‰Qd@%Óæ”´¥.j¯VkÜ[ØÆzª\+ÓÍ9ÈŽ¹q€„Dd"ÿfÈ*Ò‘ì# IJVR\’´d&5.LnÒ“ŸdV'A9JR¬¬Â—äJ¹JV/W3LZ#[9KZRJ”µÄe.kvÊheM—¿æÅx K_Ó˜Ç,Ó-ÇdGd6³hwR¦˜˜éLjZkšVŠæ—®YMn*k›LÊ&—¾IM=>pœÝdÎ9!N:RÊ npÊ;cU’¶)ñi«Á÷>8§”À!ý(@ÒÏ–©³]Ãüãòd)N޼ž=ˆC!J‰êc¢­¨A ºÑ‹jT¢ðÄhFC*Ï‚T´£á(HGÒ’Š´¥òTéçHÂ9„0ÄuÒ£ â”Ø?*>hzK²‰@ªÞ€ú³ E5jR“zÔ¡2©)êÀ Úv‚©#$ÅèK±j“­ju¢XÝjW?ŠÒ˜Ž´£]¥¨JÃZV°ª5¦e%Ýk*Sœ.Ðzr•àØ6Ø¢ùx/ˆ3!(SP¨•#ý§aKPÆ>µ_SeNUóyU·¶Ô£7Ak[-ËÒËF´²›µhVA+ZÌ’t­dí,iC‹@Þ½©Ó`øüºÂ¾Ú4y¥ûëTÁö–¨†U,bªØß·±…U#4ú.…NÒª‡B«ž¢KªrN QÂÅ%dO#ÙÉj¬…ú®1£ Líjÿ†»VRçGË)õºäUî+*À…¶ó½÷õVys^3â׿֌o {©J2é÷¿¾”Ãß­!ØÁÈRðWܼWøW>™|™K_çNÖ¾c€Ÿ4à1JÄ'–†2á©Å/.“‹qÂbÉÆ7¶ï°–›ÊkÇ?v™ˆ‘Gâ72ÈGn”mBãë(KØEªp±Û¼+šÉ92¤ˆIàeÊ¥q¢¹žo"ÔÀŽ÷·„%jo•*å(¶©õ£ë=¯¼.';gÇ뱑)ؽÜy&¨À]3š‹Û‘)¹Çm3œñ)ç9««Î3a²Ðä¿Ú^ÎÏ5)s¦‘ëÛà×·B‹õçq?ß1ºÑâztG"ÎEóÓÓM«²uO®T£éÎ «ïsíg&3ÏƵvȪOl_{¦t¶fˆmìb/WÿÞržsÌlj›Ù·䙀í³êê6ŸÎ¦²ÜmV‚;Ùxª±‹¬ˆ¶¸zÑ‹Ñi^ª(=¹›uò®Qg¬×¡Ïy-@PÑi‚Ú“ÂûšÛÍÕv“ÃlEY[ún ßENÄÞUv—î3ÑôIWÆœÒõÄ ‘ȽJƒk˜ÇEž¶²5^ñc#ÐᩳkWVÞê Æü㊞kÆaÆÚÜ‚º9ŸI8òR–Úó¥a‡»ë1¢“܉4úˆ£r]WÛêU÷ÓÁ9œðMÆñ꽊ú§~È”Ýì5Î2´ÆžkŸ½Å_»–‘K¥£NÜ~ºÐžn´4â}çá'Ðϵºî“ë:6ÿ9ž©Þötª{à÷&Ü]Á\ï‘Ïñ‘§w^íÍ"Ï‘xðfœØXóÕ½¡‹Ç¶k>|aùZyˆ½Ôsº}ÊrÏek7þï­•‘Í¡÷¡çsÐ}rì¹÷in}ô¿Öáôoàïñ¯þá}ûG¡ý“-õc£þÃ-þË¿ìÛ½kK<\«»þbº¼·¥ërkºJ;ñÛ°¤;¼S#¢OúÀS ¿ä?iúJò:·›• \< TÁD7<º ¤»¬¶ 46”!$»”& \´ù>ž#µ– Ã35°8BÛÑAãÿA?²AÝ+°t[7Õ Úó2Ùƒ<ÝÑ¾Ž³'oÓ|ò·ØK=Öˆ³zû;ŒBTR¼d<•ë=¤ ©>Ïs Rc!÷Û8$œ«:œ¹˜³‘V“?L ”:d;T¹óKÀ,ô+þ9=#Œ @<6ܾÄàŠŸ‹­ûÐý£C6Ì@œBòó1XkD©r>!|°6$28dDC Á´Q#v3D CD±SÄl°[ôÅJÌE¹+EŒÃ_4F‘ÅÆ´»c´˜'ÜW\;^ÄÅRF++¡æÓ6;:£kL·Â;DoKBBtBVlFÄ«Á“ƒÅsl¼Ù;äh"x„=99 )¢½\ ›Jÿ¾+Â= â*|»?Λ›)Èxll d$½„‘4¾´iÜE”Ãÿ»9- Dq¤­ö£´YôÇ%ŠÄ$Z¾KI‰Ì¹ßØGëKIG :‘KTÀX#À`¡Èe\G4¿Œ8‰äÄž„DÈšTŽJãÃy$¸#4I!ZÃNìBŸdI¼Ãy¿qœ ß³-—ëC_¹Iu\DvœÀ8 ÂT¼oœHb3KFéÊ7üJ·2Ô&[¤Egœ˜µt@‹¤Ëc´Ël3sÌKtÚK„ëKQt¿4˜ÀܺÁ´F¿äD¹´¡DEYKK, FÜÃɶìE½sGöc=}3Ã,¬G€ ½HJ×;È+|¸/[ȽØÕŒ7øHMÙ $3JD$Ää@ÅÔLŒ<>¹r?JìÈŸì¡U”DK¤¼9´Ms@¡ƒ„ä>{cIˆ ELÿƼLj|;½³+§tJ—¼ÚJî$ÊÌû íÃ<ÈÜÊšJà[9ÌËÈÔC¬Áê”B¯ÄN´û6rŒK²¤³Å„¯ÊÔ@ûÄK+ìÌ \üKzÁÍÔÍÕKútûlPýÅ¥Â.ˤɄ? ÍC%EP8’ÅèôÃø#NMÄŽølBûûCó1LB²PSÔ³vì«tOQÃIOyÌ"}=/t¹ÙÚ534Í1 GBŒHËœÎÉŸ…Q}E̬Fe¹÷”8ÙJ¾ˆsL×Ò÷tÉßüÄ#ý>ŒŒ«B,Q ‹QbŒÅ½õ Ïæä·MìN ÌÒ.)Âö+MÚ$S†¼à­*mÉä³fƒÒiÐoËý”E-»¢äPÌ)ÔŠ Ñ‹>Å;Â;}Ô)ͺäËÜÔ[\SftËPÁQÍÉÌü/ SCDU)ÍN1–SœÕÎÕKfROVå¦W½Ï&ÓLš$½<ÿ“M5Ìá¼ÓÉžcå),e½ç\ÍÑ‹½wM‹s0_=Tl¼?õ\œ?5ÑpÅ9ôÄGê{Óìø¡Ÿ;Ýї쾎sRŽÑÖIÝЗ³ÍùÑR dÎ{­²Z}Ê?Ô¹tÝ«¡³‹‘”Ïù“9¨LØäl¦yUÀ4G×rT²sØ*4U ’^Õ¤ŠÅÐeú¢‹ &Ž-?u;‘=E’-ÙH½ÎCÕX”¥%“Ñ~tÙ#ƒÙFΙ=±šB†ÅYÓÙb¼Ùžý°ŸmS¡õ5¢K£%TUF}X¥]ZtLÄ•íË:²Ú«ÅÚ¬ÕÚ­åÚ®õÚ¯Û°Û±%Û²5Û³EÛ°UY§…Ú¶­ËM·•[©ÕEªÛ»å¸eP¼å[19·¾\gñTÁ ÜÂm’¿5ÜÄ5ZÄUÜÄeÜÆ-ÜÇ…\À•ÜÉåÛʵܻÅÜÌ•ÛÍåܶõÜÏUÚÐ]¡%ÝÒÅÙÓE]—UÝÕ%ÙÖuÝ‹…ÝØ ÕÙ¥ÝGµÝÛ¥ÐÜÕÝåÝÞÍËß^gÞá5ÿÆâ5^_DÞä5ÄåeÞtÞçu»è•^³£Þ꽺ëÅÞjÓÞíe¶îõÞbßðµñ%ßF3ßóu¦y0p0öeŒôUßjz„‚PóÒÛ _‡‚ð} Øy0GX°ü•Ñýµ:xpˆ=ЇEˆH€wЇ?pˆqp fS®¶<8}(†B`À2Ø}hD8àÁML-©ö/|ˆ‡n@†H`„D„>èƒ 1C`H˜„eøž1 &U}°Hàˆ8°‡Ž¨.àˆ ‚(ˆ(‚0Ѐá`ò„>àLÀ_Ž[›¨€xc8v0ˆ8€c->ˆ(8@‡U0uèb0}èbƒÐb1c]r€„&€0È Ø/$&»zèã0Tã>vL6Ѓ †] …0)ðbƒ0-Àä;Öã8ƆE~YK¨„:˜ € €JØÿ&vú(>.M[‰#e ¹Â"ɯ¼iUõ©Ø‰ «t›X“©<,Ép ƒo§ªâ…[Yàd9†c§Rx̬´­l.µáP x¥“wÃMAFzž)ìqHîSl•纔g;z(€È²ä\+f(†8¶ãœÐ=îE¶Ђ‚@…Z¸&…\Їz€g}ˆ†à‚‚^¨=3ÒîðC{è{Fµ™þD™Gšîg«´)‚ÎÇœžæ¬,X|¶Æ„£‡ž$>.ævæˆP¾ã™è…N®}HHUcP‚`16Yc HXã¨ê8ŒÿÉjþi›—‚%SžnÑë‹I€~k¶–ë¢êmÎëgDjFa±'°‚(ƒ¸c8þޏ‚à…s€b}Ђ ‡XÐbƒ`‚X‚€b{0-> (P ‚h 2TÄ!›Üj"£?ƒj$Œi~D=€Ôá«ëÌŸiVu‚‚  €&È%@‚ ˜k`… ä¦äÖ‡ Ð4P_êFên‡_€4¥~ ˆèUîc´N•i‚m’éÒa›¥ 8…ih‚#hé.ˆV˜€VèÆï €5Ї5þæïé^ƒîfã½Å P€b8Î[~± 0z﯈4°³×_GYùÅp Óð °U ;aolserver4-4.5.1/docs/intro/tcl2k/html/img011.gif0000644000175000017500000002632407363640502021176 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ  '_ˆ|ûzü;8ïÚÀz+^œnS[rÇê´Ë’ðÅÀ‚'b6¬ÏrCÏ9‡ÎìÐ2aУA¢.-ú󿇫]c†Ý:5à×¶%¢Ž}›´gÞÀk›®-›±ñã/L7!å•›qƒþ={8éÜÅYG¿N};íë·¯ÿ~=}öè¿Ý£÷FoXüzÜšc#–mžþ|ûõÝŸ¯¼ÿbå41'YYþhà&¨`r5™XÍÕÅÓ‚Vhá…^`Mø\† †(âˆ$6æàcÒE`‰,¶èâ‹n–M’97!ˆœ‡”ŽZñ#Gð}'xùø‘‘?ž$ãƒ4F¸bJêé›`÷aÔZŽÜi¤tSVte_âmô½%k^f6dšóç¦{Už—|¢!)ç˜ñ¹6g–Bb©›y_öIeyÞý¸dŠR}˜ä¢ŒRÅ[£Ú¡ŠŠBj饘f ’¤Mzx£¦ †**¨œÞä騨¦ªª¡'.7i¢Ÿc%æªÇ٠嬴ºˆëO¥Båd¥?i©æ”êyÛŸh&ûž²Ì’¹§²‹§•ÃJ˧”Çûæ˜yùÙl·`† ­¸Î6Ûç^ÕN›-³í¥ nDuâÊß»úÔk„6Uo®üöËâ¾-ÿÝ[£„úúkðÁ/Ì’À¿Æ,ÂGŒcR ŸZ”Â\}9(ÆCm‹­Ä ÅqJSê°OÂ::²^ÑndkÈ0‡´²’­ø*YÀ¢¼*¸3¯WnšØ¹ì#/ÿX4=÷—4I%ÃZ°HAîç3º¹Éž}%ñ.–튦ºámì ›.Ðr¶Iè~€Z­¶ÖÚÉ{ÚÜkãÇõÝñXœ.=RÓ8ŸìWÌ„®˜ß">™àwe}ŸŽ/—P‚C’7T¹å“_Fšn8ÄùCœ‡nÑç ‘Nº>§OtºéK”zé­£Þ:ëžÇN;ì ÇŽ;¶ïzËíµæNÛ.»ˆÅ5sØ©ÉOÿïüó[¿iò3šÊüÅ$yë{ѧ ?ègÒ¢-ûìä×>:ùèïNÑêå«/;Dì«¿F’×Oyæöë“ÿå^–6®µ]*×ð(4[ ‰JÿëÜ~ç½ÿ…¯T¼&½(._؃ž7˜” zä‚Ë tFv´?zÑŒVÔ¡÷ó'@+çO–Âp *(EJM˜¢œ6m‘L'BÓŽeqœ PO(@@"“‘$&QL¦þŒ˜z.¹¨ËYžM—9½i;ôÎRB'«`ÝàN%ÒS‘…-¬h…ØX#RV1¦õ­„[«K2y³MÂõ®xµJ[óÊ×¾Ú‹®Ëã¡_KX•ìµ°ˆE«1Ò‡†˜¡!Špˆß2¾Ø>Ñ'BØBDz,8Ä!8 2ÚÄš6UxÈÆé5±®®œhE0ZˆÖ±(oÀ—ÎèÆ·ìnøäzlvLÍî aS$ÍðÒ¹…³N°ˆQŽgôì°IÇ N ‚è´¢ˆl«‡P!&@‡>XЃ‡œa‚ DÀ}„‘‚6âÙÜÓ÷’0€&zÑ„#4aéÐÇ Z1WL@ÍÐǃ) 5èc Ã@ƒ>,ü6´¬•õ•ÅüKâƒøµ½¬‰Wlbì²øÅ~u1Œg|ÿWÓøÆaµ1Ô¶¤1Au‡mø1Ó!ãeEG²ñ—vÃçõ5™Ég¢Ö'hG²E9Éh42Ž„bËÚµ2ä[Ý‚6f6J÷È;ža,›ÚÛ6í€n–Ý ž32l$–·<Óãkš:Å)ŸúЩ44¢mIE3úÑt4¤'mw¨¶¹ÖÍ&>dsь̅#.‘[Ìu=ªj¦5™•jìâ™xM%õ¹…Ìã‚;C¦´¼AïyÛû`õ¾·¾s•o™íûßG!®CúÍNöí{Âãm{¶8k“š-=F3­Þ‚«2c¯6r~¤ŒŸ„ã ˸Åð’û´Ð~7fò–ë å]ñõjêòšq«q- Í mrÓRh ÷·‘)Õ¡£º^c¸Íu‹ÿsé|å/_ºÔ³×tW¥øË'ï¤!(媻èH’ /çf.M³jгCnd“D]3µ•뮪Ìì¹D·³¹žö¹ç(¹ÆyʆΩÞeU·ÙÕcËóWÎì…Dü ÛWχò3ŸºC)ÄÞð >æ†:€-ê«h>º{>åçYùtxšRW©×D/“¥¥‘ÇÜä:lcA=‹ï©LÁÄ+ÏËŒwëHªÜjU[‡Ô¶v–HIjûõQöáhGÑGÑ…f¾úÕ—îWºû–ê讀v#– åáÛm­Ïný;5ÖY‘›~~˜û‹IЫÜõ_uxø_0Çÿz‹·sÊ—fÑT)ãT1DTósR´—;æó>îã:¶CyðC{+4?ØWüy÷ƒ9#(>>Wwg4vÀçq™²zÑÔz^us8ƒsb|Õ#s‚•uúâwSfwl‡pu„Uí6g—mì@œ×vIuUÔƒLX@ë–„äÂyÈ‚wx²=÷§wSEvl·T?v…€p6¨C8¨b:Hƒhø[ø‚(züµ|,˜†6å‚Úƒ…÷{rxotèNvˆP]ä~Ž7T±çfÞvVÙ2ˆÄ瀔¶‡\Õ‡4—fdG„ê×Hó÷(ówjæf6¾§Tes.¿dgv‰º¶G©1HÕ‡Yň9׆(ƒyø^ŠGH#G€;F<ŽÔ6×–D…˜v’}GÕ‰°x8cØUwŒ‡§ŠNÇŠ1%˜×>¨:é#QXú4¯shyø>8R¨Q»Ã:ß§æG‚ç‡?"hŒîÖÿˆ|ØM옆Èhuð膯÷‡ØnWhTЦu†¸L4¤tXŠw­ÈŒ$ˆT§ˆºÈgy|eˆuWˆóhryƒ¡—Z•‹ pI†¹Œù‘’Äh’*Y ³¸’.9ŒŽø’2©-9“6‡AŸ€! !c;p[Ú`¶e[a[ÛuNð)@Û¥¥¥·Å]X9 ¡Þå]7yxà€pðÐ.¦Ü%ZÞ…téÕ  «@ ! ' ²à¼`£—ú@¢^©Nð•!€ ZZ`9Baˆ@½DlÌ@[¼Å(bxÜ–™™Ù™þ³\—é™7GíØL„Š Âkai*@4 a9›@Q“´y›&a›¸¹›!¡›¼ù›8ä„œÄ Iƒ7bÅ™œ¼rœ3§œÎ¹0Ì™ƒÏ94ÿ#œÈiDa¢š$CWÖ1 yˆ8¾yl÷l&nÛYÚÉ&áéœã™d_(qÇfHëgõYfFróvvžò¹€¬Ižÿ‰d»q%:wói dfsï9 JŠfDHèifr—tVn²Ÿª¡½•Y¦dVD|…"qú©ëë‰V *Ev6njŸüÙf-š\ùù&1úfzžcV7÷÷¢a8¡l6ú ÂÕ£±ØžƒÖ m¤ÔYcÑi†ÿbžM SJ:¥¿Y¥Vº›X𥷹¥\:›^ú¥7¦b:“dZ¦/y¦hº’jjJp)ÚyE¸(B £sŠT—§1³¢¥Gek¶g„Õ¶fh¦l&D„Ê…„¸l^·lÊdk¾ˆE@5\Œ 6‹Tõ¦¢fˆªˆo*K>ú§•ÉŸRÊ|šz¾(5xÊu[¨fĆ™³VtI©‰”‹Í¶m?ä,I祶« n@·jï¶‹)¨ª»&«o¶,£êmú€HHC`Çiìé3̶@¢Vzy„ª‚²G<ÖG|$«¬f&¼Š­·¦L§êkžèdÉv­³º«ë 7Bâ=jH-²¬kÚ{qiÿOJ‘õº¯9¤‘ÿG’üJô°°8°›‡{°i¨¦ÙÙ°û°±;±[±{±›±»±Û±û± ²Lš8ùš|ò¨° “ÊXŒY‘¬ s«’‰â²]¤² °Wk>ØŸt÷§Åºuk‚„ž©³~Çwþè€G䬸º³fn]b…;ëuuw§Ãô„Å4…Õ"Š{§ªôb³i²,÷®‰d­ÌL¦ˆÍÇ®!šL…„7æ:®ïdÌj¶ø—‰¥(¯t{·;z&Ô§w®”˜Fìçi}”k÷š³kX‡+ë‡(‹X(“Ù¸‰õ¸‹ûˆ’ë¸^;’,{¹xE¹7»¹œ WXžûµñ¶¡KX£«¹Œk4žÔ2’wº§iœÖÙœ‘ûƒJtG»´Rø-‚D@Z ´¹‹´+»ÐåŽlø¹Œ{‰Qfe·ø¬wt'K¦£Q¼Í+§I¼–* ‹½ƒÿ•ºÿ ºòF³¢"¾Â—¹ß»º(s¸Eú*ˆ4çºî;·wºupº'S†qü§¾ˆ—¸|X¹gHgJ¸©¡F…~2|-s‚p·K¹šwüXÀÅft ¬pVk‘IשF‡…ÆêÁ×sÁ«4æ;œ–‹¿7q+C¾ bÂXá½ ü¿Ü+º| ¨…~ªVO uz*OÍxR)œgà ¡9¥Â0|²á¼ó[‚û³ŽxêÖ88Rˆ%?Ù¸QÜÄÎøŒUØ» ìª ëÖºm똰ºŽc¼Þë4öëÀcÂ>ì,VìÆ¾NäàÉàÜðA¸nßÉc¥z / ÕîníÓ~oî}p c`áíâ\Øa[" ë𪰔WéYPS"ð] ñ®ìP[ßîL ª•– à êÿþŽ›.IN©”õNP@=£ÝÕ7v ° P@À ݾî•íN p¹ ¶Z?÷ñ& Åu„…¨’êª/BšT-àà š6Ïm˜Yg4ÿl”9Êý²ó-A à ”@®ÅðªÛî Õòú°JÉ]R±  Á '  'À¨` ¨ 5€_¤¥ ûŽ•L€ pÿ]B`éGJš wš I¨šÉ™Ç³[|ï÷¢y÷EZš©ùlŸió鄸a Öa³0ë@ñ`‘afNÞ¾󵔑9ðx•J€J@0#À 6®0°¯# i v†ÀpbR¾ ë170 ÁéÁïr2¢sÅŸëÇpÉ€Ë/íͯoÏÑ?ý K=ÊïÚØ_sÕOº×ßý3øýþâ/€äOüÜþ%—þbþì?uî/ðÿK7ÿtQÿöïýÚý¡¯“@} D˜PáB† >„QâDŠ-^ĘQãFŽ=~RäH’ mé;™åÊ“F\ºÔg$æL™,™SçNž=}þTèP¢DUeó¥L¦4 Þ,UêTªU­^Åšµ*R®J_:mj“ Ö¬Ì’iZ¶mݾݚÿ´ëÒ¦uŸŽM«V¯^¸ÕæÜã_‹„Ýòí›XñâŒ]‘Ò;S,μk+4\óÙŠ™'z&+øòhÒ¥åžn¹4rM‚”E‚öËafѱ-#.ˆÛ aݹeïîíÛòCØú<×^9ðÛ°—'ÿm;:ÄçÒ‡[ß\|yuÓÝ;N Ù.k¨$‹Ûf>{¶á½Ð›ÿÖM[6îãÓžg¿þôëÆå³‡O¿÷†Ûo>ûîã 4ú9¯[09༣ð2ðT/²ÉJ ¬=ôÎCO8ýFLDÿÞKD‡ð;PÄW,0ÅOt1;ûCÂsdHAq¬±B!»p¥ íÚм±ÿËN¹èêÓGìȈXŒ9çª ±ËE{®Êàl|‘FsÓÁ'=²Í·ŠLí«ñîr-$Õ¼1Ê2Í,ÓǃìK û\sG@ÍŒ¯PÄîìQ̵’Oâ´äÎMK¥‚Ó+˜æLR³IׂÒÄP½ô³DF)ÒîQR 5QRG%óÔ<ØÅ‡\éÆ÷޼rËež|îË7çœäÌoîÐ}Œàšzˆ>ø°…gq” }˜¿$Ñ…þB¶†(>€ý Kl"ßëVè@Õ ñ 2 3È?ö¥éeÔóÔgt¤D‚Ë‹4Ü¢}8E$Z/‹2Ú¢ó˜7G>òQŽNfèÆ5b¦‚ƒì"ãF=NЂŠlÞñ.†ÆÚ2ê³"÷þ·¯?¢‹ç ãü¾h¯…YÇŒD|_û%˜ö]’“Œìã+MY¬R~q”Tdb[©?' °H¿BÛG7L%(”¼LúŒ)´Z.³g6ÔTÍçLjVÓkЦބiMnv3.ÿ¿,`0uèMr–³WØ §6ÇiNv¶³$Ètg<åéxÎÓž÷Ä:)–CÓáÓŸÿ4š>qhÀuÔ ÿ¬çAzÏ„.Ô¡îlèC%JΈNÔ¢Õ¬èk.ºÑ6Yo$µGEJ!Ф )éHUŠ•”‚ä¤ié<%™‘™®t7Qy)ßH!ý…”ðã!k ¾¼OO{RcÌbJOJÓqãK¸öVÿd½4eï)ÓD›r®¾ùç> ÚOõ×À}ùïDî;˜7¸- –È‚Mè` k‘pa*¼áÔá´©?{êN.Ìa_Éè8 lž·x(#~H†;ãbÿÆ‘1ªj¼cŸx€Ù òx¹±’9e†W£iÖÈëÞâŽUÊÝ¡òB¬lâyu^ɪëUûCDµ•/«ô«)hY ~ÌLN™“C¬“Ù–³s4íûHãÒ–º$cöÆ—Ö0Û0xžK:ƒ ”Ù:2‚† Ûìg±f¸×ýôé,ê6:Ë>ž)Çç.Û¸Ñ,”î³cM}j#i-2“ üÞY·óÕ3uz=ì¡ú1’~rO~Mì.Û ÿÁ&‘Ï˵iÓÚ(¶†šÉK«‡Ô¶ãO±I]gnÙÖYf…/ôŽZ˜»îÉ4¶Ê¬bmçw}k ´šµÕU¹¦БÄ÷[Çý,€cïC¤ Y­ï'µá|ýêbùÊ;géÎoö“V³ûĈ#×4Î.´ÅMSh}RÖ†-­+Éüç>2wã~ñ6Ë1rAu õ¨7‰ÝË¢6Ôo-¯YžÇ š7têª_N·âÉ]a^k«á¦H³ºUø}B$]Ü®û¬^žù× ýòKºé^.ô¸|$sëŽuêE7Üæ­Î§åÁ1­öÆRš÷ªñ}§q'àÜ'mc¶ÌwÍJ3ÿ<³u\k'}›V|äÅ>‘—[ò‘7zå{tyÌé V:äa}‘”  ¥ï̈Ýà†‚¬>'®Gì?"{}ÐÞ¼{ïö–;—yló³Þ$¿7^aWzÓ£^¨'þe[ïúÕ³Þ ÍoþC¢{æÛ~!Ó§>ôŸ}çמõÑß¾ì±ß}ïŸüÖçþ¹3)!ŒcÕªš­1yßxÐ?>×¾ƒR !bü㛾ÿá?´?çK?éë¾ìÛ>‡Àå+@ïKˆd@tÀ ¤À ,?í#*—£¹#ÊŸêR;£kšùû1dÛ³¥#¹ªs#‡0¾äë?ÿ ÀRƒ@ ¼>Ì>T@´ÁåKÀÖÓÁDÀœÀ<Û“A€ƒº¨s.?Ë«M·ÐÁ&#Áл¿ÓÁˆ°>¿ñ»ºyÂ<‹Bû³;Èi@ÎóŽ-Œ4ÁK6¨î C1Ô2Lµ.ĵ/dÃ^sÃc3Ã="ó¿9„9ÆÁ;”B9tµ«ÈÂ!ÌÁ’¸BŠHD…à¿<=ÜÃ9ªIô(žb J´è©ÿCyK1ºû=à{Іƒ³}S¡ñ3D lìÓAð»AU\CôSÅ ¬½\DdÁƒH¾,>Gt+ƒ«˜7c˜OI³½Ò7°¥0Â+eYÆa,#?ÒDÏ‹¦ú‹Cr/Zz»RK-5ÓÙˆÁYdˆpÜÁqœE5aóC(D/ÄF¦ó8åêGèš8r#G œAÄH |@wÂvTÇŠäÁŽTÁ=äÅG„Äyd7ÌD¶ËÇù°“Õú3€Ä ™¤—FRI}Ô½|¤¼Þ°Oä˜B¼˜H´3à¡ÿFUcÈâÃYÛD¹ëÄÁƒ²©AGWLJÝ)J8¬»†œÊ/[ÊÀkÊ3ì±J¤Ü±­ü¼[»J±nì­j5øA’¸Å‘GFDɃô;œ³£*lê\ÈkDKv ¸h).ÃÃKŒ”J54@ókŸ4Ì@ Ô>WL?X”J„ ¾°ÜÅyÌEõ™–P´"}t7½Ì²¬F³ôÉÔ£Ô"ÈQS9'ò¡p¬Ì‹ôAŽ\EÚDÇr4ÄLÀêSÌý+ÉGÎà” —»¹¯z7×Ô9Ë!M£ôË%ËF&\MlÂoŒK!,?‹Tì”@ñÃÍŽÄÁìlˆ¹ü¿4IáT¢©Ã´Ž+LYÛÛœå´ÊÓü8+J`Ì¢KçL˶äÏÅϾcìL7̆ Ÿ*¥‚ ·ú13¡3"=Nùô ÍÓ:òj‡¼+®ÃºÂ ÒOK¼ô´®;F“³ËÌZËQÆ4ÎÈC+NÆ¢”}®85è"ÿD QÂ=Îr¤ã »´ã*S9ÔFm»”H²SÂGåG:.ˆ;â4´Ž›É;ýÀøÃº9–·Ë7N Ô„äBåÒmKN>k) ìPWÄK‰Uµ,´é›fÜÖiÎãéž–¼ŸjÅê¡&¶¢6ê^Cê¤6µ¥fj;sê§¾¨y0p0ª¶ˆ¨–jŽz„‚PŒÐê­^(q(oЇP€ ƒpûâIëYƒ„Ø}X„ˆ€x}ø„ {k¿kb˃cЇb(f€\ ƒmЇF@·V\y%‰zì‰Â‡xèdˆFH„Aèƒ>¸A0F€„IX†oXkˆ8)kPh„8H{Pˆè‚„˜"8‚ˆ‚(@}0Ëž'Oè>í0À°ìÊ]ˆ*0ê6`tƒêþ탈‚0tXƒPá6SÐá6ˆß>näv'x@mƒ ÐõŠîÍ­ñ@…ëo„èo8i0jØZ¨‚á6Ђþæîï¶nl€o}¶„J¨ƒ9À€¨€¨„”ÿJ¨/¨mïRøoè)ÚÐÉã—ÏLÙ“¹$‚Ëæ„›ØüpZªÍ:güñËE[Èp ƒ"©†â…[Yðë®n‰R@°½œý7âõ^øêLõàÔ›Êr0×rtc³öÃòÅ"µÁq8z(h(¯mh¨îíŽøîxokð-(T¨…k`QÈ}¨+ׇhØ.(Qà…*coYª5óNC4œ±º§½ô6¿ô³¢O2¯T—õ ßtLgsÄE‹„ oŸò„0pî^ˆ^ðЇ¨TP…ãv(v8nã‚T€…ã>[ŸB)™¼1u˜ÿãrMÿq‚«telÑP‡öfßôfVõSÿt±ió¶È©'°‚(ƒàîêþ„¸‚à…s¨m}Ђ ‡Xømƒ`‚X‚¨m{0…ß> (P ‚h(gŸÂú`çÙùòlÏ:JÒ5ûcVøY±$6o¿™‚‚  €&È%@‚ ˜k`… “§“ׇ Ð4P_™G™o‡_³ý&]ƒP:‡pñNv’Z¼f3Ü¢7¦ 8…ih‚#h˜/ˆV˜€V—·ú €5Ї5­×ú˜_ƒŸl|…P¨íêΆ ?° 0z€zŠˆ4¨2žß^µÏʰ¶û Ãû¼§°L ;aolserver4-4.5.1/docs/intro/tcl2k/html/img012.gif0000644000175000017500000002333007363640502021171 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ  '_ˆ|û¢ü«×#a‡U&.̸ñE¸MmÉ«Ó.ËÅ –¨9¯ÃÅ =ëÃ|˜0iÑOo~Øy3fÖš9£nXzöhÛ·‡^½û³í×{qÃŽM[xñÀ;^ŽòÒÉtZ^Ùšxïã_÷íºúêÜÃ[ÿÏè}vgðᑟž8úäÕÇÖn¾~üÀÏ×ϽwæšåMÐQVV€&¨à‚ 6èÑ€5‰]]<9há…f¨aW†eeÒU¸áˆ$–hâ‰u(™„N‡â‹0Æ(£…*H×3ÂV’qòåx×wZñhg 9’‘ŽÕÈâ.vb¼é¦œlõM„šhåUYœŽ[æÆ_p=Þ&{ñøä•DúÖrZŠ©—Ø™¦|oÂ7¦—yW§˜p¢i'Ÿ]Êg›t~'ÜoR†‰äVJ~8!Ž>:¶è†SæXé‚“²ÕèM-Šé§ †**Q›Bõh“£¦ªêª¬nTê„!¶€*무Êú*ˆ5g­¼ö:ë®?Ýzª§@é†ûбÌbĬ²ú@ ‘´ÐJ»,² U‹m´Ûr;m·Q»­µÙŽ‹-¹ø%Ú%–ê *Q %8oCóÒ¯>õâ{¯¾å+o¼õú‹/¿öþ‘Àÿ»¯¯Yë“°êÊðijêpOÿ3IìOWìñÇ#vÌRÆR¡Ê1È(§|¢È+‘L–É>±ìÂ)Ñüî¾óÚÜ‘ÎV™i¦*YR.W¶q̲‘ÈóU„’'³ÐPFtdT¯èhÄE=­êžÔí¦5¥\+viHî öŽcŸŒTѱfMÒ“qŠ‘ur–M÷Ýiªmeî9Ÿx÷á™|FâmÜ‚ãÉîÙk*åá}åyè—vKœáYr'äÞ£ýIÕ×&±«ÛQ—nº¤SChcÉGû…vÏéŽi9ìwêÝ]Ïcý:”§÷Î÷ÚUG¶úË­ßåûñÈwzI¢CÔò n»EìNžgØgïf”ž«9÷íëu~»Õ‹ÿ^}çœo¯þºR’ŸèìÞÇ?>°ÕŸ¯~áºO ýHÍÃìzò `Rö'’þï23ÊŸPxó62FŒ^ê‚¡«iLb¼Œ-Á "f‚ΞÑ0èÁåp',!Ò€§º%±Ž„â ‡¹î0ÎqšóRâ4gCÖéM5\R§Çe/ˆ<,¢ ‰¨² ¦ˆ‚r!ñ`¨Â*Zñ#N|+È© ’®W #ò²ØRQŒhL#k@HA¶(sê ç22¾e‹êâ ¿HÇ>^ÑŽ®Âÿ£Õô8E?ò 2#"ÉÈ$ Ò£k¤$'™ERò’˜ôÊ#¥8ÂLzò“F±$(GIÊ‘mÒ‚{,¥*WIQ²ò•°Ìˆ+cIËZ>d–¶Ì%,q©Ë^–’—¾ ¦')ÌbúÎéCCÌÐE8Dl!* Ù!l!"½b‚œÀ §1Ç9"<äáHˆ©nŠœ&ø¦ b‘ Šï=>»§Ùôy%QÅÑ0÷´gšì97+%gh§3ÍïBŒr<tìŒH:Npœ ÞgD¼O8„ !0:ôÁ‚<äØpL vè#@pˆ´a<ü0ÿ;ä?4Ñ‹&¡ H‡>nЊ ¼búh†>J9¨AkôñÔ7°¡ ‰èM·šF­rõ«Vô*XÇšA±’õ¬Éÿ3+Z×z:µ¦fsöá¡ß$§þgåÖÀýLšÔÐÔ.wÕŽÁô™.k'>3=–vùß±BÜ>ßɼö¯‚qàÿ麖c°NIÈN.÷Æ)û/Žwœ#óøÇ/ò±MLä#±.t^±°‚.49"OfKŠ­7åƒ-l%K3XÁ²œ./²¿²¤±©°ÇYEd^F+˜1"äùÍX]ƒ‰´îÛübmb7ØÓØÝu®­"jŠzÀ§ÎöˆC¹g\)Ym?ŠÝ{õ"G×°XŸ¼f¶¶ÁÍmiÖø~Þ nª ÝÉxÝ¥Ö³»ÇìÅ2[ªƒ¦wJt[Ú“ÜÛ/·”œãÂIx/ŽÙ‰¸xÛ›Dò7rslû²„?È]ü‡l„;l¹ÏŽÇã%¦k{ãÃ&üмˆÅøÅÞª„»¤ÛÃ:#¾ýlsöÜ!צ¦’]¿{Üë‹¶ÒIþ>Œ+[׉NoÉ+Üë£w¯ÖSÿ4+Þ‰ ïeçÙæº óÈïTÆSRC0²CKt[KÛ½Èv:ÖåîløÊ.¶Dm@ær {sç¬'v¯#ì .<ÎÉ|vW#þ«Šß7Ÿ¿½Â#‰ýñjŒ¼ªÞç‡CóÇÕ|9Oùœ^ôÃ}I_g¢ΪG2ëYýúÚWrñý¶½îõbøÝû>%ÿ½ÿ½ð[‰{³ÿøZ >ò—ÍÍOÓÆÌþÂ…7{é[?Õ£¾Ã¯ÏýKÞÛ­ï¾ø™W|jŽÿü*Q>ú¥¯þõùùp!>ƒ Àxˆ$4ÂÎÈS&OñôñDQ'à‘ô@QZ QòTQúpCÐ:pQå~lUÀ@aðpeT~Ð*PQßtQèЂQ ª° Ô ¢p* Á &0 )¨4ðMAPúà¨Þtö; %P¶FÆ„ŸbnÛ†>Uhn¹…ni7aRˆ%9d(Å„‘5QØ&¸}¡4@:€nØ&ugØyo8‡ü‡¥G‡xí—‡º·‡|X{~ø‡¨ˆ‚ˆy„XˆˆÿçuGn4÷]–epX$ÆqWp7¦ˆ‘8@™h‰²E6›È‹õ‰‡…c˜(XøWFä]ûQp«ˆW£x9_r9®(†z7‹§˜Y·ÈНuY¡(2­¸…¨õaÀÈU¥ØZ°¥Z¼øZ¬…r±HYó¶_ ¶+ÍhZ¿ˆŒl·‹ÛÁZ|÷]ÈXXÓØX[UŒÔS>¯HuŽÖhŽÖØ…À¦WéHaçVɸbï¸b ‡Žõ茮…Zø‹¥A8cuˆ #Š R‰ˆXj¹Óxk‘™m‘¦6‘ hy‘w–‘ùfÙ‘Dö‘ ùc"9’;V’Ôæ@íèA 9ŽNÒ-‰knàQŠ@ãræñlia}_t'm(f‹Træ=#wb´³“)?Ò#k=Ir'V‹Z—”²uUa0–aLé`PW†ãf•åXb"ÆaÉg‡á牡ؕ—D“ÓlW÷kà£@ZÒ4ì¥n³H•†tæ–K¹t¦‹t©_:¢'=Ù&0F”Qx]rùré†(ÑF•šB–´—5‡™–ÙÕ]…YD_ˆŽS–XŽx™³õ™Ç˜™E'ûhŽtwDö±_ƒçq$sç8˜XÉY§YšAé–¬)ZõÕ—¨é5TÇ( J1‰œé#É!Á9ÿ(i’Ë•œÊy\ÌÙœÃõœÐù[Ò9»ˆ”˜Ú¹ÜÙÞùàžâ9žäYžæyžè™žê¹žå9}ÏQ}|d™{sŸþVÍâùIÏRxRIœÆ £i]–f1 ÀéžQ¤}r¸dP¦-å’,à¡:¡šŸš¡ç²¡Þr¡×¢¡¡ær.ú¡â]x—wV—iŽö¢Zöh C/!02J3*£[vi“f DŸ ç wèz×¢,ýù,gV.ýI¡$j¤Mj-ÍҤ܂¤K:¥Iê¤ФE ¥U ‹¯É‰—R úÂh :¦cZ 9ЦþR¦gºi–öh Ц¾3Ú¦—¤Ô'¤e9pò¹ Ø·zx™ƒ±§Ÿd§ïù§:'¨?Ê \TvæçyˆZ§ŠJv“—§ú¨Ú§²g¨ñi©ŒD¨ únÊnIÁ¦(!¦Aªª.‰—«Zˆžº¨“ ¨”~Wl†Ù—.Ši:ª£f:0Zö«9£ii ¬–F¬ƒ“¬ b®©ƒÄ¨'øÕa³0ë@T!UT5h9M,%€J¸ÎW”J€J@0#À A5®0–­# i€¿ OuS…ÀUmØhU*¸ÒPlÚĈGœ§Ú\ÌÚÆÔ!¯½Ä² V´í °Í®·-L¹ ª»ÝÛ¾õÛ§ÜÂÍVÄÍgÆ}ܧíÚºmÛÌ=NÉÚÐÝÅ4ݲÜÖÛÎ Üսݾ„Ý”¡ÝàŽÝ]Üß]Þ¹$ÞtAÞê-Ýç­Üé-#»›’aí$¾[ß³ÿßÔ½Ú[kн™3p«Ës¤©íZà£ÄÞQáÞxßúˆpÖY ´2£ßœ¸œüÝóýVN«w'â^^ >Ž%Þ^Z—¹Ùм ˜…š¸)sÞ™6ÎâdÛÜRÛþíá}crSqu³D8>[¸ˆ›–ø¥F®`Ò¥vŽåä„ÅÛ%¶ ù㨶äK«YHÙÚ;þÜ=®%qVž®¸ŒPùŠéà nÁ4¦ä”Á¨‹ü¨ÑeŒh~r»¸V žžàeëYÞ˜çò˜‹§[€>­Qî¥û(•tÎYr^ZŽâ3¿¥it®B{~}î²|—šEn‹ƒîâ}ûŒöWæ“Hîˆæ‡þ•¨å)nçA®ê\ÛæåUá]µáãÝá5.éãÛ‚þæÑxç;¼èó¸Žx žê"þè¦þêÛãl.”¸ÞÞºžæc~‹DNæÑ¸í®>”Âí€õ™„åë­žèp7å(êðX™ÏëåŽåÇžŠÔÞåÞýåiþ«®v½ÎêéÛèœYYàÈï¤Þîänrˆ^dÒï¨~æÙw/žäë®ãPÄã±=t—>ëœé±é!cëܧÌñïïÍÆÕÞà×~ò«DòÏòëò|¾ò0/Ç2¯é4_óu|óŸó:ÇöŽÞ&ÿóŸäò>Oô~ÿÌó%ñHŸIF?ôMŸôA/ßPõ¬ô/oõ¿„õG¯õ‡ÌõUïõ_?õýÍôbÏHOoögHiÏÛrp+)L‘òË+m*p_¶ZL?\7÷ÿÁ»#¹Iööûø‚ÏÏ}ŸEt•ü÷zöjÿðnš<‹Då;C\KÁ"ÿr`Y8¤^ß›W(þ¾Q_JäC”£¸ÿä©ÿú»8î»ùÇ+¶Œ£ù!§.÷1C·Gø¹nøÉ2ˆ´ìiU6WÅ{«Xì¹Ìï]R|”\ù”vB˜M™üv®m9PÕ¹hiý-Æ–Î µÌaŽÂ)ùn¯¢'t•%\ë|Éþåñ¹Tÿ¦æÙߘ>ºÁo•¤ÙW×Û¸@ }48PáA} >L¸ D„F\Øp"EZÔXqcHˆ -:<9$ÈIRdir$I–mÞÄ™S'E[úzþô´§¢Dõ9šiÁNúšî„ÊÑcÔ‹"mÖÌykJ«Rg¢ ¶*Õ±UWÎìˆÖëÚ–e±ºU[öeM™mo¾})×®Õ³yKªÜØ.LÀ{¹úÅÛv+Úºv“…ù!PÊBEšY)¦O%ÞyXbÜ¿.ÓN=Œ1ãè°»žV¨“õk‘®aÇ}»±Þ½ªcëæk¶îÂwg_ÍMÜw`怅Ÿ~›6ƒØè-M'éüºËÇ ½O¶\y(æÍš™:ýž^ýzöí©vw¿=|ùõåÓ·ŸŸ°~þŇ¿¬¨ò’:ϳþìcmªõKP+Ò„Ð+Ó"¤²ä*Ä? #û¯2Ì4‘3ô6$±DOD1EWd±Eˆ:´ì×BÏ@oÄ1Gwä±G¡‚ÿ(C¤±³D2I%—d²Éœ‚ jÈ t²J+¯Ä2K-Ùƒr<‰ÑÆ-Ç$³L3ÏԱ˓J4ß„3N9çlOM)Ct“N=÷ä³Ï8í$¯Íý$´PC=Ð/§QG…4Re“Q#%Å4SM7¥ŠR0‹‘SQG%5ROg ³TUWe•ÎS½Â[¥µV?gåïUKC]W[M_óÓÏFe 6YeãÖ¾b7˳×e§¥vËfë{Ö¼c¥EÑ 7>óv§pl­¶ý¸z¬„ôS7*uÛ]·Ýôä­–ÂkåË–ÀmDËÛoý}È_€sx\}>¸ pVïa„^x\†þ¢‚q‚XâŒ+¦xb„9­0ÅškVxéÕç]yß-ˆe•SF9f—U^÷¡xo®!šuv™ç–Q®7¿{ãËT1ùSË`'¾éâ‡A®Xé¨ žú醭Æúi§m’:ë¬5ø½âhbn¬Äè]9ç´}þÙ& a†;nˆÐV›æ›mæùí ….±èT#Lšc°¯ÆXðª&œâÄxé€AV~†œaaWCÉÜ0z&z{‚H‘—Ým^º“Zð£!ÞÊ‚Ìà¾4H¼Òt#VTub2œŽe0«ÙÌNf:™ñ‹©ãÜ^ö3x¹nˆ¼Y"›h&9BƇý{ É6ç–œ€nua$êÔHD#êÍ`,"nó†Dä*Lœ#ŸêH–;0œcLÙòÂE7vŒl#$Gθ:Õòdx#÷³ÊGN2’¼{â¢h4²òMªL]®ÉWÎÉ•Q©äµøË!¯—Çü 1wL*"Ó™«R¦N˜9ÂgVsTÑ|Rÿ½T©çñÏ’Ö§¦°‰“i"¨B¼Ô:%£Ëô¨ÓEî\§+cËØSsñÓ¦QU»ozç9¿NQã‚´92qvè£ÎØ´FA~ÑË„Z›‡"g  M OsÅ‘MHB 5(EZÑF–&%[|Ë…J›,úÓž8y©ò9Kþ0™+Ui³rÊ–=ÊÅ£I¼éGò¨É¿˜t Be©q¶ÃÓ¡&õ§Ž,jTÉ’Çfª¼‘jV}Z Åô*±Mù)LÐL(É QÙ)U=šM§Û;ISáøMÆ50U«3)מ¦•ž%»HçüÚS„•©[M*Y੯¾h¦ßË 7ÉZÿ«Å†S±ué‰0‹rÖg³–eÕS9õÙ|nócm&hU{(Òvö>«…­¡ZûØEuS„æäicûÊÙ²R”ljËŠ›]Ò5±8bèØÌR®¨Tv·9êmź>áFf¥Ë ™IJQétô¢(=hwN*Ú®˜Õ¸ÍÕís«!ׯޱÄE/^Á‹Ó½²•¨"¯HIúÞVª—Ž`^m \jfö°ƒmj[³ÃʶºõFqô/™¢{ÁßÒ2†*ÚŠ¨ aåáÓ·Žìm=Ëaÿ×ÃÒ­pMñXb[iÂPL1j Üb7éŲŒ1ug\ã_9÷šnˆ+â×Êv| FR`øëß'½rºÿqXs<Å3£ú¨w ûЂ'£Zü«R ÞŒjY;µs–3ß/w¹¥Çùò͵ßKn±¥^Fðì=![‡½ªëu-:Þ£.·¼(¥ª ‘œåŽø¬™ärC*XD'Z®æµôF{X¼ õÑ™ÎsТ`n˜Èî\ {iU‹ûÍ¢WmßÄ.ºÁœ†¯`5J6LR:ÓVu0Kãúi]‡ºZ£r©C\K›«¹˜j²¤Íge™Ù;,±½ÞIѶÚ~¶éŠ´mO;JS&0nɽîtîùÜ}Vq?Ùí¤hKÐܦݧŽÕ-É'ߥ"í¬c½çÓïzÝ[Ÿ°J÷ˆÿ³t]B‡Ë±6(H©“P2O:âg³'>Ò‰ƒyÎâ%èáÜiÐ|ºTÞ·‹ª`‡:¼ÑE%ôn|圯¸¦¥Þ˜ª’”;¥é›cïy¾ýà”¿ð™´f[ß÷ÎŽ¬/¨%}ùVo’®K5ênàùÝ—kõêÙÑvòâ&oÛÊ ­µþ­y~ׇ¥ûR¿ú\žŸýâDòÊ÷}DóÊà²ûÒö'Ox‘?øfOßÔÕŸþ¹½ ö]ÿÿ—7 鿹À ;öò6¼<ù3ÀÄŸ÷#:ü³®ösÀ²¿e˽ï¸ Ü­ ´¶ Ô@ äÀò@p[± Áÿ+Á´Û¿®JA„À¯Ë;|Á D;° <äA;1 “ÁDµ$B©ÀAŒ¿!,Â%œ´ À,)&äÀÔAÜ4)4@*œA% 3,Ô?-Bÿ;0/„Á„± LB1ìB2œ°?0LCdCtC¹ƒÂ8´Á9”@;l@¸A0F€„IX†oËe:Ë0ÔkPhŠ8H{àˆèŠ˜"8‚ˆ‚(@}0Ç”!Oè>ØÌ0À„«D14,º*0{ç4`„çÌ͇ˆ‚0tX„PÞ4SÐÞDˆÜ Ná,!x@ÐLƒ Ѐ:M«î @…èäNˆ¸Oxi0jØZ¨‚ÞDЂû´Îì„NlPO K¨„:˜ € €Jÿiú‚×î,…ü£³«&Ü5IC=îŠ3#û©¯x$íbÑaú7#¼ÑÕ.%Ûƒ²L`:Òí)'^¸Y…ýŒÎ猊Q Q‰’ØÑ¶ÞÁ¾3M½™>0… + ¯3C +EÓë §Ë ‡(ÆÅüFŽ(Ñׄ†ç¬N¨Ðììô´Ђ‚@…Z¸&…\Їz˜R}ˆ†à‚‚^¨‚f¢Ñ0 S/ÓM‚åÑ ò>¤rÑ1Å 2eÑëËTKmB%ÛR·CSU”Sr¤ˆí,Q(¥µN›èþ¬}HHUNP‚`‡à4YN HÿXÎØÕdŒRMUP ÕéØÔNEUÐËÖ‰"UͺRõQUmU×5ÅVW]NYDÍ‚x+ˆ0¨ë|Πˆ+^8‡×Ô-zˆ…ܤ @&8(ˆ×´SÈÍ‚‚*ˆüY ]9߈³½VîÂÔN­ÔÓ3=Su3JÛ½:³T“XÓqû (˜ h‚P$˜€ °V˜€Y ˆY}˜}@5ð…`èY4èÙvø›xB¨SåNg½’{YUì48,¡ 8…ih‚#h‚-ˆV˜€VÛ €5Ї5²%[ž]£­O:…×|Îl¨Pÿšs ­%‹8@ƒ›8ʹm±¾õÛÜÀå05 ;aolserver4-4.5.1/docs/intro/tcl2k/html/img013.gif0000644000175000017500000002464207363640502021201 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ (ß¾ÿBü¯Þ‘† '>Œo1HÇ!3žünSZrÇê´ËRr`Âÿ:†L:oCÉ‹£6ýq4ëÈ€)¦~=˜¶âØgãÎÍZwDß=ŸîMwéÝÃE×Þ}œ7`á3mܶj릡Sþiyifº 9¯ÿ¤N=ùrç†]O_¾üíÛäßGvüßäÓç_~ö^ÛÉõ§ý…`síõ… sç™— € ʦÜjû=x]ÛõÔMßiVV† †(âˆ$–ÈÒ†5‰^]<™èâ‹0Æ(#c(†e“fáµ8ãŽ<öèã+Õˆ™ŠŠä‘H&©ä‘BvHׇfAhrRjUeÊý÷Y~RVyåIYöô¥„ø… ߀KnÔ$‘O‰†½–r¼ g m\*Hg^ÅÝa}Ÿ)&hdøÙW¨–uzf–Ä jgœÕJ&¡‰R`yØ•©ß–pÚ ¨¤ZZÛ¥^š™fDkÞ¸"”§¶êê«°šs•êMEêÈU©¥1Ö)UcØk¬Àº:+T«º‰•œ±u©çTr)ª§É:ûåŸÏ-[é³SV먥|ÒÉ)…ך­`Ÿkn[î˜ã¹h¡i¢»ìÆKãeô©j­òæ«ï¾ü6”.Ž,ö+ðÀ/ùo±¶¬ð ‡ÿx0¾ G,ñÄl=ÜfÂg¬ñÆDY,•±`–‹ès¡Š:§£ÈjkòÉ׊êl“’¼rÉÑFš(ž4ÛŒí¡ÛŠ,i£¹] 4·Õy[nÊþU:tÒâ¹g´(ý¬·?ë<ªÓÛzUïeN~ŒqUÔjÊßÔa¦¬žµbÝrÖBm5zŠíò”šÎ š©<‹ (œFã}&³,ÿö-Ôó¥¶¡Nß]Ÿ²òMuÉZ£Ø5Y slù嘓ä1å_gˆìË‹ëæv³˜ž=2¸,‹ìvC ¢uw›xßIÚç߯Ck÷…»+Þ¨ÏáÎ=³q¶?þë¾›oÖùva#^óóÐ5t»—Iiõ ²ÿMØç̲Ý^ÏG—MzŸÑÏü:¹Ð?ßvÌÍÎvÇ#¿µwlzùýøçÿÖüÖÏù‹Ÿë|@§4ñ™­o³+ßí e ¸}¯xÅ  žˆ@•1P€ Sïê”)á°0Ĉ{BW@î‘Ðt ¤Û¹’·.èi8sÙ¦.õÀºÁ­wlϵ)îЇ3”›óv6>ª™mmkS›ët< â­ˆ7;Û!ç·W±0`úË¢·xEVè…ƒ’g7Æl©PPG4ßUŸí¡MqÓ ™Öº“UHŒZZC÷;¹'w¤Ü#u!ÝűZè›"°ºX9™ }Œ¤±•ÈÆümˆ4̤ Ñ8¾çzo#`gH>D ‰e,!á iEúGƒƒ$ÑÌE :OtS#—·Å^ú²a»ŒùÇ@ÊjzœdÁB2qƒ‹ŠÝ1SH Nh†]ú¨ÉG†pe/t£iHUšršÙdb4¯fM3úŒ+Á ïžÆš}”¨TæÏ÷ÆUÆÒ›­¬ »wC{Ú’ˆAL¨¡˜I‚І_i9J[V²‚÷ü$ëV#¶*“)º×Å€¿”T('ý¥J“Ïwµ/•Ïäè§Fªñ~KcëÉÉzt¥+m)P‡JTùIÎÊ+ªR—ºBÿÚˆV#eªT§š&¡RõªX‘U³ÊÕ®Šh«^ «XÝÖ±šõ¬=ªHí‡Ö¶º5+e}«\çÊ§Ú ªl¥«^÷Ú’¸òõ¯€íˆ_KØÂNd°†M¬a«ØÆþ•±Žl/‰á=4¤ A„C¡&»N.©> ‚"²‹\Á!% JÐÖJöµ§²Ã.00€d°©kK°Ú¼â‹µçiBÓ˜žWhÁ2¢G´æí¡" Œà¤›9Õ@w<ÂG3rYÈ:ä&0L€Ô®v"]àm 2…”ÀøXbk8d %:ð‚8$ ظ G¸+Y›4A¬ÀÄ.˜`&Làø°Á*&Њ àcø°0à|¨!gÀG‡Û°6HÄ»°MqXQ¬âc•Å.Ž1Sa,ãÿ•Æ6α/q¬‘¦%ÎBìñi7÷Y»q‘n#ÎdЄ;¸6'‘2òyÞI=»EH?{«Ð{„¬žEM+œF†!ü0¤å¦ª¯ÿ»K¯Lµ "»8ò¡£‘̺8[OÉ"LrÚ¶Td4ÁËÍx®a k׿7ÿØA¶óM!õ8ÑHâ1‰ XJŸêÈ™“´Ž7?MsúÓ–ó4¨GM1Q“úÔ 3ug,¸:⮆vœÎ«ñyIbBs€—ì”ϨÉ2ïzRc[ba' bóجu5Y5ïÏ{Fég[¸•.è@z£ÒÎ =Ý? o}½Y¶ ‡èqF”}&°[ªœµÌ:Ú””%¡ ob~Ûu:tMÆTê~ Œß*©#˜aÉPP®[¢Û§ÚÐÉÌ1b/gífgø²,9û®žE*µ­ôRC[ðº³<7˜µ·í¬ºJÞ5Ðäl÷Y9Ü ”õÅÑ•ñµ¦yæ8¿ÀsÎsXí¼ç@¯jÍÑ Ú }a??ºÒ{”t’t³5>iJŒÂjË;{<7¤ÖlñåÆ0+‡¶úº Í´4Ùy†ùFÍÝ8#Ê_gçÕ#YMÓ;>QÞȦ– möNaÿñBLøÇ{'SjJ9Ì×äi¸ûÈIh'óà²<(Üyy€yqòÐ7³´5žù…ul§çQíÕr}¹ç/õIù#ò3z¸ØŸs=­hÛh¼Z´ü~„ÿMñMHYó¾yÅ:îÑ­üe“ Ž÷gJÂ÷A$I‹Ô|} /àgVÝGg>‘RHnÁaqØ(}Ý1mÕ'LòGwÅS—+^vxÀ>g5µ‚»×x³4{¢”ŽV(2‚¾€·§~n4Q0rh€Â‚€Ä’·€DèsBU—VzÍãR2Hz`×qLw„yåBÛär7øŸä´zÜäO)Ç~Î{­W6H~þÇ‚æCA¼çNÚRJ–äzVÒ”>â'{µÉ¿ReRsr:…že'g^GfphóTl•w€y9„¢Ç]pÖfêÙœRC›ÃœQfg¨  ‡œÓhŸ¸:ºhІvÖù ´é›Þ‰Ÿ¸ z•˜¦óÃu©y¦9V” +!mH}Š%êU#š$»Â1ꨘ°ø¢0z‰2Ú:£X£6J„8𣠏£< }>ú£K¤BztDúˆš¢!cuDQžêu©ÙyJ2cg‚þÉ/Ò¹}ËFx]hrÇmèÆžp‡@x¶4ù–xkà¦98¦Sq§´¯4vlW•Hck»y(mšo©i0«yŸñã˜êxÁ§ßqéÄ…=>”¨¨èGS2DŠi‡Jpr‡5è}y3™– Fh:0>º„¼F€±äˆ‚'={÷S*‡~Ê6ª[V>ëD6H X©ŒZJô76„õTem—S}j„õ¹‰E ˜ÿGZ¬=w¬Ÿ‚ Sºjêĉ¬&q¤G&ž •Hc‚fŠGzSÎY©L¶rSÉ…ºnkúu…¤Ú9 ¸âjIÔOݺ|/(©3X­søhÌÙ¥ú 8Šª´3ka檴äm›äy㢿ÆJ«Ú6ˆÚ=GÔˆ˜Çz.Ízó)­.ñ§+—»±þÖ±‹j ²¤6²$ j&{²œ–²*«c,Û²6ö²0+cêZg^W76û©(U{\†«8 u€Z±x±Q(MHûŒk±oo•@·ZD¯™+ˆÈ-7eS °ךvWxìl+§%™âŠ|‡'ªX°ŠœzJs:S‹²X¢´H’ŸÇ¶½Z‡`k‡;(¨o÷möº¥”XŠî&q}Ë*¯Ç騂'©pègñÉJ6¸®ÊféWKì'u–jkv{5›=ãT¦Ú¶¯ (—ªÿê…vÚ·ÙQ§¥Û­zä«ìDooC‚*«ø†P…Ën‡»©·9wAóv~7€Žv%D»?ÃZ…3K1!Z¼zÿ!³ÉÛbÎû¼)½È¥)a½“Z´øŠ¸àc¨_[™O굈wŒj=Á;1Ô‹(¨+‚ ¨¾5({tx·M¨¸$fÆ×‚ƒÛ½ ;~‹Ú¶x8«‘ZfkøŸ‚˳ý’¾ñІtº|Ûj°h¯Û'ª–´D6å¿ÃF«y¸xôÛÀóz†K8ÁóǾ÷†tK{VW7¾œ¬Kº$Ì«©ƒÀÒëX0Ê5Ãp[×z›§¤-üy&%…k:e w=LŸ³Htt+"™:Pï+ Fƒg†ÖJÜÁÿËÀRœJ{Š¿G¹L©»ۉė¦ý{Bn,6|oãÇm™J®9Å¥%\Åcœ…XÀ|†Ã ¥îv¾TtÆ̰íwÂÜ‚9<­’Æm%È ªÂ ú—4ÜŒˆÉ€5Éy焌ì¬lS8Äk›9´¢lÈ8<µ©VÂ!RÁ]ª†K¬È}lœ|:†)¨¿Y¼Ê.XÇ´&®‘ ©v ŵ,p[<¸C“‡žZ­ELV¨ì9±{Á½\ËåjrR¨pÙÛĬ…n;ÌÖƒ¿Ì8m¬Àñ«‡|Ãh8ÎîJÊIbÉB˽ãÊ:¼»"šÉœÌ”,Éò<ÏÇÿˆÎ›Œ¶#œ¢mJ®Ú+Î@qÌN÷™lÊ~ÄóëŠõÌ<·ÁNüÍ¥XÆ\œ| ÍÊ×L†bûÐÕÜ„Ô|µeè¿5ˆËîš:g¼Ñ·×Nº,¾œ»ÐàëÏ0ØÑΩ‡=w&-ˆ‡Ñü»Í!LÍ5M«‡ÚÏ—¬vÙ܃_†ÒTLŠßܼ.í*ì¬Îêû*OÝcJÃÒŽÏLë"ølÏrµÕÕþlÕ@½½dÍÕ%Îs¬ÑïÊѪ«>ÌÇ#è¨ÖTÓÝü¼hÍjÕ{ÜÖú„¿MÁnGÂûÇ›Œ¬^-#SÝÎf]M½Ø¶xØŽ=VÙšy¼€HÙ÷ÜØ˜-ˆ“½ÙYÕÙž}U ÚS5Ú¤=cš}ÚÑgÚª]T¯¬ÝÚ7–Ú°­t¯=Û*UÛ¶½c²Û@‡Û¼­E¾ýÛúÜÂÝi»]Ü3GÜÈ9ʽܡvÜÎ-²ÐÝ%;ÝÔ²Ö}Ý+›ÝÚí²ÜÝÝo%q ¡ ×øÝàV–…x. ëÍxyÄšˆ¼éýZìp{P b@ßpÞ–í‹Á[" éð¨ð éX@R"P^  Žê°[÷? p³Õ‘ À ÿNßËØHé ¾#]ÖË<.V @@  ó-·H —Ñ)`’¹À[ª•âQ(^ϰ2ã\‹³©Ui2É•Q^\½!8Mþ»Ô¥åQ~å"—§vúŸU>1_ÙòÌ òЗžÄ™ZFŽJàâñ ¸Ðº`Ø`;` ¤` ø@þÕZØ0á ¹¦°èåq Îµ”UN<*8åb~éV~]Ðù¦[ÎnbžŸ>æjÚå—“åŸI ÆQ±0é@aab"f,–_ÿx”NUH087$@0ªð`À °ìø•0ø€gÐ ÀÐafbgà ‚Ùæ>¾ëÉ yÓ'Êí§V#Ôî,îØ½!å¾íè.Ýê>·îíþiäïæN˜ó¾iõÞã÷žï8·ïõýîïð˜7ðßoÿíìžðúîTë.ïO³oï ?ñ1[ñü~ñOñï¾ñßñ*¶ð+‚ð"¿Ýðaòì²¢'ÏÔÿ)ðÿÃÚyšDë³|¥ȵ‰™5ßU$¯,_·J\±;¨ ʉ˩$Ø ô¯ò1ôTºdKOQòñtWßôŸˆ ‹7rUÏõ QYš+¦ù:öKk±Ú X?šv;¨FËO·öìôt!õœ,™Œ–·<$Nn]¯Y[hóAN š›n·­3½Z9_øÙiø?éI¾3Izo¾y ‰¿ù¨÷ô2òí)ÀX¦œüiø‹¦g:_ý™úy|ø¢y^ÿž­š¯ÿž‚o¡Ñ –¦õQ†¾/ÐÛa÷Q÷¥ ¥Ô¹zë9û¦‚Ù7›¬o j d²¯üÌŸôŽïš£«hÿGq¸/\»ÿó­ùû’«¥Väù úEküd´‡Éý KøTJžSë‚ÿ¯/Ä«ÿƒÿ£¯ý>‚,x!>ƒ *DØ0áÀ‡^¼(cE‹jŒ¨䯉;’D™RåJ–-]b¤…/æL™5cÁ‰_‘=yÜ„/èK—#7692)ĉ5}*’)QŒ&3F=ù‘©Q”¹:ªUiØ«YI~…jìI¬kÝŠ}ëQî˯Má†Ìê•lʺTýþì—æ`›;sòDìaСÏî½;W-ÇÈvñâµ8YòØÊÍÎ¥,–-ä­XG_>ÊUóCÔ+Ç’&ûÿóìβ-O†Üºªé¸¡}'NÛñpâÅa&|ó°âÄ@…/kR:èÖj—ŽÆ~yzï’aûZÞWúçñÛ9~>ŸÝsWóàù–Gï^7uëSmW÷¾:uü’òC§Õ¯=è$P0ä<,1{®@ üîA '¤°Âðø³0ÃsÓ°C JÁåü鹯>D±¬Wd±Åý\„±(øb¤ñÁ K¹žœ;±F2H!‡$²H o,,GìÑH'Ÿ„2J)§¤r@$iRRG«ä²K/¿3̯¬)Ë·3M5×d³Í6ÉT.'KdÌM;ïÄ3O=Y„Ó09—DsOA%´PCQêÓLÅ=´QG…ÔËDGÔÒÄH/Å4SMcÿœôÏJëÜ4TQG%•¸NuÔÒRWeµUW QÑæT}µV[o5ôÔ%élW_6M]çd2XcEöÉaS5YgŸ…vÅe?í5Zk¯ÅÖJX“¤ôLZ³7\qYšÖÛfÇí¬PýÀ‚ŽC ×EÊrýÖÇg ÉHw;Ü·Ý~÷‚^Ös Ã÷ .®ßèÖamwÖsíåìª|‰T8ÃŒ‰Sxß~/°S\-¶ÌÄû5âë0ÂÔ‚x7˜–ªáô`†ß›EC«a›ÓËÙ矵"º»š·Ó9f¥ æY*öŒ>y:|…¶ª<ÌLøè¾œ¾Øâ¥¿~Ue^›Lxè‚‹ü†m残&:¿‹Ý;n¯gæºmòø+Mm½ëÎ{m¦õü펂f;_¸_e™;üä—YS±‹…Ðl•¦F¯nš¡Fʬƒ‚ÆÜ³ºúîŸ9$Ýæ€)"|müñÔŸñpÈã^]ö‡›nÝkƆtrF t™]ãMöñÌï†ýïevuÅÇ»y‹së]é× çžz¶IŸ»kûJ\FèÃ/ÝsÇžåäœöÕ±®šyšõÚ/këcÆÜ<Ë¡`üè6´íñ.péûžÔj7½€rwÚ‹ÜÒÀî«}‹W5h­ Vkƒ¡±:H¶–Є¬á U¸ÂRÿ¥…/„a¤\¤uQPnC²¡‹F–Ãöp!3üѽ 9ª¯J¶ó¡X#Í¥-qþ³ÚÍz׿ž)O|f‹bO'½Ýí|̢β˜Dˆm KÝ¢a4;‚!ï|†; Ùå®òMq¾Ûá~÷¿Ï‹7$cØÌX&4J̃1ãòpÅ^/jV£#Y¾Ò¨.ŽcœèêC=*1ÁdœPE-²èpn,`ÚT”÷@:ïiJ`Æ‘²¢({±»"R‹·T³Òpz\•¥÷  ¤°®Ò|Nf}¶¸EÎ]mtaä#pÛ<ÄÖo°‚æWO¹CévªP¼"kÉúe6²p eI¿´6‚“å+Leµ25b•ªxäÛ/s©¸c:r¯œ%Ó6 Gç¹Í le÷Æ'Ôܪgμëæþ˜Wרö™[•£àl+Wà.º©%ÓjÇæ ¯ÆÎŽ Ãeèr—×½šöoÙ«-\M‡4®ï¬„oa[ÜÑŽœc}ñ÷¼¨îWp,-b­8¥¾rçlçkêlŸ6ßEâ1¾·T¬"“‡<Ôp™ycy˽¥ØÒºu öž›a¨6ÄvîÓZ£·ƒñÓÇÌî&òÁ’œ1n°ÃÞÈÎî^=füØ’ ÷6l ÉvÌ^¦^¨Çúý"f%—¢nÅjñPÊÍ+ï)ËZægw­Úe=}ÌgÎÿ”™Ñ¼æG©™Ío.”›á<ç2«¶¬¥©—Àh¡·¢•º¶¼lû\oÓ`ƒþKzí6?½8YröPßèÚd XB¿í-™|ÄCkúyHfU|,H󋱬Ã%[¹ÖgÐIWnéeã$1Œ>¿åliJFtÍâ ¶ýv8Åž±« ’j9ê:p¬Ž#°e}ÃI_ªÔj½î®ù§ÀWÂy»ªp~cJ‡ÔêËvt·ý5l_ò<Ìí­™¬lv7·ÑëϲOœ2;{j¦¥4ô€Û È´Àûc’>u$Õ›\\Ã×¼e-w|»óÆØ[Þí¾6ÁiÉÛyûêÙ;mÔp¦½iÏ àdýpºÿñgk¿rÕ¼Á++m†x|å®ëøVDî^ÿ®ú勼¹ÚÂý𒓺Þ2McžÛ9º6ÛÅžþ’Ñé‚tQ]ÜZ¯íöŸ¹ú(¥G}?ßåè¼u\9ë_ÿ’×Á>v*‰ìgWÖ‰5<0%ö§F\‘6«NhŒyÚ·Âlô•'=wAf÷ÎÛUÓÎË–ïPÉ]âU eÅÊtªYB'|„Ü9人ázm9Ååms ¯zÑø¹¯°[ËÐ7¥×þu¡™ðepó?=Å[z.²\rŽ'eO£}\ÃNÑ<ÿ½µá~\ÇêÑ÷ñ ~ ÓÍ{Ö¿Ûß§9ø¦÷-Üd;w±Q׌ñÑý8Ó6ÿÜ×Äý½×„é™Cÿø»íU;Çk䓾pÉ®÷‘H_¿&Õû®6ÍÝŸi»—aÿV*ž\ÿ ¿ Ã7NC±ØR0¹9d#«VÓ>ޱ‚=sƒ¸•S“«À’“9Ã@Ô«5§š>Û?Úy?eû. œ¸¦+@C:@´³ºsâ;L1»’‚ºOšAgkA<{AôÁA©ÁB Â!4B>ÙAÀ;Â%ô²$ÔºÀ³/îb< A4)œË«8Z³´-ŒÁJs +³ 'd»¤c ·šÂ+ô?*ë ¶ŽÓCi.ïù8ı¨±t8cc¿Ú>CÜÆ«£Ö!9øãCÚÀʳ‹‘»¼S³¼4”!1tŠ3ÚÄ ¤¿e"¿Pû¯è«.RÔ¼EäÜ>WŠÀb³Dvû=»±ÅébET<¶›ÃBI”&›[´ä’"¬_<¿V¬E%[½»2K“¿cÌEü®@„Dh¤Ž[AøEx+4DÆÊ¢ÆêYC1!Fâ™Åš{¹jì=Û³¶ˆ¹ÁñÆV¤ÄKTÄp›FÛ¶LÁoܸ‡;=ÿ#=Õã¸IT´XDÇäDPªC sAH!¿cÆ7ä¯H‰ÈQ)G­B1\¹ASëBG©H\ȬC&$É5¹È’DÉ9É”dÉâXÉ–„IÀxɲI*-¬Ä ÙÇŒ”ÈU,Æq|¦ËA0ä³äêHyÿñÄÖ"C8|»8\¼§ŠÇ¡<” œC¨¼­÷ª’™¼I½|Œ²Mt·ÙC¯®dÀœ{=Û#¾ÒóJÑK^;ÄtTDYŽÚ¢YÓ BôG§ KÞ‹F÷'Z?̬KÍ3¯ü¬Äªž›9ÊäJÄlLh|L­äFÉÄÆ¿´ÆÈ|¾ÜTÅbÒ|ôÂ\Ó¿× Gì+Áäô6¤K£ ɵûĤ´Í×ÔÃQœ@‚H÷SÇvÜCÜ”ÇyKÓóL|4¶ò¬>í$ÄÙƒ¹ü¹{Œ+°ñH—SÎ>äIu[Ï"aͺÛI¥£{H(l“ÀIJÁìAŠŒBºËBu9P¦ºuJA@½ã9Nà…Ë >öaòyåY;9VÆà^Fâ &†r‚*€‚/ Ù]]¸+](‡ÆÅ‡,yx…Ë@ˆ%0 ˆÆ¥R¸\‚ð„)x†Å«žñ åÓ±£)_ÜMå0Y1•Aþ©nš€Rˆ&0&˜h‚X… X…蜞7H|Pƒ`è鞦h5ðèè½Ã–ð„Æ]Ýk_šr‡™~‰78’PÚ¦~´ÆjUÕê­nU˜ ;aolserver4-4.5.1/docs/intro/tcl2k/html/img014.gif0000644000175000017500000002273207363640502021200 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ  'ß¾ù>,”°É¿ 7DQ±>Æo•l‘²ÞË@á6µ%w¬N»,-7†<ú/àÅy§¼úqkÔ€ K­ÑôkÃŽs·ž½Zök×§)*ÖâðÛ´ÿ^šuq⪋3‡]šôqéÉ1kϨyigº A¯ÿ´m›zt炯+¾›|ûàî‘K¯N~½sûçÑ—Ï»~bˌŷÜt!‰&à}ü™×ß~—ž|¾¹·Ý„ uGÓwž•Eá†vèᇠ²daMbWO!¦¨âŠ,¶ˆÙˆaÙäYx(ºhã8æ¨ãJ0rVb†âí(äD)dÒ¥¡VþY5`JOŠ%“ó±Æá”z ˆedU‰äJ‰R“\’¶ i®)§š•k²™&jm"'{qÆ÷_›oÂÉæsBÖ^žzÞY'ž{ƶ˜žfˆe^fJô' ¦f(¤ôu)go]RЍgºù&Ÿ[õ¥Œ&.i¤O٪ꪬ¾µÙ«>’S d­Öjë­¸Š ëfIJ%f®À+ì°zÓ¬Ä&«ì²É U©¿þ”)³ÔV›ì´>9k"Fu醫¸Ö–k.ŽØö¤íŒ'v{î»ðÞšnKÿëBK+PóVvš¤ûö[¿‘bçït˜š7°¦ŽöÛž&\h¡ <­oqžïZ0¡ñ¶•/»z¦¯÷JÛñÉ( ù±Jõ"[Ôʇå[B †Š*Ì$Ù¼œÍÿâqP©v¤%Îã%Õr˜%£šru ò¼ÑË:}Q£GA]ÒÑ$»»ÝÌw%Gõ¿V¿<å×K³öHX“­ÒR¢„Í̵>r×M³Ütß͵ÝA¸0ƒn/h0m€'êg€bÚ§—]ëÙ"¥ýYÒ~9nùåWò…#«Mù]‰KcnúéDA’äܾŒúë°w¥z…›“(+ÒZÇ®ûîHÍþëìíºÎûðÄã«ùˆ½zž»ÅÚ÷|;ÓùÑ–RoýU¾{¼©@«ZýõàOv|íÉO¾üóH}ëú"ÙMóEs«Äþú¥‡ocãwW~ë©'Œ¸Œâ—n<2?ú}Ä}©[CÜ··æMoxÓû x¿ &!Û_ðúgÁzÐ8„‹¹g<æ= O$ƒg)ÈQp} ©_ÜÞ—·Ò0~ñs߇·Ú0‚9|H1"º‡¼ðƒ* !¬F¸¶Ê!ñ‰Ì^G¶×DЩ©OÚØ§þV1¦íEq]\SÆ<(šQhJŒKçÌ'¼3ºqxRtÿòÖÈ¿7ÚñŽn¡âçðÈÇ>VE~ ¤ ¯ÈAòC)$"ÉH–Õ.FÇÂ]#'IÉÈ=2V‘ÌZ%7ÉIî\’‰{ì¤()©ÈQšR”¥<¥*IùI:np•°dd*cIKAβ–¸<1Ò‡†˜¡!Špˆ2ŠÕÊÛi²'BØBDz,8Ä!8 2Í\Z³ExÈÃÚÍјʫ4E0MHÓ±ð|¥ è=†P‹ƒ'®,å‘x²“UZg߃?~šn€~!F9žµ[V$'8N hJs"^0§ B…˜ú`Arl8„ &;ô 8D Ú°bmF®yA•šqšèEŽÐ„ ¤C7hÅ^1}4C=¥€Ô 5  ú êØÐ‰”¥PíàS£JÕðMµªX%ÞU³ÊÕØÿmµ«`5ÝW 46ùèÇp,üqÈtÀ%è?éÂMÕê7·ªPBÏã"~ü÷Vé«… ¢Î~»B»ÊµIœÂ«Ç ’ Ö¬ òë]!ÉvMa‘Uád†YÍ‚­9™Ílо½EA6²¼é,tPû½û1¶E£ýPl/7Û\¾6¬¸EÙmsËÛwí¶·À­ÖoƒKÜf3“ᜌôÞö7Äœ`s…¿Eس²ÐAôéSá°Ë]æ’v€h%\Z¥°Jq~{˜Ãw'êÔyC#œw&ÀŒ½…U“{³©4òÊ•$tÒr)u]j¾{å©ßóŠa<ï}ÜàÏ5î´ðœ°yÕCa€Ð´ïlž„+¼WÏV¸…ƒrÞzñ9áÍ’XÅ!¦l‰ùMä²±¸8îØpsÌc[í¸Ç@VÕ ä"KÉ¿"ç‡â­ÒÑÈEž±F†ÜX([™#RödŸå2š¥¶e2˜³2f,žD¾›Ì2F¨<½œ¹õ±e.~ó+XF·­:k.v«ë¿÷ع°r†ëxç\¸´®Ðº‚°*Õ|6×óÊŽ ’9§ä:¦$šFv¨CvúÓ u§èi!–zjäEpªÜ¦é§-×ÃeDµz·¸^-ÂZÑÞý¢ªLFí>hÖî5ÂÚhÿG£1ÒÈö§RŽËeIz¹± ŽöF†hÃê­†œ–µ›Ì‹±ŸA7®Ó•ö|F±MR­%.£-bl,'ûÝ DJ»Ÿ&‘'Cäˆðëº+2ï•æÞû¦H¿÷ùïw|"—tÁ“}p§2{[¯¼ô‘Ýðˆ$|js‚0¯ÇÈkMÉ©¿ ï6º+>ñ‘ü!¯LÉ#}r‡¤|/5ǽj‹à;†7Çß@‘ :Ðվȷdˆó•{lÒ¶³±¥»gt+·¼!/N­Ÿž Úû€§®!f®nÀ¦«\ÞgW€Ù¯¬{}HTº²c.ÆÖŠWÛúM7zp}v#¥=ìö:ߊ3¶Vé/ºØÚpâÆÅ;³šêugÒ!Ùìc29ñA¾û–!>vÈ[¾+j¿¼æI’ùÍ{þwÿxïòçGOÈÐ;›ô¨_<&ŸÜÔ»¾(½ì]nzÇÏþöôª}ëqÏû”ľ÷¨ÿ=ðG/üá{¾øÆÏñ!òáB|@€ñILY÷K–ÈΩ ˜Óœ1gBOà„‡¤€ ÕB5õqN…² ÑCšü¬À .@€0|à0EØ·t¡ %M … èÕ  «@ ! ' ²à¼`£`€ú@Òò§N0!€ îMô7ûÒOú”jëTs!f+)8&ƒ4øNØñ‚ñvA“)s÷ýô‚öT6Í%w™1€‡*@4 õ—|Èׄ‰÷„PxvR8…MW…V¸rX˜…·…\Xp^ø…ùÿörB„b³oÕUfÓc†o#hvµ|Æ\eˆx%VKdȆ–ejèxHgu(ZÑ3/{(-N3ˆRe„•çfŒC ^ãgmÈZìÑYšµZ%‡åw~÷V6‰Ô“B‰|U&pµWÖ±‰œ˜‰f&Y”Ew˜/”q8¨ˆ±˜Ev¦X˜vX²Xb©E‹|âklõ$x†f¡‡ŠµŠ.FŠèŠÖõ†ÔЍ&‰«hŒ¦Èˆ`ôƒ–kÊxŠºxZÔèN©ˆŒ¥ÅY# ;“‹ ž˜×H‡Ë†Uaˆ—ð"£äŽTAÓ‡ç‚dbˆlþøieYFvd ù¹=Ö™c‘ÅuÃ%Y2`d¥–ÈŽònkX+­Xˆ.(aç†`Ùhk*)b#'n×8b€ç’&¶wÃmàèWÏ¥Z?Ãbçшè6Š–“;©/©øk0¦h4×WÝ&“•Å’E8ybWEã(Œg“ ““HÉ”C Œvkp'r/–g5÷'Ç`!G`)]ÙÅ•_ÉŒ0)c2¨–@y”*6FtI—^ÉZa™)úx5ˆ(•U#Žg¥÷á`X‰’=È—ÎU’qX_/V—nÙ`Y^'i1¥Øg+Ö’2†8Ú™09w™iZvé0ôE˜‚v•™f”Ÿ™hh©z ä8I‘eÿ3‘² \´Y›¼u›¸‰[º¹›`Õ›¾ÉUÈ7‡ÄYœÆyœÈ™œÊ¹œÌÙœÎùœÐÒ9ÔYÖyÅ隘*á‘Á‰2’G>ÛJÝ)tä’sßy=á©?ã©w97téÙAë™AíIláR?蟻3Ÿ"TŸÏ¦Ÿ~ÄŸK䟠‚$ jTiGXB©ãŠRÔ—D¹!} ¡zFú_ šˆ¡3冺v–³V“¥åkè”h=!š”Jk&$ml™]N™fÚ™¡Ü %ÿÄó„£:£J· &c t¡IÖ£Z4gáC˜A•TÒ ‹™=:J$Jú£Ë•ygŸõä’7¤6j ‰tØÆCÕ–mÙ&jf—•“¥Û¦¢Ãf–[¤¦<“šgÚb"ꦒaSF*i(„e—ž8§v*lVšHIž6Ú6á‰ÓÒCsÃ@¦æCbºs?´¨„‘’Ù¤ÙXp61ˆ5š™úŒ2h‡6˜u6„ŽÉšß%ª¦I&˜Ù¤Kùg°¨‘½Ã£¬—}L¤}$¤ÿ”F¤5:&¶ ²Jy»zfÝò1ÔFˆ=³‘ùH©ù†«I7«(¥†š¥wm@çj,Y–yªe2št'¢iš¦ïp¿•„Ê«¹¥0ø¤XŬŒ¬ç*¬½ÊGîºzðªwEgDD7¯¼S¯¯¨8·¯ùɯ–ã¯*q1AûJ°±c°4¯‡Á°vä°º ±˜&±oD±Îê£d‡±P¤±÷ °kA k®ø:²$[®UúŸ(+Ÿ*+z›q†x™²6foײXQ²+[ "Ö¡pɩЉ0å®Ókг7¥âù°'ÛvÆ]¿¦( ™8¹6ª r´H{lJËžL+²Yk=: ³µúµ÷¶§³<‰ƒGau1ÔZ¦,Áuù*±ÿfk{cKw#Ƨ³ƒor«s7ô·ZZj?wmquŸu»{w;$pK¶Uó²g»¸Ž ¶k· Š#ós¸@HªV·°—¸´z¹¦™ES§iR0†ºkÚu÷ ºð£@?ä¥@D»„ËC„«ucZ»æ)°°[r¢û¬Ëš¿(Ws‰„·`ñBšÛs;§¨¸ ©´»Ñ‹¤Ï;©¡°©¼ëD“>Ü[¤å’hµßk¤[KŸ]˲†¦Êº¢€*­+Ójç[e`G¥bKºÍs˜`¹’eÙ¾c)§×%¿õKd÷»´Û´™‰‚mSÀñX¹Š«¿¬;á¬üƒzÁ`˜Á<†ÜÁïœ ÜG"<ÂxTÂ&lG(œÂ‹°õÁ,l.ü Ã2Ì4\ÃŒ¿‘‹Ã<¶Â<ìA>üÃÄBìZ7\ÄÁEÄH >J¼ÄÖÓÄN¬UGż9ÅTü›V|Å™ÅZŒUPÜÅÄB‘ Á ÚÃÅ`HüžïoïÙð~Tð Ïð~ïenðñ /Úf]ñ$ÿ,ñNñ¯Âÿéÿñ-|ñ"þð$FŸñ)ÿÚ!ïî,ßò*ÿòý.ó´òqmóBNó#¯ó@Ìó(/„ó.fð ¾jVïhó\a‹ÊÀ³·W£è^ô9ôä[F߃ôg¡ôÊõš©mUOõê ’Q/’@óÓ­Võ!”ƒ§¼ÅKÞn©¾ æŽYh‘9÷È+^zox·¦`ƒåqX‹ñîÆû˜ÄÈ݇Wª‹Osƒÿfvÿ÷C {iŸóž[¶ø³]©a¼—^ÿ¿yI¿“ù–S¢y «ø§ß¦qºÀ© à­ úU™ìÊvã&ë­—XÏ‚­¯õüvù¹íäWÿÔwh"úžlˆö¨Y'Lÿ˜‚Gåî½]VÂüÍ¿š 7)èeø‹Ù™{ïû½ïÐÃöüÍï¾»@›êü„¯ß\?ü$ža¸ÿ™È®À6þ—¡y_‚¬ôŸû¡O >X¡B‚:<Ȱ!D‚>lx£Æˆ7^”˜QdÇŽ z$™RcÈŒY.D)áK™]štHó#Gž=}þhKŸP¢C 5’4©>#L6ØIŸT U­eY¢V® »æüºsäÈ›*¿êœ¨uìͳÏnÅiöíʹ5SÖuÛÖnÉ®%ýÖì 8,ZŒzéÊ û0Ï·1sÝ›–¦^¶p¯…K%á«}”©Ò¦¥Ÿ”JÕójÖ­]¿þÉölÚµm߯[÷nÞ½}×|´ÒÓ¦£Ný\ygÃË?‡]útêÕq MÚôvÔÈ­^üxòåÍŸÏ]´öâN«F_þ|úõí߯¯ÿ¾({îP‘ÃÇ/@$°@ ÔÏ(þÚ{ï@„0B '´-A¤HkÏ¿Ô(ä°C?ñ> ‡[ª¿î 1EWd±ÅÙF\»]¤±FodF MœG2Hût$ŽÇÿ„D2I%—|ŽÈ<’I)§¤²Ê«œ4QCï¬ä²K/—Ä2ÿ$³L3] ÓÈ ŸsìL7ßü±MåÒ„rMçä„3O=UÄó7:eŒòÎ=%tÅ>}ûó´—;´PG °QÞ5.PF}rã LõÙRO?ýNÒÝ(uÏRåë!76]TW_½”:RµDñ7T5j•ÓTaåµWÛDÕmÖ1ÙÄW$võ5Ye™«NØEO]6Zi}6=Ñ„‹QQS“«vZo¿e¬ÙkÿÇͶR;c7]u¯êö6g·µu]yç WÖq³Û±Î-Ñ¥·ßyÛ­ðÞõòô\h¡“M¬Ùþàñf×aÆ$ö76q,·Tƒ¹¥í²À$ëÓ«>N ¦“29e¾žIå‡ ó 2”Á:™æ‰b«ye¾Léc™[†YኽXà ‹Ô·Vjd¸¬*Ëé—£î9±ÉšÆù# 9²–7¢:/°=º¬æ²Â:²¡q£¶w7޶¨©v)æ§ÉËk›ñV[ëFéλoLÒ»p¾{šûî¯÷R+l´Å‚xmfíŘ`má^úÓÈáÜ\òªÚ~íí}ö¼ôdAwMt¥{C½PËÿLïµuÖTGvÛa•}5Ú‰½ÃÜ{oí÷ÎvaIK(¡ÀÎuÛ|y˜ VÑeæØ$*¾17»ä&‡yÇ^Êç—= &ë˜Ö´".P#4l! iXFüåoj¤¢dv8kî ”Ùcô‡¶“Að‡Í<Ï3yMÞPÌ„=´J1Ùˆ°~ÌTëØµ’ÝЈø´ã"嘲«ÁÓ’ÛX÷F8I!’‘}ªá ͨÂ~ºÑ›k©â EDŠŒ‘Q¨HÛÙ7e:´žÅÖ'5Ja&©¥7º©K SrÉÔ{¼ÓiP—$OŽÐs7DjRëƒÔ‹•yJ…*˜ú™,†PLÏ¢eTµJ£©Ä©;½«ÂºU²¢’§øBW÷R\± YÈ*k\eçÓÕ TU¢XÝå@r•+UÉÕ¯K=ëÀÒz9šJ“'b=Ö_Kº ä«l[ld!ÔØªjQ„x­©d5+ Ê>ö6”ÝlhƒØýøt¢¬mjIZ™³†UmlÑÓY»º^™•mnÃCÿÛÊ ”k=ªn…+Þ‚ð®·…íp•;âzÒ·3îS—;Ýè47¢¶Å\r©»Ý¼BdzœänxµëÝÚ>÷§$oz!ÛÉëš÷´YUo|ÆZË^¹l•o~¿H_«ª©°øuKH…†¸ÍÄLÀp4°~qÇßãfÀ9ÌAa†—pŠƒ³ :_–H†.DÁ ²nLÝûÚ[ø‡aCàJ+lÇ Ÿ8p$åÛd>¬9c÷¿ÁÅäE·’âõ8À†ñâxh“»*Ä=ñ}qŒ#Й«5N²ƒ—ÌÕS:ÙuPÞ"a£ V+wy%X¾¬’¥ëe2›X:ß­M“­³Ñ2CêÈhÍòo¿·2cJ'UˆeM©QÝàY¯m~ЛgèÎÙÂ3© G†5ˆÁUWÇÊÔª$-éžÄO£–nߥÿÉÆnöd¯o´òÀl_)çæ1§×OCzÒ|£ž¯¹ÑŽÊOŸšr«±B= Aÿ—6Ê76õ;wbÒB¸XcåÔjd½Fóñ™ÏµÞ'Pðìè]Û§×­ýõ–×{#6W{O×®¯µýYo[ÜýMš¡Ë­às7Ø\^7»G-nuŸ©Ûñ®Q»mß<Ýí|rºZëýöíê;‡Ûs§ûtíþò÷v7ïz»–ñÐxþûï¾ ¼œ¡þe‡W²9n¼cšwõûhïa.5¼}Œj—QpÃfôæ9q«MN†¯˜K¿DÖ>~CÀœœ>”Àë€@ñ›À |‘ ¸A0F€„IX†oÐEY‚ƾãkPh‹8H{Јè‚‹˜"8ˆ‚@}0s¬Oè>˜Ç0À„WüGrˆ*0}“4`‡“ŒÈƒˆ‚0tX…PŠ4SЊˆˆÌH¤x@Gƒ ЀÇÖ[z É0THIšD¨4Ѓ †] …0)¨È0-€J—ŒI”Ä¡T°„J¨ƒ9À€¨€¨„nÿ‰¦/8H ÉRJjò1t*(‰s $iŽçK»zù&Æô¼Æä=É£ ¯°=XjºÝÈp ƒÍzâ…[Y Ê”•>—2 8„ÌÏÿ/0Ï@”@–HšDš HšP›LžQŸRŸ\¥]­\±O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}ßÇ'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVeÿg`0°–ƒ„{Ⱥ?ëÎèÏòÓôÖ õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3ÿÿõà=øÞGõâJúàIøãVøå\úåføçkøé{ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²¾¾¾€Ê—σ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá¯×à²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øë„ûìúî›úñ¦üñµÉÌÇÈÌÛ×××ÞÞÞÁÏåÏÈÿÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕûòÂûóËüúÕüøÛæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûåþúêóóôôõûñûýù÷þýýóùùù!ùõ,XÂ@ÿ™XIÁƒAÕSX¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb®z/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ (ß¾ùBüQðC ;DÜQqVÇz#KÞ ·i.¹cuÚe 91ãÂó6„LZôhÓ‹MîÜy£ãÒ€«F]ï³ìØ ³žûtlØ©{׿;¸ñÃÄӞ̼ùÆÊK1ÓM¸yeèë¿i+¾><{oàÁ±+ÿÇýõòÜÂ}ë.¾5Fö绋WÏ}¼`ØóÃ×ï~¼?ýÐÎ(àEÐÑ$]fe ¨à‚ 6èàƒZ&áebMWOf¨á†vxU5Uˆ`u–hâ‰(¦˜ˆaÙ”uª(ãŒ4Ö¸ ‹ºha‚fÅg’#É€')z­åwä‰F~¢)iãP8H)Iyj³!wh_z™Ú„ 9œròqÇåzåæ™-×eœäe7Q”û-iz`º §›Úõ%çzhîe'šfŠég¡R®Ùç” U)â•$Bj©Œ>&zé¦%Iªãˆ1r*ꨤ–’§7ú£©¬‚”^«°¢J…*T;Vêj¡ÅÁÙž ¼.úh¬‘½ ì°YÍj!Œ««laË6[ì„–Y)•­NÞù°[b뫳jiËí·>ûâ…É¥)¸gy‹îº(ÿ‰[k¨·z¶mU)ÔY½ö•oHø¦ðëŸq²+ðOîªZ’¶ƒZÔo= ÷»oEûÛ¾ ÛkñÃ],ñÄ;´0Çc´oÃGœÉ&WìoÇC„±˜fª;ðÌL)¼ÕÒlªÌ:÷Œ‘ÍÓâìÏ>§HtÑH»mt“]nÒ– uÒ@“EíÔXg]tÕš ­µr„Ýd×SvÙm6f¯í6Úl·-7ÙhÏwÛlç7Ý|÷í÷߀.øà„nøáˆ'®øâŒ7îøã†K­×È~½e(¡9æœsŽ×æšwŽyèž‹n:韛>úæ«k:é¢;ìª×nûí¸ÿç®ûî¼÷îûïÀ/üðÄß.yJ”“kù^Å7ß9 Â×s;ô!To½õ˜_}öÚcJ÷Õ;/þøä—oþùãßîÒ6mµ×Ë׆~ðÐcNBý»Ko;ôìŽ]öåñßuæGÀð€ÌúN’<,ÅM ,]'X<HOzˆÆê(ÈÁôÅ®ƒ ÜÝMÒÀ«=0JµÉHzF( P`00Œa È’¤„ð[^”|_øÐ‡=ì!HD ñ‡xAbXD"&q‰CL"_šHÅ*ZñŠM¼‚C\˜9zñK‚¢a·ª‚C1.é[\Ì gx¦¼àIW½j£ ͸%2²/DŸƒºqÅ­4®‘{dËERÆ@¾©/üc4 )H;‚HZïc$ÀœåGE,^{i‹œÃ$GÞ’]“ä¹LUÉ?æ’Â!ϼô¢›6¦0“ß ³éZFêŽ-J•9ÊR•r§¼SÀ 4Ę4²eÍp™#]:—Ê”Ñ/¿(É´D³#ÿ…4$îÇÍnzó›à §8ÇIÎršóœèL§:×ÉÎvºóðŒ§<ç)Îk¾…™ ¬œ6¹ÈjúÓ:ž„N>•·OK ““ùçíù|º/”¼ä'˜ËWÖ±•¯Œ¥3êJ„Æ¢œle5úQ‘Rt1 •åoRH(”ÊòM&eJ‹ÆPd3j4¥kÊÓK&å¦ •hO‡’š®È¡y|fAuJÔ¦rĨ?Cª3#Qƒ:õªï èÒê@3æ˜X kb´ ®š0~_¥¦X×êQ¤•Ži•![çêÒŸJ•V[*XéÊV¨Fè‘Õ'_K؆$Ã!ƒhÈ ‡0£¡€MÚ*U{‚2D$%ƒCZP´ !Ÿ-¬h¹5ˆAl`j¸ed§ QŠpÖŸmg[@ ©Ò¢Û9eJª¨™ÚHX’ ãK_úªÛf5˜=¨ÏV# cÑPß[-r¸À.¨g=;‘3È6ñB Z`ŽzÌ`qÁ62…˜@õ(Â…nÜå©£-jOüº. t"Tp(pŽzôêñŒz,¸{ C=êp 9ÔCÂx°Ã$2ÝüzøÃé0ˆGLbf毻,±ŠK,â»x°ÿ-~±Œ×ã Å,PÞÉÓ}ˆ”§45‰?úÙ ÑV3(à&g<ž1rz $#çZmzr~¶ãÆûxO3nIEâžÛàØÉ@öO˜Çì›ãtÙUE~²µ–ì¤øPÙ[Bó›sEæ0ÏYÍes–Ãu×ctFgög*µCgýêyÏ=Ù2¢íOE3úÑt4¤'MCISúÒ_³´¹Z F!/¹L¼*òœÜêASY>H’2b´ûú»âô¼Ötf#9ªÓŽÚ“mðÄêý|æ†Zó¡ÇVó1VšöË a}(˜^KQ›¼1´S °9%÷OÖ¶Vo3µìIšG#(ìm]Ãtä[W»ÙØ~¿v°lv›¸²þ—¹' «dcúÞH³·—ŸÄï~ûû߸ÀNð‚üàÇ7‡ô}RmÚÝó.1n×Õ¢X©A 6¨yí9¶©—t8Å•Òçqu5g#hÊÄð¶Š»KÖŽyW9Z‘¯œJ%×Ón¾sž ¨å×>d¡)B±ŠqÌc»ÈÈ$Vô¦']"N?ºÔî²½,cI:Õ·Nô§OéF¿ØÇ~hqûÖçÍú¸Ñžq¶HíÃu;—åþÿóœçµít7tÞ™÷½û]F}ÂOøÂþðˆO¼âÏøÆ³š(íBHùÊ[þò˜Ï<îlÎa»§§š½èGOúÒ;ó‰<»P§…Ö«Ns`CûνŽö¯—=ôðw?ý‰èœïU‡?ÌÁð{°³Àó²güPh0¤›F(X „¢ø¦Ï¾ö)z¥YÜÏ'§áä·Oþò›ÿüèëþCT¿®¼ ôôãû-?þù§Ÿ¬2k-òQMS®n§~Á~èÒ¢ò€„vØ.È)Cr·€&ÖL7Y8E ýä+µB ¥JHÂÅ[qw‚•\„Ôöøõg 5‚-”HLt6‚+e[®guv,5n±äS÷E ø-¸)nœ"ƒFAEÈ-Gx)I€--/~'Ä„Î1…l焞‡q1ˆ.\¨€UÈ4’ÕZ8%TJøw¢â…ßgrg¥Cjˆ\kGm Ȇ↟t…qÈsˆ‡Ë¢‡ÿŇû÷5q•€€¨,‚¸U„(J˜ˆÃ²ˆeÕˆUUƒ‰eØ>g(XACxÑj´XDELDNtŠUÄDW$EEt‰û•‰xÄZœW芭"‰ùG‰z¥V¶+¸è‚›ƒ´hU½+¿h…Áˆ…hU‹ÅH*Çh†²(Œ^ÅŒÍØ†°xbàׇոUÁôà‰ 7 `†ð–`S_ˆ³Õ - [²õ²e].Pð`]cZõ0[×õIÐ@]ÙÅÙ …° #0€M눆×åYÙeéØÐ ®p Q .µàÀÐ{¦ ‘õ žuYU`%° ÙYi9¨‚> (&kKX‡!uƒ(e‡Ê¥Rq§­„×¶RZÈ wxš: @ZÉO¸•^Yq{˜ŒÚø•dÉ•9‹e™–‘Ñ•jÙ–Zv–Òè–rI•p©Œsy—R—c‰—|YÿOÈoÁ…®áìA'‡$X6˜QYg}Yú·_‚ù‘ùVƘc–$PBjRópù,o¨swÑdxf™ýñkæÁf£ig_&f†Â&C7š˜‰-]vg¥¹šyæàq›·I›º™›®ø—£›§›dvštFd¢94O’š`V˜”©ddbkiFœ¼¹›Ó©šPÆšœ™wÀ©.´™›¾y™¶‰tÈ™„yd̹¯Yœí!g´&eéùž°‰žâ™½È–k¡ž<õpú©˜ÅˆŸÝ2™Zóx‡©œ•ù›zYˆ¹ |ö™wÇ  y ¡*¡úyš¡oy¡`¨¡º>ÊŽ:¢74¡$z¢Þ%¢‰¢,zO*Š–’) 2$›¦mEg¥¡g㙇8Ê“àoý .ÝÙí¦šì†nFÊl¡ÖšfÆf§¦¤~’mgtnëq€¢n}BhòÆlµéšyfnß¶n\JšÿRm䆥a:¦Ã2¤G#š·Fl3z¥%¦6§g*¦Rzléf˜ó±+4'o‰Ij§3 §Xj§ œ‡ 3²¹[zJ,úTÅ5sÞæi”ŠcD–-¨æj²†©`úiJönêqXv.¼‘™qvª§©k9êj6 ŸZ¦ê!§v «f×*‘ª¡Ü¦–ÿ¹Ú¢sÙ«¾ê–}·˜¬ù¢q94_I¬Û8¬¯*tЪ©²š_ÌZÎ:¥{Jor”­£ZsÆê¢av¹†[Y­Íx­åú­®¸¢˜äpXkæJ3ózŸ&J‚£š©2÷¥H­…U¯¶ˆ®ðº¤‚ªfß °’§®êˆ¬ãªB˪°GŰ{™I^‰°—(°/‡‚ôâu,quá±#²%1Õ­ ‰»J%‹ud§2"KuK7v1 1VÇt5Û²Ñ2"“u7‹tEG³Pçub'v,LŽJ‡K)Û/[uH2jµs—´!v¯x§•'›ˆK»Y ˆ[[]‹‡[ë§Óªpaˆÿ_ÛŒgûwi[ŒkëwÀJµZ·r‹tË*y«·tÓ|óã·“6i£6nc7“¸Š»¸ŒÛ¸Žû¸¹Ï¨‰â:±Sƒ­×z‘«7k³¹žû¹ º¢;º¤9×hÙ¨ Yó:©s:©S²g;­ë;´»öw»¸‹~“‹í £â—»À¼Â«}»‹p¨ºXc»Ã»¼ÌÛ¼T¼¨{¼¢ôAçS{¸S?ÜT;À‡9Á‡9ú¢ƒ}œ}¹¦C¾Î›¾Ã ½ÉK"4{”{±ûA¤ƒ½÷Ó;Ãg:ØÇÏ—|ªc¾Î7¾°C}Ö§¾|~ì«‹ wÀ ÜÀ¬@§Û¾©ÚÔÊ›Á¯Á †òë?ñ;Â$ìÀÜEžƒ: ¿l{§c{lÀ ,–È{¹o«cès3\¹5 5($‚ºE\4’ÃB|Ã(Ñ+F|µ$'±=œ4¦1ŠPÅR<ÅT\ÅQ¬E AÄ7·Ã½›¬YØò`ÅTüDb\Æf<ÅX|A]DŒ¤‚LQãÁ4,JI|SXeXjr*  ÅÅ©+ÇbHƒ{E†Dÿhµa.9 Ñ Ñ?¸ÑzçV„<ŒLÒš –3MÍÐ!]¤¬­ðš‚¸­À\§<&\#…QjG¬Œ[KJÊ¥”;VÔ,åkµc4}Éÿ͈Ðã,Ñ>¨Ò*ÑÑMŒ4•ÜV­XíˆÏLÕ]í½ÈRmÉc½Ò&ÍÉ/=Õi_ÑàÖ“tÆU¬ŠbÜC×gÍÕq€Ø‚=Ø„]؆}؈؂½×e-ÉiÖoÍÐËÓÙ‘Ý„“˕җÙO=‰QýØœÝÙæ’ÙÅüͼLÚdýÙ¹Ú8Úª½Ú, Õ.Ý×± צĮ́mÙ·ý|-ÚÝÛ²½ÖmÖèxÈÜʽÜÌÝÜÎíÜ !± ñ q·Â=b‰Uƒ€6 ÛMÇZ܎݉È¥%# làpÝ']²e&Ñ ò#è!KÐaÚÕ%`ßõ ±eÞsÕ¥‘j°.4Þÿ-=Ï&Tñ¨ßÒ¦ÉÛöL,šž0n Ÿ°MNÛ?Uù ²ÕY>óPá-@ ùy‚lÂ%¿"Ì:¾)®œR3‡”3%ÌF¹²LY”6ØÎJ.xÛð@Ðp ð ZäMÙôÈY1^R×ÅA ½ÐÀàÝàB° ©° õ°óZÝàÿ8«0çÚ…œϿ܃N9ÒBéãD”!ˆäB\žƒngÃEä@„=cä#‘ FÁ¶péP±`QaVµl­î%;‰à2ðQàQ€@'ð F±@²^'Ps Ã` ‡&ÄÐy.êx9+ãÒ-ì É"/hììÖŠK˾ÏÎî•ʌ̞ÕÓ°ÐníÒžíɾíÑxíÞ.—ÕîÝ>îÍ î],îèΫêîgìÞîeYîë~îòn¯íÇ~ï(ûîÅnïü~±þn!ñðs;ð™Qðo·O ïŒà¬"AÚÛÿôïßËÉJϧÂÖkÉɧʤ[1ñdYñÿ¾ïþ9 $ñ¥keh±i oòñ’Š0.ÿ¹bšÓɪ¦–ó?Úò“ŠšeÇœ¬™&;gFjÂIžüÊm¡üŸ _$‰Â›P–c9Îq¶lœ³JŠê¥Ko+„ª†ilõ‰ž¾É<Ÿc]êöh¨b;õ9Qõ?òñeÆŸô¹ö׉œëôñ ÄI¦¤é÷ÍÙ÷¶©ôuv°ö¹øi4Ÿð6ŸòÏk¾¶£^?Ÿ[ò"ö‚er?øMšœŠžˆoj]zø¨/õùÎí(ø‡©šh™Ÿú„o Î)údßf‚¯÷ÿ«ÏžÃ9ûªïžÁôZK÷a÷£)GøÄ¯£§¯ûh&jÆ_û”?üoûÚ¿ý»ïùÚùø”ù?ù°ßùo÷Àý§ªù‡jžšIü¿óöAÎQzþ°Ú$«ššl¿÷òùõQOà@‚ D˜PáB† >„QâDŠ檇QcFŽ™|üX‰H’#‚ª‡ÒâB-]¾l)ÐåÁ™2kÖ¬‡Ó&€‚:gÂ4¨s§Ðœ1YEx&ÑL.uJpiϘ@i*åIÕ(Ñ—;›"ÊëJ²eÍžE›VíÊm;Š9RnÉ(U®Å›·hV½}ýþÍ‹T¡à´„FœXñZ·šá‚¤;÷dÊÅ•FµœY³E¨†;ó]ùyóhÒ¥;vwî꺔M¿†[ölÚµmß~‹úqHÖ&)ßÅ\øpâÅG¬{£êÈ$'G]útêÕ­›VΑyïÖЯ^üxòsŸßÞüyyöíÝ¿‡¿9»Ç¸Í}ÛŸ_ÿ~þýÎß»û\ó¯@D°:Ócm½„0B Kÿ[°>îœ0C 7ä°¬ !»ð·G$±DÍËŽAº0<±E_äïCÞÔFoÄ1<ì.Gr¸íë1H#DR¾óR³Fü’„2J)ñ2Ä'§Ä2K-ªÒIù3ì¬0ÿêJ­2·ʲ1Ñ4¨ËkœíL²[sNÐSê«ÐêÜëNѤê,©;§ãs/³>Ãl«@Ù\½&ß¼R69÷¤*°Aý³Ð£. ëR°Õ”ºBC•ˆTEƒºtJ7W„/ÌËJ0¨ªÏŸjªL\µ²ÊV¬ä\ÔWE{¥µ×]µ Ù«’­Õ¯ˆ-6O=sÅ)Xk sªE]–Wi=ÿ‹¨`‹‚qUÉZ-ŒÛM§%wZp™e·ÝwGõ“§yA;µÙv÷­ó]x»…7ÓpgíVS•Ý—Y:í5\}úÔYR¦ØÝkŽ×FsC-‚ºØbg)–uàYé­Ñ„‡ý8âGF¸ß–SÍ÷)¾Ô¥6^—EFÖß…9͘܉.8ÕýÅqã½K×hˆ>Úáf‰VØh”{¶_©ŸfWf˜×ôÙÓ›~c®W{êz+®ùe€ï…ˆjµa5»â•.ò5±Žyæ®J~V[²…ûd­76íœQÝUà†þØí³#¶äÄq½óz'Õ™à¡×uk€©üîF—{”ÕH eÝ!°o]?¼YŒ½vA϶ýÀÙ;νwß;Ü}õ߇'ÿÂà¿,>yåû;žé埇ž¼æ£§¾zñ¦/ vë‹Ó~û±ŸÓûﺟDðC+ß:òÓçð|ÎØþݯÈéÃaTù'Z 駈§–õ«O5ÎjþsËu:í¤î\ MÞ&:=UEqT K2è"òo0} Xùæ¶þí¯„4PK…ÂᜅÌc }@ä%ç­ð…¸qá eÉvõÓámrDø¨0"C$"¦’¸!#Æm‰qzb†š²-—‰¢L²ø?ªèÈbPXÀ…ñíoay"·¨£.:cô ¿6B~]ЂL¢×ø)&b´JÖΆH©lQ{´ÿNŸ¢&D²‘ºkã !Æ&Zk<ä#¥£H,j23™ôäq8©ÁPV”¥$Î(«ˆJK²r?ªüc,µ˜“ؤ ‡±åYr¹–]¤—+ù%-…éHYº²ˆ‘œÑ$kxD<Î-!¶¼%4 Mi.„š¾Ìe6µyK…H³šßÜ%5)Nn2¤—Þ§8­©Îz\sšä,';Ly鯙Æt,“rϪ™3žÜ”ç:«ÙÎ äœåDÈA ZÐ…$ þ|ç<êNˆ:¡ Õ&A̶5eŸøÖõnx‹Þ µçEozÕ»^ö¶×½ï…o|å;_úÖ×¾÷Åo~õ»_þö׿ÿeog#B^ µ¤nzë¡^@`Áë]ðƒõ+a ;ØÂ>¯„¼awØÃqˆE¼^C„À?jÉ´ … Ã/v°†1laøÁ7ްŒk¬` ÏXÃ#r…ãHЈN´¡5]g@·ä̈>ôš/-iR—ÚÔ§Fu£õü%±·­Ãtªe=kZ×ÚÖ·^ôªRéÅ׿v°…=ìHëZ!¼¶‘¯eM9×ãÌÌ&v´¥=íS;!Ȇ‘²ÁŒÞ2§Úb&Áy× m”»ÍÎ6ó·Caîuû¹ÜêsÀLn@³›Ú÷Æ÷¯­l¿¨Ó€2™;-f_ûÙËø¦×ýåwÏ[Ì€x˜Ñ o†‡|ørm DQCÌòEšqmçÛä''õ¾ÒoZ y3¡ žé„×{á_®‡½ÁŒ/óça†·º£ñPh<Ì÷x˜AÞ„>Ì*EB1 ”WÝꪦÿt«£ûjÖ•üÔäÖyšÑ]f¡'Ýè`ŽFÚ+^ô/'½èˆžÆÚ¯>wºÃYåmÒ:I‹çuSýÍ~3àë>xÂÛúîay‹/Þê,~ ‰?QKÞ=yÊWÞò—Ç|æ5¿yÎwÞó—w¶³ðyÒ—Þô§G}êU¿zÖ«Þñ(zîHó6¼˜ÞÖ$½¡Ýnû”ó룼‰jhP{ÚУŽ9ß}ÏðÜ`÷ƒŽyô—çÙøÓuÖµ+W8ÚnøÇ×t¨«üê+ß÷¸…èŸO~âßüاù¦ jøÿYû±?¬«™¼\þ÷ßÿÌM?òû¿$À4ÀD@•¾¼›½ßÙ¬ ÿ@çK» œÀÈz=’¡ÝÒ¿½‹£² ¡ ÜŒ¤ÀÄ LÁ͸Àà+>YAÜ Á¬ÀÆjAdªÜyÀ¹‚˜AŒ ¼?Ý€.½#ž­ðð…%\–HB%TÂ'„Â&ŒB&t—HÂ&dÂ-äÂ*ÜÂ(„B/äÂ1$Ã24Ã3ô…ˆ¤Á@RÁ«ºÁí³,®c£1tÂ'¤Â<¼B<”Â0ÔÃ, D0D>´B*DÃDTÄ3TÃæ´ $ZŠÁ×X¨D‰CüÓÀ­Û¿aC´Á!l”"l@ßÙÁ ùD ä{Š¢L$BÙËAï›DéHÅ„,“Ò¢Yœ0WEXä®Ú9Å ©EH Å”ÃÖâ@OT¿GBcÔÄíê>`ÔEäÆ $¦Á™F-áÿEÇ ÅX”FeÔ=f,F%9FÚJF©Æf$Çgä>éŠ`”tt¢Eû¦º™ÚØFGÉ?N<Ç‘ǽò($ªÄ~1Ž7¼GaÊÇYRAô“[œÄ}d’~4BÚËFãH­€x”Š|‹nüÅwÌÈâØÈ )IFrÆW´ÈRì„“$%º9HBÉE†ì$y ­›¤Ç£Ò D–ôF’G B%z! l ¡IXKÉáI¾RÊ „FwtÊ¢|Dk´ ±qC…YÈ¿Ÿ§ QäF_ŒF¢DÇeÝÑéQùtPíÎNáÉÂ9Ì •”ÅËê¤= Pª§[áN»aRÍÒÍÑòÌÒÙÒ ÕM)ÒÌJÌ2Õª4 #ÜÉ™\R7ÕF'LS#HCÑ Ø¹ÌÌ,H…tKL-žä'ˆ|ÓBbÅÌÔSȺRA-P9PµÓ/GíL:ý*2•ÔüüSK-PLõŒL M%PmÄÔîÕëUHõÒSÕTJ½ÑQÍUEVÔ•ìÅJ…U,‘U[4UZTÝ»RõUòVTÉÖø±Õ²ÄUU-LŸLVõqUÜtÖVÖ ÖcEˆEôÖoW2¼V>­ $£D°Fp>Ü‘‰oÍC-ôB0Ä1|W4¼B.×µ s5Jvu‰@v!#]¨…ZÀánà‡0…S(ÜÓúÓ;=¬ÉÑš;6T<ÕÌÃ\Ô$ÈZ9£Hæd¸ŒØ.+å¼8x(¶P`…ã÷•†ž`‡‚ ‚Î"X\І)(^¨‡xpäz † ((`ø¤„äÐjÈÌdQ4•fk^ÔN~æH 1zãk¼f$¡RÛP¡ ãE6ˆ¦`„†Þz€`…VàˆP‡nZ`#`…Y`xç±äSn.ÿªJ–DŒ¹N2±fFÝLžfS%Ô®9ègÈ|\èÍTÓ¼jeˆ°0Ø‚4Ø nà"0ˆ0(`(‡÷­‡1(x …üÕ#ˆ)pˆ÷•‡TÈ_8/ —héE—jù• ¹ä+åN„†Q2jêh¾¬èb¡äS¶´P", €  ‚ˆ‚'  ȆW €0ë (ëz €z:†bˆk9ˆëu~ëh‡ˆW>b hT ÔGâœÂð Pk ' ‚·X X8·¦l È:¨‡:8ÌÆl¸®½>_²eQxßæ)Ž, xpìˆÐ9¸¶½FmžEÝÙV­Ú¶mÒ€;aolserver4-4.5.1/docs/intro/tcl2k/html/img016.gif0000644000175000017500000002020307363640502021171 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyÝ’äÛðߎ&ö‹×ábÇ»>9ùb北kF ·)-¹cuÚmù¸tä½§3+>m¸0ä—Ëf½ÚµêÖ¯S³žl6m|³]ׯýš8cáÀ Ûþ¸rsæ¿-ÆŽ^|³uµ—‚¦›ptÊÃÁ'ÿWüaóËÍWŸ˜}zÌÔ××Üûøóô÷—è>wcçèÙ§œ€„q¤šzÃ]§ YÙÑ´]he-(á„Vhá…,5X“XÜÕņ †(âˆ$n¦aX6…Ö݇%¶èâ‹0Ƹ҉Ÿq¡w2æ¨ãŽ<æHãƒtE˜m¼õŸn#QW`xÈõÈjN (]“îÅ·{M²´d?Ú$Ž(‘g ‘Ž] Ù“f&7߀X>y¤oüõ&¦š†Ñ¹fVÚiænÈ!Égš{(^El2Y§žWFF&ý!jçŸgNyhœmê éAÇd¦Th]—)v(d”¤ªcž¥ZˆêV Þt#‹‚­¦ ßQŠfi™­[É:fHo¸–®Wm™ªKž[c¨¯J¶¨‘pFê_³­á èxsR‹¤¥zåY+šØªÇ§·¾¢ )‘¸þw·ŒÚºí¦Âõ§é·žÆ‰ê¥â5:©³À:Ù*T¢‚9lUçºð¿‹¸o‡+Žhå›Få;í³…VZðÄ÷t°Š*‹îºi^‹ïrÜ’‹ µÌÖén»ÒNËpÅ,·lÒÅýÂêòÌ4×<þ1ÌÉÚ¬óÎ<óˆó—2÷,ôÐDKø³Tþ­ôÒL3h¬g@"tÓTWmõPG“•ôÕ\wí5IY‹6uIÂbäi­Ð*öð®? r ~Eº°nÐÒ›¶Ç ºývÞ‡Ú½Þ½ÞK_Ý%WG÷Ú_ŸvÂ\­,òã…ci.¡ƒã¸iÇQê,¢•Z­µØnþ¬}zgKøÆkÎ.‘¦Þ)xŸ{;š8ÖOkç¥Ô³ç®ûî-ž1ïÀŸ¸ï£ oüñE¿5òÌ7ß²òc;/ýô¥BOýõاj}öÜw/ãöÞ‡/~ˆàoþù –þúìcW»ƒ·k}ûô×”úöç¯Qøïïÿÿzÿ߆4ð€)éÈÀŒ(°ŒàC(Á 2‚Ì 1¨Áæƒ !û@(ÂŽ„&L!÷P¨ÂN….Œ!ò`(Æ6ÌáĈá=4¤ A„C±v$ZˆÈ.Bp‡” &(AC¤¨Ã* Æw¸ÀÀ >QR,AKðŠ ÙFmy£p6¶ÆÍ¥ìT{ñH¶ÊDÇ,3ì O¿&› @ãhÆ'Ãs˜À"0>žʼntAŒ)pÈBPsàcÔŒ3àC˜mX$bD+:³iÍ|¦4‰ÍiZsgÕ¼¦6gÿ–Ímz“bݼ³P&­àL)b#§ÈI è˜.pnã[‘Þs6sÍipƒÂç8˯vÊiP$è9QS¨Y0œÝTæ$·PøØSœ ­Dͦ­oéÇœÆ;å³Êm”o :—FÇÔ©r9¬ý¦J«'@¹ª€+)5[z¬—âN¦8åYJsÊSí´§@5M£&?•ÉcöÜän¨’ŠNJþW‘¢Õ¬ò¼ómt‹]º¨JÎ¥Jî6I•×Ýb'¬m¥óRP+º¤J­vFnŠØ|¨º Ÿ†Id¯ûØSí»ŽÊ§<&ëÓÚÂ·Š† ekª_g£GĶίyu£oÞ³×ñ‡!­móÜSá&Ù{©MSžãX™³VÎ 5~b ªjÁyZÞT+h5ë?ñ3OÇÑvtl场Jžjm‰cüŒ°ßéøÇ%Â1‡l½!ùÈJá1ÆŠ¬UÎj3ØåŠEe)#™*B.S+ea{”Ãì}°šfØÎŠùrTVªV:æç¢9ÌÓ•Ý™þ¤­­:Y‚F>Õƒ—á+QÉ1ó³ ÓèúÐmÉ3¢ý²BÔÑvZQ˸H[Z+о´¦èè×núÓIž´k¹ êR%Ó¦N5M] âG«úÕõv ëZ'°Ó¤¶µ®Á†kZïú×]ìu¥Mì·ÛÇÅN6FP­ìCò3»Ù‚~6´¯,íi¹ÚÖ2¶³ýãms;ÇÞþvÃ-î“»Ü>7ºSXˆ{8DxA`€?<Á ƈˆQŒã!MЄ‡ @‡Ìñ1FD2\ É"¹n À€.@0|àèS€È(*Ò(wÈ4P‘ iH&H,¢‹„‚äø˜A q|4aâ!0…áHñ•ü0hD#V ËF‚ÁéLoÒçˆt;V=éÚp»ÜÆsmQXï S0ƒä â–V7Úyªöµã´ín)Üã®Ò¹ÓÝ›v¿»6ó®wkÿfZ \åëžø¶"¹)3hêÌÑÀÛëË.TtŸ¤â¥.Q'uqBõ[ƃt¢‡üÍäïÔ—Íòj<ê'k_‰þ ¯ÒÝüsä û4–÷óó„*HûQÛ4÷ië>_Â,WIõæ­(›ªÄúÔϲr=dï{…â¾ö èo5?Rí vwV.ä[ˆcá{wõ ³~l:ÎcÝ "­¼á«ßzëÿõöP§þîÇuýSTðP—}&Äw}'MX€Ît€XE ¸€9Ô€XC14H~¤·<Èh¸˜óブwò§^iEÒ7}¢ç$žgF«„\Á·‚1Õöd,%k­æi*¡e[69ïWbþ…zî…8ñôX-FY:ÅÁ{†sbzõƒM¨N[GQ e{ø5{àµf&„{uGrvzH(YïÔ_rsGò'Ƨxù5g#Ö„ÀÂ|ú%g˜B9†2`Zfñå'Xõ^‰'PGèY,¦(v6ƒ õ…p˜f'„Y‡ƒˆ9Vu!è~£2:Ø…ÇURÃU[&vR‡ŸÓeyô:<ˆ[íGP¦óUÊÕW›UP¨˜„kF„6^éu]¸5ˆs/\f’&@6l6Ô‚Öá‹ ÿÖ"BÂ(†[V‡=áe'ŒÁŒZ‰™(bnáŒ$B‚ÍÇŠ8eÃgWØ:À5ecx:¨†`È9’H…bF)ÛÈeà¸UD¸\øtXã(|YæX†‰H#Âw¥8f¨C{‚xä2…NHgåcuˆˆw^yŽ Yx'£_ssyûÕˆ³|E_}¦aÑX0¨U'Š£8’®è:µXUÏ%‡„¸}Â%VFW±H:s³&*ùXZ&aÅ¥Œ»Å)…xv]I‹,SŒ0¢l±‘H”ØAJIƒ39ƒ¤1x«Ò†2¸”fƒ=Vzƒ1é„O¸b…CÈY!ÕŠ®¸Pi•?Yaÿø…êõf^y‘ð`™5•)iŒj l™¡/Pòè’ÇEa?‰…‹}˜—§‚Š iMÙ˜ ô˜y@’9™Ę–9‚˜™™~V™œ©?žù™öš¢I?ñ¤Yš#´™wOU9${H+£a?Ñ‘Va”"´—š³.Kò9¤ˆ‘pi‹‰è&÷±†ö}“𫉫¼Z5âàÇàÚà»ú«âCø€1à  ¬| r¾Š¬LÃw°uð tð Æº¤b$" ÿ¶pD !‹Ô!@®ø aD­ÓwE·œð­ÿ¯Jª!pþ†®-~ª Z?•™ðd`К ­ÿZ«Ñ)@r¹ FPD°Q[Ïð+a·O\èF]g)ótzT.u‚eu22íõ²âv ëtÐÙòÌ òl ©áo”$Jàoˆñ ¸Ðº`Ø`;` ¤` ø@¤4EØà® ·¦0¶‹ZÂuu$ `÷~+‹–<{²W'u[G†Ÿ¨tSwtO'X/›²U³¶­I ±ÄQ±0é@±KQLÇd0ôIÿVtöª4H087$@0ª@KÀ 0ºø0ø€™gÐ À Lf`Lgà Ì4­“ë<û‚1 ¡•³k@'ò¨·‹¹k¡-Å»Fû»ŠÚ ‹»Ä ¼Æ;ªÑ»!˜¼õ³»ÌëÈ ½›º¼´J½¾k½í#½Ùë¼Ü‹@Þ{ƒ9¾á«»Á;½æ{¾ÿ3¾=¶¾ì«¼ïs¼Û¿'”¾ß;¼öÛ½øK¾¿û½ýû¾ú«A:~"VŸ,e;+¿ÿA¿Ï›$ñ§H":èœã×}¸À~Ô‚¼ç†oÄÁ£‡½þÛ¼¼Œ“(~@hÁ7Yxì“î‡"¼Âƒ Œ©$LÀÕ; OÄw‹ÌE“çUB8™‚õQOWµ›h~ÚeÊGŽºÇ.\ÃAü÷9À¶{ 6N1œ|&uYب}ÙÍ1;Yeèz\\¯ˆ) &OÑ2Ç6ròÆõUsäÅÀ¦w~Ì~UÜÆözNLÈɧ7èç]†œÈ÷×{X¬‚‰Ü}œÇܘÉ)ä¾[¼Ã Ìfƒ<ÉrÅ|ªÇ Ç§È‘ ÊØ§yô×ÈÜO°|{¤¼Áù¢Â)¦ÿó«¾\œ§\ňüëz–ãŸ_œÉ½§¬üŸÆ¼ÆQ¬Ê•¬|š1]Ñ3Ó+dÓåÛÓ>=;}ÓB=ÔÔSÔAíÉH£@ý¿GÝÔ´ûÔ&ÌÔR-=J ÕV}ÕÍ“ÕU]¿\ÝÕÿT­½ÖÌãÕdmÖ÷›Ã ÖjmÔ eñgzM¶Ø‰V×í鬌cùüÌ›}±É‚Ñg‰égi‰ŒßL*†]ÖB–jFƒ˜í „H3›}”/Hž¬ÝÚ¼ü/§Œƒ‡{ŒœÉ‰Áî›Jr‰,™:~9œPlÆIÕ[âHÆp 1¦8ž6\m92ÄíÛȨÍj*xÝȽÄà]‰MìÂk‘ÛF‡”\VGÄ9„BùÂÝ)g¹\ÚWe6†:ßù.¢7܈(œ-ßÏù•t˜XúÉmiY©…"¹…Ù„–×2=ØEÞs'L¨Æ¡íOÙˆ˜ëÄšîO þžé(žyè^‚”žßô½,ÅÙ’&¶Þ‡˜áΗàb“b’ÜnZÎÓÞŒØÅÜê•–-ÚþÚ-›Š%Ú~Ø Øßd™Ø†gèÅGÞèâuYàÜíâ= CÛ‹™ãF½ã³YÙ«ýÛ=ìÄýä}¬Éáš,aç´}ŽÇy¦ÜÎÑ)Üݪ(È%¾Š€™–Ú]é:nÞâknœpîæC^žŸ¬‰Þ‹|,Û´è'ñè„M×`¾Ô‡}éiÿšéZ½é2œ°ñŒ‚¤½M£›§d’-æ[iÛªÛ¥^’²•Þéêr”“Ø”.Á‘N>«êMfë‡ ëÃ~ÛC±ë·þãáyÈnìÜôë¨}ĉç>>ÝÉÄË}@nRq‡{^çtÞéBÐè=ÞeÖ‘:™íênÜ´¥OžàîÒMç.céÁnxpYåHå|ΆÍãq©ßÊßüÉrH•üÉ䩘â-¾…[þ Þ_‹Øë¾îé_íÒn·—=ç€îœ³žªø]ç^æp,’òyèöòTN2oÎâÄ'ÓáhìÂ&>bò>úN3öþØQ÷`?n—WôMîË*¿ñXÿ^ìCß•Ê^’ïe´©†/Ž…û¾ï~ã>ÚÚíÝ¥ÊRå[ÅMyÝË Ižvsó Ž“Õ΃eÁËíÃKHí³ì}²ƒë_îynè×®í:¯õÙÓìŒ~;ß<~_›è­wÏépÍ÷ˆ?ÕŸÖ!eÍžy|<øŠyøò–í‰ê·Ý…Oùyiù„׎Džñ‡'…<ž¨ O+Þ} Þ޲±Œ÷æÞî±/Þ@xX數¿xÕMò?¿ÞK?÷òýá ^û1æùj™ûEQáæÙûþñ7Ž1ÿê9õnŠüšofËϞ͗O~ÄG_ì¿û[jýÇîû!/è´Oò3/ß¾î7þîâ¥ÿä¿ø_3ÿôß5öÿuªøúŸøA Ÿ@‚ Aˆ_‘… â÷)"DŠ-^ĘQãFŽ=~RäH’%MžD™RåJ–-]¾„S&Æ‚5 L¨áΆ%JœTèP¢EEšTéR¦Lm>]˜ÓáTŸ›^ÅšUëV®]½~Õ ÕfNže)þ›VíZ¶mݾ…;Rìͨ §ò¬ 4î^¾}ýþXãÜ‚dïöœ¨WðbÆ?†¬’ðA©f&ŽœYófÎãNÆYùp^Ï¥MŸFú%èº:GcV[ölÚ¨Y¶|ÖjmÞ½}ÿ†{[´YÒÀGžü¨p»¹‹+‡]*útÌ]‡M]ûvîɭ羌¶ûxòåS?~·yöíÝ Fï<û{úõí§ÿÿZü}þýý'Í»ýþC 2Ф<@S ªù¶2°B !Z0¤ ¹Ú0£‡ÊpäèCI4‘B4-B¼&Ô*EWŒKF™FÔ¨Co¤‘E?r±aªp$´0Á$•\Ò£%{¬èIWÄŸ'Kœ2Ç&›ÄÊ,­”²Ë$ÁË ÃóÂ4ÕÓL6É,#.Ѭ²M8ÕÑËÝ R=Å\º$)DRO9¡ÔQ¿ìK;}ÔCC¥´Ò:]4JF#­Ô"&=e4ÏN9ÕÔ‹>µôÀ MsÔ=ñ£ *Üô[P.?:’PoÝñÔ@}5µSs-ñr#Q6ÔI3E6ÒAuÝrWeKå4WPéTUÏg)%ÔÕW¿êS·?_*6Q-½E¶Wj› ¶ÙcÛ´–ÔuÝ´Îw™MuÞvÅ÷RVõÕwÇrùEÔÌ(­ü¶­pŸã°à×OEÑ<ôÖ;«ü5bIçÍ3Έ=ó^i¯b{—ýØkye¶d15•–ã‚–iaM›¹ÀœiîH]ž¡³yHœwžñgA-6º» kMºi§·[zܧ§¦ú¸¨«Æ:ëֺ߮k¯Ï‹5ìYdúk³ÏvŒk´×f;0µÛ†;n>Ãk8 …–;o½Ã¢›®±ï.{oÁ_®sïÂì~oÂg<¦·‡<ò•—¼rËC¢ürÍ7¿(sÎ?×ÜsÐG\tÒO'ÜtÔWÏ[uÖ_gÛuØgÿZvÚoÇÚvÜwwZwÞçÙwà‡ßSxâwÐxä—çOyæŸÏyè§/OzꯇÚpÊš£Ujì¿^†ûи'Û{ðϯ^üÖÀ}÷ݳþ}ùk‹~ûU«ÿ~ýKËÿ5ëßÿ˜6õý-q`Á6 „ gA §€ˆs ù*¸ÁÇLƒ×É8 ‚Є~ñà UØ”®Ð…Hiá e8”ÎІŽáuHxC®¥†="J~D"Ê\%‡ìcX•¨”!.щƒ9bzÚ÷D*¥‰UÄâ±HE-nщ]ô¢ÁF"Ž‘Œ@4ãy˜F5Úm”ááèB9ÎQ…u´£ ñ˜Çî‘ôã)HAB…LSà!)@E.Òt¤þ IûM’’ò³ä%Ý—IMž“üÞ'Ay=QŽrz¥4åóP™Êå­’•Çså+‡KYþŽ–µÜÝ-qy;]îrv½ôåë€ÌÕÿ “˜§3æ1G—Le~Ž™ÍÜÜ3¡y9iN³rÕ´fé¢(Åe3ŽÛìž7ƒˆMq.ŽœåÜ9Ñ™°xPÄi'IÔ¹Nž5"È0É<éÉ"p@„øø„6Š0ˆ Ä Ÿöy=wX$øH "€v࣠ÀY¾…‚ïÅÀÇ0¡ Øb ÙÀÇ" qPí5P¡A™GGgwlÃPÄ!±‡=\€a!áˆH$£õˆî¨‘°à"&0 èpá"2‚ …@¤'ÀG dŠ6NìA>ƒ%ò¹Ñz„ %€k L Š„À"€«V+”À]© :ºZR࣫ѪXÇú5<À=%2 ’ˆn} A L!×¾Zä²%A*H#² A ¢àUŠ” —½«^ãjÅf ”˜Äâ€T “ ZçÿØz@óyª"èë(2+‚Ǽ‰J0óœZ5Ý7õ&eŠ®“VV"I•KQÜ•SÅT^y)¸%¹À9¤÷¼ÂE艻]԰ج\á ’Pˆ.Ý:»¯ñ²ë½§1o¹›-(¸G Îî‚ÝT(&˜¼àõ˜,L”È£Bn7‚\¨:®výHôÊÅR£Y€ˆ)fQ%€âø˜‡ññ l" Ð„‚¢ì>»{î¤l"XÂ^2„±û]$ÙR§Z²•ÉKäsgÃ]fbˆ_о"w¿í]3² ÎÒ( Á)P!Ö¤"êk `ÿÖœÂb5›oa ¸ÉZ†°ˆsh-#ÌÈÎò”=Ý/7™Ë„¶ò¥5Œh…‰yŠ qB ðÜ®>¸ˆB ‹r@Y<^¡Õü€"K0 UzB«&D<1…g´dK0«°¥CæÝbU÷7 Žt¢|d6ÅéN[FÁ”$Þ,#IÃgIž0 0I8Â&@ UL`릀ºñ1|œ! ¼ø…½Ï`ïuô"#¾K‰UÛ×@7æÀ`Žœ³Õ¶ ”"L0è ‘UL`#˜wÆ'à†4àC ÁèxÇë­†{:‰ñTázÚ‚näÇÄEò†3@1¾:œoËA¨Owç=Ïk;aolserver4-4.5.1/docs/intro/tcl2k/html/img017.gif0000644000175000017500000002615407363640502021205 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ q¯C¿$_ r/ß¾†; &Üpñ῵:p—òCÆn3k¾ ·)-¹cuÚm ø1_ƨ#76lZõÄÒ®f Ù2¾Ô¶oÏV=Yod˜ƒófm[xñÖ¹uO®\bâÍУSí¼4Ý„£{b^ͼùeä~qoÿ¯Í8Æñäk‡Gþý9pÚÞÓsM|òúäõ{ËŸß¾¾oéXu4YZY&¨à‚ 6è GÖ$Öuuñôà…f¨á†]E–M¡ag!‡$–hâ‰(~äág˜]Š0Æ(㌮h ]J6\wôQ›nFí¦ÒšÉ¡‘&"Ù -âø"JþitlßU¹Ú•Vþ–[kê™×¥eZB†%–aúHÙsçÁÇ¥sù¹å›@Š9fœU®9çšmž çœl6æ'væI§rQþ''™Ìå¥e~=:(¡B:Š“ R˜#¢‡é¦œ HéM.ŽXâ”)™ž<ʦ©ŽC¦ª«™ƒÚ©ƒŸBeé“V w§›ŒJ‰ßžƒ Z©Vf¤+Ÿýy¤´Åè¯ÆigŸ„¦ée^¹[¯ˆ9j¤²†Ê9­¶Ð"ˬ·ÀjX+…"Îêî»IÂZ˜¬ð6´nˆÖ«ï¾üöû–g³Xi¨þlðÁúÞ{«¨WÉû®ÃÿùÄ#ÑÅ»ÿ°g7J…k®c|°ÈáZDr±&ŸŒ²C¸quMzÌ0Èl¡‰”ÊýR G1¬>ÛrG ÌÎA­äÐ&Ógq©l*m,¶RŸÇôFE;9sUH“ÖõÄQÏvÛecÿeö–I¶·Òr_S[Þ©Wk”µÌ]µ}ÒÓGÙý0bA_œ,Þ~iww`–]øÙf#.ñØh'N6Ú“ÍÙËÆLÖÇ\§Õ÷ÍÎ9θä‹û¹â¡C‡3·T¨ÛŠ­ÞWÜÍ}ùÖTé-TÕ¤ÁžºHà‚®zï’þn³çÉ&^醗.úãÌ#¦Y²‹F{R¶{]}ž¹Wöö·^øñÄo+ð?—JÿþÔ)_¾îEßîÑGã^Ôõœ¦ª¾êfÊxömËû¼ïÜû_ø@׸¹/_ðÊþòÖ4ü¼yÜÓ‹çèG‘mj¾º ë¬E/ ¾ë€—R Zη4öp^ã\ U¸l9N€É“ ·¼¦É0€ 1W»"åPh¼aãÀ÷9ã5ƒÛ›áyö³¹)G9˜Â„$1éfLw¶ñŸ£ÔB¡ŽÍn’#ƒhF'Zωzô£ eB-*½šô¤!í(JWÊÒ¸©´¥0iÁ^*ÓšÚtV4½©NwJÏ‘Z®¤< ªPa”Ó¡õ¨žòi$ŠÔ¦:õ(ÄpÈR†† Â!ÈÀšRzQŸA ÙE®à„À%hHZŸÊÖšÚá@BS³Š ­%@k ^¡ !ʇpât^;e¿X%Qr.´æ!áhÍyžÒ5?€0ÆÑ œõ!ç0 D`|˜­éB^Sàp)„ æÀÇ xðXÃ!K(ÔüÀ!QÀFîÖ×ÖÝvÑ©ÀÄ.˜`&Làø°Á*&Њ àcøp.à|¨!gÀGuÛ°6\q«¶2ZoÇK^è—],¯z×[•˲÷½ð=‰{ãKßúÿí¼ø ¡}÷ËßûVô§ï«ÌžØCžÞµIpD²O%Ó)ýìç>^‚°š4#X}‹â{й#×e¯¿š/ ;œ¨EígY‰t–ÒVå`þ¸Ø8'^Šw”>¾Å¸Å¸¹ñ±@l@ü.ŒÇ›*±cùÈï52’—L^%3ùÉOu2”§lT)û„ÂgK—üCáf¡³[Ò²ù”E*õr[ öY—éø0>ŠXaVORF3£iÍ‚+ªÜ\Ë¢©Ìë›îúUa²³þ¸œh?ëKaÃÛðH8áWCŠ¥§¤ƒÍbB«ø~Nç­ÑUèãð™ß*vœßnoÉÀ‰^ö}òëµ¥úÝ‹•³O¬ [Ú‚ZvoÈEë;É1`~V«³äì]™;Ž›vq½Ý–iƒ›IÖ Ÿ¼¹mV«ÑÇâíµÆÇÛî{ܤÿ¸È9ŠñbFôD%Pp)%†üž(ïf¬ ë;ídœ¬¹_~·-²¼ç)O.ÇGs)Úië.ÏM’ôüa´Ï˜ä&Œ„\½_ýœÖ¬"+ÿ—nFg6}Ÿàî^sÀWôRÊyHg‡ÛÐNÆô°0—útJÎTÉŒòê¾hÜ×}SÑŽùËù1¼Èx+o9E$“¶ŽHî±Ï‡Wˆ7è€èÞÕ“·%ë]ÿÏèÒžÇ7¾óåÜâÝZÈôÚÎÌN›a£®tÊÕòjÁ<ÓËÝrÀc¨…}¹SÜ:Á³~gh4ž¢dÈ«ÄÎ>Vøäþ»ÔÊÛ½xúßà^gÏóÇ e—hØf¿ýÀˆqp4Ë×óʯ³ì bs Õ¿IUáQŒÇ—8äq]ëohüØózôýùáù×ÙÁ+Ôx}w14‡tœ¤J9g~`G}j¼“²—ÚÿÇ€ E€¤ç}¦WzÁñütg¸ŒuDä Ø^®`ÏwyIX7äf#øy!È‚phŠ¥‡yßÇrn—{çg5Cã€~£9û'r—3—yaÇ;öß7hÃÇ/@Xñ3„ÒWFö„îÒ3¾gx7Ø:P´@ (~'˜^)È5[¨E2'<+6báÆ†ODrÌÇU¯W†µÃƒ tjÈb˜&l¸€ì4†ú~ǤQW¶r©är€ÈCÔ2„X0aˆ!Qˆ?1gE(zpøH$…‚Îä‡ä߉ÕXhfuáÄz:Ç4Þ´8k§Šˆ¥zñ¶„lCŠÞã‡[—ˆYt‡ÒWŠòÔˆä,Pfw‰Ô‘‰d¸‰q||Ç…˜w&t=dWƒoxH*Œ/#Œ˜9“¸ŒŒ(ÿpAŠ8rÞS‘øâ1á8Žæè/åxŽêX/鸎îØ)íøŽò8#ñ8öˆ"õxúÈ!ù¸þX#¶øy"…p!ð€ð r¡z… %Wyõy¥Y&Ðò YY°Vø W›U’BÐ9ÐY5.¹à~pðà_˜`Ã)°YhÕYæP”1 ¨ Ò  `) ¡ % A‰3€V@°’øÐ,¦p’gÕ’î>áT–eXº#Ø7NæAÆ×–fùB G–ùT‰}‚æ‡áer‘309ð’‚ÙS-z‰^Õ8˜ˆ ™˜ŒùA‹Ù˜ÙG™”ÉL“Y™˜i"ý˜™œ‰›Ù™ 9ÿã€Q£|†ø5u”}1öa5V7Žf=H™øgB¶š3gJë¡iŠôšwÄšSH=Tø’ØfÓ¦6Æét¶Éš¨a-×W|Êgo¦ÙbÏ VgcÈ9ˆwbЙœªš@H%Wh†c¦¢`R³ hbôç›0vœ2NÀ€4¦p9;š<Œ>y˜Hb¾yoâùžNS:+nÙ)€Ò™žµéž¦Ç‚õ‰ãYÚœœù™øéž*š™–¡:t™¢Ð±¡"Z¢!A¢&š¢ÿR˜ùÕ*ú¢^¢0:£Y¢4z£ÁÄ¢?†£<º|=Ù|sØ£Bj6j…˜2i·c—ÕݤBj™kê"£ý‰o¾8-—pZœÇpp×#¿á+–öp vjfz ±–žÇé¥ÅɦmØœ¸fkÑ$§:¦'j¦¹¥žöoô6)RFÝy¦¶öhX:oWš„ qwšpœ¶B˜6p{ú¥çv¨Ñ‚e—¦;¨¨ jù<—*oѦ+JФ¡*pžÚ! œûóxçef¥TÓ¦'‰jp´J¦‚§m’šlW©áYÄ)©ãaùÖm¡–kÄÊ«dº«‡–zi¦fÖ(PŠª:šq½e‡CŠŽÿ©š­ÜªEZA·6ªcn€C¡£×WLJ_ßú¥nZibº¦hºjšÚI6­[j©÷:D”:n|Ú«†¦ ,£Öª½švʇuêÁ*­çw빫 ²®Ç2kób¨Ÿ:žÛD¿º„­™¤õǧºù¯öúfÂ6h«Ê%}jtiúŸ™j²Ÿv«‡"¯ôÖpW­|yw‘¶(`¨«1K8ñ‰¯Õ¢lÂá~@;«:kcÔ9«»¬˜›Fúlû¦¬\ ©o³ƒÐÚ}e”²<»²\Ë ëÚ­‚wغ/_ ¶Z¶f{¡h›¶Þ¹­lû¶ù9ûé¢AâKv{·x[Kð”·|Û·~›®^ë¶%´Q¯i6ãºrˆh³uGŒ„K‰Icˆˆ«÷8¸ƒˆ‡·©$*Sx{T€‰û£r¨‰U3æj{ìƒ1c‹ºªºª ¸+¸óCº_çºH´R(tíg»«‡P_K»¥»»ŽÛ…è¬ãw8ø¹ú ¤¢kO®Y‰´k:XÛ‹O[¼Ñ;¼¼ »äš…—Ë£`Â÷» Õ>x¤Þ§G{W‹Šë|ŒKIx~34Po™Lö—y±¹±Tø¼Iÿ•¾A:ºfè»ç+#ÖÆŒÓ[¾V…¤ó?£“mÏSa†f|gžè™Ø+Hú{¼˜gA¸{xƒ¸;ÍxÀG´y˜$ÂØ¿&¨¿Ë+ˆú¾À[µ ÛÀ«øl.ÁE’Aªu¸Ë{_˜{ø{|;*ÈÂEÈ€ïËXïKNiY3˜BK ¬M,ƒˆÂ?ɼ*ˆ~ÁÛÄ8lÊt»^gÁ®<ËŸÇ›gw˰wt8gø·Ã…ÉÛ8·•ËÌ€d‰ÐdÌÜ{MÐxŠÎÌ3[ˆs¾'´E×ÉÒ‘Ëå—ȵÇËyXXJh¬ùÌÄgèÏ X‚©7ƒ°†ò,„õ+̧;¥YŒB[¬Åå\Ç,v"ÌB´Æ' º{¹¸üësVœeýz<-6½}dWЕ|ÏÎÒÆ4tº‚å¬ÐJñÃë ÝÊz¿ÔWÄ=Ñ5ÔÐ@lÍØ ‹¦±B}†ð{MP·nÄËÙ›lHˆ¡ØË l…Ù6S4¹ÝѺCÔS]ÀJx„D8@’×/KÊ— ͬdBWÖÏü;o-Ó”Ö”d—yÜOsäI¤Ì^¨»ŠÁÍÿ“ëÍOǾ»ÌÆDkA™¤º‹Í[Q¬Ñ†¹ÌQÎéŒØØìÉLªo¬‡’„]7s†¸hÙØœŠ›Mtn8Äu½Õ†›+¢m¹ØxÏ´ØÈ©‰{E Ô;ÇÚ…x ÍÕŒÖÚÝÇ­¾^Í/I­Ä¾í5É JvmÜ«ÌvWvˆÍ1Ÿ]ÍþrÜâ|¹¥ Ù-úÍ“­Ý¤íÜÓ 3“|Ê£íˆÏ­/Ø­Í=¯ÆÈ°?½mäŒDÛö‚«ÚqCG1Û‚ðxòýÔpT߈Îëíý‰?mÄ¡†É¦ý–%<ßÇøÕœÈxã,)þà1HÎP\ÌI¬;®Â¨«Œ½mŽÑÿ{I/>BpÙ¸ÝÂÙÞMÁÿ»DË´â‡Ö4ÎÁ-É~lÞ°-½h¤MZ(MÖ^ŒÄ窙Œ¿åâ<>ÜûKÅôë=ÌO‹ÒE¾Jö äT.5whÎÉá8¾Ü½£Öm„˜ ÞdþâÝ]Ø×Þõb㊦Ûp[ç9·ZæÖjçz¾¢x~³{þç±¶€Þ˜‚>è‰Yè†>˜ˆžèÂIçŒÞ­‹þèé’î”^éúxé˜nš¾éòØéžîŽ êê8ê¤nަ~êâ˜êª_âàÇàÚà2Êã­Î˜S…x. ¹ÎqÛÍå-Ù·Þ˜ìp{P b@ß@ë}ÎÑ‘W" é𨀑$éX@R"àY ׎ê€WÅŽd ppu“ À ÐÿÎæf.y‘Û¾!Š R.çLS @@  Á>ØÃ>=MA™ yuV÷>õ`ï%ð –¸Mj¦gh)æ„dΨF—ºˆáÔ¤Š’wNçÌä°“×*! À ’ t•ªyZ¡¹YQ¯€ ¡ &€ &°¦@ ¦€4p[j… á^’K` PïYAÐät9P¥HÂVŽ)kÉxÈÌÓ]¥uÑΊ ”õA ÄÅQ±0é@á\]ÚÕ>,[)–énŽH087$@0ªp\À °øø0ø€gÐ ÀP]f]gà ßUë{~o終/ á㛣ⓟOì¡££?É¥o맯¢©ïÇ«ßúlûúPn±/ûfKûèuû¸éÂDú”Üû7ªûžüÂ?£ÄO!¼üBšü¡±üÌÏ£ÎOÐýÃÿûªoüÖo¢ÓÕ¿ý¨ý°¯ýà¢ÝŸßoØ„%¶ôñ"ôï¾÷äËM …;C“ëEÑ+°E_ôê@”Ôn¦Ód‹/þ8ì0¸ýh›ÂÇæã¯C#UÔ¯¾+dq8Ý–ÃïÈ ¡,20¯Ä2˨dL‰FôÊÄ£L²J«ÐH4ËëqÊ íCRM Íü¯JóãðN-÷ä³O°Æ ÍKíÀìJL'•´³9值pÑËuòÐ7ÝŒTÂ9ƒPÑ$‰KñÇJ¹­ô3TQûär¥²´Q­¯ÐÃŠÇ ÕqÈ'Ó¬SVã.•ô> ylRÈã`E IW_=‘ÍQEVºREs©ÆípL6Zi£¥uZk¯ÍlYAÑ"[o¿ Ð0cÁ%·ÜŽ´=ÕÙnÍe·]wß…w@tGS÷ÆxïÅ7_}÷åhÞf¿´—_&¸`rýu6Uî f¸a‡vaTŸ…¸b‹/ÆX+‰ëU5c?9dƒ6¸c‘OF9å‚I4`•_†9fsÿYæÖe™oÆ9çPi.Íf:èy^Ðg¡F:iezÛžMV:j©§î—éëÒ-yaª·æºkˆVZ¯Ç&h°).;mµq>{ݵ߆ä¶Æ¶Ú!¡³;nó¾—opç†zo8ý^¯ðL¹ë÷JÂ÷˜9}×ZðŸŠ#\µñ÷ìq½9ò|s~%Ï—r±¡jÍÂu´­·ÙêZvØ•w9…TMLU‘ÖÙ{gs÷ß WïPˆHøÞKœ¬9ù@u]yÚ›?>ùé«nv wŸ«öë¿÷Óôî|M¯RÒ£_}1ô×?pÞƒ<<þÖ™2ôFç‡^~âGÿü×ÿuËéÜ×>cåî~õ+ž•ü·¾°~®ƒçîÒ@Ñ!°qŸƒÈ¹þ9°ƒ Ô[ç=àðƒað.Ęî=ˆÌ –cçÁÎP„ì[¡ìhXÀóæ„y¬‡CP 07CDáWC,ep|Ìß ÷—B*Î/,¢ú¢'@-òN‚_L_ñ÷EJ)QŒ¬#¢MHFþÙÊ!—Sãã˜!†P]’#˜D>9±@išRöŒ—>ÈÔqVŽ ùGÀ ÞÑP׳ã!iÂ2þÐx‘ô#£I@zŠ%¬^ YeHE¾0‘ÿÑ]MÄÄ+ùñs Ý+eÙD«!k- Ü,-ÄB]örgµœÑ-k–K_Ó˜Þrå1•¹Ldÿ%ó]…©V,E²ŸÔí’™×ìŒ3ŸyÀ=n†‹°”¦7ñ8”pj¤›#)'6¢Ímnqœ™)ž4Ó O(îižê„;§#<_q/=ˆì'@·ÐFÊj•,áù¹+êð’¶Kox9<ÔŒõ"/iÐìwKèí<Êvé3:îK"JcƒÇ+ª4‹`ä ô|W¶ñ^œâ±ÈJw‚ó…UÌ©K/úSœ‚“4Ý£ÝZ*Cw™4q;mè)WÊF5Q{ï¼›gºÐI†’~C­)TÅ(S„&T’@µáC´Ô]ò²Š5D£%ÍúÉ{†˜]æÓ*' ”~3(,µi'9wΘ‚µ¦:%êYù¿¾2õ°’Œ `£HÒ©¦‹r|«cãšS f²žÓrjâ>JV¢2®W¥TýùÏTr´J¼êAe MŒZö«CTí@_k©ÕrV±R5ÏAE Qï(2°¤œÙ]ME¯¬ŸÏ}Q]¿*³ÐB׺ûü¬k³{±ê^׻߅JwÁ;^òVKN+1Ë»^önD¼í…/|ß_ú’w¾õÅïuï›_þªs¿ý°2ÿ`÷rÀFðçÿÜ”md†%=áIµ;¨ÁGƒ0è$¼* +—Y C[‹29 kfÄtœðÔ*Ì– íÄÚp˜:|Þ¼¦w¯|mqÐ^›jÆwEoØ¢›c e¸š>ôˆ[»ÒÆíXnrˆÿHäŸ9¸¬=§’ÇÊ(¾9ùc+¦Š—ûVbs^9'IÑòe™|d$K ÌQóª¤ ’87 Š} Ù¼eÓ~¶ÎÜ…r…ì¢??Ç.^³•¹lå šy!?>P”Ý6 B/ŽÒdæ(Y á¼9:Ï*4sqyãpÙsÎèÄôšN¬Â=5¸At-%M·RgéÔ8©4ÁÊãiÚ¨úÅ[g®öÄfÔÙZØINõ˜p\'¯5Í05E=LRSçØt¾v„-<0%Íùˆ^\«‰ë@ ZÊ{ƒ‘¸9ó› ›Û˜"§£PwD8“»iæžô¡E|ëz·ûÌpc›Wœ1ÿ*Ìò&ç¬m ã›ÖÖ&4¿ûýé¿q5çµ·l·mbÁ¢ ws¨ÿ5jçîsßöÄ2Á+îÃ6®<àðÚ8‹a…ë˜O\Ó½¶ù£1(rç»Ö”–8È—Í0…ƒüÙ>5x±Õ¬Ø€³»ÍñžHÿˆ u óé×ên×·Á=½y·ê˜³øÓW~ñ–à`{Ú>4žOÌç·Ê=\T‹Ý>ú¸S^ñªìoTûòbEvDž]@Sºà²}s+]ïÒbuÆÏÜV¬3}®I™|Ó>v´¿Üå‡àë:pê ¾îû^¼¶ýýòÄò›Æsæ/#yË«5sö¾Ú´õZré¤Í´çpÊÍNú§³¼ó—»xñCågàV%ËÏö 5ÓO³Oy—±ðA?ÈÁc®ð€=¶¯ !ûƒ#çð*ä;>ûû‹ˆ¹Àæ²å :hÓ±¿¿è­ÄJ4@¹¾Ó¼äÂîÃ8ÈhÁ™c»칇ÓÀë«A´>‡a4Oc¾ÒâAíz¼ì»4¾-Z»Ð <=åK†S¿A1'|B($Cœ³³2£½FÛÁéZ´Ûc¸Hs8õ‚;-y?™ëÀ.œ@|AΛ¿ðÃBÕó5¬ë´Ø›>¥©>XãÃ5Ä< Ä?vK¾öè!âš–È3¿¶š&N42ô ¦3<·KÃì3±ô;,[¤U¬ÄM´¦Óëž»‹ŒEH 9%t;&ì½S”DDô@Tú:„Ã6Uk½]|—Gd¼ˆãÀ¨›;`”EÚ¡EbŒÂ<ë ä<.Œ¿?”dÔÁèêÅnlFÓšFfûÄLKFh¬F®û,DláFwû£oÇœ=[LDTTÅÍc½tDBÌFü³–wôÅp‘Çy4Fpi2àÈ{´Ÿ:,H¤ÿ!H ºe4§qóG± Â†ÄÆ \>=S·z¾ÌIQÄ+R|»&ä+‹¼HrÌHÁ‹“/lC?É®8´Ÿ¼ ÉcI|™ÈIŒ;[Ó>—ëÇÑÓ¼Õ»Ddá´£›Âj '*¤I×°+\Ä@ìeÜI×[@|L3ò?#3³«ä±}Ì’žlIoÔÇà£GÁO¥l•÷ÉD•»A¿ÏëÈËA’›A^dHŽËJ·ÄŒfkÂL ç[»í¹ËB”?Ä B‚A©”AB£ÁKFÑÆ)sÀÁÜL:dË4Ê0”IA”@ÎLL™šÉlÚËìK5ÜC KÍüLvL2Üò¿Ãü¹Ô„ÇÒÿ[ÍÝkM'|Íø¡K/º|¼ADM•„CÉÚ™©ÚÜAËŒ²dCScIÓ|Ì`YL!<>ÇDÈ ÎDdĆ.ìë2çtCêëÍõûMë Ï¢dAÀÃFÒÔÂÌCÎÒMÔЮ³Üµ¿ä³Ôò3“\.ôMÊ|Jé Î8ãÀþìCò츿òD{ÌB•¡Î°´ºƒlĪ,lÐÌìPÌ:KÇ4<ãL™ MO¿ËËTHi|ƤƒPgGæ‘É“1Qf46UÑoaPý«ÅadÑsÔHøÌO†©Ñ 5KµÐ‰¼F¤ûÑÝtÄõDCÙ<ÒMõ˜|lPêÃE,§m—"ÅJÔÓ@=Ü…˜…üÒE«M.CÈ(•L¾4PetœÄÒ!Ý9¬<=%¿ùË2M®8eÍ9G@ÅS*s-ŠdÓ2ÉèÿÐËE=TNƒÄPEýÅFÉßÛ³èÓÉG5IMÈ•4Ô̼™íÏC…¤ÂÂÔM1ÍÐÞóOoJ¶åì4­Œ¨¤ÜJOÍà Uk‹ÕT GM­Uè¼U[U*]EI]l¿ŠüP VZÍGcå!i5R‰”ÒRÔ7JmVý|ÖU­ÖTUhýV¡qU…ÕæC·n…½|¾b½ÉØÕ¿¹Ö”ìUJåÃYý=VÕ }Õ£)WÙSR|LÔ¸¶xý–ÍŒ1Ødɶ‚-Xd%Pö$Ô€UW?,”‡½CYÛUªìŒ…mÏœiØãÖ[4ÈRÅsΔUÙ•eÙ–uÙ—õØcÙ™¥ÙšµY–…tØ%Õe=™˜Í?DµVA-Ð4DŸu? õ×yUÖ,ZUØœT^åY‘1ÚlÚŒ-·dÝY¦íY§Å˜ª„¥ÄÛëCZrUÚ­ÕPjÌ÷Àž6ùÎâÓÒï\ä;²²µº¨S ·ÅDN±[¹ý§"´“íW´ÿZ‰%Z¬lÌ!d*¡R€ÊÈÊq•™h}Åt˜u–çzVgs¶ç|¾–lÖç~^'zöç€Ö~è‚&è‚èƒFè~Vè…Îç†vèz†èˆŽç‰¦èVއð†Èèsè‹éh@†°èepnÀ‡O€ €‡`ózç=Fé›6w(ˆ<À‡D€H€vÀ‡>(ˆpøŒÆé¤¾ƒbÀ‡ae€[ƒlÀ‡E0švà#®c‘˜‡¤¾f{x‡m0†GP„C„=؃ €0BPGˆ„d膘¾ˆî¢†@00 ‡ƒ .0((À‡ðê\æ„=еK0i¤&*(Í.P‡Í6l‚€(sH…@‡Ä.RÀ‡ÄÃvìǦex?Hkƒ Ѐ?Ág„˜Ô0…ÎFí‚î h(iÈY ˆÅˆÈ‚áíÒælk°mVJ˜„9ˆ € €IØÿ.vò¾Ô…âMÕ\Ù0 ¾ë_ÈU _³bÌÂèbœQ¥B»pƒ‡0}Ò…Z€X8îÎÞìŒQ IÀ%p5ÃËíE©Æ·eEå«Ý—ÑW‰ JT¥‡cÿˆ‡ }Šo¾v†ÍmŒÈÒæÚ¦†È0…Y¨†%…[À‡yàp|xØ] ‚ì›ÜKTñ0<Ê7ôpÑÌFK|ÞßÅÏvûÜù„b0ñ îƒ8íøÎpƒ`nÑFˆ]@nÀ S@Çnup쀅ÆþSpÇ6<'bŽ ÒŽ”?¨|˜¼Ür 6÷p3sÆåÂûtôÓL5Ÿ}/'¨(øíÍöƒ°‚Ð…ràk|È‚‡W0ìøXPàkz Ã6 O˜‚g€À ऎÊ!‹Q¸J§âthܼœ!d†RäK‰'˜ `H‚#˜€  U˜€0w (w|˜|8ƒ4à…_ˆ÷3ˆ÷u脯ÈqëFíE¯ŸD°-Ëcš€Rˆ&0&xwX… X…p÷‰Ÿ7H|Pƒ`¸ø‹‡w5ÐwÌ.Oàë;†ð–ç yhøxƒ3øç67ù˜‰“–ùd¦ùš/æe ;aolserver4-4.5.1/docs/intro/tcl2k/html/img018.gif0000644000175000017500000002444407363640502021206 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ q¯C¿$_üðI¾ Ö‹øïâÅ[„Òð^n3kÞnSZrÇê´Ûpc¾–%C¾L˜rÅËW£V-¹/b×…gçN\›7ëܘ;Ž15qá¯YG>¼9ãàŠ¡Ç͹ºu‡ž—†¦›tOʲ—·ÿþmœ:óçÊmÃÆ}yr÷¾c“?MûxúÉ¿}ßÇï6>ãêíwž~×h`gŸ%šXÜÕÅÓF(á„VhQv4m'ZYvèᇠ†è•‚ŸiH‡"¦¨âŠ,¶¨†51¸¡w.Öhã8FcX6‰Ö݃Y)G½ñ'd^E~7dqKÖä]OòVY”%éFU’IF¥cEÑ·ÕŽ öØ Š) ¹‘™RÚößcâe©æ›i® škúGø1öæ\ÆY'÷ñéßDnÂ)'¡Ð%–æ‘Véh˜yù§ž‡öÉh¤m^j覒Vªß~éñ¹¨}ÒmŠ˜&JEcŽvZ`¡¬Æ›*”y!¡*㉫nÕš«–hÁêf~ ]šå°ƒ"Jk•Tb™¬ŸnõŠÞ–=Ù*æŒ@Iêœãåiiy¡¶i$’´º:Û‘ˆîö­ž‚2ê)¥ïú뻾¦®·ã–Ú'½MJê,´xg殘 nG²™:”µ7a+ëÃG,1Q C5f®g¬ñÆWTqƒ?v,òÈ$gü±–¬òÊ,³ÿxòÅÙ¶,óÌ4W÷²Ã5ç¬óÎhÝŒkÌZ.k0²Ðìç’ôM§´¸ÎÁéªzÎußÔ•Z¹nœIÓ»/Ï\+E¢v·ª tUt \õ õ=YömC‚êWÒFËG,¿[wÊöÛâ)Ûž¨]÷½ð׆MÆ~nøá ù,v…õÞMªióÉ™¬´K.|ßI.Û–ÃM°ÒûžË9º›?žè\òý)Þº9Î-·Ò xJŠ>öùÕ–;Þf“{/ïrcj®ïò,¥¿qŸü½G/m´ãÄc½¡hcŽôÜÓJàÝò>;{Pµvû÷ä—xø!Sˆda–ïht¡Þœî[o6ýçVÿÎüꓦ ¹§Õ³“übÇ&ÞMN€ÊËx°·žÝÉÎ|#A_ÊÔ×6&P{gÓߟ*H¿­ÁëY ŒÚ)Ò@g!=Â`ÿŒ§=äùNw\^s\‡ºBð'$Ó wÈCåp×9übø¿ƒ­°sö“Þã¶»:ýn€Ö+a¿l¸ºÒtÁ+?gµðxEt^ê–H,ïUQxZ£7H@jQè‡ã{ë¶´îõ΂t$a ­Ö=/ŽP…sÛ#{¨èÄ?NŠw`¹¸­<âÉK0äܺeFþqZÛ[dkÇzò“3뤇F·Äûir}„ô<ˆÁp‘r2ãûþ¼•¹×±³¤áØÁöMËŠ·da ;ý¹’`ñCbüü8EÏ)³*¢ì$G…ÉLƧ^G|$ð‰?øus†¦« êÒ%=kúR‰hLåþ,iÌ(1`Ã$ðä¦NèÍ“zX¤¦9fJ)®³(ќؼ´R¨zäW½J%Aù¡€F’Œ—"ψÏdæRSO›h0ÙˆHº¢ïsŸ¢J'EB"s¢Èƒ×9W*º„2ôE€‹Ñµ~öÒšÚtb½©NwÚÿ¢œòô§@íOƒJÔ¢h¨FMªRÙ‚Ô¥:õ©Zi*T§JU£HµªXÍjK®ªÕ®z5‚1åQÃhúÕ²šµ$\=«Z×ê’°†i¬‹c«\ç:‘´Òõ®Zµ+^÷:U½òõ¯†#†CöÐ24AÆFüú‘ h!"»ÁR‚˜  Á,`7Ë";ÜáCâÜš*ÛY¤²"Àl .[‚W@È>Š¢æþüHÕ6bH;(mcÛ¶±/#¾í‹gšßÞEãh†Û £ÒŠ#ç0 D`|Tö²éÂjSà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀFiˆÄÙØC|'©ÀÄ.˜`&Làø°Á*&Њ àcø00à|¨!gÀGƒÛ°6H„±õͰM1¬á’Ãñ A,âÿÄ&NqáPì¤Ff œ D×Ý9NØÉj$äÔõâCí¢ u—[œÍkSȼÐUìV±Z gJ*`$qœdªUY#ó{Ž•¯Låe9Æ™R²Ž™f-¿Ç”[n=\¿å2¹!,~³œiç9Ûyeu¾³žE–ç=ûÙd¤ÜsÿLè®õ%0D3 õÅJ•‚1¥‹–%©¦†ð«dg1ר<'ñ³Ót”²"¹-0OSÓ¼š Q=´‚a:œCû%ÓyE7/6Ð3«®®Çã=•zK‰Næ:oœäâþ3^vcZ9‡ýb5ï–•§v´D­,µßv´nŽô—¯emÚ»—àUvMucgësTUÉ¡ Ín­ÑŒ†§ +Êé/9Äl50mé¿Ì©2Šàj4;cüiW/Ç +žÞ@ p¢)oÍ&L³çÌs{ÚÑ.=É»™õA^''jÛ®¹ñiÛcktÙÆ¥7ÊûØ4ÝMÔ+Ƕ_nîn“sjÉ®ãÍ¿Uf‰2Íå÷HÝÙå|f\㸆«iÛÍôP&ýÉdmºÔU¶ñ©[]¨OÙ¯ÎuU½ë`7Ð×E¢: dÔì¶.MÚÃ~£±çûã•~Zä^®Òd'\ÔBß"Omwºm´  e»Íÿ²Ž2*õè‚?1áaVUÄûjí³Ú¼Ϥ»Ž=)ؤ¨$!Z¿c»NÕÓ6äôZ÷ëjnèËîbòFÏA”¶Þi¥×w]¸ä¢^>ñ¸WËíG†xƒNòÕ¡|åeîáÝeš¬GgeÏÆŽÏúãœïe¬ÍÇ“ ÓÅΣ\Ä_}IÙg´ï,ͧWŸûòiñPî˜ðÉöz ­ßäe~ä}òþ‘ÿñ;O>¤áö|ê3qâØ×}Ô$cÚoA×Dh†|ñfQ±ÇOn#~ÙãzµµzŒ¶7’–Gž3OÉ×|=…~Qg~ "÷gõ‡p xU‚;g‚óG$ò§{¨k­È+jô»iÜ{ˆ€ÑÇ€³&-|—Dã¶ys5æs¿fD&iuAþ×vsǃzµ™ˆ[!\8™rÏVr=i_AQb”7<ù“ÏÆ5‰²“=󅃶)03Y•1VÉ…X™• ¸•\Y~^ù•¸–b)xdY–aw–hÙuÿU·K§‚F’cp9fƒÔ~b §ƒ–_'efÆe!yõ!“=G|IeAƒe%¸7k‰NÙŠ‚€M#‡£v—ù¢JE×skæ—†Y}“™Åö{–I™µ&—›˜ÔFlRwyÿÃs†YeËç™Àõ9o‰™}Y.œ™f# [vf”I˜n(™:w™èVp„v{ö6eÌ¡›»IfÊ"œŠæœ-††­‰šÜF-Ôš™yš˜©œ,TdL§–‹iuàž©Ù˜[Gžèyaæix陞ãÙž…öžðùgò9Ÿ{VŸöygø™Ÿs¶ŸüùfÐhšÇ)]bk€™pJ›Ú‰.Hœ$ø‚w‚*˜iávÒ'¡Qhq6Ù€Ä÷™‘ÙcO…5Él:' c¦HBÈ„#:np'D"jz[ æMª±rAX†X„+èM’Ù›5øƒÂ6¡µ²ž@”y¡¶w¿Ww4Øœ Ç/n©w ~¡§¢PúmщJÞ¦E£8H rwBí‚_Š |mA×y8£y§Š1å\Ž©-qYˆJ¡Ž„„šÈ‰¸£½2wRȇ$‰{z§ÒVpW8Lê=Y¸§zº† hˆ„„ITJˆTdR?šH¦H¤qÔU«DpÉnZjÿþùŸ*¶•ŠfŸz&J¦©jÂ2E›¤¹œIÉ ªÓisjA›Aê5ã¨tOÉu*¢ºwÍs©•W£ù§€¢YsMj„CwÛ+@Īªp8Ij}¼5“”R»À±š°˜‰`ú¼«´$r–X…jºQH(}Ãk†åô¶Ç+„"t©Ì;¾ÝJ½qØi¾»½÷Z½a«uì©3â»ô§¯Z‹0¯{» ˜ºªûUþû¿]Żȹ°ö;%[˰ú7² Ú¡ÙzVÜ[Ü[»ÆË¾íJ¯Ð÷¼¸Àߊ¼|{nüW¨~‡ÓÚ¾7oBêT\ŒÝØŠ'ÑŒÙæ÷Ø”}8–}Ù+6Øš]œœÝÙ~–Ù Í5¢=Ú;SÚ¦3¨Ú5"q ¡ ´øÙ¬mV„…x. ·ÍIÛµ]Vìp{P b@ß0Û’~±Z" é𨰎÷èX@R"`] Óê ZÁ A pŸ• À ÌÿÕÀ§áŽêxÝ ²\U1÷ˆõU @@  ¿ÝÜ(M™ «eYô=õ0ß%ð k±”L‰=uW«°1Óq”Tø¸Þ¶¢@ â#ÎáÞ¼“Fi\žß ]“.. À ’ £…àcêø]¡ê8]Q¯€ ¡ &€ &°¦@ ¦€4ð^™… ÝK` Vn]Ap4É“Žá0Žâ)+î“%Þá*nm„‚æ?©¼ÞGiæ]ãåòG üÅQ±0é@a`av!€­^ë“åMTH087$@0ªð_À žpéø0ø€gÐ ÀÐ`fagà ê‰ãåxèßùt(Óó‹ê¡VÂÌêíêv¶#±>Ì´îÙrë­žëµëRm²¾©¾Îd¶ìÑëÅ ÀþÞÉ>ëËžbÇîìÃíº8¼íÖÒ»ŽìÕ¾í÷Ùìb›ßîú)îZWîæÞŸè¾ê¸¾î¥Úî ¢îðnìò.ô®-.NPùC«õ>ÿ÷NùÎ,7›ÏœN oÁY—Ä‹#˜ù[˜zðQ1ðÌÉ9»U±Z뱚™µÖéѽ˜Ó>îañFwƒù›ËQ£vƒœÿz¢ÙiÃçQ€xóÛ§[¾¡‰²ZÐû.µOîï¾Ä©2o‡—KšÿšOÿ™4¶ô®‰ñŽ8rßOæÁ:ã,É|øESOŸGŸòIñ§Ÿó eo/šÿñtÙ™¸œDæ£íŠ²Ð‰P4ö¯ÞíÔ~öïB¹ê¨Ô‰˜QôöS¯õNJø. ¢Tøï›j+fvßr˜Ñ¿ø(/ì‚¿òÉTï¸þΛ“ßï‹oóÿÍúê|øŒ?«ÔJù°©œYVHIÈu'ŸîŸo¤ÒYøžyø zó87ôµ¹ñRF›®¯ú°¿œ²Ÿ€&j°ð¬¸Ò^öž¯ìo¶\M¿d öþÖL~¿j⯉¿Ï‡sÊõ€š4þNòM—ûînýׯ}Y÷–{E’±âtÿ ñOà@ $hð >… lè0"BŠ ´HQ#F3Näè1ãÆ‹7žD™RåJ–-]¾„SæLšiá»™çΛE|úÄW$èP¡7á;ZSéR¦M>…UêTªU­^Åš5«N®<ƒþ–èÀ£IµžE›VíZ¶mݾ…7~fWº_Žk©\¾}ýþXð`Âëv+V1Ù½…?†YòdÊh{MŒw¨^³•=Zôh¾—uf^\togÒ­]¿†[ö@Ó;Qkæ<[÷nÞ½}»­Ý¬fÕeGž\ùr•ÁíM͘5sêÕ­_ÿìüöâÜØ½>ÿ®öáÑ»‹GŸ^ýú¥äïš_Í^þ|úõ {­»}ìyûýýÿWÎ=èp‹@Dð5£+®±„0BÇ$N: /Ä0÷(„Ï8 ?1D©8$ÐCOD1Å–Hä®@ÿJ Ɩ@rIF«l”¨°…pŒ‹Ç¦|DȨ„Ü?#õËËE¾,b’&"%bò£ŽÐz2È)W*©Ê¯LIKˆh”jG.×ÂÑ˘ÊÓL¥.RÓ*÷SR.Û\jÎ1c¼Ë;mqëî_ueˆíÇþ8S¡Én;ê¼ß.ûg¡/V×ë—+»ïªª¶Ð/4Uö\!Á6YažiUçÂ1orpË/·6óšÕö̬AB]tŸ›òZ9?vÖ§YwvôØI×ô”©õ»rÛbœ?©Ü´¬‡[”‚ßy­ÖMyçcÓøF1{´En§ç¾{ ™ßÞ{ñÇ÷ÿüH!”¾Ü‘ßš|}fŸ__°ôÉ¿ÞÑ÷ ½ZNÓuŸÿ¥þ“þÖâÇ£ãùt7»™µ"¦@ªé}H³Û`”%ªÅ|ùëÑþZÀÅÏI‰ Lû8$žMpä Ù ¸ÊFF„³Lýl“=8…Ohƒ›<'­iU0vó!´&(ÄÒ9-tœë!²rª#¾/p3›[Bâ¶ÄÕlˆƒžÒÞÆC.Þ«u]Dáž`x– foÔaâ^˜ÃÃí P DÜÖ¨F6òÍ$|˜K8F<:oêkWMµÕI… ÛZÚ‚¶G?ŽQ+eüË5°!kv…¼V´ðHH"Îa«3ÿ\ÑdFI€1’…ƒÄ¡Ö¨¨Dɵ±i™äa‰´5ún”0©¥ U$ĭì“*…H1N¬ˆ§„á$‰‰É?â΄¡|Ý1YÊÞ©•Êd¦£É/G–²a"ÄfŽì(‰ò‘2Îý´w>¸ì¯š+[eµª¸» Òòw™äæ?ÙÊ$Êî–ÍœàÈʹê‹>D#õ’Te’^ü¢£H;h&PMáŠÐù5Ž~©z R’–ô:#5iJUú”®Ô¥/UÐF{i5˜ÖÔ¦¢iéMuºSÂä”§?êxdJÃm±3¨GEj yIT_5©O…ꈆªÎ:5ªWÅ*M |šU®v•%[õjXÅJÿ°ŽÕ¬]-ëYÕÕ´®Õ­Gmë[åºÓ¸ÎÕ®0­ë]õšÒ¼îÕ¯ íë_+¾ÀÖ°Î+,s2:ÍÃê5±‡Zèq GømI&n+acôع²ºl`f?«YäqV}¢uæµhgËÓñuø"Eã‰Q֮бõbDçy[ÒZÇ´î bAƒ«È8rŸŠ;d5ÉÙã¶¹kCdoE:Õ­ƒkºgÞ×Ï»w™8D™ëTˆ°—1È]ägéGé2ç·ßBmtÙM—*ë&~Ë«ÐóR,u’mïI©ÛQáež`ô[õ$y^Š^N½³epØ8¹]g‰S½Æ¼(jÜš÷zo±æ^‡»÷a#vÀ*p‰UŒÿ!¯ØÅâiñ‹eŒÏØÆî=q‡¬*šà´†Ò®9™9YìJ¸NVæbIüÑ/)MGvœ†%eÆrLÊž&S–L¿&gp¢Ý¥ã¡a)«•ó5æ2e§·1ÛÌsš s ×ìÜDFíT¹$œ-F¨m²9‚Aí2 «wMþÂs\‡¦¬l Iè7ïwÅK¥”nWÜôêÙl]Ks³XQgJTÏDj  Ð`RºÒ~vóCãŒIƒæÑшæÄøÌi_1 ÖhVs1¿)6Hß¼\50]}8æºÏwÖm>ºÁÞѺgŽÎóçXÉ¸­•ÚËil¨qg™Î2Pƒž-߇»[ºö²o,“q[§Ç‚ƨÍ-)yyÝìÎ1þî½oû´›ßÿ¿>pÏœàŒÁ‰·0kf¥PZªR8Gko=M¼ÊA«ÂÏÒê4N¹Èô1ÆC{YSvö[ «Æ+‹+g×ÖýMp©s+ÍÜ~ÊÈ©U6£Ù¬ß}z‘ÕÉþ—˜W-È›óšnw¾­«£È~ûÙCáœwŽehÍ×þj–çaM›Î]׺™SëinS³Û~mVUîp·üë r´s^í~]ÝÚ$¦?ƬªSé~t¢qîr£7—­ÿJ¯êu=¸Ö}Wg§fÓÛå^óiR>Ú³äç®ni;žÑd›Ç:ªóìßocqæt®7Oמ<*o¼õBFxL—JÕ¢*^Eå¹ecß›ÕïÞ÷réýï…ß–àßøJ•áL=z|æÃ¦øMýÉMû°_úõó¦¤î­ÌvI}û3¡~O_{ê=ÙûHï –Áýî«È‘$3 Áóü©Ä’W†¬uá}—;Û>¾ôAÿ4#Ë¿T[´|‚ž#‚ˆ> ¡Ã¿`b¹û«6 Àlk3¾¡º—‹3¨“<–¿¦²½vj:B³¤ÀÚºrн[™W3ºãQÁ¦¡»VK;Yj¹^“A½£·½Èé‹0<»º=“´O ¿¾ ¿ö“£Ì@US@#<ÜÁ.Ó-i1Á|§·a*¶²û$óê´ 0¼À;!ö+¸¤)ؘ³¤@;Ó¿M+¦¶ÃAo;ÀfÛÀ ¬³1û¯ý{&:LBCü#Ãc 3®Û¶AtoÛ® ô"ܰ!„2€sDÍz7 2ÃÃšÄæÓD뙽êJ¼MÅ€CÃå ÅRœŒL4ÅTÔ¨N$°æ‰39‘£8és‹rë8Zô¸ï[¿ŠË¾H¬>]¬ÿ T”¿¸Ó2tóE\d Hl&3z§aD¹Ë=› a<7›û¿tBÆk¶K©›t® DÄCNÚ"†Ú‘mZãsºø»<˜[6Óƒ¹¡ËFc¬B`”*VD1W$–D¯ºi¼j±ºm´Æv¬3äJs„@µ9Âf”H>¼I9Œÿ–X;³¼E†$ˬË¢A˘3ƯcC¹A¥:bÄŠ€|)”„?ãÌ’Èä̵*LUdL›PIªlÌÈ*©Ô±ì ®ƒ œüÇìûÑBÉù‰HÃZLדEùqŸKtÉ‹CÆ\Ô>M’sǦIºË2 ½Š¢/9Ô¼ÛH¾ÁrüFÝ”0ÊÓJŒäJ©+–™\DÑKÌyÍ3Ñ?‚ì9Ê2/Z.ÌÁlÂiã4BzH K³ŒJì¼Âè´6ÛjNyÎYÔAC4Ëéì6,Ëùdλ$¦JÃ%…R¨(Ò(½±)¥Ò³Ò+}±,ÕÒãÒ.-±/Ó Ó1m¯25ÓÞBÓ4Õ¬5eSLDÒ{S6uÓ9¬:µS¿]ÂÓ¥Ò=Ô¹ÔA}«B5TÅôÓDSDeT³rÔG͸E•T3ÔJE+JÅÔ.½ÔMŪNõÔãL} Õ+ÕRMªSEU¸ÒÔUURUuÕŸ‚ÕX¥«V¥ÕÿÕ[µ©\ÕU¼²Õ^Q^Ö•Öaå«_5ÖÈ,Öd%©eeVÀBÖgMEg•Vò¡Öj%¬hÅÖ‹‡ð†èÖ¹ÐÖm}±Fd˜‰k%×ùà|ø ØxF€ u]Wôp„È|Hˆ€h|脇¯×|í­;(|†AP°…1È|XC¸×„]ŠyPX¨²‡wØcxE8„@؃=¸@ Ep„HH†n ×•È+jH`Š0@zÐàŠ!0€‚ˆ8|(Ž…)NØ=HY0°„tÕX ‚ÐÚ0uˆ0oÐÚ¢%(00‡Tt@Ú |@Ú(Ú¦uÚ•r€ð”%0È À·Q]º˜‡³ 0®=[„Ü h(iÈY ˆ‚¤ˆÈ‚Á [²ÝZk¨[ä„I˜ƒ8À€¨€˜ ÿ+/ØY8ÛQ(\p ƒ²M½ÄÊõЍÐÃŽŽ1?N9šDHnôá­„ìÇUÝŠK`9p^*++]¨X€…ÃåZ­m‰P…Ìô? %‰#LÐÈ#·z2 <^>[@1jßI•ðMP  a_ùЇ¨‰²‚Ýu­[–Ȳ庥†È0…Y¨†%…[À‡yø^|xØ] ‚1^ñ5Þô•"…Jžžß¤4an|—ùMánŒºõ]ÀN^Žæ?ÀýÄ0[Øå^Š`݈ܰ]@\À S@…¦muhÚ€¦ýSp…¦ÿ5"®?Þ£#ÞðEá@*aùáþ.ÞöbâUa-ö¿5¶_/.ŒÀr‚*€‚/ °ÕZ +](‡Å‡,yx…¢ˆ%0ˆ¥R(Zð„)x++c3«_‡ô§µ cc8.³ÝRµ.F»©£áL@ éœèÛˆ'˜ `H‚#˜€  U˜€Àe ¸e|˜|8ƒ4à…_æ3æuè…è«ø_Ë=Û+®JÿÙ+öÒ²›š€Rˆ&0&fX… X…ærž7H|Pƒ`Hçtf5`æ«OØY­½†Ð=« yøæ—xƒ38 |ÅgèÖ‚6hÛ¨€;aolserver4-4.5.1/docs/intro/tcl2k/html/img019.gif0000644000175000017500000002456207363640502021210 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ q¯C¿$_üðϽúòŠXñb·ø9²åË!á6¥%w¬N»-?æk¸ô㿈GŸÆØØ±Dɧ+^m1µêijqSœl7ïŦuÿÖ™vÃÞ¹Q nüõm½Ï“§-:öjÙ˜³gÔ¼´3Ý„ {Êÿ®<·ßàØ¡7ŸZýùæŽ{/oL¸|Fù­§ËWîš}{þñåUsëWànû釀 *øŸ~Î%¨Ý„qG“wž•Eá†vèᇠ–daMb}WO!¦¨âŠ,¶¸ÖˆaÙäx(ºhã8樣ˆ›õÈY‰†·ãDi¤0þ(£‰feÝz¤8‘mìÕ†Ÿ€RŠ—åF R¶¥Fð…öå‘ÐM9&™%‰!]M¦Ôå}¾ý5Ýl¨Ñi&”gÖ©˜Åù—•}Ú™—€Jç s6h&Ÿ†6z¥rÕíi`žJ*(qª9ø  Ç%zo˜†Ú訕F8 ©ƒ=xÛ›R*’š@²—)$š´ÖÊš«¶Žôް.d¹®´©sV¦Y˜›ªž&!«¬G½ÞôkW™êùi¢š"Êl ˆ>ꨨØ.¤Ì1å~¤uÊmQÆwë¶žnÙ-~¨bIn{ÎjݸíÆ[ û^ê-TLÎúì 3–¥³ §u°‰4FlñÅgÜÐÄ3ž¨ñÇ ‡l$Ç +òÉ(§¼ÿ!ÉÓªìòË0³Å²¬&ÇlóÍ85³T Ÿ4lªôb[-læbùe¿Z.ÍUk ƒH?íèÀP õrŒZJ4¿¡&fÚ¿ Fµ×U‹«4¸ß‚-¶Ù[—¹ísmG—ÞÒëÂ;ÔÎdõ\uXWõ§­!»êuwF vÀ_ßë.¹“ýÞÛ]“ äUj:î¨ôEÞ*ãV!ª‹+xvÖæ‘ 0Ú–_ž9³N#…÷g5ç,ûì´“ôzÅ\Ñ}vßi'=vïw2ÝõÀ‹RÍïïfû®»áõ¶>ÝC?yõä£Woõç¾kºö|Fç6èÏÞîqîš/ç¾î(ùäó¶_þù»>÷êðzÿ9é?¼ý ïwØþÚúÊä¾oÙ«x¢{Ò€>e‰¯Mµ‹ 'x‘êmBÎCÏ|x¯~ÐhÕiÚK·® Œ‚(|‘6³&žÅƒðkÜÿ œäµ.~B ÿ˜Bˆ¥ð‡*Q óöB ñˆ(³`³cœ’~;l›ÝJõ?úMªNÒVövhº0z%lôæ'µÇY _q!禈D£(‘EÿAß 6Ãæi„sTcï~¹’nS3£¨®Ê± kVÌ#M¸Æ¶ñn+ìN¬\øÈJZòco ‘3Â*íP D¤exÉRò*’š$U4,UñŽŽg^Ó×HSÚRE™¼¥.w9¤\²RT4`ä†É.`®O}X4¡¯˜ÃÂ…-Š»BCéÿÁRƒ'ä%f|™¢ ÚñšÂû^Ö©:P10ŽZÌ£,hÈR9Í•^¤9Q·Lm²ˆ›ö̧>9ÿ„O•k–ä\£ýؘC†Ž™sRß<³ÈIì ¡ùg÷F P‚“hZìŸ ZÍ0B4¢öìç‡ÌWNØ8q€¦!©HÊ>3uõ£:ßÉÎl]”¥è„&h7d®”†üéÓ|ˆD‘îó¨H•*Iä+š%õ©P âR‡»¨ZõªZ1*V·ÊUŸhµ«` +„¨ÊªŠõ¬hëTËŠ»´ºõ­ZjŒ¤åT¸Úõ®ù*^÷*V½òõ¯[õ+`+Ab8d )CCádÄ•¬M¥¤O‚ …ˆì"WpH B`‚4ij„ íŽìp‡ ùêfEàÙt¶¯è¦ )™¢×DÆ\·}›²æ¯Éé·Rší}¦¤—ÝDP4k»‹0ÆÑŒlÊ•©t•¬FÎaˆÀøØlg'ÒצÀ!SA Ìðà!&°†C–P¨!øC¢€ÐpĹiÅ/kŽ:Lì‚ F`Âάb­˜>–SiÀ‡‚q|D¸ k`ƒD+Úk“ñ-A,âW’Ä&N±ÿQ¬âSÅ„—÷†ÚJ íp¢ó“ô¤#M8±ê=éä±küÄáü ÈE&2€ì´ô„ò{r‘mzTßW[GÞ±Ôd¬àõçËLîq±¾¼åìy{]fr—ËÌæ*Š8VT™ÕÌ7s’ù©Vvq7‰:õè¹"yþ³ cèA:e…>´¢A–èE;úbVÉh¬÷Ocñíz c3Aº¹F§X®¨¥Z…dI)TqNn§Ï‡'f†úyEÃ#O'/†ž )muüôd•DZXZÚàÇçž[×BîdÒýiýqêRÉìåêWÌám¹±..´YGOÞýÖÏ\>v¸¯ÝøÄ=͘Í÷óž¿ÝG üúÑðvàs©ÚV­pôÕº>5õÆ6HÅÑTšè½LHà}tš¸ÖWâšè¾¾Õtpg̵¹OõS¢:( õÁ{]¤wû¬ÛÓÆ»t˜®m¯¦Þþ^½ýï¾lÑ›\#¨Áu§íˆ»œáÈ–S³yÜras[lrË7È­5jZy<ÞHGÓÑ“Ît"-½éP?%d£»Ê¨[“ófëø®Îu‹=]W*v± u—lŽLú LÚ¹,¸ÒÜ*_o)¦'óuî›}޳žD]w—:;yµ|ù´×ͽŸÔ |JñÎwƒ]ð<¥öáe\ëd¿R”Iÿ‰ûPJ«5õìXáw.H1[§‚‡±‚0´z´7&øƒƒуkƒ´Lìe)7…(•PƤ|TiÈ×zÇG9Þ"}Ò·R#È„Ï5W/XWf¸†+â„G±„Š—5¥pè"·Vn$%LÁtͳodXmGHHc…‘çsXNqÖEZØ…Xèˆ]¤reƒ´|^xbAØ1ĆœÈO™X2Šÿ’‡¢XŠjÅô6„¦¸ŠnAЬøŠoñ‰0‹´x®X‹¸˜W²¨†¹Ø‹Wq‹¾è‹ÀŒ¹8ŒÄX‹ÆxŒIW÷à‚Ð /`ð _¥¯… %àZ®õ®U]&ÐòP]YZøðZÖµŽBÐ9€]Ø¥ŒðVÀà@`ðp¡U)`]…]æp1 ¨ Ò  `) ¡ % ‰3ÐY@øÐò¦ÐŽœ5ÀÆnê"\2t¸,Âár*i’-9rÁus…¤4~ã’É“²ÃH(¸‹Ò¥)03ôX”é“Ùg”JÉɸ”¡Ø”NɉP•k8•TÉ„Vy•>˜•ZÉ‚ÿOkhV‡7–¨ƒ>Á*–aR`‡–P÷uFF}ž×d>vggÙ4s4˜¡–¯'–!wÐgmffiç¶jÁ6g…I}áfB†=sÉsÁfÛ÷ró˜f†C”É“™©OšÇ<%tgÔ$™½8Œi™ˆy8“ùfa2? Õ%t†èÆPŽ9w‰†énAºDrX˜{S7–¢KÚ{¶&L»¥­×pˆ¤ö#S g…•8‹wP3§›•7Exƒu4¨‹šnµvS©æ9|ùô9 3©Jÿ5uiø“–šŸ•ÊD”²sì‡v'€˜º0J GªªífC.Š<0ǧÎéÓó;¬ú¦Wzw(ww¹7r4£è–¢z9¬——\Çy¬­ú…jtkJ-C'0eèªÉ"ªD­j£4h[bÔxˆ|Ðú¢‰¥‡ *ru·4u6}~'‰Xzª–‘ªÙfu&˜ñDp)Gc$z¯V«0åx~h®³*?xx§c\ÇvûÚ§ Km«r§ K¥Ó©tÍÚ©+"Boõ©kh›±‚¶±«gû±-²"›b$[²%v²(Û—»²Z©².+ZðÊ®Jê&æ ¡¼:°ka±zh–P•¤T1³…·j•,bH¥Rćyú5uJ°"hQ‡8TØ£åšò'ƒœ&¯z x{£žÓ¯~·š¾YiQm‡¢hêk-+i¢—³ÕS¢ÇvˆŠ9z´£ó(9ê³ §®–lJŠ<¢p»Ç& “œëÉè|—VÊÆ·Ë+¼(¬Ê£“ûx‡£ZŠœ2¯l1Ë Ë‡ŒÈ´˜ÌÐŒ‡ÿϬÙ[vÓ 3±L¦Ç—¤‰†XÙœ#˜¬Ç©LÊß,ÎmœÇn<ÎÙ!ÍêβÏòlUô\ÏPÏÑ:ÉCëȳÏZrÎ}ìŨ×ÌH§ÏìÁ¤ËÆdΤŒÎ8ˆ+†è§‚ †ÅùÃA•«Â|‚ …9g<›Klj ¬x Î1|{%½G–˜Îìüƒ÷u÷*•ÕŒÏ4ƳhÓ¬ØÑ/½—¡ÐbÛÎ%Ù½lÛÈ *ÔÅcÌWÅÓ,¯²æËÅb‰ÙÆÀãÛÔ^8Ñ ½ N”|ŸÜÐêL…\ˤÑ1L-Ö"-Tãd§¢ :öb¢áÒନ»ÕâêÕ#-×\ìÒ¸Ç×em}8Í‹Ðû×ä‡Ô@Ó:½OˆØù´ØŒýa5ýØ[³Ù’í•”]Ù&èØ˜=b—½Ùù§Ùž}I Ú˜ØœJÚ0ÝÙ¨=Ÿª½ÚöiÚIéÚ;8Ú²}Ø­]Û}Û¸ o´½Û/¦Û¾½h½Ü4ÜÄý,âàÇàÚ-À}Üh…Xø€1à Ý|À¼k…}ø Ý!Æw°uð tð Î ÛÝm®%" Þ¨ŽD !ÙÕ!ßø ­åÝFÔwPZü¸œÞÿÛ­~ý áØôm‡÷…BFÈ¢U @@  ÚŠZ÷¼ Ñ)0¹àZœáQ^ϰ³Ú¹P7ÜÂ+™+-™Ò6I“ËZ¤Äõ’ú4L[FŽ3qb’)! À ’ ©õÌÝ(^¡Ýh]Q¯€ ¡ &€ &°¦@ ¦€4 _Ÿ… ú½ŽK` nž]Ap5\'Wã/I<, “>^“Uƒ’A~’´UCÏù¥<Îç³ã¹"A ÆQ±0é@¡`Aaf$Ö^ÞH’¾OH087$@0ª0`À Ðêø0ø€gÐ ‘ÀafPagà û©Þ ÞéMw0Ó&îë¼-WZ'ìLìÂmìÜmÈΦÊ~h0rìíñ6íÍîÃníÒÎì ®íÉÎíë훚Ï.îL‡íß~îèžÛBíÛÞî KîBÈîòþhê^îaï÷¾ìïžíüÞïÝþïë^íÿgù^ïð.–ðÁ¾ð{CØn¥—Çÿèð&ðÚK§tjf ±f¼WáëëÄ^§ÇÌ_Á¯Jðîßépi~žW@wI®e§¸%Å"!òKïïIØj¸ùQ`Kò.ÏÆ[x˜Ù¹¸¹™'újl<Ê&zj9œ,©A·I¤y™Ÿ1۵üsPÞ d¡EÉé ^Ç&å8®"›T¤S™‰/d?ǘIqš5Phò!ÅóñkI«¢©ö–W0Jöòw¯œW– 5Ìñb6›ØIf»2êCÖyÇW³ñm–õ ø^/øƒÏÒ‹M™vÕVšHoø¹vúôêd­ù§Ë)Âó*e›ÿD1æ ®ï÷Ë…#ÿì̯ïÎ.ú9ÿpŸTïwúf¢~ÿútøi¼@ù*ZõOmùÉ‘¥ƒ¹û8ßû‹g O_c›ú’ý‰éùç?¼A ¯„›ù ÉûŒ™ÍﳚŸÿäÆù¦™TA Ÿ@‚ ,’0!¾" 6ćo“Ĉ-^ĘQ#>;bôøñ¢Ç‘"9’ŒÒ¢ÊQ–4É2%ÊZV”9ÓæÉ˜/y¼‰Ó§N¡&gZt§Ð•Fy.ÍùrèÏ I‘*mº”(VP>-YUìX²eÍžE›öfA¶*l÷aʼnÕŠºÕªÞ®|»j½™W)à¬;»¬™‘¥Ï¡‡à'~ÜØiÞš„)Ó4*uò×–•cÖ*™ðSËœÿ޾›ZõjÖ­1¶…ýVá\¹ëºÆ[÷nÞ½}ÿìXµiàÅGÞ2v[¸rÓ¥˜\útêÕ­ó^Ö3ñëݽ׸ÜmsÚmGŸ^ýzöíÝ¿‡ÿ]|AòÏ!R´_ÿ~þýýÿð¸ù ª¯¼óò 0Ad°AÁ!¸Ê»ï¶/Ä0C 7äð5·b+ð¹;$±DODѺe[È>èL1Fg¤±Æð>Ä1ĹF´±GÒÁu¬ ¿ D2I%åÃÿ‘¹ ]äqI)§¤²JÕ†|Ò@#­ä²K/¿l2Ç,EÜL3ÏD³F,gƒ²Ì4ß„3Î ×lQK åÄ3O=õ£ÓÅ ÑÛ3PA¥®O _$4QEÝÍÐ6ïd4RI'ËQ;Í“»Ý4USÝ<=Ò4PÏ´”LH½Û 0‘@Ýî4Ô\MlÔÖdÝh»W«¢õ(¦’˵GQo…³ÔÝü.3ŽšZ3VKãX¼˜=.3g?6TÔzíRØ"OÅ-;¼:i×p]íìÚj¿ò¬°Z%MÚÊë©ÜoÛí ²UÁÌVUcM—^u5ƒ,¨~Ùõ÷]X -áƒuex\‚¿µ×`†Gí÷4zÍ ÿø7mÍ#vV‰ŸM §†ãw0„ÇBWá‘¡ kÜ]±½Ø¦”]n9\M¥E¶ä™ç¥ÙájkÎ9gœ_fYhÌÖuè£6C 䉿™æƒ+nã?aô8c\eWi¥O.yë¨]v7]v™¶esy–Ø]U^ù_•ÎÞ^µƒöë{~9dŸÙ†Ûæºóõêãu¡&¸ìá…Ù,«Å[™r";pÀÏšºò þ{sÏåûóΧZçÀmí±Õîyt© CÜX|ÞüpÎkåšsoÃ&iÜoo4LúÆ–ÛbS­ÙëùnèÞaÕ—qØ3æŽ8º¾7l˜¨·\ßÄ—çžð±?C}|­¯âëáŠ}^œqè÷òý}¤m…¸ýà$’cã)åÓþã‡Zƒ¥ÿ°[ÌÔh vÌ€„`œ¸¿VЂ\ÿš ¦E¹Õ!lé¡­ôA fk‰Ú]õH¨Š­FÏ3‹êeÂIµt²aš\èBR @ÄÛ–»c6òµ_ö‹¹.f1åá.zë#âäˆX»é‘$0ü×Ó¶=ÐD oâºÞe¸gD#‚Ñ`à›[£b8$úˆ†,,Ÿï²§=Ô-tv4ö‚v³Ù½N޹‹ë’V7NaqŽÍ»í’»y…°‚<ä!KÇ´© ‡z#ãØ:IFïŽõêâ7Ùº=yŒ 3ÈË©ëmtdd¹ðÖ*e2•¤”Û#%9º]Jo~¶4c)E¤L‚Go±¤§LE"Òñ &ÄïúhÉ[1æXü%4£™LYc¢ÓfÏ`¸ËH"ÓsäæÓÀyÉóxTôå/×ÇŽIqyô|ä"s9M¸Ñ*高ê£8ÍÈÒžïú•)ZÍï‘‘|f<¢(Ó¸°$ÎóHî¼`FáãM꣩&—RÖ|”¤'Ei‰LšR–¶TH>”›.uB—ÖÔ¦ÿYéMuºSöä”§?ju|T¢Uc0e‘Ÿ gT¦6õ¨ø¢þ„èTªVõ.CµjVµº¬nÕ«^ÿíêWÅZÕ°ŽÕ¬F-ëYÕúÓ´®Õ­6më[åšÒ¸ÎÕ® ­ë]õZB¤æïj{ìMóXÂòo°úa'8‡ƒÀp2(±ifQ±ØÃnJù¼ã-‹ªå±dá¨Ø<ûÙŒNö:•¥VfE›ZÖÆ±¬« HÚÒbö´}ê_#‡ÀZBÔ‹” c¿çÛ/ŠÏ|]¤hÓx>%6W‹¡ èB%zňl–VLL%B±êCãgz¸ð±²±¾A­ø@ëIHšÓé<ÙÎH6³:rSô]wK÷Lês›œ„og{–eáѾ¡}eu—Ïf ÒÁþååkKŠ[™šjª‹eîßHK™ÍgÞ²\.(êLóó‰ùµ›qQÙß ÿ÷Äc£åeƒËPÍ¥Îr댮èJ?jÒ Ÿ³‹m«’^'ººætiq‰¬ߘ™yéH¬ß»Én"w+IÈËÂö1Ÿë䫪¬N=îXý„g‹_'áÖÙ5UñÑL7ÅI‚W¡ür"v?#¿ð2O~ö3™Ÿ¶Ü/²Ïj$´pD3ÆÈl»Ð´s¡-Ê}Z™Í†j…‹wáN]ºCBæ¨#jÖz-®“…iê‹þ¨Ñ:55µ2ÌžX+ÕJ%`auÝÿQ7ïÚ×yêõ‰:»!vîŽÕ¶-µ§Ï;åH;YÊŽÜ ÄâÔÔzÔÈ~v¶™½lA9»DÃvl”µ­!%û.’ƒ¶™¼]íãÆ9aãño=cw;Wyòήt×xJRê;²Þn=©{Ђ–X…³nè¾Þn†»O¿KZ÷¹¯ÌOlv˜+TVh#ÏEñ~íœ*“/f¿i3+s#çf9×KbáŠÛÆ/Þ’1xëCåU_1”÷)i§²Á¹De» ‡âŠúSÊ06ºó|ô WŽÒ÷V ÑæcÅ¢sèía¦S½éUÇçEo%Éc.O1wY͸üù~Áœ²+ö“KOû19ü딚~=®§jè={/Éžö·§’íq¿û$éž÷¿ÿ‘ï£ÅzíÈ8Ía÷²Ó€Rá_»ïÊYeþpÕª}ùxEýLÉÝOd*lœ}»æÞ¼tóF2ÂÔ¿>¡šÏÙ =èà “C6Îî;¹Áî«Ó¯¨õG»fï ÙžÄ;A“—²Ñ¸/Û?ÃÿÊ>UÛ¾¬§cŸèSºS°k‚9ó?é[@Ié¿I·¼«œ64A¤Š©­ ¢®;Á„¸ä:”Á™Ó:\s ÄÁ !ÁäÁöØÁßX¸ „>W22ô¼c³Pƒ=^ƒÁ$6UI°#<§"ô¿ŒQ[ÂŒúÁÍò ñ#¿)±'4`š£ <º1+§o2°z1 Ë Ã¤@®mR¹ùª¿ç«-ÜšVÃñc<4 @œ992$DÒ)j:3ï·0+8EB¹1ܳ0dø9Ÿ,䫬¹œ6¢K²©@Dª3JTÄÀO|»Ì2E ˜Äé£ÃH|0½à#'[+=”5¦cØ;&ƒ 0›þŠ%A9;Ô²E´«h¢U”Îô¡»¥™&é3¶­¢E²D*©Æ šÆŽºF$ÙFllB©bÁGÉÆq4Çä(ÇsTGàHÇutÇûñ!¿Zª !>Ñ{G³ÿjÇÅŠ¿á»ÇYüFÝ¡üšD9{·4Ä#3ìœrëÇÿÉÇ›–â287d#QÄExªÇ…쟆|3ø‚Ä5+¹Š´EYDŒŒ ”Âf„F[z¨µ³:‘QH’œ“Ü(+„É’É÷èÆšÌÈœGôÉý¸ÉŸʈÊ¡üÉ¢4JDÊõb¯h£§ž›G,Ž?´¾•«³¤ Хđô¤ËkÌ ¬¾!K¬Ì­¤Â"¯ L¹¢Y˃œûÈ3T \Ä—÷:DµüÅ;ôÅ¿hE¥äI›{½ö;>¦óʼn‚%sFdL¦ãC&ÅaÄË, /dŸ¹ä¶qDËâ³H»F0ÀÅK¤L¹lLˆñÊϤ¾^BÍ4ûÄ5Â…ÜL«¤H¥+œAò¸¹ÛËTÌ‚¦¾ü'+sIÌ<– È*j±hìÁØ$Éœ|+åtÇ‹TGç4Ëèÿ LMœÎëê¤ ìäΧŠÇÜêÉîOïyÌpK:.Ì—*œ¾—ÂÒxLsû °„¬Ü<=LL½pÜD#”8–{Ïö¤Ivë ß(¶Ûd¿Ìd+íT½pcƸ\CÆ Å• BhŒH‡iˈ9»\CÍ/LÈ2œK3¤Ï˜˜Ðÿ³MEPºÉô•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ q¯C¿>÷8 Xba­‡C ga¾!»LYiS¸rÇê´Û°d¾‰C†ÜØðèÁŒQ?l\zbk|¢U³–Üp¶`Ù´a“ÎmÑöbݪWç-í97ñו“+_ ÷rfº 9;æ Ütðêz©§¾y7÷Ú·cÿ|»»ëðoc½úŒè߃o/œ~}û‘—ëßß³ùÒçš•Å߀hàzäMÒ%`‚F(á„vµ`MbAWOvèᇠ†Ò…aÙ¤YtЍâŠ,¶!‰´4(•tYÅ÷‹àQ¤]U;vvcR=êäOCN£Œdш~QgÜ`=Š—#cSV©Û|LZyå–ùQIh¨Ùep£aÙÑ—dâv_xk†y˜Qþ\zÂéèfZvéž|lJ9'›¦Q©g™‚Цž\Êe¢rþtd†*‰cPEºU餘®„žF^æiŒ:(©U—’Úè’§zTêV«fÚ›”LòwÖª«=j¢†Öø¦š;*Z%¡Vîìœf÷$¢À&KìvÂæ'æ¢S:›³r»¨“±µç+–`ZGçž~Bk¬Ÿ²Ž9+¦¶ÞiŠlmª–»´Âw.¥©ÆëjºPá:ª½üöëï¿á«!ŠlðÁ |â†7ìðÃ,ÿ*¬/»WlñÅüI¼.Æwìq[‹JñIòÉKŸ´?~‰¬›¸©9ìé±\¬wæ1Zßzߪ<Þ®.¯w-¶+C›2™ç͇¨±5¦ì ËÚ\s E ­åi>ïìÕ/ë¬3K!Ï82Âv¸sΜ&³C—\î¡b£=,§%‹»æÏGs›æpwÉíΧéM·jG6lÙ±'tÜ‚šéš1Ç·ßfÞ7.œŒÏ«Q×I~ýñæœw.æ›iäÙu›}'ÕFÿl.Ó}9ízÕS§.÷¯ÀVW;Ò+‡ööîU¦ºÔQçü쪼hx¢^ø_Çsϰ[îèwõÞà“C- mÿòþgÝ0#îžÙ’7ë¶âÕ ~}¸dûeþvÝïýjö¦C¾í¸Ä/þºá}ÇÙ÷á﫜µÌB=†yî€L s>åœPyMŒ ßÂÀÿ80sÌ 7XÁÞjc ¡;WÀ\ð„(tX ÷ex%m‹[›xâc7s5{4´ÛŸnø­RÎ}|â^E´%Ä>ÙçˆH_ }ئ±qψOìÙy¨,5‘vêT¥E%¦e…¢C ¶¢8Ä"žŒtXb¡çÖ\x#K§Ã¥­Ñ†ëë¢Û¸ÅÛÁ[”Ýö¢hEçÞ›¢ù )½ª€1…Œ¤ÁÉ•>æñ’bŽSÞ€8C(æÌŒjüãá¶,Ov2pY "!OI.Söï•é#c“DÖ2ޝ£¡¯¸JVúÒq£, %Y…Äì)†L$ô쨬PÞño7c݃¦L86-†Ü1bò,Y¬?ÞÍ›Ðtf ùMoúQ޳¤¢SLavC™$çIOZ ³žøÌgˆî©Ï~úóEïÿ,‘ºäùÏ‚”@ü<¨BÊ–„2ô¡ÕŠC#JÑŠe¢ͨF[‚Ñzô£#é(HGJÒ€Tñ|`IWÊR“^I¡k©Lg‘Òô¦µ)NwJQòô§ õ)P‡Ú9b8d )CCádlD¨! ‚"²‹\Á!% JЮõ«²Ã.00Œè¤0­E²*®–`«%xœ×2æé…pÈÂ+Ö\•2Ué•®®YF`v×À&zÕ”0ÆÑŒzIªø8‡ L à#«[HÞš‡L!%0>VÀƒ‡˜ÀYB D |„à‰6:ÃÇÎÔ¶~5èE0± & 8>l°Š ´bøX>K8¤jÆðñÜ6¬ Eëc ÖîU»)Å wÇ[PÈ’÷¼4/z×ÿAõ²÷½tï`¥M£25|¤y~Y*òà-“e'8Í9Í2â6™Ö4æ¦\_’Èw#ˆ‹0ã&g2Ü=íÂñ/Ï0 ;üÖ×6€s"àôkßµ‘xZ vçK·«Öå08Å0¾ÊƒcLc‚w *­±Ž8ãû¸_=þ±ïuã|˜¯¢ï!+ç¥â<ɿޞä¨u»7Ò2[õ"b”·ÃøO~!ÞS“{uºã4«bž›š½Ä-w+rÔLó•ÚÖ¶.í²?E˜‘<¼7ë¨PÈDìûj5Ú-OÊÒ—ö õB¹mkÐÆùÝóÂÔè¼*Ndžž|³]mzxáôt¢LÊRîzÐD òWí"U«ä¿äŒ. ÝJ7—ùÉ î$•Y&h^¹rÌ<Ãõ Ñœ£ûá¯NØ3˜aýe.ãq“]¶N—W®ñÙxÅáå.Ÿ§§ÄõšNCY7»Í8»î“¦£f¤C4@××N¦Î¡ËÝ:;¦®vßV´´é ïäU`®fµÀ÷™ç…™pà÷WÀÎð-¼á7ÐÃ#NñýL¼$ôPq룉ã:—å2.¢‹[{¾ žsªÖW8|7­I¢ö£Ÿ½qt*{ÚèÄ´Ïf®: YØÙãîæÌ8k•»Â2;ËéH­«ÈëV›Ô‹M5WsX¢Ÿ˜õØ8;ÿ5úé6ß[™P s`2ÞmuŸ÷¡ÇÚãk>tÓßnv¥ÏðJ÷t¥Llçðñ{~Lû‘[öîŽ}‡kg»*Ÿ®Wüónñ<èGÿEÉ”ô¨÷èSÏz¯˜>Lj $_Gö Æìüñ¹Q¼Îù­pýÎ…7Ïé·éE“îYÁ:ø^þæg¹\Î0ö2“©K½k^†ºfúá¼Gë³) ù ñ"{ÍíAjy9«çWï ƒ{­Aï_Kúÿ’Ôÿ.é|rZEæý éþOõzV{G·|mh9whMÌ—6çW~ã'| hnÇäwÚw€pdnwäkÖd|‰·¾‚Æ~M÷|Ц=ÎV}Зj¨mˆqš÷.1Øz!44xƒ*öNiµg8؃Ó‚-æƒB˜68„FØy@ȃG¸„jQ„Lø„gÿEuFvzPX…¾—„g…Z˜N¸…^8]ø…bèa8†bX†fè…h˜†Z¸†lX…nø†O‡røc…p!ð€ð —ƒ…,„:WØPoõVñV“eMð( “•^…pEY˜( ‘–eYu˜bà~pðЕ”µU–e´èÓ€ ©  &°àºP¡‹ø0[žˆMð‰!` š¨U ¨)²QX€eg‚%hñ2äÆ<ÎcW„“M‰µ„FiƒÂ?­sŽŽâh!„F‘309ŠöXSïxú'Rù¸þ¨ ýøéR:ÈbJ8™]R¨gY˜I‡Iz‘ ÿgr­1F$öj——aš”Gk×~l€6ƒ¬÷{Âæa†*Éæ#ió‘]%B‘k 9pž‡x’¦_1ƒ’–‘qSvH(Ù“6b#I3íøsu”C‰“'’ï%zv—‚:Ù;ÿõ8²ç²·“@ùa¸fIF=°$bDifFjS9x7¸zbïvs[ùsdYXùõ–²—çè“L©m¹o†—xI•3‰zù’I‘#5˜ ±‘†9Sˆ¹˜ ×˜Ž™p™4”9“y™«–™š)dœÙ™>ö™ ©c“é”BB{`£w@ÆV`gšµb™9vÔw|ýGnÍô4 ¨>uE•ÛºÔ›»9i‡Ž§›½ù2Íóxê¸WÞFww§i¾yvOÇ€ŽÇ•fo¹tœ_•Î5¹’‚'h)wÙ4Ã)/X|Û§|ÁWeàY~‰–?JöÕ—Ó×oØ)táÓkm†r (ž#‚xÇžû ip…(F|g{gÕäe0d{tf“if‚ßxìŸÐ‚yÃEA’IöƒXéy’yÇJ)Ø•±Ttt×>*ÚŸ¡¶–=W˜t jÇA°i˜$É hÿ!š£Ic¥)£3|2˜¸‡<$o7š ? œlw6}R”tÙÙovµ(MÝV—ÔÉ;ó9o~v›Xuo‚œ9)k`z€åYœ†ÖrcÚ0?Úœ%¨wSg¸žö¥äÇ¥[Ÿp·|Ü·tFG¥ç)osSs¿ùxªsg©£õé–'›XÁlªéh³f¡áÆŸ(È,xçž!jmJBibÑÆ}w*}âG|Yò©'Ø¢<”dŠzrŽš0šy@:9 1IêŸCÆ£= c¼Ú« ö«Àú”³:¬i(¬ÆŠ^Èš¬äµ¬Ìê]Îú¬`­ÒJTKz«"b¨•T«ºú!ºW<ŠY1oZªƒÃª©ð³k«Åf“úƒlºl6”®{ÄKñ:¨¨df7Twëä}¹fki¤ŸY#uâ—ªW¦Jg¶Ÿ¾q®ªïg’óêqÇBfD-rD‚ n™FsŒ”§ïIx›Š`˜·}à)±Ü™ˆš¦ëꮀ–•ôI9‚ç|Y–¡Û‘åyãÚž/Gœsj¡ëö²·¦@i&(§ßÊnÂ'i9)§Ã†´"jªðÉmŠg¥rImåsJûcM¾s-~êo:ê`Å A¹*¸Ê­2ÿE­Õ Th«÷gšc»­mñ¶$S¤f«yFE¨RÆ>ºÆ·À„¦Qçk¯T€ {›£z¡†óŸ=× óÚ•ú*rËkßm ê-+g’Z¹ãÉ…aK¨6FIä±0KJˆM,:±¥ §Xk#ú³¸e‚j±OË‘¶äe÷kÎD²B «»¹–A£“§+qWie¦¸×ˆLM6•=ÛŽuziW{J8×µå:~lç;B‹¡ÑÛx øoÊæÖùnÃWãXN\k´G)·±¶¨qe±W·1)¿'Á¾i‹Sö{¿[×¹úË„ùÛ¿-õ¿¼R<À$UÀ RœÀµÀ ¬Q›"ÚºmóK+êÛBô‹vÂK…Ĥ¨é¹WûqœÁ®I®·Á°—À§`(¦ÆëåJ¨“  3|‚àֻч¼6(5œÃÅ©¨=¼ÃÄ„žb ªð9¾™Ú)(<€ÒÈqñk[Al-5<Á˜–·D{Ÿ 6äûÂpzV  L¹ž‹ÂP“€ÊÙ|\L«bÂrÁ›×jÖüûÀ8Ç«fÇ£r+GÇ3ZÙ„éÂÀ{Çg"ÈìÃ'LÈUç‚Ã$Jª{ÉXj›Ú ¾tZJM[§7œ³ ŒÈ:ÇÆÉÇžJŒ¾‚º?xj€Mks©Lξ7›±«Úʼn‡ÄJ <7ÁN+¾^|²ºìÂÝi§:§FlŸ³Û¤[»Fê³Ó뻜,ÅG|QyÌ~ø7 ~¬Çõ{ÍÜ\’ÞüÍ‚Îâ­SÉQåWžbH®åJä]>T_nÓ9ÁåcN¬NNåEžæR¾æ`Žæn®¬Ynæ!çsÞäôäbžç7Uæz†ç~Þ]€Žãmn*ˆí’ÛšèÇèžÿYç~è"¯û®HW4[°Šn´;ûÚ±æ é†å¶{l\IÂØª’DIL ¿@‘ßH¹Ç¢®!‚>·Q»a÷fx¼i•û™—«¢aò 'æÚløƒe Ŷ„*–BXè´.é„y²йK©•øZ°Ç9—–Kíz”íÁ6eQ–}«þ8‰îºîFZ9„ήµnëLãíÕ^¦I¶—l¹—ãμ_ÉaÊžïZz`i¼ëqYï «î³ÎîÐí¾‹ëNZ•Ú–5û»÷Þ–òÞa™íýîBX)ìH𜶨Í^ðtÑîî>a ˜)iNÕž‘µÕ”JY³®zê±|û.¥Æx_Ä>½¸î!ð„鏸þðÇþðô.=Àó_”òJòf‰_ïòc¨óQ!ò¶îóÏxIÉ—eùÌY¯õÂiêæWî“¶›Aß—Sîæ–ÛLè ?õ<ð±nòG?÷O|óÕ’F¿d'™°€É×—ìMIó8߃Ræo >è ×ö†OꈿöŠÇŒç‡ù<ù[^ù–OÀ˜æV¾ù,Uø”ïø _R¢Ÿù¤_ú‡ÙùT¯úgËúšïú û©/û9ÿEû}nû·çvŽú¹¯ûuúžüø‹ûŸOüÁoüÈ¿¿¼鵿ü%ü­ý»¿çlþüÔÿ]Í?ê¿OO¾<ɶêè,ò¶ÏÛÿìØ{+<þo¬ “J¶/˜{jþIÒû¯.þû×þØüµOà@‚ ,B† >„QâDŠ &\XQ£Ã‹vôr -|$M–DI²ÈÊ•øŠ¸„ùRà&|4Er)1'F…=3úÜ9hÇ¡ ‹â*ôèÁ¢‘Ø4êÒ§J“>…z«OˆG©n½(u*T«dÁËõ¬ÓµjMÛ3îÛ«T—Š5ènR¼9ÚÝ ˜ ÿQ¸7'žDœÒ%Ë—c¤iÓpÞÂ8õR®ê–)Û©•~‹Yôç̤A—öL³_¶ª5îdmµgѰC?D»Yvî̱ic8Ú ¹mŸþ]üvjΑÏvM›÷dˆ‰­/fùØñÌšÔ)›íÊYvçés3Þ»©xèËÏW=®^ªoéàq /ÍZìþæN+¿ŸË¹ñ£Ï¸þ滋¬õØkï9úHó->Ô„°5ÿôî¡ëcÌ1!ë.Cž*2p5  K¼è&tï>û31¸ñ{0=ÍÒ£p6g,q´/´ñE”?á;ÑGwSÑ=4-¾“ñ  ëP;˜¸¦“¬ÊxãÏ2µÖ‚2¹ ¿*kLåê,Àq¤kLÏZò¼õÈlòšÔqEŽÑ 5i¯Üx¡"eL2Gµƒ\thÝ*nZ¤§é•Uêd%DùbM~PÀaü¹g¹ÕmI wûNµsVÈé&gÑHlÐÍ­e~|nÁo­íè¼&–Ãû6ÿwjÄÇr뵯>œmÒ;?@…‹ L²×ÒªØ+¤ûn®§úGÙqcobº‰Ãøtö®·ÜÿF³çÑ_V3s¯ÍžTûº),<ÐîÝl“¹…V+}¬˜}ÎFùšfô!íSsû/^Ÿi齤¹ìå-¼Iì¸*ਢw@:-uXZݱü¦­¶Êe U=¥A vp#ŒZë<8B–Є'lYw=¶Ð…/„!¼T(AÆÐ†7Äaw5CkMP‡?b…¨·Â*‚=¬á•¸D&.‘‡ Kb¥8E*¢ð‰[òaµ¸E.6íŠÖ»WÅ8F2Æ«ˆÔ:"YXF6¶Ñ;<£¸ ¶Â0¾ÑŽwÄ£ˆÿ¾8À<öÑü`çU=>Ò‡DäHÉ0,F1‘„d÷8²HVÒ’\œd/¹IN1“Žìd(EÃO®q”§D¥ KYÇT¶Ò•§[å+e9˼Œ–Û˘¯88‘] oþë£-±wAú΀ÅS  »F¢Šõr„Â$Ù[hL}½îTÎ|Â~)MB³Jâ˜þ6gºúÓhÙ™ðW²øñçœá#•^Z–¨rš¯}éì_åLǽîѳPbç>ñ$'yúhàäSBë'}3CÞô1Å)—¤]ŽHd+_Ûp©ž =ÉqŸÉhؘ7¸åɯEÞjdµÝÁ-kɳ]Úœé<$1ó`ÔFAQêH4—e‹œ˜vVS¬qN7ÁÓhç–F?8á/"EZœ;÷'„š”MÈTª÷¾Ö;äl4êe„JÑæ]A¨wxÑ}-sl¼œJk§“®vô¤·¡fã~ª¤«ÉÔ¥ÏÃ)_[ºQðùH|(å(\·6º•ˆ¥7ÕidEJµ"ðxWMœöÂ$;¯ò³rãC§ÝîÒše6¨Yó,Yê3þtŸç^·› t©÷,šj™ê–|Þžóéd*›Gl"P‹Å½e §ÅH0>¹´zÜa-74%uµ»]fÿ —»ßo«¼ûÝéîõ„U}XĆÞdׂܤ|mŠªòRP¾ïU¯|ëKDëΑ†ÙÝÕ~ÿ'àŽyÀ†9ð¯î›`Џ—¾„bïfuW[s2M¬º{œiª´º¶Â5T?üÙ”áÖáE¯mð\ «”}¾Ý°ïªÙ u˜œ÷Ýé"¯Û\× È­­b‰úµ¯ôw1m,‘Ûö6’.ê¨HŰ]côT­B«É+ï¬9dÇêêlu]måàûجz,çÊwÏÓ xŸ±usXñÂ*ÓÍUò’{¬>YÌ=žl;ÒÎZuªE-4ƒ%BækV-lžKÚæ]Ù½ÅP޲Icª×û`.w@¥+éþÌd*o±;;º ‡ç&{Çì/ßþËJ[A¶»pn 5¤©vÎ’B´ûúôk–Úú·©5ó;uË^¥¯dH&6¡…­Îüñ,rõÔkg½hû‰&á¶Ãû³É\.½éb6¯=àWÛKý’¨¸ú-yGdÝîÆw¾Cro}÷Ûß궬¿MëÜàá÷ÁÞï„/ÜáãnøÃ%¾ÝˆOÜâ´¬øÅ5ÞÊŒoÜã¢ÿìøÇE~ÉÜä,ùÉUÈ”¯ÜåxlùËe.É€’’3Ç9Ék.À›çÜç(ßyÁýs¢û1æEGºžt¦ÿpé7)´ ³Œ½TÕºÅo†¬.ª§ó«Ýœz­HLn½Ü_V׿t" ÏôhhÝJZN¦¸çz84®›´ã”÷ðìºî(ö,Ïø ¿ ß½<)škÜǾ¶G8­qyi…õþ#›½ÁA§£‚Ó Z¹žIÔkœ>Q ;D ï}œEgžUkúÄ ¥Ô³­÷ªZXè|¾¬¬‡­éñ>zÃeN?¯çkìqOÝCîÚïz:‹»ü»[g¬ó/ŠvV¥,ý>“vó}æŸ×ÙUJɘÄt®«™ MiÚÆûÍàÄñ‚§f´×ªëÏ¥§ ×Ó†c0M*L³dc_õ—%?Êû±Ý£)å¡)çà*V³Œ+³ëû«°ëµ#¬Ë4¦Ð2(ë+×ó3Tó½ô±Ùù‰&¬O+Žf;½ÓÛ28 ”IkªÅZ¼TK½Ù@ãÀ3ä=™¬l‘Àh>¦ºã4:i-äÃÓ*Ìʶ¶ã­çSšyª?zJ“¾Ë“ ¼5", )²SK+(ÂÜ9œ–Ÿ?s–ü!ËC°ö!3„5/Ì›5çBCòŠCéšÃÿtÃkº<„¹;T#‚ÓÃ?¬"2"6Ü´¼!Ä2ûÒkEò©2iDÆÞc½ïÁÆg¤B–É>Ár´s,3Yލ:Á¡šÁnŒŽ5CÆï>ÔóB” ÷[F£:L[kêÇôû?°I<™BåÁÆéËÀ/LOó¿ö8Ÿs4ª!c?Ü5Š¿Ð±Bl½‹ E±ê?SÿÙDÅâÇ&*p ÇzHOLÁsŒ´'„œÒAIõÃ%vÔÅPŒIó’È@G?«@ K²$ã4ŽF‘R1E ÉPÛI®’=ã[€¼Fèê\),Iz´ÊÁHB>³ ÂŽ‚½Ì@þ™Gid›ŒlÁ€\Ç¡:­•ü˜|„DLCÍq2þ œA™l¶ú3­®DŠ Ì©³´KóÊäBttIDÅ!¬dLœž¼GÅ,À¦<’ÔK!(ˆp°·JµÔܼƒbÀ‡ae€[ƒlÀ‡E0J¥Ï7ô”y8U‹³‡wØcxE8„@؃=¸@ Ep„HH†nˆT÷¼U<ŒjH`ƒ0@z8àƒ!0€‚ˆ8|(]Í7NØ=8V0°CÖ>Œ*(}-Px‡}-W‚€(sH…@t-RÀtˆrmWw7x?0Vƒ ÐårÄ{K‚˜„ 0…~EØ‚(Ù h(iÈY ˆ‚tˆÈ‚’Ø‚åWk°XîJ˜„9ˆ € €Iÿ¦Êò‚m„…“!(¬ìƾ4±+4Å–æx*'=YìK ,Û„Kÿ𣮭”K`9€[ø.]¨X€…”í×}•ˆP JÛ³%Ã:ÛäÐ!ó9\9¾¼ \Ç-\¬ ¹Ûµµ\œÁ#¿ø”‡hÄKYÞˆ©ÝVgØ×€ˆ(X¨Xjè,S˜…jXP¸|˜‡ÀŇgÐ-PÐ* ÔÀÖ ^Æ•\IÜã]\®ÕZâuÈÅÂä]\£Þç…^׻Ċ^æí.S5ˆƒZ¿5—X„Ø•¥|@8Th×HP‡v-X`ÿ×8WhWXß\±\­5ÞÃ`äÝå\±-`ÈÃÁÈÕÞ´µ^n^,Ûîm£Þ^á_ˆp‚*€‚/ ÝW0+](‡mŇ,yx…rˆ%0ˆm¥R(Wð„)x¶J”ÁS“k(RÌ!ÅU`ì[StB¶…¥´à"ôÄ7²³ûz‚  &À$8‚ ˜jP… 0¦0Ƈ À‡3H^ø6>6^‡^@FKÒÅY„õ_õÂ2“ûH¨K® (…h`#`5ˆU˜€U4vä pƒ4À5I–ä5Vƒ:Þ`‡ð„mÝ×kZ—›rD¦ˆ78†ÔP–¥UfeWråWN%y ;aolserver4-4.5.1/docs/intro/tcl2k/html/img021.gif0000644000175000017500000002624007363640502021174 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ  '_­3vÈ·¯ÆÁzE"~¸k㉠–œ—qäÄá6¥%w¬N»,/C,<9"éÊ «F¯ñà¿®YwõkÙ­mËF¼š4eмqŸ|»tmâ»q›Ö]šöÅȽ-m<·ïãË«CV.\¹tÌ"5/ÿíL7!è•§Ocÿ~6ëèìÛ«ŸþóúÔ·×ÿ_¾véûI”_vú¥Çß÷i‡GÐ%×w úgÝh w”IâÑDžgem(âˆ$–hâ‰IuX“XåÕÅŠ0Æ(ãŒ4ʨbX6yfÞ‹5öèã@iÔœ±âyB&©ä’L69‘ÒbVóYF¡s¹Q…¡“BmÙ–—*afEc†ù_[P)%’(ixØtºY(§•Ýe)™•wÚ™§……íY›žZwæ•9èf†.è¢vâgØ{Èáù§£‚îU¡ •õ‰'¥`fšÚ¢™Â)©€Jjh•ó%W©^iæØâ”g•½é£w²rië­6n¦k‘®É#®À+ì°^íºY”R±Iì²Ì6ëlI­Þä+Iƒ>kmJÕví¶­ý-T¯*;›iØUk¢sr[R¶ŸB¦.°ìŽôm‹;RË`_Ó‘‰¯ŸŒŽvg¤›úëî¾Ýèv«ðÂêÆï»N>Ò¼:ºh¯`¾åÕ§¦¯Zh¨ ü)¾û,°{?ª2 •nücíi{É5:œÉ ¯ ¦†ó„þœòzƒJ ¯·Æÿާf²¿zdt¹7isÔÌ>íÅá6=.Õ\ƒ4u×ÂZYÒ.M–¸ %6Ø&~Ý%Û±"­"²gk¶`ä.¼rÑz›¬*܉¹w»î2lð™~'Ž.áÞ8KXO;Ruk;^õàÔÚö›¦´" ôЖoÝSäkÚ½Qå¡[+xêJ¢žéL_Ìzê«Ï¤ëÁ^·ì˜{ë–¾U»í?â~‘~ØÝ +Lð{#3®-ÌÎó;}ó,Þ¼Á×WŸ7ôz·[mÉýj/þôçcóóá7JfáÏd<ñ@Í_òõNž7ýQÿ#²Eðg1ýnþ;`Œø$²­¨W¥ã©–À žˆ! ¬>‚AŸ0xDß^BØ£ºÄ8’V ˆìq§{íKŸô²T(ô!Î{04!1G=¿YOfΣÉC¾Ñ‰_àÛß³tè ¢ítJ$a³*H(áìŠAZ΀æ/ö ‘|ß³"è|f¨–½ìz/›‘ÂĆ8Qy<”"·¨èA9†Fn¤[òìÈÇöEmDáU»?VIŽ SÍîò“@¾ñÔë# 8<ŠGù£]A¨:J¶Í’ÿIÃdÙ):õlfÈ)¥„º–HO6”på]‰HZ–»’åm©ÀVÞÅ—2žÄ)H]‘—ü{Úöˆ8I&l™ÈŒâJÍ/íÇŠ~☞|6›ëüïtûÙÎ>·Å“q‹ Ê®ˆÊi‹Ú”a ͅ˸˜mÕ”"0ïHIbÎ힙̧÷)P¶„š A%£VvПyè(zÀfRÔ1õ<–DgyÑÙ-´£w]17ºKî£&ã4G ÁB¦Ôv(}©EúÏ–îN¦8ÍiHˆá=4¤ A„C±„¶$ZˆÈ.Bp‡” &(AC¤ªÓªòÏw¸¿ÀÀ£Jä©"j ¢Z‚W\°‡ Y©€˜ÍeÝp\Ü;_gøMi¾•~Íáâ]„1Žf¬Í«9‡ L àã©QHÆš‡L!%0>VÀƒ‡˜ÀYB D |„à‰6 E«š„‰1Ú0± & 8>l°Š ´bøX>pK8¤jÆðñÛ6¬ d)!ojÚæ:÷ Ê—äžKÝêr(ºôš¨u·ËÝ×a·bí®xÇ+ÿÈJw…äM/yÛ&/ÙçRJ•7ýÏâÌAúR'œNY_1Ú÷¾ÒÏw\–Ê+¨¿ìÌ–}xv®%ØÀœ;ƒ» ¥K¯¤Jí¾›5¿”é¾ ^°^_Næ·…bì€ûƒ%XÅFŒŒ_Ó&ž–B˜ƒT|ã»øÇ|RT†ƒ¬$ö.©ÅêU¨‰dä$;Ù´M~²”qå)[¤U¾²– še6*He_F 5ªRâøUÇü{31k“›òÉoM™Î6gÈ›l^Õ«˜cH9Â|>ؗ˼7õä¹@ £ð `žíyTZéòQTÉcašj­Ì!´ÎDL󯕙ƒæOêEÌÔÖ[Ùž(Ý(Ê•šTäò³ô°Y¾!ZApFõ…)=j—6‹Ë^±jº\|nùØXæðt‘Íl.+½ÍŽv4%=Ó˜EÌ7s4¢¬êkÎÛܦ«ªR‰úÐ:3*Wœèvk¸xUšM’wc4št”6ü Kìóº´ÞúÞJ¾Nj•Pû}Ë3hUì]pqß®Ü Ô!'-ݰx—mÞõZisø/º*îÔåïÀqè šï{}‹Þ¾ƾ5‚ ¢—$é1ã‡1nz{7Ý”Gh½ðD[r/->H3àl$xÃ¥yïŽÂÿ<”2g¨Ò“Þ©oœßŸv9l« ¯ÜWaxÅ}rðºzê4_׸#ɸeæk®)ÓîrJ¡UÜbO8M³^ìŒs}œëtÎþ<øÀg܆¯ûЭ> ‡{íˆGwã—¾p°Ë/œzfÏ…îJn²?ûß?û¾IKwÑ~¥ýÎnx¯nzµY¾õ.OIÙG/tØWýö#øÓcu…Û¾~`Ï;EwŸËÞ+†Ì%¶ù⩃³÷-ÅØÁ±Ãm9ò©ßžZ_½ÞnÒê+ýúÍ~Iqÿû¯“¿üÓ7Éìá.lô«ýü¥ÿ{عÂù®€_Þ}ߺûId´·»°å]ÔqýR{0Et楧zã×KÂÇ$Ã$cΔ'Øä_cÖ19WNžSgɇmÚ3Ið4_=wsxNH3ì‡z|gtôfH´€2u—Ú·•$ƒ±‡ëçV¥ẖ_;؃¤Dƒ5x7H,¬Fk¶mØæƒ/·Ì´rè=ÍÄ‚Îâ‚E‡€3„j!D…§|[¨…I˜xyf_Èf“'†™ç…Ñ—xžbvðgpŸwtX¸!R˜RTÿx€à•€ß‡Z¾T‡Ýg€¼ƒz¨{ni€'BÖ&kA€§å4õSwˆ(èws8ƒz—W3kòTrï) ×~'£r,>Ï4C‡Ãvqãy©—‡WX‰fрзøEì”y΄N¸øxgÔ~%³NIÔnZ?8‚k‰ÆäŠ"⇠…ŒÆ§Œ–¸Î(~­€„Ó(ˆÕhM·>4Ô†ó„V,„•“¨ܘ޲ŽìØŽîøŽðò8ôXöH€˜Œé¸kQ÷à‚Ð /`ð U¦d… %0Vcõc5X&Ðò0XY@Uø@V„Õ‘B®Ð9`X†Å&ùà~pð06«Øa‘„U†e<éÓ€ ©  &°àºP¡€“ø0Q#‰M@’!`  U%‰qCr•‰lµhn5nù‚‰6tŒ±7–mWCjjIެôvi1{)03'y—n1„x¹—k¡—|ù—fá—€9˜Y!˜„y˜Ta˜ˆ¹˜E¡˜Œù˜@á˜9™ÿ‡)ˆ-ë8ŒˆhöŠN̘9ïˆaŽá^Ÿé|™$’9dm³™¬Yšã`KD+®yy#&ûEdªi™”h›ŸY96Nâ4b>t¹9cVaïUœ!&+—1²öcÀÙiÇ©››¶÷’n/gø%ñÁ kÈé|=²š4vkÈGœÕéb$Œ©ù&ìâ€ôÅhë‰dÏ•Ö|wæ&"fcÖh'öšìy*ü9¤ÙbAaá)$æ ž+ÆE͹žê ž:‡Šúa„7W Ÿ ḑ…Zœ}æjº ú%Dõ)¢úC¨Y›lÑ ½£”é™Q#£šš5ÊG8º£>ÿz5¼‰Ž?:¤BÑ£Dz¤÷¤1ˆ¤L*„J:ˆM¥a¤RÚ¤TZ¥Hz¥XJ¤ZÊA¡cçeJ¦I]g)†øˆ#b¤ª/‰ˆ›º‰y‚Fh§ÆjfzúIN”·)ã¡þ÷iŠˆAwi§›—ÁÆi£¸M=Cš‹§¹¡E³¨ ²§Œ ¨ßØ84 -OºÙé;”š njJŠR„žV¦ŠD¶†ª Zªg*g©:‹šЇrf¦`Ò‡›ŸgÚª]´7zz¨‘«£¨°*§™ ‡5¹l° §vv¶ø¬î!¬f$gŠJŸfš´F›Ò‡)Ù&­z`–Jªk¶­àº3J8¬=笨ºgtÚf¼–nö5«Ùúg¹©N§c[Ê5ÿ]š¯;º¯üJ™þú¯°˘†©£Zæ}º—Ïz?ª°gŽVÈP¥(‹cr8ו˜€‘T±k¨¨Øyñlj§è>'ŠžÂyãM$±¬(u“ ±úæ²6y|5×mÌgœä9f"(xîäs(*·•sôz­G³Ê*hq¬k§•ýc´¦‡´Ðæ°æG%ݘ§@"³Ò&µ §´4׆¢k8¬_[0DËvn'Šª±rG–þ—~Áq(ë¢"£j(Ž'{DH–X–ªx‚ë{”©µÑƵrèµÔ:2´xhÛ³ŒÚ]ÕÇ9ç6†ì¦!Úª«††dô·1G0[µÖµ%xl^†{™Ž8K}¢ 5ÔUº½R¸·±s÷•³®W¹"T±j5¶”ZM®+¤¬W£„Ûl¿»¤ñ×¢–®!ˆ‹¨^<‡8—¼ zÌÛ´pË5Å ¥§‡ºg7¼vº^#fÿŰž+¸1»ºôÔŒä«R—ºäå½fÙ>µû?žh»v”½œÊtçû†¿‡¿Ÿû˜ð›2¥¢Üš¬én`hvdˆf,;ºK»¾çh¼Õ¶£ð{/tk£ë¬_Ák³‹¾V翾ז[é±³[=ÜŽ+w†sk²x÷Â*lŠ2|†Ö[‡l¦ Û=+;ÁÅÁ/k¾™Ã Ä5‹t ÇxáÔNÙœÛZ‹„´8›‹J_€ÜægRì³@ö|eȳáh½ú ¾;gÄIKÆHì–hºˆò“¾¼½ÜME̹PW¾ì£D|»f<µˆ«Æwé}îB"|Ç ¡KǼgÇi\ÈolÈž4È‹,¼*Å´ÛÉTËÆN–ÇVfɈK¹«¶“ׄ'ܶ¡w}ûȆü}{ܵh,Éük{œÜʈ­÷ª‹Ðw«H8¨ý4ɆwËfôfìŠbtäÊb6«|¸²\Bv(·Š¸ÆN£ÁSÿ¸Ì¦+:xœÊÿ;iW²ögͯ¼~|’¸k²a€“b¿ßô‹b,»¤,¡PDêC´ ÜÍÈ ¸ALÈ®|¼ý ÎÀ[°°› ‡³¸ظÕû¸*ˆÈŧÈÉ®gZ±ÜÐØÌŽ<u¤ÐØÇ¾+¨¹Èz4SÏÞ˜Î{KŒxKÊñìÇ`ôs†3´AS¿%-βg¯¨œÐ2ѵdÓÞÂþ,Á?¬Ó!ÇÓ~-ÑÝÏC¬½U“«NË:o=ÍÔ8¨i¤šœ¿ê8QL8ý.WÝ®òêÔA]´È½š—ŌەÃ7ÕùkÔÉ|´líÖG Ëq-×}ìÉmÊ4ÌÂÝæ†<6ŒFšˆr)<Ïß&¿6Šƒ½×g9Ñ&عEm×~] Ù~}bL|«é”`-ÕIý‚KÝÖr½Õ¼ÿ4Ù^!Ù´Äÿ…flªÍ;4+u-ÙøÚƒ8§kšžgÁ;¬·d wó»Û¹r“ŠÂ(ÜâƒÌºûÖ½wŽýÙÒ¨œÉùªZ\Ûs {¤MÙcŒÕÇìn­Ê»¼#HÅ4öÝeXÀúx©¨ÜuüØÖýÊo£Ï˜ÜP¯½ÞìýŠ„ñ-ß><ÁÝ„!­ÖèLCêü/$Ø–)Ìbk·.Êa<ÒÓ·uËÝÁøßHÞ‰¬Þ¾½¢ÍGÕ=áBD×]…ùœá•]ážÞÌMâî~ŽßNK-.ßþ_Ù}À–ûâ¶ãëã5má á*¾Ó îãâAþ—âàÇàÚ\¤ÉÊÇGn’>…x. SÎ4‰ÏGåwÉw°uð tð NÎågLc%" É‘D !‡Õ!çø bååâÕwU/¹œæÿ>â1‘Içð&ÓÄ#Ú<Þ5•™ðd`К °å‹ÞåÑ)€“¹0VPéQ^Ï€É}ʉÈÂ‡è· ®¸wÂ$(–s§9ÿ­ØœØÑãòÌ òÐU4ÍæOÅêø IXQ¯€ ¡ &€ &°¦@ ¦€4ZS… zÞ‘K` ê~XAÀO!Kس›W¹ZéÑœë¶Î·÷÷iæC¢e‰Ü­}ÝA ®ÅQ±0é@[!\Äee·Y™•‚.mH087$@0ª[À pòø0ø€gÐ Àð[f0\gà „Éõä¬|ñGú-Ó>óy#ÅóTíó„ ôZ'ô Môiôù‡ôJo¥(ôÿüôõG?õTo°VßôXŸõˆÉôçèô^?¤`Ÿ]b?ö>Zö;ßõh˜jß"gßö»õaÏör¿—oïq÷?O÷fo÷|’yO{?…”¼‡,ÈÑuú,ÿƒ…ï›§¹ˆLËŽ“æœvÇ¡%­%تÚÂ_Eæ÷kßóÙyA“ø¥_sŠƒÄ*pJÍ]¬ø'Òø9ñø§%La¶Ÿ6®Å–¡G¸ú ü½¡ iù) ¦ã]©§ÒûαªåšúÌOüйÀ‘‹&Úu÷IïE%úpøÐÿ¦I4œí$ÀÂ9¡zFbמÛÍËç¢(Vˆû‹Ë™ižó¬'ºƒ üíÝlþÀ@ø $x`Áƒ "døp Ã„V´˜QãFŽ=~´H ŸH’#MŠ,’2%¾",]¶4¸ ŸL5 .Ä9ñâDŒ{ö„HQçÍ¡ ‡&ÔÿæÎœ?>h4"P§Q9&•ÊTbQŒ]‹ú«Ð°QÇ‚K•«Ø¯J3zµêöj[¢dçÆ]šWï^%ýžd©²åà—eÒä»ñ,YºM×ZUk¶-\ˆŽñ¢¥k¬TËYµzæLùí㭒ˆn zó]Õ9õ¦ekš±c¦®WîˆurfÕ‰}ÿ¶ùWx`•… Çœ |ôåÒ±e÷ŽŒ4RÞ|g­š;¶tÖË¹Ë š½{oï°qÖ4¯ùöz‹ q'½N¾quðÊíßo8ü¯`Âý 'Ǽöx"Mºè Üí´øòZ°2ÈèO<Òû>÷¾+M½» ¬O±Ìdï:-dNúdÿ®ÁW °áø3Î%ä 0>Ñ*ãŒ;që¹ 2Ñ'ydL(è+QGÝlÅL2Ç­jCïÃíäS«G)o;oB¶ ÷Mí(‹F|ã/ |ÔÊgUõ¹O†Ÿÿh@:P‚´SìD:õU=[*ÔR å BÑâÐy1”¢v;è8%0ªí2¡¦z"ƒj Æó½ïk“3dÁPAôf.Õ‹D?BÈ›D!ð“ˆMÑXSŠÜÔ¦?ýOxšÓŸît=fQŒ*Qz‘¡Þ°¦7ìJ{žŠS½A•ª<…iÛ2º5ŽvíœíÌ S˜S£†“ä]Z¥ZIP†e¨ReÛRµr7µÕxî‘Ô|ÆêÉ$¢-«ÎÒ(´,æ9ëìIp½è§fŠ¢Äv ±5‘é„û.¹NVs[gʧØß<¶¯q4)Sý9Q–J±e•µlK1[&ÍvW˜û_iqjÆLúô„ò›¤Ê ÔŸ Щ@=íbS{¸Õ2°µØc¡ÆjB±®F¨kEë^ËjÚO‚’Haä ÍP;܇÷EåÜlb<ËÝ[m—¼ŸóîºÀëÚלpÂuow-ÿÙ܇¡¼bTQ——ÛBn‚¢])p{úS¾ÇJ%l×8Þ~1˜U=.ÁJÚâ5•tás«~µÃ»©¾I´VÕiniZÔ›îÖ¶Áª¿¶ bÞþ¶Ä:}«…cHb¸šU~8LªËÌú^¥Jv­‹ÞÂÝÍ<Lt­juÛ:äÛÆ¥#R |`ì¹>; i ¥[×[yx.&jpç áõ"w)¶]|KeZ½f–ÌÜñØÈÜÕ~õ£jÆ–yñlŸ8÷eÎ óªGI;S{(¥°Ý³ž7¬RÃ~–E}N¤CòçÁšyÂTvjmSÖ©ÌöÍÖT4Q;Í[GUÔ-~*|¦zãÿLMÒÝ¢4È,}ç ÛUžœž1“_ ÍPãšÃx-dŽòú¦óõÓÛu~b-3;zÏÕêu£Ÿ=àJõ8ÇÓnV´±Ü1sÐu4›íK솛›Ú)cÍëôJΰ ·dÝ\0yÔ·ut|Ñ-ã½ÆØÞ'Ît²)×î¾Ûœñ®/¡‹ l&5W×Ûö7•ko.ÛÅá_–¦À bmŸ@œYûö¸¼«½ìŽr6äÈùɯ=&ŽKü̈•¹3.n³§¤ÆK?+s„i<°ý6¼MžðQŸFKœ8V}ŽÌ”ß»ËF6*cmŒïìºÜ¯w¥ÁÃ[ØD!yɪ8‘¬æ}'Àb_Ò×ÑNj«»ëäÔ:{¹­rSÒœî—f9É=ô»ç*å}§vÞÿ½]i Ó:߀÷Ôßmü.]d>o9\ŒøS)þÔ›v‹kˆj ãòz7ß LùËŠüSiµ®Ã-îe2:Þro:áéhxÒËÊòˆÿüàe]xg×Þöv÷}ÛG z¡‹7øþ™„a§'žÐ7_Ÿ£y^#Ø v÷³ïýñAšüKïpò­nu9oâ‘:±á>Ê«aìs_ûòMøé‰ÔHþ:íÏ]’Z'Þæþlë/3Þs¿÷C•Ô¾Üˬl?Ó#@âbÀ 3ÁKÀ¸›µìK3FÃ"ÉsgËŸøã’:’Þ#£ò;\‘.b¼¸@ À¼·¨£·U1¬:‰cÿ±Þš<Ÿ¢Aú+©¬AæZ5¹HÑë/\¹½ç;:7  2"´d-l6LC»…«+Õa«ëRÂ,´ C! DኯÓBìX9#4A7˵$b¸,œ°Bã’B„«9t@ÄCÿ>Ýc6;LÃ=\³D'¼È‹Àñ7 .ü¨z9ÿºC+7Ð2´ÕáÀÎKÄŽë,׃³ ºƒ½;Ì-sR‹8+5ï[EN¤±?*²T¬{EJ4Å«Å$|.rCÅ£ ĈcD®ƒ¸9ü.\@=<28Œ.¶"¶Sì§{Æw¿¯s+|¤Ã1%³Fj¬.0̰M*Fpl/#Fõ2Æ)$Ä—[.S ¢–¥ ü¿tÜÃrt·Pܺ×*DÕ’G<¤ÿÇ‚³G¹S¾ ÌÇQ ÆK¤¼~̺¬@6óÄ\ÆÔ&„„;…lAd„È๋5P”=tDÆ|´5ô=‰Œ½ëóÈIIôÚG$IëûC‚LÉìaHL§–d¿“üŘ”IB¤It²É:„I´/qëÉpúÉsDWJê[ÉÉÚ{ÊŽLJáƒÇÐÊAMr®ÀsÄj:¾»J“ÌÊ`|Á+6dDôû U„*Vœ¹¦$À²|Iã£oœÆúK¯#¤0|Ã&,J–Ë»³Ë’ÃË©d“ª$½ÃÜ»ÄTLª¤Ë÷sÌЃÌ²Dœ7ÝŠ1¯ô<ÆDCäJ\0’©uÌâF¢Û9ä·X,0,˼"|Ë«·ÏäÉ%œ-¦‚MƒMUTK%Ä0Oë¿ä˜ÓÅËÔ­ùs§½L2[³#õ@½(ã¥S+¥Pµé:1hôÂ6¤MÖ«­Ú”Í×ë¶ „JœTJ6ÜJŒœÉKÏk2Î{ÇÈ”ÌÿÄ÷H¼;<ùÌIqœ;Eü¯µ:¤vd; 4H`4µ‚ BµáH³½Á¼Œ¼1Γº ¸Z³NSË‹K&¼¼N3±¦¢Íp䛽ËÔQý”ÊôK)’Nüs®Ö«µÀ 3Ob¸þ±µ ÓN³º“k¬<ELEQ UQEyP}L! ÒþÜO~4RËd¼‚‚Ò(•Ò)¥Ò*§‡,4ÍĹÿdº&EÍ$M–G ÑcM¤³0¥ûÄñŒB¤Óe)·+¼µÕË5ŒëR5¥C6mÓ0ÕIû\È\>îÁÑLÁ-õŸEPü@Ħ9TŸÓïÓ’ÞÑÎ\œ‡Ð¤ÓDj‹Aý ?-³Å¸µ½ÍË0HœLߨT¿jB°ySÔ3CëÄ$´šÐ9…Ñ"ñFçdFëJ*ìTºmlѰ[8G%ΉU?ÕÇ`ºÔµÓb,ϳ|´=õÒã$ÔnMõœVs¬VaÂÖž›Ô‘ÜVø´ÍéMÓÕÌ|I\R8RÊœDµ]¹,¡Bé«ÄŽMH«[ŒšÑÓÅݪ7äÁ‚äÛ®$ÚÖ­¿-ÂÉXÂÄ«%mW€!>n­ÛßóUd²`Cê’ÍÊu+,4Ã.”NÌ…ç°?)BT ÅåÏCl\u}\|ýZ¹HºMÝ~Iœ}]È¥½±e7Ö-É]Õ¥0¶$Bô]“ÕY°ÍÙÝÅLåòÜ•‚ÚŸ½]­½S®-D³ã¿g]âHž³ÙuÿJëÍG½Ê¼ÁqÚ+ÊÏ]ÜÚ-[³-PD}¨YåOÑ¥IÙíÞZb¾¼Ä¡’õ'¾ÒÒ*EîN¤P4­ d21^$ÜpÚá¤^1iV•¯¤Ÿ¿¼¯ìÛ.‘àå¢ÓîäÕï´à Ñ#8œå\F]ÖîêeÐøåLFŠàúeÊÓÊÞ“Å]—\YãeÚêá›,^JuKím§ÆÛ›3©Ç²²ºËa äá<„/à¥ÅM#¿-Y=PuÕ$ÔÐþ-STѾEbç¥V×]âÐô’ ¦QV¤òðNå©à3ª26àŠëb ÜZ0ãJyß–W<6af=]x­ãDY9~^:þ§ãü1fÏF€ü]£³ÅãUÖ6c´¨ ÏiàB6ßó¤¿7ì°Ñ}â)>ÓP}1JÐ }Ey²ÎL峓â*£bK„_L¶ãÖBóN'óµå`²Â¶,%0b%µ%cQ°«ÎµÓ?î•å$W=ÞI/WB^æùÄahŽØžfC–ÚÆTæl~áWköXlöæÅ,]wMb<-gs^]qž[r^gH®fAÿþbxŽçÎ dîã}½çLfÒt†Þ~Æç¬¥çh¶gÆÇv.èkÖ]„FÒyìf‡NèøDAòŠe‰žèQ~²©NL5gv;€–fŒ&J56r«eIžKwn݃&i ®Ïˆ~ifI™žiÐÄ=›¾éº‡ƒð†ƒè鼸äÒF0dØ‹¡&j¡ƒà|ø Øx8F,•=Ò¥æWwpˆ<À‡D€H€vÀ‡>pˆpø¥ÖꔼƒbÀ‡ae€[ƒlÀ‡E0„«Fá†yXëÚ³‡wØcxE8„@؃=¸@ Ep„HH†n j°6jH`‡0¨@z°à‚‡!0ƒ€‚0ˆ8|(¿Æ6NØ=Xl0°„¤ÞgA¥‚àí0u8ˆ0àíÓn(00‡T8tPí |Píƒ8í׆í=s€ðÅ&0È ˆ©Üž½yHî(Sðíävò.Ȇ€††\((Xíƒ(, ïá6îÞ¶†ëv/ „I˜ƒ8À€¨€˜˜ÿB(/èlHîQ0o0—ý>±*J::‰‘ ßDIÛ-­d”.åkÅA¹pƒÿ+‰Ò…Z€X@oßæmQø8Uþ]ÿ¢äôp*A1aí©½ýqÝüÂ^ÚËE ~©JƇH ‰’ðÎvÞîÈãæ릆ȃ0…Y¨†%…[À‡yàq|x؃] ‚Yöq,r%' ñäÍ#\IÅPÿCÕ©Ã['ßâ'g¹o;Cn Ïñ‡hïáΈ]HoÀ S@…×n0uxí€×þSp…×6L×fs±ßêÛ çâˆi¾=/ÜÄøô¶|bC=tWÏNáE¥ò­•–s‚*€‚/ áæmx+](‡ÎƇ,yx…Óž8ˆ%00ˆÎ¦R8mƒð„)x>£+>¹®êÂF*N"Ïõ·‚Ëàaw#µ2ñ4²T¿D¬'˜ `H‚#˜€  U˜€@x 8x|˜|8ƒ4à…_˜ø3˜øuè…Œà¸ÈòûNîU/Xš6öèkš€Rˆ&0&ˆxƒX… X…€øšŸ7H|Pƒ`Èùœ—x5àøFOJOèlÞ¾/Ä yxy›xƒ3ð3¬vR¤¿gµ¦ú®µú«_Úg ;aolserver4-4.5.1/docs/intro/tcl2k/html/img022.gif0000644000175000017500000003121307363640503021172 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2u&L+J)Q2z2|n:E\Ri^hbDDDBP_TPS[]^kifjji}}}>•>—2 8„=è@”@–HšDš HšP›LžQŸRŸ\¥]­\±O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ü(Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏòÓôÖ õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøå\úåføçkøé{ƒƒƒŽ‘‘‘™—˜™™˜Žš¼¥¥¥©©©²²²º»»›Ë…ŸÑƒ§Ãƒ¤ËŒ¨Ï†¡Óˆ£ÕŠ¥Ú©ÓŽ©ß›¦Å«Ð“±Ô™²Ó›µØ«á‘­ä”±é˜µî™¶ð›¹ôž½øŸ½ùŸ¾ú£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â ¿û ¿ü¡¿ü™Ìÿ«ÁܺÄϱÅÚ«Àá¡Àý²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øë„ûìúî›úñ¦üñµüþ¹ÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕûòÂûóËüúÕüøÛæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûåþúêóóôôõûôøýù÷þýýóùùù!ùý,XÂ@ÿ‹دHÁƒ5õSد¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb°~/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Kx#âÍ q¯C¿@ëå»U0Ƚ„"Ôp?Ä&C騭åË&á6 &w¬N»-'æ+9ñãÑ„+_T}š±bÔ®ÿšn=x±ìØ·ssl»¡êŰuW¬Ì{6ë׸}.¼9æçÐ=j^Ú™nBÐ=Yÿ6½=ùFí܃×ÿ›yiòåѯžÝ¶ßîÑ—¿žþí÷áÕGßÏãtšÕyVVhà&(Ýf r&–uuñ¤à„Vhá…]ýWÓƒb‡á‡ †(âˆi–Mž]'!‰,¶èâ‹šè ŠØUoÊ¡ÄÞD8ç]|?äŽÙ–‘!!¹’’"1y[2H—)‘¤E¨)§ÞŽ“e”×r9Ê&æ˜í! æ“áùØ^˜ZÊ—Ÿ•O’ÉsqŽ f–ðé¡_œ9î¸Û~ÿ:ÃÎzì cì»ÄÄxV³+ùeÅ÷$;QÓ/ž•ãŒï‡ýIÍS™$fÕK¿ºE¦‡¾Ž´g¿¼WthwØ…{­þ‘ékr™>¦ÿ{ú÷?ÿˆ”êžØ ÷?¶lowiÜX@úMD€ñ“†Ì@A‡˜Á"ôÈ?µ‘ûÍnÃYÿ¬'›Ù.wÑ“ên§»ßEì` +X gH¹‡•ïv1Äaõ‚1ÝEa34KÛ·¡Yå ôYýˆÂÀ$ªeˆÂü£ ’H^#ûà_öÇ¿?ÐXÙì¸ø¥ý9gg¾Ò F %?J)6kâØHÄ9ëˆÏs¢—Ø$Ã’ðÉ‹zü‰(EÂQ1|´Š·È#Dnq‘Uät 9’@r( „ ~µ'ÑØæ“tå¢D¹«4úä’; M£,IO~‘“­Ì¤óçH/Q‚‡t ~Ð$¨þQK¥á–8ùIäˆò‹Id2;X5Öé‘Èj¥~&/=5ÒU’¤%ÇÊZÒÎoà §8Q¹JoN(›ÿpÙ¦÷cÎsRæ$Œg?6HÏyްBgƒÔ9À6â3Ÿï, 9¯Ù:`f \Ñg\ÞgÈ<þ³@ŠC¨3kXô¢ͨF7zQ‰Ž£ )F=šK‡àò¡Œ#)#)*Ò–rT¥ñq©LGªª[ÖqFw¼JW;¹P†˜£¥PâÖJPÂ2tHêG …^Š¡•Ü©Û`zÏÐãª{á´ÊÕ¬bu«[½*Vo$V­‚õ¬]Å‹XÕÖ±êÒ¦Q„*7¥JWõ#GÕ%ÿv©ÉEé ®„”ë:ëJØrR4“‰*á®Ð$LªfÇ”ì$ÛÏÂZ¶ª—,ãjDfö³ŠÙÿHð‚Ôú”…¨Ýïpˆ!Ӿд¥Å\V¾6I²Ú¤lA+UÇò–› lg§øÛâ:'=®r—›’h8Ä aCCájl$¹- Â"’ŒtÁ!&Á LÐò2÷¼ôƒ00€3€» ¯Èk‚ñš  -S£X>ýÑ¿ú}Õ4ÇVý)ÀnœèJœ=/ømÐX‡6ß‹¼ã'Á úÞñNd õUC¨¸£,àÁCN0‡,Á"G?Bð‡H¡ª|#zO‚Jß¶‹—HŒÀ ¼£6¨nA~`£M®àÐ8<à ý r"ä0‰TxÇ`sP¾,æ2›%d>³š×¼ Îæ”¸l޳œ¯ÿ{S~îvÎxŽsškv+ÿú9˜ÈÁßw¸DÌü,6˜oú¢ýÈ«FA*LŒnôy°´EÑ©>µ9Ö|ô“g£ì92iTô¤ù&4ðX:Шvô©)èŠêÕ©14©—ö#W ©Ö°Lõ¦;])7c«cÚ#j©Æë¼}ºØÈó±“Ílæ.»ÙÐ.î³£MíÌN“«:´1…ë_QÚ˜Àb´¶] kBµ)ÛŒzt)·=k1uÉJ—†·¥ Y¾…»O†4bÉ$)M3¶Ïì>7·#ïC§{ÞÝ~÷¥‘rmlëê™ÝãhU.Ozâé¹8‚Ÿ©ñ„ÇZšù67¿ãdIEÜäꦸ·Õ©ÚBi<ÓÍa9¬#¥ršÇ<׳|9¿ÕÉ‹óÜÇixµ‡.U¡7fßööw§B]o@ׇà½x¶ÕnÛœè 4z`BÎõo»|Œ67õÊóñ¶™ÝÕf/ŽÅÃq¬ÿOën;"á.wóîxÏ»Þ÷Î÷¾ûýïzŸ›¯Ã5׺Ððß[Ýëô57-‹—» /<R^x˜§üj}ˆ¼în…>´måмÒëÐ_ƒ·.ƒ5GBqBÀƒBÆ:J˜CAD:¦Ç;ÉÓ„ÊcC4D[™7…©—`W1{eÆ…7eG¿†G-m^8yU¨yÓc:¢ó:ų„±#…kØ9Jx„N:7tCW$8ÿ8†ž%ƒlC5ô„×B¸†T¨0UHzœW:q(ˆKBƒ>¸Fz„õò|ÈV†}„.¿‰võµ'Td‰§Ä‰‡çe{HxCXŠÑ†‰EŠhR§(„•”AòTOV4OVDAñÔ‹ºØ¸ŒÀh‹¹¸…¢˜-q>­•‡Á5Y0¨ƒ‰—ò„A¾HÅ(ŒkÁŠLäŠ6艱X‰Š=ØŠÌ4£äKçxO‰EreDK›„#¶6J›$(Å´XéX5j{%KgmŠÑtßl~(޶b6ãA¡µ@Ýø.G Ž^°H‰¹ƒ«xŒ9FB´hX åTu󌅗iŒwQhÂæƒ é>"™Š¯}™@ÜhK͘[-9‹49“Z˜J䨓X‚[éä|á蓊…‘w…Iù“Äf’IQ@¹OB9†D‘ªx”ÛèLÕI¥T[Ù•Z¹•_ÙYyWæ‘’i±’E”ƒ#ùƒSY”$¹L,eQ{a xA—U—sÙQ•QMùzy—€i—v¹—rI˜US5ÿ”7ygm™8ù˜‘WHµT1–¡T‘•–y•¦h‘bؘ{Ô“§´‚¤Yš¦É5dušªiš}B‰ •‹ šJ$šåw”°p×x¸ùDO¹P±)›Ø$P?cT Òš9)žÙ‡ÀÙ8˹qÞ˜œpÖœ/bœÌ…–`ˆŠ8)¨¢˜ÕŸÈ¥Ö‰S|àyžžò蹞Eqüà„° 0 `𠟦öU&P_õõõ…a'Бø€a^`^ý`_Ö BÐ9°aÆžZà€€pðÀ,ù™¡6^æ,êà ªð †ñ ' ºàÈ` €¢ý0ãÚM@¡!p *^º$&q¶r Ùqɲ¤†LêøHkGP€„Ž+¥I`·¥VšRd7*%ªœ¡309p¡j깦nªmú¦rš!cjžsz§ÖR§1ˆ§|ÊqÚ§€êiz Z¨P2¨ki¨Š*¦ÿй§Â¿‚ªžÊmœ s™¸ž¡zs(÷gº&k@bª­¶nÎ*‘Öj’i $”Fª©u»9j©Ú©äv¬•ª³ª}¶j½Šsƒ¦«Çzö¡mÅ᪚Vqlwv wjÄ‹–©Ï:¬'ªŸ‰ÑŠ(æ«’ ¯GChÔú¬¿1¯âŠ«ÞªjÅZ­RGkòš¯ÿ*hÊZ©¬ê“ïêp…•°‹Ê¨¬WžŽú)íª>û°ëŒjé’Û±I±°²$Ú¨„*²&[ {²*Û›Oõ›+û²B‘²0;³2;³ÿ/[³6«²8{­‘R±:·kTj ©{%R±"wt[8M\ø®Š¦&©úu¬6qì¸4('ëÚoýÆ*>—ŽZ{«Äºs¾âµê*µy²µg''‡v…’¶l;¬Xë¶w«Õê¬ú6v] ¶RûsrÛ´ˆÊ±™(-¾ê`s»tÕ¤ªxk¶«²-·Ž#wu)—+»äh]›­d[µáö³Z¹ÒTµd—%S'¶#g¯«úpôÚrW{·•k¶U±³†sp/‡› g·¢6,ŠkªJ2¶÷ˆ¸ä»æ(•¦vbëJˆ JI—ºËvѦ2§‰}µº¿{“â¸O+º·K½Ÿ‹®?áºÇ峎ä½G[½kÿÁ½9ë±ä-^w ¾å˦›Ltr?W°p{Fg{¿ª‹¼˜ûµj ½é:)íë¾$›¨‘D¸Â¿£Ë»ôÛvhÛv)÷šK=Ë´aÀÈõ¾Œ¿±»is‚tÛrŽÛ»g¯óÆÀm«À ÷¼lÁiq¾!²›,lN.À:Ã4̧6lfÔ¹\;L9Ü…ÜÙËÁÒ)ÄÆeĽ±Ø™ÁœˆÄ¿åÄ(KÄÍ Å¹z+±%;•µÃ9•‡ˆLèˆF¸y…8[¢×y¶ˆeü„˜ˆ¯…zžGZ¼É| ¸ÜHűÆzdÇ1+Å–¤›~üǀȂÜwAlÅ6¹±ðû“զǗƒÅÈ@ñŽé…‘ãXÄ“¨Ä²ØÊé؈!‡xH1ÂÊH*TÓ641jxÓÝè˜â¹ÒW¼Ä½©ãÓg|Ó©—;oX‡—7:xÈCR=>.4‡§wˆ„ø9Ví–&9ÓIm‡9-Ö]-Z@m1fý:w|Ö‚DÔ‡ŒÅ\•ZÁÖyãÑ`]‡‹ˆ×£—×­ƒÕQ„Y:‡h…ž§y,bÒ!m”#Ò3ÖÿŽçÖ« ×t,‰n‘Ôhx‡†¸ybÝ;fL<5 zYH×C)Ô* ÒsœÈ®ü‡lx†„­C…݆tÈÙµUÕb|<¢-•¤ýÑ@ÈÒàˆÛ0ÉØË‰Ø§íÒXZ’Šd?bd`°4ÝÙ˜ãigGÝiv}É/ œÏ•"ÍlÓ>U:Ô¯é›=Ú¿}´iÝ,’áíÛ—HÒyׄèˆ24Æ"!Ú·=ØùâØ3 DR¨4ßݲéÝ‚‹Ä¸‹Øx‹ÕHO½XOö„àüYäL¯Ô?Â$áftIv¹q<|†VhyîÆ Æ¥Ø]ì9[â»3ˆ‹(Õû-Š'mÜ‘™33ã4^ã6~ã8žã-£Þ/¾ØäÍ™ºœÿ¼}‘Ô½Óx‹ö$Œ¼ø”äÕèä¾äGÎäP^AÁXåÁ¸‹RþˆÈ}¥™Ú¡ŒÔ¹YZÚ9ä&ZäÍÞUÂLb.©^ûh—Žù¸®}Eªeyç±Ä¥Sç~þgô1ïXFâKÑωædjèÚÍæBB•Oä½ì«Ø¨šg^Ô-Ýy¶ÝáãLW×í²¾ÞÀ —žÜLzá{eF_JFõA®êž?„^U~ÕŽŽLµë±>á¼îK1Þßè-Ù¨]Ý‹>ê<¶TÜçÍ’ÿ-é5µÜrÎŽƒ^ë„>eéEýèÁVùÕHùN‚NJÓÞJdôYŸÞìjÎkòR9§åSÿ³•Z¤¥/Ž’é¼ìi)ìÄíÕª’XÖÎÕÎE½Äçø(ÁÖ¾ª{>áÁèÇîÝ•þÖF-Þ¢þãÝžÞëÇF`O¶¯¥¸žì-RîøŽéx¦é£ÈðBné½êmQiæ+ïð—ñ/ïòqúnÞÀÎì%oóZŒó2y”<ãWšÕéAí‰}îD óåðXyPdï×Yóê}óΞò@¾š –\éõ`/–­(ðHŸ·‡ÎòD®è éô[Oê\ÏASßó÷þðWôYŒÑQz?R{/R§Ú÷†I—}RPLòtߪƒœøŠ¿øŒßøâ$ô\—3%S?ù”˜ Ù‡öõmŸ’é›™£ï@™ÿ¯Ñ?ÏùÎéùϡߥLeP³Oûaiûa©•IaøV¯úI©õŒû²ž§Þ©ïûÍ÷µVÌ_VmÕVfΩ‰UÍ_ýÐïUk…ù3¯ù½ïûT%QпšâïV…1þæOþšUüþ}üÞ󭿯O!ôþþgOó-üî¿íð¿ïw>Lѯ D˜PáB† T¬ŸDŠ-R,’Qc¿"=vÔÔ/¤C’%MžD™RåJ–-]¾„SfIˆ3mÞÄ™Ó`M=ò…UêT”@{ ˆUë@®!jÅ:0kX«To~5+³¬À¡mÿ‹MWäÜ´uíÞÅ›WêZ½}ýþmÈ×m[¸r“.œXñbÆSù6†Ù©`¢ƒ ÄŒXòfÎ=wýZôJʃ/^6<—éhÖ­]_}[6h„¦…¢Æ ’îlÞ½}?ü|séÊ•qËÕ,\ùrÑ™?7KÜöñÌ»¡_Çþìvîݽ^üxòåÍŸGŸ^ýzî mŸ†›[©õìõíßÇ_ÿ=Æø©“ç0@”J‚¦)è•ö{Ë(ùt[@ '¤°Â’üÈ^PÃ~þH‰Á`¨;Œ> OD1EéñÃ>> >ÐY°8Âú“ï?‡L8Aâ1(M0¡.ˆ˜!ú)²Ÿ€ìGž"›T±J+¯¼©1 àŒ6©ÿq?ç‹ð O ’Êçœó ˘Øl N7?£L>Xã:ÈB´Ñ8‘3ñ &TPá„cx M’öIÓn$Ck§ŸÀ²ô ° Êj'žäÌ®& F‹Ó6+µt-RQ-õ§S5mÓUÐ@SVS{„l"Á‡%Ç„°!"CP³ %ˆìQ „r)F dN(ç„N!å”~hø¡ ÊY²Ÿ–8%\&ƒÐÉ*smíŠUÚ:åôÓ E…5ÕLÑåÊ]ÚæM×Ö­d…÷Üyí­5°xe ‡ #˜(¨†]Fˆ§‚ƒ(0è7ú£¡_­®LaEò„€?9d— ‡$nH‚„ (à ޡÀ fîg„~Þpcg*ncb7˜Ièbý+Td£F:2¡3z° “†:j©ïbã¤zzj­·æ§ª‡–뢻&»l³Iúú¨°U;»m·ß*Њ¬öHláÆ;o¨Óf:5»õYæ3méKn‚“•ÅÛæ•D&>²ŠÙ æ%éÙL|êsŸnìç>‰HKf–“w£”H)—HâŸÖÌ9ÈJG¦OE¢#i‚Ë'f”¢Á¼à¿™Ç8zTŸß4¨SÎÉš"®¥)5ÛJGƒÒ·Ñ¦Q“éMuºS¶ ”#`']y:Ôr攨Gí£Q‘ºTä)•©OS¡:UÓI•ªWíœU±ºUÈÿi•«_œWÁ:V¼‰•¬g=›YѺV®©•­oÅ©Oz>¸Öµ­rjê„jW¾Æõ=sÝk_k4·ö¥&9ìɉÉüåpv‰= dŧÉÚ¥°Q!ieéˆØ—ʳ±tìgëD×hÖ³1tÌb7ºÚÐ"¯j ê)ë"AÔ‚V~ˆ$§i[{ZÎŒVµŒÑ-@…‹Ùß‚¯‰¢ük^a'[.B–£Ë´d9ÜãJW‡ÄLgE%jOF*0ºí±$­ëÉës‚<$ï/³KÅvv‡žêî S©ÝñV4¾lo~£ ^îÞ÷–V´©N.ËÙõî–{ðo©ö›àã꯶o|/q+akpÿ³ް!)ŒaùrôÁ­rp†7 P˳{GD0„ùBZá²8Åðeq;EŒâùÒ¸¶ÁõÚkû¶¹-¶D¼¾0j÷_”fÂ.ñ- â±ð–·‚Ô®yOœÙsp~1N_*÷ç`-¯¸RÒî{Óhá[™¿üõlHO‹d0§˜ÍÈ%`™Û<ÉÒ¶Ë~1‡WËå7SwÉ †²‹¬g?;vÌn–¯ÉâD;Ê…¶#»¬È Oš†Nþ°‘ó é_ºÆž¾qqo2`ï…·ÊâEu-Ù à.–yÓõÅc£+R"®ºŽã}t¨ÇÓ]Ÿ·Ñ¶5ƒ#Ýéu–TÓ¡6ö®qßêZºÌŸ+÷k•¤ßéC€úÓ¯~C¬O}…dßûÓÉ÷­ÿý‚Tû1?öÁ¿’ì'¤ý”Z¾iäü|´ÒJýÜ/ÿú¯/óãÿ¹¿óK?þÛ¾þË?ýÛ?ì#ÀñK¿óC?|¿ü¿ ¼>t@ Œ“ø ”ù;¾º²?¼@\@|ÀÁÌ?üÁ DõƒÀd@ÿÀô¿õ3Àö‹A,¿ÎH¾q#¾r£«Áºžû;Àÿë¿÷Ã@Ô?4B"D´Añ#„ÁdBÄÂ)ä?Ô@·àÀ„ëAÿ¨`¶ ÿó½ ¬2L)5Ü šcCÅyÃcŠÃÁûÁuk=¢ª9ì#=d 7ÌÃÝëÂâøB˜àCÀñ8(ÈD|“@ŠAä¢?l(Ä~ÄJ¤DJ´DEô EÔDè@ÄO¼ÄL´DLüÄN$ F$ GlHdQtÅLì‹JäÄ‚xE€ÅW,EW ESL PÜÅ\äÄIœÄUĺ3d·ÈbÅY2½E[¤Å_ FgÄERFaÄÄ8½BLc¼C JF…°‚p´­Gq¼‚sDGtduIü(`Çx”Gò0†zÄŠzÄÇE,Æ:8úC¡oLˆrH¬Çt4ȃLG,PÈÖ…dH…Ì‚‡Ì-H-ƒŠ´È‹¬È1ÐÈ1à„ŽôÈìÈNÉN…’ Q@IQ…•dÉ•,…—,…UÉU`…š´Éšl…œÔÉÌIWðIWx… |X Ê¢4Ê£<ÊXPÊX…¦”…Y€ÊYð…©ô…_°Ê_†¬|äJc¸G}<?Ô¼•G(H„DKtlȵĈŒÈ‰ÄȸƒäH´Ë‘$I“LI•lI–„ɘœÉ›¼Iž$ÌVøI J¤TLÅ\J¦tʨ”Jª¼J¬ÔÊ®¬GaÓTÿœ›æÃ½D$€\ˆ²ȳÈCOÞ N^ žÜ vaàÅ`ža¾\~^âÕáç½á†áã}aŽ[¹ºß2â~)ÿa«í‹–aç¥à(Öà'æaäÅaâ –âäíážb Îáá–uˆŽ•¡Ð­!Òua3¾•/k±¹µXÝ…àæ$ãüã59 éU²ê­—7¾9^>¨6Sãë!dS)¢Ï¬X;5Ñ”e`HŽd®cEÆN‹0¤7VdWÙ|ùcOn¥?Þ ‰MãP&eQ&ÚTöd%¦—NeR¾ÞX>eUFå&ez‘`Jà÷ÜeêaœåAmÃÍþ¹ÞA[[:îå+ýåñÄÚÉRá]UæùM×|fgÞX‘Ë”c†Öÿ¥fÇMáÏlÞ B,;qÖåFç1ºcA¾ãï”_K¥_·mÿfM}f6 N~cC•c3~±!›§ê&‚^—ïR¥k¥‹Ê RŽeó*ài–çj~ÜF6YrFºûA‰DV¥Ya²© ³>æZƒ§ ÝU®"îR/¢Í¨í‘²QV¹Ü]ÙJVWF&`™¦3¡“¶¤ÑÙšéeöÕz~XŒÖ:)Ûéúóæ‰ç·-¡Žº×ÚrÖæ}TÒ‰gi½T;öé™:eZ~h–>鯞º‚ëVå&ãfg½gaNÚ‡þX†e%Ùž«¾×¬¶dIn˜íº¢-—&í^pMÛDÓò«Ûª¾ p£ëºNj¬žçÎØq~YmŽkÌ<7»X¼®éGnêϘµÒë`nàÑþ8ÌNEfêµk¸& õ :3h#2ë¸.k²6b­í©n®¹ÅeĆÜß^WGö—uÓÞLͶfâf©Å&žÜÆÞ|æÜÜì5^h)è¤kí±Vä°†§Ø¾m=–hǦèpn{&jïÙèp(ó †NãEËåóè·îä÷ö\$*åt†ÓƾëÇÖê¤ÅdvŒ%ÿN`vpÒ–êÒæïÌöï¼nÆómô>ࣥéä.ïv+.M&ð ¯è@6×v~‰<öpiþéoàÔæ« Ÿ à]Þ(–\æ^ã&%ÔvêËŽì—â0¾àà+èÈúnÊBãëñFî×otSq—pc>òømòp[ðÓ.rò¶hñ¬UððîïñFqä»q¨Ðp• ƒx«!ÿ©)ïrür p1?ˆ1G:€sƒ˜ó9ǬW 3WÅ­&qoó?G‰:ï8—óAô1Gt(tCp´f¬ÖÐs_s ŸtµÆ1·sJñëd.q¥>ñÂJÇçRcØÅMÍÎîtñ^jPOCQÄgë«°†X—õY§õZ·uYïW¸õ]çõY‡ñ&gâ¾Jr@G'_·°8v­Hv¬Àu]§õ\7vd—veufvψt4guawõ¿ö\?öej'w_‡p×õñ(wgÇulòãnð͆p>s0ïõ{¿uhÇ÷}owÍMõ-_õyu6W¦x¬“sv8° ytw-gp.øÇòG JL7 Œ÷w^6q_Žxݦø;W ‹ÿ ' B—sDWùBOy•Wtüuÿx)w ÿøô$özù‹_ ”gù–ïùžùI¦p ®ßš'b#…ÀÀVA íÞ¬,J ùÎ0ù“g©wŸqm7zÜVòÄVMø‘Ç…ÿñ{–½yóɰ̳Gû´÷JøQû¶Wû_wg>ó™7ò¬¿pKW&®¯Ô ¾¿G°°G¯´Ì\ïʽüÃï{Áß{½oøø€·û4ÏUïÁGÃ÷{ð°Ç{,|¶¯|ÅÌ_üÊo|Ž÷tümn³wûÕßüøeý×·ÇÑúŽgæÓGý£y“ˆúÛ´z"§{*·ýÿ:X¯øª·³*Œlÿýàßë­/‰Ý‡¿Ú–þ'‡ å‡xæ—}œOõ èW¸¿{¹ßsì‡?ç' îï¯ò±Ü'xª¶êÞŸûë_ÿñ·ØFåí62”æ 6î-øˆ"ö+Rð Á~ý4-Tèð!Ĉ'R¬hñ"ÆŒ7rìèñ#È"G’T dH'AªDé’äI•+_Ò¤8Sb°~9wêì™s AƒB*dȰ&Ò¤J—2mêôiÅ›P§R­jU£Tˆ<·ú,!Ø¢ ¯’-kö,Z¨YÓ²mëãZ‡\çzv¨Ø£o÷òíë÷iÜ¿‚; Ü•îϯCñ6ÔKø1äÈ K®lkEÄ].Ûø2èТՎ.mú¡aÍÿ<9ß%úù4ìØ²-RŽ¡ßí‡nç†Ø·Äß¹{ïž}ñ÷DäÀ—;äœ9t–™SgÝ9ákãÚ·—®Íý;ÙÔÔ¹Zo<úôƒ½«o¿T¼êºAÍgwoÿ¾Uöø÷„?¾gyÇÖ¤Ÿ Â5]|zf”‚JÈ‚Zhƒÿ%f×uAx!ˆ!öS¡ˆ ú§™ƒŒ}X"‹ ’Ø"'þ—¢k+Âx#Ž9*߆ó XŸŽA 9$w<Ê×!v6¹$“MZf$IŽå$•UZYÒ=¡ãP–A©}J^9&™eZäˆBÔ€ô%‡aNi&œqV™ŽBçôãÉØãP#±ÿéãƒoÊ9(¡0îùý,ƒ ÔÓÏ©“ÑŸHz(h¡™j ¢ÒôM!×D0ŒæôÓ"~j ˜?ŠIS>›Ê:+aüØsÎ40’È ~øhb#@R :‡^TikR:fQ8*¤ÐBD'œ‚>ÑFD2 q‚BQ„  (ôc­éª;Õ&¾{F%k®Ú£¥^T… ùšp‚<…p‚ù‚ûP'˜àŽ*Á3® ¤ô3®Cࢻ.ÅÓäÀ€üJÀhð³ÚQ>‡`Â)û QÉ&ˆÃCݘðÍ1¼Ð`‚ä:d‚%<°¾ãX<4Ñ0‰${ä‘Á É‹ÿ!»ùìCdX+‚Á¢œ,Bl2Ýô5j-¡6¢L&•m¶Ø^KèõÙc»}‘Tjc(ÛÅ5ÓÝt—·œrË”%8À€¿¨Ô®bú2Âè¢KÊûæ«(¡L6·Ý˜C”•Ø~ ö„Ÿ·÷ˆd¯“æžOD:Þu›SÚ›G´’륗IúRàS€H‰JõCX[»M¾ÿf”ÃÀµnoaÃ_“ÎxÆ<`’p P ´ ÀYFöƒýp”Ñ Lº“óXÆDz謨@x83˜OS¡ýM$w•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«·c^‡!Æ7pß­…C&¾¸8cc·#KÖ ·)-¹cuÚe9˜/ßA >LøðâΤ&.¼:uéÐ=›v¶è×Sl¬÷äßÀƒ­¼3Ý„›Wöö ú/kÒ²UC÷,Ý6óëÍ£WwžZ6ßÑÞm‡ÿwmQwøÛÂÓ«_o’8Mã™Ë²ŸO¿¾ýûöÝ×{¼.Oü(à€*eÙ—ñ_r6èàƒF8‘~aÙ”rÿI¨á†v… ZØŸ|ZGy5žyÖˆ¢c-úô¢F/ÎÈXŒ2☈ðÑEbJÞm„"mŸÙØ]h+–6ZvÔ)¹[‹}Ùè$’ÒU¹ä‘XÉÑtÕH%aV2ùšŽ±‰‡$”gVtävÑ}Wf˜ar9f›Öy©ÚNæ)'œK¾iØŸežÇf‘u’y úÈ`ŠŒnih£E-iZˆŠ¸`†“z$å‰îÕ)J›*öiy£’i©~ª7c¨nUzÓ¥\¹º™ªž…ò©‘¶¥™jò 蔾®Iêw²>Ù§•Iævl\ ‹¬‰ÊKk Zšç³ç9;¬–·2 ížYvÛ'®UÎ&èžH¹ Õˆ‹þfg¦Jê «ð‡ e=JÕ.~›Ò‹”¿õ5ÛI­(n—¨üºýaغ»F+l’C¶v.š´&û«§³üf±|Fë'¸S+r±K%ž»fë­±L‚œ+§Ê®špÀ _èŸÂ<#|Àó]3ÌÊݬÿpÎìbÚóÒL7Í(Ò°:-õÔT;µ¢JW­õÖ\Ovµ¾Yw-öØdgõ5Yû–­öÚlÿt¶fa—Ô$“|ÛÀ¢á}-w¨bùët8B§ÞÓ¢wl`vvçsuq𙿵‡›û·äÀÊøå…3ŽÚÆ{{ ù¬`¢+2zs.ÜÛÇc–›>g»IžÍܮݓ¬ƒG¨îFújrËRŠní³DCìíÜËj<ï®üÜÄ’‰ü˜QG²çÓ{}oq‰‚Ýö÷à‡ê;«Eøù/3·üâ˜Þqé³Ï²ïêw{¼ó†yóÃîiúñ ™´§·ë½ïq„;å2v·`ÊÀÿº_æ°Óòý(+ÑûãvG<Îew(£Ÿ˜š“1þH&|Ýñd²ÙÉlc(ä`öÞ§»šyéyÄ¡ ÑW=þ]…3×Ä%ºÛEÆ‚iŸ—ÈÄ…mï=ÝC[ÜšHÅ*® ‰S´¢·X5,rñ‹`ÜšÃHÆ2ölŒwXÅ´S­AîL·Ô™·ÂeÑP…ÔªM é¼çÌP…uÔ£ÿ(DyåªI´‹ Ýbg0éÑ)‡ÏccI4–ÈeÜB^ÇU-9.0‘|Œï­×ýÏrnìã ¡×Iß•2U“õJò”d¤ ÇJI‘—BC‹%ÍHÌbzh˜W Ò$­—IM¶òÆŒf×™LfÂòÜ¥*ù(Biz3SÿÔü¦8ǹžp’óœè„Œ9ÓÉÎvve<“ÏyÚóžn{â~,…5|úóŸA©'@JÐŽ´ Mè„ôY¡WõS¡¨E*ÑŠ”¢ͨ=1ªÑ޶“£ )Ûˆá=4¤ A„C±z$ZˆÈ.Bp‡” &(ACt*Òž6Èw¸ÀÀxÞT:-ANKðŠõˆOêÛ ˜`8ÕÁMJG7+`YUÁpµz]ÊÍnÂÇÇž@ãh†ÑºO‡zo#ç0 D`|Ü4§é‚RSà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀÆ]¶äS±NöœÀ>Ä.˜`&Làø°Á*&Њ àcø0-à|¨!gÀGkÛ°6HÄ¥•Í-q«ÛÞn‘·¾ n+Üâ†ÿ¸ÆMîÙš/)š5bØB¥áøæË[jnzÔM%chD@îš±a$•+FæFnÏÕ•û¤[?4I½×±Ø°À“¿öΗ¾Br¡#×JÞcš—Ÿoí¯€­ˆÜXj>°‚Ïø_·:wÁn[‚#LáFMHê•“ ©·ÃTúRÃXm×·‘Õ‘wѯ- :’Ã&‹™x±IãCnˆËza;h"ãÑ~ÌãA ” ƒ*Ä&6 ¡9áñ¯uë¡ãH Á~µ_µÚ*-1W?ËeÊL ~»ìÕZµìšh.ó'‡6][Ærf“]›‰Xß•¹ÂxÖЦÃ(‡Æÿ$4ñ&‰çãrÄ€ž.k|ÂÚá¸w›3t¸DHÈGþ¹„ä.£‰œ_ðÏ¡\Ž$ ýå9}Ì>Ùó‰8I:Wº:Í®Kr¬ñçÖ†h¸)µí^íUËŠ‡Ïµ–¥µcmÝÉ}·¹LKÚäÏÙÅ~T²ÉÅlh¿y(ªÎ³¶ ”푹Ä5ü.Š˜q·øÓ.~±ì‚ØáY^)ØµŽØUœis’µ–¥©·LÐí˜Ü]l𺢆n.¹}bNáW­¬eýƽYŸ†YÝ+XGšÊ°|·XuÍ^x+RÌdrtCîo9GÙäåÕOsÑ»í–;­Û.y%Þ°òÉüæð‚9Îwþÿóüç­¢¹Î.XM0§ÇØã/[ +”~$NïáåΘƒ×è SåV¬q€«±ÔL'Ê=W9!m½ÍB«¼g]v(“xˆ[þwØïMk“¯»[Ö–ý„ŸÝ|J'¯ßs„뢕ü'QÿWà«’x}C}ñgy×ÌU~ÞÔ]2ȲŽ7¯gMâYIHwçAoæ’Q{¬kç20å7÷¶cÅvcûÀzW÷9’=y…üu–[œÁCï‚_<_x¶ùþïÈçÊñ“Ïü«,¿ùÐO—Гýêãçù0ÒÇ•,*šyß/W ñ³¯}¡œŽ3~1}Ưüé\üÀ/þ-ŸÌiŽláŠ\W÷¤zYvòÆÅQý_RH»$K­vÛÄnö)of3Swx|—wˆdp™nÂÆ~[}ÖWL’W/(vlÇá—ÕÜWwÀÄL£vM…&‚E‚,ø‚íá~ƒ4xD2`5˜ƒká‚:؃ÿÁƒ>„„BX„NDyö`F¸„TA„L(„Nø„>…R¨ƒTX…5x…XƒZ¸…,Ø…^8`…p!ð€ð O:°TØPJ¥T¡TreMð( r•<…K5W‚( ‘uUWa8`à~pð`P7¨„‘s•Sue èÓ€ ©  &°àºP¡À‰ø09ˆˆMˆ!` „ˆSŠhxPÕp\,×1W5l¿: WUZUfa5Œ]e$TePÅ,]E6³C)™Èr‘309°ˆà¸PHè`ÚŽæ(`xŽÉ—ŽêøwìØŽ?÷Žð¸sò87WösÿVÇ"@£2w‚Gy—Mò‚jùXdÙhyE£p{~ï…;lVpé/ _IO is y9gölëEAÉ_ƒ4eÙq~ã‘IA÷‘ÓhYTIt|F’ªw’ç^õ%_(YJãÅlíõ-(ä(«“H/Yû˜a&ù‘9–“6 ’׈£””RUm¹F½¦’EIø˜•¶•\a^ù• –by`dY–v–hÙ_j¹–ÊÕ–ni\p—Â5—té[]è’qWqØ3¡¢—M×7‰xymv7˜T—j1™DœR‘@)h½ò^Èv$9*È}žFk7?%Y‚{ãu”8Ò(]¨<p&8eŠSšd–<µ·?ý§”HFš)ù‘˜.±˜Y$Ww~Ÿs{ÄÆ{pw HqåqvʦpåÖx (=Æ_õÆzôœpöã,ˆF€Ì™zýçy»ÆwVù'¡§y™aÝônôvbûöR¶}`¦bþ–=Ꙙ1¶—NV;û†k¹“v6Ôd½„>SDÎä›,æ<ΙØÃuŠöAÔc›G¨O+§w ñ'Oÿv¡¹U¡DÁ „—F xIÚסú¡ª#¢Ü†›#Œ®š”c@ؑ¹@xsq†Ù?Wù›D“¶ãº{8r´™¢äC (¤‹”7?Z™7*Ÿ.jeþ‰pFi¢fÞùd·7w´Ç£˜ÇyƤt÷u™?zG…{ É+p‡äç3 wp¦9%Cz²WžZ ¥”˜i1ôp3d€êwšµ§ ŒAv Ì#^¸Bž7¡Ö”oõ· Š:iÔ—¦”ŒCÖ¥´#CqzŒ—J§Øf§Â±5¡^ˆ¡ÚS¦º¦|‰ºªSÓ¦>™t¼«Z3ž’™€nÊšÂÇ™ ´y¾“Ù—!é§¶ò¦Ó–¢cfŸÛ:¨9š:fÿ›KöF”ªªY÷/ª$÷·{ЪK/J£äžŠœ«GŸÜú€ùé£+xŸ—&š¬ꙉ·­òpã8p3衹JÑHcdÊ&⮋֯®Š©öÆ®2F_ ×]æ¯åV‚ç ¯ïY û€XG›­j5Øêrã—±¬ ¦9“Ëu¯5'“§Z…©z²-¸±*‹²,Û²O˜²0[Q2;³U³6«P8›³ÿµ³ýÓ!µÓBm¯ZyYÔ`ÔJ=NâàÇàÚàDÝÔbRø€1à €Õ|€‰è\ŽV-Qìp{P b@ß@Õà¬T" éð¨P‡èX@R"`W sêTcÝ6 pA5‰ À nÿÖ xH‡w- }ÓDüÌ>U @@  `}ÔI(ÖÑ)À‰¹ T85ÙQ’]ϰ_Òp(#gËhUBÉhBLvÛ[8ÌHÌÆxlP¬ŒÓø=ÌzòÌ ò“ŽÔA‡%J@‡sñ ¸Ðº`Ø`;` ¤` ø@µSØÐׂ¸¦0ßv˜Ü€5ºÛŸÙÛÇ ;OõßÏÈ©¿¨ßí³Ü"7l^6UxÔÀYLà5 #¦å°%[eÏŠU‡½XØe„€IpI@0#  Ÿ5¬02Ž#€h˜p½ ­e±u¾p[L-â:+p:Ó&+ä.íHmäx‹ä4­ä§mLž›N~Ó µäÖ]åIþDX~äZÞ[ÒåMþå>æQî^Næ•eæä(åY®æ`~åg>åpž\lޝQAçu^\w^sz¾çÁÕçEþæ€ÔPÞæh>æ…nQ‚Þ¾è*çˆþèÎK|U¬"Êé¹—ÎÆÿž”ôV~L™’XiÀ¹_)eÝétñé3™cÕKê,I«¦ŽÈ‚™ÈåÌ•¬žç„Þ˜L›>l]¹v1dËf#Ùh¨®’Ð=·Îoiлž®naº¤:y“ ë¦]=Éă´ígÂüªê'49—M—Ñ~Ónëõ;gŸ×»ØþyÁn‘IêðîKÙi§‘înžæ¢‚£²[“ö¾fP ì¹äa£3ˆ“ú>ëòþÐþžèTž´Ò8ðóî”ÿ@"Y¨²éð¥î“ŽépüŽÑ¿î¾™O“ù®ñïÞ”ûÞj /jAùðÿì}ò½~½Hh î?)ïŸhÀîo‚ä¿0º®7î7 í’ŽçÒ¾ó¹¼’>ðëÆh×^êæ{hû©ì}Êõ6ï­MŸóOïçRéŒ^öƒðh/Q:Ïöm?‚jïèg÷rèP¯îuo÷ õöŠÎ÷å÷ø@;÷ž¾÷„?P‚ŸøµøŒ¯QÿŽÿøi÷f÷’O‘ù7kø­ŽøšOÆœÏë–ÿùúQ?ú¤ïN™Ÿúoúzú¬ŸN«/¡ç.6¹¾´•þ\݇û“ÌåsîùAA¸I;ü„Ü( _È€ç(»˜×+ʧ\ûÍL³oz)4âÚͯœûù¥ýÔy*åúÿþ÷¢®üpK¶çy‚@Fr‹ìØžôaÛ¤]‚[K᪭ÿ·ì¿ÔL/¤@à@|Ä'°`ƒ 6°!Ä…J¬1£Ä‹-RʱáD„"~|82¥Ê-]¾lI ŸLš3mÊ,’3'¾"<}ö,¸ ŸP˜E‹Z4ÊåE¥ jÿÜè£B¦£6•겪լ/=zäÚtëÖ°W“–%[vªÆ’i­ºmYìZµt±’¥ õ®Þ¬rÙòu:pÔ¶P™úÅ—/bµxçµ{V²Ëš•oòÔÙSóÏ…B‰N–Œ4ôà®oI›•úrbÕa:®²£A®°F š±ìÓ³†Í R«Þ¹{_/þ\eqàÄ“#ì•-í¾†'æ¹úڥБƒ/ÑòxÌ:9o:4üd‡ìIÛ>ÝØõðÈpKk¯_$ÇßuWK¿o½ÝðãŽ?ë ­ùŒÁ¤V‹NÁØä;ޏþšÃ®1Ä®Ãÿ&\¯(ò,Ël3;S/DÒP¬4ûH*i¥‘(jm9ýrK°ÀýL*Œ»U?ãko"¾«pN)á€òÈî“7–sŽJ‹lI-o«ÑÊWLjÄËJ<ϧô>#³M7ß„3N9çäN;ïÄ“Ìóä³O?A3³&4OJ=6ÿD4QEeQ?F…ÔÉ1#¥´R8µiÐ4×´´SO?5TQG%µT£0Å)³4 õÌTW_…5VYg¥ÕRTÿËÛ‰P­µWF÷”XJ…mTQbôõX_CºUÓ9]ÖØmSÙ «ýîNk oÃ?·Í1Òmí×ÔfUÕÚh-·Òv̶Ôqãý–ZnCwÝðÎ5/]Cñi7&“¸Æ{“nF–¾G,lRÊ-³¼ÒÇ“¬[á)#®2"~2d‘3æXº€ìcˆ+–TÌù¦”Rå"!å7×MÿýÔ-³¶Ò^dŽ\-·ëйp³Ö[£ÔeÓ´[:-¥¾¯éŸÜÈÛãFÙç‹u°® ÚÞîÑo`nk_á¸ôF>¢ñ{Š#ãSf²<ê†l;´]ϲFôpÑÈ«ÚîÂF;Å­>y#‰éD:̕є©Q"CÉ;U–^+9X Y»Nº®[ÌÑHI5YR€×%éöFFs޲ßÌ„†¼¸IOvbC_ß.GÈõÍì.Ô1få@ä‡é[{ $WÄKµÍpXÀ´ßÕ¶i/Ræn§\fíÎKxVuñÃåÃ*ÈÊ\(œáŒD7õ”O«‰sœXÔ ÍŠØÁKÒ‘‹Ü^‚ w2,á¯ôs(*÷(G©}L|éËfæI„=xà›!¹Š î™óóA¯¼ˆ©V²2ÅéKÊBk2ñ5cNšÅ .ÔœBEj@÷ÉÓ*–4¦R *RÉù¹¤VÕªWMêTˆU®vÕ«)Ôª/¿:V²–U_a½©YÕºV¶’ ­ mk\å:×E½õ¨tÅk^õJ&»îÕ¯, †ZÓ^¦5°‡E¬_ûšXÆ66¯‹uld%kVÈNÖ²—µje1»YÎJR³mhUøYÑ–Ö´$íiU»Úu¥–µ¯…-¬\[ÚÖöS³µmnu[ÿ×ÁjѦpÝmp…KÂÞ•Àu¬.U¤\P--OÌMtuÊBÜþŠzÔ¤¤ÛP€¾i»îêsm 6VwQÅîxÏUX9Oß]*x¾›ÝWм˵z!:Ê‘.¨|.ƒÈæT‰=ÔÀÝÌh6 œº½„lzŒ#ü :±-ÕÂ{(‚Aj`p’´>kqzÜ»®ˆÀŤ(+W5M¢’kò¥‹ yÏÓóuÏypÒpìbÿreØŸhf’¾étìž_EÝ÷–œ±y<Fé¿çs$ƒ§_ ³¿¥ò•Ù 0ùe½^"]ü·Cæ§q“iK­§ÍàÿÁîöqÚ¨j§ž>enK–‹?§E·à5ˆ–ÄârÖÞæH í0Ñ:¢Í,¡YFþ ´ ¥CÝ'ÐçsƈÙ“ådv]wÂÆKIœ1fQ¦µŽÎ,Íc59 ¿£ÕPš ­)?còÀ_N3¬_}å-sø}§îpó2QQó‰Ô^eïn›=\ÁÒÔ·…EîZ§ÝÙmS{’yöÜV½=nr·éÙåFwº]hmãþ¶Ä®ê.Ÿº­Tuû™‚ñ๛‹fzƒ÷xòŽvpS–+_£ro¿g¥o¶šÏ„¾!Á×;ð‡{Wâ¢Â7.^ç1[¶p²»IÍY‹ÔÕ=BÜFKž9c·Ä-ß°… \°•³üÎ.­›wVr;óÎÆ^8¸——mO±ÈÛ- /+´ñÃÂú¦[¸‹sÂúâ'[«ê‹BÿÃP±BŸ*¦ã‡ó#e‚¸ sCÄs âÛµIY:Ž2:4 ºà¿;ŒŠBgª§³ð!+é4{R4P“ÃfêÃ^ÁÁHDÖ“¨ÅPÕ#šcùºOò¯NT3O|°Ÿ)8ªÙ8S>@ú7U 4(¢ÄÕ‹;V¼;Z3Cã½UÔ¸"$:ã¾Zš>)"ã3ÄLÄ&S¤œ3ÆþÀ'†±·¶£§â²M+E-,À:<$'-2|´,l-]ì@¨¢ÿB-Œ§6äa4¡±¼Ÿ‹{§kÑ$ªHÅfü´`bDDCFDœÃs„E1<»7t=Ù³&ÂKCPYC/ԺשDFä:I³ÄØÙ5LŠHª»¹£Žã¡Å°kÇ~úF\¼dÇ¡Æj\E¸Y5Mó›X\Bgǵ³£7l™—ŠÃ©y[”I•Š1ŠÁá#4:ëCºÓÃß‹µ}CIIá½ÞSÄ)ŒŸžÄÃG„½W ºÚÓ3BÌ8qJȬ·­ô¬—ôʱ¼ª®$˳Œ³äEiA˳TËøR8$<ȶ<À·\DȰæ0¾ŽŠJº´A»<Ê[KIŒüHÙóËLòâHUc9uZ¥Ã¬ÁÄ|ÆÅü·xÔª„Ì„”LÒD#;©Œ—ÌLþÛÌ ùN¨„5nŒËÑ®ÒtÍØä-« · ”ÍÛ< ØÄÍÝÄÝäÍß”ßÎá47±$Îã”DãDÎåŒádÎç<å„ÎéTCé¤Îë´ëÄÎí|çäNêôÎï„ÎðOæ$ÏòDÎóDOâTÏõÎötOÞ^„ÏøÄÍù¤OÙ´ÏûtÍüÔÏÌäÏþ<ÌÿPºÐEË5P²DÐõÊeÐ!tÐõÁ•P¤Ð ýKíÄÐ ª„ºJÛäP ½Ð]Á%Ñ4ÑÁUQdÑÅÿÀ…Ñ ”Ñ}ÀµQÍÔÐÕOåQôÑÀ RÒÜÑ"]O"EÒûSÒ%¿&uRuƒÒ(ݬxXoX+ "Úºq¤R´l„‚@†™Ò/•,p(nÀ‡O€ €‡…`ð(S3E,wÀˆ<À‡D€H€vÀ‡>Àˆpø6.U;:=Ì;(|†AP°…1È|XCÓ#u“y0Ôÿ³‡wØcxE8„@؃=¸@ Ep„HH†nxÓ™Â"ÂÁ³ †@ 0 ‡– . ((‚(À‡ÈToã„=ЃRK SK]*(l-wP‡…l%V‰€(sH……@‡c-RÀ‡c]beÖf.x? Uƒ Ѐõp­y0×(SØVsÅ€-ȉ€††\((@Ö…(,XpWmµzÍ- „I˜ƒ8À€¨€˜„*ÿr-/ÐU0×QXH¯VÌH2ì#XÂYB\!§ÂÄÆšI õÈ ) m4 ¿jJ:¹pƒ¥ ªÙÒ…Z€X ØmÍVÉQˆ*I­P$ɃâIL䞸`FÙ ÚküÆT %Ú¹êÙ;9y(€ƒ"Ôï{ —ÕUgÈÖo=‹W˜Wjè,(S˜…jXP¸|˜®Å‡gÐ-(PÐ*x®¹MÛ¡5Ûѳ²õÜÐ-Ý~ŠÛ÷( ¯í µ­[ÐEݼÌRq­ruÙ¬ ‰„W—Ø…‚¥|@8T`ÖH‚Pf-XXÖ8W`Vø]>ÿ+Ú:±ºF±]õ;]Ñ…[$q]°Ý/ÉHíõ\ì4ºõ Wy6'¨(ø×lõ°‚Ð…rÐU|È‚‡W Öø…XP‚ÐUz b5 (O˜‚g€™Éa<9ÂYîýCӭٞ娠4e»Ùð1ßÔ [[‘'˜ `H‚#˜€  U˜€a ˆa|˜|8ƒ4à…_èá3èáuèʰV‰H¿Xs•ÞJ¢¹Œ-­Øš€Rˆ&0&Øá‚X… X…Ðá0ž7H|Pƒ`(ã2æa50â½M?Éð]ÍÖkðX œr‡-78ƒ—˜Ó:ο#ä÷äA–Ï¡ ;aolserver4-4.5.1/docs/intro/tcl2k/html/img024.gif0000644000175000017500000002330607363640503021200 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«·c^‡n8pß­…C&¾¸8ccÅ|÷Fö{8hâÉ#“\¬Ù-Z¸MkÉ«Ó.ËÁ|V½baÔ•ó½Ž-;ölÖ­]Ó®š0mظssÞ]±qçμ1O~ø¶îàΟGìíØvàáÁ…[ÏÎÛ7wéà÷ÿ½LÜóJÐKGÓMhz%rò‘£{ÿ ÿúvÁ»SSŸ¯÷¶þìÿù§Gš˜›IïmGŸ‚ãˆ|Œ•çÝr⇙ƒÐý÷œ}jxà„æ…Mê‘VVˆ(¦¨âŠ,¶˜Öˆ5‰µ^]<¹hã8æ¨ãŽÁ–M¤±W#Diä‘HZå£h2šØ^’PF)å”Tf´d‰t˜U…êöS—'¹ÙwÓ‘iØFbR”Ÿ™&•f™”yÔà™w±YeCW6™å“( ¨qý‘¹àŸ•J^mø!Jç‡eÎæ›…rg¨d‰Nª¨¥‰ž9)¦™*ú¨—tvi)§szÚi§kžª)a—²Ö\†p~lŠè¨ úªE F¨jKy9£–w+ì°Ä®ØëMN‰Õ«°zÊ¡¬‹:ûèo®Ö í¢Õ«í¶Ü>t,T¿òÙí¸ä–knIßÎ(ä¹ì¶ë$ðÖkï½ÅÊ®²øöëï¿8ê›,ÀlpˆÿïÉïÁ 7ì0R K%îŽv>lñ¹ç1Yë(é‚ 2ר©—¬bƇ¦2“¾Œ$Ê&Ç<,Ì6n\ÚÂ7º_qû‰Ñ› ÒëÐÕEJ(ŠoºW1µB/+¥Íë¾,³dM§T^ÒGa™ÖWUmìÊ¡a)1Î9z=õÙGš"ÔôJÝ&ÚpG©6ŠlKäÜqçí"ÞæÕÝqÙE*+³œþÌêà^ ®w¹|{æ7Ù86¾øäžIÞÖãIZîØ§µö·ëÛ!w7ŸªÙú·šjÈ%'Û´ÖQΖækaî¶ë´ »Z²§]ûî<Þþ"Øéé9væ¼ùÓÀ“(<Çßè»ñÐŽ<Œ£b3O¼Qm´Qöiï÷ßøä‹oþøÞçc¾öëÿ}úÜ‹¯þûèwŸ¾úðçï}ûöÓ_¿ûþ  ü˜?fï~åC_Ç÷?üõO~”Õò¼³äÎHŒž¿4½ä± Y »ÞPvv«k™°„Wû¨Zu(‘”dɱ`H§œkÝꅞֵਮ2¦ÚYwÂ$ƒ]¹ í6ÈÄÊuÿ=Õ»™ƒ²¿ý½/~ý _ùØ·EÐ~_Ä_ü¾˜@1š1€`\ÿÆ¢Qg< «ØF/ÎOŒ÷óâó(Gý™1Œdì" ØF9âñˆ”^””x·&¶¤ŽÌÌŨé.’˜4 ¹ÂÈÞeò“ˆ™$\*Ù¶´a蔨L¥*WÉÊVºò•°Œ¥,gIËZÚò–¸¤¥(WFJ»ò—ÀüŒÂáó˜Èää0?.—%ó™Ð„Ø2{ù·hZóš(é$6·ÉM‘h³›à 'F¾)ÎršÓ!ä<§:wW ‡ð¡!ehH"’Œ¤³$AÐBDx‚+8¤!0A 2Ðut[¼wÀä "h ZXØ:‡Ý꦳Qh¡îT› ‘™ªöÑŒnTP3ÜÜ^8ºœ˜aÔ„V9œa¶{B&0L€ t"]˜h 2…”àùXb‚k8d %Á:ò‚8$ Ù¸ ʘž„ô`È/˜`&Lù°+&àŠ äƒùp+â†|¨AgÈG]ݰ6ÄkšË“"WÛM›ö°Ÿ4,bÛDÅ2ö±Ðÿs,d'[;ÉR&[œ3T¤:TDñg2 ƒh=)!bhC5ìlêÀCµý¬M¥b¡…ÂÃ%Ò‚ˆQTËmhOGñ;½­m‡|Öâr˲•fY«QáÖ¹·.…6+Ýæ*÷cB›^K(;É'ºßÅUjÕtÝ‘™ºÓ/v«+:ôn ¹”oÞà+ßúN¾öÍïÅð«ßþ2Œ¿þ 0À¬ÞìÚʺšêY TÚL•jSDÔ!lÓ`c†ˆ3il›5[ÎY8ZÑŠm‡iuÞÎ}8ÃÎbðQ C¢î¦méšEâYípÃK»ð ¹ö·…Ç2ï„ü9 ‡ÄÇ*!rUutE-+YÀ‡E²Õ"\ã-UM¶r‹¿ edJ¹Ë`>×—ÃLæn¹Ìh&Ö™ÓÌæ*­¹Íp†Ò›ãLç"Í9”uÖ —½Ø–…pvæe1ÉB—gxíù*ÿwÖÊ¡ ý®EW%Ñ["ï9\`£Q Uv²µ\¬CÅø‡ZÞ²kUÓ%k¶pZ¶-lCUC@9Z’‹ìs1­è0ù–ÑízuR í´·ánº–&õkI þºxÁVЬ›ùçKZåɺ:¶&wb—ÒØwruI’ Yn…×]“öî¼Mp?;k–Ö0ÊpâtñÁ”oJír’{(æ®Ê½Å-¬}%ßTñ7¿«$ðŸÜMw]Á}rp¤ºŠ ´#ó8@Ž‘Žzœ¸Å/ÎÅŠRâþ+$)H:ÎQÛ#£Sþñ_QìâÆ3žFýÍq™`ZÞ“†gÍš¤‹,Ïyµlu]{‰HƒY s{ižQfB®Ð—õ'%>7Ê½ë ®™hózŸ®ö'j‡ÍÚ¾¤XÂ)wõó}^iÏöFÞ½,Z„€läßõ>Æã\ïtã#ˆ÷ÀÃÑä;íÞÀÂ7þïu,£Èø¾3þòZ7{ðülLg¯=omWIÖùyÐkÿ^yœ§µçK¶Ð§dô¬½Áß¾/ÙÛ^c´wæíwÿµa§^°¼>ÝrßláÿrÄïüñ—ÿ;ßÏøÌ~“¯zé[?+°¿>® ‡ Â/ˆ ˆ‡DB#éÔE³Q‚‰Nô!Í© šðÌ#§Y(h>(ªÓý ¡!9ÀS<¥}lVÀð@`ðpAN) SÅSçpA ©  Ó ¡`) ± % ˜3 P@€ùЧÐ5€JCa®¡aꆃ”æz¤ 7øR6¸:’ÒQ78C®‚*§C„JØQ ƃæ2Ü%lDMÍ)0*3¸…èB}ÐÇ…`(Ù†Ò7†dÈ|fx†Ç—†j(|l؆¼÷†px{ÿw6^£sYêõ3b×us¬¤‡šc‡ª³·v2{x\^XlIÖC•Â5À!ëÅQÈ3–8^7(HR‡H‰LçB›8‰S‡„FhÒ%è…ÌEB÷Á‰¥¸\¦QìÅŠ–Q ˜‡íU-œõа¸‹¦(&ÚåCºh]‘x —ŒÂÈZî¥-¢˜‹àµŠ·uŠL“ŠAC\BŠÄxJÕ5‰¿H^èŠÍH]‚JˆÆ…Š%¶Y·– ‘¸É˜/‰xtSæ]Þ8ˆÏ茻ȋóÈ^&öŠÐøûˆ[¶8‹Lx‰åŽáeüè‹É\ÇÈ´hÆøˆ ŽföŽq7‡ér˜‘¬·‘ëùyù‘ ’"Éo$Y’Òv’(ùk*¹’ŒÖ’.™g0“t¶‘Vç„z8u9étGsDþh`nb‰qD¥Öuä2gÆ%o”rj™&iÓh4–‰®&CíVŽÃõ9˜â'LIjˆñ&hY–Y4tb…YQye°‚j6ƈìb¡ÆˆbY–õ(• ¶+jévÎÇlÊ·,–•/æ°H8–o­aD]Ic–Bˆ‹ —TÉ,Dã˜ðö“d‰i µc™Ö–A48riƒÖR7Fe\yCûH*6bo©˜¡9—±ØcYM΃“ ´‰gSu;3I“pžæ‘´é–!ubmsÄuýžÃ„×¼×ãÙ×îš×Ô Øöu׃ý׆mׂmÁ„½Øm†ØŽ­ØÍž=ÍAו}Ø—mt½Ùe&Ù˜ýÙ f¢íÙ”]Úœ="~­Ùª½Ÿ-שýÚøÛ3BÚ´m٬خ­hõ«SׇÚjŒ\ÿ|Ú²ÝÛÉ¥]Ž™ºhŽˆm~¸J†kkÊ­‰‡† ú<ν_¶M¸ÀeÝéÀ=­Ð5°ZÞ­…­â­·Ãè‰Ú=ÜåbÜ·=Û>ù—™ŒÎá[6*¹wȺB:]·‰¸¨ÅE [ò^[ƒß ÆŒ ’¯¦µ& ®[Ÿ©Šª–¼£æ!á}Ž9lôíÝöݤٙ½H‘÷X‹¤Œ‚ŽIøßôh:.>Ý:#ac7ºIây ö“H:Z„ó\9þ⦉ÙâôX‘»=ÙÈà f&äÍm­ùàR~âŸi¤²HÜã}ßMþÒ8äøxàj*ciå&Žæ©<ÞŠÿ¡ÝMß]ãS>ä%æyã§UZ>hâˆå•8Žgθîäú=^aäHZÛÍæ„îß[®æç˜î˜ä£âr‘uŽçn‘öØŽ?êèȸ]ž^ƒ^ê™îƒ›¾êU^àE³æúXá¤.è‡Ët ®fqsNÝkÞ+žc~è9ŽÎ­Ž§Î´Îå^¾å¾Žê…髳n¤KÚêÆnæ“®ìÃòárŽéxÈìý=‘ÞjŸŽ­˜ùãD~•˜–˜ÞZ4ÎëÞ¸¬jäeù‘>è(^äñ.a¢éŒ÷þëo®¡–ŽÚKÞ]°>ˆzNà›ì]ž”¯ ±>^}Îä”ìð]ð¯èO\ ÕŽìn+õ1•žåzzëÙžë9±ë¹½ÚÉÓÚzò„¥íºÎí.ÿò&(?ó”ó'/ó8P:oó<ßóëôóqóBÏXDŸÙ-ôç”ôFÏôQVóEôP/NÿNOõUNW?ðY¯õR¯ô…Ýõ^ðǽôbÏM[oögMiökÏö_ÿôooNm?÷ˆU÷Ž4Ü 9vD¹5™c9ò}”qõ§q`éêU_¥÷oZ¨‡Ÿé6mè&âC™\‚¶ˆó=ø\_'Šß{›¼ÈÙù­bä´ò /îƒrj|Þñê¥Çº`þ[žÖ¸^\Ky–B~¹,žñ¦?æú¸_ûš a>>ºGîùù¾Þ\†÷‹x¼±?'¨íÛ)î+fûÛz—Ò/ïÁY»:f—=ÊàFoÕÙ«i*b5FýqÊ:X‰-_ú•œVeQIþÞù[6®Ù„ùj_iP×—•ÿNÉa@ÿ €| ̇РB… &ØÐ Ĉ^8‘bE‹5vt¸ð!F‘!NTH¤I’%?z<¹1âK”#a®LÉ‘ D—23®¤92fΞ1ködxÓ¦HŽ=ê´9Ódͦ4‹NÅšUkÁZùº~õ¶k²dó9›mANùÚn…«UjÜS“f½K7cѹ!A½ÊroÝŽã-¯ºD3õWhÇ%·Ü¥5ÓRaÍe·]wßåÝUÕM^{ïÅ7ß.å–^"õ8`‘ß=Ñü—`…f¸á¬ ž’O‡'¦¸b€!¶^‹7æ¸ãf1ö·OG&¹ähñŒ2]j×5¹e—_Nä•5†¹f›o†QæÝªÅ¹gŸŽPçY'ºh£6Iè‰Fºi§qVa‘Ÿ¦ºj£–Øj­·Þkž¹;lê½fZl³Ïv—lšÑf»ígÕNØm¹ç.î©éÆ;ï“'vç²õ,Áe9¿Ë_ŒRhÂÞ¨…{£ —æÀù±„0[Z¨vGGQ¿ákèDµ‰QD´Ö¡TÁ^°†X9¡¦˜§)¡\Å~ë³Õi&£,ﵯ~¶s2($†Ñ{·*ÖˆXHFp¥ï…3zc˜:)ú‰ŠYgtMgèÃÃiŒ×ú!÷ˆÇÀ´oŠø) "+ôªÿRLqÓ!uÄÿÀç~P Ô·š’ŸEª~×¢¸£ç釓ԱŽxösʦ”˜ËŽ'mÈ×OýsN­¦@ÅFÐTN U(Ð Ú¸BÎvNü_DŸ7Q94NÕèÍ@j#>²H+ÄPBCúPwæI†ÚlÖHÕȦJ®4£äÿ*i˜ú‰ÈeQqŒ,¼Ž|phE™v³¨ç*Þ¯&Îße‰’i”Lp ¹F›ž´¥)³¨“çA甫ä„…Wbé¨Õ<«¤’ Ï¿=‘]йPZ)WåLt­*ÇðZ°µ¾”©ÔËk;qÚ׬6q«t l=¯ú¸ã]ô°“ìR ã <”†P¥Ýë‡ìú%{®†²9ìiYÓÇÌέ´Ú¬—Eð <ËŠ*Ïh?Öô±‡—…àiODØÆju›.ô–>kûGÍ&‹°²°˜ØŸŽ+µ‘uj&¯hKLêg”á²î¶¾ZÙ猄ºÕx3ôÜ\N¼V;ï…ÈÛ¤ô27`í­Ð6z™_÷拾’ï’î[_{í÷Ní­aË_Áù×@ùU ¼XÚ¦ãT0à »*Âfÿ°ñ–O ^oN…“èágX©ã°[I,7ÿFÄWZ1ÝZ,›iÆ1ì`¼á¶Þ´Imrvd­™GFŽ ’ŤdÈê8†þ«ÃzÓ³^õ«¹üiNk$Ìfþr]mk^ ›Ò&¶§Õ|ç6ôͧî±ÿç,lZgšÚ£Þu£­¬gGÛÙÚB¾6µfq[ZÛ¼Îv¦wmnc³[Ñí÷¹·}mw3Üå†7·í=n>sÙxfi©± í8K[nÍŽ5Ç€ífƒ“à58Ž¡÷l(£:â&Åüà¦b|â çÃÛË|¾°’Ê1q;.ÉNq‘çqÁ¹SáÞш³ˆ ºò•7Z5¶*xÚŸ*Þʳ5g_Tˆk=eUQ‘R4#QKrÅTf‹¶i-.]ŽÆ<Œ„´ ÌQí™GW‡^äãh ÉÚæ,ׇm»0)™¶ó‡SÇrû]¶eÇ·ßµwjÏoL ûÉì¬ì.u´‹>(ïv 4¡ô zf¹ÆéJ·í‰÷ä*MÉží óñQüzÌZÖànwº ÐLs(öŒA¼ì;êy0}™ÜÁ[x¾%ÿëC6`gä.­8ÙÛ{ß;—·1wýð‰¿PÝ#÷Lj·£¢o E+{G?¶œ°¯£Úå𰟳®±}¸X»üã§Ë¶[þõk™Ö¼2?–ÙŸþùç¨û[ù>÷o”ëaËŸÐê×µ„ëµW“´~ @?ë4L»7_{7fÀu«²”À„«´XSÀsû¿›À|¿\c@ðû=¬Ú¸(ë°iû@V;?òS@ëó²a[ÁL¶_›> Ô¶dƒA¼AòcÀEë¿ |? DÀecÁ AÆB¾‘c¦¡7{“·êã7v37Ì6~ÃÀ|ë·{‹·j»ÂnƒB 7œ·è+7&t·o C+¼ÂtÃÀu#7CMS7€AãÛ±±“9åË„Û>…Y8Ã+ÂA‹{½åó¦?Ô0;L¾&#D°¹?­È?û[Dk2Äk=$œ¦HdÄæs¬çÃĪić9>D´DuêÄ­ùD¬xD9ÅRä,Mô­˜®yâ;V$¹I„³D¬EZÌW0XÔÅ]´E‘ãÄ_4šULzšP¬Äa$F‰âEŽ[Æg¬dÜ=h¤Fé‘Fç«Æl4ŸkÜDmôFâÆWüÆq“T$Çsü¯' DáCÇvÔstÇxô¾pìEy´Ç‚¢Gg¼Ç}¬xäG~ôǼǀHy$È‚tǃDHtTÈ…$džtÈo„ÈˆÔÆ‰¤Èjÿ´È‹„ÆŒÔÈeäÈŽüÅIZÉ‘,Å’4ILDÉ”\Ä•dÉåsɗ콘”IŒ£ÉšÄ±›ÄÉ ’ƒøƒèI ËGÜItt„‚H†t4µà»Ã¢\Æp(ˆnÈP€ ˆƒh„JAtJZ|Ѓ|Pˆ€p‡|ðÂÛJvìJ]ÄcÈb „e€€[mÈF8­¬ÃdzxËÀºxà†c€„E@Aà>¸ƒ@(„ExIPo¸Ê¸X¦jH`“0@z˜ à“!0‚€‚(ˆ8|(Áì¦Nàƒ=xL0¸¥8¦ÄE*(ày,Xƒà\͉€(sPƒH×,RÈ×4ˆÕœMÚÌ x€?pLƒ ЀkË8£ç 8…átNHϘˆh(iÐ…Y ˆ‚×4ˆÈ‚ôDÎåÎkà΀J : € J(ÿÿñ‚Ðç$…õå¡;²Š²Z¼ªk¹·¢.äðP’<ŸS¥…€" »äØ íÑûL`€9°Qþ) ]°…Xˆ…öÎàŒ QRÑ¢“ ̈Q¾x/÷ðäÈŸ&m¥ô‘ æ¨<Ô3QuÑF¡h¦˜‡À¯ó„¸ ÍgÎ㤋XNØÎjè,(ˆS kX‚PÀ…| ‡#ÍhÐ-(ˆPØ*@&.5Ñ›@Ô&£âzÒ$½Òm.FeQ+QŸ»ŠÒ%ÝRJ…FÕ-ÿiÎ %R“OäÄ ^pOÈ TH…Ùl(ˆu˜ÍˆÙüTxÿ…Ù4V-"NíR} I¥ÔœÃ¹EÔEÍMmÑKÝRÓ˜Ôh¥ÖN­Ôš±Ô}1ÓQt‚*€‚/ ä N0 +]0‡Ð̇,y€…Õœ0ˆ%0(ˆÐ¬‡RXM‚‚ø„)€†”ú“õÄû®,}ÔïˆREUÖƒ¥»‚ÅŸÈø‰Ï`ˆÊ0ÆÃcXy‚  &À$8‚ ˜€jX… ‘¥‘͇ ȇ3Hƒ^—=—e_@Åm•@SþtÎ_ÅÃá¡§}¹¼™S&0&`Ù‚`… `…XÙ¨€7Hƒ|Pa¨ÚªmY5¸Ù¿œFºø„Ð Nl8Л€r˜‡¥ý 88PôZl,Û‘Ôɸ ¬¹¥Ûªò•€;aolserver4-4.5.1/docs/intro/tcl2k/html/img025.gif0000644000175000017500000002436507363640503021207 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«·c^‡!Î7¸aa­‡A&¶¸cc“‹W•l¸ïdËù>,LÙmR¸MkÉ«Ó.ËÁ|Æ|˜³åĨ1–íZµ`Ù³moN­ökÜ}ëÎ÷îá{ys,޼vDáÏ•WFžûâcæÓKÏ®=õmêØ«gÿÞ.þ8wóYA/M7¡é•”[{w¾ZsùÜåoÌÛ>~½úõ÷€õ¨Ñuv&Rxõ¡]½ÍG„Ô=aÞ èŸrôG¡…¬]Ø †ª gàzÚŠ¢‰Õ^]›ñÇ ‡,òÆ/^)òÉ(§ ÿ1ÉV¨òË0Ǭ%Ë,óÍ8çìÍ4­Î@óÏñì¬ÍËÝYQ´B7ít[Dgdt¸$EýôÕXlõES“åqÒY‡-öÃ[[ÔuiHÇyª»›ý»4¤·ê w®½]Š®aqÏ-¡æîm¯q¾Ö·Þ|gŠª® '®ª¬ßÙ]¸âcYvEg›ìsä˜gN¬I•»|yrš‡.:Ž“SÔ9 •>úê¬s¥ºD§­¶Pm4ÔFíùà~{î»ó¾ûí¸ûÞ»íÀCT|ïÃ;t|òÀ3<ñÎ7|óQ_ûðÑO/½ñÅgD½ðɃ¯ýõäÿôäÿ>÷èW¤»î¼¯|ð½oÿ»ùÕkQøËs>þôãýΧ¾ùe/{Œ»g½î)0™áœ·v.¯¥í@Û^ë6ø# ~Ž$±» qÖ8Æ”Î5§‰Ó8ÈÂ9IðHÁ²`Õ.¦0¼éË„e[a w6NI;Ú yHÄ"&åu á%·Çå­TvòU¿¦å7}UÑmW¼¡3‡D—üJâ·HÆ2žæ…?Œ!Ú–²õy{ã DÖç˜O qRì×àÜv/-Z p¢zWl´¸+…éði]|ˆÇhÆF:rAhT-ɵπ , ㈼å pi$*¤yö"EÍ 0”ª ã8eJ;ò1^ÖJÜTÙ üË](OÎéÿEVò‘À æì|à ®‘‘;ä „ÉL†EÒ[“ôÜ/ÉÈËf±š_b©†Lkz3˜Øô¥ ‰+Ð}óœn g6£‰:6¡óTg1ƒÈMxÚóž-'>÷ÉO‘賟 (Fþ)Ђ´—ë4&%ÊPƒ´¡ÅçC#JÑÐÃ!|hH’‡$c#=I´^„à )ALP‚†´´¢0õÒðp€$!͇JEÐÒ°´°\Ûwž •‹D½6‡$*wÖ •IÌP븗çœ*lz|Ó0ÈáŒ×å4"è0 D`®ô¥é‚OSà)„ çÈÇ xð\\Ã!K(Ö‘üÀ!QÈÆ]zө˜È/˜`&Lù°+&àŠ äƒù°,â†|¨AgÈGgݰ6À.¡ô”aaWëͯ²öµEt-lgËBÙÒö¶«ÿ³-nw›9ݲ銤tÐyªó!â^È–þÉΆUÜOÅR^†JnwÖÆ+eN÷A(jÜr³ÕÜèv&>Ð-äo˜Û&𞨻È5e¶Ä«Jé^Å·‰¢b)7¢ûuB¸îpãE_û–ǼØ 'UÃÔ ¸¿þ°ƒ ƒCêò׿õnü(£W¿Ñ„‘_Þzx+‹ZjÄP»MÕ~øÄ¹%1Çz†âk®Ã.ŽqÌ`,㣌Æy‚bˆ³X(xኔˆÂÏ€öÕ(órS•J.yàT]%³ŠÉê ¥”aÉJù YCo»²{Läñ‹Qåmו¸+CQYÄ8UqɤY&'•Yí£Ã›‹ü·ÇÉ [»Ïÿ5*º²¿w»oÉg:džÀzTSŸýÕ*,Ú9¿¯ÜîÚˆîswžòÆNù´Ëý“v·ûÏYtRõê OÝ3~sÏ[§(Œ2.ÁÕ¥cí4Î{DƉúÍ})Ükæ¿ú¿kÏûÓß>éÀ¦ºè™šŸ[;·ÌŒ±ÛÇŸM{â¹õŽVÔë{ÄÑs¾ôX§¾öu›O}á÷$á/ÒÉïåé®ÏrÁ§lÂ× ÕZj,Y·ù¸`¿›Û·XÏCVÿ0Ýšù€ý÷-ß§{9'~“gyw~ $xŒJ‹S8„“U‡óTÐ\Ñ–¸(Mt§*}'3HA(tŸ€h}öw‚¦—|"‚¶†!’¢‚S‚Ú$nõ„~6H}8ÿF:hb<؃¼÷ƒ}|àçND¸}FØyKø„¦u5…T¸'RÈbU˜…=qoZØ…à|A¸t^8†¿'uHh€d˜†Es…㦆nè\ø†õføàƒà /`€ð‘°†¸·u8§?• %àS>õ>%V&Ðó VY€V?5Vù`BÐ9PVe%‡·UÀð@`ðpR)0V,UVç‹A ©  Ó ¡`) ± % ­˜3ÀR@°‰ùМ§`‰+Õ‰ðaPÕ©Ö6‰V1ÐUÅfXIuTRÕ)ÝhC}sqÜUÛˆ@8i*_)03ž8†qøŽDòhƒôXxø¸}ú¸Ô×þÈ{¡ÿ§µ6f.7(òµUc]ºæ\Ov] ódáu-r²a)5ë4éq³¶BšÖ`úe‘Õ4a a'Á Âö3'©’¡ -é0yj޳m’i7)]úñ66)aø•k&ùeÜ“‰a<‡`( ”:é`N¹“Íá“#‰eO‰”‚$’B9^JY3ÉmÆ•º†“û•aìµ]Œ³_ÿ‘ ¦BV•.Ù–`I"Mv–kÉ’ŠÖ–/)–)i[)&—™¦–*ˆSj é•_É`öÕ“cù•LYUÙj£V”‰•V9•޹˜¹”™•?ITŒ‰–¼F–“ šJ9š›9˜`˜{(ÿH¬e”JÁ†;›±¹‘m1¶ùtº¹›F×›¾©sÀœ 7œÄéoÆyœù–œÊYoÌÙœñöœ84{F-QtBVsŠQ’ˆ¶ä„m¿Õr=q™ÝGz.8žItYdlÉ|•¦8Z{òi8Q9‚2Ÿ(ÉcÍ–qaö”ýI7ê§mþ¹žD)h*ŸóEló¢ |tdzšóIžG›Bø–CIó`ë'pt)‚ôé& :Óö*å2¢¹Ä/˜Rjø ŸS4*%WhÓg&ïwmÕ†/Ì÷¢êmËöh’/8j…„‰…¹•bVhvUâ¡øeaÒ‡|ÔÕ¤Ó&£ò¡OêgPª-0-÷žQ ¥Yê“@Ö~[&¢9º¥tf‡h‡f—¶£¯&d$9C¡bˆN¸ Dæ"všnxª¥ñW/üÇÚ~ƒÖ—)§Â-ÃVæ„¢Cµ£¤é£4ú™]Ö|Ê´¢š–Ú ÒØ¢|šmúm{Ê¡ ʤ:‰º&Ai£OžÄl¶z¹ŸêÒhyCªÓgp¡jŸüAKúIƒ®„Æ¥k:ePÆeg*«˜.èžÚRƒ5ée#ˆp ª†š„˜S§y’žyÚ¹º­žÖ­Þjcà®26®äêbæz®(–®êúaìÚ®¼õ®ðŠ[ò:¯´U¯ö [øš¯¬püz[MøCø¯…°ç‰L0§jÆ7J€J°çÈ‚ÿþw°è•ËZ“kF{†¯ ƒ›K€û‚ر«•±ax¨'—Ds0ɤ š*/ǬèÙ£‚Šz‰$¡Vn&ëš"‹¤ÑÊ3—³²GHA£Œªc6pçeaû‚ ËE¢$úG7[.‹¦j/kc;+ˆ=[¦e$›iÂK%Úª ËPY[˜;‘I²,T¶B~j SlÛ†U­oËOq[›n+žu Ow[¡y»· Õ·sª„€Q‚‹²]çè£v@G„n4~v·@›x'!y±¸˜7~€·¸˜äw—”x¡«A¡+º™”>ïó=šË>”+¹œË€Ñ@¯+º„;¡A*·Û¸ºŠwv›ûFæ÷x¾Ó€§ºp»™·»÷¼¾;T?HGÍ vÍÛx“Ë>Ó˼r»³Ûw $¼ÕˀꃼÂ;¾ĸ–÷¸Ðû»•ë¹æx»þê0ßk§•Ëo'¹#k»­©µÙW¸âc~"¡¹ó4‡k­‰ë¿UÀh˜‚×\ÐÅ]ÅwK­J¬é%Á¾ú©A‹À>«¿fx²ü¾?Q­«væ¡ú€VEx´58Û± ¼±ù 3"¦Œÿ/¼µ’YÃuÃý‹2ò³ØjGÇõ\eËÃøW#@뤨fHÔÉ–®:Ÿêµ»‰Äg«Ãvû±&²=|­Ý…Å]¼ŠÕºÀ¾ÆeÅ[1¥{IýSylìI(JÙUK§fh;:ÂÒkÁº ¬¦° û¤ÚêGckZœƒ<ƃ=¼»€Gw¼Á« EKÂÈ£0{CJ·’¬´-Ìqƒ 1h<·fÜO¡œ»£lO¥\»3ÀbWº˜²be\ƒ6¨ ŒU… „‡œÄjÜ»ç¸î;¾qLÄÉJÉÇ&OKfô)µ IÃJå´Úž¤æ W“ʰ|Êãò°eè}\ìËEÚüMØ|ÀáL§»|„LÆ 2œ°Nê¬Í|«å\qåy}›ÆÖˆ0«Tª·ó¬ð;Æ0 Éÿ|Nã ÂmMÇ -ÎÛçì„àÜÐñôÐ+Ê­Ð}Ï}ÑÌ´ÐbK‘ Ò"=Ò$]Ò&}Ò(Ò*½Ò,ÝÒ.ýÒ0Ó2=Ó4MÒýÍnûšÓŽ´ÓýÓdÔBmDD]ÔDtÔH½CJ½Ôµ%Ð8ìÔý ÕR-®T]ÕåzÕX®Z½Õ5 ± pØÕ^½O•y. iÝb|»x{Ö÷ÔxÀvð ue-×~[>%" ‘ ˆˆVD !:Õ!`Øù°=E×:Óx@S¦¸ð×ÿûk¶±ˆ‡¨ØQ’C\d#Ÿ¼E–šðd`Л סݶÑ)ЊºàSg…öPÚ% $ŽÎ§d¬§¨dCŽÈ]lטæÈôŒ7ŽÂgVUŸSuÝÏ-4ALóÍ0 óf€=¸Š¨R¦ÝJpˆc ¹Ð»`Ù`;p ¥p ù@åRÙÙ—¸§Pà:g4ŽÎרÏÝDÌ}ƒÎÔUQ)\+šàˆ>ÝE л4މT ŒÅQ²0ê@aYZ¢e6f}z…ˆÎˆÙ£ƒ€IpI@0#° 5­0Fž#šhp¾ e¡u¿àk¹»6~¯*Ö2 ¡ÎWNQS¢p[>Ð]ÞP_þ}aÕc^PeŽ„gžæôúE`þÁn^QkîÁm>ç³UçkvçxþZz®årÞçdçfè‚~Pþ"|~è1•褱èŒNç„Îæ†éåèté–Q˜š¾é Õé9ñé$DžTüŒÜ¹Ú§_f±ê@áê9ÿ#êAêh¬ØÙ¡÷Õ”e’ê^ ÒGé3&Ýêy˰öÌ·ÚO"ëAë ¦{i©ú¨VAÅC©:°Þ—×~'jЍhzáÙî%Êî\ÎêRšÎQ\ìÎÒê—Kê²afÁT KžíT6•)‰— ­m*ïßE'ÐLÄ®–— ¹^óÇJr\¥¬fáÎìÀþ4‰šõ¥˜S ϲWÇ7¹kðìd+j–Ò2jÊ ¨Ìñ.iñ†ñcÈ/ò ‹Â)'íë.´+Ÿ¦1ÛòŸ¦’ú“nç•^ì°™ˆ––:šu ó)Œihið„ê–.ÿí¤)ôŠyóbéòÒÕnï#OôTïïÿÉîFŸ9¿ç;ÿ[?I–"ñ© ˜Þ¥ñM–³yôPLïI?ƒ±l«h_–íÅ—V/©Y?ðR;9Oô\f¦Yeiû+_èãÞñ Nö‰Ya_÷óþ÷nëXÿö€óÍNïƒ_¬6ùô4 ÷¯¬>Ïê“ÿ`?úFìsøŠö¤_•NíQû]ÿù¹ÎöÅzùJï™La´¯û§Yú˜‰í¦ù[ïá·OüÿøC?ï^¯#qžø )•Æ×÷ ›ëæ~ü4ÿ8`A… :lháÃ!6T(‘aćvÜÈQ"F‡/’D飯Œ!Q¾„)’¤G‹*[ŽiR%N›95º,i2%Ί …ž„ùó%KŸ+~Üh“çS¥1­^ÅŠ±V¾­]¹~ÝZD¬Ø|EÊž5+S¾µYݾ…Wî\ºuíÞÅ›Wï^¾}ýþÜ2p`¯…Á–kV1ÚkÛ†YòdÊ•-_ÆœðÏžšÝx,ãÅjÙzFZõjÖ­]¿†]9´áÄ‹m7>[÷nÞ½}ÿåìõIŸ5ýXøræÍ?‡¸Wã·ÓžV]ûvîݽ·;ýkõãÉÁŸGŸ^ý,úàâÃ&>~Ý1{úõíßÇÏ×½h²ÖqgÏ/@$½ýȻͼd°AÛ;ÿ,4SðA /Ä0ÃɄϿ 51DGÄŠÃÑ<ÄŽDWdDû+/Åg¤±Fü^ôO¾Ülä±GµÃ1¾ÿ~$²H#y ÅùŽd²I'/K2Æ%Ÿ¤²J+óŠ2A¯Lí©¡âòòËÁ„‹L»ÌlͽÔì‹ÍȲ¤pKÖh:J.7ùºsÌ:—Úóª;ÝÌ“#¼Ì T0ïÈ,ÔТ,KÔ/8K“sµ‰«QîíÓª?3uªRNß"ôÓ˜,Õ QQG­“TOU{¹Hñ,4ªE‹ª*¤¨ªBuÖ \âL¨^u]ˆV¢|¢ÈV΄%êØøÄUÙ]evØg‘í¬WgjöZbÊÿ6[]¡…Û‘ÂÝvZjŸÕ WtY°Ý !V¦°ºuY{ è¨@åØz vV6â7`|SÍôßN)Øà™8åõÓ|~Ø{)–ª„õåøb{ Ö˜`ˆ;ÆØâˆýÝÓK…=άUÌKÛ\—56\:Ëä–coN9]EÕeäž=¾µÖ¶Yçy¾øW‘“òu芳öh”Yæ·fkK¾šk‡.ªcÁE˜]ñÞu5Þ6cUÚbAOÆ™äoIÖ¸i«1zá§ŸþÚdŸŽÚk°§ºì~±¾›æS)…»nZöûpÄÅìzpÊ?65—‡tMd¥Y ÛhT?OVnr••T™ÚÐ%õ‘f½êjMo}iq«Ž¶ôÔ-Ÿh:ÇÞ}×u‡—ömeW}ñ7Û¥­C)wPyçTå²zð6ÿ0?ê;ÚzïÄþÕïÇ'ßÉðÕ.?}õ}ÿ<zI¥ÇÙJiUÛ~ýÛ‡µú§vkö:ÛŒòŠV,rÙï~Ì+Žó´„¾.ÁT웆ü×?Ê-‚4àvð÷šËuó2è”R»j̓Á;^î8º­ xó[B\8É•ËmÔ ©£À81P9Ó[Y6DÞNS@¤¡àܦ²Ì‰pKD¢Ýj&¸EpˆÄ¡o6Ƚ¾­ì&L !!7±ò ]jÂÓˆH¯'N®ŠV,"ŦÆfQ=[l Æ?̱QŠokbÆ2רM)ñˆ‘$ãF¹?^1qv4ÇÃCx¹~éR× E÷0Šp“ÉÃäÒZÆN&O‘~Pƒâ'ãH,s•”HË$!¹<ÚïO!Ô,u¹¼³Q2m–´ IAÛ s—ǤK-‘¹Lf~G™Í„f4›óLiVÓš´”ä{Nô¼ü]Ó›ßÔ\6ù“#ÎÓœçl™8Ñö2t¶Ó’¡æ;å9Ϻēž÷ÄçUì™O~ös ûôg@ïÊ PÔ5hBÁ‰P…6´š uhD™ Q‰VT—µhFqˆQvT}õhH¿R‘–ôJ$5iJͧN_²S¥/ý(K·¹@`ÂÔ¦'•)ŒhÚͬÈΧ?jP…:T¢Õ¨GEjR•ºT¦6Õ©O…jT¥:Õ⥹iV×#Ë—\!Zëy¸:œœ’3{` kZ»3V’x• 1{ZåŠK½¸•­œk^×Tײ é¬eâŸÂÞ°êÕ°ôâk/gÚÚöïK« Z;YP%ÿV’ë,g¥˜Õ”áA¤°”mF,KÌþµ²¡EíœF‹ÀÒŠï´©…­gîÚ»ÆÖ¶™™­Bj{[ÞR&·ÿì«’ÛÓ»À{ÃâM5:F}·¿Í(tÅ©M2–§ˆÈÇü´8/^®uäYx/CEîJ¯uIîÁ*ÝÝòÑ`ƒÝl/踃EQ&]Ää½@¢_ "’°Ý­æþ6Gê™1Àÿ­Ü\Ù\nž©†pÜ—dÁ»Ê÷Ú÷­þ.d¿ë^¢õ)oÞpw'ìÇDÎmé5è‚[ÝJ^×Oœ¬ÉTº÷E„ý.j;‰qÎB)¬’ÄГ:r }lF!÷XÆ2DòRB‚Sg~€ü#Óªâ˶4³vj&Š7S\©‘ذT&­•MëØÞ–2`f­˜]Kf3·Ù/h–š}Èf7×9f«ób[ìàÛÙÏKÁ³»ä<\ìrøÏ‡Î.–¼S>ц³ õüKkªÏ†t ›7i—Òe‘˜õW½b³®™¸—µ#ÿ½iSºÑ©†u¢­ºhë¾:Ö·^u9}e´ÞÚמ5©ýjêBk¦ ǎ̱Û0dcDÙÍ´u#mº(»šÔމµ]ƒíb‡‡Ö{F/e–f›Û~)·¹ÇìuË%ÝW97\žýnw/›Þ‰w_Ôíh¯ÚùVȾÉÝo‚àøn7¹Žð€¼!Ò>xÄ“{Çåà3Ñ´®[ÝiÍZ†ÚÚþw¹ ®pgû[Ý&O8È~oˆOüÜ79ÉGð˜S|â(y6ÃK®ótÛ{á3ï·¹õÝîx_œæ%OyͳtŸ?üæÜ†¹ËO¾sãåIç¹ÒeNõ•d|‡»ó©+óÿªcê+×úÈCt¶WÝíG‡{Ü×¾õ³·+EÏ9Ý›nu®£›è)/;¼o®ö´óýèÚ~{Û[ô² |ñN'üÖ%x¬¿ö.í•̼OîsÍ#^áž×<Â9ÿùŃ>ïAïù¼I¯òУžóžwýÕ~zy›žöÖî¼Õ‘û½´õ¢W½ÍOüÕ~ö¬ß{ñoö¿÷©oyôŸÏrÚò8ô¨« vb¿ØBFÿõ`Àϲc?ûÁÞþÆy ØðÇ:×_WØ»Ý~L¿’ÜŸ³ØéjûS·ÔùŸ?ذ碣r¢ý;¯»¿øë>KcŽBŠ)Ò2/ô¿a@yïó­À‘»¡¬±d¢EÙ/„#G³À4ÁÀqÒ@BãÀÊ£|鯄¥í*@ÅᯃŸ \AßjÁÖÚ@ìÀÒ1ÁØñ ²CÊ l9Â(±üÁ ÂA«´QT/)œ™)|ŽþsAáºÂ¤ðÂCC!„A",Ã:ÿ;C+´µ54³6Ä¿4ÄB8dÃ*œÃ1<¿°ÜÂ=êC“£¿±CÉCÂ:¼ ƒ¬9B%ðÊ»AE²°,DOÃCD¤C2\+#D!K”Áz"éEÉ:¼Ä7L¦osµp;”:2Ú.X¼±bâ,áÁÅs).LÅŽC¿0ËCUìÅÔ:ÄÿÛÄ=ÆØ*ÆÔÔHFÞZF1Æg¤¬hl0W|ØÃ%óB ÓBRA'âFKôkd4l‘ñk¼™SGT Gr|DOË-„Ç4 s¬5tæc¸žËº¸£9¡ËE€Ñ°úЬOôœF Aäb$ª/CÅžòÄñÁGpˆÃDy¹œ›»ÉK<ŽìBƒ¢CAë¯ù ¢†LòŠÂÌ ŠlÅ‹ÄHÄó½é[=’È;ÞC5ßɱ3RB#›A%<$¥Ÿê¬JȈ„šL"—ä8,£Æÿ)¦\?Ë{ÊÐ’Jù‹Áª­«l@EÔÊ­ÌDclFŒ£m|3nŒ1yGåZKN’A¤œÿ®LDN$‘vÔ;v4¾óÂÁxÔË<³¶|Çm”Ÿ°dÆiÄ~$84¸¿³I‘È=òCƒôŸ!¯Oä¯ûG¡±Ì £LÁÅOë¹`ÔDñ”µ•QmJåÑ›šQö R!jõÑ©¤³"}©!¥Êí /cRÒaÒ$R“šRý«R+=R¬TÃ,-©+ @/í(0ÓPs«2í­3EÓÛRÓ5­6uÓÔ‚Ó8 ­9¥SʲÓ;=¬<ÕS½âÓ>«?TµÔA «B5T­BÔD½ÿ©EeT˜rÔGU©H•T“¢ÔJ©KÅTÒÔMÕ¨NõT‹ÕP•¨Q%U‡2ÕSU¨TUUƒbÕVE&yˆoY‹W…UfrHeÅÍÕŠ è†| Ø€xˆF€ \ Vûy‡†Ðƒ|Pˆ€p‡|ðƒ†‡ùU$}V…ÂcÈb „e€€[mÈF8„fýV.­ zWdºxà†c€„E@Aà>¸ƒ@(„ExIPoPV}Š×®Ì‡jH`Œ0@z àŒ!0€‚ˆ8|(zMŸNàƒ=X0¸_6à´ *(š-wX‡šýX…€(sP…H‘-RÈ‘ˆ=Y”x€?Xƒ й°'zÚ(S¸Y¡m®-È…ˆ†˜]˜((Ù(,àZžýY›½¨­¨J 9À€¨€ Yÿ²'/¨XZRðZxE^Q¨È®#ã1è,ÏîI•nKâ±Ó¶å1_¹’éÔÏ«Àp˜ƒÓ«}Ú[ˆ…XÛ›­Ù¬…QŽÑ„Q#na i›ÌÕ1ŒÓ]Ñâ]ã=—è5¬J4¢ˆ˜‡¨§†Í?Å­Øg¨ÙÅŠøYxÚjè,ˆS kX‚PÀ…| ÜÍhÐ-ˆPØ*æe^}Á߯Ò_ :Q*\Þ~+ý\ß\ÏåßîÜŽ\üÝÿ”é { ZÅ­]Œ([žE ^[È TH…“mˆu8Ùˆ“ýTx…“ÿ5¦«5Ýý5à¦ÞýýܦaÐéºãŪâ}¯åÍa¶nˆ™`ë-M'¨(øàÙšõŒ°‚Øs¨Ø|È‚˜XøØøXP¨Øz(…5 ˆO˜hЋÉÍÝùÐ ^Vàæ% [`Ïê˜q±ÏýÀ#Ñκx‚  &À$8‚ ˜€jX… J¦J· ȇ3Hƒ^P>Pf_ «˜MÏ«Hì}[¡áKiR…ªÐA‘¦ 0i`#`OV˜VN&æ xƒ4È5dFæOVƒTN?±t‹O¨ØšÅ½§ (‡yðå·€ƒ3è*'ÖQl¶Tq&çÉrÖs>§ý;aolserver4-4.5.1/docs/intro/tcl2k/html/img026.gif0000644000175000017500000002306707363640503021206 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«·c^‡!Æ7pß­…C&¾¸8cc•“F|Ø­åËá6¥%w¬N»,ó`˜tiʦŠ®¬úðâÄ…a³&<›öèÖ©OãŽøuíŠ'O¶Í÷ãpÛº‘£~(;÷ñ݃÷•nÚwnÌØAj^Ú™nBÐ+‡7ÿÿ»òèêæo+O¾žùùòÅá¿G=¿t}‘ß§~NRñå{ùçÞuãý†›~ö©7ày 2˜Ýƒ!mGSwž•á…f¨á†²$aMbyWO–hâ‰(¦ˆÙ‡aÙäÙw$ª(ãŒ4ÖhãJ,rb…àÝèã@écŽÒe¡VÒ6Òt×™dàƒO I“ôñGY[Q2ÖäOY"EäŽFöˆÒ}H¥aU{JâG sè!È[’z¹F'œh·&}s¶ve€ªÚf‚qnù§ŸyÎV盈6ª¤¤±öÛy²9§œžyè €ZÚhz˜:(©¡V}颈GJ §ª.Ij«°Æ›z‘©7ñ#‡]úõjP¹öÔ«žŽíúk¥U ›¡±±Ò ªb^•«Äiú¬£™ªI,“¹:Øé—B:ß´ŸZ›(£Ž.¡š¶9jµÿ­ i¹‘’ímàFùî£jÊ9­½{²©h¼›ž¨¬ˆ0ÊʲXå7é®>!lph ›8ð‹#>lñÅgŒãfëxª­‡,òÈ$K41³·–¬òÊ,ÿy2È-w¸`‚FËí̜Ƭ³Š/‡™òΘ¡»d™@[ô&y«UGØ^öÑgrí:ücÏR5[ôÕRFŒ5„T“eõÖk)]³ b+hsÙñ9 mнj vW]öóÛ+K°®V k7Ýv¼Y‘UÏÍ÷Ãn-RáÅŠøàIÅ]0ã%/ÜЈE,9ä@9^1æ@_å\1ì9ç#iž*é*Îè’-®:êú͘î1¥ŠYÙ­efÛn”é_û>£·IžK¼¶ì/¼ÈÀ ¾üóÐ_Ý|ô@¾NýõM=Öoï½ìÓîµóß_ؽÑýI*Í«*'v¦Ÿ)ûñÕVÿÞËk_>®XrëÿüK qø4Þ¬7ÄVÓÚ‡3ÿ¹OwŒÓ_Ýz³¥¾o€¼ß¥šfA¤(Ü_È$H2õä‹=Q#ûuBÜ¥04BùàÌòÕ$ò0­ƒ7[ÐzÔ÷fP4"l ƒx™Ñ{CYwÀ÷õN‡8Ã]âò&E)cÿIT"¶ µÃZ:”J[ÚÀØÃ±!ЊE1âØ®(¤,²±Dõ3 mx@qµï6r#…¤BQ°m{ø@ô1Ÿcj\á!ó8ÈÕʋԢÑÌÉVé±’˜Ìd©é±GÖN“T1a W²5(~|RWèçÁÕ)ŽƒŠÒ ºè˜ÈC^” óà W•´’Òiº P{™ÀÚ €L¤—+IyLâ23œÜøžIÍjå–Ö̦6µMñÉm›à géºYÈOŠóœèÄ6ÓÉÎíÃ!{hH‚‡ c#ëI´‘]„à )ALP‚†´}˜îp€›’²æ7+"P´-Á+4䜚quxRÛµ,F*É!³£dŽJó¹õµr­%o„1Žfx.Ÿ 9‡ L àC H0š‡L!%0>VÀƒ‡˜ÀYB D |„à‰6î™bÒ«^¥Û0± & 8>l°Š ´bøX>àJ8¤jÆðq×6¬ &#§'§™Ð¢§†Mì"«ØÆ¾‘±Žlÿ!+ÙÊ"Q°Ë‚Äú¥@ö´G—¢ŒW}@{´"/yò;-¦XA…i ‚ ϨàtZä¼vµÔ™PÛ '²‘²n¨Ä˸ œ­–JÛžâ טˆ£ŽnòœVzÖxÈåk…yG2B7Àµl&a+ÂðŠ÷¼Â3/z×K:õ²÷½ƒs/|ç»5ùB¦¤kraïδ®åÆÑо­µ@õ¬0Ö6g– ·Å©-×L¢åb*Ó®8&¨[OÚouõ‹Æ¨-X˜ÿ-O…Iòž)0¼à%.åö‰Á ¶£"×v\b‘-¤9{qŒWÌcìB¶k\«ìd©¤õX• m&ÓŠŒács@#Œë%¯9úÒÄ™Ã,Á6Gß.GÅcа3‘Gd{ëP‹š-„Ѱ'jx5¦Åqš¡ gWùOsÆpjýeˆÎÖ23›ágçS¢)…–ˆùŒ?¶€ù$RN¯eÇᆫÈw‹1~WZ©XzºÉD汈¬âNíKÉ9î× b¹c#ÛxiTÖÒ2ìÒSO’Ò¸Þ±Œíå^“Œ×¾vÆ€-ìbŒØÄmlÍ2d3ûÙAröXÌU^x:½ñŤ&â(ÒqÉ4㹈e—i™b§3¬èLÉÕê)&±ÿÒ†¶ªF‰Þx{Y†¬«\I kï÷†ðuau’+>Ùs£LÞí. Àà—æX›ý–7¾W,l³t›öÄß4‚S/ãy‰@.ò’gˆä•-Ü M¾"ƒk–哃y]I™3Òœ~åqéÅaX»Ô€,¦ggXn衼°÷¸ÍcQo>®eY¢¡H]mÚÜŽÛ‡EÿyØ<ú¿O-Ñ)õÓ.¡xõæúœÓäÖvzinN˜+½{b¼î¼Tv÷y‘ݹã0kxl׋‘MþòÇßñWÒÚàÿúÕƒôÓÙâÞFÏ/ü?*Ñ›™;ÏúÍOþþŸ„ÿþ€"€X€A€˜€êÔ|¥€¸…p!ð€ð qI:QØP…QQ;eMð( ;•…ÅS0( ‘>åSÈrà~pðp€ 8|‘eNèÓ€ ©  &°àºP¡ „ø06ˆMpƒ!` 28P8‰—~‚§M.*j$5ct—sá6JB‡â†Õ7k"E7·F\ÁX)039˜ˆYÖtåä|ŠøˆY€ø€’8‰ X‰–h€˜˜‰¸‰œèžø‰äÿçlƒ¶rSu¨8{eÒhÂq<FpÄ6†P¤HI‡†,ÜçcP:¬¨7£«¨ŠÓŒ´w„\Ɔ¼çKÍUJ…‡jCG`@¶‹§XcÉÅ\Ë苳ÔG£w_ÅÓÏV,ÐçbzçŒÛˆyƘnfiÕ˜]æ˜L¹޽Ef®öE¨{ÈEŒñÈ]\Ò%ÖuìØŽúÈ•WA%•ŽÁ“>Ï…ógv¹xà(wÔi?ߨU £À¸\âh\à&‘9Œº(?fxŠ¢x0³øe I>+9-it/“6é*y“·—“:yy<Ù“K÷“@)sB9”,W”FYrH™”!ìG€3ùbøÓ_nÁ/©3Kéƒ%*wgÔ%Œ³R“waŠz6iLtŠãÒinCŽ¡Ö],¶j2†lyk¢&gïXaÔÂdZ'u¦kºiª&–u9`G¶)‘–°F˜N6–É5’—öj^á•›å‹d¹—±ÖjY)˜ª—çò–‘¹˜‘ù`P©•Oö(s$` fkWÒ_|ùp¤6IHs˜™˜'e‡9™¯9jR¹N¹izÙ}e¹6ª ?²y`Ùf‡„’k„Öf}–&¢ÓdD™iœÎÔœ» ´0Æã™þE`v&iÏe‹šIaÒž¸é˜°ò”„ÕLéÿK™žÐ¶žN‚žÑ‘T\)ŸŒ‰7 #\1“›|§›¨f˜hÖŸ€¹Š›‰`”f»‘}•––´  ªy„¡ÊWÖ— –ff)kˆ· »XgTÙc§V‘CžY‘šŸÅYr9šœ¹ö#›¾)JÏYš)—Êg1Šg!…šãxš;z‹5z£ê›>úš4 ,©† CzŸ’›CVHvd¢%ª¬_éàyœº{+÷жá4NÇ÷MÝ,î*(j’&iiyɳ`yçCV®}Õ(uñ¹‘ ‹üb“‡åÉšºÅå$hŠY¸KŽÞÉÛž¤/å ÙŒ(é^ñhR.ŽAîáI&”ºxþá€N‘Të]‡~Dòíùf9ç'*¢ NŽY<¼5å£;ZuNŸ‹nèìçfî\˜^èç˜çjé–Cþ}ÿû§âŽÞä&®P>éКà–nêUêª{æŸ^’ êëá;þë#)éÓxìV‡§š^·mîÞ[¼ž‘'¹ë¬>ëÇçR.[Õ>kNìÁþ‘(‰ìò葾®èɾíl>çùíõ÷âUDbùhìñ.©c޽Æ–Ëëé»C—ý˜Ãp¦îèG.ïöNå`ÉÊÍŽáÞî ™J’>ã†fê®ðÞ:zo«êÜbùã˜êµ…ëø–ñ®¦ ™¸¤<àø ëžŸþl1NÞò ‹â˜óQ1ó4Ïx8Ÿ:¿ó6×óÏÍò@/rBŸÞÏ^ôçê2OôJ/oGÿæOo{Qÿó SoôLŸóNõÆÿVõ[ÏõŸð+žô`öê¾òd_ö¾æõi¯ö^Æö ïöoŸõ>ÿõrO_pÏîw÷t?ôm¿÷Ú÷H÷Çr™ï G/ß:gíXiâi´³yÏ‹œî*DÚå™–ÆkYùŠù•9°_y‘/²¡o¥nrùh‘ù’cÜø§ú#ú‚/õ?ŽŸ¦k6‚þäœO¦¹ßÂúòå rO«ï¡üÃ?MÙ8}x×KV-¾*h¥øÈ¾/üô¥EÎ ½OZ¦ü?ûVë ÏZÈËœž"-2&À’éšGª™ÿ¢úy¤ï_h·oø½©¡Ej£v‰kï›O >,xP`ÿB… *dØaD„Zlè"ƈ)^Ì8£ÆŒ%MžD™­•-Y¾lYD¦L|EjÞ´)p¾*}n,ô'É=Z š©QŽ?¢üxô¢R¡©VMØñªÈŠŸn t$ɨcà ëªW¥&¥²M ·l\©[³Žü:ëØ¯v™®%Ú®[¼Më]»5nà¡„ÙeÍ™6-㸳çcŸU‡æ%k˜±ÖÅž; Ú*Ô·%[«mõ)WÁE9<¼8wíÀ´»Îím4ð”wW/ –1]³»_‹F~5gê%_§<óe<«gM˜9⤃Ëòm®Vèó«®OÛ68ÛòÈß¿W_ß}Ó¥íó‡Ž(üî P$ÿð‹O+ÀlKlÀy“m=èÎóK¾ÿ`<ì$«ì23ó.CG̰/OD1E÷Td±E_„1FgœlÃìhú0'ï6£±ÇÆúJÏG!QÄpH#D2I%I´¦·»©;—¤²J+¯Ä2K-·ä²¤&cª J5ë²L3ÏD3M5×\òÿK–žÌÄ)Ù¤ó;Óê,ò΋”‘Ï:WüI7oŒsÌ´¸ •3ÒOï´“ Õ­ÑE%¥6J=qP8¡”’Sð6’T-55R%SÝ IM/•EOÃŒ3Ô+Û[Ð?s­=ý.Üï×è€%Ï@ùpµPÁ_< H@u½°¿duupÚ£-–>aµ­´b¥ÝËÂÚª=ÚX½¬1ÝO?´ÕÊÖ–3o©qƒôv>xUÂV·5.·zß"î_³òò-¶ÔÐ+Í)„ç áçÂËÛÙ˜:≗ë·Õs!K—CZAÝËw•íVÞfù›Ö_pÓCQò¸íUBÞ®xÞßš#˜ÿâx•ó+áh Î8­žžÔ.H.·æH/fzº3šU»ZC¾µ@wOh§ë½×Y}5ÆzØ™'4Y:FÏS•gÑ€Sm®¶…Ûše²!&,Àè Nc…W#îi…¢Æd2«ûÛ«}íYëƒÅ­Èܳ¯5:r«Ož—W =qÏŒÆÖ𬔼r==‡¯qÀf\k^OwÜo/TN×gÍ·÷³tvDYýv1e×ÝuÞilìáí„5ø-gÓ÷©W>zé§§¾úüPë·ç¾{ï¹Çž]ª¿'¿|óϧ3|ÌÚE¿}÷߇_Hõ¹?~ûïÇ?ÿÇæ²~ýÿ`ïÇ?C&ÍI€D`«G@à)ЄàÆȾVЂìÒý‡AvЃòëÿØdÖµ¾ ~Є'Dáˆ4½¶Ð…/ôÉ µÃå‰(y4Ä¡ŒdhÀ& )6ìa´C!Vé‡ 9‹W ‚$Þ°ˆOÔPô1ñ±ŠR"™¸E-âæˆ]¼bU(E0I-{<cÕh>"®ÑOs¢[€¨À6¾QyqDà¿è˜=Ví«£K5*|/[üa"q–E&N„‘MTâÙHÆ7Q‘„V$‹ÐÉ.î­“·adG¸)=†’‹§Dˆ)¹DNrQ’Þ d&5ÙÉU¦ò‘‘´%-ñ÷JYŽñK#¤&{9Läsˆ”$Ôï(hLf~¦™Çü¥%ƒ9ÃgÆH”äe5T3Km>Š•³ìž$™÷Lnv“3›<å&Ñ J/j1‘¸c<áø#sú’ŒÀìŸ0ëIÏZfQ®±Ï7"‘[ú Vã¬g9÷iÎE.”IÈÄg:Q¡Qô¡ÿÑ4c©iQ:eó›Ôñè¨ÄÒL*”£fb«j'TÊñ¤Pƒ¨4ó¹Ñ—.¤÷úÉJçH¯›Ó¤5u‰<ÚÓ™¨&ùéQ}xS•õQ×T*º08¢1ªG"êPm¶«"³’½$M»ŠÅ=òL‡tª1“:V¥4›:MÑÀäÕµ²UH=Õê©èÖÕºÚõ®L}kZùXкµ¯~-`‹ùWHõ±¦‡E,YçèǶ¦ *d#+Ù™U¯.=©f7;H¡z6¨Py©hG{×Ò²Ô‡„½,GU»Zâµ–²Kmljc ÖiZ•¶®:Q^]eÙuI£@§º•¬^=ôbýèHÎú•¶þ\<È^ÇlØÁ'ôr ç´Lö:5õm´³Víbôg{˜me:ÏÍî{¦Vì»_tܼzá­‹¯Ç7Þc¿°Ü@ZwC‚”gxgo¼s8‚0ÿ{Á_ëôͧÄò[ <ÅÉÒåc·Zâ(Ç¥›E>{‚w¹3¥WÉéÏ*ít;[Ý€·5š_¯ò\;é.k®ÂrÜsŒÄ=Ö'¤ÇÀCœÙÍ—êá‘‹pÅ{üÒºtwž ãxëÞÎÀF4á oþCû‘î¼ß?ÿ*±ØW»ý÷ëz[àôø‹>DŒß•ûºùÓ¿+³#ÀdÀb@ŒÀ¸"@çÓ¾À LÀÚ{@42Ì›ÉÁ†ÿ Àûû8Ú£¿ô°{±„Á°“Á¤º´A¨ÃÁ«"?ßs/žK›Qÿ"ÚÁ0ºš¼19l®´û´8⥲ó«"£¹¾=K·Y› [‹¸Gj½ØªÂVb%Eš”Þ3$:ûêð³B5«8‹¾‹3¸ó³0¬99|4¾2ÃÔÑÂ=t²>œBë.bKA~’«õÄ"R¸ÁÄ;lÀÅû>¾`>+ËÃT%GR7nÛÂá3ÀÞ˸Pk9ŠÛ9ÅuBJD!⻇3E,¾5k7;”³EѸ²Eß+ÅÀîJôC°›‘л=ÃâÅ^$F{²‘ˆÒ»bTÆêHÅe<±ftÆÿƒÆhì°i¤Æ ³Ækœ°lÔFãÆnܯoÇûÇqDÄa4Çt,Çtœ®udÇßrÇw¤Äç+²3”Ç©‹‡ð†ÈÇýAÇ{ľFd ŽxÈaà|ø ØxFp ƒ<È7r…È|Hˆ€h|è…‡úNJ̺;(|†AP°…1È|XC˜È’<‘y0Éõ²‡wØcxE8„@؃=¸@ Ep„HH†n€ÈܳɌ †@h0 ‡Œ .h((À‡ÈI¶â„=Ѓ¢K(ȨT*(»,P‡r»˃€(sH…@‡²,RÀ‡²±T˵¼*x? Jƒ ÐÎ0©y Ì(SÈKÂTÏ,ȃ€††\((0Ë(,ðL¿ L¼´É* „I˜ƒ8À€¨€˜„?ÿ2)/ÀJ ÌQMؘea93+eÑ ÷qïCÓ­dñBÛ»ÎEÄ ýP?ê¸pƒó|¥ŸÒ…Z€Xͼ¼ËŸQ@½ðOþ+¢ãÎh/ܯ۵r¹ [Ä,ï4¡<ˆ‡øŽŸbN¬t†»ìKŸÈÀäȤ†È0…Y¨†%…[À‡yÀO|xØ] Ÿû½[Ã\FòaÅ5À?C\$C¨ª9I”EzE.1©ÁdÎúlˆÓô˒؅Ѥ|@8TPËHPµ,XHË8WPKˆRÑ»>Pbº•ã¿÷ÉQ5f‹ÃYþ—!½¾oO–+Ír‚*€‚/ ¿¼Kh+](¬Ä‡,yx±œˆ%0¬¤RKð„)x¡j ”Q˜kjëTøA™mÃS["Ïe!Oú`˜õ`W‚ *Õlz‚  &À$8‚ ˜jP… `¥`Ň À‡3H^øf=f]‡^Ⱦc$·dD‰˜ÐØ$L2'³ò„Äaš€Rˆ&0&PVX… X…HÖx7H|Pƒ`¨×z]V5¨ÖBFÏ+ OÀÊ»¼Þì° yXׯxƒ3@*º4ؤȈ5.z45Š%ÆA ;aolserver4-4.5.1/docs/intro/tcl2k/html/img027.gif0000644000175000017500000002502107363640503021177 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nPx?â`q/D¿}ó:˜ðý‚76Œoq↌³:æK4²Û˘·ÂmJKîXvZ¶<ø±DÀˆ)s$‘pêÒªO>lz6mÕGÞmºqêØ½mûÆ=vëÞ…'þ·vbÞ”Ygž®uóRÏt†þÉú÷säͽ/ÿ¿í¼ñŠ“ý*®Þ9ââ·ãŸ.ü½lúòះ-}yö¯åÖyÝ÷€ïQ§ Wœ5Ø™XÙÕÅÓ‚Vhá…f¸’u4a÷YY†(âˆ$–8‡5Aøáv&¶èâ‹0Ƹ¡ƒœyHˆ2æ¨ãŽ<êˆbX6}¦Ý„]Ç\i•™}æùVX“ú×S“#F)™’Kª$Ø–X:)ã!Ž) ˜‘nÀ!©fnl6×f›Î­éåEq·mtvÉf‚ýFšozY'‚|’ç&z\ p·%dŒú¨¢y2sur)¥œ²G˜6JÅbŠQIêPÒq§§‚¦žJ¨*Þš8ª«xÒjë­¸«˜+yU¡sª (’Lfé©¡µ¾É$°¹6ël‹»ÞÔë³ÔVkíµoÑx]¬¢úŠí·à†{k´P9k…6jéš|i*ໂr]t䥩l»öïŸõáæncµ~·n–ÿ(p¥ñ*y°Áðî+ ½Ž5 1¦øœ°° Çpšû¨m‡Ü’u®¸$—Ê/I­Š”rÉ=ÿ’á,Ç,óÌ!º,¤„"¦ë°yÏ9 jó 'ž®ÍKl¾Éþ«o”=x¨‘þ=§» cõ`;#Í©Òì®ÞÏõºy5Ыk±Ù?OÜ0r€R-u°+‹d³¹ÞÒlw†q/jìtqç}”ß Í=íÝ„n8W‚ËZ7…à,¯ÙkìsÆW¬~”[l¹Û›œ¯ÀOmtäûy¾1ÖGsz/Àe·®¯Ïz_ŽpÖ[ ø…‰w{¸‰·cÕ;†¿Ë~öðOaî"/¾ûòÌ7ò )o!šj Ÿ5¾j}6çs}XØhG.4íiKí¶£·v:ùSCšzëÒ=úéâ¯.<Ùáÿ_ÝýÚæξñ?ÌœG2Îk.2 5"@œ-ðŒàEH&¼Õç}NÒ Ñ ¶Áõ=nOZÃ\ÿV¾¡• t «^ÇÆ¦?ïu­r™ëXìF/²áo_¦³ŸìV˜¾ï„°v@œÜú2øC]},E¼Rœs¤@’51vKtGÅ*ZñnS”Þ·ÈEpe±‹` £¸¾(Æ2šÑYdÜ Ûˆ26öé>v"žYžž¹ñ.X¢Ô[’F–¤*ŽbCßÖÞ¶¿üœ‰bë’áɬw¿aím‘ |]²& »JÊ0eâË£  7BvÎkŒã°VFÇËôq¨Lå—Ž$i)Q•°Œ¥‰ÿN)ËZÚrA´¼¥.w¹–\òò—ÀÌŠ/ƒIÌbe˜ÆL¦2Y‚Ìe:ó™rce˜\©;hZóšÑDQ¨’‡Ínz“ÒÜfô¾IÎrF¤™æLç2Ñ©Îv“îŒç.á)ÏzîŽÙCCÊÐD8¡gH‚ …ˆì"WpH B`‚4Ä¡öŒh‹ìp‡ gÈÆY‘…ŠÀ¡%hh ^q!¹s§aݤT ·fåÑ#íBûö½3%G}7užIkêGaŒ£w|ˆ@ñq˜@&ÀÇB:‘.„4™BJ`|¬€15²„ˆ@øÁl´äŽAõfZsAË `bL0&p|Ø`hÅð± |ì•pH>ÔŒ3àC°mX$2T‰:6Œ}¬d¯ÙÉZV‚•½¬f ÿ˜ÙÍzvwíHw?èÀÔT7ü ~H(??µö5íVlû%ÛÕËJEÃtÌäôIêa…2Ð¥jû[w†v5kìRiôG¾QO¹ýÚ~V»ZáÒ´½•.u«ëCíb7OÊ% Ÿ¬»Ý'Éó¸Ÿ5 ÅÖš^« ·½ð-Ù{ãKßoÍ·¾ø¥Ö}óË_\í·L„”—kwû:÷hY¼”êùÆM¨·©òÒ 5*Áö·¸Õ-„ü´ÐI Ž¢CðÉxë4B±ÏNÁµÒƒM©Ñ$VSˆÝ$/ù9ÕÊxÁ€”“'ó£=F¢X’:¶ãå7cL¥´ƒ”d#éH¨ñ8jîn’]wdì*ŸŠJSÓòßþz™T]6‰Šk{,âB ÊÔËòzÓ¼É/¯³ÅÔä¦;œ4ý¡M¦O[ §k¤³×ͨ 3 í"AWÄ9cc)Eûçí5Ú*‹öñ!å8’H Î圆4h¹FúY‡ŽÃà±îìQÚ™’KòK5Êô¯m^‹î¤\=ëZ‹:Ô”V³‹ÜIíæÈЄ¶ˆ€D‡ˆ”¶ô±-!çØ-°>­PˆNÓ:”¼¾ñä8ÆB$G Û©^N«‘…cUg7ÍC¼œ…±=¼p?7Èö6¡{ætwÚÜŸ¾÷xÊj ûßÿòwµE¬•¾1›“z9ø®÷H2Æž=¨ÏÞùòŽÝXœçž©§œú££}ÈÜö`ÅFžÈ˜Lõ5×µ—¶yê¿Ó/sàÞ‡fà߬‚ÄO>Œú®üæ¿Êøts¾ô }MãJò$Â~`hP:ý–†&ñ†‹[g:Ëþ…O·ù·üúAyÏ…Ÿ^½´ÕíIÍ+øÙíosÕiÏ„“ŽÝñ×gÚÇwÕ÷JÄ} ÷Ó'YÌ·€ø{”gõ€h! Xø<øbØ,™f€8‚½ÿ´–G‚(ˆw&8)Ø‚š±‚ç‚2x8ƒ6(E0(|7¸ƒÇ”ƒÈǃ@Ø5„-8„Dˆ‚Fx„#˜„J˜_…p!ð€ð à‚Á÷ƒ¡"… %R!õ!eT&Ðò`TYQø RG‡BÐ9TIÕ„íUÀà@`ðpL)pT •TæÐˆ1 ¨ Ò  `) ¡ % ‰ˆ3ÐP@p‡øÐx¦0‡ •‡+Ñ45µS-ô=SçRxÆR·ÇS'e{°˜SXC/ìÒŽ‚S*…‹†S%È…ÇGE‘309 ‡Î$xN>ˆŒÏ8Á„Ô¸€ÖxÒ—ÚØ|ÜØÉ÷à8|â8Žzÿ'hËB~K‚@ê8~gG~óGò8€¬fH>3¸s¾çkwg‡´*íHAµóá[sDɃúX?<5±•p±öAªE^ÜeÓ%rlÆËeÂA‘™]yA¶è‘¥&rõ´d’ë(nï¨hÔódÉZ%é\$¹f¶5^Rv]9É?ëõÕ)“éˆ()F(¹’ yfÆ‘€a;”L eù’ýˆ:5iu;Y‘üÈ/;%=)“T©€´hzäTŽÂ¶@h–ü%~ݨ–æøonù–Á—r9htY—nv—xéez¹—üÕ—~‰_€˜ô¥–d&wx”p釔å%•GtgÎõ}Ž7Œy·JÆ}‘‰–¤e)‡~»–“˜zJ^Ç~oç’\Ieö7ke·‹úGdÎU~lWg®bÙÖpCg•›ü3b¿èÀ¦bàÕ­YI°Ã5Ç)xÖÃršÃŽh–B§€-ÔfñhÓ)IÎvuÁC|e¨)OR4wããšEßøÑÙ{£±u›“O7jëbøhjIkñ—yh†v—a¹ Ny nØ©:Êo>”\veûé)&™@1˜Rwš ÔŽIò€ÿJ˜íµ¡úYëœmW:F:êv¢K–‘#)¡š!fyaz“¢ú¹}à\*'iÄÙ¢Õ"ŽÄy˜ˆ‰¡!¦¢ÆQa x::.ѨEGš–Iº¤×è¡NÊ€Mºl57=ªY@, ¼Ã£cµ|K°»½Ïi¯#\nMó®9œ=¤w1“k¾tJ´3&©¥ZD=(º"pñ»#O$®KÄ¿úûLd\ÆoÆÅˆÆŽ ÁlŒÿgüÆÅÇrLt\Ç¿tÇxý—@Ô‚9ÔD]˜F}ÔðEÓJ½æþX}‚Q1ç‡_‰|ŒÞè:芞‘.邾æx~阾Y¾å€ÞéRªé„Îé¢nç”é¡nt¬¥ ÷·¢±ÈLÿJê•~¦ÞÀéØ\ù¹Ë×<šïÉ™ëì²®“ôK¬E˜ê ®ç¸‘*éb¹•Qk“Œæ¼«éìÜêÐ!·îGõ–›í…^û*k߹͆îÑŒ´ìÚ ÑaZYC£•Cäþ“‹¸ØNÒ´®êÊ^£ÌCôîõ8îØK©`‰ïÍ» ì¼Í|F ôÙ‘Jnzîl°Ä.¾zOÛþÝÉáò® ëºþÄï4IðW¹•9›/”Nönií)ò%4êÃæ†ÞF)Yí>?jÿÔnî ¿ð îÑNʵÜD/B_Yï¶{ïî Ы[ñ‘‹ìܾêº,òâÿÞ˜Èæ}(Ë“XIí(_óèüí0ÉôYÙôd í¼µÉ%'ôVMO¯%ÉÕìU9›\õŒ¹òfoôľ÷SïòaI^ßeð?÷ŒÌ®ÚïɾóJ'l^ìŽô‚¬øUîPÙ‚Ï÷‡IÐ0yø3Y‘B_djÆð1ô¢:ì6 ùYÿï„QâDŠ-^ĘQãFŽ=~RäH’%M.¤…/åJ•-ÿS Ÿ@š3¥«XòdÊ•-£eÜÒq`ƒ/Zôh‘™_2ålÓ3iÖ­]¿mÚ«ÌÇ«×àwÐÝ;{þ-wðªÄ£ö6ž0ùeÙ›ÃB|uxnåÔñ_~2ûÂé݇?ÜîݺBñ·{¾"ñøÃËÝumèe§“·;ü|P¢÷®+A L°§ÿz𢅚оÁK°>Ý.œL¿¯øÃI§ö$¤N@ Åë®:ïàï7YLq"ãÊS°¡¯“±ÁøbdˆFW´°:yDÈQLñʼnɕ ’Å%o\J‹ü»*·Œò>"}ôq-iKÍ6‘¼RÊ(k\³ÆKlÎÛ|¾½¼Cór«°Í9»ŒÓOñK®Ð@ç´sC?Ý”oG9TSP…dóHH)ÕðÒE¥ìóª1묿’ÐŒÊA)TK:ÔÄ4#ýSUT--Î,4RÖTÕLtJ&‡ÌK {¥õMIíC–MS…µÖMU|²ÑGïCUÉ\ÅTª+çÁÕ¤<_å5@f•ÕUb]uvVuÕ]î@C5}¶Ò`ƒUvRHÑ¥µYL eFåpÅÍuЊ\v]x}íWË/m½VHR½U×zy´É#cÜ’F+u͸II޶Éõ–_”“œVÇCU³l‡ÞV®na³¨S¤IR={ñzz飆~k¿2–zå’³þ)讣®«i®OjıÆF;mµ×Ö©ì«!f;n¹ç¦ûÿ!·Ÿƒ»n½÷æ;뻹Ím±û&¼pÂþ6:pÃg¼q½W kª\³åö^®vX.aµöbÇ?#È>»¸•7PÔË=½õÌ=;tÙgwhtȲҜõYwsRSŒYf¶÷i'¾x”¨þËj¼K׊w~æ4êv]G·ÎØÇ¾pÛÍœªòßwùW@ßùc'·<{õ¹Þ^òõ߇?~„ÚW\~ûï'ž~æñç¿ÿÆõŽÿ8Àº€D Ü ˜@6Pj tà|®Á…Y%}{BC¥ ªÅ] ‰Ø–— š,#ô;„¼Æ(pû#ŒóZõ-› Id;Šž­ 5ê1,ÙÌQ­ûÏÖ`§ ‹Iër<û ÈnØÃÊPGŒ—DÄš1‡âÊ™qÄ*jX; l4h˜ƒñP_•JÝšNU¯3–l^fľš…¯w‘ëŒZÛW1Åéh4׸d˜°%Þñll#©è7jÆ…‰ƒ!_œ¨È:rŽUk\£¥¨IF ‘“•\Uîv…¹-æQŽùZä†nU3>Zz~üÅ8v§~eªs­ì$ cÓÈÓ|èm‘Ü‹€¹)bi“X„%´ò¨¯:žãr%'%H=â,™¯bå5£IGJöLcÅŠe" ¹¨ÞÿeŒ…±Å.´JÎPÈä"7Í(¾)zR™³b>ݘ!/¦ò•5\ØÍ¢ÙCjTÎ#žÂ¹CZ,—*</gªÛQð5#ÔH9QiQ»œ“£iD3S´ÈÕ/¤'E)¶FúÈ’3¥/…©§$JRÒ0¦7Å©Q<úRî±n=¥-IØÎ¤Aô"; &Q%óÁŽu©Fýš¢6zÕMЩ Aª^†iE q–:üê‰JEa‘†–ëª ÑÇÅԽ˫ÂRæAáÈβÒÒˆü´§TO¦Vxf ¡™«+ƒL”'vnò‹þÜ'a¡*‘¬5UÎ,¦-ûêNU ¶ªƒfÀžµVv R‘ÿ¡\¨fý©×jþ3Gh´¡Â†I.ËR¤ Ú-(ù:N’m¦,­©b&YÚ9†ö˜”Ý-.è:ÞÒ,xêô¡bÁ8ܶ†ö™šód]•{G=eRˆ[íæWŠÑ?¾²—íÜ>}ÒX¨Åiµ ”+p‘Ûìž²™™"!§øÍ*ª¬Ëm‹« eÓ°›<¯œÒÃÝZ~Ö´[-¼®ªòÞ%©U%r)k̾Îv†óÌk<}öêqø¬×ÕYÍ‹\ÒUĤ…ë;ç ßd5ô[å¡ç¦tXÔÎ×W>uœJêWO©Õ±¾õjë_w ×Æô¨âŽìs® ¶OXg4Ÿ}(b7‹3»·k¬(BcÛžQ°\Dz Üý£èˆGxŸþtt%¼ê‰­“­‰Õ%«98ÉEKqæq¼ïÊPèbqzê}Š1OVƒ.H±óöžç'¿ùNfÞ,‚wg‹KÍ<ÏšZoyZiûyf³[Ø ¸îº=àÓ6_˜¯ïn²hW3Ú¸G-vëûæÉ~Û”Û«ŒoÿðnŸÓ,¶nãyæN€ûËûå>ù×üboÚü:¿¤íüø{ø•†ðvt΄6tC»Oíæ‘[—pÓµÝË=K‚¾óƒ­sk/ ‚?ô3>[?àû“·r¨g#>|% ,?[ =‰ÛŠW3›kC4ð¡1Øi­i9ÅË?JÛ0ñ,> ¿ÃšAC¯{ò&H3±\²AÇS?éCµ»¢Óc½ß¢+<‡¢'¬ ¾²»ê“š'TŸ&»*ä*´Â,Œÿ,ÔÂ.Ì.ôÂ0¤0¬ŒÑs­Ô%kâ)œªŠÓÀû2<«RÓ;­BC¨{C=C8‘Šä“CZ³—‚ 7¬:4 ÊS§úã±ðó0¶êAËcAÈã#É ¬k2C#lÄG 'pC"~°hQ¼‘ +Ðc5Ì40‚Õó¶ÿâJäÁ±z´%|;ü%ÔCWâ6Ó[?cƒ¾˜ã¾«Aeó7Ä/_\¦?ܯT¾mê¹a³°]!¦V¡F¹;¤Ú£žô AþƒµCC§ Ÿ,>mÆ\“·s|&õÊ8óÂ@ìë½…bÆïÒ@L8 ›?A̶ƒãd)£e#¸K‚Çî»Æ´[ôÆœ m,@d\¾`Ì,n{¾3G{3¸‹³G†%QlFu¼H‹D$‚0t?ºÆ‘„žÑK@L2\ô2Ý:Âñѧitôª@ú0ÀúŔĿS¥ì 9šÈ'‚ÁgÓÁ3Å„1ÚË=û{@S*LÆ#(Yú!«PD°CÄ(Dº_ÄŸ«ï\¯˱ä±$˳œ³D˵TµdË·d¤ƒÌE¸¤Køq˺ÄKŽcÉ¢Ë˾ý„$]ôËÁÜ›»$ÌÃLÿ ÃDÌÅ©F¢©XcÌȤÅ”ÌÊd Ê´ÌÌ< ÌÔÌÎÌ ÎôÌФ ÐÍÒ, ÒL¶3D¾Cµ ‹»ALC›; *Ь| Àl)Á ª>d¶;=™I»ØC;7«M|º,CÍf{´+º?y”È4¹@๙ƒÉ‹#ªÏsA¨d¹! µßr=&1Ÿ—5û±Õ 1º Oq̹l 0´E¼´è4+ó£¸àįy$.ø@À,FTF®¤Æó)¿S1ð!,Ai«“”hdOq*ú¤ tGÍ7ÜÌ­zÏÔ±N3˜\@8\Í‚+Ïò0Ô[Íúê¼&zÉýHoKGé’Ä!{àÎáº>R"+Ö3AÊ¥qO5{ÃTlQiúG\ªïz¢€ò+ãl%ŒzGhŸë¸JAð,È묨Ô΂Ùб"@# …LÓ±a(¿{0AC߬ÆöÓÏ#À´Ã½ÑÐq#ņ =+í~›‘;eÆ2½Ç ˜Ê2=e³Ó=•HEŒä§zjDÊܬ-M®HJCOõÈ©dÏ!º¯NÐÎÂäÂÁ´:@P…O©JOy.RŒ,Lå Eýˆ>&×4Í*„U$#NÙ¬U´¼Õ]õÕ’èÕ_VÖa5Öv(ÖcUÖ¶Sp\ÖgU‹d…Öií‹fõ?jÅÖÏ´V“ÊÖníFÇÄ­0õÖqÍmu)rE×À3WÝL×vµ-¹lIw•Wu…W¾œ×{í iÅ×_Õ×}ÝÕ~õWÓØ€Í%XÏ4؃ÕÌ„UXËd؆•̇…XƔ؉E\ÌŠµXÂÄØŒõË娼ôØ­ËY¸$Ù’eË“EY^]וuÙPÙ—˘•Y1¤Ùšõ›ÅY-ÔٵžõY°ڠ庡%Z¬3Ú£¥º¤UZ£cÚ¦³§…Z-ÿ“کŲªµZ*ÃÚ¬m²­åÚ%óگͩ°Û›"Û²…©³EÛ¬kÙµ•WµuÛ‚Û¸íº¶¥[ËŒ„ð„È[Œ˜Û»5žFdЈ¿Üχà|ø Øx@F8*»=\¿t…È|Hˆ€h|è…‡‰0ÜÊeœ;(|†AP°…1È|XC˜Üz ̘ÓÕ2{x‡m0†GP„C„=؃ €0BPGˆ„dèÈe,Ê…jH`…0@z`à‚…!0€‚ˆ8|(Ý…)NØ=0^0°„•^‡ ‚Àß0u@ˆp0ÀßñM(00‡T@t0ß |0_„ßõe_”r€ðƒâ%0È È¤š‡0ý-`…øàHh(iÈY ˆ‚óEˆÈ‚þ_Î_k˜àJ˜„9ˆ € €I¸ÿ¤ò‚ì…Äp£y?¼¹ÔòQÒ •4ƒOýì0æ< õÑ0§ºpƒ4î ¬Ò…Z€XaýÅ_ŠQ¸ §ã¯@•—´‰¸l¼0–Sòd*nS’aÔCc0F2Sä“8y(ѩ߄hâìuüõ߉Èæ ¦†È‚0…Y¨†%…[À‡yÐc|xØ‚] ßxä>VdBþAä]öea^dDöãbž1æâ^.fâi‘hÍdòÍá;^þ߆ئ|@8TXßHP‡õ-XPß8WX_ØfoAäx~ÿæ@gÜ`æãaÎç Rf1fu‘ëÇIèfBQ)p­¶Û­'¨(øø_üõ…°‚Ð…rÈ^|È‚‡Wßø„XPÈ^z …ñ5 O˜‚g8:~þ¢Ur9V…´¬ä~d.¦4Z¤JÂKäzÂÚ©’x‚  &À$8‚ ˜jP… ¨¦¨Æ‡ À‡3H^ø®>®^‡^¨VÛÍÍŠHM–ávg2J-ÌbŽ€MÙ™€Rˆ&0&ÐêX… X…ÈêÀž7H|Pƒ`(ìÂÞj5(k…&:†žOÈ^ü½†» yØk‹xƒ3Ø2³¾PË~ÖÒí+ŒæÒöUÙ;aolserver4-4.5.1/docs/intro/tcl2k/html/img028.gif0000644000175000017500000002553107363640503021206 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyÝ’äÛðߎ&ö‹×ábÇ»>9ùb北kF ·)-¹cuÚmù¸tä½§3+>m¸0ä—Ëf½ÚµêÖ¯S³žl6m|³]ׯýš8cáÀ Ûþ¸rsæ¿-ÆŽ^|³uµ—‚¦›ptÊÃÁ'ÿWüaóËÍWŸ˜}zÌÔ××Üûøóô÷—è>wcçèÙ§œ€„q¤šzÃ]§ YÙÑ´]he-(á„Vhá…,5X“XÜÕņ †(âˆ$n¦aX6…Ö݇%¶èâ‹0Ƹ҉Ÿq¡w2æ¨ãŽ<æHãƒtEhV|ãÑFd"'Ô‘>1I™{J2VQSŠ'R|N"éÑ6‰#Jä%)åj¨%Ç€êAgæ|ÙŸ|»¸&™sÒi%jàÅI'deŽÉ¦o|²·ÜŸÝÙg gîåg•–õåèž‘9¨–#q™b‡BRªéZYnê©…–Þt#‹Ÿ–jꩨÎèÙª5^:jˆX:´ê›¬²&øœb"ªÛœåºæ°íhjcÆ9›®Qö+~¾šy,¯É:&å³»†è´"+mp’ÚY­šE6[­² :«ç¯Å^ÛlU¡B…é—©Æ[R¤ÉvjÒ¸GÙk¾;¶ÛáŠò,ðÀ7䯊ÂZo­¶ÒÛ0ÃR«.¢~:\.¹á;­žSŒ§°Ÿ2ÃËzë± ‹:l1¾ÒòÙñ™¾Ž\1ÄÙZkêÁï’ZðÎ6Çȯ–?»ÿˆó«<môÑB³êRÁká£a rͻƺ-É×yqÉ·BºqËYçg®·1G»ò¬‡¾LØgW×õÙ³—®ÉЂýõ°5<´—:oÚë¡\t¾ÑžÕÞM÷møâŒ7Þâd9-¡ÕÐR­W×%gÞ3Ù kN\¤së*læa#'rÞ=K<)±xŸÌñ·×†î9œ4ËnnÙtk­uÖ3÷¹hŠ›*8RÃ;Žêðç¾ø;À-†ÉÒߺonô{o=gJk×eâ.–W'ôd¾>·¾Éo²’âç63å×·¿Õò »/ÿüôŸ¦õç¯ÿþÝ/9ÿ `ûü<ð€H# ТTé<²ïi…̉w (ðyÚH·NÖ§nm°n¶ ߤ4rº¢ï„6û ïrŸêÍ_jŸë.AÀ-Šz+tY ]È;pm0‡R£ØÚL·.ª\~AâÑȳ#‚y;So8¯)Î-L\’9ø“ŸeQ)ÙsÐö"W@ žOˆXËJHEèyˆ»«á7ç6R‘… Ä! 1F®òÁÎZ2d ©úq„ºb]X$> ƉJ4Ü#)/HR²(“¼¤&3Æ ¹Šo’!Ù÷Š86GöŽyl G©­;‚0¶¢(3¹ÉÆÿYÒg[¬¥.õwË]úò—%ê%0‡IL ³˜ÈL¦[Ž©Ìf:“+Ì|¦4§‰”hRóšØô‰5³ÉÍn–d›Þ §87Îqšóœ)':×iNu²óÝt'<çÉ?b8d )CCád³“((}-Dd!¸‚CJ” !¥§D5e‡;\`` 3*‚‡–À¡%xE…lƒ«r¡8)C©…§(Ĩô¥*e`1#7À´T~ˆÌ¥…1Žfè ž(÷6r˜@&ÀC:‘.|4™BJ`|¬€15²„ˆ@øÁlÆ@•NO~*À `b=L0&p|Ø`hÅð± |ì•pH>ÔŒ3àC°mX$"Ï´:v˜}¬duÙÉZ–’•½¬fÿ˜ÙÍz–½Ôè&ÝA„"- ±¥ZAgµ KãÅxc¬p‡µ¤•ŠsÛ úÇPoJ- GÂXù¶‚ m•ˆøA5>¬m£+Ÿ‰ö´µ=ŽvÍ@ꇶØmmu§^ïj°Wf£%5•ûÙöʽî¯ñà+ßú޾öÍoÑð«ßþê ¨L#ãYNyBâéµ°›ãns˜+¢v··cnoŒKÛF¶Xþ“kç³1«–IC,ß ³ôÀ† ·Ž«¸9ð2¦©ÄzSl`é˜N‡cNõFë¶r]<6!³ËÊ–9‘0.-IiÒq‘È/Ì)[y´bÿÿZUUÆ „EõŽDÄ,^%Ê´OúÀ!»¤Ehó²òÂæZyuÆ ;wÉ{vÒ®ƒèhJO÷fnþäP;ÍmëÕº*üòò½b]lp«:$j†ƒ?"n$}ûŠ\Z–4~µ±PÙâYíÊú5Æv¶¸õ{ؼγ½MFpy_ šÜÊ˶PÜíŠÛÿRâî"šˆB-EYC;)J>I×ýˆ‹v(`¹ÉaônL^;ÒUÓw¡W:õ1Ûæ¸þxiùÝp=W[çxvø Mð#ü”B·n³i¾òebü_ñ³¸Ôøt„á/ÎÃ}5LkþÊÕ^˜JÇJ÷l±&;j›V‘S§rÕs–vv7½íli9Üç.!¹Óýî&Z»ÆñÎwZë} }<¥ìn껼œŽ.Ÿc+7^o µÛ(t¹Wþ¾m æRÁ‡Ç#µëì`FnÞ^>ü·´g~G¢ÏzÄ^a¥[8Üâ®Z'í˜7oã>]õµ[uÊÉd0j(Àp¼ð}GyŠcz'Šå8ÅLJ™-Î︢wߤ˿݂ÅþV9ä"®Që‡þ¡ì'8úR#ÿä‘F<îõÃlòÏ’Ðç Ú~äÕ[šû¯§ýºïôß¿™yÀ2Bx%wÑwsˆAj(€Ø‘}¨H·xˆ·H–vp§×;‹‡l¨fâBž³€ ¨*þ§mÆ‚&("x‚*ˆ}#8qÚ·‚08!ÿ)ƒ4ˆ3Xƒ8X)u9؃kqƒ>„„BX„A„F˜„.±ƒW§„NXHø„I…RX„TX…W÷à‚Ð /`ð0„Lø?ø  … %ðQõeT&Ðò`TYQøRGµ‡BÐ9TI……œVÀà@`ðpqL)pT•Tæp‰1 ¨ Ò  `) ¡ % “ˆ3àP@ˆøÐ‚¦Ð‡ 5ˆ+Á:3ER[52–R¥,3µ-¿ˆj—0fd»˜‹FV(6µŒ/5Œ×:Æø8gXF‘309@ˆÚøO$-˜q€·à¨WŽ18Žä¸‚æxŽ'˜Žê‚ìØŽøŽð8|ÿïf(_b¸Daubüx}_–fh%gl—õm¾µ]0ƒÝ£^—€hccÌ%jl–i y^þØLµ&6ãe·ÁÕÅ-ÏÕdâÅ&ÒÕ9yæbë&ã…’$ù‘9’"É‘’bEía$ùX›&7™’;vPr“ºÅ,Ä¥pJw’Pf”‰*©à%'VŸó“DI‘Ù‘ HLYV“!é’fc^±±“¡ö•;É~9aJùZ+9“I”1¥–Ù]ĸ5T)d —”9ó˜—‘ˆ—zÙ—!~‰w€˜t7˜„ w†y˜i—˜Š)uŒÙ˜÷˜Ém’9™œ˜w‚’WIâ¶™¾åæv¬W}…glí±–W"{óÅ—–·|ô—Bÿ&Œïaz©”µÇ“1–]ÏRd6‰~£c¤9~d›Ž6sصdñvµYp²Õk­ù_ÝuM8nsi[½•/Ir1Ô{ç·FYl¿6“3&ë— ÉyÈ'pY—œÓ—yç×)5ö!D}“Žó×’¿”è…9Ìxñ§a¸`z>fgêã›…[Vr  &˜ ™bA×`ô†œF7¡÷¡•¤šÚè™BÿX™–ieú¡ý¢¡Ùj¢æzx‘Ç×E*JÚ9nØóœV‡†d6”øsN¶œ•aH7Hz3´t¹…>']„–<Ÿw¡×¥[É–Ÿq#pû¶p“¥é>Óvg ªCÓù$z]ª”£0gpÚ<-:!îwZ©ðȬúºYüz`ô©'z(Ê#Br x=¨ŠZ&”œ¯Ú«äÙ¤FÁÊB K®…t¥²öªí dÒº«Úú¬JÚs¿Åp·ÊŸ•v¯×ñ¯qŒAJgØbšÓªA*œ3kv;&²åŠž_ú¢«·ÕZ¥:K:¨‰¦Î ­ß*§õ *ùú)°„«¤zN*»?,Û¯“UµV‹“ÿM;Rjdx¦jnê™jÿµ§©|Kk°¥º3 k£¥fG1:»ª9šr§s[5KlÂzx$k±ï7hq‹¬x3aÎêyÀ:¥#ë«™× Ê:"X+œÐ*¦¹´F¦’ ²kZ²z5wK´‚ôjúA¶>™û”4Ëots¹»³¤Ä¨¹•I¯ß(/S»Oø«Ær[›µÛظªJ¶»¸m1=¨»"Á»¼Z`Àªa©K{Ë[ÅIH¶¥§J°Äk†°[yÛ\ ö­ÓÊ9 ×¼Ô±šk’ÇÊ-ãZ½•»‚7»óÈ»èûNîû¾ë¿ò{Nô[¿ãt¿øNú»¿ñ¤¾þÛ¡À¥>HŸó £A›|†ça~J"‘g¯§²Œrì T娻fÖwé5¦Cz\´’¥ÔÂ[z³ 3½å“"|vyÂqCù`ÄU« ¬Â:Ãʶ÷éo‚ 77ÃÇkÃ-œÃ„½Îå %œYI¡aK}¢¸®p$Ÿ(l·³7])¬«±—Ã;ÂɧBByÅ: [l•JüŸ>Ä¿j{m”zÛzbÉ;bgÿÄ\ä”MìÃ%ËÂ슡S9Z)-ìÆŠªÅ Ã@œ›©%Æ~|2ÜÃ8ÌÅ#L æÈ‰*Ä•±XÜœ®ÅÇP8ÀüSÁÜʸ{½%HÀSèÉ ò}9v¶¾~RI½ÈÊc } ½L»ÖÁŽnLǧ‹Å»ÈŒ Æ_,Éz\~oKºÃÅœÇÝ l‹ ’Ë Â–ì<üËö÷ÌÁœªÑkÈÀÜÍÙ,Ê{IÊ/˜xê¶E‹y–&Ôl«êl~¨we\·ë<¤RÚÁß|Ï­9ɬÇL‡Ckž÷7ÌØœ¦‰|»š¡ËoL˜­Ù:;‘lÇó<Æ:t¼ŒË ]ÃôŒzö ͱøé“BÆoòȽa]Ì É( É(}±ý×IÀ÷€íÎÂ׿¦¼^¨ y;TÁ“DbÞÇ|­¼t5¾â Ód6ÄZ,ÑÄÆ Èü|­ ¬ÐØ ·}Ï ÒAm07-y#]м§ÆG]Òú™ÀÿL6‰ªxwìXÓÏLÍ{Ò¼ÉI½ÎÛ¦Û¬ÈjcÍÂ\Õ¶LÀ4 ªW}I}ý×ÊØ‚L„]ØX™ÕˆнØôØØŽ-x¯‡Ù»4Ù”]K–}Ùš”ÙšYÝÙ…ùÙ ˜¢=Ú‹Yڦ혨ڑ¹Ú¬M™®ýÚ—Û² ¢´]Û#zÛ¸_œ½Û¼¤Û¾-_½ܨ"q ¡ [ÜÄMø„x. ÏÍáìÒÿǃͭYìp{P b@ß°ÜC­ÝñQ" éð¨à†zèX@R" T íêàQÛ}@ pň À æÿÝ$8·mß̓Vû#Ë`2Y•™ðd`К pÝÙñÒè M“˜ ÕP>õÐà%ð œb¢$ì²;Ë‹N]k‹ÀXŒÎزÇhHÄØµÌ¨‹®n¸ÈòÌ ò Ôî‚D½à µâø mxTQ¯€ ¡ &€ &°¦@ ¦€40V… ÷½‡K` n®TAð<>^R¸¨‹­ÖãåÚ‹8nSGžd[g¢Æ5IIä<>ä4¾8BèA qÅQ±0é@±WQX‡eêäUnH‹ÿLH087$@0ª@WÀ ðêøœ0ø€gÐ À Xf`Xgà ŒÅÜŸ~—݈0 ¿Þm'’ÝÃN£Å~eÇžà‘ìÔ¸ìþÕìPîÄ.íÌPÈ>âØÞiÔŽÁ9íÝ>ußuâ>îWîÂÎíè>íÚîìÖ®ìí.Üï^íç>ïÞ^ïà~÷ŽïÙÞ Û~íþn©únîì>ðôððÞï¯_êÞ! ïXG<ÈÛK;ñíÿTðë.ðUÔ“.,ÓÕ7%<§<‘¡4‘ê“%éY¯ÁZIñl™½™9Ñç‹\K©©(O“Aƒñù«ñðÒ)òE‰ó¿”JÜ”F—ûñF[YrÒÑÕél#¡‘åé;äÁŸÕòtñòRd§]¹E<½c'Ã2iö—¬¨ ö–‚Š–Üe¾BÈ.› tOºDZ±Ðuöûõ@ïòBÿ!YövIkIò%Ÿ–[Ù¬eúôqoò} “,9–®»h&Ÿó}ødyµöƒš…¿s–¿e*Ï–szú3_–PVùŠß›rO;ư©ŠôR©ù^Êù¦)Y`bßñ½l«ÿ¿aFoÅH™û+ãGéº9û—?üÎöünº\ºOýÕÏôŽÕûáún‡``y”%Yü³ºû/ó¬Oùl“ì÷ü†ÿ]rßþå_”¥_侤ýüÎýûhü8Ç÷ÃO¥@ | 48Ðàƒ âHp!„>tx±¡Ä#r„h1"ÃŒ#'ZÜxdG’KfLÙ‘£ÉŠgÒÔˆ¥Ê›6sþTèP¢EEšT©FZøš>uµiªTñ¹škÁMøº.Í SçÊ5~DË“¬Ì•b[®µéÖíÙcǺ)ÖlÙ·õ¢œËön̾„ãÖ-‹×hàÃ*Á>†Yò³dÊJ¡^–zµ*VÎZ výZYôhÒ¥MŸFZõjÖ­]¿þ‰Y¶æªž;sõ [÷nÞ½}ÿ\øp£³1oîœüsnâÍ?‡]útê‘gFn;+îÐÕ½^üxòE¯CÍ®|kîîåÝ¿‡_þ|Ñ磦×Îþ~þýýÿ'Ͼ©6Ón=ÐD0Adð4i³J½åÚk°B /İÁñSN¿ ?1DÇÛ@ =1EWdÿ¶k;‘½g¤±F—z1Âüd¼±G¼1G dH#DòB! œ0I'Ÿ„r¿%c<0J+¯Ä’º)w¬2K/¿s·-;ä1L3ÏD³¾ÌfãÐ3Ó„3N9‡ÓÍ2ç¬1ÕôÜ.Þø„P'ë¼íÎáp:Œ&Aå[T©FI{t1?[‚­½ÂòÓRL/˯¶&tMQÛ,´Kâ é"OŒô¨V+{u¨GcMªU=wšTW?“Ðí …•ÖT‡mSbûz)­Äé&e•½KÑž4µÔYœªM.M³U‹1lÙ²¶Úf9ývYAëÚöXÇ"ŠOÀòrÉ\‚Ò-öH_‰¤Pÿ2z…z·&ºÔ­W'qí `fAEwÚ‚ö·_uWEªÙ“Ø_‹) Ø]x)NõU‚¥ UA6Iâ‡7ŽòÞ&GÛ7¨r5®ØÜlJ˜XqçEXÜu¾™çx',äKþø_ _^Xà†u–¨¢UՖןõë Œ¾XØU~S4ÆF¶1ˆÆZé·€†šlµMæíaŸÆ8î«–:퉟fÛì·u½Øî¾Ýævƒˆn¹µV‘k`{“k\ho†VÞƒ¡þ”Z]™69-ÌQ–\¡‡æ¼ÜhbZrÐÑÖ¹e½=o›õ«U÷)öz5çzé{ÿ|~z믿Ýxì'3wì¿?Ãê§·õëðå>mxàÔWºñ÷ËÛ¹HÙ§Ìáúsnÿ7úùå;âIÕŸ×ú'&í¡‡{vòÞ{u-œ)¦X¤{ÍX9Îe/ÒŠYÉpd f$ˆŠ\ÈX“ÄÜm‚ÝâK˜¨ÏÙlƒ Tá7ÈÁ¾D^,!ª°¥AFЇž2ŸkÞǨ¨nn.üÛ g·±E­c™"‹ý*æDú,…¡ƒ‰Äú%EþkrI¬Ëæ3¸}q‰q«¢×’73ªq`L  xŸ–Jyð¹ÊØ6¶ÌYˈK™mW³™ч´ ÖE…™p~kcÿ$£¦Á¤9‘Œu{âI´Ú-Ò‘…Ô¢9Õ›!‘$nDâçvÈ¥=Rlek#úPy8X2ÒŠ.³åW ÇGÒÒ\´› [IË2ÎP• ãd/ÙhLƒñòoûƒL)çC®\¦rx9aÖ¾8Jm°0ÍL–1e(E ¶no³Ÿ$}âMβœ”[¦ÛxHÃo¢ò`¬&_òXEdQœÛíCª_%ð|ô)Øãè(OîšÁIZ¤yPŠVTJsŒ’=‹vÔ£â™èGE:Ré„”¤'E)pLÚ»òÑï¡»JäýŒ&©AbS–°ÙŸÇZ¡•–Ç›‡àCy7<èëEt•Õ ã)JýítjN}i|z*…nˆ5© ZjøCl®‘’Îìà=áÃx‰…Qê5ÉúºUU“¤Sª]–uÌMjl­J|ãkÈB]Æ2ªï™jxò¨É„.ì•¿+ɘ:Ó[RêcVíeÚ 7¬2²4Õ¦.3Y3s–Ÿ´âeW7¢À‚g°Ã´¦a±¦NN²–æìjýÊLuvñš'Û¥á¾Bƶv[¼E¢ã\KØÏе~KF!4¤•!´-öTí7»×ʺҫ·Ì•h§K]îÆtgÚÝnmc‰\°ù—zë,ß´[Ûî&Ñ»JÿR.Añåj¦³° m§}gÈÍKFV&ÐÜc±ÈL—f¶8œ ~…;¸ÌžsÁðÜî\‘ëÏë3\mû+`ã[Ç‚Þ1¥Ò‰(«œŠ¡ kx žï‡U¼bÎQ¾ÍeqŒeì  k´{žqŽu –ÒîØÇ?¾HÉ7âü 6ˆ]¼%Á'd#ÃT~D~êsÚ©/HÉŽ‚²Dk¬£sTÞ¢Ý]¡ÑS³akYÉ)-Vn•0üj?³ÙÞνŠ|Áó™h8 ž÷Õ,^Íò,–˜>LöΕ1ÆZË"5³ÉD_›÷Vf_¦Rд£c;Óõ^7·²mduE}ÞIƒW²•$0íõ¶ÌÜ®1 oÆ´;÷èM÷­g 63¸V®A×úˆ4›U{ÛÝF¼_ëcwÇ\T¿wk«fR«ñØI[ÇZ¿`C,°q[i12Ø~Do¦A;é‘™z©£Fc¨Û f#2:Ü–®p M%û4Š÷îuÓô Û¾þ˜¯”`KHáÆHן¯ 4[ý4¶:Z­·U8ÅÎõN>úÛÇ ‘meOV8†–ȧ·q —<Ç$7yÊWŒr•·ü¤,wyÌ= ó‰\7B=2©Ó—åZåü;6¿è‰mŒÀz»ç§‘QtoyNå"C†¨â`k€þY™†ÿJè\&º—ÇSU8:ðž„Ý'Å÷œçW½à„nk]µÚÁ~ƒsœêÎ!WßmÖ‚KŸ“7bó;çK[P|µ‚hޜӪ’ÙíŽõ»--pyÞ[º´÷¹Ñ­4H7vÜÞ/Ô‡ùïÚ‰7±îŽrƒEß«³zqFw4¹¿ùû¸º>ì¨+>÷ßr3žS†n·fÏùËó:µºV¼²_+ì»7N÷˜œzsOøçV>”ˆ¯óóz=?>´—süõC_ù)~>û‡0ëužmÔfÞ»˜ŸøÂ´ü'«½¡bÎåƒ!<{@†Ýq=´©¬ÃÙñ¶?5þø¾¿qé¾0 ë¶ØS$ã öÀíø;ÕJ¼a?I>§[:™“º8j6 ™·ÂÀÔ± Álœ6SADd¾©ºE»@Æù>ÜcÁ'qÁSñªôzÀ³j”•9ã/Ù³¸4;¸‹û¾lÁì2 ÜÁλ®N£³"[¶ £¶ÌS0lSB ÉA  ?à[=ð«°Í¡›²3B¾,d¬-äB&Ì:'ü50ò¾ÜÓ)ë*/þ“$5$/6ô‘.ü¸È‘³t–*µ…ò­£ŠA\'Ÿ¿=äCU+½h;½”*¦zÄ%ŒDzÓºKäDâñÃNE{qC;ÚÄP4Å4ùÄSTEÿIÅUtÅäÊD|ÅYD“V¤Å[$=C1ÃÅ^L™Qì°RôÅaÌžXlBbDFLÔÅ¡#ÅdtÆ64Æ7|Æi,Æeĺf¤Æll[ÔÆnônôÆpŒpÇr$r4Çtü t¼"+<L »Â<ø¹3çŠÁטµ› <Õ`Ç ì“5t¯>A§³á7ÔÓÂ/3%€ÌÀàèG$«,®¸ºê£|K@øóŸ×¡s¥ÓÁ+5ú¿?{Â4 «;’4É“DD´³@ì/cI£F|ÈN:¯Â%‘ô ?Bêƒ5Ã.,ª¶ó3ž<º+Ã2ʳÅ+ÃÐ9ûB5#°§ôȇáI¹:J`Ðû¡˜È'ÔJT;²«GË#%`L1ÊÉ5ô¬³°tûÉf¢ºñK:¢,BŠ­[£|’A¶œº3³žÙGŒ´3L¸*$/AÊKÄÛ!(È£{ œüËÕIËŒ<ˆ+?1 ÂÄÜAØ¢ËÑJ/¤JÕ3¼Çk¢•MŒL^É'»K5l3L«¼Ê°|KŽaL9ŠFlôÂÆS:²°A´¾x¢º|$‚œ¢Ãœˆ”%Í‹J°ÔÍ 4˜Â¹MC+Lj¼Ô붸¢«âTº¶M2+Î5»Cõkÿ†ô¿ ä:ü§ÎlŒ¿ÃÍ€,<”LÂKUùœ*3°43Oxã+“ÜÈ,ÍÕ´H’¿ûÜÆË5¾<™yËÁ¸)ÝÏš›Au Hß!K^„P«ÀiÐ ÕPÔÈÐ õÐÑèÐÒ€ÇQ¨š¤JtÄ?L´E àO–1Ñ™PiKAÍ”ÎxŒÑñÓQ\Ñ<¡ÏØlÑ©D‡Ê&ƃËñ¾<@ßµ̃¼´¥0ÐÿÊÏB”8ÀëÁ+¥;­/½úš½#¬ Ú)šå­ÚÏÇ|Ž¥J?“>½”«šNÉ M4,H·d—<Ý”÷«Ê¥ñÉÖ)Êä¤<®DJ(µšA}ÿSÊ;D$,ZqeT1kJ±”ÌdM´…܇X[¹¥6Á ÔgJPä¤ÕYÅB\#¦ÆB\gÝÔ(]ʵRT]UeúÒ®úQ~5Bü‹VO=ϸëÕÚåµ] ÑE^ŠRÞl^N|ÞèuÙé¥^µÞëÕÐìÕ^åÞîMÇïßrßñ Çò5ßnDßôÍÆõeßitß÷uÆø•_d¤ßúZÆûÅß^Ôßý½ÅþõßYàvÅ&`U4à6ÅV`Pdà–^É…à~à æÃ ¶à-Äà ¾Á æ`ôàÁa $á޹Fá–SáN¹vá’ƒáþÿ±¦á³á>9 ÖaêÍáޱâ•ãá!®]!6â”Bâ$~¹"fâ´]â'©(–â™sâ*&Æx0o0-F *Æâ4i„‚@˸â0¾Ep(nÀ‡O€ €ƒ`„£c4†w`ˆ<À‡D€H€vÀ‡>`ˆpÙ¥¥P;ÆÅ;(|†AP°…1È|XC ã3ŽŒy@䳇wØcxE8„@؃=¸@ Ep„HH†nˆc¡è1jH`‡0@z¸à‚‡!0‚€‚(ˆ8|(M>)NØ=8e0°36d}*(l.Pƒqlæ…€(sHƒ@c.RÀc6ˆa^ff)x?0eƒ Ѐ¤0©y0ç(SØfsf€.È…€††\((8fƒ(,hpgm¶z¶( „I˜ƒ8À€¨€˜§ÿ2)/Èe0çQh˜¦,ÂN¥<ÒpJ¸i™çâ—z:Ñ™8‹=E«Áê4ÓѸpƒ¤&²•Ò…Z€X èmÎf¢QÈëtNmA/|õ"±ÏæûÓÂ)ªSòêîä«qâê(²R°þ¬,‡à±3vé\v†lþæ¡Èqæy¦†È‚‚0…Y¨†%…[À‡yÐj|xØ‚‚] ‚ôê´ªi²žWyë̆ëy©é¸m´jµk‘ˆÎSbm|-í0É¿q¼ârvé«~ˆ„gØ…‚¦|@8TXæH‚P‡e.XPæ8WXfèmHií=ÿÍ Òí×ëšmÎnëZmùDíбnžÞìÎŽëë.)L~'¨(øçlö‡°‚Ð…rÈe|È‚‡WæøƒXP‚Èez …a6 (O˜‚g˜ ÍÑ*Eñ œîÈkÓÎlžf30umFc–ù;01Ó,{‚  &À$8‚ ˜jP… §LJ À‡3H^ø?_‡^` õ^ˆÈë‰6gèŽC¼A6e¨š€Rˆ&0&Àñ‚X… X…¸ñ.Ÿ7H|Pƒ`ó0Ïq5òj.Ò‡ð„\Îækðhœr‡+7Š78ƒœ¨ã8—ž= çó$ò?Ç ;aolserver4-4.5.1/docs/intro/tcl2k/html/img029.gif0000644000175000017500000002317507363640503021211 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«·c^‡!Æ7pß­…C&Ƹ˜ña‹@üxãàÅ‘'Îüse·]á6¥%w¬N»,/ó5<™µàǪ[?Œ1ñæÊžeÏæÛ7·ë×­}s®ùsqÝ„qÃVŽ<¹ìÆÄ+Úf¾ûùçÜ«Þnîüxví×{ÿ<;è’¢—–¦›õJÎÝ«ÿÝ._¼nÞÁ©ÿŽÿ>ïøàõ‡œ€Ë è—qÎý d¸`}Ö5è ký]Dàƒû9ˆ†ÒöÎÇyn˜á„ç™”Më™VVŠ0Æ(ãŒ4Ö˜ÖŠ5‰Å^]<Ùèã@)äá–M¦µ×#‘L6éä“PZe$i:ºè^”Xf©å–\f4e‹t½¨U… !˜Q&vy’™{™7›oº9œuüÉY›@)¨Õ—U†y%Jdfè™†Ý Þk‡‚xh¡Œj¤Ün*Jh£‰Â7)¢¦©©’RŠ)¥‡-g襡˜¤—.J*=é…£®õ`…®ÊÊh§žN gšBñ‰äŽbªÙ$œÂƉg±ÈzäëMV.©&›fûÞ±±UêšÔNÛ*žÒæ:§GÝnëXRázKÔ²PûgV¼~j«¨ªÖ o¼œj⣊Öêݵ¨ºz-´zžª©ö«½¨Šà¼m,ž¸Oæ/¬ÕBˆ0¨§"úÁîº+0Å'¡»£’É–l¡›åšüdÊäf›•ÈIò¨2Z,»U3Í.ÇxóÌ!Á¬®³Vml±­‹âJaų>œ©ž›70ÃüF\'«E›:ë˜2\õÊëÆ][:uvQ[–3Ï ùÜ,Ú\íü#ÀÏžm’Ûloÿ¤¶Ÿ@×­÷Þ|÷]ÑÝR­ë÷à„n2àd nøâŒ7Þ$â§åíøä”Wž"ä$[®ù朣…¹Ìw Í Äª%Œ"nR_¬º®_sˆò}§ÎºéÀ}Èiqµ¯.ö~‘)}ðÖ¤·¾ªË¥²ª/‰V?Ø Ç~rµTWõy°”yF{‚ ‹.4u%–—<Ç\7§½^e¯­ÄØ,"íížÌt‚à Ÿù!¦Úþ責Åô˾úâ;Vö´–”é)®sL }b@ÉUå~¸“ŽüŠ'Á~ªl ŠPÄòc' ®nxòÐË—1sñk<¯sÞ»0¸@Ð4ð,ï+ ¶½ÖÏ>LCá¶Þm‡½èYjß¹Wyø*ÓÉ}G;!õG¾zyψrk¡WFCE*ýjmRÌ¢·ø‘rñ‹` ãC¼(Æ2šqd<£×H¹4²ñpô›ãHÇ:ªlŽvÌ£·„Ç=úñDê# IÈ ²ˆLäZÿ©ÈF:òeU ˜çÀGZò’Fa$&7ÉÉ–h²“  åH>)ÊRšÒK‘TOŸ(yÊVº²#¤|¥,OËYÚ”µ¼¥./™Ë]úR‘½ü¥0ÌaSÅ<¦2G ‡ì¡!eh"‚ »¥’E«L\%K-Dd!¸‚CJ” !ç\¦:‰d‡;\``HÛ5stE¼Y„œ"8g ÌY‚Wøv„áÝ^ *‚: m(—Aê´å J3µiU'Øc͈â<±YOVnä&0L€ršs"]Øg 2…”ÀøXbk8d %:ð‚8$ ظËpÖùD»Ô r˜ØŒÀ„ œ6XÅZ1|,U¥Ò€5ã øàjÖÀ‰$“¨hãYÓÊÖ,®µ­pMà[ãJWÍÿ͵®xuÜ]wx1úT篰™[øõ0<ƒ:¬÷Æ'!G ‰‚â7Õ.Â&ˆÇ©]e›8Ø#n̯¢X`»÷YÎîîI{ͬo÷WÞ!öD!,PîV›;âÀ':‘"m%3[ Å–[(Ô­ûz«!¶¶°¾õ+q•k;î ¸]Jm^mF·éöl£Vd–=­Ë]-J·»àåÙwÃKÞd·¼è.v'©Í®<­„54ìEE¶éà¯PAâm*%ߤ¹Ïx! °8µ}5±¿¾‹o®„Øß«5í²¦úiÛ”™¨é‡ë«ÿ—Á§O££\o6#çÞBQ…¾ŒìˆfÁüÉïÿwÇ Nnjȱ׺vÆù51Š¿7;×µn^@¼1ÄTHÃæí:ö‹ÅgdCÄòÄ{IœÞ*ëUÄmoÛ0‹_ä)À^b˜?–©¡¸Ìg¦°}K‹à/{BO„”èˆü06ûOÃ6ÄsøÄÞÖÃK6,c‡hÚýزubÉyG"Û“Ùuž"!Ÿy|°F{É"lÚ—w|+Ø5úÈÂ#`k“j%¯xTV±ê+d‡òµ’.â­4¦cè•:¢)Y´•wý8,k×£[ŽÍ~ë‹Ø]›~9Nvžù³ç.oØÙK4³žÓŒ=Ƕ™^­Ïÿ6 ¼jkÛlÂöò¸Ä¨kÅÐú¸Eô¡A]Ým&ׯvõ£]|bw¯Pƒëv2§ë}PL÷ß”(³‡k¨]¯`Þõuº°Èë†÷­Üx .ñŠÃˆâÏx[ÿ0®ñŽ{Ná#]õ {”nU×(ç²Hô¥˜¦ää‘ÖVe@ x5ÈcF=›ŸEó»5¸œ5n¯Õ/6aA]ãZŸ©\1–ù·äLß~úéÉ«n¬E½`|ó·Éá¸Í…p¥ìügW Ìi>g¶rü@^̨ÁNó¸á¬39—º•ß>u²—=Vû»†ùMu³[å?ºÞï­X·ëBך¡~x½“ï•ÛÚ©²ù´oóž=U@/úÒ…ô¦O=PP¯úÖ+úì w½ìcÄúÙÛ>ÄRqænÏ{¶Ô¾÷À×ÈïƒOü¿Á~»ÅOþsŸe*+ÿù£?>°¡O ýÓK_ËÕÏ~¯ÿ®ï|í{¿'Ãÿ~ïÃ/þÛ“¿ü³??ú]¯þõ«¾ýî7=üã/úùÓßóö¿Z q‡¢/`ð |Ü·{¡ü„ %°OûôûR&ÐòRYNøÀO"ÕBÐ9@R$¥iUÀà@`ðp°”€"') RæDRæ°ƒ1 ¨ Ò  `) ¡ % 7ˆ3`N@0‚øÐ$¦ðåT‚ÚRTªÆP£bÅ3Ï!wËPª&pÕPc¨…¡’Db(o^¨@öqÌ÷kا)03&ˆ~ù·‡ׇ~(q€ˆ7ˆ„Èk†xˆ{Gƒ=§ˆ~˜ˆŽˆ^ÿåÖv –[ÕA%–w"\[cÓyE2¼…‰ŽÅZ>ñsLjDælàb\|ErAs¨t—x‹s’w>WµHa§Šl3‰öQ5¦Hjqçc\Ó[9¤±ø[s Èn¾(o&njƘŒ£CÖ¸['¢\¸5[ÌõŒØè[Șۨ^s¸pÈ7-ÅŽÞhc§c‹e/—œÈAãXŠù¸ÍHŽîȉžøÓØŸf["ôÅ–!ÂÃ(Ž\"Œ6ÔŽï(\ñaâyŒáXTѨûxŒý茰…‘äèÕh‘s—i©Z iÌØ‘j‰¦×‹¡G“¥g“ø§Šÿۉ>Ù]@”Ö5”D™WFy”u•”JWLÙ”mõ”P™VöwŽc‡4y‚sN²3)wph¢‹3Æ>šèt-vÀˆ™2“n®•1–p^i–nøØ–ö£ru¹AFcHDv1w©¶b Ùc‚©nbit@çx²å5^GBÎÅ–1w.ƒû¼'Ú ¼"ŠlF³Ã”®»²,¸WºtoK ×YV­pö¥Aj¸k‹·†4›"¬•'xå+¶œ7¹þÛ¤ÕÙ¿Ä9¥Y§e´Fgšözj”Ë¿]fŽÕYnÚ kI¹‹©Œ·¼Ô¥»² °ºWƒ ¬|\ÂtÂ(¼I*¼Â¼À.œ~0Ãì7Ã4ü~6|Ãò_—Ã:\<ÜÃ;9»uÄ2,ÄÝGIJ×ÂHLL?¼Ä§ÄNìGPÅÈÔÄTqS|Åu”ÅZG\ÜÅoôÅ`¼Fb<ÆgTÆf\FhœÆ¿jÅl\^küÆ\ÇrœpF,°u,ˆ®nœÇÜEÇ|ŒF{üÇHÈ‚¼”„\ÈNyȈ•мÈTÙÈŽLT~É–3É”ÜF|É ›Éšü°wL ^–Ê‹3ʤ\8¦|ÊŸÊɪ…NØà͸¦PÕ%F¥Ò# c††eØÕd˜oãP%½ÀªúÑaÈdnÖ›“P#A KÅQ±0é@QUñUaU$MœSˆ…æÌFH087$@0ªàTÀ PÙø0šø€gÐ ÀÀUfVgà fUË…M² 3 !Ì¥-É5© Í«½É+âÚ Û<ÛðìªmÛ²}M´½Û¼íɾۯݓÁ-LFòÛ°}ܾ”ÜÄ]ÛÌÝÛ¢¡ÜÆݺäÜ mÅmÝh…Ý7ÛÍÝëäÝ!Þâ½LäÚÐ}ÞÍÝÚÏ Üì-Ké½#æ [’fI‹Âk‹etßpÿ4ߦQß3û³Ú ’™ëß>¶y ¼à¾+‹šÚ·¤X‘Òè‰j  ëÞÙ­ÛËýŠÓ[áü=’û}»þy6½­7ƒàü9–9§âÜBN¾‹ø‚ªô1ZÜ«_ÖÙ\ßæœÞ‘˜ãÊj$®fÅÈ+i³‚*\³J¾Ï(n×ÙY–W»ŒINlV[.nHþÝ1ãØ_y)’åhŽ„v4ñšãÝÈlÖI¯/)Cp§f¯r›yºãhkŒÅº‘.¹æ- Žj^\ÆéÖo:ŽÉf效ŽÃ½á^¾â|) ‹cž‘MªeJ.é–á!é+æ­ ]̹{îäÀUäA÷˜aÿžéXãQ‘è ÞèEê£n’±ó›ê"*)9áŽß/Þ‘óHY/®êœîç"Þ¦¸j醪§>29“[^ÞëݲºÚæÊèè¹þ‘6ÞàJ‘›ˆáFîëâ¾\òh•$·ëä¾éþlþì~ìø=«½®%¬ÞÓ^â¼ìؾîênîš^’™ëéĪ좮íý¾éyï¸ÈéüNëÖå^é¨îðæíê ßx‘wFå„îc¿‘r:èÏ®“`oÞl{zéÞñÛ ñn>Š+ïñXþòÆÎß"¿ã¹^?,õÞå÷Îv¼î`9˜¿«ïL\©nå>®æU ´¿ìI_l€c†ð÷Êä8~í€fçížœl^‘Dÿ»ÿ^ñ¸è??ŸY^ˆOße?•gßp=¯Ýkß®ôö^ÝrOKiàq÷»›÷2¾÷|/Jtïê²~ßê€_ø)|øöŽñŠKŒïóŽÿøœÿ4ø‰Où/<ö\÷“ù™è›_÷žoK–ßù£ïH¥ßá§ÿH©o÷«ú‘ÏùªÿúÀû¢Oûx¯ùÒnú ‰uúL¼-3¶vLŽ ºñ³Ÿ•. 2«d«›5•ÔüwËŸa'ý¦kêñÖ2Ö_ÓÓýÞËŸÏì;¼e[ î+$Ôx#îûþ™ý+›þÚßþÎÿy¶OøÔ>sT‡l“Õœ@à@ø ˆ!ƒ6„ذ Ä…V¬(áÅ…7FôHСHŒ#EšLX’ãG3†,¨ò"E‹+O¾D™P#Íœ5mÆìH3hK‹–tY´ãP™e…iäTªUÿ­¤…/ëV­]³ _‘±eÉÜ„/íU¶Uq¶ÅøPªT‡uyΤ;S¯]¾m÷ö5ا^º…楊øo^Ä‚ï õ©øïb¥wR¾|y®ÜÁŽ3Kž¼9óèÏ5'2>¹òèÓ]%m´_Ú¹Þö:6,YÞf¦][›ö[¶’E;匼nÜä¬_5üX°Êèw¡*Ÿº)Níq±gW-ÝôkÌ} 7¿÷øä6-mÝ{õòv™Ãþnœ¸pþqÿ×-,ßzCK­þjÓ ÁçÜï: dC/6è‹/=ËB{N1 #įB 1t‹B¾ÖÓŒC#DÍ9 I[o6ñä 1?¼Ïó+Åé;0GqÛ­730G!‹[C¦¸ãì%IDî¤ú˜ûȰ öƒL')¡tr©í®«2µ»ì.Á£š‘8$Œª¾13\­Ì¤HjóIøzšL‡¬jÇÜz°¬ƒÃ3PA%´P!ï44QEQG…4RI­Ò“+><Ë@@'å´SOk,òSQG¥rTSOEuÑJ»º´Ï?S…5VYg¥µV[oÅUÈU¿Ú­ÏLË5Xa‡%¶XcÅuÿ×ÅÂÈM‘Qð>•öBH«-Û#Õ–=áÄL,ÔGÁ…K\I•mõÇW¡5Ô3½½ÖÜi9u·?&é-ÒÅj»µ¶ÜCå…7ÑÆÄ½÷St{mv]v ­w[~ñìöá%nïTŠ)æ/b€çõ—ÛA+ØÓƒLXÓZKíé'íÓ’N¨´<’¥1éŒJ?™ŸB²Ä(cæ9K.UÔÍénúY¾›ç¢ÙË9åžÄG;_FÏ‘™uÕä`õ³¬µ/A\¹Lk74ïA夆E2YÞ Ñz½Æ.äóà–óÆ:ãF1ß8Í.qÛ~ñší³ÙŒ1Ü®×þÐêÜL×7…e3p=¤oÿɽ½›ÄûЮ9ÎÉû^î㦇qE»B²Mÿ¼uy:1r¦•¼¼t£­Ô»ð•ïKôêf rÎûëÊg|;wÛC×Ýî×—ÿœï “Oî€9¢H¡ÃA'>íò¸fðD+¦Ûòê Ÿãï7Ôw_¥sõ[D:'õÞjx>¥w¦½hù÷÷YÐR@¨îzbB ‰ÞC´¿‘î~, SkžF.çÐNrC#ÿ!ªuŽ}µq_É€µ0"+}%Dá¬(h«æ*„Ya eˆ«ÎІ¦Â˜ÇØõBuií†?b…8DòÐq>$b•¸D&6ñ\‹ƒbã„D'«…(Ìÿ¡ ?­+VQTFœb ½ø¯álÑo?Ì¢ðˆ%±4ޱ}PäÂ`<7HZ3£óHÃ=z uDýDEXõÏg™ Þ ³ ÂiiW*à”‰A RhT› ¨ž–9§ ‚ tä'eÆA ò®Q€• ÷,T¹mmDZQÅX׺X¶gu°C^íLG=°ñK|±±ÞùÀV7`z)cäi¨P™J8îIŽ=c¬¶¹•ª~sìB–"óQ“’¼<šNɽÙo;ÏKË’ÔE’IcËüb3-õÌ#FódÆ$',÷h½_&n~¢ƒM7ÕLp¯ä{%2É£¾û}íz²d(:;ÇO‘É“Uô # )I N~`jg)Sƒ².Í¥ËPÊÑK†èš4«Ùš`š²²m©¥á2äGkIÑI¼©~Õk]²qm6ÒsƒÊO…N™yK^èóK`Sùø['†¨¿IAI6H—ësóßäûåÔ9Ys^ÞÈåuÂÉ¥ÿ ÞöÜ!)·“È4ÛМby';;WWû+4ýË0m ¥íµ/á,d癘Ͼ†L{…ÚÔ…Ë>ØÞ tѧ°§y jÂBk’ΫŚb¹ýŒxÅ;æ$Îèë» ÈØT)xü ãcÿ9ÆÏnS¡mRëNŸ¡±Œrºæû­ÁÀvôWWÞU*W¯áv°¹efu7·¾®v» Åny×ÛÞ´¡÷½õ½oÛØ:³L]b¼lotó;žãæo¹ïÙì£L¾ð·uGÄ1qÇ,°Á•ïë¦ÙËZø!þ^Vjä¿ Ç'>—Û7ž±Ý¹1S;ºÄ΄\†qLmS/’¦‚£N"yÞç“Wå+¸ÇÓIÎX[zéã¤3Ó9F¿±©úÉ„Né0Ÿçô©opG9U޾(;ÏÚsYô(¹É¾èðÐ }׿Âì-M»N‚Ÿ¼:²7K°‡$cW­œi‚Y=™9ó×­Ûõ-+/ÏŒO¬Uwöã!™Éï–¡7àßÁdÿó¥ÓÂÜ®wj'&XÓ“\6é!¿a?ÿ¯96ñš©éw¿hž® 2»ŠN{/Úþ­\µy?Xßßø¯-þñ•oÚä/ßùmþó¥?ÙèOßúŒ­þõµO|¿àÛÿj³~ò¶û"œtùÕ¿Ùñ¯ßýfmÿûå¿ÕøÏßþ@­ÿýõÊüïßÿ½?¿±ú¿¬þ#À"DÀ¼Š!dÀD!„À „ ¤À $ ÄÀ L–Ä5AxÒÀ$A óÀzJ¿TA!ÁtÁ;ÁŒÊµ¤ÁŒÁþšÁÔÁ ¼A…ÛÁ´A„‹4ÌA 4BêAÍ:Â%,–dÂ'¡$ü>(¤ÂZÂ[#Â*ÔÂZqÂ-ô†èÂ/ôÂ0C-$Ã2¤ZÂ3DÃ'TÃ5\Â6tC#„Ã8üÁ9¤C´Ã;¤Á<ÔCäÃ>TÁ?DÄAÁB4Ä DÄD¼ÀEdÄ tÄG|ÀH”ĤÄJ<ÀKÄÄÔÄMô¿NôDýÅP´Z¿Q$Eù3ÅSt¿TTEõcÅV$¿W„Eð“ÅYÔ¾Z´EëÃÅ\”¾]äEçóÅ_T¾`Fã#Æbä½cDF¿SÆeD¹ftFƒƒÆhÜ·i¤Æ{³Æk¬·lÔÆvãÆn4ÿ·oÇäÇq,®r4ÇáBÇtü­udÇÝrÇwÌ­x”ÇÚ¢ÇzŒ­{ÄG䓬ÚÇ#ÔÇT­€ÈºŠ‡†ð††8HÈêGñ*Èlƒ@q³(rS‡Ü?p0nÀ‡O€ €‡†`„«jÈÄHòs‡ˆÈ|Hˆ€h|胈‡Ú+É"•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyݦ Ü‘ðEÃ_U¬Ñ0cÆãEùx²àË-á6¥%w¬N»-‹¶¼—4䆧ñU´Cɬ[ÇFmÚõFÈ©S¶­xôìÕ¯mÓž-coÞ®aG\ý78k܇7¾Ü2ôçȉcv«yigº Aÿ>=]6ßëç§?¾»vêÛ×~8ºôæºÍŸ‡ï|÷tùîI`}ëñg o„Á¦^róÝ·ŸƒÅùõ ‚ö'!}Û©ÕMßyVV† †(âˆ$–˜Ô†5‰^]<™èâ‹0Æ(#Œ(†e“gáµ8ãŽ<öèãFÕÈ™ŠŠä‘H&©ä’ Ù!]j}R)˜•IayWyÕå}‡™–2:I$”FR–ÞmÚYGÜdÖ¡F›ƒÿé5_dî¦ç€T®9§˜æuY`u€–¶çoòéwœ n^ˆ§—ªIXŸG þ)`_S²7(r­9·)†–vê(œ¢eæ+FÉdh 2™çªzÂÁ*kD§ÞT¤ŽX½:”®ã%ÖêOµùGj©[毢ò:©Uʆ:ëfЦˆê­]5Z(—¢*ZÞšœ (—v¢’fKg¸™Æjn¥Ú&Û€ëb÷e¡ÉÊK¯¢ß¾©oå g­³žª›o¨Áö«o¼Ò™X+T©¦ùìÃG,1R ¯˜ãÄg¬ñÆ&UŒ#‹;bÚØ¿$cjï²w9ç¢æ {rÉrœ.Ìw*Á&ÃçîµÈrìsE7Œ+¬ÍUôÏ-#­ôIÿAS»ôÓPGÍdÓh=âÌ&Û›rÎãÚì¿^k}r¬`—ëµ¥Ön]óίJöØ'ͳØ5‡÷Ÿnf]÷×âŒ6ÚïÚÉîÑIR-•ÃRSEøb=c¼xâ'F»Ù“‡[ ùå˜gÞ–ád!cŸ\ç-sÁ)£Ìµ€fól7Þ/ ^w„;ž-Í¢w}3Âõömßà‚c§ÁÀGx©ð`§]ûÖ¯Êùg–k.ð˜É#ùxÈÑo¼üÅÎg¯ýö^IîÝ™•s/þøäÿt=È姯þú¯*ûðÇ/¿ûž+^=»l޼kõÏ4½¯=ÉÓÿäW&ïq|k^Iˆu¯×ÉP]séàæ­[ÞMLþrÝ%xºáEƒÇJ]EHÁÒ™°ƒ¬!GD?®ð…0L\ cHÃ^n†6Ì¡†Ãúð‡ë!‡HÄÂPZ¶ªZ—ÈÄ ±‰PŒ¢ˆž(Å*Z‘-ÿT¼¢·¨•,rñ‹` Òm”Äð…ñŒhŠÓÈÆ6’dnŒ£5Ç9ÚñŽ.㦥D<úñyDåÈBþ±Ž†L$©ÈF^‘‘ŽŒ$!)ÉJ‘’–Ì$äˆá=4¤ A„C±L‚$ZˆÈ.Bp‡” &(ACd©ÉZºÈw¸ÀÀ’:¾R²,A,Kðн+fÄCìÚ¶LdB L”Š”3E†º¶eä=oÚKúš)M–@ãhÿôHF†9M#ç0 D`|¼2–é‚0Sà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀFhcËq^SŠÀ>Ä.˜`&Làø°Á*&Њ àcøð(à|¨!gÀGIÛ°6HÄ”¶Œ)a*Óš®¦6ÍéøpªÓžfÿ§> ê õ8Hæ«v*M߯å'OkXOETS©ƒ-¥*uB̾Îåž0?‰º¦V§úÕöð'¬Iu—Y¹êT°nPý!«ú€j¬}]ȪI%Þ¾Ô¦aù‡@þËԱŞ¿æUxx5ì]»Ø¼*ǰ…M+ƒú*ÕÆZè:‡e`æè*Ô“h¶³˜á,hGë3Ñ’ö´3-jWû0Õ²öµÊ#*Ê•t9Š^øÓϽ&;A±Êe‚‚Pêx»/ÐÑixüŠ——¦ÚT¸zÕ«"$“²JFÙ×=w[{Å-v÷Ö»·jÊ¡Tq­š<ˆ;ÄŽf9–Mšû§ÝvÐ7ssæì² Á úM½ÿôUìítF.Àt“»K-yû‡Ô³¶émèÅoýâÀûNö¿ö=‹xaKá#MØ$ÂV7LÜâZ)·×ýî`ÿÕ †XKÍíêZÃDÝJÕ ºóýmîRüTÖù‰¹k ˜¤ªê¶ÛÏÆ$–ªì¢*®ÍÉ–fÜJñžƒ`÷*—xÖ]“}ŒØú:ø`þõ×¥ÌÍÒŬÈ_n&–N¸C¹ÌÛoŒUgA/ùnj^s ¿•fð*åÈe$d…÷¬´ +š^ “=B;ë¯Ðh6Ôãl[A>_ÅÏŒSá€IB37ZÀ8óUÍ3Þ•—Ñr£ôœC=¶ úµv´ªK”jû]—$ÆLòU2½f ÐÊ­ áÆ|jß š}­ÎÒëeAP a¢^Ù¹Ù^ó8ÙÅî«™5l×:oÌÒ]/±×VjP-¨½•®¯‹™´`¯úÜÛß1÷Q¨Ùã7º0òEôxs½nðòÚ›v–µHî CuGÚvËÞ¸%=im×w$øÜÛºÜÂ…L6ͬmíòÚÓÜF4ÆI îôfÌßèùZ@.ò’›…ä&OyVP®ò–‡Ïæì£Œ>{è ,º×FÃù€].’TÃÕX;ß6{g-nmgè<ºÒ Žt}Ú':À&.g¡›Xçd9Ï·®F˜[ }\»Â¼þ±÷‰ýìé&»ÐÐÎvi½ípÉÛãNw̽îxÏÈÝóÎwŠì½ï€ÈßøÁ¾ï†?|Þû¯øº3¾ñq<äÛ.ùÉ£½ò–;æ3ÏõÍsžçžÿ|ËC/ú”“¾ô¶,Ä="ˆN¼ 0À :ªýœÑÁ0±Qa ó!ÂT§ šðÈCY %>†¹Îå ¡!9hg;QoÓx€ðÆ|àc ÖËvšãü™*R! ‰€Â)€…CtQ‚PŒ3ˆ%¢&H?¦Ð|°4}+a vLÿ'Ì4\3hÖ´€ˆLv‚^Ø”eÓä€$æ_ØMH>É‘0•309@}¨wz&xn(˜‚ª¶‚,Èg.ø‚ƒ2[4Xƒ¬uƒ8ˆZÿþÆc£²;·–ècŠÅTråh%V­¢Yå4—Cêv„¹ñ`KBs¥ò„O@ÿ“…EHkAhCæ¦V]¨2Ò…o¥_/V„‘¥[¾‚M¼Q†‰U†ðe†wRYÇTtx†p¨sXe‡E†{Ø –µ†7u{2W€áò‡hˆp4†V˜%b4XÕ…‡u•‡é….ŠŒ•YTè‡ âX‚¨cTÖ‡—%Xœˆuãs@¨‡–€ˆŠÈ†cÈECo臔xŠ‹pXeW¨UƒŠ¥h‡¶T­ˆÆh^Àl†˜d‡Ç…2¨ƒŽ/(;8ZÖx•ÚTÜØ=õà˜Sâ8Žê5UŽæS蘎µ„yÆ&"_øoÌÂp^˜Œx?„xf—XÔŒz†oL/¸#ˆ't:‰‹…¦;zøEgiÝ&m ¦,Ó‹ååAEöm f„YE)B—‘T¸_‰’¥h¿ZþH[É+¶ut‘’amn×=œb\jØmÀånlönÐö*âr^©‘Dg“…‘(˜e_ûátÊ“îÆ;]惦’’Øóg;Gm’&WnV¸v(¦¦)3V*¶e¶Øn?HAÂe„-dNÕVkÉWÝ’„@8kÐe”Ô–\è2fIq “7üë(E}ÉŽÿÉŽ–4˜ FoF¡”:é„y˜^ø˜‰a¨økËb=R vR’]^ö^¬8eH¹L·ø`÷<·3‘eu‡Ÿö”w ‰<ób`‰6““dv_úˆkœyu»…“úx‹Ž¹9éeÁ˜–]jY•ÇuÆ)u<É›£Vpò›äµqNÉi Šàæ’£ \Ü™oy0G„Üq™f7¶)‹÷q–r'M)jsY!ÉyUFqìy„_ Æi—?Øq깓V÷sói<¨\D¦—Œ\WŸ)Š©Y—a˜„I:¡Ygžõc¡“W¡ ƒ\X—a˜!¡+T‹“IyêBŒósóIG2y6³)—öi u&Ÿ@)tu˜3á¹c䣣¦p •£—¢3—`¯¹f½õ›T‡ø•‘ Šf|SŠVG06æ¡ÓvL®I[Ç¡ˆi"*+_ºg\ª¡€4¦dêGê’’ùnÎyT°†ø6D)¢aÊ”Tˆ‚4[S‰I¸•0Šmi¥ã¶tð¿â3¿ô»=®ö{¿?µ½ú‹jüÛ¿«•¿Œ9<ÀSÀ,5œÀP³À ¼4üÀåö¿ì\ÁáxÁL޼ÁçØÁ¬Ž Âí8Â$œI|Â%"q ¡ vgÂ*|Ež„x. 5Ìá'Ã3lEìp{P b@ßÃæûuç9Â$" ¾§|D !îÔ! Åø ÁôÃäÓwKÜ·œ Äÿë«§˜Á×{V,° ?Åz’T @@  =¼Äe—¡Mã— ÂKs<õ Ç%ð kÁna&VÖ¿1(_ë•M–,'È`–,ª¤|—˜ÊãÃ,! À ’ ½¼½wO¡½·NQ¯€ ¡ &€ &°¦@ ¦€4pP³„ \¼|K` ÐìNAàMFª éɧŒ[ n–€N*Ê×\M_&­ ßÌç¬9]6Ô@QLà5 #å(¥RaJå{HÆ;„€IpI@0#  5¬0#€hp”½ %e)u¾ðR> І´0ÓM Ò6U#nLÒjÒ"¼!)ýÆ,­S(í¼¡Ò*Ó(á>à)‡cÞÜ«Ýä^ÙÓíÚnNäåãÞnáú}à^ä£8‘¶¨µê‚…~^¥•hâÞ•ÝØ©·ÊáºÞºÞj^Þà­ÞÅéi¾3^åð |8Ü Ûˆ#ã¨Ü&JáôÝâËmäÙAä›m{“B¶ÜnÅäyëc­êQ¾áÜCçGmçmÚ'øàséqç륧ë^}Óp}HÀ¾×Â,žìÊNåm½ë_íìxdìVNí…díÍŽív¤í¼ÎíräíÓî/»ì‘½íäîFÿâŽìé.³æ>ÚèÞî5ûîïýíòŽFë~ï!Mïu>îúFùþïÏ~éÑ~ì?ðšÁÔì~ð\ð+ØÒsÇ5ñÝíÈmï6¨$Bñù´K{¤UKÙ…ý¤—Ë®Þ:5ü.í ŸñJ "ÿñö®œ=t4Ÿ †¸W"ñQiñîïEiµÕù(Ì ¶ ·¹uÛH¿ê7º®¤—dË(jë®NÛndž¾Šéœ´ÞBœ1:¶DŸb%Ï–œ«ãO¡)oð“ÍÞn¸3? q™ ò>ú¢ºæ±Açª÷zl*dlú6šq_¶2/ó˜æöç™IjiÒ p$âðã1òI¨Ò´ªDÏôÿÜô| ,xP A† >„QâDŠiỘãÆ‹E!OñT“Oÿê¼ãRÆ©¡Ú®P¹üÍòé´¿û~ñà?ó××̾îèûÀ™įÀ‡LP?tp! ôo¿†€Sh· T0¾ 3¤0BÍ(¬Dþ@œÐC CÄE ;ÜN0õÌ µ¾V‹KÅw\°Âùï½ ’¶ÙFä"í„L²H„rE'‰”LG'w$òÊ(©ôQÊ-<ÿ3à˜ÔÒJË(«Ì$Ç$3Í)ÕD/¢¡ãKººÌìoÄïCpÉÐÈ4ðà ›4²Ðµ{Â(yÌ2ÈD×T4KߺĒÒ"S„ÓK½´²R@{ ðH8%P û1N†ædÏF;éÂóÏK,ÔO 5ÕðÌReå4SB½UÊF;5XHq-–Ë^›d“ÍOgmSÔcÃÈMGQeÖ×}–9VÏrU5ø|ݳ\#UPI>÷;7]#Rö]’]leÑuµPXlÍ“ÃQóStSAu›T=±DÝž6ÝòÜú¶ÆèÄU5c7æ¸cyªØF÷üú¸d“OF9eÃBnûïF•_†9f™gŠåpߣ9gwæYf›/ƹg¡‡&ºèÃ~®c£—fºi§·BÚ©Wg>U¨1‰C²³‰‹}ºë“£NKé’ÅÄÏjÿÊfië–&Å—:-_B3Æ·½¦›.°Ûã¬/DûÔùômmu÷ü᪟ ÍoT1Ex¼ø\Ô7nÇ ‡ÜGx#¯;ó›îlj vr&ãuûÐꌳun$›µÔô2«]üÞÑÿµôð7Õä{\¨Ì÷°0…Ï_ d^ò’W? :ä~Aönó¿ έƒœÈIB–Є„¡çN¸B¶0=I) ¤†?ÖІ7 u(ða‡?bU’ž',{[AƒÄn ±hDÔ[ž7ZeçtJÄ ÷§Å)êDmbjK؆ z°…Pì˜äœ0ä¬pá Õ†Þw@Ž lœÿ‡¸ÁNT ¼VÁ&¨2uUôãÙø>¿mÑa$ºéÝk ùŽ5?ãE2z” ^½£+®­qvÆ[”®¬5ÆPk”îÿk¥§6i=T.ïSŸlÛ—•¹K~.“Ô›W-ßx»½y–Ä$`¢ÔÔ§L¦’Rżž´tYËWö+–šÜ”ü®x¹]^3}Ó4XÝz™?iRO˜]¬Ú+7sJpr”޼bûα&5QX›é¹4ڬ𬮼’ÉÑa©ØÆÏÚèEl¯[ÏØ~Å«Ü$XcZ’¨³CõŸÝkÞöªÄW¢U>É%ŲºòÄÅ[è¾Ï)=4¶´IX@Ã}b³zw›^¸F«B/ª—W{u‘³ ïÝ{ÖÑnèl[JQmC£v&`ïÉàkW|6·œÐM#‘õn(Ìž'Œ‡dko‡XÀïÚu‰q™Na“.ârg©ðóê6ÀNöž]éy>{WÑ­×7ËäÌhwø¶¥6z+3Þ5å–o¿n‰Ò[ðŠzÑ+‡À[ÏÿAÒÃÏûµ¼A\oC*™4¾·Jëù]~×àvêj}ñC#=ág¡ÙѾöú©íoלÛá>÷/œ‡xƒ/ÝõD¹ïÝï¶{§ñþé¿Þ…}7|â}xu#—ðЇüˆyÊ—lò•ÇüÆ.ŸyΣgó}g>zÒ£ñs<»K¿z¦ž¾áÜc}ì[wNö·ïÙèq¿{±èž÷¿‡šë[{àßc¾7~òÇ"ü›=^ùÏ÷ó× }ê« ùÕÇþK®Ÿ}îQú©ï~øMO{ÁÛ^üç'Í÷ßë|ô·¿÷ê÷´êÝ?ÿà^“¿ñë—?ýõ/•íïŸûý÷?ìÀ¤¾$Àç3ÀL¾TÀâcÀü½„ÀÝ“À ¼½ ´ÀØÃÀ \½ ä@ÒóÀ½AÎ#ÁļDAÊSÁ„¼tÁăÁ,]¼¤A¿³ÁÔ»ÔÁ¹ãÁ|»µÂ!<»"4BsCÂ$Ì´%dBEsÂ'4´(”BA£Â*ô³+ÄB=ÓÂ-´³.ôB9Ã0t³1$C6ƒ¿ÁË¿3l?3dÃ2sÃ7„ÿ³44?9 À8´C.ÃÃ<¤3:t8>¤¿=Ä)ÄAÄ3?$>C ¿BTD&cÄFä3D¤!H̾G¤Ä!³ÄK4¡x`o`N3IÌ;M¤¼F dhQd?RÜ;p nÀ‡O€ €†`íSÅ5dE´s‡È|Hˆ€h|臇•ÈÄ]¤ ;(|†AP°…1È|XCÀEûC=ü›Šy`Æ2³‡wØcxE8„@؃=¸@ Ep„HH†n¨EïãÆ×›Dˆ †@x0 ˆ .x (‚(À‡Ç&ã„=ЃvKH„Å|¾}t*(‘,P†‘dȆ€(sH†@‡‡,RÀ‡‡d†¤ÈŠD2x?`Gƒ УÈE‰˜˜ 0…’„I‡XÊhh(iÈY ˆˆdˆÈ‚¥TÉ–$IkðI!J˜„9ˆ € €I ÿ«œò˜…¦4Z Ÿ¹»,IJ¹Ñpù `Û&¾R’kÌA:L¢¸pƒÊL+ŸÒ…Z€XxÊ’I–Q8 ±ú¹ÓI¥ºâ”¦Ù:ùò£ÆDM¾QMÚ4 Ë™Í¾bM±´§É©8y(œJJ‰ÈKt†‘LɕȖ䞤†È‚0…Y¨†%…[À‡y0M|xØ‚] ‚ÛpLÇ Žó,›ô”ÞL#õdMÁLÁ©–‰Op³ÍûdÌü„Ïø<÷\š‡™OÀÈ©—ÌËÑ|ªTɈب¤|@8T ÈH‚PŠ,X˜È8ÿW HxPUÃÏÔ4Q¯bÏ[rMø„Í…$û¬MùÔÏÈüÏ=ϵ¡ß s‚*€‚/ •Ix+](ć,yx†œ`ˆ%0 ¤R`H‚ð„)x†ÞxQÒ7Z˜rš×·ôdѪ±]$ˆ8N¯„Iý1Ê4¬ªŠ(›€Rˆ&0&PT‚X… X…HÔX7H|Pƒ`¨ÕZ]T5¨ÔM«½?¬OÈ‘¼†´Ü³ yXU—xƒ3@³â4Ö„ÖhuÀi¥Ö\¸€;aolserver4-4.5.1/docs/intro/tcl2k/html/img031.gif0000644000175000017500000002466607363640503021210 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx-â@roƽ|úí8xcᆇ«&Ö¸8ibÀ*»L™$ܦ´äŽÕi—¥dÁyA]ñóDÀ‡^š´ëתC?n röhÄ´mGd}wo|¦}C„;pqáÀiW^Î<ã奚é&ì¼2xjå¨!?ÌN1;êÝÞ{_ÿ'Žý»m§ï^½ûäÚá{_/ýÅàõã‹¶ß7ÿæøMÑmVV€&¨à‚ 6XÒ€5‰%]]<9há…f¨áZ†eÓfÓU¸áˆ$–hâ‰b¦bfHŠ0Æ(ãŒ#vÈâ‡h–rÛé‡Ûrßéå#QžÅ’Ùän®ñ´€Cîgî9—¹ŸH´ƒ áØl×½`ä»Ë©·'YRðh‘¬&òO_žï‰û…c r »zI.éè”[zÛŸ–>aëk¾áùÆç]yƒäúý¸Uó·ì‚ðëïÿÿNë¨rÏA4àë½ö5Pxa‹ª´¤¦@ =p(Þ+‚.ˆAP%°{|Òä$ÃÁÊèKM<ï‡8Óí #RÑîuÂÇŽC$§ÈÆ np;?Nïw"=ÝGˆdlŽB$&ˆO$bwÜg©"èƒ/¤¢ú 8E-ŠÉ‹$2âs·EðFŠe £˜º4¶±>o$ãÇÈ,ªqŽ“c â(-/±oîká]8=9ZŒˆT˜QX=*2²y‹ä!KxÅÿJV<Ý(*²Ñ€tbÑøGP²q¥ä")E™HRžR@–ô&y¨ÉT’Ž Te+-hË[~†½¼ÐG¹J]æÒ˜¯lŽ ǦGå©R8£+Ãø¨jZóšØ¬ ¬–©ÍnzSCÜì›ïRW:Þm¯i„$gëÈé¶tJ²zîZ87ä=ÞìÒlÎ æÿ’Y¥y~óŸµ\,o4Ëâô ­äðvhЄ:ô¡mñ'D'JQ¤H´¢ͨO.ªÑŽz4E -?JRÃ!{hH‚‡ c#I´‘]„à )ALP‚†ô´¤@}šîp€An%Ý,¢Sô´¤<-Á+6Eûññ‘Ò"ã®^&S¾ÓuiT¡ÉO®ñœÀÆ8š½˜6ä&0L€òt"]€j 2…”ÀøXbk8d %:ð‚8$ Øð܃J¸ž”5mÀÄ.˜`&Làø°Á*&Њ àcø0-à|¨!gÀGkÛ°6HÄ­”Ímnq«ÛÞ’”·¾ nF+ÜâBÿ”¸ÆMîA‘+BòJy\‚f3Eø{>7?Ú»²;$´6K8ö‘n{žKžñÚ©[¥»Ó~ÔËõ*×2IeèRוƺRZÙœ`s½ëò½ú})ûëßïxºûMð}Ûtœn\7|oE˜+á|]¶ÂuŒ¯HŠáO”Âqú@,âãÄ&NñÛP³“Öƒ„Á%C!/f|¹J賓ŸôÖ¯W#Ûî˜|L3Õaw½<³róÈÛËŒ¾+ÑÕð8íM,WÛ›Üþ¶À“}ë<|Ý‚~3˜ñ\1C/¼ßѶ²©M-x{á,ƒø³õüïd{ÅÚ ¶Gž¹y“üä39ÊW./•³üå­ÿr9ÌgN#™Óüæ(²9Îw^#-ŒDt!tÍ•Ìx-èm,¯ã¾ tvj•»K§J£5åsVóR¿ë<]™ ­e`ƈyº#_Ê[`νdY¿{±£:ñ©½ëJÌpH!Í7m½jw·ZÞ{¢sSiî,gÔQ²w ^zæLÞÓãYÂÂ{F«,û$©—Á|.9C}G§Â𻚮8ž`ŸJæyNzV=“¥O}ÁF¯úSWS²Ë:,ç¾jÔ·žª¸¼=EXox¶„Þ1¾/&ŸÔ–ßg…÷?¡¡å¹XÃÜ+òÇæTô#vGRÙøå›&;ÌanCÈWÒ&ÇÏý^z¿éÃ×e—ù1½F+f1ý®¤£qG̱bíô#m¢öÕËõ ßVÝ·ÿ7YÇ4€µ³}Ó$ èEç'€ÈágY›„l—JÎp0Ò€cæ|}F¡È$L&’å€zÔ"ˆ" xXÈK(8I+øIh&øx懂žƒ7H$H‚´Ó‚2H‚4hƒ#ø€=G{×&rº÷„ýÿ„–ßãv´|NCBP89¸…1@?ˆ*Ri,ˆ3é"?’÷HX…7ˆcCnè5]è…rˆƒcXwsx‡%X‡Ø†‡|ø>zè„}ˆüó‡è#ˆ†¨L„?‡¸ˆn‡ŒØ‡…p!ð€ð ò–ˆ¡Q… %UPõPW&ÐòWYðSøUr‹BÐ9@WtõˆPXÀà@`ðp1O) Wó¥ÑŠô¦\3­;ë•:´A ´D;sF{´/—´J»rLÛ´'÷´P;rR;µÙÿVµV+iX›µ)¶µ\[b^ûµ!¶7Š…ax> Œ¼*Ü—]²¹q4¹wLb…Ãß+„ ø9:œÄ4ÅS<ÄÏ»`üC^Ü·2 Äú$Æ£ÔÅNœÆ“ºÂÏÑÂþÅÐW]$©}©KÄË;ƒPÄì“?T¬Å?¼ƒzüG3„ÅF¬ˆ(È؃ceÆl;ÈVL–Ì·Ä-„‘l„ŠÆ¾nApüÁ&ÄǾƒ1H„ÂdÉ»q!Èúg€Dx~,ÃKÈÂòåÂ̤ȧ ÊG¨Äª¼ÈzšÊ_èȾìƒ5(ÌŸ¶ŒÉL~*ˆ„e¸€õ¨J4ÄÌ¿Œ{ô(º™œ¾FäGh Ì&aÌ_„;–+.ö«KÊ*Jm–¨ŒË̹ÊñÇÎ2ÂͶ<ʸLÎyŒÉ<èU°Ì½|ɬœ¼ü+ËÆ»rìÏô<Ï<·ý|Ëqgº«¼Ë¼¼Ð÷D"òœÏÍÐxÌÏø|ѹ«ËÑlÑÑõ{È Ò}ÑÚ¬Ï!}ÒìÑ(ÌÒ-Ò˜—ÅjqÌWüKþ7Ñ÷üÏ­Ò&R¼) _$ýÂXjÂDÝ[F]£Ì{Ô á”Ô]4À¡KÆ]ƒxm7-|ûKÝ5N]íd½½£† zz‹¾h<0[MgËÔ”FÓ`J,?ÔG™Æú€AýqC ‘ÉÒf3¹o·w­ÖªyÖ€íQ‚=ØU؆QˆØµØŒ}\lýثْ횔]Ù±yÙ˜M›š½Ù·ÙÙž-iâàÇàÚ ¥Ú¤—Rø€1à ÀÚ|pŒ ­Ú&Æw°uð tð ¨-ÐtÇU" éð¨@аèX@R"PW ÉêðT¶=Q pD%Œ À ÁÿýƳLÜ9W£ØÜÛ¼qcÆuÝ4•™ðd`К @Û©Mɘ PµSê=õÞ%ð >Ìì…qXŲ‹‹¾÷Äù(º(ts¾OgSÖ)! À ’ ›)ܵ‡¸1Š~%J0Šrñ ¸Ðº`Ø`;` ¤` ø@ŽåSØ0ݱ¸¦Päu:˜ÊíøÍÓ\³®"Æ ¸«)¸äa5»‡½7 y\Å A œÅQ±0é@aZ[²e¼ýÍTNµŒÛ\H087$@0ªðYÀ èø0ø€gÐ ÀÐZf[g‡à ·UÛqþ¬ª†0 áÉ‘ˆRÞ•~Ä—ÎÙ¢éæÝé–ýém›ŽÈ¢.‡™^êaé©þÙ¤>ܧþê¸ê²ê´~‡¶~â91ë¹>Ù±Îëáë¿>ê9ê®^캷ë×FìÊ·ÌNé¸þìOíâìÔëÇÎêØžíºKÈÎéøÖ@EîTÿ îÜ>íj+MæŽVÒ´­#ô˜x®LLÀrúnÜaÖ¾Ýþ“4y*Z(Éðž iîþn–¿…ûNýŽï‘™.N&–Ÿá]×gž?Å1—ácÖdÓ'£±WNQÙ”–ò¶“ï¾µðQÑðÖúðëZ3WÉ«`L¨‡Ù›…ɺ„öd•YïVæñy­–íáó¾öb:O¨õ“óïÝ9*ßëê^nCÉ”1Ÿ˜s¼ó5óV—8+g_vc)—j)`øáõX`¯õBìÍÞôùUïp˜dùõéùõ]oñk)ï[õi)^sYve[(vÉŸ/­è~ëÉÞ–._h,Öxùt_Æ6?ö‹ÿéô¯ “™oöQø¯]_aK?ìjoølÿjpÏÇ‹?˜?÷¥úR?ô•©ú7¹óaߟ¦ùJ}öÛNøâ>`‡ï¤E?ó4ÿû5/=¶CòD‡÷­Ïõn‰£”úó4û5:x¿ÿÊ\‡´ƒ/ì¦ú¼?ú6dÑVòod`OvєׯðãÅ–ûº(|uäzBà/öXFzŸŸý…¯‹Ï¥õßê»ÿˆ@ >‚ D˜PáB† >„QâDŠ-^ĘQ#>Z=vé±ÈÈ‘øŠ˜Dy’à&|,7¾„SæLš5mÞÄ™SçNž=} ô£I’'¦,ÈÒåO¦M>…lUêTªU£ ÅJ”$Ò£+[ZVìX²eÍž›UhÑ£m“~EWî\ºuíÞý©v([®(½.ÅXð`Â… [Õ’¯[•_†YòdÊ• &Y´oc¥–=ZôÕ¡Y÷ý;ZõjÖ­];ÄÿÜñ´ÛÔ¯m߯Ûpl­%¿}¬[øpâÅ¡òž´¶qæÍ?߈\óïåЭ_ÇŽ]úVꎳ^÷vߨ½‹GŸ^½eò¿9Ã]_þüºí7§Ÿ_ÿ~Ä¥ý'ïê<þFˆ¬/èÀÉŒ‰Aýìë®3D(A t0® 3,hCžâª¢°©;ü S$1Å' ñEY$Bó$˃2ï<K>¥ÿ“Î8¹ŒÓÎ< Ý‘ÅBÁ¼óMõóP³¤TŽJ™EsKKŸœTQýÔSKHÉ5IMsÉP+DNSZÕUT_uµÔ\YÕuWSÇäuÔÅsNGqÝõÖ µD´T`›ÝòVR¡¬ Óqœ‰Ó†"íÕS ýôCÅ=6R!U“YgË3ÜtâvÔ>a…–Ëoé­××fÛ\NA}}öÓxÿÕ×Ýw[…6àp{]VÒúü[kºá«’Ii» ØØnóýRß`5îtÖ`ï½×ck—UiKX݆÷UäaaNöàSÅ7gŽi&Öd‘u—.kýÒt*+É”ôhƒet㣅_4椟ÕÖV÷4·j¨+…UÑA5öë°¹^Që›[þ³ÝGå¶éxsžykr½T\±/…x/‰§ÄvÀï¨e p¿–lè÷‚Ü:Á}Z[*°|±,ã-gùÒD*jxUuêÅr¦.µâg)TcФifyž¹M:ºr‘¿ÔcCµÆ¨>a]áïF-f’ª”´'H•˜Èˆò¬« CdZ³¸£©VU€¿Ìj\1)Ó™ZT'àX Ù6ŽšÔ‚â’â{‰>G«sý¢ú¹W\eMŒEíÙcÙ'/¶ò‘s½`´ËØ©í±²£ÌeVßæÐŠàUˆNõ,žRkÓŽ}•‡ô¿}I)G8ˆ˜ÿ aLÚò–ŠÓ³>»¨h]ÙQÿúdj–†ÃÜß+—øÇ%½é³GÜàOwõȾvÂíüž¸È÷õï…zÝ'cߺÜÍ®÷a¯|Hl'¼ÙçÎ÷¶3~¡ÆK5ácþo¾A |Âqâw³pžVÕôÙÂÄûD³gñÿ~ü¥z[øõ¶Ëõ¬ýŒð>Ïßw'õŸ ~ò«YüV/ú¿ã}õ·ÿ.ìwüåù׿,ô·N’}Îý ÿù· îSœÊø?¬’Xã?ô¿ 󓣫3À²ø è#‘Ãÿ(À¼¼m±@…¨À ¤8x‘@ ´´¤“=ä@ÖÁ¼ ”0ä³ä¦ Aªs6ô{À¥±ÁÄÁ™@È£(üŒ ,¨Â!t—ÖÀ@s>z+Œ#DÂ9ÙAÈQA &TÂëÁ$„»%´9ô ;4Â+T»,¬;k†:9®‹Á [1¡Ã *$ÃQû¼²<'t¾r)˜ì7:ÄBB{Â:ÉÃ5¼¶6\ºìÛC3L¨þƒÃü¼>”/x;Á—CClèËÂ~¢&>\<(AäÓÃ'ÄDKŒÃ&´BP„ÄITÂõ©¢*œBøj˜zÅPŠE|ºaÅìÄêûÄH¬,I°LF‰TIª4K¶tK Ä Ž|<°lK`|È…D9¹<ËåAÉŒ¤Ä“)9o<ÌìJ̨$̇ÿKjtÇ–óFkD˧TËêš@Dš©"E+JŒLPûµwÛ.–£7‰#M˜|ÌÔÂûÚĆc¾ll>~ü½ŸlnIû$Ww#T=½påµã\8m{Wq•WØÑ5_RWë`×S<æ<×ì“x…ÍùÈWo5ÒÍ$®ýX‚åÀ„UX d؆5À‡…Øü“؉­¿ŠµØøÃØŒm¿åØôóØ%¿Ùï#Ù’Åÿ³“EY:SÙ•…³–uY6ƒÙ˜E³™¥Y2³Ù›õ²œÕY-ãÙž ÕiÚ¡Õ@¡%Ú£MA0•I¤íÙŸeZ‹‡‚ð†‚ˆÚÒ2Ú§ÝÔF d¸§ÅÚv‚à|ø Øx(Fð¯«ýÚ t‡ƒÈ|Hˆ€h|胃cÛ¶-Á;(|†AP°…1È|XCX[¥UÖ˜¿ý2{x‡m0†GP„C„=؃ €0BPGˆ„dè´}ˆ£†@@0 ‡„ .@ (‚(À‡Ü!ã„=ÐÏKèÚ¾-*(ç-Pt‡‚çÕ]ƒ€(sH…‚@‡Þ-RÀ‡Þ-ÝÞáõ1x?è\ƒ ÐH½ÚyàÞ(Sˆ^î=û-ȃ€††\((ðÝ‚(,°_ëÍ^èµõµ1 „I˜ƒ8À€¨€˜?ÿû//€]àÞQÀ_È«—|µ 9"íi)áhSù|%X"´!›bNÇ霸pƒ4Ó…Z€XÐßè}ÞˆQðÕÁÃÑ„‰¼ÅÔü‚ǹy8ß Ø–S¬ZJ;-¦®~µ5/Õˆ‡è>¶%aØu†ç­^ˆÈìåô¥†È‚0…Y¨†%…[À‡ypb|xØ‚] ý“ÌĹ\+ãP9—›Ìp¤d.>8[”äè¼M£Sa´ø¯í%á%Fˆÿµ^…Ø…ý¥|@8TÞH‚Pá-XÞ8W^HåVåÊ’;¶ZÔÌáˆdaίÌäÞø>¡<–læÁU±2'¨(ø°Þçõ„°‚Ð…r€]|È‚‡WÐÝø‚XP‚€]z Ý5 O˜‚gh.B)Ït¯â°âF&ÃÁóLíò5ÙŠžb2[œ'˜ `H‚#˜€  U˜€Àh ¸h|˜|8ƒ4à…_é3éuè…¢uÜâ<ˆXãæ^^ŽQ¨ü1åËÏ›€Rˆ&0&i‚X… X…飞7H|Pƒ`Xê¥i5`idA‰ðØ}Þk à<›r‡ žˆ78ƒ…ðÚ­~±²6ëCë´>1Þ;aolserver4-4.5.1/docs/intro/tcl2k/html/img032.gif0000644000175000017500000002147007363640503021177 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx-â@roƽ|úí8xcᆇ«&Ö¸8ibÀ*»L™$ܦ´äŽÕi—¥dÁyA]ñóDÀ‡^š´ëתC?n röhÄ´mGd}wo|¦}C„;pqáÀiW^Î<ã奚é&ì¼2xjå¨!?ÌN1;êÝÞ{_ÿ'Žý»m§ï^½ûäÚá{_/ýÅàõã‹¶ß7ÿæøMÑmVV€&¨à‚ 6XÒ€5‰%]]<9há…f¨áZ†eÓfÓU¸áˆ$–hâ‰b¦bfHŠ0Æ(ãŒ#vÈ⇨Õ|=)W~wæ#D‰ Ò¥cJ<þõÝpá‰ÛvBw›”P‚Ziâñåc^_zYå–d–gä™hZ…d‹J¾˜æPC*ç›tÖ™Òš8º(¢|öéçŸáy“žÙÚ`ˆŠ9e™V’©er‹BŠ˜¤‡Š9¦¤˜nGe‹V*kŽ *x†ª^n¥Ž‡œl›Žz¨©€Æs((T9ºkesÊiØo·öšÖ¬†èë°Ä‹"° RXè•©– ©§`Êv©´™FË£ïmzª¥YRª-´—vK)¯œ²Ší¤ÔVk¥³Úbjî”éÂë©»¼¢*¹ÏÎkï¸ëF:/ŸÈÖº§±åJ°I_•pV ÿ0¡G,ñÄ”=ÜæÀú/³ç…û/iˆ¶º/³åNÛèÇîÅ n»OÂJï§í²ìr¢Íöëí–®† å¨/ó+ó¹À¹,.¨(ï\®ÈõâÛ•ÅRÙJq¦(6ü4[RUõUL“åôÔ\wíõOYs†q€;«²Š\Ú¤‘Žû(Ôþ²›eÎm¿›oÛòâ³¾$û¼ªÙõªý©¨âQy]Ý6kìhºÑv©÷ÆÍî×7Üu# ôÕ=…-l‰˜½£ÒÍu¾lƒš+k$æ¢ëºÞBå'ê:ǼkÁ«{^déK*hï¾nï=4É#;£øîžôiÖÎzϬo¶Æûzí¶ËˆûÖÕg\¯ýö]?6÷à‡o»÷â—oþø+b–dÓߟïþû½’ÿüôÇŸ>tl²_ÿþüÛ)ÿ àŒþ'ÀpC< ¨ 2ðœŒ#HÁ .í~ÊŸÖÚgÁz°(ÿü G”’ð„(<‰ SÈÂvd….Œ¡ »‡Áåéb3Ì¡)Ãú0…=ü¡EÄ!±‚E<¢˜Ä%:±€M|¢ùÅ)Z~U¼¢E ‡ì¡!eh"‚Œd±#AÐBDv‚+8¤!0A 2Ç-Ú@v¸ÃÀŽ"˜c äX‚WèNSA;Ì&4FRïDÅóˆ—ƒHr]‰1§ÙMwªçÈ cÍxdD¢x˜@&Àå8‘. 2™BJ`|¬€15²„ˆ@øÁlÜ…#¢Ôa2 óÀ `bL0&p|Ø`h/Åð± |l“pH>ÔŒ3àCœmX$rÆ;ºÓsí|§<§ÏyÚ3bõ¼§>‰ÿ•Ï}ú3VýäèTEôD‰=Ô;¨òÞC3îtL?~ù§œÔ%KñÆ>íQ^A›¤º¤­K¢ Ý–DÿP„vt¡­Ò26Q”ò†¥ ­”GcºR˜Ò¥Ù"•NmŠ<¥§¥®‘ –öYÒÖ&uFUKQ“ÊÔ3-µ©P` =4(FõªÆz*V·Z£©Þ¨ªú㊙v&SÞ½ŒG-ëiEc#Rytrà DkÊÕ4iµ$c}Üï`Ã.Ç .f®ƒ«`¥·¸¾ÎQu-Ö]ËØ-VWoÃÈó$kÉe*Î1Çûëµ|‚ÔÆ†ä±T¹,ó’W4³ .osÞiá=ß!±ÔjmóTYÈç)Še„[mòd'OÐzö·•ñ-RFzTÊõn·Œ¡kÜ~"µ«u¶³(yt;;.™O¸G-Ôtƒ\Ƭ¢ÖUu™w7ÞÊv»—5-â΋ZñºwnèêëmÏÛÝÌŠ7°î-yåê'ì÷¿Jõêú6ˆ¡'Awº"Á¯f·’:¯ezª#Œr„Å¿º žá~3WÄõ¶·um{ÝX3ÄïípmMl^_Îd…½/m—§âÞ‰KhÈ]Þ^_‹ž•7²†Ð€Åà"[öOÀ$ò…ÒÚŸ”cEä},ûdoö¹U­(;gaµ$LÁ ž0J0¬e/X·!¾qŽ_ËSW6¿ò5óhkWßå®Xv‹aïàÒŒª±j˜ÍÏŠïãüj]ãØ˜¬€}³‡é+f"ù†a5²¤KDf8 Ïc0n©m'ú*ÛØZÓܽb¼Ûɢظ2Å–~õ¥6íNÚ«T¥Ä<fbAøÕ©4®wM]óú×`{4X ìbIز¶ª±—½_3ûÙ#q6´§íiSûÚÎAv°L‡ínkÅÚÞ·K´¬Ü‰ûܽ&·ÀÐÍn£€»ÝÝ~7¼¯-ïyO»Þö~ö6¾ó½ì}ó»Øþþ÷¯.ð]¼à¯>8Â%­ð…¹áÿ/Ä#þÛ‰Sü‰…¸‡CщDøÃC ¡ê€Ø(Á ùAšÒMx äaÊ,Ô„<%΅Ф2•¿b<ÀøáÃ>p€ª{ÖIÁ)å˜JsXÝ!Ó@E*¤!P˜ °pˆ.J ©ãcr‚ÏñÑ„Ÿ‡À:#ÐDÉá°m†ÕT'ß„6)£Ëï‰l¤&-iwC/n?¿{Ý?IÏÉÍ,ULÁ fƒ çÛâ–ç*æ3ÕÍs>ªžÿ|SC/ú¤’¾ô$}º²QoÿyÐF‰fÙeò® ÔØsWýíÝéú. ”²»¯ý”ƒïÑáÇÒ3®ïµØû×§,>Á©@KlÓ—âT7ë±~ö«†ýôä¹<*ís›÷LþîÕúчjóOJŸÜ ?¹ÒJ>§Á/}í/Ôü´ïõÁÒï›xu!%|°·S5TD¥z‘¦{ìÇP;õ~7æ}ôÇWPVâçRH¿GÓ€RæãÇä·úw4¨O§·DÇÇz°öUÉ–€ç–‚¬w‚*hO28ƒ½…€ÄfƒWƒ:xG<؃[ôƒ@xEB8„ST„FøDWt7^!±|–„„ƒJV|0he †§vhZxSfêeqfeƒi‰&…ßF…›c…Î¥R¼µa:Ã7{æjädkV‡!¶ièe†g±„ÿç†5ScØ8_ö}Óço…[[ØV_¨‡J†Üæ>P(I²ÇˆYÿ„”(D–x‰>”‰mø„ÉtkÕÅ`ö…Lć<‡ydvvV¢†x€öc°è©…fjUg_¨aŒæ…|¶‹(–Wh‹.¦cRĉ€9®eVóukgCIñ7bÞŒeX6£f‘Ó·H†ÌèHÕcí„…w—Ä{Žhn'4‰Zv…Â8ƒÄ¨‰3´ŽìCÅ…¯^óè„xõHkfbUŠøØd×5ŽØÃ0î÷6Òõ‡’ãiÞåŒiÖ-z†ˆžgä4srºèvˆŒa˜Zõ5‘rÆ ö ÙŠÝ(èxdB–diÈ Ê(j+cŒ$Fh¦+`¦gL˜(±j™fw¨2>Õ“jsX†q“Œ´è7Ô(4Zòg•“Aù&îH5þ85‘8æxSy"OùŽ,”•Z‰BñX8W©0ж aI÷˜\=•ž(AÉAby{j……ù!WÒØ†é¸å‘¦ÒgC¥‘I/~¹ˆ ŒŸ¶“¿È‹‚yX\Ø|i‡vù†9eꢗø+m9:n6”t ‘B5†y˜j0y“„Y-£”mX£ö;öµ¡I† Y—ïWcΓ‡€é/•C€36ˆ˜Ö9µ‡—)•È9j9BeIYÁõ›])n\™œ#ÿô•vg5N†‡òX™ÊŠÌ5œh™¤˜&I{Å™m) i9ˆ©—¹f€‰—šµŒƒöùWÆ;†×g½¨õQˆ¼‰‘lVïYŸÉ—GÉ‘DI<øyfùqžØùÈÉ’†ù†¶ùcêùœz7–ܸcÝiŸ‰—޹xE‰Œ)F’…µŸ¬˜—~ƆM)—L[É¢§I<V›ñù±œÔùD4J9êe šná9lUÈœñÖ 4;‘Ag=z–h¾×`I*Ž?Ú‚ãI–3Ö3ìµi©—¸H¢¹Ø˜{£˜;6[§&ˆZV 6Š G¤ºÃ†ò™i¾È¦°i{gjIšmK*¡'†c¹¥ÅØ/@j§¦d0;ê jp‚*¤Ðf£ŠjAŒÚ¨ô¨ A’:©L”¨– l•š©´©œ E˜ú©¸æ©¢ @¤ZªT]ª¨jd§ºªôÓª®ŠEª«À«´z>¶z«å“«º>¼Ú«Üó«Àª=Â:¬ÕS¬Æ O³š¬·¬Ì zÎú¬£­ÒjzÔZ­©¥ÛFŽØzUÈÚ­ó­àŠO×:®4³X®æzƒÚZn™®þ$®îÊOè¯v¯ôj?ëºn÷ª~óº¯Vd¯þú'°}2°ë?ýz°Kd° ë” Û°FİëT;±?$±K$›±•!q ¡ ÕV±@_„x. 'ËN—¯PW²'Äw°uð tð # ³«wƒ$" +wsD !ªÔ!@´ø ‚$³Ów GI·œÐ³ÿ54d+.§rH»!Ÿ>OêNT @@  /ûµ*ùˆÑ) u¹0HqT¶Qd[Ïð`Š—HiE˜w›Ü顉×H}§w‰+x0C¹‰×i˜ ¹Œwwi #…ÓòÌ òàGªªr³$J r§ñ ¸Ðº`Ø`;` ¤` ø@ÃDGØà´8·¦P¼ªjK¡uކç¡Kš|¹`éwÓ»¼™d½Œ×ihÃaŽR¹¤A ÑÄQ±0é@±MQNçdQäK+7wV>H087$@0ª@MÀ PÀø0™ø€gÐ À Nf`Ngà ìD²õÛB³’, Á­¼°S•·Ü®æ]^æ\ŠÚù9‡Ja×)åïŒæ†ªŠáµmNà rXã= çŒåå "Zë\2 ú¢…Γrí7gŠË€/Œž”<3Ÿ†n9[M¦euŒÜ’Í8yà[ýN€ž1«éš"êä´xá]zbðY¥Ú[ª>ŠÀX§±¸ã#ÉZ¨Î|rN¥!)êšÉf“³¡ ¹ìw‹uvgí1â#†á%‘s™å ôédê¤&¢rYê:¾2³~”¹8ì¯Þ§«µ…Wªë³~áˆÝ¯½àäYàZj §39éÚñš!ºŸÙ¦ô§Þx@’×xæcÊ^ï‚å¥êjÙ]Þ´¦áE1<ÿxž„ÐnæÉ}ëÜæNÛèñîÓðÝ¿ÒþÝ’9ÏV–S‰eÂéçè3ñÆ-æ¦ð´ƒj‘c¤k9ßéæk.‰Ž\í-Ïî«èeá÷]Ù|/]×c͛Ǿé˜öœŸH>é”ÞÊÐÜŒ[º§þ]oèƒ9̱˜7ñž×q•éLß_=êÖ®ŠÅ¾"¹˜ã…¥2iêU:“õÙŸHß“N9cйíaÚõ ™û•ÞSöÑÞßšÉgú¬žÎ{â‹6äì.‘l%á÷ÉìNþžð%¹ÓþøEÙ÷è™íJù#šØ]…òËí «>šw3£ÉnϤqOî I˜Ÿh¾Nè@ãòÓØZ§þ˜•-J)èµnòlÿñÌÑïô–®ø•ŽÏ센~ïª,ïN‡PßôŠØË2Ê¡~¥ŠréÅ.§îï)žž­¬ädåìmaüާþ~Bü×Ûã7®„Ÿñ”¬òöñõ¿ÿOà@‚ D˜PáB† >„q -|-VÄH±ÈÆøŠxùQà&|$%žD™RåJ–-]¾„SæLš5mÞÄ™âEž=rü4ä@’&u]R¦•"|Ú4gT©U©UzU¦Öªø¸v=ÙSìOŽC…Ž, 'Õ§_#ºE ×ëÒƒrÕÚUˆWíVºíêuÚ—&ข÷îô9¨PÆDÓžùµmÖÀ”ÿ'̺4seÊ1÷ÍL÷òÜÏ' fÛy®j‚£W­5hË´µÆ†º9÷UÝOûN½ølÓ²y‡ÞmÜvíà§£"/MÜpëçÊ£O÷ üºöÛØ!+Ûs±Yh~‡Ù›ôçä~YW§^WvîõìÝ×_ïúuÒÙñãOí?öÌk:® N»úôì?9‹OAaóN?/ŒÀù²pÀ ½Cï ð|¯1‘Ò:/D¾4´o?í{ÐÃ-„»þH‹Í¹¥Ûl ÕËqC g4°È¬qAÑhc1Æè~\·îˆÄo8è²cñµ¿„lîCñ¢É3ïK—(Ìò¸¼ÿÑ=&eô¯?6«¼K:›lHìœäÓHßÌPýòN/L2C åô“¿éÄK5å3s¡01³±2+eéJ{dÍJEkKˆÂ˦ÜOÇ]m}òQP‹ÃÔ`i¥/ÍYK…°CC9èR€"ïÄ¢ Å6¯G³­‰0n¿wÛ†‚"oC”–¬ŽLt,Åpß…7^y祷^‡ÒÍt¨Míå·_ÿ8àšð¥–Ý}F8a…fX^‚Ë2ņ'¦¸b‹/ÆéáuÉ”ãµÊíäJÏõ¸äÁ@&¹Îï4f×ÚÇf°%¹¶„r[‘‡å%]Í.ežíìÊÛ”}ž7R‰zÿ/–«maÉŒ{ñØuÐ@[C–3ç ÄQRådeuçE¥ok-{•ñ·í’ûºHæ¼&UÕÕV™WøÔÜSÐåjå²ÕZùû=¿•N¬ð|ÏêfÁãd\åÆ)½úOÇ“uÒÆ#w·ë! ¥tN 9‡“C`qž9ÔDOßsÆÏMo3Õ•}×£ }åÂÅ+˜ãkæ<È;“töÕ^+Ç­ÎÊ5—\Y8þiå›§}îÁ•|VJ4ÉN~ÑŸÛò-Ö±Çî«+^ÏŸ³DÞòÌÁZ:âÝFsÒ¤Ó§ÔÑŸÅ9òüé¯Q~äQÏÙó~׺9.x " ëV·@ùDI\¨â÷gÿ¾õŬw­;Lût÷2øõ¦xkÃù|•·ª5ÐmpV¹@75ïý¯mÃ+ÛªDˆ9á®="¬ÚÞR>ßÍP…DÎÓÂÇ@.‹TÉÚ!úŽh»K®<‰›ÒLF1)B«Š»â—4¨)(NÑ‹_cíµE}uQŒgDcÕ¨2"î}`\ÖÈn¦¸I$‹kÄcBÚøÄ7z‘dw<ßü°òC$Š®‚sœœ¹™GFÞëv$Êûè/y0l]:[%Y÷6J„›dÒ Uœ\‘òCÖKÐôjH«˜í¯‘¯DL#YÆIöË©dT±ryHêI.x·ŒÞ}œ9ôÕÌ—:ÛÞ‰ Kf¹Fd.s—-w‰(ÖÏ‚Á¤¦’Ê'ÁeÊÍVÖ[¥ì„EBúЀ4$_!›¹N†<³it ]/ý×Kõi/tâN!…B`QJ™»&éÅ?n ’%ˆ;†Å¸­Šo|Ao…6-eÏ„Ý!– ½'ê¢ÒËš›ZèOW"Ô¤ 5£Iï‚L•âS¥/Mè#Å4K7r¦7ÅiN&SLÑ”6ÕiP…:Tô ´–DEjR•j£u©O…jTÚÓiAlƒÑ”jVµºÕhQU]-{'WÅ:V¨6«dEkZ_jVµ¶Õ­*eë[å:×FÆ•®wÅkíšW¾öÕb{õk`+0ÀÖ°‡Wa»XÆbK±…ld!óXÉVÖ²H¡ìe5»Y™d–³Ÿ-J<ZÒ–<^u"4M»ZÖ¶µ>Umke;Û®ÊÒª’t*muûÙÑîÖ·íío…{~Øà׸~-îq•{×ä.×¹nmîs¥KÖèN׺Z­îuµûÔìn×»DíîwÅ›ÓðŽ×¼p}ími™Ûó¶¼éÝnÏê^ú’¾`]h}õk_ÛÆw½óÝo€ÙY^Œ6p‚K†`7¸b vp„a W8`¶p†ù…a wx§}ýÅoJ=<â‰q˜Ä'vì}™–_·˜°*v{]<ã1Âøª4Æ1ÀLœcKeÇ=²N~d"ÌÆò-r’¹5d%7™%Lvr”§ â‹XÊWn ”±¼åÓR9Æær˜g¢e1—Ù«UõoMÁlf6«„ÌmÞò›á|e9Ï9Êu¶s“Rñœç$ï™ÏDöóŸhAó˜Ð…Æñ¡=cE/ºÅvô‰!éOšÒ¶ô¥3œiMW˜ÓŽð§AÝ`Q:Á¥6uQꯚÕúuõ«ékY·ÿ—Öµ6ï­q-^]ïÚ»½öµvlë›ØÒ5ö±›le+—ÙÍ6-\iOÛ·Õ¶¶`ã1o dÛSæijÚí7B ÈH ¶ÉWp„øø„60B"ê^÷[ÝQ<à#0ˆ@Ú>$Žôòóíà;Ä2 `‹1d‹0Ľü_œÌcá­µÇ;¶aŒG(âØÃ.@€0‚ŠpD$’Ñ zƒiãj~5R€Ä&@=B.DC0@ ”àø(ÁÇ+ˉ=èaå`°DºoþÓ5ム%{ L Ž„À"{Ò ”À^©:˜^RàƒéIzÔ¥Y<À*'2 Ñn=¶™GÛCPSˆ½íI| D‚@£ÒÈ…,hP‚(4} %ÈBâÏ®ö°[cïˆ%&1‡8``À$9ÿû ^ø¹Ú>ŠÅ‹ ƒ¼ÁZiœâ"KvòŒß ¾ëƵS²*Ê÷‹ ½ý¥^rö¹À9dÿú´O8’¢‹ZÀ;Ø Q„K4ß~] ÿÏ­‘£°™þ5Ó½áW¨ÿ×AÓ€¿àó”êÀš8y(€•È,Ýû9g;³sˆP;Ð;jè,S˜…jXP¸|˜‡öÇgÐ-PÐ*X ê‹?ÔpÁýs²¿ü?Ÿèó?¬y¿×áÁä?ú“A¢2o¡,¶Ó=õ3É;;„ØÇ£|@8TˆºHP‡¨+X€º8Wˆ:ÿˆÂnÂ$@êƒAT#ÐÂ!¤?VÒÁçûÁ8t>!ŒÃ<ÄÃ4Àïc£Úc1…p‚*€‚/ ³;0+](‡ŸÃ‡,yx…¤›ˆ%0ˆŸ£RH:ð„)x†ô"ò *>ŠjÇÂ?ÄÁVäè[¢®ážš›¤J!¤y‚  &À$8‚ ˜jP… c¤cć À‡3H^øi<i\‡^@ˆäJä¼¶#Ù=?ü¬8JÄš€Rˆ&0&€FX… X…xÆzœ7H|Pƒ`ÈÇ|ŒF5ØF@´²ƒð„Ÿ»k8=åšr‡wŒˆ78=È£JÈ÷ŠÜ¬‹ÄÈËJ—€;aolserver4-4.5.1/docs/intro/tcl2k/html/img033.gif0000644000175000017500000002626207363640503021204 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx<Ìëß‹yõ:ü»‘°Fà gEX¢b–žŒ·g侘‡ÂmJKîXv}¦,xoe¿§%—6]šñiÅ—U7NœšõàÔ®WÃ~]ûvëÞ±=^&í;ânÁ±ƒ½uóÇÌu÷vn»:uˆÊ3kw¸y©gº C«ÿŒ>›utóå3Ǽ6ùéËß³?o]}åÜI¯¯½øÇ÷ðõ€èé }ûù§ ‚ý5H›tϵGÞvZÔMß}VV…vèᇠ†ÈÒ…5‰^]<‰¨âŠ,¶èbf$†eÓgá¥øâ8æ¨ãŽ+ÅØ™‰ŠÇãDiä>fH׆f8ÚrÚ=™Ñ8R9%rÍMdåNfù–CmI›QI¹¤(Ñw˜tcj f|Yß}¿MˆÚšx&å·ؘ{l¶Ù'Ÿž×žE ê9g ¾å¡š~Fg£û ({¦ J(Ÿ‡rtiŸÓMš)‚³‰©R™3žÈ䑬 ej«Ueð·’¬­¢zS6bõªp^Ž´ë ¦ø«HÃòJQ±líyl¯! +R¶B¥*šWuzg—¡¾)(¡Ö⦗•¼m h¶š^á²ä–Ëà¦nË)–vB9êºìŽË¬»ÜÞûi›JV®·‘Šª®°»Íû¯¶˜lp¿§ræð©âš­&½JqRsèì³¾ÞËqFÑžXãÇ$—lòÉD…L#Š."gð¼û…^Ÿ:ªåËùšû› ‡{%¼üšìÎïzŒ©¤ûŒ4š,s£êò, ¶ÖLu¯l"ͳ—tý.°£ÆÌï›N·¤ò´¹¢<«Ñ®²­öÆjÇÿ}¶Äq×m÷ÝxG4÷™iw(lØD󯬷;SôРzÝtáW¾µ¿‰5èóÓcZ‘Ö‘#¾k׈ý ewø·uFýµÖ“—­0» +iÏU ÔÞRQ›÷í¸/›;‹´“e»ßÃݬÛz%|‹ÇË{eE¿&óó¬3üàÄCÿSï õ ü¦©Çy®é­‹›5׊§ý‚«Ko=äé‡Núââ_ºïÂï'þ¼üõWûëXÏóäêqœ˜T—ØIï{šyg”T;íí‡°72 Zð‚Ä Y–Án§z¬áÉ6¸*š-"Î`2'³Ö<Í…”ûÖ ÷B¹’¤e¹$üÝ w¨–Ö$>džq*†»:‡Hì!Þ‚¨##&‘GLd‘¿ÃVqp3´" ïRDzÇL |â¬X(ñŒdlÚ±~(Æ6¦Å‰nŒãåØ01ÐwG¤c“žÅ(¶¥wƒ£é«BVÉu$!ÇH¬“ò´›"™’G– \úʑѨäGM’’'±$ɰÈF-BR^XÛ¢Ú>Y¡8™ÒŒW ,³HC¨¹t£åØI.aÿ•‹<Þ&ÅË»õ²V^ÄñJbqífªœá1¡hÌ_&³Dã[3Ç£¨5înšÈ³¦—™½mV‘æ8Ìtî2’î Ñ:‹ÔÎVš1rº™%>£‰,¢Q†l““@•…FÙÄó U©'B§„Î…:4eהѭ´ùЊZôE ½¨F7Ú—Œrô£ íŠGCJÒ’&e¤&M©J¯QˆM4Œ+©L+B ‡ì¡!eh"‚Œ 4$AÐBDv‚+8¤!0A ²Ô™:5ƒv¸Ã(©"Xj ”Z‚W|(Ÿ1Äcj貂u”ÞôÔ=3—J] q¬ý„&UÊP c†ÍðáOñq˜@&ÀR•:‘.l5™BJ`|¬€15²„ˆ@øÁlp±0Omè97:Lì‚ F`Âάb­˜>–ÙRiÀ‡‚q|ä¶ k`ƒDöÚâw¸-½c9ËÜæ‚,¹ä¬ s§K݇·ºØ-ÿéu³Ë]Žn÷g?SV¡ ¯Ï%ŠTÊÉŽ|¬“›ñ–Ê^âåËyTl±·ku/zÑK½€âWB畯€!D/Jé”ßu¦ìÐÅàø ÏQÞ â€U£ ö¢ï:Ð!Ü|ÒD°•nà qH–b§Ä&Ö0Š·™àîN7Âm±‹gcèf¦4ÎqJe¬ã/’Ç>² ™«‘i3›Òò?ËïÉè2P¼ö„ßBñpåÑï| Ì+Ñ—¼[Ko–hÀËP¸dT••<¬5›Ï|îeóúÌfã—2“+é²pô˜­þ‘™­ÓSŸòØ7µ—…Š{jNtÂhHbBÓŠÏû Îÿú7Ä»’u®YtÎÄ÷9ð šÓˆît¡ãê¼·ÔYZt²ª+JäJ¦y`ýuš›½œik¡LoŽ´Î<*¿šËKÔšÝuàÄa¹Së-6ÔÚÅæ?‡“Œ;ö±5÷ë ®RIãµ{ ×¹2ÏÙÔã¼ñ·2?úÖ2Øt%`º·´dúÁÓ܆k·¿&éƒeûÝçÖôÿTÇ=M»ÛÓ¡Æ·['pL׋®qwºF h˜•ûÐø I«WMqN¼+¶†r}©â¬`ñ³b)tÙ  M¤æ­sQOæ7”àVê‰\|1ºf°ºóó…ŸÏ¼LÞ÷²‡?ÿµ{äÅsòž×í/—p\@WyÀU^~nxï~9ý¨¾ª÷èÔ"ã`Å·žÎ—W „,WÜÚ‚òŸ4¯ážbò ItŒåo€Hþ¶›8>O‰c}e%ôPÙ=7ôOãoÒO‡5ùÖ®ó¥G=éw:Àç®p\W¯ð¬zŸWŽOÆYÝsï°òš¾isZ`{gi¸í¼\®›ÁÿwG›qÙxý¸ï|Çß_X¾\ëÏtȦtÄýNïNÛ ÂR£T·ÿfìáëÞóô¶-ÅFI]YÂßtäÿ•d'ƒþϳK}ªY÷³„í¸k9ÅÿÜÑ£š¢§Oÿ ½®~Mv_žï_ûÛ¢ø&á6LSçOuÎ1‚ü×§ôV°$rl$VXôOÐg€'HÚ‡~PHVþdpiK¯1p!¤+k%WXwö÷!¸P!·D¹E'+#(€áw(Vûä]ˆcNõ•v禀,ÈC+¸ƒ'ZR„&Óƒ>HnB¨"¢´J38n3•„ã„AOr³„¥×„G¸w\Vˆ„ù¶|•–HT(]õG~—ã'_øq*$……+†%C„qä†ogkH‡]d~Y—wµ9XE]˜7!è7âtMÊ%†2Å|h¸{uˆ3ˆÝQˆZg…iemEHLÿ‡n$‡•¸…wHˆÑ‰_ʼn–(Š[hƒŸåkD†=ƈ† Sš¸‰„‰²X‹ B‹¶˜‹‚‹ºØ‹äŠzè‹Â¨‚À¨CÃxŒD‹ȸŒ[¡ŒÌøŒQ÷à‚Ð /`ð  ¥\… %°U[õ[åW&ÐòàWYÐTøÀUBÐ9Xúøà~pðÐõ”¥TeéÓ€ ©  &°àºP¡ ø0J÷ˆM€!` ó˜Tù8vÑd€k6¯Ôo—¤K6¨…úÄhrƒjfKø—F1ÈC¦?xÄ•309°HéΘ”L)zž(nUØ”R9AŘGSy•l±”X¹•#¡•\ù•á•`9–å÷”¤gˆd™–ÍÿX•@±e=´9ʆ(Γ‚fW^Ö$Z¦Š¢V\óG—Z!f½”1~i¢——wþÅŠ|É–wa‡{95A©g)öa&ý…b¶ Çai¯Ç™@d_–kö`•i™"Vššùeüqb¨IH´ø^ý2‹B™¾7y_Â9w ™˜i›F›æ6b )jÏf'ɱ1c6š;Çš©‰œô5˜ǘ,¹›Ïô˜¾©œºÉà—™{©ªYb’)™¿y˜G–›½)oŒÑš¸‡t÷ŜͩžË¹bÍ$–j9J†¹;ò9Ÿ%ç–,øÙŸ ÅŸþ d Z AqŸ –š \¹  Š•ú S¡íÚ”je«©tJÔšq©qõ ~yâLЏxê„}®6¢Ñ)—ЇxgŒ“KÝ£;°çO":öö˜Ÿ¦¢j7š™*†ad¦|(*wÄš2o¿©žîS²ÇoMJ™ê6Új§ÁZ}‰'tízª¾š¯¨J¢%§ù_û­‘J`p@І¤•:},ëx§lr©øò$Z g˜4²†J¦>·4BºmŠªªš`{§=;¤>E ká«Jû´G¡ŸÈ“¬OHµ*Òª· X›µÌÿ¸µ v² ª£ã6ˆhC½ªvešŸ¦z¢³£m˪L‹gv 9Ïš¨‘rk »{óåk¡æ¯Hêw^#'y‹|x"twy»†hë…x{°Mf=\:°}ç··.…§¸`[^ûNµ$¨„;m([›éyad}DŠ•{}˜C@ûºr5—O”K¦Ç·›W®-ä¬éV4ë y Æ?{º@J¸ £»p»¬HGN+g”¼:¶¹\;ŒÎû¼¾½n»<ÀI¢oK˜ƒW—¦Z¶ês¸¦Ã;\‹> raÒI¾Ê¼tr û«bž;§J µå[¼ÿfy~<Á*,4§Ê¯­÷À,²˜+›YlÀK\®Kº¤À±ÃÚšy’˨“;©H»_qDK¹Œº½ ÁLõ«®Gp[oœ—÷e¦â‚n'\»ü8f º±·w¥úȺWª?7»eo‘Ü{´Û{¥ä> *°µw¥ALvVKw˜ÚÄ€è˜rdÄ-%QT¼Ç?Ë1ʲ¼ƒ´œ ¥Ü¹ÜQq[ËE±ËA·L–Àœ,—ØË¾|Š¢ÑÉø‹ µȜ̖1ÍlõJeC·dÍu¥†4ÌøYÌMÛÍÑ,Í¿|¨{£õ‡Ü¬„z•ä\-è|“—Æ-ê\P[͉8b’4Îuî´ªç\ŠÎ †íŒ–%r ˆ“ª4òœp~+¬8L. WÙÌH³:Åyè¢ï¼6•†˜ƒ˜V 8ÑfÛÑxãÍ39ŠÏ<‰GÂʺ,ÐÚÒÔ¤OجE}V‘¹ÍƒÓ<ÈÏM! ýÐ8­Î%Óq3L?"ÿFm2-M[TÑ:ÔèëÓR­Òœû"ÎLŒýŠUÝ,W(O_Í1K½ŒY-ˆë<„TÍQe=Óú<€WÍÎÝ¢V Rk½#u Ôaý,c Ñy]r}mÖmMÐq]«5ø×3MJmåKNòq>]@äÍ5äD~\F~ä‹YãJ^¡IÞäNõäP.SR>å+UåV¾cžåR‰å\.GâàÇàÚ–[þåêwSø€1à  æ|€gŽæéÇw°uð tð fÎä±U" éð¨@ŽðèX@R" X …Žê Ut.S pR5 À ÿ>ØÌ ç8މîKþD-N€.V @@  rèÑ) ¹°UIUêQ¤^Ï`Ú¦HPƒfÏ6ùÜ ÝO0¨Ð®”Ø: 3gdá5áãgá(! À ’ VÍã¸X¡ãøWQ¯€ ¡ &€ &°¦@ ¦€4°YL… K` þ.XA—ý’ø”-4¼)ýC5™o ïÔ­Ïâ‚=釩޹+Ô€ZLà5 #²å¼å[RÚ–EŽ+yé3†€IpI@0#  «5¬0<#€hp½ ¹e½u¾‰€\¸Îòi-+ÓöÍôQŸõ.õL#UÏÕXß T•aõÞõH©õ`ïQOöYÿõg‰öW¯öZËö¯|b÷ciöm_÷vÿ•x?÷aÏõ{¿ö²õiøÏØ÷Y§÷†•ˆÿô€¿øúØø'¢øo¡rŸø_ù]{ùŽ_ø!ä´+¾‡Ê}åÿœ?ù™ÿ¢Ò´Á¢¾à•v0†q·EF<·úâÊ\’ÿ”ÏaÒ®úÞûâ)¥/=žn—˜9iû3–ût±û»Ú°Ê©Äo‡¨ÝMáEü“¹m2œd F‡)X˜Ì |Ú¿¥Ø™ÔÏý|'æ˜ÓOÊÌrK®v‹ª_ÆÚJÜp2´;wïé@ >‚ÄgB… tQ¢Cƒ.dQaÄ/RôØ1#F‹#I–äØbˆ)UnT RcÈ—&KÞÄ™SçNž=}þŠ–P¢C-’4)¾"L6%¸ ŸÔ ;7ÒŒÙò V™CbõÈ•«Å«+Ç~y2ÿëG­Ϧm[•ìʸ#íÖíºÖ+Ý›eÕê,‘¦X³tÑþ+WñbÆ…|t¨Ò¥M-;:õ±Î”~9&¼ìV¾ q~æ+n^¶yß’ýW1èÁ«ezn½W¶ÕÚjc_e}7·jÄ©7Gž¼±äÈH)?…ž™ªò¹n œúp]»y/|-Ãlƒé4y¬Iÿ¼‡œï0sd²ªßtS±ÈŒˆL Âo#OI"=\>$[3LÇ^„,Fè ¤‘?à$té6Ù‚„0Ô¬tÁ6Ï;Ò>ÒŠ£O:Ù\sDM2NBs 4Ë÷$O¯y QLI'ˆÌ£Ì”ª4)å´SO?5TQAµTI-uN©31ÛÔTW_…5VYÁÄmV[7Cu²W5ðV_6Xa‡%ö§\T5S„¤ª±XgŸ…6Zi§EîXLym•Zm·å¶[oƒµvW{ý¶\sÏE7]êÂM[fÕ…7^y祗ÝÊÜÕŒ^}÷å·ßaíUVÓwý%¸`ƒžàUÎa‡†8â ÿV–\‰/Æ8cˆ)Æ·Y?9du97[‘OF9åhIžq`•_†9æYYFÓe™oÆ9ç„›ƒQÜ–Ö9h¡‡>ŽfVm&:i¥—ÖÉh†=f:j©•vzY §†YAD'ÔZ$z»^¬¢Hìjy.Ó皯õÎZ ¶,Þä*,L³÷ Û:Îþ”öG É֛Ųù>ÕkKFºíÑð†ÛY÷ ý©nZ g|¶Àû¢üY¿÷#mò¹Å¬ÚbäÆÖªq¯/4P¿^êÜôÕ{ì:v+å†}õ×åVvÜig]=È·†“÷Þu[ø¶‚gP%;³&á«ÄñNàZóõá‰gþT´/Uûh¶ÿ3~kROÏÎôñË?}¯Û3_ü½}ÚqJùI•ÜõÍgó÷?¯œüÒÉgŸúä¿Ö/~ó;Ý×w?øùˆ~Åñ_ëÆw7\m/U÷BÜ÷÷;!UÏNíSžò5%èip=Qõêw=®/ \Ïîþ§j…%” ßô¶Ö5¥[!“‡¿ËÐ}DôŸH6ç™"¶(t&³“˜ÃùÉΈI4„´&ÅÇ1Pˆ.œáÛ—Ãëè/ŒXäŸä–è@þ± Œg”“_ˆ@*r‘pË µ˜¹Ç<1q:ÑÛt˜(&îæ7&œ —ÄA’…b´_î¨w»ðùÐlÏcc­5HBv©N ²Ïñzh?:btH ï©;>ŽÉ‚ºjW¡†µrI‘–¶_+ååG ÒÒ[¸”0ãÃɇñr–¾Df2AfLe6Ó™ÿc樄))[ÚÑSÓl#û¦l>(ÑTuº)@žPñoýS“.xÎI3”syã0³)&wjóUà U=WTM>êÓIêDá)åÏ+¢RpÍerº|‚J‘eëvÇ¡KÓR=Ï‘œhEëäÒ‚Nì•ÈÂàÏŽ9P=BÔ¨½ãÏ'Á‹.Ð…£$% åhÏ NNu \É©!–rKÝãS›ˆF–‚f$«!“ŠÊÔ‰Õ­ö\ÎO'ÔRéª5â »U%&©b]ÑQ¯Z„”üßÿž*Að€ôŒ)ÕjSÙ*H°V¶“wìJ!Yض–ˆ4­ áº÷´ºÊ‘tMª•:(«Ô©Ut`f_ªÆ¢‚«-'“¼([#F6¬œ¥œY=»Õ©ž³ª´}©k«ÊŸ†~Ц ÊrM©×«f5µ:âëS:<ಒ¥ŠÍž%Õ:Ó‡~r»-í¢NÅ›\:¥ßµ!wˆ<“6ö£ºiå:Z« õU Å\@m`WXbÙ~cI×_!.ðv¹åà‡Qø\Íõf†5¼/ oØÃ¾°‚ƒº6ÿ‚ØÄ'†V‡Q¼b KÅ-Žâû,,àë‹ 5î©€™+â€õ÷—Å…ð:‰ÿúO«Dœ­t˃áz. Þx‡îSmù¦éà;ny|âÚœZ^äB—C?Ìò" H#ã‘Q‡b]í¤ÔÃ$ã-Ìj^scûªVØ¢¹†Ebó!á|#éÁÎÌ1äêœc R´ZKš]æãm1•Îpu[ÉX]röõ`]nå¢,¥ÖJuÈìu½RÅ’ I}Ëu4–Ž*åAǪc>jçÖ¨êÇU´ &ñ„óKÃW} îí^CØkœR–°þ3(UÚd9§’£zu³‘5j_œڻ¸Õa<çX7T7;ªÈv*IeEW ŠÐv€ÍZÀL®u³nö¶¥a‹Ëi¿µJVw»c-j(©Æ¶œa }Xw‘Û'6¶žg8f:´ÿœk®©ÅîU©&Ò{oï…EDÛÛàÍm/NíE¦k/È…Øgén™å?t“M,nò˜¤Îå˜æx¼§­åp“zv!÷­Gì½ Ç-YuÆŽc•»cL‡zÔgætYJÝêWU•±¾u®'Zè=]×Å>öÂAœ¿aW‚—ìÒ¾VÇ`FèÿtB˜i=n™›²°Gwº=¹?M.³5 Sæ%ŸœžŸûXµ}Djò½hTgð´Ê¨å7›¯•%ŸÝ<+õFÖ8 -¥˜{°ŒÒ¦¶(c*":cÞ½;r9~­J”v6öÖÅ^IïæÅÜϦO…í,+º]ÞìmÿõpG¿|”:ݲv·Vß½|‡+ßÙw[¸¤u®ï¾šú×ÛÁ§pð‹ˆ7¸ãy2ü?úµGþ¥Ÿüvc<¨c—£~™ÒŸ¤A^-è£1îƒ?«¶$ƒ½½8b‹´H³¾´(ÎË<böó•Î{?¿‹?O3*ñëÀñ*îû«ãâ? œÀÈÁžÀN3Áò{§ÚX­œc¾ØK.ó“AR"ÁLºä°À[!4Ä 3ÅÛ)ô½I: d§•Ó-·+žR›"‘Ò.$d<‹ÀK9’û,=ëÚú¼_Û¾’B=Ù½ÙCª<;´Ž«@È“8²cÃZkÃ’èÁ7”Ã9ü)X:³Ò¢Ã<ÔC‹ˆÃ=,¼yq2«Á¯Ú'÷œ$œ''RC¢k4¿:¨C|D‡ ÄCDƃÄAÜÁJƒ4]Z»>œ•ÛÛ3P‚>;9#¼BÃ’¹’ó³~ÛÝk ™“ªÞ›3?EDS=AB^Búò±Z7´Yœ·ñ*E9 ¬8«¶0ñDYɾR2#é¸PÓ4UtFJ³¾ê#.ËÚ¶®²¹äsCtAËóÀ+º+æ;?më„ÛÄöRBLÿï[4´Óœ/ÃŒ?˜ƒ¶Î‹!ø"¦Í“>ì3-nô?¾‚ÅãK+"4ÈLHzÜFx«,vÃQd¤;êBC³©cTDx4·?šÇüÓ»gtÄI“?ò£µSHSËÄÇ¢H„À,ÉœA†t+p=ƒ´o4¾tŒ·c£Æ†tÇ¥[ÆXQGÊc¬—Ó¼%,ÈIª¼[¼³MZÉfÛ´Ýk“z«·+©È&½¡,Ç#¬G[4EC­ B\Ŭ¼È©Ì=šsC\D<¼˜µãÀc;Ñ;¬Ë ôü„1¼Ô˾<1¾ôËÀÜ0ÀÌÂt&Â4ÌÄô%ÄTÌÆŒÆtLƒQ¿Z‚¦¶d´ÈÌ}šÉü1‘LÌ”¸l¿”éLÏTÍü¥—MÒ¬%ÓÔµ˜IMÕ›Nš žÞ*ÐüÔˆÀSÐþ¼ÐØ4µç¤F¥´/²°Í­M–ÓO‰Ñ—‰J¤Ë­ÙLÿì›ÅNŽÜ°û«Ð+“Å ¥Ð‹,=%t±Ñh9ÒËÑ^Ò°6óµõ9”7ÑPéÏç,˜$MQàìPþLQ ÅÍŒyÑ´“ё˫êäñä<*Oiú'l !]©Ü NS¨ÊlϪ Ñ Ý+1 )5==êœãôPBÅÑ;¼<õÍqjNHQ¶—CÓAÍÒ B™0ŽÍ•NÅ»Óð—;ëOݘ%-º KS"•Ô¬˜Îâ¤Óš+RE-K…Q …Î T> ½IϨ¡Ñ<„U1ÍÔà“9ÖÓ’B¡IÓ9‘69ÅÒòUWm¦T µÒ5ÓfuÖd‚Ö(ìÒ½è ]-MÖàÅÏ­•YäŒÝa‘×d¥Þ ePð¥[éýÕ¼…Ÿå½Ò×UÏëô]Ó:Æ•Du5R­Ö÷UÜøU_¨=0÷%Ýx„_¨“ß {Kÿ]ZƒõZeÊ;”äÜaß 4`ÄE`Ì}¦"õ\ÝU.àºë^Rå›é%^ÄÝ FÍþ°@•\ÃE߈y`Œ`ËM\&E±ÁÃT°laï%ázýß”a;WM|^ î_Æßf:M_øÌaÑ4aVË"Sâ!.á"ÕÃÛâÝI)ÞÎnŽËý]ýÝ]ÝãÙ1&ã26ã3îYæâž™à/vâîÃbûÖ^™&!>âýÍS:VR*vW<Q=~–æÅ™^W@vA¾Bžã5ÞN›6à;Ö^™5äbAd™Qdgdb©dð‘ܞ܋Nv^âíÜíå“ÙdN¦UðýÑF]%×8ÝXí\~ØL¾X>ž¸m=Ua=ÕTÅ8,‘WP½MÈñÒaCãdVæefæfvæg†fb¾ßvÏ]fÚ5QZUa2uRúÕÔ³àT€5å:Öe|õãqî]jÆSsŽdtfârÞÙsvçb²c–çyF˜TÆç}}æçîèfKx&胦Fè…V …fè‡6–z†è‰v‡¦è‹†C‰Æèî‹æèÿöèÞèé‹&é’žè“Fé‡Vé•^è–v郆é˜虦é¶é›ÞçœÖéyæéžFçŸjÇŒ„ð„(êoÒ衎éF d¨ ¡fê‚à|ø Øx@Fˆhƒžj—v‡ˆÈ|Hˆ€h|胈‡ê°öË;(|†AP°…1È|XCøjuNÔ䘹ÎX{x‡m0†GP„C„=؃ €0BPGˆ„dè®n‰¦†@0 ‡‰ . (‚(À‡0ìóä„=ÐÉKˆêz¦‚î0u@ˆ0on×v(00‡T@tˆí |ˆm„pmÛ¾íÞt€ðƒÈ&0È ð)°Fˆyxî(S îçŽõ.ȇ€††\((m„(,PïäfîᶆîöL „I˜ƒ8À€¨€˜„VÿR1/ mxîQ`o¼Áb°À³3ôæFüÊÅ]*))ì\R¶ÊZ¶äR¤ŽK`9quz1]¨X€÷&náæ‰PÎÒ ÞR³ØÖ Û`­ÛÐHUþÌ`è =¥$T¶Pc=åÍ8y(€†î` 'mgnäÞ‰`nànjè, S˜…jXP¸|˜‡!LJgÐ- PÐ*P“OîÒOžÞÔòY@o]C?æc®òYu(eóÅåyÄ.YQ1çÆp —ˆùNn‹Ø…÷¦|@8T°íH‚PÛ.X¨í8W°møôyôx•U•Væß"§M%ÿwG^è¥Èð=ò)t$Íò¬[j'¨(øHnáö‰°‚Ð…r m|È‚‡Wpíø„XP‚ mz ×6 O˜‚gèÏ_Ò&¯™³ßÔeòC·ul^ßSÓôëå|‡Òœá9¹x‚  &À$8‚ ˜jP… ‡§‡Ç‡ À‡3H^ø?_‡^àCN0ïïç–udG!ż÷vþ° (…h`#`Œ'ˆU˜€U‹çù pƒ4À5 úŒWƒ‘Gï’ðÒîk@p~žr›÷‰78ƒŒNú§×z¤ì{Ýú¯çú†Y7{­?–€;aolserver4-4.5.1/docs/intro/tcl2k/html/img034.gif0000644000175000017500000002215307363640503021200 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx<Ìëß‹yõ:ü»‘°Fà gEX¢b–žŒ·g侘‡ÂmJKîXv}¦,xoe¿§%—6]šñiÅ—U7NœšõàÔ®WÃ~]ûvëÞ±=^&í;ânÁ±ƒ½uóÇÌu÷vn»:uˆÊ3kw¸y©gº C«ÿŒ>›utóå3Ǽ6ùéËß³?o]}åÜI¯¯½øÇ÷ðõ€èé }ûù§ ‚ý5H›tϵGÞvZÔMß}VV…vèᇠ†ÈÒ…5‰^]<‰¨âŠ,¶èbf$†eÓgá¥øâ8æ¨ãŽ+ÅØ™‰ŠÇãDiä>fH׆ZÑÇ^Q ¢fÒ!9 YsGf©eOI¹¤(Y –´•)¥oçHå|¿™Æ&nÞæf{E‰`c险'œhnéçŸu9ã‰LŠYv†&ªhZ‚Þ¤‹F*餔¾ÅÙ¥?úèŠðñv&a¯¹y]~È•:Ørszºgk©Šªf©ÒQ•Gjb®’+¨¦êù¦œgJéz¼öZé°5 ¡`ê¸æUËëì³T{bÐVkíµHbÊ™’R%Ûát÷ñ)¬§®éÊ[›~ÕÊk§¿áz*šqºÛ+»æb)®ª£ªŠï“fê «¹­Î' °s¦šë§¹ŠKÂÛ,¿ç.èoœ¢‹0ª&IK#ŠØ&ú°Zùj•dêº]ÈÿiŒ,¤·ìòË}©¼©Š¡ö{0nÏ«Ÿ·º·sÉþ:œ³¯ +,qÂíÆZ¦Ï«k°ÓM_Ì—¼Û¼ðÏõúw ÎøRnÕCç 6Ê/Êü%Ë0sD¶Pk§í¶Šfw‹öÛt×m÷Oq“å-‡#3muÅ&«øºE\ݬaß{óÍé0œmí°á>8Ô87Œ±cƒ+¾´Ò”º/¿éîË3凓+¸Ø%•7hsß-ûì´ô:µo·-êaòIßhÙ|ëši¢[=¹p¨×~;Ç4÷ðßõú½ænNS)ùåÅQ¸¾‡o5Ó䟵j…m¯ù€ ~:é:s/ûó…XÖnÿýøODÿÞù÷ï¿Ýû‹ÝÿHÀް€L`˨À:pX | '¨Rð‚̉¸¥7fðƒ ôCHÂrh„&L¡ قºð…Zi! gHC£ÿȰ†8ÌaKn¨Ãúp$<ü¡‡˜‘ ñˆH|ˆ“ÈÄ!.±‰PÔá£HÅN±ŠXTá³ÈÅn±‹`¼àÃHFޱŒh,àÓÈFJÃ!{hH‚‡ c#kÜH´‘]„à )ALP‚†²ˆ¬îp€$A¤ YB–àÒ ­ô.ì4`JÛ¤¡Zg¾à}R“Ÿôd'cJUrnv¨ìÞI Œq4£”Ùâ9L`˜‚$äDºPÉ8d !(9ð±<ÄÖpÈJ uà#?pH°qµ±—U2á0± & 8>l°Š ´b6øX>àI8¤jÆðqÏ6¬ ÅÒ–w¼$·DT‚y<¨BÝ–Ð…:tÅA;øÐŠöÿ¯¡Í(±0z5pNèMÊÓÔ€W <¡oLbÂU„`µŸæ†AûÏÖ|Ö.õÀë8ÀëÝI-2R‘~´8x¢)LKмûq´#¤2ßpØUÓÔÙKw²bª‚^º N:Ȫ*ê÷^µÒª^5¦ÃgG«ªR°^•8Ö9B#Z"MM£I|ªXñwT¸Ú5Qu½«^·”×½úµH}ý«`uØ’H•uðú݃Lª½ŸÑ´\D““OMº;“‘4±çCXNÓÕÁº¥°$‘Ðêç>ù‰v\ÑÂJñEm/©š¼æEºÎz–…l•‘£ÞzÛÞR ´UÓPl›‘ëÍ•{åéq·ê=µ-·²å¾mp©Ò©´JÏqQ_®û¹ÑjW–£ÕwÖµòA·OP‹jöB'¿ÁN7ºðÝÎ{‘.¥>—¸›“éHð{µ´$7}ã!%О«ÜL*§YüåNn3µÛ‚FUÖ³˜M+ç]¬a7d—MöÌ›^¿w¤«{_ÇaêEv§¨­o‰¥f_ûž~(£×z§‡Ýì¶¼™o|wܲ‡Z®Œ¹ò]Þ¹Ö-1&0ó@âájùJš,2æZ¼+Éʵ¿++œ_ã²÷ÄÅkò–Ók®¾X}² ¯”¡aÁ YèóŸžÌã:›ô…ÎÃýé‘ìÜþâ˜mH#óˆÛK2¤6¯¸:Íïb)ûbCy+xôXÃ{¾‘Õcm´ˆM¬<0WBíc³ŒÅ|éÑm÷ÌF´r-¼X.7~r~¬ªWµâ5#%ÒvÎõUp ”ò-Žp±³çâãCÏx“ÆíèÔ·57#íkÍ•÷ÌÚ¿…ÎÒˆ]žxwgjç-˜ƒ°Ûµ«•à“)yÐhäµ®×­”oO4Ü쎷‹Ô-ïzû„ÞöηJð­ï~—„ßþ8$ÝíV üà¸Ýà»q‡ð†£à¸þÞ`ŠJüâY8Æ1®ñK¼ãw8ÈCŽð‘“\àû&?¹¿S®r}³¼åö~9Ìå-ó™³»æ6×5ÎsnçóœÇ>ÿy|ƒ.ô0âD'^à„F‚¨Kb£•¬äC*ÉK4á!(/³pH|X²—fBCrðË_=‘ðà‡  øÀrLñcÍl")è%!iŽÂ;d¨H…4$ ¤ÑE Bx|Ì€@`;>šÐö˜íƒtûJ2ÛT"ÇU°mí¹[ĪҋÎõ¢Ü™qb»ÊÒ‰’¶­~ÎìcOûÜ Ò}Ÿô6’‚Ì oÿ9Ñ“ïÙå3_°Î¾_£/}½R¿úv½>ö5ªýí[ÿTÇ¿†3œ¾Õóg1zŽÏY„§UC›ÿƒÀm¿YÌßöËŸºf¦/µqyÿ4N—üfU1º‡UHUYµ3ÕUSuZˆUx€ È<!˜EVãJˆ€üRø€ i³ `£~& øUˆVm'XV¨b)(€¸_ h]rÕ;ÉUåñ.˜‚hµ€Wö@ñg+Bµ{Yehƒ3¨hÈ€2ˆ^>x/1¸‚(Ö„Dh+dåU{Ö ȃAØ€?X…Ô}Þ—<åö2fx†G!\f|S?lø|k8‡U‡vˆHx˜‡l´‡|˜np¸2(}~8ˆaTˆ†ØE)ç|„¶]øgøw~³$a‰8"øw£Çh~†iÿ²^¥…c”5[›óe^ójrV= “ZÚ–Š‚V‰ñšØ\µ¥Š²kÌkÆ0q¦‹â#Šae:£biȇ‹ø{Ýf'œÅhä×dA5eÇfSÿeƒ*ƒ«•h芈9~؈#ÿÚØPôàÈDÚX_,’l}v%)‘`:ø~ µsÖh‹,–Y-Œ¦‚ŽZ–)b™¥f÷h#8`Í8f—“Œ‹6eQ‚f·UŽIøŒÂÖ5ж'£ø]г8¬6.ᣋ×ÖTæÈI™Æ>™öHl;&Žè¶~î8Žps‰¼¥’0g’.éD,ip!Ò‘›Èga²zøŽ)yÄ“dDm†Õ“ÌÂE”ð˜~¶Xdiœèj0Œ¿C‹‹¶aãe“$Y!¹iëjµj¶&eJy.ü8>=“ÌH1„Vl§¸‹OET¹–S7“÷`¥F‹k‘ª(…«5‘[ÉX91ycÄÖ”6{áÀfm¿FkÝCŠ€y–ƒ‘y‚É:¡„=¢scv—ÚÆˆ"“°‹k¡‚(æ¶ot o1©r Ùš=ĤÆd³“Çs¦˜@ÙkJf›D’”n(4ž&–g 9Eœ˜Ùj4&•lieˆÓ4ÕØ–Ù•¢>Ó9iviV‹¸èl͹—WI”'´š W“ ø+´õ+›¶ƒyù“&‘UÔÐö–•Åjî9ªg3DH…‰J@V:ûé;Ι/–™¯%[Qj—ZòšþEž4ذi‰ WpuY¡¡JCÿ ™ŽK¢OiX¢?Q›Æ†“§¶¢¦ä›$*¡ÆCæ9|h¯Y_Y :˜P¹ŠôùiÒ™…ÑÙpFšpÆ£œY‹oÆ„·ÇTÕ’©H˜QZa³I’dù£U J —¹ ”Vc3—ˆi¥ñÉŸÔ£—Zs]ÙI‰‡Ù\¹l°–9BÙaý©˜Û6¥´¢ž£x¤eÙ{dÊ—¨§EÁ¡ C„Z¨.t¨¼IƒLVJ¦),Ú…'9‰¹Idö)—+ꢑ²¥úø£Ö™aRIšÚ)‹K ©L aã5•ÿžþÙ8K%VÚ•eaÉ oЧmš?œZ–“yŠüxY ¤‘*§Šižˆ¤y:¬]ùb§¥f¬óÈ…^襦ªYœ‘XÈöC¨\¥©ç£}±“ÚºBŠŠ¨)®âZBäZ®^4£rˆ®w®ìšAîú®b¤®ü#¯õ¯öºVZq¬™¯+G¯ä¯:°Û®`[°ý†¯‹@ »°ex°{¯±ñÖ°{Q{±»¯~×’»±lnçù±=—±$ t&{²C—²*]Û²óò0»2;³îU³6ûW/›³o³³<›6>û³jˆ³B›}±D[´Üw´Hû}J»´´Nk-PµÐ2µTë,V{µÔ´Z›HYÛµ“òµ`»©\;¶þW¶f[Fb›¶†²¶l;ghû¶Š·r›En[·Ú!q ¡ B·xBq„x. ƒË|DZ·®[Cìp{P b@ß𷌇õ •$" YWvD !ÀÔ! ºø ”ô¸.ÓwÀHw·œ ¹ÿ!»p4\‡u¦{#ÇÅ­‘b¼½F•™ðd`К °¸½‹¡ý*M— •4HÃ;õ ¼%ð £y{®ÊY]fzpê'­W{ø9{§çI@C¿Mú¾¯7¦­‡¿t#{~zòÌ ò0p›+ˆuÉ$J€u½ñ ¸Ðº`Ø`;` ¤` ø@ÙdHØÀºf·¦PÂÀa„ï èe÷©(ü«{Á&Ã¥W¿+{rš¿ˆ‰¿Èk$3LÔ`NLà5 #ðäúÄOR¶Ô”u¢G»þƒ€IpI@0#  é4¬0dŒŸ#€hp½ ÷dût¾PŒ‰T܇}·1 á¸u F1â»yܹ{ŒE}Œ½ñÇÈT4ÈüZÈ¿‹È‡˜[~ÜÈŽ<·Éz<ɉ Ʉ엌Éá¨É‹ÌÉ€ìÉI¤È†LÊ\É›œÊªLÉeÉ£üÊ2ÉÊ¡ìÊ´,È |Ê9˹œÉ¶ÌËáË¿üÉÁ,|ļ(*S=<@ˬ¶ÿ»ŒÌ’<‰J¡GYÍ«æ~”Ù$r…> «‰öÌÙ|D¦,Íܨ6Üô—μ#dßš“YˆFÉÎâ¼Ê±ÜÊÓZã÷ªNÏDê”ëÜ·…‚wR‚i‚¡¨; VIUe²ÁRFŠ–dùÐþÜSN5Ž5AåŒÇù<¡ŽÚƒÝiœPÒÓ8Ò¿¸jI£„SØ‚% …“…Γ†…$•ŸNɘ§yÓÌÙÂ.•Ñ.­&‚ÑÌÑçL2ȃ*øU m Û¬lÉèÏOx4ARè¬0V*}~ Ó§ù˜K¸Òfõ…F-„A}"É|<ÆùQ¯ºST¥V؉ =ÕhÔRÝTTÍÌZÔÿðÙ›c Ö}Vïü,MÖ}%nmÕŠýÖé ØÚ<×@øÕr=Ð 8¡w ×d˜ÙËœÔ-×aØl-ÖÇ,Ô³ŒT“Æ5ÈÒýÙ­„>]­^íTjí™"±ÐW]×GÛµwÛOíÙ” Ö¬ Ô£mØCÝÖ5Ó´)„@¸,M½ÜDÚÒ  ÜÐØ™=Î?ÝÛ&-ÒÉÓÈMÝ#ÚÖíÓúzÏ·|Øú‹á§ì͈z-Ð 8Ð̉S‰}ÐXÙð­Þ˜ R¿xƒÐT8a}ý¬.àƒµcýe]ÌSÒÌR›àt±à î\Á™@…­àè=ᱠ᨜ážCáþá'5â^Ü$nEÞË#žâ†ºâÃÜâ.ž¨0ÎÈ(>ãàZã¢|È8NãÿÃá7Þã&dâ,äBNBDãF~ä ”ä6^ÚLŽä:.áQîãæ-ÌOÎãUž®?.âK¾åää;æ8$æTî,.~9kæ2ÖXn^vYõ'¡ØÜà­¸°lþå·yªC©|^”Ñʨ˜j¯yåÚ,¢ÎT ’&ìß.U ╟Fj«?Eµš×rîàÌWèZNᢠ©›iŽsJÑ÷™j–%aÈÉÔ¾èi¥î£šn‡œŽØŸÞh¡.££oºèj)«ðéÙ–žé܆ê“^®±þ͆֋Jë?ɬ££ZÂn«®¥#úZa*°ÅÎÍ)E98X©ëµâ$Ù>Ü¥­èÏ=[$(¥…zí3”æ`Ëî&Tá.ïdnå›!Ë^ïaÿ>åm®ïå}ïø¬çþnáü.ð äî‚N©HïßÒy¶¨~~‹’Ú^ix듪¢+Ûå'nè£ÙŸïsîÐÙ„Ùm^øqœQ ’I‘‰f3íX`).,ÜŽÓˆðÆ|åæÌñjþ”bišXªî*j§ž£öÑn©ìPŠ\ŽY²_ä:¡ÈþìÿÙ™ËÙeÊÉ«úySGOaÃF^AʪۙܞÝlê²õ5z©€S†Ù¬7ô\&íÜ ×žŠ•r/h‰ªžØ¥Nó¤ïßÞ­‹© ÙJ4/-ÒmL c•«B:œ5•ø“SÒæ^ê6ßD O¼¯^ÛŸïÈ?ð\ÿøÄ­ö¤¯Fi/ø©OðO¯ä¨ßúÿ3úD2ëRoÍ¡ñþç™è}Î#š¸“´Ÿš¾6ÃØY¶å¢›od7)ñ /©pžû¢a”³vï¢óŽ?ßf%äÒ üÍ8Y4¿eçó3’™ÕÈ­ªÝý9þMZÂbùý]jòØÝþî~[¯ò>‚ñ,8ðà@6Lè`‰-^ÄX‘¾9~ÜXD¤H|EJž4Ip¾•]¾„SæÌ‰)JDè'D‹9R\XÑ&PŸBÖ<iƆIƒîT ÔèT©K{-*Õ Ô«T·be–iXŒ_]6½8Ô¬»Õµ7¾äZ5ê\™PãÎmËV,ѽViÆôdÉ‘& £œ¸²å_ÆŸuš7+^ž^÷rÕ©ÐgÓ¡9Sж«Ý¾~C¿åLV¯ß¯©Ó^Vítfº²YW^JsXמ;ƒö›2ãÔ’Kçå;[séÚ' †Nx$âÃ*Y:Çž¦ÚØJi#å^uòSØrcŠN>rw㯕Ãl:÷Û®«I[žú÷Nî÷íÓ®,æÜ3­.ÔŽ+¼áÒ“ë7ç¢ÿ¬°Ã&Lì:í.ÄP@ôv»j<õÐo³Ø@D¯ÃøSï=­JìлŸ6„1Fä„z­µõPô1®‡¤Ï&"Á[°9ßÄ[ï;WKÁ ƒP:’(LéºÅ¦ä²K/¿3Ì “Ë1ËD3M•dªÀÓsÍ©¤SBêN²nK8÷ä³O?ÿ4PA%´Ð>«ôÈN,+ÔÓPG…4RI'¥´RKCô#EïÌóRO?5TQG%ÕÒLC*ìÎ,+µUW_…5VY]=ÕÊEWµpV]ÇjLÎI}…lWóà#SXc/¬uS ;=¶D`)}öM6 Ýñ¼]vØ/³ÿ­OÛcÃL6ÕE™5¶­ÌŒ¬ÌYÓÍ,'•C7+žÜu1Çùbü0Éâ–‹W8ÙhÌßwq´qM{TÍ_|StKDçsxDvþvÎL•EŒ\aåe¯»á¤ä]%Û Ï?k» 9!%Îo@òÞ™^ÓÌu™b«m°¼Õ>ÖÙ6Ÿ§­0:#—S-¿Õ·ÏúmF×’î1X“þ9Ä?œ·¸÷Î]Úå"ñi‰ÅƺEÁ&SäÓÛwÁ©¿Ó¡øº£›Ò㜭E¸å¨CNðljÏ6ï®±V–ÀaávÏliß…k¿åT,2)Âm\¼ç—ïu3î™Ânܻ˵œë¼´^2¢ƒw4xÌ~g$+eÖ›4]õÄ›–\ïÍ3Ï' oX¯þÆ>ÜuŸÌÞ±ÏìÜs¡/.zÙÑ·”[5›§>{í=ýJ£YÝ>|ñÇ'¿|˜º¿•Qó×g¿}÷wE_Uõß§¿~ûïw4~ÑÁÇ¿ÿÿ ²æ–¨èelz4“°ç§)pWÖÃÅ'ÁìP°Lúû^®6V,ÅõŠƒ¬È ënJ%œœv€å«Ö}ðU"| ¿ÿ„Aéñoƒ‹—µà­kx:|yˆ6„¥k sÚm¦4Ô¡íaÅbéä4¼²)…E$¢Û–Gµßq18¶“ÚfšØŠІ´áÛŸ·]±[˜ã•aƼÝÁ‘mgš¢ÕÅ$ Ùqdzd°:׺³ òj`<™Ú2÷F«™pFn"YÍötF»¥QWª—êH„®@»!ãm8—ÈB­[Ô\Ä:éH?F “^Ð+C‰5Ê\Ži Sd+÷U9Qš²aöú%ñtÀKòòr3s#p<ÄÉ“ÅQ>¶,%KÇÌ%òñžl‘5£åÈl΄…ƒæ5©ÍÓè6mì㡨©ÿVRƒjÜ%2ƒdÍ2"rZöâOEiψÀÑI¸ÛâÁ©IÈ<± ²s Ê&BHV®wO*»êè9LÏÔ!’j7(aâªQiHEÚ¿ŽÎo¤'EiJËWR©Ô¥/…)üÖ‰ªÐeð£/•!šrºþe§H;@óS•²”˜0…!¿É·Nò4rŒ“GÅ1'™1¥‰Q-9«ûÔ«i§‘èC›¨I~q0ˆ@{¥UL‚ÂNšù§”–êÖ{AŽ–ä‰b@¡ôE¬fu¦¶’_K‹é·Qú±oØÔ]UïIGiU±Ÿ|›ÚSëÉÆïgOµ]ªu6Äåò;D©Vß9ØÂ²»qšöteYå*Éĉӱ¯ RFiÄÀµl–Iª‘7¦µþÄ5š[;í#ÓÙW‹ˆö¦±Bg8©¶L†,mŒm^¶V¨»n&'¹f…åpbÈ¿uª½ îízJ\‚·b›œ¥l_'Æ|Ï¡ee*¯µJU—HTœ ÁÎ)Ëiþ3mXT(±vKO®Ùο   yµ§Ÿ×ÞÁ¥zðƒÉ+(OØÂÆp0ÿZ·an5Ãqˆ±Sa—ØÄ'~ ‰Q¼b‹„XÅ-†qŒ‰ûbרÆ'¥ñu¼c’n¸-…<äöå˜ÈGFröŒœd&7YXKvr”¥\*(OÙÊW®T•±¼e.JË]s˜áôe1—ÙÌS"ó™Õ¼æÆ¤™Ío†sFÜg:ÇyÎuƳšïœg>‡yÏ}4–ÿhBGyÐ…F4’hFó{xцtiJ³xÒ•Æt‰/iNgxÓ5y?jRÃtÔ¥F5JOjVƒtÕ­†µÿ^kZ×oÖµÆ5ûnk^o×½¶’}\Ó9ØÇvõ°½Wìã"ÛÙ=†±ÑhìgWÛ~¿¶v¶_…mmw{TÜöv¸=nq—{Rvä6wºó§ìô VÝ﮺á=o?É›Þ÷N“½ñ½ï²;°GåwÀE¥o<;7xÂÛìïýQ[á_w´—=ífCÜâf¸M/¾ñG!œãÿ+M'îΊƒÜä`òøÉ-žr•?œå-OøËa^p™Ï<à5·ù¾qžó{RïœçóöùÏßt¡§›èE/÷Ñ‘n¥/½ÛMwz¶¡õjOêζúÕu­›ë]çõ×ÁŽk±Öe7;¬ÑžvV¯í¨vûÛIw¹ƒšîuçÿôÝñŽi½ïÒ}÷;¤xFžðˆ6üá xÅšñçóã!gÉOžÎ•·<œ1ŸyÇc"Þ˜ˆç³yÎó¸A†ÅÖÉa–ÞÛà 7ðñ laÄÂ%Þn€»ž×î°Hð‘D íÀG,ŽÏeœÙ¾×öŠa B°Å²EB÷«ÿqëË4è÷ÙïØ†1¡ˆCb{¸ÂB(‘HF7n/2S#(`‹0@zÀà‚‹!0‚€‚ ˆ8|(ò+3NØ=ˆ?0°Õ«Ö3)˜ ‚ Á0u˜ˆ0 Ál¬(00‡T˜t€À |€À‰hÀ ´@0s€ðø#0È x #›‡ 0ŒA‹X¨h(iÈY ˆ‚œˆÈ‚%\A,AkøA,J˜„9ˆ € €I¯çÿp>Šs /@ˆÁQhB ß© °é‰¡¨zb­)D© Äß¹‘6)ItÄH ±ú “K`9ÐÄ:Ôˆ;$¹—Ð…Z€XxB$AšQÍXÄ"ñ®ƒP&ü9Ë¡E\¢Å]äYìÅ» ›IdDF’ƒEPtŒ‡88Q²fãÃtTÁ™È䤆Ȃ0…Y¨†%…[À‡ypE|xØ‚] zÄGÄŠxœÄy<[¤G^¬ÇaÆ\L }äGÔGøG\\D^d c‘|Ì2g?Œ€A>\Å‹ Â̈]€BÀ S@… ÿl u¨À€ üSp… 4Œ“ƒ”Gb¤G{¬EËG\œG'HüÇ_HKŒDƒÆ ±œ7‡ A™p‚*€‚/ $A¸+](‡ć,yx…œ˜ˆ%0 ˆ¤Rh@‚ð„)x†Zܲb€êŸ[,D£Høj«¾tžÙŠ.º …t‘ìx‚  &À$8‚ ˜jP… ǤÇć À‡3H^øÍ<Í\‡^3¤t7—HhôÂlÉ"ŽH³¬ AF›€Rˆ&0&ÀL‚X… X…¸Ìßœ7H|Pƒ`ÎáÌL51ÍÝû7ËO@¼†4¬´ yÈMÆxƒ3p Ò£NA#ÍÞûN OçO|«•€;aolserver4-4.5.1/docs/intro/tcl2k/html/img035.gif0000644000175000017500000002470107363640503021202 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxGâ°roƽ|úí8xcaÁy¯6œ+`ˆ…›”ì¶²[¸MiÉ«Ó.KÊ^,y0膧'ŠnŒr䯤Y—Nì6ëÖ· ߎõîܯ{?œ-~µ{ãôý•Ÿs²øß˱W_{Õ5¸Òu4eÇYYVhá…f¨¡PÖ$–vuñ´áˆ$–hâ‰v–Mœm'"Š0Æ(ãŒ4¥¢fNÈ]<öèã@6t£„tQhÖqå7ÝZþá·žDHú¥JSžTeQÉatåE[r©ß’wyžYCæXäŽ(1¨¥pY"ç”âù§_͑ץ‚p2çæ›ˆñÙç˜ êù'Ÿs(hEMˆè—€âö^¢öEªQ”y)é§£~*Šé 6Š©¥¿)™™•Š#‹ 䪬)fu©µ×ºQ™¨êø¢¬¸æªë®IÑz“­(êçi£•²ù¨ ššö*jÃnZ¬tÚÖg›k~ÉhkcJ+í§w:úÚ¥m&ˆä³—‚K'Ü:' É‰‰^¦ç²›íµÙ²Ëæµírê•©™)𼆹çQÝòZpÀ?ä+T©œðÃG,±Kübgæ¿·n(,±èr»ä¶°Í{/§ÅÒ›Þ¶é:Û±ÈÑŽìmø®,Ë-|®Ë!O‹óÊÊÑœò¦w.Ê$[ ¯ºóÚ«ntÊê|Õ º8±c`ìêÔZ”ÖÖUÿáÅd9œ0×’ÍÕ@Q[•ÙX‡u‹!–h©ÓK¬¨¦‡š»4Ý*Mî›x—g\Ò|]´ßvW½îÑ{3ŽìÎkÖí²{DëÛ6Io7œñåœwîy‰™ûù褗î`ègnnúꬷ^ê».ûì´{ت׮»ëËî^Ñíåîûð–õÞ“ñŸa ¼ÔÄ7¯Ûé1ˬs3çŒíÇÒ_¿,ô².·óà§…¶ÓËÓ®7œ™e*zúcU¬L´À„ñÏŒàè(A´$0W`ýH’ÁQ°‚ ì‹^²ÆA]Y}0„#,Ÿì2ØAªt°…:! C¦pƒ7ìž×’±UxÄä¤ìH:MѨ<â©’;ÑiŠ·”b hJ0BQн0”ËRÆñ‹¼ä¥}8¹1RO”ªÜU*£É%V‰š³›&6·ÉÍÊh³›à gW¾)Îrš³W²´ä÷ÎÉÎv"…œîŒ§ä&0L€‡Bt"]i 2…”ÀøXbk8d %:ð‚8$ ظ G>ÉN²Ú4šÀÄ.˜`&Làø°Á*&Њ àcø°+à|¨!gÀG_Û°6HħM¬b6ÐÖr±ìaKK5Jö²—E,f7kÿNÍrö³Ýô¬nÜe üðçI¢R–šðä%5%è?¦…ÖiQ ÔʶZõIílûóùĶ‘º—kK6ÝŒ8«-§hÇJ©ø°VpŒiNùò 9÷@°-vo›Éëbw?'›qœLêæºÖ5îy¹‹^v.´eãâ«Ï÷Â÷¾?´/~÷[Aýò÷¿ôó/€ì<^µ äi$´xyê]?óÒÀʵ7ߢGm¶m’Þªx¬G‘öIÄuàxkÜdÅ˶ÁM)mË1ð‹:kÓ\ÜÀÉw$îÎàØû-šÖŒŠã ÛÈZ¼5÷p†›ÛˆÕ[7’Qx=§Ù†÷ddIÿyQÈ1.MF4”™§F2âÐÛ´+ƒù”e˜èÌæEæØ‚Vî”n©¿.5“Jž„¦ávŒg‚‰÷…¯úÛž•ÆÜfYæÍ\1qkûÆŸ+Úry›|Æ\e­yÙÁåšô  &hj-nÊÚM¨Q¸Æ˜¼“ë4¦_æ¸GŸºp76 ¢ÛLkÖͺ+JŽõ µì–*隈ð‹õ§=]^OjÆl¹5[L¨?ã6‚fô«³ü`{kzÎvµ’AÍãÄ:oÜÖ[åÂ}7oCºË«3’ËMèizÏ•Þ zÉZÛ;‚ÊFLc†`L—ìÇ»†©ûoÙÒÆgžö·xÞo8ñ»(ÝÒÍrÄ¡Mpgßd«¸ÿ¦êf›ubù®Ì‘iøñûÞj 9ÊW.ÿ1•³üås9Ìgž+™ÓüæwLsÔÖ‰óE21™¿l"Ïdº;›÷œF'?°^J.#£”’­u·õ=}tœÖ¥¡øógVJ¦Å,¦±ANuÍqó–bW©±Ú S­s݉¦cºø"ætæyxr· òʾæ«ûsuwÞ2ͼq·ÿ}u?¼$A’w©[óG‰Wü+'9yʳ*ò¾seÜï>ÎïïJœ§æK7ú^Ãòò ì“ÞÒ$•¦¦Œ÷<çÒäÖ?Ò]½ÔsüRoYÑË×gµJ IKÊ“é±æ¼/¨*»õR_òñ3¹d}ã«iÌ™>²ú¶å¼Û{yF›èßž{î×öû¨—F˜ßî©ßºÒÏ÷üMÿO~½ãéþ¿þ¥aGÚÖËxç0®]÷±gy"wz9·}•¥|K~Z{ÏwJL·~ã7}C$’‡còÇsô¸w¨f¡·Ít ‚hÖ;gu&¸‚»‡‚U7?,ƒ4’~2XƒOs*hƒ:x"4¸ƒ>H=øƒB…p!ð€ð AN: RØP!RRAeMð( A•…"%Td( ‘DETCXƒà~pðÐß”BQDe€èÓ€ ©  &°àºP¡À‡ø0jˆM°†!` føP`l¨cÐtg Š÷ÄLµgŠ»¤u@©Öhƒ‡LAwS%(oˆDoˆ)03mØ‹\„¾Œ%ŒÂXŒ…ƒ0hŒÊ¸ĸŒÎxÍøŒÒ8Y.hvÓxYØxÿ.cl¡a£5¬W-à˜5¶]âHÛÔlãÑõl%áŽì•h–6ŽïXJòxuìh>ÅE_ÙõŠóˆ©^¯Õ^ãÅvýø\)ëeJ)%‘ épÁµ] ™^)e ÙYÈØ?ÓõaL†Â´[ÂEræUdç3f4þ^!è]*É`í‘`þH‘ÏF“"’ûqí´áÕ±Gw¶h‹sj»¶4Û×¶n sp·,7·t‹rv{·ö–·zKk|Û·c¥€öçcþó·€»J»”‰Ëа`{¸Ëæ#cK†K—¨˜Ø6•«–èD#øðÚL´gŸž³¹œ[¶.„º1ô¸»6-4‚ƒ;~ žX‹Ü÷µ­k~ ¸¸©xµ¸ÔvÎ×|Æ£ºÞĺv'3Ø·I $Ä›rÆ»Fm'¼…Gt¢kE €mÓ¼ÓrÏ›»ŠÁ¼k»8îDd³›}£½y9¦,ž w¿Ô ¼³W©Á¢Ô½Þë–í[Šn´¿ ÿÒ¿ ¼Œ;½$À㤿,Hhz#¬Œõ×y $lŒü<™kÁ ¼M<{¬E„|^K¾íôÁ–ƒ´Á×ÁØ„ÂÙ«ÂŽÁÂ>rÁ<ÃXƒÃÀ'àãÂÔ¤ÃÄ[1¸bÃ&ÇÃc¾ÉëÀÿKº-(¾(«ògÖr3IbpuòŸd¤ZS–²»¬¯p7‹¬g°ûÅŸW·˜°L†Ö{EÕëb„k 'Ç!ˆÄ[ƒ½I‘qº×ÅS«¡¤¾ Å)˜Œá$Ä…&™¼½‹\ÆXÄ>Œwu&»£«Ç}rG¼èH…4Sœ Éjœƒy+ßÙGµ©tŠŒÇ“qáÉè;€¬¼ÄʆüÃuœEÄWyhŒ%ª¼Ç4œÆ„ü‚ NÅJ>¯$ÈÁGÌ‹÷È”T1ê$ÊåÖ·:ˆ¼Â»œ!FŒt‹Ë|MøÍÜzЬ}¿l¢7LæLGôû¾c\À$h¾§,BÔÄßÏÞ\€óãìžå[ÍÂ7üÍýÌ#×Ü­Ç|¾–üÏò¼ÃKêBú¼¾ m!• »þvŠÊD½(L‚{ǯ€7¿A‹œ)‚¿Û¡-#\º»»ÀÇ(ËÁÜMÓŒÒF1Ò1bÎçÌÐoÌÎo\Òš Ó.–*½Ó"É>-Œ:Ô\ ÔD—F}Ô{™ÔJí—LÝÔùÔPmƒC=ÕÜTÕV­;âàÇàÚàXÕ³³Oø€1à @Ö| ‡R-ÖlÆw°uð tð `­À!%" W8†D !EÕ!à×ø  åÖçÔw€Qu¸œ×ÿ=MZh…‚Óy _•™ðd`К ÀÖ™MM|˜ !õP=õÀÙ%ð ÷Ñ£Ÿ£8ЋŠà v6Ý»¦ŠÆ ð{ÑXg¿'! À ’ )}ÏVèT¡V(TQ¯€ ¡ &€ &°¦@ ¦€4àU… ˆM†K` ö]TAÐEÁ'ŠÇm,*ÆR¢´L¤(àB9Çê|VÒ+Dè ÔÀVLà5 #vå€%XáYYu…Ù›…€IpI@0#  o5¬02Ž#€hp½ }eu¾@Ø-Å‚".—i7 áÌC¾Ôb‹G>ËIÕK~»Ñä+ýäT}DL¾ÆVÞ†*’åH¾å:ØåRî_æ5(æãKæNnæ,ˆæQœTÎæu‰åcçrŽÔQžæv~çJî5^¾æ|î©t®çZè2èæ;·ç†å~^ç…¾è+ˆèFþè75¹qgé™ÿ5èo~ŠGíøk0f(áÈ\+éº>ú“Cü[^ì”l&é ÒéiòéfE”㪣>«ø³êxfº~s®Î°n%½:˜åX©ö[Ui¤6ÙmU,¦Gj“¤v'÷á ÃuªuÅðÈê F_ƒùÆjÅ<Ýè„^æÝÎÔþbéÕ›åu% ª‘̾‘ŠíòÞíÙ¥ç(HiaIÉðØîªÅñnÇvŒ¿¡¥é‰NéIêXYê Évt–8yq0iíSé’·~•L9”Sy˜ ^¿“))ñ ïN¿NÁžŽFzï$©ïOê!©”ïð×Þ’[yñïn”ªÞòšN["óAé^ÿ?éänë¹ïô>?êòP ]MO˜å>‘O¿@Ïñ<ïš0¿õ7?½B%'Í%õIO^¯€3¯ñ/Ÿ>¿ê.Yõì®ó¤L)ÿ¸ì ßöKÿõý5ô¯Žð&^%Ö¥ò>§oõ5fï³ÉÅÿ®”…óê’Oìöêp‘jlŸøîN§|ßùÕ€삟˜9/°?¤¢ Ý÷IøTŒïÈ¥õ®·ìÿðÎ.õ³ŸŸ š¡/“ÉnìÞ÷ô9ùÊ5ú&_ú$ê÷æ8OaçÈß¡Êÿ´JòÆ/öÏé×üœ~ýدÕïüEßýÞŸç›>åÜ/þ=§ýæþèŸþß¿ýìßþ¾þþëèò?ÿäðñÿrÿKÿOà&|D˜PáB† >„QâDŠ-^ĘQãFŽ=~RäH’%Ò‡ReJ–(‹¼|‰¯ˆLš34™SçNž=}þTèP¢EWm)æL¦54XTêTªU­^ÅšU+U¤]•ÂtÚôfÔ­eÍžE›VíZ¶½"]ÚTîSœmíÞÅ›Wï^¾ß&–æØ¾… FœX1È¿+ϵ‰“ìbÊ•-_Æœ¶1ËÇ‚ gZôhÒ!7»\*82ÔÒ­‰àviرkGœMõömÙ±!æÞzúkLÈt'c­íaræË•·eΛaôç ;¼Þ1{Îí$»+üÿ>2wxçÉO_}çyì&õÚyîç­É­«ÇܽÚïÙ÷7üO¢ÍÃïµ½ó½KJ/(÷üI8ùœ¢Áj°½3/: =̯¹Òº¥ÃpÃêúSÎÄ›‘º]Ô°¼y“ñF;ñEû°›±GsÔÑÇÑqD#¥£QÉ%Ÿ#I…¤‘È(¯ƒÐ$ S+®ÂšÄ ʳŶ› ÍË,ï¿Í´N'•ôoEõެ‘D1ó¼G;)âpN8±\3N=ùDTP ÉT4Ð…´ÎеQMAÓ¼“M­¶«KÉLR@à ԹeÄôLÛÖÌBûíTÒ<%5ôDX-UÇP5UDJóQ=­ü³ÖE§[uÐ=ùü•V$ Í5Õ6QM+N‰óìS“v SÙX«•ÔQ÷¢WevYg«Å3Xuñ;WV9g]Y\ •wÞK/¼ÕLKÝ•µÙbŸ•7Úd§=68øžP,m¯âÇ(Ÿ¤VWiy¼oH~)†v×8¶OÍÁ¬rd=vdt#­×ÊëDH*-._€i´^'¯•Ø•‡º¶¸Õêr­h£ÙÊ­¤f(hÕŒc:j©³Z☧¶ÈiOYúk¯¿;Â…áâ2[®ÃF;mµ×vkÿlÀÊžïa¶ç¦»î¯µ6›h»÷æ»oÑðŽûl¿/{ð`«ymŪAõp å^lÝß6þ¶ª¤÷Kp[ÊÁk¯r{ª»Å?ô×Ï4}/Ç\±#=žòÔn²AnɼÝÈ1%ôõ 7ì|÷ôÄdrvã /xW^âGSÍÎvï½1åŒ#öýùqw#Wã”Ëä]vç¹·^øÑKZ}0Èã0Þ|{õ–åŸ?7öâMÇs›E7\þÒ7ÿ_¥lv?ñtÔ[—ý ˆ@~åy: ྾E) BÐ*éÚq“$qÍîcØ£ÞÍÆ?Vðƒ!¾„å²ßy0g7+ ;6Áÿ7…USB—°„—"üõ¯}´cUÀ4¥@(„ZäÞÕ-ú(~ôšŸíEDNOTB”ây5 *î ^ü¢¾²èÄy-`çq`µ¨EG-QŒ"Qè%ÃükzT ¯çÂP)®ß[£ ×<ê°yÒ+^ø4ÅÄ–oˆ5`îø˜½ÞmÑNMTUmuHi)21dñâ4·9nkÝà,bFÙ¼ÏnçS%h渾XÖÒ–·4Ë,S‰K^öÒ—AÑ¥Þ~9LbÓ4¥äÌ)Y'Lc6әτH05˜+BSm°te¿,gD‚ò‚ÈDM§ò6Í f*›A7·™¢¨¥úS$fÄæGШΩEš–q µ|gIG2ÏvþL#ï ³ý p‡â™×«íIL’ÝC÷¸$[1´¡ÿìöX˜Ñÿ±£{$ž'+ú=sŠ\B¹'eÚè¿@jó¤öó"ÂÎiCu,\ntWÿÈÎÔÕ³f9 ¥LO*T8º²‰TLM‰úª£±ŒcŠçFRªÄ4ÒK†¸shº$ÈÀ(‚ÌW¶éœFÒvyµžD„9Éʦ‹µÊ‚15¡QèÉ.ÎðŒT£[ë×Huædª‰Ñ$ÅxºGnõ®]Å)Æ^4EœútŒ:£“ÊUpM6®„çž<ªVÁb¶°˜ ¡]ûÿÍÍ4L}»ì‹Cª»¾I¯"ó'ËÊÙœöt{Utä¾òIÂdÁVEK$ i*~ö–¯ˆë#«Vê'Dîˆ|›ü]õ†Õ¨F•#µ&FÜÇëf·›Jë«N°ë]ò–·—ã5ozÕÛ7ô®—já]%|-$ßIÑ×½Àçp„–Ĺu¼<ñ¯¹ì{Å%À¸loavÛQ,Âq·TnŸœg¾1Ô|!.²úà0Š”דîD;é܅ޤ±…cƒÈê™ìåMð^|ÚŶ:u²†©V ÙaÍö¸¾‡•ëR}ǰÁ°kµ*aÎ^Æù5m•øTÜÙ³žÃ-‹ W+¹77³@®l—\$95õÈ 4ë튼BÒìÀl‹±^fìÔ ¿±®µ ,—µ,f:ïUÈ‘uò˜]šã,/ɉ–DßWc,{7Î2î(%W×çf2ÂF^#›¡wÜ 3—Ò0%3u â[ÓÈ­*©OýÉ–ï«ê}4f¶+ ™ÒíÍ÷Ý[¬q½k^»F×½v°/ókaÛØ…!ö±•½l¶$›ÙφvVœmjW›”¥Uæi™imnw[*Óöv¸ÅíápÛÜç¦H¹Ñ½nvŸÊÙ–r»å=›Þ÷·½ñ½ïjë›ßÿf¶¿>ðb œàçµÁ¾ðõ*œá½ŽzÎt_‡?ü¾_ŒnBóCÖ:g·â_ïH´qå5¬¡†d3?òÁ ØÄ8yXaÝ‘¢³n+gù+]ns¡Üz18ÏùÚvŽ—¡·èA[Ñ•g/i§–GG:Ö”óãÕÙäÙƒÌ)7u_¿[œÛvÔyÉõൈ亃ÕE~v“cÁ^ÇØÉ)öZ’½ìjßdŠ#6ݳˆ—P§»Ñìît ¾4ÿ€üÑ –Ňñ‰W,Ë“1ÂÃ?\õ°/@ôˆSD…iC|ÃCôšDä.BœC”D¥D9³D©ÁÄL4 JÄM¼Ä1\& ÅÍ#E¢ëĨùÄÜC;\ÀU¼ FlSÔ6T|AZÜ>žãD^<šWìEhD•F¤iE¦ÆXű;FDLÆ`ÄÅx3·fÄ%kdÅgìºGì@]„6lÌ@_Ì [ÄÂiä¯qÇäbÇu¼EntÁsKGfÔÆ´ ÇB4Çä¶yT%~„Æz<¼|ŒDkóÇèHÆ‹F£YÆ~“„È—Bɘ”ÿFx| ✓ûÁô[ŽœŒIx¡½¶ƒ¯‚ E„ÜÉ“ôJñ‘l:¿ÃÀÝÉ'M ÅN!­F"ÝM ŒÊŸôB-m-×zNõJè¸<µOôìPj«Q ã»ÖóÒ/„Áù+KZ¬¢[S­ÐJOÿœÑ! P†ìÓüÓmPH,PÍÐ=TŠ$ÒÓÛS›\ФLÁè¼#HmRUÑ¿,Ó…Nú¼DäÔNT*%PüÌFüËœðÓ8ÎTí8yÚ¢µ» “ÃŽ{0Su¢LEôiÔ§\­´»Õ¨,¿¬ƒÊuÇê‚QMÇ4Ö±ÁÜdÍU’˜ÈUdÖÞC±K3Ê-”½xÒÏG…VbDÒY>çŠTß«Àhí‰i¿EKtµ uÅAvuW°×½¹S©PÐy]ˆzuÈDý‰á3±'ù¼|E~Å77Õ£äA?}­ ƒ½7„UR«j;†ý¶]¥Ø‹% ‡ÅØýåØÕÙ‘­7‹%Ù“E6“EÙ•Í ‘eÙ—E—…Y˜ÿ•Ù™eÙšµY”ÅÙœ%ÙåYõÙŸåØ ZŒ%Ú¢¥Ø£EZ}UÚ¥uצuÚh…Ú¨MÅ©¥Ú…‹‡ƒð†ƒÈÚ‹°Ú«}¸FdȈ¯Ûà|ø Øx8FÈ•=[ªu‡„È|Hˆ€h|胄‰0ۺŷ;(|†AP°…1È|XC˜[4•ÐŽ˜ÃV{x‡m0†GP„C„=؃ €0BPGˆ„d踈_£†@P0 ‡… .P((À‡Ð\ä„=ÐÓK([ºU*(ë-P‡ƒoë^„€(sH…ƒ@‡â-RÀ‡â=áUÞåM=x?(]ƒ ÐŒH°y ß(SÈ^òMÿ-È„€††\((0Þƒ(,ð_ï _ìµù < „I˜ƒ8À€¨€˜„¾ÿJ0/À] ßQ`,rÑÍ£D(ÒCO…¤íDÐ×ѰõìÑKµ5ÔÂ-ô¯K`90bøŠ1]¨X€ÎÞëˆP÷\Ê …òóVÁÖ( X`µ@ ʯ(«\;!!¦>y(©¢^|`aÜu†ëí^‰Èðåø¥†È0…Y¨†%…[À‡y¸b|xØ] ‚ÂkV4œä´+ ¯bùóU9-ÆÉ–ãö„Ø_Ú;´H°ñea*Vˆö^†Ø…¦|@8TPÞHPå-XHÞ8WP^ˆeTg=WKÞâIœd0nÖjuæ÷A›úÉcæäbÒá²H6'¨(øðÞëõ…°‚Ð…rÀ]|È‚‡WÞøƒXPÀ]z á5 O˜‚g¼×$¦¨Ù+Á©éU¦Ûd4)×"è:í1s±šZ@ˈ'˜ `H‚#˜€  U˜€i øh|˜|8ƒ4à…_Xé3Xéuè…¦‰c…H9Ž`ò%fGU>†ÃCyµ¦ (…h`#`‚”ˆU˜€U”vê pƒ4À5©–j•Vš¶ÜBMOÀÝë½Ù y@êŠxƒ3hˆÂkÍcë¶N¼·†kºŽ€;aolserver4-4.5.1/docs/intro/tcl2k/html/img036.gif0000644000175000017500000002172307363640503021204 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxGâ°roƽ|úí8xcaÁy¯6œ+`ˆ…›”ì¶²[¸MiÉ«Ó.KÊ^,y0膧'ŠnŒr䯤Y—Nì6ëÖ· ߎõîܯ{?œ-~µ{ãôý•Ÿs²øß˱W_{Õ5¸Òu4eÇYYVhá…f¨¡PÖ$–vuñ´áˆ$–hâ‰v–Mœm'"Š0Æ(ãŒ4¥¢fNÈ]<öèã@6t£„tQ¨ƒÝý„smÇ‘“AF)åGCæXäŽ(!‰ß’üù·bç‰Û{['&r¾…™f—KþƤ™h§Ÿp¶9ævN©çU²¢‘{žåZ©j¨‰}ޤ㋇6ê裚”(Tb‰¡rÎ9ç®Y§DÉ­‰'_¡¦ùš¨Ê…yê¨Ó­Zꘫֆ‡ê¦ÒÙYê|šzªê§°y:]¤¡fP…0Œ¡ON(ÃÚÐ#4¼¡wH‘òð‡?ô!‡hC!ñˆ*4"—8B%2ñ‰t"§¨@)RñŠ´"·¨?-rñ‹Ñ"†CöÐ24AÆF¼Ø‘ h!"»ÁR‚˜  Á#÷x!;ÜáH|XGà±w,Á+2D'q‰.4€k^$¥×(ˆÝ2‘lä$‡ÃÉ¿¨’Ÿì]#/©aŒ£¤t =ôµqä&0L€:Þq"]@d 2…”ÀøXbk8d %:ð‚8$ ظ˓À˜JÂHp˜ØŒÀ„ œ96XÅZ1|,å¤Ò€5ã ø`gÖÀ‰°‘øôÞ=óÉÏ·í³Ÿ½ß*W¤(Wô ëÿû'B:-…n cùaSÄ#ËvHJPò„+ÿ(È£ú¨¬@Qš}©Vµ(rn×Q.Ù ¤[ÜIÁS:´"§ÙÏÂü& ½ånp²*\|BºQme*¨ ÑéN•Z´¦"u¥"ÝiãvTžÆô¢(¼)CR(E§«ÔêVÇú½z­ "$«ZÛ&Öµº5Jm}«\{×ÉYÈBnïÌ[y‘-»Þš.„±ºä˜Ãíߪ÷ä+w³`ay](ÜÛYJðGF2‘|—ÚiíHöåo Õ<ãýù¶4þîðŠ6h´äÉäjØ–9,5Ik`^¶t†±Ë¸ë‚´dn³u—ë_J_ÚÓfVòß²<êã¦yt£ž/›5çV¦õθöÑ£ 9Ï«³«æ±å2̯ân8pVKWu­7¹~õíišTõ³m–k!Õ­/|ÛžñÛhËl»Ú#Ù5¸ÇmâkS läN÷kÍ=,à©ûÝ7¼çmv?+|ôÎwãFçóêûßm‘7ÀN%{_‹àw´ÁÑð†gEà¸=nP‰[¼Üü¶u¶/Îq¢@¼ãÿ8È.ò‘#ñ¼ä&8ÊSþ<ß.ù¼c.ówÓ¼æé¾9ÎÇ­óW»ç>Ç5ЃþÅBÜÃ!‚èÄ "€üá!ЈuHl”‘ˆ|"ci‚&<òˆeôˆDʲìBhHhIK¢ƒ±àüp€á8@Gr˜YÞ‘–æ¼C¦ŠTHC" 0A `á]” }ÇÇ î„µã£ l)ÎnǶ÷v“ÐûìÁ8)Ýn{U0˜$}'Q/eH>“úíÊL‚¾m²I‹S0ƒäÀí,:ðÅ+üá»¶øÆW-ò“?×å3ÿ­ÎþZ£/}²ÿ†7ÎMri}M/U=×ÔAßÇþöùxým‹Ÿ1~þö»zš–ó¯ŸÅ–|¿ËŸJ\…Úg©·ê¥S/µ±ëgDÕ}6€h€ZFUOåT°VU6TB¥€¨~ùC7æ€R5 x€‘R èÈ7˜‚ˆ~ ‚H‚ú—q†Xµ èSØDwkÝaI¸‚ö‚`*xj(¸h݃år‚¤£T!H€=ÈT Xi$ˆ‚2Ø9XBÔ§Vî‡^Üg?UHVWX!Z’U5¸qÕ7|[8†U†fPh˜†ý´†l˜Onø†ä†u&‡>‡vøE=W YÈYŸçbFFs‡þ¶1-ÆcWöR´Ç`k¶ˆ"Vb Æl ã‚Axj½6+’(TecHº…‡•^‘F[Ú÷\|Fe‰èƒ Æ‰¯Öˆ£H<„&‡{ȃl’8#Ål“,3ÅaƇ˜'_èWÈZÆ6ŒhÖ‡#‡‡ÒBBñ}‚hmÿ‡muøŒ/§ŒÔ8EÖXc€ˆhX& ]aeÜèÌ8s„ènh‘h5VŒÞ¥WÉf&\ÆLòŽÕóòèaùR–xŒŒøŽ¤õ‹üȈsçVqB\’ˆŠRvZc–4¿&mŽƒ`î‘iúÇ`+£œ£Wùl¯b³9½ÈOÙè(¥è^î7ŽÕXŽøv’*‰D, Œ±hWD1k•_††ŒŠF&ˇŽ+Õ‹‚•føèŽy%”‰U`ú8’Uzèa”»å‹¥†iËÆ‹»xW 5ÅE©ÆiI=Y‹ÄhÑe5F/YZ\Ö‘¢TOµ7iR¯˜{æ–ÎvTN©hr™+è>…93—KH9‰•š†R“6‘w™=_¹—€m!•–*Ø…*q–⣔E±“)D–É“(‰>-r›©A™p’Y »°åÓ°;>±ú³ä¯ ‡{± \ýfŽûXû±þ”±"ËE![²ls²(+PÊÊp+«¯-K/«V*;³"S³6›18›³Ô²³<Ë?$û³.´BKD>[´År´H["âàÇàÚ€CD»´DFø€1à `µ|°wSKµÄw°uð tð R³6xˆ$" XGvD !µÔ! ·ø ‡¶gÓwðGv·œ°¶ÿ«qÓ[wuv#õ—>| —Û@•™ðd`К àµl+†Ñ)Ðw¹€Hv4¹Q’[Ï@(ŽäžÊ3a“Ä©†B9«—¬§z WYê"¼À{ù¼±w»ÚF«$! À ’ ƒt­WçK¡W'KQ¯€ ¡ &€ &°¦@ ¦€4àLy„ |[vK` ò[KAðµçž¢·I£¤Y•¼ÌÛ—¿K{šôzø›I˜÷k{þ{6¥7Ô°MLà5 #åäïOaEÉ„užG¸ñƒ€IpI@0#  Þ4¬02Œ#€—hp½ ìdðt¾0q§û¸"¼±×ѱ !žC¼E*bÄ›Ä`´ÄŽkG¼«N EP,RÜÄU¬ÄÅÄH¼ÅVÜÅQì_ ÆLtÅS šf|DhÜnkÜÆz(ÆXLÆT,ÇCôÆÏÇxŒEz "|ÜÇTôǜȂÆâÅw|ÈJÇiœ†ÌÈKDÈtÉ㙄É4ÿëÈp¬ÅvÕhš\€u¢7¦´ÎXÊ[1 ò§“sJƒ‰<Æ–Ìm l™`©U’¯ìÊïÊðe™KĤÈlü…RSè8\â“­ü“F5šâQÄ1‚6jª\TGyR¥è‚>ÃR3ÍÏ HÕÍûW‚DÉjìÉ’Å÷9ÍSå•釜ZÖ˜SHðXÍø¬ÍG‚5ƒ‚šÍÅ6ƒ (Êÿœ¨ÿ|ÏâŒÐuJAè ÉêÌËãÍÅ‚ûŒÌÔ\‰?8Ñ:…ÿ„SÕ„G:ÒAUOŠ@hÏIÄÉ{üÐzQœEQæáŒyÐ/(ƒ<¥Ò&-Ñ?ÒýW$µÑÍlÎ%ÿ½Ñ0ˆÓW5аÌBÄÜg8ȇèÍËÜÑ ‰ÑRxÊ;mUšŒ„P-ÐJ­ÒPUYÍÑxÔ§œB }³üÉ¢œÓUD½ÀMfÔH„”HÏ>mÊFè©CÝ©gÖÅË4áLÖ!×Ö¼Ô˜ÑÔ´óÔýŒÐø¬¨ZúP‰šÐ”SÑ<Ù–íØ\}I›-„•=¥ŒæØålØù …e]ÏP¹Ò±\Çk½Î4æxõW2òLÑc]Íଃ·MØ’ÍWy­}ýÌÎ;ÛÛ÷‡Ò ÛhÍÒ€ìÒ;çËãCiÅeŒsÐíÌlSÌ]ÈÎ-ɼڬÖÝíÝE´Ý•<Þä-CÓmÇÅœÞ0´Þ­íÞjÞé\ÝòýÞôíÐö}ßË Þ¼ßüM…ÿù-Þàˆ=̲ŒÞ~à`¡Ø þÝLàþà =àԽȾAð­àEÎÞ^ÞþÝÒâ ´á%>«ÁüÙÞ¶âÈŠâÞŒ¤ìÊ·ÙÓˆ¸¦±ZËí ãí-ã³¹Î5›/m»Ì¬<Þº¼]í1Ó¡JÁh 4}ÙhX==©|£‡Zå>ÚRíh‡G~ƒ Ô\ÚŠ‰È—7þa~˜¦jàH Øéj.Zä+ùáñ-3®8ÝÍ3:Z/Êš‡F¨¦ÅQ6ZŸ7³æ¡ze«øŒ_¾Ø9–¦Ÿf· ŽÙ›¨ŠƒÎЦ˜šè‚¸è‚VÔNþ›AmR»¹”HJé¤~£SSê(¤Þ4£~•ªê›ŠNçNBrN›ééìá}áRøÿs÷*®^>níüÄëloÌÜwîø Â]ØþË8N÷—ï§ÒNîzæ˜ú«õ÷‰O”¾H]¢~ð\X¨5œ>úŒ”GÙ\}e”§¿ª¨¯ï9uˆÿ/CZù~ð²eåR^ÚX— ½û’–€h.ù=Dú*Ž˜Ì#ý@OæAÚXó’¤__ba9”ææ©IæðÃOô›þ×_è6*kJïkAÎ!Ð/(¸Ÿþ¡‰w©öSZ˜‚^ûß@ÄW¡B‚2lˆpáÁ‰-RLè#CŽ/lhQâD’#‘!F,™1eÇ•!>ܨQâI’'Y†¼¨2¥N•4?ÒDTçLj@ŽDšTéR¦øh9…úT*Ô"U«â+‚UkÖ›ðymVìX²d1öŒÉí̳BfL[3®M%a†5“®[™{MžÍËVíÍ—m‘Þ)t°GÆvM»×ïßÅAN– ØðḊyÖ¥\Vôè©¥£ÿbµšUõV„^Áކ[6ÎÇ(EÞý ®Z“œïbù³sNÚJo»Ä ·¯Ì¹bâÊ77Z¤`ËÓ»ã\Û’9eàëNVþYûö¤…¹W'Ø~ólú¦í£¶Êzuׯôýÿ0@$°7Ï ë-d°AT0¶Lê>ÓR[-ÃÖú£°C?1DG$±DOÑÂÓ0ÔO+þ^C1Fg¤±FoÄ1GØTœŠE ¹êF‡$²H#D2Éy¤*µtMI)§¤²J+¯œ’ɧ|lñE,¿\pB ç«qB1s#óCß:SÀ6G{s¶8AÔ¿«~ÜPH0Õÿss¾9¹ƒÍ=çš3/ä 3ÏA3Ó M>B-ëLÄ:dÒÐþ ÔÒO»K ½ÜóÀŠc¯:˜ÎË©TÌÓí;ð¬;•QŸÖã Ð¥*Ý-×ôÐ, =¶z½L:`c• -½FmkV]_åËX½Z¥mU?‰Ú.9öž‹[ëô”5PCŵXqÑt´2¿"¬m¼›Dm©\ß …ÖÕ]m‹l®dí½U7A3³u]t5ìÜzîìÒ‚ßx§`ÍÕÔCnÄóÛ=Ã… áj¥%ì§Ê­)>k½cW^[›Í—)AçŽ`¢œ8_à¢Mncº®å_Çƹ9zG¾y\Xý/:šG|8¿ˆƒô 5± cFLÙ”kíÙeèøÜ¸ä'å¸Ðtõ9<¨ûíšÜvEoÝF©KxgŸ™¾®ëpm¾:m–f°è;»D:id­Mh÷à;U@‡&yf_¿f¶R§…sw_h¥Û[Ôk×äšoëø¢yس³µÜr¶+â8=Âù–[ì c•îº9e½ÛýòÖ;vÙgÿïßGiÇ=,»ñ„’ÃÜ>xá‡p÷'ó$>yå—g~x㎲yé§§¾z$ŸÇ;zë·ç¾{ïfýBˆ³÷ý{L¿·ò|“TNÕÅñ?…=éöy~PÒ¾Ë|ŸúîПN&'Y!*Që‘ÿ°G?íÙT<Õà*‡ªgÉ%u‡º °,Ø6¿ñjiŒa›æj5¹xªsÈ!™.†2â …'$³C-®ií]qÃ_¯´@oÕ\[[ÛtZö¸=­\“ÛšUD ‚mQ9ó Ö>w8)aãÙ•xÅõ‘L‡£ûUìxøºþpl^Kã¨æ¬Ó©ÍUH„"ÙRØF46…±ªbÕšÃDŒ=î^X¬XaöG/JPeðAÖ6­ÙÑE>œ¹3ŠÁ1‘ b?Ø8+ ’Y!›[ÉÅIZ l¤Ô$(×(ÇE†Î]¡¼ä+Å¿ͯ‡eÓ ‰¸9žQ„å‘–zT¥ÿÅNFu2´#é´ÕÊOÞЄa¡|ÌÆªTS™Ò”¡Ë*·LĽŠr[Y¨Ù;=)€Ë;'úÚÓEu~iœÈkg<å9OzÒR~F#_9ë¹O~ö3x?§F ¥S @!‰Ðü%P‡jrè9ÇPŠ*E¡¸ü/§)Ä>s,$\OHƒÃwe3<'K] ÃIž rš£¡G]XQ~^´|¹$ä'7z6î1h5"+QË8Š˜ÙÛU¸I>Ò´¦öÜ’-ÉxSœÒ‘„…üYcJ¯‹eR¨E,ŠÇ0©®ƒù’£qäSS'êTuÚTŸ‘\ŒW©œÂòªzŒA—+¸_­¥gõd)•úP¶vÏ­±ÓhGÍ–¸»b™ìè"йýy;³š¬¼€¶rQÓŽk-¬÷ËVƒJˆ;mhU;–Ѯֵ¯…m€Z[ÚÖÖ¶L™ímu»ÛØæ–·¿.M“}\âwŸÃ5nr•+Z¨Ú‰wð\nt¥k=äN׺×ý]u±»]îîI»Ýox•ô]ñ–×¼8"ïyÕ»Þm5×uÄ({å;ßM1é½ä¤o~õK'÷J¾TÝo€,Ûþâ“p‚,šô.ØÁHƒ!<áK˜Âί…1¼áõj˜Ã¯‡A<â튘Ä'–®‰Q¼b㪘Å/þ­‹ajRoÐP.uªxjMGYÕ¯n/¦ŸÜjXךF£¶u®›‚k]÷)¼öu°›ÕLOÕÕÂF6emå…&ÛÙÊ3—ÇüljØÕ~õµ±jmo›ÔÝö6¨ÁnNR›Ü•6÷¹#nu7šÝíNô»á]hyÏÐõ¶·žño;ï›ßrö÷¿Ùp£™à'óÁîe…/Ë w¸”!ñ%OœâG¶øÅ‡œqÿ˜ãßÿñÇA~c‘|Æ%7ù‹Qžò¯œå'vùËGs™˜æ5ßðÍq~aï|Â=÷ùƒôèÆ!Þ@ˆÑwÄjcÐ2d3t§á>>! À!Œ Óÿ{ìªÙ#É>ƒ$ øèÃHÂÁZ±w¹ìe¾C1ð1ŒA(¶C6ð±C„}Ùpn¶€æqwÛãÛ0Æ#qˆ@ìa @AE8"Éè†×Å"aj¤,@Š L€z$…\@Š †`‚@!)Á ðQƯ—{ÐæÁ`‰©×}ÚK¡B ”_¨!!0”O{‰@Á%0G*\‚ŽÛ—€ø¸=BhÏûÞ›×ðÃå † h 6ÕÇõCPS0ÿú#‰ D‰@£ÒÈY ˆÜCˆÈ‚ø‹>ê[>k(?ðJ˜„9ˆ € €IxÿŸêòÕë…ù²‰™#ìªÈ"¨äÑYˆ›„˜¡—0Ž\§òˆØ&¹pƒL íÒ…Z€X¨?æS>²Q8—0ëH$T˜î© ÀÁxq¢BÁìBÎ .C¢2×*-±8y(€ú0¾8CˆT=gP>è‹ > ?jè,S˜…jXP¸|˜'ćgÐ-PÐ*P´Á€DùB·°ÂI¤Â”D¤ÄÞÂ/ŽÃÈÄ1ÌÄt(u NÔ‘ê²¾\B¤Ð¿èSŠ]°?À S@Þkuཀ…ÝûÿSpÞ3[ ŒDNÌÁIÜÂ*äžgÄÄhÃTÅOÔD1¤ÁRÅoôÆN\­ s‚*€‚/ èS>@ +](ÕÇ,yxÚ›@ˆ%0Õ£R =‚ð„)x†>¹ e*•l&“Úž+ôDUüF“J,j„œ GÑyÕJAúx‚  &À$8‚ ˜jP… •¤•ć À‡3H^ø›<›\‡^°¨6L¼¤H8$ÀëKÆ\SÔ¯ô¥Ô­ (…h`#`šˆU˜€U™äÊ pƒ4À5°ËšTƒŸ<•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxPÌ«÷!_ˆyÝ’äÛðߎ&v¸_cÇxÍ>9ÙbeŒ—ýF<13g•p›Ò’;V§Ý–SoÞ»:³ëÕŒ[ÃV,»0dÛ´ {6¬ûðm͸U÷û±ñâ³óŽH¸6sçË•çXÙóné–}?'<½{ìáÛ¿çÿýóÆÐKIÓMx:¥và¶›¿Ï-_o}âõÅwNþ]¾~ÌüyG_dÂÁGàlÍ•W D÷ ØqùÈ] nôZ…å1Ø`_RhrøEw›68à|æI„Mê•VVŠ0Æ(ãŒ4Ö˜ÔŠ5‰µ^]<Ùèã@)$8†eSiìõ8ä’L6éä“F9šŽ.¶å•Xf©å–IÙ"]/f…à˜´±[I"†Û`kš—fOª”æ›o²T§™šˆçsXzI%˜V¢D¢F›éV晈B†¨ž†5ºè}û%ªh¢d 餇–©'r’z˜©¦kZªÙž”¶ù)§§ö&©lŽf â ’Î9b‚²f7j¤ÒǤŸGî&—ŸÝ ì°ÄBÉëMU*YlFÂr&êQÍŠ­ (jª˜×ŽÄ*¦O •¯Zõ^rϦzâ_…*æj|ø-Fg›ärÈî­µ>ûîa¯ÒJ\v¾¡Zk«‡ÆËíº£N;é«ù á ŽVÛŸ¥~ ðÁíê;ñ=y»c’Ë>ip±×}4ÙÇ“úSÈ#iŒ$P6ûqœX‘\òÌ4S¥2¸ÊŠ;ò¾¼¹+o«¨L1IJr(1†ÛvZóÒLgus² ËÜôÔTWÝìÐÓ€ælõÖ\wÝ1ÖR…ëõØd—½«hhOÙ+Ôf·íöÛ4‚M–Øp×m÷ÝN§-Ú—ak÷߀þ“ܦù¦Ã¸B<žÐ_[.¦A?ž°ª‰«k®t>¯ ˆ Væà—ôo þ7ásué¬ì W'ÂÛñ¼xìÜÂ<`žójÞóëÜÕû å—³ü‰´éM£Î2òÌ7ïüGÊÿúüôÔW=ÝÕg¯=Þ×¾ý÷à“Ý}øä—_öøæ§¯þÔè¯ïþûŶÿüô«wzö]ÿþü)ÿ `Šþ'À0-< x•2ðÿŠ#HÁ ‚æ~,ÊßܼgÁzÐ#ü Gx‘’ð„(¼s´¶¬¥ð…0tˆ cHÃΰ†8Tà sÈÃî°‡@¬ßƒHD÷ ±ˆH,ß“ÈÄí-±‰Pl1²‡†”¡!ˆp2γB#!Ë…> ‚"²‹\Á!% JÐ6FñŸ±Ã.00€Ä„iK°Æ¼¢Fñ±æä˜[©+w‚,™ã‡»q1ŒtšÝ¹B„¸ÄlkAÿA¨šŸßôCµ±ÝêáK5ƒ•‰&ŠÑÜeÔAüI(bE ÜÒx“…^ådÕÓîux7ºgú­îu¿ºÝîv4¼ãýçyÓ;Ïö¾wó­ï8ó»ßmþ7À³,ð¹àb!îáAtâ@€þðHhÄ„:è#6JÀG>>„¢4A‚yˆ2 nÄGG©r!4$¥,eƒXp~¸ÀðàØ‚>+v'’‚Q®±”æHºC¦ŠTHC" 0A `á]” EÇÇ Ö˜ã£ 1)X®F™¯¤5•Äñ…=ûÈ×ÌP™ÅFaêÙû~±u¾ÏÒÖÕõ—1ŽêE ³çNuÊÚqùº8õ7¿ñh=û†ÖfØW¿¥ÕÑSì÷div}××}Au€X•!´WXò‡}—ÒTÇÇS¶SÖBô·€*¶TK†4¥W#t–~ä~–}¡µ~‚UüUÂç:Þ±€x€º§YWe~Bw6 +V:ÃGV&HH‚ ø}*øw78# z§Ç|\’„J8$Å73Nøÿ„p4…TEVx…M”…Z˜D\Ø…Eô…`Db8†=T†f˜CG~œV9ÖB]Ë3èzvB‡Àcc‡‰&2/jzxƒ×]ާ¶'*z·abV;¡åSÁµƒý·.àшØ÷($öZ¶’‡[¨uZ?˜ˆ¤ÖcæGP#H0žHQœè†Æc[–kƒa„hhŸXeŸ¨i”jŠ–b¤x&æb¼(`aV~²uiº¥\m¨[º˜Œü¥‹58Œ¶Xb•C_¨˜Zæp1Hfïu!¾·XŽ#b³õd÷¥ˆ(ÖXãP˜†X°Ócé5i›ˆ\Ÿ–/ù"Ž<æÛø;á8"¶xŠø8c å ?ø7tÄ„iÈÿh84TE|x ©oè‰hÔ²„x‘Ó¨ÿXxØ2}Åe\ÞxަˆˆµÅa˜Ô‘g¶1¶*¸ò/!©Š”ffòx‹Ê苵(‘‡æˆ”I£˜’sw4-öŒ4Æ’¾“)C¹k…†.¡ò3F'CSjÂè’Œ#01¹ŠµØ‹,vhœøWØÈ“ü˜ië¥8œb0XY-7©”R1°÷“Òxe‰‰‰•1G ‹ØÒT˘aVVŒvŽ£¥_”¥ŽæxÙ¤ö‘•h‰Œö¸Ž~å—îx‹b©”É’•jò•^óPÝØ~;øX)•&VS”?’{'Aš4ƒšÉ¢i‚)”„ª‰‡TÙ±éšBño<˜ƒÁh’»XŠ:m :oi›na—5fØè;Á˜“nÙv?󛞘ÄÉkØQ|‰H™åÈ”9x‰¦¶˜Ó Sa~æ$¦9žéÓšêéAìÙžôžðIAò9ŸTŸöÉ@ø™Ÿ:4—çÉŸòæŸØ z̶Ÿ*@Õy8Ç·‡áS›ï& -_jI\(”•æ::^¦YK9™¿å¡•Â^êŽfm!˜žn¸`Þ){ש(TIyI_³ù‹¾¸R.|3 •Øå Ù• «És×–¶‹õ‚‹´œ Fèi“*ÞȤÜé\cF“õ¡ë¤ã¦¥Ên^ú¥Zž}6 bêoaz¦€f j*DiÚ¦øö¦pºor:§hJ¦Àf§qЧɦ§wêŠB§‘~êfl:¨ëY§†zpˆš¨AZº¨ŒZW…ú¨à©’êDŽZ©mE©˜j=—º©™×©žÊy ªŸ7ª¤*z¦zªñ¤©ªŠ<¬Úª‚óª° 8²:«Ü“ª¶Š…¸š«[¸«¼ê…¾ú«a¬ÂJ†ÄZ¬g±x¬Èª†Êº¬5T«Î*>Í­0­ÔÚ5Öz­[“­ÚêOÓÚ­$Ä­àº]|:ˆãÊDâz®5“®ê*…ßÚ®ñù®ðJŸò:¯÷Y¯öªŸøš¯Õ#q ¡ ´¯üúè))8^Úƒµ^`Ì9Ò¸•X¡÷H;º™5ü²“x|ƒ†)UñgR•ù¡‹(£ä‰A¬Á!¡}+ˆ’~™ŽÊ`´ ÷BŠ H„6˜_ðç_¢Ø3„ùË¢X}ž<Ë@(|ÆÇRÂ\u~5ˆÊ-õQÉl˜±ÂΨ̡ìÈ 6_¥Üвüˆ ¨¢ÕÜÏ‚üÏÒ‚Æâ<‰Ÿ Ëï7ˆÑ-ýw»œTçìÑéŒÅøÌÑLœÒ}¼S¹{6|Ï…2ØŠ¡ÑÊ |ÚÍ ¼Ì?½;=ÍÓ±<Ó9ÍCÍ})íÐíœÌ«·Ç©ìÅbýzVmÏ*}Õ…¸ÏDÒ×lÒ”Á•ÃÜâ|˾әvœ=ÖâÅнÐZmÉTæ øœŽèÌyM;…MUŠ­b‚mÖŒÝÆÜœ€í#ÖØœhÈ~ +¨wQ1ÍÑT­Ñv9Rm—oŒÕþ‡Ø£-Ê‹ìÎPŒ™ï¼`•üƒùüÅHÇŒ ÑkÌÊ9ìÖE,L,•M¾ýÛ ùÄÀ2Ü/\ÜÆÝ?Ê}ÀÌÝÜûóܼÔÒ=ÝlmÙÑ}ÝóCÝ—ÍÝ>”ÝÄÄàí¦lìÂÐMÞåÝÝâ½Üê½ÞïÿãÝÛ ß‡zÞ>üÞô­>òßùm>ûíÊý]ß¼ÝÆüàáóßÖmàîÔÞé à ~à ^ÝîÜþÝlá2zŒÜyå6ª¬&oz‘j=l>ßb,~Dz¥>œi¹áq(‘xˆ±9“,®|¸ÙG­Š#ÎÏöÄÖ•—¸ 5Ž;¾š&#¡'CÍÎ8 YZ0?%^àiI‡¬òZœY*YìXm™ñÕYZ¥œý£”Œ^çeQ棺ң¬ÙfÈåµÜdh¾P.uçе__yæ€8àè-á±Ö¼[•–HŒì˜`pÈŒ‡ujK©˜†~¤+)Y^•ÆÈä„>¥½¹èBÔ^£Ìé•6ZäZ¹çG^~Å£íÅ£W¹Qù(M¥Ë‰ê,zéM¤š^Ña –.9›ÁI”] é¾¾_•R5VQ@Ý8’§þfSþãǬ&ÒL“šùM™‹˜Þ›²Ž˜Pù.°.ÙÙ.Ù½ŽíXJãÁ.íßéŒE“ì ~î:Ž“^ÕãþLåÇâ»ùå©,ž…™žŠnïˆëÕî_™UÆÄ£æ×^P,&“¥Žv>ðB^ë8æ-Ò&JŽ7–ãHØì n>£^¬¥^@/¬?áæíç÷íì"Ï©ÿð^Òò,oãK«á+ äÁM,½¸ÛIÝÛ+Ï%O.)Nä7~âDñÇ5ÿò&Aa ·‰ñc³ó´™á¯ óHôoL‘‘Îp!_—{í™Ãæ´^çuþÀL€’YæÌ9öHçjÏц˜ÌõÍï  Ée/‚¿õ–Æçl/Ñ>€ˆlìelé%‘õ/^éŽNŒæ˜éê®íCjëå¥âC¯ëˆì{‚è{Þ÷ßžˆÇXõ1~£<ÅŽ˜õF¿øž>ùí()£ôIyœ’¯0Æn9b~÷ó1Ê£Êi•xîöCI£ _úIê홯ø¨/ùyé¶ñ5ë‘ÙÙ0¹ê&¢¯¿•/šÿ„ÿ]nû™m·¸¨â´?éUvûeÙú¤¯i·ïûî^úÁ_“]ñÀˆð‘2-¿‰£ßü)îÝÓÿòd?û¾ÌÑb@à@ø hPáA„ñ5LÈpaD‰!NtHñ"Ĉ -^üˆp!F1*ä8’¤H†[²¬ˆ’¢L•'CrtXófG—;êä sdÉ”g%šSæF‘.ê„*-|T­VÅJµÈÖ­øŠxûÕà&|d¥žE›VíZ¶mݾ…{öh\ºuíº{פJ¥zýþ,5o`›„^EœÕ+ׯÃ*$kÖðdÊ•-Ëí{Y3à’œ3ïÝZtá˃'ÿF½˜ëcÇcËŽ†[ölÚµm߯[sêÄŒÿ†üZ÷pâÅGž\9lÞŠ}³ëZòrͦ£núvîݽon~õ9p±¯§'×.øsMÓsŸOÿ]þ|úõцÇ:ºôíñí¶Ï̿ش¯@\?­ƒ®¼Èàóˆ)œfÒ()˜$œ0§¢bÚ«³ ßC0DGú0’p¤Å¶·ÖŠa B°Å²E¢¶§ Ø_æÜ‘ÙãÛ0Æ#qˆ@ìa @AE8"Éè†lïƒ]Ö„)@ Tb €5¡T"ƒ!˜À PAJp|”€»ãÄô€^0X´ÏTfvUB…t¸&P‡BB`tØÀc ‚ J`ŽT( .)ð‘`…ØÁö—à‡ó ÐÀ[~7‡ ¦ø°ŠGBäˆ  F ¤‘ YРQP°BJ"“øÄ¶ŽïJLbqÀÀ*€I p‚ÿôµ¥ø+ÂÈ"ïE’¡„ä%„ús©H¥¤´(‰Q‹;4{P”¿ nÑè ”ìîr 8€r ´›k@]Ô°@ò‡;¬–Pˆ¢?ésœ 4T/jϧrµ£á$¹Ð©:@ªæKŸÕ÷”H[ N©¾¸^M™È£t ùëŒ8-981nLdÁ ¦˜E5–Š[àc¦ÆÇ3t°ƒ€BT¨Œ†€ýk\·z֤ѴÔÍnw?Úއ˵ütj(ݚЩÆ5¾·¢xwÎvL1G­’&“X'»H2 ðœnA ¢— þÁ)\á`HÜ0ÿþÿõ«çÍïzs¨à]Z9Ë[Þî›Ð¢ ë•мç:öÜb½ó7)-P¾{GÀE· ×ä  p„#L`ÔPÅFðx 8ÀÇÒÀ‹_hþ š_G/tBÂ(ûÊ*.ù ^xíñ.0¬Ç×J & ˜7È*&°Š\Þ÷pCð¡†`_ø™WÃè‹®Oð·Ã×óæ&@yàž-o8ÃT–ý;—ûëòþ÷ó¥Ç€;aolserver4-4.5.1/docs/intro/tcl2k/html/img038.gif0000644000175000017500000002261707363640503021211 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ À(ß¾ù ‘°ß¼ kU¬·±ã‹p›Ú’;V§]–Œ)þÈŽK.²¡›®¹Ê.Ûî»Ë>ô®CðÊ[®º—’©ï¢j‚ÛFÏJ+ð¡Ô6x-YÙú5ð 7\XÁÕ:È©¤ž«$–x**¨‘ÞâÉc¸Éü&—„ í¯‰ÆÅ:\bËFÿ ¡‡¨ºlóÍ Â\”ÌFXsÉ8-ô„:ų°k;ôÒLcXôPGŸzÕÓMWm5[T5Å?_íõ×ze ÔÖØ&­pg†*I5o@©,öG‹\eÚô½ ÝvÚ}7Éë ß,‘°ÙEmËh·iƒÜ1˜‚áÝå}ŠÓí8¡k‡¸{Å…û·—÷»yælë˸åêeùå{›Žz#à+ ná;‚mûíhÁ®’ì4O]’›š²xÛŒöñ'û:´ú¸á†CÎ?äüôE‘õÍ?Ÿ½DØC¯}÷ØwQøßk½ùà›ßùÝ{nCî_„/üñ¾oÿº¡‹¯ºóáÛÉòÿƒZÜÝ4±ælv]ÃHÝ¥„w>óÐHÁ šÄ( ”’‚A zðƒ‰)`ÄØ;«t„(üà Md°H•-)Œ¡ w#B¸0‚&|Íòî"7ä¡Mgü™EÒÃPï'G<‰ø<Ä|mÎxŸZ!I4˜°ÂåÍP bäH˜ÊÅsZãÈ$w9Ëý¦‰ùšÞóÔ˜=6bÄlT£Õ×Fò¹q}ÑKâøÐÇÇ8ÎQ}wÔaéeFíŒJŠ#¡"í3ÃF:’€YQä#'IÉQI²’˜ÌdŒ.©ÉNzRFÿ ÷ÉRšrAœ<¥*Wé˜T²ò•°<‹+cIËZj*”3×lÉË^Æ —Òå }IÌböd–ÆL¦2A‚Ìe:ó™i&4§IM`æ2XR«¦6«)Ímz“˜Ýü¦8kÎqšSÆpHb††(Â!ÊØH9I"„-D¤!À‚CL‚˜ !ÿ<§@C„‡<\`a`¦5o¸AˆðSÿ4?M‹ËOÖ¡Mý˜>™ ‘*–Ýî¤Ñ’.é¢4 áÃ:£@Ž–3Ä(Ç3ü6χ¤ã'Á ôÁONÄ UC¨ C,èÁCN€ ‡0Á"`‡>B‡HAwÏE@WŠUN@½hš0tèã­˜À+& f胭ƒô±†a As}Ú ‘šnõ¯”ô+`;CÁö° 4,bKÿAÅ2ö±·slß`Æ~)¦qY$ã{æcY)î0£X,!¹8:ûòŠhüÒO;ŸÑi®>Ÿ cj+ÙC5IsøÉ¨nMËÙÝòö8ŸO’„3Æ'þö·•Í­oô1ùW¹y3.tÙ6¹­ÖöGEšá@ Yå\·»à]ÚwÃKÞ›·¼èeØyÓËÞh­×Y\J\•Ǽ5·ŸCÓ•ª['ûòw?ä—çT:ÔŠTqûŠíI (0n77ñažÊì`/iv¸[J°ð ¬ºº]–»\è(˜;¾%J6Ñ5­1 ÅpÂ-~1ÜQÁFQë™SGWì?ÞÆ ?¡ Þ†?º²‡­ñ¸n½=±KÕãBéXˆ.òŒÙ´Û«å½íÍr¦°¬å.oRÄf½Læ#ÕE ­bíŒ[_ŒÉùs—œï׿8Ç9^úÓ½ê7¿ýá¹ÎMÖ-Œ‡\¨÷­Ìò¥O½,ÿOßhÕ»~Ù×4¶Á_O{¥°þصϽíOiÔëþ÷F»ýìOüØ _ÍÅO¾I2¯üß3¿ù¹>ôi/ýé“ùùp!>ƒ Àxˆ$¦}|Úí`¢Ú0D%ú‰âôNxH èS-TÍ)þ‡Ðìt§ÖYà€pðÐjåW*Sþ´SèPQ ª° Ô ¢p* Á &0 ¨4àOAàúàÿ¨ ý€ 'r…R.uQKr™b\å'(õR$ed‘¦Q]t2Óƒ,ƃ‰W!ØñÈ*@4 X… Q}VzX˜…›·…\xy^ø…“†bØxdX†‡w†h¨tÿB—*\¨–rƒápÌÂ*Ð55t8Nm˜‡¤&pÔ5‡Kø\‚ˆ‡ÈJ{[UöE]²ˆ¾•\@æ\¿s[š%]î¶\¸:Iv‡ÅU‰(_˜8DÏud:xX‡h[ ÖfËåˆÄ\9$’ø`›•`¶]¡ˆŠ™8o§H‰ê‹¡Õ,º(Z„UŠÞ–[ÉåˆÄ‰—¨R®H<¾H‰&…Œ«¨ŠÈÈw«•d«XcÒø‰£¨‰Öõ„¯Ã‡ÚŽkx…Þ#pX5À8Ž'¡†êpìØŽÉöŽð¨kò8Vöøhø˜e¶üèeþøZL&Žœ¶9ƒþÆj ‰(ñc‡rLRˆüVŽÏE"‡WgH©¨<|òcÛÑs禑•˜n–èbÇx‹…öd$ÙqÈ#’8Ö2B6h"9n©c$“ñ&]ƒÆbP†\Íø’ÌHd_ׇ˜]ˆoÍÅQ­ƒ_I™'9¨iœ“o%ƒ$qR“_×”fo,™’c‚“6gc09dK‘Bò”øåwcù”ǵ“[¹z¼gkž×G)e ö8™”_´:¨#cÇã_ÿZÆ:JFZòV–Qù’ùU–ùµmW¹Em‰˜Q†`ùR_˜V9×f`vY˜jɹy瘆ÿ)UØ™¢‰^¤YšäÅŽ‰šSˆªÉšªäš¡i1ÆR?{-WD•‡z²ù–²‡|BoZ©nã>yv?q|ögÁœôc/·iv—‰“+)‘Wwy¿‰Ki¶HÃyrT‘›o¸orÓˆ{Á—£‡l°iJÛi@¾&œA±šriž§ÓAŸ©èI#½×zdrÖu\÷•X·2æ™ïFD|““ú˜×iœ2IŸ˜ôž#ŸÞ9Ÿ¯Vƒ|ç1¬Ãm¨C•Æa¬è6‚9ÊE‹ù-Æ_b4`g$¢‘V„æD¡6d¡5מ™D£hf£–†£¤£‹yþI›àé£ ¤ &¤1¸G¤Øi¤„¤½¦¤ÃÇHEꤥÌÖŸK lV:¡ûÙ7Ú¥„¥±WpòÙ6bꥒÿœfz¡hš¦”D¦éœnú §/"§ü©ž¾÷ŸxúHz ¦=:”)•'6VéqN”Šj“”…A(ó¨yEU k$¨<úlɘ!¡”#©r‚”€Ù›eW .Ù¤œj9I ÕI—Ô“>ä©jb<¢U™úö¥™jxáøsocŸk©Rz¦vú§€Š«ÁZ§ž¦ ¾:7€¢ÊÊjzÔÑ*wu+gæâÙ*H- ˆ"e¬Z:¥ß)\—’næZdçZ’ <²Jx„vq¯ÁvðzD|wx‡wÓJ­úz¯q§Gâc¯ÕZc:ˆœsÁœÎy.x6Ê©œyf›?„в·z &”Cx¯YmT'zoôå¡û‚Ya硽ø¢™(~”Gr”pD=­-û®Ë² ³éS³k´³sTG>Ëãr/&±K?+gðÒgí²gKË´ ;Fˆ3²½È`^‡„ŽÇ¹ÊžÄ:CÀ®Âš¬[+C]˧CÊ¥¨¶V3¶t¦Ëж–¢¶mz£më¶®d»¥G·*d·k;¨z[ApKs~û· ¸O§µ„ ¸|·ƒ›¸¸ºc¸…‡¸Ž»@—~Z©Ã‰¨ ª˜»¨¤šlתDk©E”¨o»¸‚«©´ nÄé”-¶ªJœ‘Ê©hIdŸUìã=ûz>{¤vºòº»g³ýê»È{Å©›B)*•»ž—Ë08·˜Â]ÔëÏÛ§L:¹-¥º‡Ë½f8›àu§9¾ËT¾æ›L蛾Ŵ¾ìëKîû¾¼¿òKNâ[¿ÁF¿ø Kú»¿†x¿þ iýÀ§4À\J|Àž«”À ¬I ÜÀ˜ôÀX<ÁY&ÁìHœÁ…UÁlšüÁ©Â" ^\‰EÂ(üX'¼ÂÔÂ.ÜX*ä8Ã4F]$»7ÕÛǨ³µ¢˜SÚª„١ّv¡˜¢™µŒÜŒØØ ˆ‹Ï½–):]”ÝSëÛ0Û&‹¼Ìݤ3ÝœCÈmÊ-\ÝÛ¢½‘ڨݾx‡ú4ôMÙ³˜bÊ%Š”Í‰™˜ß·d¶è“çýHéí©ÍD¯˜”‡ãŒÞ[e4Ü£5ŒNaž([ú]Œ‘ÝÙú݉¹]&ˆgYÃ"Õ Î¬ua>Nàêúë¯Øáßíá‰÷]áµÈ‘()o..ÛéH[§½Ö{­àEãÞ9~äÖ¸á#Ú6H"ˆË“5®7¾‰2Þâý­á®=ÚP]â\}âÞMå³x—ðý‹ÛMà&¶ÜRÎÚ$ÓÝÑŒIN__îàãÆã,Sæ‰è’)ûÕA^×Cάõ!Ü%*ŠPŽ[µAÝ)®ä¸M©òýwû­âý-ãHþâhTZ‹¹‹&¼çÝçDcÜQTàŸwàë"†Ž3½µ ®é|ݾ˜ŽØ¨žêð»ê™Ýê®>¿°žÜ²>ëöËåfíå¸Nëº×¼Þë¹J&îÓÂ>ì‘QìD}ì´ÿtêÁÎì¯äìÆíÑ^ëê}ëÔ^ÀÖŽàÓžíǽí¡îí¶$íË.îÚþëzýìæþIä¾îÊÔînaÙœî¹ ²¬ó«¹~èéŠîØ®pn 8rÞ™fï«­¼®x¨Í«-gÎä­äïêîð„:‘¦FðÍÊ ލ+Ùg›ïïqȱ ÖÚá=á%O`KZ c˜‹3Üú±%‡ãZ$Ûò#Þ±÷õãSË8–…&”99d) ªrŸš—3æ&óC¿ñè©ìq˜ç›j»pöÙ` xß‘›É¼(V¤VÙ\|¹_ O'ùõYª®Úu^$Zª?«lÉ,*YöàÉ–÷þ OÛ#ø^µa?òEYoïóæ±Uo%ç¡õ­ô;©'b?Zf¯•ŠÉn‡ ™ˆöõ¬öý|ðÛ†‘s‰»Þ±Y­czèŽÚÝ^‡"e­›‘{ø{»z»ÏÂõ€Ç®¨¿®kž–MÚö_•çFõ—UËp¯ûWao¿ðP¹øiu_ñÁõ®rò?nò°µñ¼‹#¯››Ïùéaý³õü•/á=“iùòÍ/Ý—/™ i² þøŒ¿ü'_ü ñ¡Ïs¿åÄÞåïN¿ƒƒ?4Çïî½´ÿ¡Oà@‚ D˜PáB† >„QâDŠ-^ĘQãFŽ=~Ò–¾‘%IžÿiD¥J}FZ¾t)°“¾™!mÞÄ™SçNž=}þThC“EQ¶\éR)Ì3k…UêTªU­^Å*ÕèV¤+™.•I3ëX²eÍžE›V­D®F“.…ÛTìZºuíÞÅ›W¯Â¶Gß~}öé^Â… Fœ8c_“ãÆ;x(Å•-_Æ ”²UÆ'4½KòH97г§%{ƒm®ôÞ¤ªKÂLÌ Ð„³PŽêäéÎ×|‘Ä ¡:ÐPI'E Ñ1¶')å´SO­ìð(®”c =¨,ý4UUQC5'L›ÔtÏUg¥u¸Vqzu9'e”Ѓ|…X+ë¶Vc1 µ3RÁÚõÔŸäòÁa+lï%ÑA¡u´Çì~<Ej±hBoµµ–>»]¨Z­E÷[vÅìÖ›ÿr-µÙÉ|b3ß Óló× ùÝv¾l-Ķ؆2—ÊaAmX6»}8Ê}á%M^›èe6Vg{Ò÷܆=îwJ€T‘ʈAÎ`„¹m˜_7?NWâ5¹ýVaŠ/³X$Qw^60{-gº ®Šh‘o¦Mè0öYã{ÅûiŒÀmð]©KSÚ#¦óü É«¿{­¬;ÚšÑMÃF;í«Ææ¨lSŸV;n¹ælg·ÌƒUÏž»o¿5b{#·öÚß¿Gœ¢À5Üiº O¾ñBã#ýˆ¬.ª Œkà¨H—± ò…#³$ÕdF”ý‘d,;™„!9^²“š|$e6³Oº'’ÿlå$1Y"Sž²Œ•”dËBÙE" ç #ÇàåÂfЗ_L$ÏÙ´F.°—Ç´e0ï6ÁÒs†È„fmn‰\òdšÑĦ1µÁÝài€ÜËf8W)eúe˜¿sžExya ÊWëtGÜàƒÌs'öL>3¢O‚l#a"ÓMúÊxöóW/³"êR͘ðƒÞBW»š(ĈF‹–g×?6D2 džôü(A>R…ŒTŸö éHõARª´¥ü|éJé™OòÓ¤"EiNmªÓ¥ÉF-ªŸ b#-¨\JŽЇFq¢LDbÉŽSÇrŽŽ™Œ4ßUøÐUJ2ak4ÆcG9×18ât ø¼iC`*Ó³Ît­2MkZ[Ú֒Δ­puéIízWºÎu"/ªÎ‹PV¨ÂQ¤RØÃ––`Í£¥¨Z7eó›î3èµ53Ý‘”e()ºÆžöõ®zeÈIýzÚ½š6§«emk BR´Úµ¶15íjß £,1V¨„ÝÒ—+Ü¡wL12lcKéYU–¡l$äB¹)À·Y0PS½&¾²»–ÝúD¹xÙîEÃ;†ê$T¢8"× (¶oããHyå=“²W½¬ªêø˜DÁ¬êò¾ÿE |¹)Áý6³¿Öp‚ #`ùâd…Vp„JYñQ—pÚ,¨„5LOײÕuä,7ìÉÝ\””×ÜgBïèÏVóœ ½è ßÌy´¢=éV:ÿÏIÖ18)á÷"îÍŠ„´˜ý ÅgI»1Cu,*â‡Às½²í®GbM‘µÎ…au¥Í\¯CÇYÅN¦!µXQôúq‡ml§ ¥®˜‘\=âqZÓ½Ö÷Õ.ekJµ]mlc»­5EH··Ím˜Z»ÙJãáÃjð|Z˜¡Nô¨­˜É`QתžqAq}-憬§mÝêíº¼¯o­ïÀYÊ×îò´¶ çkn[½ï…u×–q÷21­çǓ޷î, ‹ÊSŽV”˜ô·EI ]†\âQmËaëZpGüáu¥¶_Ë kÛ¦š´œÔìº •qsÂ[ÎòæTx/ž*â-½2„D·êÆ#tJSêúÍr¼œà„C¼ênîµÑ=߯ýêP´¨­).¶·Ýío‡{Üå>wº×ÝîwÇ{Þõ¾w¾÷Ýï|àO÷°K]íeG|mbœxÆcfñ‡|byÊfò•Çü].ŸyΫeó}Y>zÒ>ëG/}êÑ2zÕ·^(~¬w}ìí„äÓ]ö·'íÓ®uÜ÷þõºÏê}?|ŸÀžøÇoðˇ|æÿË»~ó¥O6åówú×׉ñ±¿ýƒhŸûßoõ ~ò3NüB.ú™w~%«ßýìc¦ß?¾ÄŸãôÇ?yí?õü¿ßûý¾ÿÀÞÀ¼½4ÀØZCÀl½dÀÔsÀ$½”@УÀ ä¼ Ä@ÌÓÀ ¤¼ô@ÈÁd¼$AÄ3ÁüºTAJcÁd´„ÁB“Áì³´Á:ÃÁl³äÁ2óÁì² Â*ÿ#Â"l²#DÂ"SÂ%ì±&tƒÂ(t±)¤B³Â+ܰ,ÔB ãÂ.T°/CÃ1¼¯24Cᙇ‡XCíÙ¿ÃKC.{P†õ{¾à³½9¤1qoЇP€ ‡p„ðÉÃåãC.ƒ‡‚Ø}X„ˆ€x}øƒ‚‡ŠCÞ[Ä˃cЇb(f€\ ƒmЇF@D|4ÃãD‹¨‡Nô|ˆ‡n@†H`„D„>èƒ 1C`H˜„eø†B„ D´>‡°H0ˆ8°‡ƒ¨.0ˆ ‚ˆ(0ÐÅäñ„>à_ LÀÃV¬=‡~¨G8vˆ8Gn$ˆ(8@‡UuøF0}øÆàFr,Çàq€„^$€0È ˜žMt¦zøÇ0T Ç,4Ђ †] …0)Ç0-ÐÈ|äÇyƆŒ°„J¨ƒ9À€¨€¨„Vÿ‘¡/FøÇRàH°-%•Ó$'6q:Ãø*…ª´t¡¡§ 6®T¨ò—c{®°‘ʪ4ˆL`:@Ky#^¸Y¤Gy|ˆQ µHõÈJ¬töx$NãsáKiA–½,LîHÌh6jáËÇÁ\05²‰ ‡¨ŒÌ*¤”FhG|tàÇ`Hkð-T¨…k`QÈ}¨‡¼Ô‡hØ.Qà…*p0¯DÌJÃŽçÌ{; Þ\̾d¥KPéMYRÎÇüʨ›a; òG¤´KƒÉ|Dˆ^øÈЇ¨TPrtv G…q‚Tÿ€r<ï´2ç%5b%® ο”“û$NÊdÌü„ÎF3¥åŒßË2PÉœL¿ÌŠ{+ˆ0¨|”Ç0ˆ+^8iÔ-zˆn¤ &8i´SàÆ*ˆ†C¨‚˜ú¬Ñ©dÌ9a¢N¿¤Jš–µ(¡#̦:Í‹²Ì(˜ h‚P$˜€ °V˜€°R ¨R}˜}@5ð…`S4ÓvøjÒLˆPÎlÉŒO«L ã¨Cñž 8…ih‚#h‚/ˆV˜€V/%Ô €5Ї5DET0]5UÆñ{PFyÌœ § 0zðÓˆˆ4À¥5ÅÔÌCÃQ- R5ÕþÑ€;aolserver4-4.5.1/docs/intro/tcl2k/html/img039.gif0000644000175000017500000002401007363640503021177 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ À(ß¾ù>|7ïп€!"Ö˸±ã·MáÊ«Ó.KÂODl¸!fÏA'Î÷Y´iÒ¡OSä<Ú"kÅ©K‹þ8µjÔ­ Ë–-³fÜ·U—n˜·oÛÀƒ?^înäÉtZ^ÉZ3ñÄœ“¿>¸úèÏÞ[ÿ Ÿ;vèìÇÅk_¿>£èQDâdIð±I_O·ê é¯>ÕÚ“¤P):«_ºê&¥`)X^ÊŠ‡Ü–´‘7g}Ѳ÷æœv^;›yæmÔ+°ä‚$lKÄn˜"Vç–ëî»¶»Rº(rÈîHm´áP¾åëï¾úò‹‘¿ ‘Á™aWæÂj~9d®h:|fgO*ëѸÛÂIq_Ó*üµËé­šu†nÆ$7,ìÆ‡œ§¼M sJÿô[)R3ëóÎ+æ|R͔ދ2ÏDm¡Ï&-ëÍ´íôÓ""]’Ò42,ÔXg¡Ô$Q¤ÕEq­õØdk%v¤¯>kÕB“ 1¯¿ ·r*Ý*·H¿m†ñGy»ìÉâž-¡à$¦ àÚ_·}íÆÑîɬ— 7Þ­ÞÐ>ëø²“'ÌížP:žy˜”sÜxäבqµ£/[ÅÎZþez¥{Y2•ñ¶Š!’•Máe÷îûa¶nâ¤K+nry‡Ì²ÈÉ7OûÐË3žrö=´Æ.§Ü²ÊϧÙ1ÉOj¯Qå/3¯÷˜Ñ‹/1öݯï~³ÙÜï Ÿa¢A_Eÿïü÷ŸÒþþ¹ârg<ñù[ðþƒ»ué/Œ`P¸¯ð×óKÎöF½óeP~梠ö8x¼ Âì{k“»D˜ :Ð*,œP ù6ÃÚÕ­†[[ áh/ Jð‡@< )âÂÂ0ˆHL¢¹t(™¾°*CT¢±E‰qQ–ò ÷ÖÄÅíu‘}WúQú÷Å0:Œd4_Ñǰ5ýÆIòZ^úÞ¸²:viŽœÃqgâ\ñXa›¢ ©%&¾Š‡XÄÙî&-jQs[Li1.ŽÑWÕ“Ù [ó¯|L_ ù$À*òIPì” üX©÷:ç]’Mé£Ëäè#n¥Šÿù£î€GÈ^ —.±ßðŠ•¿#~ЗÈ,0¢Ëª1™ÐÔÚ2ÒÌhZóšª&6·ÉMÿVø+^7ÇIγh³œèL'UΩÎvº(ì|§<çù³o"ô̧>[hO'qŸ èEâ)Ђ” M¨‹á>4¤ I„C’QÁ~†“m> ‚"‹\Á!% JÐ’*ô¤|º.00N€M\EB*’–`¤%€Žã™]õ´Ž$PÁg(™]l¨Hj-yÚ¤ÍÒ©¾ j 0 r8ƒk¥:L`˜ !éDºpÓ8d !(Á9ò±<Ä×pÈYJ ‚uä#?pH²qŽL3™SÅæ2Á & @G>lÀŠ ¸bù`F> K8¤!jÆòqY7¬ V´(ñ0ŠÒÒÒ3«¦Mí8Q«ÚÖ^“µ®-2ÿa+ÛÚ ’¶Ç«£}¾å9×Ny“„Ø+ß‚kY¾½që9ʹ’u½­È¢;\à n·¶ÅnCGê®.?àõ©r²¥­EFî»ÛaœßÄ{šÝ·uŒLvÛÛ±ó†î¯îÜ® m ¬FâWüÍ®~³Kà¸ÀößÌàÞ-¸ÁÎÚƒR_Þ.NtÍ…%üÚ”a+5×z«cÙå‚»Jëa|*|zN‡a=Z2JÈcVŒÉ'c, Wv8^£5'ü7ôfr•?¦¤×÷ÌLް7\ _Ef ³–áE£‘)i¦ÞíÆâ WÅP|Gi%UÊÝäq„ÇL41“ùÌï2³ÑÌ„f 2.þLdÓЫ^¥*/~ɘ¯WÉäèù‹»òn£Gã=ë“mæ¥EKLq3Ñ^Ò›ÕÓ >š@k ñ†´/‡ƒžî`÷ é˜áWÍ:bQ€C½ÝGk̪Øá/ Õ¸:f¤wÝj£àš$µü/¯zjF«ëŸTö°][ÿl˜ŽV¦—^¶´Ç7éÃUú‰Éž¶¶©íkc×KÎWC4usÆH¶²È~þó¸ñ<ê>‹x–šT¥½o3>lÞï3`­}šïuçYÜ£&T³íwÏ] EÙÛFéÀg|*šÓ·<CÍêGš¸ÏâOÿc Ûà4D2ŒçWí5Üà\¤®´ïBUâ@‚á«™ºhg7š´P\yÂ!½ðžÜ™èÞy›{ÞÄk#[ãBOz`J~¿g[:çЫ÷ìè­>vO½ÉV7w°Ù˜c{Kij#t#·%v*9™êUß-ŽÇwý?÷¡Ò“þv8Üœ»ÒëNi§cézß9ß­í÷£©+Rç@ÙÛËAÔZüñ!çº×C˜ñ©§ÐmcW{‰òëñ<íå%!è4x“ßÝáÇÙèïßv¹wõ–ŸßÌɵâ¶\-¥oúÍ¡ õ%*UÞ¿½äÌÎÕîø³.“ÀeÞ2îÕ¡!˜'ÿE°LwÒ"ÔOeõ!"}Ú 7ê¦ãíñsÝoXø¢†j•å>”Îã-ðtgú0÷ÝAþgÎýü¿ú”ã?áúÿN…WÿW€Ùäm6c€ (!î·€h ø€(¸{O7È˜èØ ¨‚$85XL%˜‚Y1‚*¸€†€1žð€ ÁZ:€SÙP7uSqS\eMð(0\•&•8ÕUN( ‘_õU-¸kàpðШ•]5R_ujèÔ ª0  &±à»P¢`†ù0#T˜MP…!p P(RVHØñTß±qÞÃSRUTKGs=µˆ4Ç1@UK·~³9ŠñTHe‰½c~iq`)03W˜Š&'hsôתøŠ4s‚Ž‹´ø,X‹¸x‹¸H‹º¸‹¯Ø‹¾˜ŠÀŒ-ÿ8‚—¢³wC{>fB¦–ŒÄÈL²ˆsÊH Ðlï…pÕ¨eÌ(ŒÓÈ{Ê:Â_èç&ìU|ÚŽ:²oê¸^i¤\àòd‚_ôf_Yö}`"ÐeåaÆ7õe졎¯G_Yò7uvޱD7ßGgXçz[ÆoÖ’^ƒVat£|Ú¸Zßx'q Iñe踈qÍG‘ú( ‰]íè\ú¡’׎$ štµ5Œga“;£“ýÁ“²…“fᓎR]QÓ(”Ñ‚H™”¸”L™Nù”•Rù€TY• x•Xi€Z¹•ÿוâ}yë6´ÖxòŒ­õÉ8Id™÷qˆoéX+ ‘%CÏtnCdjI_‘4—÷6o?õJåÆFh™<öEd–S’A—LlÉxo™bù˜vîˆv:Ʋ×gõˆ'Ju{AuŽÔ™yÙxt„n…†eLvv…é0vs{Ø–!¨32³ù0Øb™E&]­÷Œ¨ùc¬cš¤¹a‡9d#Ø™y`ö|ì3bÃ'=é·M°é•zÿ7Ô©tÖyB—Ú™p`9–Ý©LXp@žî€äÉ~üu¬B${d‰xˆžqmþ&yЧg¬ ‘˜4FnÙoWvˆI˜ù©Šôyz(—x g)à‰+À$z Š`:€®èfæ©OjwxHT{ªg”]!”¹z"J+¹’¡­˜ $J¡dJÚ—JJ/:J53@ö\%¶£òUgýFK—yØÃ0´”£ýÉ£`Th÷Ù#’Ç:­í~.vqu" CJ˜ ¤{I ÝÕe(v'ÖZ¯ãZšÓqÏ*p¼J¡YÊ+Ÿ¡›ê3 ÊÝú¯}E¬ät°¾ªJ Ê“¼Éi{‘ù’e©iK±Æ—±FrVJp©ê©Õz¤mTIOŠvrã–]†¤¤–ná pîVáz²ù£x¹dΉB¢›Úúb;Ze—D³¶™˜Hª®Ž˜¬ŒØ~‰«áFCRB~ª)]8V~¦‘²¿•¦º ›³\8Ú§2¦§ÜÐu¨»§»’µ¯ášP&µî:Ý2‘o §ù’’Ó¦kbÓãWýª¡ÂÚ´ »M ;©}MkŸè¸4¸ª­†Û¡y›¢Îı‹«3ˆ+²‘ªÛ¨€ûއ±xtÙš®±ŽçqQT¢Š8ãW“= ‰Ëp½ ¸€ã£3+uQšAìÙ]§²-ò^g²Y7Bï´x&´¾’£¢™ºÇ‰»›i¼ƒ2¹¯º|t»ªTK|_›,F]} ~)–ÂW~ãÒ¦ÕK¶Vµ;"vǘ­÷Õ,Î'¶½Ë(ÌK«•{ª«ÿës­K¸ñ»©—+©ö{¿¿”¿—úªü;Hï;¬Œ¿ó[tþÚ° DÌ·]·¹›ô_zÉ#f7oCº÷UÁ{õʯ wõ›¸’oÀë»[4»¹¤ìJe,{šY—øÖÂ+_1|Fpä¹5¼¤;›yw«º5²!L¹_;¨`{~ÒK¨Êé½Ï§¤6½d„9àÇ|Ó+~±ã|r;9Tì§Çɶt½L¬¹ê¾þÛ©¼ÀJÔÀygÆ<Æ£ ¿*Wy×ÃÌ.k£È8r̺­¸ÇÆ®êÆ=æEÅ‹›oic‚©FJÖ™þ¹Aêöb…+24 0×Ç/`Ê}1z£c¦fh²[“­S#¯²4Â(ì¬9ÉdzJÀ†¶(1É¡ Ÿ äŒu,.¤Ì´i¬ÆS„Æö§Ç´б¼·³\º¹¬Ëlw 캯üË2´ËÇêÆœD¶üpËÌÀÈì­Ïœt´Ü9Í'UÍÖœP؜͵ÍÜPÞüÍûÎâœOä\ÎótÎèüNê¼ÎíÔÎîœNðÏå4Ïô¬‘Wª¿÷ŒKËËû,möüϯÙÏÉ,ÐÐÝ;ãàÈàÛP?ùü¿ ­Z•y. ÝdHÐÒ<ÑÕxÀvð u ÄÜ7%" ‘ AØ„D !`Õ! Óù°6ÒÔx°R_¸°Òÿ¬ÛÒA„@hÓ²ATÌïÑZ–šðd`Л ÐÑMÆÑ)`†ºpS"%ÕaQ]аšhgà—Iu>œH1—hk ø§B¥‰~Ý×È“ˆ­L”ÈóÍ0 óðR,­·õ„i%J„] ¹Ð»`Ù`;p ¥p ù@yURÙÀÓN¸§Û`—!Øsª¨_¶ˆèr:›´×†‰K%Ü1Y؉èe•(‰P³ØtÚÕ`XLà5 # åšÅY1`t„‡HÔÖ„€IpI@0#° ‰5­0ò#Žhp¾ —e›u¿ZeÝÆâiÄR/ QÐa%âOþÑ Ž` nt ް^`^x^áÃváz›á¾k~lþá-L îÏ$Þ`!nà(žâ ¶â2â.Žf0N2>ãdVãtqã8®à&.á-Þã¶¥ãQÁãBÎ`DžF~äþãä/‚ÁÕÈä,ÿ‘ä±äzl!å¦;\\ÞŒ¬g¨Œ•VnXŽVmºf9Ü[j&6æUYæà™i±'yb霒¼Žéµö ^v]À‡<¯'虳è}žçbžæ„$çgÞ#lzŽvKÄ’óÅ$©½KbµÌÙÛŸs#øÈÄQ,oIúéíñ¼æêa+µü˜ãNÞáPžBó‘žÎ é_ƒæYþæó厎ëÜæã8¤ã•(Y^3yÞK’>ëuî°0æå|N“ÍwµÌgÅ™9™)ù´™ìIÃ+¹¾œž’ ‰ì[ÛìÎë"í~õ½Ø+’՞꺞çɆî°^ÁnîÚ2‡ÚM^vÎïûÞ®CàìÎâtþîNïÍ(“v)‘7›°ÀÎç#ùí9ì¶ûê{.îÿí' çöì ¯æ<—¨~ñóUêã8½ž­êò+¹ð]üÎ줣ñOÖf"ïà]&?]žòYËëxîç1òxóñ•ùôp›ì;b¯î³uð1îî,¹|Âõ\òŽõ6®õ¤çõ Rë=cöúÔóNå×,ö;Nön¯Pl?÷*÷E.÷vßÍx¯äz¿÷àÜ÷Wþ÷€?΂oæ„_øæ|øsîóŠoøÿ râ#ÿøU÷”“Œ?é—O÷™Ÿø›ÿÎ?ùŸŸÎ¡ïø£Ÿ_¥ßö§ú‘䢿ú ßúOþú’;UÓT°j`lZ–o6âØ²qLÁ››Çl°üŸ•ú_Çp¬ûÂpgéË[#—ªÕûˆH°[7ÄCL”ÖýÚ>´ZõÏKœëíG/šš|¾éKþSºnEü›Èå¼ëëý¢ìKÖßéÙ¾ ÿI­Ê«˜ ß@‚4(ð`Á æsø0"D„)6¬x‘á‰-:<²bĉ%3nÌ(Ңǎ ¶|9ò$L–3r4 M/B 7ä°C?1DG$ñº A«ð»ªÂC­2D_„1Fg¤±F;»/¼J¼o2H!‡$²H#C<‘©UdñH'Ÿ„2J)§ 2ÿɦ–¼°I*·ä²K/¿(+ŸMÅO 3M5×d³MÇìN*1üÑM;ïÄ3O=Å̱O,KÓrOA%´P/áü< e´QGÑ2ç TDå Å4SM­»4;I½£tQ;Ý´TSOÄOådRÔIE5VYO…ÕºUç<3ÃWgåµW^k­îV3é,X [šn³d÷ZV@¹jmÖWiW2–3aCEsTÕà‚[ø’Sˆ5½¾ªì£óž£L²tmÒoY$P¦ÃâëOÜiï-ªÚÍ®m5Û]©#)§€ó §ÿ$s6-âØ-w=™rS8°Ï­·âˆñÅ8ÕùÍÒUKÓÒ­ß¿+á€Fù%‰Þe²àµ·å…k"Î?ˆ3Æ™0Uû¤pÒ~uý˜:õ¥1ZÎŒ6:ç^‰ÎŒc@=‘a¦.Wi«¯îjg+]j§Æ:l±ÿõÐiEý zlµ×¾lËÌîí¨Ù‹n»t[;žQô¹c¹¿î²6Ž9ij«5|ʤ7W¨hzµ¼‚;×:?œZðÁ5/HsÎ=Ïôž<œ ÒM?]\uóÚv@Šé5÷ÝÅfÇ©ê’ÉCpõo ó¶äÜgN¬xã%:Áß—nºà`®zùÚ!—Må÷ÿV²ï§ÿƳÒÚ>uÔCÜ'ïÁ÷~û„W†·pÆ(v6äƒ_kñâY¦ù>úgÞ唺5odÌìCÐÅ‚w¿Æ¡Ïσ™Q|£5êÅ WÄÒÖeÌ×½ð¯sæ])ø=îiÐw‘Yïh6ÂüÀÏ„ DápΧ@ú¹a)TžþNø—÷…PbB»ÌnH2â…ê{aƒ‚²ÀémÍzgÚÜö9è±æEM<œ› è!&NÎfÂ)b¹f¹b-ÑvùI`¬Øw7ß=bQ*A²ˆtã#cï•F¢¬±RJ”cõ˜:ÅŽ^ËÞ9HÍôQ(Ä£HHF6ò# <ь٘6:Ò’ƒ4$RH&PýìrŠ\ä%E¹ÇLòɈô[WÀQ¶RŽ¥ü "UHºÒ–lƒ¥OdùÉåò–¿4•/qtJV¥’—&0• ©dZd—]\f4éÖ̇<3‚ÒĦبÉk¶1›ßÌÙ6 ÒMJ‚Óœø'AȉÇs¶SZéÈ:WéNzþ ’ÿ{“äçYO~Òêž::bÜf Ê~tSðÜä•ÊÅkÔ¡B¨'zE*B+o‹cNfuÆJe¥Ñ#) %S˜æëY)sBõO?-t’ìüÖÉÔ»×%\ŠIVí†×¿ ‘9F=Þºpz»üUÕ…gŒaïÐÃÔ…2ŠV—‚J¤é´m<í*¯7Ð^z•„+=W\÷×CVÌ€ÐÉ)ÀZ¨.¹5”®kK-¦C öµ„1«áÁ :ÓÚ4kŠiú¨}*ÒÚì€S}ÙýÜ—U¤Î̆*Dì[vYéÕ”°2ü, ØÍ¶†ƒÿ¡ú< Z²šTS‘äd5ÚVŒ=¶£B¬¥£p‹OÝ&’·¿Eî† Pµ"ñ˜2kr¥ ]´ò­¹}®†¢;]ºÕ».C½Ù]ò––pßUhxºOÜÅ(©Ï ­L95U4*Ç·M¤²ðŠ7û¢ög Wp³–Åܪ—²Ç½ \åå-ç…•wUnÂè<â95@`ío¯ª»­¨uýÕjQW—;­.R¨aiSÑÕ­ôÅÏ>^,X¹J¯ Ö‰&®w‹ÌB¢¬Å3+k?{ØZÖ¶ž£_I+Ÿÿ¶F2dügÓçTy…©õññf››ÖÚ}(Íz9Y̵f7B'ÅëÉ\"2Ùþð½æí« MëŸ6—%X¾Xfá—a²¹8S&ŠÁ„×R’ˆ6Ï~Þså%ÓÖ¯.F‹ËVCÀÛµô¯¢‹éÔpÚpËí©Ž[é3»Ø·üL²vSGPÿ§•ÌÎ…æ2ÓSÞAµÚº¯Æn¬i½k(Ù¼¸o9y=l"ù:½À^ïHçLlf³wC­ì²›=mê☹È>0©LmnW;Ò V¶½mãn—Û»Ö5¶wê=oþð£ÿúãeóÝß}õ/?þÓŸ?Å•?ø¾êÈÿ ´”@&3;®x©'C3ÆBÀó!rÛ¶ˆ«>y£¿ýc½µ[*r91Ö¡9¤r:£ƒªyI5 º¥êªl·Ûp0¡ƒ9ÁS±\@SÁש-°=É?OŠ>fi;âa;)²º ¢ \¢~´Æ$Ä7BÆ“ôÉ’œ=›”=’L¶hCʤ,Ê¥´x½+lJbSJqƒI‘œÊa«J‚û¾ÌÊfÛJï[?¯üJf Ëúã?N,K°|J«¾µ4¸³¤IxƒËÕ“ËF¬Ër»KÐK¾ôË¿ÌÀÌÁ$ÌÂ4ÌÃDÌÄTÌÅdÌÆtÌÇ„ÌÈ̶äʼ´L¹ÄËÔL$‘É÷ÛÌÏ,z‘ÌÍÑ„Ñ$ÍÓÄÓDÍÕ´–Μ@Ö„ÍÒtÍ-ŒÍÚLÍÙÔCÛÔÍÖ7ÚÜÍßÄ ÕÎát&Ü<0†| BX¸…1І|`„C˜Q#Îë $M®{€n8HXD>àƒ €0„BX„Geð5%ÉÚ½ ¨†@x0¨‹ .x((ȇàRzê>Ø4ƒK Q:É  ‚{àÔ0u ˆ0àTC-(08U ˆtHÔ(…|HT‚0TG}Ôsr€øƒ3%0È  =0zHÕ(SðÔTeb-È‚ˆ†˜]˜((PT‚(, ÖQ5ÕN½†[Í&¨J 9À€¨€ „jÿ©=/àSHUR0Vè’†Á"Rä¹\ly­€½1¨»©B£>GX¿°á×RÂp˜ƒ‡%òÛ[ˆ…X@VOåT¡…QàGÚº jA9œ+ˆÚ@áà0•MØÛ>–}ÁXÙ„Uš±˜‡¸ ò“W>}NÕ ÈSå[­†È‚8Z°†%\ÈzÙ|€Ø‚…] ‚囉€H˜ý DØB [ñsÙ¯Û™’‹íÙ8Û–--—½YŽÈש=T•׎}ˆfÕ•à…d¥|@@…TpÔHXG-XhÔ@…WpTÜšÿ¼ÛÆÃ¢³•C“Í\Fá\‘í\óp4ºEÛàÙ×¢[šUݲ §—µït‚*€‚/ QåTx+]0>͇,y€C ˆ%0>­‡R0T‚ø„)€ª9ªá™¦úþÁCûÚ“]1ƒÍ¹§Zžmô\×E§«ÂŒ'˜ `H‚#˜€ ¨†U˜€À_ ¸ß|˜€|8ƒ4è`à3`vð…•ÎøÙkMUËÝ’ŒÓJ̽hšS&0&à`… `…àž€7Hƒ|PaHá`5``a­Ì|ø>åTlWf›€r˜‡& 88ƒaÂTÏÌaü”a±,b=b´Lâûƒ“€;aolserver4-4.5.1/docs/intro/tcl2k/html/img040.gif0000644000175000017500000002330307363640503021173 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ  (ß¾ù>”0É¿ ›T¬·±ã¶p›Ú’;V§]–Œ)þ}¶âîÇ?‚ÿ÷ŽÛºyØ¿W“ŸŽq*¹Ú•¤a e“IV§™öi#’Sfi¦iY‚wæ–fª)¦–RviyhÖy¦viv'a÷&—½9ä… ÂHã¡÷1‰hgU.*Ô 7•¨¡£”Vjé¥!A U¡C"5Þ§ †*ꨤ–jꩨ¦ªêª¬¶êê«°Æ‹*«¢hiº`†X5ÊV Z•w˜®pb*lkÉÙŠ!ƒ¹ZIœ|T®G+³ÍÆ,bÔÊÉæ|¸g-£ê¡W}v¶ì°äÒV¬dèŽH¨¤É–ë˕±œNêiIòáHk°·­ùÞ¸¥•P‚C?$ðÁ\°E ë³pÃA¼Wpd†kgÅ2ÒÙ&ÅÛî /‘çÿ"è¢T%ïÇ(§¼kÈéò$Éöš<’47T³>7ãì†E5÷¼sÎ@ï QÐùœQÎ6 ­sÒE m4F4GýÒL3M´ÕJ«¬5h,372Y%uòÖd—MÕØYÑËîUh·°Ÿms%±§qïX÷—{ÞmñÄ”ê”ÚBÆ,öZÛšíXxwkËkÞŽúà0·kxœøR·xå3z¹‘™w+´¿VëøF…sä` î×P+Œpë#|ì',»íµOüÝ´IŠ.méê-ë-èÆ‘›éU¦ºœù·¸ó¿3¿;ð\þ[½îÂSùí|IkúÞuݲº‘.ùäè§¶øpä}m™êDùݹúô§?ºQ¨¿~ýü÷/ûér®Ø6’~±É€âÚž.æ$ð1Îv yXî$˜0†ÕNv Ë`îº×À(Ý)zs`ðø§-!ðZþÛ ãò²Ôí/…0Œ¡GîW”ü Ð*4 Õ¨²CŽô"?üáF„(Ãåp(6D‹x’¬1QeG|Ôø\¶.ó-BöéõžÈÅ®P2T"í­åM/Z½ƒÞ˜ÌÈ4fzÛë¢;óÅæ´PWœ£eÅ $ÑPIÛ‰¾>åa[!É?Cþ‘ðc¤$'Éÿ!HRò’˜ô%3ÉÉNh“ž ¥(•ÊQšò”k)%*WÉÊ´M1AUŒ\+gIË¿½ÒBå“e-wÉËGÞ’|›Z[/‡ILýü2Œ€,¦2—©U2ó™Ð”ˆ3£IMhN³šØ,æ5³ÉM.Ã!}hˆ¢‡(c#Û<‰¶‘^„ 1AN`‚†Ô³›øòp„$éÔ‡ô¢õÓ`ˆåÐÄh†yYè]ˆQŽg´- IÇ N ‚tž÷Œˆ ª‡P!&@‡>XЃ‡œa‚ DÀ}„‘‚6î"£|GÒ‘©¡œ€&zÑ„#4aéÐÇ Z1WL@ÍÐÇW) 5èc Ã@ƒ>Ìú6´AšÇ¼ã JWV¢´®x½ä]óÊ×E€ÿã_KX&v†L’Í¥·¤æYKMžTJ6—ƺqzEòÒ¿.·94*.‹Å­g kK‘ÉUŒÒÙñ«ÙÖ{‘ÍžÉ|õZØjÖ6NÊ­xÅÚÚjî<%­ãKª(¸XœŸpëwØå:7}Í}®tËÝéZ7eÕ½®vÝ•]Ÿ„4>¿ó ’kYgñ©¼sÒÕwÉTBö);âÍ›˜¤§=)剽O¢¯õÐtÙñö‹±…­|1¥þòww#ä`¶fÔ¥õr Áu¤b.»•?i̵ñ…ïu‹·:]ؾí`mÛËÐÆ‚ym\ÓyU\¦8|×rqnLâûv£W:¡ŒÍµôâïe8Æ:fq°2:QŸtw»H¾Ô‘“ÌäE-ù$En²2£Ì’'/f¼ôOø@º—á岕^«ã·EiÇ,S¥,žÃrÂx#›·Kå•X_~‘—r‡¼æ®ÌÍ»ŽÛ³Ã:/‡¸pžëúú†\“üYX[Ü£¡SrçÃ,*jNô!%‚iŸmú"R›3”ÝŒË`ZQÎ Á´Î<j Mj°Ò:4V»ºÓJ£uÓBÍëVsšÖ¸žµªk-kb‹:$“FI¥½xlë&Û˜ÿ¦-nœ«"?Ž[ŒàaWÁGlƒ›ÛŸ¹­í‰»Ã$qšýÅÁu£p_v›‡õ{曹q¤æ­P»èfK÷Ù&YöŽˆ‚Á NÐàÙ¦ˆËÍp‡ûÄŠc —ÌÛÓØÝç›Ýx,b‰“L Ìð9'^_%Ïâ@>°IþÔÇÙþž.ÀKòòU.æÌœ9IjÞæêçýû¹HxnQ…6Z‹G/PÒ¼ÞÐ FO(¢M­KjûÀÎâœyËëÆGÚN­sxÁh{ì¿¶½àÍî×wqüR×ëËÆ1K:ßÈLdü€îܨ„èZœY®³¦kW/íiK«ÚÔ2½k¨ ^ñÂÚã/y_ò™¾Z s¿{ðMå»p=ßГ.t(ö8ǹòŠkøÝö.yxÙ-zÂáý´É”Yí Kú·L}ß¹\—wßÍÞ£ó÷Ç ¾"ãK|n¿™È¯Wó§ß!ÓSÿúо0±Ï}Y¿ûà'Ê÷ÃO~_ÿF;Ñü.¿úõ2þõ»Ú¯Ì{$ßO¯hÿÔõÏWÚ¯ÿþCÿüTGaþ7€UÁx€a€¸€¿TjÀ§w ÊvU'xùà„ð 0`ð’ðñ‡{z·¥ &`PõµR'à‘ô°RZSÅRúpCÐ:àR.eÓUÀ@aðp¥G*ÀRôäRèp…Q ª° Ô ¢p* Á &0 S¨4@OAðƒúà@¨ ƒó„©c8&RS²Pjö|ýæ%RvQØr\ã=ó•ˆu<|ˆ™Õˆ ¨o-ÉRH4 B˜‰¡€š˜œØ‰ô÷‰ è~¢8ŠêWЦH~¨˜Šà·Š¬È}ÿ€÷)±t˜ƒ[ŸChšC‹ fбˆ‹½â‹H×{ºY¼1YÀxŠP8m*á°ÅYÙ<ÄØ[^·DB=•ÕF)æZgd[7.“vxc•媘ŒŠfŒÀÒÇaܸ±…_ìh´%Óˆe·ÅŒ¿%.ó˜XÛ(_7}½xrì(Ž´¥ó.ãXŒ‹ñ`ïH ‰©”3fÒÄX‰Œø€ó!à ùеbŽé÷!!™')’ûG’ʧ’.éŠ.Ù|0“»7“4)z6y“@—“:s<Ù“Íö“@)jB©ǘg1r”¿r8:§”£aÃñAòvB&wóæQ¾»h•W™rÍxqÇ8!çeX’iÆa/&[¯w¯G–6Æ/gù•_9{iwŠH•0Ö–é”øÃ’”ˆlÿXcmW`bÙbùõav¹ϲ‡·eù–¶•–#ç•x™•+&˜:Ò^ç¥fL—qhf™éÈY–ç}~Ù‘H f ¦'cßec V•]Yó³·räõš”ù@š™[ô-‚é/}Â/¥S-rç˜å›Ö$ØŠœnG{nQ”sÆ—bÔÿušCI“Ô¹LÖÞ‰d0 ‰áÉ!义ڙGå)GçIã ’É–9ðæsׯ}í9ï){ƒœ²Y–·©ŸòÙA™yoû%º¹rvI}÷ W9‰¨ù±·"Øé‹—1öy{ÒvŽ÷²žz´  ˜ž¨Ö)_ˆ…³Œ#jsÂIê juB•Érg@ÚgbÇp çp wvk×p;ÚgênÄ1£è†—6 –Ò¹H-úù ˜X·¢qÂ;˜Õz”Åa—¥çö£ñ:i;jwœØ›ÚsY ÷FQúqb&IMêOÊ¡]Ô¦ ñ¦púDr‰ò÷Blñi"Á§á§Š'y‚WwJ§q5ÄÆx‹wx?3y”×4·¦T£yŒÇy—Gy;D4A4lêW¨/Úo{¤¨.é© *}êY§EDª%˜¡%©{ôÙ™ç_fÁv"j¢SZ#¢ãtº(ªê5&ø Þus «ñUp@Šp ç£ÇÊ£ßn 'n«CºnEšq]6­°7šn9˜7ú_¥ }ÿƒ¡è×’CQ7ñ˜YGª%ZŠva÷mf'ä¶®´SpíŠ;¸C«qZ–£Fq7‘n¡ œj=uÉgé uâ€ÊH¨§ Ë‘zú°)Ô«ã“§§Ê!øjŒK9¬Ë˜8êš7rrÂʱ ™±:±-¤b·pû²È1K–gm2J£»¤7J¬»…°Øj¤v‡1êÖcéÊŸBj°œ™'¯ÚQ.÷©»Jz•)YHM;²){:P»¡›ª*kª!:²]ë.Û>¿Ê²»:¶öµÛª€©¶ÃR¶t¶ ·ô#·,Īäú9v Rl‹n‹²†d«Ûj5»Ë|oÅ;Hx Ft¶Xk´KÊ8I*rªWŸËz¯Ýö®Íª£ïZ³ v›¡«­I›¯‚4ŸsÔ¸v¤·‰²ï’¢%q¸•¸Þ¸[QÛ·Aw»Q˜»(é‡ ¨‰Ú¨Âûk¢zlª+a «¡®šj7ó¼Ž:¯Ö¨¨˜©ŸF©NCxND©Õ‹x<¼™:yÞ[¼×•¼o¶¼­*|Îkk¸¾ÔkÄ»kÜÛk¶ö§¬&¿Á&kÂf¿Ævkú+¾ì¿«v¼I†¾¸²u«»“ƒÀš’¶0ÊÀõãÀ ¹jhGI¸ÞIÁÁ‹ ´j­"¬ŸLoÄIº}ËÁ¬ ¬=q§'ÁË'([Û¼0lµZ[ªmë»ZÃqË» ˵ŠËÃdëÃÌ˾A,Ää¢ÂãÚºŠÄ6ü´8 ¸:ìÄ[£Äê»·TŒ}à™ÅÙ´Å\\M^üÅÑÆbüLd\ÆËtÆh¬M3¼ÆÔ§ÆnÜKpÇ»®4ÇtLKv|Ç­”Çz¼J|ÜǧôÇ€ÑTŒ†¸QÅÑ>v­•½Ñ.,¢…(Ñ+A à ”@R—Ì?ì‚òôÎ ±+ÈRR±  Á '  'À¨` ¨ 5€Tö¤ Ù¼ƒL€ N-PB€›QwxÑz8ѼŽ ˆ[]ÕNKÕ‹Ò‹¨ˆ~øÑDÑ#a UÕa³0ë@ñU‘Vke‡5T,H‡áŒII09 8 $@0¬€Uà ÐØú0úhð Â`Vg Vh ÐÛלçIw¥uù<ýˆçõ7æÞå»Hè剑±G>ÕŒé‹nèa>â Ù[îî“}.ÜKþ#ŽYˆhŠ~âŒë;l<µ çXÎãCî[äEâ ÎëF.åÓˆ˜åGé­Žëz¢°~å²Þ-no°«ßÌå¦î`ÒÎtzFÞöÝøþïÖðà=ðÏLþžðžÞÛì ¯Lÿ ñt5ñŸOñÝ”ñßÅ_Þßñuüñò"Ç$Ïâ&ò{œòJÎî,_Kiá"îN 7Ä2ó˜’ó´ëÞ4äóÃW‡&K7(Âó—"ô1ÊÞ¹Ò¤J_¸‚ô.®ìUz³bZ›×Øæe´çé…í©´ÿ½¦×ƒF›rÕƒ¦h*YgO¥Ž…uÞ®õƹöëÈ;j¯í`?¦zÞõb?.Oæö\&H“KÂ%Œ›y86½œbæ­ ÛaêæŸÉ¹Ÿa¡‰ïeݺ´> >e¶z´PŠÂø!õ®ªù&›I÷*‡°]Éõ–{¹Ž¹ßu~õ’ b•Ÿ­„y®Œéÿ`ùø‹5 i\V1ÿ ÂÃIšeï}éðô ñút ¼é',d¨ûú'kýž)bü¸­gžn˜OºŸB—y•ùG²ÙÏù ÙŸ’o †ù#}¿ò5âŸ&ž‹ª¿1®øÜŽü!Æö@à@‚ôéx¡A… tÉ1åÌŠ"k2´Y#J› ?ªš³äK¢EEšÔ–¾¥M™>]jDªT}Fª^µz°“¾­I½~VìX²eÍžE›V-Q–kݾ…»Qg\ºuí¢ušjÕ©VýbU¸µë]Â… ·„xX6ñâ¶‹ÛmüXòä±z-ó ø¯V®”=ZôhÒ¥MŸ¾xYoß¿­wF[ölÚµm߯Vÿõ^Öš¯rœ[øpâÅGNt·ÓÞ®³vž\útêÕ­_Ç»÷rsßÀ±^üøÜËŸrwíüzöíÝ¿k>j_ßÏÃÇŸ_ÿþ÷ò1Suîµè(›‹?Dа…ó=ÀÔmÁ'¤°B²$Ä­Aú„ð3 -1D#BNÃÌ8„N´Gd±EþV¬ÍD»K14s‹Œ°_biǰ|ÜÉE!Áºq6´¶w2h$˜Z‰É&‘šè&šº Ê(©Ä2$—ZJªGœdŠi¤/”kH5©,Q;7ܬÆ%ƒ$ILŸî騙|rrÏ:›ü©(2KÓ«¶¾$Ô¢C‹DsÚM!‹”íÈúTñ¢>³,T%?ÕiÌŽ6tP<ñ¼tTM¹¤SÔ %RGGt5IQ¼ÏFKc ¯Ñqe‹GWu}UD^K›•ÆZçäXë3Ù`ŸMkXÒŠMON¡Å6Ûã¤Ú­õŒ[mÇ%—±6̓ó7p ,·]wK74oã<öZÇ”UöÖ±ò]¬„î×Ô}1ä÷]=Ïu“¹ UÒÞ³e6P= t¶ÊOåÈß5nHcŽ=Öd£>ö÷ ÿ5ùä0ÍLVJ„½cеØ$'‡2­€?ÿ›WÝzÃÕ™fˆcµóâNÚµc”CFYe¥™Fªä”SvjC;MS5ÓYNé´ë'õÍy­=ë9É'‹WTUeZl/û«”¤¶o¼™^z䦥Ö{i½'¦{î’<5g_åF|kÃ.Û¬³)K›R[A,8­½×ÌÂNr Vd:g˜ÍùMEƒ\\\Üv¶DBr8–¬K!VDÁäfFQdEHÖ7Ùñmcó*A¶JT*Md¥T,AÉ2¤¹ PZÚ§ºä%VñÉ#YãƒRÑn‘*}²’˜ƒ¡ÂNÄ06>fg9f$§6ÍÙ•¬‘‘)¹¹jöj×$ÛÖ<™©—MÒk‹‹Ù\жsê²–Y›[/ã†ÌãhR‚Cä3u¸iZjIáçÔ¸éÍ€úóo±ôf8_V7SÝ2q@q'©Ô9Ñ_r le(FqINTY“tÿ±g g³È?â³W:c˯>Š›•Â%¤e,)íÚI®–ƇuÊœ‘îÈØFød³•1j˜’yŽÎAEª‹jê–—ò4©Ÿ{êa–ú£¡Îg™:mæ½öNÈl’…!©Ìì&- ‘TqÑ”Y/D°ª¶nRÏiaFéÊQž’«ß \+e9K,µL.}Õˆ1;é+aò’L»¼QçD’K‰Õl—+sèØÀä׉E¬Lå+EqIL3}R,9šªZšêLÇ´›þ,Ê鲉бÒmœ‡ûS¢ ûNOÒ¢³ Ú_Ï4³Âi-¥£ªX>=ûµL©ªU]›hbº”Û“g´Zí—àÚO¾Tºý,hºB/Š8ã6îq>újFŤRæÆ¶N°Õèoµô¸Se”pÅõí{ú6+¡Õvõ¼)Q¯J¼’6ª®}XÒþèUµ€¶­¢{Ý&ÿ´á.¸Àƒ…KhÓò\s寧wup†ívà¢&øž1~$œtu®0 qŠÛ3â³PX1úTqŒkÃb³¸Xª–qŽcCã²ØXAf㱎…äÊäת9åoV+\^!7ÙÃñ1Xqìd*ÊFv+­ú Ý*w¹8DÿK”uäe2_’Ãû… ’_\f6ß̺Á2‚OìÔ6ËæÍïºóWÄ|—•ª•¸uñ3]0,I¯¦•’y†¢•g“Μ´ì0gÚ²Ëò¶¢‚m°z«ûÓR²Ãs5¥tEVÙ)ÑöIžÂtY=ËK`žZÒfT4Rö §Ó¸¨Jçvµ¶Øyb÷o?…Ú M+ËA7´ÕA1/¯g+YÙ.—£ß‹õQf èò~w×Ë~èáº\FíóºÕ¦v±ùk_³Ödò]¨µ{+QÈ1î¡Ý•§ £m”iÓeÞ¤ tXŠœgJSÞgFršï˜ÇÙyÂg¼·ræªùÆß»°¸ëœ+€»nÎþxÆÓáUñ·:ã ö¢Æ…“ð—Ô[’Å¡¢dRž”•;‰OKËEî’§fáoøÀcžAzð‚oüaÐ}~Ãøñ<äEÿ!U¨@û-1ä-t9åGôú„3KÍbò£ååS!yEè,çà?x¯÷ê`IaÙÓÎB8býäø-1Ãúd±´Ý‰í»Õ_®Dµ¯ðéN'ûü¢>E· )ƒW!ã¥èx»Û›ãZvø3|øÊÛùòÌÔyçEÏçÏc5ôÔ{£ÌGc­7„ëY_}ìiÿ÷üÊÙã\&Oëe/Ýäõ4wæGo-àÝ©÷X>²Åo¿äµböµµ½4b¡ÔY Mú¾REŸ_üD—>ɧÿìÌ,Îá?¢µR¼1ªlî»çø¿7›}Ý}^vBÎüðý+»/Zÿô¶Ÿ=ï¿9åÓ¢ãó¿‘ó>;ªd@ࡽÐi´Ľ¤@PJÀœ[À Ô@¨r®ì8 d¾ Aq*ø+0MÁöÀ¼Ã¹½S°vKÁØ[ÁÚ‹À- Ág‹ÁÕ›AÔ;‹+ÌAÑÛAÖ±=\3 B¼@´²$<À!ļ¸ tÂ'\BD±*ô?()\¾ˉ0Ã1$$Ã24Ã3DÃ4TÃ5dÃ6tÃ7„Ã8”Ã9¤Ã:$Ã+œB-ÔÃ1Á=ôÃïèÃ?DêÄA4Ä$Â̼CdD@ô@ÌkÄHìG=I´Dò(ÄKÔDÓÈÄMôDy¡DÓûÄQ”ŽN$ÅS£Pü>TdEQElÅXŒ‘WÄ@Y´ÅØ0Å[ÔE£A/4Â]F5¢E& ÆbÄ¢aÄBcTÆÂÈÅetÆ’CÆ<|Æiœ°hüBjÄF²ZhÆltÆmäFeôÆo,ÆpG`$ÇrÔÅsDG[TÇuŒÅvtGV„Çx<Åy¤ÇQ´Ç{ôÄ|ÔGMäÇ~´ÄÈHÈdÄ‚4HCDȄądH?tȇÔÈ”È*ÿ¤ÈŠL‹ÄÈÔÈLÁŽôHÉÔÀ‘$I 4É“dÀ”TIÿcÉ–ä¾—„ÉݓəŒ½š´É›……ØÉ"cA´ÁœôÃG8eè1küE¢ŒAq8oЇP€ …p„0SÊ¡dÊ „‡Ø}X„ˆ€x}ø‡¯ÀÉ­Œª<8}(†B`À2Ø}hDÀÊ ü@­<‹z`Ë6ÇxèdˆFH„Aèƒ>¸A0F€„IX†o¨ÊEãKHô kPh‹8H{x‰è‚‹˜"8ƒˆ‚8@}0ÀŒ1Oè>hÌ0À„¤ÌÌJDŠ*|0à4`…à\͆ˆ‚0tX…P×4SÐ×TˆÕœMÚ 1x@`Lƒ ÐmÌÊfªç @…átN‡HOhi0jØZ¨‚×TЂôDÎåNlàNK¨„:˜ € €Jàÿ•Ñú‚Ðç,…õe1&[µ±Ù-âö#Á…bÝÊ‚Õ)ѵ%-䲋L`: Qiy.^¸Y…öÎàüŠQ –*Qœh.cë±QU§r‚¦t³å@I?í“*uœ3Á³r0º8z(€;O£¸ÐЄ†à•>—2 8„Ì@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ¨ÏHÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ À(_ˆW¶È·ïÃÁ&ë]̸±H¸MmÉ«Ó.KÅ –¨9¯CÅ =ëÃ<80iÑ;oάõhׯW7T}6`Û{;ƽ[¶iؘ ÞòÒÉtZÜú·oѺ‡~¾¹9õÚ­S/Ü›ölͱ±gÿ´^ütð½o¯¶N¼½{­Æi"§\ö½ýûøóëßï2²Éb%WOühà&¨Ô‘ÍGW} F(á„VHQ|5Hßrvèᇠ‡aX6Q¦YÙÆ[Dè ·"Z/&&H1ºÝŒ!:6"€% ¡vºi¤¢a¨Y‹}·Þ’»Õ¦^iKfgäkÉY”ÞÅej8vçnSjiåmZ^äÚ—ÍQÙ¤˜è ÉšpR¹b˜ßÕIfœìåxÑŽJÅ¡ž0* ¨_5ZÜ gñ©áƒ~ˆ&R…Å[¤"Qúž¥ÄaZÔ£E)Úã†(^5$’v– ç™D¦jê•o™çšãaq™“°žª*­xÞZëµ¢9+¯j¾땤æºê¤8 j,¬tÆÉ¦©œîÊê_²6ÛµÁ¦™­QžÞ*…š&î°Ž‹è¹ûu •¢ëî»ðÆ[‘ºž(ï½øæë.½&xV—)t×JÞÉ\èE|™ñ'bôµ7¹îi­ß{£Oâø#­èq"npƒ>9HA†ä!IÈF 2‰„$ÙHƒJJò‘˜Ä¤C"yHBZÒ"4¤'éÉRjÒ‘œÄã þØ>ŠîxF e(UIK@±’%®ÄU€ˆ,bEl…¾¬¥0ósË•äR‡ÃÌW1‡¹Ì”sŽ@Òë˜;Â<ÇKÝOnÊó*ó¬®T¯Sì²åªmr3œ)ƒÙ7k÷BTN4êÌ]O@Œro”Ï~ô0½Üd¡ÐɳË-5»·;Ø1ÚJƒ!Æ¢ì3l6Y®¿¼4’]äq ÙÌP¡’~Œ´GWšgNòñ¦¯‰ºy*ˆÐ…®Zn¡¥èÑ)k ó±lí¬í:ËD˜“¥Õ«\©[·æ5±X½i\gY+¤Z9m¥k–ðØÔFõnãkA{ۋݾËyhVMQ×úI»Qÿ¤¡\G 9ÚÔÌjY©¹êzóv–^v¨ †*wšŽÇÓBwªË]j_ÉŠIÿ¶ã“ú}Âk§›VÃå‰?U>ŒÚÍ"a¶5.í›E{v˜îµ­Aoº“ÖI֨ȭl`u•ØÁîx¯Ò™ò˜£üæàœµÓŒ&’f!¶´ä­mcN|ü¶Ò«î¥;]zMëÓ§Žýš¸zg`\s}ó¤)â!,µÊÁ®,kÿÒM!;Õ]ÊV¬#}ˆ[_»Üo,Ö¡x§yua¢É¼ðîØ¶žîñ£–´w›ÓKOî1¾ëø¿óÛÛ®w6½êɇSšÁD§á­epÊ üYìüá yÛÝê’=ú[+w«Ôm@M\ì ªD§näõsŸmÛÿÅb]ŠKc³Ï}ˆPßbÕ×+Å!gÚw=ð¡yýN-Ì9×OÍBrë–h;ÿ|íÄ®ñ3 ÿމ2~¿ð>:eéûµ$~F¢þCq·Z·xРvî·›ô†V?úV÷®e=é­‡GÁ·‹¡{"~ƒL'áSG„TJÄ€D5E ({I¥TZtX„TU„EŠÃE¸G€@a€Á~Ú±KOš2f‡½$C$ÑU®lz%‚ó‚€peV¶gb£w–Bi`Eƒbƒ¬‡ƒED?V4?h„¶@ñ3{ÿÓ>‹s(P÷@ƒ#… ¨€ƒ%„ZG„EaY(X@8$Xuî§nBs0´ÿ3r+ÈuþV"´3hÇ‚ÐCtÌçƒah&ý7<ÿw^hS•‡yW\€x“$K“D³äO‹˜ˆŽTH©‰Ž¸ˆ’˜HŠØI¨„‰ŠØˆ•XžŠˆJšˆ‚è<»wCw'b»¤|hô‚cxŠ‹Q†øucúƒ²hU{˜!}XVÉÇ45»òA'}Ø—}ú&kÍçq.‡5D×p¤ŒUc}ÈÍs;k(}݇,Þ¤p×÷rÙXtl~n·z]Œ+f6»Hw©¨P«è{¢‘X‰ÅO¦äˆš¨ýT£¤Oňšôù¸){´Ç„ùC…8u´Øçx|äKíø}ù¶˜±V‘v‘ÿ‘‘DæŠÉfÙ ù‚¸8’rV’m¥@èhˆêØSJHUT˜„P¸„îS?Wt“O¨]´ˆ8O¨“@©’ÙóŽ0ZH`h”…Å’'É.8t×äqÏw4I2}Ær•NYR½è’ÉŠ¿×•k•…è‡1 sd¹’_éVa)k—ø•rY—ðq–Àh—zY‡AŸ€! Å‘ã'b;[Ú`¯õZñZÔuNð)@Ô¥¡¥°U]ž9 ¡×u]{—à€pðЄ¥ÕåY×…ºéÕ  «@ ! ' ²à¼`£{`›ú@ž¤©NPš!€  ÙY¦)ŒÄ=áq¸UB½u}à™FÃõ<‘7ŒÈÕÛ¦3eâÇ\å9¶n¦4@:pšøit™ŸüFx‰|ý z±ŸZ ÎôŸi  z—Š™€ ú æÈ{J ¡º… zƒš¡Tÿq’äÁ’Ͷ)ìXu”p2â¡uÉ¡ºX.úÅe[“$&*—(Šd>—fŽw£9†eA¦£_vf5·NÓ¦dñ¤káÉ£<ª¡W'¡¿ "Š6¾¦n”g¤£Öeä£8ÚdV£8g(¥ÛTmÓ„‡HJ†*–*å¢ÜDfB§¦^ªe5žDÆpžW[Gºf¾ö£Az[Rš,cJ›e —e“¢}jX(1:¨=T¨ˆ:¨Šº¨cÚ¨Žª¡©:©” ¡–z© š©šj œÚ©ú©Þ§–Ë׆d0!¨28|wX3Úƒ¿–£:×s'‡s¸ÆB̦Nñ&’Jk±ªrE‚•‡ky’Ú|ãùŒ3—:»J¥„çnËÊ*;Šmmjløòª3*ЖmÆêpÏJN,GŽ[é¤7s6ª­rEjE«^õi?G]׬À-+¯äúq8§1¢*fµš­8ê&­ÃqXblhh•¿p-ØwÙÔ}•—°FV¯ˆ÷4àˆn w3ÛªÛh®j—­rZt$º/ Xªª0{O‡z.ÿù ªùy²~t‚3²6’« â²—Î*ër¶Ú¦:›Bņ3û:ãØ«Ôšq³¦\¨Ó­»eÒ:‡Ù'OÃZ´$4®=›lišsU ¬4g®#ZKSµk‡Ak7KlÊB´Åh‡öv丯qs? µÌ÷®A—«5Û;Û¶¼C±’æ[«•7«Y»s+¤Éú¢%Cªu»G2ãÆ­Vëh»&§û°'µ=“¥\ ´ƒ{¯‹;ÏW±v{N×Ú¸»žhÚ°Ž«µ€[x« ‡ÛNx LYz¯­´¸U²>!³Œ‡²”c»¼û»‰©¤o——À[¼dz¡Ch¼Ê[‹¾›–ËûUÿf‰¼é˜RÏ«VÑ+¼/‰–Ô›ÿª4pÊ,Ö8ŒØˆµbâ·_W¹Ñت«Z½Äe¡Øû–Èĺ{w¥Ú÷ÊŠNÈJo|‡«í¤s«» z½ª¸¤ ÚŠìûƒmÙ{K ‹ä‚ªtX.Ø9•\ª)¹‘í:ª ÀÌ~úÙ¼ÛK:Wi2¹6j.º­(óžnȆç›ÂÖg1é»°¤ê¹²«†¬ÖB‰;¯“gž> ‡*Xi&äºïôÂòJx <¡x):Èo¸§,)I+M0sRÄl¦G±ÄX1€|‹H™SF|ˆ>Gè86Y?þs„:‰„NE”XE5¹Æ Y”[|ž:ÀÃˤƒÆyÓ€O•„C5UETÅÇSÈøTUè>s ÿT|Ç<–)Ñ”ìFœ½Ä›Ç*»k‚B‘‚Ú Ê,‹ U ¨›Â«ÿK·óV(<Ãþ»}ŸÄb×Â÷'‡#翆¥œ”§¼ÀŸüÄß©Ä~7Ê‚ØË^üËÐd@• >]Á±m¿çdª^Ž,ý¾Žàž\>½Zõ5"Êà:ª›ÌÀWÌU#ÊĶI§zê´÷aà ~â"ê½qÛÉe‡¾ëk\`‹Ã"<Ô'Ì·¦´'—¹ãK. ¦?Îx` F=¬{ulʸ-â°æ§‹—bÊå½Ý¥µ­ÖÜ:ná<~P¾€ý™æ&®É[ÁÞö-ÿøIt.‰ý˜ÝÙ þ݈w^yn‰m{!]{’{pîÒk®˜‰ù£˜I¥Øó݉–Hè•éœnJ”NŠˆLEŠlȇ=w‹®½î˜>âh^âŒ.ç¤Íêgãê¨ë±.ë«Dë™üÜÑ„ëçrê»N‘¾NâÏÿŒÏ[>ÚÆ<ìʤëÎ-ì®ì÷ìÍ~”ÐþEÌÉó¨}]Û¾Ðj\…x]½ÒŽíW {ýzë³ÑT5È ¹Ñ Ù•èjüØVï„ ¼ãnΩLSÕ®ÙîkÇÍMî眪ýŽPÅЯï]eâk¾òK§@¬\»´¥]ð5žå¾|ìjî¦ÚBÜ0,«ÝôÎ1í¨ùnÓŸlñtòZXæ*ÿf×®ð7½Ë/¯/,¿Ì._óøqó®ó"ó(ïóNÉÙB¯gD_ô{E‘ Á ~åÁHÿ}‹¥z / Sï~ÚÒµõ¹çyÐwð0vOÏõÁ¯%")°¡ ‘Ù™‘E0!ØÕ!÷úÀ®åõjÕy`Z¯¹žöÿ ~àlO]I÷ÓÍ9mTò%9—›ðe`М °õ‹¿ãá*`›»ðZùqoѰÚްcs³:̑Ǟê ىºãß›•š­ÍÚì;³ÿÊ'A à ”@ªõ“ÉY¬¯K™Õ% ºÐ¼pÚp<€ ¦€ úPñZÚ ÷žÉ¨ÐþØ%—±ÒÈF[ÇŸžéyq¶§¿_¤Ž<¬¡Oà@Ô‡aB 4¸"Á„-RĘQãFŽ=~RdF‰GR´ÖäH“6fXGâ‚ÃÐèSÓÑ–¾=yþìiDèP}FŠÿ5ÚIŸR‘&D˜8õäTªU­^ÅšUëV®]½~VìX®I&äP‚C F°šn‚« uõЗÍ/a9ÏÜD,£OÂ@y%jTñQ¥LÉ>†YòdÊ•-_ÆœYóÔÂ#FZ`ãÍ¥MŸFZõjÖ­Áz.Œxñì¤]߯[÷nÞ½{Ã6,;ôâÑK}Gž\ùræÍ÷)œ¶ÑâŽ_Çž]ûvî'¡ÿ”>¼¶ñîåÍŸGŸÞõ÷áiWW_þ|úõ±²/ zúxëöýÿ0ÀòðsO4ãú0Ad5õ¾'¤°B Éz0±¼°C?Ñ£ …:6CD1Eq?m[1FgL¯Åù£1GwdÎÆý$ä1H!‡TÍÇ aì°!“ÊSRµ&‰„Rÿ2#ß;,%¯ÄÒ·')Ã2˰¶ô¨Ë+½3J3ÚÒ@$Élèº2#{óM­äÄHÎ6»¢óL=³J“¸*¿Ê“¡%…ÈKŠž³Ð;-(ÎE}ÏH ­3ÑC =hÒJ% ÓM#E”NO÷$•¢>PM/uèQ“,ôÎ.]V0·´4Ъ- WWYí•SF?zõV_3­Õ×d…-õÌS_$ÏJ1ËlRWJie5[lµ¥”W6ƒ vSŽŒeöÚ“”íˆZY'µ¶Ù!ŸÅñËU?tÚp‘åÖÛmíÕUÌ0ý¥`Zgv£v6´_P×å×]wáMõ[<µÕÕ…‹muItÍKÚYŒÓ%ßqçEö^ŽÅù`‡5̳ý\SÒr± Yäm ¾YßnI–™Û“}6×Ú<ºçN?þyå‡[fúeTÿ”äŒ!¥Úhu3ÆÚfXŠºäª øë¤Õ6Wr[µ9gu•&b¨e¶÷goæøjFGåUå‘D=›ÝPM&vÔXé†i£cå™í ÝŽ™>½‡yå-ÿC~y矫yè§§þ¾Ú£»æÜ«ç¾{‘¤÷>|ñM½¼ìŸÆ||õ½}÷©oÿ}ù—~û‰¯¹­‘K¼µþ³úŸãнüYFSÿÓØÈÀ:ifsz`ಓ¬é°2Œ`+õFp5Ü•37ÀçY0„"lT§f±1Mk…ˆ«XáXh¶,¹k)Äaà'C2,†˜Àz¸BpíOB ½$DÂpˆ9¤`‘„ lVM ‘ ÏE°‰Õ‹h™£Sè·0B±W#á ÁE5neTà¥â(G ¶ŽëÚ  X,1rÍb}ÄãÈÌÇyýñˆûâäûØ!-î‹u¤£!)G2Αjlâ ¯xÆb‘ŽD¬–9µ*’òŒ=äÛ ÈGT¶É ³c)ÓèJfIò†•ÔäIW¾öœZ¦ãŠæ0(EI’±’Äœe" yJ¦í_ŸÌã"c™F8*2Ѽ¥‡ÙÌC¾±›Þã5‹&HK*ó›ÒLQ#%7dÞ1ˆˆl!_™ÉºpœÕ”áÐ0Ư*¢±ž¢\"3Ù¹A$&Ñcõ,#;s*kòÌ–ËêgÉtY!ur!f2*ºŠJn›+¨ÿPˆºŽÞϤ$åe~4t¹íÔ¥¼ÿ+)“F*­ m”96MNádÎÉÄ´;פŠMu*/p“•#Dêm€ÚÓ”:í— ª"EUç,¬>Tå VŲT)5Õ—ñJÍ;å¹I%šÍŒU è?Ó:Ñ€¡”î¥)6q¸Ø†N–§ä´eØðIN@®­œçœ¤e¡9ÚyJÖ± ü(h—ZH/摲ŽE'PW«M*vQ³\ ¤VGYUqSµeen…%Kº>ÒŽ +.؉Iž^r¶Em£ ÛéúVª²mîp[Éå:¸€=¥Uý¹VÖļÙ$îÿq#Ã[6Y7›p g"¹_Ø’–¶›&|ß›ÐðU²¥µ­TÑ)`\öw´›-°~_+^ ˜¾¦ÅYD,Zæyu¥¸¦fÄQêŠò¬‰R¨` ‹)ÄîSÄ&Ž¢x£;X}Êu™!§^ûJOþVw®n­¯wÃâë2n!ðB…‹ß¯°WK3ÕðV‘lÔ—ÆÈȽÑ-— Éʸ4ülòežœe.ïiË]3”¾f2óhÌeFóŒÎœf6§ÓÂ$úÑÛÚ<çR­™Îw¦è›]VòÓÏt =hBÚЇFt¢½hF7Úцt¤X$=ß(b¨™2žÑœéõV:ÎéÛ §5fQ?ÿÆÎX)µ’S áUŽÊœ5ÿrsê«„‹aèìx›k%"wÃ3û#-oÍPäÆZ9«Žž§ÔRÓלxLœßBII*N× Îà½ÀËÜg;§³V6K3êlawŒiµy¡nZb’¿ˆ³ˆ¬Š}îZ¹ÛÞ>²Ñn ûïÀ7å4jý›n|k Üßq*ŸÃZp†ëû5üÖÞ¸“Ìp|;¼ÈG³¯LT©Ñ6ÛQp϶ØÉ‹YäÎôÚM~ò‘U»–/_Â/}$¯ÞóÜÍÛÍY´ ;i>Çv lްœœe=w5Kü·\ëú¶f-/щNØVXê«dzá4ktz=ýXÿ—¬Ì#s97{*…U/7}ˆ2œ·;†¦¤7±¡ o« [a¢•6«±Îâ ?xÝûõ­Û•öucçSG¤wÈà/îì‡{íÈê‰;2éê~ÏwïÚÂZðg}ã´Ï+oµ¿·ÞŸ?¯7ÿ>úÎ?¸™;¯Èd Þù¿ûœàм> Uï[ÎÞôèÆ=ï£IûÆ×öX‹¼Ë¾:s³Ë´cÏ ¨ª ý›±ÉoÚò˾qŠ{›ú\¡µU¾ßýð_+áß•jJP‚¬¬ý#qÿGÜÏþùÃÿýäÿ6nÐÔ©ÌŸýñ¿Œð¿÷‹?¬?Œ?}(ÀûÀÿC@ @¤?Ć <@ L@Ä?ƒÓ?Œ{*Ö@2ÌÀT@ DÁûÃÀÔÀŽ€Àÿã@ŠH@|Á „Á ¬@ ìÀÝ0?>A…Ã4ª ÁÔLADÁ„@LÂ"t@DÂ< B&´Â”B,ÜÁèþʹ°ˆó·¡À-”´„Ó>ÊË 3$ÃåaC«ÿØ¿³kC:{êˆÃs !¶³.k[ ra9=œ*ª Ä=ê¾:¤Š;Ü›³ëXc®ƒÚ=S¶G²+­Û»Í“º^ƒ.Ç£:¹cÄŠëBÛùÂŒ“¸5ÌC"«,°±»5%´ê1w*±®3&—s¨[{!ØëŸ?”CäŒd>îSÄ»·àS&Ýc=n£0y›/w[½ØC½Ø# ¼k=Æ2žÓ4]ô^Ü>rÓ0kÜŽ‘R±Nô¾OÄžP ÁšÃ9ãÆïÁF5Ô¨sl³t Dœ*7Y¹šÄZ‹ÆÖsÇ`Gó!G ¤9yqÄ{„E¦û«¬»Ä¹ÉDâ‹ÄUÆ}”~ì¥ìEm¤©TDEíÿ’®Ë:0„¢6'j9µ1<\„È€GG“T2ÜkDÌÂÙ+½e,>w"h¤É±)ÉÉ8ÉHɉ9“™"ÉœôÉDCŠÌÆÊJ.ÛÉÉ)J8[¶QlǤ첥ԉuÔ8‹ì ‹”?­l@ôJŽ˜A©D5‰T)§·0ü dA‚À ÄA¶Ü@°tB¸,Á|Á¹lÂäKÌK(ÜK²”C¢Œ¹4¼J¤ôŠ! K&ŒK$ÄËKB¤Ì)”ÁÅt˼Â(ôKÁ,KÂ;ÄÊË ¾É LÊlÌ$TÁ&$BÌœLÍTÍ(lÍ1tK+dÍÙ¼@ƤMÏTIД<ÑTKÅÙMÞ¼ÿ ³œ¼Ã$Eâ<)ªäˆž$å\NãNÜFJ £ñƨó§.Ò®B5‚4ª 4æÜç U[»›;šG,&MœÅ‘KÏž³Äª³Ä¡sºÁ½ÛcÉxª6Ë òÔóLä»´SÅ« 6Yü«_T¥ÌbI×ÚµgãCc„½‘ÆZÔÇû «Mâ8[„I¬£°{Ðu#(’=Þ«PU$>ËâÈw{Ðq±IÍ(ñŒÅ¥Q¨ÒÑ|KÑ ÝPé4Jv$Mè4©%E>$µ%} NÞÀÌàJˆÌº´KûN'ýÌÛ`Òš ¹ÌR ¬¿4Ó'œK¸¤B ÌòÀÔÂËìËTS½¬R/MDßT¾"EΨÓÆtMú›BÀôKȬRÍŒÓÄRØL­,S<?"EË~£Î°0Ͱ4ÂK…AÖÔM±TÓN@P@ÛDTÙUH­5IݳŠDÌ!éRTõÓõÒJ…ÕñRÏ™Us¬U[UUK;Êäl»Î'‚ =ÂÑjìÕOëÓ#•–´½®Ë¹‰²Oµ›ÀcHi$Fö4:R¼cm²[M©‰œT0¤ÕÞÂÈËû2ÐÎÊϤ³1|9¨™”šý4+µ²BLÖ§œRI¡×Ãé&M½OzÑÓ3>àÓϾ~Ñ­»—,Ipÿ ÓgO!íÑ]íM0ÍU'±XñØŒ]¸õžŽmÊUýÕXm7@ÙŒ@Y7芕½Š”õˆ•eY¬pY'ÙÂäÓ-N°Ù™Õ‡žÝ ýÙšÚ¡5Z•eY˜uY¥­Ù¡…Y£eZ¢mZ -Z¤¥¡•Y(Ú”}Zè¼ÙÐÌÙ}å ®MÚ¦µZ‚`Z­-Û£íZ´Ù´¸¥Ú·]Û«ÍÚ¬[Ÿíˆ¥Õ[¶¥[¨ý[›Í×´,W¯ [¿Õˆ§­Û´=\³uÛÅÕ[Æý[²­ÛŸE\¹}Û UÛ£µ\Ì\§õÒ¯ýͰ-ÜÔé[G=Í>ÒÕUÔ­ÑÝÓqE±u]7\Jm]ÿëÄTóÖÚõ@ŒY_5R *?.Æ0–ØÂ3Ø 8| +þ,v__ Ö:æŸïÃcþ£X¶ãW V=æ_“½ßÿDä’eÖE.žüÇýudfÇŠ®mÛÄÅäLÞäÌËWýÊp´áIÆá ÖIÜØZ¼EZ©ZÅ­ÜÇ-Ûž¥[Xîä¼µ[W®eXæÜ9­L:-TÜDÖRöGJ®_ Våµeå³ÅåË…\NîÜYæåfŽÙÃuÛÍý\¸mÓOÝÌÓ|ÔwläcNådþÜ^¾f­EÜlžå UæÀíe¥ÕÜrŽflnÜu.BRåf,f<“äb>eÚoœÓ QÞÇ~×._HÞƒ>K„~^…æ†>NT^§•„è‰%æƒÞ¶ß¾è!‘èé|h~ýh" iÖÝ^Ž+i!9icæhdV长‘–vè”–iÙ¡é¦h8¹iÝÉi èÃëé=ùi}MhCjŒÿ^œu醌% ä¤.Ãp~éqfP©Ö“¢&Ü‘ÖP¬ÎQªvjòjÖÑjܵé±²vÞ³.;ÝŠ+¥A‚6Ó¹‰oVhµ&_®Žë¿ÜÍ·lÁP®ÓdÓQöë_¦ë4=U9Ul`¦Ó}þh¼Îâ ì?@}ÕLMͽÀÎôÔA忨ôf·6ÔÊLT»^dÈÞc¬¬ëËÆTAÕÔP]BËtBÎþåF}ÂÄ®ÍÛmS…íÇë Ö¹Fk1]j°mjßn¶1íD~äãîœä®äŽn/5ߨfîÍè†Öiã^Ïþ›níV#¦™smÉ ®n«–`¦®i-à%>âüšEyå0a4àòÆ6“Þ>ê¶>ÒÓÄ<Ø©!c'žcúëëžhí6p× ççŠFðÈQðªfðWœëÒ; ÿiûiêÆpô p±åð·> gkñùðò ñçŽ×kÿjé‡q¥>oâNoL“´çñ÷ñò ò!'ò 'ñ¯ÕˆEr4Sò%'³&wr0ƒò(Ožyp+ßÅ 6j*ßÁGe°Cõrcð} ØyG¸F.ßê2×4x ˆ=ЇEˆH€wЇ? ˆq@I2§sM˃cЇb(f€\ ƒmЇF@„8Gïì‹z(têÁ‡xèdˆFH„Aèƒ>¸A0F€„IX†opsž$t°HÀˆ8°‡Œ¨.Àˆ ‚–ˆ(0ÐÈtÞñ„>àƒRLs97kލÀv¨`‡x © ˆ(ˆ tX…P‡b7SЇbaWöeŸx@ uƒ ЀCŒu}¨‡¨@¨ˆ Šèw§Ð‚ †] …0)0ö0-èwoödÇvl€÷ÖK¨„:˜ € €J˜ÿ©öù\¨(…í°•ƒp¦.º W.™®WʯYE‡ »€•ùt ð¬ú°Èp ƒ£_²øá…[Yx¨ÀöRÈ* Ï¼Ÿ¿#gŒ. ¯¯†¼­ŸˆQ*{uåO­ÿù„ »ˆ±8z(€«ˆŸ•ÇuhÀön ¸øxwkð-T¨…k`QÈ~Çz}ˆ†à^¨ g{¯p¸W·®ŸÌOû¸wFÍ?{áÞ|ÌzÑûÐý Ø›Wìj÷•¯zŒp o׈^øЇ¨TPewvPv…d‚T€e?ÞÏÿ㢷 Ÿã’0}é_Ï—yë—¨ÔG}Ї{J=Ôט‹ø~–ÆþÝâ‰'°‚(ƒðvlÿŒ¸‚à…sÀu}Ђz±Nè£DB&'V 4j|“‹Fn»_méãë·/`¾FÖgÄ0âÃ;écœS…‡&¤œ0q¢†ÖÌš=J½Ùy3èТG“’]´4UÔªW³=áÔ´&GšÀEØjB«owO€£Fßša¿Ç]³70ò¿„ nŽxqc $›ÈÖú:öìÚ·sïîý;øð7'˜£W»j43ÿ²G¾Ü9üŒŒ‹¯oÿ>þüú÷óﯽ=€†-—ÐÑç‚ *¸ ƒ :ø G¶÷Î!†j¸!‡z˜‘„È;aolserver4-4.5.1/docs/intro/tcl2k/html/img042.gif0000644000175000017500000002442307363640503021201 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx!âÍËqoD¿zùÝ €"áÀ‚v{r±IÇ!3žLÙ*ܦ´äŽÕi—%äÊãs,¹´àϧEV-‘tbɈÂ]x¢éÚ«qGNû¶lÖa NÛ6oêgW^ÎÜâ奚é&ì¼RùîèAç¼8;bÂÖµÿ¿žuyðÛÑ“/ÿ[÷_àç»·¨<¾{äñ¿«o¾¹ÿÿ=GSt›•à&¨à‚ ^$`MbIWO Vhá…fxÕƒaÙ´Ùtj(âˆ$–hbFfaÔèâ‹0ƈ`ŠÒe`V¢¡r¿‰DÜ~=N6ß‚@¶v_JCöRjÆ©4dEEbHãŠ6¶ˆ’’ñÕÛŽAr¹Zöù%˜bŽi^vJ&Woý=™—xôEéåŽj‚©öÍéåkºÍÇÞœZºçgŸkæÙ^`]âI–ˆî¦çŸ9öv_ Z憘eª¢‡Þ(ã§B= ꢞUêPSrÊbˆX å¥Eªã«ºêhupre+U»Õë{[¥zÓª]EÚã ‰Š¦¥<êÉßE|:K)´rnwëµÓî)h¡ÀŽél£uz'hÑ{)“]ò™Ÿ¬aNº-³âÆ îfæiì{gZÚ.¬! U§V®eݨk5p­¿Æè¯„ ìðÃG¼ÒÂN(ñÅg¬±DÌêÆ ‡,ò‰ÿ;òÉ(§\aÉU~¬òË0ǬËRÜX®ÔÆÆeŽñªÛ¤¸§ç­Ï¹Ú­lÚVšž^ÆI*i²µñ,¯ÒèWtÒF×÷ôÐ[ÿlõ›„^{µ|Pç\o³SóLô¬\_wµWšbVcÍ.óº_¹Kóç´k`?‹·×iß]è ®­§wÔ8—hÑln;vŽ“½øŸ=û…î½Á¡‡¹z”ÿ 9Ú•Êi/œ—)&¤üE3Y6Ëìúë°+7tTÒ]¬ÓX˺8Õa[Ý6Ò•Ãû6²¿onú»»?*¼|ˆã´óßNî;w„"ÙòÖod×kWÿ¼ò±;´:gu[õ7×–÷xqUW®nßÿÏŠÍîÙÚJ>.›÷»Ëí¢|çJºþgêßmФ¸çïQE*üò>ñÍn@µc]ùHÁ ZÐ#ãkØ7ÈÁ:èRUËpˆQÜ¢kiJ%~^½ä%êJ§8Cɲ’£ ¥ÁÔÔ<0ÎqŒtÔã ùFXÚ™©<"¨ŸÄåp˜º„1 ØÍ;¦o{B§è²Ø¾/ºsœÑ3‘2?IÏz‚jžö̧>I„Ï}úóŸ ÿê'@JPæ´ MèÌ@Ø¡aP¡èY*ÑŠZTu Ý”CmwÑŽzU›?JÒ’¢1¤$ŸIWÊÒ‘P´¥0iD^*Ӛ”¦6ÍiIqªÓž^”§> *D*Ô¢6ÙCCÊÐD8!jH‚ …ˆì"WpH B`‚4Ä«F «†ìp‡ ¡éVEàÕtµ¯8PŸè5¼ÖŒF~wM–ÃL«¼ú5¯§»^FË4ÛpðM‚õŒ0ÆÑŒÔMDªø8‡ L àc«]HÜš‡L!%0>VÀƒ‡˜ÀYB D |„à‰6îÒ±Ö3A&vÁ#0açÀ‡ V1VLËÀÇq)‡4àC Á8>œÛ†5°c(!GmË]„B¶»àeáwÃK^Ž·¼è½ÿàyÓËÞð­w°ôÝמYÆCirY™kžÎò(ßU¢éƒÜ~i߃–Öìï \IǶ×9ÙÝèHïâ&Ý-XÁÌÛ¯oÆ…/ivøÂ¯ª/‡ÑÉ7j9xÀ ~:WLK?˜$ïeþ^Lã”ĸÆ8ÙsÌcŒí¸Ç@~؃Lä{Fø_&ÛÊkPùÊ6ê'Nõ[±ÿkD¶10[¡«e,yä?+ãÍŒÖ;ãùfé¨. ó—üdÒtùd.îÕdòúÈeȸr\±†Ã‚ËÂiûó_¾eå;Uø¯…$ÚÑPé>i&GZX$$ÔĨ_sRær2™vGEMwoÏ|^ðýàö ‘ª´È¨Vž¯`5û9˜†‹d—±ëš¹z8Óä*É“Î*7‘×e¶¢/çLEeµ^k2­§/K"“R·&%9™­e~éÎFɪo¦Haë5؃þ^² KÉ/«ï€*N¬¢.}à{™[‘G{7­²&ioc/ˆw W·£I?CJúÃò}ô˜éš;8ºÚ$ÛNµÂE”ð…;ÜB ¸Äñ‰[ü?¿¸Æ+“qx}6Š-°+™ß=9È[|á7K,ã ö39—6ð€ï’†…6ÎGD:Ö\o€“7©7ïM·åm·§¢ D~Òƒ Xñ(oK†¾6¤iJ¾0s°/ù>Aº;„º5uÁS¼Á-ÕÁ¼R Â;½$…#|•Â*ü¹÷†-,…ñê¹TÚÁ'“3È®¬gÂaJrsY—UŠœW ©@›v%˜±¥@¬BØÄˆªÌ·°E«Vû«ÓB}Rw½Ã)Àï÷²b›¾­š}XÅ㛸ԩvÔ:Åa¦}|û~W\Åò×Å®ö±°j´©/l†y¶$p¬ÅK|9pt¨|}ûù´Š4rLl?xj­bKÇV,ÄKÁp[Ç(ÛÈ’·ªW›Æ3ÇÉ{ˆ–«„Ê24¬¾8²º‡…ʱ¢Ê«ìÃ,ÃõÊ ÄÃ-UÊ0BšÏªÉBÂÊ|쥼Œ0¦,3ðû·ƒlȽæiÙû©]L§lxŽlÞY«Ä¬wœ,}ªª7Z±Æ ÄyKµ_\Í ãÃyÌÏlkl p[¬Ìㇾ0ÊëœÎÉi tª½à©´gÈl¤Ím'~|÷»e¼¢Ê™Ç˜ ËL(ËP}ЕРšâÜЪÇÐíO=ÑúTÑmOÑô´Ñ½™ýÑ•)У,Ò¤çÑ& C(Ò+´Ò,ݺ®!ýÒ5Ó2j.]ÓtÓ8ý¾4½ÓA¦Ó>]A@Ô 4ÔDÝB=}Ô²™ÔJ]›LÝÔ¸ùÔPÍ^F=Õ,ÕV]^UÕ)³Õ\}2^ýÕ""q ¡ „Õb-QJ…x. mÍÈHÒgºÖ2Åw°uð tð im×—)n%" ¥‹D !—Õ! Øø m…×ÔwPVøœ0Øÿ¡¼†0 ¨HŠŽ!sêA¿Œ[FU @@  u]ÚqHˆM̘ nÅU«=õ Ú%ð ©M{˜KV³%x;4³jÄünˆ ÔMIW~‹h0Þ÷˜òÌ òVâLŠ %J@Š”ñ ¸Ðº`Ø`;` ¤` ø@°õUØ@Ù²¸¦à—° Ý)½ê–Ýö;Ý÷((òXÝlXðÞ¹âmáNANÔÐ[Là5 #ÇåÑ5]dʇfZ؆ÍVÎÈÙö„€IpI@0#  À5¬0JŽ#€‘hp½ ÎeÒu¾€]„Íœ:®ÕGV1 aã[Îåb¦_®åan¯Dæw}æéÅ!jælÞ]n~¹QæøçýÊPonæx°zNçç}îçcèv>èí5ç¢è|Žèûç‹~莯nÚ9!é“>¯•Þu˜žéh~{~çž®SŠnéÑ飞ç…ékžêBÿUêœÞêÅ)µA‰Î†;ÁN©k9Ì1™Ÿw)º›îå²Þœ3Ö›¶n7Þ_~)"».¹‰ÂÁ.!¨>´EI•1©¡LÔ“ƒZºÊ¸"‹ f©ëÛª38™ë˜­ÝÔs'í›1í7³¿ì§›e¹7ñÓ—önbgbŠÙ£÷—Û>=s›’¿~¼å;ðßéž)q°.ì‚ÄÅïu;ï-˜·¾`%¦ï†«5_˜¿ñ¿Âñ†¹ìˆÙ“Çþp /íÞŸbæ¸fù[ùð˜|©ñ&úN,&g\ôñÝ.ò–†ó$ð3½ê¦^ç)ÏÇÞÊò0ßñ/_òåÔ»3ï»9;˜4ñÎ^ë%©Ñ9E?ÒinèEG/˜éñ‚¹auÔÎ|*ó޹õ4/ö¿öWo—UOo¯ýéqêöÏ]ï÷®ôžz»1O˜ÄóïÃ÷‰šD,'kø}Ïø}_øoË7Åîtáî” tš?·cŸùL?ïÉ®–g¢Ÿ¿²iïz•mÿ£uÿê”–?*’ïê@qòíþõ²»´ß ¶_ù¸¿û“/ô±ÞðÀÿÁ¯é¿_ü"|ü§žüÊ_ÂÂÏðþüÐßõ¬NüÔOR½ûΟýµýÈýÞÿýÿÌOôâ?þþÍþèËåÏè¢Þþ.lýCÿòoSêoþÓÿ•ÿOà&|D˜PáB† >„QâDŠ-^ĘQãFŽ=~RäH’%Ò‡ReJ–(‹¼|‰¯ˆLš34™SçNž=}þTèP¢EWm)æL¦54XTêTªU­^ÅšU+U¤]•ÂtÚôfÔ­0‹¶ìZ¶$Ïž}7§\‡oß‚¤›0ïǽí¶%ééÒ¦…Ÿâĺ÷.B¹}Òu<ñ¯^»“Fn‹ðÅÅ5{ÔÜù³gµø"æ\º®jÓ¨7cœ”pXšcµæE«2놮Zÿ¾Ì»õcá¯wôí;chÝÅ1žv®µâèÇ3Æ^9Û°MœdGv–\înâ•‹G_9zcô½ÕB7ßZ}ù»äƒÏ—þü}à”ã/To7ü†#n¿Ó«/Àý pÀüÀ;н¿ØÐ>\LÀÿŠ08ú2·ÂŽ%íh³Í­I»ì1œñBö8,·÷œ»Ç}¼°Æ ¬n8å(ûµ$p²%‘ RÈæ„±Æ&•\oʾÈÓ‘F‡ô’Ê1ÓFÞÊì2L­Rti)Ú¸ƒª¤Ã33È4ëİ¿AtÏÊóœ ÑO#4±H õóoC1e²±ípËñö¼„ï¿4©[Èïƒ2Ê'CÌK)ñÃTP4§T3+6¿Ši»Ã¼ Ñ´4ìÏ+é„Ò1 3e®ATŒK8èj]ôI1!4MÐEmµSXQ­<5Ó?3–YF£ 6×µíTR?ïÄVÕ¤¼ZѰo£îY)i Ô?wœ3ÏvåÝöÝDÍ­DEÿ|‘DÑâ•ïÏ=ù¬5^]7½sS`ÇŒtR3I%TOík·P~-+Ú_­Zµ\§Îµ.d‘w:rd“¿+2³5ÇeÙc±º;9f™‘Kyf›i>¹dž:vÓUo:h¡‡&ºèƒxËg˜fºi§Ÿ†Ú(–ÿë™Å¥«(IK–UhIî:ê§¿Þ éV­Ž3+²©\[ãPÕlW¢¦S7¤°Õ®9n‹2¾Jï2¥NÑåÚ®î;k¹—ÛXÚT]”ŠîžôFWkË‚|q¡ÌvNİ®Ða }N ½ÍóÞJ!à‰WÃ×àzn}∫ã}WÇ}Ý$æ½a@!n=öÒæqãC¿=w}E^â0óÕÈܵÛı“LÏ—ÝAÒ–X<õûë¹EŸ¢ìÖžRϽ囿î½G5~m{„¿nË×wò‹ WZÚ°f½p± KÌKÝùtç«°]êL¯KR¿ü…½I‘Iæãõ¨,ÿÓñoZYrŸû"”®ÐÙ.}·Êà˜u<á-ÎAëaòž75ÙTÍ\„³ ßîf­D)®€<œ_Á È0þ°‡lV˜ªEDË1QƒÙz¢©õ>*ö)…'D¡9XÆ$k‹ö[˜«¢ms…;ÑGç;ˆ¥pkŸ;§§yuPvl›c‚î¨1(Ê«‰ôâ£ÀG>¶x!eÈ).Ò DÝk·ÈëÐ0;6ü_S9±u0œÌ™ÿ<Ù2ÞP€Æå(U9ÀQªn•ÿ³¤Š0ù²S¾Ò–·Äe.CVÊLÖR—¿f0… ^ÒòŒÃDf2•¹L‹sp¾df4¥9Ía::Ss°¢f6µ¹M±YSzÜg8Å)4oþlœçDg:ÙRNMªÓï„gPØ ÍxÖÓž÷ôÈ<‰O~öÓŸÿÑ'6ÿ9P‚ò3 EhBïyP…6Ô¡çdèC%:ÑiF”¢Åh0-šQŽvT•õhHEÊ4ŽÔ¤'YIQºR–G¥ÉLe[ªÅ‘Å”›/%eŠQJ§§x´ŽM}ò7“Ø”n$T”PÉË6%ÍŒJÜŒúÓçPua›´jT‡8—¬QBçW2qJ3Q"UG“|äðÒ*SæÑyÃcan˜¼þ Á“"ÝzVK¡•~d]|(6É56G‚QŒcëj;@ÉQ°:õÉX} ÙbÕÏYË»×X ~ë²a¼Þ[…Ô¿^•I4ÍbjQKZ %ö¯¥î4üé”…"ç1̸C¡³0Ó<½?.—§’3-›‰–gA³…ÐÀÜ3Wµ­Å2GDwN£åºGµ*¯=5æ ¤‹÷XH3¶¯{u%q==ê!±±µuYlæq&ZÑùÑAÂ@†ïƒŸ£oìZÒùyÁ4¥mƒ½æÜ^•KY+0zû‡Eƒ2•U™û&+ßkùÎÇÉ>íƒÃÛ¬o•¶‹Î¶‰¯ý,LÝV¼%Ö¦O{ìÃxy {ØÑéj®âײ6ö¯°M¬`C°z¥°C›21–ªÜ´oZˆ]<_Ù÷vðš‡í„Nzõ¬V/hB³ðJî8Á>Îâ'H‚®ûtÊIýï}¹8Õªö7œe(ÜwæÍfïÙÜ U/+oþų’{þ“ŠsùÐ>ŸøOŽ>tŽéO‡º@œuª{yêUÇú•¯žu®³të]ûH¿v²stìeGûDÏžv¶£ÙÙ‚»fÛåÎÿåµÏÝî8%Ü£}w¾Ÿ´î}¼:ÿx‹sð…G¼6ŸxÆGsñ‡<2yÊÿrò•Ǽ-/ŸyÎ{róA«ßúåµzgÆâäd` •²¿-Ëçý‚ð¤+õu¶f…>û7ƒžö*ãú|Ù:ÝýcxîÍŠ]PQ8ù<>¸?ôÁ)ÂÆ…Å}¸µ<ùùwæâ>eûaëGú¹‰Ói^þqßøFt|ýßÎ۸ˉÕ¶«Û&ðÚJص:°ä³3éÒ—Fš0N‰£^K"FbÀüÅð9Ì7F›5’•F"À·¡µ@ãA?x0êúˆµ‹2Ü[Àæ 7ÿ&ʘÓû1?k®/©@ä’%ú?ä4$Š¢ ü¡C™‘ÛA;Î7ôAAÛÚž[@Ó"a+‰º‹?#ÌAŸ”£(2ôj¹•#”" û”}{AÕJ1/l1ˆû¢ ±mû5JÚ«Á˜“>5¢'+¾ÃB½0­H²³Ê@+.”7Ô ­$Ì·%ü›1”8%<.î¹8B 7 !%$À”‘BÜ}K84D¼3&›¿öê¥÷Ê¡ß[>HŠ>íË@î#*ä¡Ók8S„Á)B7ùSÑY£°é ¬ÔÊ—â¢1Š7=·¯JÁÜá"¤z^T±NlºOÔ¹Pä9˜Zºûú9,›Æˆ£:tFh3''{ ã3*»Æ¤ªo¬ÿ¤œãÆvê¼u4¼mŒžndÇxܦ:D:VtÁp2Ç#Û½½é©q¼z¿+ÜC¬ªµ HŽ8È™!½}Ä%€”9@í¹Eóë¾V4CÞ±>ïÛ8±Uc¶ì+9Mô1<¾ŒŒ d„*Ô¾‹)¹ÃÁ‘Kª‰4ɆtÇE­ ÃmS"ýÛC[iÄ»ADKônÓÈ»2¾‚¡5L¸‡1@[“ÁcüµìáI~»Ã$ŒÊLÁNrÈWüAeQ¿ŠÙ ÂòAÐ*FE±Ä2·îú,K„?Ý“DÛÈâÒ¶¹œAg±þ£ÄC„C]ÚJä žˆìÈIº“0òR@M4F߃3ÀpáµTÎDe¼¢dü¿¹ü6®y4þÂD+”L¾¬É§ GØ2]a¶€»K JeÃC®ÌÉH4¶*Ì/`ÛLì"ÎLäESØb¬´ÊÚÌÊnúÌ«Æuƒ¿ÅòK:IW¼—Šdn+Eü“Ét´Ê͘$I”È­ËJ¢é´G~á·j˜¯œL­,Nh”Çö §¾tÏø´ø”Ïú ú´ÏüD‘õ4¦hÔÏÿü(þì-ÿÐü4н­?uPõDÇwTÇ¥P¢AÐ ÅP mcнËК õЕ¿µIÑm EÑeÑe…Ñ=š …GÅQ®°Ñ ÍÑ õÑÒ =Ñ!%Ò5Ò#íÐ$UR eÒ&¥Ð'…R•Ò)MÐ*µÒÅÒ,ýÏ-åÒüôÒ/­ZÏ0Óø$Ó2mÏ3EÓxTÓ5]Ç6uS΃Ó8ż9¥SʳÓ;…¼<ÕSÆãÓ>E¼?TÂÔA¼B5T¾CÔDµ»EeT¹sÔGe»H•T´£ÔJ%»KÅT°ÓÔMåÿºNõT¬ÕP¥ºQ%U¨3ÕSeºTUÕžcÕVí²W…Õ,“ÕYÕº¥'[=ÒZÕÕ™âÕ^õ:\½I`­Ïx8o8c…%Mb¥ÐFd8Ǽ£?uVûà|ø Øx8Fh&a5Ñk­Hˆpˆ_5WwºƒbÀ‡ae€[ƒlÀ‡E0„qeVã̉y¸W°³‡wØcxE8„@؃=¸@ Ep„HH†n×%׉ †@P0 ‡… .P((À‡XØ.ã„=Ѓ‹K˜ÖØÐ»M~*(¥-P‡ƒ¥¥Y„€(sH…ƒ@‡›-RÀ‡›=šåÙžÅ2x?°Xƒ ÐØY†˜¬ 0…¦ÅÚ„˜Û@h(iÈY ˆœ=ˆÈ‚¹•ÚªeZk0Û™J˜„9ˆ € €Iÿ¥—ò•¬…º ‰´ÛäÄdAž•¼¿¨Q%1‹#šM–|ÏÖì¡Õô§ä2‰K`9ðÝŸÂ)]¨X€…»mÚ¥ˆPTªÝúu›Mܦe„ÝçêÍiÃÃé^qcžè]/²xÊ Û͉‡˜¡ƒeφ]•u†¥Z‰Èªå²¥†È0…Y¨†%…[À‡yx^|xØ] ÐÝJÄ/ñ=_1žë½ÝÙ­` ¶`ÛõÞ.â^!ñ`ÜÏÕdH[Š`ñ½¸]ˆ« ]æU¾•Z†Ø¼¥|@8TàÙHPž-XØÙ8ÿWàY¸a9!aé•àÛµ·cÁ`aÔ%‘ñÝà&®`}«Ý,Æâ_u á²aa‰p‚*€‚/ ©]ZP+](•Ň,yxš8ˆ%0•¥R Yð„)xøª–ÄI"ÉÖí$ìý^(nÍQ£ÝüÊ8HñbZ¤ž{:¿µy‚  &À$8‚ ˜jP… U¦UƇ À‡3H^ø[>[^‡^ˆÑ2†ˆˆ_ÃÅZ%¾™É9a–’dÎ`© (…h`#`ZˆU˜€UYÖæ pƒ4À5oöæZVƒ_vßþ¤OPÙ¥½†Èå» y æŠxƒ3 %`vçµ×|¦¨}æg‰Z•€;aolserver4-4.5.1/docs/intro/tcl2k/html/img043.gif0000644000175000017500000000761307363640503021204 0ustar frankiefrankieGIF87aXÂ÷3fÿ²²²™Ìÿÿÿÿ!ù,XÂ@ÿH @ÁƒPH ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éâ/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°®Û»xóêÝË·oE¸MȫӮßÈ+^̸$ृé&4ܸ²å˘3¯}L32ᲚC‹MºôIÎ5ÅJ®ËÓ´ë×°c‹FÖ&áÉ­eëÞÍ»÷æÀÀ«þLÙ·ñãÈ“¥-ÜöjÐÊ£KŸN=#sÏt¡Wßνûñëó@÷N¾¼ùÐàÏ}¾½û÷|Óß\¿¾ýûiåC}>¿ÿÿ¥ßj¸hà¢4àm¬%èàƒb´ ìEhá…ÿNH†vøŸ†âUèáˆ$v¢Tý•¨âŠÉHVŠ+ ãD2@@5F„#ŽåH㌠ùäŽ<:”#‘>" äCBJÔ$EI*yã’CÚhÑ“UNi¥–D)¥”UvÉäŒ<¹c˜T²Xš‹…‰cš^n™åœaI§–wÞ)ä“|¦iç˜rþ(çŸgfôgœy6i§¢pâ™§£ˆª¦kl8] *v褜Uiƒ†*êšÁ†ŠnŽªêª‡}ª«°Æª—«0Êjë­]Ñš*®¼öš”®¾+,UÀkì±Ë• Yx¨"ëì³) í´Ôz$mµØfKѵÚvÛ-·Þ†K-¸â–‹,¹æ¦i,ºê¶{+»îÆË*¼òÖ*½öæË"¾úö;"¿þ|!Àì Á'  7|ÃGìÄWLÅg\Æw¬Ç‡ìÈ"—,É&§lÊ*·Œž²1ûâ®.×Ë6ç¼Î:÷ìÏ>ÐBÍÑF'}ÒJ7­ÓNG]ÔRWmÕVg- Ì©©¢Ö`ã…uØdGËumó}]öÚKŸÝ\ÚͲ-÷VcÏm÷[nŸ:óÝ|›·Ìmö-øÕ{÷àˆ'‹šÞ'îxOu?Žxä’ Nyå|_ž©¤,õ 禂Fêè\B堂乕¤›Þhë˜K¯X8Ü{E¨ŸKb ú¡{©;•½cg‘¢;™ºë¨c|¸ûþ¹˜fºhîÏêyÖšßn}óH^©äëÀÏ9š¬ŸyýEß;¿=ñÑCy<]®N½ò`ŸhóØÏ¾ß†±÷’æþ[H¶l<`þ8K)ðÑ@Á F$l3˜´ r°hü`ÐB(ž‘°„9;! k¦Â¶¬….L cX²Ò0dV6¼aÇr¨ÃŒñ°‡û!#&Ä!6¬ˆFL“X°%21`N|b¿¢(Å|Q±Šõº"ã¥Å-¶«‹^LÃX®1’1\f<ã·$È W©±€l¤Ðç–Æ9V^«Žvœóø¬=òñ\qäßµæÇA«†\W Õ–H«!²‘¼z$$ßµÈÃMÒi’¼d¬2©ÉyU²vT'C9ªQ’ò^ŸlÜ)A˜J®r„­¤à+}fÊYî+–n´¥Ë¬j©Ëñ²—ÿÂe­€)²_“CÆ<æÀ„I3eú™ÎÜ%4£©²dRó`Ó¼f ³©Mr³›;ü&8ŸÉ@Ãrœ³&:?$Îu±î<"1‚L¬â«°¸ÅSK1Œ‹ôâ#¥Æ6&\†Å›ãIá¸Çž’1ë£5d¹CV0Ìè$'¹C´aò‘§ûäerFʲ¬²/φe'kÙBQ6çA¦ÜÌ/?(Ì¢5™Í¬"47*kf3‰Ü<Á8ËÙCt6r–ïlå%‹YÍ{æó‡¹üç&SYÐ #tš ]fD³óÊ…¶³£ éEKzÒgŒVô›sriL'(ϫ鴧3¤é:zÔ‰®ô¦Ç|jT?ÚÏ–nµ«ñjˆzÖþ©5]n뇕ZÏ^îµ`Umê` û<º†³¬=lX¯ÐÆföÅ~êeKÛ<Éæ´µ¯=mbûÐÜæN¶YípoŒÚ¶Þ¶¹·3nhƒ{ÝÓi7£áýWtïZÝôF­½•]î|·{hßÚî·¿¿pr¿{à÷vµŽðÛÜÝn8m>o‰{GÞ¼¶øjžn†küfÏøÇîìb|ä çø½=Žò•…ß-OyÉ¿ñ˜¿ã0·9¥^Îrowæ ?¹ÏGƒóž3EúÑ5“ôš/ýç€é²ÒŸ~™¦S}dg<ŸúÕÛ›u§o]½]ÿºnÃ.öÞªœßZ/»}É®ö›³½í.?{ÀÓ÷ø¼½îD¿;Þ¡^*©{}ï}±:àó.wƒÿ}ð³Ò;âÁ^xˆ/žï`ñûã™®øÉ÷ñ·<ãÞqºk-‚ÿ<×ÿ1/rÑï%ô¦W êS¿vÒçœõjY=ì_ùÙØõF·}Vd¯ûÛs~åžï}Œq|áÿªöƧðïÑ~øä[…÷ÎW~Ô#ýú7qµ4{5Kö¥TB$õŒ_÷G—>©n$¤ä¿>ùŠÔVz– :­ªA‘/W³¶£ÖWCÉ‘þæ'óG|Í·OöWS¥TYEReUù´TQû§>(€kE&O%? =h"U.&€¢~¬D€¶cV[Â>Nu}¼3?6‚¢£;ÿ¤U(Qn¥V(…TMƒ¸>'˜RæÃ~…’W8E'±€/X==EƒsòG¨~D%ƒJ8U=è„H6ØU3…ƒ;È€o€#¸|sW€çw€MX38>§STAe…d¸)­Ó~ ;58?›è‹ÿô‰KEªxˆ¼8ñŽYd™‘ Y™Ç‘÷(‘ ©Ók¹7’§Q‘(© *¹’&±‘.Ù0“+1“4i6"y“Y’Ïö‘:¹“}G}'ù“ÖÒ’DY”9y”i”J¹6Ù”ÿÔP);I9•*ñ”VÙX™•NN)•\9[ù•Té‘¥'– –fAU™–"–l)nù–.á•r—révy—nSBY|w™—I—o ˜u)˜lI˜ƒi˜i‰˜‡©˜fɘ‹<é˜b ™)™_I™“i™\‰™—©™YÉ™›é™V šŸ)šSIš£išP‰š§©šMÉš«éšJ ›¯)›GI›³9ûxʘ{ß<{äóÇÛc¯(¼¹ýûŸÓŒNº,þÿ(à€ºÚ¢‰%]]<èàƒF(¡R†Æ]þM¨á†vè!EúÕ¤`Ô}hâ‰(¦È\ˆaÙDÚt fžbĹWãeäÕ÷Xu6š¤#Z?ø[ï…7T›±˜ ‹ f˜ÒŒ;Ζ˜n“Åfey´½G_|4 §[êM”×nS[r²Á—™xæÅ7žoUb‰Þ•pÖiçšj®IçaêYgzfÎI§ždÞéç¡€æØ¦¡„.j–’JU¢}FVU©Š˜fš)¤#b8)sCZ%¨mšÉ’2ÇCnyá‰7n¹ç™®8â‡^¹ékÜrËQìÃÍ07ðrÍ9{äó‚0œ¼÷n„(WAŒCü ÁðWïûòôáóؤh°ƒÙÿž†4z„ÍÀ!Ù4¸‘Û½ˆAº{Èù@Œ"‚€ú–ÈDïï{N|¢°@Å)ŠXð«XÅññ.‹¼ób«7Œ• ƒi‡ ¿øùOˆHûÚ‡ˆf¼q¸±`D2è®Р>€ ¤ IÈBòˆL¤"9jć@s›HIgŒñ’c|¢}Eð}OŒR\ž&?©Iô2Š¥ü¤½ÇJ/ªÒ•­ c,c ÅWÊò•¶„%)iiË=’°\áÿ› ÷€>0ò˜ÈLæyæ³Hc>xæ4¤±˜U“šÍ¬æzMg^s ÑœÆ6æÌ”Ӝؤ&4cVÍvL³šâüf;œ‰³ìðÑvjk‘ÀÚĈ¨àŸ ¨ ÐvŸ{öí;ð!Æ0Prp`´‘…cþêÚQ&b˜y4ñ°GSB`EbC£Íã/õ%Ò cзäsIûœU?¢ÆšÚô¦ó4§NwÊÓžúô§:Å©P‡JÔ›õ¨G-ªR‹ŠÔ¦:5©EU© ¹ajôªXͪV·ºÈþŸøzWi$ª’–«Ä%/×jK´Ò²!mí%7ØÚÊ\Þ’•nk+ÿ &»š®î¯€ ¬`KØÂö°d€CIP¨¥=|i¾Æ:Óª-õ²—J4è­½ïÓÃ7ʺ?švn­“Õøg­"}ôµ*tÓp`ëÑÐ#1¤¡4ºÖ4°9 @ˆB~…°É ³ÈM®r—ËÜæ:¹^-!UÉ©„‡óÈ®v·ËÝîz÷»à¯CF0‚;˜ ¼w ïÒ‹^õŽà’D%æ+‰Câ¾øÍ¯~ õ²w½þuï2]n\fß@‡CpQ\<ÄuðlCØÁˆø~~XÇCÖ¡á†ÔA¦ƒÂf˜XÃÌ ŸŠÑ±ŽdØÂ0ÖED`—ÿ"NÕjû»šŽwÌãûøÇ@²‡Lä"ùÈÑ*XÕ6ÙÜ]7;óPA”µÐðZùÊá5Iö{_ÅסuÐä_øVà¨D|í{ˆÎoÞ¾ûãé'yA”žÿ~·Ô6VÏúÖ»žõØ^€ Èþõ¬¿Â6¨ñ‘ÇÛ¥ae›Lëí€ÿøÝ•yÛñ œàÑè8Á›¿q@ |ÀÒõ¥Ÿðç'œãÌwþÀÞ‘s±èÿëÖ¿þ°ÿ Qxÿû… ù»_þøgþ÷/ýóŸýLÀ÷÷ëçøgîF^ X^äu^#`ìµ€&ÀeÈ__ö€ ¨€Ø€ìÕBO‚{®w x!{{  ˜‚½g;a~ "Ybåd)]ÈWƒÆAá‚á0ÓÀ“?Ø>X1<„,ã8“C¨~H€;xSxõ·~ÿð~ÂÕZX€OÈ~Q0€Zˆ€¿§€À_ç)D)´†цlˆBpˆBU5:(ó6|3e]0}˜]]€oÓ oØpoývˆû6ƒØÓ`ƒÙå¼Ö‘AUh´wˆ˜3 ŒC=ø?HÈ0<ЉÁ‰452žH£Ø9 áYp=ô`„S…ö÷…¶(€6;ÀÀ‹Yh‹ø·î7…´ø°d(]ñ ØGpäõ| ¸}Ïg}ÐØ øÚç̸qÎØqÍ(æ4¹ H¹?¯ ˆÐ À>`?Ðåˆð ˆ å˜ "W~Q3] ‘‡úRYŽÿ8V¦n‡(•z¡B"Åtˆ¦a-úÓ¡p‰éÒaFpR'õî6ûóZúÃ:À Hú£‰apÍÀ93énŽlŽYÃÉ ÁP?™ ÉÁP”¹€€ ¯0 À ð¹0 ¹°¹0ŽWyŽl¯àU ‘IYÄ×÷6ˆV†oþFYÆ™ønÿ1’py2´b ƒÂe)8ØÐoèoüÖÈ–Xfx²°…“q¸†n8@½Á˜‡á¨AÏU™–y™˜™™š¹™7å;V;ör5Uó:j44XsšG&šüÈ oŠùc)ƒ(Aƒ„9›!ù$3…I¸9F ‘›¼Ù›¾ù›À‰›ûÈAæ™9‡;™@ y[o(%×Òœ9yÆ™œ p°eu`W`,Œbu‘ò†—1¥—{hoü6}©oÇÖ…H›…é–9ÐØà0—CÑ‚âi˜®Òà ôà^@0üèAKÿöMD{ Ÿ³IŠ ʘÔ)‡¡A½Ó<èӜؘ ¢u_——yõu_ž·y\¢,zÑ úÍ€P A5‰Ñ5,ù@áà ÁŸæg[ RE¤°•Êig‚˜Þq˜‘ùY¡”X&Ò,qb‘/t ­I]äù3ÖužÅ—žþÖ‡ø¦–pòY|‰¨–eªˆlºoˆhˆù¡Ö¢ 8Èe_†¨ º$¹?ó™„ÓZàj†Ú0Z@`0ØÐU@‹îÀX î©î@4YJœ¦2%œ ª[ŠOåSee‡w|åI–`j–gJ—A#ÿLôªsší€ˆA±“ÉÙ†R*¥T¤ƒZ.Å*Ô + ê$ɇºu4´45c7ÑzZIs­$dc¿Ä­ꪶZƒÊç}Ñ×Ö÷€ÐèŒéŠ®ÍÈ}ç|Úˆ}çÞg‘zZÑ’Á¯Ä‚Žth(ÅÂäú¹¬™ªLƒ š°ø˜€yˆbÚoki±ð9‘3ª°þ ÂZ‘j¡P ¬Š¡I†3È5ýY/ PñÐä`03[áÀ*¯1ª/¥O^Jo[µšˆpú¦Ü•žD ˜r §kÊ]žÑT+²EA¬Ø:µT[µVk4 « ë¬?ÿ A®Èw*&’¡œá3œå§³]Û¯ù°k[V½‘ˆhٞȞi±úÖ\О€X¦›·â•þè«è[’H¤¥+û¶TѶ\˸˜ø˜¥Zª·*&Uj¤rú¥«“¸‰[ß ¹Û¥¸ã¶¢û£q^Ù]›±§Ë‰Ëš‹ûºDá¸AC»ñµ`{ƒ 1sðk¬Dr”Q±+—¸ ¶KVÉ‹A´W½Ò‹­U#7#¤­Ó‹4«E4ÇÚ¼±¼Þ¾â«)FeD{ÐËàöH¤ûC‹GÑ ;@¿ ñ;°fù;¾þû¿D?+vàª[ú»¿ô°fköw”’R²…° ä( -Xš"âFª¤ÜÀ4¼ i¹¯ë,§a3dÀïI±f ¬¿ü+pÀÀá ¼ÀEð?úÛ;p±:|b À2RF¬à Ý€U€õID€ @Å XŸp …@…@[¼Å‹Ðyx˜Â_šÄf|ÆêrÀh¼Ælœ"jÜÆpÇòÆr\Çv ÿt|Çz¼Çž‘Ç8ë(íÁ&eBÅ}âœKJÈ®µ+\ÈÅ‘QhR,g²%}Ä32”ÌÇkëÇO¢Èeå1É‚<Ê82¼•bm‚P6òÈMJÊ¢ÜÊ‹L*,'Z¢É¢ËÉÿ»Ê­b.»lË]‹Ë¾ÌÂ<ºªÚ³z8ÌÈœÌRÌ¥¿ÊüÌМÀÍÔ\ÍßKÆ>«ÄK¥‚œ- %::[ÞyWZÎÒâœF"èÜÍ$ÌÈÔÒÂBÈ_HW:&ð¬ëAËV¢(çÌέåɇ\σœÊ´1,öŒÏ}QþÌUâÉZ1ÍH‘(WrÏv2*³U-ÿüœ®ü,I¼'$œÿÓ,ÞY[Œ(«-·2*!}Ò$-½%®ì,¬L## -1mÁ4Ê+ÝÓ7ý(Ø|ÌÖ<ÔD | ›—¬:.çœÓ‰LПÚÏ ÕÏyÈöÜΟìμ"Ï4º¤:­ËŠ’ÐÆÉò±-/í+ûÌpÐUíÕ†ÜZÑ ÑèÂÔÞüÈ»QÒâ Ë(½ÕBÊrÒvÍÔ>³lÑ¡Ø<ýÓxý×.}Ø( ËLêÓÐ ×E=Ù“-Ù”}ÙÕlÙ˜½Ùʬ٘h06•~¢=Ú¤]Ú¦MXŠÅXÝËÙâÙ14Ù[µ©Õ4«%‘fí·%[¨¥BÊœ#‘[EÃ[^ó5¿\ÃU\`£¶¬"±®ÊüÝf›IR4J©TJÕ>sÔÝóÓÝàÞâ=Þä]Þæ}Þˆ»å÷4 ¹A±ýÞðßò­4Yˬ[{»p+DáSDİô€@ çs=@l=´¼ãÍvÖã@¼×Ýc ÔðEÖ` ØýI\tèãáËâ¿9Ge?ð?¬€ÞÝ G*Þâ.ÞÝêZí½Ä9ßy3Br3!¯QRMcCdóã ³ÿÍÏ >03Í 0àôÐ ½ƒ=Íó<ÏC=ØcJ×M\„mÕƒ¸t`®å¡´JLTFÜ\χëgôZÅû?ktF<–cÛ[‰?¦@1޼jaU\Õç~nHeãSËReè¾Ì ¿øíµ=2PÁè‡ûèÔ¬çiÁçxQ{ € …Ä´Æ„Û0 ¬Ç&¨·{Úp{Y°z&x"5%3 H ÂD¤®L^4µë¼Þë¾þëÀ.QWKèÊ8ž‡®Â{™\=0TæÄ™Î®FËí8í95íÏnS;TÙ®í–ixÊ]”þÍ E¤&@ùçêžUÿ¹5ÜÁ˜3ÂMµÄ®dÆ~Ô« ›t¹;ÎcàÎ6;´ÚŒ+é/xìe¼ïù£?R¯FÿÓ æ`R_‘ZóÔÉ’0öb?ödöãåx7_”·ögy˜g¢G)÷û…“Gzƒ`zwOy>¿ó~ÿ÷€o­Ò¾™ÑNíÖNTAUSÛ¾í׎íƒoøÙ^ø†_íÉ¥òÿBÔ/õa*´=Ð…ÈoÜ$§lʈG+® ‡اè€#§zêe하6`.8Wô€ f€Ê@k vn0gW0üÎn¾ bÊ_²pºÀüÐ uP ÎÐ *–¸ÀŸð>Ÿ ï Ö`ZPôÃUç èæ  jôÓ pïÖi®6 ÎÐWm0nà¦mAÚ´i©¹)‡6 ,80âÁ‰±U”èÆB‡NT(Ñ£Á‡±é —’ž4–Ò¸Ô’^Lš5k¶³™SçN3yþTèP¢Ecª\Ùò%¤M"ÝF/êT©U§RÿÁš••­]¹J[ùTìX±.‘Îë1OmZ´mÕ¾…Wî\ºsÉÞ½[‡<`ñþMiV¬;-ôÚnç@q iíè1k¶&€Ê•-_¶€ 3e#™Sº£Çí3½Í™/“vƒÔhÒ–5×ö°:µ†¹–g.Ù²7;ãæŒÞÊî:—> šž;l)]#§ŒíÇrÐW ÿ&íÎ=7–#méR0à»íÁÖÍé :xê"_þ|¤¶ÝÇŸ_ÿ~þýóƒWj¼ø¨"Ð*©²ÒŠ+»Ë/úî°. '¤B§¾ozFàpÃhFäÃoLØÐ<õ4Á±¾áÃï6©KÜÿ°CUðAwä±G²Çð–jŠÃ;LáŽ;Œ\2IãAL0…‰˜´ãRĦ1‘9Ìb³™‡yf2¥9Íe*³šÐf4“yLhj“šßç5­iLnŽÓšÞ gãür(²lÊ>BcÞÜ9Ïá•Òž2#*ãI–U^¥ç»ÜéäÈK‚ÖE%,SE€Pq<24Œ£Ã”A4•¡c2ÚŽÆ12iHE*ÒŠŽÔ¤5iJu¨Ò‘Æ¥/…iLe:SšÆ?p8ÿՂpž‚ÊœRÖ¸>UjqåÓT6> R}¬w)—éJÖ.d¡+;Y×íÆ ‚ IV)YwŽ@ŠFj÷¢/÷A¿ªUÐèUa#¼JÙ° _µJbÃg=}%;Ç¢A»J2¼Ä`vŸ’ÈãΩ,°w l؉…u,Ìmå£$õÍR–p™ŸyïWºÂV–R"îªSîp"ø¨N=cYb¬¹õνŒ¼œ€Å2O÷ØÇ}»1r§c†ÿõ3Öƒ.‡å¦ð4ÙÉO†r”¥}çÛî.Î÷wïã~©!?zØU9l&üäbyK’Hë_·Ýío‡{ÜÃsë+ë@:ø‚x-w¹ÿíh/9V úÊ¿Þð‡G|âøóEÕ芇|ä%?yo)Ä”Q%Ì ã¿a§á§‡ÇéUÕŸ ¬Îà0”´~ÃÏ9BJL?Ê÷Þ÷¿Ÿ$Â"4‘ÿÉAÒ’}ó+í­¿2&Ô‘„Â2™9)ä,Ä.|0¿ã7<9Â0 ’$dÁÑB0ìÂ3Ã*-ô./ÜB¿sC+¤7™cÀ¹C1Ôÿ ÃÇë)|B:TCA°¿šÃ&D0ÿ‹ÃB ¬FLÃ7$ÄED;,1&ÄÂKÌC4ÜÃM6ò92lÃ@ /HŒÄ=J°ì2Ä<|DSäBÀÊDTLDDœDSDDGœEY¬XüBZä7NôÅÄ:³ãÀÑiÅ«BL´ÅY<ÄG„œe$ÅU|FdTF(”Æ[ÜÅ&œÄ9,Æ_äÆéÃnœgT7qÇrä' l.“FsìBM :rdÇxÿlŠo”Çz´Ç ¤Ç{ÔÇ}LAtüÄôC~Ⱥ|$ȃDÈ‚ôG¢È„tȇd8ƒ„ȉ¤È “ÈŠÄÈŒô©‹ÔÈŽôHÓáÈŸ¢FUä¶JÜ'LÄF÷"ÉYIúhÉBG8”—Ä š¤9™L¶\BwÌE;Ì«ŸüITÜB óI˜$ÊQ<Ê”¤Æ’4ÊTDÊú{°¤ŒJ5´ÄýKÊ}Ä“¯hLƪ¼Ê'ÜJ ìI®|J±L(²|J§|F^dËW,K¡LK¸t/\Cx,K¤ŸŒËý{Åx’ËQTÅ‘tì„Écd°HÌË©ìÅ· ËÅÜ˳ J«TK LÉÔJË<Ë‘4J rTKÔÊÉl¿ÉìÌfì·»¤,º¥LÉ7$¬S¼­þ+MWôJclÌ¢dÅ£C·4Æ/œ+Ø”ÊZLLÁËÙ´Â×|M½Dί,οLEmôMåÜMÝäL«dMńίTÅS!<À@5T;ýSÐá»EeÔFuÔG…Ô¶ÿëÏC¼D«˜‚%¨”ü‚/œÁ™—!–a©™”!URÅ/OEŠVy—¡SUQ½XUUMÕT ÕWuVÕUYUø¢UýZUcÖa%VU9«½c‰8«UCJAK­¬¤ˆÔi¥ÖjµVGu–lÕÖm;gm@h…L2µ^“5ñ`»!a²'cÖ¥`²s-×&{YcVs½;z(^™Ô¦›BøÛ‘e]Šðh†³b_c‰m‚(ˆ‚m}€nõÖøW²ð »»ÖH•Ö*ÓpÂØŒÕØåØ`ª5…Ù…Í×>R•<*Ö“EÙ”UÙ•eÙ–uÙ—…Ù˜•ÙbaX•xX;YCmÖqÿ“U zP‹_mŠV½SõUV‰ÕPåÔ¡ÖZ=UU…Z[EZ¢­UNÕ§ÚW5Úª¥•`¡Õ[-Õ™…/Dº»v`2eE´NT´÷ÔA[•º:Š[€³["‚¼%#ÐÛ¾Í[¾ÕÛ»½,D0‚:Ð"V`ÂÑ¢:ˆ€,â tHzÈ„”pÜÉ­Ê¥‡ËU Ç­ÉÝ\ÌÝ\Dø\zÝÈÜ4É"¯+5y-¸ušXG•X,£ÂÙ¥ÝÚµÝÛÅÝÜu“c½2zPXPØš½Ó`ÌÓ†„%•)T "UÀ†4`(  …å )z€ƒ•Š¡‹¢, ¢z½5Xkÿ°#9xƒóµ†½=kÀ,ðÛ½ \,0‚#)ü½_:ýܑʢË-œL¨ÃÑ"–ïÇmÑ¥™89à”8]‹-”Xà™\L2]Ò%]-RÝŠÝYqsÝqU5r}×Î2¥8ž²Øý×E¤VK]£:úó«¦û.s:¼¬ ¬¬á_j Þ%W¶óÝlU„å>m^t ÂÆk[xy[•"†)<€ÌÂßÜû·À}ƒj\¿}©ø_‚,þ_‘:œÞ(àÃaã6vã7vc-"àt0Üt8`Ñ5\ÔM ÇÐÔ¥0ÖEº{äA&äB6äCFdA^â›-‹(©ob¨b†•‚—’¡ìí†5x=#XP¦†PV)ú Ü/&1ãøÝ[#_¾ue1våSÖ_S©Sne–ò¼ü£aÀ'8Y³5ÛÃÑ¢b6æcFæN[NDÝuæg†æh–æi¦æj¦fC1×öÿôD†„Ï©B •r8 ¸€3~©ùýÛWöß#Xå#ø[üý[0î[¾•ßù…åxNåxî_4†ã~öçfãžð LB K*èšX`eΚÖmfkv臆h܇–è-èðØ‚&ËhŒn²ip2‹ž²K‰µiØhUÓ®ET'VÂSÉÙ=]foŒ܃3aˆ€€š€ ]6¸8Гm8¡êñ4ΈFj˜è–ðèðhê§–†¦Žê©¦ê*“j(“ê«–²‹ValáÈIéÑ+C P 0kz@ë´.°3¹ Ú‚ÊŽ|éd‹i*„O h†@ bài*êiøiûÿÀ¢6llÂþ$`Î â`€7a¨™è“8ñ!¢^z`6`¨†–è'‹´‰Ø'›‡øbtõj”&^B¥@onX ät«k*d€)V ÎKêÝæmÚ]jxe?eÛ½Ž²Ò&(û«¹:÷äæ'V¶`ÞØg’nqÊ&tj&têØi*¦hÂnrÒ¦îÎîmê&êÆîr'ðFŒ?Îf¤ólu†×r…á®×{]•J-/\?ùð×^ ØMJá–0X„¥t¼ô ûïBumOÊ£egöfwög‡öhç@¨’j׸,ÿÑ»ö-‰=#õH6,»Øð&÷r7÷aúØIWbq>wíÎ&ŒÝnîn÷ì–÷wW&ôÎØÔþ9Fv8¤xveö€xhW‰˜ب„:¨=„„Ÿ=8ø:¨’J‡Š/­Óömç@Hxô¨„AˆxØ„:„`{m—\â=,v±àwò˜]‚ùͶ )ø'1%é¬ÍÊù¨ƒ(1­S¯õâ‹ÿ¬œ¿ù»Q&å5ˆƒ+pú§‡ú¨†Øp¸?€<à§w„ØÀ§‡ W€Z€ÀzÙð€<¨ƒO0°¯ úO+Yˆ<+€ø„ØÀ…`«úÀÿüÁ'üÂ7üÃGüÄ|"ÊšP2¥¾Ø‹õ‰À`‚žü‚ž|Èw| NäÎ÷|c¨ }׿µmîB'ëRº:J‰¢gýÖÂyœ­ Ï}Áƒ& ØÇ}Û_“o ò=?z¸Ã8Œé¸,Јè(‡:pèú:H û:€5®GÐØHhƒ˜†ç 0미¯P`ˆg…p¾‡€iÀ†©6`ˆ… üÏ%†ØÿjÓ¨ ԇഄ ™æ&aC'¤†í"A„X°ÀqG Ȉ Ž$x0£@7ZND©ƒLzÒfJP3&Μ:wòÿìéó'РB‡-Ú“fÍ›F·Ñcê´)T§T¦R¥GÅ*Ö«Òdªæ¼°bÇ’-kö,Z´1GTªTç­ ¶uäÆëö­Ü¶&ñå‹ç/Aƒ¿­#¨pAw'¾+@Ìv5P®ì @€v?p~à€ƒÏ”ŒÆlú4êÓ¤^Í:5f×®aÇ– ›îܺwóÖMû7ðà‡ž¢ N¤6!wmîü9ôèÒ“Ó\Þõ)ö¨M©V½êëÖ­Ós~¥7¯úôê{¤mï^mÎ0G´Ã9"P?í¤ßNþOåé‡3?Q_;ÎHÓN;WüàŒ¬Y0!=Øü@îpãŒÿ;Nˆ‡!Š8¢ôŒøá‰)Ž"c-ºè¢Š1Ê8#ˆ3Úx£3"ÖGÝLËéðÒszH2ä‡ôEÈ!Iy$!x@Çœk\ÑÓÌj0UIs0YÛxù%˜aŠ9&™`ò˜T–De·ævÜ}÷&WâSyç±ÇÞyy†u§è½÷gY:ÑG|…Í #|£}€àWh}Š2º#¡•Îi¤‡ “€<µÓq…°æÀ©ªºêŒ²¹úꫬÊ:+­1 ç™>nÉÖ]nU¢G]mé!W’T²àÉ—’I2Ùׇ½5l%ƒ!v˜ @m•eš1u‹åP]z骗 Àzîÿjeºáe®ÅæšnÂù]xs&—fžwúÉ' ý¦Õß7,Zé}ƒÒ3p£éÀ:™à #L ƒàÇé·öj¼1Ç{ìœrŽ0òw˜LòÈ&œL2IJâì³1fÂÃ$›¼rÊ',”¸d^á ¯ŽÙó6nà†¦2Å)Ó=^§¼òf5u½׉çXX艹¿]ïÄM×@} ÀdöÙhÓcö4í í6=YœM0¹³6¥ è=÷Ù;êý7àŸ18á…Ÿñ@áBa8á;œÁÄã‡3>ùâ“CŽøàQLþ@šO^8äŒ3!Ä;Œr·%Ÿ|³ê#ß̺ÉuÄÌ$ÿ`x”¬ú­Ãž{ë9] •Xf<ÑeŽ €^Ò`|™ÔÅ9üOðB-õ¼qr|µY~¢¥u×ÿò “¹?B ô˜;eùôìø£4 èPdl©-ôE¡}ÿÚô$”¿ÙpÓ?Êö?þÑãnkÛÛÿÞvÀÀ1PoŸ#œçJwÇí tLØAåÇÎxîgPã0÷ÀÐ Ž3¢3\ gÂ3œ®:"#Ö ì"Ca+.‚¨‹ ðЗڵeŠËµÓ˜Áèá->A=zÄ%*q'M\"Nž¸“â1¯ŠUt^xê×éa‡zSÓŠ”4V'=µG{ÛÛSZ̨¯N‹CÑ›ÀÞHŽv¼£c8Çy°á¢ð€ ®pp‹ã#á˜À„ÎNŠÜà9Áú±p-ì‘»"f°ùøäb”êÏN¾)6’²…Ï{ÿÛÄ/‚'Œöc÷bùžRJ'“FiÀòGÀiÔ­iC[/ùF¶üùMmuÓ£þôF)¸M#p"¤äà øAÅQ³šB@¤­©MVò )Ô` gMÆ]M<ÁÒ™¨‰ÉÇQûO¦.ˆ‰R“ Û-y2Œ\ð³Ÿþ@š Dôa ˆH"r DÌ †à'"úˆ~Ò©i¶ôI*¥â&V‚Ws#Öz€Lã<% Kº ’NùâW,c2‡9L±J¿‹=t`SnáäwVºRP.J<µ¨F=ªÞIB>2ÏÜÜ ¿ÙMz³tƒìæ$?GÕÏ•Ó:çŒF4Øÿ1@ˆÕ b’VƒÕ3Q CÔ'ÁÅD%Ò5&H´W.Œ`£«)À^“‘ 쳟…-¬BsP–¢L‹“Py’QUv‡•U#¾d©YïåS(RÄXgC+ÚѲu¤JØròÙ(r,¯‚MFŒ_à‚%,bªØ}æ–ŸˆU¬b+ Y7îd²Ûð"œ.ûJ|±G¥gážöHÚ/î™å´EùJ·p%›üH®9õ¨l¤ñÈé[ñ³’ðª¤S Z·½ôX1t`‚yÄÄÚà<¦A64¤!l8PÜôk˜"ô¨D<Q oØÀtr!qqvP©S‚R<ÐŒ ÿ—¯>Ò00(¬¾ôµƒ|9µ°{õ)¬&®rQ¿€,N@^‡Š}®&¯5fÁ+^ ,Šm)P;òq7Z=å~4³›}2YzR×'"‘Ê=õ®wÓt%+¯–9‘mcŠÃÜœ¸º£dÐOŒ`. Ø(à8„NL+f¢L&uåØoý©gß*6¢M„%F0"¢Á?Jä/ëĸȥš+›Œ“|Íc"í{FMŸ§ Øðô<4mi5z &3ý^h;ÕD+;Š]>/–j¿Ϲ֩†°­sÝYñ„‡Ñ9q´’-i0Çä<.­4Ó“R(ÿI×q¦µ³£-m£È™ÿ'7ºÓ­îs ·×ÐŽ °W¹äaO–̆rO¶ûS(ayÕP´³·®lWW¼‰_a®ðvôá oøÂÎp‡3Hâ ‡øÄ®ñs|â‡øÇ+Nqoüãï8ÊS.r[ã ¯øÉUŽðäÈ$‹G8k½ÅSnñ½Xö9ΓHåU¯6Ë@Çò·}²î¥3}éí®ù»aïÊ&—Þµtò½Ÿü âÔwÚÍ·ÎuÒuœúzÚf?;Oªæ´ÑF½Öθ‚d @@Œõ*;¼‘<½`WÝ£ÄKÖñmö¯aÀÔhsáabx~ñŠÿo3†ßøÉS¾ò0âÏ »U>ñ™¿üä1ùÐ7^ñ¢ï<êS¯úÕ³¾õ®¯¼1b/{È«ý¢EGûÇ ¼…#pÃì~J#gôÑô²ztÆè\4¾_>‰ßV°ÓùÑò+M¿þõq¯ýRöºÈG¹iOQ¼}é~ôpF; p®g÷§i¿{Û§>ŽZÏjXo~LQÝ퀇ècÏ÷ðàÝtä’´Àø%`-IÉÚYÛxÜžQ@`hMzصÍ *éFÉ›°ù]½1W¾`CBè zhZ” L1›”Iàs¸ OÞëÍ †Þs´Ã!ÉËI (IÌ8Xsì”ÿ…éŠÝ„NMIðÈ•î„ðÒùaèÐCЃ¸M`È0à* îñÔm _+àÕMÚKÍCJi 2ßÖ˜”„šHåŸN¬‡Þ!æ¡… bÞè=žèEÞz^;Ô åÅ„ ½ÅUË\èÁ°ÔÁäà± K%ì ³4ËìD‹‹BáEb¤V­E= ‚"(‚ŸET&ä„%(B%xEÍyß ¿Éâ¾ùŸ\iÙ-òßyÍ¿õÜþe‰ù vÖ·€aª FvÔõˆ uá uáŸXÈM d¬—ûåÓWÄ¡{DcàÙ‡ÍðɨÌíLÉ’ÌΑ†ÿ8†#ÊŒ9¢“{5@…¨ N¤Ÿ;ì£ì£;xT÷ È©YIz¡Æ|V0æ\,fãNÌÄð…üU3Úߤé!×HãÕ.nØ%0Z$HÞ¡fÙʬ JºNî¨ã:FÉœ¤ë¨$LÞL†Íø<Ƭ±6èMtÚdøc¸C$b A~  ü‰!.cýaò‰Ÿ¸Ô¾`dF:dlãJ™ 7b%N(F¯4â\F^Ä…#V‹`Œí pbF )¢Æ (&dÜxTÙd¡ÛÔÍ=^áÞ`C$Dh! E@jQ/þœM›×íâúõÿR†Öej‹EÅ_2v ÕAšzdEŽV PÈFMY[û0H–…–fuÅG¤„;ý(ÆG(Ácn&å:¤íÝ™jýÛp*$qn{qeò_ÿýÜÓãPD$ý1Y9!…u^'vf§vn'wv§w~'xfçk†Ô{|¥ÖåÄÜÓÂ8 <ª“¡ £¼ÓZXÊÁŒÒYÑÃ\L«ÐmLÂÄ9pßQæÀo&¥1.¡tÎ[hBÇL4@˜uºv.‡¬)‡…^'…bRx¡I…n§M„çr„h†rh¸J…ó‘çÊ&Àð¤°'šÌ{J|ö&Ä´U¦4Ê ôf c)WTa€Òä#Lôd ©ˆÕG3 Nô$=@)”Ò¯uáJpÂbtvÿ&e̓r º„©˜Ž)™–©™ž)šžË6>£ÊfXxJE9)=DƒœîƒÀ„œÒiNèidÜ)Ó`JŠý箽âEiÏY&ÏÁšÑQ&sFæÑ9§À1g6B8„9$©ÙTª8ˆC8ˆCjJª¶àñu&TRç•z!Wºi³¹¢¶MŸxŒ×…a ŠÉON¹FðleùPŸtiQjaR§Ô^ˆ†'±«±kw~².+xrfññhžê•¦ªªºî ÏÐqŒ ú›BÒU!ê«ÄÙQZh‡¢¨‡^艚h¹®Æ…f(»–¨¬±«º2ëu~—4€Tǰnè°ÒëvÊy9+©Bëñ5ÿ¨´~áG†¤Â.ìENãÁN+¡fæÃJë‚~àÄäšrÁJA#¿h,¥Å!©uÖâ-6,Þd×I›!¶lâUpJìÅhÅöÝÌ* µV+gí§hݯB*t”ÞËX ¾ìèÕ ÌrŠ•Þì•Öl´2íöå¬ÎžÔâäA––V­Ör©gz©ÅníÙImWN-}ñì]ç¿ù¢¡BOÑ¡¦g-ÜrksHâËÌðEÿÝ¡âÄÕ6&Øþ­ÓìßÞkš UšÑ Ú‰Æjì¾ ÇIÑá@æÐê*ØÂÝÒù%m®Önr.–¾&§•Åò©*èNG4ðÌ í èé2ÿ­çNäëښؒíXŒìþ=jkò§jîeÐÝÕ­æ£2dÒqŒpÜržWßFììÞlìFeóŠYªÞ‰¥‰Åãr£yŽd,΢dBjdÂÚcÒ"¨ÒâF¢,õg•=‡¡6gù/ßj.tFï©>¯©ÊïiÕ®í¾©ýÏBEß’èÒÑ/ò ð®ù+'°/07pˬ‹l“ÒƒFhÍ9°o0Ó„²~çd@H‰ŽhkçKpK0×–j¯0¥© Ï0 ×° ß0ç°ÃpRN0ÿ0qÕ–í{›SF Á~®/17qL A@1=X12>J«Ú¬w±±­”NÙÁ0qì?­PüÀì€éà5°1ëÁè„é\=¼1L\ˆƒ1 r3@­ØPpqÿµpËîNȱoí»A°S²hY² w•ˆ× Ü ­B$#§±àúÈq7°ñÌqP@²úi¥îî[rŠ.®ïø6¯/ƲrúN.òòð´÷æ®yA¦Øéâ-ƒñ,sǼø1’¹°ÁªòãÄ)«òç6tL¤2<ü@d=ÁÄÄÀÃÿ€óŒ3˜3/#Ï ¯ø2$оn.sùâ³5ân/'ª1w/¨æ2&°<;‡;`A`AL6˜Î”ÂD.Å9=P4Fòg–òP´1$g²G´_ÁÁ4D@é`C.=€JsÆWt!€ÃDÃtE¸{j£a´×r1Hï4O÷4)Éý5O5QµtLV#k®Q/5S7õ"§RR µSO5U5R“2VHuUo5WgòUgtVCoW5Y/ñWçôÔhuY¯5[WðYK¤R·µ\Ïõì¾uP‹5]çµ^C­]WZï5`6ÅriTãµ`6bo__³Ò_'¶c?v´-6œ46dW¶e»—d§µa_6gw6-eöwP¶g6is h‡uý¶×Êúôj—¶kçÿTcõUˆvt´vzeŒv¹¯QضFÖv˜ö6Q¬,oŸ¦nO&¬èœ?ï6º¼vŸölo¶t´¶Û"*rOÇpƒiñ^·ú÷óqwz}*psIx3·;w\ÛËjïTv±ßød·«÷{àÚjwu·to{Ër|ß¶{;¦w÷˜Ž7-4yÃ.aËöy£wrÞd}Ë2rçómSwPä6ûM¸nëm¢fxƒ÷;?¸„«f„aødޏ|8›7mGw…“,‡³¸‹Û÷s8} ø‡Sø€oøŒ wqÏx‹ßwrk$›¸ó8X?wj[7øåí·¥÷’ŸË‡oÝMM·…Cˆ·xƒë8n;ÿù†ßø”oy„ó6 ¹£8t#yNR7“¯·†ãxŒ§¹”ƒx‰“¬³¹š¯í“s9qÿ8š»oŒ‹ù˜9Z‡v™›yÒí÷–W9óÌ…{7˜/x{ã9–“x¢w7•_9Ÿ¿¹Ÿ2™9¡›¦§¹‡;x¨C9ƒ‹:¥7¤;ºžKùt³:£ƒ:‹cú‹{]¦Ÿ8 ÃuŠÏ¥g¹š£º•ë÷©?8­-7œƒk¬z«Û¸—Ë÷œƒ«ww­›õ­ß5§¯uŸŸ¬G»oú S5±Ÿj˜k;s»"‹»¹C6¹Ÿ»º—vº¯»»sv»¿»¼?v¼Ï»½ v½ß»¾çu¾ï»¿³u¿ÿ»ÀwÿuÀ¼ÁOuÁ¼ÂuÂ/¼Ã÷tÃ?¼Ä{tÄO¼ÅƒqÅ_¼Æ7qÆo¼Çû´ûõ <Éópǃíµ_ÊwõÊSzËËïÉÓÒ·ç.”7çÍÃü{¯xW¼<ËwŒÏç|{Ì+7)-z¸½®/çÁÎ|)¹÷“„xýd7-çšÒ ýœ(ýÕ³]Ñ3½o[×Ö›Ó+wÔ]º0÷¤’)ÎÓ:ê÷N­½×£ý€g{Ú‡«Ûg¸Þ2»ÛÊ=ÿöÝ«=ûÚýÝ÷ýß ;{Ë:ß'>ß³}ßÏ·ßþq ¾Ü»–7~d‡Ö'o©ïÞö®Í3>x79Ü+ùз=²>´³ÿ>=»ß‚ǽ§¿þއ~ìÓs쯾Íó¼¢ã|’Ÿ>è{ý/ÎþèßþëË>Óë¾ñÛÚØ'½¡wïþ~ðã>Ú#}ÛÿÛ_?áƒøó{~Õ/ºÝïzäÛ2èk¹é>Ïÿò«wõ“?wWþíŸé“ÿðW}ñÓÿá'{òÿò×@l£'à@ƒ©$LH C‡ éÑ“&1bE‹1fÔ€£Fô:b 9ÀÅ KFã\ãuæÅq/qçÏÿV…>½)uë×±g×¾{wïßÁ‡÷{|®]¼çõRÿ½÷úáÒÝÇ—?Ÿ~}û÷ñ§{ܼr‡ÌÕËOÀ ,ÐÀLPAíÈ£«?ô ¢ˆ¯)¬Ð 1ÌPà ÿ,èAÿœpÃ÷–Â>§ª{îÄðV<°Eí^QFù:4èCôBœ§ËJ”ï+ÀzŒñ6ér@#­CRÇ%¹«!»ü‹°9&ûRÒ»½êQ²ë³ò>/UÔ’Ê1Ás¹… LODS ·ØÚ„é4ÔDûʵ×Ú¼ó5²L“j3àvó OÚ*ƒŒ¶özû‘Ï93C”P@“ÌIõ«ñƼr40«ÇÓ­$±$ÅmH²Dݱ´ÅP*PEAuóÔ!³¬.Öàè4õ6é~+¨P)íõ93/]NB»âôVT3 §H­‚ÓXAIÛ”·ödMMZRw»ÖU˜ª­3WN±*vÔ<Ùº–P_Ñöýu¿uƒýoXMÅ¥•'i[ÔÖ¦u7^s‘}kÕg=s¬Ó=ƒµÜx·%GRå-u-†!NWbစ2ÍLáô·Ù(cMÎs†6Zc=&×[UUdŽC6YeƒWsY61ãôóPkA™×‰Ó­8¹‹ß¥Lž©š½‰NzDŸÑ1è©Ušç¨á•ÚjJ™NSʯîÚë¯Á»¢¬£TSì³ÑN[í%ÉzʵáŽ[î¹ëkÛé·éÎ[ï½ùÎnŸî[ðÁ ×ûoL/\ñÅïúpañn\òÉ)Ÿôqw#¯\óÍ9§ðò­×ì\ôÑI§ïs³KO]õÕ›\ÿ·<‹ïæú:ih ™ÛkÏ]÷ÝyïÝ÷ß^øá‰/Þøã‘O^yߥAšõçÕµvÀ3§Žö´¡ƒžv §ûݽ¯Ýûð¿ç="ð}øŠ„?¿ü÷Í?þåçÏÝýõá§¿øv¤é¿yÿû×þý̓Þ½s:ŒaçzÂ<æÑ=òYD‚áS_þìwAùÙï{㣠ù.x>õP|#´à=È>r„+€Žu|€ìHGz‘Î#¡Ã2ú/0MÔ¡ ÈÄDr‘„ì_§¨zH’H”`ÿÙ¿f$2“ýËã¢ðƒOî±¥¬Ÿô³Ø…NŒ“\b'1éÃWþ€N<$-³˜ÆB¾ò:`Ah£ó2:Qɼ†iÌ—Aç’ÿó_}˜I;þ@ QˆÂíHJSn³-”uyFqš’R¤¤ÔÚ¡u®qŽtD‚ž@Ç&8!›\Ð8ñ™O}ý´¢=½ÉÊ$–ÓŸ5èAšÏO.ôÚÔÐõè±z0`ƒÀ³áï.ZQ/£èCÞý4J< b0¤¬ß ÿÛ@´£=t$@Qi##Bî›Ö[çMqšSî”§=õéOT¡•¨E5êQ…êÐ ÑnÒhHOHAöÉ/…ºaAŠÕ©öކW5éû°jUªºo«3´`_XÂ~P‚ì  ËŠÒî©´™=Ôá‰ÐíhÓ}õë_XÁ–°…5ìaKÅ"–±…Æc!YÉN–²•µìe1›YÈ"‘¥=t½vŒ–{r5íiQ›ZÕÒ¯O HŒRá¢Wíðu°ÄðëújÛÆî–±Š]¬o‰`à w¸¼5î_QD,Ã`Ås™›ÜåV$ºôPnt±›]ìNR»Õ½nw³Ûÿ z,·³|"àŒö’Ð~R½íu¯éÁÐ<ÂvˆÒS%õjšÄ›Ö~µí`Ý ˜°îèl`ÝA#` Æ`ß` —¸¿îp}Û`¿ÃÇm,"ðÝæ#º:¸nDÚ‘‰c S¹Ä#=Ä+ÌéÆ˜Æ0¦G:$cI¶øœÄlÇ$ABÞEݽÌyïÉ^*ZD ”`3c ß< £„©}›†ß&?‡¶FÅüš ÜB# 0€lP†¿â¶¯Ô¨È±@7!ÁYƒ›#ÒY[ƒÏGˆ0Ÿ%l 8AÂ.‡;ìa/wô°,+¦+II¦„’혮u…™Žÿعšr3~ìéÿ¸ÒˆP±0K’@ÅÌ-/“_Zd‚rR‘µÄ"­xË**ù¥˜<äDŠÑƒ¸˜3Æü” Ž­ÿé)HyØ_œÙL–ÊR‰ñ­£¬i弯4•Y>b~¹ßÀŠ¢ † 6É„‚`,=Öp`ë9Þ î,5ÊÛÙ5ÐÃ|žp„ \B[ãÂÆÂXDöŠ,s#2Œ:L¼›ovU €‹oœãî«õkñE‰¿ž¥-MŽò*¦¼¼n,ýgdú2f©Ï`3¢hmP&OXÂ5ë8ónrûLZC]vºL ¥/é ÀØ®taü•ÿpP°‚Ý`{ï›Yß·Õ k48ÂDø‚åPðà2دXð톾àD;\°e…£%Ë h–ïš…t§£›‰tdéHà/}x!_ä³Evù‘µHÆÇÃlVÔ¹|z嘶 t{wm•ît× Ôˆ÷q‡°n_,ƒÙžðÁ.VÑÈㇱF8F–¹â]n:6‰•LWãAÞÞâaKÐæòÍwþóªùqþè ü<`ƒ¥‹ ìæ-Xñ /.paû#¼þíé_pp_/{ÚÿUàw슯“û·’eîw9âÿ4.AŒ9˳DnD„Ž›ð¤ñü†è¨ofçúþ Ô ˆê ( ‹Ü௠ìô ÌÀð  ËþèO±ÒOýÎõÖö&Œ¸¬ÁTЯގÂjÐ.îúªÑh¢ØÞ$‡Bÿˆù©Cã@NæÎkä&ãö¤p ©° ©‚°0 µp ¹° ½ð Á0 ±%^î )g sÀËnß«€Úçà>°¯®ÜüÆÎŒß L°àïˆ+öÜïàØÕî·8 -ÌÂÖ/¸z°”0;Œð#nªÿ~j’Ή§˜•½¢Ð EqI± çúøé$p ¯ÿËŒNÁ)'RP Àè±áän±1s1qá¯Â«ï1%«;‘ñpCöh4J 0X€­ñ­ð¥ÁHؤ˜¤a |Àz`Ę€IÃÛ}` €éýg à‘½Qåqáñ·à}Àå±È1š’Ï ÿB¶nùp>PC 0ö€#`#""±1#5²1´q˜¨û‡÷±úQM²âq•ˆ½QØÒ%¥Á#û§$C2&é&ÁÑ× ’ÏÐË­G!2>’"-Ò ŒXªÑ4à`ƒ ¤’#ªÿ²0®²Q6’µË$ é&Šò”¦/ ;o¶–B"B-éA-Ýÿc‡$"Ɔ2‰žñ¡R`!"aAÐ à"Y`"C*©rà¤ò¤²*¯ò0~Ì0cÓ C,ð¡…0“#:Ó1Ôí3¯‰–íSŽÍ4eB-üç ‰\ó5a36aîåvr=!­/#T`7ÙÒ-wÓ³8C.°.‰c,—* SJ@X †À 9—39c¶A°“ ;·1­²1¿³1WB_ $Ô­Öˆ’ºS1y¢Àš `“ˆI »€vÅ%òÕ\ÿ,'VÓ‰æÁ/P®6¥ˆ"0Œô‹8+Ä81$Mã9€`+1¸s#÷3æˆÐ:H‹5™¨@“ÉI,ï²/ps-‚´\ôEa4FetFi´FmôFq4GutGy´G{Ô /m"1ÖHé*”t/C•ô;ô‘Z@Qs8âЉˆê@Cî[qó̲úX´"r´HKLÅFÉ´ÊMGëLe4M}ôFÝTØÔ”FÝtMß”GË”M]”LùÔNÍtLµF”'rH‰43.pIµ›T6i+ Š S4¶Ðð¾¾mËœC›ÂMÓ´NýtN÷T÷ôN;5PgôSEÿÕTmÔ%QµUUµTeUPM4HÓP;#D³QyµW}5ŽtÛ|ÒmÖpS…ÒAÁB/DBµYõYo/X·´,1•¦4µ8o¢)¬k[¹•¹õ[ëo[ûŠ[#â[É5ÓU\ŵ\É5]ÝU[¹õzn§Vë^ñ5_õu_çå u érA`€ ¥µ'¹´ZÕðZ‡ƒ¶äÌûðêÜêÌß,üä,Ï"ö¸òÌa¹AÁ~ìÞ®îÝ+üDÖ¯B6dÿêz²g{ܪxPÈ£Ò: f'£JŠ~2*g]¬øµvš)“\Š–Žõ>à#¤aF$ƒ˜ÎI2‡6#”Õ-V4-ÿ¢Í¶çÞ¸LbIvÓîÍÝLkÝ¡4Öb càcóŒdM6ßäíÀ¨nÛöêNVnûªª2È«ºª­öö­@Šª*(<È­L¨…Î*ª2­7„ZpÃ*qchpÉ rGJµrHhyègm³B@Mò(ÖHÝF Ènb`E—(`fà(^Nu%/""U÷Bwv*µ¾ÖÛ¬Õó,©ŠÊW¼2x…wx¯èiK'j‡nXW‰w+¢ÇºãLjàâkz—$œˆ×òví_µòæËxIy?bjƒ²wÃz¥7}™Äz} æX®x é‰X.‘ Š$­`,‰ÚnŽÖ–è“BÿIÛµœ•,´K²A›÷|ébs}Lj—jÍ‘JNhéD•O‹té}iÉ—€©{–âØ"ÿ”)J?85ñ·/8׿)妩š®É{õ|GG|oóRu7a™Wvëu‡y¸‡}ø‡8ˆ–8áŒø!‰ áÇA‰6õ¯·Šê÷‰œ—hÒifÓ‰êèâé橞XuŒÉ¸ŒÍxŒ ö mø4Ü,âvlLˆ…ø与‡ø/á$¡øX$‰ áˆÿ˜¶Š§8‘YŸ0OŒWµŒ]Pó´M]2N?•TÏxV#yM'y“C5GÓ˜€ùÀۘ ßX¼PiŽU9•eW‡[9•íø‡+b'®¡êÀ–yYLÀ+„¹9õ¸˜ 9‰a(®™A(n–Y"|·š­ùš±9›µy›‹ªy<™Œ+9œÅyœÉ¹œ3™“Ë9ÕYNu4”Uÿt²”õ”c¹žíy‡gyôyŸù¹Ÿ÷˜‡Ù Ù˜“Ù‰ýù ùY"À×|!#Ø8Øá¡ÛB2‚¢5‚vÁv$ú-˜¡,mh¸”F:#È#B Uz¥Ãp–ïàôù¥Gà¥M`¦eZ¦Ùº “|ºFÀdÚ¦mº¦eÚú/œaÿœ”ò`âbŒ&N6ͺê,¢™'«zâ!"ò Öê@jA«k!šÙjALL«ë.‚´Ô¦~HÆh§4‘›ùº¯ý¨ÜÙR•WËr˜æ¡ ±[±±»`±!²…-±Yz óyŸaÿºŸ‡šŸëàˆš§ Á§}z¦ý9³ùy¨“º-Üa :`{Ö Ü`¦¡ôhû¶Ý`¶}¡™uAš9ÜÀê@R ò ¨(Î(î&˜»@¬ýà h{&Ž&îjÀ¦ÁÖº¦œ¡²;l{¶§azÁL°¡¼ç›ì»¶iî›¶“{äۿ˦ÿ;¹õ;¿õ»¿Ë{¶œ½Ë{À©á¶íû¾ü¾÷›Â1¼¼“{B^Kt) §ÆhÓÒi{;Äuj¯ñzÅLÒþúů9°q—Zoø,Ò"{u¼’+[ g¹¦ƒz³õÿY¨kȉ´ Y´ñ¨…º´M{È3;µ=~à*âàÚ¡Ê` œA ² œaÌk›Àw;Š{âÂzâü È:pâp@ØÜ5! VâȺ^ ºáZ»Õb¼iû dâòÀº±A¼SÀ |ÃÇÜÑý{Áo[ ø[ °€¶ár[À绾'ܾç›À©aÓ9|Â'ÀKÕ#Â9\Â÷›ÓOÕ+¼Â#ü¶{ì³ðÚAKº8à™XV8´iT€Ø{üØÅð²zÙ÷\Éñ€Ù¥}¤<#à ªéÁ„«té!Úa ® ÂWÁV!·Ë;Z€¡ÿ²À ÈÐA^`Ïa üÀÝCÊA«Àò¼™A8®Áè\Ϲ;ä›[Á¥ÁC½áI¿Uý¶ \Ã9üÂEýã)|Áå[¿ç[ ¨ÓÓO rÛä÷ÝÖq{ÖËÜÖkÃsýv°×/â¤Ý¸"ˆ}7ÝØ}Ù…~–sY—'®–u—w9éuYšm¹zZÉá™uy™£ù™áú虹ڵ.·à F+zë(&"à ®À<€Ø^íÝ8`í»ûí@€àÕžpÁìÜíýþþjÔží<îeÁ\!àîãžàÞïÕ>àÿ>îÝží%Ÿò9¿ó=ÿóA?ôEôI¿æµYqÞ"tÞ”y^è]ÿ •}Ú§’X´eÿö¹Þ"ì; 6M”èÈ´\v—Ò, øÿø‘?ùߊŸù-Àù•?ú›ßøûJú‹?ë;ëŸ:ë“¿ú­_ú½ù¡ÿû›üÉ¿û@ú×$õ…ˆý#bõç™ç'ûõé 1‚ÚéÁ¢Á"Fà‚žÀŽ OAzÑÒ±¡C‚ÒL¸¦Ý…íèÅûï –JÒ3R2¥Ê’ØV¦4bäŠ3zÎ,p#è’åJnW6¼ÉseË:D‹æg®aJká2j4§3nÎÜ¡÷ÿÃÊœ.oÒ³0ÓÍ×”-¹–¬6¨Ùœ1aÚ[²#EitT¼ˆ×¡žC|ú{G ž¿„ÿêÉ‹˜žE¼‹;`›äÉ”+[¾Œ™òܺwÜF´èФAS9}šÕ¬W ”F¶gÇλ;·îݼ{ûö½ðàC¹%:do ‡#:6Ï[{âš?fһ„Fê#¤<éÌ­Mêd]ÒÜúÒ‚›µʪü ×ìТL]A–‡¨Ÿ:O¡æL$jHùZlø6c–oÌñBÈuiÐCÑÐù Ã}œçC%7§Gs:GÜ— ÇÖðEíHãŒm4SáÅ>ÿ tÐB=Ñ…>RkDJ/ÍôÒVBî¹ë–85»M_½4AÍ(¦áÖŠ)v—EbÛÖ3B›¯¿¯Í6ÛWè¸ðž q‘GÞ¤ÅD;9¥nQöÍqà½9d²ÉÍ}9²Ò+7‡2Ë#˜ Q…³—ÙüZÍDoÎyçžNÛ… ‘›#ÜqÓ¨³Éú!¾^5»…áA{›¬Ÿžzên®Ø@fÓƒô×Íü>¶Œ-žŽ—¹ÑöÿÚ•1 <r¸áFrD6—År;±vOÌZÅhÿì¤àæ›Ï Ò,.2Ɇ·Ó¸û,‡8¥ìKáRÒê×Ň@$dIZâløG<è (9„D!'¨A&pƒ$èÇ òÿƒ T HHîàLØ E·§Û™`u›,Ý Mw:Ð0E6¤pÝ­îtž\#Ah$£ Ár|>S^ŽšÇ€Y&‰4cRGóDð‰oŠ£ÒßpcE+Y1‹Xê!¾ìD7z¦<È#@,T›ØÔŽ@¶éMz`³šô˜†8ÃiG:žr”`™à@ ò îläPÈÈ2Ÿ¡2‘¼¤´H‡µ„2­£$D) ÑÉ93mºÀ`d0]^&oÚÓéÒ`âm˜{+&3O ÇÀŒÒ¾Q6üîE°i‡L!3- /C´‘æcÒ¹Îrvóœíÿè¦yБq摨Öì&8½©Ç6’†\`%!XÉH&ð(Wù¹UúQ«'|¤A}Dº b^zðV[ãÅ-A´ÕZÜbèìJ ˆµÊUr-J½àE=|Ë!=(HarØŸÙR£ŒÝhÅ:êÓ‰ü’4"EI‡Æ7À™È¬J÷èɲvH;HÛŽ5ƒ¦…‘M×´cC_ƒNdÓ€,ÄÑ›¨¦9±YTs.©ç$'7…+N82ÕIÕã#ÉJP>FWŸë#7¨Hvð¬,Üþrá-¦J‰…’a«DÚ7½Œi¬{«7%y4/“5M‘ÀE%“ Ÿí¯ÿn& ´ùN3ªþêX`’õº´n<Ï ÂL’’ž`t™ „((p’‚‚ 1…é2¸ ƤæÐ$²8!Li‡[¶ÈIÀ4f‘lä{Û…Ô7b©bÞhy1¾Ýæ˜Êò•–Yd¿sÈXÄ"njäçŽÍ­ã·Ù€iLÃy¬cø§ejZùÊ_~@;¾|à,|9Ë[æß™*TþxÎ’”.¯ËOëSÜÕ‹Ÿã‰ÌXÐcÏòRØÄÊ{Ÿ€/²ãÊRLŠ%å/y/éLkzÓ›þ/£™ôhÇ\S;Ü,'8å’ΧZ3©ìlÀÔ9l ·#Õ,*pýfWÏ 2 îˆWÿ(Á` {Ø5á‰ýë>ÙËäû|bíiM.~œÌ‚2;i;õk‡ äbh/AsÐIty KE_l¹h·»ßÍ”x3å†@ÄÞmï\ä;ÃØ·»yj‡ÿDú¾>¾¬Ð„¬Yl(7]˜GÃ|%”~ÔRÆK–w+ëS7õ›ë<°i™*Np’s©³&ªyçfPÏÏM9-¸Á2ºÓ'¡=‘‘ÍìÚÎa¶’': $ 7åd6q‚äâhºÓŸ^€W°»ß³x("ñ‡[Db³`÷,1 }Ï"Xo÷0^ñ \b§4f‹©ð!O£É52ÝŸääó ds(ˆØŽ÷÷ØV[óÚ߇÷µ¿1GŒQ5¾eí7Õë4êPQ=Ô‘‹S·Éî)iO?`ô ‚')óÑ«^Â.W¶ËˆsA£LÒN=|Nøi›ÿ9 wбœE›×܉ÞÜ0Œ`$c`ʆòÀïwGßÝL™~¼ÍÎî\ Ý— õÁ…éöƒ›Ô¿ýELi‹'6Ù Lx6J¼ûo[ %xþô' ®U 3’åijëKBB±Çwи'?2£{Bwtà6FŽshåV|Å'Ds|Ê·|Ì×|Ї}f×n‰ð€ð÷}ÙoÛÇ"k×cà§_•6äG~IÇ!Gƒ7ˆƒ9˜$&†àvZáô 0åMrÑEøqAXÒP!§•?ÞDnŸv|É÷|“|ËG}˜ ‘`‰`oˆp Xx‚í¦‚‚>–_zóvü%ƒÿåçêöJoè32?ò#êÕF:ˆ‡y¨‡Ñ‚V³Á¬åøñ`/±^ÃG^›“ °"à|àˆË'u ÐnR'}î–"0uÕç…cÜ7Y’>á§Bã·†Ì$4iWqµ‘vµ°‘Síçwò"æ·‡8¸ô°Í`fó ‹1 lб"0qAŒAôpMƒža:#/²ñÀ3:õqÒÀZÐ#[Ô¢$¬E[·(‹˜ ¿PP"#¥ðˆ‹˜ #"°³#í–óu"€ò pvõ‰+Ø}Nô}#EŠ–1QÒpZ¦ex÷$]0 œ%wÿ7‘P¢pV2w]‘=w Åh9¶¬øJJô#ÔèŠ ówî7‡8uª¿`c<ˆ‡˜¥%Àˆ1š™Â í)…™´Œ´ñÕ¡ñÿ[7s©Ói ÉdLÆ ÷[¡~z1«÷ÐÀ LÀó6xËÊÀ+œ€ 4á 繡ðK?Û‚A+ C;¢Øy¿·1Q"‰1PvàXà*LÃç;µ&ʼnW<Ÿs±š §r ´nY·pI I‘y*¥±™š’k°5x²,²D0zP\ÅŒ–\ܰl<6NÛ¹ Ë© C¸éÇl¬Æ~Wº4†©R¶Å·ëÅ? ÆA\¿#wP2 idsw•Œw$›E%Ü3Û«3äP‡!€À.uЧC£\añÊ5xÇT\Ç7¸È>ûœóû–>ûEüˆ1šÚµ¸ÿ̨Ûlj!¼¬ÌÉÈ!ñà: ""'B&‚")¢X{ ¦Ù̵ÓVPTÉ•\UðÍüÝ$²9SüÆG žKäFntËṞÖj ZE}ƒ #<—ᆃ¬©ÿ\^Ëxþû¼'Á„ÔpÐÔp³r - ý½a-ÛRz`-ï²-tEW®5Qs"èòÌÒ\C€`ÑPÑF!WOˆ‡õ‰âð›ê𛑠–›È_]ê~+#î|™\#[¦m ˜í¹Çl²Y ±D­´?í”G*ÏÞ÷ÅÔ Éb|­ƒd!<üœd€ƒ F«·Ê»Ì|/ßàÑår.…AʲïÿŽëCz/ŠPœê ÓŹà` Š ô ÄU49½Î7BØ,R¢µi»¸¬±ôL¿V}ϾL—lÈ“=ØéÜÙô€:»£J/Ä;w`zð:Ñ;£tC¹ãÙ;/4+ <+òƒÇµ- ¤´Œ/pà¹ÛØPI(ØpPËø"Ð|Êx<·>ÍË ‰Ï!Ìɧ8W<Ù1 ¤4VR"—Ý™íB9¤4à {±Ö åP§½Cà½I<”ƒÇà¬eÉ…MåLjºMÙÛ-ê\Ôݘ‹!>܈%È ›°C Ô¾ YQmSM·UÝÜ–v%s×ÿ‰Õ$Öá~%vºL‰É‰Šs¢4t;¡Ä4nbÞweJ*¾4(J íJô€’.[µ¼›Ó7¬4ÑkÊrÃô0äÊ2U ÛûíZp<{±•]à•ØΖÞÁ"J˜ÙM»—ÖÈ€§à6x+©¹Z>¥‘Ci^:¦£æ `ÞÞlÞ©t⦇ˆxº4 pÃÜ„MV0j~nG`¦-Õ¹ Mîä9‹/Hì­3ÉÓ‡Ü~K}Ý<Ûà=œËŒ½Ë({ÏÇâ úÜzšdÚ¶küÓBýµ=íå_“ÝÜÚÝÒ=!rÒ•`-½ÑÞWàBëvEJ¥´-»Žëÿ½VPÁÑkÅÒŸÆMEeäô  PZ`?^jý³ì-F‡ÖÂï¼Í¶I»Mí°Pžtàné™Ü™nåõ,ÄY~dÉÇÔ»žl¿fž"ßò.tÕ-!¢-óÒ-|…ÊàeC&@ëtUÃX_ðì䯰à-È:˜íŸ#îQϘ¾ØçÎÜœ®îò¾£N6 ‡ßžÆJ{à ‘ÝœuwEÜ9@¦å˜õÛÊÔ1_Ô@M鲨µÎÕ/¿šÆ~ÕŸNâ9d,ê®°æËÁlBsÇhatþ\ÅOó5OÐG°Ç\Ü6òúÅÈʽ¤›>©w‹%¯ÿî_ðî±ÚMâx»ÑÐÖg²FÈ‘8dt'AtaçitF½7FkttŸ©[¶?ÓÛ[:Ë/öœsñåžñŽLÕznctq¦F£ù›ÏùïùŸú¡/ú£Oú›ÙDv§tçYýÃtð32µ§FÓõ<×29n¯o{Wº²A³øçüqhøƒéÜøñ£,YÝ/åd¯Ø?¯ñh¿»ÒÀ=€M+´6¦!ÛŸýÜÿ˜ƒþ˜þ ã#ÞÏ>BþvQþ¢Cþë_cbœÙïi¤C†32°Ÿ5dDûµ#F´£WÞƒô¾!x0Ú@ˆ %Òë1ÑâEŒéU¡w® ÿz é5ã^“Ú™,(í¤Ë–&«”d)Ñ¥´›2ê “^Ï‚>}j$ZÔèQ¤I•"…ySÚФÛèI¥:ÕªT*Y³Ò£ÂÕk×–ô`.͈ó©±fÍöìùgÛ§pÙÊ}«6n\¹sݪÀwm_»€ýþ½ÛW0^Á†÷®58Ïñ¼G~ÜÃòcÌ™5oæüØâˆhÑlè¡ z€F \}5ÃÔ U#,¸ôêvi„jвoŠd5reåÉf+O¶kV°J„fÍL6)­NéÔ ÞlùTøwðáÅOÚμyÃd«®¿ÊUkWø_·‹%ŸÐî}üùõïçßßÿfª3 4°@‹ih„…J‹Æac-B×VkÐ kAA‚"ì úÀã(D£¸K«7‰Päí'y êE¡€j‘EgjEž†º‘FºÑǤÀ gÈx êdÈNxÓQF_Ü©­ô–boÿJ÷´’/¾°Æ"qK.»$Ï»‚sL½o73±"Š*r³ Ë~ƒ“M²L|k§„\´ñ§&{ JÇ÷ÔÐ,tÉí\,@j«µöZl³ÕZõÚ£Ô+½ÊUrËí’ÓÌ(ku]ÍbàVbå‰: Ì‹n$zthgØ|µ3WMfç|SN‹ãÔ¾´Ä:Ìàmõ[˜?À«K↋ÕA¾`ÓŠ·U±ÿ(OÛWT°è#õ_”SfJUv[æLeò~sËe5 ¬à„ÝRL/(#þË0žuú­…áÂJ¢îØ%t°ì‹ˆf ¯¥õ;±Û±z/Ü’M„ùk° PÝÊÈž¬@ÊÌ&3lðfžYÙ„ÜD¶Ù/s~¸j¼óÎ/ߺô®V¬¦F*k«Fw\¶]Ìât\mÎȾl²È&ïLqÌ%šisÎ;÷üsÐ?µ»¹J7ýtÔSW}uÖ[wýuØc—½É¨¼µÝpQÏ|wrwùwÌx¾\i?þøÝ ×ÚJ’GGþyÑ&íÉ/«›³Ë†,²i¦a× 9æÀQQ uŒ«_yݳÿièé1â}øã—~úë—ßù;Û×_qå«ÜªyÝíO€JA—º¸Ð…Èp¡{’Á†ºzÀ…íEÁÞº.2”fà^üÉŶÃ$zÁhƒÑÉ ñ2g?¦0…+–àøÂrõwò mˆßx7,üÜg„vpÃô FB€8D¢…9áaK%íÐdN¤â£C^„nCVoU¨ B…MÍ"ØDúD»<Åè(>|Ÿy†Hn€È‡ÔHbý–¨°*æ1DPdÞᦨÇ&æ‹-« /¸¿:&R…wt! Y;ÂÍK|$ ¹ìiO2&ƒWɾñùe)Aÿf»OEÑ^3¥þ©Iµ¥-{‘i õ¨7^Î"t*#žþħD)Zô y9Fð4㇠ÄuñL<„1Fˆ¢‘(‹×Jlb„ÿ[%}²Ù¾W²UZ|\9×6sÒ(édç9—ÒId•8„!–ùÌgžL)Öô&)¿ùÏm6¯kÞü'ò èIÊeRœŽ)¨x! zâS¢„(MÆÄ†~3 \s^F…wÉyL2]¨%å°×’ö –•Ci-Xð$ƒLÓÁùdÈRb¢=doÔY‹:ÅæF¥ÈJ¢b.œ ][R¿£Shê)é4"#qêÔ&µ›úÄê× è˜QitA2$+S_ÖUáâ³5 ÂϦ4­TÔjî(9×ÅM¬a+d¸€Pqò—`4/‰Ò$¹gNÎ2Tc1BÍ«¢3YŒ5[܇?¹â•‡ÿu¥á]5«²¥šõ@õig/%RÚr¶®¤û¬9;I¤¶ö_¾ëAX-'¹yˆ°ßKJdÍxØöÏ·YíÕdKWTŠL•víq{Ç2Ñ®ª§z‚‘¼KÝ/ò*(ân»Ëïl×»mUq­ê\'¾V\žE/ªB]qI¸K®ƒº©ú¶7yÉ­Š$×Û\ý¦é½ð=+=bZÝÏþˆ|Á,Ÿy·ƒßÛP½åj„Ï]¶ €€’¦9Ô¤s°)êSFDiºÌZøxŒ“¦]Ìo3¦qù ×8[ùu1ØX\Ãs ',èAÒ¢c$'Y[7þOÓ$`™¨!MgJ¾ÿƒ¬²³÷Ê!Z Z”üe0ˆÉþ¹˜°1¢q¬o5¾X•· ½,øÍâ sí|ç;[yÎ1äoá–ÛY9ïYЃ&4ÛâLÐB'ZÑ‹NŠ«Àsè 3ZÒ“V43 Âá@šÒ›æôží*j8 YF§ú¼û—ÂFqC¼\ßmü â7ÈÞ]DˆÓãEä·Aäýo‡\äßaîmŒZJèVøº%âîˆSÃáð–xÒnwt@øÁúíñzÃ<ßñ†ÇÈ~ôÃF‡ `N AÿïÚ"púÆ#Þq*Î%˜µl¢´~Ó%1©ëh=Ýo·®/Žýc¥#ìÖ×ÞVËf—Ò^ôRK.ŠfšåÎþ/´Ò n`2Ÿ¹Q¨ñçíèP‚/‚G¼(²§H^¿)y?>òRþO_×z×鞢͗8ÑØ…¼|KðµÈ ™øÚ-qg¤ùž}AÜq„z1ðÀ5¸QŒ»£¹§F7Ü&¹_>ù‹¢.0ÛÞÕåkÞ±€êîÛ5¿]¹êù_l¾ ©ÿüý6»ª®°Å[oØc]"݈74„ÃüßdžÆ@ l|Üý]ú<ƒýÏués>Ç‚¾¶£;ñ’¼É ÿÀ³ ì[<Ç@î;½Aë¿á‘:£À‚7X9้;‚‰xƒè“78à·ü£‡{3,x¸‹û8¤‡ipw($¶Ã¾¸S»Ðóµó¼±Ã+ì¾æ;@y9£d»ÊÒAïê<¸K@çÓ³£À¥Ð‚ˆ, ‚+¨‚xwÀ†Ø-Œ€,¤‡ ‡B(p‡2LCz‡‹°@¢€=w³8wÛ¿&ª/'D:²ø:þÃËxjp,¨,ÂàBlà·1LDI(2$FdD2„ĉpC˜‡+:>ÌDM$B$Ĥ˜IœÄ½?@ó»M•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nPx'âÐr/Ľ|ÿæåè·aᎇ+ßáÄ#?|<8reÈn3kÞ¬nSZrÇê´ ³áʧc6=5c‡…W£¦Ü8"àĬa»¦HÛöåݯ1B6}{öoÕ»{·F^;µóàœ£Kû¹:h±t’þÉz¸ëâ’yƒÿ'n|üòå±o;.Ÿq¼òÔÞ›_túúŸë£/®»y|ðû©7Ý€RäÙR¡eWO6èàƒF(¡EÒ” heM¨á†vè¡WÖ}v!]~hâ‰(¦¨bg!"ˆ†Û­(ãŒ4Öè`…5½HbŒXè›pòµ$cÆÙˆp]!i•’ó )d8†e“hÚ1˜’OJ4Ø–þö›–"Éäzº F¦b]ž yk¦×Z™ý9 Ÿ™tY&}z!÷¦šqòW€áÁÉ癃~7äŸ~ZÛ—‚’É$ƒÊåuS*Xbƒ¹-9f¤Fv ¤œžr6éˆRñx$¨â5ꪬ¶ŠÔ¨:–’jåUb.Úex_âi'¡jêš©«ÀÛ!¬•Â8«°`¢Šì²Ì~HìMÆ6+í´Ôù,T–šJ`r^v{'£Á1Ê¥­pŽ{Þ}|’KY¡é*Zîž—½é¦aòêÉeª½é׺gòûW½Þ¢Û¯ž?–ë.§åu¯Â£;ïÂrÚyo»o Ôµ Vé©ÅªV*pçR­*†ìÿÆT.èñÊ,·!ÊÙ»-¹ƒYï»ß6<1ÉüJÌnðªVèÏ ëlïÁÓûm£E×ItǼN\0¯"+-uzc´¹Iûf4»9ïé(Á7s´.3krZkÓIuÚe›Ý¢…±’¥-Üxç­wUgï(ó€J^ÍuÓ„î|´^A‡Ý3Ñ4ÏIñâPû ÛÍ‘^3¸“\sÙZ÷«yº‰oÍÜs†?70¾§wÍ0Ô'ö-k³m£ûÞqÓþêÜ9ë·í¼÷î;K®Ûý÷t»:¶_åOÇmë¼çJöÏ¡§®ßÛ…gÝ-ãª[OúèÍk/pê¿»ühß8{–S{~øìO4¾ÆíÇ/óÿü½¯2ýøçß»ý—êïÿÿ+ãßÝHÀºJ€åC È”…&.Hd a$ˆ’õ5pdÞ±™ò(Ø zȃšA O~¥A·­Nl˜3Tí@64¯%,MÔ»|ˆ<¦‘-}ÕCÁ‡B’̆+„áØÜ¶Ã·I-j7bôŒ8¦#Š­kPt!QDhÀ*Z±UTÌ 7²Eâqð‚$ùῈÁ’t±ˆµ+!q'%hín+ÜbõâˆDU1… ÛÜxCž5®…‚zÒYG3ÅQ…œ$Á%ȾÐiŽŒžŸxÇ<Æp3Y¼¢&7))6Rʯã¤(Géÿ,O’Jx¤L¥*_fʺ‘o•°Œ¥t2)ËZÚò,´¼¥.wÉ·Vê.”¼ ¦0‹’Ëaó˜))&2—ÉÌ(³™ÐŒfEž)ÍjZ“šÖÌf3±©Ín“›Þ ç.Á)ÎrþŽÙCCÊÐD8!§H‚ …ˆì"WpH B`‚4ÄŸæ è‰ìp‡ Áæ>EàÏô³¯ÀTæŒg:R´r«œDFè)Íjˆ›\{B:Q-µOaB€0ÆÑ 26Dž 9‡ L àcŸýœHš‡L!%0>VÀƒ‡˜ÀYB D |„à‰6úBÚ¦ƒ°œ&vÁ#:0açÀ‡ V1VLËÀÇY)‡4àC Á8>ÜÚ†5°A"0µª^­˜×½ú€}ý«`ñØÁ¶}ÿ…=¬b÷çKP¢ò.µbœl õBŽNO†”u›ÜcŸd I²ê‰š¸/õ)PßûjK‹ZÌšÖµg./ˆ0ÄÜqÕ¨b:êQ¤»š Eúb<.ñ£&l܇'·cz¥XÇ@þüãˆÑB™‡É«¨Kâ÷:9TMñº•Ùö)g¤òjµüdsF¹‚‹ª!ŸgIãÅXrÿ"v»¬Ê/³ùÍ)róu ÖHî,™+MÕš›T5ÀÝy‚Õí(ªªÜç!«‘*r¦UuóE¹D6zÈ•¤#“¬DFϘŔ.ÝÒ6Í©ú„,‰êJKzr5úþKI}-’—ð#{‰£S¾θžV¢5ÕZÈšÏ`”rªU2rmhçúÞÿ²7¯“}I0‡QȆ66HøíïÑÙôÎ÷xc&¡e .ÞÏ K}Y‹y{u5!·mãw6㲎™AþhŠS:’¦õÁáEçjHßøŽù€`~Bã&)5S=ð„÷›(Ï5Í"mÇ Mãc.q✘m“_üÝ–M"Ä­m唋9踺̷ž­sýëjñ:ØÇÞ±“ýì ªµ+á·QŸ«ë8o8܃ݪ¹§w¶fûÛm®Ã¥«Yê°Ž{Õl'¦[ƒgFy¼«n²lÓYϤý£áuNì ÉÞ8æø8‘ÛÝÿ‰ÙKãva£Ýצßû¿2úœ»œ™v¿¼fÁ-ËÅÒ+\í¿|¬V\|ðKGºÓy”6?A•G°Ø‰ï{‡Íýôk³®òË^äÈ;_yH?‰çö¶ éñè´žw¶/gìS~¥,|º§Oÿ†¾¯þö_ìüot¿üo`ÎÿþÓa?þ÷OÿýóÿÿÐ…{ŽukX€aWºg€ XvH€ ø€Yá8!8x˜¨€Øø ø^…p!ð€ð ,"€Ò¡… %àPõ5S&Ðò0SYPøðP4u„BÐ9`S65‚êUÀà@`ðpAM)@SýdSæ0†1 ¨ Ò  `) ¡ % _ˆ3ÐO@ЄøÐN¦„üô„©7C8æ%ð’9’·Q4†cfVRåQ†HR>6ˆB3'þqU˜QpSeåw}•309…¢˜"8ŠóWЦè~¨˜Šê·Š¬xz®øŠg‹²8v´X‹_ÿ·kô(ÉÆYyòE¯7Zµ‡aAGhÁ(qÌ…‹1ˆwk÷]v¦(›X[¶wŒ+¦]–èYf8Éh·¥Œ¡uÒhÆ…Œ¿¸ã(\Ê’yÝØ[îøqåXnÖøîHóv+ÛXY×€z7Fл¸ŽäØ=Æ[“Õ¿â\öèÊÅŽâHɵ‹ùˆŽÍ%‘[Žù•ÄQYØhŽ#¦døømÅÕn éa|t|Çeꨑ,”’ìa-)s·hÔ¨5i>ã'X3m|73›X‚;é÷6”D¹2è]åu”LYüèŒM•/õ”K)•Di”Vù^X™•뵕\y^¨ø‘=Ò·sñ(r’“5÷“²w%Ά–h©öæiÓ&IJ‡n†g—&6lú‘Ç3Q/é/¢†’0d‰çyÍi˜I†G f}&waÔ š”䥙®âž?ð¢†5¢$ª“!Gwò¥–C‘gs‰z2wZ†]É1–ç†h)Ê6ûuy7u˜FrKDyÓ—»Ù|F¶œ’¤¡U¡Xfmˆj»9\NçjÔ™—ÒI– –x΃^Ê}P*d—é”Êp*új†Cu9Æ4§¶9Ö¥ Y—%c7¡š¦Yê&¥™V5¥•c‰)oÕc§€})䦓Æa”#–wtuÜ“¦E¦S´£+²š,Êf톣Ÿ´Ò{&2¦.!©'šŠ&ú©{ª:4~ÑgäR·d±Ç©šòk©«ôW¦è¡=šœ©Ù¤aNgj¨Ötlj«ymû)Fgv_P—« :x£YºŸŒ¦7–¬¡†¬P'BªŸV¨~šCõ­tjHr:f=¤3„Ä—Hº}>6:‡zxý ’)=—6ÙgeàfÄÇ|òÊ\Qª§9«Ì˜{v®Ê–'‰t.S°=¡­¢P Û°åÿô°¥Él¤·z/ʪ.êz4¢©Å·*3鋲 ¦ì¦tÇ:Z}kΙ˜™U¥¸Yt‰B­)›)/ ¤àÖm'{t7뫟©³"˧!÷8Ëjž´Jƒ9Ñ*nC§º—ê’å6ž§ƒfäAI­¤ù’‡—³ŽZ³H+­×=ùÉ|2–¯b›´‡ƒnÃâ©Ô•±Z´ìC©Ç$±ëMr;·ÚT·é*ü¶>wF «°Ûõ±·`YfœžÇ_Aù{'daçxÍJu‹K²? >pê|Èéj[ ‘©B:µ&y®g[µ_»¯é:8ñŠ®Vã=Ðj¯ø:®˜¹%ŠTwl …xk·Õt»¸‡Mº»»Û»¾»À¼˜;´öG¼¯k¼ ˆ¼Ø»Ì{ŸÃ› ‹¶„W© V¯'[ÓEõ™©É‰º‚'£€›ãû~Ê;°{Œ#a‹Ó¤6»Nƒ%С¼¨žì{œª5œ‘³¦ŸØI¸Ðx_ú¾”u¿•µ¥,Àß¹Àö¦´w÷ÛÀø‹½¢ÿ½z ¢š÷£úz`N*x-öšm‚³¨¹r±¨¼¸¦§uÀüxM²¬ây='Iû5¸éö£ Áùhu:½&¼Ââ©çÛ×”SÀ¼YÍæ#ÿÅ5§&0¬¿2›ÃGÆYŒ'e™ŒÓ›Å=iÃ8üÄSFà †Ã¹ÄPÌZ½Õ­"q ¡ ÑÕ^*ê„x. iÍ]xÕg­Kìp{P b@ßPÖíP" é𨠃FèX@R"pS ƒêÐPsM? p…… À ~ÿ­ËÔƒ9xØâCòSÇo'P•™ðd`К מ]>M_˜ ÅO¢=õÚ%ð kAˆù 4¤–Qáº1‰ˆ‰zUÄýˆ&Ý:æÜÿRÝsºÜiCˆ MòÌ òPÑ›ƒ@%Jƒ4ñ ¸Ðº`Ø`;` ¤` ø@PõOØÐØG¸¦ðß7òu0æ—Šˆ¯T»*“¸ÜŽˆÜifàÑ Rõ—(ˆ%¯¶ÓàÇF ]ÅQ±0é@qVWsE!½T:ˆ•JH087$@0ªVÀ ðãø0ø€gÐ À“àVf Wgà x%×/îeÑ•2 ±ËO®^QÒŒSî¡U®Ô‚å’¼åîuåkYŽž`þ\bÇAågÞÔ]>æk®åm®Xi>ƒQQæsîduî]xžçaÎF^Îæ~^¢€ç}>èGýæj~èˆÎåsèrÞè£Zè‹þå’.[”nç9Áè—Õ™Îç–t–¦MzôV’Yÿ¹çRêŠÙ¢< ©Y“.gÅ fì|êóú•ª® œÎlÿë‰ë ý)kùŽ$˜€ “¥¾½.¿.ìØèž¬+I$÷ˆÏ <ìWŒŒükཛྷ»nºu¥–ù ­èš~Ñ.e|¸F׳ÎjFw댸|È.eyŽû.ë_ªïÆìÊò¾|ü¯øöìtñîéÛí ™Þ‰ÅÜÒÆÿΛiì+†ê Ïíoñ?¯!ß´üÎÒìꂞÁî‘¶ÞíÿŽ×ŽìZœñ-ü¯\ó?‘3Ïòôü‘»¥íËîænè¬Nì_î9¯]ƒñ:óÿô,ïYôãžôèhñø>õQ.£Î»Ÿ¾ê)¿™ô8?LÌ’íxŽX¨¾Ýzö"µßôíHíÇðw^ôÙ›‘¿•¡yï ðU_ðNšðê`.o²…_ø†Ÿõ~ÿöVŸðüfv¿éxïz+_ërOòõùƒ¯ÂÙ—ßÄ¡¿ù{?÷Ùù´Ïù×ÙÑ'ïõ‘þ1ÍþŒ³ï[·]ïë•¿±íEµO“½ѯ¯û_ßé›ûоûÆüßüÅ¿üâ4ùî®üÐýÈßðÔ_ýt{ýwÿüÚûÍýÞÿý×Äý”?þä/MÿÒOæÙŸþ¹kþÓþîÿ»áßý±?ÿêÿì/ÿøLA Ÿ@‚ ,’0!¾" 6ćo“Ĉ-^ĘQãFŽ=~RäH’%MžD™RåJ–-]¾„SæÌŒmd¨°á·'N¤TèP¢EEšTéR¦Lo>Í©°'ψ?›^ÅšUëV®]½~Ý õ¦Nže}R›VíZ¶mݾ…;R,N²SVE·(zýþ”ïÒÁ]Î-X×,DŠ@»ò…ùb᎔){¼Œ1ò或ûΘٯh¤îŒÚ¥é‘¬1«&é´\œPÛÅë˜+iÙ¯C²æöl|½‰§ÿFj\¥òÊÃ÷:?NqÔ…‹ÏêŽ 96ôž7îþ½¸xä›§þŽÚuzõœÙ£—<ž¼üøôµ§/Mþ=üûœíkϯ"üøl?ñöû¯/öÚóOÀ';ðÁLBÁ›o¼èRš!ìbÌ*™(ôÍ< Ot°<\Ñ"Ùyå—×èx ™‡>úâ_Zzë¯_úØ_ž½5ëX¡Âw‹ü‹_DÝ(íîS|÷WK?h~ÑWÊq‰ã_Îíƒé;ÿVT…EZëóºª=ï8ú —£ºf«vEÎ^8z[–Î#k IHì·*¨¯ ¦Š‚ÞasôEªYapn¥ê -øÁI}N <Ï“Hx¯SÑ犒“M…?š¬ÏR„‹àÜÖ–¨?uËW¡Jåj…@§íŠ„rbq¸CꨄK„›äŠXÅ2kŠ"éNgà39™Pr=’¢¤Fe¾•øKLLc©xB÷‘ˆv„T å8%}1IÜãéÕ xÅM‚ÔªãˈEÐ}Ïo0tâóHÃ?îqh”ÛÛôÄF•¸qCpÌd(˜Æ_ÉI“;¤U9D)Ò”{Ü G)·I*2‹Gddçø>/ªÊ…SÌe¬^y§-ò*€ÿÓÉÔÙGPRë”ÿÛ$ŸZ©BÈa2‚4Ä ®‚8B¯iò{Üü›#÷ôL? §ƒa¡³)Iû°íŠºd‘,ñHÈÓm“A“DbVõš‰ü›|Y¸$6ЂZ•ã[e•B¥Ês…äOZY¸æ“õ¬ njájûàÃ5f[–ߣz»Ê'u¼Irt™8Öóú•Ð|'£ë½;&ÖÃŒ>mS[ɽ‚¸ÐÍ)É dE3¸¹Ä|K_=Ûh}ñs¢¾mhImk¬ÖÑΠ.m5%‹YQñsÅ6p­XéSÖd«fµ‹È‹ØH;.×ÄþsdLU\s»®=ïvE+Ê(йÓÀ>7N‡;nåsÚþ{¶‘Af×í¥´Î‚ó­+Œ3n¦jG朰¿, ó¿3|³€ó\a±2 ›®¢î¡›ÿ_|š;5Ä'À Ý5Cà Ú%ËòA—L¼èê¸yò®+’ïjr–·\s(_Y‰]>sš³™GnèÊk¾sž§ æ$^fÏ…>ô“ß|Þ*¯7Ô@ò•Âè¼ûxZ’‹åöeìÑ]D('™®Û§Ùè)ÏyÒ‰ºÆt"ÑÙyÖ¤—™-g]:áï á‚íkVºß›Žîú_¢~Ò’÷9ã#wûníY¦u›¥†µàÉmYj#^¹yñϦó—bRl>ScCÆšÃ÷5BœÈtÅ;<Ä5ûFH¬Gut³žb•zÊ4ãƒC¶z2ëãCŒ97ËÉjį¸:ŠŠ¡4Â+\AJ ±\©D˘Ë'LJ¾)ˬ@)­[DªsŠšÌ¸ÔËi˽ôKáÃK™Ó°µ´AƒôÿAÃôÀ›DFt™+{DP<™¾\* Ä^ŠBþº•|»Ã ‰&@;»3„FÒ;FÉ­ŽDÃÕü¯ 2¶Ó 53\¤v| ƒ5ýyK¼ Ì"\È‘,T|¸O› s¬•DÅÏÅÚ{Ì<|L“įìÇV"ƈ¦ì\²6KÉäÚš8)IÐO²dËåTH¨:Ïü®v$J?j&kR©ê\Mê+J÷ñq¼%…#3LƒLŒ´JküAAF,mœ½O>·ÍõÄkÛ¼›bÐt$ȦLBÕì·“¬NHó”FÒ7ÍÏïıÆY|Çì[6-¸w£DùœúÜBû„>ò¤ÑñÜÏU\OëòJ’:*‹” ª>ãN Ã8+¨ý RêÔÈ*m5L,ÒŠ4½ý2zŒ‹ í2ÝT°2ÍHÔ,*R²³+'Ç´¯jÌIƒÓ9k³¨d¸4Gp£Ó† ®K3Ÿ¸67<½¸LR‰£Ì¦ÓÕÑÑ–kT·T/»¿ô¨G]‰Ùô:…Z1›¤ÔNE™EõÔPE PÕR¥fEI5ÕT5.TUÕVåRuÕXí$V•ÕZ XµÕ\MDZÕÕ^í^õÕ`ý \Öbb5VaEÖdõÕeeV]uÖgµÕh•VY¥ÖjuÕkÅVUÕÖm5ÕnõVQ×põÔq%WJ5×sõZËtUW½d×v-Ëw…W”×y5Ázµ×Ä×|åÀ}åW ô×¥À€X$Ø‚eÀƒEXTØ…%À†uX„؈忉¥Øû³Ø‹¿ŒÕØ÷ãØŽ]¿ÙóÙ‘Ýÿ¾’5YÕCٔͻ•eÙ§sÙ—º˜•Ùž£ÙšÝ¹›ÅYšÓÙu¹žõY–Ú Õ±¡%Z3Ú£]žx¨o¨¦-‰¤UZèi„ˆ@†“Ú©pˆnÀ‡O€ €‡Š`„.V­Aw¸ˆ<À‡D€H€vÀ‡>¸ˆp‰¬E[Þ¹ƒbÀ‡ae€[ƒlÀ‡E0³EÈÉ›T•˜‡¼…<{x‡m0†GP„C„=؃ €0BPGˆ„d膱ý £†@À0 ‡Œ .Àˆ(ˆ(À‡pÜ–ã„=ÐÍKÀÚ³Õ*(å-P‡Šqåµ]‹€(sH…Š@‡Ü-RÀ‡Ü­ÛõÝßÕ1x?È\ƒ Г©yÀÞ(Sh^ì½ù-È‹€††\((ÐÝŠ(,_é­^æµó¥1 „I˜ƒ8À€¨€˜•ÿ)/`]ÀÞQ _x£oºÎ“¬D>‰»ä¹ÓrÏ*M1 T)  SåyÃDŇK`9ðá s)]¨X€ûmÞå ‰P‘ EæÑŠâ ±BrÏ;›>ðÐŒ*>á4©äâ/Eráñb¡8y(€„J\óÛf]gXÞ艨^(_jè,ˆS˜…jXP¸|˜‡'ƇgÐ-ˆPÐ*–âëÌbiÉ+–aI#*Íd4Þâ¶äL†”.~aJ¦anLMeÀ|ãýÓˆëa&ƈý•^Ø…û¥|@8TðÝHˆPß-XÿèÝ8Wð]È匙¾gÞ¯ÖdO–Iž‘fU¦f/vRåSeËèdmîâpF嘹ҵ¸1'¨(øÞåõŒ°‚Ð…r`]|È‚‡W°ÝøŠXPˆ`]z Û5 ˆO˜‚g€ŸuÙ³CÉ–ƒCÜáÊJžfh®Ó9íäÊ*F“á‰S”x‚  &À$8‚ ˜jP… –¦–Ƈ À‡3H^øœ>œ^‡^(:MÅ9-\ÜŠH9.`ìeæèÀŸrF1F §¶ (…h`#`›ŽˆU˜€Ušë pƒ4À5²&ë›Vƒ ž‹MÍK&ðÖ]Þk€`ú›r­‰78AÞºÎU¼l‹ìÁ¦(/ ;aolserver4-4.5.1/docs/intro/tcl2k/html/img046.gif0000644000175000017500000006730007363640503021206 0ustar frankiefrankieGIF89aXÂ÷' +1&'"2$.*+6U2f?8@4tK4*J: GTJunG?@M"Pw kG*`wNK+K4+`ooopf3z> W0Gn:EVNTF5lX jJ3hbuu/PPNOXqTqSOgviWJjYdpeSuuv<“7¯ 8„ÿ8ÏQ‰T¢e›s /W€%Z¦4g‘+w¥@Ï*TÏ3fÿHW“Pq’Ny¥dt•n}ŸOkÇ_«h_˜`tŽ}/—8ƒ®˜Ï/—Ï/ÈÏOŸQ²n‡’pŒ­q¥½^–Àb›ÀvªÄ`Èÿ`ÿÿŸ—!€??Ÿ °´&"@OŸ@‡P4‚kg7¯X/¯_/ X? h  h0¯g?¯w0¿x?‹WJ“mSˆxm X@°__®oO©viÏÅ+Ë),ÿÿ0à//ï//ï00ÿ0/ð00ÿ00Î7LÏgÿfÊQPÓN`ÇkLÀhoÏ`ÏxoÏoÏppÐ``ÐooÐppßpáVeìtVïxÿg``€ÿÿ€‡Ÿ˜?®‰°·’†rª‡G®Œp¿£wÏ€?ЯȺ?LJOÑŽjÑ£yàˆPð_ðPÿPà—`ï—`ï—oï˜`à—pàŸpð˜`ð˜pÿŸà¸Pó©wÐÐûÎñØ/ÿÿõà=ÐÀ`ìÚKþÏ`øáU÷ès‘’’‹•¹’§¥µ®–ˆ¯›¯°§´´´™—ÌŽ¦Ê¦µÍª¶ß€×€ŸÿŸà°°Ç¿È¿Ï²Æ··ã°–ÌÒ™Ìÿ¯ÊÔ²Óß°àÏ͖ɯ‘É·¦è’ð²‹íµ°ÏŸàÁ¿Ñï¼ÃÀÏÀÐÐÇÐØÑͳßàßçÇã¶ñÍ”ý×½ýýôè«ÍÏÑÈÕãÏéÎÝåîîÉÍïßðöëÍõõö!ùô,XÂ@ÿHïGÁƒÑSH¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"5z/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.Px¨Ì{‘ïüz!úÝ8x0Gà Æë°0c“€/FL’òDÅ£´ì¶³g’p›R“;V§Ý–†«ÖL™ó_Ín [vâÈ’é¹n¸ûµdÚ¿aßn›·ðâ—…÷Åí#îܺÿL½zÅÐKIÓMx:%æØ~WCÿÞ;:yèÆsŸW_;rz¾©•'?Ÿ™ý÷ô„å7¯Ÿ5ùÉ®­‡ÞïIwœZ§ ‚ØÑ¤]ie-(á„Vhá…%5X“XÛÕņ †(âˆ$®¥aX6•ÆÝ‡%¶èâ‹0Ƙ¡h4ŽÆ!„ÝɨãŽ<öØâ‰6¦Øa„Z='‘~‹}„$ÁùxÕ’m¹g¤Gî…d•¯‰„¥u@>H‘Þ1§‘~˜¤q™÷™èe‰f’P¶ç¦œæ Ø&à¹Ý™îÉçxw¦)è›oö¹^rgªé˜ž{B™(s²Çhž‚^9[ Î]š§£^Õ(š—Rå(ayT‘ú™¥ž™êdRœ^Øå_ŠºjE­fªêJµÒ ( Ë™%&u["º¦³fôª8²ø$}õY%¤~ö‰æ¡ù—hšÐ¢Ê(‚SRú¡‡–y§rf-³ºŠ{“R2 í¤~ÆK)¶èÖi­¹¹ëi\°†ª¬ù «ïÀlì¾öK–¬7ìðÃktìMÉFlñÅ[<1TC2œñÇ ‡ìÿâÆ®(£1¤œrX¨¬2=.³Ë ÅlóÍ8Ã\³Ì2ëŒóÍ;ÿœòÌC3ÍF ´Í5ûüÏ:õË37MuÕ=¿\´ÏZW´Ò`‡-öØd—möÙ[Ǧr;Æ´ívÛ°ýÂÜt€Ìlà¶Þ/Ümw[$«èáÉonøáˆ'®øâŒ7îøãG.ùä”Wnùå˜g®ùæœN¬Vwü/‰Æ¬³N <“Àé+$‘„8 übú:+˜^{1+¬{­;3ûïÀ/üïÇÜ`üñÈ'¯üòÈÃQ ÌG/½ò I!…ñP óòPH!A5Ûã þîl¿è§Ÿ>2AœÿÅûðÇ/?üTPQÅýVTaÅþü÷ÌÿȘ†HÀVã€Õ¸†( t8%8 Z°‚ÒÑÓ(ÞÄæ/Îâ ?GAø(D!!¶ CăŽpH7ôÐ zˆ!†ƒ uˆ†ô!‚¢‡HÄ"ñˆCüW±PŒ¢§HÅ*ZñŠXœbñ¦ÇÅãA¡!AÀDÈGx@¯‹hlÈ1€¼Ðão„žøp@tO;Ø2Þxƒ<î ðØñ„,á ôüª@÷5ä û›‚À(…DJÁ ÿ›B;¤À=F{0€!Œ_ £È8ÿ ó"bÁ†\°‚/b‡,gIKY>ð–¸t 4vÉË^òrÀ æ5¬AÌbó˜È´†M„° !+V£Ñ³HÍjZóŠ[Dãò(r¼Ô ’ùâµ™<5‚ó3íhÇûÒÙŽ‹¯(7X b…T#P¸Á*­…vÇè$2,1„€î‘D8§?é1)Ã+hH „dÐ#í€G ’ )T  ©H—©&BódPD]àx¬4 pê:ú€”&@ È<¤d¸C ØA±ÒTuPD†KËWS,f“œñæòÆi ‰œ=€ºƒ†ðÀ›]^C ‡”²ÚF9¢aŒ°ÁÙøB)ì@5”"¿€0€ÈÔW@›2Ï/U(ÍØím{Eú&`ÌàÀ™Kü+F¢E iMM3·ΰw[ÿÎFž«n”H5‚ð€›ØÄØMqv½ºMâv7=¿` ^0NvrˆG1æ€øø9>²%²UEø,6M…CdŒc8ùÉP޲”§Lå*[YÊ,β–¡êâÌÔ÷œ`Á´QŒh£rȆ6´1½âÆÇ| r‚Šì¤#›%É&sbÝá(öþ³†5Ìá-úÐÀMÆ‹éQÊRþ‚”ˆ´1îÙŽÄArðD6Þ!·`#Ò þ´0Ü6ê`´tÆ@j ã!îhÇâäˆTâî G2,zJz´#ט.= [ÉMŠôØ´sWð<8=Ÿ6ÉHL}ZÑÿì ÔNF’! wŒ˜¨Ý46}¼$C¤É0€2€1Ö¼änˆ5ý0`,` \ ˜ö„ÀuãcŒ ,øw ~ š"}Kõ‚”Ífƒ©E·Æ©Yhrß 9ô°ëñ»cÑ¿€1 €¼À¿P€1†0„ü°@,PŽy¨£ìhÇ7ÖÁ‹^ÈÒÃøÅâ‡5×7"Æ °1#u»Å·!ñ½º¥ÞÿÚM/×Í/L°øëy0=Ô®öµ?˜Á ;DÞîö¸¿]Át—»Gú}÷ntkù/({ŠoÅâ³ð•ÏøÆ_™ÿ‹58±äKìÍûö·“¿|PG.yL~{Òk<-ñÒoÄð k&Š(vRg+59xij{)¢Lj5xºÒk±äÀg±CHoúŠüâøÇ_¹XÞò¾/Ÿù->ô ¸„´ÕÿËu@uýÑãªq§ÝG¶øÇRÔgñKÑ4Q‹ ïÅÐi$ÿH¡Ð^)øZßG±ãˆ¶` "D@ WrÃW|q|(Ë(P(ps‘•NQ‡/|Õ§e"åd ÅIäw‚(ˆlæ×)*fZþƒ¿|8€6xƒž|ÀEÄwöƒ@„Bÿ8„DX„Fx„?8È·„ȇÆ€˜õ .çmÃN0w81EñÀjÖP„ðà…Q$†a8†dH†_˜[+xèƒ2ø†OE5P>5O7ÀwÈ´7€؃‡ï4 ”W‡~Èg~O;€Hy=ùÄÓ°ès‡yè‡P O7`‡ïÄQYÁ+Ó2ѲAe‚/z¡.£8užÈS'/Á„ÉGúÖusS…íxûuX87…#Ñv±Jዌá<À¸†Vц®×S@T½÷=J%S½÷†Y€:XÇãõê°ÜhAÝøJ°¤¥ðÀ æH>ÇÜøp¡ˆ!ÆXÈaPtFÕ>Ö†mRHÈ Ü•î =R TP¤m±U>.ET=…S.mð ZÈàöøÖ8‘̃ŽàˆŽ¯D°€ê0ìÀŽíh!ïHñø"·q‚&ƒÔ¨M5LðL0“ Q“4 ðæqñ 9ù™¥ ’ì ’@ÉcÌ’²D’%™`H•R9•D'™ÿ)é"Mæx\Ù•‹Gn1i“7)–5¹f¹L “ xX!Kêà‘µt”r xñ<öYŠž˜—|©. Bž5Bô-ô”q•H‘•×SHÅSBÅŒÈpm+mØÖ@HL…Z1ø’Ç]ðE“tÈp< Ybö´Góô™ÄÅXð]Q¤,á”±¢CÑ¢6@Å>$†SÑFSøøÉPSJÅm×ySÀSW£ýihT²—| BM˜ðQ˜z‰Ǥ½Ò,dŠêá¦öѦ-a§ ±|ôpí`íPÉp¨QçOgeW`]w¨N(P¨ Q‹µ˜Y¾†Y‡jP*RꜢŠíYRª£úÒé‚ÿJ–ª®z!¥«²:«´Š ¯ê¡z«ºº«©š«¼ú«Àjz¾¬ÄZ¬3¬Æš¬Ê*!ëà¶Ðgнàì°È<ÀHa 0 ­rÞÔ!¶¬äZ®$1€$]¡Z0®rˆ]Ù8*€I9˜ÛÒ—{J0┥(§y$€é—ñAûª¡xåàkN*«Ç1M´Þ¯î®QØåR¯r¨Qå‹Bà® <àP Œ›qæZ [-+[ Ö @  ÐÛ†m7ÛN7»’ôà´@;z q­/»´Lë*«ª0­Ú´R;µ$¢´T{µX;ZOûLÕ™µ^ûµÿaµ`;¶dË¢[K/èáA.r,ÎÒ¯âÝbö‚Õ¦ÒF"Ë¡)ýe¯ûñ¶âR·“Q-ÝXvK¸-[¶(!¶ùa'}:¸ÓñYl2¹•‹šÛ,ƒ»¸éb+œ«(¨¦·sÛ¹ºJR¸Ãq¸Íq+Ž¥g ±­1’‹!®ûºd ¹¸»»¼ºÛ»À¼ñ»Â[¼ÆÛÄ{¼ÊÛ»ÉÛ¤m²¶t{/¾y-¦)†‹*x»(¢¸¶p[ ¢H/râ¶uò'†Û‰Ò2¤DÖ½„{.o½}k˜B Ü'Üû9~é¹û0ìò‘"a±[2Ͷ")ñ1(÷²¹–Â+ÿ\½ó"/÷B+ŒÀ’Â_ ¼ÀªØÀ½ý+ƒ¾“ëÀ\ºb."ü½& /ªK¹ñÛÂ(¬¿ÑÙ‚P›gË[Ã6œ´ÿ+8·‰k‰é;Šõ ¾œè½c2%í¾A<ŠÑ¶Ï+¾ø/ŒÁâ{LÌ¿"·;—Hì(nKdW ¿b<Æ|k'Ó¼¸2 ô²½¬ÅÛ¸›ÁlÆ•RÁJjÂÙ¢ÆóÁº) ÄOÜÆ€<ÇK½ÐëYï2§|Â|È¡[È|ÊÂoL½ƒÆ7\ÉXKÉ–œÉM‹ÉšÜÉæÊÉlÑ9¢<ʤ\ʦ|ʨœÊª¼Ê¦Ü¸f+Ã\›¶¶2Xÿ°X€N€7€4è‰<°½ÑóÓÑõc?÷£?ý³? U@T Ó€@”VXDAùÒ­´ H4Ó4]Ó6}ÓDÐ@!Ðô™Ð>ýÓ@m: ÝEà#Y=ld<{zWõq Ù‡¹¶=KýPÕÎs>ìã>u„Gyä‚b„\BÅZ áH¹óPˆÄZÝ4{d=R0S 9jÒ)­ÒÀäKzÝ@ ô@-ý×DMe„²qÜ‚z Š-GŽýŽ~àØ~àÙ•mÙŽÓœMÓ:ýÿ<O„ €E-ÕR/µT5å~?ÅR)…>åZÑ8hC½<ÀXbAUj VIÝM¦Ù‡mšç£Ñ<°U]Õy´P y?ÎÍZj U O ÝbzIS×$ü˜JûJÄ]£ “V |&0}A.r}&˜…l Ñ]•‚ö}lŸ«9,:¦5Tš h³=E±%Eø—aN£äd P$UVPS$‡7`à³=K€\ã´ÐÓ$g ø·b\´]ç„(à(À,ðhÅ aÖcrV_-ÞW?F-%±NôÀOþä7ÐÆãO™ˆ‡€ØN~XF8@Y6Þ8ÞN7Àÿ™ÆÃÜvØÅäÁ† ýtP„ùÝ¡éW\FyâO Q uXãÆ3IO€Uyaåb~P\Æ]13f./vðpP £ £@ é é Ù0 nVþ6ö%gËJÀ¨Ä~|- Ç ‘å-±åg‘Ÿ3JÛÒcU$&Gñ:N‘÷[*ö['U‘Çy †bÂ×e Ið(PÁÁ@Ñ`Üà Å Å@ÍpG À @0¤0 ˆpÀ v@ ðt‹ñ7yau 1ûe7õŒYxn Y7vÿêR‡î¦8§‘wÃé`xלÿÁ`¼(wI˜vónwûžý…¯jœî„ɦƒ,ðžêʰ Ëhµòø?Œù=-[J•È Ö #VÚ®[ä¤biªMÛEoy¡â@V>6Ã0Ùà =ÖòoöW~¥¸ܦûê§|™œt—vú>wuÇvÆyïË)œÃIïÄiwF¯ó[Šª±˜Îšnë·S5Õ [15{^=/‘Ôº&òx¡o~çW` w Úpç=æWùfoïoàw}w_ãbÏubîÿªôzY‹pÊ¿ì¾÷}y·â÷Ë ïöŽœx—„ýžøö~÷ù’oßM¿Oß]NÁWêÞdÿðù:ÉÛk¹n}ó@÷s %‡ÎcwâÀ%pÚ cà ñ@[‡çß7'üå®FŠÀ°Œ1vÇurìø>œm‡ïÌé`Å)ïCOýPR€Ý µFR@sA@s³–APÇÐýâßPDÀZC+0þïOsá/þò_ß’_ù*qù\ÁéOà@‚ D˜á± >„1bdÈ”)K–¬âFdpáÊT €Mž¼Až;`*é¡€æˆväX ‡S.üœ“Ý:_¾: øÙ¢E‰?/¸xÀ¥KcQ_Г:UëÔ¬U±nj ÿÀ ±YÁžÕ:C-Z•ké¹m;ã¬Z¹líÞEÛ€_íü3ðbïÙ¬RÆjÖ¥aÄx‹uYòd—ÔèYÆ|Y3æ=ÓûZthcôJSFZõcÈà¹N€,<)µ¥ìÒ^wA‚àÞÑú<` pïRM m…¢¬AoÊŽ*—ÐC–²Æƒj5àÝh§²!dÌ߀§r =x5ÒæŽÞƒðôªÍV¥J–«ýÿ0@T͇vz0ÆcŠHpÁú$2'¬l3 3£Æ³ÏBãP´ÒN£0ÄÑíd‚(7ƒˆ­ dÜi.Æ„žC©FoıF—Z±GÿEü%H!AÁ™PìHŒòcž„2J¤ò. «üà 7Ó°³Ñ¾üK1­µÏŒˆˆcÖD3ÇˤP*È~9ì°¯TbÌNÆ~¡Ç*®k,Ï>ÇZì¬&ƒ¬S°Ã 0$_xÑ:'=¬)§¼ ™c8BÆ’!޹/…•DB¥¤8†žvV¢7øè¦%a€aiˆ!„¡çSNwåµ×®„“2-‡½¬Ë5-Ù`—5­9w`|V ge“¶Zx`”1[xhló¤°%\qÇ=A¿nMz3X³ìüJOÅު뭴æmË¥µâ…7ß{å• ®~û•7_C›|ò—"mçÿ#QðKU(ÃsòR(%Ó¶b‹/FXf#vXc¿ì0Ìá$ñ5–+.jNf1™Ù0†Y nÏ5i;J@À\š%Jwd¼ÞE è­„&,èu%;ôPH_h'*;-=ôIÓŒšâlÙ#ë„´nŽëô òúk‚4ö™­Ž/üYÒ”-Ë’a¼-f¹››™ @†žP žîn¨ óòžÏ½î£G¾Ûyà ûÜ[bï¢{@ ì¢Ókî¨ÁòùÖÛÁ½”TJ¦mÓ{l’¬'-½ŠH"o~ž…aJ2&ÿèª7.~ë‚‹d¢O¯ðlκÙC¶ïSäwf¾ù‡\*}*u桾zÿ믧^¥y¨ Îî'^ñG¾ü ͺä—ÔŸŠ}öÑz?}•âŸ_}ûߟÿ1òžKâÕN–òÌ¡¹PF3£˜°@6Ð $‰óÞC:­TO‡©@óëÑCÜ»¹1émohC«“]ö7@óáK_¸ؼx0{Å0^tù—Àz§² °ÃÓPñÖ&@Žèdʇjã·$C‰RËvãP17®Ñ o¢¢d¡6ðͤ0œãÌݪ¸FâL‚£S•VØÁŽyÐã{!ç1Çìar˜Þ #H5¦ˆ‡ QÍ÷Ãbý¯x"Cä€J–®€Ù,G[(2 BΈFtÒ“Ÿ¥'uÆ<—Èg*ó Åñ9ÌqŽ€Ze>IZÖBŠ,#3äHdAÒ–þ!¢ép´í˜§ÕÐÙ$Ç9ó(Ó<’#¦1›¹·½ÇMüÑJ,µ¹MJýr+…g8ÅÎԌӜàô¦p‰<]¦í‘ÇK'jÞv2l]Ë õÌä߸Ï6ÅBâôç7É™xpÊxZLa u§?]p¡#"dÙÿÚÉK0Á3 ‘)Ù¥€%¡6R\Ž;8šO}¶ `3ê#:Mª$æâK5àÌ‚]·ÐRPŽ+LÊ_ʤB‘åN†Dh»ôtT¡ó,»*T7Ûõ•ªR1ˆ™”J uHÑãV Ÿ‚ºÔ *u©*qªVxºŸ¦01Gu+»Î ´uŠ¡¿['ÿ¶ä1Š†Ì¢Å ‰ª!›Šd ‹$ѹI©QîL53 X s7|eõ­X=Ú[“ÖÛAV_“­!¿àuC®°ë²îJ¨f)“ÖµVħQ}hlMëÖEÔg "} ØÇqŸÕ2«ñ,ûÌ'oüôRS£ÿPÕpö?¶ täÜ_æõt¸ÝÐ;ƒÉÛ³” ±ˆÝ$?Åî¢f åeËy¹k]Óa×Kºý+zå;_ú¢ÅœÈ»o}¹ë^Q¿ÿp€<àñWˆ$p‚¼`7ø.†ïvsM?¼àß8[Zþï‘KÜŸøŽ²6IÞó”½Üƒ,9¿9¾rºÒvéû³ùÐy\êS¯:Öaùî¨cZ®8w:ËÝKŸÿœâöÅCDð°/üän·:Õ¯¾sšgÝîOÿ™À™^÷›G4êm'¹¡±ÞuÕ^ýîZ¿û×…ð²Kôì»L{_Mø_ÿR¾ñ—‡ЛLnúZóŸ“æA?zÒWXô¥G}ê|zÕ·Þõÿ¡§%ÿzÚ×þ¢¬·}îuÏBÜïÞ÷¿¿íãeÏjàßø>—w}|æ7ÿG½™Øé€ú€FÊYˆrí'wúØ/|¿ÿ\º×½ûFƒ=ŇOë {>üƒþzi! öë×_þàW-ØeøOúý÷_(qÛ»©¼Â@ü“;<9êã?Ä»¾¿«+Ô,Ô9™S@ó[9Lþˆk@ÔÈÀþ¿*¾o{·¼ë·»ù³ÀL@ª?Ôª@ ì@éëÀq›Á¼¿Ô8˜c7 dÀ ?T¹4<¼ÀósÛ@ ÌA%ü¿#7˸ըÁÓŠ¤dÎ#BXÊ¿·;ư¿¾ûÁ°3Á:¦£ÁÅ+Á”3çKÃÜA(dBž@… <ýÂÀÛBäBü?7dB„D.l:Îã>·‹CJ¾È#¾‹Ò·BÂÊ;8DjDçÿ,+¤ÄKÄDɰÄ{Ä,“9<ÄÌ>–K§GìDRüÂSÛD8ÅÔ¢¿ªCYüÀWBÄ›ÃÁ3Â,ÔE=l4œ-_ÌÇÊEZÄAüE½K4Z”:[œEU¿X4[tÁhÜÅTd°VíûþÓCüË@l@P”¿bDÀTÂNôB‡ÚÅ%$4Ç ü¾;ÌB$Ÿx”À$D¿r¹qüÃÌÆD´¸Ù+Ÿu#ǬºÁ%œ7käº{<Æ›ûÆUܺ ì;‡„;x‹B<„H2DÇ4¬ÃÄÇ­3D#,ÄôºutBQDI‘ŒCqT0m0—ÌÄ™¬D|/b£ÉœÔI³±ÉþZÿ¶Ê |<´ÈEÊ£¤I˜DÊ¥´=¥dʧl=§„Ê©$=©¼(c8€¬ÔÊ­äÊ®ôʯ˰˱$˲4˳DË´T˵d˶tË·„˸ KÓÊ  šй`/`‹=åûIÃJ­l'À‚®¤‡¬Ð‚FÑJK‘°Ó€²¼4N±XÎæÜKÇëKEd¿ ÌÝÔÎíäÎîôÎïÏðOÌì7­\¬›9ÿmÒK€Áž<0i 0cX‡ù¤Ïú´ÏûÄÏüÔÏý´Ïð¯ÿÛÐÚX“5ÐEÐMY_aÐEȈM†‹Pk¨Pk°wÀÐgáÐíЬi0WÑE‡5Ñ=QiPÑeѽ†…Ñ…Q ¥ÑµÑÅÐé ¾ê,ÊëÌuh ‡X"M q Ò€ù”€&]‡$ €`€bˆR(åÏ,íOÅ—83 P)¸ëàzp@Ó.­†4ÅpÓ7åd€X‚:­S(ÀÓ<ÕÓ<¥‚>­‚?­+ÔA%T+؈i@ÔDUÔEEÔjpÔjˆQEÿÑw ÔJ}ì±o„@à…NíTBØ‚@ ‡x؆>„SEÕTEU? Hèƒ@PÕX•ÕY¥UYÕÑ‘±Ê€’O-]‡sàÕ_ýUÿ¤™¼ ‚f2¦œB.z`hˆè€‡€‚ùà›j¸4eeÚh] d€Sdø ÈÓô ‡*ØS³<µz€‚tU•A5%d0TdHT—€FMÔGuTEi8QKµTLµ $Æe ´F#Æ@› AèOýÔ,è•À†-À•0„Q‡,è1ˆ¥‡;P =0ÕZÙ‘Õ[E>½IµÃNßz£i°‹ Ód=fmÖvØd؇ˆŽ÷ØÚ  ØoÝ8Í!ÐS£… ÐÓ¼ÉVzðA…‚vx)Ô* ‡(¨ÄÙŠ(XT|}ÔHmѰUÑ~õײ}m‰5“e–\õ'ш‚XŽ€È×ø p‡3dÚ9‘ºõ›ÈÖéR•P¦³€•¡‡d@VR¢‡™…•(Öñ@ÓÑ) :¥Ž•p\)Ú%@†'ÈV(•@aPÚ'8]w¨ß‚õ(ªahÚ­ˆ«è›A†jhq=%€ÍTsÐãEÞäU^ŽPÛeÿaÛxò®zÂ'‚xéˆéˆ•±$¹9\!—àœíØ(ˆÈ™2s R Ê•6mS8]:µÓùÝÓúÕS@ TA‚)(ÔŠˆ×]ñÚvÔ âí ÓƒBMQ‰!†d(ùhm‡èiÝÇÅàÞ¥5Y^mÞ`yÞtò6faž5s&óXz°‚1…k€‚Éy¦fšGïè§Éå‘xÂÓúXá†H2Ô­V‡P‰¾tµmUavu "þa3ÍŽhâ­ÓvˆÓôMáôÍ›#ŽÑ)ð ߘÝMéb`8) " ã2P"˜ÝP1î`_ùàÌsÏÿ[°’ ,Ê Þ¨$/æ¨á ¢Á­$xx‘1 j¡¤Ú¸¢Ý©éÞ‡x&È1VÀ1œžmjJ³äÛ¨%¸I>•@†Fp`9`eV¶‰;ð„;ˆƒ°€€(€Ðå:¹˜DÿØañHa˜‚vÈq}n †¨(å-6Óa.f3­ŸõR(0¿°”¸gEœÎfŽÚ*ׯÑ`sÖštFg±é›Pç‚Àšx^ö gxf:.“ö&ïú®|Šdhµú€αÅ圕±&ç!å~9He¸€°€nè„Oð„RànH‡qP‡ÈÿÐe¸F¡[žp&0…c¸H;4„ÕB²‚(ZÒçêêgðÂkPWóÐéÂiÑi½Žò.¼Abmåem&÷€x btÁŽ–ƒR DˆnèWàZ u R°ƒlðêb`x8Œ]é’n”:y1‘_¦JÁç1©i[*,ªˆ&âÊY޾n u‡%êçÃ5h÷˜†à0¦”hm†¢~€õÀiE]ÐÚb _YèR²Ýd˜†3ðRÈ3h9(z˜€€ `€íF¹E0Zˆ9àjZØê¦ƒŒ:) áŽ9— “àÆªŸ’­vÿ*©P§‰ |¹!Ú¡Ü!­{á{q¡ÐânãG«r:vXñ~Gy$Ÿ¹½;ÆIÀdY¨>+àÉ1‰%ÔžÖ w¨†ý¥ŽP6Öóoù=‰Í¾ à²m€bp Ȇ9(‡rp‘¾´€¶€è]~±¸þôÆ’º®%·=,dʸÍ1z ¹…‡b½iƒðÏþ®.É6Öð\0}ž¨þ¸çà„S.‡ˆm˜8é“¶e]VòUònÌz¿CÉwÙîéÞ Š,·°ò¢rÚ/×!-¯îj´´òðöDYŸ„O‹ÞëMl‰–'ˆÆqÉÿ-åÿ…pN`ðyð„y(mh#_rJÑå\Îe&ÿdó3A FÓ9s*qZáe©óKpXj©²p@m;ðOȆ˜$Ÿ”Üf“®SÄèt¢´Ç‹«¨@±"¤}¡Œíf ]ÿ¯H>õVYÀÔ1â()H†äX޽ž[Ýs™¹ô:'žØ~±·n¤°€õ—ˆ¥C÷åÃ(FÙphô“–bª¢“¯"­ð³ˆ ü<úôç½Q-¥d.¡¼Ь• KRÊ_ù>{Cx ‚¿õ ÇÐ`ŒcÌg ›…ÚVÛC¸åVˆñ–!‰¾ §ÞpîÀ㎊(®øb‹)¢£‹5²×ô< ãŽô³#LÅ=Q ýkÔ[§€&¶<ò_,À«;ßT€…ŸEKaõOøËàÚnÒïá‹?>z£ \úm¸¡nôóIKÿ>üñË??_Ë«€È믉OößÐu äRÕlF2—!g"™ÉPÿf1 TÌc£ÀÌDðY–£$67Tˆ4ÛkR¼W’ôÄdÃzx®…+< cˆBÒP†á3Ÿ¼Ðw§Ó½‹}í3Pëì• ß‘o|ÁÛZÕx¢?ãMÉÿkÞ£xA "…R×2Àg˜µ=l†× a¦FXÄ_¹°ˆbzÕ¥CjMO§’âoN”€UÁ#¨Fìð# ,‰ˆcüÝíWƒ˜L‰JN|"=Æ(º(Œ`;Ø\XC‚Ä.ŽlMjiÉÕ,¬ ¤´Œq-/†²{‘zRb-ÀUê$ðÓ_9XÎE±”¥-_™(\Úò–êñe“µÆ6î&^ÿpœêÔµ’ЃMÚQ”–$%f6©ôh¨¤£(åè[bR—03çÐc <ò&˜T)IÉœLJÆtdÈÀì˜öȲèš¼`1.ÍÒ˜´b kE Z(M ˆÀËpfNÁDÖ0yX´7ÞÓ5­“‚sfWaì@ 9pGpöGñò&eÞÌH¿•Ư¢ÀyÔZâíIKzÍÂ'´¬h-—§“^‹¨úzHQž–Di#=*ŠJzR“Ò³ óPÇ<¢*Õ©Ruôø*À“ h•/ˆPXÁêS¢’•—ÈYÍzÖ´äie«ZÑúV³¶U®q½«[CòPTu"B5ÿfYAr¢ÜqŒ;ˆUÎ`R\Q©KubS ÕªRVªyÑjW¥GаŽ5°ž}Þ^AÕ×M°Ÿ}Íp\— dèê°ç©‹˜Sœ9zt®ÍYŒXŪŽ> vu¬#HwÅÚ9ö±ö‹ì@¨*D”«‘´ìJ+Àu°£³§½®¼BÛ©Ñö0uØõH2“%<0Á¶æ=/zwÀ„ž,¹‰*=ä°ÕÌòES¯sé €R°C,cé$jÞ"…Ù€„ù‹u¿û283ޱ +ã`ÌXf‚Ö.£¸»¾¡*X ÃaÎvj'w Ž8`ŽG‹³ çAX1‹Ï«Ä±°z€ÍÿÀƒŒ < r'†Gq E^‚0 )2‘Ù+¼|éV•ïVãÕþ6òbÒýo‡³¬. /Jà ¯‚*£¹ÌfNŠœFæ4»(È…ò‘,"ï¡Î{Xoÿ¶67 d,ópîûžJ–þ–ƒ~bñé$ñ"IJÖ¥ÑdÛ‹$¦èÖpRÒœ´–·œ`5rhTu£iµ fTW¦>5ªSmj%ëy(‹:äç_²Ìƒ¥òÍ4®Åå@y¹´£Æî‰\ežÃ&€I À•tÜïV K)Rl(wÀç'&£×…í~ äÚá)0«_éEÊôÃêA$ÈÀ24‚ N(ÿo ²»¡¹>æ®ýÔkPÿúºbF‘ÎŒæ€G[ÚÚfæ5…Y)Ï= çÁ—€D(ĬÚL|ä)eÇÚæà«ç–’<«ÕÕr!R®ò•³œå÷&P¾û´ïböû´ÿ.øQÝì’Azܸaz¹kZ^ˆ@ èÚ´0;Ý®OÓèôBF5PÌÇ1{8=^Ñrp,Ÿ?v º4:A\nO±›¤„ß²D-iHp0©¹Ò!ªô¡1ÝT¡Î²1F¦÷½ó½ï~ÿ;àïw®wìQy–ïï¸óuî¦ ª¯þaVqœ:³âqy¡=.‡‰»€óJL+zaŒ/‰â .K!¶?˜Ú.m°HÅeƒ• #’û‚¬¾[­gôG~_éƒÜ^ ÕϰãÿÓç×È¿\Ì1R3ç}¥ó–Ô€'Ë`3–¡‚ô€-Ë@€M΂³è ê…u’¶˜Fny9J_ÝC`h£µ…ÿÉE`ÔG,ŸHðÄë5 Ü(`¤>%`£ÔÁLÁ° ^ŒÛA `$ ^Ê1Ÿ%¤  ÚMíAš&µàÚ%߀aZòY_ÍœÝ1 gé ŸlM èá !à‚â/@ý%!ÀDÏ ® á5àÐ D<\!¶ÞêÄܜࠈÜ]‡ÑË«0‡qhDZØìÄŠë„_zŒ¡Æa!µWg,iƼ=½MÒ£LõI!pÈ›…5”Y˜ÿïA"ú¡lbó!ƒF’ð±`Û%‰zW÷ ž&n"' Þq5‘ÃUt 3å_«¡\N¡ò¥â=Ubš\¢Ý›pàJqL‡z8Ûäå€l±áz8ѪD £!=¡Ôì#½"–à1ª”ôMâI8 òc&L$­'Iãœ@ã@€E^$Ãaô“@ð`G¸"šÀ"‡‰šÕMÇní@ì Qæ€.öʘxt$ƒ0ɳåá-Ðic"G”³DÈÔAÑó($=|óHŠÁx‘@ €Af„³($7² Ÿ=˨™ã™ #†™÷Œ$I–¤Iž$J¦¤J®$K¶¤K¾$æLjËÊÅ$MÖ¤IΤMæ¤Nz¤™€$9ª"På3®Ü1‘PÊúS%S6%‰@fT²¢S"OV%Vf¥Vn%\%W~%X†¥Xfßãm¿%Z¦¥ZN¡W®¥[¾%\~V[Æ%]Ö¥]>Ï\Þ¥^î%_êY²QÝ}áOö%a¦a†D^¦b.&\Z•@¬CruFb2&eVæWÚ‚@Ø‚ Ø@`&=xfIL¦eŽ&i6åñüEØ‚cš„h"D0 èž0"ATäHAÄ&ÂÅ&)Òm–&pgš€ñtüÿdkúælþ¦–UßõÁet&Ët §,à œLÏ[x#bþ¥R ¦G0ZÃkcH̦·­ô-Z5J¢ÚMÛÁgPFâï-cÛµ§|:ãôQc$Rš5Z#ôU§VRRa”É €l,'s€s y¾&nD2Xƒ@˜'<Ô€x =ØÄ D ÀoÖ€ph |(‚ØñÑ`¤Eä~Ê`UÚg~º(í• ®h‹’Yަ]€ò¥èPÁ@„Tl.@A$A€CÐÓvƒD 8¨0Z'–f©¼A\ÇuÈÀ$ =lÇ1ilæAlƒ“B铿A7¬ x·&&j©ÞiUŽÖúŒcH⩟þ)®éD:ª¡êw *äé Ÿ&¢>*¤:¢š¥n4j¤^*¦ºÔ¤’£Æb¦~*¨®Î¦v¡öi¨ž*ªv!Yª¥¦ª«¾ªÌ­ê¢Vª§Âª­Þj‚ŒêžÖ*®öª¯.¨¬Rjˆ´ê¯«±†f°r*­ê±6«³þ%EÌê°òê³V«±êj«µnk±bkÑh+·†ë­zk§2ë½g`¡k¦ª«¸’ÿ¹.«©Ç »VRKÙëõ½g½‚ľRü@’ŽÒë¼l þF¿â«ô¤hÁ¶«…¼ë´š+€ ì^ ÚÂìÅF_ÆžÆÂf,Å~Í2ãÆºÆÇõ)¬2¬H8¬E€k‚H,3Vlg ÆÇî+º²+ÍÊ %%¬ÌvìÈš,Ãìì¿âkÐ>R2J£íÕ Ì­¿Þ^ÈìŪëÓª¬o°lE¸ìT#ÎêëÍríÏö«×¬Ø,Ùòg#ql‚•,ÐJ­Ò~-&bØ¢íØÆ'ÐvÄÀ6mÖ(Û`ÙR-°–«R«ÀúgÒnß®ïy,ÒV,ÑömÉvmÚþ,ãN®ÜR®ÝbÿãâZîÚn¬ÚVÙÞ‚¬ánmʪ¬Õ–ª£F#áÆlåÖ­æ6-GÄ­è®n½2-ë6®Æ¬ÈÖn⦮㶭ŽÎ®äî.î¾îûÄìüøíß:^àBìl/âÆíêïÌfnìönáònëªîí".㪭ÔjïçŠ,ô’,N¯Î†nð"/²®´¶¬àblÁÎ`øÖnÍFíù¶.ä>¯ïFïî¾®õ /ãQìøêîÿFŸôf¯æ~nçªïw²¯°º/óƆÍfîáz­Û^¯íB.öΫüæïí.åÞ-÷ïåþnÏ&¢Ìέô. í«îÀ¦/Déb-ü–pǯÖ^0ÌÚn ×íÞ"qí ro W/Ôòïöâ0Úñãí¦õ0Âb0ë± Ï0 '+©ÚðWVñ¹.°Sf ¿/SÒ®gyñ3fGð¯qe¦q¼²1+¦Ÿn×q\αç±eâ±÷±cñ®ª±òZò1!ò]2"/2\ÿ*2#?rZ:2$O2XJ2%_rVZ2&o2Sj2'²*z2(2Љ2)Ÿr¦™2*¯r¢r¶Šñr±Ê2Ð ˜ŒÕ-“*÷ K.6Fch0 -£ÊÈsĦ,ôÊr./³óì|vÆ3ÿ”++,û‰Ï6oOïɪÒ(s§$óèr³oè,Æ.J [, Ss9sš+ëþ±s±ý²]ñâ3ýplâ^nÏnÒ4G±Ð¾- '¬4/ñóó? q/­óŠoÛ*´ç–ïÔ"ô@ /Eƒ­üLôïBbEÛë|*n@ã²óBñù\s¹Ò³1†´?û« &mA[W1ƒ3ñÿ¶s|r®*4:Ó­DÃ4P´Lû4@óôPßt;÷tDëp?ÿtSÓ-:ËpM35Tï4Rë3R+3Aó³8[¢JÃ+³TÕÛF´P[tM;µMû´£EîOouN?-9w°D›õRØ%©õZWµQƒó½Š´Zç3_-.'5^OsOpB7µVç5W¿sO~õ<‡uÑcPõYgöL_µæ-6b;6[cõŠvZÃu[¶Ysvb«Ý]¶S¯vkc¶Æ¶j[uIã´k³sn—vIÓ¶¨J6³4šü2Fs-Ô2­NôG/kã6ÏJ3J´tW·C;4D5Q_wÈ’qrowuL¿õqÓ´g{´më6þn4ç39'7jwå¾åï=àSþàc¾Û>è‡þÙãìÔwO¶ˆÆßN(€á›¾¦üÅÀ}Ñ?}¦Ù½Ô7Á\=à+¾àë½ß~äC~ãW>çûþæó¾ï÷¾ñ÷¾ò{>ó7?ò¾ä ¿ñ'?æDÞ_ÿãk¿æ÷ýÞ¿óò'þñ‹¾ùŸ?úë>=ÿ` À/ìÁ„Fé{êkD¦_ës`Ùü ëË>@Ð8`AƒR£§áB‡ DŒHïE‹£§aGA†)ÒØ“Mœ`Á¢äŠI—MÒ{9ðå˜2eºÔ‰ÓfNœ?mÆìÉhPF‡îÌiÔgЙ5 "¥‰T§P¡Q‰.uº³ªV§E­õÊôhU³gѦU»–m[·oẈa»ÚpÙÎX_¿}ðÝè÷…1½ôøVlì…^Ã#!G–ÜòCŠ+f¾8P#GÉŸA‡Yò€ÊJœ4Áâ$nk«®adž=VvmÛ·qçÖ½Û5ÁZÚ Ôk2ñ_À‚ ÿ¶YüoãEG]™úe‰›5gÜ({÷Ȥy‡?ž|yóçѧo €}{÷æ¡{—ß±zeÌšñsÞ>Ÿÿýþ½»AÀ ,ÐÀLPÁÐÁ!ŒP A‹Âèê³ì>ì,Òγ A4ȘuH,ÑÄQLQÅY<ñaT(b¬±Az¤È1G`xìÑÇ}”‚Ç{È#‘LRÉ%™lòÇd ŒRÊ)¡üÆÊv°ÌRËvÜÁžDÌ1É,ÓÌ3ÑLSÍ5Ñ´ÌÉ,«nÃü0ÚîÃ7C1 WX'Åù³ÅA eñEè†MG)nXŠ­˜T@0Åÿ+0åÁÓO?­Š%H-ŠSQMõT*¨€‚Õ*`­TÖY+EÆV[§ÉU×]w­Æ×_¯ Vša¥AÇXtÞIVÙdçiÖYgñ”NL^¨¥–=éF @Ø$z(á¶ÛqÉu3Z‘2lhN=<Ì×y@‚$Væ ’x Ð`Jìs>‹Ya…@ïMbÏB =´Q—(¨š…k(G«yâ«‘ F3½žnØAdP?Eæ‰xPUå•]…µ *¬€™VYo^qÎõW`ƒ½¦Øc‘]VÙg‰ž‡Dc ¤bZiáš>:4Aü¨ÖZ.úÈ=èÑv›n¶¡Gxè {ÿCúƒÜµÕ4×ÝÒuhÝüÚ}ûBx“øe=Í‘ Ìù3ÈñSЀN oA&Taˆè¨¼F!—G`|€ ¤§rzž¸!Sd‚¸eP^ÝSÔQfYvV©p¹Š™i½õæœsÞ¹gt|þ9h¡™-z÷„cjä£nê‚V^z©A¤«y!$‹>¶y„žDè‰1脞,ºÙ zA»ôèƒíùËtÛî„âÌîÍê¾_Bx@¦èq™#5D÷)X„‘Ä8' zÀsð€Gå¦@ŽAAt5Ø.X9)УdAˆ@D¶  ÕÿYªT uA¡02„ Ä 7“˜Žè±;^íÌW¿Þ;†'4ã/zRsšÒ˜G½æ=í‰P|âóªç.p`]ìÖô 1ˆAŒd#ÆÆ2¦1Œ~ ßa?ÿ$nÁ ‡êÔ™9þï}ôãHA’… ¤ d…pÐ â" $cDðBè ÇÀ¨˜Ìtô¨ÆÅÜ!º‰,ãì„P…Oî@BH¡%Û±!< O-鱂  ê ôØe¦0B)L¡í°á6%xLaˆDì™°ˆMixÕ|‡±™Mm~é\bòCÀÙ?¸Žå„£ÿ÷(:Zg"tÒÏÒÙxî’\!B©ÁzÚs’ æB:F‰R…ŸKa %°ØR‹Uª‚èÐSU× Âd%…vHávVÈ ¤P cØPGRˆ‚„Xi8³gÒt)±¨iM¡ms›ŒçM;‚Ît®sÙ±Nd !9pM‘ºM…&•©M…G3ÇÍÔ TÅ$%IÉE}ì’˜R(JwÐ%X2¡)¤‡;v°“-Ò’É@2f…R>˜¥G2lH! ÔVÂh0tG(®ÆF”<™ŒjÕ Í¢Ç Tù°ƒ²•µ,e–Ù̾ԥÏôì3­ÿZÑŽ–´¥µ†N÷ÈÓ;º³’•P•‰Í Àc¶  -<à€J!¹Uælq‹ Û&ö®S™ Õ…5l £CÈâŽzfµ@•»˜é2µë¦u ¬“ÀwÁ›V(¤ðTB v`‹¢J‡í½è‚yRÝÉ÷V‘Œ(D¡GÈX,c Ùg¹Ö;¶ŠÇl‰cØŠ Ö݃éacÐÃÁ¶ð…1œa £vŽª½kJà×ZÐo¨Qk{ÛÜΨ;H€à‘ŒU¸1v‡`[ä&‘ÉäT " Êd WÍu”©Ná`u¥ênëx`*Ù¡ VS¦ŽêÚC5 ?˜ˆDtÇ—+`h‰X:¶Dl5a½Ž°”_*¥úÊÁ¡šâdTxË}¾‡ýÿçáv²+ÄdæŽPwãD[¸‹Fªrm„Àª ¨ÖõB8h@IBÊ@JΔ§He'/aʧrî6¥á.ï¬U ¦JuT "Äž¢#RÓ-¡“<Äu„öü`K ÁÁ!‚0ܱÃàìp¯ÀhG í¤`ÑŽöyqÄg?oÐ÷´;óøCGÇ0î1÷¹Ñnu¯›Ý´î»3Y JÃÞFnÔ¦Çmg V%AªÂZÄ4ä& âo‚X!ˆpõÚqƒƒß XÈÃBi…ŠOhÏ–ðøÇ‰à`)!GCÐapR@Òc&‚ËIîò—Ka{Õö¶3Ümÿ»}ïÌ·tíh¡=›NЗB×À Èß ‹W¯Êkíàr˜›à½) Œ¦±›ë]7·|NÅït©§¢‡®³dÏ–ýÒ7`8=n`qE‘Ýìp÷kÄ/í°¸ç…»Ã5BóØ{.)œ1ÜÇ‘ )Ã~¼pqŽs¿ç ÖãÏEƒhd`S ‚f ôê9uÂHÀ> ôЕ7æmç•)X°óÉÀml“jô‰lcc.¨O+|òbÌÝØÃ<8Pd`®aS¥º²Ú4°€ú.` °ï‚Àܼÿý€üßg7Ø7ŽŒ%ð[ºxW”Çàqd´ÿ:îô˜‚Ǭ Q‚¨Ÿýõ¯?ÜóŽ n„â"þ4bð&„èp›jòÜ¥òíò0¯B,hó† ·Š  DLl¶”‰¸p,½jlprÄö6oÅœJ÷ ¤êvÀ&år2ér¥Ò0gÞ$'“RF«®ímA¢O X\ \`ä ï€hœPœ†¡ÜÃû üÚƒúÎ ýÄÎíp`ïHè”hþn€4îÿæÿÐ Áðÿjm N‰ðâj…vÍt,nRH­îäà ‚›ø!fM þ°;bmj4”‡À n m%#èê¨d-›¾ &Ñ©*q›.‘¦Xð@¾ÿd£4è „ƒpìrìO!††´N Šp\@æ`^áZ! yÁhX ` =ÆÏÊï.Àü¶P>ä1äN ²1BKp`ž˜q‘"•ñ›‘»ñAž&y޿ж.zšHŠ–§ŠÈ1¿ƒ%kù§2ŒÁìññÑl„¹FG»0g¤a¦ ÞR&Þ dHÈQòk \QûJ€Ú HaJ¡h!Ò¡,°Á€±ˆQÏ/àÁçQ$¦giœ'ÑWÒ‰ºÃÏ}JSr$ ‘y2÷"æc.æâjÀ k@t«÷rÿðK´k àêK~O-g@ ÀRDB8Á`ÑFTA¢0²ÊÊ=@ü àÚÒÛc€Ü1'íÒÐh2Zl²Cäñ.=ÑÐ 61›b(¶b¨'‘«Ÿ.Š2–ïÒœ ÈplFâ üN2›ëbÎzPsR ìÀ¸a&<Á¼€ Ü@Ò <`Æ`Ša½Ýüò6ñ².qj/Ãq“ S0á¡·dL·rD‘!Gˆêf1·©scBf0›ëâœË:U¨rü¥èArp(ˆVñ¬¦¡|›ÚA²ÁÊ èÿ< ¢¡ŒÀ € `.À¡€H!AíÀ`²‰¢çèრ$´Šš†#”¦ÜŽB¢08Šã¨ÈbJ”fÀDQÔDStE]´ TÔEcE_$R”Eqô#œ†% &ѱ?tóC 7}î7ÿ²-¨@rK”I™K9q+d,,:±‰Èb0‡øâm t+“p¬rL¨r$Îr¦ÀCɺ<ÉrP±*Í3E*Z(´è!ÌÀ²ÁV+hŸ×n:ø‡­VeÛcP`Š8<Á <Áȼ\¸ø“?Q_çw†µ8B*øB.x†5OW¦r«ÇXƒ£ˆÕØž’asã’¸ï怅Y äÀ‰=…ÍV$‰Ñ-Ûƒû²¸C/UjB5D”SÇQi ™8Ô‘=^]ŸHD‘wC£yž–¦ã#wXFXE™€G™xâ²P™4k•ѳ¤é³`Ù´dÙ´º˜B¾X†-¡D+ÆV¯Iƒ­–ÓöÐ8K×X¢Ëþ“ûÚò€í¸æPüúû™ym—F‚í·~©ÇD´ <ôy\’T6‚×–œcØwØ”ÿ—wØw×#"/ŸõyŸu§–'ÿä–18ŒGÐŒáAp«$ ˜ÇXiјƒr’ùº†·LÌŒŒ€!”’AÛ&(”òl” GøYÃüYBZp‹1za(·ƒBÎsP€¨f’W@^à~Á.: ›X=«¡© K¬Zþ"Œ¡¢0Fz‚Mw,!äð ¥si à,£ ºèJI†€R 8ª-®UzÍnnÛn:Brš‡kó¯»ë~ °À 37¨7·?ÀŠ­ø@«ØH€Q™X$4á˜ûÈütÜÙ?ôÂEô‘G;2Øÿƒ#dW>Ø;äù#ÂúV†íB Ú„Ú¢à¨RÎFèÙîjÎs €a‡ÎÊ—ÎZ ˜¯öy¯!¤¯v'wšèzšA ’!¿€a$ "€™໯kº"Ì«xÝÀ< âÀä`ØÃæ€æÀ°!>r†a6Y@Õ–uÀ©ÈTÃ9‹Wòx™G7û—o˜nWõ“ü…7”!#ÍoÁ JöêVéð€a’rt¦ù™¹Ĺ-V % üF™´ëÆ‚ zà¨L ¦ªóK§[A@à @¡=Â»ÇÆ{™Ýƒ¾?±Ø,@šå€\€"”=”ÿ˜FØF J`¿YXm7b’%9ÊS‘‘fB!ö’=µÌ™¦‘•žIyžWÔ”8œÁ?9o_›;,‘K OHÜALœ`Ãøzm«¤ÒKuÄБÓõ"7ÇÄ®ûÂ’”Ap¡Ò+Ý@È­ÁÀÜø3X`˜yH@É—¼šØŠaÃpv*À금Q¤¿ú\^P@Äú@þz“J71e­³'AÀÇ5 `  Ò È!zÈ;rZ`rýÉK@]ÚÛrÉ‘ðØa|!Àï  , Öeݽoý¦þ;K YÑYGóÝÖIÿ‚ßwî†5$‡±hyxY þàÿ¨ž&GòµŠ]`+"ÀÒGÀ«ÎJ¢‡Ðˆ‡ü.€Ö±œúŠá¼åàÜ×Ö¡‰/’…)+˯´i™=(ÙÅ\WÙ‘¿\80tÌFD5‚Ì99wÁyW€ñ6Îëü€X4 CK¶Ï´„™“ñ£ˆí×ßqH^]> þ¹%+s«’aà»ÙÞ0ÞÎóD’ÊÏu¨zkñÛìXâ!H¤ÚÁ|!•ç€æ´A !ØÀ_±^´yWt~¼w¸xØò%üTüžAª~K¶ô§È‰Àÿ9“_‹ëðëå&ìor‡ŸI ÓÑ“¡i ÷v,ÙcÄÒ€8ºÎ“ä'y\—ZB™Z臡'Ùäa#ÊŒ¡vaØ¡âËáâ`†ÁX@õ!„ûý²bÀ/`@×ÉÿPÒnzÝ?~ÝHÃxdŒ¨ˆ+’!\Ìöàß¶hœ·$ÀpY)‚ìx %¼d;àI1¢Ä‰ݸˆ1ãjéAÑxÑ =éÑ«62#GŒVn,I‰‘^ +5H–¤ç˜É<{úü 4¨Ð¡D‹=Š4©Ò¥@‹sê´‡1Uh´cŠU©1Y»b¥F¬Ø°dÁþ8{–Þµl×ÿš4F®×¹t‘ƒˆ ^Þî<€— à x»KCpÂÈJ¨¶ƒp9’ KF1sD‹61J¡÷thzÂBû¥'¥Êjí¤ÔØA0/ë;vTCPó%=x¥‘™4]ºsGœ:ë?Ž<¹r¥íŠ\eMÏy»éËën­®|¬ö²jÑ®ýÞv'\¹ØË/½«9½úõìÓsEôïÏWÔ¨QͯoÐ÷§˜„‡€oðŒV=È<€@€ðÐÓŽi wÃÅ™Ga…^ˆáq×e˜Õvv‡Vxཇ&ŠwâQjt_M-’t_F-ÎxCŒ,ÎH#„¦È£‰üdBId‘?öxÿá†HõávÞ%Šä-I!zí]‰e–ï­Èe—^~¹Ó„TŽ©Ü/fžù‹1/ Àf›n¶iŒ™qCgvNI¦rJæ T“Ü=)"[$âÉgrè!„;ð4”Œ!“CD‘Â#ARä ÁBî&ÅCY®·å—¢Ž:j˜…ž:šf`@›/¬ù¦›qžyçH)ƒk®ºâjM¯¾þ l°Â ì5Æ‹ì±Ò,Ëì²{¢º“Ÿc¥[% -]èQÍCýEØ€’BTiCz%£¨¥Ÿ²*©î¾k“©Ù΋”ª¿ Àª«k²Ê*­¶Ùê/íÔZ'RÈŒp /ÌpÃ? qÃÏf+ÿ-YÔ:(½¦§(D{ü1E ­ *¼&Ÿ|=bjÌòOª“/¿ü¢°/¿þÎŒïÀµ¼°%D¼à1«I¡ðNR¸ÓiÄJ/­ðÄÐVl–wZ;^ËÚƒuÖZoÍu×^ 6×( ¯¼VûÄ•šôü˜&¿peW¼@Ï pÛýv“'·ÝkÇ]÷Üqý(—ÓöþhÀ4ãk¤¬êl§ÁÇ(ì3Ö<é”ÂR³Ó í1J´6„;&åtÑL/í4ªPƒ˜VµRží••$ß¾n»d߀ÖAâ¶ûp*ÓŽv\t¹7ÜÏm÷/Ço5·Ü;õ-7Õs•÷ßÚûd/›‰÷Ë=æ«iÒy¯÷Aæ½óQÈcIûîqŒDD ô‘ÌAÿDt:„!¬ öþ@Gý ar«‹XëNÿõº‹E)cÄÃÊ¡"‚ŒdŒŒ"y‘ˆqw%Ý¡ š°ÀüG@¬Õdwf«`Ëäô6Äå«MÛÉtÚá<Уm³•úÖש 2kR êÖ‡°°m­J{`¡"(5ÙQÐ…Z) D‚ Àt*Ñ D‚¿ „[•!EDh2œÁll£&Îǯ…T¤—™d¤V½@`Wy•1®ÒG5 Œ`;ʺÜ23*2"NäC$ÅkձЀI¸²XÀT‡yÀ3éÀfƒ‹Dã»j€6ª²¡# M²2 Iï(3 G-mÙ“[îD—º$J/y9”^Mj ÒÔŽÿW­I|7ÔY\ÆG0¤,ršfldž;ŒIr’v¹]"©™Sº+©\¥*í3GXžHyrkç,wÉ“sžð4‰ãiSÆ—;Õ©MÚO\æs :JAW:í$¡Í¤ÓÀè‚FΕ(D4zѬþH«WÅêVáñU°’ÌšdúèÔf7R£Ø®=ßÜh8Oj•¶.%ÓZ¨£šiqoÑ! ÜÆÐ?Nÿç^ѤjD"š0K\£±¨c Y±‚õ«aÅj–È:&³F²jx%Ê!’ƒDmª2—Ê )ݪq’Ê/€4±Jt¦¦=•^ÓtLÄåг’ÓS¡ºÇ†>t=»ù”e‹[\‰üg"ÉÍLs9Ú2Íj“³µ z¤Œì2d " ¢V=ª…‚DWÙÎ6–뜞öàv$ÀñäHñ­¯|ÝËΙ.O¿@ÒïÚdʽ‚l+@ßëäÇ_˜ä_ÊTæpÇ‹¥ç® ³T’î·Y] ¬ |Ï4F²„¤+±‰oª†¤ÄK0<"¤‘–”Ê$É Ò;á·üηÿ9¾¯|oÌßíÑ7¾ÿý/€{RPšùm‡¯ºá¬öH·¸ Vl’¦Oä¹ ÝhY(YþO/ƒ¹'aîò–—fžPxIÏ3ìè5nÎt®s1rzX42©F ¬áçмD ‘Â.2 Ûì 5p‡jò“›¼ðy 9HiHüçУ6•ž‚ŸU¼“Ã9OªŠr;Z€«¬MÉ~UOþ¾Åé+¿¬g.m¡5#©Í#Âð¨ÕÌái†ŠøLCBCéOû38ˆM²a@!zFÉrãìÐP`ÓKÀPòÐä‡Ò8ÈA±ÂPÿšLª˜‚_p· ,H}ÿõ›¨<뮕§·¨‰tÝ#^ Ê×ëŽË;õ€¾4ÄSðÀ¢&쉄jF~¹_dKqŒ×àâö©øÆW¨âÙgã¿xŒHŽ#ቺàHB ŒñW¼%™rObE3~eåž<ï¹Ïy~"€óHà!-)œ/hÉHʼnAH(#~Æ“J}EêæI9Ô¡Ž«c=ë[ïº×»~u­c=ìY?2Ëlç´éìBOÑÑÊö‰( ‘“H[#^Þ©¿tå&QÇ<ü>À ~ð„§G)ˆônüÝëf?;ª.±ÈÓ㔟¼¶ÿDî|H‚n&øº¡ÄЋ~ô]Ó»éARõžð¬'¼:ÿ*Ø©²¯ÀⱎyÇó©ò&‘¼åwâ{Èû¾÷À~ð{Oyã#ß.¹¿¦æŸÏù^S—åF§Ò鯯òž¸¾õ¬§ÇAˆ†Ø8¥ð…7‚à$ñø…‹8=5_öu_Äø_Å”‰åTÊÈKÉŒE¥ŒEuS¹— ; wÔuf”™6±™&’ô0ŽŸ š*9šjYš`“A2“ºÈ­9gð˜{@VdÂȈþÅ/ˆ¶Ù#¸‰!|é6Ž'#Žç¨žä¨œ}Èœ<‘‹sI—Ò©‚ÏY$‡žùÉ|Ñ¥›Ñ7p}9jö›Z26ç…^Š ªŽ¦Ÿì`ŸB`hgX¨ŸêYz9žýÉÿYžlx4Lø›Â-—)˜pØx)RIMÁÿù„^² ºˆ€ššT˜vêD%“èoÊ2ây!äi‘µe%ÈÐ-–™$–æ‚?ŠÂa„}ñ•w<%¦ôÀ2\î£=Q 5šv¥Àšiç–WÆ@õŒðT‰BåKµ> ¤)"¤B¤º‡w;@wxw˜’¥Ô%¼a21î°B¢b<€n|f50 ¤Á¥¦QªiêEu§£}¤`‚zHg ˆ@ñ¦?5 YsºŒÓx§c’§²§Žz ˆ«¹Ú%|† ¥ bîpÈ›†bQ„¼AXz Æšpuõ© ÒœŠx‹¤ÿZ$¦ `?Ç­Ýê­ßú­IQãJ®åj®çŠ®éz§³J!µÊvç¹""W&š&Grw¯8Âqûj#»úž±š®…P{—ìjîê›Â4ëQlê„/*uk®dr®-h°å°6È„ ñ—¢ÀФ}Á¢x±S§ŸË2*»ˆ…0– Œ@ñˆ1K³µƒ¡Cª¡Iƒê—ıˆ4 ðæ’ á˜Pç¢'«#wɲÔ´Eá²³ïÅïU<¶X›]q±Ø‘±lhwBJ{R;Y®ÕU¶Pë>î³c=³D¦cCv³[[]+”ð*¶iÙ‚äZpzÛYr»t ÿrq… ¶©õ.PWÒú¢AµÈ0µÜÄ·<±0f;®Œ—{¹‹*~›9›M;[¤}Ë„ '‘r˜áu€H駨œ° Ì€¸(•H|~¡?¢¸`;µ‚ƒ=À»C †PK–Tj#S8†7Ëó6¡[•û“ 8A²~Ó_Ð#d|C½¼k=i²¼n#¾6g7³¾Œ½>á»?VdCfdí;Kåˆïëc³ùüY1þYt|:º¤(ˆ;˜á°Áù€ÌÀ *à/“¥ÀË@»@âpc5ñ#¼À ˆk»0Ú»”8Ö{@¢`¶H¼z›V›_8Öé8½E3½³¸_ד½øµC?eoó*nã½iC_6)=îôÃýÕQ,lë+d5»G|ÂB¿±ivœ›ÿ€{t…›;ï2Á?¢ 7oc(V €Á?Ò < "°Š»ËÁÙr³DlA„“ö;6ì¼&ÁÆgÅÈ!Å6Ç'‚žÌ $ € ¸@Æ?’ ¸[6{+°ùYÇ-sÇÇ‘Çéw%„´cƒJxàÉž ˜ Ê£Œ Ð  Áx«vŠªo|µâúÈØ®š°™ékÄÚ7›“l•l¤Á±‘ aÀཚšl²º¯Ï Íê(‰þ¶ª¸fÍlë¶0œµCÉLQ‰Cõ£Ò8Ë“ÈNå̈Û|¸ìÁ÷¥cóµc*l(¼L«žË›œèµ€á—œEÿˆ²(pˆÌ¿™´6#¡¥qh³5ÍuÎâTBܾËó¶/ØÍEьӘ¿ôOrÚï Ñï›ÍÙ©¸œ¶íÃÎØ\µ ½ÆáËuÌ¢KÅjW&Gb¨1Ó g‰:-+M-Wúˆ­C­‡,tÐa¬¦Ó)|†ÆïÂr<Í‚P ->=@VúÒî±;wGrÙF8m=ܶI,Äç¼¶ö›¼L!Õ¼Øcî;‹mÒo-ÏéËDÕ^aÕ#uÙ•I‡áB@!¥R`)àâE) ¨B¸$Ðw‹zµìÎûU<åLÕ]ÒzÙÖ¯LÖp,¿šÙÉÿÉÀ§F3Q€[ksjÀµjQ€//;A7¬UÉD7p±&P¥Cíà&ÀÅw=Y×KÏgeÏ~YItéI?»¤Ñ1È€4HÃpÅ&ÿÜa’-ÍÇA~)]!M¹DÁ&ï¶C:$s2·QpÞ¾eRv2§C¹-j¢Fky#l]ñŽY<¸sø1«s'‡.lÚ­Êg¹Ž·àj…Þ|’×]±×Ü$ÔDmát†àË™·àí´N/Þ!ü]‘Žwá%nâ'Žâ)®â+^âåÊâ/®‡.ã3Nªø«úÛ›±ªã¶ù´VÓã;¾ßù»¡û äEÉg -?näÄ-ä:«†Eþ½äQ>†èÊ#T.å&2áW®åO° Ë]~×[‘Mþ¹O¾ÇbŽæSæ]žæO#â Ûæq.çsžyd^ÏAIçy®ç{>·ÿonæ|è.èUíçÝx惎艾çY®èîèbÎè.链ã‘Né—Žé¶ié™Îé^~›îé¡.êê£nê§NE¥Žê«ÎêUèzè­.ë³îævnÜxNë¹®ëóêD¾ë¿ìËAˆÞë9ìÇŽìXá &Á_QìÇìÑ.í<1섈 oôÐ J¡êÓîí§n Ún&îÔÎ$ÏŽëßÎî»n ë@ëp í€Õ „Ø ¹Àíê íîï²>ëà ½° ·ÀF$]p ·Ð ¾à µ˜î¶Þßs̨yÖ-6P>a< i&‘gÿï%¿ãiÆpð ßû.ñ#^®1#<50󿕪iûa!_¾ò;¡i$oòC_¡¬’ò]PeK‘Ç÷1óè†ñOó:ÀŒêÖ 6Pñ¡¨"¿ñLÿñ-bfD/ö‘è6¿ š`â«ôÿüåUàõ=?ó??R0\¿íÎÚ¼zÇd¿v=±ÖE‘¼{/³voví ø²éÐ>èæ\\lœCÎÞòp€–]NÿôEq0,Ïì+›nÙlËøw)¿‹OÃÞ=½¥ÎkmÎç|ÖŸ¿ÄûHøtþÂÎG‘Ç5ßh^o:ðñÀ:<°ñ¢ ð Hjûá:PüÈ` Ÿˆoµm›ø¡}úšm›ÔïúÚÄøxø×_¿ÔoÙ5«Äåç)ìýu~ãCnì7Oó›ÏñO÷=a -b2aô$5èÕH6²dkØ ×ÐáCˆ%F±¢Å†3n䨑^EÿC†œXÒäI”)U®4©‘äË_  ’bL‰0/ŽtÙѦ̛>q²$ZÔèQ¤HzLÚ4%5zP¥F¥ õÇÕ«ô~h庵¡1z`Y ¡ÅŠ0jÔà‘ kVA/!=m YÛ°/2…zIqçTfMšCEÖ\ܳqbÄ#76\ÙòeÅ‘u•Œ‘rÆÉ û„Ì“2IÑKE2ÅÜÚõë‰;G#%’`A€$Hà.Y½𦗀^ž<Ûº!gNoÛĩѫjźÕzW‡`ŪL»¶ï a/‰ú¤yòéÕ¯gŸsökôíåÏ'Ÿ™;!@„oø;Y]ã4$oãÀ!ÀãŒH:©Ã »ë¾ ‹¥c¼«ú2ÔpC;ôðCCL?þˆ:DÁ§k°ºëZÌnBc”qFk´ñFElP:!äJÂírrH"‹4òH$ÛÛqº]ôj “”rJ*«´òÊ—œ* ;aolserver4-4.5.1/docs/intro/tcl2k/html/img047.gif0000644000175000017500000002647407363640503021216 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nPx'âÐr/Ľ|ÿæåè·aᎇ+8qb“‹Q>–xx2äÁn3k. ·)-¹cuÚjßãʘ–Vš1ëÆ­M§F˜2àÙ±]_t›6FÞµ ÷ÎýZ·ðÚ§‡#'~qôÅÁ§×¹=yÆåG›_ÀÙ†_u¦uMÙ…VV‚F(á„VÈÒ‚5‰¥]]iì™’ò9h¦ÅÎÙ)¯¼ú Õ¨^²XëGë’ëî»ð6dî†)Ækï½øæÒ¼(r¨ï¿ f‰k…¿èÎjðÂÕ ÌðÃÿ! ,Äÿ¶ÉÅg¬ñÆÈmR°¾Wœ’Ä]*,òɦmœ1*·ìñ_¦¡,óI$K•îÌàÅì&š»"gXs1‡2}½±Hçç[{JW Ûr¸¼³y3×LÖÍ m”ÖÁºìõÅ·½Ì.­]qÝ¢Õ¢™œuÙÔ±ì²Û_c<¬Ù9CHwc9ç5.dι‹v½'Ó-”àCiísÐÍ-Ì„ˆ7ÐŒû×7b“— ªg>Ú¬¶ÁëÍtÈ‚;¼á}ý&%Á?ÿÌW⤛ù®ûx˜ŠéE‘èWµ>xã®·úç‹é>^å°_Ž—š£,ðƒ=iŒÜâ‡÷Áo/î“ÛI<! b g§B̪ÈBÎ0„ØãT´`x0ü™èWûË×Þre¾ÝÎEtÚú@ȼÜ%q{ô^Úþµº†Ñð@0 aH«!V±[N ¡ˆ?N‘‡DœÑ˜¶Â/z(QwÑâBð!1uÁÃÛê" ÔÖ=­R¬ãO¡ŽyRœ õªmsO÷äмÍPyCꓚÔ_îQªÊL5Ñú×d6ž‰ëê`¯iÓç¹ê­p+œèI%³ât©$½,>q©ÕóEÖ*ý¬hG«¯Ð’ö´¨­1²‡†”¡!ˆp26bÚ”A ÙE®à„À%hHpSKÜâfÄw¸ÀÀ’Úö6"n €[‚WLHŽê« óÂÕUKÕwmÜáI<® 0«ŽeoB(Œq4£uÎÈ9L`˜¾îDº0Ý8d !(9ð±<ÄÖpÈJ uà#?pH°ÑÌeRWœ½ðC&€‰]0ÁL˜À9ðaƒUL ÀÇ2ð‘b À! øPC0΀·a lH|5Ìãò¥ýª ‡Ld“ç,²’—Ì–3ùÉPFÿŠ“£Lå*ûdÊ—±å_'ÓÊÛÝj¤â*Ðw¨¬%)i|ªæ™Ïꚨ†Ñ²jԀƅŸ1›É=&}¢•I‚åÿÝçÎe–ÒŸÝÓX›.-Тèöc k)G­E¤¤!7/O2E¬ôž[ÒçJš`ËÜô;-êR›:#¤>µªWýT³úÕ¦v5¬gmeYN˨L"ñºUõ¤ç׸Nl§èDl±Jn­wæM¤&‹ìtÊGÍëÖâxÍË@ÕRËŒ"3¥%R_ §PË£œªuìnYúœ>²9Ïx–1-ûOeUjfÉÍ3xÓÞø†Vߪ¹íÎz\ËÆa÷],e÷»ŸÙÊ÷›ë ®¨lµ”¬"Ľlo‰+ËâÍâ®À!ÅomAN)êÎhiMrZÛš4òASž¹íp7×›h+øN»Œ'h<9`íµ™ .W–÷5@ºîveonn|—¼"'ÇaÝô-ó¦ëZ¸Eµ§ÜT¯SJ«R,ú¼Z̆ýÁ Ãþ4¾ãƒüÂð‘u¼#ëýξ3 ”ÁÿÝÖÖ¿£ãßÈaõœRx×ßý#Ê^†¡4zÙµOÍÇIò÷Xã—0 ´BÒW|ßT=û×d€¹‡ý§ ¨QUw%ŸäYh+H9ôã{*3|âd 8;îçTQè|á÷€Zqt”#·-H{B£Goódƒ.è€uEFÈ€Óg<Õyk³ƒ’!HzF=&Qüd„Ú|IKX~´T€×Õ&­ƒ>çclÔ#†±åDBØö÷FÂ'>Zd…pôy=¨hWèu¹<`´kß2‡t/k("T˜†’d?0hTdøáWˆÐC„¨‚øY‚ÈL÷–XòG‰"¡‡Ä·‡#¸oª3{£õ‡¢Ç‚‰¢ŠCŠ"èàGð‚¡hвwˆêõQ®ô¬èŠ¡è8˜IȧS2¥ˆIB‹´“‹´µ‹IFŒ¤Ñp?Hu{Gqƒøƒ (ª‹v3Z,t7C—~È(ÿԸ짤‡‹•ø(gGƒJÖÁ—4(µRòÆRíøŽêhRE3olVRU·À8:¨ÈCèèÑxwþ´óçRT…dìæXK½HÔWULXrÎ{‰ýh\™ZiŽ)Xë–P)‘íiå…(¥hŒù‘îÈŽ*©R*Åfòxl)É’×êh*é’)“ð(“6yuõg’ù‘B9S9”FI…p!ð€ð ”Ö:@]ØPÓ5]1]ôeMð( ô•Ã…ÔU_j) ‘÷u_G9—XQÀà@`ðpAe•™õ\Š÷eˆéÓ€ ©  &°àºP¡@˜ø0Àp‰M—!` lù[rI{èG^ÝäU†pLY„u«™WgÈNÌX4Só<ùÄCÒ³©–309@— 0E9œÆy6‚Ʌǹœ SœÌùœ²”œvÔi/ÎYØY×™ÜéÛÙà‰ÿŽ˜ƒžt„žø4hPBˆí²kç¹E^(’ŸžZŽõˆØ†AË„*«±PñùT{ï©hô‰jÒé}ùYfš6ŸÆqhç –6if¶žÚX3T“E‡hˆÆh…Vi§¡ž:n€¶ö9h *Œ :i9)¡Zn‰¡`X¡ñ¶fÚÆeä˜x”–lX4$6УТ¢W¢ ú $É)—£> ¡!ºf‹ò¢=£g:“/Ú£g8¥úk2*¥Þøé˜‘YV nu B„‰†¦bš ^š¦lú*dÚ¦pê"k§t sZ§xjPãÉ‹yÚ§r§~¨#¨‚Z¨A¨†š¨º§úÇX6µ§+®$u’=>)@>JS‚£W÷Ÿ4ÉJèÊÙƒçénýæŒL—q\GW]Çxh÷pû!&àÒ9KGoƒB«¯j«T‡g·i‡<“uôf$´*©½Êu_vqþy(¸êuU—uß(¬CŠQ؇·uÜ6¬õv,çæmšÈq‹f‰¼:u º8Ì ®­:m;g8²ºV×:m g¢¦:7|çt½–««vå*¥ GN)r|ºA;†Ÿ—G—bu5W…9—­f'-ª~ç&¯¶)®6Ç®¾–¯sæ¬r¶(ØvÓb‰S"¢ú±ä±È:uݦxò­KˆÊœfJ>*ëDÿÖ²ŠZ³A³¬‚¦Ë©†%X‚§4 XÐfËjquèI´øš¬•Úªöjh««ØH¤¸É´Øj³:²P«¢:Y-+,ÚÒrï&q;µ)K¯õÊJñ:­ëqZ²MËtûZ©b ±s‰³å6+W ÇkØ ©i{x±*VAçr³é°JB°|²Û²Ål‚[ªqصp…·Jg³Ãi¹˜k³š»¹ŠÚ¹…Z¸<¹¢'k“8¤û}ºyªJ‚ʺxŠ]XwVƒE¹¬ŠZ°ë§1û…p÷¦‰Z‚&ø>»N¦ nnfµUxXl细º{'Ô{¾g»xçºA꼡ë5À«½NK@Ôc¹KB˜|Ù·‰X8³Ø[³ùG›¸Ô;TáÛ0˜u¼;•·2ó¾¥ê?>xzÌ Uuõ/ñ[ øKŒ¬}NH¤½€!6(€ÿÃ?ÿɨ'M<†'$¼)4½ò Žº'…r„‡6ƒ:RÀ5h; Üø‡ùØ´ª}æ‹Â·›#$,FŒUŠ£®Ç+…ÿ!EòÂÉȈ82Ã1XÃ!y$Ö‹ˆ¢KveOæ¦N;,Â2œ¾ ©V§™­Vx¸©¸ˆØŠ<ìÃÒÃA,ÅMX¾üÇ¥·¸Šÿ‡ÄF¥MÆÛ¬—xÆ<"Æœs~?ŽOt‘ELÄ` Å×£MÆÄ¼ Äq,ÁAyŠf»ÊǹÆ[,€i¨=Y*[8Bq'Ü·‹Ç’hCuè½HlÌy¦È0"Äž,ƒœˆXÕÀp¼Ê˜Ün^<„‚\Êrl~OHƱ,ˬÕ<Ë4,ŽÞ›SÛ¼¿çƃܯªèÁ?,ª¼ÌíÛÊ Ì#DB•6 <Ì,¦œÅ%<—¤‹ €XL¼l@ÆL~”œÌz|ȃh‹hṳ̈üÅÝì©Zªé|/:Û}/Î] Í<¸ÎrZËT¤Ì´>À*£ÄìÀ¹ÌνlÎ i…<Å BêÅ˰”2Ö¼2íã6Àû‚dôÐy•† Ð:Ì|ª íÁÂÜ2ÉqaÏ 8Ï£¬ŸîlšZaæ%ŒùüÑŸ Ñ"-”Sk^Ÿlã& 3ÔèÿKÈ?M./{GšÏ‹7Ý]1¼M݈缂«dE*¬¥<{°WÝÇßìEÒÖ›ì‡]*U,ÎßLS]­­mÍJaä³°LÓð„Èú³J”Í §ÔÙ3{ #S]Ö»«Ð kaΖžäÌ×F±Í×ÕO)†üÌ|²Ø¾þYÓIÕY5äT:ÙÈØÂ(Ú(ãØ}Ä XX©×,ö«¶†½ÐÞöÈ…·¶.90MZ¦]ѾlrimQ»m׊GŒûÀHív¨½ifxÖþÜÛ) z¿M§Ë‰ã|ÜÅÜ0”Üý¬Ö“±ï×hÃmtÖýܱÝ!‚;ØW˜rˆ´Ï‡Ë³¦ÝѨ=‡Ãyû{L€mÅfMzëýÞG)ßÃÕ ÞsÍ»·üjÎÐZÇÚmìMˆÕ‰>ˆT­]ºŠ Q©ÇUE œdÆÕ©²àÇ™à^e¨˜Þ¤%â49^ÙdHi•K-¹ ãªëÌï,ÏÔ‰â.xÐêùØ×ڌǡóÕ)=Ýmœ8nÜb½ÁÿøFÇ}©,¼|OÿväMã€ÙÍìÖÑgâ#lÞí.„‰+lÄZn0R¾g`ÞÝí6Ø2UæÕæ%Í8c.2lî¹-Lß›ª±àåÐ=Ò­¾ÞWLw=á^¨ÉN­çõìÓ}®¨qnãkýå®Is^¦÷91¹Ž£[“©[™Ž¤zkã6íw\njª]h!U¤Oîå&ŒRŒ¥âÒ›.ξͷè|ê¥V޲åºyÛǃèÈ k…ýÆOÌ~ܧKƒN刓•ˆV%EÅòÔŽíDÞ[î×½>—·Ղ­ëÝÃë÷ìJ\VÉÎà(«vKwx´KI`OÊèP,¾¿Mèü¿KÁšMžtÛáéõnä´ižïüN‘ûÞïõ.q ¡ ‡ú­…x.  Ï)íÛžðùÎw°uð tð Oñ1]" éð¨Ð•iéX@R"€_ 'ê ]oœ pÉÅ— À !ÿ?ïÿú•ôÅ•+¿"w³QØ}ë S @@  /ôM„™ Óõ[G?õ`ô%ð î{ìÌ6‚Wq­©ö«:Š©›YÅÄÆÂ‰ÕÛêоՉ¬òÌ òÐ\µÌ•&JÀ•õñ ¸Ðº`Ø`;` ¤` ø@&\Øój¹¦úø3-÷7…š§¯qoŸw¯ÉD;ƒ]ç…LDëÇ©ìÇñ¬ƒ ÔðaLà5 #)æ3VcAj Ö•¥™ómŠ€IpI@0#  "6¬0Þ#€hp½ 0f4v¾ÿ cïüîæÒ/ ‘èï_ÿoáCU5ÿÓnÿüOA Ÿ@‚ ,’0!¾" 6ćo“Ĉ-^ĘQãFŽ=~RäH’%MžD™RåJ–-]¾„SæÌŒmd¨°á·'N¤TèP¢EEšTéR¦Lo>Í©°'ψ?›^ÅšUëV®]½~Ý õ¦Nže}R›VíZ¶mݾ…;R,N²SVEWï^¾}ýþ¼qnÁºf!RXñbÆ?f9Ø`a»xCÆœYófÎn%#Ôi÷°ÕÎ¥MŸFúåç¨ Ÿ½¬ZölÚµK³¦lÖ²mÞ½}ÿÖ‹;ôëÝÀG žü¨p©Ä+‡]út¹8¡æîYü*ðÞúøÅÿÌ]W~óûzöìñ}§ÙÞ=Fø#ë¿Oò¾Gùõ÷ïoi=˜Ìè>Ì<?2ïµÑòê@üÀ›é@ Uº°£ +²Âd©½—6üÐÃA\0Åš¬c;ªÒJBÿ.œ?#úEs¯?E¤ïÆ‹HœÑG9rÈ-*RIq$>LrBñ¦œÐI&¯LpI9kP4ØŠ’Ñ@¬Ê#·D³M7ÙDrÍ#ŒSÃ4Õ„3Ï:m¤0JùÔD3Î7÷Ì’JBEòP<õ´rG3×ü²0#-F!|4HHÕrQ?MÌ”ON5ýèÉN µT?åÓ.ósUNX«ÿd•ÑXIT³IÑ«4ÂKWÕÈT7 µÖEQeÈc5"ÙO{¼sÙ[O-‘ÚPíOQj—uXasÍlWÝ`ôuÓi‘‰Æ`¹í¶MCݰYSµ”×HUeÝ”ÛyÏ%–V½å´Yp7;rƒ*sÎuKJ8OcQå·]Q™•ö×zÿ]xÔ€_uWãm?æ7âÁdq¬áx…a‹­uuØdqm÷^A_FTÛî“cs£E—ÐgUtßX¦¿™i^òY%G–´dºN·W•wÆùæh±¬iŽ©tÞR½|Væ¯ó-4äšNlóõ²Q­Å¶šl¦ÿ*øE©ÇãY/µç渺ïJ:9¬¸oÃMûûÁØg¼qÇeJ|ÌÇ'§¼r“"×ÎrÍ7ç<"Ìïúµž—¾zë³¢þzí·7*{î¿&ïÃ'¿ü˃Ÿlx»YŸ-ɼ-íêý-]PþðÇoÊ^¹Srÿ ‰æŠý D?¸ Îh6`Hüõ§ ðD_S ÿƒ?­8al“ z¸-.7²àAÒ¿é-!lšd\¸â!(ƒÒTÛÖæ&µe P\ȵîì°Q¢“ cX¤½ý0P 4bÎΦ,!ú°U;K`¡åþÊNFaÿ¨X£**±†"Úa°öæÄb} iÊd"eÙgƒ¼"°ˆD9¾kiœýþÿ%Â<öŽ~ôsfÂWͱ²âcº h´:òІü£ éA‘„QTU$ïHIG^+ä_yG?&ËQ›Ü ·þÄD²IÄ!E™HKÞk>Ö+ëø­Yö‹Yƒl$—xÈÉRJr¬å øÊIêðˆ‚,¢) GPb(„Ô¤w™Ê7>±’’L&-}É3+p›zÄ`Ï9B ‚0PÁä‰YÌ÷`2k¾ '<çÈÉuò±œ¤„dRª¹|µKRdåíuC-J)“ u(…(ÍxB3‡Ïœ3 Æ66l^ü"D¥øDg2Ôf€|(Ö„iNý­ÔŸ µX/‘2P*óq…õü[n:9šÖ´1dÔÏ ùM¯ì”§glƒ$çS¦6•#=ujT¿ÿÕÒ~ʱªTùBÕÎdUeá¤Í%wêU­ª„«6*Sæi›«¥õ›eý$RW¨¸¯8“•[übB“ÈÒâÕL}Œe+!*Òµe‘†²¤Z^#ªØaq£‹=›4÷ªI¸®H…êc!ûúV{‚õœ{àû˜iXÀ>Sœ­>iÙôºô´/Eg1YûK”Ö •ÉY}ÅÙNîÓ´Žü»é[ÏšVŒ¬ âAyÜ-5¹ô$ngE:Û·ŽVg2Å­`äŠYºÆR©}¨ QùÚокÆÅhxˆL–áÓ½Ò}­F+ßEF×¾Ù=‰nË•\½Úw¤°/ea[K‰*³_-)̦K^7³À|ýaƒí ÙÑ6˜ÁÙÕï_È:$üvX ÛMcÔ4»™ ØÃ'ˆÏ#â5¢ØÅºËð‹e¬¹ÏØÆ«ñul¸ïØÇ#ëñ…¬:+5sCNÍœªz¼ #ùƒÄ²)“‹,¦#;9Ê­:Upje‘4™Ë:e}6YO-—Ù-n ÿ—¿¼¶­rS¦ÔˆÝü%Ï9&j¶smZæIù²!&žœól’–ºÄó#݆QœB«ÑÈ ³»¦X=<Û›Àt¦5½iNÿhhކôsOНÒsÖ§5ÍžOç Ôœ;µ›¿óéKÏúÒªÆõ«CÄ!Eg©O>›Ÿ£{×X¯ÙÖµæÎ§qëüyqËR*›C#h]‹ÙÔpVã G´les{ÓÝŒNµ-Wì/ºÐ¥Ö¶VÈî>ÇGdžm™Íëç Sܼ¾öŸWè³%uÞòIîψ’ùÝóåè¤'­ÕuËz؆¸Àý½”†³Õàþ¼ƒm¸‡:+ZŽ6pùün+vØf1å@^p’G›¨àê8Z•èëa¨NfVPÅ'.“˜ï\»ú62èdn¢}¢4º¨·žO7éOWúîPÎo˜ƒ¥édò6·=ýê«»Û%]µqtž°ó¯/Ǧu­³¾j³óŨ0…úÓ­í·©¯¯ßÔ)û¿Ïžl¾ó}í™wÞ=.ñgïÈë#·ÿ]Ý3{÷éžÐg×úß1 îÊfÞŸ"Øåtœ±c滆GŠãyn/É·º„ KrË•²y±+¾»‘2#§vµˆÊöQŒ¼œwsÏ=ñ@§²ÐÉc{ܧE÷#Ï8áÓe¸ó¾è¾÷Mç!CüåŸ+?¸êŒî¥_™ú?ÝgÆKçû•·úêå¶çŸþúò—7æ.?Ö‹}s]ê—Î_ªô«Ýg i ¸Ì»¸Éš½úû½ûã®üS‘ýãþ3$í =èë 飳š¿ýa¿ð â? \ŒËƒ6 l7Ä‹>×cÀù¼Ì9,+>¬ ·«¾l9h+Aõ°@©ÿ¿lsµ¢Ó“A¬pÀ]C¿Ü3Aî ´ œ@1ÛÀä¡,B!Ô°#¼ÂÂ{Á²CÀìÁ”ûAR¡")ü¬Â!,ªÔÀ Áš{8DÃ&TÁ*« ´B4\C2Ô›¼’$\ÂE¤ 'ü)DÌÁ>\ÄïšÁ'µHÅŽ=8DÁ œCáÃ;ä°Øc ¼ àJCR<3K$Š.TÅ/¤º0ü:ßÓÅF< PÓ2y<[d3\<l4Æ Œ: 4B‘LG޼Éc5dó»,ÎfDÊg\¼h|Í Ù ÁÚC.Ä‘Óì4á¼L²”Î×Ó¿àüJÂy¹Q L’œIË„NÌ Ï¬œ”OâŒÁÑ[ËýjÉäs.'šÏþä<Ö,¿k-rBG"ÍÐÊG¢´:ì\ÂõSÐ|cPò 7 ]2oZO½„@Ž6ãÇf;4‚ÿÐ =Чò”Ð\Q,£Æ5G•øœN×t»¤Û¸€rÊ£»Nu¼˜a²Q2¡OÕð˶ˆÑ 5:S²”ûÔ³"²% uÄ%ÕÉèäÉŪœEÿT¤&U&wü%(¥¨þ4Ó3½¥»S/…2Õ‹$]L7u#0=š©yJ¿<)R ªI9í 8ÕFõDC‹É$Q.µÉ~ôS¯ÔêÔ- ÔTSzÄ®õŠ›J ËG½Ñ õÁÖ9Q# IeÒ#DX¤Q†L‘FÕ3ÊÄ£ÛŠ¹O5>+-G\ÔÆQUŽ›¹ʾz„QR­LMŸ[mŸAM¸IEµ„U©¸÷bÕÚVË#Öì3³ð6B“Õ¦¤Éi̸7„žgF›sÌJ¼°Î)QœÕZÅBz4äðVTŸ-„´Ô™kµ>Õ°\×ähWŸ+ FDWKQ×ùW#%SüäSuDÁ·€õÔÞ£",ÔPU§ÚײrÈ¢œXÞÊØ¦ªXæsØ ÅV°$ÇSÅ0†M…eÌcuW’ÕØ;DYÊÿéX©ºØ‘dY•Y‹Ù®rØI]S¨ëÙƒU í°œ½2¶âÙÉT(LV‚|YÆ!ÚôT½¦Á£eHªeU©§G>ÃZ–´Ú\œTúìÚ¬5ÙÔCÇêµD×ÓXǯ}Ò;­Ï!ÓÚÝÄ”g#¹S,¸±­Ò‚µS*[$›Ûç´Ùy%)¸}[¿Y' \ï\ÚE>$ƨE@DµFûØ«ÓÛYÜ­Ü4¸[¢£‹Ã¹»ýÜÏÍUѿЂ¿t?ÛÛd̳ÍuTHÕ ïƒWŒ Í››YQÃ>4s¼Ì¥Ù%LÂÝÖšƒLz;>½óµÆe^‰ª²=Žt‚B•ÝÂÛjÖÔÙš¢L7á =GÜãRyÃ>EßÈüÌi ¢L]=š]_òáÞºdIÁ ª‚}DàýOOùmXT¸UMûåM“yO¥ ·D™9XéÜwR]aWš3'|_^8êWšßœ’ÄX`ƒ^ã0Õó=^Ó-Þ•sL×¥¹ F`iÕÂ^Þ;!dÄCÅØèyßåq+Ñ»”³u'_u±Fž[ öĦÝàÙÿðaþµ¶jmaµÀ"6O¾UË;âª-¹ÃáÒ]Û,üÛ…b^-Yü…ÏØ<œ®Ø ¢¿æ™b~-c~µ,NC6f\õëâùMÖYÍ4ö¹5vÑÇU 'ŽŒ†cå5QÃEÏš¥X@äcdQíóã-îKDNdèø-Ö-Ýÿ€`ðõÑÙÁãðÁa®ÝME¶@I»®êåÞÙdðÁau]âuåafh à§`³Œä<±TþžF†ßÎ’™xJa]}Eï¥7òÅÃK)xÛS»ÍÚ+Ìšjgw¾ÙfœdF‰‰¶hl~éÙ›ÍáVMÿUHþ±6^ÒåV†æ…›` ?}¿ju?ýìÞCšVVà+Va™.f^á“#hÕ1+–%6)ÄŠe¦V./“~eÇe[ÃÄRÄüMf>DÓhÎñÝ8l§Ü½A=r`v%Wޏ”VÃ+uÏ,Í_$óLjséåMèJ¦ëæeϘn`g _}¾.‡ÆÁÈeá©e¡d?þÝ\&i«ÞÄ‹–굦êeìɦ›Å¦ìËvËÆì͆‹¬ælŸóìÏ>±x¨o¨Ò.‰Ðmk„ˆ@†üÒìՖ픇ˆà|ø Øx¨F Õžm§r‡‹È|Hˆ€h|èûƒ‹‡ÜŠíà–n‘¸ƒbÀ‡ae€[ƒlÀ‡E0„ߎn“˜‡éžl{x‡m0†GP„C„=؃ €0BPGˆ„dèÞfئ†@À0 ‡Œ .Àˆ(ˆ(À‡0oã„=ÐùK€í ®j*(/P‡Šwp‹€(sH…Š@‡/RÀ‡¯·ð ×6x?ˆoƒ Ѐóñ›0…‡ñ‹Xò°h(iÈY ˆ ¯ˆÈ‚%Wñ'qkðqT£„I˜ƒ8À€¨€˜·ÿÂ/ p€ñQhrxbz–\%㯮yê>’nÆšvÒ$DôsÍAŒN?¥=‰K`9tP£ ]¨X€…'/ñ‰P…~5¹œ¤ÀÙT/Gä*~ÅžùäVwY-$"iNEâ蹕>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx!âÍ«—ïÆ½\q/€¾‡&LÒðCÆn#KžLy(ܦ´äŽÕi—%äÇ~f¼ØoDÃ?ƒN|±4ëÀ¡M·Fýztì׊o¯>­{wåßÀƒŸ¼¼T3Ý„WÒF-‘ôrÓÎã£=]¶jÞÏYGO-»pvÜÕŸÃÿ?žâ÷ò«© _Ͼ}Dâ4o.ë¾¾ýûøó¯‡_Sìñº<é'à€h`Pü…eÓfÈxàƒF(á„ %˜™ó%Gá†vè¡dÊG}[©'àr¼eÔŠä!]‹'ñµ¢E3~øSÌõe£C!b8¢†(¡è‘tçU—âm(Zwv¢Á˜ÛDyɈ[l°5—ãŒ5>i¤ŽYæ&Ý–8r“R¦g¢•_꘢š/޹¥–ZvWf•Þ¹&œé¹HÝŠQj—Ý›Hõ¸à$îÙ’W!j袆 zS†2ÊQ—F嘥’fzŸ£P ¤U|‚7§—BBii›€¦:Þ”ªJ§›xš?iixj†—dm~Êy˜®xJ‰©¦ÀZÅé kì±È;,ƒ&ëì³ÐR¸¬§‘FkíµØ 7-¤Ùråd·“} ®QÿÛþXí¸H‰‹.[ꮋ fð^8(·î…c½Àµ‹oOåJõé¾!ýªÀ”éK°Jý’õïÁuŠdpWSÚ˜yéµ*©èåË0¹ñb&¢¿çnzê—¯Îzåÿ‡+þãW_Zä’¿Ž¹ëºþ9ê›?9ê ûñš'¯<ð¢·î<óÌë®yô½Sÿzì²W˜v|k[-™Ûàc„}ºÒ‹n=ë¼W_þú¡Ÿ¾û§Ã_úø²ÓþýËà Œ–ü¤§ÿ>û  êRw>ÿíËJìG¸Áä~•jß^<‡@а|Ô‹Þð”'@ä©î‚Dàçç@%%FQc [x«üån€ð áü*ØÁ¶Ï‚#aÿhè¹Áð­h®9áÄN¨?em¯?ó2×÷XÈBl€Üû–“9ÚðŠPdŸq@'N…&c¢c\æÅž6$`y?è$ à?ØEçˆ z”Ŧ8¶ÎæÃ¢ ¯'G@ÂΚ³£IÿÀh­2©‹ˆ ž'IÉJZò’˜d¡"KÂÈq9’F å GIÊRön“$é$À>©Q®oަŒ¥,kÈJ©©²dŒ$,×8Ë^úr”µ¤Ù-½VÄæ ò(ÁŒÙ0³§¿dšÑn´²Õ®^ä=µÇ™%[æ1ïuL™u3$Úü&”Ä9lŠ,œä„&Q„v4¢±³bíUÓÞ9OuêížøœÛ:ÓÙtòsoÿÔZ@1âÏô Â£¼ôÈ6„:ô¡ÂRhÕVÑŠZÔ"ÄpÈR†† Â!ÈØHAC-Dd!¸‚CJ” !/½¨LÇe‡;\``‰6Y*‚—–À¥%x{ô™¬«º Wð„ÕÝ>#2:Íg-Ò§øÆiO¼,JVM „1ŽfÌl¤ø8‡ L àƒ¥.H~š‡L!%0>VÀƒ‡˜ÀYB D |„à‰6¢ö—™Ž¤Œæ´Ö0± & 8>l°Š ´bøX>0K8¤jÆðñÙ6¬ «aWËÚÔJ´{m­lgûµ×&±¡´Í­ngg[†zo·ÀÍÿ­jƒKÜ÷/a*êªÎ˜VµÊ7¦jWsÅÃo¡Ti¢U©¼¤§êJL<Å…Öq5rèp1Ðõ.tÏû8u¹&ºÅÄ{Û‹¦hfŒ¾Þ‰ox94Þ¿­w¨úݯ€yÔÛNÑkÀ>hÌ`¯-¸ÁFÙƒ#LáƒMX%”š•¯Xe&:!©©§:Ó«vcÂÒ`·OiÂR–P,bgwTð%¢Äde§\­xVíe•’fü%cÌE\ºî¨TÓ¤ë˜JFÚñr=œØ kUDZ"yÄd1ëÔJ©EnXÆ|+$÷ Æè­q”ík¥ôʘªUB ²òÿ›<0ÕÈ˦q¨é!îö½4[B·a¤ä¥ŸkwË{n†Xœ ¯ùŠ·Ëùe1Šì‡¯:Äg^ñζìunöÛ?ø§?£èGOÁÔ—þ•‡_}·‘t1"®|Gròò 4E⟗åŸþ ÓÞû?^Þ°áO5×f2ç‹¶·aß´ÿí G@Æ—6š—|Æru—ê§•‡}ï‡r¯·pÝò}€m´€˜­3€pQ€co2c¸§;ä;Çãw؇X"hz$ƒê§‚×ÿ‚šRp^‡yˆ|hu0Cƒ“¢o|ö^'Då±qÇñâµ£@ðbwQ@ÈpJ<Ø„•Xôdr'n`B#$g„&gT†BX†Zw…“…Ú…vuÐV‡ cƒv˜‡‚‡z؇‡~ˆXQ÷à‚Ð /`ð Ú¤@… %ðS?õ?5V&Ðò0VYSøTd5ŠBÐ9`Vf%ˆ¬èà~pðÐORès‘dåRfeÂèÓ€ ©  &°àºP¡à‹ø0.©ˆM Š!` ¥ØR«\Èhfˆ†r67¶V…ÞÔgäöo"—T²Æz½Ö}Uõ…æ¸BÌ•ª•309Њü¸!€ØYÿéYi»¸y Ùüµèy 9‘Iy‘Yÿ)G{a†\‡Ót—&_Z§i©LÙƒãbs73в$[Çrx’—’ZØxøÅt{¶e˜¢^ÑÅ"Êen(d’BùaE‰+P†]BI“¿Ñ‘É…Dgf™Öæö‘4B•$6lD9KÇ]¤V*DG”L¹N9e;IfdkGi•?¹&: hM*HÙŽåEiD¶”l9–l‘‘“2“Z!’z©h6yÛ倘‚)‡Ç‘ˆÙ˜{9˜Ž™“Á—’Y™™–™™hA™šÙ™ï™žšWÁ™¢é™¤Yššyšh9‘£e]¹3úò”»æ*qfÈEL>ùj¬)eYDv9—i™k_Vt»&]Ó¶i*È lÂI›L†œ hƒdpÆkË™gÕT•ÎéjRÖeTÉeºYgA™a¶ù6¡b7Ô´šËyž‡‰0 Ù’+×'®ù$vve–¶^~FŸqrœžã—Ï™iÌy`".MÔk°fkW‰ |¦*¿ÖŸX¦Ÿ:›²2FrykJ9£¶ Ê›í™&i"Xc*–c”dÂ+ÝWW2]ª”¯j³Ÿù™_Ê d÷)b6j]&l ž@ö ­é–Òt¢G7ilÖz‘Æœª˜Í¦’›„£Þ²›¨ÿ©š¨Y™TÚ6ØÓp~Ù¢Uºš(ªÆåø+Ý©¢€fžÀycÅ bf¦kü©“mæq*œV¦¡]Jh‰§pSˆå©gÚ–pr øiMjš>ª€¨l:„[É ÇYbRúlWªtI7fPš¢‡Z¢[g¤Ô„iˆz¢œfcÞw¤:¦öh¶q§1©ªª—¬ÚªLùª°z’²:«Y«Î©ð…Lšm3¥««¤ƒ膿J8òÈzLDK%UìD†HÇ5º„Ä*S¬Ù…èMÞv7ÌÚmçffëyv¼XQÀº/åš)¸Ê(|Baç*)éÊT:šsò:¯ôZ¯öºžäô®›ì5­X¨§ãê„'Ó®âDL’Uûš÷®Ç° ©n:Ó®W"hFê¢ã†f•A°‹¢¯1×ýʰÿ;è°Œ¹1㣱èb²à÷¥$ëD( ‚ ;¬"뤞ôI-›-5û!+uBq³×³’³ŒW)AÑ…Hˆ„ÜŠ­‡ŽEˆf‡´=–Žyyr2´ûcm>-Wë* -ó–µÏâµBµ|ê-p8µ[{ƒûS¶%¶çØGjkQb‹IA¸BŽs´Ye·wK´Ëê… ô²Ò³7 1t×;t“†–PDH§jI‰¸Ðê¯m¸m3uø¶|¹j#¹…+¢bÔuf¹{x¶n˹b¹¥ä£€ow¯ªk}¨+yĆ™+®´íXvµç€­ëº È~ øJ°Ë=š;vYXŸ—»¡g¼“Ç»X/˜@˜ ¼²;²Q:bX¼¸[½d~ä;¼·|·½ƒçAü¾Ê‹¼§ó»Hô¼2ë¡\‰4OH½H¾˜‚ ø¾¾Û¼ç;‡°ÇyCò@/T½ôë¿»;¿©û€fÿÛ«§¿°éxÍÀÕ³ºLzR´¼d¾y„¿ˆÀ}©À·û¿,ƒ]Áîgø·;廿;‰¯à±.É¿îë<0ÈÀ…¤AÚ‹‚.Œz†qz„Ã5̼¶k´F•M¢+¸ËÇ LÂ/ÌÁ ¾ý¾4E; }H<=¬»ö[Á‹™¾|ZI³^ELÂ1äÄGìÁo'A_Ìv9lú·;d§Þ ºÅfÀtÈ.Zܾ]¬»ß;Âb<ÆöWÆðÛ?@'DÙꬆÂîÄÑ;IjhôćE|œÇzÜÇg\¿~û¯è¸Y<~Ò»ÂÁÉ0|¼¯[Å eÁ{j¸ˆü0ÀºÈJ|}èÈw~Ÿ ÂQ,ÊoGÁ¥|Řìt@§}ìòAòÓ~PÜA×û|7|EãÊHÊLˆ5½ŒÆþÌË„$Á°|JÊ<­—Ë5Ô¬ÃÒì{Ûìʵ|ÍÁ‹µÞòÍžÜͧ#Àv|=¶¼Ì. *æÂè<ÏrÔÎØloVÏÁLÏüÌÎâ|ÉÁA’ŒÇ±ÜwÍÄôìÆ¶´k/úÍÝ|Ð5LÃk§ÐiÈ'K³==ýÜÑÖ\É‘ ÐRcº±ÑjçÑ(MBÿlÊ3%ëÀ0Ó2­ºÿö<΀ã7 ,9ý‡íÒk˜$¹Ós Ò±ËÒ³+;Åd²;›F´$º°Dí¼F ½7Ÿ[Ó"ÍO]"Ô’ÂÕÂÐ"—3=Öd]ÖZ¼Ò¸ü†WÖMšËâ4 Í…X=ÕXLNæ1Ž œÚúCÖU©R…±z³qÝ´C;×i]¬uK,WØm‡áJ×nýM^½(“`m(•½#™½)=m«ž}™pœ¿Ÿ=Ú:ÕÙ¤}ڟڌڬMP¦ÝÚˆ)q ¡ qÙ°=[…x. »Íº¨Ú§œÛÉw°uð tð ·ÝÙ?%" –(ŠD !gÕ!`Ýø >eÜÖw`Sµ¸œÝÿÄÝÒ05V•¨Ý¢ÊV¸¹ûU @@  Ãý؇MM¾˜ ?ÕRö=õPß%ð u‹×&¤F ”­ŽC´¸Ê µö$Ø]ƾñh·›$ë˜È%! À ’ ¥ßG S,áø •HVQ¯€ ¡ &€ &°¦@ ¦€4X0… à=ŠK` R~VAàHŠO!Ž×+Îá˜íá[nUÞÆP5O¡QO„Oðö×A ŽÅQ±0é@Y!Z¤µª¦½W–øèÍŠH087$@0ªYÀ ðèø0ø€gÐ ÀðYf0Z‚gà ®EãTýç¤Í)ÌÒŸêŸ ŠGêumê°Šê«ê‘Íêwêê² ë²ê´nÔ¶~ëèëǶ뼞۾>ê5ìž=ìÿìÆÎÚȾʾì§ÝìtñìÐ>ÚÒÔ^íÇŽG©^ìÚ>ëÜþêÞþíUzí9‘íäÞªæ~è.!„œî®ÿÝ^ê ÌÅÿ%>X™Á@ –ù~XÃ ïø±îÑîµi–¹`CÙ§õUåð"ðAïú¾ð]I¡sù\—ú’=Ùi…©°&‡;¤$YŸçåiï®íOðþ“ºÉ}ïÚò.î’9éi2?õ'óQKñaIõH/ªü>•8¿¾_Yõ"îµ>î8 ¨\o•SŸbg©ôù…G·’Þ£õö2?¡l¯çWÿöY?ôþ •!ßòl ø5OæAiMuf —‹Ÿ“˜?ø© ôX/ô@ióQï×.Ÿt/&žg™°ó³ú/ê© _+TV©šïn¯ëpßy¥[b:©«ïø ù"ÿñFVk¥ÏòõO=û)û`ªÈ'?û_]û¿Îüëdï×DÒÐßËøÙO«ÒOìÜßý·úýÉNýâO“Ûïùço‘éëë?‘íÿþÿòŸ™ô_ÿVÿJþÎnþø/‘A Ÿ@‚ ,’0!¾" 6ćo“Ĉ-^ĘQãFŽ=~RäH’%MžD™RåJ–-]¾„SæÌŒmd¨°á·'N¤TèP¢EEšTéR¦Lo>Í©°'ψ?›^ÅšUëV®]½~Ý õ¦Nže}R›VíZ¶mݾ…;R,N²SVEWï^¾}ýþ¼qnÁºf!RXñbÆ?f9Ø`a»xCÆœYófÎn%#Ôi÷°ÕÎ¥Y uÄÕ#[›†ãç¨ Ÿ½¼õîÝ_käÜâoޝ‰O½18oÖÉŸvž\äsÙM™_\Þ»"ÿõê³qB¥lÖ²WîËã{~Þ£úíÒ1¦ïÞeköØåw·®½}Fã÷ñ{—,¼žÆ£I? ´o¹ö˜ëoAáÐ{0;à„ðAû&„ÐÁë2¬A 9Œ¯£Õ$lpB 9,Ä›³PÁìücqCþ(|QÃ#t±E cDC¹£Ækì0ÈýxÔnE¤h*ÄfÚ1¤3r8骴ÄæLÂÒÇ»üñJ¤î<0Kü¨D ýû-Åè²¼0M!Ù¼¯Ë6ßu¨ËUN?묤·)‚®7à#éju¢öЃ`Ñ>8B–P%!ty” U¸B¨| IàØBÖ€(tœ u¸ÃÄá0}<b½æÃÀ шGœgˆD&6?Jtb¥¸¸Næ|ûᵸÅÅ@‘‹x³`Å8F2–ÑŒgDcÕXÆ/’Ä‹m\‰?9‚°Š0 úŠXGìð1(t¬ÿãýøžAB©ä!¿—WÅh‘,ÂØ"·IIÆ .€”c"‰ÉÇ¡g;Ÿ¼’'û(Ê>²k8ô¤¤HÉÉN*²&w¬ÍÍDèJT²Å€Ž$å'sÉ£SêҔëeZXùEMr˜Lùå(5T!~™R’Óe.ëö•cn±˜…¬&-ù£Í‹\sÙäf/à K<Ê2…®ç8w©MoN±Lê¤<ÛéÄÁ%éŒâ<‘¨|†³ŸMÔ§éøOm‰b¢ ŠNyÂrlt''ºÉ†芬ۣ}6Ñž­Ò—Ѭd*Åéer)&"B[x7”%”ÒôèHc,\2Ó7­âC4g©Qp¶´(/ªrJM’Ê0>Õ¡JKxº`Úó@8‹NÏ©Ã"UŽV­¡R=hP¬¶±«-ÿÔêø&úU.’u…a%SãT.Aµ|RÍ! Õš±5ÖÕ®wÅk^õšF·‚ç¢ÈËèV}jVwÚ­z›kÙêÃ:ô¯]ªKËØ¾Ší±; Y¿ÚÈ¡òmšX$_J9›Î)H C­˜¬JXök„íª*+Ê:S¶ -*(EºÍZ I·ßJ¦2çØX‹ÆPKTk× ¥Ð6·•™8EÜwöVUÀén×*å–еVëîrUJáɦÌtæ*¡RBZÒ¼ÙýS$)yÞ?7§—ªà{ÏÉNǾQÅo\Ù¶ßxö÷©•õ›q±Xµ…·¼*‚ͧ`Œ"÷µäpZšþûÖg±kÞn†‹³a¿R°¯jD,"[ÖÄ5ˆY¼â«ó»Õ‘±biÌ[;öŘe¤K’c ï˜Çã¼ñUÖH"Ù–¸ý-ƒÚÞéB7¦Úmr‘ÿìã<.Åk±àºü«—,‡¸Ê¶²t‰ŠËà†Ë-e&^’ó3IR9™Ìo†²³|µæåÖ»ì½-œ©¼åâv¹Â~©&â}`#£™–rF¦Ý6³èRº‡\6§€Û’èI7zÐá„ôR8­K¯´Å 6ô‰­eÊÕÓŽve¨;ªª3*f¯·Æu®u½k:ú¾?Îï[ª×kûõ›@v²•½lf#5͆6´Ÿmj+{ÚÕÆv¶µ}lmGûÚÝ^ö·ÁìRïMÖI6m=nf‹›Ýî~7·Ù=ïl˛ޛ€7¸óÝírëíÜ'%ö˜zogÛ{Þûæ·Á ¾pg3áõVø¸û·ÿt’öÍÂŽís<â ¿÷Çõ-òm“¼Þ§žpªa¼—‹·5ãï8µ¯-o{ï¦à5§¹Í­ýmãÛæa$w¸nrkå„é0ƒmp)­æD¯öÌñ=uª[»áúÕ ~l…G|ëB¯ùÐ5u™ÝŠÀÖ4X–¬cóŒÝíZçv׳.õªÝêU¿{ÖoN÷§¿=äf/'Ñ‚­š–2~/ŽßéÍwœÇ½ç|¯;ÏgÞs¼×]è•?8Ù½­yi>–‚O;5 O^¶#Zñ™;ÈUÏyi³¾Ý®·çáêaµc|Æï{îu¯z§>ä°·¶ì“þe G*ŒNÿýéQÏ{‡û~ñÀ'·ðÑN{jÚMŒÈ¾òãÍüæo»õÚ×ÿ·ôUä'?Ì/Oþ~~·¿Ù1ß¼Ñ%Œôé+½úæ½éÕ¿}ö÷ßû­ŽïÛ¿«ã8ñË4ê+¾!»>ô˾ô¿Ì;Ž@”¹#»c­)³¡Šã.ë;>ŒÀ ?„@ͳ@|? Ü6—Ó³#£!¬/üc:–“¹¢sÀÓ;šÓºõƒ>r#9Ê{=i[Á!ã³3Û@L=D›Z#ìk7L?æ{<°BûA½ ÂÂ+´´?òP·&A,A-<¸œ;2ì¾÷»¼,LÁtCo+»ù;»ñsd#h¼§ÿCF`Æô¿oć<¸q„šr$˜0¸£iÇ~ÔFÌcGˆŒÈ€LÆÅ³H"3l52kǨ#º*ÌF)ÄB«ÄÕ#IP‰»D…4i„‰Q£E– Ç`´Â©‹»käÁ›9zôµ‚¼G%ÌH¾²½7ûHŒB€G¹ë?‰ÌÉœ<ÉãJI¨ŒJ[šJ¡ÄÉ£$DšIdÅŠ¤ÿÃÀ»Èƒ4šrÛJµI˜CÊ„SJPC·\K›Ë ¬ËLLUdK‚ä0ƒŒ›Eû˪ L™¤K² ¿¶ü<¾D,µ{LnlLÇLŠ|·®ô²ÄɲÅlÀÌÔLÆ,ÉÂ\ÊÃlJŒÜ"ÍÌƒÇØ”ÍwôÌCC[ÈÍlHÒäÍÆÔɯáIØÀÍ!»LÂìÍã¬Ëߢ½DIñ ¯×2ÔI šJ«OuTOÍSPQuNdÊ)3ŽSÊŕ٠RÏ‘4Ë­Xý©Rå&Ø"½ó³tÓöÊÀ(sAf4Â,…µáÕ‚š5øú´?kÁú38Õ®c-*ú©ô’,NEÌ^eÕV92ˆ!ÓGb—[%t½2^¢ÕgzUsE·f¥¥‰CÕhÝUo]ÍGÝ¢zíÿKye¨SõWŠX|õB}Õ"MEØ„UØi:$U5Ô‡EP>µMˆ¥Øƒ’Øñ¬ØŒ "‡ÕØŽýŽõØ Ù’å ’5Ù”… ”UÙ–í¢‹•P—•ÙŠð†Š¨Ù’`Ù™åY¤h„ˆ@†“ØÙž%Ú˜‡ˆà|ø Øx¨Fp#˜5Ñ¢¥ZÀp‡‹È|Hˆ€h|胋Úª5[”¸ƒbÀ‡ae€[ƒlÀ‡E0„¨-Rʤ‰y8Û½ {x‡m0†GP„C„=؃ €0BPGˆ„dè§ý•¢†@À0 ‡Œ .Àˆ(›ˆ(À‡àÛÖ- NØ=@\0°¡•Z­*(Ý-P‡ŠÝ%]‹€(sH…Š@‡Ó-RÀ‡Ó­Òe]×µÞp€ðƒÃ%0È  Û°y@Þ(Sè]ä½ò-È‹€††\((@ÝŠ(, _á-^Þµ†ëà÷ „I˜ƒ8À€¨€˜„aÿò&/Ð\@ÞQ0_p Ë‘.„é¬ Þàú™ÍYV5›UZ«U]µ­v=ÔQåà˜¸pƒ®¦vÒ…Z€X@ßÞÝÝQ¸$Ïj*ë¹VÐ’šFJ&‡‘­ÚZÄ(s•y®ujN®!ЇH‰v’`Íu†Ý ^ÈâåꥆÈ‚ˆ0…Y¨†%…[À‡yða|xØ‚ˆ] ‚b˜âø’~]Æ]j3A6Öiý´$ÖÃ{°bä“ò%† ñÍ¢ã•àƈö^Ø…ô¥|@8T`ÝHˆPÖ-XXÝ8W`]èdCÅçÊÕ –&kÿ…Qh…UfEvADî˜ÙZä5kä3Åå´Ð*'¨(øÞÝõŒ°‚Ð…rÐ\|È‚‡W ÝøŠXPˆÐ\z Ò5 ˆO˜‚g˜™q Žbs‰˜†¡#þU>~äzn¢ÒùAáʹe=Òš2‰'˜ `H‚#˜€  U˜€€h xh|˜|8ƒ4à…_Øè3ØèuèPªØâûE^XfÓÜ1ž8š€Rˆ&0&ÈèˆX… X…Àèžž7H|Pƒ`ê Öh5 iIfMOÐÜݽ††j¡˜r‡›‰78°¹ÛæŒê®>Y¥6X¯ k¸(Û±6ë𕌀;aolserver4-4.5.1/docs/intro/tcl2k/html/img049.gif0000644000175000017500000002557707363640503021223 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx<Ì»6/Þˆ|…vK¸°áÃfá6¥%w¬N»>ýÆ7Ùaàʘÿ6¬LY3ÅÁ—=wÖ»WtfÒ–=s:5êբ˞M»°â¥é&„¬R²oÀ¾MÇ> 18çâ±7Ÿæ;™xéׯ[+7îxpäÒ×ÞνûÈÛ4s;ÿ.ë½¼ùóèÓo_S¬îº<ÕËŸO¿¾ý ìÃÚt¼;þýÿ(à€ åǘ{ãñFà‚ 6è m‹Exà~ï‘—Ut’•tp%‡‘‡Ø ™teø`g´xâOŠG—…)mØÑp­i†áD Ú¨¥)'Ño(þH"r©q¨bEÒèW‘=úH$’NF e“29%”7Š(%–;¹å—:R‰$Sê(uK®ØQ‹¾¨ šŸyÕqOÂCÉi'UlR˜ {*è „^ÔçMž$—ŒjY\‡›Yù\Cjiæt>†Ö#¥R†©‰Ÿ2æh’V)d§ r*¢£{Yäi¨AŽ€ze¬ÐZ§•½:+`“Ö呎’¦§O‡BUá›…–7lƒË&ëìDž×ß³ÔVk-ÑòŸz¬ÊZ&§‚ûhE¯ú:*¬M²j+®³æŠî¸Ó½Ûª¨æÖû«½¤: nr ¡Ê(¯ä Û¥À˜Z¶éª^ZÚ¥¾¾z—í±€ªÙìµs7ñ‰ÿ'ZñÆw,[ÆnF¬l¥ª–,¦ÁŠ»°u gGð˜c‚z0¾»¾ìš·zù%Ž £ZÃ+gjóÏ1_tnÂ@§Y´j·;ó½ §«3‘ýþkÈR!+ßÅ[qíñY^Ödi][Ø·ÞI2u<§8µØpã'áb.f-òÙCתpÍI_ìÛê‚™ªÔ¸æ}3ᇗšoÜŒ·Döcw7.ùä”77nmÚ­(¿zº{²©)/'.Ž£-$žŸ§½n×/£ð®®ö¼‘ë+ÉrU´ƒôø´æ¡ëyááÎõïT'œzçƒÓ{°¤Äûüaåø,yÄ[E —¸"ެJ¡B•Hhª(¶Ž`Rôl7>Ãq‰mF‚ÛT8½O)‘‰r"×ÈÆî¨±]™`ÄÔÁ±$ÿo´˜»´›- H‹JÛ™ºwC¡ïuÊ‹ ÷TV/ /^¤a"_(¦æY²of”¡Ù˜Ç;zò“héd€r”Á:ÆICs”Ÿ)Ai9öÔí}›SÚÞi¦MæLo&Sœ!Ñ7³=¢ð{,œ”§†0@îˆzHãå ÛH¦’•ºÛá„z¨9hZóšV¥äVùŸ3r“›ØÜŠ6ñ–&2uj»Œ ý¸EåÕ2’³k.¥¦ÄYž*‹‚›âWº/ M¨BñøÏƒòn¡èFÆ)ÑŠV”¢ͨB1ªÑŽþÙCCÊÐD8mè«Ù“ h!"»ÍÁR‚˜  Á©GwÊ ;ÜáC4 ºRXV¤¦"Ài nZ‚WXl^bDÙ£Ò7=æÁé{9f¤Pf<©tðXüȸU–@ãhÆ3#ÂчœÃ& ðQÓ›N¤ KMC¦‚˜+àÁCL` ‡,¡"P>Bð‡Dw)OÉB8N»`‚˜0sàë˜@+&€eàƒ´€Cð¡†`œ«mÃØP?•RÓ¨“Ím?ÛªÛÞ2‘·¾ .+Üâ*ÿ¸ÆMîÿÏT6³:Æô¦Œf³ÅY׺ÌÑ$©ÈNõ•sºÊ- sIšÓÕðº?[ësŠG)—µ;ð=o¾P'_ë¨7¼’/~÷;9ýò÷¿pó/€Ì1øÀÖ20‚œ,ˆ½©BÝ-«Hwe¨ÂH#¦ÀÀKÊÒn»Ž£$=÷]佫zWô#ú2™Ý-ÍPI4,qÉö6Èö˜vrp%‰Îy»«$…ß »Ìôx½ˆT'‘¿%䦘Pj>?×Gy©/ÉUý[“)I¦ËŒÇàDŽLæÛÖXCˆa"òÚXžgÔ¥5 ”£Å³WéÕ0›…)ÁêÖ¹…ÿZ#tï;£ƒWÎB³Vðé¼åé²”¹œêhÃF8˜.¼n¦IK›ïÉØ«²¨»tZ:Nå+áµÇÏæ™0^\„]¥í˜è3Kë~eεØÍÎù˜¿nsŸ3]»µúÓ‹Þž¬¾™a÷:$Ù ¦ÄkÖmY]ö<µÓyIY£—‘¥VÜ-­&äÀRÛvV$ºGÍješ:gáî6µe-ÆŽÐj©¶®÷Mm[k«ÝÙ¤°GðB Ñnùeˆ2)#|Øß1ÄW§ºâ{Õ|.¸‡ÇæoˆÑç‘ë&·WÃÝîsšsã<ãqÈÍMën‹•â§ôW¶Q•í+ÇÜÔTã4ø ryGZÕ7?w˜3¢o~Ý>ÿE·Ê¥æd.{év6·Íéç_)²¼´Úð¦½çî§}6IOøÅ¿žë°“ýìëxš½ó;ƒ»˜èD"²Ãø™e‚üæLswU…64G[ÚëúìtÓ:¼U¯£ØêK³ð$ÝóKi*ë$ÿ{kø,_ñíáK‰Ù7'í}}èŒÛ<ÚGvµûô¨_‘èSÏz¶¬¾õ°?ËëcO{­„Ýá² ç÷£õìÄ‹{quŽŒÄªŸóÕ•gyíómz–^(™rxÄyOIX‹üø.&žÀqïáA:]å_~Wf/þò+¥ù¸e{ù4‰rè5’ÎXO7Ãù.b`ן½ _ø†ë­jYö zæÇÅPDu[õDOOàó}xB>ý—7'¶öw<¶ÔbƒI®r€ Vn ×z䀨6Ë3çyÆ4GHŒæra•r'èL¨xùgÖGw5XƒÈb©ævÎVcîwƒÜ·D!øg0WOpöN*f_{vƒ‹$}ígpY4‘daÛG¾t¿fc%aÌăÄÁpµDƒxGCøf¨eø`zW.ˆsacXt„F…xFp”&±–¤vJkö|£)h"bö–„Êÿ•†w:)4-ÂÂÄ‚hƒÜ3ÇLÈÞ7q’H}ö¥mÝ'ˆ‹xáeˆg8Š­ÔAõP±ôl8Lñ7mn(cÔå‡þçmŸ˜42Öl„¨O7Öl>]X\¢hVÉc‚Z˜|û×€mÇ*âMJHlí÷ˆf…¸ˆh$ˆ)¤$…V˜]®FzÁHŠÞ¸&èW€ß8ŽiÑäxŽaŽè¸Ž¡ŽìÈŽîøŽFW÷à‚Ð /`ð ¥L… %°TKõKW&ÐòWY SøÀTq5‘BÐ90Ws%ºVÀà@`ðpà8€hvz‘q˜uSse2éÓ€ ©  &°àºP¡à’ø07‰M ‘!` iSYl#—eP•.­BU3rÙ±wZ¹wZU•`e0Â2E‡“•ðò[Ù1¿„^ލ˜)039—¥x§ˆkt™—r£’·pzù—hÈ–x ˜„©y‚é—…™˜!Ši~ŒÙ˜â÷˜Y{ÿ¢Higô#¿8™÷‘t™ù@®ö™G´™œY·gך}ˆdçE_Rgñ„°Ùš¶ÃšH–¥™v|ùo$ŒK_Ú1xŽtoë5›©ùmîuœbÊéL¤™›Dá™kڙœÔ‰…Ä9ƒ”gœ´)eljòÅ…ÊœÐy’Yž¨wžè9z깞gמîùuðŸF7Ÿô¹oöyŸew˜½©Ÿ™ŸþÉ` Öž'6mÏ´ŒêŒYå\à7 Zf§)š÷šKVq xmÑ#> —}Ô êd[dÞ9¢\ÅHÖIsÁ'; øj–§‹ªy¢¿ tœV>öœµQ¡hsrsÑtÀã£C6m±¹.Ò3Cų$:eB:LÉÄOË£Vösw>Ô×eàwlÚù,ªr»ˆj˜)ˆ;wŒ?Ú+˜yú÷{€Áv2šˆˆðeD6‰_šº„Õ§ƒÏÃbú—‹´˜Fü™@b™f1,:j'‡ ¤hÿ4 J`ŒÚ¨ö¨)jBW)¡>Œ~ Ggyb|pjB³‚ìÖ‚'‚«öH«ù‹HyW¨}qp&÷sŽ«‚·‰ª¦•6«08kZê<Ú—bGx×'ªVó\X©cH©”¨:(m÷¦ˆ×x¥Zk»éqœ÷}‹ç©¥Ä+µi¨TÅ€ä&uØ·¡Ášjê–Ùê¡ñÆn¦1këzªë}–‹ÍŠey—¨l媾¥¯†á¯ü%©º_;°¡È¯½#Oy襺gnzŠe`hŠ ;8j˪‰*¬2ŸÆŠ¯DÚ¤Èêœã¶r3V²G¶:w÷np¨°.èsmH3!·«ðÿÆt~—‰¸ç¬Û˜–^&¥Ç¸b ‚{­“tê¯9Ò®ÿò®rª{Ë4ãæ° 8w6[µ÷¢Ö#‰swxêæc Š\¶³œ5L‹¦¥W­kwUcg°z-˶Æõ¶p+\r;©±z³5›{¬JGXu û´07A;­{k·mëf“J¬ç‡¶,9±½ŠqÄ:¦¨ ¥Tˉ—h¦/‹±Ýãi³zhËò€K{±5÷†“F¥½4³OX}u¹DŠwËéi,2´êÇ¢€Çµ/yPÛBr—neä¢Q5K®Y#0”´Ôõh¶X¬f™E {¯Pä©/¤eùº¹¿ûOç¼%k»­Ê¸Î÷qk«tÝ;PƒK@u;·½5¾wñ½…V¸„ËáûŽÿæÛ¼AÊŠ®¸O²ùpR+¯\d»ÍJ§z¨–ú¾Ç 5X+¼¹:¤Ò ¤Ñk¤WG½¶(eÊ[yp À J¾ $ÁÜQ|Á•Á«Yj´ d‰¥”un.f4+±qä¼û§ëk¸¸s„—þê±´:ˆºª¸™ÊgQ‹UqÊ ƒ_*¹cXLsÀZ¹Ï›ˆ1<¼`ëN“¥Éx³>k}=gºŠKèk(²«Gm#®&ËÄ^K|~Æ(K¹\§µäÓÄ"J¿½k¼ªºìb´M|£1‰•Ôµðû‹àòYà^Ÿžàø¹à ^ѦèPƒùà”éà. ~á%q ¡ áÛž,"…x. %Î)áE%Ž#¾_ìp{P b@ß⻽T" éð¨`éX@R"@W AŽê T1®A p?E’ À <ÿnÑ0 YE>ê5ß{BæuÖ[•™ðd`К Ðâv)áˆÙM.™ KeSa>õæ%ð }QV…·]Ø£•¼"fIÆ€ì•gÙ•-¨U*í¤Úè.6aIÀ,! À ’ CåâØ–Q}%JPqñ ¸Ðº`Ø`;` ¤` ø@•Sذ书0ìtfu»RÉU†®èŠÎé'’éË.éÎ^FS¹‡…WVU“¼· ífÎ,¤êÔ YLà5 #¤å®[A\ˆeO9åÖ„€IpI@0#  5¬0˜#€hp½ «e¯u¾P[\nêôÎg¦- qçàà!áߟÏoùáñòÞñ/n/¨&áŠAòßòº6ò)ï1/óºC0ò8á(_ê6Ïó=_ :_ó+?ô'Ï>;ÏòHï¨EôGßôGGóP_òROfT¿’QõWßà?¯õ9Áõ]ïòs³ôlôÎc/´ÿ_kbß]¨ÒÕíEšöÙôô`m?š]u™U(÷ÔI÷U‘õloõn¶Vǡ¹&ÜtÛ¹¢Lw¹¯Ë –Xh?ô‚ñ„/¸™IŒIè‹·ùÖ“¡&úN?›¬%=úSˆßiùï‘÷sf™XX£ÈÙœÁ{¼ã‰ÎÝIû²ß¢â øZ¼ö˜ózï° ¼ÿöEZ£ÁIžéu;ÌžÇL÷¬ï®?"ZçüÆßüêe¢Ï³ý×_¼™ë÷ý=ýtQýä…jõ…u·OüÍÕŒíÿ÷Ú1ùÆý÷&íûíh÷ƒ/üÛÿЂ,x0áA„.XС‰ ´Ø#Åÿ+BŒ¸‘#lj/Š 9Ò"J“*]†¬˜QæLš5mÞÄ™SçNž=}þTèP¢>iá;šéÒ£Eœ:ÅW$êT©7á»Z”¦Ç˜+[žô$I”[ËÂìÚäX¶"z4ûæL¸ÛŠ=«Uï^¾}ýþXðM¥…™F}*U1ÕƒW³†YòdÊ•-_ÆœYóæŒ†=#~Êx±U¬œMŸFZõjÖ­]ýl8ñbÚK¿Æ[÷nÞ½}·Ž}x¶è©¤ÿFž\ùræÍ}W:¼vÕÒÇ_Çž]ûvî<¡/•NÜxwòåÍŸGÿú{ÓÄÄ©;N_þ|úõ‡® uºmëöýÿ0Àî𠯶ñD0AÄÀöö;A '¤°ÂÀÿ Âê,ä°C?$ì°Ï d,BOD1E1ÔO¼ U„1FÓcq¿÷n›1GwT®F÷øã1H!‡dÍG á#2I%—”ÌH‘d2J)§ÊI_¤2K-·”ÉʱÜ-¯äÄ4ÌœäBÐL.™ór40Ëä*΢â,KMŠR:³«“¸Â¡¾ììs.ëÔÓ7@¥l³¸7U#tN=5K'2óz´P¡m4M¼ÖPDOItJ¿Æâ‰ÐºÐBó"ºêHÎ;åtÕO™Ôl.·,¥³ÏXé´u×^%•¬VUE•U`Õâ³Xƒn½sÕºrUV£[“•vÙ’ø„¶ÚkOLôÆþ´ŠµÔMÿ›=KLs•µYzéé{~z8c¿=»ÚÁ=û·í§¬úîT.¸üìç¼!­Á>=ÒÁ–ÝLøC†ºï¾-†X0JþšÔ·ÎŠün÷=­ˆO;ûS˼ö<ÁìmiûD0² Z‹gDà6tÁª{ccXË63§¥O!è+¡Fˆª¸\«-ìãà@8ÁóMcâjÏ^ \ÛO˜´víOˆë³ÙÎö…9µ h+¡Y—X~l4L  #‚Â$’,‹\ôؼ2¦5V¥P\:;"Û\v™bˆ_ô¢â²A«ªT¢×°FmY0XÜ¢ù¬è¾—iñÿqáÕ:DWápŠù›«&;B.’\£eÚxCšÑ“$"EIE&Æð“'k[)E¨’µQ‹«Lœå: JRž’„„tbÖ È?v±–$Iå*Õ(Ìð< •ò|è¸5ó'ÿ ¦0h¿má†{T¡´Xد\’…˜Ô:WÊî‚—í K:ìž\˜IfÑŽoS'Àn™C îð/›´Þ_Ÿ}æ9øôg@Ú€Ô ÝMAºP†¦F¡ …hD5iLöd¨hÐ3^?øÁPæf“Ñ(Qܙړ;eN¦ÐØ´•J±'÷#©";šIͬ“š|¦ nš?œ˜Ó¤CÝi)€PºœÞ/q³¤±O…Ý­•é LSøD^³dL­'²ú¸B«n—£Ä&-Ý·Tfi0‰íÔf³¹Í“R4?6šØøÒgÔ®e-¬Iýå]oÖ+ª²›4ÕkO[)Ø)Uˆ„¤.iÅ4ÊÔ—}Ö¸™¯Y’g¨Ê)ª]ëÊØW:6°ƒ{ç9Á1^•à++#ƒiJ¤ÖO±­}$óº×y¦VŒ¸$œæ~ª›ËŽi®š-$g…éYÚòT„¢ýeãpÖXyvVµˆŸKXÒ>×–T›ma[Ý›¥rt»ÍÿMo eÇTÅs±+D P|:°¬†S_\li_©BóÖ‘ƒ$ü¼°úW“H5½è]ëK©ÃfòÕ¸$œ7;õP)Šx ©D—áúˆWÂÆpQ,œawx'öpˆEÜ·6Ø[#FqŠub*Q3.Ž)ŒáDºÚ•¼4*12¬LN‹¥?2P›Ò«¾W­>AëŸ9ߘ.—4Í“£ÆzM*¶˜ Öñ‰ÏÉÏvn”o5›ËÕ'‚,ÀŽÜ¢ä‚k—ä’2¿^,©U÷h^tJ3ÁCe} LU3³›hkq1Ãâ0UñºýruáËצò2ʰes/ßœÈ6'Ò\¬vÿwRYê*¶@»d 5-ݸœ7Ô!to0=jJGY¹‹®í˜Åè?1‹úce´l' ÆK;úÌÀ­Öh üª@æÔÎ…nqƒjië*Y0©æÍª!­ë™FòÏu™,›mƒ!ºÒMcõ‘s¹lE·yج¤ëy-\Ø’›ž¶fcŽ-Ú:÷XœÌ°“Á\)ÏšÌÌï9çÙW?oÔ©ðÌõZûëãí¦Õ¸ýÞuº)[6# ÌšOÅ/­#ˆïÌ@Û{7¾žŠ-r‹xœä'?¨ÉQ¾rªœ<2Ž ÌA r–SOÞ-¢7F‰,Rš#yÈ•FŽÌk¾—3jÀUVß΀èã}+ü»Lò¯—.((›1­][‡¾¢›Ãunntm²¯kÊéfZÉÌ…á²Kvéê¹ç[·ÿl×ôõ¯ºr®`ñ†Éˆƒû«.]»mùøkaÁëXž÷ðêÝœ–ý“j40rqë÷W>Èúµ¤¬ùvÃ;§è©i<ÞÙ 3Ò/œl†65ý ù°—pΙÏ8G;/ŸÏûvö·ŽÜ´xÜ÷¾yµ÷}ð‰|áGÄ7~òã¦û‹J¨Æœ`“…¬jè#–2BGöi‚üšæ…§v6ëùéµs×ð=?j¢‹Ó¶—3 9Õ_òâê˜ù9ç OHÝ­’•s¸F¿Ç“-N³3Œó£;£2¯º:¼£ò Z½d‹À\q ýz?ˆ;-È’¥⟠ü¯ĦÓ>·ª(œSÿ<ì2’!Ç;´Ì‹-ô’¯­¸6ûê»~™´«Z‰¢0B»5{½|c­Œ ¦sk©tû®¶I³U³¾pã´g»¿Ì¿…á¿.BØé¶å ™Ãñ«¿³;c4óá†s˜2:¬\·×#2Š=3K:X3#  ÿc¢F3=vk8@Û îúù4esÁÑÉž¡‹áJ vrADj7C’=#’¿õÛ¼¾zC_Ã$³ ÄîR:9ŠÃoòµšÁ¿"¦<|ÂdBAÛ;˜:Ì‹#¯JR=h¢ÃŽ,,²ûš™…ó?Œ;EUT0HTºP³@[j/-ì´[#5 FƒÀ¼ @VÔ<§»­;sBÄ3*AQL‘|¿!R>W(=¼ÆmDžPܱQäÆp>oÔ2q4GD!Ǹ:ÇuLámdÇw´w„ÇyŒy¤Ç{,{ÄÇ}Ô}äÇ$¨t¤;€$ÈñÇ‚DHÞ8È„dHõÈÏiȈœ…”ÈŠ4 Š´ÈŒ´‡|0ôÈìÀÈÉÁÉ‘4I¿(É“TÉâHÞÞj¬ç»”ú»>“¢Æ•Dµ–GúS)ð’½Ñ‚!(» «!+ÃÉÒI×()˜:›Iõ³'ӹɣ¼¤ŒŸ,ÅC¬£:SB×[Êh±Â[½AÒ–²œ5®T;Š£IªdIhô:ˆä¹§¶ËK»-Ü›Ás7²tC¾ó¯)I*=¶äÿ-«´¹t³Êá)± $ÄK­\·äKU´Ëž'àšJÁ„ Â<§ DIs´É™!O7ÑÔE$ª¢Å\-À$'ÌL·œ;¸äÉf4Ê­Ÿ—¨§ÇÄ£Ú|ÁVCÀá7ݺMÉ‘DÖÜŒ”œ½Ë$Ο0NÃCÎä4 ÍtÎèÜH×ܽ”ÎëDIèÄÎí$IíäÎïÌNêl¾í°6} ¿Ms%¦d¿—O¾XNÛ JμùÌ÷DŸ°äÂÇ·újÀHô˜D<¸aìC­R7~ñ@ŸBÃæäG Ý‹1Ü6/”W&½ãA?<.%äÄ»[Æ BŽ)¶ÛjOÕ  ÃzÐÌÐ.Z?Gô%›*¥ÀÃ})5èòĨ“N(2Qü¬ ) (©¤*+í8ýäÒ/í ,ÓŒÓ1­ÿÈ25ÓˆDSƒÃÊʨ¸U·“Sõú¹¬»­Ó[S:ýDËøÊL,Qó6lL?¡Ü9<J=õR¢êÏÔt‹ -ÐÄÄ6d»A,Wl;d QZP°°¼ýs-9„DdTP[k¼l\ÔÓØ»K6äÍ\D¿4н§8RU–ߢE‰{LÈ"·#JÄÓ›´¥«ÒÙSóìÕÈ‹EO}·õ;*”#sûBµüUr:BLôÁ†Ó6Sµ.ÐL¹T%Å5 ½ŠTÔ{Q³YÐ2¥ ÁÐÃ@Š¡M×ð´SÍœ;BÊÒ¯Ý<Ѐ:Ö×¹OÔ)V„úW Ø$9Xƒ*Ø4È…eØ×ׇ•X‡•Ø{¤ØúÉÓäÃÀ0×D=#Ã,/[LÁ>M؈ºX÷ƒÉŽÏ}»›QÍ2-܈Ÿ€%¹“…?m½v NjKÀ#Q%uÐö{ÅÔ$<ìr)rW£­:þ* í×Û;ÖUÝ ‰Ò´2-û+T9ÌĽ”Õ%²Â^£¯›1ÅpsV‡>›õØj<´•¶µA¸P¤¯]×É“Ôl¿iÓÀ9 ‹âSÛ¦ mP@UL•?nEº!:·ÄšÅCìK!õZzÕKöÚÍú9¥§½Àež’­Øíÿ‹XnôÜÏ Î%Ýp4ÝÓÝÆÔU]åcÝÖ5¾×-TúkJÎ0Ì>ݨ'ã9º%ÓÐõ-ÏEM¥¤ÙÚ…PBµS”]òó—°©ÛZ;L}Þu^dt^÷ ÌxÃÖËÊ.œÚ¦uRÝ„XñÄ?™MC®A×ÉuQË3E`ýCË )ôC€#Z„á[½´P`TS߯Q ÔO^V»Ö}Õ˜U!z!¥U.·vÅÝ}LÞM¦}ÔûâÞÁÕY~5_Û¤×l#P¤eàμÀôÔW® UÂ^¨Õ_ã àÍÝy|àã³-9þΆ]ܳáÞÜÖáíÌᆻâ¡â!f¹"6b”ÿCâ$®Yfbâ\â'N±(–â£â*VTñ…B,¶Ò+æbóâ/ư0c #ã26Y'Fã“<ã5Ö’x8o88~N-–F7®ÈFdŠ6Æã(à|ø Øx8FS5þãâs‹È|Hˆ€h|苇œðãFV’;(|†AP°…1È|XCXd;þFÁ˜O9{x‡m0†GP„C„=؃ €0BPGˆ„dèDƉޢ†@È0 ™ .È((À‡e‰â„=Ð_KèãÐ¥‚pç0u8ˆp0pgmf(00‡T8tèæ |èæƒÐfqç†r€ðƒ^&0È PN/‡}0xÞg‹¨è`h(iÈY ˆo>ˆÈ‚Š®g|~gkHèƒJ˜„9ˆ € €Iøÿ©‚òh}…‹Z‹bd‹lª3@Õ[¥6*r&ÉU@ª¶Æ,ô7ïm1§Þ‹K`9ðjðR(]¨X€…Œ†gwÖ‰P…hK3ÆÄ—‘\ye1 ú#½e3¬Þ¿Â[„`½E„Õëbô‹‡HW.G™jhvw¦çœÈ|愦†È0…Y¨†%…[À‡yxk|xØ] ý`ÁÒ¼Þà˜™­Žë@Bl îë¹þëºÆmÝFìÙþm!áíÁ^‚Òç¡fëŒðèzž‰]ÐhÀ S@qnu瀅pþSpq6êÖÿ§¨æk¹ÎíÚv¢ÛŽm(¢\o*D¿îÿ‹ëeQo­Öï ‹4‡tluÄ '¨(ø¨gwöŒ°‚Ð…r€f|È‚‡WÐæøƒXP€fz m6 O˜‚g`ÙþòªÂ¶¦öÛ4'ùVêl¯æâï.Ó¿CB&±º x‚  &À$8‚ ˜jP… #§#LJ À‡3H^ø)?)_‡^(]ýMÈFé}>o7*•ãlÓg:¨ (…h`#`(ˆU˜€U'§ó pƒ4À5<Çó(Wƒ-ðœ O€fw¾†™ž½ ypsžxƒ3Ý@‡MDÉN¦ôßcäKGHü;aolserver4-4.5.1/docs/intro/tcl2k/html/img050.gif0000644000175000017500000002444307363640503021202 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ @¯ß¿€ ^ ·i-¹cuÚeÉ7#ß¼7v8™2dË}1G¬Ü¸²æ†ž‹MºôÕÂKÓM¸x¥ä×™Cs–œÏ³ìË qþ¹öîÞ¿M N¼øHÔ4U'.k¼¹óçУ{5Lý°ØÕuyJßν»÷ï‘×ý¼¾¼5øóèÓ«7->¬ÍĬµ¯ŸO¿¾ý¬í­¿ÇÎ|ëë®—A†ÛI2Ö[Qb” e÷1Ò‚XA¨‘„Tå§]ý¥ÛGå¶›oêv €¡I`l¼mhâ¾=Dbˆ,þc‰›Í˜›‹,¶¨£ƒN6à‰ J(â‘X‘ŒDY ‘þ܈9ò˜äA·"Ž5F†bK¢H!f³©d!yš×à™EFiÒ±‰æYcîWž|k阚}ùæž|ÚçMsžõß”j:‰%Ž&©hŸŒ6ZߟPñg¦£”Vj)xbߥœvê©s™Â—ݧ¤–jê_¡JJ穬¶êjRÿ©úꬴÖêS¬e®j뮼öš®RMJ`¢ÒH¥‚O"ºc–.^yd²ËŠˆgš1Iè¡:êÉ£3B "µšIëì·Šûímˆþ¸è‹R𠮇UVûä¼Mž­¸ê.Ú°d km\æ¡“Äœî´wh'¼=r›×ÀP&Hl¹ *±Äc[±Á ²¹ð²{éc¡ Or¶P¦ùð´!oyhÆ¿û¸ d‚L0&€Ž|Ø€pÅòÁŒ|l—qPC>Ö 4äC¼n`C$"ÖäºWˆí}¯|'ßùÚ×{õ½¯~+ÿ—ßýúhý½ˆ›æ67+…«dýû²’ç·þ÷ÁõdêÎn¹\míïm…%0Ô6\àÑqpÀqCL‹øÄ@!1ŠWü)³øÅ–r1ŒgÌ(ÓøÆß“°-‡Æ•/=¯f°3[ãä¥>йiC‰XñT7À#9ey3ÿ¼f=è .Kœ²“©œetI©e¨krõ’ì¾ë%~{YÝòb¶"-Û/Ââ™0ýÓ-})/²æÐú:×´ÃÆÍn_&l—üL™=z]P>´¸mä4k,ÑZ›m/ bÔK4Êm>w=ZfŸÞ¢oFãøÔÒqNŸJçþºe°«òÕÌ\…TCØÔ%õé¾L%]×ÚÖ+Æ5°‡íaûØÑ16²—me3ûÙìQµS) íjŸÉÙÊ×HôT¾;mäÍ$7³DÂ-CGè×F¸Iãìçuds¯v¦Ól¬ˆ}ÚÓòÒ4µ=hÁ-ÔZÝé6V,¤ïÏ‘ž¨.jÇÍÒš¶–éî`¿ÿ`ÛÚ§‚_VÖ=i‹V¨l7Ç¿îtÿã°ò¸¦07 ¹/‡uÙĆgåÁ»âÉStý.V=RÏoçàŠùÑœén{nÃ?õÅQÎôµ,½Q#ϸ‰›Ž‘§#Èr«´ÊÞ­oŸ§,ÏôZpÜ\Mºƒ…Mz]Ö9Ùpx3¸äÁV¹¨vGõº'[OÔ‡ÕÀ“ÛýqV§ÊÍm>QkÙéðwö:Øaä÷·ÿGÊ"ëùßÙøÉ[^)xíå7/œÊ÷JF ½èGOúÒ›þô¨O½êQ_TÏó ¥ålgFaèÒ—Î>Š Ífë3òÂ^•·ÿg?ƒ/R‚þ3÷íÜ}œw,9žþ¾’æ\½ô§ú>BùÕ„{]¿+|ÂÞøL|~0Ç?ÐaÂæú„¾1»ITîÛJ „¿ù{IþúŸR|g'SšCP*ÿ¦rÖ|¾×C!O¼$Múg ˆLÄWEâ'Lº×~¼Çj(I¦|ï„€ûT{µ~ˆ}‡ô¨€,W"=Ô€YQ~ ÅQèJ Cÿå~˜‚uƒhG愃t¤}dƒ´ò€'¨‚`d„;˜„JhL"¨6$HwE„h„:¸„ø‚^¤V˜ƒMO¸=÷äƒ<¸…dX†ìWƒHmœ·†ì–†sƆp(B‡tsX‡xøn(€y؇fq‡~hm†€1žð€ ᱇%(:ðWÙP~åWáW¦eMð(0¦¥p•uZ¤( ‘©•ZxlàpðÐà”§ÕV©uÀèÔ ª0  &±à»P¢À‹ù0mª˜M°Š!p ¦ÈV¬èÀTág¥XzVhÇX…¦Y‚†Žß(0Хކi¡“Y–õXíè*º‘b•309ЊþH…ÿ8DˆÙŠy~˜ ™‡ Ùuø‡9‘lÿØn çSg‘΄‘@(x{Ç‘ä‘D5 v@¶“aíó+Éa)’¦â‘Å%$vv@\r`H²v! “®"“ôVX-é’v“‹f,çh“>‰=yu/¹”ð`Ø&= •Ì$•¸d•Z9UX¹•^V]ù•b gÈ|‘8–h¹TË·jj˜–n ZMõqø–hÙ”t‰lvy—Ä&‘²Ñc4‰nFçI!ró”×gS•${’Š©–eÉ–oèÉÎy›´ùu˜äiÔé7Þkùp'Ñ”î?ƒršfÖ›„w8…Évˆ¦pgÖfc8ºo)²idœîÒe[–›ýù—îÉ>ç9jŸ9—ohö,Æ“¡¡©%ƒW™ß–Àö˜>!¢j‘tÿ ¢z)–yù™ÔÉšŽ&<)z?+ª-ÚaÜ)1Ú=|ù?ñÖmìÂp¶™£¸#Ÿü¹k®³xz2$*¤¥2£L:cNú¤/¥RwÃ)—mY¥0I¥Z*b\Ú¥·†¢`j‘_:¦þU¦fª_hš¦öE¤8ÇuÙv† ž2§JKj Û‘§j±£æ¡æ;6Ÿwa°  ·f–ÉhÃs“1ª›:@afv‘—ƒ`0Cfÿ)¡¼öd'dVæ£ Vžø(¦(¡"\'qÀ)@ŒÇ¡,C<w7&Z¡¯ƒeJVfŠ7ã6i“JzãB¡Hò«%‰h¾zeÊ?ʨ¬úr0§˜Kw¥+'ƒYgŒúš»–¤ó(:×gv¦œ”Ji¿Ùpb÷®ÙoÍ"iø ¦­7£8ð q]×®¤ãkìjŸ’veÐÚkJ§lú§v§ ÿÒ¯ÿê^[°ru°z>È «0ú°ŒIRû¤uz§½Z—¨Zb. Iù¢cSdÞBx€V£“ưЉonWvܪv¦ª«ßù4›°;”a/ ¡ŸI. º£ú§#‹ž0êœ;ëvƒÇ²§¨ÂJ²¨¦°³m:³ˆLµQ5µë ’>Ë(‰ § iµ£É¬©´‹Ù®i²÷sØš’Hƒ®UÖwE{t<­NlÇB|IÁ,Ì+ÜÎÊtÈk“Ì$œPPœ}ïŒÃñœÏ!xÌúÚlÏëròÌPµ|ÐÐ ý¦Ò›Éø\Ìú,ÌÍÏô\K]ÇíÏ9¸ÏÝÑgTÑ8ÃÊ…íÉmÐLÁ'½À¹ìÐUÒµÒ2íRÍû@.ýÄ}H=Ó<ÍD ZêŒÑitÇ'ÜÓFýP5 x7½½v§ËL•ª<—O½†N=ÕTÕVM_KÕ‡Õ\„[ýÕÐæÕb­£a]Öö5 ± AÖh})Z•y. sݺxÖqý^í€|` cPàðÖ[íW" êð©p‰£èY@S" Z ëÐW}A €uU‹ Ð ˆÿÕY šh‰‘ Ë”ÔôÛ®1_–šðe`Л °×¨ ÄÑ)À‹ºàWlÕÚa¬]ÐP'½{Ž™Ú«4×.æÝØ-hß7±qX…ÂÝØÍ±àŽôXÞR×äóÍ0 óW™l‰³%J`‰§% ¹Ð»`Ù`;p ¥p ù@ÃõVÙpÙ¤¸§ÐઌÁi½ŽÝ­YÕX÷±Ý›Ž›Y~YïÝœ!âõ(âø*å(Õ]Là5 # Ûååu^dÉÅ"}ϪÍW¾øÙ;…€IpI@0#° Ô5­0P“ž#i€¾ âuæ…¿À^| äKëq¢Ò<æÇÖfIæm涆æÉ¬æBÍæJ÷Si>Òr¾ln.Òp~ç(—ç?l{ÎçÖæç+è‚>Ötþæv~èÀFèc¾èŒæÈQçeéPšèzé–~cŽŽ†¾é{‰éî•êVJK”¾æ¦î¥¢^èšÛŽ»ê8ÿ3éŠ^ê«j`ˆë²ît­þè¶þa²=¢º¾ë§Jë™þë$·Ÿm¶vËžºzc¼)â?ÃNìüÚëžþêÙFqa—ÝZV¡Sf“‚ª’;KíƒÑé‰ñ鲓: °J9”%òp¦šÁNî§kíçŽíu sƒZ’C‰tÏ/¡Çìô^æN螪Vªà^”–öïç’˜µ:ð”gïïyÂmf”öÖšñŽ,ó.ñ(QðQqðâí¨ù56ë`Z³"Ÿ6Æ>ê&o_o*“oo?ö«ò1?ò_ò¯?Óô³Žêµ®ê™sôHÏë3ïêÈþôqEò9QóT¿_VX'Ÿõ÷µõ€^ô^oU`OêL?öU;ôW/öhŸöQïëgßöIUö]/÷ÉÿE÷lo÷H…÷S¯÷M©ç~ÿÓ?ø_¯ö\Ÿ÷†ßÒoí}¿ø5Å÷qù4%ù‚Où‘øaÿøéÑ;ÆYÓ€Êw\ë¹õáôûk¦Ÿã9Sø­vœX ¼äÖ°zz„i±§ïOº¹Æ\ ˜OiùtV'®ûº¿ûÕzñ¶/ì¸ïGº>r½n¿¯ùfù3 ìJ@šzv³ê1„5&Jk™ª"õ©ª– «ØŸdç¿ýô©FÊ`–y²šþŽ:›<©ŸbV¤…ŠvÌ™ÿ®¿þ@`¾| $X@ *<¸`Ć-^ÄX+ŸFŽ=j,2d¾"$M–$È)ŸJŒ-ÿ]>¤(ñ¥CŠ eÚThq`Åœ8{άØpçMžoÒ<ÊSèÑœE‹þ4:3*Ò©U}:e:ëU™O}jeºÔåS±\uJTŠ6iW¢Y­þLK•¬Û¸0éª=;7ª×±l¥þ}ØQðG’"K>™P%KÀc6¾84æÂÉC©~­‰1¨Z„6'k^{¹2嵟íl¹ª^¨=M«†Kº¯è°xSW¶Z–öî˫ݶÞÜ»)îÈmÏ‚~ ±¶Ñη3·†ìrðôÂ"#N¹2:äæ³ZF>÷]ñeƒ†íúwzôäy'×½74p¿ž_ÖeÍ7¹ðø`ßW­«8»¾ò ºÙÜO½¼–SP<ÁÛÎ!ê3 1 Ó.B ¥"N¹ˆ˜«)@õ>,Ï6ˆ@$qAð|l®ÇJQÅæ°zî5Ÿó ÂQœ1FÏ2 Ð4ÙªÑ8ÐP;o¼!ù ñE—„’ÅâœÄqC‚&$¬ÂëLÊŽ1+¿3L1Ç$³Ì'ÍDÓÀ4×´R?6ß„3N ±ìHË QÒÎK9÷ä³O?9ÔñÏÔIBE4M:=²sË.…4RI'¥´RK/ÅÍEA2lK<Ë4TQG%µTSOEuÿÓêFºC=GM¨@Q¥µV[oÅõPU½ðÑScNMY̵XcEöÖ];mÕWSEÐÍAL¶Zk¯ÅVÎe­k6OK …ÖCÉPû±Ç¥Í6]u×e÷¥mYuÔ[Q“dr>jE·]}÷åÙw[ý4CJ… —¾Þ¶·_…fØÖ=uµRØ N¯¿‚Æ8c-}¸[PFÁreãŠÊsgÝ8e•W³ãx?f9f™g¦™M—{•·fwæ¹g风×Äœõ¹h£Vùæ¡sFºi§Ÿ^Wi옆ºj«¯®Uj.©Æºk¯¿–Të€_»l³Ï¶hµ…žf´ß†;î ÅŽX n»ïÆ;#µ)döeó<ð·é&Zpÿšp®g¼qŸÿwÛqÉ'Ÿò¿)Ç<óŒ-'[sÏ?zï,ûÆ9rÐOG½ZÎSg½ucWw=vÙM…}vÛo¯´vÜwç]PÝ{>ø´e{kÓÓÍ÷È4““ùÛþt^xûý=R!Ûœ•5ïP¦vyîŸÿÒMöâd>úð^×üd«OTýí%¶=ǾÓý`#}‰é?cû_]H·´ã5/zÝ9õC IF¤‰½#r…aEÙȈTA‚‹D7R ‹88š–HM:™)ÈÁVð<<¹®·”"¥è‰b_ýª$+2hXÐYÑq~¾áÜ/yú ¢|„˜Ä!æ/~±y"ˆ„ù?A+‰.rY0£?øø‰õQ’Á”8 f*‡`š wHv? â&,Œ–ɺ3š#…pŒra5Æ3…‘>$Lc¬‚äÆÒ´È†ód÷˜–¶`@ó"qv¨¬2j€m»\™iï>&šâùc/Ý”‹wÄI~@Å‹‰ñAŠìôÊéq•ñÁW‘ÉGibk%®ÎH¨Íp=Œ!Ó(®biIß¹±.xHûk+ãË ,Ùˆ½íôsZ:üh':ÐJrŠ[~ë\®ÞIËOЍ ŽG‰(§zta-•P´¸#ijñ…`4gvªÍi¾ê6‹jœ9¢å¨´ìCV#šì¦”µéLp ½hRñ•¶”jw:®¡ŽåêåÈx*Öý1›ÚDR׺Ben³3àÑcVÁ´UXe5‘ŸT™øÕ‰”•­‡U^\;ËuN)­eª\ÑõÍ'šXÕ+BKº*€Õ­Z4¢*,Aû×µâ”4œ¢[×H΄Ùf“ÌÙ"0ÙÊÚ-æ&µ,´lZc™Ùíð•·=“éÄoF¼K/“µZp‘«7âž´tÇ]nt?ç[éVoÔµnvá†]ív·lܽÔ$iÚ!ÊLZêS®w÷ºÙâíZ.õÓd1Ë2ôÎW½fï·"+W³ó¼¤4Ð]…:ÖÕʶš’‘&Pý+Bp¨A%kØû~)¿o"ïmý›Ð±mlc‹ŠÊQVÌÀß'yLûØÖ¦°²ö­ðfM ¯ç¦W^©¢3OÓ8ĺ1l„ÛoTÈÕÄã{pŒÈ"‹4ÆVÿº0È^zUW:ù-AññP˪ÚžØDXÎQ*ùØß Ëöª_¶í“¡ÌÞ⺷hé )L§§æ»E™]pŽsÿòLçí²Ù¹„.Ÿ5;ÚÐ)+ô¡ݰD/ÚÑüj´õÎZÞ–æ3ªhížùðühEQNù$a‚ÆU^ÙÀzæ4Ø<}¨šrxÃ"°kyãILC–¥¥þªk¯¹T]Ã8Õ¹ó3mcIe¸Ža„¯s’[wqJŒ]é’ëxZ3“l±¿¾Öª‹í_j‹Šd¦°s,íPNû¥#&7¶×ìÎîX¼u¿=ï5[M?#iÁÜêÃzÚÂR·ÃØ 1wtÓç™&¶÷Z„×yà tÃ%®0…OÜ⢪øÅ5ᇣtãßWÆA>r]ÿu¼Æ$G9¶Džr–Çiå-‡¹¢L>lé 7ÇyÎu¾ó› „?zÐ…>ôŸûœèGG:¾t¦7}éFwúÑÂsªSêQº¯3÷ò¸Ù¼ê_ÇùÕ±t±ìfG»ÙË®v¯ƒýëk»Ö1Çu¸µÝíVWzÚwµëÝïLç{Ô§~÷ªÞér§ÝßfwÂëÜðMüáÿ>y¢GþéŒo|ØóîwÄONñhÃ|æ¡`ù¤ç}ó›ç„AŠ^vÔDèªß;Ô]/ν“õi¼èsNz©ôóg }æy_yÓ§ÞøÇ?;ò‹žüãß^é·W~홿üÓCŸíºw¼õãîû™c’ÿز ~㇟õâ§¾üÌo}òOÿzöGùÓÈê'Ÿ{ì^ûXï¼ä~o¶ð~ü¯?¿Ö3:׃?ô»:Ø3¿l¿è{¾û¼þ»»ÿ#;îk.a󾚫?Í›?Ä?ÊóÀØÛÀ ì9„< ¬¤öò,à@·“@¤<üÀ AlÁ¢3A,AÁ‚û4?„Á„¼ ,=´¿ù»AÑÉÁÅÙA#ôA|?!ü;ËÓ>úþ'L i³ì|;"”:qÃ1$Ã2¤Á C'ÃÊ˵ÙB¼/,¼5$?#´Ã;Ü9¸‹‰4¤A:|½6ä›?»@á‘C¼›A/|ÂBLÄM̾E¬Ã4Dâ‹?6,¨ý+›þ[ÁLäDƒÈ¾¶cÅUôCÛkĬBH,ÿÅî£D ,<ŒÅØÛDÌc<›ó:MŒÀû[?>Ì@,¼Å l7&ŒC«ó¿^\=N »žs¼Ñ«ÆD|Äé“Ež‹‰P$¿Q̺H It³à¹DWLG©{@X ÆÜ;XL:écÄ9¤ÅË|I¡dF‚›ÉÙAÅŸìÉ ”­Ä=Ÿ´È¬œíÂä,ªIšô?¤ ÇÒãʵÄ?¯Tİ„I”ɲ´J£ÄJ \É($>¶äËŠ<È+ôI±\Bº?»ÈÒ3ÆŽìK½{J—„K©ŒI~„C³„Ê)TLò‹Âõ»Ì0üK  ̸T¹Œ¸ºôÆlDK¶ÛÊçk¾pÜLÛëLÑ JˆÊ~Üš´F•ä¼Ö¤Çc4>ÝÀ׾τL¹”̪,ÌÊÌÍÅTÎß´Ì·ä<ÁÍJt¯ÄËä\ÎëlÌú‹Méyȯ¡ÎÔÊë\Îį̀”Í©„8élï»xà†c€„E@Aà>¸ƒ@(„ExIPoPW©h¨jH`‹0@z¸è‹!0‚ˆ‚ ˆ8|(‰•®Nàƒ=øØ0¸o]UE‰*(¨-uX‡„¨ÝY‡ˆ(sP…„HŸ-RÈŸMˆZ¢E.x€?ðXƒ Ѐ9#zðÚ(S˜Z¯}¼-ȇˆ†˜]˜()øÙ„(-À[¬ÝZ©½¶Í,¨J 9À€¨€ xÿ:£/ˆYðZRÐ[ø¬9ª*$+,')Z™ J ïH °RܵŠŒg›°ß¾dZL`€9 ^¦]°…Xˆ¾Ú¨ Q…gáݰ¢‹P¢ þ0/ ^Àr0˜°°ø^Ý_µRŽ¥ÚÝÖµ!ï\ßò-“˜‡X³¦DŒ0ݘ}†¨½Ú¿È­åµ­†Ð‚8Z°†%\Èz¨Þ|€à‚…]¨ 3_§ÂÝÚõ«‹™®xßóÍ`Áßì­* áßa?Í¥•3êZÓ•^‹\¬Å^è[È TH…¡m ˆuÚˆ¡ýTÿx…¡5^žFáñÕÝæÞán]´"_&aàÝ·/6_cþó+ŒƒØÆp+ˆ0 ¬Z°ˆ+]0‡˜Í-y€…Hˆ%0 ˆ˜­‡RØY‚ø*€B’©r!I_Ù41§ïÝÞ*ÞÝjª±ÅÚ ßõ%3¦!Ìz‚  &À$8‚ ˜€jX… X¦X· È4Pƒ^^F^f_`®È P¢œ‰ÈßÅõÚ'FúqáÓ¹äúq 0i`#`]&V˜V\ç x5ȇ5s6ç]^ƒb&Îc¦Í–ø„˜Zl"°\l›€r˜n† 8@Ͳ_½g¢ý×®°‚6hõR•€;aolserver4-4.5.1/docs/intro/tcl2k/html/img051.gif0000644000175000017500000002566407363640503021211 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ  'ß¼ù6,‘°ÞÈ+þ ·)-¹cuÚeixïߊ WÆ·¹òf΀A÷ñ³FÍ€=¾¼¸µë×°56^ ™nÂÉ+3ëÝ9´hÁ¨G;ì-ü·îÀ¾w«.ŽÙ÷pÓ¬cKŸN½õlšµ#—­Î½»÷ïàÙ^ÿ¯)Öv]žáÓ«_Ͼ½ÉñamF¾Þ½ýûøó§‡ÿ¸¼vÜú(à€®Å_vtm§Uoƒ1× eÏ1ç\Uæ hUh!E–váCÚâ]Ñqøa$è_‚¢´ÛF¡å圌'>ˆÜs—™8r6˜Òèáˆ8Vx9FˆÚ9*7ã‡4©djÅuè¤p N¹cr¼}F¥‡Hj$–'> b—ÊMÄeƒFö%¥b*Êgž‚ཉbPvÞ©çzqÞô_}iåi’  "¡Iþ´£_5fde‰Hî)é[ŽUÚŸœri¢OF£“‰†z㘞:È%kf>x¥š]žé*›/ŠŠÚéj®º!§®)jmÎzä˜I®Šè¤Wõ Õœ-«ì²Ì6k©¥J•¬³ÔVk­}ÆšGßw¼™8\°­b¸d¤= %™QYe¸ãÚj»è‚©*»Ÿºùé¼µæûíº¤‘Û¯¹<~É+½Ež[p„¯Æ˜°ºóþ+ð®Üe;ßy׎4¬¿W|±¢â·±^ÿ# è€#~Œ1Q&›,oÅ,·r¦Õ­©ë©üÜœ¾¸.\.°åö,äÁ£ÆËdÃ=)k¾B¿ÚòÒ½ÌâÈLG-õÔf9--Ô±-ÚdǬæVæ×0æÊõЇ¥œ4ÕZMÖ´®=J4Ù[˜ôÏ@êô¦¬êºõ­»ÊssJ}¯ÌöþïÝüæ \âBÓ¶UjK†õã”WnùJ‘o{ùæœw>Ræ{.úè¤O:¥§®ºå§³m9Þ†9vÙ³Zûê(¶>¹ÅG:J0â€ÛIx×LÞë3Øäƽrì+/®ØE{©òÆ;a¨Öƒ«sº¦vO6îéþãnÇìõø‰þúÿìS«>umn÷ó°úz&Íu—ªßr£‹ê–…ûâô¶5/Õ,JÈÑŸºG³Ž-*MõZ×’h%¡å˜æ7¼_ÉD84i°` !ÀŒ·•÷ÁO¤ W+hÁ&ïû3Q ÃÄÁ .ŒnºŒeW@âô\QŠàÙê§Á¢©pÚ£ap V"üqg ƒH¿$VíY´YÑÕÚÇÅ.Jʄґˆ€Å€§dÝGÀã¹PI4¤ßÏ„ÔD­ïòàòèhÄ#úñˆE”¡óÖÀòŽE4dýìå«sÕ‘TÙIÀ˜5ƒÍoŒÜ¡ôÞØ;Ùáï{ÓÓd1è83émoqžd!qØ« n •:¬!gÙ¿èÁ±^@¬b ¶@2ç~Ldå!™±¢PÒ‹ÈL¦{Žù1îK–‹ü%!…MióV” 5}‰/mqfŒLd eÁ¯‰Rœ³$§¡ø<Ær”`¢`‰ØÉv®°=ÿÌl›%­©£ì±é‡$¥ §yOD 4ÐÌÙAwõN3 ½´¦ ZLT.T þ<åeÙFvšK˜Eç”Ø“OežÄyă$ J“¢¥¤‹ù›.{ø%rj©Ž¶gì’輿 k£IÜn'0›îq oTèðº7™öí¦‘\)±`êÒªZÕ:XĎ׶»«zõ«âÉ*y0õ4°šõ¬n¡*Z×ÊV¥ˆ5>~*k[çJפ¨µ®xÍkIîª×¾úu#|ý«`‘Àö°‚5,b‹;b8d )CCádö­—Šë}-Dd!¸‚CJ” !§e¬jïd‡;\``® LI+‚Ó–À´%xEÖ0ÉÁo•ÆG>n˜ôT¦ ·J?* &ƒª¦ß6wsiT”0ÆÑŒÛ=İç0 D`|Ö´éÂmSà)„ æÀÇ xðXÃ!K(ÔüÀ!QÀÆ]8bÝÃöF_&vÁ#0açÀ‡ V1VLËÀǃ)‡4àC Á8>,܆5°A"Š]­ˆÏâ›øª%>±Š•™â»˜‹ÿ-~±ŒÇã‹\aÀ„ªÊc³0‘¤òÝ@—˜À¶Æ–ÛDåGd;Y~c˜‹LÙG#/ÉÍ”ª•·¬,sùË•ó2˜Ç<51“ùÌ-33š×\-5ÛΊ©JéÛì·È*¨ ]S… “Î;5ã{ÜN®=Ðϱ’(#Uy¶.ÚÆÄ‰4, 8h*î2ÎÓqsI:e´ën\¼î“u*8bÔ{s²F£çç µú¨C®QÞ†=S)µxsËõ&ó¬çUFΩê]†Ùhq•ÍÈ.¦7]ª?O´¨¯\r(«ùÔ2îÔ°a9EYÓ+!Ñ€+tPU”ÒòÜ=̼l‰âboUršÂõöþ9Ï169oxü&éMÀž¯ß5 µ¼N\Yý;àüûh‘ýÕêY3Ó?ŠZ—ìŠß‰âX ù+ëad¥Zf7RB~Åyà é–¸øÚ Ýðן۳?l{ڽݑúRôO uÜiú›ïP™6ý8õ”pnDj´¦HS¯Æv3Õ<ŽwhÙVMâ€ÝçQ¶Bxˆ+FÅt/r€j$hgá~ï‚ve"#‚>A(þ”òg}À‡†Ò‚C‚Çÿ7§TûD±ô€Ñ§sõF} AÓW€ˆ¦x>'v{£ƒDøƒ7Hn±€Ã“R˜„@ˆv ØPEhFA‡ynuï¦9&ø…*'ƒr55+˜e*ƒ…2h>8eÁ· h x‚e$T5ˆ}<õx¦VK-U=”sGhgXgtT×$v\çsLkEǃ5¨QVˆ}Bµb˜u`x‰™V‰¯—3$n´„ƒHv}ÆC dN|ÈRw¨FÖÆ‚7£†7H„vIKÆ0–†Høh¨XhÃÔ@ž‡óI68AÙDOmÑÇC‚GŠ|HvSDèÖ[uø|vdŒ×׌ÅhgVL·‹ÛÄ9ÿ¾ˆ‰à˜ßŽä˜"š8u嘎‡1ŽêØŽ—Å…X·‰î8xŽ^HøXBö¨~ùØÅ²øçiLé:y>ÁŽÉw…p!ð€ð ²Q»£¸… %p[·õ·¥]&Ðò ]YZø€[ÛÕ’BÐ9Ð]ݵWÀà@`ðpQR)°]¦Õ]æ”1 ¨ Ò  `) ¡ % E‰3`Z@0“øÐ4¦ð’¥U“ç“\¼•–ˆ·/lD\¾õ–·\hé&¿%¿Ö-;sK¿¶—Çex”ƒ%¢‘‘309`“(ˆùŽb%u÷˜˜Ž)Ž‚ù˜’‰ 9™àX™–y‰˜™™_¸™œ)‚žù™ïÿ‡qÞö†x"xÃ@7#š_™”Q†BáŠ"aQ8F¬Ùšðèzèè5 ¢j/˜Pζc=e?öd«é£›·Éz¹i|cÈ›§!&MæCÃIiµémi¸cÔ)›ËÙ~® I–œÅÉdœfœËaœh eø¶s©Ô“šEÁî¹Vð‰2Ê9ŸªSŸøizú¹Ÿ¢×ŸþÉw x7 Zuz —  šl Ú lš8tëyIk›oq*Q>ãfšIqŸ±‰<"Wfß¹¡ˆMŒx2mÇvWk× sY²F*ŠK'C£ž§næg=³³vî’cú—oƒ‡=X8E"wŒÚê¤32¤¤W¢g(ŸÃEež\æ–GÛD«„ÔÆ³Ù¶¯ ÈnNˆ‡‘¸³RX©ž¤nÞƒ¸©·Òg¶e£I§²K7yeTjlʄ䬜¢¶Pæ«k[µöÖ±ª‡¹¸í:¸²+°[»&v»ÚW´«zš»F(èºl®üÿI»7‰Ø7…[¥ÿG›‚6À)¾V¸ð~ÕxŒÑ(~¨¯ºÖr¯J›ƒÈ»U¥»–jM…ºŠK5˧Y˜‹p†\Rû¢É5¶ßC¿i‹t’‹y‚zºÙ§¾¡K¿ g¼¸‹ä;ÀŒUÀŒXœÀ„µÀ œXüÀéèÀÜW\Á³;§÷g\ŽîújÔÉ›¡æÄ-Â{p!¡¡ÿÁ)¼s ÂWg»fm†UØ(½4Š©ôGÙÛ„½ÓTHB4¦<|S2LÃÞ$Äo ;È›¼£Cq‰¦E7SÇZiÕgRô­"Ê3hC‰RÚ[°ŒûÅ ÃS UÓærªd%[4r’ë,¿º­'ºÔ›J|­„8¢dÅ’‰%‹³X\äæÃ†lQÈ N@ÄðrÇ ˜:lbp«R-ÅÉÉoÌÊȴϱɜ âë3â$Nc~â£gâ*¾:,Þâœâ0žw/>ãO,ã6Ž 8žã ºã<î >þãäBŽf5^äVGÚòˆäV&q ¡ qäL> …x. WÎCIäUžWìp{P b@ß0å}[" éð¨’,éX@R"à] qŽê`[aŽ; p®å“ À lÿ®ä÷ #ù‘uî©üE:N.V @@  _ÎèME™ ·UZ‘>õé%ð k—¾5{”{Èu'› —>¢0w™žq™©ÁþxuÉ—oIë•®¶îòÌ ò [´û‘ç%Jð‘Ûñ ¸Ðº`Ø`;` ¤` ø@÷…Zذç-¹¦ðîÞ–nìó«–ÌÊ–÷ռά¹ìtYëÏUïš½Ù€ikËÕïTÓï-H ÆQ±0é@ñ`‘af†%_ i–ƒþUH087$@0ª€`À ðòø0ø€g’Ð À`af agà æŸ·Å71 Q§??wðÁ©CÏÁE_qGoÏ‘ô]µô@~Hß©R_ oUõDõSŸUZ¯ô\oäYïô±õa¿fM¯›OoõgÏôc¯öeömfiïœQõsoôoo÷9÷yOuuŸ~~ÿ÷nOõd?ø„l/ôlŸød¶øæøÄÒÐŽ/ÿ’?ehß'<‹µHQ•ÿ{/øÏlÉ.‡o¨zT¾¡/ú†÷™¿×‡4"u)¶qM°Ã¹šç¹º”ßú£úú|±o;¦¶«û~F…œÂ¹à÷–¤Ö¢Ìü”9úŒoö-ÜÆ¤!›Ï©‹¶¹Ï=PË´§ö—OÅoúKÌÈ6º¶½ßs6€ÑyÅ ÷ûÔOç÷¥¼$Liß@| 4(`Áƒ :lQ!C…^Ę1£E„9´øQãH’%MžD™RåJ–-]¾„SæLš5mb¤…/çN=s _‘¡E‰Ü„/éM‰'Š„1êD)bÿäÒ*M‘·zýÊTìX²eÍžE›VmZžm} JT®Q‚I—ŽíŠUªÕ„ûv¤zµ)`¿³Fl²kßÀUî…YòdÊ•-›u›nPºs‘*-ËX´Ç°†µ<µ)c½E·F™÷oëÆ—m߯[÷îššÝÆ¼.hÞ’óGž\ùræÍ)û~ ¼sÑÏw“=~]ûvîݽ'‡ÎSºð£ ­GŸ^ýzöís‡ï9~zu÷õíßÇŸ_Fø?ãN/Ï®ý$°@¼¬¿Í„"o¸ó„0B '¤¿·4“O8ú*ä°C?lOÁ éÚDOD1ÅÛDü¯ÁU„1Fg” ‰EÎ\4Fwä±Çÿldp¾}$²H#+²Á‰;²I'Ÿ´/I„²J+¯ÔNJIJK/¿LðB1GôlH0ÏD3M±´’K5ß„3ΔØÔÐL9ïÄóN:I´3O?ÿürÏ2Ý,0;äà QD46C«zSPêúLt«†T‰/KkÛˆS¦ì¢G5µ£L=Õ‹¤Rw[¦Vo:nÓHÅü­Å6™Ôí ªöUYwE¢´Z•Õ,EƒíÕ½Wµ;6Y5%]òAX—…´ S¯eHU×*Âv´Š¼öZpÁúÛNÍM"Ö›Ýv÷zÍÙTÉõ4]wA—WzéývÝ{Ëýµv;—Ü^Y³7àSÿýÝ7Ûjóƒ–J¼ v `MÍ7ÜKÖ8µ~-ÞÖaaKÕ—ÔÂÂ=÷áj7ÎXå‘‘=UåfÕX”M½XdšCÖù±¯Jn¹gŽ1Fwh”©å.â§eX±“ öç§?Ž·Xn–Zgw+Öz\¡ {×㕽;eŠi›-g‚F l„m¾W\žÕ–·ÛzËÛëºá5Mëû”¦”i–4…º¤¬ s¹nDz6ñšç%™´›EιخAæ:eÅ1f™hÏq†;ñ¢MòÐ7ZñÊa]sÁöœÐÜ6Ýf˘ê~Í—ç×Mö˜m¸Év»dâ?Ï6a´Ó>}ù§NŽ›øÕýå;ìÉ3ÕøØ¿Ô>¾å›u½ØqÝ/|?Ío4} á#sRÙDúÍøÕ§|iéÇ?í׿ÿSÿäßu擊eQ\ËÀþ·@œÐ*:¶ªÓû”ƒ@—PÐQNÓVKˆÅº…© äWó(>Š‚|’`r,88¢å€-Ô ƒ¶–z# Q ãsÂA‘¯RëR^ɶ³M`¦aÞ¿Š7<åíŒaC¤ÞÛ ˆ½ï5­cV4Û M<æì5Ƴ—e¨¿æŠSt“Wê’‡·ŒÍÌo>3¯·ÅÖ½Ñh~“›ëD‡5îíŽyœ¡]¦¯¬­°e4£õì&Æ%>îz/£¢«˜D#†ðŒCãÞñæØ»µ±tÈS?¹¼ÜÝÑ‘–%M‚ÈCa2Ž7tãCÅ9-BÊjx;eÿæè¦Æëu›Ëà×b¶3Í­*—ìéTÉVÞFxWdd#CÙAi:Ž4abK(jÅt¢Þ:öHÜ ¦{–#6 v°/ÖÆ~jæ2å9ÏôÄ“ž÷Ägsì™O~öó=:ôÏnu?Ô ’ÙçAºP²$”¡…hL*¡wÓƒè3ÎC£Ñˆ2g¢ê¡/3§Gr43©(WLºe¥Ôp+ÐGÑBu=Œo¶¾T°¥óúvØRnOl“¥i`+ÉÙRŒ¬5«ZV;™T¡¥ö—…½gõ#Vîö±¢*\#GÎ`rS˜±¬lÏZVBUu6#mq™è× “µÉ}kns9]˜nÿ‡¶Ìò]SÁø¼›]µª™|n- Ô¶†VµQeíVÁ&:wz–¤@u/tÕ»¸›Vo½qÅžÛІ8_Â6tÜ=Ðu­ÔÒϹ”C® ‚ǚ׿%¶}Ñêh„%üOØÂ­p¡ªë(ô%)íð… ”a᫺!f««6Ì[ïˆÄ4Dî5I ýU6í$ïS˹ßTMå®|èJÛ^©º5·ø=f‹³ä`ºÏ‡ì‰ír‰FÈc°­|´›•»Û^AºW¶æpe%דÉà“×CæñÚz½£éi¥|ä4f·¿éÅ/¿ ÛÇvŠS¯àBq™Ëòâ V¹ÍÉIJeéxY0zÏÎÙéM2jÙkhYy°âM¥ =zæ ¥™  ånC `­Õ¸RËä^I­_þ½N/ŸèÞð8К^§»4ø­׿Þ4ûš a`[¡„6v²Õ‡le7žºž¯=m2»¶¾† p)ZÝÚØÖn% çg`m3˜Å™Æëµe"RjÏܬºZ‘*Ô:ßבö•44} Ùæ©“®yÃå®ÂZrD´aŸ¿»°ÒuÇÜîç»Í8Ì/÷•tPejžoZ`DËùr´££ËËDZ٢&Ç-ȳ,Ü|ãJ|vñþ7­3›¬Fß2Ç UÇuWWXâYÏ~t-Z…þeƒµ1ÆŽ 'fçÝS~ºüå¢* £»Îà~váTåðÿhsÌ2X¶5¯²m¹\õ•T¼çè.¨ÓIe{kÝgìÔ«ÜP >ª1|Ëse«oçÚ5:o‡tݹ^8æðYvêBÕÞnÆ[iñ‡|“yÊûhò•Ç<.ŸyΫhó=ˆ>zÒ# Ú[RséUï¤Ñ¯Þõjýëe±Ótö·/Rìq¿{õèž÷¿ïŽï?|çŸøÇOí=|æwÈøÍ‡¾mÿž}êOfúÔD<`½½ï¨ñ£,Ŷ.±½ý2_Ÿ‹[ìÓS|Òú…ä/¶ùÏåe6ÖÙP„ïû-Êt–­ð´K†‹:º<«#8ÿ»º¸Q¢{„!¦SÀa”ǃÀ,$LëºÆqº*Â:Xеts%ìÀß1ºË©rò·D ŠCÀ»/ T´[+ö‹“Åk¢Œ4Ÿ£¹ð9@ͺ3ôÓ­¹ñ¾ày&œK²¢Ë´hŠA¶31JÊ@:²<§ T% „¸ ì²îË/¼ÀR+7:çZµùÃÀÖª$ØÈ¾™s¡šº¸[Cô0‹ª4ü‘¿ ¹1dÑ•ôƒ”Âÿ¤³ýó£4$b‚ºYš²+[A «#ßbÁÆ!+TÄáD’â*!4·4¹Ãã"2+«@ú¼­ª¥UÓ6z)ʺª´&7³;Њ$C̳¯Â·lDSä>· ¼ô»AåC¡Ô«¾ƒ9ûp©ï{6aC³^ü´_D©`TOúŸMTÆhd h”Æjt7^ì¡d´Æm,>lt2mäÆpL>cì4dÔOT ø[Fb¬Á±â³PÇÔEÞØ-´Û jÆC\FðÓDz ¿J‘GìøÇuÈŒòÄ‚l(o$6aìÄß’±Áz­OJ&Vœ4TAWz¢ B¥c£ïº•9Ì©4¶{8‹¹"Ü!I‘ˆŠ"¬{-L4—|DC#*„¼FrܵÀ¡G?[F£ÅI[ÄÑá«,ä8æŠÉ\D9Ã"‹³4ôšªÔâ CÝùÈ¢üº‰ìÈ9+¬®#+ƒéœ$ü'›Œ6œdH‡3t+Ã=c±Q1®¥DJJƒCc²ÔÊ\|Dªsœ2¬|³ÛÉ&¬,°Û@¼3ÔXÿ|T©–§9JC©È«<;»ìJŒDKŽÉW @ ÄÝéC) /$ÉCÄ©ÊLÆI¸Ë¾¶D¿ã ¹´LÁGz0ÆÒ°‹ÇLd Úœ…”Í£IýÁMܬàD ÃÇâ$ â4Îä¼äTÎædÎæLÎçü0T‹!ÓÉê4ÍŠJ‚)¤ñÊi¡ÃOéMôG-K7åÎ *²Êx'¨47– ·òD10$Ïî©§ HôÔMi[³¤º7yÈÈüÃãÊ›‘ü@>Óº©4ÊÍt¸Q¢NÎ,—­J¸Lž©Њ¬KÆALéRJB I;Ê!ÊÊzŽý˵ƒÀ*bË5«â1óÏ£dFøŒÀÉD?42»²²Pm8åI(tJ/äÁ~Qº\QVkKíÀ2tÆKÔGû<»\J5Ò!•@0BU9]P$ͬ™L%m-½<Å-M«¹¤QYsË ­D!49…ŒôÄN:ŠÄC;CÐÜHÌ;GÃ$›jÍÉÑÈ‚;MÌüÏ%µéÙÌ]ЗSõÅ™ZÏ+e¡ü¼Ös[Uð On5ÏeUÏl5Hp5½M]¾ûøOFíˆÉ6{C-eL•AV¼Ðœ³ÖiJX²R”º E¼{m°ÛKyÃÀÓ(RžLÕµHÏ*t"ÍQï2"(œQ`•ØÕ¢±"Å?SØýñªË9¢ÄÄ cµôÏ墫FÍÊ¿+Ø5Ï{”Ö'U·¡;S±ÛWúûÖXÄ-ÚyË.AÖüªC[Ô¸LÓ%Ó¼„Ä¢œÒª\9å R”“^Cwå×~=Ô<ÍbÒWíìdÓ¸ËZySØ®êÚ\Ô¯u¢WËÌ…PeZ𥕭7™©-³…ΘÅÿU¼5N»ÝUèóÛ¿e¾ÀŒrÕ—ýÙ,WÛPmÕ>ÄeV,MÂÝÖpM ?"שeOÖ¹OhÍI¢\ÝjÌB¡Õ±©„ÅŸDˆ·êWkñÚ‚k\ ÔÚb¥ÈSkÙÛÑT]?UZ6åÛÙÒ[t ¹uÑ8Ô¹À¼¬“ÐÇSçòRgÍ£YC^þóXŒœ;¥&9#^8 ÝÓ¸­*ÔMÞÖÅ^7åX£#ߨGÉí­àÁЙãÈ­PוLveÀ„s5ÇÆò‹Æd.ýÒð]ÃEZ”ܺþ•[ºäÙ½·íÚ¢ÏLÝš%ºª%D5]ÝÞÝ•¡õ’îõ§÷kTÁÍMýÍFk, ¦ûÝÛã`Þ½VaÞ†áA[{á¦á›`áV½ÆaÒÓá½öaÎâ Æ¼!&bÊ3â#†¼$VbÆcâ&¦¶'†bg“â)V¶*¶âo›á,æb,æâ_óâ/Ö´0ãòÛâ2nb2FcSã5¶ÿ°6vc ƒã8î¨9¦cˆ²ã;f¨<Öãc;ã>¦a>ä´ûãAnaA6ä¦+äD\Dfä{räGN“x o Jn‰H–ä7i„@ [äMÆ=pnÀ‡O€ €‚`f eQ^=w¸ˆ<À‡D€H€vÀ‡>¸ˆpÎW†å×»ƒbÀ‡ae€[ƒlÀ‡E0Wáo<‹yfA³‡wØcxE8„@؃=¸@ Ep„HH†nXå“+jH`Œ0@zÈàŒ!0€‚ˆ8|(jf(NØ=g0°PŽæ…, *(‰.P‚q‰îç…€(sH‚@€.RÀ€&ˆ~.hƒ>(x?gƒ Зاyé(S¨h¾.È…€††\((h‚(,Ðiîhж—î' „I˜ƒ8À€¨€˜„1ÿÚ'/˜géQài`ÈÕ¼`Ï Z„ÓÙÉÁÔˆìªxÅŠ·îGþâk0ñ"³¸pƒÁ樄҅Z€Xð銞è”Q`@¼à3òžyÍàY8»~H¨»Ò,DÑV@Ï m˾ìwéÌF‹‡¨PFëyv†‰Îh”ÈŽæ–¦†È‚0…Y¨†%…[À‡y l|xØ‚] xüëÓî_ÒnA³åìém }kØkÖ^]ê®nëFmËFà4ï`ƒÍaÛM¦êÈÆˆ¡ÖhØ…Ÿ¦|@8T(èHP‡‚.X è8W(h¸oìèë¤ÿ½l¾Î`ìF‘ôöCïžîíùîÑoÔŽ×óæîîÞp4¡pý|èö. '¨(øÐè‰öŒ°‚Ð…r˜g|È‚‡Wèçø‚XP˜gz …~6 O˜‚g0V„É/ÕæJÛëéìí†ðCD¸ïoRä7"³ðvõ’.* '˜ `H‚#˜€  U˜€`s Xs|˜|8ƒ4à…_¸ó3¸óuè ­˜í¦iW–²S¶ít•{š€Rˆ&0&¨óX… X… óLŸ7H|Pƒ`èôN·s5t`^O˜ç‰¾¬¦¶ y˜ô•xƒ3 Mfõü ±õ[¯S×õhT€;aolserver4-4.5.1/docs/intro/tcl2k/html/img052.gif0000644000175000017500000002253607363640503021205 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝZÄ  'ß¼ù6,‘°ÞÈ+þ ·i-¹cuÚeixïߊ Wη¹òf΀A÷ñ³FÍ€=¾¼¸µë×°56^ ™nÂÉ+3ëÝ9´hÁ¨G;ì-ü·îÀ¾w«.ŽÙ÷pÓ¬cKŸN½õlšµ#—­Î½»÷ïàÙ^ÿ¯)Öv]žáÓ«_Ͼ½ÉñamF¾Þ½ýûøó§‡ÿ¸¼vÜúÅÆ\€Þç\`¥‘ö\j ý6Ø :]_©WXh¬QX!„‡ñ—]Û8‘s$&8ÜC¢8Xa*ÈÙs&¾èâ€Â¹øâŠ'ÖØ*ÞˆcbЍ—‡þ ÕY‡H†¤¤“«i¦`†22x¢ƒ?Þ(¥ŽÈå]+ÎawDÊg^ˆ‡)§æq1'æ•o†#‚>Öiç^‚ ¦Oº¶æŸ¦Ø‘—}¦ÙdIeÞô_}zŠÙ¡÷9úhF’"× Eòve‹6H%ž§i‰™²*–2^š™ŽµÚŸ™‹.xV©©{åH§œ›¦še\Òšg–5öªß¬´nD,HO iW‰Buæ‘núg¨ÒVkíµØf«í¶Üvë­¶wuÙ„ªªì†Ê.ÛS³æÑ'k·B¦+]¦Ø†«î½#±;ßyïro~ô^k/¾{¤ï³ŒF ¯ˆò èmÁ‹ÿtp¬s×pÅg<±‘ gÜÚŇŒïÆRA»ã´#‚<]ë6让Œ)Ã"¯ëªc–Ü1[,ÿûQËÞÚe•СèÙ‚šî 篞r\¨BÛ¸dŠRC-ìÐÉ-8pÍ$‘L–É<#ë3I2ÿÔgÏ[U*iÒ”rýÖÍ´©s¿Û^èËÉ¥hô†ZnÊ„O§õ¹>š·’†™¡”¶ú-*Œ2½wÒ[‰gånSäµd;¯õ0Í™‡òæî*ö9e‹®úz¤ó»º¡¯Ç~oëhÊžVê¶çí`ë®î¾Ÿï«(¦À,üòö/«Ø 3/ý~pc'÷×Åß=êÓwŸžó¦/Ì=W¶=ù®‹3XaŽb9îrb%ºZC=5ÒÔ²Ÿÿ˜aZŽøj¤¡_á¼> ‰/@ÉOs·À­1§C`ÚüÖ¿<=ŽWûÓ_äæ§£ÄÑ8E³ÕrX>]®THãÑÆ%r1NO£’ñ·A=ùäÞ³Jóãȫ‡)¢RªGXq,‡Y"—86 ev‹§¨ÿ'Fk{4 ŸD0Õ̉Š#b|uDÓaqX`Lc‡Äø*2Î-|þRã’Ø‡BZí\•ã¢eâ'CÂõqr|’£Q¬x²8 òˆt s†=º+‘0„™±„Ó†JZ²!—¼dE*™MZ² ù$(-£Ç Ú1ƒÔ:ÛûêH¨;žÏ8xtS¡ØfÃÅ’¸Ì%wn©Ë^úÒ–‹¼ç~IÌbs<Œ¦1—ÉLµð²™ÐŒæ ƒiÄ7JóšØ,Ê3³ÉÍnvšnl¤7Ç™Íb8„ )CCádld›$ ‚"‹\Á!% JÐ~’óŸ!».00€ä™ù?K°Ï¨ÀB@="œ$õ´ÆUT’Y,Öi'AåªV˜ÑÉ» ƒÎh<‚˜@&ÈG>÷9‘.04™BJpŽ|¬€1Á5²„ˆ`ùÁ…lÜ…##ýe£º d‚L0&€Ž|Ø€pÅòÁŒ|Œ•qHC>Ô Œ3äC­nX$²R€Úõ®l£³(†×¾úõ!uý«`¥ØÁv™ÿ…=¬b}™X¨2É~õKå—@˜>âìfh)üÌË0{¸Èzv±xmì$Õö%ÈB–8˜5íiù†’Þð– 5¬h©³ÙØÚö,³½­n™˜ÛÝú¶{½ý­p…\:ꃹ*aßæ¤\ŠÞ©ƒœ¢ ,gBªŽ$N}«­P‹¼ˆ¶Hhýnr5)ñ¨£°)îp×+;õZ,j—Òt-^U ƒlß­¶è6ç’ ¾øÅ®sL^ïšN÷}®x1º;p\Swo{ð¡ËKÞUëØßòw¾5úçD“˜ÔMÞq²ù Áx‹¹ÝS|÷I|}í Þ˜Õýž5Ž ­ñ›º–°Æ.úßAšäQÖÛŸQ^ïRK Õ±ŠÄÕmˆëgæ%¡¸¼mî=œÿwÏIæ¹ô|Þb oÞF»¨ú.Ê'¿/ ](DI¶žš?Ý=Q‡˜i¥õ]FI·ïßÀ~6²·pì_/ÚóÿÛ¬#ËáWûDÜnôAõò¼?,';9J¾÷=”ç¤'ûNøQþýÑ^—¯ÒG|¹´‡]ñjG®¥Ä¾x`]ØNVGÔÂ!,÷ÎO{óÖô<”ýxÑ›…î¦O}RP¯úÖ…õ®=c@/NÙÛþ{´Wæíw¿ËÜ»™÷À?Š!ðáAxâ@€ñHÈÆ÷Fžˆš0”¡a¨KMЄ‡ `.Í‚?óÑЗ’_ ÉALcüÔÀÀ.@0|àè/SðÒ}ÆôèÔ ª0  &±à»P¢Àù0ûê—M°~!p æ§Oì—÷–o$c`Viòp5eça¸‚'$9'7_ äxÌ}^f)03í·ƒ^Aƒ½Ãƒ@ˆ°„DXCX„H¨HlVMµ—„Nè@>˜=O8…¯…Tx…Vq„X„ÿ™Va_æÐa8.³…\Ó…ôVH`˜aS¢YÚE†#c…w!a‘¥]„Jð³7x¨ZwØ&MgZ{è†"c†³(5¤‡$ÒY©ÅAÊñvü…Z¯ˆkFDÉô{áFoòY—ˆ‰ˆèY™CgøZT'Yè6ZHgŸ8ŠvUŠÛuЍøOªØŠ±÷аØz²8‹©W‹¶(z¸˜‹·‹¼xntÈiÆò™÷MKNº)ÂsAösŠÌX–8.3æ_÷öQ &h£†×`Çø`¡·,–È\Ý85CrŠƒ..¨r-K˜³#åH‚½Æ&€³J‡s¬•ˆ”u5…¨Ô,¯á‹¢—Žì؆vª'¿H nAZ/SŒ³÷EVƒÝcp Å`%¦;¬Ø¶rè(‚Çr£âQ ærµ4™YõÒ&ðå‘DsŽ4¦‚“qõb opçt{Ä]•Uoå2]¿2YA©_ª„*'ù4ÐH))YlE¶å…6f>ŽUrfÿ‡@Âm†¥bR9ITÃæ•*h‹Ö{Ùe?¨=uZZ¹QK&-ü6’ä(j²F_®–h yc Èh7yK™p3ÓÔ’°Š.†<ç(K´—=æ$}†“YÃG6ù˜K#bd^')—.„5¬R–ÊfFi©dG׌í×—›fÒ„”àRs;¤˜ŸÇ™ —&Ö¶‘°Áš`XAõ¢šO¶_ásxf• ·u¿†e©©Cø3r§r˜´)"¤™“쑜fÓ–Çãœ}µœÀYq™-~y¾ ›Õ¹sJ–eÂø¤:¥¨b]𥕙G´?¦é£p¤é9è¶nlÚ¦#u´†y0ÆË5–Õ^.Ycç%eŒÆq1ê§Ùi¦p¦g‰:÷pU¤t%¢jڊʨä¨ÆÃœU'©J©·c©êÑ£˜úNšŠ¨œÚiŸº™Ê„É8 ´ ¥š^¡jWžÚªaŸý%«Jùª«¶ª9¸úOºº«z¤áøDJžÀªpÂÚ„ªzY)ÃgÇZE½J>CÚœÏÑ:A:©Õ ­ÉšªBš­Æº­ˆ‘£J:nâ:$ ×ú;¸V¦‹z®ãÿš®I›¿:­IÁ“Mé¢w¢ž‡ «º¤ÒX£ Н ÙB~ºo!Y+&h"¥§y °wa×Èjó:«ðЉ®êZzªV™“÷)ÅBV988d:C«EÅI.z /7†"¦™òh{K¤îú®ÝJ‰ÄJ þzl³–z–pÊ‘aDE—¯úªäjwAGœ7h&™¡JC—©&“Û§úF“(—_7pãå‘x™›,'¶©›+ªM3‹MŠéqA”2Ä+g!˜sj.(²NcA{2”É/W·n‚‘Ù+×8,¤·pû¥ É´Ê5[­‹[3û¬+2‘{¬üŠMo{³Î”¶Ò8ª<¤¹k”³AzEàj³›šŽ€)›W¸´æ™¹õŠº‘—t­$ƒ´K…¬;Œ® º§Ç¹ I¯ª»nq¹+Yœ`´Œµ™ºªËsÂû¦‰Ä²hו‡¸8•G)}yÕ+ŠF¹[Ëk-À‹X¼ûºÅÚ½»óö½HQ³Í 2ÆÛ{÷Œˆy\•Ë«¢›¦•¾LT]yzgxúËw±wþ+J€‡¼·v Hx´G”»“gÀu½k)L’¼Y±½L–• ´¾Ë#Á(I¾â{‹ÜÁºøÁ Ü‹"<Âq7¹&ìM(œÂÜ´Â,ŒM.ü„UÂ2 q1\ÃÍtÃ8ì½ñ{¨;ìz:üÃÄÄBì;ãàÈàÛ`04\Äx…Nù1à Å} MìÄwÕxÀvð uLÜÃRˆO/%êð©p}ãçX@R" S kœë°PZœK €U Ð eÿ|ªÈ¨³ÙçRÖ÷ÆŸ‹»Ìó«ï2–šðd`Л €ÅflMü§ ¥OŒ<ö°È% žcœT'y蘸W–°úÕ8*–*7ÀQ™¢!É:Äi=4 Ð “0E©Ö·S¡Ö÷RQ° ± & &°§P §4°Tý” uL~Kp ä,SA@N——rJ—²œ´ £ek‘w:‡ ‚µ˜);,XÕULà5 # cåmõVQXFu}ØÇÞ„€IpI@0#° \5­0#hp¾ jenu¿¬† ŽÊƒêбè`ûÒò Óû*FJÓ>lÓW9=ºª¡ÓgÔB7Ô‡ì5ÔO§Ô.}FíÔ@ŒÓDÍÔ;MÕíÕE6ÕZíÁ×ñÓMýÕ[mÕKíÕd}Óa}ÕhÖrÇÕ3 Ônmspmm=×OmÖQ]Ôr×äVבq×÷®~½žÿk}Ö}}]P„†qȆô’2\Ø!Øt!ØÙê:U¡8?-ÙÓtØ{ÕG3†[äØvˆÚÙ Š`êcr¡èÙY=bÕ}æ¾…¥D#t¥Òªe˜]ûGÄ+ÛP§×]ØR'‡ƒs†êˆÁ}‰ªMÚüÚ›hÜÇ ÚÉ=Öæwˬüݬ-QPéX€½Áݳݵ=Ú·M½ŽÍ_†ˆ˜¾}²é½Ü#戄­Þù‚ÜqÍÝÔºáÞóZã]?ûMJæøAéËß+AÙQaÙb9¹¸>à§]Üu8Ü®Ý%õˆÙîÉ´ÍÖÊ­u jÚ+{áâ½ ¾à-.àQæè¡!žÝ#ŽØÞ >ã÷á9!áÍ â:Ž£þm×%ä¾ÅãR]äF®[HÎ×7¾ä Õä¢ å—&å>NåG>ä­äX¾XVÎå]~X_þäa.XÿcnÛenæZ^Ù`žæuæîíæ~çr.\t^ç–Çoƒª“Ij­Úýßhžb¸ãeãË¿£Ee·ÀuٲƙµKóµÜø‘íó¾w®.ãpbº¥ñ=¦©?)ë)“ÙA}ßZt™{¾Š i&ßœ…p™•ފȧÒQéâ8è’rÅB`%‰¢â¶ ;¢ñ±¦Hzº§«F§e{µ vì‚É›ÜZã¡}娓‘ð,ëé¬q'ư¼)ì§®k£ÏsM´Þ$MY"zʱ'ãV·¿î–WËÀm<Ÿæµ}MãŽçm·æÞæøÞ»tÆ÷NÕVg]—Ç’**äNäd;òl˜¥mðÆ <§týƒŽ'\K£»NµµL–оÝÞ©&;¥$ÿ8¥å¥u*B.¦jˆ1ŽÆ˜®®ìQ«ì¿=¶àîáuiêÞøñ€ç¿I{z¶w_A—ÉeèD‘GÌKp ;ó·Þx‹‘VÛ§OŸ© ¿å O³ô:ñEíé¼¾q‡û^¾Ûí³Û®ªð<éOôþÀÊŒ¨IˆXŠãæ³ü¾H_jÿ¨ Ú¬¶Ø)ñS 䩨ï=Îïë¹°z÷yw¿(&.ònªÿìMâYOœ¥ûW@{‘\ù𘨓zõl~ùÿšù~µùœO½OñxvZkñ‹n^ˆ‚˶_ù6òZoúíNBzá[Jcꤻ÷Ž\® %ñ…)¥-×ì¢h—G™*JϵºÁ¢¿ï¤ïïÈÏô@ßý*Hý3#ìà¿£l‰h­5µÌ/hPVÀ"Gµ¾Òü}ú<¯ðºÿùLkþÞÿou*Ï/ ÿ‘Oà@‚ D˜PáB† pˆbD&RÄ8ðbÁ=~RäH’kå;™åÊ“E\ºÌW$æL™9å»YR'ÆŽ{J´¨ÑâÄ¡D9ÚsãÅŸIóAdzªÆÿU­:lŠõjɬY·~V¬@•eYÆ|)S-Í7sŽÝêu¡\¸uÚÅ ’®Â½yýþ˜¢YÂh_²]k§à‘}þ ÊXò云?¦Œ”òfÎp ›M»VtÛÅ}EZuRͦ]¿æYô©jÚ²/ƒ½ÍöîÀŸÏ†Fý¬ª=9*ÐÀý£Ï¾Ž¢ÒީġÿZJ+8òÜ"Ð@Ú2ÔIA¡)Idà ƒi<ÒÌ;/ÅÔZl ÇŒP´ñA’¬³ p´û³ñÀ }Z²!Sô±I)|±H¶Žä/IÙ¦ÔŠK‰Œ/J/Çì®ÊeÄÒ=-[#óË6ïÓRÌ7ç4ÍÌÃÐ,/Ä5WđϟQN:ÌÎÌÉ= epP@ô“QIu2TÆKËrÑIåòÑ0#Ý4Ôÿ*õpF=× TE5µU»HÅÄUãÜTÕLYu5×ï†äÕÊÄÕuJ[ƒ%¶X‡`ETVcƒvYgŸå•È3“ÅÚ›µ6Û\‘5Xm3Äö[q%åöJoÇ ]u×¶×i»U–]5å¥7Ûr·ÞîÂÕ·ßïî\yãw`ƒ øRv­`†.³ÝðÞ57ßõJbéLØÔY“Ì83’ج×aq;Ns½è2Ù»ö°ãë>7C ·åæl¶Wb)Æ·Z•qeÔÏä0Ão©Ùð³.B Ú² %¬Óê(D¯h¤1Knh8¯~,ë¨¥ÞØ ”vãZGöê@¦efûÆüo¶n»è--lJ?’®°kÙFO³©ôfSé°Ó™Ã;©]x_³'}9i¡…<(¼ãFZð +ßϲ¨•zœê'oûï¯-äºò¦7ÇÙÚ±-.û£Ô‹{}ð¯e÷¬p-õ8ËÅ%}ðÞ_Ýç‹]™vãÿ >ñ›wzÌßwÛëùg“O—ø³¹Z.mæEv²ûæÉín³ñ·«½Q§óžo¯A·úóÍ·KŸoùÉŸzi¸e^»tΧ†“þæç¯ðÝŠV z“‚Zã¹Ù sС_ü؇:¿õmZ;_û 5ª¸ï9ÿk ý¢d”J‚+ š€¶%2™ƒ÷Cù¨&ºË¡¯2|Ü _BûÕ0ƒ4¡è‚˜¹ÿñO~î{`¿Rø3T]ïDǃâk4BIÏ9P<ž]FEGaÑ‹Ò⾸H'+~ÑŒ" ãÍÆ8§2žÑIcöÖ˜À7Ö±9q„ÝËgG>îÓc û8È:ÙÎEWc›È8B6’2„^ çHJ ’°ÙS7£ÉJòñ’¯Édñ:9ÊÚýç #¥U8™Ê3~’•Þ{e,«âJYÞ¥–·ôÅ!y†Háá’I¾&uy8xõ2˜ Yå17FKe&S™cæ1ùL†E3˜Ó¤¦Á¬ Llf“€ÃuŒ@] R§zÖ5tñâ^×áZ;f½½Q†÷ëaG»0ÿÇþÓH7UÃ|tpËÓ†6|Ë©ê6¡Î©Äõ¶óúín„ùÑV3—Ð] †Ï‡áŸÅ#Þñu?<ä óü\ûä5×{²)ÿqÚv®Ìî2ŒìÜ®]³1÷Æ› &Ñäñ©»äù×dñ¢ŸëgA¿m©L–æø <éu/ò›»‰ã¥¿3u ÍÛQRkxo}äiÿxÙG¾ ‡=Ý«¯}Â';Ìö~Ò>Ô¦ªé½7ì Õ_üS³AVßÖkIg‘h¿ú £ÿ àŸvþ ›ïýÀbÙ¿$ÀGú¿DÀ>;Àd@ý[À„@N{Àüµßã= ,” ÄÀ ´3߸0zã'Àt Á|?4Á\TÁ<tÁŒ/”Ád7´Ádÿ ÔAäÁ”ÁBÂ!TÁ"4BDÂ$Á%dBtÂ'ÄÀ(”¤Â*lÀ+ÄÂÔÂ-l4yˆo0ôˆ.ôÂMsH0Ã3ä©pˆnÈP€ ˆ‡hµK>6[>7LÂw(=ÈE€HwÈ?(qxAÓÛ-?”B<0†| BX¸…1І|`„CÐCÄ3Ô z€D°»xà†c€„E@Aà>¸ƒ@(„ExIPo¸Ã†ø¤jH`ƒ0@z8àƒ!0€‚ˆ8|(R¬µNàƒ=ˆE0¸6ÄÁ ‚Ç0xuˆ0Çf$(08Uˆt€Æ(…|€ÆhÆj´FQs€øX$0È °8Gl3„ ‡w 8r|Ç‚XÈ ˆh(iÐ…Y ˆ‚hˆÈ‚…LGvÇkèGD€J : € J˜ÿŽ4ò‚aw$…†> œØºœ¹:òK¾âšîB¿óR›™©À™2i ñ L`€9 J‰£]°…Xˆ…‡$GqŒQ…Ö©¡¦¾;Wù>Äê°»«ë!"JtS+¹Y }Ñž°8€y(±ÛÃoø|ÈÉa|qDG‡Èvä~¬†È8Z°†%\Èz(Ë|€Ø…] ö8Êúq­¢²\‘-Ÿ“²Ò|,¿ò!,Ã-tq²×H#wÌI±4ŠLG„àˆ¤|@@…T¨ÆHX‡j,X Æ@…W¨Fί˜ÍC2Ô\ËVYÿÍþ?{M ŠÍ r˿ϒ©ÍÍ %'¨(øHGqôƒ°‚ØsÆ|È‚˜XhÆøXPÆz(…f4 ˆO˜h`5Ë)øÀKJ UÍð•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ  '_ˆ|ûêL¸°á®p›Ò’;V§]–1,qr^‡‘1_ÖL93çÏø<7½Qt`ÐI‡Þ¼ZufÕ‡cËžíU±íÅbé&|¼Ò²åѬ[sþëÙtð×¾³N®œòÞà•¡÷zztç´³kßN4ñRƺëòÿäN¾¼ùóè {§ ¾qÙôðãËŸO¿åúš¹Ýó®Ï¿¿ÿÿüÝ–Mí6€&¨à‚ƒ ˆá½—sÄaG›tæ—…jm¶ÜoaH!†À}DâsšUuâ‰!MV”ƒíÑ%aJÔy݇­Õ‘r%¦fá‡?öµ¢`8ö8]7 âŽÌMt™†- ˜sE&¹Ú”)yeŽÉa%v"vÖ$“>réâ–h–ùœ†<÷$˜bš ¥št²èŒùɸ}všƒ€&ا‚xB¨ßŽ4¨F‹–Ô(£&Eâ£Z2I¥‰ÒWèM‡r%•ZVIå¨YYä–C² g©¨®JQ^§–¦—­bIaŽ_ަ+š’Ê*™¥NJ$‡sʽv™f¦Im U„{2{ØŸ* Š©´Ø¢çlxfëí·à†+ѶŠWŽÅ lo—b»¼ë£q•†ª®pìÆï¯ùZW¯©÷&ëï“óö¬¼ï¼¯¥wV&¬ /§&Äú»°­ ïHgÃì+WäB‹¨¸$—l2°ÚÞÿ¦XŒRE{òË0Ǭ]È’'*À8gœZÁ®~*dÄ÷²Ûq¥ðf ê¾#WÙÃE'í1f»ö+õ›úÒJ1Îÿl¯©(C¼sÂU£kqA{æÍÿRE³ž#Ëì¶ÄFÚÖµÓÊ}Ýiw§òwy¶ÜöÛzÅ )HK†IíÆÑY„7à€®í÷¹vo=xÂL'ÎošmJ]b¬^ÓZ+vûœ+ÊW¢-v忞É8€Ž“åòê°Ç.ûP­;ö÷ì¸ç®ûHµw»ûïÀ¿Qïæ oüñÈ?ãZ‹3X,|}>?[óÈ»7{}»~»¢R–æªæ—/;öÑ¥,¬ä˜¹lÞ“žvû£ƒÏ¯Ù‘ÿ½yýq“ 4°,êìyùËÜýô—¿)QO=×áØöŸfÄÕãSä¼—;å½.‚ÌàË,¸½Ø$ t;–‹>6¹AIuS’N£UHTí’^¾.õ3Ê N¿QU¼šóAÃõPVGÒà8 N1rT³a«Úw¢/…ˆƒb ¸ÃóeéTI|bÇhH6^']ëS]‡¥µ/’±Œ › CÂÁ5ºñáj£Í ˜>¥aQU…³#µXèštñЉ]Sa }ÅB\Yªi|¡»Üd9¤ rŒÂ2˜ó&E3ª±’+› Ý7/N6ˆˆ2âãæ¨#%¡ñŒK,£™™¾WÑIz~ÄaMHHó¡R‹’«Ðgœ†œ?ÝÑMKaÐ0çI L•ãÙé˜:­÷a™öàHÍj&JŽæ‘a­VY¾$fhz¤¾8EV’KŒæ-)HÊQ-q±"9ÀržnNÝ»_œiÏx¦“ŠÆ,dçz9HuÂòpVÿÁævÈ7µÚRt!<¥9¹Fã¤Ñ˜èüb9ÝWȲ³N˜pìwN\ÁO`>ëhÁ0™HAFŠsJóhIôÌ1¢E¡ÖD9bEªì4§Ái6‘yRM–Цá‘èRúBgÖóV® d+IUÏuÇDRØŒzº¨µ'BýªXÇJž°’õ¬h5ŒYÓÊÖ¶¦e­n«\¯×¹Úõ®´¥4m‡×¾úUoÑÌ_ÿJØÂ®¤®†M¬b1‚ØÅ:ö±i,d'»Fb8d )CCád O¯‚õ]O‚ …ˆì"WpH B`‚4ĵ”m¢ìp‡ ©ëjEàÚ´¶¯È¦•¢öš¥SHÌ” m¨9÷¥_“Œ“46]Ý)º½Æ8šqIëv£ÔÈ9L`˜«míDºàÛ8d !(9ð±<ÄÖpÈJ uà#?pH°qžÊVºFë0± & 8>l°Š ´bøX>0L8¤jÆðñá6¬ ÞMà^E{à'V².Ž1[a,ã•Æ6α5ÿq¬ã»‘Ç<í_s€iQnJ©ªþºaJ%³ä‘TŒCN²”}œA {ï’(§”‹ÜÉ)S„Ý…Ôi7yFò§T–™•Šf¶9Íj-x§ ç:çtÍvÎ3îð¬ç>¯ŽÏ~tœ¿+J:ŸÅJôÛcA¯hfÄÁ{ò½Êî=/ËVÕf>™–ÅJò¬b#ÄáÕèÃðý³›¢¶åšÌ,¶4’Jœ§>hªÃ|@ÿ„|$}©ª3ÕêXî—Q&Ö¬#±zé:jÿ¢i#§:Õ^Œl‡ô5,©Ê>«Õ’ºþcÕ0IiÐÀÔØÓÖ6­SbkA›»dåÎ1ÖiToô—ø5=•ìÿȶ°g. Ý¢)}éDÏJÜ3Ì!BÇ×ä3§z‹™~%I“'çBv+Åþ6À™5¹pgÊþf-ƒy/)›ª×~6`šÅê¼’â=•)j>åñ[€»bhõÒ}îš{‹æZÙ4(E·7›:(? :þ˜LˆzjÜBÁù„˜ÙÕ’w£9ÌÙtrÖ”ã­ÜÖþíÈ•vûå½¾ªTÁç5´5›¨Èœ8ÆJ.8³Ï´j[QºÍç(¹_EçD:÷·í¡CzrAö­…÷Ÿ«¨ï-·ÏnµØÝ*F·ú6¥­DJÖ³¡aÅÕþ0]5ó[uÈ}vÊ™Þòº<}°¿¨Ôg}×—ÿ»“ÿ÷öù-þ#§»îYÿ×ðgÕlŽïƒ;Ñ—ˆµw¾ÏÑããôÄ=Tz’C×2o<Á¾.ú²aÕ¡»e}Dq=~C¹}ö÷Ü{noüèß`ù˵¼ô»ÿ[¹¿ü¹ÿùÛ6õ/ú÷úÓ<ñÚïC…Wõ‡P(@„W€_WQ½æe-m¦QÈrlŒ÷€X{ÈÇw`÷(¤P”ÔvÂw×L H@…ùw(M*ZççÄDƒww¥ƒ)˜…k……áúç@`¨wÖâKä…Å„-=÷‚ ³ò~"9ÓlNjª'v¼vu ÷z›+HÈlÒ£uu$zC…F¨‡Íõy¸Ô%7=N凮$pX‘G{ŸDhÜ^Zx‰þÁ…]1†»ƒƒ’ø‰2xx†ÁO˜ šH:×n“·Š¶²‡ ³p@pöI`ÆEKhqh7$×—vµ—€P؃~ø‹ (ˆxd‹¾˜‹¦$„ÉöZqŠ˜øŒtņ¿|Xz`æuó¦QËxu±ôT[C´4i™ô†•Çn§'PmoøâOލ„²çXÎtþæiu®g{§¦Uì]ÂôކdSÁˆBFHQö–L(r©”¤h†ÕÿÐøJ!Ý‘iY‘9D”h~í—‘©Vi‰9’…q‘$y’"a’(¹’¡’,ù’Œ’†“4w2ùp5™“Q÷à‚Ð /`ð u¥¿… %à[¾õ¾E^&Ðò@^Y[øð[嵕BÐ9p^祓ÙWÀà@`ðp-y“,)P^­u^æ—1 ¨ Ò  `) ¡ % u‰3ÐZ@–øÐb¦Ð•¬5–½á0#ç|$GH—\‰‚™Î5Ã]È5rü(šÈÆ|At]™é|¥‰;¬y<–309$@–¸Y.™›5¹›¼ “¾ù›,œÂ‰’ÄYœ$yœÈù‘ʹœÿ#¢†Gƒ„£,ι;ÐÉ"_Rf×I~É~ô…ÖùeBÖhæälOgž²´žØqåkê©e\öô'—-X-­ÇT&e+·BÞ6"ÕéTZÆ€õÉ0ÔiŸ“¸‚s†“ú9f"U ~ÄIv ó‰]u|çOw¡±¦ 3ƒŸ)AÜIJ z͉ŠÚ™ z¢*è+–Ÿ.:£A%¢ãI£8ª}¡T‰3™£>ú)ú£ó¤Bú~DZ¤éw¤H:~Jº¤»w¤Ñ'ýW¢èñ}Õ9|Xx!ÂŒ*ZŠ~B¥¹e£$™¥Úwº¶Iz\IøwÆ—Lu4eºXlqúk±‰ð¢ižjl|(O›×xÚÆ>±SÇ¥tÊ?ÚrjºŠ÷VH‘-„ª~¬ˆkˆ¦oèÈ`·e:ƒÈˆw©Ö¶|hxDSªˆ‹²—m¦p«âª£ºŸc‘áÙ†ha©Ÿ–ª'Gûg'?øOyÄQ®×ošæRÊ‹Ë$oPT§šHþت1%k½Êj[µjËzF%Q°vCÇz†@Ѥ"Nú¥àÿ®ãjsæZ+*(Ø­ª§æÖœǦ‹ú¦ÑzGÕ*á¦qù*¨YLói¯—v¥ÊmÉ­ûÚ®¬H4öBFY¨ûAʉr™ {¯È¡ò£ªâƒ©0ätwªþX¦Úê€K¨d×È0«ŠT€juº¸cbúëæ¨dÇqʱoG…7k€ØšâÖ³‹ˆ­³h¬x*²D²¨ŸD–I¦Äªiа–<é.Vx™%x®*1µXhZ»µ}ÖµYº®9§x/hƒ`z¥(±¢f(¶3ˆ1Û!å9v߆«g3IE¨o–†uªZyÂ}ˆÔ÷‰x–‹Û(xŽèvFŒ€»šÿš·ÊØ‹ÏJ« êps)\Ì䃘)1€tRp:KÔV‡¿j°›é°ˆz²Æ7¯Ï6iÅw4÷8O³ÊK’ç4J„¥k mÚE£Úm¿º†µ:^»Xl›W¿;‘ÁkŸ`{¼p–¼E;¹Þ y´†dÊ¥VÛ¶nA—‡R°·³r»¨¬Â(L¹0Ê‚#*œ8ÚË<3<„ZZÌ«¼>–ÃŒsƒe{¿âc¦Ï;¼Ëÿû¶Ü¡ušºlWÕ·…K³•Ʀ#xÁê€g¨<ذ¯›o•Ä~ÆÃ^E\U¨r ü¯ý{L»«Á¡ê0"¥³/K{¬:C¬¹ª$»’4štçʼnG†TD¬ÃÍbÄ~ìœxÈ16È„Üb†|Ȳ•ÈŠLYŒÜÈõÈ €<ɸ9±ÑYÃwGjÜ©h‹çy}ü6ˆ7£F­'iãû°ÔëM<øHµèÊ¥”Gx'Ë_Šî,‡]zÆ-^Ó|œ×úétDÉ9îfŒ«ŒuÜßB¸T ß \ŽÞ½Ô?+Ú°Ýá Þ¯uܬÀðýØTýÓÕÜdþ?L̳œÜßt8ÐÕ*â\îÈGn2Ô ›2Êw~cs~ã­)Ý|žV~þçgè‚®çóÜ£…Μ{žèYHèŒ~g‹þè÷çè’NM”^éot阾Fš¾éÔ鞎A ê3é¤Î¤¦~êOšêª~ǬÞê”%q ¡ 1ê°Ž-˜…x. »ÎqyèœëTÆw°uð tð ·>ç¾%" N©•D !èÕ!`íø ½eìkÔwP[l¹œíÿÄžâªE^M©íÐc`“çmc•™ðd`К 0ì!-žÛÓ)P—¹à[¬eïQõ^ÏÀ<ÈVºÅAmÇ¥\¡™ñs¬1D"òÕ…šš©š‰¡®I\°ƒiw. À ’ aï2 M_¡MY^Q¯€ ¡ &€ &°¦@ ¦€4`¯… ྕK` T^A—ý\_3òØõšÄô™¯™…Øõ¦¹õ%¿™`¼¹&¡ )ö€Óñ"A ÆQ±0é@a!b$V£6ÿÂÁ_Ni™èWH087$@0ªaÀ pùø0“ø€gÐ Àðaf0bgà )vâ–{ó‡o¤½W. !ø©Ÿ}‚­?Ò¯ïêë!û¨_û¨~û(ûsû½?ûc ü5'ü§OüÆ/ÈOÀ¡üËï~Ío~Ðýè7ý¬ŸûÖüD„û¿¿ý]Üýïýà/hØÕ_þ¶=ÞOûêogçßéÿþÜÏûÉOþ.¨ïôßÿñOߦ D˜P¡B >l¸PâDŠ-txQcBˆ7~RäH’%MžD™RåJ–-WÒÂSfLš0‹Ü¼‰¯ˆNž;$è_F¡EŠÔ R£M>…UêTªUÎÄZS'Î]{Z”)±C# ôÈñìCŒL‰²%{¶mY³,–}»V.Z¸|íªµ‹w¯UÂ… Fœ¸bVÆ[q~õú³`ÒÁ å*ý»3Ü´}ûÖ«ùreºq3‡® ÑofÏ£O»­¬XölÚµm‹lœ•«WÞ`'»ì¨:tiѨ‹‹4ïi¿#“»l™uÄçә߯ž]ûöùµîÿ†ÌSrP౥Ǿ6s夡§Nï<½z÷×A‹FŸ‘8wþýýÿÇM«ÆÀëͧ‚Èki?üØÛìµÁÖ;9½ì+IÁꤛË<ý̰C?ìл™ o<±8Ž>\Ñ´#\Ž% ëð9º„1GwÌNDšHìÍDÊ(”Ð:#k®È#a„ÍÅŠf´¯µ÷G+¯Ä’0mâ*<Ãr>*•L²L3©ÜðBÓ#É£PÄqÌå̲N;ïLiKÇr*Ð7ñœHA@Ï´PC]HO ¿Ñ*¥HPH'¥ô?E»ì³ÑJ7å´SO±¼ô±Lü´TSOEÕ¶Pù,‘ÔT:_…5VY[ZµÏ/›5W]wåõ Z½ô³Wa‡%¶Ô_G³Xe—eöÎc[M¶Yi§¥Ö¿gƒtµZm·å6ÿ±kͶ[qÇ%·¨o# ·\u×e÷£sÅK·]yç¥÷Ý[ÿ¤7_}ǵ7Ø}ÿXÛ~5 ¸`ƒ…8Þƒf8Õ„£m8b‰;}WþPäõ3Sá”Ô2Û ä75;Œã0«ªß’ç£Nä1æË¤Žev™¶Ñ˜ IC–Û„ydn6Ìäk*åìÜÛ´çH‰®Tç“zVÚ,‘¢n‹ä yfZ#ª]2úĬãLÊ8×{B–:fŸƒ[°å´à L5¶á6RãªW»ñí°ÓlïíøÔöÈ5áþ^zo½B>Ûï¹ÓfœlÁûN<ò8Ͷ»íÇ¿ÎS@ÍEb•ÿi’EW ìÆOg¼ÿå»Q·š>«Õ¾›tB=6½tÖï¢ÐõÖ¯S}u´Ó®AÜk'¾øÕ¥ý÷ןüëÁÜ›>fÙ—‡}kZ5× Sh-þ\ïdwôãþøçnÜÁåY†}}1Ïóþõø-Þ|èKw^~õéêòkÜäÔǾÔE‰HËÿÚW@þåÇvèƒJ׆DðÅí{ÑK ï,è$‰Nã3žò*ÁïtNsß‘W¾ßy°„$\ ‡×¾ÞùŒu2LؘÁ2ïÖc‰mSA¼pÁk õöã²å}¤ÓâÞg;ñѯ~),âåЦ»*Ð‡Ž»ß›;NGŒœ)cgÒ,8Æ.Âo3†¢£€(Ÿ‰ElŽ”Š#¢îø3ÌÕQ]{„Tý8HBÖI…Dd"?ÿtHEŽ ô#›µÇ >å‘´SL ¿V¹)Â’M‘ä¿.9,.jí|?ìã'3ç#ÎÁËsˆ™áè·,Ò’†uãb,Õ(7\²hlÔß/éGFÅ““ûËa…iºR2óyƒ“b4‡YDê+”Uq ‘I>ûa±q@S¸;VÏŒ6,8…‡´pBÏ…ša7«™L&™âäæÄ®I•l‹¥„ç-ÉéFq´’ø»gcxÎüp~€C‹9½ Á#0Œ†Ëb^tØKê{ßѶ^y5L~ðŸÛ è7j@gj“ŒåœSA¯hÒ†C˜Š?ŠN‰¢rxBCP#¶Oÿ~î’;¨/Û£S¶=‘—Þ”ev§P/¦Ï˜¼\¦™Þ˜ÑxÒ rÜÙWÑø¨Œ^”zû"ª*çYž‹ŒR­ÔJk"©J™¶¦ò­ÜŠë]õºW®}tD!×Hù:XÂ^•€í÷ »XÆš$¯…ld}å×!Ö•ŠmìK:»Ö•¤+qëmB •Ñ‘²\ÕöT¦#åQÊzw,í ‹ú1Ú†l†bé; ÊÓîÉVþÂ’ëj¨±ÏËE7¤Òü WztnÛÎ8:â³j1ZÐ gı÷˜÷YÏáÂGMøP75rœÇÆÛA»¹-lèíª·zÛÊ{ÕI¸(Ý`7z_ÎV¡Šp ›©R—°‡ï<çš^zV„^w›&½êtwÓûñ×¼ >°ËükVã2X1åŽâôË;]:1¬î ~ÀHbû2¹Ë=«…«y_5ÒtIô¼¡eœcß,Ã;å&ŸŠáüF8ÁHu1„kâíô“ÀÓÛ¬fcœdët…6ëD:à'ÏÔÇTΧ wücŸâXÂû3h‘{¨åçÆ³™skeÿÃdí8y5 Î.Þô¼çòê˜)†oÁë]#§4:ë1ŠÏë¾"«˜Ì éç—ûh÷ŽÒ„v —Ï»Ýê€Ù“Zš¯eë+YRÃ*¶ª ujEŠÙR·ºÔtvu¬U kY×:‘´¶u®ýˆk@º0n ­¯7{()7’×µ‘³g§‚1&2;Ë|ÌÙE…MEÌ%;1Ͷëkwû4MÛ´‡Uu`Y ¢\†—˜ž´§Í›Äæ™|Ñäô×ÝÔÒ@MqCóû\Ñ/£[¼œÆsø¤7¾Qî¹²<³rUdAÁig¨7«V½ÚYÍÎq|årÙƒpv°›åGOM‡üÂÉ\3í¾lòÿ³øä_p›m ÓK³uÓ ž?½}’cÛ,q6ÿ¸0þbvæÉwç0=˜ˆÍ ´x#=ð.wµÝÔ½zÌaÎ^³Ü@7`×AØasÛ*=Ÿ“É å…ÃôåN{׬ög– ÁcpÜ¥îr’_\Ðì­ºl±ýi™¾§…'áÜIüuÙ"í²ñ7ž­ª³õ’M½F¿³Ùò9E°™©GE¯Àqs±51ºš†¦Æ$÷„R¾á]8ì³ ÖFWÕŠñÊãu½²aÿgç>w %·½JÊÒ¸»G¾^uŸ|æ×+Õ7Å›mÑîö÷Ó¿Èò?Yò™G{ .ý"à»}8>Lÿ·»’”Š8üàX;_§1žõ±~ÿ©t¿¹M%‡bÜò|6;ò“íã½)Ã=ó»¨ ? Û¨CÀ–ª”[4tÊ&§YºÚ8\ì óôÛ‘¨ú»ü±ø@½#´•k± 3õû¹ÂQAuú ›<Ò@ ÀÏ?ª‰:üSÁ“;›;º¶¿ª§¼C9#ܺœ«Á‘¸Á•Ù*HK0ד®äbÀÐ[sS¼áB® «¼Þ+1gƒ.S ѳB À%4ˆ&¬3ÓÁá£>4„,5„Ã9ä9¤Ã;”;ÄÃ=D=äÃ?ô?ÄAÄ#D–q#ÄDTATÄFFtÄHÌH”ÄJÜJ´ÄLŒ$CT-MôÄYÁÄOEíÅQ4Å%ãĉ;ÅU¤˜TŒ>V„ÅBŒ¸óS˜X´EgÿqÅÄ’¾[äE)Å3¢ÁàrCÜ™™©F”€™¬"·cü—_\@³“Gº>ÝrÁ;™ÆrqÆj|¿½±-²:%j4ªŒN´Îî\¤í MïÏþÀËñ4Ï(ÏóTÏìOÁª8æD˶¤™qC ã©êL û”On›O[KÏÚâ,4ŠØ¶jËÎëÄ$o“Ƥÿ-ªÛ<Åü¾]H• É‘ÓJ ÍÈ„9|cÃüÚ.¤³LëÀ:Òc¹©ãȾÛÏ»rP‚JFþKAòÚÁ»L¸œPàÜÆK#¢Ë4Ä{ÌÃKÂÖ=w³¥ e¬ÍÏÅ«ºAÅJpÔ: ÄŸ¦ó»;Ë™:ÔOÃã1KM6úÑÆÿBRìì)§{4Rû{ÈœÒÊŽÚË+²áÂȤMµ¡°T&z·í eЂÓõÔÉúÌCtÉAETP+ÔNLÔF³öDDG•Ô‚ÔCÔK-šJÅÔMÍ=MÍ’N2%ctNÜÐþì½°ÁPÍ|£7óEOF2õ>ÒbÆÕgôÂg;‘Qݾ»ÊX]TUüÔ°C“—š0Òc½ µÐ] ;ÕPðNäHÞt@;…»ÖòH»P.,Q äÕÎlÖL"ÃOㄸâ5éÔ­¹ò¼xøÄtÓ&u³'MK½»@Ù“×’jM$ü7,³O±»;Ô»¹¤À: Õ‚ÅQϸ;ÕãÖW,V®“'zUS.åA;³X£Ô!*MH¼R-ÕØ3‘Ž]A'åW½­ƒEPy’Œªï|X]´/åJL:Ñ…»yØÂÖfSÙ„Lš ¼Ž"ÚÂL6Æ3´õéØ¿TÚm½±\Z7yʂԑ@åÔ‹¾-¥OþôLu 7™½Ze> ¾TºF§°Ú°åÅ´U[[dÛ¶…Å·…ÛU”[:¿—õÕë<Û$}ÄÝȾ½¶?]Õ¼ÕYÁMÿWï0>îäÍj§ûìž—Ù¤ÈÕÕM;Ãe+ÂEW<©ÛœyÓ–R§•ºS[0ÊÓÈŠ=Éx¥ÓÄRoÅ1Â|Ów*Ù©]],]h C‰ÒVb½Ú5÷|]Ë- ¶Õq¥6&åսмÖ-Vrô² „'!üÙ¬óÒ£‹Q­R8Mª©ÊÙ ÖŒ=ÇŠt½½‰Í]Y°D^ßd:6­ÒU@ÄkK‘Ö.ÍØ¯Œ³ÚÓÂ(õ×”ÞþB0dÚ§œÑÓLÓ9 ôÕŽhÖ ÁÞêEYøõ]ܥ˓ÛQÊÙ=õ©3e v`¸÷Mº2Û¡(„Hj¥C2}û\T^’Pÿ`©0_e3˜v;Xza Y-•ØÄA}ña[m²&Ò‰á¹ÕÄ#FbKTbæ)½£ŒŠæâ¾ô#â½\ù´áƒiâ˜à(>HæµÆ*fß+öÛ\Ûböã0᜵6 å1y ²†,Z:ñÕ."[ÖB»]§uÞ²K’µøÁ ËÈ:ãŸêâmíbjk¹ü³V}$_²Å¨ ¼^û Ò@žÀØ-»ž”ÒCãû'ƒÓ°”_²t»¾”d+ÕF§ÔÑèÅW$lnQè7>É£00;qTq±”ôPVò¦crŒHQ£/^næ³ÙžiŠ‡Þ”îðÓv†ãnî‹Èèæð¦†È0…Y¨†%…[À‡y@r|xØ] ‚¦è`,wòo_+oZ(Wô‰,LDgS*¿ògUòË tI'ñ–f=ÙÃý¨Ä Íéîð"Oüvî…Øú¦|@8TÈíHP‡Ü.XÀí8WÈmhõ¤àÿò%ïò7Zóy•CôHÏ.Þ±cMŸt'?tNö,·ôrYñkp‚*€‚/ ç>nH+](‡ÓƇ,yx…Øž0ˆ%0ˆÓ¦Rˆmð„)x†îq"*ô j:ñl6”(‡tM_ñ²AÇ,oRêñÖ¡ñåè¬'˜ `H‚#˜€  U˜€y øx|˜|8ƒ4à…_Xù3Xùuè…DÙö8s§n`·’Œk>ç\Eš€Rˆ&0&HyX… X…@ù¦Ÿ7H|Pƒ`ˆú¨Wy5 ùöÏ„ð„Ó>îkhpä›r‡£ÿˆ78ƒÜö°§ Ûµg{S$ê·Ï= ;aolserver4-4.5.1/docs/intro/tcl2k/html/img054.gif0000644000175000017500000002321207363640503021177 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ  '_ˆ|ûêL¸°á®p›Ö’;V§]–1,qr^‡‘1_ÖL93çÏù<7½Qt`ÐI‡Þ¼ZufÕ‡cËžíU±íÅbé&|¼Ò²åѬ[sþëÙtð×¾³N®œòÞà•¡÷zztç´³kßN4ñRƺëòêäN¾¼ùóè {§ ¾qÙôðãËŸO¿åúš¹Ýó®Ï¿¿ÿÿüÝ–Mí6€&¨à‚ƒ ˆá½Çà„Vh¡Q¶G—„vè¡lØ âyæ·á~¦Ø‘tdž݋¡¥†Ùh3ÊH£s}áX#`;Æhã?ú£Žuf£`D™£’@2Ic“P©Yå•¡~ª¨å–\vhåMXv)æ˜dø%T¢Xæšl¶9Û™á覛yE†\Žuâ™Üjsö™œŠçç „š ifiè…“¥V\£gp×!iéf‘NǦœ·è›·ÿ)¦¡Tj~jꩨ†„h˜©~¨\«°²´ê‰ŠÆj뭨⬤֊«‡™¶ö¢tŽ>Úé±—å颮)+ìiÁò9ŽÆwš¤”Âö¬£Ò>{ig×N™¯d•º"³<‚ Ö&Ëg°HR:‘žÅªkdD—V6$¦ÂÞXœ¿ì"ûë§èŽêw&öJ_ˆ#l+ušN[o½É<é¼ôö‹­EÁµÑF>;äñÈü1È!£|2Ê¥ÜÉ+›ürÊ$³\3ÆÞv‹ñËñl/§:Ët‘7D®c¾ft¯”Ð -cÆû®{¬¿LWLlÄø†Û¬ò^ õ²îj;ðØ´-'½Jÿ·Y1ppwžù^-ÜÛݺ+­Ýq†7Ð>þ}/Þïöì"·{/­ïÜ Þ#ßE™-(Ù”WΦäj¹©ÚÏAŒ ä–ÛŠ¹¹ÿq¾•é¡§nØèI‡¤+èAÁîêWÅK¥ê¸³ÞÛ¯´ãî»·Zoú“î*õ>§ñTIõï®#_’ìwD|JγY=óç]?ÛõÓ£¤=™Ìn.þøä—oþù觯þúì·ï~ø r0{ —Û:HÆޝÅjZgºþ[ÒÎôö¤(°kÐ+ ÿØV¼Zî{m»]h’aiÄv’‘Þüðs%ZíWÄÞvBøâOƒ÷•ý>x+Šp{ñCáU ˆ4>ì…r¡ˆdÿèžzóùH„XNH‡%D¢Üä—ÂúÕ°x±Q¢_¤hÄ(jíyb+L÷~âÀ»P±Š`¼ÐÃHÆ2²eŒfL£µ‚Æ K1#«©Kñò‹¸VÀpåñ5]ó(B»5Œ8{‹Úư¶4?òï[ŒôYtœ0ªiL<Ô&êå‹kÖž¤Ú4±ƒ ‰Çea OB²—%¹Å3FÞíjë’ãù¤+†’jÁ#`¡•K;FLG°üšIÓ4®ÑMqßú#ͤZR¥å/}W4ti$ØÜ¦8Ç)«M>¨“©$§:ש’p²óð̈;ãIOÞìÃ!|hH’‡$c#ó$I´^„à )ALP‚†4´žMÑðp€œæôáä(¢P4´ -,²C¤]²RJâŠÒr²Y$¬²¤ó*åÚ'S êuTÀ0Èá äô!è0 D`‚|(”¡éHSà)„ çÈÇ xð\Ã!K(Ö‘üÀ!QÈFôŠÑ ú%ŒÈ/˜`&Lù°+&àŠ äƒù°+â†|¨AgÈG_ݰ6Hä§eMì8«ØÆ®‘±Ž,!+ÙÊâÿ²–Íìï0[¾çgWlWÀªEÄ‹ïÝÜcÝ|æÇæT‡’š¥g/»h}¶¸E 3;eZ,:l·¨¥ÑÛ_ÍV;Ä]X‹ «ã2÷¹·r.t§›*éR÷º‹².v·ë'ír÷»—˨^/δ”+åW/©d$d6’¦Iê,ñ8#:î¯ëÍÛòf Ó÷2p•ûªï¾‰ï–—(&É÷@¹à9øÀÞ•xQ¹Â[øT¶ð«òF­Â¥q>K†CLbÂê[J©ßÄ=‡q0v±Î6,.Ã]÷Ä%Îqp\^å-WÇzá1‡œ!Ùq–Œ¥äë7ßòÃç½£cŒ3+Ï:Kîe–®le™p,þ›MÓÿbd"›™;Ú]¦Ò–_b°•™|}azßÛØvÞžeßÓYÃ$\·åI²‹Ê¿ÅÉ\¶è™9še¦ÙÊ&"éHŸ¬Ò6s™¡­öF‰ÅX½wsò“ULj¹a¤ÌgN5¨N‰Î »Žimî³JÛÓi ¸Flné˜áxgVÊšÎq¦Mi£•5ÃÑ­ÓX^m4…Ë1jÍ·]þó´ 56¥)·6˜ž=$ =å« ZÕàÖâ„[ýÄp{/ÁæFÉ· ƒn—¦û²ãF«€Øî!‚hv™¬÷»ËÉjy{ˆ¾ ­/û£ï}{)ÞqÚ¨÷xgpòüß;qÁ4q _‡z«ª¨…Ì‘„ ¯` E"ñW;©à²Nw-Ù/¼¦õaâ Ç«ð“TÜ?0ªsoμœŸ r^ €M­e¯›¦íwÂ=®`†‡¼éŸãáÁ4ÊtU:ýéöŽ:É9ž(ÆŠç{³÷4-bëü#%¶Øs¬ç*)÷6×ç ðOº]ÇëN¢m]~w¬ÿç½ï€ÊßOxûÌýߪÌ5¯ÄK[¥ùmØâ!Oç•òòµnû ¡×¢§ øìPê¯çqmçšZžIñÍãèsøtþõêi½«!ÎGÆg~å/ý‡ýûy›ær×½Žå;§¯ÊŸ=åм<­•ßûÐÛ~ÖÌW~¯Å>xØ[Ÿ$Õ¿¾öÑ.ûroÿû¬WzÇIþò¸ûä5¿ú7b|8džxA`@<$q§Bš€¤RBeMð(0B••!5T ( ‘EUTëWbàpðÐá”CÅPEu(èÔ ª0  &±‰à»P¢@‚ù0 ˜M0!p ¸PØÄgH(Lw–r#'tÄ^·¶z¸—„Äb¥‡_kçp¥~3GaÞ—)03X†RTG~f¸†í„~5džpÈo]Hné‡v¨nnXuw¸‡I7‡þæz|ˆ'~]'ˆ†Ø‡=DszxˆŒ8ÿB&>Ÿwc·…è`y¨†C$‰µ£‰Ãuq•è&(<º•mÜ61£8,ÎöZ·µ5Áµ-¹u1wòаõ‰Av‰÷“‰œã±¨Š®Õ[Mžós”\žøZý“\´Hf¶8E‰fR«Ø[ÏøŒ¿ˆt³èJcWŒ°È[ÅÆ‰ÉxMËø9ÜHRáØI‘}ZŒñŽä¨Œ„Hwë˜ŒæøŽ ò¸oôXévønú¸ªÖþxfD6 dy9–e•g1¥yÔˆoFYØ ©XÔyQ(|¾èeM£gð…^R˜zRèy¹—„:|øu’ ñȑۑ‘Cv‘çeu>A6Y‹Éíˆx ɇ4ù“”By`DY”àu”HÉ]J Q‚e/•ŒØ”ð´a€7ÎòFãøzT¹”ÔÕ•^ ]`©N Ö@JSh‰Çvx÷„÷”24WfHóÕiz¤b4fŠIÉ–aɆc¹—±Õ—ì¤7;¹}€9N,òx^Y˜~YYй˜‘Õ˜Ôµ•™‘'5IgQ[GÈE,Ç…‰è…uX~u¹_Jæ–Z™gWéR…&5šˆsšCCšzöe²Yj¯‰l ¢—ŽI[ê8‰ƒ)rÛx=f·:ÿ¸ qf%“ˆiœg¥{+÷|•‰„Å™›f‘fÝ$’ 'y9l͉Ágkc|PHkoÆ’\!™Jv.6×› ¡iQ‰™›i„¢Ùlò4œÂè–>§š´ô? C/Ë–oØ&Kq–/ûlaó?ë)×ÖœVa•]&jV–Ÿ´9hŸf:si13i–&272v2£žú¡U†d9c‡öžPfZž§&ŸÐy×3&£$ÅE|7mðy8f_£kÚ?#tœ-ÊŽ~¸t˜¸£Õk¦wyIAއyK:yA×,%Ùx|Æœèi»™+ÕS£Qù‘¨ I Š‹½ØY䉈S§ˆEº£-ù.¾I* ùéŸî•b'åHXFz•m¶$AaÆ¥ "›jš"j™"Új£ ˆögv$0T—¦ Œ¬8› ú8k™}Çž±ógg–šÔ“€¤ßG©U¦@É¢†B‰*"ªvª4zŽWŠq‹©ªPÔ¨ê©çÇ©³wžìv­¦´êi÷ X±«”¹Y©–¹ù«¬˜“³š ½ªÈúuÍj0¶ú…¾ÙBÑz§î‰‡Óú™Pg­×Šr2×™tø†ç­fˆ–«Ê¬[ÿ·­äÚ­7´†…Œ§Õªáz¦žÙ®8i®e(¬g¦hˆ¦·èn ¯M请‘†ëFK’•ªœ£´®C:~ ûv%ä‘.Ù^Oó^î5¢6g+‰±@ê$™Y|ê®»š‹!‹ ñÉ®‹xB k§Ë'|1ù_.y…Ëk «²+©kô>>û³@´B«>/—²“W–Gº¦v†I‘÷œëu°Ò¤:knTë´Q k0‡©*éœ7É},›¦«¯ˆrµs†µ±J¶ëǯ ±âú‡·Z­ïz® ¶[ˆuW·ûz·ñ¬Sˆn+µ"HªY—CÁ™¯}˪äÉ‘O+*j»·â¸¬Bȱe«®.Z¯ÿz¯-[±Vį F¹Ãc¸&—«¨[‰dWvY{a;±¨I¬ƒ{­æ‘}¦zn%K»c«º»M¼Û»¡ÿô»À«FÂ;¼fä]¤Hº +EO:§ÃjF‰+m_»œ§û¼Ó[µñá\ ʳ][ ‹zG«´35tvzŒ÷kчC| )S˜$Mªz‹#žHÚ‘Úf³Nz¾5kJyëŽÍ•’gŠÉw|»j± ®D|aVIû8®‘¾…L¿yLé"p`ƒ^Z7uÊ8¼U¿üY{yÊ|YX¼Æ;Y¦‹µÔ†½o;²§Óž-g´Ü+¹âks‹ÒÅ´0ˤ'™’äd¼Gy»GôÕ‘JÊÂeÀ>×JÍ ÂJ+žá‰|rfÄS}îK¥D,‡qK¤°{|‹d Sãkœ©¦?3¶‚‹M¼N¥xŠpžvl¸'§ˆd’‘D¾XY’ÆÂÀfÁÿ²f­«­ûë“#ìv"üÇUÈ‚ o¯[È}GȈŒ=Š¼È›UÂŽœjÉs2 ±  É”lYù”y. ŸÜ…{ȼ]í€|` bPà°É¨œ %" ‘ ÿ·€D !FÕ! Ëù°•Ê¡Óx@Q¸@Ëÿ}Ü©(TþçËð:³««ÞlY–šðd`Л pÊÕ<·Ñ)@‚ºR ¥ÍaÙ\Ð@¬8ìŠüIÇÈsßY_GxÇO¨ÅgœoNH³Û'êÂ1 Ð “0‹0œK~þ÷T¡þ7TQ° ± & &°§P §4ðU• ÄÌ€Kp 6mTAÂWèOÌÃ,ÕÏôK’Øyr}¤^9;ÐLè6"ÕÀVLà5 # vå€%XYZõEÈÌj„€IpI@0#° o5­0p#hp¾ }eu¿pXœ Ö%v&Ò ؽI4GØbkØ& ‰¯Œ½–ëñØ…ÙØ÷ªØYlÙy9Ù™ ÙœbŽýÙ•Úå5ÚãªÙ¦mf¨-·¡Ú«=d­p°Û’=?”½Ø¶}c˜Ú ½ÛÛ¤­ÛÀ-–½íÚQÛÅ}a³=Ø¿½ {¼ÜUÿrÜ´ýÜ´Ç‘ȼ¢(ÝlDÝÎ]Ú?§vÚý¦ÜÝÝžíÛà­¥Þ¤Zeç‰ýi¾\ÄB\º ŸÕ3ÁUßåmN1Ü›­›ÉjZ¨ÈmŽJmØ–[j×XldLe¬Ð¨¼ÍÚÜá¡Ü‡ÝǸšø­àÙHÞ“BŒzÇྨßÉæáÕ¸ÛÞŽ»gYßÃ6¦.â ‰á_ºº”DâxZÁÑ Ö)N+~žñz߯(Ó¨àÃâ .‹îrжßFãÝnÝ!ž¬u<ä0^äÎiHÞ92žå_ÃlNÎß¹ýß-à¿èŸŽŠsà6zå;cæx™à³¸ã€ÝãQñã=+<8¾L²cÏdâíÝå•Ëåõá‚Nçuå*.åæè#äèÌlç9çA$ájé‘®è>ÎèažY’þÚœÞ錩éwê¢þ˜¤>é¦~êõéɽ꬞X®îéëŠ5ë”nëš…ë°®ëõÿÄëµîëìÄ-쿞ê ìÆOÄNæËþNÍþìÌíÒþ—ÈþêÊ^íêDíÚnYÜÞí’õíàîXâ>î·~í´^ìæî»èžëëÎìíÞë9½9~½Uü² w1kwóQîç#ÛLªWK{îL]ÇÓdðe…ާ?r˜ I0ÛŠ/IíºÂÞê~dÍH P8ÅÙ¹x ÏÐ@}¿"yÔ(é‘á¹³p<}Ô8³Ð'þÞp]ä¸&ïÅ·'²ÿ+ÅQŒ…B,`)¹ò"OÔ0Ÿó=}ï²1óïæ9ªiLuDÁ¯„ êàÌ6àÔ‰ LM,tµÇ.ôVØÍoïÙ®~üÚ`š é®áuÞÈîÎþîĨKö÷i¤ôtírÿöwOÂl_Ýe¿÷ad÷€ON‚?øâTø†ÿKˆŸø•÷Œï}ÿÝsfº8šbÏÜŽx.16þ{´¸ø©ÄIVms‰K—ÿ•™xZcæš(‡ ÿøeû²ø©_û„û¸øºÿtôÞ<©•»–o¬ Ùû4Zi„QâDŠ-^ĘQãFŽ=~ɱV¾‘%IžYD¥Ê|EZ¾t)S¾™!mÞÄ™S§NvþTèP¢MEÙr¥K¦0άYTêTªU úˆ«U®]½~%ŠT¬Ò•N›Ê¤ VíZ¶ {|û¶í\ºuíŽEº´éÞ§iíþ\ukVƒFœ$Þ¤z;DUñdÊ•-_Æ\”±IÇ|c¦•œYôhÒ¥MÞ|²óãȧ]¿†[öÔÔ)—>þ uöùnÞ½}ÿfX›,KÏ}CGžYnÎå ›#”ûnOÃ^©?¤.¹Öêt…¯æÛ:ùxºÙ·fÏŠ~¡ùô×ó]îþ}ÜóêÆ/L¿àsöÎíÛŸo9øês¯¿ûº£=ùþÓOAýæCì»ÛŠ< ÁмúÊð¼ô¦»Š»+ÂoÄü´ÛO¾d0E „Ñ¿gä®Åc´L²(íB­1Æ ßó/?# 3ñÆö„Ôj¢•<²9)ƒ0Ê!M¤²»aLÐÊ#‰ürÉÌt$޵D3M=Bq4-q¼¨MÅÈ,.7¿ÔÄ3O=÷¤ˆNÜŒã¢7wÔ­@Eÿ#?yÔÍ"×ÛÏ¡B¯šjR%u4QM7}hQ3ÓR"CðÅR¥DÒT¡[•T0S=uKªÓUJaÔU[×z'9”S¢^'k£X`}úUÆ`#Z6ÌaYuÈÓðÎ •Ã-µ\°½¸"}µÖ[áºU×pÁ \[›œõ¿T_Õ°[Q…Ò@™œ²Þø’5èÁCÄ×ÅŠm#cXà€ .ØàƒfXá…^8aˆFØàõ1Xí ìïÉ}—°CIߕ֩ %µ:ÃÐåÖ[v‘åvÈsówÖšs•əݽ²É•)½Õƒ„³ÝK¬•è5iürÒçØb‚ ¦¸ÿኣNÈj…%ޏb©¡åRiVïMùZ‡nZeK›¨ä³¨…­Ô–9‰?¢íVÕKXÅv±À,s^ó_c£ÆZjª½vØ ¬'ÜkÆ ïû^8[fZÈ$/÷˜ËËì4©±À3î×D}—îDŸ¦˜#È)+eìH'ÙsÙATÓoÇ=÷Ê܆Lt›Z×e݇'žw;ëhÕ8o¾¼u‰‡wã½t]˜_|ÔVŸ¿¶Û¦-÷žæœw…4]›ÍçÞÝï£g£æ#”=¯ ?½“"˜¯g™üóq ÿÄôÅ5ÕÅ¥¿û hì!àÎÒw(¶‘è}›Ú42%æ)‚ÀúÊôNf¿î±ëì[ `ÿ<¤2òï5ëÙ¨³†OftÓß&¶.•KNCÞfè/ɰh2”NÈÊ…¹²…-Lùj‘ßôƳ Ư1ó›–ídã´LÍÍ9¸CÚÇhD¾)©r3|”ô–C fq‰YÔáI7¢Ê™ñ‚RÑ ïâö‘0ZËt~ÃX¿ø¥Ä'i c{ ™¼Ö†6{ÒCìPãµÈ<²Ž+*S–F®ÄQŠíÃdQ 4¶†Šld]òô¨'rŠ¡»d&UÁxyÒh«$%ëKZÖÒ– ‘%òn¹K^Ò2—½ÜT' Ì_QÂ4æ.ÿ‹9Jš~fäœR(QÊœçt éì¦mvD?].o‡_q¨Uº>tŸňڄ¦œÃï¢%fD‡S'ê%OY`FÕSŽ¥è©EY‰M·02›7j<»9ÏãÑñwÖì MƒºÔŨ”¨-åˆR«ÉTªH¦Éiy)Õªbq”#û*VúMz†Ó ÀäjWOG¨„fµz[U«4ÓZÀŒ¸•ƒ½œk\gJ•¼^QQchÍ2R´–T¤<Ô+Î*˜º¶L‚­¨VwÙ×Äve’¾ºª?ÿ*O²•M…­ìn…T«RVXÿål`Q9XN6´¢EYXÛâN»: ´¯i÷ºÙ¡vªî»-nG7Ú:–¥Ô,\…;G{¢¶·ªgdßêÚå·¹¼eÌS‘{V¼‚(³Õ­©}SÜÔ>vµÒ½kzµ•½ŸlR£âc/x…5ן]÷"µ=--ÈB$ÊKg×KZt&'.²­÷h‡¢ ÄÛ¿ù6ÓÁ†p„%ä͆u¶IÞmÒÊ™Š*O ¿mQü¾ùÜßÎsÞïJù[~7¶zÿé<— }¶š¼LÏJÀ°Øé+'§h¤Ž¥k|ãWéŒ9éš­së`—qÍMSv³ÿåëh‡ûBØÎ,±·3ÊqÇ»Mæî:„¾=ïWÈÞEÙÊòð‡¿ ¥EÞk˪ñÿ‹à!?ùáIžò—7å1¿ùDižóŸßÿ“çA?ú4‰žô§·éQ¿zਞê„Bò’YͺéIó_­sÑ íîìùzEŒ}Ó%Mc.¿ôЧ¨E5. ú¬ƒX*¡ªM¸_ÅŠÒwãï iÕÕ.UÛW3€å&ý˜µX}ý\•¶ï-åù^¥­x» Cu™Ÿ{VçY›…‡®ËrÜùÚâ?HBµ£Q5!;¿Ž@£ð;?ë©>µðú ñ×ñ oY¿b’¬@s?4¾Äœ \@$ÁÿƒT2›Â äÀû@°p=ž˜=ÞXA†K´·ûA_ B!„-â[‹#LÂ', 'üé=Ê£©*¬ˆÛc4á (Þ»¸s:“R:r£Ú‹Bäƒ,ŠAï¡ê ]Áð3¿*èÛò£>ܰ-ÃÃéã!‚C;>ëûž=1<Ü/9T?8 É»2>s$ª¾v±]$|2T‰@Gº, ¦MäÄšFƒ@ÛAÂó@S´¿<Û¿-ì@¼»ˆ¼ú²Ä2Ì3Të@Äj¿èƒ3léÁ6Œ.ä¾U¼ÃAûóC#9E( :UDAed#ªEV¤ )ì6(Ì·E#µ&DÃó OÄF¯c"ã§nü±pDG4±ÆtdÇÀÿXÇv„Gï0Ç…‹Çzìw´Ç|ì |ÔÇ~¤y´8È1Hùȃœ“‚ 8„dÈÄ ¹äkȈ*]‹¿…”È‹l¢‡LCŒäȹàÇŽI£PȤ É’lyˆo”IôF“„IŒpH†,I™‹Éœ$ˆpˆnÈP€ ˆ‡h‰øH Çw(=ÈE€HwÈ?(qˆ–›9¤ÔI<0†| BX¸…1І|`„C0J¬d<‹ ­DÇ{€n8HXD>àƒ €0„BX„Geð†¡Ä%µ|ˆjH`ƒ0@z8àƒ!0š€‚ˆ8|(·½Nàƒ=ÐK0¸›tÉsd*(Ö,X‡Ö¼L‚€(sP…HÍ,RÈ͈ËüLÐÜ<x€?ÈKƒ Ѐ>1L„ Ý 8…×ÔÍ‚¨Î ˆh(iÐ…Y ˆ‚͈Ȃê¤ÍÛtÍk@ÎÉ€J : € Jhÿžœò‚ÆÝ$…ëšÓĆr1ý[5Ç‹žª/md³Tc¯<¡SÛ=¯Ê›Àp˜ƒ} ¬Ú[ˆ…XÈÎ×l͇…Qp»û«±ÃzÅÜŽI²ºû :1Ä?½Ä+ñª‘õ sɉ˜‡p5˜[<…ÐÆ|†ÖœM‡ÈÛä㬆È8Z°†%\ÈzpÑ|€Ø…] $„Ñ üV¤Ñƒ+1´EšñEjA;ÒîÇœ³ÐŒTRˆ<ˆÜÐ5ï¤M„àí¤|@@…TøÌHX‡Ï,XðÌ@…WøLhT3L¿gLÁdDûŠÿÐW<9üÛQ6AðÆQµÀ>=» ­Æé|'¨(ø ÍÖôƒ°‚ØshÌ|È‚˜X¸ÌøXPhÌz(…Ë4 ˆO˜hˆ*IÀ …$4³º[B…Ai\³M☺™Žm‰Æö ‹x‚  &À$8‚ ˜€jX… ¥͇ ȇ3Hƒ^…=…e_@©K&EOÝÕsó¹04×” ª 0i`#`„V˜VƒeÙ xƒ4È5˜…Ù„Uƒ‰ÅÕ†ø„ÆlMl˜Oœ€r˜“88ƒ„8ÊŸ-ɤUZdÚ¦åHá;aolserver4-4.5.1/docs/intro/tcl2k/html/img055.gif0000644000175000017500000002277007363640503021210 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ  'ß¾ùv¬·°áÈÂmJKîXvY¾ø°ÄÊygÖl¹áäÉœCãíy3HÌI—¬Zuâ×°cÃ^¼Ô1Ý„‘W¢®¼âgÞ I ß¼ÛôhÓÅ;W~9yÄâËžN½z[Ú4m?.k½»÷ïàÃÿÆ^Sìíº<Å«_Ͼ½{–äÃÚ|Œ;ýûûøóë¿¿±ùí¹í'à€XXÚÑÅÝV˜idFÈñ–qÌ=÷—…{U(Òƒ¾ih‡¥eâqI˜!J&ND¡_²‡à ˆbƒ]Hb‡!F§¡‰6ޘ㫶bsefÜÉ8¢’¬¹Ö\j&å‘©U)eˆK27ä”Êiå•>‚é•DªhY^ÒE¦hP.‡Xž ]ŠŠ1f§ó· ~t&Öç`-vå$ežhài¾÷bžÚ‡U¡$Ix褔VZÔ¢75*¨œ:Š ]˜pº‰æŽŸZjꩦb •ž2¢êê«°Æhzç JÕª¬¸æª+~ªžW_x¬uê™MæHá–ÂþÖÛ•^&Ë©²k,§Äö…,³Ôv(í^f;êßN+‰Lb î™ÜR{­˜â.Ç¥·Òd³é>›­x½Ò‡Þ®jA éQÿò+°R³ÿÖ£­Ž¬ð ë•/« S¬§ç.›nÅ+Žj-½å;Z§òBK.’÷2Ék:ën˜$7¯–/Wl¦o¡‚Úðtkº‡¿×óI?g•èÍàåcÄD'­ôÒC0ÓPG-5|gw0Y·N­õÖ\Sä4ÖHw-öØR YØHô£CoôsŸ®«Ü‘¶H·«fÿÊbÛ&c÷¶5×Ìs—¤ÎŒ#¨áFi®á‹“i3½* ;oáež,yµ8þ=yà›sÞ¹ß:n¸æ6Ú÷¾d§®zÔ§ï¹: E&z÷GmŠÈwݯ¿ÚzÖ¯ >®š˜qŠjÿåÈA&>¼•À_¹¶o«RŒ¬ò·{ùæÀ½Ì¹[µ;Ú݇/~¥ßÏÙí?ͽùì[T¾z8òïJºæó’g}ó¤[ÿüºÓÛØ‰ø×šà[µÕœ<*Ñh~ÊÛ Æì'¶÷µï‚ܽCA¡QŽE•‹EÔ'BÝ /ƒE«Zyu4~°z „×ãŽ×±8YŽKΫþ(6¿ÞІ)ÃÞñzCB&fƒFL¢­ƒÄ%:ñ‰ãQÿ¡|2ÕB(ZñŠ×‘"ž¨ø4,zñ‹\i"ÇHF¢ˆ±ŒhLãJΨÆ6º1$l|£çx‘8ÒñŽxlˆóÈÇ7î±€DãIÈ/²ˆ„â!ÉÈ$.²‘d1²‡†”¡!ˆp26òÈA ÙE®à„À%hH*#ÉÊïØá@bGSŠ •%@e ^1Ôxle{N0ç5L–U*t5¦/‹fŠHE„¦Ôº$cÍ8¡Cy˜@&À‡)Q9‘.ä2™BJ`|¬€15²„ˆ@øÁlÜ…#Ú¤c@ôÄ `bL0;&p|Ø`hÅð± |L”pH>ÔŒ3àC£mX$ÒÉVštu%=©J+¨ÅZm¥0½`JcJS¦ÿÍ´¦8½ÙM!D<ž‚‚¡ÑØ&u\±k[©ˆ:¨œÊ´¥W;ÛÞl7ÂUɪÚBªÅ„TÄ ¹ìIÓªS1¸SÙ4u¬h=IYÓÊVÝA•…]l«\•¶Ö¹ÚõPu½«^”׊L Ìá¹!(­+¬lÚ˜ö gU—6tWÍR`ë—ÃǺ釞«ÆÔbÙȲLÕQ'{Y&ïdÚ3àOë,щjqf|+_Ê ¬²ì^YêáÊšÃÝ–L´YýœðL†ÎuŒŠfrõ7D×PÂÅßÿhøÛÇÓIÅ•YÜ>çZän·tÃfW;Ò×½šWQ²]•ÎjKÙäu+¶{Ší¬fGËÛó¶²¼@í~£Ù¿Â3T€³/+ñ+à{‡Àì¥ÊAXÍQ2vèx=—\®ÔU¾Šü®Wºç"Öz½Ý0G ^æ™8rb…o©¸ÎF«·‚¥“‹q˜¹ê–x¹$ñ}GcÛV=6°cd¶y°DU°ƒów;¹1黯Åi‘•ŒÙn«§X=Öƒu{ÛþaNÄ>ì1ýY&ÃeÂM³óðWòq•H ¾‰Êpšãý™*R! ‰€Â)€…CtQ‚P¬3€J@p}øÐئ0}§”}&Ô7δL_âKÍuLøKòLh-â%MÄeò‚s4‚ÊÄLJCMhÑI)03Úׂz„~´å‚2x~SW18ƒ8Hk0¸k9؃ñz>h`@„ 6„Dx^Fx„{ÿUdI’wEáouÓm:§„„Q7PH;ê“…T˜B58[£oðHiטq—65—Î]r–s(ÇXÇÈ—º2–ˆHй˜}Ô˜Ž™GÉpT—â„Á8^Y–5‚™Øxih±™ß‘„KÕ– ‰cQ¶•!fj'&fî6‘`Ö,[©b¨›‚©r)nOVl$Y”©c­IjuXe‘¦nî1™Ñô€èòŵp©F›s^oü¨]öÂfyv¸õ“DÙcÙf¢Æäö?-†.Õc›÷C,'œw)ˆ_¨^“7Fª ’f!šž‡œ‘9Gø™Ÿ~ä—à!…ëaŸIŒž9 &9rÚŸï g­X[Œfšè9\Æ)q²ÉšÝè^^æk®)•ÅÙ¡"é\þÃK Z؈i–ÉHû9ŒÁÔ‡,:z’žvv\§žÎE›ÔŽ(lQÂqfgs'·\õ’Ga‘”¢¥p–2ŸA! *‘ ‰d¤ü™FP¥eÿ4¥T:FVz¥†äŸZ:xYÚ¥Wô¥`ªH\:¦z‡–JŸåh•„ÆSÉÈ4Lz¡l¨SeZˆÁY$AyT?Å#B%mñ5cÛS¨z r ‡lêV* ò&~ú§‰ª¨ƒ©” ©6™Z˜êvL&¨{š¦j¨‡7wʇ*B¤ãZ‡ó¨ÚÙ‘<ù©âˆb|zªCÚ]im4é›§I«ã¨K)’ºªÔ¨­z¢ä3ªlʧ¡µªƒ5›Ê-¡šªÀ‘mÔ:•Ê*©Š:lˆ:‘ ª‚Ú“×j¨›ê«žòqЍûã©åº­«6)bj*sê'NªWïj¦JT¯öjDFú–D1a¹„…’{©™ö¢™ ]—é¦óŠEûª©ôCÙ).=EœÜÙt¨’¯Ù”y“/ žø8¤À)«{˜‰¬±‘¡¼™£çøª»¡i±?êcK+¡é¡a¶²!Z±Æêm$ ? ‹°l!²ùºw=;´†¯FûT Zw½(¯­–`~´ §H¦•²êX´½^B4XË­5D°Öê±Ï™dœD"YNg¶iof £®:ª†±ëÓ=û*­Mià ¬+=taª–#ª²HUts ³íZ˜ D¡Ü°¬ƒµ®"´IK)H;¹æS¹–+>PšP{¸ÐH§pë¸ aGšÏJ§ÐIv׉¸íɸª«¬&“jqŒ‹³P'¹V·¹hV9+œ=ª8»+sÞÅcÆÄ?Y®Ù‡e-륫zñjk˜›¹tû¼Ô+„Ö{½E˜½Ú‹„ÜÛ½Kø½à{WÓ;¾cS¾æÛ5蛾[³¾ì;5îû¾³»´'¿C¿ö»4ø›¿I³¿ük§ôkxÿk^þ;À SÀ<0œÀrÀñÉÀvµÀœ+<Á®&¾Œ‹œÁ»èÀéÇÁiUÁ Œa<Â$Â&\âàÇàÚà(œÂ²QIø€1à @Ã|@ƒ–Huž(ÃrÄw°uð tð 0̽¹$" Ä}D !âÔ!Åø ¸ÄDÓwKâ·œ°Äÿ|ƒq|ÃGÅðPbó³KÚH•™ðd`К Àôq‰?Më— ¹tJp<õðÆ%ð k11}s”@:”bžÃÈsH‚x4CÉêÊ"˜¿DÇ™ØsW( À ’ ·Æa(÷N¡Ã÷MQ¯€ ¡ &€ &°¦@ ¦€4°Oª„ Z}K` Ð,NA ÉYÉhÅôÉôx(šŒÍڜͤlÍ ,ÎyIÉßì͈ʟ¸f"A ÅQ±0é@1QÑQå>ßkOÄÇ€bü:H087$@0ªÀPÀ Ñø0šø€gÐ À QfàQgà s'˘Ð0¥*úÒ *Ò\5>lÒM‹Ò',E+]È.mRñÓ'=Ó/6ÝÒ8ý•0mƒÁÒtÙÓ„TÓ@mBMÔ*eÔ`ˆÔ2­Ô(úÓMí7 ÕŒ)ÕðImÕ†Õp¶Õ\-–^]ÒOÖW­ÓGMÕêwÑ•‹>éY°xGêè%ç3.é\‰>ƒ®ªú”3¹¨–ªq¡‹­$7«¯û’Œ£®”ÝÕz© ›ì '_„é¨ì íªªâJtèÚà÷x®åΣ°Ê”) è}ÞhšØ©;šàóˆ”=9ï¸Ú§Ë;C2›ï´Þìfg«á•ý»nv+· :«ÆŒÉ] K¼­6rÍ[ÀîãÂ~¤(Þð§ù™ebÌÚºd+:Øj®¨®­h;Y5šà ’‰Ë¶ïñ/¬5Ëñí¿Úe/G®?TáUéb.iÄ~¶µJïöÖñ¾éŽÛ8ë"o¢{KêýŽªà:ó?ßš‘/¯«”ë¿ ¼‚;³‡»¶%v«°®>Ÿäí­æÞTÛîhð•®{©éö.¬Dq²Ž¡4wì ú¬+¯ß—YI¨XíL%øžÍ»ŸbI‰öѺ†rÿèeÿ‰Î`©Ø‘-‘ŸÏèÖñ௞”š£«0™¯ùî~ñ~>>›Ÿúhÿ¾êjŽúfEè¬k{Žã\nöÍ™ß=ûˆ±ú†ád—Ïûdú?¯ëv/óé>©süÆ]ú;îûFæðATj\û™Î¯äЯav™©ò¸Ž¯{÷Ç.üjEü¸ßŒÒŸYl¬*þuRñC^üˆ>õMˆiÜO­ŸÊôì/ÙŸÿúJþOà@‚ D˜PáB† >„QâDŠ-^ĘQãFŽ=~Ò -|$M–DI²ÈÊ•øŠ¸„ùRà&|4EÞÄ™SçNž=}þT¨Ð“ESºdùRiÌ4m…UêTªU­^Å*ÕèV¤,™.Y3ëX²eÍžE›V­D®F“.…ÛTìZºuÿíÞÅ›W¯Â¶Gß~…öé^´ô4Œø0FÉ {tüXòо'ÿÆ•)vðä‘…:öœ34ÎÑKƒ<-05ÃÕ[| ÕslÎ+£¼ Xpm‚wn |vpá }ôü¸êÑ—ã^<ñtâ©ÿfú9ôÅÉ>÷Þ»¹öêÔ³—Îýøöëã·ŸÇþ~¹ñßàËîÜ}÷ý°««ço½úÊë>Þø:Š«ÜâÚí@ô¸óϺøÆ‹p¡™Ã8ñ Ô0ºè$ÜÐà 1líÃÒD qÄ G»C‘Ã.Cc„P¿ 9¬ðÆS¼1?q¬qÄ\è6•’,3§ˆLŽ¿¥|#®IOtRC ‡ ’G+Ÿ4¯CéûOFQJò„rL)¯¤!3…¤‘½&«|RÌ.w´rÎ0ílÏ ×$² #»j 3¹6“ K Åt3F*ù„ÔK-ý\R,[d”ÍL5}´ÑJ³ü”ÓAT4H:ëÌôÒ>DZUJﬔ¶Çÿ]©9c1À}ÜÌQ§ì1ÎÿÐÌÔM=Ï?ßÃOEeà ïÌ ïÀ`sÚ(w5°8 }ÜÒX6 W?ód6Ð×=Ò+CoU7^èÂmHÖÏ~•7_}?¢Éw5Û7`&¸`†úuW7€ f¸a‡ž•]¿üUxIˆ/Æ8c§B¸ÐŠçÚ8d‘G&9£Ž Uä’ ³÷§–³zß•>9ÉCÕ}ù¦œ9Jmgže~è\‡|Þ4Õ-‰ž9âÛjkaµµo¾6å$=¡Óõ6½dM…ÀfO‹¶@ø~•Z½¯·5;m®«>û»8?E:é¼jþ×bÞTUÆRsÅóCòÝæûèUa}ðÁÉœÐïs¯>•Õ¬‹^´qÈåV—îM4ìIŸr[©‰íROWudVñÃ5uÕpÔ¹ÌVp½|½Wd{ŽÞÉ)'ÒrƵkIѵ}t?­µPØfG·1oÖEý;\9]ÇqñƇ|¶æãÆÝ.Ýmå=óV•ãSj£nQØ=m×M_Õ[Õ‹¥ÝWóÕÞÉ9µ6ì(aö‘'s¤ ²Šìi„vÙÑîãGâo„€Œ ´†¶À²²‘ƒdñXhÉŠ¬†“RÄ#ÓØÃHM>bóT·ø×¿gom†ã•³HÕº±Ai?`Z…>gÊ==o—)–£P©J®ÙF[$°ž?Ï óO”¼âÒ´È=Rn$™™ìTì„ã¶ÈM’›)V°rÙ›oÆo›¡âô´yNµœ‘"—ี:þâ+œõÃä3açSyõsfÉ iHA~®ld{&‰5ý}Ï™%Ò\*ZËXIN|²lè1#ä7|nNŸè=e¶,i½ Uâ§ÿJPV´¢Œr'1ÙªŒ¢ôwß²©ðð¶,‡ö™²lžíÞ÷ºj’§ß$ªB8 ¬˜NSé¤ÜJˆŸH­î˜eÙj÷ÒÈõ“ŸÕsVùž*´Ž:¨È4kU˺V²’µ€"ÍçþrZÀx"Õt ™T‡rM¯s¤ºú+¬V)TÙK˜¡Óê"ËUØ®’gy—ìëñÒ*ÏÒiëzãû)+ÁçHŠ&ËŸ­ ê'sÊi‹ŒÌ¤ÜD‹Ú ÿ蕵'Ùj_{BÒ&l‹Iœmnu{°Úbš§Ýmp…+¨Þêñ†ÃEnp]›\æúq¹u¹_Pd{Ȧõgˆ„]Î EBS¸Ï¥ õöR]ú¤»x%(w½‹Þæ¼kéb ø%ú|Ô98Mçu,Õ'ýê“xný(:wº>úÞÓEsÕ›}¥'ÎzÊŽï½Wt%Êà~ÊŽN ÞîMÅ•¼[NVuKE]M#‹Ï¶¶Ï\M•ï .u¶w$ŵÙYF&ªîצþëæ†*ØÍOy?-šx9œVÇ5´*æœÿéb‚@8-ùyìð¦5ß §îÂwBÑ}\`µÝX«ä¬ï«ªTäyfsŽÌV+-ÑÙ^'{/ë}3“•Øæ[ÅÁ᫜}Hg=÷Š|ös hAzÏ0®p ½è?#úrL²O%á\¯I[×ÒH•n¥Í«éáz,Ú¹])ñÌé5—š½Œ&™§a6ª£ËËN)MÃ<`;Ywq9=k«õçžwʱ6Nñ)ƒó©o—ç…>ROÿPÕ¢ iñçÑÎ1°NꆧwMö¡¸ %^3%ü8m+ó[bíjGk@“N¶sy¦á³ÍRl ç­pÊΑ–­|d_™ßÀ\fç×oe)5]Øšë½ Ž¼ÄQÞvF ®I·S¯úTÖг^YÏW_se»—\†hX+븎XßóB¸:ge×îÄKÆáÃvgT ZæƒwÍu>‘›ïÜç ìùÏ….· Ýè©vôm«Hó ·4µ:köѳRt©x*"Voy1­uÔD}ÂRï Õ÷Š/_»¿Ù²ZÕÈ|X¶ÛÏÂçÖUšúªÐF¡jçµd TP°ßDìSe¸Çý-æ»j}¨• ?š×ªVOýÈ{ózß#ò÷LO˜ÞIήžDnùÓ‘£ˆÛåÝ=qk'~áí–ü“þ[Ü*ÐQ!ŽøàÅUUÉ †j‹_úrÄ‚M=N(?v´o~űï1?ÛÎöã?ùO\Ü­ê¾Î{•Òú¹ƒ’áoŸ"L÷>Gº~òófüåGû"ʦßý+;ÿûåO—øÏßþg©ÿýõ?õÕ›¶õû@0’&Ûb½4@É¿T@ HÀtÀhÀ”@‘ˆÀ ´ÀލÀ Ô@Ûè¿QR´ A²ÈÀ$Á‡ÁDA@ßò¿tA¬8Á”A<£;®ÄAÕ[A㪦ôAáëÀöûÁ!„À $#"DBî3BKÂ&4™%¼A'”BžiƒÂœÂ+4Á*ü@,äBÄ"ö;Â.CÞÚA´Â1DCˆÁ4À5dCýsÃ7´¿8”Cù£Ã:t¿;ÄCôÓÃ=$¿>ôCïÄ@ ¾A$DÉ3ÄC»DTÄ£cÄFºG„ÄŸ“ÄIܹJ´ÄšÿÃÄLd´MäDCóÄO´9-ü?Q|ÁP4Å>CÅT”³UdEsÅWl®X”Åä¢ÅZì4RÄE¼Å]Œ¢xo`¤Â2L´RôEïk@†ŠèÅdT"pnÀ‡O€ €‡`¶ÐEhô>w(ˆ<À‡D€H€vÀ‡>(ˆppˆgôF"ºƒbÀ‡ae€[ƒlÀ‡E0n4ÆG»‰yxÇݲ‡wØcxE8„@؃=¸@ Ep„HH†nÈÆêÆ† †@00 ‡ƒ .0((À‡È8â„=Ѓ‡KpÆ\*( ,uP‡ dI‚€(sH…@‡—,RÀ‡—–¤Éšd#x?pHƒ ЊX©ypÊ(SJ§,´,È‚€††\((€É(,@K¤\J¡´®4# „I˜ƒ8À€¨€˜„Iÿ[)/IpÊQPKèŒC¶.C¹fʬ1˜qëÌec Ð2Íeêµ}*ÍÕt×,!Ís:‹¸pƒÚÔ4©Ò…Z€X`Ë¡ ʇQP‹î`MVCžÔäLŒ‰¾ÔD9Ϥ«Öl7Ù§·ó¹‚MÀ‚Í z=ž8y(€‹*ËIgÊ£tˆXJØJjè,S˜…jXP¸|˜ãćgÐ-PÐ* ×DÎ^{=—C+©Ö46r‚Ðè¼Në³Î¼¯ P}ÐúN9òÉ‚hJËNƒˆK¤Dˆ]hKÀ S@šlu É€…™üSpšÿ4å.}§­jÐÕ¬NçÙ˜!5PæTÍ·QÎ eÎ!mÐÕÐéäP  s‚*€‚/ ¤ J0+](‘ć,yx–œˆ%0‘¤R`Ið„)x†ŸYìZ"Ÿ­aÐæÃP MNµË>d{>…Bœéèú%‹x‚  &À$8‚ ˜jP… N¥NŇ À‡3H^øT=T]‡^@ˆ÷JóÜK§ìÑD‰ˆÈ«#Ñ4¤5š€Rˆ&0&0UX… X…(Õe7H|Pƒ`xÖg=U5ˆÕ]OÉ ¼ÃÔ³ y(Öˆxƒ3HwôV:B×t}0le×”€;aolserver4-4.5.1/docs/intro/tcl2k/html/img056.gif0000644000175000017500000002345707363640503021214 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxÝVÄ  'ß¾ùv¬·°áÈÂmZKîXvY¾ø°ÄÊygÖl¹áäÉœCçíy3HÌI—¬ZµÖÔ#š[cí®·c̽%oÞ‰E.^ê˜nÂÈ+QW^ ñórФ£oV>:õæ³/S¯}3êààGƒÿî‘|xŸÃi\ö¼û÷ðOëNî7©ùøÓ×k¼.OüHÙZ÷•÷šE X”~aÙôØqÿý”lËÉæÙ… f¨á†rÅ`cü±‡œ_f‡Yh¬i¶ZŠ fa‰ÖáŒ4ֈ߇ëÑÕ^U nÔcJ?Úhk·MØ"lB&Ž!ê8¢d–&^`—QIej>ô¢–QÒÆ%–/©ä˜d–)ch‚è`;¦%¦™†¹F¡HFÂi§‡i2–£TOÒ'el[9e–VbÙÜ¡†z碌6j“kŠ¡£”ú”‹ÕéQm¨Ä©Jšf*eH"Hè¨Bz“¤çmç*ª'½FI¦•Ò+Jœ~JfŒµ^¤*Tlö§|@ÉÚâ”Æöªì²+ýÚ„­;g¬¾!ËìµGuǨ³ú×ê«Ê jiµÉbk.â:ÿÊm°“n¸åÚvÚ­çÖ[¡ÛæI\“|¶ç»' jïÀ׸.«áÉJ^¼7̽e줿Œ2ìðÅ\YÌ¡ÄýF{%—â&(2Æ$?|-Çd §˜nÉ0gz²¾êñ›2Åf²,ª´1÷¼3³(C†s™:ïÆ³ÏØõV¥xƒxéˉtá™)pÈBP‚säcÔ Œ3äC¥nX$ÂN‰ÚT˜5½©NC™ÓúÔ’=ý©PÿÔ¡uE`¨¤¦ïX®€DâÕÜòG¨NHl2BÐñ¬ŠÕ£>2©>‚UmUµ§šµš&šÎ¥ ¾µr0ªx$y|ˆ¬Ém‰Sõ¢å¨çÁ¨Âè…U[ºìÈ·±nЮ#¤fïgØTyRq t![½JY­€µ²ãR,±9ÕÀVw‰Õ݉pW¼ªåÅŽo #ã¸ÅΞ Œ¾kâh»jÈÇ¦Ž’˜Í-"/›©¹"¶Štl-iñ&\Ý—(¼=®rã–\yõU‰‚CmcÛ%Óð¹«sè¥Ó†I;Ë]KsÃKÞ’W7Öõ vA;]@rˆ+-w¥4-úÖw¾åŤm'9»•üú·{ç½Vöàk”«¶±Tkˆ®t¥à\5øÁùXp§("aC„ÁZµoZÁ;¶#e3Á;¼&A,¤óÈUš+¹´ù_ îXÏÑ J-ZµØMòe_ì »<Ë,®X3 ÿ|ãÌQÊÄTq‘¿Wd¹·QH¶ú–ì["7YÅŠà‹ŸÕãà(yVW3I¢ +‹ù[R­ÿ™³•fsžÙgfÏš ܸºÒÖ¾¢Šó›q»á|²Ë3ÐnPìá=£EÏÁ™ó4eF#MÄ=d±Ò|ôc玫m;¾mk.qºÙÒ†æ3¦ýÌcîÕ êƒÙ AIƒ¹ÕXtt¬r|ä-wËÔΫU×-òpzŒ5°áxÅ"bב‰nµ3^W9Es:m òŒyj‡8»Úòr¯uÈWÏÙx¸ÎqkSÑÚ<7ºzׯö«µ-¶µ%m“-±­ÙU°Ði¶~çV“ñ%U¾v»ßÖu`tM;Bo«õ×4v¬Ö«t«ÛÓ#A´€°·,‡?üÉt‚·Æ7ÎqhCn7ŒÅ‰9]i!…|Ž\}¬Í4rµ¨Õœÿ#íè4ËY=Ò‘µ7Ôáf}Úf >ðäzi¹Çî5h “WãŸwŒM¾¿˜‡ñ³"`©iÂúçQçÅá$ôø¸eñn4Ä·^ëöÁø}.ä\ O«¢›÷vÂ]6{¹}×êÒ›7';וŽöeÝÈg¶7{õútPÿïgdzÖßknº?̓oºÎ߸Ù+’SïêB²ÅO>x†¯üà„'^‰„FJ©hf£Ï|æCžùN4á!(˜Ç;³Ì|@žîBCr Oy6óðð‡  ðЙ”ðäKòt èÔ ª0  &±à»P¢`€ù0¾ô—MP!p ð×Kö—yçt¥‚Z¬¶MP·^ú<„÷C<ÝÖ^X×3é9…E•309pBHÌ7„FH€ÇhG¸„”„»Ç„PXE…TèNX>U˜…B1…ZH…\Ø…Pÿèl*çwF´6$®†"w… ”qiè†wv@¦†æ"†ÛqV]e·‡YEVäVVgµ=ˆ~Xˆž…9œ×nÉÆ$"2Wn„ÈT}Xˆu‡³–l@Ör¨E½ÓAOD_×õM®1u5·lW÷FH\!”zT8P´]ßVl §!vXeˆ’ˆ‡Úãs£òˆ¼ˆ†8Œ¸ÁDÕõtWy¯ÅMÅÃv (u6'y·SsÊ8C*Xwt÷]”÷†Èňð³‰EÆ<20_(eâ¨I®§BçH‹Þx„¦¸Z¡ØŒîõ‰;¤aÕ¸v·0ÐÕ7²Š_tW)(ZÔ5ýH?—·†¹wkX°H|ksÒe¢§ZÈxw4ÇÖŒæ&‹1XG{DMÁõ‚€uŠ+Çå¨\ƒ(j€g½S9%I‡BØr¿x$0l42W‰½è’§“s%NYZjw_Ÿ¦“šÔ’D™|Fy”Äçp¬Ö“5‹)‰-Ú¥aHâ]v•jÈ” WûcE88lÞÕG^Y;G‰aÙ]׎͗”J |lÙ–¼Ç…÷1— G‘ŸWo6ùoTƒ!³‚¶–ÿíh)bÉ‘ÖdXN'ˆÎ3’öÒG.Òfáö˜ºÆl|9„o —¶W™–{˜‰Æ™Æ–'9™a6šÖ)Ÿâ`¤ia©9h(‚•óEŠ/Ç]gˆ¨b•“)o IoŒó=ëXSÙ[Áš–+†œ †šVœÍù` ¦œÁšZŘ¹U{™pfy8x6&›™g—#!+¦˜™©e½¹t‰1†‰ItÂIyç9júògOH†Óæ'ÚömñÙp¹ž÷ *åœ'”øåHÚ‚@ý‰ ³W ™jwi4ú —¶wéÙwþYrîi†ðŸ[År ê.SÖ# wšiü…|X ¢XÆn:vZ¡‰·ž,JžaµŸ†•IžE÷sCéN…£kã¤rÌ(¤œD¤Õé£ë†¤Eù¡ÿ2žMê¤Xš:Fjš¦¢B¢/*ŸpAŸ I¥FÄ¥³ÿ'£›w¡Y†c¥bJcIg¦µ§ ‘6ySZ—mŠŸ‹§Zj'Me‰æy§•§(zv3º(ES¤Jb8J¦Y¡¤t¨“©‹ÚgóYjaªo²V§9šEK†¡E—¡j¥‰¸©0 z¿¹’­&T”Œ W;Ǫ§GC.*¨Xš¢Jh¨O)v¹ g|i" …W¬èvZ”°ÚŠêzo:¨ºw©‹9+'žjȨ¤§·Z2oå y¦,Ò:q”ú¥–Ú†(ÏZNÇ4ˆ¥pƒXnF‚®’Y–=GlY–’Ylj'Žêc)÷.§”ª(ƒ¦Â©:§øF¬s×l¢Ê«ð¶¯tx¯Ó4®.~øž.ɰC'©i'míj–yH“ýÓ§Þ1¯x±Îø§´#± ã°˜j±ÒÕ‚ß40©¥øYÛ ž«…û†¬…¡²%D²˜U³]¨³•U³¡¸!ûxÇlšÈvâVXßIn_´ª3)n‰z¬™G­õ™…@ Cc¹’WpòÈb­%’ >ÉÿZ«„z¦ç2°œ…¶ “ŒªZfQIª'ë©S«¬ ®•"x9˲nk± $¶´Z©YZ­`ȳÙ¸üIµÌ …†Û¬5ªŠk·ŒË©ùz‡1›>KY—Û!¤6›«3˹KEuѨ«pË!Ÿ»!k@©» ¡›!A ¡‰¹µO4˜X9ŠP ¬Æ#²j:lººÃ»6’¹€jz;ó¸•B¼Å{³ˆ ¹të›çc£¦ëŽ ¸Þ:¸U »¨v˜Ê–V7(wƒoÀ;X%R´s³Ë‹¹¯Û=©‹³éKJëû¾ ¿[q¦z¤@â²ò+…ôÛ·®[v¶¦¾&µãKºŽçMÔÀº¿ E¹[׺Û¿ Ì@ÜÊ»z™Ú¢ú‹¿Æ…¶ø8”wg®ù â%Ážù½tÚ—ì:Â6x­àkclÀ®2,sAi-¹ªcÚäÀœ™ÜÃxzzF¦?<«”f™yWýƒà’©uç[»Eœ©Å–cI¬“Iü‘¬ØÄƒg‘º{Ã;GÂÝÈÃ@hKz&|ÆGXÅlìSnüÆ:ÇrlSt\ÇÃtÇx¼“k¼ÇHÙÇ~¼”€Èn9È„—†|È—™ÈŠL^ãàÈàÛàzÜÈ´³Jù1à €É}€„flÉ×xÀvð u”L¿Ï$" ‘ á×~D !óÔ! Ëù°Î$Ê•Ôx`Lÿ·ÐÊÿ¡ä~¶¬!«V9­;Ãc   @@°  ü¼êM¨ ÏÔKÑ<öÍ% NuTeŒ}å¾6"¬²:]±è:„ƒzR4À]‰ÀdÙ˜j óÍ0 ó L3 ~ü$J~ð ¹Ð»`Ù`;p ¥p ù@ LÙÀËî·§°Òó£ÐÃÅoV„Ïm¶c)Ó4wÃþãÄc w:z¶“Y.ÕQLà5 # #å-õRT~'HÌ?…€IpI@0#° 5­0f#hp¾ *e.u¿@SŒlÕ~[÷+ÝÒÙk×…œ<¦×‹Ë׋ì׃ Ø’+Ø²Ç M¸ˆ|Š]ØŒÝØ½÷ضjØ’ý’d´Ø{}ÙªGÙe{–ÍÙÊçÙ\Ú¢]|¤×‘}Úٽ٬}×®]Ù«Ûz—ÚýaÚ¶È„MÛ°½Û؆ۡ۔rÐI¦–ÀÝ,ÿ³ýÙAÜ@꧃܂ءŸšÜT¼Ü¥]ÛóbÍÆ­T3ˆ†Ö}ݽÍÜñÛÞ=ÝuæZ€˜fŽ™´Â(XéÞhè½óÞ L3šØç]Y%®{˜»«‡ºh¾„¸¦ˆÚ±ç{ˆö ÂMÎ}‰jÐE‰»8‰{´mEk¸ Wï]Œy(®r›1JNAÒ¸Â{xãÝæV`·áX\á>‡8IÝž“f…ágñ—ɱJ[z¨®Sà(,äF Œÿˆ®3©±~cЋ”Ø®L.³)®Ú+Þ=êßÁ؇׉ã~ØÝÛ}ˆ•8‡8&?CÓ‰Œß²s÷µù&Ð=Â5ìM×Huÿ4 .d¹y–Z·nãpæ~+îY^Î‰îæªi—$ŽµØ¥µ-«^„Ed>p¢h—Ö\wžy.œ¿HàBûçÂêLKb´ÅÞ?Žà[¯'V¾ŸÆãr¾XûÝ«îŒzIàh™Z_{Å¿ÆÞÖoؘGpõv‡þ›ÚÚÝ[– Œ.à¢Î†é½….žXí«KÁ^–¿äˆÝT®ß^'Ý eÜžÛÉ^=àî1Šß¯ííª—é#¡#žm+îÎÌêîÛìÞy~Õ´Íb¸ÞìŸb+5Q|`\®òÚX/Â>~›Ö˜äD˱µÛ¹ý ÇÞÜån{¦è•ý:¥‚÷–·¯èÅÅñŽy\Yn>ù^9¬9ç{ã>Ü/{ÿ\* Æ&¿cœ¶”ò¾ù¨s(ÿêý‚¹Áçqñåï˜7ìà†pDŽjìÀ^“ª•ÅdõŽqÇÓ¬åë볕°¯KDñUUïHßéFH¦âèj°SNîUŽî7Vö1÷Eÿ&÷oõN÷(~ïämö>½z«÷Dd÷J?N9¬¬Êðˆÿa/øs»ù}Ø*ï œøÅUC ÊáŽ_v|¯â…¯T»émöcùþ<úŒ?ô›o¯/ïàsŸúäEø’ïú¯¿úxÞú²¯\°O³Ø£Bšû‚)6‡Ÿ£Zo *X[å«méûî©»..än‡“2 ²wî4²ûJT•ñX'Ô?Øßí±¨al|»²Üxjn¢~Wƒµy]º‰_yÿSÊï¦ã/ú;_xå˜PüÓ·oñ´Ïé‘“À| D˜PáÂ|€Ø°!Ĉ +RtX£ÁŒ/R´øñâÁŒ ;2D™RåñJ–-]¾„SæLš5mÞÄ™SçNžkåûèПEŒÍW$éR¥ìUêTªU­^ÅšUëV®]µ K4éQ¥e™|êUíZ¶mݾ…WîÜ—aíŽ=zÖ¬S‚týþLs£ÊŠO†,XñbÆ3ï†%kV2Ú¾l;&¹3CŒ—AjüÜX4g‡…M–<1±êÄ«Sƒ[vÜÇb#ë]ÊjÕÁ¥}GDmôjÖÅbF.QãlæÀO'>‘äåéÓ_3Çžkm¡·'7%¸ki•—~|¹ùã“wÖ.Ú´çöëas¤Ž¿º}éñýÿ׉ÿ»¡¼ÃM7«Ò;ŒºÍÈC©¤ÌR‚î< ¤°B /¤M¬»œÌÀ›Pºàò»N¿‡›/Åè0d±E_ÄIÀ¢È ¼´`Ä1Gwäq'ñBê;ÊÄë±H#DÇ9<ËÃ$ŸdlÅ–N„© +{º’§è¤´n³úÚQ3/¡,hI…t’Ì;c³M7©ô/½]*ÌJ;Û8èN< ºÓ +³DéÏ,ûä“PC; EÏ {­5DCƒÍQÂø£I3óB3<5ÇÓ²Â-}›)±A÷44ŸQ E•¡SMÕÓÏ=Å|ôKÃfåOEIõëï¾A}hÌ/ ²@M7¥êMcuÃäæ3ùORŸMuU;Yu¶Úi©åÓÕlwÕ•ÑZ̯ÛpsñÖI%ô•G`…´±2b£J¦dßí•-@“ä’^†Ö­qÈ8CYá›W_ƒŽßLoÔnà79Õ‰Áx¦¸â¶–á쵈ٞ&¦S9-&¹ä«0îp؆nâœ$69f™·Ó°f&÷Ryc€¯™%˜g:h©Pn2gìz.ç~ºéáT“hœ5>zç—YYä¶v:.7–:7£›³š7¬ î:íP¿68ìv‰$[¦­ó•÷ìJÕÆ›N6vÛßø~°K¬#Î:oÃ嶸ï4«F¼c GûpÉÏ¥ÿXñ±gœ½«!‡trÏCJ¼fÈÎÌØÝ£YvÏeœü¼õ‡î¦×rª›CÝ$ÕoêÜõÖå¬\tÛHOyvÌkQéÇu×}ÙÞ¼Yláe#¾øÍƒyë3˼GÙM§x;•7ûëóvM|%}ïø¢Ÿ-zÖÍžr|ù_oPßíáÞ{ócÊ]µùÿoܦî§è…hD ø·.(„ K¸2ý9.‚Ä`™Ð7 õM{ù«Ç˜A¦m‚k`ýJ¸ÂÕÅì„§s„X8õpG/ì^eHCú jïÂá»lØÃQGA"•ÈnpF˜*þèeÄ%ŽŠçc^÷A]±Š=ôâ‹Ø¾À©ç‹gLÿ³Åàq‘Œæ‘“p¦Ô¿¢ÑŠjÜ`óÞFÀÏıŒ*ŒŸ‹ˆÇÚèÑo 3cxÈ atѡīC}Ï‘®ƒd‹$ù¤ÌÌ}t»$’2É¢Mâ‹>Œa(õ5J •R”§„ÕÃ@§Ê)Òw†\±:‰JÒR—¶Ü÷h°]j¦l¾$+/äÊ#“ruC榔i!fÉ™;„%&ëhœÂ²‘Ðôf±€i3a²–àÄ&:‘Ç%/%«7þC< "H¥&uöÉ{úH®cV¬šEº&#_2M5ý°ËAPà"§¹Z54AèRaB_6Îѱq}nœd6Ó9Pù±Óqïkh¥Z{ÆÈ=ô I“h MöOkNÌ5ýæîµ D­ç uM¥w{ÚŸ[ÂÏH&ºR'‰]æ4ܘÄGÐh6†©b©ÌÚùI^>µ©[±ª¢*Õ^¥2–Ëê9K¶U®Î³—äûØT »¡Žµ¨¸¼ÜáÀåU´Æ”‰R h?_¶Í¨ÿ½µœ¹œÜs¨*×úÉ¡êY$BÇ%ÒÑDôë¸Ø“X½­;dڢΊ·¹í4¥Ž-Ñû”7YÖxöni«@’a6³Š !a*Zì!ö¡ì²hëÇDþtB¼eëá\ûÚOZöEƽ*V†´â¦¸Ï…nlÛšÜVúÕ¢”¢LéjÊãQw™Ö V³û¹æ&spiD¥w³²ÜÌ6£Ýe-LÕ[öÎl©=ïë„CY”Ö«±ÿu(ªXÍ!—¨k ïEÇë¹ò¾wºŠ‚(ä@Ðú4¨}LÑ…SkÉ Öw¾~¡âHETÛnÑÂÞ°€ÿ˺†t†þð\B ßÑH®ƒ0ޱ×òkÍ/â8Ço™ñÿãc![fÇtéˆìOð°EŽÛƒµâÒö-yyyük\¡ ½·$¶)˜Ý9`žŽ‹WBUh„çU0J––m¶mm“ûõä-¿ñÁ‚½'Ša;œÕÅ_ÆgW÷œÒ½Íu»|“óÂ0J²ÕrN^e—IZfJG˜´²Ð¨íÖc+zÁuŽR¸™[l&—;ŠèFd¬×­×¶%úÝðfœ”ÅÍîZßòÖ‹Æw`¤í´ß ŽÃ´·xeœeï«»¾p.¯Ðáƒ8™®Mqø•ðâË8”6Îqµ²ðã ù“F^eçÖóQ L9™yTíH§0ÎW0±óubT«š<.W¦ù ¦ +6\ï„9^MîfÓœ1+_ }µOôœHÄÝ4°•š4=›9æðê(•mnl,_w‹çÎQÒ¬g®‡te´Yo;zzûl™s%ºwÇ{Þõn,&޽ÝeO0v“)u³âY³>g¶£-¼(A·úêÆqúõ’Œ½ Þð¤Æ5É5ßìÊ“ÝÖfææE?¿÷;˜ GêèUoAZ‹úòÈÎ|;þÑÕ·å¹äÿ~½¹ñ…aGÆð]uÐËwÎM£Ýñ/ªñAµØÚÏ êŠñ›' m­'žös·ô¤/wO7hÏxÛ¥iÖï–úä×~o¿gÒîƒÔû2¿Ày_æzžpŽÐû‹}Å‹„ñC÷÷³±÷›„Ë9Ë·¯#@•3@Á[ÀüœøƒÀ Ôž<»y+¶­{&Xã9  1E> @Áqµâ›Ê'}jµä'4‹<L =€š4î[»¾ã:÷Ã?3Ò´@c,Òb? D²Ûú¬Çû,Ls t¿0Âd¿4ÂÑ@B3«äË¿ü#:”V³:J±§4w½’ÁàºB ²ÁÔ£A+\CÀÈÂ8¤Cí˜Ã:,¢™ :Ò£žÃ¨¸Ã §¬0OR½Ì:D”B¤ó¿¤@„ F<<ÄJÁl+> >££:lAÁá«뵪£#Ú[Â)¬.œsÀŒ*Eñ›>fó:ˆ£-ôûA 5ü±l>¥CÇ›-G„ª6¤³´£§ k±ßr¹4Åÿ»¿ÔZ3Ÿz´‚ÃÃ#䤯d+Çt´”sŒ=utGuaG€{GÜzS§ÒRºÅðÅ$L¹?|À…Z¾}Á-ü.Ù>hd5ÈË4ˆ}´=ªÓ,W‹Èyì¸zô:Þá¹Öø3˾ë>e¼˜xD»Ñ­oI3Šœž3Æ.KºÅžS?d ‡\‹’ü­“DIøÉÈMD—ÎJ< ƒA…,Fž”É™ÉݪˆÔ4†|?¦$ħ;Êœ”ÊŠÊ©´J1ªÊ«ÔÊïBÅ Üʯ¬š˱¼ ±$˳” ³D˵l µdË·D ·„˹D¹¤Ë»´Ë»œË¼ÔË·ÿä˾\Ë¿̳ÌÁËÂ4̯DÌÄÔÊÅdL«tÌÇ”ÊÈ”L”¤ÌÊœÇËÄLwÔÌÍLÇÎôÌ€“ƒøƒ͘ÍФ8G(ˆdpŒ¬TMà ‡‚è†| Ø€x0ˆF€‰ÔŒÍ{„Ѓ|Pˆ€p‡|ð„ ‚ÍßìK<0†| BX¸…1І|`„CèÍçä z€N¼xà†c€„E@Aà>¸ƒ@(„ExIPoÐÍ•¨¦jH`„0@zPà‚„!0‚€‚(ˆ8|(ñ½Nàƒ=xO0¸„×ìÊD *(-Xƒp]Ѓ€(sPƒH-RÈ5ˆP Õ<x€?pOƒ Ѐ´Ï‚  8…uQ„HÒ8ˆh(iÐ…Y ˆ‚5ˆÈ‚$EÑÑkàÑ…€J : € JÈÿœ1ò‚%…%O©?œz©ÞÈO´FH»Ic2Afá6 :)‚¬;ÎÒ5µƒ L`€9Tñ‘¤]°…Xˆ…&Ñm Qù Ã\”üÀfòD¹Å’BT´Hß+U”*CΊ»ª8€y(€š¤; ÐgÑe‰XQØÑjè,(ˆS kX‚PÀ…| ‡QÍhÐ-(ˆPØ*¨Èý3ŬZTÕY­¾4{Ö´pe¬í;:̵T}‹1jÑ;Õ„R]^pRÈ TH… m(ˆu˜Ðˆ ýTx… 5~ÍGNs;œò5xÅAre;<×SK÷×ýè&P3Ã$‹ ÉuC”p‚*€‚/  QH+]0‡Í‡,y€…0ˆ%0(ˆ­‡RXP‚‚ø„)€†ˆ!ƒt´A ÔÉã®x*ÂLA| JÆ“”<[U\qÊêĘx‚  &À$8‚ ˜€jX… ¶¥¶Í‡ ȇ3Hƒ^¼=¼e_XˆJ_åR}Øhã(|ÔÖ£¡ 0i`#`»-V˜VºÕÜ xƒ4È5ÏõÜ»UƒÀ=Ò…ø„ Ql8Ówœ€r˜Ê} 88ƒ}9ÝÖm]ßÄ]ÔÝÝõ¾ ;aolserver4-4.5.1/docs/intro/tcl2k/html/img057.gif0000644000175000017500000003560307363640503021211 0ustar frankiefrankieGIF89aXÂ÷1, *$+/,+-+.^0`??_%1qH74B?/g/WHjYxb+ocS_ _7(a h `0`0/n:E\RPH0h\o_/sp`g/PNOO`_o_`}~}<“ 8„Ìÿ/ß/ß7à0ï0à7à0ï8ï?ï8ð?ð/0Ï22Ö@”T¢8I%Z¦/g0eªXßRë`Ïjï Wï Xï/s×2eýHW“Rb™Ts®`ghdq§Šq ‘{ÿ€p`È`˜ Ÿ€  €‡àÿ4ŒêW‚ºoˆ`—`ˆ½`¯¿ZŠËGï_·ÐP«élÂo¬Ðo¬àyÈØ`Çà—!0¯.>xŸ_Å+Í(<ÿÿ22Î7LÏl/ÿ_ÿhÛIWÓN`ÐxOÏg`áVeð@€x¿Ÿwï°–  …}³ÌoÏ—ÀŸ Ⱥ?î–/χPÏ—`Å´Oÿ‡@ðŸoÿ @ðÑòÑ,ÿÿòè6ÙÎnóÖK÷âS÷åo’“’„›®¿ˆ«°¯¸€¹¹¹€Ê€àŒ¨Ì§µÑ¬¾âˆÇŸÀ ·Ë—£Ë¯¯ç ŠÊÏ™ÌÿŸèÀ°ÅÔ´Æßà‰™ìµ¸ï¼ÃÏÕ”ÈȯÏç ôÒš÷ëŽæè°ÛÛÛËÖæÚãîðÐÏñìÌ÷÷÷!ù²,XÂ@ÿ‰(‹HÁƒ)ÉR(«¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"(Y/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx<ÌÛ‘/H¿óêu»0EòsD,0ãŠ÷âMùde˜«Âm JîXv} 6üØ/cÓ£7D¬8ñäˆ|~íz6íÀ´Oß^ýZ·êû[³¾í·jÙ¿aÏÍ<9råÉ1‡Î;zíêØ3k§ºy©gº C«ÿL=zjÉä­O¼lü¢t_‚«Æ›dlÚÇ\cù¹Ö&—Õ)皸å Y€ËÝ9çoofÄ¥‚“õ‰%ôŠç¢x*ßq€‚¹(¡LZÔÛ£z2Ê_pVɨ~…—žŸŸj%æ‹#"9䪬~䥗­ÆÖZÒ©7õ(c†S Ü®O" !¬{&)iPZ¢,Š´B•j™Wºi¦k¾éë³~>«è{˜BÛf”Ø’ª+¨|FZj·šVª§|æFÛŸµK‚+œ¸ãj[핊ò7*è–+/¸Ÿ†Ê­·Ã¢•ìˆ1vulfqÊjYÀ+¬°ZÃHâÃWlñÅr¦ñŽ¨ÚŠñÇ ‡,òE/{+G”PƒC±Ä"Â0Ç,óÌ4×lóÍ2Ë‚ó:ïìóÏ@ûÜsÐDmôÑH'­ôÒ Qâ´ÓM?M ´"5%%0õÈBÿ–ìqHP—põÔ‚M=6ÙfçuöÚN°¶ÛmÃ=¶Ür_]·ÛeŸWÚu³í÷߀.øà„nøáˆ'þ4¨Ð!ˆ<€ŠmÍ5^“yòFX—àùç ‡.ú褗nú騧®úꬷîúë°Ç.ûì´×úB _îaæR1Ë9D­/üðÃ'`üñÈ'¯üòÌ7ïüóÐG/ýôÔWoýõØg¯ýöÛc[žåºßÈ;Y¾k$c+¡_Bh­pï¼,î7Ï‘ñðÇoÿýøç¯ÿóQ?]Bý{š^ô‘«­|á«Ñø@³9ó%ð*2 î fƒ Zð‚´AîƆzðƒ dÃß²1ÿΩw ÌH !ÈÂíHÍB gHÃÒp„mÀvÈÃú°‡8ÄÈ 6ï¥I/HL l”ÈÄj‰–jbšÔ„Ä$ª Š\++X.nñ‹_ì"ÇèÅ2’ñŒhL£×xÆ[½0ˆ®ÒlHGÂQ-:ü¡}xÇŠ qbEl¡Â´ÈÆBòˆL$+Nvµ jeŽuŒ$ úˆ–<îñ’”œÈUÕUÑ1R<έ8Å#ŠRV!$ÅhÆ2²Œb|åc9KWÚ2ŒfÌ .ñâÅ.ú²—¿Ü¢Œ ¢rw%ôΘP(’ÓF„”¥/_ÉË1“šºÌ¥"·ÙÆbºÿ1“Ï\ 85²Éò©ð=¥ì”€ÐI¾À "%¸ãl¨JnÚóžød¤ÔYx±k_ý„—)©<éÊ_šb"©"RNgZÄ¡˜ñHÖÁhÂ2—´lå-cIK^²Ò£ÁÄè*kY˦QŸ‹3æYÆ©!–f¤¡Í '«ê‰ÏšÚ´ÃüfeåR!&“BË$D)2T™µ*Ä|ˆJÍÒÓ5Õ"0 d“ŽJÕ•4r©“Ò%·ÊÕ®v•¥OõãOCÔ1ÍÅ´ªhíÊUÃÊ’ ZÒ«p+&§*”¨‚¤¨iÍ«O’ê¬rÅ­_•¤`éøÖ=‚u(vý^õÊX•ðµ!~Ý `ˆ ö²@3,¬!%OÄŽÕEµ2«T²CYðдk@mcW‹’µªH³?„$f [>²è³ -3GËÚÞŵ)ª­\‡ëU¶úÿ$±ñ¤o9d@ôÑè±ü<‘p‰K]ÃÞD'êY¯¸\ í³!Ît#‹¡éV÷¼<4nOÛIvvwCO ïs÷IÞX©7-ìE™{ß ¡Î‰­ò/}ï»!Ÿ%¿¿ã¯‚M2^ãªk¸Í.·Ëݽ\‘”¨i’Èa*F‹S¶pˆ?©ÄS…ZðQ,2wÁT±Œ›9àC»A0oP…*x ÐD*îDB §è1|àƒ/¸ `|·,a Q`DâA @àÌN~/‹¹æâ¬P#‹MóŒßø1ç)Â9&â]Ap€P"ÿTœ MèBúЈNôØM_¬5  ˆ´'Ͷ¾)Úibk[ñ³¢7ËùÓ ž2žËºÛP›úÔ]Y…CÑ34¤aÅF ŠÔ'I3OyÝWøÉ•”Ý„¯«£½çHoÒ¥¬ƒ©[IR¥™;ÀœžŸéÇîZÇ»’ ´Îç$г]7|á)…C¿(ï¶wÓUw£S ð–ßNå3ÏyÎo¾ó 'úçCOú›¾ô¨gùéïòăŽílŸ:¬¨*ïÙ«Aß²ý¦¦5œ?a=`m×ÖøKe;T»U¶Ö{Ný©Su_¾Õ#/ûs¿¾ùÄw“y&s“ºæüñÓ%›ÆëÙi×B©]Ð Kþñ¥Ø×Ÿm¾ûóÚQRÿ¹êô½ëËÿÿ,Ð’{è€h-ç÷/óâêG(ö×f±z©7Â&+|×–|®—}r|êÂxìÁ{o'‚â2(U‚{×g'Û‚ÛW}lB‚%È b§TWˆbvØ{ó¢|3ƒn‡?XEö‘:È8ñ‡xh.)ö|™ò-zPH õò§vÃg…óç€è…좄`˜„[€ H{ëGJêEW8~ér'´‡8GHv(gux‡z¨b§—2<# ? `<ó‡=340ƒˆ4£ˆ1sˆ5£3ŠØD㈌x3ˆX‰@㋸4œØ‰žø‰ X4†;ÀjC5V#5YS_{ˆ[ µs¢uW—‹²8‹´X‹¶x‹‡Ætõ¡Š{؇ ‘i¸ŒÂ8ŒÄXŒÆ¸hèr¼¨‡}¸ŠÏDgÎUA'1œ¤_écaå­€°qÄÝØt<àÈÉ# å8Žä˜ŽÈSŽ <î˜<ñx<ð3õ3ëÈŽùhŽíˆÆã àŽïØà(yú¸©ð˜éYɹÿÈM£6%Ði“6i6ÆÑHÿÍ8’-$’&ÉPÓh2–’გÍ4“Ä}„!”“d“ä´’<§X.94uSDY”_äF¨]=ñv{1[7$]ÔõT%”•H²DFWi”5…”þ£”V![N9‡Ä•G瓯”±—Œj¹–lÙ–nù–p™u32”ZY—÷„RP³Œ½"—3¢–Çe–¥†–F•A—vy˜‰„—;!–”˜à'˜„Ù†‰˜”ÉF9U@Œ©€K8)™)€œ ‡Lh|ÄaPí—ƒƒéŽ©cwÅ-äç^ón2JV”bj¨mr”NmMÕT™†”•jœct™ÅÔ™-fœS™Nó¤mÒâ-ÿ‡Á~ÁÒ„åF„ðE Ûg$œ¾Y—Šé•+ÅSžå}4§š™Î)„&b³‰›ìdgÖ±>Á!Eæ^Ó2¶sŸøi:exž@'ž®˜ÉÕžgw”ݦqÝæR™iœ™±fk1Yè5¡›EWA‘œ‘2ÚŸ}A¡j[%Ñfj›TÔöšM¸œØ!„Ë©¢jü™ú¡zXÿ9V¦gåù¢ £•¤U\–NYGæµ6z¡©©£ú©UZMJZP ©¥1¥a¥Sú¤¦µ¥\¥VêY_:¦P¦a ¦]ʤѤ¥uOz¦TЦhê¤iZ§RÊ¥‘_Z¥ªÅ¦b*§yj§x¨n§oÚ¦*¤SÁÅG…%¤CjG_Uf¡†ŠZZú§<:_˜ùZÕ¨‘T¤ú#z©ã£R¤4WŸêJbñÉ¢‘÷|î!šÈG¢³Ú{)èuìù1Íu#¤Ê!¦zªÅu]8šgCWž©úrߥ –©!s¬F±ª¢:É`)²¡ã¬Eÿ­Ñ£C­TcÍzcÃú}乤ۊ1½zyâÚ9Z¬æ Aغ\Öz1ñžã:žJÚ^áLÆd@@>[°dBÀd4Ð0 çZ­ˆz­“×!ê^ ŸÀp`ˆÀ@sð€À`Ðc±° ›Rõ~8ˆ,Iê®úê eVfÀ°0KÀWÆ0+bÊJ ¯™«¹I¢á­Êi~'ëd0y­DÛi+[œƒiŸsŒT[µV{µŒ–RW;8ÞY1v¦@OkNp¶µd[¶f{¶hk7<š‡$Û¶ ön·n”€Àjá=  Bµ·¡Ïö Ï6oq¸7püæl7Po‰ûl&àl' „ëlr›¹?%ÀeƆlžƒCToö®p —à q Ðæ£p¬ l8ðké”^é–~é˜Né]›’¡àV±´AÙéžN î’^Ш<Ú¸?®þê°ë²>ëöhÿÃh47””l>§. " °5ÀDÛ(Ž÷ˆ‘è8އ‘ïX? ‘Žõó ŽËÞwèxíÞ¸í⨎ÛîãØÑ>í)‘ã®ìÞxîÉîí‘ï.‰îîÞôïYïiïñ‘É‘|¾‘¸Ó‘¹®¶ÞÔ•½žz§N< <´þðñ?ñŽi›n’ÿ¢>êHQêííÞ¯•²e9àúݲÿÛ4¹òäè}¡“0ßAR©Þg'ß)¿Þ7”Œ™•;¤–@4ò÷šßåjò7O꼯ŒzY.¿d™ÚÚ¢Ë;¼.*f‚´i5™Û¹õG¹ëï` ¿ô´åóÃ5ó$_ôÖ(½²ÙÃòÒàÌ¢é™É;¼¦†Rb"cQÀdKÓÔJ¥Q\o™^ñ œÚô…ñô(±ñ$«õ¿\IøJød/Wf?ô«¾%¾Žÿø•Ù…oøa™¨–/à˜Ÿ¾6ßWû•ÖâLJ–DŠ-R$’Q£,"=v¤$+$D’%ŽL`àJ’*º<SfL—5UÖ|¹!N˜0YÊjU’çà !ÞüiRéR¦M>… µ+ªU­^ÅšUëV®]½vEy’ÒØ”|FE›VíZ¶mÝ:të¶âÜ‹5nì˜×cY·aãþXð`Â…NeU01UU/^ü˜1äÆì!s•|9óÕÌ•'o®êw,I³†MŸFZuĺt1ÞÕ[äì¶~Ï&]í¶ę̀0ƒæñWâÅ÷êW ÙÑ¥ƒ¿}ímÔ®[Û…ýQ;ßÚÒ½S÷>÷pЗ—Gž^ýUÑÊ‹ï _þÑàÖ]Ö­—;[åóÿ– h7´Ð?Ÿn=T¯=ÒÀ;0§ŃÐ0ûZÃO;ýhã)¤x»éC–| Q&œš:QD’ZùMBÞVœ0Fýc®¬ '¼qFÓrì¹2Ìo¶þ¢RG#D2É¥Fƒè=$yli!)§¤²J+¯œ20(óÿñ" 5²/“JD‘&£R2ñ¥‘Ú²¤Õ<ó6—Z4óE4G„ËN=O<ŠÄ:Ç”PE4ÛTRµE"¾DZ£QG…4RI'¥”ÒE®Ë×î$×*²PQG%u¾CÕ_Ž]R^=øHïYÙÚþ\©æ{‡>z_ÝxH-wüàÙ3÷ry•Å”>|ñáûÝeëÇE_øí•W—óçK² {ùç§Ø¿~ûïÇ?ý ¦St‹­^úH²õqaÞÛËí b<õi l:œ¦§³à‹O)éIïdÁjQ+ƒã%J0–ôfÿ˜ÄÎ7@"/7´kŸíÞGú€Ð††!‹ ýÇ®Ž…?¼^}”²ΰI5¼aûB–„èÐe(ta„ö7Å(ª†›“!øî¤D..‘N|Yùºˆ©ñ]1# SwÌ5F6.p,`|"SØÆ„EÏŒAò”O‚D:ö±)%„ýè.ÞBó¹È2zbd“ÿdÈuéñ_‹Äd™IlõŽ’îÓ"'E ÂMfR’HúdÕ8JVŽ’~<å‘RɼPb ‚i⠙╓z ÊZ”.‡¢“:]‹>%Še+ŸSJL&SG³üÞ*•9MÞ½²Îœ4‹XKjv“bÖc–ħÍ<Ö2=ˆP…KT¡ ¢¨Â2ø /ðf>cÄÌHÚ$|äLc‡âÎOœ¢|ˆÅ,¡€À“ 'ˆ@O}V4Bàlc• PDâî!K)@ D â@ À¬”…)ù¨ÇJc |Š_˜ R D`N0@0 ‚8€ =@R‰«ÿ :¥©$dL•ÈOSRɦLi)MY$Õ«@O[ Ö.A¤KxÊ3˜¯-Î$^5%ã/yÙI©ö‹ $ìa3ÛºQ¬0†[h]««9Â’®.»©%—C‰$"I$;YÊVÖ²—Ålf5»YÎvÖ³ŸmhE[–ÊF– @í@–ÕŽ¥µ”}íh9‹Í^‡¶ðI¬e»[ÞöÖ·¿npkÚÉšöÇ­pA;ºv°Ëís¥;]êZ¨¯D,guµ»]îF%ºÝoxG‹„¬"!äMËwÅ»^ö²ñ9p€÷Ê¢¾Þ½.³Û^þö÷†‡0€Èpô¢.E½M¹Á L`ˆ\"Á &Éx`’0øapB.|aÿvØÃ…1€=2Àˆÿ†Èƒ,=BÝ–‹.& Œ?,G¬¶gàD`–79Å9ƒG‘`@Ø)*vE’šj†$,O*zò5÷ZÁÊ)MÇŒk1áääYyD{­èåÖh˜>¢-?~‘9 䛀ÂÁÄ(2äWÜ@—À³,pÀ ¿"Ã78ž/!‹ðÙ0^ÎT»q¹<<݉8Å5¾q[\ÞW8ÇE>ò¾räâÉ8ÉU¾q„ï;ä+‡ùÂ[¦”ÇÜæŸ¹lj~sžß;çÚÙ¹Œš<Ê¡7®j VÑA¨ô‘ÿÿ|ÞÕ’•ÒÂt¨`iuGÇ Ô§ƒõ^ºMTÏ:p°7°³Üãú¦ùËCõD•EÆt;¯â®ô¸÷)GuW Þ)Äõ¿èáN9Ôãâw1#½ë_¯iÑ _-ÚÝîp·`’÷yÝ=ñ;¹ÖÐ2yÇwýñ™¼ä½~xÊc¾íX_|”èþäÔÿýìúÚçÞdÎ7dZ|÷¼êI¿{Í÷Þë£Ïº˜kïûß¿:•ïüáŸ{ÆÛ¾ÑÁ‡>ó‡Oüè÷æò·g=ö?}Šåjº8îûæßCg²PLtì3ßü«‡Vú“_zò+>ûäo>íQúåÛùæ¯:ôS?ùë¼ÍÿÃ=œ{½„¼Â˜¾ã‹¼ú?Û³*÷¿Û{ ç“À ,?å›@ø3>¢@ßÃ?ýû½ëK>C¬²ë“<8,CBT>ö;Ä6ôCüÁ%¼¿C¤Ã,DçD„D=œÁ´«ÁÁk=öcÁR<ô­U,=#lEEftAüûBì ”CÑ›CIä?Õ£ÅL|ÅY¬CT4¸=Œ½ž££4Æè Æ,LFñѺfŒeEh¤F“Æm«Ælô¯kd7môÆçâÆoÇ Çq4Gþ*ÇsTÇðJÇutGíjÇw”Gpÿ EcÆyÄGoŠÇ|äG}ÚÇ~ÈiúÇ€$HQÈ‚DÈA:È„dH6ZȆ„È$zȈ¤ÈqªG »Ç')dD [l¼­Ž\:¿sDùI²ë4¨˜Hp½Æ;É Ü²½ã‘—|É·#DtCëÛ ¬I7LIõ ž|¡‹|:l?ùC I¥ J(¡IÚ?¶ÊÚ²<””¢”œJ+"ÊÀ3ʶ ÉDK%4Eí#>°óA±Ì@²ì=¦ËDî{¾*ŒÅàã<ÌÉ´|E̋ɴtËЋA‚ÑDÓ+¼¤ËgäËË?¹lË?Lq²K»Ä·­ü¾iT Å<¿Ÿð'¥<: Œ’ÿܲËëL˜ÃKóL ºhͰƤt У<Ó|ÍÐLM×4MäÌÔ¼KØÌ%"ÄMÕÍÏÜÚJÐlÍE|&ÉäC$L›´À³ÍÇ\EœÔL·TB1œMÒôIá[DÈ»N¶´IÝ$ï„ÉåËîdÊÝDDßäI¶DÏ»äNó„Ï„ÌDtLíÔ(áŒÌ+<¹äìõh@ãOŽÍdÍÎ,Bì|NVÎâ MçD= ÏÚ„âdΕPÜ´M…MÙ|ÏõŒPøüMÑýH šPÍOîÁBÊdÉ–ÜK¿üOµÃúlL ôCëäEû¬Q2LÌÖ3LœÏâF•O"¥Q7-Ï…Îïä˵P­è´*#=Ré4•¬È]!Ð,e ýü¸ÉìJ.%•-S,Ó33EÓ5Ýÿ5U2…B¡ûJŠÉJ«œ+Fä,F]«ÛÌMÙ Ž9õO„9ÐA=¬œJAU”àDQéqSüS&5:-MRÜ‘ŸTCõJL•JF£G]%ÎúŒË*uÐ"%ÏêLÒ¶,L(mÕ&EKË”ÑÅlÕ¾´ÕW­UUEK¼ÌÑ·Œ?<) V*õUz©ËÊÑÕ]íMYÒÓŒdI—|Òí$Í>-P?mOjTlÑ <Õ½$ÑR½Ló¤Í•ÖeM×$טŒÊ$S tÎF{Ïu×ÅÐðœWo%P5:huR P¸LÐé¬×H ÑLeO{µV­;ËBWã¼’}ØEW…­Ö(EÿÍeØëRĤXuÅÅcõWÅ×QÑ×Ô×h YâìÖ†-Q|}בЕÅX–åMšר„W‹•ל­Ù€ÅÙ{Ô„ ÀuõÙŒXµP!ò™ Ó@­Â§íÀiíQ‘OËLÖ™%VOœ×aZàÄI¡MVŠíÑ®ÝZÕNýZ¨ÍË—•º¨%Û-¤ "íWQ)ÙŽäÔK/J¥J+TÑýÜӦ䫭.¾•»¼­«»eÓÅUÅeÜÇ=N/E;{dQȵ\TjÖʽÜÍMÑ aÚnäÜÐõÇÝÒ=¸ÌmZÓU]xC]Ð]ÝmA\n»[Æ‚¬„ãÂÝÜÕÝÝåÝÞõÝßiÞàÞá%Þâ5ÞãEÞäUÞåeÞæ­]yÞ‡8€Â¢ÆÙ=®O¨ŠÛ•Èò^ïíÞîÞðÝÝðßòEßó ^øÞâ=_õUßÞ}_ùuÞúµßûÅßüÕ]âjÖ2‹h³à˜Þصÿ¶Ù JèˆXàÞö=.é%_ó_ù%ß ®]ß ¾àýÍ`öÅÝ Æàù¥à _Žà>áFaýuá†áûå_Òr­ÿ àÕ²±>Gë`a‘Ûá â!&â"6b~Õš6ÇÙ-'†â(–â)¦â*¶â+Æâ,Öâ-æâ.öâ/ã0ã1&ã26c)Î+qœÝh.årã7†ã8–ã9¦ãÍ:L€,¡^h\cYhcÉJ®‰-®cÌ dÞ¬C.äEfäF- Ì€'vƒ2x=6àjëã?fŽ‚¨¬ÖÂỚ,PÞdE®aBdCÞd³ åTFdGvåW†ÿeË’@p˜€ 8KÞáÖ­ 6Žå_æ`fXÎÀ@Ш=nÆ5æfvæg†fÞ:Ìd¾djcæhÆælÖæm­jƵÙ}]RñáqNãoçpŽæ( eNÆsFçBQe¼bgctçwN’F*go¬g €ˆi…cè&è‚6èƒFè„Vè…fè†v臆舖艦芶è‹fŠuöæ[ÛçßP 6–øV@…Uˆ’–•&¶“.é—&蕆é“è—.i‚¶i(èœÆi›.h™¾ib[5ŸèœÖé¢&êšæi¤†i¦nj¥~êc3ꞎêXj§>j¨ÿj¬¦ê­Öꬖê¤þjª&.3éRv.ÿu®&Qç|ÖÆŽÖ6Y €¸ –>i Né–¶j ꔞé^i™¾ë°6i°k™ìÂ^é–¾kÅ>6šê¬véÀfi¥FìÇjÅ졾ì¯6ì«&ìªm«ëÐþìÒ&mÑFíÑíÔöêÔF”…(³&d6-P¾ |žçžƒë/’…G 3{’6i¡~锆lØÖiÈŽl¡~ìÒ>nÃvm°¦l`lÎ.î¾NêÉ.ìì6mvi•6éÍnn¬>mÕ†îô®êéîjéfíÕVï×fo¦Ž,NžíúÆíÛf-ÒhëÝæ9¸æ “€¾/è7ðGðWðgp‰®’þ& ÞeÉ…=g5 ×µçÕÐí¶µ}Þpéð ÿÿÛ/åÏ¡ q$q9%pñ·aÜÉ…`ƒ·q6ÀÓ¿ñß§þöf€ñ r÷ðµ»ñ#Gò¯¢çñ‹òqò(‡ñ"‹$·ò"&orYñCE‚òÏq--ˆ+·ñ‚Xƒ,çåÀÚòŸp·VâÉó5·pLÝ#jséòI•óŽ¡r¯¬sëºsÌó=BHn–f¶~sÿ~ §üsØ¡sr!ôŸ\ŒÔ\D/ÈaN÷t®p'_Û)ÂHÿòI7;·ô ÏôK’>±²‰*,ÓË……u_⥠ò§%Nÿô_öPotlª»á‰ô@—ÊA/Œ}fL]ÿrY0»»D#&¸“•VBŒÇ¨ŒmŒÄð Ç` Ï@`Ga—çj6ö?GvÿTvÂÐò2\éÉvÊ÷m·ŒÎ÷{'÷N7w‚s 1õu¯Ìvw¸BÅCwõM/ËèŠqß÷ôèw —¢€GõbQuÏ\ ‡Ÿ„ôõ‡÷ørÿ<„pôP¥x:%xÁx÷yìøgù¯èŒúŽ’Ÿ˜:–e_ó\AÈ•où׊——£.ÉQÔ7¥ù4wˆ`ö~ÔyžgúЀŸŸ'qŒ7ñÀe ³,;¬wé·¥oú†'ŽÍ iGÇ›osÁ4&NÃ̬ﶕw†·ŠÎÀwoçöÉ7˜{ÎÐ oïvm¯w§‹‰ú¥ÍøV§ë: U‚ãzOwøôh|Pz&ù˜Kyy\ü®oyŸ—|²oÿ¯ÊÇyÇŠ{ÿv¼ß{­{ÌgÍoÎg/ÏwG¸ÏŠÓÿv‡üÌgkÁ÷`õU‘ñN WÀpýu¼|ÓG}{`É}J;W Ô}ĵÔZè3[L”6³Gq…/þâ?þ‰ÝÆôÚ¡Ç[‘Í¥ÛÔËáDÐõë8ƒ§\„?|~yâµxÿnþì'wÕ·‘ÜßY ÏEuÙÌdHP–Aƒ.DÈÐáÁˆ J<JÖÅŒ7^$âÑ£,"!GŠ$HIÖÉŠ*W¦<ÈbE˜0]®|¹²æM•[åTY¢'РB‡-jte VJ—2mêô)Ô¨R§RÚ2"¥¬YQÎ<êU§ÿ@…ú +ö+Úžg’…èV¬Y…gã¾”k¶ìZ•÷r ùQ$`’O^5ZØ&BDœ˜¦Û‚m&” 9b ž1O–¨Y³dÇiG“.}3iÕÔªW³®Zx«DJ]MÓ®mûvÍÙ¸oòíí÷£àÀ&Q¢-¼­îãÊ—3Š@ë謦†êkã²›sïîý{Oß|ÿ.?˜øWãà׳oþùÒë×™Rg5_©uùö÷Ç¿ÿt¾öåaA•]EÛ¹· ƒ %^_ä7Òpê u˜b.Ö•hB•À™†!:'‰–H¢zZm¥ ˆ7%×"s/Þ¡FšWq …!ÿb=ºQc ùg”e8ÓOy=ö#A  #Œ¨8%•ª¥¨"WPâ¤%x2ÚFãF6NXaq‹uöäA¢©˜‘—ÅÔS+NZ”œgré ”î uøUùgjWj•åvÚœ—µÙÑ_âHX™‡J:)syþw)€jú‚±%êà§”"÷Ý¢¿tãy:¥ª¨­ºJ””­Õ·)­KuŠU¨ æú*Q»ŽVª˜æ‘™ÞfE)9$n ôÓ’½T'¯ïÕ:픂®èk{ØF«©}ù¬`ÃzuX[ÈÆ5'‘Œ%6—Pj®»%´@ÂÄì¶õÚ«"aÚ®§¯½ozl£¨Š{«ýj0ŠÂãK¨¤ü&Üls'pŽ‘>|1ÆÆ+¥'ìqQŸ:fÅÄ^ü¡¯(Ó›qPç²\ÛÆƒÌ¯¬q3Î9ë¼3Ï=ûìóÌ3%2ª¢7®™—)kY]KV†nBMCì¬@ñv¸òdÚ)º ÍÔæœCrš»ïº¸ôË¥Ål’Ð1eóÏqË=7ÏAwÿ &¸Â•Œô™ZCÖ¦Ø]3=µWqn‰¶,†wæ7M€ ΡàÍ:îïàS·vlX²xhÍt{þ9Ц]ÑŽ¦j1i£×¦:æ­Û¶ðæ…v:í´Ûý¯·¹çMáÞ»þ;ð0®Í0ço×~¼ç·wW:Åš|P ÑK?=õÕ[=öÙk¿=÷Ý{ÿ=øá‹?>ùå›>÷™'Èz²Æ#ÿþÏÊsÇ<ÉÎó<þù³7|ìwÎ?u&¿ˆån<«ßÑ|§¿2;°cßmþÀ 9ôVï ³!œ¨K4`ó‘›2ÔÀNêsß)(º»0LÄ ýx°Æm­oN«\Ø¢V¹²‘ÿ°‡ 2á¤$˜BøUp9 W‹R02±‰êóÔ ·ø¡ ŠV¼"³¨Å)†®4ÔK kôB$ÆPƒN<#U¿/®…@Ó"ãxE.ö¬ˆÊ9¢ÞʨÄ4ò±(Ñi#ĺɱ[”›ƒGÞé‘(Kô#$ƒù±Ž†¼¤éX·âocÌcÍÉQŽp’Å“""1‰IMî,‘»Y¤ÑɉÜLk°%.syË›ì2(½¤åAnùË• “ ÅlÎ1s’L(-“(ÍÌeOžiêrš¿¤æ`´HNK€f¹TyIV -Jj !´»X¢—µ¦1ã©xòršÿÊ f¨=w*ÌÔ˜û4jCºÑ`Rs¦A©5éùÐw.UªH*§ ½Á.n±“]ëHç÷]Òn“\ÕñÞ}@@€‰¼Ë€+h»¢ßw¯ßQí;n'߉Р*xá^èÂÿÀ€Š*L GÀû ô©÷1Hqÿ]½sR˜!H ^ƒ&¡ <ˆƒ`¼PHì]ô‰7;é¢ó‡¥^ßá‚Æ N¨‚а€ÐàV,b`¨H|_ç7PøŒ¿¯ã¥{ïÂxA ¡ðÄ"QD â„!±ˆN„a 8Òþ“¹ß}—¡>ü ?3,HL€°T€ @@€: þåéÍ[ðß,EÄ`À ‚\ ,A” JDô„H FàgM ÕáÚJ€”`0€<‚+ˆhàÔ`,Ęc¨IÙ e‰nC™…™ ‚GÏ›}ß`ÍÐÕÝÓÚ` @@øàJf°™›lœ³pÙgIÆýŸ=ámȆ@¸Z·¥[¢aÿN êB]Öa! ú_qõÙâ›ðIaÒõðäaæà‹#>"$F¢$N"%V¢%^"&f¢&n"'v¢'~"(†"&R¡®|ÚË0bÙqX ˆ"+¶¢+¾",Æ¢,BâÑ¢¨­â,Š""z®¥ *fS"¤€0Öb.£1#2&c&£#þQ ãPBhȆ5ªH5fÅ#.’"{$‡7~Å/š„62„2ž#:¦£:¾"3ÂNV4Á@dã5R#=j#2®b7êV8Å8:]!Þ‰ª d¡$DF¤DN$EV¤E^$Ff¤FndC$ÐYaÓÝÿ›GŽ$If™ ]I¦¤Jv×IbáJ¾$L†LK~WLÖ$ÆB‰äÕÙ$O¤#+ˆãLdOåÇá¤,àä% €DD#øãPФQN埂,4 @„UFR’NTR¥XFÝ!¬‚,¬"´ˆ‚àd#(TêdØ%]â[,¬‚#4# Â!‚°_#8‚#°ÂW‚¥\®P¸Â 4fE4æ ¬|AEàD¦,X „cbf]~¦$õå_’Á#eb>^Pdd:æA˜À ¸&k„8æ%DÄfÞ@mnæAD¦g‚¦o¦€h¦4åQØZcºæ%¬/æc¾¦DcºÂ(`Ü€pænRfrb&d¾Âo~gd=Â#üA€l<‚¯ÿ¤Úl'nº¦n–INÖP\ÜÞ}Îçâ^%ŠLð×lð_€~‡€=YGâ†z稧¶ØÚ(ˆ&`Âr2§P\Bm‘Ë%Ú×NY¬šÈÕ'Ú(!ähÍÍAÌʹÌ]”K/®\„W…¹ ¿ØlÞc¾foæ„`掄+ðeÊÂ%dÂ+Á%ˆAd¨+è@^Â(dÁr(Å UiC˜b÷õç~LiÜ–T):ÙˆRN—"(–ŠHªÍfªŽÆ§DŒdâ€,Ü`(oz&obœòÀ%`oÊénP\Ò˜Ë.NÖ€h–n¨¡öçŠz©µa˜âИ®X™âþ˜ÇµHÁXT'lò@El ŒÂœFæl¦ŸÊ‚eİ&mò&¨ÊB%d+Ò¹ ¡èXD \”‹~šˆ¢(}j©9áÅ\à'^D†¼<͆0ë[¸Ø}–†$ÀAA$@¸&$€ lëh«,$€,¤AB)˜«ºÊ)¬D âhcÎfcj‘ËwògE`\‚+A¹D·bÂf’«ÁÆA”«)$l–kÃVD VÂjz'xVllÀ…<,Ć¥Å~,âý#ÈŽlš‰,Éž¬{•J@;aolserver4-4.5.1/docs/intro/tcl2k/html/img058.gif0000644000175000017500000002205207363640503021204 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxIât/V¿÷ò œ·$à‰‡‹&¦ºx±ÛÇ7ÂmJKîXvY:F,8bãÂŒo³CÀ›Qƒn(zõFÕ¡'N]˜vgÏ GŸv]š·EÛý:nMzwqݱI_m:²s¥”£WK7aæ•‚³«.ÞûxvãÚ•»ÿ&®=yòòÆ ‹ÿÚwwÎìÓãö^;÷øûá¹_lžŸ{ÿý©'~¢Çš{Ï%8ÔdKYV]]<)(á„Vhá…+1H“ƒ—•…ᇠ†(âˆÎiXu^GâŠ,¶èâ‹JG‡tyã8æ¨#Ž&†eÓeÖEø×|!ÈQ|±ed$EKØšˆM>æ^”~W•BY‰TÓýø )!y¤~ÌÉ`púØ›šI²¹ff2™æntö&šùÉW§“ñ•Ù]šyñV_›·ý ›wî¨w‰¾ùß•Zâf§ q–Æ›RÚ¦›¾ ^yFjŠ(U\Ò(•Š;vÔÜU«¦ºiˆXºÚV©(Öˆ*«sjæ)dQRª¥±~z‚‘Ž*ë±lÑêeŠB¹çöåÙ訠à®rêg£¡2Êçgð庩¦½zKl¥ÂÙY§E®Ç^°Èò(cƒµžÚl¼øæ«ï¾>){³ü,ðÀ¿5ï†õ’ukÁ 7ì0²þBõåÂWlñÅ#ÿFü`wìñÇj $„ —lòÉi‰<ñ½Ãbkè™ÛB;(¢°qJß{í™g³Îöái§ž:ã,3¡þû3¦E'Z3ÍâÉ)_´u–ifÓNG´ÔJ‹óЊÞÌmÏYO½ÕH‹Ë’ÊsÅîyh¾ú)™áÎìö|žânÕtOé-µ£Ùë€ÂÂù¬“\ãýõ«Àî­ÌËi 8¤Û‘ùøÛ絋ø¯fó½µPhÛÊ2Ê ‡.úOÛ»Ö¹ëµMøåÏ¢[¸¤BcõêÄíL3g|3´Ü—Žî{K¥+üyUëþmàŸ¯¿ `óéhæÅ+_yÌv³í¢lÍ8¼¿w¯Qð˜ ïýøäЗïø›¯þúå£O2ûðǺû`ÊoÿýÓO1þü÷Ÿ¯þâÓ ¼ô†1‰izҲݟ\¶Àn)Ï]·iž"x<: JjV’`} ½½m0R Tãv½VI«y¬–ã÷­VÝ€]¹Ö 1W,u!ivgBà¹ÈCÆ‘0rkS] ±ö³>jˆV;^85ÂLqy‹^ÙXØ:>©WÔ]Æv¢eyÎ` ãÿ¸è£}QŒhLcŽ`¨Æ6º‘Dl|£çH¡8ÒñŽxt‹óÈÇ>rÿe~ ¤ ·DÆ.™ÑtƒL¤"THS o‘ŒäÙ™°ðIò’˜ 3ÉÉNRd“ž e(A)ÊRb’”¦Lå"Q©ÊV’•®Œ%a)ËZ¾‘–¶Ì%q©Ë^bŒÙCCÊÐD8’¡¤Ù“ h!"»ÁR‚˜  Á¦/·Y!;ÜáHXYM`³×,Á+*tœÞ P–j] XaK=¹•Q~±œEç9ÛùBu¾³ž%”ç=û92}þ³ “…Ü‘ÕW_–ÐuGòf¢4ú#XztŠÝâÀ瞸 75J kh¨¶ù—É3‚Em´NwÙl ^p©lcÉUnÕZV¥cªùЗɏ#u¬¿5éû˜9˸.ó—ý4ë_CWÓé…^™"%=hÊY,мʴì¤íhj‡¹Ù®‚6¤­¹úª:ÈSÞ šaûßùªܱ rª»æ6Nc»+Úþ ³´Ãw›/ÞöÎ7©’Í[}ûÏü>ã¿^Ç€3“à¾Uem_çL²C‘4³—dZF×”°¿V5ÊæÍ¢>ÐÔ6D7c ×ïæ5±Fv5t]8C£ÐÕkòu¦æte žã=ù)¸å¾廾𛪅'¼/ºÁzô¦ëqé–tºÔ×bô©[Ý#U¿ºÖ3’õ­{}¡&rdÔ¿NvB†½’é+»Ú‰Òõµ“½ín÷ý:Üã®õ¹ÓÝêv¿»Ôó®÷¦ó½ï ÿ;à .øÁÿ»ð†×7âoïÅ3^«…¸‡CщDøÃC ñ=¨§}":H'6J€Nt>5A‚yD4 ÚÄG:%*{!4$¥èã¹Yp~¸Àð #¨LD¯IQs8ß!Ó@E*¤!P˜ °pˆ.J åãc×îñф܇À´·¦î±£€Î3žΧxõÕ~1_ªbÖòšÿ¹ÿ÷ç<ï€óÔ~Öæ0Ì‘2ž§\‘309°{}çxøg8{Vxg˜s¶øbøÌ‚"h\ÿ›F$”–t"al&@ÒU€÷d]>f.$V'ƒ–#Ÿu[.x5•\7hW™%`@óN¤5»“„­e„Hnæf„h†S˜aA8m4Ç„VZš„^8ƒ’tƒ…•Z:´B[¨Dâv[_Ø^zEeuE†¶ÑcGèeGÈZP˜—X&—aHˆq?Ibø2!æXî×…ÿçZt؇ˆÈƒ/ã+„XìR„ŠÈWWh‡w˜ˆoص†šX‡•€‡&uØ_*¸\$(J—%lxt§X‚BŠû㊆׊²ˆ[´X‹ju‹¸hVº¸‹6‹ä‹q×‹ÂØUHb6Õ„Éq‹d8ƒå&SŠjiÏØfcâÀHŠ£ØfYDDgsá–`gf<çp“Æe1E6cUs¦n͈3"¦@`ãmž˜hè:/‡.~eŽTfeíx3wkØxvËÄtì·Î8nc£:êV`’(r¯Unéxm|ÈmAç8¦Jfî8aæpÔ¸blœbkºFbö7«Vliv\$vŸC0×m†µÖ“`ß!Eå’E ¤k‚cŽ4ä“7¦bþXB8ÙSˆ]³n:7Açøq.³hô“C@‘H;ö0É 2©€³ŠZ! B–cYaÿDŒÅ˜Uj k̨häòH’ &Wè“t'¦A^ƒ“¹v€\¦„Ó‰Sö—ê(ŽFræR./)l‰˜B©“wŋ٨6’Én™††…|™;?Ä]\ùj¹¶‘çÈDà[Ûå”[–jõVVzy™CEFl9¦•ø:ÔkYÈ›S †ŽØs¤^uWŽ(‘YÈs”i 5vk9xmùœ½Ò™KÔYµtØKÚ¹pV™Þ™—àžn×äYJæyž£4žYD°‚–£é*î”oéf¹‚ð9d[›¬¦”[ƒ9µ¹dX¨B’ƒ—¢Bœ¸Sct#dXÔŸ¤)_Õ’¨úc·É(Àyk:&8?ät[·íóµxëbw»·ÞÓ·~û;€¸c¥·„+\ƒ{¸ “¸Š{V±†Û¸¶ø¸›‹’;¹Ë“h––kŠ•»¹aŸž‹1 ºÏÖ¹¤Ë–¦{ºÛ4ºªÛ0¬Ûºóº°;0²;»S»¶;\©›»²„»¼‹/¾û»"q ¡ X·»Â+G„x. ÍËȧ¼ËûFìp{P b@߼̹[‡è$" ¥{D !Õ! ¾ø çt½&ÓwðM÷œ ¾ÿ˜{ΨGzî»"Ò–Ÿ ãÀ4XK•™ðd`К P½ã›\¡èMÊ— èdM <õ À%ð §CP3j·3õô¥0 -¤ýÇ”n¶O‡¸Ã5€îÁ²²“2œòÌ ò0N Kz%J@zñ ¸Ðº`Ø`;` ¤` ø@.•MØ@¿²·¦°ÆšÁÃðÇ`7,ˆC6€ú'°@¬ÃUæ«C|ˆÈÃõÄ CÃ!A <ÅQ±0é@aTURe\•R¥·~ü?H087$@0ªðSÀ °Êø0—ø€gÐ ÀÐTfUgà We½›ü‰ã;2 »¬K=’¹¿‹ÁœdDÌš{ÌÓ™ÌlÅŒÌü¢ÌÀ<ÍÜéÌÍ ÍËŒÍÈ\ÍÏì×ìͪ4ÌáÍäìKæ¼ÍâlÌ錞ÚL¾QÎïlñœ\ô\Ïß|0ÖìÎúÜIë,Ï9‘ÏÿìJÏÝ\ТtоœÐ]å®ÈÑêÿ|Ï =ÎɈs‚ˆM°¨E† kY@!ƒ`x\øŠàÌÎm—‹°Îœ€ miD|Ñ/¹'-Ð‘Ò Ò!—¡¡õ›9Æ H–©yz(•HYiø†b3Z†5‘ñÈ’‡JVhDÒ'x?ÎÍû­Ð—”á¾äJN­GÞÎÒüäPžßíÏTˆQþÛY~J[îä]Þ­_žäa.æVþ×d^æàÿzæžæjÞGLÎÝnþæ7ÎæM>çtήcŽåyŽá{>å}^çü|Î`ètç9Žç†îFˆ䊾è[ûçÑF!<Žt3}:nå§6.Žä|î¯3Ü)ô–Á”RT³¡}éÂiŸEÛ"¢íÀ¶é$ÑéRÞÒ=^Xœ‰ëƒ™™·N°Ñ¨ê>xSIëÀNÀ“ÑÏ€ƒ8xœáÕ¥ jEõ(ƒ?jlÚ’}²d0ZÚ4ædÞB¥Úí‚ ¶SrßΰäžAszíT=9É#=mŠç^éç#é 9Ò¥‰£Êª7QHÒeíåxs­.aK §Iû³ã&‘w´eÆŽϪþž$'Ë¡Oвê÷Þ´ßî,Fï˜Æ°<[¤E®ïÙ«@÷¬ ƱÅÙŠU•I´©K`3¸³À&´ߢîVä‡ñq<`ïâ¥+©¡zˆ² éðœÃñ ™¨ñ+A4òüÞðÖˆk°ñ¯²š²¼Êm&¯ð»Zóû±QiÔ59HŽ¨Ú˜N”ŸVì<è(]èÕ¦«>š0/îA¯œ±z•4dêxO9O4õÞÞÖZ”Š9G]%}cZ Ôå>”{øÕÕÞn´9BL4©€OôAAë\.0ò¾ë˜¯öV‘ùócô›ïñÏù”Núù† éfÎö8íéÉ®úŒÿžúõ*ë4hú“YfkùnµšÏß¶OЬEÚÆ¹¨–ØÕÅÍ©z§û>úŒ:!ý}7¯¯i$wÊÿéþêîu¿í3ï†ÿ¢2®ÔâŸém*¢Ú”ê.§f/ré_c íÝÿ‹v.çØOäÃ:óÿ쉥šßjO @Xð B‚:LhaÉ)^\h¡Åˆ1Nd¸Ñ#H‰Eb Y²ãIŽ-]¾„SæLš5mÞÄ“¾=yþÜYD¨P|EŠ5*p¾¥9¶Ü(2jɇU%²Ä7ÕjV•­¦|Èñ+U•)bõZµ£Ø®ò]k²műÏ^ËõíÿX…Xû’­‹öé`Â… FLÓçb E‡…ŒtàÒ¦‰NÉ5.ݹfår–é·+æµ'³ôlQð]¸v5¯v:3lЧóBÜÌÚònÞ½}ÿžÈX¸ã¡’#+e ¼&i”|Õj&Ùð«ô½·ržþQës’m!¢½îö­ê²ÙaãvK»^çèùBï~w:måõí߯?œñãÈý''Ç/@$°@D0AÓ¯1þŒ; ¹Ê¤°B /Ä0C 7¼¯AŸô/©ä&ä°DOD1EWLÌß@„PBg¤±FoÄÑ@ƒz B)Ë1H!‡$²H#w$ލÿ#ÑH'Ÿ„2J)ñCGFÿdœ2K-·ä²K—ªìqI,½$³L3Ï´ÌâÄM7ß„3ÎÕT2Æ6åÄ3O=÷$ŒÎ%OA%´P?}d²PEeÿÍCÙ²QI'¥ôÈÆ†³R²1+å´SOO|ÔÎH?%µTS õÊ;OeµUW{KUÓU_¥µV[kŠõ¸YoåµW_/–Ç5E ôWce5×wE¶Yg'UÐ&Ÿ¥¶Z>£M´Zú–ÛvËñÈ{ªÛ Å­\›¾3XÃ$vZE Rª¼.›WAsÃÝö^ÝX\M_šL«߀ ÄvÓáÍQ^Äü½á›ºu¾ûx0€y‹Ø·‚™= ½Ð:Ãë:…K˾íªC—¼öÊ 9ñÀZïå¿Æ«K½™S–ød˜Qþ®¼Ü6¹äšÙó´¸ÌC:¼îVN‹æ¤Ã:jœ‰~jû6uÿa¥_jOâ‹`þÚ;¼HŽÎܑÎÎd÷ý9gŸ½~í¶€ƒ^[·³Õn­: 5[»zé6Z<¶Ó†û/»ûöZaÔÆæšñÏĺ؎·v ÞÅ¿&(ì¡ ·êŠÙ¦{s¾Á•ç»eÓܽ¹ß¶šj½÷n󬚓«æ» W›ç¡]›­ï‹]Çí÷Úª¦õ¸ŒÜÝŠ†ÉrÄõZhvÞåË ÷˜Nwœ­y…o¼zã>uÖ(öž,¨¤’Þo¸Ë?¿úÇ­'?¶ÑGŠöúÛ/|~*Õý]U³>XÝvç1`óyvÖ£³nOl%cßÑž¦º©M¨‹ÚùXAâ‰OÁk™u0(W:©q§ƒž£Ÿí*vÁéý&y®úÜòbh-4eŒK/d• ¯7Cr ‚ŠÂa…8Ä3ÿ‘ˆGD┌X*Z¦‰I„bN–H¦Ûq C.³¢û¢¸E„LÑKO|¢ÖdÈE2ÂÄ‹ïaÓ@¸@µTÍuêkŽ cÖ9ª‘9 ¤ãwÖÀoý°ŒÉâß‹ü'+ZÈ6ƒ£è²Áõ¡m&XÄ ãŒGº‹]Žaü£ ÎX Ý îfNÃÝ$Ý&A‘­.„‡C¥#—öº•<ïliÌ$©69 îy²hXe#_¹HQÚ’¼”ä"} ÌüÁ.p±<Õ,äÆUö,ƒò‘c4A ±ëfvËÖ߸’ ß-fy‡§=£½Vxùº8-Ë[DR¹dd| Œ§úÒ+¿´õK…o\£&”öÜ­*íÜ|ˆ3±w Lâ™]86'¾J…‡‹ÖŸÍeªË0oL^ÿæ¨Ãsm/?;°6öŒ±è­¬è^ñ)÷²';¦MwLÊu™sÚT¬•Qh_½X‹†}°“‰¼W¿y¶°E:rS% Ú(ÅYÎ¥3”ì|g>oiÏ}t‘:,s*/ЇÔŸ½è»ºœ„\*£%ÍaGÇÓ`“ÆtœiNƒªÒˆºt§EMßOC*Ò£FµKÝ®T·ú†«.´«e­ê§&5ª§žu®q´i]÷új°†´¡}=ìñšØÇ¶Œ±‘½ìÂ(›ÙÏ–"°•*lhWUÒ¾5µ­½í9›ÛßæTˆ·Á=›Üä6÷¹Ánus›Ýí¶ö»á myÏ›Ùõ¶7²ñobï›ß¾ö÷¿upÏšàwõÁžj…/|Ô wx§!ñLOœâ“¶øÅq#SšãôÇAÞg‘üÎ%7ySQžr£®œåBuùË}s™ë”æ5·éÍq.SïÜ¥=÷¹Jt“è"5úÑ=št¥k”éM·èÓ¡.Q©OÝ¡U·ºBÿ±žu„nëŶ´¾no¯Ÿe7ûEÃ.Ï´£{í¡nû¶Ñ÷pÎî±´ûÝÿ˜w½ôíë; ã1o dð6á{àkÕ '‰W|©À!nàãØ<ˆ֚ÐÁŽ<ŸÝ<à#0ˆ@Ú> $:ù»TCoÔ;Ä2 `‹1d‹0Dç U±÷f³¨=Þ± c•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!æø·ba·ˆ+^ÌnSZrÇê´Ëò0_-÷ÜW3懅gî¼yôeÓœ?7 ]z5iը˞M»6KÇK#ÓMHy¥è½­/N=Q´ðᦗŽÏør尡öM½ºõë.k‡,vw]žØÃ‹ÿO¾üZÜ4uK.k¾½û÷ðãŸD_³ûúÞòóëßÏ¿=ý°6IÆxýhàž·ÝcêÑÅ^VÒéÕÚGÇ—Ñ„aÑi®‘ô[snbqf8Ýhh…8b+ú·`nö9ˆJvâs®)gᎤq†b‡©±Fш›M(á‰?VäŸ Z“Ð$”O¢œjґ裔Unéd’Ó½áEFRù#—CF§fŽâxæ• êˆfœHªõwz÷`‚&Ö‰Õ‡|æg „ugƒRÍX袌6êèF‡Æ˜(Ø-‰å¥@6W¥›¯]Ø)—=Æ)*¨fZ´¦f™–iå’@²š*“›~{ê*†=²Š#ªh¶ø(y‘æy¥»†¤kPÃë× ÆŽ×ëM¿&ëì³Ðò·,Tz*Z›«­bùäo¶bº¡·Ÿ¥™¡²Fn¨¤æø&’³²[.œRþ…k»™n Z—Ý‚«ï™™Åºo½±e«®ébûåœ|NëÝ€Ñ6¬Q±áAì°lõ øÝÄg¬±bW lĘÕòÈdªùo‘øžl0²£Ò;j®çªÛjʃ+ͤz»ñÎuÜ,‚+4ÏDKûbz’’emÑL7í4J>Ëøquœ^Zª–`Ê\³ÀÝn»òªüÊܵ¸bÇ\6•§û2q¿».¶÷®úïÖ¹ª²Û?ÝQÔ“8´[o©÷àµñ­ôÔ„'®øâ†O†øâG^tã Knùå“]Ÿ¯RcîùçS~1褗¾«è{š®úꢾ4ë°ÇnžëËnûí¶ÑŽûî¼W§{ïÀŸØïÂo¼YįüòT%ÏüóÐå|ôÔW?Ÿæÿ2Û¹õÜw/ÒôÞ‡/>Eào¾ù埯~÷é¯ï~ôí¿/¿òñÏoðõ߯?îùïï?ìýûŸKÀs< !—À:PÄpÈR†† Â!È€ö𤽾ù$ZˆÈ.Bp‡” &(ACTøÀ¶Åw¸ÀÀ’øP*,A Kð êDg5c—¦ø².1P~bÙ^†ÈÄ!Öé‡*Ά†¤·0Å­2ÂG3”8‘žÃ& ðqÂN¤ :LC¦‚˜+àÁCL` ‡,¡"P>Bð‡Dw!Œ¹B‚n˜ØŒÀ„ œ6XÅZ10|,•¤Ò€5ã øàdÖÀ‰4Ð…¨ÜÙ)SÉÊÐmQ‡k¥, ·ÊYÚ2Xÿµ¼¥.•Ë>½Jkl*·žc²­­da"¦×˜“äì~¯Lšãz({3ˆGbÒ¸™&«'62×3ÑMÎypœèŒV/ÓÉNý¬³ð|Ï;ãIO^•³ƒ±¬§>5OjÂÊ™tJ¢»®P})lÖ䑜/m• njkfÀ°öËfj“H#«š×†®`&Ó9Õܨa–·†Šé[¨R’sè„Rt¤\éç]`µ®)~ë›ÙZSEç”6²Ý¬¤!¥››ê5L„Ž+™¯Â”g`ÚÄ‘B”§&󒥌ŠTŠ’Tk+êUï¥U¸=õjU¥›WîI­Ÿíó¬­#ëÂFwƒŽ$pÄ2ØäI†W1U$œXo)S³x• D%P ùµ¡®Tb·:•NI$ضˆš¢•bkºWÙ+±?-éûŠÖÎrL­Kmjt¬‡É•(uµkU$[ZÍR%µ;zgÿ„TÌ&G¯WrW`÷ZXÝVÔ¶zM(ÎòÜÝó` -™SK…Üæj·M.CµŠSéú¨I5 jfëÙî*ˆ>°œf¥ŽxÌò26J:­›šäzê®Þ w»ò5óÞ”ˆÑůeƒ;Q«ºW³òš,زö×ÌZ÷À°¯Cæ«àg¢…Á¯Eo!%t‘­h3ºÑ ~4¤½+éI{¶Ò–F+¦3½ÏMsºžžþôý q‡¢/ˆ ð‡‡@B#ñÓÁ±Qêð!:£ šðÈŒY`!>vÆa ¡!9ãEí¿x€ðÆ|à{Kó9%’‚0¦pŒæ·C¦ŠTHC" 0A `á]” ÝÆÇ R„d㣠Ê)ŠÂeûF[‚!¯ñÅU§ àý*xÂY…Û´_Ø}Óm­pò6œiÍpK˜‚Ì Ì–s¨CžÎ‘“|œ&?ù.S®r¾j;Ÿ-ÿ4Ëc.˙Ӝ•ÿèmdö\»Ú½ùé^.Þʸ7›´EVÏM¥q¡»“è•3ú6s&ܖ国&Ó³ŽuœséN/OΕÙu”¢¦ÅG•SP—*\q~3B`»² ÎÖ+ìý5fÙ+®u¬3ª×d;ßåž ›~†?ü¯øÍÒ]´3ã#ï¿ÉS^–¿¼ý2¯yùq¾óîû<èÕjU½•ëxå"FÃÊÐ>©X( M=cšnÚ¼ÒŒºÝ÷PÊö]Cèzlë÷«ãØÂK¨«Në ÕüÆöª]¼ÙÏÝŽ¸ùÁI“;(Áÿ5£Ø,;ÙqÅð¸;ùñ¯Koе_ýÊÞÕe¾ŸƒjÖËþì:?þ:#ðòê[ábðr|ú·bu^ODSÂWbú%VÑÇQ÷gbë7V¸gN0çW40ÌÔR€òw[õRáaâò}OÅ_ĵÅWPø\+ó_˜‚'&RƒXGÇ!zw^d3‚ËSÌÔ€3öPäL$ø`èW; Ò‚Ø0¶Oÿ¢7zä4øTtLhfKX –„´AWæ§€F§Zúdr¦….•T¦_¦3εchèZË]g8%dèb·5Àö׃V\V=ScpÈUÞÔUöw.ƒwèMÛ׆áRS.%€À'`[µ÷u0g¸ˆyø<{Ø^YX•-5¨@—…Üó‰ X=¢xašHX™øo>±‰²—¬xzÆã… õ|e)z—X/¦|¼e†lØXt8‰Å$PÆ•ƒŒH2xØ‹'ˆ‚$uŒ@h€ÈhŠ<(‰Ï‡b’ŠáQŠ}Q5Ø)#8ˆÝÇ‹DõˆÌ•È8Xó'8|8uØ~V7`–•6ÿ‡ˆŠS\í¸6µ8Œ8˜VNXVj†e¯¨è‰C8ŠRX)fؘ3¯'"/Xa°ösÖg‰‰¤õ^,•\-Ò€Ü×6ŽøR\ˆ`½øƒm¨Œ'éQ$ÆŒx&ŠÏG€õGb<3ã臇¨\;YÙˆ7i($,ø‡ûG| O.i#æ1” ù=™”XV”Ly<ÇNé~F9‘#¹a\”[Q†U <²˜‘`”Ã×)I3ÂÔ…˜qH–iùKa(c$¹‹Ë”ˆ–‚2—ÿ‘£I+ KË>Øã´:µçÓ´¥jOK„VKŠS›µ¡´]Š_û„Z[µc£eëQ±µik¢èAµbû¶Ð·`ë¶tË´k»Vx›·jk·f¶Pë·ô³·H‹¶„[·G#·ƒ›¸ÅƒµÛ·Žëµ€Ë¶9!¹—“›ÿk¹¹4¢syzAæVywËê·Ë·ˆ{Š5ºF‘‹v·¹&±º‡;·Â2ƒæu«@Ö_"YuuY]h~nH»œk¸Þºs¥ŽÀ4*…z/ã¼òç)ÐëVs½¾k¼a»ÉÛºê‚gMákuÏe_ô×v‰H}Õ¥½Û‹¼’¡¼)}ÑÛ»óËup§u¤õuâÛ{e„ìûÜû¾ÞKº18¾~G¼û‹ºÁxãÇ¿šû¿ Àt¿®»uÙ Rôt¹hˆåv ÁT¹¬‹»¦À;·‘'ìuEƒX—v e½Øûaì+Ám;À©gÂÅëSÓ·†u šÏ[u?<%©¦4|¹F6 ·SÄŸ{ÄH,;J|¶$ÜÄä¾ÌÄRÌ:O,¸\{Å«“ÅÌÅNLÅ5Å`L@blÄd\ÆÒyÆKœÆj\l ÅûÆŸÿãÅVLÇp,·;ÇxŒq¬Å}œÄüżÆzܽn\ÈŒ3Èw¬ÈÞyȜȎLKŒ,É“¬ž•ÌÇ"6ĨÅÉ‚•Ë»( S™¼Å°7&°õ…X–2Ü¿ÒH!ü›»¦5‹1ÙÊ«%Œ…2Ê[aÇ–WÉš¶Œ“Âü’¿ú7b“¾¼D²¼º¬Í,„\ŽìK¹†Áh™ki‹Òësù‹ËXÓ&›‰†ÎµƒàÈÍj¨i‡Á éÊeÎâhQÚl.ë¼P ds)½ä|HÏÝ|ÏÛŒ¼¬É³¼ÎLW|鈗•VûX€A˜“˜2Ì{]åücU‹„‰Ž¸ªƒEÑ”µŽ-ꥑ+¶Ð2I|i8Òpbz‚Émʄῠ½€YòËv£ÐäX#*òTÅ€å\‡oéÊÿ%”}ˆ´ì€ˆ€å¸Ž:âÒ%ˆÎ ÓQƒ,†–4XÑϼ¨‹{·ÜœŒa8ÌMÓ¾GÒ$ؘ;LÌM“(VË@ g­…$mzǵрeULeѬÞlÒµ…Ój Ð¥œ"¸ÏH˂͋÷û˜I}½ÓkÖØ‡+ìÓð Æɻ^ÙTÕ‚ÍÏp·z”ýÏ1YÏv¹€ìÌÍÊÇ»i±ÒœèÉé•Úsö×»RÙY©ÚãQÕ¨„Ú—¬:¶}ÛfÿÍc,кݞ®ýÛ†|Õ‘›Õ²AÛ³­z²m•L–Û ÃÊžÉaËÝÐÔ½ÚÐÝÒ–˜ÏäÜ•B˜¹EÕ(™R,ƒtøH~êX†>©Î%2ˆBÌ‘éëÃç`v™M×ìBÜý™Ný~d]ÒM—jÉÖˆ5uØåذGŒý"cÐ~ÝÊÛhìÛm1bjÔ쬕l)—Þ »~—!Œ7‰]=Ö“µó=†~à”ßµWÓæ¾ý•+ÞÁøÙ~Î"Ž_õX}õÕ‘€µã%Üa,ámLálq}¿ÚÏ{ÐÆgØ7‚Ñ©—'©âÅû‘ÞMƸӿ›ÐÖÛÓ¢Bä±ãâÿ7Ý^ :á¼xÁ-ÜyLÜž+Ç,ÍæMCær¾ÈFçuÞæŽÁ¸q^„†DÐH!æ±kæBè왎6/gí7ºçX=ÍGâ4ÉzÕØÇ®˜&µé_í/ìŽë!màQ}3Ñ^ÙóHíC®Øˆ¹’ØnÍÚ.7ìNâúÎK—>Z{}—ÅøËv=íø®î ?ã&6ŒoØ~EU\þ–o æžãr¨è‡u€=ÌCÿZð×b„ŽMßÅkùêjÈ|SÝë_—W£ëÏÎÈú6åŽÐ¡‚Ü—ó!æV^àÜ"åJîáìE&è@‘æj~瀜ç~ìô„ õ²EòTOÉRoÜWÏŸVŸèÞ¾è´õõ·|šH/4ËÑ}ÎiW¿ Øb?Ò$WöfïD‹ÂY¥Xí-Q’¸øòñÎïýßë¾ó*É’ô²Øn)äo/hO5Ù¬+‰—<ùaêÙ]ùÕø>¾ì,.r±éÆþÒõ%´PCE4QEBÓ$@tQI'¥´RK/Åt FQ2¬F6Ë4TQG%µTS?Ú”¸•ÖÐÍS_…5VYgÍ3ÕG‹”V]wåµW_A²µSVsýµXcEÖ`‹¶ÍdŸ…6Zi ]LvÕ@6[m·å¸jYý”ÀnÇ%·\súÖÓVÏe·]w³M·YPߥ·^{i÷Úyïå·_+ÍRlÿ%¸`ƒkõ3á[ø`‡†x¢¹€qm8b‹/ÆÕ„ÿV_q39d‘š˜á}GF9e‹K¶±b•_†¹_–Ãu5f›o>wæuqæ¹çqu&Ög¡‡Fh—‰F:éY>Yi§Ÿ.•顦ºj€7ž±c›¶ºk¯ •ºæ¯Ç&Ṵ̂ËF;m2ÏV»m·%Æ:M­)æúm»ï¶‰m¼÷æ;°¸Ûä©û&¼p„ô6yv‘W¾ùŸWܧþ^æ«ÇÚë³çÞØí»Ÿ×ïÃ'_ÖñËGß~ÔóÓg?ÔõÛ‡ÿêFn¹îøïõ}ü÷§zúiæ_•å¿ÀÕopD ¦ô—@–i „ ‹A êg‚Ä o.˜AþeƒaÞ(¼­0„'|ÑQ¸Â>ͯ€da ¤BÖd#´V ‰gCö…†=´á(C!‘…RE4" ‘˜Ä.‘‰tâ3E)VŠUŒà±Ø@-n1]ô¢ÁFþ‘Œø3ãã—F5¶mLßáX>9Î1|u´c÷ð˜Çìí‘ÕóãÿHA*…4Þ!é;E.Rwt¤í IÙM’’®³ä%U—IMšŽ“Ý'Aé9QŽÒkñ ˆ7‚J¿¹„t3¡)Ñ׈ Cc®Ì!,w(Ëêc ÜÀÇ'$°x„1¡ô‚ÆËê¹Ã yÀG"`´}0H80RJf:íÅÀÇ0¡ Øb ÙÀÇ" L\*óh™G7gwlÃPÄ!±‡=\€a!áˆH$£żí¨‘°à &0 èpá 2‚ … ¤'ÀG ä©6NìAþƒ%nù·ÿM!T(ALK`u$&AL5Za(˜ æHAÐÑÑ%ˆFE:Ò²9à~è'À x„sóðiJ`Š™úÔ X-rPh”@¹ J¤YÀ*Nw*Sk0Õk Ä$æ  ˜„ÿÂ9/@T>…VE@*i;ܹOd#Ë£g™ç(½HYˆT‘ÍN%"¡ U>k1éPö/—€ Ô –QÉT×2 ¢‹ZÀ\iL3 Q$**˜ÅÌ„{%Ùd‹3¢¥RmFTÜ ÷²É½ ’ò¢Ùç¾Çµí¢îh}sy & ;,DÓ›b$;åÁR©Ñƒ, ij¨Æ@q |Ì£·øx†¶0Pè‚ :Òn{œë\ê7A×íÕX0ûYÇR©=Í .d‹¡Ëf×Á°ÃâÒ¿vÆöøèéau{°â4!»è* ðœ"mA ¢‘–!ýÁ)\!Rÿ¨¸7mƒ`°X[C°lÝ +´Ð°Uìä kWÁ®ùÄ;'T _ NcꃃX!º(Dñ‘…ÈãÁ²¨` ¥)4j ÄSx†_J !å¹´i‘î‘!”á"¸ˆ¾LUÄ"äâ§Ñgy˜”ìt‘'L€LÀAŽ0 PCA©)@j|LgH/~ë3Àz½,låK„¤ ¼kõiE…å&Kδ!¶Í&PŠh0ÁLpõ@V1UŒ Õמ€Ò€5cÛÛ~µrÝá]ïÒ ž€hL¯aWÑM€òˆöFÞp†×’{xì!7ñý8]ß{ßS„^@;aolserver4-4.5.1/docs/intro/tcl2k/html/img060.gif0000644000175000017500000006155107363640503021204 0ustar frankiefrankieGIF89aXÂ÷3/'0, /).#502F 2Q2f05J&2y?H:E?@_HoH`@/HP+Mh?`O@ O/M&R1,ip'l3$_PL5?O'o@8n8B`'`QFUB1VffT rG5pf`/MMOIUiOoP_`oPCwGgwpRz{z:’01ˆ 7 ÿ/0Ï@“S¥`)XŠ&Y§/`;n£XÀ_Ï`Ïhßhàoïgÿ2eÿ@7€O7¯RW˜PW MiBo£iu’~~°`WÀpÀppá/—/ÿpˆ_`€ppˆ`0ßX„³xކl»L‡Æl“Ãq ÒŠ• &‚6.³«&¯'¥.*¿0O„EŒJ/Œn d:¬L2 x x¿f3ŒZW“kPkg _O«sO sbÐÅ+Ï É10ê à/à è/$Î7Lï8Pß@ÙK/ÏgÎc8àO èh5ÌQAÄIkÏnIÏhgøNJáVeæoIùnj0‚v‡€x¯ÏpŸ€•”8¬Ž«£=Ÿ˜_ŽŠsŸ§o­…Z°†l¯«K³±k“ÍŸÏ/ Ï?°×W—À0ϰ˵3ü…/í±â±.ˇOË‘mÀ¯PÀ°@Ï¿@Ï¿_ß°@ЯtüƒAã…kï O÷§pÏÈ/ÏÀ?ÐÀ0ÐÏ?ßÇ0ñÌùÖ%ÿøÿÿèå1ÏÀPÐÇ@ÐÈPß×@ÑÊoÀàoñÔIäÕuîéPûðf“‚Ž”¦Ÿ Ÿ”© ¥‰ ˜ ±©˜¸¸¸““ÔŸŸÿ”ªË€°à°à³¯Ïµ¾ð¿Ç¿™Ìÿ¯ÄζÇßΈѯŠÏµ±ð…⯑쪮ϗÏô»ÂÚÐÉ˵ÏçáÒ•îÓ§óé•îç´ÆÉÆÍÚãßàßÝåîøÓÐàÝæÞåÍôõô!ùò,XÂ@ÿ‘(IÁƒ¡ÉS(¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb6y/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba’‡}&v˸±ãÆp›f“;V§]–‡ùp˜¹¯à¾7?ü»X^舚=/>mÚ3gÕ®–Fû³èѵSßn½[vìÄ«sÃîý¸¸ñã#/¥L7á啳q÷Ö]›÷Äк÷R®ÙºïÝÛ§oÿ¿]zöï¤wG¯—;qÞçá¯GN¿¾Zå4™W.k¿¿ÿÿ( K’8™XÍÕÅÓ€ 6è`¢m!{ÊÆ™i£É'¡EàeØ¡`×Y(žm=áW‚û=÷àŠ,¶èâ‹™–M•9· Œ8æ¨#P·õˆá…Ľ·#F2Hc‚ü ©ä’Lv%dŽEêGW’MViå•D=ùb”(N©"–=A#æ˜d–iæ™h¦©æšl¶éæ›pÆ)çœmn–@ò@qgÖD“€žP@´§<Öðé§<|Šèõù§<ÑXÓž‹&i¥—â‰gŸ’:di¡xêIi Y…©wºg§wêÙŸ“Rÿšêž´Öjë­¸ÖÚš˜ë™4¬–qydŠ7‚Ù’˜3Ðéì³Ð–)O³ÑV µÑ.äæÜvë-·ÀZ+.´ ‘™Ìš Í€­¹ÉÈÓ. cÊÓÎ ô*f»É$³N°×òzn¿bʳÎ:ðþËë½Ì¾9C·;ìpÄDx ìIÆÞ„¬²@ɉñYpâ…ˆäèc†?^è]kh&³Ú†k&¿bª¼QÅP!ùåÆ)%ÛÐ<÷¼ ÏWð&<ÿÜóÑ?Èó;GËÃtÒHC}ô?PÝCÔXÿp5@díõ×YëLá•möÙhç•ôDc6 €ÑFƒ-÷Ü=÷`÷ÕwçͳÞt÷ÿô:38âH‚nxàêî^‡Ïðˆâ¹º9äJ÷Àö˜ÃRl dRJu3‡%oX2†#›n!È$ÿ¨Úé¦nòëBé¬tÔ, Ë.c` Yq{ÖÃÍ÷Ý?8¡|òNØí„ÖW+¿|óÎ/=ÒWkýµ<"àrÌ;ò¨#Œ1ÂcKX¤®o<Õ; ò Ûúò|£‡ß|£ˆa8! §Çî<á Ô¬M"m–Æ€¾É£kò؆ߠwµ.T#oÈóšôžç„®um‚YÜàª@8–pƒ{ 12n„+$a IH𰄍WÃÒP‡>tDæ{6³‰™„f ²Q[d†š´ØgöI  ö ƒv«[ϸÞzxÃböĈA âÍŒ=˜×ÈÆ6º/nŒ£ç8G­1\LÌk¤ À˜Œu¨Ùê4ŸrM„ŽˆL¤"ÉÈF:ò‘Œä)"E(f¤:G!SçŽøÿ¹åtItOÄH÷²$Û…Qkš¹ÚíÆx½ì­²•{k%Þ¢ÊÌQ{Yd%.oÉÊ\Ær—Ú¦/…ÉKXó”ºDf,sYLfóz”LØ(¡ˆI¢hÒˆ%Ù£ÍBiI‘pó$|BºÕÍeI“$ßbÒ4UrÍuVD›+gÎ&’¯zÚóžøÌ§>÷YOŠ &@*8Å)H¡‹ê‚E%*AP5‚¢0À)vqŠ‚Šâ ¤@…BIá Qø¸`Á4p€áà,hü(©-x·»NëCâ@bo8¤ì€:R€´)-ÅÕí–÷ÞWIçO¨¡_Ü3wvîvG#8@;ÏïXb vÀ©!»EzÝÕ´‡íî¶µÜ5RëŽDÇ/'¯ÿÈFÂuà YÈH.;“~õ;DX±^èUÞݨã((lCJ! íYÞI—+1ùÉìÉ¥lz=CŸÎ1«þY3"ƒîg"åèU9бt(¶pzï½~ÑD;Û°ïúòû nç÷ñúgüÒµ¯eü#°ôüçsòà @c0y‰°Sµ&z—ÕwµxÏçt&c…d…·u[¾6s˜Vº±}±l͆lðÇlT&Òv‚åÖtBöc‰GçµV€j_¥],}váw"!÷G³gu‡gCØWEˆ|¢”z€6hnx¡ €‚$ÈlÊ–ƒÎeîWm¯7‚±÷zVøœÃ|paT„Ánà…eYV}fx†L¨tÔqƒmØ{aHÿ-÷o8‡½ggån8lׇ|E} ·£qÈQƒŸEs6HÊõpÞÁmnàªPઠ \µx Áƒ!áƒe8‡ìfƒX—3HR yÑUÖ@rRXd|Vö‡<×Q–` œ` ”PvÏõ¢÷… Ðà€šø è  ¿õ1¼bh dhY@(&_õ+ãÒÞøm2-oe0£IüRŽó„g¢[¨¨yòœ –½È a äPä@v&Š AŠØ¨‡¹{¥!ŠîŸPX Àȸ‘(‘7ø‹õÈ œp1š'ò€ ÿô>EV…R8²‡}1Sq‡?8.yIÕT|ïQXbˆµK K`“ï€KÒP?Ð ¡á¼G‡)i‡ÍÇ’¥ø’PÉN3ÙŽ…KJ#ªd•šsJCdG¾ô•Í´Lb‰KcÙLg–»ÔZ¨uÓEL9†NQ¹‚nˆøG°£!GV:Döt>a±qí1sø¾¦ˆI‘"¨‡n9tõ—7—’ÉÙŽááŽWvmÎÆ…¤#HZ!€ °£y 1š[@ƒóç˜wˆ{²¦#A–—IZ†7Œ‡ƒ‚x1h%qµz7•Ti}#bÓv’:X‡¬Ù”ÿ®x“Ù½“R™ÁyzœYÚ¦–÷óSÓ˜_Gtb÷š9bZ­£oKÖtƒ$žµ¹›Í¹À9ºhŠÞö–Ö™ëYŸ#3yŽú¹Ÿüy&âˆ&êØŸe¢.n£’ CŸö™  ÊéàºÐjÐÇà7¥™ ^ÛPÚ:P:  º &z¢¡ º€ÿh{×ÈM!*¢ò0¢#Ú)ô‘›æ†—´q=ŠoIYOâNª££Ð¥žG HH¤öæ‚=å 0Óu¡1¢4¢#:^`£Á4Z£>ð:àá!Ú5 < ¡dŠ‚‡¢CÁ¤¦á¼'M:Ð@qƒœÐ3îëì )P³¾Z m 5Õ`¿ÕÕ@ Z@ =àYt4ÈãAû뿼EÁ+B½à3Ľ C,8½pÄKÜĵ€½P ŽÐÄF\ TlÅVŒÄV<ÅpÄSLÅWÅbÜÅBdG6¶rò¹’½«½¶);û£è¹:Ÿ;›W(dzã™?Á½Xc›±/ À^FÔÓ³AûûA‚œÈÆKFÆôÃw ]Ð\Ä5NUß úÓ—¬EÑ@¹¥@ ” ÿ„5 5LÓ5Z <3 þ“5Ìôʆœ<ÐFÌ3=_ÔA{s¼×L?Ü5"„Ç·£ !,;¢±/ûâS/¢ŒÌÎ\ÆšsÆx´»°¶Ær™ž!£¤ÇQ¬ùÇÉF,¯÷$[¸™ÆX‚-¸:¢ìê²±ZQI0ÖŸÉ —ÖŒ¡ç9xplž/¶Ý!IЋ„]ÐÝHŸ\/kDÐmÄÐ}ÐtäÐ-ÑýF ½ÐÝF¬æ¸Á°þg;·«®› •´•f\KI£ YDKaI–fl•{³3P³µ´ÒXYÓg™ÓÏÔKe¹Ó=–Ê:­L.ÝÒxƽ`ÆÏKÏݽù˜÷ •¶3RR=Õù2žA/ !ÊGÇÚYTX·ùbp-¶×8î“6 NÐÖÐ$î\^÷w;±lLhèW|z}|…ˆ­ÂÁ*°P@Ø(ÐjÀP% ¥ ¢¢Ø¤@Q•€“@P5 yÕ/…Ù„ A ,…R¤ðÙ¥ðX*•RC ­ ¥@ Èx¡Ð`D¥zPDÅbE¥TÚ ë T¹MTv`ëоCµÑ×ÿëÔNË©¿Ë‡Oe¨(̬cq‘ׂ…T—N‡zvìpP×Ñ'MTé[xaÂexf|¡Þàmaµ! ïÀiöÝò=wLMר»MPtXFˆ›ezªÇÝkYà›\²Ã~@êZ»J0ÐP[3PWÐ Í xÀG™?åðÕ$Eu‡p~íx²±Ýte–ÞÅEað£çç!IJŠÁ*ÇÄ€ok0äDD~äHžäD®ÜÔ|{Íí»2¨–tü\åYád.à:wu[°c0ÃM_û…†hþ_O@[`r°9 âkW–å ÿg`t fç°fÎÞšš° wnà„&u ˆ. à#¦öQ(òðæÐÀb¦Fbò éÒÜjMÝšO~×0ÒÞ£"7r'~v¸Y}íUS0ˆ*ÎÕ¾šxçÆ–>º–2’ò|kËžb%Ý We¾n„‹Iˆ¸¬Z’ë|ñÀo 0kÕ@j¢A¤VbÀÐLžÆúÔäf峃Í+rŠî)€Ù8ÖŽHšãñ6×=X×Ù{ÍI qü⺇1‹mXàåï 7çj—âï‰ãgZ>ix /å&ž<®|§îí“»ßñÞßì µP׃ÿ5ˆŸgðçÁΆ°$:3â®#ð>Šòîß/iî ˜Þ†»¾îÓ­\ºñŽèîÞúós:¯èåMïò/¹χ{=lÒâ©1ì@ÂNgqùæÞróvÆîX¡\Ïõ–ý¸Üž¹¹—ôû>àtnñê'‰Hñ›åê5%ïŠKYÏó îCëå‰q·©xC6Vëí.›ÛÅxç.‡éçã]±;(öÊùéô}·ôÝ|7ò;ѹ¨}q'Œ*aŒÿÁüÍÜdžzÈö‡_V˜ÏëZï'°+ ž_ûаàù+0 ^¸,«ÙéúOËøÐÍ[Oÿÿn´$K;]LÂôKDÝK·dKÆ„LfùLÏßüÚ?LÖ¯ýpžù{Ýê¤ò I|aßäaGüÎmеÖ×þv·Hþ¬ß«¸iéwX¿øKrCž@q,(OáB† *„&/¢D-^d˜MžFŽ=rDR¤<$$M–Œ8ãJ–-]¾„SæL• ãḉg<ž;oòTèP¢@gEšTéR–ÐRR,UªÔ…ë’% m¼­ |[Q^E² ¿><›vlY±kɲ«°­Ü¸e™Þuø”"Þ};‚òä`½| FŒ·&ÃxSF»ÍçÏ›Ž{Zó™ùàòTž ô|°!Bƒ¢A;$hp´Ã°sã¢5k×ììºrÕ&^èT"TÎS[ƒŠ[øpâywïÅû×ïÇÀ‚K>7Y¸øtê‡/ì]{p…¦“zO*Öµm–ãÁÒO]wJE§:™juú2  ‹‡¿~tªÀ(­óX;«¥”œJ)åܨ9èÜíºú&¤°)‹¶Ã0» 7ä06° i/à â„N†)ÇN8±¤“x:„±Aä‹Á :ébä±¾ß~2H!‡$²H#D2I%—d2HG”ÇDNä±DyXTqJ…:IÆ¡8Xè1L '¢1¹åÿnl.Ç莳M7ß„3±›JïÅB„lPHOj³'‹Š³ÃdX˜á€×VóŠ5Œô*ó.ýÂB”Ø,4SM7åT¦H4Ô :%Õ¥yå×`LG€0f˜áp…*oq˜’½ÛbgšiØyhÙ­YhÌÿ}Ù0Þ‰ßu¨Á|á½ÿ·Y—žºêŒ ¶Á–G-hPZ®iZk›FõŠVÿr§•@ë Pi“à›°g´{mï":ØÁ|`A–Є'LÕꘓ½Ëy…/„a eø Žäh¯›au¸ÃåÕÐ9äa…8ÄÌùp[/#b•¸D†ÑeÜbb¥8ÅB9ñ†.¤bµ¸EáXˆ\cÅ8/ÿ*Ž…k¢R†–9¦2ùÑQÞH  ^„HcÄ£ò¼èº4†G@%{Kõg2º‘~¤¾™GFj°ŒE³á)žÿQ2€¬$&/É4@6m‘v$äÁöJ¨‘rfw,˜ÁnÕÆ9¾‘•kL¥‡d™ÁFÖò‘,‹${VÊMr’޲l¥€„4KR“³ ¦'‡©´O2-HR¦*)Mb:HªÄš-m¹Gíí2\¯<&6Ó3 9ð“¢¼d4}YÍrž²™ë¤–+y9MgRÓž4Ï;µ Fn¶pŸÿ(û‰Æ€Ô C(ºÐ€&²8«¤PB¡ÈPŠæp_‹'%ÑCÁBtÿZOûhÕâi@%7-[EUJB“b”6-=`ÿ¾)Á˜ZÍ¥Ts`K)wKËt¥?j­ò…RÕ¨³žC“GÔ>Õ©fã(CªÔÍ1õ©WÝœNCYHZ«_Í\R…JB¯‚Õ¬J¤*ÍÊzV¶ 1­[«- 7WºÖÕ®wÅk^ûöVÇé3rq­%4Tƒ’Ä#9,rØ4V @ŸC;Yk46ŒM2;YÆ2ä°ò°†bA»ÉŽÖ´ ˆFhÙÏN6µ˜Õ,g+ÛËBv±¨EŸ5.»ZÍöö±©}lcYZÇ*$¶ª}g•»ÜÆ‚y®S°Žç6D±o]np)«]Ç*–¹Ùmíw‹YñB6¼Ž-/x¹ËÜÊ*÷,Ê•GmÉ›^úÖ·´r£îW ‘9g âéºO½ØÀuƒÈû–Œ¸ Wƒg¤·TØÂ °p…Ad_wØÃq‡¿b—x¹ÿMÿ¡Øð€ÿ@àÿFxÂñýç–ȯ;š7q±@×¹w[óÜöf'ã”ôǹ’Œeéi0ˆ¾r–ó{àú~ùÁ[ÞòüÞ5¯¹ÍsŽsœÿ=/8Ïuôžëüæ67zÒ‹Þ‹@Å3ñ4#a–ï]\âÞ¡Ë‚’¡‹{_bù–‡N>vyœ\w?ÐBÙï}vyT£?øÂÞ^šÓî1/x¾„{ó}ï|Ÿ¹¿bŒc°E0Ê!t¤ÃM8yÓ‡ üàë?ÈE¿§¡ÿvè»ìáÛ·Úñýö.|çA'øÎ{°÷¾û=ð_Ç Q…ÙϾ ·¯A…GÐþö¶§poûßß¾÷ƯÂ#l_ûÜÓø¾÷=’Ÿ|éÓ¾ìLˆ·«KFUõtÀµÂäa˜µ©÷{»r®ð…8aæ¿ûÀÝÿzúëÛÇðEêrfŒœYÉɰ[8†a(М‘]¨O ôŠÈ{ˆ”€d(…~+»… yЂ{Ë@m89.Pˆ±›;¹“»i¸·j0=‚[;'pA¼¾«?|‹=GˆÄÁx‡t|„ Šuˆ‡öèÁ °ÁwÂx@ÂDBÿÔAB¡ØA!DÂG¸Áë“<y:™ˆ:Œè•œ) Ê&Y ™zµ ÚŸXR{Û7€ €1¨®~Û†‚ÎËÀT»Î›ÁpÁ€s (8|A'¸ä7A\?|û»4¸.K8a Daˆƒ'(=ЃoM ƒ¢È’Oø“’À¼˜<5CÈëÄûC,D›SÄš#D÷3Ä€û»›[Ä|ÛE}«A‡GØ8¥qo ²n;Æup,Œ@ÃÙ˜èÂ7© _KŒíù·ÊkÅ~K½õ[¿½ûC÷ë[$:ƒ;¸mdÁW<8CSÇ$9Å6››¡8JЦ‚“Ïе’¡H³‘À(¢Æ¥pº‘ì¾K©\¿—t5†Cãh+šœ< J–— Ñx´Hñ´…F8ñ«ê¨Iî[’ÌI;ÂJ¢)Íùìk·Ãn ˱ô¶ƒK²üJvCËoÓ °LKµ\‡°7@K³,˶D7”J)ŠÊé˜Ê°!Iœ,*/¼‹™|˜ùÉ tGJã¶²ŒK¹7»dK„xËsƒÌ¸Ëq£ÌpÛÌÊ·¯ÀL·ÿtKÉŒÌÐ<·Ü>À¼Éyó§z{ˆš›†u½Í“‡ІÖðÀðÍ $¡Û9rNì:yAµÓ†…@ºß º£KÈßlΣC½ä Î¥ NæôMë¬Îæ¤ÎèTΚÓKÆü¹q¼Îå\N¥KÎ4Ïî|NòÏìÜNè„Ïô„Îö º¯ Ï÷”ÏüÄ>TÔB›¬JÁTI- P˜€%… ž ( dÏõlOýDOüÏûtPéTÎø”P ¥ÐšûŠ ½Pý´Ð›CÍg„‰h£Å‹EžuDÉfO¦Ð.¨0\ž¾Ä¿””bË%z#0‹¸ŠwùQyH†v¸ !-R ;ÒUÒ%ÿeR%…¦¤xÊM D´!y#ùN¸1Ìé(….íRtˆa r࡞-ÐD8PSø=˜-˜8Ð;ÐDM¤Ó:½S;MÓïIª´«L1‚®ð³ÑMA]p …J€DU]8] ÔI 8…Jˆ °8Q(J•TGÍÒ29R#ÒdX¼&eU&¼R …1%y …+r …[ØŠY­U^ý‡ðÒ.•tøUPyˆxP‡Îx¨ŠÐ"c­ÐC°…Å=`X:µƒ>xX…UX;°C0ƒ „jQÿüS¨A]W(IÑ4Ô"CÂôB%YJêQR*½ &{žRM—“k2€C84€° ÚŸ5©·˜w¸9—¬l§ÿa#PbˆHhp‚¸Ù«Ä‡«`†«`†芦pF‘ÿ=@EÑ)2YÕŽÀš<· ³Ð‹¢5ÚÖðYuÙ« )™0„¯è;H„>øwH„u0„@à†uð†uH„*•¼±b·]8è†n€ÿP:H HnPX°æn t jÖ„8àdZúÝxÅJ Ú$Ÿ)€ Ø €°ð1 ãvngw†ãy–gz†çy.cÝ•·mM M†)>ÃL† TŽ©S{eëP×P& —Hå5ÖŸ˜9cÖY q>Œ 6a°@¦y…0a…ˆy@ƒ†ÀXŒed~ÌG¾ÊÈáÛáT‰Á ž˜‚hŒž€„ȉ)˜‚Í£õà ëe©ÄT èmdé¥é@íÛHfãÖÍPvh£¬* ¢î‰¢žÈÀÅÿrÞ_ëÏΖ¨FQMf /œªÉ1YèéÈÀÈÈ  ”ºFˆŸ–ŒŽ²å£~ ‘áMV EÂ)M޵³Žs] tåI˜Þ´êšqlˆ¸A) •¿€n×<»lS©bºÆëxÀëØŒu œøWÌ8Á¶˜'}gA ‚`Iðh–e‰ÈVå3]ÙvµáoÙßÜhè¬^ì­FîVî'K’è•î¤l0ºŽ°ø Ø HmBý´Â¶è“õ¥¯XÊÜ ê¡ §¬¤˜ Œ~ê>Wá>"Hþ´åŠÖ^VËÞü¢ŠþWÖæl®áœÒð´~j¾nÞêcêÈH-îBö×åÉò~œçÖ8m£6žáJ9oëçáþçÛì¢~ïž qa1ñ©+®öß0Y•ÑéÀpPú´åpÇî OÝPfpwnúï°ºˆ¢D–Ó Icòµîp—:gnÿÝ䢊¾ò1'“/g¶.L) UWA qÊn6 瘠ò>qˆÐåŠ?Ïw •m W탘Ú¾^7µ~ó0¯i›‚ð„ío3t5­êÞ©¾‹œ¦Œ±Fí!—rmº§ä?yHuy°’•芲}õA?í·ð osHÿ_!8‰ñÛa©Bl–dMOì¿%©­4ŒœfôP¾íÒø ßÞmß^ –är\KÊA·rZmÂíî°i7íGßp0wr÷`¤ó(/óÿesèV껈)iikÀ5j/ e¡¶Ðr}çvh‡ °©îÒ•t©Vo2×롈¯uÂ6f<Ïs—8x†â¶xªf”qó\/øµå!…È ±~mÕΉ oøu ÷êu}˜ø˜ø‰‡x†uH‡rèó ø¯ñŸôƒ·W –Œ¢Öqξs±ìÛÈaUëŽjOJ¨×o†q†wù…¸ß1à€1ȃrÀùšÿX±?LØù \Ç¥qó£FøŸò¬N÷¤ûçÔPé´û ¼¾í¼N»WOçì{ßä{º/8*F”¿h†àà€Dàh8ûÇÞNoxWû=zƒç"¬^ðÏÙÐ{Θï‡'õ=–{ŸvË/Ï|3ÒuÔ­Þ¬nQ·ÿîÓOð[÷Hgû ïü·wh%¿¦4·òÏÇLø•l—‡=a(°HWpxGîø’~e_vÏX¦h÷vÒh––$ª'C¾Mò6;m<—˜;Çöù&ØætÖÏúWŠ´ß}Žï}Îß"ψx,hð B‚ò2lèð!Ĉÿ'ÊP‘"ÆŒ7r” šGâHhaÃd tléò%̘.A‚)Óa6y9wêì¹ Рò -J”æÍ¤J—2íXóáɨRO6­jõ*LšÐFâèÚuêAbÇŽˆõ,Ú´µneÊó­OA…­[©Ú¼z¯>uv`É¿T÷.ìéVÀÉk¡Å‰úF6Œ:Ï lÀ€:8¬âm».j¹sí²Ù×2ìØ_38ÞW·qD÷@ksOA)û¸l­vÛȸà”Û&‘S—Ç\àÀ©âŽn4i+'Mzuk»x«³/L{¡àøQÛÓÿ?ûÑuÙc¥þ·>lñÌÐB<ª´` bÓxM•FÞMæÅ• zFY¸€†‘|§!ˆ2mµÕX‚9–3Œ<–XBÉ:!ÂFVKº5!Ž®f¡z!Éø£ˆÐÌ0äGEy$’I*¹$“M:ù$”Q>)Ï RZy¥‘c!™Ÿ‰óÕæ"˜œ³ŠÏÜ^ƒ u%O𵙦WmbD£Cb]T§DhBØ[{Æ$á[¦ç…¾ôQ•X*º(£:j$•Q&0é£YŠÅä âqÙåt ‘˜¡Z2Ì0ïQ@Œl6$§œE6Zœ­Êhãi9N((„º+¯½j8C¦fùE±Ïqjܨ-ªC¦˜c2´¬øß…»Í7â{G«×¶ºãÅàš=¹ÆW‹ö¿Åû¯ÚQ®a×å9î®bKþ9ê„mÝô­?D^ˬg½òÕ,WDôìiaNìíÄvþXêô…áè?A^óéÁ+rîµKf{Ö°·Þ²óOWo9S»kî{c÷:çÿ¾þ~¸ôšy®½ëËoĸè—~aòêËŸö“k¿}‰áƒÏå½ür?Ðü8¢èÕiu^ÌŠ73 xKWó‹Ö8R?öŽFtU3„¶~•…ƒœÃA¨ ÊC&ÀPÈŒ¦p€zÙ5òµ÷õÈT©Ã¡gÀBbÒ›Ýu5ë‘Ð*!Ü^º~‡”OUIS•“+ ŽË…/,R 32Ãã™Î†¨óÑvæ´ öðy¹›^Ç€uµ¢™+‹ ;"ùÒ3% FMM„âCäÁ!q-âAL¶h1äy±†\ ‹%.ÌÑñ?‡Ü ûˆç>.¯”Û“Ïh­ ÿâîutJSÉ»G:„‘œJLÜHJþI`c`ä,99L‚rz®ë$‡(=0~2—¤¤Ž)Oé%òÝ‘˜æ[H1#hÈ,ò%‚ [%38Ê0ÍhATcA9JNRñ—Àœ£0‡éM”‘¥™.y&, 9Îu²“OÐèJþX©yÒ³žôŒT’¼â,N†™ý¬g•T9tê[²l'Bå'Ê…2´¡}(D#*щÂQ[Å£á]â—Ðr´£äò™<Ò²–´có(JSªÒ éb!ºØÁÐRyÌ”#%åJsªÓRG^º˜  ÚÔ•5(Gt ƒÔÀ!ÓPªRâ há!MÕÁBšÊ¬b•§^ýê! /õÅÿ‰Q)YÉ@ªÁs£@sWö̬ÇIÆdf †€[ÉTGnªÎ‰8ªÛPj ¢š‘¶²H¸„Ú6µ¹K–ñÕË%5);Z^ËigWF@\ÖÕ›¼«ìUf°+’4­ƒì"EÛU‡±Uuˆ5¶±ÃºC>˜på± lÕZÕ€; y耸W¡%턘¾ÉBµ}¼ìtoIEÖR»wZ£ójÝæu“§°³nKØá„%8!=°FSà4dwÇ}êZh®5©‰u«],à6a=hÂmЀÔÀô]€ƒ@ߦÞáß°/~ï{‡p@D°°0ˆ£C,â« ³ 9éˆS¬âKDfj-ʉ5ÊâÓxÄ.~­…b|Öó¸Ç*½1aì@¹È:r:[£c#3¹ÉErAƒ%c'S¹Ê$„²‰‡lå-sY~XÔ’»,æ1£î˹ 3™Ó¬æ“™YÉZ^3œãÌ«6çøÍr¾3ž3Dg» 9Ï~þsuö,dºÐ†N‹ ‰ÒçC3ºÑ$Và‹mgïÌÑ–fÿO¢¥¼ã–D¶º•Fä7BN‡º€¥¥,ËUêK[9Ó‹nŠ"M½êÍzÖ©´uG>]³ºÊ®ž´RÔXÍÞõ°—ºNã;­µVÙ˜6/y]ì *›“ÕÔܲMêl{zÕ±îõ/Mè›´qÜ^6x©©mO£›ÝîÖH³A+ïyŸwÞ‘v»Ï=]1†:Þõ>­³Qmnp“RÜS&·¼o÷îcSÏÞÛþtÀEl‡CÜáÛ>Õ¨+n9~?ûÚ÷ÂqMð"|Ó¹† ÇAîûˆ*·6x×Mì™Üåßø¨»YËœæèŽ£µGîÍ’“sŒ!vËûý0‘ã›åç.wÇÿ_.qœcÏØ(WºÇUŽoYo]èÁ#ú®qítWÚ÷®µÅŸÞð¨ëûäT¿yÏyþqŸÓÞ"÷z™!c>;)[çxºe¨[ð2§Ó6Y¾óxÏIìŒ'c¾#ŸïÅw¼ð ï6ÞI®÷ KzÜ2ù{©«Ýv­‹^çÞ†:é×>í®~ðÊF<Ö¯®z©ÿ<ÚwÏ|Þ·iMã¾÷à»ïƒßhà ¿ø€&¾ñ“gä+¿ù¤.àKêŠm˜|ò±šÕ ó¯ý{Û2ðÖ ã÷½ŸÙlb¾i¡"$F¢$N"%V¢%^"&f¢&N¢DÄŸ "Ù€bµ"O" Áă'FDF"ä#?Þ£9“‚Yߨ!ªÖ:¬C?&¤B.$C6¤$âOËV,b4øb/Z$96„1*ã7¦#9Ö¢,ʃ7’£2n#:r#1ŠcJ£6£GJãEâ–Gîâ-¶âIÆbeŒ£3î$/:d-‰<IŒÇˆä!)î”=%¥R²ÅR6å£HTF%TN$5ú¤UV"FZ¢->äUn"• X‚%"‚åde@žÙ@Š˜S®e£œØ<Éc2$ 4XÑ‘ÜN‘$ÊjÍ¥_ÝÇA" µÍ}”8É¥HåTŽ[&¦<9å?%f”Ì€TFæück• çñ^IIY>Ic¥–$IgBIhF‰[ö IXBJ‘¨D2àÕG P;¬C?MÆBÈ&¢¨f2‰<¬ Àå}ìfkæ&S6ITAaæh:¦=•æ£$ƒoêfÓÔ¥<§¦_5&s¾fmî¥\: dFåD&eÿÖYº˜r¦ç”,æ”, Y®æAä?í¦AÞ&¢•mBC_Î%uòç|F TAHÁT&gY^Jg&è‚&§g‚&‰l¦””fnÊ'?Ý%X¢ækÎåtÊ%d%^€h•´¦~æåoòæ\¾&µ°PåÕcF¥¦Dåx•e¾ ß§€ IXö¨þ(©)‘é~¥‘&©’.)“6©"¦z*ev>IwÉ Ä%Pé¦|þk:g?%J_Å%u'bQ2°€kV'”|§¦,ÀqJXnÄQêÔ•ÖBài•¨~Ö%“8h”: {2f bŠd"gSÔiNIcþÿÓ?Í€ xâS¤\uEÐÀm¡Â ø5Öfˆ<öˆzu~æx0„ž²Ó’¢ ê’˜å’aZ†Ø¦Ù:„%Ÿ &/à@H¶mͦúÒøõ (æZl\J¦‰lö'”Ω •' ¢ ­ªµ^+¶jæqÔª:H«®¦`&ª´æ(µ‚˜É9Ú]Bë#+iÀjš`ç•+zFDÛÔkÛ”‚½¶ +ä+¿ö«¿þk¾ÖÀ¬ÀŽÞ,Â&ìK‹ZE=l±ü€«¸(»šM·F|Ú¦»JˆΪ¹Ò«½îBÛˆ¬XÀˆìÉú+;Hl¾âÍh¿®¬½VÃÁÞÿ,Á޽Í*¬ÏÖ+ÄjN„mĺž–@.ü¬Ò*ìÀlÓìÒ.mÆN-ÕV­lZ-Öf­ÖjíݬÅin¬­t¬Ž˜©ô«ÈîB(ÀÙÖkÔër± ÞÈÃr±ìBhÁÛ®,ÞTƒÞþ@58ÁÞÒ,ÍlÁò,ÏFíÒ:D0àÂ1Ã*4´ÐHìlÜ&èB¾â«áFmÓâìÛ¬Íölæ"ì­:B”®#œ®#PAœîêVÁ# îéŠì–®é®íÎîí–®êÞ.ï:ÞôÀäz¦¸ÆêÊ뎂l¾î+ì‚X`€% lËNÝþ€Ì²lUI¬Ðíßò-ßÊ ÍæìÛ8ÿ¿.¿’oæ.Äâ¦ïâú.Ø‚- CmÕqDî¹P.TÀ%¤l¿—ÀlrÕ­ÄjƒÍj´ËvAÛ8|Áü€ø:pšoè&ìè¶.é’®ê¾î#d0íê.Ð.é‚p0¨îîVÁ  p«. p ûn×>„? ï»^fN,ô‰šÝ±¹ÅFÙökìÂ.Œü,;|®ËþlÁjA5à,À:‹¯×ìÛë1Ã1 2¤ïBÃB ƒ<ØÂâ ƒ1  ´W<èÂ1T‚'¨ ½°Œäzmu€ˆÅpôÖ+ÞÜ­äâ­ÄJ¯0„Äúm½nöòmƒoDÿñÎnûëèÆÃ#ă#ă8\2%Ÿn²¿>mÓB±;AøÚkK±6‡oÏìár±@àÂnZÂ*œCÝpDªPžJ"¼ƒÔ„ Üè‚:È ½Ô ×ï«Á<³ q.`îrÝ;pC¸ÞTÕ4(ôõâôm÷ö@54p"ç,6;pÁ¶Má*ðçRóèöÂ#ô‚#˜t/ÈIŸ.I«t/¼t/ÔB/ÀJÃÿ4JÛtLç´8äôI—´œ´LãtNË´L«ô-¯.[/Û°Ç s'ýÐêp×5 u5 Rlü°½öÀ °4cÀÌ€¿²×mÜJn5;mÜÔM7g³Ûˆ¯Þ´õ7;0ùŠ³Î ׫ÍZ€Ä§/..\iFV˜NK2€<(6Ñ,Cd(‚ÔÈÃ;,ÄËœ‚¼ìÂ×IË0åtäþ,H¯æ ¬àìF×ë7‡/#?0¿ÚõÏŽnïÎöímß6nãöï"uYîrØöò ' :µr_T rsþA3×k@n€Éò«6°ÝÊÌ­ôºlõnÿµÓú 6wóF+pçŠó5Ájlßä5èn5tˆ@Ô·É>ÁFôAL¼Ã;„ÃdÓ€Ó@C˜ƒ9¼Ng—ÒgA_…6¿ÊÌN°ßôÀʵ^¬\Çu]Oó]kø{ÿÀènœdÜ#¤ªCħmo)~ŠÅ# Ê:u.÷¶Rÿ6S-•ßr{ ÎT^½%sÅÊpD<8¿*€Ss¿rn½jx6C1[ìæ:9ç>yß®ÞXCÛÈ7H+°´3€Ðoð”àH@¿ZCc±ìʺƒkÿ€ô~÷kw47·öß$9¬]ÃvÍJð‡+VÖ§2Ĉg×nʧ# 8ªˆ~¶Ãøn¿¸º¶ß¸žà¹ÎÈ&…H¤3Zº ™ù›kô"ëõxËÍJ¸¯µ"ûMÞLq½ÊvnӶ쮺«çö¢{¶ðÆxjˆ­ñŽŠñ]º¦W3œÓy‡«õ¯«5±9”ƒ¯àÎy묩¿4ï ´7{à,;µO»µÇ0‚Ï:.5ŽBºJ}›S´«° EÄAĹçIœpßµètb ê\ºW)³}|­o×:p75íäúþ¸a€ûDTú¡É;§íÚŸ‡ˆ¿¯½Óÿ:ŽØú¹Z_ù±zŒè ¼¡<º—;¦ª %“'YDkö¶J4zaÐ;_,ü¶Ëx·Ç«ÉýÛgéßÁS<˜ÊÖÖ¼ÍÇ'ܼÎWmWì¼Ïë|Î[mÎ}Æ=ÕýÖús@UÂgÄ 3<\8|Á£_UÃüò€ûÏ$Ò}Ör}Öï|Ï#½Ö‹ý××<Ùký:xEÑó¼ÚÛ¼ÒoEÙǽÜÏ=Ý[­XÔ½Îó6Éëñ äØêRõñø¦Îk”^£]úÔýÖ}Ї}Ú·=Þ§=Ú½Ø7~ϳýÙg}Î/Çã'¾×c­ã»=£ƒ-¾Ïø­cª“©È ±H{²3{àDû´7ûB4ÿ»²Žì¿~{ëþíÃ~´÷þ²ç>µ?ñóþ»ÓG¾ò/?óWíÝÏ}æS­Þ“~Ãçû߃Õê{¸6ÈÃÛl?ïNí¿Í:píû¾íwíÛW?ú¿¾ðϾû»þù¿ù×ÿû¿¿„ÿî÷‚Ûð?@È8p 4ƒ3  ¸aC‡!F”8‘bE‹ZÔXÑ A 7FÌ&odI’'G"Q©R’–/] „&ofH›7qæÔi±&Ã?züü ¨Ð‘%ºT¨Q¢A•öØ4ê§N‡RÍjU+W¯P·‚Åu,X¯W™~-Û­Y´;"TžÐ©Uͺ-ËUàW¿?äáÿ5 ¶î`ÃiÃþÝûTmÛ¨³]\¶W¯Ÿ½ø6ì˜äÎ&A£l¹Òei˜izV½šuk†=U#ÍØÈÛ \çÖ½;dÜ„ÚîJ­ 8ðºiP§NfÚ—h` Ìjû™0»ãÄóFVŒx{bÇÙ‰bü®Ü;åçš;~œí9tûÑ+O›–™šw}ûöaç–=È´tï P@×|[oÀ”£ ÚL=ÖÜ 4Ó(D-?1̵eS@ A Q¦ƒ:Ë ·EqA ,‘=ÑÜ›0¾—æ»0Åy³QždxìÑÇ RHeëQ"Z¯¦qŒˆfxR6¤pF¶¦Ì2ÿK¸HD2$'níI ™L°E/qŠP4+Œ)5ÇŒs'{lgÈ…ÄsÈ=yÜ/ÉÙf@ˆ&’qq†?ÒCÎ0Jf†£šáäp4-µä¹¨•RÈù¥9Ë<ðLal•Ík UÖ9âÏ×If\u5²;mý•Ï=òsÖœT¥’e™ÕQ”]öÙJ”Õ ZfÕ€j¥E“¦.‡ wX‚Œèœr"e¢RØeסaÈ!'ÃõXG=½·†ô€ãÞ{õ°_ØàƒíðסUWSÓ¤W+Œõ؉7Ò1ž‹1ÎXã9îØã‹DŠb‹T8%ÿ[e „”"`[¤N!E HÁHƒS*‘ eOA½U ]íÕXq(RÔEZc”&åy€‘G]¦OUz¡vÙm¥•_‚—œxRG°ï[PhÜid {í˜a =Øøw“dØxT»·€ãÑ2’£ï~=åÌ[›> âÓ$Yñˆ,¾‡Ç‡)&Çábk¢\rÉ5ÿ¸ãDvhð&K>9gNÑå”50ŠY_Ô(Av5NA¡ÚI)%gÔÅۉȀqRÖI:c\‘Z]©¥ÞU u†ih˜ê!"›L…Î6D>ÐÖ£Œ{ýÕÃ|ש×3ȸÞ>êÅãÿÐ…Ósq§ÂS"mF7g‚sñÿ-9ËQÎŒœãˆƒ^l žûœMfºýŒntŒÚ §0˜A ò,!ô ws*yoÚã#éÃŽ0OdMã„FNmJWPÚÔ:{™± ]ªd¥¥ h‰ö­Äˆ+‹FFé(‘_¼äzöå„™8Aò˜;Øœid5p4Â0Õ,RGL$ÈDË’šzD”,¯9Å,vÑ–[Ââ¥Î3rqATüÓ7¢Iun~Ÿê`5?˜Ê8ÄA«€8åJc…Ó‹ü£—ÊÆb1  aÒ4´±eLC¡ðØ3”¡ ƒÈã¡ÉØ‚A´á 'p‘¬*#iäHh&1€³Ü4á ‘R¬@)õ £4‘ Ä#X%–²D-*‘ ‡À‘‡wÈ£ï!x(â„ëP„!¼ayÈÂ^`<ìЇ@È"pjX«ÿ$ÔLX‰t¥Š+©IçÒ‘SŒÝ §èÄéO0’mýæ]Å™N[žs}%åˆÜ µzn &hœµN–³œgœà8‘d¬XNvt»ÂÈ®º+ãh³œõlfÑáÙ 2ˆµ¬3áãL²–•¥ÒÜÜ4#[Î ŠsÅ&AÑ)EsÚ¶LÚü¢6ñš*àîu›4ˆ2šÐ„´@¹ËµpÊÑ©vÊ…¶K¥:ÐñŒ´r±ì.$ÿªe¾è£bØjY{¬ÆU׉t¯FÂ[KÓò‘Sˆ4"º…-[å¿ÞjMel<œN¬»Fr¨ÃÆpw¿` €Ãp €ä}ïßêõÆBM¤›8¶Ò:À)H‚­ `k"wæ:|P" ž:N <`Góozj‚äÁñO"öÈ-ÒÈ+ê@Šn/ÔÚʶ,h·ö-¯>p²~̽†+ùí>p ÄNÇ8mùLêïjË߯Èñ,ÈLð³® N°ëÿ±<A6Ҁ͈ Ùò)×Åò®2®àhãzL&¼¡º¡¼A¼À!^ºÎa »ؾíÿèM¸"âånðøbÒ€ ­0 a !Ñ!ðpÂAaÁqÐ a-ö¦O$¢.¦ŽÆªnåºÉÃDp¯ìei·@°IðÇ‘'\ËÝH¶NJ€Â.ÞðˆcÖ-Ôl ¡ÂêŽä4`Øtqä@äàû* Å¢pP¨° _ñ!R LaMaAR`cáÚäaLA{!P  ¸±ÆÔd‘ˆìvpø.ÑÇø*úÿDñœ:Q®~+È,7Ú-h’`0­6 •ÂÈ勜îÍuPú41 rÍÄü8ñQ!e0cVCdøqœöaŽ5: ”qKâçäA®­çÐ@7AA#A íe/M"±ˆŽˆýçáJ@èq2'!;Íïx²’hrLøN°Rß yrÇò'!"”pJá)Ÿ’R¡§\iÕ¬RŸ ×VíÍM+-¤*Q)½Ž‰ŠÑºÄ2D&J ‰Rrh-OICpÀ!âr{â‘5žnˆ^RŸé,Ed½Êrcžoß‹/U#-‰Ñ¥ˆ!×Jâòqr(b.ÿ‚2#s.-“ “. r"îröòò+eòñŠë¯FøøÒ/ÿ2) SC‚²[ÓÅ«£º2Es÷©ûL,“Ï(‰1›(6]!©P11²òO3‹hò3]òÜjê:Ðq°ÿíåÎr½¦@Žp sîHùꑼ'{’Í’8Ä0ß ý®ó'›S3™hSÒ¤3&qÓê$ò¶þ-åÔTs5kK=„=§ð…óÍ2‘fã1UÃASD ùŒ :o‚öðs/es0!²?O°3A¤.=“,ˆrgUC}5GŠO²-RH««Xñ!žÚÊR¤èäáP† È #f [V7BVU+,u7,F6º´\gSãzU# ÉÆrKB³u^XñRXÇõMÕÕ.¹cе][5`÷Õéµ×ˆ‘2¥ˆÓOo\IJ§“õu`‘ÿ¯_9fJ2Õ®t·“bߤ=}M7ÐÄ„amÂa-B\mo&='Zðc0vÞZv5xuLiÔ?ÙdLúxð!3eO b3´Æf–VH{RY/ö_õC³U7½ÕS;5½T`åj±6kµvk¹¶k¯–AL¶7ì4ñue‹¶5æô”bö¥¬´c¶jmDPDLê#l+fl£“M#–JYöl“‰D a2Ž\ÐcÖÖ¥6Tí쟖¸ìV½Ä4dS„ tà6Êægé£%/Th‡•hý¶a-Ͳ$)/•ì®b”åòôq¥f%·5Y—#27lU–:ûös)B5Á.ž8ÿwï–×h0Z‡36½eI“m¿Es£´lmx62’b=«÷µ¬×‰~×m¡×@èP4zWZ¡×e——v97_o·|á"tTj·Ž}?öü^7Q×2”VÒcL/=W~GTÓ'pÃ7(§~á7v¿Õü2Ç;/Çïè;õ€I±&˜7VÓ×láËOÀ´7}v딳ŸäÑ}W3•%!ØIŠ:ƒèdÉvÁ¨¥\ÒáâZÀƳ®³¦‡÷n%—‚<ØoÕí‚Ã5ƒŸ—a·²·);I5ÙñN±ÓT©8z"ßw‹f[·¨èf¯¾˜PTp ÔÔ@{L‰¦B³¢¤§ßø‘¼·WK·Uã3K57s!ŒT.Ëok³o“XuÔAQߘ˜"[”H÷Ó·BX ùU€7H­¡;–‚%‚G‰—š0ùoyMuoÝt}á*³“¹ßV;‚ª8'Òö/‹t3ó75–4rëR½3‘Ô—!4L?™QÿÙQi y®ÌU7‘•Y‰k’K··„‰(H•–½r—“75 6a›µ“swvù7FùËN'X7–/g|µYœÿ”]ã'âr 6"˜åÁžóù‡}WbIYœ×k“Çžÿdw™"NàšN3S¤¡Iå!¢÷˜–s‘4A2yõ8I%ódÏ·œ]åœÉÕ ÆšyW‚§à€ ×ùLº}=‹ß¹"ÚòØ—ïˆøaÿ™o_:“IX–{š`å%bNà¤;yŒ&tsPqo9£•Tª+ZªÇy˜ƒUo‡¶¤Ù7~·TÓê(­‚4cƒº”„÷< ZÓ¤çàÿV lºŒ±eûY¤Ãʘ Ù ý„Wµ¬Äüv÷P Ú­O ­zŽܺ¡…˜œÙœñƒ…½=rwÇNgQæ@”•KYP—ÑŒ!(aû°a,oÛ­zd$“›AׂýY«;—«ýš–dr ¨<7‡rVÚ¥D?qB´ûò›s2{ šŒÆ òà`Á¦ B±W©§o;”·zb+Û}Gw—µb-ÒÂ1c,Ð;0Ä"½«½ÃB½%ƒ,Ü[/”bº´âÖ!´;6!YIñyD±ú^q[}ýú¤5탗|…ƒ Îc¾á»1¶b½ÿŸƒ8ꂽ'ܼ/œÂç{8"Ü+6ܾ‘¦ûî<³¹š¢ÊÖA® º®#{¤'[·Ëš¯=g¼-IÄçÛ¾+<ÈÙ‚½¼ÈÏÄß»¼ëÛ¼š~zÁ%&§SֈʿZ’.#â²¼×K˹|R––iè2”›}ù2¯4¯R—·&2Fsï‰ëÇŸN4Í%£{²A¹˜EùQ­|C°|ã´äÓ’÷£/:À©ú¢üÌi»åzÏÈ(2÷¹Gd¨ëʹۮׄ¤Á»§SÇT´º¤ ëV®R×ÒÍ•´ÉÚ~}ª½bœl\ƒ}>üzË’gwJ²D–^‰OÕÌŋյ<œœEwä¡ Vi{Ïm›Ó)íÆ?ý¥ùš ›v϶·hé\¿ål Ü #Ó¡ËÝci¼Ï%ûÏYÓzcÀ™|»¹O½ú&0š™yOTó{s¤`gpŽL‘“ Â=Ü  é,sácÖg4“š4˜+ºçݧ£½ÆïšÝó:ÇåÒÝdš¨E'j)Öuš ÄZÀ±)xÓ1¾Ó©=¶1YÇç9D¦šj6à±½1“dW¬µ”®gMß`QÈD^UBúåÿ§]ã)Ôß½¯wÛßSJƒzŒågœÏ‰yÝ¿[æ[þé/¹²¥ÞãwƒÔÝ/^Ýmœéq<¼SÅÎÁ²YYW<=!BÏõØ¢>¾³ímd!«"3q´cÚ¥ ÝÐÍ^&ºÛÏ·þÖ}!6‚t1“Ó†[¥¬œWU±‰˜)r•@§@ ¢ ”@ h€ô¡ ôŸ]˜=BÚ¥Ní«Ý¤iäCT`•¨ÛˆÌ ë÷¼Ø‹ƒÎ%%‰ž!À„øñÉÐ!.íÖåÑ>ãŸñßà Xr¢ÁP·(éh¹MªPq|ŽÝ2cp?ž˜µ6ê@êê 6 ó$§šÏ>ëÿÓþù?ö3ã=bòÅ÷q€@8âÅÃÍàÁ„ :”1¢Ä‰+Z¼ˆ1£Æl0Î :p$ BÀ‘#4y+Y¢L¹1›<™4gÚ”‰$gNyHxúì qeK˜D‹=Š4iÆ¡:} 5ªTƒqX•‡bVŠV·nØõkQ”#’(¯¬Å—iOªe«T©PhžœŠ·aܽ|÷nx†nd:5FhŽéZ7°`Aƒ¯ÎËÐiFN–,©þÝŒèê¨CÒ€ªgb9Ï¥Ûy²ôÊ:ÿ3cʸöí§CG, ~4w˜d'Bï™5´tï†'m‘·¥añ,qR1v±âóå1ЊUXqÅóL „„ †©‚Ns‹¡UÔsç%5Ýd–a†¡fÙ¡Ça‡0yÑ{"Båa‰&JÔž{#Š7Q9ñÈÉ:òôf_''Þ˜Þ†ÐqV!eZçv âH¤vê‰d’J.Éd“N> e”RNIe•V.9GÖµ"‹YBN}½ÉCÎŒœØHWfŦWê‡UUq¶©Õ›GM¨&œm¶c_=Öôc†@e7d‘†¢ÆZV]Éh£Ž>Ú¨<ìIY…69–]z9ã0öñÆI90Þ‡æÿ¡©EQzʩՄ|âyÔŸ6 ¤¦Þª4*(ÊÒ¥¾þ ,£’RŠƒZ&)kÇN™é’3¸´i^q2 ¨½Éhß0eÊ&®*õÚ'_²âdƒnæmº}Ën»î¾ûh³Qr­T_rÂ['böÆÉ‹ò”: ½ùU·)u{•ÞJeÓÑš¡­êNLqŧ„V¸ßÕ;"D1þ[팟j(&É Ï3Ê0¿ qf¯LsÍ6ã˜%Šçù›lôF%xY"&¶DËØ¢À)ôÍé!Ï:ÿ¥ šŽ°5.u; ªa¡N vØw¢:‘Æ!Ndƒ:Åâ‰<¡È›yBuÑ;·ŠNÑ÷—4R»íEë$“ŒØO+–¢ªU)¬°Äf+•uÌ×*xä’OnÙ-þ" ²ÈB 1£K1ŠQ”b¨E,^ÑŠZ좭8Å/bŒd#½xF.ÞH~{™^ulgÄ$ÊqŽÎY"áãÄ8±ŠfÌ¢÷E'î~ä£iÈD†1‘„ÜâÍÿ’:O…ýûô.(D­qí\¢£'?™ÌÝ‹,%O™ÆTr•eD¤)ûÈHT®òŠk¼¤Ë0HÄÇ¡ ”¼ì%5R¦éV˜ f 27¹„KÉL¦½è8!rÏj˜ìQ9éµ^òRU+„db É»œ¹å-çY")M¹ì,‡$Œä2ãOf¾oϬ“›®"Ò0Ÿæ©Ø)XAjÞ2“×ìš6Jµ¶HR¡¹¡~ÚO :´‡ã)æ8ƒYšŸI ¡¹²¥ìpùÆêí’£Ú¤è~šÐ‚3¥'U骼ù›b3Kð\&MãiB¹iT!ÃIQäÑùtk"íäO{Éÿ˜~Ó¥û gÝrQ¦VQë ':wZºÃÉa4ħDÊÆÈd’\!½ßHŠÖtRN¦3 =7·ê« ÇÇÛ` ; Zp}÷÷|8}Ëçûço€S • 0!¸ZÿãmòàHêg‘#rûEmUNNENƒ¶\+FbC¶TQåƒ)d?öƒèõTçFk7¨ƒI‘ ­s˜Ð„Ò¥‚¸ Ú` Ö € ÈÓÓ_IV„¿F_P5„Kö GhC5ØO_˜†#7†<˜3åÔƒI6b%g†&öÂ4€ª÷qÁ~:p|ë—áÓWˆÁ@ð|ò0 ×àN0 Ú]È>°ˆÓ° \‡Aö…­&dŸYHʼnkpmøPE˜@ÎZ;püflù%p‡2…÷~X‚ƒ± Ë·¸\ˆÙ‡á£@0 Ö€½ˆ*”Pý&U§èoA˜DÿžÈŒ4(„¼v_ô‹`hŠC¶oHø_Û(†2‹¬gNÐZðÈ~@@]PÛp€ÌçÖ‡Œò}áèøçŽò \Àœ±bùÕBV•b"ÆBJh‡2x†¬xm£xUFYuh„bUqˆ_-4IÜfNtÆP° à=ÐK° ÀÖ°5 ’ ’ò°òpwð áP“9)ß cxo[§|ø~ȧŒb“N ù@¸Œ¸ÓÀN°N0“Á’Ö`}3‰•†p49[¹•4ù•QŽ˜ ç×I‰–iIS9•Dqa)–>¹z˜§–ui—Ú1–w©—{é! yÉ— ˜ª‘5;aolserver4-4.5.1/docs/intro/tcl2k/html/img061.gif0000644000175000017500000002253507363640503021204 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·bá’ƒv{t1ãÇ«ÂmJKîXvYæ @q_|ŽÞüY´ÞФ; æ¬ti×­G¿†í¹um‹¡÷ΦmÚ6ïÛ½#ÊöüwqãÇ‘/^¾;²óç)'/µL7a敹:f;{j3ÿœZ»xßç‰OLoûüjô¯¿³.Þ<üûàëïÍ^=ôÿj$MÔ]VV€&¨à‚ 6xÑ€5‰U]]<9há…f¨áU†eÓeÖU¸áˆ$–hâ‰uX™„^‡â‹0Æ(c‚*H×Z¡ÖG;†—nëù7#b‰QÕãEœÉx$‰5²x£‹(å—Q_ƒ}6•Å—¥{ZÊfžg®­V›”_‚ÉŸ}àd™¦½ç¥™möxelþÍÙ&œKj&šVÂw'›z¹'}õ%7(lù•†¥vº¨n5ùá„8iiQ?®µä¥œ‚$éM-ŠˆÕ¦†AJ‘¢¦vªêª¬zô)T”B}y–€Ö©ªæJ«™¶ê믗¾:aˆÀòHj±È&« ° R¨ì³ÐF #³±Š`sím9f©ÉíJZ®bîùí ÞYî©tšŸ€þ¶[ŸŠ}©¨¼»‚F/˜õ†ëî–Ùª[&¼ûrÛî»´nwkº{›.‚Ô†*íÃG™ª_'ÿÛð“ÖF¬ñÆ«u±T²H%¯ã¹0¢Ž‹m{ÿ–&Áøj›²Ìþ÷¦¾âgpÍöæÜíɵúLò^-Çë(y #\qÇ,}LVÈLÿt¬ Q§5uÕÑQ¦õŠ“:Œõ×`‡í“Ó˜eüßÈ<¯\4¡êú)îÚB÷Ü/¼;öK®Ë/ãz7¯p }Àôͼfœxç«Üx#Ê¯à„‹ÝÙÄ:î Ì ] ±å’o¹³™wîùçm^)‚jçœ8›~×]øÂõ¶øÜêYY³Êv/:4è¸$:Ô¹÷î{Ä»›ýûðÄ#ü…·êçz—¬·ìã¾g³Ë¶ß^üõŒýöܯª}÷à‡t?íÖ”Ù²ð⧯þ‚߯ïþû4’?“çÃoÿýϵŸå ^Mêÿ@3†ˆ3üeE[ÕxF2–0<¨+ F WÀ¤éKoœÉìs¸ÓuI`Œ× GÁb°t!MÏu4Œ¡ µÃÚð†Fÿ©!wÈÃÇÉ@ô{úzHÄ"†D‡FL¢ôÃu cKŒ¢™!ó qŠXÌbD¨Å.‘‹^ ã Á(Æ2ŒfLãûШÆ6ŠnŒãöà(Ç:ŽvÌ#°ˆá=4¤ A„C¡¹&zTPôI´‘]„à )ALP‚†TR˜tŽîp€ÁS†ä"ëWIŠ ’% d ^AºÃ­p3D³› e¹ÂK É…³4š kéÊ]Np=Â9•äî#5aŒ£¸tÏaˆÀø$%'Ò…T¦À!SA Ìðà!&°†C–P¨!øC¢€»ðÈŽÉ$ŒAý&€‰]0ÁL˜À9ðaƒUL ÀÇ2ðP À! øPC0΀„¶a l3IѰM´¢ÚE3ÊQm´£ ÿÖGCJRã…ÒŠeëÉͪ7¦$j<-5˜eºŸô¸IMÌÓˆ{88Åe«P|*Ò_zÔ9ñK>H#jIuwÒ ¦ô.G*Û‚££Å!Iut"æôtÖ§x"'…|é Å›î°ô8™Úq2…Ó¥ºª©O$¥[¯êÕ¹Žh¤vÍëðª×¾¾ˆ¯~ ,“à:Ê+ ö°¿,ÅÈÅB” pŠSkÇ£ªÎ„BU“KT¥ñ0DZ,ŒªL½³³ 6–p¯Û¬O¥£Æu6O“”Tû·.AV³G½iþ +¯m…G kßv‰Û™)-«ä¥quÙ8Áð¸Ïû©®´ ÂàjpohMUtò§ÀÛÒÒºàJ®ó¾{¥éúrv²|žÛ¢Xĺ—Aí•jcG;Ìfv¾„úì{Õß“ä ƒr[]ójš¸³x¿bì/‚ÏŠL„æ®ë_®Þ×Gu‰åD{U @VjÚÝédAŒ"[…¡m«õ‚»] øoâµU‡ÑE3Ô]ØÆ\íŒÍ‹««]‚Ú1a§c ÷´¨êÕ݈\ª oÅÄ ŽòZ l$%»¸Â3ÆÍé4ãd ÿvi%4ÉÃ5a÷Q9)ó2ÎN3Kýöø–@S˜d§JZš¡ðÔM±Ï¥æ1KoyÕUs\ä.ïÌRN4WÿÝ=Y9¼Z&1IÊ\åäbY§[¾4¤óõŸe³{µz,®“Ïë79uYÎÛ•M´9¯ÑÓÍ¢‡Ý F#åÇ#²¤Ã\Ý]Ë·r†&vQŒ]•>ט©v¶yq½âÿÖ8¼ÙŽŠ™-í³P»Üèʹ ˜hG:Ý6\÷PÂmm ÒmÖƒ¾ò½]½ix?LÞþ8J.ð‚3µŠNœÁî1`W‹áG Á7FÀ)Qºß¤óêÅåeky§ŒjõrŒÝw„ܽ"aœYmqÓÆV߬«Ø£HsA'û„™vñËuþÀðM|CîŽÑÆ5ôÏý<âH§ÈÑ“Îô‡,½éM:Ô“.õ©Gø¼êVg8Ö³nð­s]à^ÿº¿Ã.öt“½ìå>;Ú‰­öµ+ºín—2ÜãnÇBÜÃ!‚èÄ "€üá! bQªð‰è@•Ø(A*SùT6ÓMx äÑÌ,\ªt&æ…Ð@štÏd<ÀøáÃ>p€Ž 1Τ$4ÍA{‡L©†D@a‚ÀÂ!º(A(`PžÇG>Sh~’ Çκœ[ËäñM„6VÕô™k/–õ2KÁ¬“s­Ÿ²m¡'˜¾Ô¼¯Ü®à13˜ABO÷¹Óÿ½ö¿?bó¯Áò¿ÿ~õ¨W8€vU€èVÿT¦b %1uåqg*iõJ•€%²€‚V[£U $fuƒ,hvç[ÒGh6V4)øU·&\RE`Ô•Sƒ™•djS.8Vb%]µVñnȃÙE_ÈUU«µYlÕUÒ³USu„ HV`¥<:8„tF0„&…6uƒ6XTARAøq=¨m5D†Xˆ&g؃Ý1ƒ0GƒS¸/nH]+È‚Bø3ìçk †€ð‚86#˜HïŇ}èCW†5ˆ ¨‡ˆÈQЏˆÕˆŽHQ‰˜4‰”˜G–x‰u”‰šGdWƒ]†xØr_StÏ–k§e¦X,Aè?ÖW`²–o-”о8Öm´dV½&BÒõƒ)==xV‹°¶mà•VåqYµrj¨„ý¶…õ†cWHB ÄŒqs^Ùó‡rU‚®hZU0~‚U<4)fGºµkÑ‹ù&'$—Š‚s¨¸cú¥gÝØ]·Èr2(‹×e[ãõ‹äõ„iñ‰øHkÔwj8U´‘Z6‡<õSü˜Uì(ŒgâmëÅ<íh‘Œ7å]Ö6Tøqs÷øqyA‰AT87 XŒÙp…XXOp«Ènoÿ‡‡Ø‰õG“/© ˜“6é9™]ÙWÞÕ2'`<Ù“ò“*98¶¶mMI‹H‰5JYj¾8’æ§ŽÜum¡•–‰h†l\iQ8Yxaùu^Y–]t–ÈiÍGYÃZ2IbÖsPE—¨ø5ö'bÚS‘•ùj4·ŽøV.™’•¥@— d”Iò*™TƒI’ük—Y™èx‘ƒ¦dÔ¨k1#ˆì5– ¦“ôu]edÉ89ç(ÖuV›†˜§9K–ràE”Ë¥%W„JÓK¹š·ÃŒÕãgT=³ œÖ#dÿ…]¢–h‰as¹1ÎùœR4Ô¹DÓyc^¦av9co™lˆ;¹•×–<Ô—9Yýh‹(saI¦šA…^HV’vFŸ²˜Z0‡Yy‘ÏiH¸:–6ã¦-¶fsgDšÂ&2Z5/ô(ŸN‰mÈ%np¶b{c””5 àÆŸŒÅm ”Ÿšé6e5}éHfG&CÖ t¸ô룢¸s¢×iD.ú¢_ÿ„ ¼óÛèEÇ¢y¦¢?Jž¹ƒžæX~:¡Äh˜ªæS˜‰aG…—•¥•M:dµ²sÈ©÷i+õu›ñ‰¡ÊY”ß?Ù‡–iD¢KÖ6å§„ûÖ†jÊkž©¦Â©Žý‰¦±Ù›Ì©\sj4#ÊP¹>1º~ ˜L` 6<ê8*£;”¨ŠÚi-Ù[€hšù—à)}•Ê\æ–BªDÊùE¥µ¦ŒÈØ\Ú”ï¹ü)¥yúŒ‡zcêrº™…”ëC™¦Øæ ¬ÙAXÙ¨ŒÚ¨3ô«ÀCÂ:¬øã¢+y©)ѪÆÚ`4:DV¤Áy˜,צ¤ª¹XoÙ¬f,a:óšWh™¤ºR\z¡#·šÜÇ­^ñ¬ê qÅÚ®€Ê®ðÚuò:¯`W¯ö:vÿøš¯"ø¨Ÿ– ü:lï°Ü3°‹=JY‘ÎAnù¹L©q›ú`¤¸–ÌŠCg&šþ ‘H#Œ@¥.å©«±H¥¥©Tú¤ð¥Ç ®&™8* (K²-›ŽöYž»¯˜¬¡š¡o`,û-©)³'ך ªrØji1…ŸrÓ6´¥• ˆ6çj§-õnŒI²ÊöŠ4‹§f¦³«ž³µ…A[‡Nè˜;†a»´Êè¤Y•Θžž•„u8²$i²ýù(r›ƒdÒZ¿it^Û1‹<«$ƒ[5{°‡ö·ˆe‡»¸¿Ó¸ŽÛ;¹-ª¸”‹–{¹û—¹šëœÛ¹ø¹ K€¢;º³Xº¦«€¨›º%5¹¬ 6®ûºR¹º²ÛQ±[»Ls»¸Ë1º»»E»¾+‰À¼•8¼Ä‹‰Æ{¼›˜¼Êë‰ÌÛ¼mԻЫ,Ò;½&å¯ÁV£Ö[DâàÇàÚðVØûpÛ‹E~„x. çË®÷¼å ?ìp{P b@ß ¾ƒ—p¥y©$" ‹wyD !ÑÔ!@Àø ¨¿UÓwÀI©·œÀ¿ÿÒAxÿ ާxœ!.T¸¶d£jT @@  ï;¾$(M°— ©4I%<õ@Â%ð šb"w‡ºR}J<$Û‡ÄÚAÖØ}À$ÅLœ®ê‡Å|š®C[?! À ’  „Ñ*ЧM¡ŠçLQ¯€ ¡ &€ &°¦@ ¦€4 N–„ ŒyK` „MA èçJÞG~ç•Å®Ù)Oü\Õç›T¼ÅeH\é';¯¤§ÙÄ÷}%A ÷ÄQ±0é@P±P etTN‹}L"׋ɤyƒY׉†;XØ0¥ŒûÓòÑG=®Ÿ©‚‘í‘¶×Y]Õd­Õ¢51_½ƒYMÖ½‚™=×ËˆÂŒÈØ—áØH]ÚsF†žÝ’¶r›pè—Q˜z{ÙpxÖ!$Ú솂 ØðÖÔÔ"±Ÿm…¨iT,¨ÛÉ=ÛáZÕEËÙÊíÙ¹½„Ö¡­ƒ!8‡3ͳîEÜ©mÜ2-Štxª¹)?ò‚˜ÍÜ|͆UÜÙ¤}Ýa•ÝÐíÞ0HÞl‡Út¡Ú˜Ó†ÖuÖõÈÞŽõŸ˜ŽÞ¾šÀ­Ýßñßu}ÙÅ¥…Ù™¦¼l]ÜOýÖømÖ·}Ø›­b¯EáÑ¥ÓÞhƒ»]¨Nál«ÛU…·úšáá½á%¥ÖÆ Þû-Þn…ãêãÍã-úä6>ä0Zä-äHžä4¾ãGÞä=äKåR¾¨JžÒV~åŽúCöìÖ\~žY.Ð[æ&ÿ:æ}ÎfŽåOnä`¾æñ†æü çEDåZþætN¬rÎäy®çm^åxÞç÷cçdè‚.¦{^懯~çj¸~"Þ­£6éÖœè†Né•©3(­ÃØÓ$âãË*s*~< ê‡é.l¦‹¬.~šj¨‘a‹³û3ë1Bèi®R&3ù±k[(°Õk™žØš&²-â2KØ%Û·m‹µÏ~µÊÞSC[íý·*«²4ì D™ÌŽÖ#÷²OËâS¦ê\Fîþhünטð8Ž•º²1ö§Çޤò>ª~:ïKiµíÞ·ôaÛªmÞ(‘ìéŽa:˜¨Nˆ^¾Ïs.Ô“Î´ŽÆ™Ùn•þ(Ž ºÓõîíÀµ!´Ij ³ŸïÎö¥/KµùðSmàûIíéõŸÿò–¾hæ^ÔEkoíØZ9ò‚﵎U丽*”¥¾g"ò‰Yœ¾~ñn#›Kz§Ü¢ò²ŽïX¢ôžê^è«î£øXìUŸìâ~³^oŽ`·oÔ.ëòöEWO»íƒšôo:aoòmOð@³&söòG˜¥èÎ’ ?Ñ|Ž` ž[óþVø†?“Y¿ë‹îäÒZÿøÿ?_¾õšB¨¸Nù*¡ë l•®ùJËùXù0éâ)ú¤¿[ÿù2 a¬EŒ^ϲ\8ú«Ÿ5­?øw)û¬ö”¦êA›¿úž¯ûËöò;\¿®·Oïè=*ïHüE¦ü˯nˆë¯ö´÷»ÊýW_ý"Ñü¨¿*ŠÏùâùœâéàßù׿þÇÚþîo?çÿ~númþôGð_,3ÿêOà@‚ D˜PáÂ…04è"C‰-B¬xQcćvôRäH’%Ò‡ReJ–(‹¼|‰¯ˆLš3n‡ÓäNž3†üÉ‘gС fDjô(H¢=?nlJ0ªT¥Nÿ©.µúÔâT¬YrõVäJ²-eœ™¶æ@œ:žU8ÕáÜ¥sí½+1iR|v}Þ=è÷o_ºu _튷j`ÁƒÖË´pd¹€ ?Ìë¸"å‚– nÜ9/æÉ¤ w¬y3i°ŠW3þ<øgc¾„O_†›û¤Ù².Ñ®U{3§nâT3 }¼8±ÑÙ¦—eî\vt¡Ï9V®žZtóì¶E#F®Ü6÷ðßQƒçN~úUòêaŸ×þ³ÒöÒ#³_ümoÞga§I8·ôË-ªÚFËïµóî³î:ȨsO5ê´ÚŽ.µ M1ùâ«m¼ =Dì@=CÂAξ Í‹¯E{±.üLŽ;ŽÀýú+ -µvdk8 \,ÂùâêÈ=S30HWL2"¡óîÉ «RÅ%Ã/Kø†¤Ë+å;E$OìNÃ2aŒÒ»#ÄòG±øÿËñ7mn@7½J’AËBkð¶4÷R²´¥ÛRÂ"ù4®9Ð,D“K!‹Ò¯Õ(3­Æ!'Tɽ³'8ÍÒ@:ÛjµV[oÅ5W]áò’@°v6¡WWŠuÎí 6Ye—e¶YgŸ…v¤aY*@£Å6[m·å¶[o=šÖ·ÿŒ½ö[sÏE7]u×}GXå´¶Nv祷^{ïõ6\ÿb"W^|[ýu+Sÿ½3`‚Î×]báå±Üu§¤°¨.1˜×üF2¸à‹CÜãP9F8dô­¶a¶oU•iÃbP©Ü“åõ\TõSÜh„‘³ØÿÄ6E£ûùK ¡çÊr.MÒE¯ô,c‘³%™áµVWÁ0Sí 5¤cÄ®M« ÝrM˜¬¸Ã7L.Ñ3ÿüØL³[›kBSåôit£7^ZÙå‹RÁÒó©S5Nðïe$:é ÅÆYk%Éuı…ŽñTF1-»ºÓ›»âífo~õöeµ›4R+§Sîí÷¢R(Í>›f×#ŸÌÎW,Ïf"µ”òPúG±¦p™ÂëÅýíA"2T¡„¨"(†è:\àäXÃ*-Iw½›ÙïÌ41ÎzÂÚÕ¶¶6–/Žùó#äÄæ¸B®17mTÞÍÕDʵIvTdË0Y»ÌtMLŸd''„ÆJBŒGsúXEɵ-òEs¤W @¾9qm’ÞÓ&¾ÝíÑq“›YCP¯s€eÇ@…ÈLsRµ›^,õ3Kª‘|RéRÏ”X(–1î|*œaæMØqªŒ/S_:+g¹Öì›îtÐ;OÃ>ÝÕMšÌྒGËÿ{Ö«{jŒ @û™Ã~’„šo,hBºÐ¬Ôˆ …hD%z‡–p¢ÅhF+*ÉŒvÔ£ýܨþ †(§*°ühJ£ÒyÑNT¸|Ë!{˜“Fì¤*Å)EóY2>ô\¨dZâÀ™Gê=ÑT¢ìãÏ<÷¼RÊŠ23#Is:Õ‘ít~nôéOIÔ¦ÜΓÅSåvhÎÜ5ˆf­)U#ÊÒ{ ™Í*Ö>¡*n¾æ7•2µöµ l­ÚwúÈÍëÙÓ‡V ¤1ƒùÒÁÒõ°Éôkd«:-žÑ¢päS7‹GªñÑtJΉ¢)1wï1U=QMlô$‹SÀ®Öµ¯=Xka;[Ú®K¶µÅmn·×u[ÝöÖ·Ëâío…;\[÷}ir‰»ÜâZuƒ=½,ó<¢Ü‰1׺»uîèHÈQ­6Q©­cìN[´âé i¬ÜuÕkã~K¦yµ$WïÚ¶îõòDÔ]onÛë­Æ•¼Œl,äâ Öïâ7¿µÝ/· _¡÷“넦[?v` #$ÁÚráìiWOE1—ê/7[á_˜Ä'Fq>Å¥]èr7Å/>±‰aòVÁ~âŸü¾7ÿùsŸ~õÏžýíýûá¿zùÏ¿ôõ·ÿçñŸÿÍïŸÿ—÷¿ÿ“¼@Ç#ÀL¼DÀÂSÀ ¼tÀ¼ƒÀ”³ ¤@7³À T³ Ô@3ÿãÀ³Á@“>€ÁÿÁ̲TÁ*cÁŒ²„Á&“ÁL²´Á"ÃÁ ²äÁóÁ¤­xo"—D(!$½Fd %Ì*&Œ•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba”ƒ3>ì¶±ãÇ-ÂmJKîXvY.N¼ÀÞ¾ëeÜ0´h¾žK÷uhš4>Ó][”ý9õéȸsëV;y©eº 3¯¤ÍzµjÔÆ‹Û¾}ùråÎ#½šqôäןO̾œôõÝàËÿ§Ú›æïËeÇ«_Ͼ½{ðåkŠ^—çûûøóëß4~X›—ghà6ä_eó¡'\‚F(ᄎ-x]éiåq%wÑtŠi§ÚHÖV¢a"þt"G+¶çab§uÝp¶U—"`7îfaƒ>ˆˆ!67â±¥6šŒÍM‡Ý`ÒÕèْй]ŽÔ‰Ö¡ŒL"Y\‘DZ¹%uÙyibDM~Ù¥\~f‹d>7c”ÞQùYšUš‰&ܹ)§”¼Qæ'ƒÒ—!…ø±I衆êÓŽ:8à}‰&£œF±Ég’bb$©_”Š´â¦Š†ªàŸ”](•VÁØe“:É*‘e®™Êê‹OjZi«‚«™³öi­Sf™©®Ö}e¯ÂòJ笮Ây)¯».ùæ°¶Šxì«6ÎHë«í1z“£rH¨¸¢ŽÛ)Žçêæ-T‚¢šª‘éʺ¨ Ñ‹îwšU»a¼åöûÓºô Øhðnk§–ܹ)±xê9å²P^›d³`:÷¡ÃV{鮲ªêïÇC`}æòû.xö‚¬2dÿ"·ûèÊ0Ç#U y¹ìµ ®Ì<#jòI)ý3báéÜãË='íbUC§Êt[FŸŠ´ÒTCÖ´IW³•5I[¯5YîV-öY]“aÙžZõ5fSí¶Ó4÷‹v½H­-ðÛxs éÜŽñÝ‘ßÙMrÞ„ô]€»—8‹B >háÓÜôá+/Þa¤úÆ£Ô‘wîùç(96複˜gÍ{áZz¢·mõk±Ù ;ÁÐ¥ûìç^q­NÞÊšrµow{ÅEúºXê5VÉ{ðÀR„öâ–¯nVëÒõü{ÐWÿ!V[Sïéé”_Œ³öóÞõ;슉½`ªŸ|Oªfí=ÖÏ’ÿqî¬àçÙ>û¸v×ì¶^ûž4<7¡ïûs_ò~ç?ÿ¹O´]Vä—9óll®»øì§(üå/L<ßÐÖg>ø%0‚p Éüî•)(hüà›¨Ô¬n©†´ûxÀ†‚û# ‡‡>RŠ„ŒÉ ¹†Æ,†2Ô•‰x ÆÇT ê˜óBÕñpvE1Ò E&M…OSbåÓ¨£Ñ‰e”áÉt3´ÿ-1o“3Ìl¨ÈÇËÍñE¹#]ˆD’Žvä 9À³%…‘ë _¯¶¢H@–0Tä_¸2ù½­ñ?ßr£%ßÈÉ>N¨”'LJ%GÉATþA®teEVÉÊ3¢R–a|dŸ®xA¶Õò—¬ÊtY¡O*”œ¦2÷ˆ\òfâ¡å2§‰¢[>Ïš’&5·É)‹E&j¢Ì´ÉÍrš3+ä<§:×yb8d )CCádl$! ‚"²‹\Á!% JЂ²ó  ³Ã.00€„–AK0м"<ì…x¦J“ÎLo—¢/2“ŽšD©ç¾h9c‡Í>ñq˜@&ÀG@:‘.P4™BJ`|¬€15²„ˆ@øÁl\2}š ©9Lì‚ F`Âάb­˜>–µRiÀ‡‚q|ĵ k`ƒDfšÕ¾úU…ÆÄ¢/ÿJØÂ†.°½¼›aËXðµ±-ÿìc#KÙ¬NöJðR“´€',9KOéê,ð>»Ù-VÓtµ©,5/‹ÚÓ'µ¯Ý×òÄç¼lqÑxú-‰$%›ñ©vЬý­pW‹Ø6&s¸È•lq‘™Åä:ׯÁ}®tßÝéZ—ƒÕ¥Ñ¬¸E¼\e¶x¶EQÃÀK+œY cšò Ää1ÎðN_¥¥¡{Ç›¥2Õ¾5ÜÂ`…Þe],MøbÖîŠÕYÕ-ÙÕÛœ åÙñò/~ßÓ ÃÛ±IRKY¿Â"%Ì`h‰bï#Æ(̱;}XY¸#ÌḎ6=ìµ'毼ʫÑØ- ¾®ŽK—㔈Ób´ãS“æëÞ&r¶X#*±zù5 §ÚÖÖZGRqw'Ö&Ó¸ERÚ0‘‘<àÞm–´ò‰¼9å'ÏÅ⬄ßÓc¬yIbCž0¢U­õÎ8ÎŽ0‡÷ìââÝÆ Šžö¢=³ØÏ ËèœAÌÝæ pÑŒnô‚; [C׸Â%òmnÚ¼ãNCŽÓ%Ùðî&¶™27Sf¶ooÓ|a9ã×ËbÆ-oKŠdÓöÙ»Á’¤§µ\víl+ˆñ¢ÆÞ2XÏ$ó¥5|cã!šÙ)µ1¥[,^G[×»f ¨³92‡‘ÕÓô¶Ííra»^~·‚sÖë€ ®ÜbÃ¥3OZG–µ{dƒ·Ü˜6o­Æ Áÿ÷v™¾E%oÿõÀ!tðq¥±n 廸p5Ü“¼4ns'>žs›àÿWÄËq‘PÝæþ7PÈ]rݬzï Ë[NÌáÐüž#ßøÍ1ê—Tî|¯9,F9ãÑF"ð„,ºI À¦££z4zJ¡.ÆIÑéGf¨¯ZKpåI0w~.”쑲ß>ÇyÆ™+ttoPE;7»J©žu¨û<ØE7bÞ#¨÷êä݇¯üÚÓ®N{œì„!u}5ÇÁþ-AWì×ø²+~ñU©“gÒ"æP“œÇzèØ÷Ñ÷ðYs¼×(XÉ›nÅŽ¯,ÊɸxÂkžpªpIuÛ öÊ'¾Ë˜Ïü"­ûÈ¿³?³u¡F*ü÷ކ¼äóÒ7¯ü×i¦ñÄWãÚ}-qß{Øù3ÊÌ®RÏO¿ˆÏz‘}wúÀdôûU?ü¿©ò·©;ö@ß¾»óM>ÆŸßódz`DáRsçL‡çXÿÆÇóg}ÐÄ È=‹# h=H!·DI 8:˜±” xØ)$LKÓLP³D‚Š‚m!Kø§v¬—XÇÇ‚ˆM¹Toî1‚6ÈÕ·n3óm1(~*؃Fˆ «ŒIécçÕ`º…j ™iùlV‘Ò²‘h$’9‘+‰çø“è”BIŽDY”Þx”H©J¹”ÖØ”N)P•Î8•T‰ŒVy•O˜•Z¹„\ #íjx†nng(&–^•²5ü80k†kòò–áæd@¨y’U‡lZbbgùf9lЖg&—(&˜o¶_¥ÖQ–vlyk^i8‰“g¾Õb™gÙhñBgÖör’¹_ÿ•‚Ë(pˆc—ƒf™%h°e1¶b’2çelNÆeJ`´&›ÒÆ]U&j{é—1–aWâåg›)c£)œƒ™hYœÓÓ’U4›Am‰Æ{Ð)`Bre§™f¥åšeÀ›àEi§FÀImî§gó‰,ʦìø^3“-ñÕ/Ù<™v˜Ä9jT†¦|Ê—‘Ö§áä§c’“Ô™¥ùáŸ>Wϵ–7jŽ_ÊŸ”*Œ“ÚL!º‘:kL´¨mYžKù•™tÍꪋ}¦§ ê¢$é_ä9– mYmné_*¹c¢:¡E*¥0Š:°¹¥ÊfgA*lº CFzªWjª嘫/_ öeé©_ÚI™€zZ±&­XBy?Æ¬Ø –ŒªxQ’jE©¨ßä­i© z«Ly©•ª©êšk¯àØ­WƒïÚ70øŽü–¨îš¯Ë9¯e·¯tù¯k=0¨! »i{°ˆ#9/s»Žlçz{®!ç€(8±öJƒ x±DSê!±÷™ ²>–±Ø£²äÿѰ(«)%Hq¨J.û²··±ȲG±ÜGr6+R"‹:»r5û³g7´2W´BI¯ krAK´&Û}/Ë®˜uJJË’Së³F›¬ºoY{暌NË  C²ÚÆ´]›¤‚gµ¶Z˳û׌kÛ›hY:p›c[”e‹IÁ÷·Ž*ƒ+Ž[·N¹·=¸cG‚ˆkƒQ„UnkNû{;9y—Ét¸ww³T6rW“ ³Rw~}ÿ÷`˜[wJÇ‹§wÿ}¦ûоx‹ÁÄ5\‡Pš‹j;0¨+a™·@5Ãj •‹);| ™Â7‹ev¼¾«¼³Ë§ÝE¡SW¹µ²€<”» zn9Ÿéø¹ƒ¤!Å·µ:W–‹[ŽÞKHª"v§€â;Ž BùØ·}%wÉu¢‹Œ”¼ÔŠ®·ik«ÿ7¸‹¯m[¾æ{» ùcæiº ÷¼bÔ@ݪCxuJ}[¾Ú'·Ì¸‚qÙ´—W{G«=¹wÁܳã+–|ÛÁqd{Ò€վ…K¾' ’ »t£u\=õ«Â9ØÂ šZ¤ªI{)üÁ«‹u)Ê~ówfÁ6DBäÀîGÁicÁ<<Âs«Á·©¤ëª¸\ÜÅ^üÅ`Æ¿÷Å:ü›ö—}Uœ9÷ú±YL«+)ÄeTƇ„ÆÜèÂ<ÀºCpü¸D¼ÂtüÑe`Øû9\½–gp(Ç}¼:,\Ç=|²ÈG‘{}GçhtçwO7R¼¨Š{,G‹Œ·̾Lµnº[ò™Ë=Ì'ÁFÜyEï냌¾UD¡Ûa–­Ä zËú!½†K(¾ü‚·&»¦w<ÓÛ»ª‹É“|°Ã¬5å÷»¿ÛC®?„?|ôQ† RÎ{z™\¿ë;‹Íx·»£;6^g9òÌ òàÈ{íÃ1†C%J0†7ñ ¸Ðº`Ø`;` ¤` ø@SUPØPÚq¸¦Pá:)ÉEÜÝ­ÜyͺØŠ ¼¹ÓwiÓ¬ÀÿŒÒOäª"A `ÅQ±0é@¡VAWv%.ëTd¨Š­\H087$@0ª0VÀ åø0ø€gÐ ÀWfPWgà ùWÊ\äíº}#Ó-æÉè4hæ—æN¨æ„ëgîæ[ùIk~Çt^•vçlnÒyn„pÀ}þçc^Aw>ç„è{.èxžèo¾è$|ƒîèR éî6é”®çåqèmžé kéeÞèžÞŸ N˜>êu¾é|.ê¨Î¸¥~§n?`ÝêõÿJ*œîçÙ›§³î¯×¤éEŸù(ÉfMë§êŒŽèÛ¿Ä›?íè“ÄžÆ`që¡iœ) «iuI‘ÍFc¼>ì•ö:í€üêtëÍ.œ7i3)kDhÊ‘^ÖMüëÜ“ä^îÆéîBŸ&®ëÝ>¼Yï<É‘õ>«¼~ðÇY“ùÞ܆¾êÈð6«€ ¿²’6yÛ.Ãô‚’ÿðömëßéÙ{m"šíI.‚¼lï.÷nð$¿Îû~é¬þÃÀnðVÖ‘ ïðÙÞñóñ¹;™ñ~ó?Ôž/=o¼F ŸJ¨áÝ?®~òoz[ Ý×hÎïrŽòô(îXî:ɨ¾Îî+__át.|íÀ²_¯ó¯ô-7÷¡^÷vÏqxoê;¿÷7×÷°þ÷€÷æþ^øˆ'øçNøŠ?qŒøŽÿøù9‘ø”ø‡ù“Ÿùåfù’ÞùžŸmÿ ßï¢?úžVúa먟ú›úzßú¸úú¦û²]ªù·¯o¹ú»?]½oû¿ÿ\Á/öÃ/]ÅÏúUÓõÁÕºM¼÷úIû«Ã%ÙI½>ìÁŠýÕ–ò«k̰­Z÷îͯ—ž+ýCýº©7°6Ü 0ìÆlËâêûü…®Zú­é {Oà@‚ $B† >„!-|-VÄH±ÈÆøŠxùQà&|$%ž¨p!J…øZº\øR Jš+eÞ\ ³¦Íœ eÂLÉsgÂ=þ<ˆi×Eƒ%Z3*Í™CƒZ-j´ S O«Jµª“jج_U>ü©4ÿ§Ú¤Z™ölZ¶êS¹u¹ ‹Rï^‡ýfôÈñãàIšäëð.ĸq½BÅéuiKµg»ÎË3Ô·Š.õé¶kZ¸¥7o5}ùêgѪ9o&ý:¶d­”[·*{ö눻}¯­ÍÓ UÞho'FñïòÀ Y2ù[©#Þ9uVÛxOGÖ,6/îÎÅËÛå=´êÆÜQS·ÌxúùG»_ïu÷©®ó‡Ö-ÀïJãŽ5øˆ›.Á“˜ûK0Â4L:ñ:޼áêÓÍ@×Þ»p@º4ܱãÂ3Î?áìSO´õ³Ï3_ÄŽ¾Ó8ìí¶ÿH´.5ùsŒFCœñ¿ ‡ˆ¨AÀ|¤è#rºõHË+>ìî*pµøÚCP¼,§BÊ,oŒI.-u¼Œ«ßœóÂê̺’Ìë`įÂ1…’’M; mM1Á3³¬4÷¯IA3IE’ŽÉAe´QG÷’óQI'¥´RÅ,Å4Ó錼ÈÐ$—Ô4TQGÅ“TSOEµÆTW •SŒ<…TVg¥µV[oÅ5W]uU#Á’Dô°]‡%¶XcE6Ù {ÿm®£C#TTÙ!…¤0RK©¥ÛAµEŽ[i¿w fa-LV]½µ°¼t¿²Ì(÷´ÈGÑ…´µ7»79zÃÍuÜ_Ÿ57×}ëðGVó“ëÞŠ ò7ãO7^õÉ;-äG'ÃðC<‰CøÄ G4Ú;˜ Æ ë—§vqÇtßÜmµ‚áD´¶güŬµ£Ñáa›vöia»ExM´»Å2³3Û¥™¦Ì™LyŶ7Ìj{¤¬™ýÿD›Ë /“ŠpͲ ÿ]hF7º!‹vt¤% iI›ð®´zË|Ãg:¿—þ¨§IEiQ•¡t¥I]ê Ÿº´øe5¦Vë¥aúÕ©žô¦øÚˆÂEYÃõç@½RZÿX×á­µy›äkë¼·¸ÌÖ×s¥­ ¬‚¹Ø²>¶”+“÷:ûDÜNIw½-mfßÖà¶íZÎ=mÞ•»Ûá†u¸ù§n_‡rZ(¼¶¥f]u‹G¾ô~·|ÓÍÆu¯»ÞÝÞPßÇ5oMÜí~7º×KÇâÄ å%‘›´oQ}fqõé÷Ä^p’7ÅÙé=xÙäò‡CÞó¹²Wï³|¸4Ç/-Î\O«°_mµÙ¼¯¨`Ÿ×È úœJ1k=j ¢t•òMÄ[¶è6…4G§>¬¦c7ÞÇz¶ã1­ÔÎ9îºÕG>)sóSÏfæsŽ:zÕa×ÝîwÇ{Þõ¾w[³{Ù/ovhg|ïl üëês¬½ .öêÊù¨eGáÙaœv›èÄmé¤ñÌûJ‡ÿÛ,ˆ÷|Í3?q:±Äð‡ï)ä[‹œE{të~%ºßÝòµç|æ§½ÈËíÊß^÷GêÕÿÿvN;>õ5{=]7:ìÓwx_¯Í´øÜ·\ô.¯¹ÌQí§»½Ÿ½eeâ%ŸüÀó½÷ ü<æËgJš—çíþŸôqî~ÖÈ­ýº}âð¿OÝð'žüTϸKk¾Á>ï+þS-*ºÿÓ-ó@Á*ÀäØ7WcÀÛrÀíÓ«d=Æë?jë¹ Ì¿´µèÃ@ü³>ÓC,‚@ LŒ¨“)ôžåµæSž+úK8´=Í 9¡x8€½_Z:À󻣓@L@L:4<Àt7ß#Áƒ>ƒ;9Þ{@‘·Ü“8h»¬&4ÀÖ¿$¬"éaB0¼À99),8*Ô®ê»>ÿ\¹-´¹ˆ«¸î;BâÛµzIœ3$¬·4´'ø‹?¹“ò8Í =vÑ®E$ÄóK¿,Á,ü)ý;À»2ü#?œ)z¡“¼£Ä"440ÌÃýÃÄÆ“ ?Z£¢OÄ»PD4RÜ@=D¶›UäÄ—ã;X<+ä R#¶\¬Dtµ„.<œES„3T$»ðFIrÂt:dlA$<³T”\„AW¼;^´/Y¬FZÔ¶Ë %m,<ì³Â;¼9c +b µIŒEjüEkŒ»Ç³EvLAtÓGҌĆSžé1sG׃Ç^ÇyÇLÄF`D^Ó=HìB’«B¾‹\n´;oì*_Ü B{Âǰš>8ôÂF|?t„Ä «ºÊZŰÿ[Hfì)ɼ?]4¹T6DÜÜ6ó{Á |0¬Jºgì5 4Ç 3ªTHeܳß2ʨ$" s£*J©ÄJ/ºJ J„;A‚c7ËJ©ÚÊ#r>/9?C´¼–ÃÁœd¸Ë¡*˘‹5¸ìÃH;ÜÉ:ü=tŒK˜šK’C‰tDö8Á(ÄËùãÈ¿§ÀÜ©ºl?ʽ¤¹aÒÇÞc¸È-¤|GD«É‡pÌbúÌ¡F®êû¢G¨dÌÈr-¢â¦Ñ,’Ôì´ÕüµŽ{)‡IJ¦‘Mãk¯†)Ãr/ØD+¶JÊÐì1““’ÌÜAÞ»Á¯ ´ÖÔ§‡t’8ÚMµÓËÙû½‰ZôBá$,Û4&&;;ã ±6¼ÂìLÇÅ´4ï|#éd»ùªN«ËÉKNÅ,7ÉDOÒÜ«ûLÏiŒ1õ<"îä¢eÉÝ)ýÑK\FÒm3Ò Î[Ñ%­QL¡QjkRïÒ=”R‚,Ñ zRÓÂÑÝÒ&#Ò!åQ0ÍÒZS3=S.mS(}Ï5eÓ7Õ¬+ý¢8•ÓV³SìÒÎÂÓ<¥ /­Í2õÓ0M@eº=U>E…SCåMD­Ó>¥+ »©?…T/eTI=Çp‰ÒKíÐO ÁŸªÒG³TOuRAÝ«UˆèTS"PUªòÊM"ÿiUW•+Xõ?Q=¡ZµÕˆêPˆÏU-E$}ÊCíUÁ V[LUa]–R=ÖcOšÄ¦?dÖAsÖg5©hm˜®”;¦Ü!^ÅÖ åLÕ(p ×s]kE×u½Ñ4Gv…×Z1×x¥WqQ×zÅW}»×|åW„ˆ‡ð†ø×Ü×~5؃h@†ptW†<؇5pnÀ‡O€ €‡`½˜Wˆ•Jw(ˆ<À‡D€H€vÀ‡>(ˆpPŽ‚õØz½ƒbÀ‡ae€[ƒlÀ‡E0ŽuY䘇—ÕQ{x‡m0†GP„C„=؃ €0BPGˆ„d膌eÕŸ¥†@±00 ‡ƒ .0((À‡Z¬ä„=ЧK`Xb5PcÅ*(À-P‡ÀU[‚€(sH…@‡¶-RÀ‡¶µ•Û¹5Jx?hZƒ Ѐ¦äÛ EˆypÜ(S\Ç-Õ-È‚€††\((pÛ(,P]Ä]\ÁµÎåD „I˜ƒ8À€¨€˜ìÿ¡,/[pÜQ`]øÉž>¥àÁ ÔÖ &í»¹ËC==‘?”ì7tÍö`”K`9_*ò,]¨X€×ÜÀ•ˆP®3¼•LÉÝq“ÿt[™7<=‰ ¸ËœŒ·)ì;ßE9y(€aC„Q|À^°u†À=܈ÈÅåÍ¥†È0…Y¨†%…[À‡y`|xØ] ‚î,à¼d`¾ôÞ$rÃ"~¿éãËVI÷…`dâ’ÚÎBmX™4ˆÆÅ^6ˆÙE\„Ø…×¥|@8TÛHP¹-XˆÛ8W[ãØ«LŒ¤B.Ù{b"ìË*ô¼j•EFÓÓÕÒˆp‚*€‚/ Ä \0+](°Å‡,yxµˆ%0°¥RP[ð„)xŸd+QDWÌe¸TàÏSâ¼T?  Ÿì$žadãÙŽ/3f‡y‚  &À$8‚ ˜jP… j¦jƇ À‡3H^øp>p^‡^` +VR‡Hî]ǵc]½­óÖn± (…h`#`oˆU˜€Un&è pƒ4À5„FèoVƒtvd5…OÛÀ½ä½Ô yðg”xƒ3`ˆŽÅèKé‘FÔ’6é•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba”ƒ3>l‘±ÛÇ#¯…Û”–ܱ:í²\œ˜3€½}= ÖëŸèÑ|?7t|ºô釥÷½;6jس#Ú^Ûôlס{KNü,套é&Ô¼r7oÕS'Æ ýöséÕ£cŸ.Ý7tÆÛ{‡ÿÏ>qüwááec÷ÞýzjÔY§gÿ¾¸ýûTÓL޹,þÿ(à€^¤_Mb)WO6èàƒFxÕaÙ„Ùr J¨á†vèaFZ–`Ì}hâ‰(¦`ˆüÑå_VâÅÈE¿‘‡‘pUá8cG:Øã]6²õ£v! IX}ð‘gä„•5)¢… ¾˜ÒzG®ÝŽXúFäŽã¶%Ù‘¦’çi¹¥Œ]Êh’£yÙ¦™YŠ©Ývq–Ù%œpþ¨æœ…áØž›uf9£ši h ô±Y^Ÿ†·ètJ9YY‹R•¨"IK^ª)™RåZ,Žè¢¥Wu:e£è™º(GÒ¤ªnå¹릴æ')r¢Vš!V{&z]’T~©›jƒÕ8ì ÕGgŒŒâFäžw¾I¬ ÝAº¦µxâ)¦ŽÕÖvÞ²†Ö*îC¡BIâ®ã¦«îºìnTîMç¶+ï¼ôÊû.TQ’ ¬ÆÊÇ¥³y~fì››éè™Ä–y,—É&Œe³g;ç¿[y0¿Ï ú°¬%g_ú©°²kžÙñwÎBlZÊv:<ìÈ,+\°Áé”’¥o½ÿÍÊc¸EùL”Ð)(BÊÐ’(´¡¨»Èù$snO¢Íè[(š³`jô£ ÈCCJR†Ž´¤(­#1²‡†”¡!ˆp2&úK5^´'AÐBDv‚+8¤!0A 2Ô”õDv¸Ã8r˜4¤PE0Ôµ¯è™5¯¹˜½\S[_••¸®nõU[½QyèU6&+­ÍÆ8šÁÈ3ÖÔ¢ÿÛÈ9L`˜@êDº`Õ8d !(9ð±<ÄÖpÈJ uà#?pH°qGV•F–¼ç0± & 8>l°Š ´bøX>`K8¤jÆðqÛ6¬ 9ég‡+Oá÷¸é4.r—ËLå2÷¹€ÿt.t§kǧÚ4¯õË!…ÄOzFQ—TeÆÆëð–/‰YääÓªô‘÷½‰b–¢¨›é ßM~ã6Ðí¦»­YŸx‹”^ Ï9…ì ³l»ºÒ7)ö}°„cá [Ø{¾°†›–á {˜gþ°ˆÛâF^ɇýæ˜þ‹Clm ‹|a,}Å'Ó±¸$,Ýܸ&Jð¤Ø•>–^yQ¥à"¦U^* l^«çÈ?NÒ6Ù¶-j¥ÄÙ¥rÛŠ(1&GR”›”±¿²øD#æz¯¼Ò–5`ô°™šœü2™9Hç*k“Ë4;s—±‰¿7+©}ŒZ±œ³‚åºV…FLÿ”Ëû2ù®˜Å…³ñ7£G'ŠKîsñ 5ßÒM@ µ£k¬,¯Iq‰>Iñª¬Ëõé9•k®“.÷,ä¼ ‰nÖ¯;8ëK«W¼¤Ù1ØfíM &ï©>´²×i]¼zT@æqðùŽ¢¿÷õYÆñ´')·Ém{ʰ´ú¾:+ºÙøÂ\ƒ49KS.Ø„FÜòª‹=ʈ¡‰Ø=:ÝÉÔí:Ã{e¾ƒ"Õ2¨¿VúzÍuv÷£×»ï¼fá /K’½ìŠwˆâ¼Â±«`I?Žï‘hÕ~¤Qf5: €ÓÜ-Áø1Í<{ƒp€úÖàžB… ñÝOö2ÛBng0Ošå÷¹°mýryƒÎ«v_À—®s»ÙœÏw.ŠÊ-Nuxÿ¢i_#yu˜ä :¿Kœñ·Kô¾áïÖ”Vz½QšuS‚t;Ù‡2V¿õ”²dòÜaœ÷ Škêé:ù/Éi÷ðUO<%¯59"ÒËjÓâoH)fˆ§]æE¿^œÅ@ˆG2òß;QLJÐÛ0ƒ #¢ ¨iá½å÷û)}(ùþ–TŒWœ0 _nÅ?¾¾¹W÷¦²y¿nˆøY&2_™ïkãñÔ¦ù«FüŠpZd:¶cŽz£Óó¥—>ìQH@ñ‹ðá{ z|FùtbBß÷ð'ÎûãOÿÇÌ¿þøWËýóÏÿ®ìC¼éåmˆÍn~qj…g/ÁwN‚ÓiÙ¶EšÔe›‡mP·zE‡gI×)ìÆo„Âo™ÔbÜäpà'rak·t€_&<µôzåG<¶$i&hÿw"ØÍÕ€7%5¥¦L䆃Rƒnwl%hvŠ!‚xyQç‚,8‚9&n@È!BF7…Ù£ƒØe…Z„Xøl[ø…2…`8†+ÿ!†dx†&a†h¸†!¡†lø†uW鿀pX‡ÆÑ…Qe‡z¨Bx˜u{ø‡L"‡Xçx€XˆRׇ„hˆŠh9ˆˆG‹øˆe؈~‰…X÷à‚Ð /`ð  ¥W… %`UVõVÅW&ÐòÀWYPTøpU}U‹BÐ9ðWE‰VÀà@`ðpQP)ÐWBõWæ1 ¨ Ò  `) ¡ % ͈3 T@°‹øÐ¼¦p‹AÕ‹&öUXswdMG7Vjv«„fõghEXÓD¿&lµ5/twúøO’Ø)03¾$ø’9‘(á†y†y‘c˜‘ù…Ù‘Zø‘ …"9’8ÿ8u8¦qFnç…^`÷Ž.iA-i’^!‘Yvo?¨h“€9éiˆsÕD“w(ˆçˆÖ&zÞõnìew‚_ê±s@DeKy_G¨w¶Ós\…:mÖAL)‰’\¹u¿Bm–¦JS9E6d&öã- ·p>Ö^8g–lù•6ù€O¹• §kŸ¤¶k¯‘–ùUé—|év¹CLô^d`†é”X’B‰”Y™ôw™˜ š¹™Š×™žYu š7š¤¹l¦yš‡–šª9b¬ÙšF™ai|È*=é$w›â9þ¥›Š6„GH„ç#ðådC‰F•‡< +3‡É¢R–LH&e"jcm aÊ=ñ ›¸IŸÿˆœPå‡H ’²é›¶é–JFØY€ZgIRŠlEZ*Q ŸÄÉk j0ñxtÚå)uþ&k­GMLˆ^¥$~ðø¦1JPø\Qºc/÷È—„\v~LGyÞrŸÐÂHp'0Àö¡ècÒäiIé¨ây¡–§œv¢îÑh¡æ§°äbô£žJw1æj s–:¤6J¥×É^‡šiŒæt[ªQ¯ù¤\J”º'«#«¶*a¸Zxx¤ŒúªÂ)¡’ªÐôªc¤ŸåÉm§2¬KzÉé¤f1Äê}ß×-1s€3út:žóöh©—¦ ¤£:æsÞÔ5t§dc³v®:}Û$jœ$®eUôžñÿj©aל¤¬qȤ×å…Ä®@6vd)  Z{CDv¤];vÝ™ŸÆ¦2«¯‘z‹K;¨Èƒ¬w󥆪›}yBöšw ;DJ«ÂG\¼ç«Ó #*I\»š«Ô³2 ]4›¬Rª|úêB ·m,¬É}ÊJ¦)­( °T®Ÿó©Ôg~º­zC‚@ÚJµ£pJKHbsJ[¢Nˆµf*kêZ=íW°ä7~)è´7ïΦœ=Ó°öš6K<»5ìWoëŸgZ®bûVk'(H¯Q ²÷Š7Cw¯—žw©b©fˆ»¦ßW¦»¸ñƸq;7ÛqöÑ–:›N?;G—[³Èõ¹K`˜;ƒ z§µ œÂêžäJs“7?Ý£±éÿ"ºº3¶1Öc#+»f«„cÛƒÚ‡¦cÚo›W,z Ø¤ç¦Úç^±t~}÷zÛÚ¹àÓ¥¿Jp5{ow°•û¼jY»”Ö±ã%Vj'µ§®nÊwr÷¸°±öùºº_+¾d‹¸ V«û!´+;ëFÒëqTº¿m”¿ {T<À)UÀ¤ú›Aëm¨À¦»€&¶H&qrýœþûÀaH½ú£¿Z{R+n´i Lä;¼õi–‚Ö[s*̵šú+è—`è“»)ƒzÛ@®V¸» |(K‡–Ž›CÃú´Ù©‡ ¿­`~-èÁNü·×v±‡ŸíYDYÛt{®Ü± pÛËvÝT¿ÑûÅúÃ;øq|º2kª5iÆYhÀ”ˆÀã†ÁA£€ûâ|Sº¬Xn¨û|L>h ½žw{æÊKâºÂëêkIçµê;Æqê¢òup¶K±·›®•f½“]Lô›±n+Ý9:ø»!8éG·h³§|¶X|fK;” ïëdVÔŸøêÉi\/r|¿ZXÁ÷åË·Épü‡»<̰*ÌÆl‡ÅœÌµÌÌ QÎüÌ&ÿ…ÌÒ¼†Ñ\ÍÕ™/ÛÀÌËZjÁÚ¦Æ(*xÁlÇósHÝ\‘Ô¼’É¡ñEcñõ-ëÇÁw‰&šÏòʾšÛ-Jö'îÐO{Cæ5d¢–Åó;“ÝÐñœ¯pcÏó,8ûüÏ­¤Çé¬MšˆœÃÆÜu£”Ì 3Ù¨ ,ÐÕ ÏãY¶*]jÈ‹=®×„*MÊ.ü­Ûk)mÒ¨wE#o¸Ë¼@;%É_Kè®ÖÇÐ>=faÐ_[¯¶ÄY¬ÔTÒ|Wº¼-6¯ÍÒs¢ýÈóƒ0F,EíÏF¶ÎòÙÎb”ËØ< ×¼Ö•§ \±6x›f¤AMÖ/–ÕѲÓ'n­ÏZÑߥÕrƒ× ½ÍnýpÝ¡ ÔÊüÒô\Ö ](0¸Ð>‰du ›Q ¯F{Êùê–»–> ÍgQ]>bDéÁ¼…zØ ‚Öót٪جýÚ@ØÖ²íÇn쯵†´Ûó´Û¼ýN¾ýÛíÜÂ\¬±]ÜñGÜÈNʽÜ9xÛlëÜ$yÜÒ-šÔ]Ý¥yÝØšÚ½Ý«ÙÝÞíšàÞ±9Þä½aÍ}ÞÕÝЪÞÉmÞîjðß–ÞôÀó}ß%q ¡ aßú]+-…x. Î˘ß>Pìp{P b@ßàhmU" é𨀊´èX@R"X ŽêPU®G pJeŒ À ÿÎÞ½Š§8âRWj­)AÞÄU @@   ®ãŽØ)ÐŒ¹`UAåãQ=^ϰ®G¹à!saµ˜B˜^é¾'Ö¢ˆÚVk^æ! )9óµ¿òÌ òàTRÞB§˜X¡§ØWQ¯€ ¡ &€ &°¦@ ¦€4YD… )^‹K` œXA°lŸg™|ËJöHêiW)k%êYYwé•ieæ±kê"A ¦ÅQ±0é@[¡[¼eÊEY¨èŽ1>OH087$@0ªZÀ °íø0ø€gÐ Àp[f°[gà Áåà˳è5 ÁÑë.bÒ¤ïn”ñŽÞäDïí}ïâ­úïü®aóÞ¯Qï“ðòíïïð Ï?ÿnï_ßù¾ð?ñß­ðkËðñÓ5ðñ/ïòû>òºZòs"òø®ñ+Ÿ-ïò³ ñò4ÿñ*u3ÆCžó9ÿnó&ßðÚ—à„Ñl‰ÑŸ‚ôŠù˦j´ê ò1=¯“¬šq }ξÚæ)™]OßRÏó8”PgôS •}ùõA9’föïü–c¹ö0º£Xéö˜úó™¹óî>öqM²ã*d„™Ð‰j¨u™©2|øJ_`ˆéÙ•løÊ#•ƒiœö{Oôowݾ_šÊ¦s–ÊöN™ùJ^º—^_˜u¿ù +””¯ U¯j³™ùjùjk VÚhæi—.y˜jßõŸêb…'í‹­¯¯õ²ú»o§d—kŸ–ºöã÷Viú•Í]‰yúÚO‘ÇOÉ_ý¦_úŠ{—tcÛ?ûÍÿO×?¹¡r¿øÔÿÙÆôoøý,Ï÷î,÷F¶¢LiÓÀ@ø $ˆ0¡@‚ .dè0âÀƒ+2¼˜1#ÄŠRü(QcGI‚,i1¤Ã†"^DéÒãHš5mÞÄ™SçNž=}þThOZøŠ5š´h¦LñyªÁMøª¥9fJ…ZCŽôØR¤F±c»²,v¡V±:˾üJ®Í·[Êõ —íÝ­^±þXð`Â… _DšXéÓ¦PK=XõêaÊ•-_ÆœYófÎ=ö¬X4ã¦Sµ ZõjÖ­]¿†[¶ëÑŠ?Æ9õlÞ½}ÿ\øpžµß6cõdâÍ?‡]úô‘Æ‘"Ï=55sêݽ^üPëI±'_>^ýzöíÝ/¿´qrí’ßßÇŸ_ÿþÁñI;ÍN7îø#°@|Ï¿órKA„0BømAÈ”0C 7ä0ÿ3ç ÃG$±Dsú°´·;±E_1EÑcFoÄq?¬o·2Èîv¤O@!D2É߈\Ñ>%Ÿ„2ÊΘ¤ÑI)¯Ä2KÀ¨d°F-¿3L›¸¼ÐËè¸ÊʬñÐĉM$Ý N’‚’“C2O3³5®Ô2 ,»Ô¼)-@7ƒ³N?ñ34ÐAUT¶DíS¡¿Þ:©-Iƒ»S¹<õtI 9#¥kÑœ ÔOO4£Fc{TÔSAJN6.Ó̯4%¥u%Žzh®­|µ,b‰6Ycƒ…ˆR?ùzV¯e™•éRjÿ„VUg©=k/K¹åvZ¼^úv[s—…ÔÿXq·í‹Q¹`íÍV# ·M–5%eá-ÖZwMÚÓ¬˜¬xN4) Ø-@ûVÕH{=­SXb‚M˜Ñ: ­öÒˆîócR3¹â4çâ^Þä1×oG-ˆV};v8&v/uX’qžVŠ)ݹ¯l_õ·äW)î–¯ž®+ß?k"ÙÙ€_nØi~cËfu]-z麸fzW+MÕ0–7uìšåg£a.zm³6¹«†N™è®Vóc§Öûè§e¥™ð»é¶:ðÄß6ñ±Wp•ÁŠœáÇW¦0s ñ´’UÀ%[ªC6é‚ÉVËñk‘ÕºtÓ9VzÚ¥íF}N­ÂÑB÷v×W¿÷¯ó^üÜr¦ymru½÷Úg®—¶Ìm±J,[Ì0Õ.{ÙÎî\Èê­×ò{ΆÆôùã¢ï²{ð×gÿIî§o?~ùÿ|×ÕÄ ÿéô÷ÿùí4ßuÐW&õ±Æ?ñò§¶¯Ùë_á™]`ø¿áÔÏQÚ“à Ö‘ËÆM¬šx&5R0:ôÜð²•;Kݬqa{]è.ÖBWÍ®u¿jÞß:&»ä!ëd+ôí ÅÂßñi&,_y6§©ÞOu‡‹\¥Bx¸Ó‰ìˆÚ2ÙÔNW3¬UÍoT´Ø»Äg9«¥«‹î²"¥ƒBØdLxBläöu5–Œx»ÝØåBm=„t±Û] å:‡¯Cš¡ÃÆ×àí‰/Œâä:¬BQl–”aÔ°÷+Où¬o|›¢'—ȸq±”’Tä’hžrÿ~œ¢!Ù¶µNR&/k›òX·G”‘y=Ä¡èî’Ã]FKX?“-YDRB.•­aä3¥9MüD“š×Äfx¬™Mnvó9Ûôf8ůUÊGEÒ³ß8Õ¹ÎÕ€“ï„§‡ÊùÍ Q%äÉóùÉÊ|øD¥uµþéó€Ù¢oÜéz B!#@ÉœIÔ5U|è)c%ªeÔ„I(9•ØJ&¾‚Õ’–yK8òS†*Ñáý™R‰‹ƒ»bãXÊR;Æ#y¹bëxµ5˜Kh¾êyiÄ`1n³äå¡–i»¢2ëÝjç<—x«öD°™>…d³B°˜zíŒt¨¬é§¾ºV‰ùSo_ýiN·8+²£>m(ãâJÂQ†qn}ÕcñV,ªõ¬UUÍB»ãÕîNf;$ßOýØLʶU°x…l`¿è—ž=ÖxÅ›+?ïu׊5´•C)Æ2Ë8ϦՎ¿$k{Ú¸¶¥–˜Q,uØØî5n3Kg3›W³–·‡ŒK$—ù¸Ÿ%.¯Á¥í]‹[ÊÓ.©®.a#f¨ì^W¯ëhbÿµJR®²g·Å‚#ÏÙÁNu½Ø²åYwÕ=¾Ô˜6ªz-rC¾Îð½IkD.÷KÚMkê&ÖÜ{Ó¥*©•=Ii›:aÐä6ž=ŒA8›œ^80öpˆEüØÄ'®I‰Q¼b«˜Å/±‹!¤a C 5¾ ŽsìуÊs¤çLŸIÛa…QtRýß]zIÏT’šÁ±Žo"ã8i0ÁÆ5ê¸Èv§â´¨Ékn{éÝ™æw¯Êjmd‘fVª.ubT0SëT2Ï„]æL‘)U¤¾™±fÎ2g¨\åó÷²”bÁ›ZÀz³¦t«äYÆCƒN¬”Ö®hWÿ`Lû+´ÓõâlEÅîšÖ¯e­ôeÝ÷¹–s«MÝYïs÷½#$s `ECv¾Cµí¡!lÊßÖúÑ\vm¨QÝhÇ;¡»F´eVÝ¿¿:zÑÌö´ iøÚ´STD¬2àeû­£&c¿@M\goú˧Îd»I½dßêuÀ©–öxL@!ë¶t 90F›èýöYÖƒ«U¯6ÇhS8vdùì©ÕüÔ÷RÕ¿·¼7X“É·1 M{Æs–;NnŠc<à<õU„¥<&}Ï(Èé|ÏÊ3Cä€"Ç6¾¹4§ cž«sç=z7^e‹n¸¿XÑße¾c%…—DCç0Í‹lt&|c8”ûÜhá–ìÒVëPÎyÔ+£–׳e U&Áíªí`4̨þ·‚ëÌfdGàP]Õ±aˆ˜ÑôÌmÇ)îœfÅŠA5äs¼ÚþîAý‚æ~5råö\I»»ò„”¯°å*ùycyï1[I·?ßè}…ÔÒçúfXêzK¸CÿŽ÷äs¸Üx;sÙ\¿¼¹ß æÍóÑmß훽½MIÒ–Þ–ô UŸztç®ñe/ÒÙÑ.{{ºõN7õäX/ëãÇöðy·þÁp?üÍë=ͪõ<ãNl×·ɯ‡~“úíoÚSŒ¯¯éqy÷º‹¼ðºK¹û2,Î"¶ >ÅS9Ðòµÿª½þ ´‚ûŠ•ê¼Á{*“: =T ;ðYº©s ­»¦ ºT$$ÁüDÁddÁ ± ¤Á(¨R,ºÞ²ºöÁ쉰šëA#C:Ç©1뢺 ë>LB—ùHcBtŽü u³¬ÐK´ZÚ.ËâšÝêµÚÿ²»Œ%aÂ5¶ä:ª=C@235¦6K»#@ Ĭ¶{3ÔÒ¢žú»•ÚÀ Â&Ó4ûj=ü3|¾Þ6vÄL¿R{2æ,H´¶%<¼Oã¨j>Dä<µƒ+÷ã6Uú1—ã7˜;“@´@þãAÑÀòÂÜ>b[*9ªöʼSŠ®Ùó«í£Ä8zÅѵQ³ª²ÅCÚÂjË>P\¥­²'ððÒº:îR@ÊÓ=´:ÆJ #ìäÛc¿l4½µsE× ¥ð{$æ’7cœFÔ»40Ì>i|?ìŒzy67[ÅT܏ޒÇϪ-¶ËG3œ0öG= *+ã<ö ©‘ãLj#¿|RHüz° Ú²œ¨¸¸ëƒ/ w$‹¼:$ „ ŒäÈDÉ’¤ŸøC' ÂØ3¤ëì:"Œ'’Ž•¬ÂZt›ì ˨”)7Û ÿA”|¹5‘;1c›q»ª3DJò™£bD7SCdË®5³©.{À· Àг‚‹ÊÅSJ DÊσCÏr/4šÄ ]üÄD Ȇ ª:Ã6°?µ¤¾ñ‹ÄK¶u¼,q´¡.ú¢Â¢KBK¦›ÄµŒ3¿ƒ¦=Oi-N£Fõû˼l¶ôÕrEC -Ng-?E} °µÜ)áZ³­ÍÐu×Uý[ˆ ®d×¢ŒX٭݃ÝVMÝË5e„Q'ºY.kE•]Ùÿ³À£»C­¬Àgå5Üݯí]Ì!ÛÞô0Ô^ö˜ZÁÞìUíõ^ËßðµÛñ%_­5ßó…ÚôU_¦eßö-Ú÷…ß•ßùeÑúµßÅßüÑýå_õßÿÕÐ` %àvÐF`ZUà&Ðv`…àæÏ ¦`ü´à ¦Ï Ö`øäàfÏaóá6É6a‘DáæÈfátá^Á–á¤áÁÆa Óáæ¹öáâ ^±!&âÿ3â#ޱÕUb Nâ&ö°'†â™dâ)F`)¶bvÂâ,ö¹*æbþÝâ/§0c¡óâ2†_2Fc)‰‡ƒð†ƒhcŸPã5Æ’F0dÚ3¦c ƒà|ø Øx8F =Þcu‡‹È|Hˆ€h|胋AäDFÐ;(|†AP°…1È|XC8äêUÏʘMî9{x‡m0†GP„C„=؃ €0BPGˆ„dèBƉ£†@È0  .È0(ƒ(À‡påxâ„=Ð]KÈcUfМ ‚`ç0u8ˆp0`gk®(00‡T8tÈæ |Èæƒ°foþfvr€ðƒ\&0È 1Dž‡|0wÎ狘è¨h(iÈY ˆm>ˆÈ‚‰žg{ngk8hqJ˜„9ˆ € €Iÿ!wòf|…Š“ÚX?úWÆt\•ØÓýhž¬ù\®4&|8¤Þ-³‹/Yj¸pƒ®Æ§…Ò…Z€X¸hwfgQŽ`¥ê…AÄNÊ— á)¨¶]‚k|‘k½æµãÙkºŽk”i:¨©Œ‡Š… jfvv–çœÈ{惦†Èƒ0…Y¨†%…[À‡ypk|x؃] ‚~¢ê¸æ «ž,¿vX•lmØfÌ×níÅ”í«–í¹j¨†‰Ülêym¢/tÑŒÀç ^ëŒàèy‰]ÀhÀ S@on0uðæ€…nþSpo6ÿêö àVo‚ÍêÚÖmØÍö®íÛžïaúmÊé퉱ê÷nºÎêÊíHܶíÙp1'¨(ø˜gvöŒ°‚Ð…r`f|È‚‡W°æøƒXPƒ`fz k6 0O˜‚gÈ rÙ2ÂF¼›³¹ëà&XÛî3û"K­ jYµŠ’4Š'˜ `H‚#˜€  U˜€Pr Hr|˜|8ƒ4à…_¨ò3¨òuè…êÈäŒHÆ6é|>ïïÐǦ¦¦oš€Rˆ&0&˜rƒX… X…ò<Ÿ7H|Pƒ`èó>§r5ðräÖÜšðffçkˆéœr‡9ç‰78š˜ãFßMC^LGß/çô¦õ€;aolserver4-4.5.1/docs/intro/tcl2k/html/img064.gif0000644000175000017500000002470507363640503021210 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ‹¨¯HÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba’‡õ%6ÜWqc·#KžlnS[rÇê´Ëò0_=?ÝW4è‡;>½:âçÆ‹M7T-[ðhŒª÷ÞnM¹·ïßi-/ÍL7!畹Q~;¹i溙'~Í»újèÊ¥_”>xöríÀËÿŸT8MâšË’_Ͼ½û÷áÍ×[¼.OøøóëßÏ?¨ü°6ifÜ}ýhà&ØÐ˜Ñ—Þq F(á„FÆ zt©§m»qÔ!EÔeÔá‡ÛuÇXr>‘ˆkÙ±HÚnŸÝÅZi.Ф"Z!:öÑÕ8Ô…f!J؉xÚ`°ÕH£Ž¤y§Ýw…=–$“M:YäD*~·"x×M©Ü—nÅi¨ }jÔ¨…ö¸'Šºw)T‹wi‰!ŽHçšRÖiˆ·VYè¨_¶¨&•z™¸fš¤ Š¬žÌ¶ªg®s2;ì’Ï‚šíÊy›´ÇR ¦¡äšÉ瓬úwÙº *ši¥[Â{`º½™*ㄯÖ7 ¼üöëï¿!å+ }lðÁ «¦7ìðÃýÿ)ü.ÄWÜž©Ë…d¯¥ì^†¡T²Z,òÈg%‹[©#™Œ”ÄB2LòË0Ÿjcg3_Å2È.ǬóÎ)©¼P>FÕÍd…ÌóÑHw4ˆT-½—R$ÎIWmµFN?}UÖ®q,ßÇEç|õØ)ã™'j]ãjöÚ¡å9ãÙn¿}æÚ\ 6TÝ%áݶPDo&6Ù€ëg¬_ys¥7Û>õ½oàŒ× Û´hÏÍ6h£-4¹mKN3¯lŽxKŠÜøè[ÓK:[¡3zzÅ¿¶îúÅQÄ.ûì´×.»ç$§n4bW"gùun ·ÝGêHy®¥‰i·Ð¿#i]#~nîÌI½ÆAÅöÜÿwïý÷Ü_o±îæúÆ'‰ï»Áê§½žöàÇûwcE=ù?¡¿ºZôÿNüò `ø"S®þÍ)c"Á_L·?ßpx Ô˜¨F¢À”5çÜZ—Î×:&epéëÙ†&˜À¨gja[ ô0˜Áü=ƒ0ô RÌä¿19ÉlÑßv6è½ho.a ¿†B¿ñ.R $!å2פéD‰MͱŽûâV¬'zFxüÛ í$=¬ÉK^\_á€öÅ2΂&œ»ZÖBŠo‹ì⎒T9s n<4‘¡°è JÎy-ÒÝC€¥@˜bcÒ¬ˆ¼âáÑmÕ!S ßw—6š„…Œ9ÿI-Y3Nzr2›ü¤(Gy"ýAˆk¤)WÙ¸Êmk=¡d¥,-F+Ÿ1ÐB‡lW"U9Ë I’xÀ"ž47LË͘5ìU§#LLÚ(YÛä¦<ÝóNÅsžðñ&…ÙCv’{[âåhN~sŸÃ«çèî‰Ï†:( }¨D'ªÉ\‚͈ͨFQÑz””ÆpHr††(Â!ÊØHGG.D¤!È‚CJ” !7ý¨N†‡<\`b Ci*‚›–À¦%ˆ…xôIt†krȤ©‘ê6Pqv1ªL$?'¹3™DÄ(Ç3ô¶R‡¤Ã& ôAS›Nä GMCª‚ C+àÁCL€ ‡,¡"`‡>Bð‡LA•$äN=ÔÎYN@½`‚˜0tèí˜À+& f胳ÃôÁ†a¤A£}CÜ ‘².öµu-lgëPÙÒö¶Ü´-nw+ÿKÝòö·¢ô-Ö°ÅJ26Èsr¶Ü*×XoRZ–`ôUàÂL¸ÖÕ¹¢óC½1^«r®x£ô-:Z¹ÔU¨u †Ýõºwuí}¯|ßùÚ÷jõ½¯~–ßýú÷º-ââDu¼Ì)I4΂’y3‰+: î—ÚÚ“³¬GG䉸ÍÒÍ„¹…9å…I\ÐñRåÔ%B¡ˆÄÕz°¹²­ã7“z„p‰…eâêv¤¿= •¸¬Õ-%a‘Ããýî %ÃZ>kÇÕ"Tvˆ ¥áž(¼C~žŽ·Û,ëJÃ&ï†O¬Ìoi9]jºãU{•\Äa˜6~K€S™Âÿºy8öËsÒÛ§Ç7Ñ»\žžiÈ;7RKv.Ó¸hTK;«8‰Æsâ.OË ޳rÌ!:ÉÛ¢.‹ßx`;*IÐ 4D×¼Ë68r~ê²,'r®ÑD¦Éœj7qÂH¶Õ’W],9ÈÆì“”™Üe*ózÁ%Ú²°3,aLë:ÊǦr™W}ÐH« •¥Æè›·Ý¸8sûÛ #5¬&îrWÍÛæþï-¸ª4{-pºç½UÆŠ¨“fA7½uŠ;ñõ[+úÞ7E=çL‚[ÿ%ào¨Á‹²p£ <áÖlø%X”‡C|^’‘ø¬(Î7qëKt¿Ø?=ØåA.¯ªç¬j:WoÀlÎSøNœÇ¦ºo*±!d¸ÒpsÐÍ|a6§gB‡ŽÐä]8™î+ÖòjÆœ´d=g‰ÅƒŽ4æÜŧ›:ÕyÓ=2ìÞ¯¾§^y¡›ƒbä¡ÿT~Îà3åÍf9:Èìuçà=ŠéÂ.@ù•½—–îºÕŒíq+2Ç¿*ÏøÆ;þñ|ï÷òÿõ½ï·  Yø×<Ç[Ÿ¢/†—Ë“=óeÛ¼PNîK2:ô–üŠú¬rÞ¹ù¦t=jò—M—Ô8Áy¹¥t«j/Þõ^ÈÕwžæ»Û=6Ýý[NË>ø²¬=‡ˆ{6k{÷y£¾ïäfU·ÜŸZ=þ:û©ýýþñØ¿÷Ú™¾ò–'¿üê¬6:ºþúc5õY;Z{Ä#{³çPí'z1€ÂvD'Pu§ H]¸Õuï&ñ¦{Ø€h]2f|À‚!¸X´R ÿ&Ø{ƒ—yƵ16„M+Â+hs¿”ƒ’|JW@Ýõ€J—~À3‚‚&iígdF!7hnm§XBè„…î„MÉv0K(p:8c­áC–DËç{ =PÈG~Äp2(WnMFOè†Q˜XS8kHoYèbü„Å¥c'ÇLaȇc¸LFgC˜†S‡'˜ˆ+Ãz‡§ˆŽ˜ˆøˆ’ø‘8‰–xùà„ð /`ð’  ¥H¥ %pTGõG…V&Ðô€V[Sú€Tiu‹BÐ9°Vke‰'XÀ@bðp7ƈ¼$)V6µVŠèPQ ª° Ô ¢`) Á %0 Ѩ3`S@Ћúо¨‹5õ‹È¡v5wÜ"ÿ!ôhfVu†>ˆûTr;H‚&W$ƒƒçpÎhj‘309ŒÉ•8‘É}˜{Ÿw‘©Ù‘ ™’$I#Y’(ù'™’)¹’,Y’ÿ‡hW*ƒuye®7“$~/‰: ù}rV`ƒf?Y”€§2ÍÕ““„Æaµæ\I9dQ¹nS‰lЕ3ˆ”饔*ø“òf”_f•A&dKGR¤dÐIM‰–ïG• tA†È•”蕈xÚµkZ¦…»ExÉ–Ÿ6–ly–_'˜‰•r ‰t¹‘‡¹˜*á’Œ)‘Žù˜–™’)‰”Y™Žx™˜™ˆš¹™!Ø™žÙ š°7š¤¹u.c<Ény)]îךGVv"cײl½†= z7es¤wµÇ”-èHWfkÄb›©v#;†a¹†œTøJÍ––Vl±ækU6œÑé–±‰k²ÖIœ7„dIȚŹ—ÒÖœáÉcSfl ö…Ç©L ù|@'#ÁimÊEÇÆuX–œB)Ÿ”V…Ó‰i…¹l¶öaHY=àòj¬–åéœvž ZŸ—£+&fÛù‰Æž%ölýymÝ—m_I”ÏIˆ©`åuh šCæ\"¢ :i;  º%xèU( iöùgå9b–#&ZJó kÂÒa̦Ä&“œ–ev¢Ö£çž­‚«yš*ÿ•˜Ñ¥TêRZ>¿ñ¤—@3Uí£¥®·Ÿ*$£š>ÙÃ¥•q¥]!%ÏɦjÙ`ÆÙ ½V›ùI7b§‘†@jé¢ özÞ‰—(ªjÊYlìY›ÀÆŠŸèi ÄFÓF^r  É¥§`šKˆdxÏè¡àIŸŽ§¾¤þ b¼ù¡ky ¦ª…ˉ“œúk h¢*aÞi¨é‰ ¬¤¡z`ÕYƒÖ£©:.é)¶<í¹¡˜ÊÖH *« Š,UĨ±šƒ®ÖhÍÊ„&-HƒŠ­^*iCèƒæÙ¢Ó¹hù¹œÓÊŸ}ö\Š—£—©`ÌZ§d¢£¡¶¤ÄêyS*UD8[6~¹T\Z©Ó¤¦U°iʤ(°«’{° » »°kš›n±å6±‹ 5I“’a±›û¡.ç‘ Û±«s8Tu^1²$8÷š(³»²„²4+6£²2[u5‹;K¯é}š³]Õ³—D´2G°™*´:Ó²)b´Rÿ‡³J;2L+|—Q³ŠµóoWµ>{µy¯ZË>ص/û#P;¶3µ2ãµs‰´Æª¶ÛzFm[?nÛ1«ˆy¢"–ýÔTt瀄ioMk¶!«¡?Ë¡u)·ãA_€NK{ë¸0w¶Í—¸G[¯Ð‡¥ZÛ†EK$Ìg³P—·ˆ’¶Ž wýèC‡L2š…ì´¯Nw~Ó3¹ ¶@Û¸–DB7‘§¸¸Ë¸Y»»0‰º‹ ¹ô¶³¼µƒ¦Ki¼‡ Gòç¼)xÁ¼Ø›;S¹5ƳsK’¯zù†Ìuw£G½6bz„¾ûp‰÷rôH¸öØ<« wu'''ƒ»tìK»eÛnx} ¢¾~‡±þZÞ†¢læÅ…$§l)Gæ×½}–ƒ?–tóÛ4x÷¸yËÃ«Òø„ÎùfÒ0]²œÒ)]ÓVœ›ðDÓ:Í3÷[iœ¥.É?ý2H˜›CMxÿ]°ÇÛLỖ:X­¸§bˆ­…ˆ#ÝÆJ¼«ú‘ÓD,ÌôǺ¿LõlŽœ#ݯäɨ ÖgˆKý½oèÕøâÓG IíÖü×eÊw¤Âj^6†ÏœG…ÔÜÇ|œ¿¦ë¿>Ü×x-‘ì€LU·ò<Íî<|½LwDw/ÿ{ˆ“’s}M¥½~×vœ4©­Q€MEÂJØyÌ¿d8ˆˆ=Áä·ØB9“ŠLJ­ýQ•ÒLJÍÂ}Ç› L=Ö«»X¿M[§ qÍ­ÚòÝÒmMÔ]ݽtÝØÝ[£½ÝT§ÝÞ}4äàÉàÜ ÈM´áým#¥z. íí¤œÞEq»ÞßæyÐwð@vè=ÂöÊÏG%"°¡ ªh‹¡D@!lÕ! àúÀF…ߤÔyàSȸž0àÿ2\àÑŠ©èàk¸WóÜÇœQ—›ðf`М PßÞ¹Ñ)»pT5¥âq)^ÑÊ´BQŦ…êÍü´G®ÃL‚ÉM,W~ÜÃíâk H˜D à ”@ÝãQ<©XW¡©˜VS±  Á &  &°¨` ¨ 4PX8¥ ~‹K€ †ÎVAPyìËíj­×S>r®ëËöÑWX^ÑH=#a ’ÅQ³0ë@ÁYaZ¨õÄh^ÐXª(®QH087$@0¬PYà 0ìú0ú ið Â0ZhpZ‚i ­Õݳ.p¯20 ñÒÓzÿ‘{×nÔÙnsÛž»ÝÎÏßráθã^îxî3ìØ®îæ~HÜŽËðŽšò.îô^ïAÇî—îúþ™÷ŽîùþïÇïÖ>ðŸp_þžð¥ðíÞðoïæ1ïï>ñæ¶ðš!ñîßïoÐCÜñOÿ[ñø~ñ‚Gg´ËwiÂMü£»ìðO_Èx–†yf—c˜ªšÕ$o¥&/ð(ЮúºÓ¨*º©/˜FªòÏÔʯôQóQqó5| ¬gXI^VÉÄ~™¤?Í\Üô}Iõaõ9õ9ygN–·¹…# ›7ìôÞÕšÚK/p‰ö¬Þ1ïí–‹*•bÉ®©ER•>ö‡ŸË7I÷|ϰCñ!_öɸ|÷z_hyYwà‡Â>ù;ù _ô.ÿd ÿiS¿w¨Òù öù@¯x‚7ú¤ïjloÂfïiYÆ]ܺÉà)ÛÆ6gçÙ®_.û¹o»®Df/¬ÀÏôMÌÒ\_ø^/ÔgÚø‚‰Ñ¤ßüîø·o_àÿüãÿfå_ùç_éúëï^í/þï¿^ñOîóÿðîÿ¿Uÿ¡Oà@‚ D˜PáB† >„QâDŠ-^ĘQãFŽ=~Ò -}$M–DI²ÈÊ•úЏ„ùR`'}4EÞÄ™SçNž=}þT¨Ð“ESºdùRiÌ4m…UêTªU­^Å*ÕèÿV¤,™.Y3ëX²eÍžE›V­D®F“.…ÛTìZºuíÞÅ›W¯Â¶Gß~…öé^Â… Fœ8cß“ãÊ;XñdÊ•-_>Ë¥cÀ‚1ZôhšU& Ù)iÖ­]¿mºkËÇr%ÃÆ[÷îÌG¹rŽë™÷pâÅ÷” œ©ðã øü¶ôÔï>·®/;Äí<»ûLŽº6óªØ š¿ø!vöèªWϰ}|ó¡û¤ß°»}‚üúÇh;ë¨Ë/¢ÇBoÀû$:йƒ Ï«ñ"ÃJº¡kP#øÒ{Тøì0§ jÄ <ñ>3¢oDîBL >õ›QÄwÿжÎ(ɽ‡,Tà ýSð¿í R¾!¬@íœTèÃB²ÉdïI&›¤ÑD/µì/È \òɋԲJ+¯Tó (M¼rÍ,ÁärËóTp¾„Út’H?õ*ÇÚT›«:@©3É:äÍý„„EF¹\qQ;÷¼±Ò÷BüM;=2Å2}ÌÓG%'¥sQI¿LuMVO]oTN³Å#oµ4×K[ݲÓY5…Ð7a•‹GCãìRU\¿rR$›uSQe[-õÐhaÝ5Ö*ùœ’É}…ÖÕU³UMÇ¥öY`#óÚ^Ÿ­SE]Í]V]3Í«”ÛZÕí–(aÝoÇÕzµt‘×iY5Ý;ÝÍ®Èso\8Yr#¦øà]M uSL/†øRP¥F_Eu^K¾sLˆ=E9cF×õvF˜Áûׯ€ƒ3¶<™‡´6á[ñ„WNGûl3L n×V~ã\ã”™Fö^‘U:é3ëòPx‹F:ê’«µšg-úé}ÿ [O®45Ûš£¬c‚³’n»Ej{Âï6¬àüÖ p¾¯(o %p3<â¦â+'îlœXáA+öË‹lt¡»UÅ+r0_;³X ³B>žP¼b"ó¾X1/Rjv” ÙfÆÓHèpЋ ÊöDºpm=¡&µ&«£ñhH„"õèU?ü%H€®ÄRÓ¾†’Œ${eöZÙ?2NjíóÞÒÞ×›Ø<ƒ;å2»Õ1s'ÉÄ‹1{Wœ7)s-Õì›3‹§i&Кßg8¯ÒM5ŠÓœçD'OȉÉt¶Óï,%g3¨ÂÓž÷ÄçBÖ™O~ö3Ÿûôg@zN€Ô •\AºP†ÚM¡ …h D¹)ObñΛÅhFAÿóPvÔ£•£(-ZΖԤyáèIUʸ¥µ›Ñ ©%GÒ•Öô8ºTRì I@ÍTôy6êMÓCl5/¦:š);ƒºÔÑh³?n Q{*ÒŸ2Õª¤qêô3ÔÞLU¦¤éUÅš9ˆ«dIéXÕZ˜¬Ö‡"mÕZJÏc®Õ®yk^Ï:ιº­®w¬ZôÊ¢¨òÕ«H«R»Ø í•°ŽJZ;Ùò@ö±e¥Šd)»Ù¡ Ö9– Öaé:MΖ(ž jÕW½…Õ´¯h=¢ÚКѧõ„mn'Ûê𶌢õ+iu;\ŽÐ'Æå©m©Š[â6÷o¾ý,t‹ÉÚ K:׺’nt+WŒÿhöºß•OvµûV·µŠozÏ#ÞÔb(ÞUo|ãÊÞön·¶}¹í_å»ßùÚ7“ôÝ|ù{]îr÷¹þ¥™y«;`#÷´^ u“Êà˜*Æ›„KáéxÇ­PÕê3…é¡{ؽ¿UîWÓˆ^®¿÷rUŒ¹×©»’@q±!\XüìØ"n1YkL¢õ^,JnåÔSU¦äï6( ƒŒ6ÙÊ ñS_<ß%kuLZöñ;{bHyÊlµòÙ¬g¥XYLÎzñ›ßÜäâ^8Ì1ó™jà=Õ¹²dÆIžõ¼X 7ÁeÖðŠý]§ò¹¾‡t¢GÊâEFt^¦³‰d(wDЕ®ËÕŽDÅùLfBÞøT5U÷h«gé4G> êÕ}xÈYƱ–»lk^CõDLÆõxÁº;GdÖ´,¯/­ì83ûËÁnö¯½ÜãaǨØ96²cÔ°^‡­¿øjöÙœ¨pçï&ºÎµÿ’mm¿ÆÑºew»å-šxÏ{¡8]h½í=—öû¥–~N>p‚\à;œ¾÷m 7áË4xÄ%~p„*|ádò7•z͉w|àOœÅ/N£Œ¿úÝ8„BÊÙãqö¨¼â’®*qœyrì‚ÆáßrßR¾sž÷Üç<§yÂaÎ\¼V›ß}Æòe“ž©=µoødðsªWÝé‹ù.ñÍc.{ãË&²´ä약'ÍJ5’ö²\=ç©ììÖ§^uºýå žðlK¬w^‚;ÄU.r®q vtÙìºöú·Ø5·ÏÕ$yN;6÷º×½ñP)qKQŒßåê—Äšïíß½n¡Í^þdˆŸ6Ò¡îh›šõÿòå¹óøÙ …s”¯¼Õ.{vwèžk¿íLÞ£Ó‡Á}î^|a?9À¿nð]Šù­›ÔíÌÇòéŽ}?ÿ"Y¾ä¹_ÓëK]ûº¯5#Œ÷ ëßf«0í©|~ªŸ°öwã¡QØ}ÿ'-¿Ì¡¿å 5£±Õc‹ýs- ù?Î @ß@Ÿk@H3šÚYõK1ÄR´s›@Êz@*K¾ìÀ£ã·ð3+ßc¿ $<³”º´º¤ÀÿBÿÁ -þc‘ê5 *4ÀLÁIss³·íºî+D@cS@J{‘’7#e„ÃóâÀ!BâK=TãGHqDsQ=~ô²´+¼kzÇ#ÈðŠÇEDH1HœG?\F¢Ã¸ÓGÌS¼ä²Sk¥õÂ)i[Ÿr ÉÆ ÈœÄ9F„ÄÄãÅUÉ4ƈ”¶—,J$“Ä ;I…´Ä\@ã JŸÆg˹±»@Ô» ÄkG³ÛÉw³±RSÓs=µ+F´;_<•‘I¡ ½dŒ§”¾:t¼¯l²¡4˼DÀWd½_Û5‘ɲ]£Êµ ÌÚƒKŠÈ*:º¼@»¼ª¦ŒË…\0Å<·Ž„ºÀqDIÈÌ;{êʽøFäÉêFÃtæÊrCf|'î“D>|Ë$œÀßILÞˆD½bLJV¼ŒQ¼ÅlÉmüˆØ”M5œHµ›JÁ\͸ÑÍÞªOÂV*ZD§ÛF[3Îo;Nɼ'à¨ÎÄ΂N¦zÈîÄ'íÏò̬ï4Ïô< òTÏ O´`Ïö¬°ÑÌ0¹R;M¦+ªãèS\ôÒ=M¿Çs49S¾YT;H‚¼QCƒTÑÓL¥ÔB-ÑVÌR7+Ò²L¾\MT=Ò½<ÑÑÐĨÔD=½L”e«¼¤Btûµ,<¶$Æ{º¦³¦X²z=¢´UôKSåË.­N«LÖFÉà 'b¥µÅ lµ kÝAŒzU(µÏ{4ÔŒúV1Uÿf¼Ôž,ÀÉÔÑAm'nݯt}5OÃMU7ÆW UZ%ÕŠ¤ÎQEÕ`SU€]ÊÉÊ×=F~•457\­2]m³°[K´ô;·d¬ƒ¿x9Vëü×Õ[V&Ò·kV~…ÖŽm׌ÂXY×éÿ ×]YmÝ·”]Y •Ù™eКµYÿÄÙœ•ÏåYõôÙŸ5Ï Zñ$Ú¢ÅΣEZÅTÚ¥­Ã¦uZ𚇇˜Z<;רÙGePÓ¼DÔÔÚ™ð} ØyGxÃeȱ]Yx(ˆ=ЇE€H€wЇ?(ˆqp¨•ÛáʃcЇb(f€\(ƒmЇF@„·[¨tЍ‡Á­4|ˆ‡n@†H`„D„>èƒ €1C`H˜„eø¶m)³†@00°‡ƒ /0)(ЇÀ\ùò„>àÒLøÚz•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':ÿÎ7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùù,XÂ@ÿ‹˜¯HÁƒ9åS˜¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éb­|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba’‡ó%6ÜWqc‹‹ÝJžLY-ܦµäŽÕi—åa¾~~,ºïèÐÿF>tãŬ£Nýš´ìŽ‘÷Ú¾ ùq“ŽMuðÊÈ“o½¼T3Ý„Wç]ÚõìâO[×m=±kêÞ»_ÿ—½½·øÙ«»›ÿ.¾ú÷⪇·'Z¹ýûU™Ót¾¹,þÿ(à€^¤_Mb=WO6èàƒFxÕaÙ´t J¨á†vèaFf–`Ñ}hâ‰(¦`ˆüÑåŸV»í–Ý`ÉÉ8’„7J1ÒØŽWIUm¥©X‹#ºX"ïeÔ£p´E ¥`ÆçÛuWJéžiX¶—¥ZN9åyÉ×Zhf ç£cT¶©›–f¦¹%z]ê¸ã™Àåɦ˜{’)ŸzgÊ)&‘5¹!’*ø¢‘k¥'˜EAÊè¤D!z‰h£¤UqÊiPŸjD(ž¢Þ)T¨CVIiO–B¥è’AZe©j‘n¦É% YÒZh}{Ž)ë®nú h°3Jì­åÛ«^‚æª,©Æù ­¬@®i›Œ¦é‰ì{\®ÚR« bتޖkî¹g{á‚è¶ëî»ðJ¤î«™Ækï½ø~8/¦ùnej¿ÿXÿî¾JÖðQÿ¬ðI ŸH°T°.LTÃÒö Z‰ñÆ‚ ŒÙÇ"&ʯÄIeü‘ÉH¡Œ0Çfí¨ò¡ cÖ"Ä“ *c„âør¤,Û³ž«>LVÄ6µ³¨)mXL3íïÏOwì­ÐœÕ\´O眰҆ñ˜´CN‹ÄõÍg¹ìñ3mõÕwyö5Ãow¶Ô-C=¶ƒT‹ËöÄ8×ÙðÝ{y-¸I¦Î]²ÝgÇŒ Èsˆm‘¯ñÆ,B9*`n^à­i’ážGZâÌ¥]õÞ|K÷æ«#Özb#>µâû%Ió½Ýr~cæp÷î;ë¡G;Òew>;Ú¶«úPºË|HÍ‹ö<ô o|ÝtSš7»Ë“Í­:·¾ûô'‹RÑ«žý¤Û/Ú}Ûêÿî:ù˜ÓDÖy½ö´/~iãïûIƺe1÷˜zöãHú“Àü¥ntÇëŸéô@Åp T` ³AüyOz,]òNWA :¯O³ÊÎA²Àôµ°ƒq ð ´þUè·+!üü²ÂòÁ°L=¬ŸüÆGCþ!q9Ôá+¾­ñ~?„Ì5Å®­Qí#š‰8E*b°Š…ê"ñ†»+ÿ)‹kÛ" 8‚Q…o<áçHÇù‘}6 •§F1öqa üÿGBÆ+ø¤!ÉÈ€)²‘Œ¤»)Éï *…|*·â£+Pkƒ¹’µ~e¹Y*w”SSaˆÄÊT’'P°¹£ÝÈ@,ÍXf»%}ª„HåP²’À &Š~)ÌÑ¡‰–Ñ¢¥2AˆLesNγå&W Í:ñ˜èÑ–,›™'iÂçZÙ¡-kIN]r³–¼j£!‰YÌvº³Aì|§<çiŸxÒóžød‹=óÉÏ~jeŸþ ¨@1R ‡ð¡!ehH"’Œ´$AÐBDx‚+8¤!0A ²Ñz´{ÀwÀã"Øh 4ZXügœtÊfçºdÌ0õR9ÿ:Ú3 ´ì¡ÌT¹”#êÆi´aÃ\{(DÐaˆÀùÀ¨F'Ò…•¦À!SA Αðà!&¸†C–P¬#!øC¢:é£dŒ«0' ^0ÁL˜:òaVLÀÈ3òX Ä! ùPƒ0Îĺa lW'È=¸Zö²ßšì)ˆÙÎzv$Jý¬hGëÍ"‘¤M­j%ÿ{Ä=’pµ°]mhYèÉ[Q)Y°åœþ”#jU盼ÚíØ¦“›6æÖPÃ¢Žšn\U®)¶‰4­k9ë—jÕæN¬IšÀâ,÷»Úý­Ø<Õ£¬éì74:®xKE.è¦Kº®™{çÛÙÙÒ÷¾ó´/~÷[Lýò÷¿’ô/€¼H »ªòQ“Fé\äÒTÁÁÅmz1YÀbfràTg…U¥çZRW|²)åž»àæJ8<è¥i_ÉÜTŠÒºñ©Ï)Ú\øÀÁr–Ŝլ˜Š8“ž 1:oû¦"ƒør=©*&d`å8§>òw%g̓óYëU.Íve3þJNHòMÑrc¼›Y‰eþÑvsuÝ/‡§Å^åqÌbàZ˜“$ö0sí|1ÈiWH%æs)Ë›çPJ“ œû¬ä#ûMÅ:.Zšï¢âOVzË ÖV¥7¼ã ÛvÊK–²i AÝúÆÑ™^æ”G?É<ØAµ•]¹>OoM·©6å¦% ßpUöÌÀ椃Mì« »ØÈ^ر9æd­/ 劵×Ù…,в ÙËfs‘+Þ.#ö¶©¢m²ÛPƒQº³T#ÿJp³¿ö'ºé×4ÐÁqÜ>+žËÝëu¹Ÿó–«9Ro®+í†ö»OûÚ€þZó#F^X‘¦1ßøN2ûM/¼Žß¶cIìÍnÙÕ0Ú¾þ÷¹PÕe‘×J×Ü¡8ÈC.nŒXüT&w·N]zYÛ•^+e9ô&_<Ûû^#Ò™‰A*=ãª>#Çåëð‰Ã<ŒK×8Í(W§QßäN‘¹7äâpï/ëZçúÌÕ>C›êfŸÌØûøð²ÏríOÇûÀõž‘üÅ}ïiûÔ§]õ%º|ëlG|Þ]çu«$|ã(÷·éyëKí2o»æßxæò Ÿn¼ûùñÍ×Üœô‰W¼ûþ@¦+|ç¢W9>KøÓ×>õ¶Ï=ÁMèzÐÃ^ÚI,|ÌÛ|y¯õ‹¿}òUŰsðÁ—7ïøÞ|ê{ÑúÄüç¥ùŽôáˆFðµïüåãþü€W~úÿî–¹«‘öÌ¿~ù¯~úÇ?ûÎwôQ+|«½÷÷wtõW}óG€(QÇoÝGuÒ‡mÈÁ~má~[h|&ÿ"˜'zÀÇò4~þrk‘= ø (Hû×pè$'H)Øõ€ÜÇ)7yxFcƒÅ‡s È3P¸‚Ø„\ñƒBX„B„F˜„‚„J؄ږ‚=ç„Rˆ.L8…VH†€1žð€ P:ÀRÙP+µR±RMeMð(0M••,åTx( ‘PUWˆQÀð@`ðp±O)àTUçP‰A ©  Ó ¡`) ± % ‘˜3 Q@à‡ùЧ ‡ˆÒ!S¥V‹àSSGæ-´˜d;µLÙÄeäHWN—f@Vr=¿x5D…ƒVá_)03‚R…ÒXiAÖ˜C…£§Þø Øøâ˜á8ŽæX)Ü({縎ÈQŽìøŽ,ÿñƒzVgL2\ÆÂ^°Æ05fuê4ðˆ7éHƒãtqÖ‚L„uõ¨fæå[eR‚ÿ¨O™F ^¼kâ¥^É[ Ö Ùj©\ É‚ Éi‘·4&©eKiR©&é]ëc•c'YvIe.ÓfÉÅ‘&S\€ö'&–, ©ÃÒ“-éP/Iiu—’ÇU^É‹Ør]Œ&“(&TÅ’7Ù?k;ev“ÚDdIùˆKY–hIfg™–l¹kÙ–p¹Œo—t©sY—x)x¹—|I—~ù—p˜‚É–„Y˜hy˜†eFÞ&)%((›ÓlûfÕÅ‚cŒÌyITx—ú¨a©†B´æj`Ùi"Fk/w,‰Æ™˜i‘—c\;~¥ùa³¶˜@e‘'¤ä\ûF•·ÙIÖ”[)ie–œ­icžI8óh›+&kd¦éœ¢~Šöc䥚ÿ×ϲš¡Ù˜ÅÙ˜HÆÂ¢›Õ¹h“;†¶)»É^â t¡ùfG˜œ±"œÒ–¹JâIšÜaé´žÝÉ›‘vÞyh 6@D¹5S£”Ÿœ´%ÐD ©hÚŸwe(¶Ÿ¨y1)wòYLÚ)šÉœmÿ©˜ˆÙ’$ªfN¦ê¹™)ƒHÜõS*!ÊFÙÉk Hxìæ›ðyI¸9šŸÖj¥²j>š¢Bêh¤€¥DC¬&f¶©5§ùžàG‘Î Ÿ+Zj»¦›)„k¶†:'ª,[ššÔÉi¢ftT iþ)¡f¤$I ¡´éž=Vž€†BÈ›Åù¢ ZžÝ”`ÿI§Ô¥Àu¥ôÈ&ÖbCÚ§†I–w^yjiË9¨‰Ê¦ºœ‘Ê£9¦æÙ¦â矸–©öI›„æ¤}z0€:ª%z…¥zªç˜ªª:Ž¬Úªßøª°ª²zHvr«¸š«ºº«¼Ú«¾ú«À¬Â:¬ÄJ:ŠCYêHy³šƒ¯ww¬ð–¬ó4£Õ(­Ûx£ÑGzËzwÍ È*ïTyô¡ÒH­ni­ˆ­†§n`‡q쪌úÒ¡Ñ:}àvpú³®îê!µ /ðWrö*:íºƒÏg®*ˆ®E®NÔ¯ê u ‹¤‚'°Q˜OÕæ§á#8õÖyo÷¯ ;¯I°ÿ2(yù­òz€Qp [¯ ˯ùwðú!ÛƒG›2ôêxÛ§€ë}Ô¶+V-w±#Á4`±˜±þz¯ñé°Ý±ÚÙœ{¦}ÁCr/‹°([²ú‡´Ðʲéª{æ‡~Âc±äŠ•DûµY‘¯ï²¯\k€.;²Ã#¶K³m«²Vë­îd¶[›~i[|P{8ýʶ²² +¢nš²h{¶ƒ[· ‘···ÆÊ­Ï*·/•Œþ‡Qj·’J\=ˬ"+€¸A¸2oû®qû±2••jœDÉ™–©¹X¸”K¸ø7r.”sÛ 2Ý*ºíD·­›»ºËº'´Q w‹K»k»J¤ÀL¶Z»»¼»¼hë»ÁX´[µ7Ë€îR[z{Bs—«­™ûVä㼂{½T ·Ó‹£¸ã§­‡vÑ˼C뺯[qÞ ¼!ä¬<—´³×²Ékù˾ïëvù¯|+—¡ëqøë¾ñÛ¹¿‹Àô¹âk´È9À߇u¢ú¼w˽ü¿«ë¿¬qLd[½l¸ü«º"<Âþ+¿ø{3H¼Â„»ú[Âí Ãý+nàëy |´å{­5˜µœÀLÂ2|À`ƒp5Û°ÿ9|®;¼´;¾&ì³ÝëÃOìÄ ,³7üÀG<°I¬½lм=,ÅûÃA Å0kƒ*ì±ÌÃaìÅ]Œ¹LÁ1¤ƒá‹ÃgŒ³ý§¾±ë´ÆqŒ5E̱uL½Y KŒÇmlÁ_<É ÄQÃØÁäè·s»´Ç»ÅQìÆ‹,Ä—ŒÈ‡ŒÁë ºWü°÷«ÆÊ«ÈlÈkŒÉ§Œ•ŒÜ..ÜĪœÊœLËžüƬ¼q1¼iÌCz¬À³\ÊŒüÂë§Ë2ÃË ª1:ÇÃÌÇÄüÌÐì̲̽­l—œ³¤ͦl˨,ÌšŒËŸWÍFñÊèËÒ¼ÍÞ,Æ™¬Î«ÎÆÜjȌ;¼Çè¬ÍÍ|Î÷\ÏüεS¿Wû·­É³¿üÃß¼ÎlÌ͹<¿ŒëÏŽ[¼½%ÎÿÑèxÍwœ­Ì 3Ý€ýÇÒÈæ;ÈíÀÊö{OÄzÒ(Ò*½Ò,ÝÒ.­«üì?ˆÅ!]ÓÿAÎ6„8ÍHâ*®“9 ’;…;":š¥š3~6“Ù[›c´ušcpzuT6hƒÂ´:ÕËâSZÐÑSÉÄ‹Æ(t¸øÉ#íÑ:|»®d½®§*ªô™§µ…š‘Stq½b\×E×'™S'ÉL/¨K|ÝSÅH7Ç(ÖciÄfÄJˆ %ô¨>(ÉJÛ)“!­MHC}"´˜LF=-ÝdL»ø×sMtæ´§£½â¤i®<9®÷‹2åMæôÚ¦´ÚLüG—"Ÿ}ØQ—Ù´Ít =Öå¤×‚}N»¨¤¶¹£Ý‹Ê}G…­Û¼í×ÉÝÛdÝG·ÓXÝÖ]ØÝضÝÜlÞrýÝÅÞâlä]ÞgvÞèM`ê½Þ5 ± ÑÞîÝO•y. ùÝf™Ñ÷}Ží€|` bPàPß½R" êð©°†wèX@R"U žë R[ €"¥ˆ Ð ÿ.àmØTjxá>‡ÏSÙUìY–šðd`Л à$¬M‘¨ +•Q2>öã% ÖÚ{§¶i6~ƒT.tÅ-Œ3ŒÏ4Œ3ØÆ}N5ž¨  óÍ0 óà’.Þ†Õäù jèTQ° ± & &°§P §4 V• އKp ŽUA²¹ØdÜ;¦‹­=æETŒ½?š=“€}v¹Œ65ÕpWLà5 # å‹ÕX¡_eµ†²XâȆ€IpI@0#° z5­0Êž#hp¾ ˆeŒu¿ƒÀZEÞк>¢ðµ. ñÏÛ—oß®íម6Dî%}îu9îõ[î,ÌîIéî¢ïò^¢ô>Óaï÷^˜ùîküÞïùï޾¯ ð}™îïnð ?ï_ïñ™ð›±ð?˜¯ïîÏŽOòßñ_ñÝ“æ&¯!ÿ#%ÿ™¡:‹J£#’Û”“yº}ÃØÂ•åþŽòò7ÿgäÚ]Äò ›©³-/Ÿ1¯œ—JÕ°TedY”š9ùg!Yå´…óWÏô†ZõK”fô† ô ¯òŽ™¥ÙÖrö‘q_ši¾õÄ÷©;ûõZ9œYgwßirO«OQŸóI-¤â§øD^Q‰3W÷8™am_’}Ÿ•b™ù[é›^éÓÿXøûÎö7“œßù³cþHô¥ï‘Qi”:¿ü¸¦ÿ ‚æ”<©I<ÿóú¡îBÏF•Îú“¿f :’bõ=ú•šïûøxù²¨†zú«¯³Ž ˜jŸñ¢¯üÿ³ßõºø\i¡›üÁ?‘ØŸü|_þÀ¯Ô;ƒöe úoîË_ü~ÿ”˜Ï`Mëšs–FYÈbJþ­ý‘Oà@ <8Ð`„*|˜oaC‰!:Dh‘àFŽ=~RäH’%MžD™RåJ–+kå{æÌ—ElÚÌW$çN9åû٤ƎD…À#щ‹6Uú”aC¦‘B% ëÑ¥Gj¥ê•cÓ®S£nÜš©P¶mݾ…WîÜ’2íÒÌySç^ž¥Xð`Â… FœXñbÆEÞ…œ÷f_¾>:ÆœYófÎ=Í9ò]½|Mû½ZõjÖ­]¿i†ûäh¼¥)ï´ XönÞ½}ÿÜ#m™¶O÷¼¬[øræÍ?‡.”øLã·sGÇž]ûvî²§×Ô{ùßîåÍŸGŸ>îwÉ8£V®^þ|úõ»³¯~úº}þýýÿ÷¯Èòëk?D0AÿÃ/¼÷ \0B '¤¤'{0¹ 7ä°Ã/tÏ: =$±DÓñ½ñR;±E_\.Eñàƒ±FolMÆ ÉñG\LGy²H#tKHýFD²I'Ÿ IÉ™„N,àœr KµôŒKКPÊʨäLK/Ñ:3¤4ÛZó"¡œjS$°¬” K­‹3Î:ÏÊ Î³À”PLÜÈÜÌL>‡:ô$=YÒsÑüŒËÑ”ÈÊÍÁòLÔ0I;ЕÀ1‰œk-DŸ:ŠN¬ÀJjN(º³U«VÕSLÉŠ5U:M”ÕŠÒ’óPHQuóWJµ2×;}͵Òb+ÒÖZ)õU*W•ÿ²5Sd7mNÐãËØ`‰•ÖYh-=÷ÙrÕÕöÜu+Ͷ¤a1J÷ٮЅWØvñ¥×^ví=hÞ±þäÓNSÑËSw{ÅV߉å7]…O•Ï[KWÍL§2Wb†ûùÝzÃÚJZVË]T`³š½·cŒæWàz;ž8`‡£UØÕmy-¨gÕÙÏjÑLøæŸ­Ýõ<‹!Üsß–.8j9¦Yêg¦äˆ†8䨸•Ú°ŸÖšËw!f«Ç- !‰ªÖÚenÅ6zâ²ÖniB ­Vd“ú¡f×3Úm×÷ã²7·p.™e¤-’\­d•s¯®=V*µàÆÙfÈ31>ÜðxGï=½I…²%3w›[°Ø[·oui_ÉPØñ^lvÜç³Ü߇'¾Åà‹G>yÿ×ÎKßK™÷Äžïšgy©W {M¿–¾Fæ³s¾û>Û3í×6ú™·—-k$¿Ç.|ØäwY³óý­žâû³ß~_™4‡¸´ô`¤UÒdE2UU®tƒs`ép6A †ŽW´à7–1¿q›#Ø‹Fº‘YÍ€^+Rùµú¹oaqsŸÈW»YïjËŸmøÂˆÕðeF£áÃô7+þ/_ë¡Ù[Í Þw¨ãTo^½;’ö"ƼÙ+ï€IZà³â—¨ú]ðzUÒ`±xµÙõz¡ôT&準kxëaÛ ¸µ“µ*Ó0;C;ºÅ…=ñ@T<©ñšÄýñ“œ6ÆçòWÃ Ž®{Mò`Ç—Ér-…-{`p&Ç7¾²Hvü¨óÇü ²“¬¼â#g¹$[v‹ÿ›æùFÙ¾¦ò7ÇŒ\,“9%Òe³q#ü⥾öªíœ³uëLg¶÷ÉŠÚs›aìg“ö«ƒÎ]ŽóŠæ5ëÙÆ‰¥o{Tôgu:Òþ×ô‘ñ\iøæY·™ŽñÞòK¶a.EÒfFr¬9Bi'ÓnÞt£W4MÔMþ5uIBëKÙúÔ¸ž‘®›§@/Yq”—õ|ëë2ºÚ‚> ±_ÝÙ/×ÕŒV5ø.Ù*rÓ •ü!¹ÆåG_;Ôî†0K´ kn_úØ‹–²hãüœ5­’• ›âEì¶d ÃØv[æïÇÚ[¹ßÎ7lÍ«cÍŒC¾81³RpYÛ¹ãÖf“’é`S?Ù;²°¸µ:B*Zbþ^·«Ûýql#ÑüyÍKYEÿ÷9✞q‡ƒ}ó¡ÜÈùÈùÁwWÜh½ðâxÚ£ä§wÒÞð’kâož²SEIÚVëg×¹Õµþc›ß`×÷–b®©¯”˜Ú47ÞîîµSë<¿õÛsnAÕÇ:,7»‹m³_í:&º¥»â¯ê Úœ±ãé½[=íŽýFúÞmò:Üë'ª‰ì®Î+ýñy}çA2zÀ/]¾÷9Ü%~"f÷tæž—}ì¾xÐþÐ[¯½Ûsoù”W™ãÀw½ð#¯÷ôýøŒŸ<+ŸlÂ;ÿ÷ÒG>õ‡oshýú7=åQo`±7»÷L'?öã~âG7Ëý-Î>˜·ò}oÓÄ€*»ú““m =Ø»³ä#9T?Áã¾Ëó¾Éi5Ë!ÀÏ+Àè«Àïº=Û;¿Ù¿Ô‹-¶I¿›?¶k< 4Á k»Óc@þk?¡Á,A¼@E¡½ÃË?o[?8kÁ <ÖkDõÄ#IBREX”ÁXLC-«µNœB1Œ»H,DCœÅ_ôA`\C£;\tD]ܽN{¾SÔD=¬ÅCÜB”€B¬Û@ÖhE#yÅ=ôEa”EnÔFb”UD‘OÜÅP,CgDD3|FZLG|¾j\k,òé5hƒ?ulGf¤ÄDlÆ•˜Æ<„GÕG Á$ÄLÜG|ŒF…ÄD…Û¶€ ü‘¬’$q\H}LHŒ/„ÌÈ«ƒHÐHÉÆuÜÆ’Fv¼±Ht¸üŒì‘‘ÌG”LI™lHtŒIØcIÏpIÉ™ôÆo<ÉŸ¼I¡¼Èœ\'rLÆ ãA¢¬I›lJ•¼Á`t=£ ¤:G;G¨T@šDE®ìGhlJªÜŒ¼Œ;$SK´ôÊŽLË®dÊ;KÍ K1Ëzd˵ÜHŽ´È§Ä˼츸̌¹¬‘ºŒÀ½TK“ J©TÌnDL&LÌLi®¨I“°ò*ËìÅÅÊÄTÂÇtÿŒÈ|‘žäË·9[ƶüʾ4FÛ”ÍÙ Kܤ¬ŸS6ëMàŒÊá¤ÍÚôIÒlÆÕdŒÖl‘×tKèŒNíÍÆ$N¸4Îúb¾þÓ&ñ飿dLç|ÎôTÏîôNÕ OMkÀÝô&óÜ"¿dHØlOýdÏïäÏ4¤Î ±Êä|ÀºË¤¹“ª(ä3§CÎîãÍ펅§uÐú„ÐÏTsÀ½ÐæÉPÝ$Ïl’ÐåNn¢Ð µPŸmPõ?]Ñ-«¥Ï…ÑèQİNÞ»QeQÝ»ÊRåÙÑ!5Ò\¾ù Ñ#eÒ:ÑmÒ(ýÿ‘"•Ò*­¨']R+ÕÒ¡Òy¿K¹LŠœt£®Hâ?ÙÊOAÆ •&0Y¹ÿq¹Ä!ûƒ ¥%B%k‘7Òªtû!?-7\ÁÓ¢Ìß2ÔBr¢d17C]#Á A®À=R]¦Ó9£€£3͵‘£ô¢Ÿ™Dƒ<=Z¥Rõ }ô”/474­=ÖZÕÛÃ5…Ã*¬2M½ÏRʙ˱KNÕŠ+#:m5QýÕD¸?½›T­CDeºY,WÍHhuÖ»ôÄ5¥Tˆ"¢s¡Xb¹Q%™Jb¤2œ³t£Ù:·ŒÓÖL=VjÁUC¡ ]’Ö¼tUEM< ”Ug ¥4Gk­ÿP-E#Þ2LR{Ã$eÁ-5X éÒƒUXáHX™£ TPŠ2¯‡ È”‚Ö~j؉׷Ôô1V†Xwµ™<}Ôn娆2ž›£ŽuµMµŠý­žyÓf]«Ì;ÙtÕ%mÊXåØXŤq³1V…¤<Ûø›Vˆ}XYõY¶›Õy5Zy­Ù¡¸ƒ@(„ExIPoøß2Ꭸ†@à0¨‡Ž .à((ȇ‹HaÑí>؃ƒK˜ßä­Q*(3.X‡3–b‚€(sP…H‡*.Rȇ*)Öâ-VXx€? aƒ Еè$z ã(SHc:ÞG.È‚ˆ†˜]˜((°â(,pd7Žc4¾Aö×J : € JXÿ¨Nò$:&H~ Ü©…ͽÓGýÉ¡Ú.¤WÔQÀ‹í:›¥[‘YE L`€9°fŠ2¦]°…XˆINã3. Q…ØHÚ5ŠÖ´U—¿ ÁTEYñJç½ÅO¬eב½GÖž N¶8€y(} â|Øe$~†3nc’È8æ@®†È8Z°†%\Èz8ç|€Ø…] ‚bËgÀ0vwNæž}Õ¹¥çÜÂÜbñ¬•^Ú£LSóÌNšã]&gޏd7ö^˜dÈ TH-nˆuÐ∅,þTx-6¢æ8}¶ÛªÛÇ=g†ÿgœ†f—nét~×X¥éxåÚÖ€ÛhÖÉî'¨(øpã3öް‚Øs@â|È‚˜XâøXP@âz()6 ˆO˜h€+\Q%ÍýÙŽ%Ù/¥BÍÀ£më%ÚÓÒ^U˜CY›~g ™ÈY™'˜ `H‚#˜€ ¨†U˜€Àm ¸í|˜€|8ƒ4è`î3nvð…á€ëH‚e:¾êæèŸµæIj.Ñá™S&0&n`… `…îóž€7Hƒ|PaXïõn5`n2ÑO@â3ÆVÞÞ (‡yï“€ƒ3øˆÖïÜ%ðŸÝGð×e€;aolserver4-4.5.1/docs/intro/tcl2k/html/img066.gif0000644000175000017500000002621307363640503021206 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùú,XÂ@ÿ‹¨¯HÁƒ;éS¨¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É¢-}/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba’‡õ ¶x8±ÛÇ#K®·©-¹cuÚeÙxqg{û~¬×±â¾§A“æ«:õj‡…M~ÝÑtDÛ¶'ëÞÍ{k奘é&ܼ27lÔ Y/~˜û³òÖÌŸ/Wî:9réÈS?gŒ=4tí¬{‹ÿOžêošÁ3—-Ͼ½û÷ðÅŸ¯)Vx]žñóëßÏ¿ÐùaÙ”Ùpøùgà&¨`C^VŸzÄ-(á„VYƒéѵžVÙÕáGZ÷Sˆ§eôárLj¢a§‰QgâwÇ…$#‹.ÖÖšh4ÚØã>¨a„(m÷âÖyjשb“In—‰Æä½CÉ{䈚)-g=bk(¾ ¥¯}v¥¢›|V{ë’¯¹ëoFù/žßj[,ŒËfÙªµå: ¨µm ÜðË =<à}ðÑ sR.߬óYÿ2ó‹éÎ@-´=Ç:ôÑH'Í^ÑCþ¬ôÓPGmÓî:-µ¢½èߎÉ1×µbb.)&¡a—ý5×àî6¹M5Yý^_ÛZßÅÝxã @Þ|Ó-÷ß½­™Õ€sÕ¶©w7”8߉ë³8ÞŠC¹`ŒWθߛæ|æ…g$xÄJ˜Ú)%¼·å–kn°ê„ÅfsèU}N3ìEqŠ.·¯×z;çYŒë´§%û¢ÁûÅ;î€:[¶¼Ù™ÀÈÒ üÔë'dÕÅÄ;Èçž=‡µ¾dÃÇý=ØÆ{ÿõ¯dî¶ýÒå÷ûE•OøÕÓŸ?v¤ªÒ?ïøj±_Ôò'ÿ­ïìO¬‰‚“W: xÏ€èÓŸG¨3ö®;ÎòšCø¦=»¡u4Œö>ÂýùÅ[š" bŽBuͧ]p»ßµ(AÀŒNN(iœH˜:GÕ†‡• ™I$§ÁþÎ*þk¡J(¢Ètï‰*Äo5¯t=±w¿;‘õ¿iì`TI¢ðª‡žëÅð†&lË»·pMqgJÄÙ1FÄŒñ…f\k¢7Ö±ˆë‹ãAâ¦?ùÐL£m46r)…Œô±TÓ°6¥¢¯L$¸I1RQDŠö—¦FÞF0f³dy4©HÝ…qy]ãZèÿ>)4V>g±¥ÔW¤5êÒ†äƒd€`5IØ…²—P$]‘ö¢Àf:ó™Ïœß1Mò¯ir²nËõð(IìuraA9œE8è8"–srçÜ ä(ľeo~‰äÈ/OBËo¶o™ØDåI8ÖNwÖÐeôƒ§nêiOíÙlòLŒÂd®¿ÈÒX»JÑ)ÙWÊVÇ—ÜâA NDŠ2•´WEUé:>í)d&“.YMB“¾‹ÚF9J°dÒô¦ùf¥ˆéMœR“‘ú¤O‡3ÂPDMªR5jÔ<‚n©Pjyf*ÕªZu-T½ªV·š•¬rõ«`½ˆ1Ò‡†œ¡!Špˆ26â×U’ éE²à„À%hH^ÃÊ×Ðá!€ŠÊMžž±"vA^K€×Äbš¡ñR@kІ‘}¤÷ mpƒDT ÝúÚ7$ô½¯~÷{‘üò÷¿fPS»yØøÀóÿ°a‘Šà#Ø¿:ú–ÉZ¦–}éYÑ’W†MŠÂ /4¡3Ýt|4ƒ˜;f^’Œ%уFO¢^1‹eôû¶„=°é|XaÇþð±ò¼hf/;Ì»{³Æzµì&éùÚ.ZÙ™)Œiza Z'¥°—º4i*{,سveKè‰ôÚx’ÎÚ¨9ÝihÏzÝŸ6â¹PYêzWÚÓÏF5Želíx#:\ù³¹üM­>CšáOR™—CÍhv—lÕÍ~´ŠmpŒ·ÛÝ &t1wMrŸ¾{ŸÔ!wÅÈìð.ÃÖ-ÿ´”½æ˜‹:Ê.Ÿ·¿ÙWm€±LÄ,/ù¡B±ÙЮÎ7wnjI<ÕªN³Â™Þæ§7zé²®X±„åf@B]è9tщö²KðäfO»Ûˆ>3²«ýí³d»ÏàŽÓ›H•…ÿC{!ˆ$@óïдûO!Û9½[¡ Å'sú™7Áˆ”²Œ,eS9Rœ¾ªâ¬ò%·CÆßÍñ«£»Kä^è½{ô³¥ªnDïËorßÓbãѶŒ Œ*›©bo»ù’Ê÷Ó+OÞ¨?ô¶=ù~ä7=Co_¯øùsÊ',$úTáÇ“””_$i׿Y5*Šï~g±züžÊ-ü¨èÚ(þ­ûÈЈ`ù 4ô¯_ñ_üßyyMBêÿÿÛ]:6 /Ñw}B5äÔ8éÔ8 XN˜ž÷yCHHbN’〤8Žã|ŒD·†#xçX}«ÃRd{烢™7QƒçAž§|>w8ƒ‹4‚U!FhabŽÄ=.ˆQ4„|vAsE­ã)-øK6t—6G/˜EÃG%vôƒ)hthNRKA}ÐKˆ&?Rè<=hSláz£L)%D´×F¾g!XSjøxäHzè5}gJ;øYèvÐÅ|™Ås"47¹Ä‚TxjÅÆíQ‡l¡ˆmˆ0„HHö÷=ŽX{X›‚Es„­cMêg/÷D~¹7wús‰B˜<µ9ëT‹×xÒáOSý÷|·Ø™8{ºƒàq‰c.8˜Š¹ØAÏu!ÿ¸{Põ>^(‚[¸Ø‘—5#å’µp1VQAø~Kh‚Ýh|§Xz<ÖŒ¬'7»È{sh†^·YBÑx·19GQäa&dºãÎVxÉ(CåØAsŽÿ†Ù÷ŽÉŽþØ0y  ¹9Uûø¹3 9‘Láˆ|¹‘ºqùà„ð /`ð’ Y¥¥ %ÀXŒõŒÕZ&ÐôÐZ[°WúÐX®Õ“BÐ9[°Å‘F¹à€p ðÐT•®…W°…ZéÕ  «@ ! &²à¼P£`•ú0xC©M@”a!€ ?yWEyQŠ„z©—–Ähß—F£$y!µpŒh6‡C9˜I 5”¶‰a)03GY™äQ‘–™™]‘šÙ™DÙžšù™¢YšBAš¦™š¸šªÙš»š®›%ÿÁ†¾‡¥B| 8C(†L¼T‰²éI¬™>WnXñ)Â*¨²a¿É(´‰Iå¢t0¦œÑia¶Æ=¨Öo,&‹xi³œÒœÐiiçW¶mt”mÇjÎypu›»¹qÞ¹ àùžÕéa"VúV'šæJØ™g ÃÇqÔŸ›z a º œ ú ”‘æ¡ê0Z¡ê š¡º¡êú¡¿¢"›$Z¢­y¢î§<Ú$+(&2_×lûY„2÷‰á™zMT†¤9åožÃfV×p§h£ÖpãI¤ZÇ…;7. æ›&s6)aogF'n–n7Ÿ sô椴¥\u°wu\·qdj¥Õ¡Š@gãùopzqg¦[ÇEH q[:gXwˆãt]§jb£/¶ja:œMÚG_J§HÚjjj¨‰ªŸÄ’uN66]*Šn(e¨Yju7×1Ôæ+vê©’:n5ú(/˜BÍAs‰ê~)„qxm¯a¤…fèym/·›ê¶©)óEÞ‚˜nT¦£*mœ —Š¢¥ÿY¬ÆšÈ <¦ªRt-gú‰“Ñ?ßèDމr>ú|Ê·¬}ר,µ§Ê„Tk:§«kJihºžwZ¦€JuIz1l–ªÃ‰¥Bºiwª¥Oªž:«ª¿JªƨjŠpSg¡J™" ·Ú¬U—E Ûr‘І Ó£wƪ] ¬+D«°»mHǯ32qtùˆs«¨Ýâl»«;·6•j±fбÄz¡›Sªox«ÐÖa(•œæÉ,‰fŸ6{¢Je¼Ò?ì ²¿X+ƒm›šl1egCŠ´Q¦¨Il°Ú©AKµ÷ZaJš„‘ u¢…¬Æä„×Ê0ªø4b›¬šY¬'s¨5k­ÙÃJ‰0Ú®ʶðZit¯R§tEê¶ Ó¤§±öJoaÊ®úp.fozÚ—edv[†Ig1à %vz¸‚§nK+\*,"Ó¶9¸V´¸úy¶¢Ç­%Õ´‡J­súª†È¥°W¨ç¶ºZ+n_û°†hµ/jl©zeË™¶V¤›¡¾«¶•9¼Äk”Æ{¼™¼Êk‘ÌÛ¼ù¼ÐëÒÛ…LÛ¸át‚ň‡jƒ½íQ½¼‹/º’x}¤5Y܇}Š †ìËYôŸƒ)YyÿG³tB™öѼ¢ ¾RCŽJ¤gÑ8½Á¿ôk“ŠNˆLe…Ù‡6ãÇQÌ˜ÏøÈ€¸¯ØxìTƒ5«¿6ÁOã‹x…±èÁ™ƒ~RZd"¬4$Ü~ǘ»ێ廊ÞËkô‹`ä茥¸5¹©k-l€[¶Ã–ø+ìAL‡Òt‡|"gÂC‘Ä 2=D̉é ÃjtÃùT¯wýAÅüÑBWÜŽ +Å2ŠÆøŒÈx°èS\¼JqŒjŒ]¼†9,As¬z{ >lì\`lŠÓçTZ¨ÇÒÅowºëhî£Ä¼G L¼MƒL`oL;ª€d˜º›|s½ÑÇÒŠ¨ê8É\!Æ. ?•Ë~þ‚*£DÊ(èÆ*8 lÇ’œKÒ(¾>–Ç0ƒÆ$(€·¿€§Iöëw¼@ð«ƒIeÊf,þ{Q×7|DÜk#Ÿ‡ú—¨Å ö†²`ÔÌÌFœŽê49ŒÎDZÄx¢E| È› äË% ËWÿñc¶yKûAÂlNèäŠëœNçÍð\;€ÀLÏ‚xÎEä|¯¬›|JÉ¿A}… É5ÌG/,HÂ8 w8 Ò^×Ã_ØE<Ã˽ÅFɬBÊ|÷'ó¬Ð¿SÓÚ{ËÜœÏͬÒ]=-ˆøZœ¡ûÒýœˆL\ˆ^ÜQöwæ<Ê9zÕ•¼`³  <ŒŽo=Ê•‡ŸX @-†d Ó‡Ì,-ÇÉ©½qÝÒz Jg´ÝDs}œœe•ÇŽbãÕ)1Î_Ì}ü¾;Í_ÿ¥=A‰-À‰ølŽ©½U™ÈñHRŒ/|¶¡Õ§íž]:¥­ÉÀÇÉÁíÉ ,]emÓ5ÙùÚŒÒÚHͰ¹ìÒ»}3½];Óý»>½9>ä¥6PÛ+?‰)X-ÔIãÜÕlÂ8ÎuÍÔœMÜf Õx©#wt×"7¡ÆÎaÍÓ–¨RÇŒÌP¬Ü+ÔÞç€qÛK±Lßc·Ö¡CØwLÏí¼Î“Îç”ÁœÐÁCÑøÙâàºÇÂÏ ,ÐyÓ€ÈyÞO×í}|B->ßMÈä]PöÂ9­Ë(Ò†üÝ/þؼÍÜE@6~À2ÓàŒÒÝK£«g¿:­á>ÿÕMI·)Õ>£xÜiØeÕ¿ìÛ‡òÈ6¾}bQ àZåË÷)•­_+hÞ0eLã‰gÕð¶@~_qn¾ï(ÅÔȸƒ¢Ù5êÛÀ º˜Jk€óæf»æ.LwŠ®ÚHöèßÓæu{ç˜ç:^î¾<—Û”þ ’éŽké Î¡Ÿ>êæœëë/ »î@²jû/!Þ0 /½ ƒSpÁ”°E_„‘©§ì²°4 QCÑDIÜ®ºE nÄeãoÅ¢@,ÑÈ—d²I÷(¤(*æê³*C“pÀÛ”M;³|²KÿtÓÏË+wK‘t²M7ßmF9k¤êF¬rä°¶Ê L“¿>{L’ÏþÎbsÀ «ËNEet((ﺈ>Óîk´RK/Å4ÓÏ¥S/û45TQG%õ&N¥”ÔÎRWeµUWá<¯T?}µV[oÅU½X#½Ö\6X6a“ÚUR*O6Ye—e¶ b§œ´Yi§¥¶Ögg­²Zm·å¶Òk{Ͷ[qÇ%·Åomôµ\u×eWÿ¸sëL·]y祗«w= ·^}÷å×T9EC\dû%¸`ƒº·¹xf¸av>–R‡'¦X[ˆ£­8c¥½XÕ?׎¹d“G9_\-ïLÏXæfev‰fKS˜8›q²¬Òæ©åº 7›5ÉSŒ6ÆU ]ô¹Í. xk÷øÏïæ‘õÐç½?ëlºwÌ“þÐÌמÏþô/ÏÔú§W~uà”Ï2ôµAOû«iœ(Üï Ÿ}Á{w»öñ)OxÔ‘/žíÌg¦Â¡nKŸsÜôÔg?ë¹O:úë—˜<â5i žúð—¿ ¯i\Lý(½Ö­†%è›ÞäÃ7xù )J[`ù¨Ã=þÑ­}öCáûÈgCÞ0†<¢÷@¸;~OI×cÞä—9!Æ ƒ?¡øfÈAfpPŒâòŠDÁÌe~Æù ìF·Äros²SâØCßA/„2g·A("N?BcA‚H×>7êñ~jDã–×=’Ž„ ”ãÔô´C?Í‹*¬ ñ•³“*~•Ü×1©)¹mr]šôd(EÙ$PŽÒ”§„ÿP)‹£8u²+—\%,×#Wª§–›¹%PT)®ñðûåñdI”\f†e4+¦1‡‰K§-‡òÌ.»æL² =6KæiÙÌ™8sš‹Êf6}©iv&ŒšÛJ µÈÄ-" 1bÌÊë^»Aα ôΘÎ>æñ%L¤"-Ç€ Hƒ‘ç>¹Ç2Ôöàõº½†®¥œæ ZÉvƃ"É5Ìà‡8N$RŠd ¢é´ØÄ:2¤0Ã;MšÄÊp{ÊèJØÁêp¡Fª7u É(ÉJ`\ûæC XQ6õüL£>ù¹Z±ƒFT’HŸ‰ …*rŠ|DhXÿç9P8¢­ªd]dYÍúAºîJ¤ªOO(¼º}¯—H¹(gJ:Sº>ó‡×Ì©ÕΚ>’¾Õ§j¤ ö ›FÆJѱg•é,ñ¹ÖšÚ4z6½âS ĽVKlC_d ™™¼2Ó‡ä‡:zNÃNT¬ðS(+*ÈèÈ|±…m½zZ{z°yä_A!*ÁJUuenEÉx\Ø6Ï­E§BJ‹Jɶ%ºìº®¼¦K]šB3”Ùm×v¹;^òÂE¼åEozñJTH cÛä+F· ÞáÜU½K:/\J÷U Õ³Ðq¥nyF[ÄÞ×[ìí”Â\˜ÔË2U3ôÅÛ׬[¶ÃXSùu sÕÚ«WaNõp\•(˜ài´Ô~xŽ«m¤CëO/°ªð´0“0œáÛ&Š8\P9X”ê4¢‹½©ƒ»Y!t°1nÓŒ'Là r®š;®Kƒâ˜~Uª2V÷ûRž†ØÈ#]*’“Œ`I*˜’¼Dì^ïHÄ(ª´Š½±5 eöil/î27]\c1;IÉlam“ÑY]¸º¶³^ÞðKç¶.ºÁh¥òmÛ'4B¸ÏJîùs+ýë0K_úÀJpÄÕéy‘ÚÓ‹Êô©U=ÞT¯ÚÕ¦lõ«e½ÉXÏÚÖ%«õ­u­±\ïÚ×ëõ¯…]°`ÛØú*ö±•^2µog^v´yÝl^=©ÒÆvÃ’mnSkÛÝ÷²¾½kûZòHÊÔh3Im÷z,Ükóè¦%¤îô˜°~1LMDP.ε0$­½™ ê2‹úÝaë ÐZËÚÚ7úž«¾~‡OÜâpÓRÀ#þ0vCËÝÇ"Ó¼’—Üä'7µÈÛf¹ˆÊâïwѲ‡q@Ñ[Þ¿÷ª7í³“÷ÜçQ¸¹\‚þ²zÿåüÔ7ç  ÇDéC¹y;Ž-h¿{è×TzÖµ¾õ­C=ê·›úQÉè/Ñï+\G;×½þ2|*DDÔšR.î°[{ìc]'A¶>”¤¥ÝïOg¿O,gÇq1¬&3z%Éž#¥ ¤ñ‡‚>´.ùÈSÞò—'Ìßý¾vs ~æn'S܉øº·°êªÜ™öŽùÆ_¾õŽÏºV4ŸvÎûöX»ýÀ!ê÷Ú:õÁ{=ìõûÖ¿¾ñ^š=Ús_3V‚<ñ'û½¡Žr|Ù'¿ë|§oó¥ý|“Eÿ+Ð9‰õ¯ÿ·Üÿiù´.ý$¯}ô™Œä…白©µOLᮚû%óþ)ó¦…3ß¡Ø÷™Ås™a:?4 ±¯c¯¢ª6Ó[?OÀòàøjr£§¨À˜i¾¼ ÓùC@!8gc@$c ”üº ¬—‰ó²#—þc”úY8ujlY2AyÉ­6é¥ü`¾$­ô3³Ä$jZ¼®1¼ïÛ¸ù¢@4Û@Éé&E±Aqñ¯Ä¥$d‘†¹$|B7™BmÉ%+|0%ô ÁT?-¬½ŸÂB‰ó“–ƒ¸RÜÃZ'ðÒÄNôÃÓ—åó’2|92¤El[|¡ê4XBÆŸðDN:¥fLÆø Ä]lg´id&>im|¥Ãx?¿2¦SÔ•^$™rñÆm|´dœ7)§±à)¢KÅT2Çë–tCy|܉„;%lt~G4Ü@RH­À>X«ÇÓk–ƒœ ¤’Ÿó¹ìäº:˜(¹úÛ¹QHqÈ Ç¯Èä¼ I‰Å£èÈ`ÙÈ™áÁ#$FÜC¾¥C ”C ÀƒDú€’49–CÉFd˜•tJ0|I”¬>ñ³ÉMŒ›®ã‰ñƒ8 ó- ê¯cjBrZH"tÄ”Ä>¼c¼Ê ¾#AʬÆ¥ Ë¥KˆÉ{!? ¹¸¡  Œ¥JÉ¿ƒ(¾ÈC;áC˺<»²,@,K³DˆÊ“¼ÁôÊâ»t¼`0¶s"K“Ë7­Å1lTT4ÍÏã¸ëSÛÕL½RÅÕM Èd¥ÄlüÓ›4!ü©²Y¹Õ Â3;KŠ #EÚ×KÄVFÄ: !¬, ½Ò’h%W»ƒF5}JuS×"+uÀ^ý@Z-X£ XTòÕ Êa%GÝ;T'MTô EkUÔQ;[ÕÔk"ÿ6iÅÅ–,©Š‹¹YEÄÞÕÂëeßÚ¾â]AõõGä=]ËeCüIæl]ðlP†ÛbÕß²åß'í¾«“O`ë;\IÅ_Å^UÌSV¼ÜQ Ãþ„ÈúÜÌPYÒ·-Èü…Bs_èó&àMáš°ß®u\e_„ ºI=볞Øï"Àv•@±ý Úš5R‡KWY¬ÖïƒÖ·µTH-á7ÿQ^ -2Q|[ßn¤Ù™UY•õàdþJKœÁ*æ^…-A)NCÅC?2¶Gî¢Tà=ØmybìB㊉Ù266fH¬ã {Ô,47c%aME¶î38†Õ•]ׇ ×ÍZôQ!¾c"Už ¬–cC3DöcWä´UA6FI>V.†ä,¶äÅâBÖã4%Á>¾IaEÛÛ}·9¶[XŽcŽÑä\æå\±å^æhÚå`&æUùe¨õIÅRÕb–c¶C$.‘W‚cf–ºV>dUVdOžäR¶f‘fSºã}ó¶Geã Ð6Vé™NqoЇP€ ‡p¹gšê„€‡‚Ø}Xˆ€x}øƒ‚L ꡦj„ȃcЇb(f€\(ƒmЇF@ †i •i¢¨‡ª¶f|ˆ‡n@†H`„D„>èƒ €1C`H˜„eø†ž‰í²†@00°‡ƒ /0)(ЇPë¯ó„>à»LxéˆÕÓ f+(Ô.`‡Ô–l‚(tX…P‡Ê.SЇÊÉÖìÍ>8x@¨kƒ Ðg4Ûz°í(TXmÛ.è.È‚† †] ()°ì(-€nØžmÕÆâî6°„J¨ƒ9À€¨€¨Xÿ’&0@l°íRnè@žìW ‘æô‘_7 ¤qöá{{£Eöf -[]UŠL`:Àða*'^¸Yê^íÔV‰Q …qUOÎs$E´×`œ¹HnñE]B}-rå¨ðmað¶8z(¡('ÿFlhHí׉˜mnkè-T¨…kXQÈ}¨‡ׇhÐ.Qà+ðÛ˜udW‚ñ‡æi–UE¾bLt .Joµñ{Ô ì“íµÇÚöo7ˆì†m„è…ê¦}@HUÐìH`Í.YÈìHXÐl8ô[\W9?å~-ðOvW6ÿOóŸðRs5Æ,®q™µÛ<ŸÛ²FS—p‚+‚0 ØNm0,^8ÄÖ‡-zˆÉžˆ%0ĶSl…*ˆ†Ðõ ²rð£æœ]™os~]ÖÄáö–‹¬Ì B õ;7Ü Š'˜ `H‚#˜€ °V˜€Ðw Èw}˜}Hƒ5ð…`(ø4(øvøøØå0òñ¶mMWpZÖµ‡aQš€S˜&0&xh… h…ø“Ÿ8X}`ƒaXù•'x6pø©fP@ìÔÎ÷îç 0zy—ˆƒ4AY/W7ú¢H飷¤Wún{”€;aolserver4-4.5.1/docs/intro/tcl2k/html/img067.gif0000644000175000017500000002464007363640503021211 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«We^|!Þø·ba’‡ñ 6ÜWqc‹‹pK¹²e´p›Ò’;V§]–‡ùNnú±ÃÂ¥GŸÖ›˜tãÖ’·NíZõjÕ°acÔýP7ï½¢mÏ~mZpñÛQ¯}¹¹s¤™—r¦›ðóÊßÌ{?Î;õvàÛÿ—Œüöwíá!‡·Ý¼èÝëÙ>ý{÷÷×ãÇþ¼¿ÑÑ4]geýgà&¨à‚X“XÔÕŃVhá…^å`X6uVÝ„†(âˆ$–˜Ñ†›AH u&¶èâ‹0ˆâ€t˜U|‘9wŸ}â±Ç£E-ç`@‰[‘B=&d‚KV8£Š5²ˆÒy™¦ähñMtemòé—œÄ1¶ãê i%–Ây$™®µ©—齩¥—ä­6gzaf¹¥)'›±Åùe™i (šÊç…Ov¡1ŠØd¤IMJ©‰Þ´"ˆ Žyé§ †ê•f¤¦èè¦]ù™% n²:dq{¶7z¨¬a~i¨¨¸æê\¦P=*åU–ê*ì°ÄVÅk„«ì²Ì‚z¬‡6+í´Ôfø¬¯œV«í¶ÜRÿv-ªÝ†+î¸\}e¶ä¦«îº-™+Õ¯'yJX—k.Z§qõÒÊZ—åÕêf²§Þ¿ù.ÙWiöª\šŒÑjow…²y0q™¯¢~"«À§é[žÄüjì¯ÂO|±¢uÖzæÉ+¹K¼7†ð¬Ï\_ YÆíÙjòdliÐ9{72«] «¼ø*ÇçÆþBýÅTSíªÏM—èŽõm|(½ '\3Òï›(K.{†.»l·íö[¥jFã»kSE[ÍJ¼µÉ‹z^¿aßë´Þ½µ§rÔ-°•„#ݧÅ}'ŽïÞˆFþgÞ$W>3å{βրW|6è~?-ùPi'ÿËÕ¾+ vÑøålßÕp.íº;W °å$ÏÞd~S£¹;sLû^r¡·Ï ^fÿÝzÓJ'¯¼Ø±uîE7KÝüô\bmu°-Ç-”t¿mþùèS”z´é·ï¾ÛëCúþüôo?Ìõ篿°÷×½ÿÿŒTÿ|ÂîÕÎuƒ1ަ¯®QÉg²¡Ò|X6Ö%kٻو$ jðkEò ðÆô3æa°U%Œ öD˜›äm„( [œ&«F/GEàV2h="/G-üέ~Tµªi?'“5—9#>‰L¼¡o4(DAYƒ<Yìîu'v0„?dƬH'rˆà Ÿƒ÷æö2ÿðp‘Ób&™AoOE$šÇ`ÈGæqyÁû ‘¸Ç3L„,$"›÷ÂÏ4 \+±VÑ_ë¢Ñ¤˜FªÌQ+>$¢&U2** ,Þ~68Ê>Bp“L$™ètGNRot ôâAHÉž“´\å!ƒ·ÄLÒˆ—{âY>Çf:ÓZâùÚ˜*S:‘Â$c_ ¶ Zï•|d!1MçÄ╽c¥2E)ÌÇÍRzG[a-k)<_.p‹ì,3¥Msž3›âd Êš8¿5 Šeô§ŠÍ'4Š`<Ï::P.^„g¥ C‘9J$áÿjŸÏ ©HeÍê\#M©JýÒ•ºô¥Ë,)‡4…R˜Úô¦å’©©hZ>œúô§Ii)P‡JT•µ¨HM*€tÊFµ)õ©P]ê§éÔ¨Zõª9*V·úT­rõ«Dõ*XÇŠS±’õ¬m#†CöÐ24AÆFÌ*’ h!"»ÁR‚˜  ,Z+";ÜáƒTKÚTÕQ¤¯"l þZ‚WH8¤ù˜Î³5Î>,TŒgGëÙ®OZJöÜÚ»cÍðhV™JUÇfä&0L€¾þu"]˜l 2…”ÀøXbk8d %:ð‚8$ Mظ Gd;VîŠÄ»ÿ›&vÁ#0açÀ‡ V1VLËÀÇ{)‡4àC Á8>ìÛ†5°A"t%¬€ãàø>°‚é—à;8}ÿ ~°„áGÛ“ö4zä*?Ö3XÒk^îp0‡b1§L]=W,KLºrÂD‰°Føs·ÉÏv½Ó !gДá¸gˆ1w:iPúpØV;Þn%Á ã”ȸÉPד£LåjM¹ÊXfÖ•³Ìåam¹Ë`Õ—{¢ª ™r­ã.™¶´«¥Ñ‚r²ZÂJ³ëý(Ń+ššzCÜ™°€µKf éSÏßèRŠq.Û›þ¹ 1ßÅŽñc¿H&?ž—›SñØŽæµáxŽe¾¤hÇ^•8PkÑUÒK'èz<<Œfs¿Ó¬2'4ÌÒB޳®c”ëx¥‚‰®sîôVN|’zÈiÞ“µR{m’VÕ¥fâ­¹P¨ÙLÙEe6¶· Í©Z˜šÜ·²´-îr'ˆÜæN7K+ÌSp«ûÝ”Bw³íh"iÆL¦sJìi#Y…ß´Ãð¼WGo È[•)^õ©á#h¾Q N5©Îa¢méw•<“ɰ倝ަûæÈ4Ü8Ú¹—mVué¦-Ã#®¼cAk¹Â>ÿWv÷ \¦9¼s%ïè¼¢~aò¼6Žo¢üü翎ÐGræ ¥éI7JÏARf™/îÒ?ùœ3^ëBO‘\×:ìô q³ÕV¿¥ª+:rio®ëD_{›œ-êÒùÌm˜Ø nsd±mHç'£w~©©þð1õv»«ŠøÆ‡Èð޼U /ùÊ+¥ïВ߿ޖÀÃgé-òüÀ(Î1Ä)=¢Hf:xW5z kÝûÚï.ºUS›õo'/Ý®oÚ‹\¢’4;‰Ã|…ßùídfÈ2œD‰.ž¼[xÈ«~ÉÒŸg¸Ï!æ±¥ ÑÿÄû )¯dl¢Sɹ' è«´~ÙËä1Ûs7|ã÷ûýÒ¿êÙBþïJÓÉ÷Nc”Y¥UhåQÎÆh~3d”6(JlÙg3\p^WÈ/zòt§{»çz%wlÀ§€Àl÷÷zÛ‡s–—‚ÒJçpꇀÖzþ¡ÓC1©W~8ât>'[úo'XS;4‚‹VpÔ“w»äqÁ‡'XB€P—Û´GiöægJ$hw_”Aƒ‡7ôqÖKôKHæ÷Q?xa*(*4Veèng؆ÍÁ‚n‡&‡rX‡!ÿA‡v˜‡p£x7„zø‡[‡€8ˆ!ˆ„xˆaˆˆxˆŠ¸ˆƒØˆŽø‡‰y8‰”X‡–x‰]V÷à‚Ð /`ð Z¥”… %0Y“õ“•[&Ðò[Y Xø@Yºµ‹BÐ9À[¼¥‰UVÀà@`ðpqT) [Å[æp1 ¨ Ò  `) ¡ % Óˆ3ðW@ŒøÐ¦Ћ~5Œ-H€§ek2T8¥Z£Ö¯vZý4ªeZúhc¤•£… ¹-¶Ö9Ň~§y‘309@ŒY™¸‘)Ø‘Yy ’‘7’$Ùx&y’‡—’*¹s,Ù’ïÿvp†ƒì×~çWb&ækYl5I“0‰:kÈx§§{>©~<t6I(ÖcIö“i!“ÂsHLéc!–FdK©Y6È”WùyCƒlxVGUiQW9G–”ê•\¹•6FA´{nyb@v7q¹DEydo9•øFrŸ–“Ç„…‡¶“’Ç–€I–É–z¾±—¬=Z9–‹itYqšVw‰i9•<&i•7‡/é”嚢n¤YšÛvš¨©lª¹šºÖš® f°›\6›´‰e¶y›T–›º e/¹wnu76™ Jë—†C—~îDujIzAˆ)Ai[H p•Ùvÿ÷ur¨g|=X=x:¿}8œjGk÷Y tj§$Ph…Ç9°Æƒòažc´žÓmŒU[wzÔÙ…Ê9sÝÔžÏ÷9jÇ…Wm»tžØévp§8Ÿ‰„D÷BZ‚g3ž&§b"‚ip/wnѹŸÕ4¡Ç—dUNê¹ç%œ÷@ÈFhF6ö$  ¶“gˆ&wÀ³c©}ÖôCštGÆ“iÃ# +ø¡‰UÈÙ›Aÿe¤ø£¤É›Éé¤W5’vY–ž–uÕ }ïôH£vJRJ†™yMŠef™‘æ|J´;Zž_*T*HO( m‰ X3¢mê,LêFG‘¤yšm{ú§$ ¥‚:`„Z¨„u¨ˆŠVŠº¨dÕ¨Ž V©\5©”ŠU–z©V’Ôœk¡ÝéœdF˜Æ¦.8~útžÊœî÷¿‰S4“Þùu¼ôM³*€+WEÃ&€ýs°dgÃtA84¬; †¾ú3‚–;öd4@J(Y3„±„3s÷gkvqØñ€Wd6¤:°7†u—€ë®3gLÈ{G˜-jq'Ÿ`‡Jù·gãÄM±Z}¼_Ú®·F3œä)ðgvšKãÊr¸äZ€!g«h¨hQ ¸i§ƒ¦^ …2#œ^J{j6'÷®c‡9¨æ‚ð4 ‡GVZp¡w[|Ï7{&[rW– J¡$‘©Ô’—š ”ÿaÊ}3»ˆo:%«j™óÇ=‘Ôª›ÇO§ª„²³F‡€FK¤[³(3·ºHìÙg~V£ ·«^gµR ‚HµW(¬„Æ¥ÒzL²ffðW¢ÍŠ£_k¢bË|Ö­<9­\+jÕJ¶I»‡ùùmBé´hÖsë@U˜¢Ë—²ƒ¬"Z¯†+†Â÷…wŠ™aÙv j…Jh{ŠPhiªrHëH‹¸ÐvgÀé9[°÷Ù¥µw-·™î9h§ž È; ‹u,'Ux0öGŸ¯«—[7n¹»øXi5ư"º¦@vs9€¢ —ÅK³w»xÒ©.©j$u{³…ˆ°ÒKˆ0[½€Ê´~ˆ½zx½ÄÜ TÞû½>¾â{Sä[¾0u¾èëR껾*Õ¾Uñ¼Ý“+©ú• ½Ñ›°ù{&)¿ß·¿( *õë]öë %QµúÀ¨–þëÝÊylG§•{¦X£µÛu)—ÁGèŸZ²,ýZ¹¸zÊi•czÑǯº¥šc„²ãÂ<Үؗ RG½vœܲ8v·´weê~½‡±XÚº;lª¹‹¹Lĺ&3ܺ(Ì—— ¸>› -ĹÆ{µ«À³ ìïÖÅçÿ¿î+RbLq`¬´0è©ûú6gœÆügÃú{ 8üŸC[ªQ·ƒ@K¦²ûpI⢬Zq¼,©JŸëºæ:Lx«VœÈ–[»Ã÷ê«®§Á ·qÕ¹Ž Épb¯LÃRL”.×~ýZÈ£¢½fȬ8‡°¶*±ººE¸(ÁÓ—o\ɧ*}ª;¶<¾§´e «E—ÊéDÊÇc¬‚e¼ÌÍt¨ÚÇÆÙÆÏ ¤Ç—¹9&@Ê\ÑL´B»—¥ÅN¼ÇœutD(Îø7zÔ¬¤é{>lvµ|Å… ׬…“Ü|›kÁ¢ÚCÚi hl}ÌgÄ"LÁ(cÐkÜ,œVJËC˜Ä èËJžMùõÍE ²IœÑ)Ì·X'voöÊ]Ï Â¬ÑzjÊlèÌu,aͬÒoÔÒ. @0Óû3Ó4?6}Ó ÖÍ:Mx9ÝÓîóÓ@ a¬<=ÔkYÔFmnBÔo³ÔLÝ6NýÔìÕR­.T]ÕärÕX-.Z½ÕÝÒÕ^m?HÖaÖdM-f}ÖÒ’Öj­ecÝÖ¸ùÖp½›r=×O%q ¡ \×vTl…x. ÍÑè×]Tìp{P b@ßÐ×(·1Y" éð¨àŠºèX@R"Ð[ ê Y‹Í6 p‡ÅŒ À –ÿ½¼}xÊ‹­Ú²täü)Á­]ƒU @@  ‰}ÙÍ MÓ˜ “åW¾=õÐÛ%ð ŸÚ™…ŸeŸÂí OYœæLÞçl¯±Þî½ö8Ü!¢¯>! À ’ ‹¢ÑŠÆ%JЊºñ ¸Ðº`Ø`;` ¤` ø@ÖXØpÚ»¸¦ðá½ ¡ZœIZK˜Þ‰žç-Þœù(ީեõßôýl9ßÜã%A åÅQ±0é@ñ^‘_û5[Ò-à™YÕøÚq„€IpI@0#  è5¬0`˜Ž#€hp½ öeúu¾`Š å Æ+ÐÒG ç0¶!úIçcjç†çxkzΧ|ç2•çL>èæçÌëuŽè ¦è¹îèt †Þè”n`îw“žéM¶és~èž~` !>ê,]èÎè{ŽêgUêqê®þ誾è²>ë¤^ë‘~·Žë†ªëœ.êç#³¾®FÿÑté­Žóš¿Äžƒå—•ªWF±Ó°N½®“dy¼ƒ;+|о͌‰Þ=}íQ‘íóv®HPü»a Å:Ö˜ðºÍîã.î¸Ë˜Ëþ£o‹§Ö½Àê˜îíhB˜Ù•T‰º>Ù•ÞÁ¸³*³Y«Îz˜\DJó[J›iñ‰oêÂí~ö˜téî×ü– Ÿ¥Qiò?æ• –‹ð‚#dW¨˜b‰ˆæ.éï,óàÎó“sOX)B*ŸòòLÅ<Ñð>ñˆ‰ºŸIOå·€xó¼žóïÞîþ—qY@×Z¼U*X©óÿõJ¹ôù.öø>Où$‡RèTÏœòÉô´"&ñ€6“Lßõ7HìHOœg_œà)ïa_öyŸôÙñ±ÞöÊí1:;#¥Š_ô›|™ï¾fˆóW¿<ÿô—<‘ÓÉŠï˜v¸ö¬.è‡ÿ÷„Œ„ÝôöÿäDi¹0bKí¦Ïî8húDð¶ÀJûo髎îÅþê„í†ßûSúûçüÂU ÏûÇÿUÉoüË¿lÄóÿüÈýS?ýÔßUÖÏöØŸýIÕüÝïýÙ{ì»ïüâ¾ÿÛúç?VàŸìë?Tí/úïþºoëæ?ÿ6ÿø¿Uú¿ÿOà@‚ D˜PáB† >„QâCZø*^´˜±bŽñù¤ÀMøJND™RåJ–-]¾„SæLš5mÞÄ™Ó&Fž?vTäÀ’'uEšTéR¦M>…uiOª?;JÒ¤ÔˆpuéÕ+X¥c%š…ŠmÓµdu¶u›³jO BíÝêVì^¾pã:›°o`|~ Nû¡á…Œ“ªU¬Ò1õ“ÏFŽkù/̹>ëb ©Õèæ¶š7t w¬_Ó`[|m2ËØ¨1Ϭ4÷é‰1~¾;rëhÜÿ»–î ñbÌù_~ppääUeÝzúÀäÛ¡s§¾úáêÞ™—þ9tôàÙ¯N~/åøÎ{G_ùsóÑ»×·—|Ë8ÐD«)@Àn«L±ë˜Sî;ën;L: g ? Õ# Â+tÏ6 A¹9ÑÃWKÏ IdñÅ?lÈÄIÄñ=w<±ÇgÜÑ8"p# @®¨ÇëŠÁæœnCí3+Ê ô‘Æä±Ê'·¬H­´ÑÂþ€œp»Ù¬œòK.µÄð=óRTè? ۻ̇d©H«< /âdêp¢2K”2H)c|“ÆÔeÍEItÎ1¦Ì2GÆ…qQHÓÛ´Ò=3¤³S-OͳÆBKEÕ<…äÓ ? ¼ AÞ¥r¾ótõoÎýÖË4X2”³Cä˜$Î3ó#¶ØûZ”ÏX5[Œ²Í_½ÜU×µ“W`¯õ’Ù帕ÖÕXQšõÈ@m=·ÝXau7^Øä¥·ÞÒ½jÝáìå—+xûåó_€Æ _@Ü—`…f¸a‡nÈà@“Ì b‹/Æ8cÁÿ’IA5Övc‘G&¹äˆ:ÖWÉ‹W5¹e—_e„U¶X`˜oÆ9ç¸d®5a½z?¡Ñóvh€9Úp¿Õ¹i§7æy(vÉ2K,÷dÔRs±½1;=Ÿ;l†£ÎÊgª1ekhÝ»ÚZ¥¹ÞöÊjŦ»î~ÉÍl×ÐNTíTüPÔ¬%DÓk»Gœ_¼)Tªeñ´òW¿œÍ·µ9qÍ7iñ3ë›sÑG'½%ϧ޻tÕWg½7Ÿª¢Uj½[§½vÛÿ:}öÛwç½÷£r§Ùwá‡'Þ%à+.>yå—WèøÆ™‡>zá—¾zë{§þzí·W={î¿ÿpïÃ'¿|Ç7?}õIÿF}÷߸}øç§_ñ×ï½ìàëç¿ÿvå÷_HЀœÊý袮™!„ N A V°O ô {¶? vЃ®#PþòÆÁ–ЄDÂào4(; (s· ]JàÃ^¦_5|#–­Ptܰbˆ²ªNC$¿Æ£Ë(ñ&q‚¼ŒSD&ÊPTe’%ÈC#å«ÏK¹tãD+>D;Y” —È5ÒdŠm” 'u6-Ê…‹šØç–$GM!ËWZÕ´êã¦;=ëo€d°àÅ-!íYAc“#s*È-í‘år¸ d´¢1Í6ð‘¤xæSÈBÍímÿ›LZ©Ä„n±¬&\I³ƒ©®nŽŒ\мå£Áår–¿lUÜŽx"(Z–2LÛþ–µnm¡"fà¥Ec:ꊾŒæŠli¹FZÇÕL`GO6*›˜3\ܦ¥Ëã$QFNr%«4”ÍÉ4ó™•ç:ͤ H~Sk¬¥ä†UÇQU³–š4ää´ùN1–¨¦êcC9sG2î‰BÂÕÚ€ Ð9²g^Ŧ;‡™*®‹>çt[—4ÚËCV –‹Ó*uyÍAs‰öT¨¢þù n¦é£ ýgÁ(êÃñgª|?'Ho&¡5O†„(Rõœ4¥­Ü¥5ÇId!2¡ÁD5i1Q ÊQ25•šÄ\N•vJVFN‘[•h)WYV‰h¨^Ü QOèÒ½pœ}¥b_£÷WÁöÿ„5lbˆØÇð±£Å,_%{šÀFѱ#}K ϰ¾½°² aìcRYÚ4œb,íe?kÎÑ^Ö²GtíÝØÙØ¶ôww=X^ÁøÏÖ–T„úT“°H߯²¸u… §"›å¾dµ( !Q- :®Ê”}ë·þèÕ{r÷ ™¼¥´Û,qi ®êÜì ÇÛUDžÒ»a%ZvËY¬µ’r’û4/“¶+^ùJ‹½H íQ¦I)d^§U)|gJà[ú“Á¶=íw’ÙVcV¦¨50…¿KUTõ²¹)e[¥>ÌáF˜¥FpSœÙ™JîZ=ð€IŠFŽR5Wj18¿f_@~2žî=ç§Œ£©Ï ƒÆˆy*bÚÎóÁI>ñX¿šd;F¯,ÔkbDt)ár§:>Õìe#cèÂæ¦áJìª2YX4…jNÓ¹cÚ5ÄÖÄlƒãLª%oÌIY1s·Ju¢¾ÿ2xmæ áùª²b"ó[Ub™Ò™ˆ&W'CFh¶¦õ·P¨(³s^ôn6‰ñ%ë|okåÜby·´{îRb­Xñá6¨ãݬ/ªjZÖÖÃu¯…½Ø_§,ËÃFöülfkoÙ͆¶¯Y}kÝEÛÚá{öµµ=½bqÛß_¶Á=îÖ‰›Üç&ÿ¹Ñ½nÍ©›Ýï®›»á=ï§É›Þ÷Æ™½ñ½ï–é›ßÿ™¿>ð‹ œào˜Á¾ð)œá¯—ÃQ‚hwÅš×8[­flJfàò:®} Åë¨kò°¢z<*ÁžKr{e|ˆ÷Ôl¥šÔãÎÒ©q’ÄË¡N†˜Ëò 3<3Íg–W©^°¤uÔ^ŸË\°•+ÐÓôcOæ7i–äÛ™±.ä¥3çÔQ#ÅêßB”¾>®yÉ;sò`;×ÔŸöhÜU¹;S­ÉêiUãÞ M*‹É7OÖ›ë.¸!¿ “( ó«T„âÁ£1¦L†{Þ ÷P˜ÒØÍSÖ)‰—švˆ\–­üžÿÍ~P¾›Rð_w2PUø¡?¿¼õŒ÷)Û³·iÒ@}¼Ÿá^ã[Þ–!‘å¤à6›ž) ¿8è—*z\® Î\¯Z<ý»‡kõ^>#!!ßÐëú”ôvÇ=´¢¿ûÑû½Èîÿy$e÷âã®Ûº%M>µoç4+Sê×3/yÙ]Ñ»ï¬oýÓoÒ*½C óãÛ»3¿Üû¤²“¼p =|2Êó¸B;:º@§Ð¹&:<ÿó#iZ”™³Ó F“§ ¤?š+3D»&£°úc©á›º_1;ºÊÀù²5ÛÚc<´ŽK¥®úªü¸°÷sµ†a¹C8$D ®siªBåÿ‘BˆÓœSÂzµ-Âë¢úB6z;4›B*¹à:ij‰K>Ûê-ò‹Š+”ˆ,Œ¢\<8âA»¨äjC;ä-ëâ<õ£À‰ã<ÍÛ½³§˜+2ç)À[ÆS°j”;8©Ài, Ãs@*s‹GTDfD³·â0‘‚ƹ3¾[«Ú¿Hô› $°´1"1«'Tâ½V‰>á‹–j¼”?Ú¸¬+¯ÿɪrdÄÎÃE”ƒ¡bäCRlÇvÂê?a”Åüc³Iܦå[¨3ê&Gû´nŒG¾‘ªõÛ¾ŸcÇü:úp%Ot3jüƃl»´XHðFS²ÿ[&UìÃsl©ŒBDüÓ:x\3q¼AŽËxÄ¿ $Æû³1FÓ@Õ¸¥lFbü3›œ«DtD—¬¶;dš§ƒ:ˆ¢D‰œ:#E »¸M´9$SJš‘Wôºô)¢”@ ™¬Å!d&l=·,5Ûó¯zd”Ê›ÁÓÇ0$̨ÌÂDÌãÃÊJÌÆ$˜ÃtÌȼ Èt»É®7,H9D“<Êk4£©`ÊLÁ\Ìc{¡´02®…Ü™µ’2Dâ"(HTDÑÜ̆+Í2”µrÒ¯äkE§û³àóM5”¼êjKf ?KDCü²³ûSºY KáR #cɈ:«þ EKZ½ãÊüL9ƒ3b²ÆòcÀÍ딨\ÁRì?ës+=_œŸT¢s¢*±ÀóÛ½´I,¼Î$©í¼MÊê¾4ÆÇв¢ü;ãLJóÄ®êBÅ쌴³Ì¿¤ÆøšM©[Ëø”?R ÐL·ÿüÐÓ›G´”N÷ |ܨ ;Æ ûMíÌïÌ<ï59lF½ÏMÆ 1åÜÉîÂÆƒOé«ÏÝIŒ|Oë‚@8O¿‹JeŠŽÄOÄ‹œ‡ª°‘ƒ§×ªÄ…„Ï–Ø  íÁÒ+Oõ±3õÐ#í0£»Ò#KäL(mªGIIÃO,S5’Ðé º5µ:$K5¢´ÅzQÉ (L615T%7E]ÔGM G…ÔI5Èi¶¬¤ÔLÝ™BÕÔNÝ IõÔP½NÕR… P5ÕNEÕTÍÔUeÕIuÕW}ÔX•UC¥ÕZÌ[ÅÕÆÔÕ]EÌ^õUÂÖ`ZÃa%V-4Öc}¸dUÖ…cÖf=¸g…Ö“Öiý·jµÖ}ÃÖl½·måÖyóÖo}·p×u#×r=·sE×qS×uý¶vuWmƒ×xµ¶y¥Wh³×{e¶|ÕWdã×~ÿ¶XZØM¬‚5ØÂBØ„í«…eØr؇-¡ˆ•X¢ØŠµ ‹ÅX ÒØ… ŽõØ($Õ…¸xo“U; b;L%Y†k@†HÙ—=8pnÀ‡O€ €‡`„<¬Y›Ý7w(ˆ<À‡D€H€vÀ‡>(ˆpp%Ú⹃bÀ‡ae€[ƒlÀ‡E0¡µTcÃM•˜‡ª-,{x‡m0†GP„C„=؃ €0BPGˆ„d膟ݡ²õ6‡ †@00 ‡ƒ .0((À‡P[â„=лK YÁ…¿† ‚PzÝ0uˆ0P]Ê%(00‡Tt¸Ü |¸Ü \ÎíÜr€ðƒº%0È @—¡Å‡y¸Ý(S`ÝÛ-é-È‚€††\((ÀÜ(,ÞØ¥ÝÕµ†â  „I˜ƒ8À€¨€˜„6ÿ* /P\¸ÝQ ^`˜M{OÏd¥u\º3,™<ÀAÓ¤|N+}` ®`»â¹¤"ºpƒ–£ Ò…Z€X°^ÖU݇Qh¤¼Å@ ® °ÁËL`éHÐ ÁŸ:»²‚a ¶@c¹Hɉ‡X‰ `ÅuÕ…]‡ÈÚå⥆È0…Y¨†%…[ˆ^ƇgÐ-PÐ* ¢LÒfÏ$¼bã9vȶRìàaöaËc;¾ã¬M“ @ ¾JÓ]B„°]^aƒØÞØEˆ]¸^À S@ÎmuàÜ€…ÍýSpÎ5IÿN Ža6Î` ÆcÅ“cB~c?æ>žK@få ;ö¬à\ÞAä‰2d/Œ'¨(øˆ]Õõƒ°‚Ð…rP\|È‚‡W ÜøXPP\z Ê5 O˜‚gÄQz1ó¢¯?í:§¹afåþÓPœã)S:ß¤á ®^q‰'˜ `H‚#˜€  U˜€@h 8h|˜|8ƒ4à…_˜è3˜èuè„`¬hâò½ÝRV2úå÷aàX⟠(…h`#`‚ˆˆU˜€Uˆ¶é pƒ4À5Öi‰VŽ†ÞƒðÅUÝk€_h›r˜Žˆ78è29éBȤnÕ¡¶j[Åê¬ÎÕ; ;aolserver4-4.5.1/docs/intro/tcl2k/html/img068.gif0000644000175000017500000002267207363640503021215 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKxñJÌ«we^‡Q:¸!ß’…Ý*^̸qF¸MiÉ«Ó.ËÁ|î‹/±á¾‰ cæüYsÄÀž;s½št鋬A»VmšöiשG×Þ¼ÛöCÏ™q ¯Ú÷ïÙŽ“+_ yédº -ûE~¼wpÑëW×\ûmâÙ·wÿ·XâuÝß÷ž7?;6{ð‡Ý{ç™þøåøó›lNó9å²ú(à€h K‘%(™XÐÕÅÓF(á„*¥`dþÑ`…vèᇠRÄ_M þ']ˆ(¦¨âŠÊ–M”E÷`WÔyTãŠ7Þ’ŽÇ#F?Ú×[EÔÉ"G­¹åâ‚06¸aJ×!¹›l: 'd|SfùÙm[nVÚ¤!w_˜ç±F¤u¦éU¥–^~yßq_v©—sZY¦fÃÉç–VºYl`¦©åêy˜œsª·žqî™(ŸC^µd†Rx䥕‡©OFnªèY“–¨¡¥Yý9‘ž§FZa§™‚g•©žÆoÊX¨Mš8c©hšhI¶ùh{ªêú¨¯dÂI(mKjhúZ§ªˆ>»(°ÑîÚ¬³y¢Úe‘e¦ê¨x®«©¬IÑz“­ä¦ (´ÎªK«îRe.TN’ï½øæ{ä¼ Ê¨ï¿ì!¿1:(ðÁ'¬ÿÁõÞªðÃG¼ÃèJlñÅEñ¨Ÿ+ Q‰m–‘Û.{ó™üZ¡ÄjkØÉŽ’‰§uÃv6¬Ì0oK²·+§²m?§·r¯,sIô¯á†,(ÏJG{4Ê5{mµŠm\iÇX}|s Â~(yoÛõ·Gkmv®Ü‘œ'²5“ +–#ë'}m‹K-Øgo‡´xqºœ*vöåóØïµoWV“eoÆŒ7î8H‰W†5U†S-çÏð ¾wËìF]6›:g®ó|ïñv9´è>xÒŸ¯îºê‚WŽtÒÈrkÞß±‹î[ê8¶§ïˆžUäþšô²[3‹9»kËý·š\K=3¤}ÎíÿíØ<._8Ô°»Ùh»­Ó½¦ÜËCÏ÷ùL'?½Ÿjûx¨ö[ë-¼W:'êÕç¯ÿþo0W*^ðh÷M…gs=ãžÍØ=œùŒfü‹ €ü÷$­€hóÜû:·¬õ9MkÛ áí%@ïIð„ «_ɡð…0ÃÚP]3tá wÈÃå°‡@ â¾TH¢ZqLˆHLâÀˆø¢s±'ã*Zá6ø±(±lQ ¯Æô¦+êNŒßóeÅ,¦ zõ¡…µE/²‹Ý£ÌÖ¨«2*Q"?àzº•Ep¡NP\ä¢é¼fª.š1Gðv˜§H9îOeŒ# ±+É?ÆíV¼͈IN^²n0ÌãGIÊ 2‘INÄ_)WÉJLj²•°Œ%Zÿ^)ËZÚÒ*´¼¥.w)”\òò—ÀL‰/ƒIÌb~d˜ÆL¦2+‚Ìe:ó™Í|¦4ÍiZó—Õ¼¦6m™Ímz³•Ýü¦8GÎqšSˆå<§:F ‡ì¡!eh"‚Œ¤ó#AÐBDv‚+8¤!0A 2ÐuT@v¸ÃÈ’R-´@E0д¯ÐÏ”^Ö³’-0x½™§Pg£n4¤¿Ii¦Nuš=Œ0ÆÑ Šè¡,”GÎaˆÀø¨@'Ò‹¦À!SA Ìðà!&°†C–P¨!øC¢€» é 6 IXo8Lì‚ F`ÂÎ7¬b­˜>–¹RiÀ‡‚q|äµ k`qjDUô°H¼'b›?Å2ö±s,d'ÿ1ÉRö²³,´%2?ö®Šh dØBÛÑЊ͎¸Ú!KFÏæ y¤cû°gÚèÕµ˜Šf×…·A–Î8 Lo½“ÙùÖ}¼5TrIÜãŠí·ƒ”Ïp(½ÜVe·ãšuljÝíz—\Ýý®x1ÞñšWEå=¯z?”^(- }c´­—Öè5”u ’ÓšE‹6D"ÏsñmÉ)À´í¶Ü›£îÒ÷9ÚF±¾vëïºi§(¾ílÌJÖÔè7"ˆêTFS sAg`ø‰QŒ×2ñEüßæ*Ðgr›óÌ`û¨Z“„šqÑ8Üöänp¿ƒ“÷I¶½ÌÍzÚƒ-Ôáœèo½PÎW{M"G[’zVãfù5úÂ7¾Sd!ÃU=ûºÏdµýÞèHÛâ>Î÷Ì„TZ&õk¦û¸‡S¦ò{Kk9úùx—Œ/écÕ–0¸]1sÙö´ÞíÄeFóÎ ÓB3ÚÆáÛ0: ›ÊˆFùÓñÊ3¨G Q“úÔ-â4½*†êVûPÕýúŸ«g"S‹DºBñ¯æ¤ô.F¢e~?Ñõ­_;ìýQÓ ¼ÌX] ë‚UP0wþ”ÐÖG ›Ò¡vœûl­ Ïök ¼Þ±üIÛ9|®º¶†?Ø2ÒùmºV6š¯¿\dn«ÿÅÖ´N°å¼dÊ-{SøNJ:µoë9Æ)øQ¾ðƒïß l³f¼n/˜hmÔÜ»ßmäFgzjæ3v‚Ãxé ÓIÛÝ[7¹Gwî/ ÓˆÞ5QŒr•¿¹i„fS™pkF¼1†\Õ•ôªMœÕbøÎómОÛt5g¹§.i‘OÝâ´3² ™žÙ£?‘ë`ÓÃNv&ÑÃO.»ÚSØäÂzzíp_ÎØãNwæxݰt8€³­wƒ'¼ïr& ÁIœ¾doç ëÏ©y÷·«·Ÿ"~ùÝFji2Ú«µ7¯Ø-Ðp‘”|øÜ `n ’i5?–µçLÂFb^‰,s¯»ì÷ÓøÏþö÷®}ÚqÏ{®Ä¾÷ÀŒîeüâ_wøÏ6¾ò‡òûå;ÿ”ÿM\õןOýŸ4¿úÅ¿>ö¯ýíó¾ûÞ¿=øÃ/ûñ“Ÿîæ??ÜÓ¯~µ³¿ý“-Ä="ˆN¼ 0À DS… %`QõÕS&ÐòÐSYPPøpQ>BÐ9T@ˆUÀà@`ðpÑL)àSTæÐ‚1 ¨ Ò  `) ¡ % )ˆ3 P@pøÐ¦0•Óh*uR:—R66RLSG¦RLˆ'-,·“&1#>#d…ÄR …³„|44)03H~ï׆L÷†pHkr8‡®V‡vˆjx˜‡¤¶‡|j~ø‡Qÿfkwöz;²xÒF›‡3'ˆkAˆ!÷f€÷w“˜5b¢pý戠b†:4l€:Ì%\ˆ¶` D]„k¸–Z¿%]¦]î¶_s´h¡x@Íõ‰²w8i¥5`¶ØcÆUŠCs‰¤(ŠÀ8f±±IÈ%‹ÄX‹§HŒ¬hz›4{¹Ø[ÓåŒ0–Œ#–ˆ¨H‹ªx-ŒØ8ŠªUŠÊ]äcŸ'&ßlj<”‰š˜.!÷Žô(^öxÞ•úh]üؘõIY9UÉX™ˆˆ†xxiló£nhO‹¹†ŽO÷R•X¹x8œA%72úå\åÖ+¸1@ó¶w¯®a‘»èg—†AÊÈ…Žs¶g@ÃA(§bKFmd¦‹/†zF’<“’—u’ÂŽwñWÂe4¶r#)u6§A.ƒŽ£'bê¦'ãs’V‡@—WzãvrPGrCÙ*b)hf9ŽWÙrÀ•-7ix墔y'nã7’ni&zõ¥`b[¾fg­racVx'C8Oi=à’G‰™=fB’uÉeoùE±øH¬ƒlÃ#—æ…ˆuç™(ÿ± yP{8p8yˆ‚ˆe9 9—êTšCÇq§“™ƒFu'F]SYQW\\™rЕaÑU=>™2«™heC”Rd@ºsA_˜Xœéš€#•#·r`µsFÒ'¦grPé˜Gr,¶q§ ?ÑYuWyDÖnnãŽ'›òó“ˆW>Z†7ÍS›êzdYHÌ)>Y™vhT‰•6Ù78YŸÙz§5;°Øš#šwô# :RÉC:š¯ùœZ}š¡Ü…¡ê|ú¡Þ¢"ªM$Z¢Öt¢(*M*º¢ÎäL96¡nm¿F£KˆxŠ—7ùwÞÆ–|ç)uX\/G¤k’-¶EI¼³¸Ev‰ugn_­ØeÊ)¥ E Âˆ¤1†`-'ŒT‰’’´_Ý(o¨en[Ç—jÆlm×i¶÷xEwžR‰™< •Q© E—z¼‰sdtŒ3&“tiG§‡—U¤Â ž]º>… 3d˜ñff÷zÇ¡Ö硯ҌöI…Evm*†©½‰R« “6“dŽš©Wæc×8 ¶Œ—:™¿Ù‹^‰i§9‹ÒYŒ¿ãwz™jk*}xç¢K‰£cºì9Dÿ¹kÉÇ«¸×¢¨ÉwÁš‘èÙ•‰£’Ú¬Åæ¬7ºDÃêlgØpƒ6ZøU,Ñæz)¶¤û9ŸÛJg/ö­æÊn…âezaAÖ­áº7¦›6ÉfŠéIô&‰³efÞzfé™öz ‹"~ÝÏ(=×]~'nÛ)þàæ¬ªî‹/΋.ã^â·oãxŽJ~ã"¾;‹„ܪêä½çÜ=ä»;J1îªmÉäSN¤ÕØä3j¸Ýå0îb žhRÎῚ}A>Ü^~ˆj®6öÍŒºhàù½äI¾âi;è §Ü~ålNló]åñm-KWw\Ûþå®Þg”âýÝa~é–æÆfàQž¯áÈçíúæâZ˜ëMÚ¯­Ø“®?ÈÛÙ‘Îê…m1?ÎÚ=ë–më¨]çÏ}çºL¸Ý¿žLÁîëþKÅÞêÇŽì¼Þåʾì–Ûì’>ëÐÎMÒ.ë—]í™ÿ{í¹®íÊ”ìÔîí°îÙ.î¬BqýìæÎJä¾î[ËíÂîîÛ®êí­îòŽºôÞàá~ïwÔîòêmA‘½æ.ß!ßÎè>Øñ^° ¾kW!‘€'ð>êðƒê¹eóh«Ì"Ôë{ðnì®ÜðÂ[©Š—¬½ë»#x%»E2­sðÇôñö.%}×·3·yù•FúÉ_ V[QRI:®èº¨}æH"k;Zùm{&iDž`Ê­³íY5Þn¨Ì[ãSºŸëñùŽâ3?˜1º½‰¿–sg‰¿1+³áûèªöé°œ’åÛ¯åkBb[è]«u}›ªÕ˳†in|”ˆ#óûÿþéaõô:rÿ]®g?›H{ôäÛY¹·N?–T/øá[öúZ·œd…Jõz_ ttÐÈ¥–£z@œñóÌDøåN‰nœ°¤šù·i±öÛ³[µM^§Ÿ3p㆗¾w¯ö±Ÿ›†š½xüCwú„ã›ÙõBþõPd¶ˆó‹’K·rÚógT²™`˜Ž ò Bfþn>I;Ÿúekõ¬GyßIäþŠ+z>ÏýK_åZáïçÅúOà@‚ D˜PáB† pQâDŠ-&ñâF‰´ðyùQ¤Ç"%Kâ+‚ReJ›ð¹äSæLš5mÞ|¨çNž=)fô8ThE C7†D:¥É”MWt ÓèTªU­^ÅšUëV®]q&»ÔäS§-_zE›VíZ¶mݾ…Ë0ÿlR¦NíB=ë6cQ„Eùƽúw&_ÁY÷êœXñb›s•Ö%«Ò¬Tµ{úE\°pßÌŒsÞ$ÜÙªeÏ7—FíÖqHÈwYž¥œö´AÌ2g§xÛbh®ºqôý[8ÖÕ"[GžÌöðòÃÀ5ν| sê·©ã«î\:óÜ×9sïÞ{xéݧë„>>;y ÕÁcßÎý½ú÷ðËÛ¿¯Ù½åñø›³n8‹#‰©È^‹ª­ôÎ33„B £­3Þ$lÏBÑ«M¿ƒ:„ð¤°04ñ¹ÌþbQ´[l°B?DL7Í P@"P¬“\Ã+6´¢»ïDc1É1ŠÿoÆ$ŸÌp½#QtÏ?Ò8D¯Fˆ¬[qË*Ÿ|QC$¡Ôò<ñÊÓÌþ(œPJ,Ü1N„z<î®ä”SqJ#Ù$3D1/#OÌñÍ4Ç4òFûz“Ë—sÐ0ô´ûl3Ë)ù”³S: òε0£oLAÑ´RÊ ËSUÒ¿\µÈý蛯KÕü/Õ=‰ÌÕP$I=óTY×Ä5P]³<3¿Nåüt¬Pa[6ÚÒ|»TZªªµvÇfDÚl¿ÕëVNÁíM\r=U*¬:Ÿõ\wß…7^y#ÚHóš7_}÷åÝâÖ-ËÛ~&¸`ƒ×ª÷À f¸a‡Þ)ág„¸b‹/Æ5Ø ‰»¥8c?™ßí8d“OF9Ú‘Ù-9e—_†y±•î8f›oƹ«™%k9gŸ:âtÿ‡˜çšƒF:i¥'Úù^!—†:ꨛ^Xj«¯Nšêv±æºë—µîÙk±ÇÆì£ÉF;m†ÍÆWm·ßyhº@å¸m¸ïÆû\¶ŸÎ»o¿µ•û1ºI>›á\™´éðÄÍ-7ÜÏÄvé½Tu*c7ü» rô­Ì‡êœ#X¥qsÄ™ônψ°ýœ±ÉGÝqœB'(Ù¢OÇO=öÞW¿u³?j]æÀYœåÂkº÷àUT¶òbyÕpV[•-VIëÞÍd›kµ¾Gi=Üúëÿ“^;YM7Gd×O5þökw¿ÉùµÇ>þô={}vñ/¦Ò©SP€Äœ¦î×¹% ÿox~W‰X@ )P}›rÒ¤è¢ !Ê‚6ÊSOç«ÑSDMÿ@ó?ÞOXÄ" í$µŨEå°¾G½Z°vQJ]©*8½èå°K„2¢ƒõÁó]‰ƒæÚ•—ÈÂ_M°4*ôßí"¨= :ÏI2DÕ¥fø<öiP4Š!ªdTBq~¾a¡è»Wцj¬c §cFí0ê‰5ì¡p°8¤ð0}…D]~nHÅ1NO}i¼NYÕWQ*;°rÕ"ãCEîÙÊ”|_¯BICú}I‡Èò#÷ DÅ¥ðxÆIÍìö7Z¦Ò'Å×öÊ9«n|«e0˸bÁeƒf2•Ùÿd.Ó™ÏÔJ3ÝźæÉ&‰?ÑåËpÙGÎeÓjÒN€Ä¸ÍûÅ$wÝTŒ¢LãMæ±3ÀK§;‡Î߈S—ä,çïôˆÎiɳq¶Ã ñFÏÀ¨ñ”£ô^þˆX«VêÏ|†ì$›ö§«6¢|豚Pþ ô‘Õ`ÉPÅS~ª$bJ#zÒ0”“Š!hAɳÁŠf¢–߉)J1 ¼c +…Ó02Ñ…]Ìã[Âêég,£¢–ÈL25©ÃLLLGóœÜܱVQÅ£%j@.:U¢:e¥B{ZJƒZ•"RçT«Tqµ¬^…ŸEÙˆ¿¼ò1B4¬ê\#åO¯ÿhu«5ÂN¦jšÀÇA*§f…¬_y3Î΢ïldPÅŠT¹jnm¥« Ù7ÔÈJÖ§q$-•~ê:^úÈ^Uƒ–J=!–“¶>üNG?Š¥IÖg£OH݈WQvÑ|¸½Ñms"ÛËbÒ¥ ¬sI*ÊH‚ö€&5Þ¿bi´YBs+ø„aq³×+†õ®PÀ‹ì~‹¼×z)L[[4§¥×¾÷5 zñ»_þ:D¿ýäÉzû;à´ü×3ä„#<Ïùn·¾ÖB°Nº']\É—VóRmJf5«Z±;UjèØ°šØ¾(¾eQ‘*ÒêÚÒ$¤\-ù¬ÚøÆ ö%áºûÏßÕ¯JU,‹¡šA¯B™­Fö.ŽsÜWMªJ ¼è Õªáê'ˆ»År–‘Ì-%3Ío†¦–ᶛͩmpWЭmª«ŽÛHÙo¯¶Éº McÂäºÕäV}êQùqæ.ªà>DyG¾LT·—ÊT~¼(ãñÙ³¸ÎÓöo}j×ô$NÑm^£Œøsª˜”($rÃå#Ü`²šÚ€&˜-uZ$ºK÷,¿m›GÙÙ/ä5åíTö/‚ýœ¤:kÅãíÌvŸ;å{$ž„ãŽv£¢V†¼æÏ>øµ¸­0·«”ßJ&Ürñ´1Õ‰>s%ÖñX½ZÝ7â{ŸÏ€ø¾\™-Êø­Ëë¾­±Ô®ó.‡Rõ‹¼àßY¾ú¯V–ë:/2{êíð“i^Ù¿g‹ï?üÂB\–'~ò™e|î"_ùÏgp±ÙqèW_ḛõµ¯#áoßû7éþ÷Å/“ðßü)ÿùÕOa/ìÃvýïGXû- úGSþa«þ­’~ýçŸÿý§¿ÿÀ÷ÀT¿4@óCÀ¿d@ïsÀÔ¾”Àê£À |¾ ÄÀäÓÀ ¾ôÀßÁL¶$Aa3ÁìµTÁ\[cÁ¬µ„ÁX“Álµ´ÁTÃÁ,µäÁPóÁì´ ÂK#Â"Œ´#DÂESÂ%<´&tÂAƒÂ(ü³)¤Âm»¿å¹B ´Â-¤³.ôB8Ã0L³1$C#3Ã34ÿ±4Tà cÃ6T°7„ÓÃ9d·,D6;„¿:ÔÃûâÃ>L¯?Ä8ÃCçÄ,ÄCì?ATDebÄFTšxoI¬ˆG„D¨i@†‹ÀÄLôpnÀ‡O€ €‡`ŠøDP„w(ˆ<À‡D€H€vÀ‡>(ˆpð¯DtÅX»ƒbÀ‡ae€[ƒlÀ‡E0VôÅž˜‡_0{x‡m0†GP„C„=؃ €0BPGˆ„dè†Tlâ†@00 ‡ƒ .0((À‡Ædâ„=ÐoKðÄg\*(‡,P‡q‡ÔG‚€(sH…@‡~,RÀ‡~}Ȭ%x?èFƒ ÐôcÈ‚˜Ž 0…ˆäH›äHÈ‚€††\((ðÇ(,¸I‹ÌHˆ´•ì „I˜ƒ8À€¨€˜vÿ’&/€GàÈQÈI“ò™9ÂK,ô98`1Ò Îi8¼›»®*<¼„–2 8„ÿ/0Ï@”P›LžQŸ\©\±O¢R `7G;N%Z¦/g+cª5f­;l²?r¯`Ï/gÏ/`ÿ3fÿEU’S^˜O`˜Sc™Jt´\k¡U|º`gdq§/—/ÿW‚º`ˆ½[„Àf‹Áe”Èw™Æ£Ë˜"˜!¯.>†t”}g`Å*Ç1Ë*>Ð':ÿ0/Î7LÛIWÓN`áVe°–ƒ„{`ϗȺ?ëÎèÏðÒëÕ(öÚ+óÚ4õà=øÞG÷áIøäY÷åiøé{„ƒ„––•Žš¼§§§»»»€Ê—Ï…¥Êˆ¦Ð›¦Å«Ð—²Ô¥¬È©±Ë¦»Ù³¼×¬¾â™Ìÿ«ÁܺÄϱÅÚ«ÀáµÈàÏ—à‰™ìµ¸í¼Áð¼ÄÁÁ¿øê†úî›úñ¦üñµÆÇÆÈÌÛÞÞÞÁÏåÆÓæÇ×ðÓÛêÛäìÚâñààÐïðÕûóÇûøØãçååëòìó÷ÿíïýøéøøø!ù¥,XÂ@ÿ}XÊGÁƒí”RXª¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éâ R/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nKx'âàp/D¿óvÜË·¯à†€v˸±ãÇAÂm:HîXvY&\¸áÏnVü™3EСGŽÌºµë×^)Ë®,–nÂÌwQ/ö¼qbÝ«Eí›pq¿ªK‡Í¼¹óç%'/µl».OèØ³kßν«tšÔ/—ÿíN¾¼ùóèC~¯Y[<îôðãËŸ}}X›—o_§Ï¿¿ÿÿfÙG~Õ—ÕpÆ$Xo wÔ‚Ä Å o=Mx‘…ZaxZ„¹W”€áÑe`J¨}´Ûb‡ §Š…%˜‘‹ÇF¡ƒ,êÆÛ…©uÖ[^0ÎÈ`5rˆÑ‰-æQŠ|±èãŒz˜ƒK*ɤ‘7B)QU 碔X™åí¨£HØžˆï5¨æY®¹!™n~8e!J•æUmê5&Ž’4!ƒH–få‘p6Ö¦ŒDåi•¢1Ê›“qRd&î퇄Vzé#Tjú%‘[ è˜]Šå‹‚ú䗊ɪ†H.mù(q°Òº§a Žjã•·ú¤«®Î:d‘ª²é¤7U©vŽnidÍ.+­EÈBUàÏ¥Ú\´ÓvëmJÕV§_W^ªhl¬¿F(e”‚®«k‰¼Bl«vn¯§~«o}sNw¦–âYè¾ LðÁþÿ…›Ÿu7ìðð)|mÀßÚÑ@$¢ñ"\ìñÇ ‡,òÈ$—lòÉ(§¬òÊ,·ìòË0Ç,óÈ¥TbóÍÜ|3 Ô¬s%4`‡ÁÒJ¬lÃC¬tWCCl4šIw»“TWmõÕXg­õÖ\wíõ×`‡-öØd—möÙh§Mö¬x1 $¥5ýðÓ;l÷Ò|WU Ö|íÝ0Þdaë­à¥dÐâƒ!æÙã´B~dß ÿ}uàD/K8fQO‹8å  uõCŸ¼ù¸H‡6ɬ·îúë°Ç.ûì´×nûí¸ç®;ë«ïîûïÀ¯{ïÂ_QÕ e~l¿àý[xçÒ >IèÿM¿¬õX!_ú¾§3œúCØSßPøn’oÔèm¯o÷#î+½øàKk>UÚ+'û†K­:üÍß ÿCA_CÔ÷-üAoYï¬C, I®E4R yô*buÅzÜÒ ä8å8“$éQ«’í‡Á¿tÐ~`òœÆ<öP jzÛ_=e/~°/’Sà“´Ã:PGj)aIn•QTì[%¬ŸÔ…ë©Óób?y5ˆÅa"ºPè!úi†¢úbjŒÕ*.ñ„9T‰ è-RQ‰4¡A2Æ3®ÈŽ\ñâ—ÈA0Òq‚,"/¢Ç0G\¤ÈïÖÂû$ †ßƒ#SÿøJžj+ddǹ7ŽŸ¼^U֘ȹ1’㛄*WÉÊVºò•°Œ¥,gIËZÚò–¸Ì¥.wÉË^úò—¼<&ÙØ­S",“”ß(­FºRÿȘC&Gœ KöÇšNdfú¨™°Fè‘yCe)ô¨ÃrÚp‡”6§IÆ Ò#<¼Qˆ=2a±%‹t4 –ÀÈÉ1Žözç<ŠEΑ-ä Ée5Ä9R ©§!ŠRB±…Rì¤8%:¹ƒ¢ä¡訒P…  :éI›UÈsrS‘ÚàKù³O÷É0™¢ÌJ>çÍŒ¢î˜7…ß:ç3T|Æ4“úì)'Í Š¯¨ñj6w2SúÔT_Ò|ª2©b9«aî¢Òñ©÷ŽI‚²šõ¬hM«Z×ÊÖ¶ºõ­p«\çJ׺šÕvÍ«ZÒV¼²•¯z ¬`ËŠTžnò…ÿá<&(˜”¨uî€WÉZUçsÕÅZö²˜mHe3ËÙÎRn³ž ­hÉ󇜡!UhH‰€Ö$8pBDQ‚&8D%P ²ÛÑúö·=9Ã8€(HF©ˆbEp›ÛRèV·€€MI5È4~J(R“=áYÄéz4saügGáWG”’È Úq Nåj$ºm.nu;‘'<×!KÈm(JÁ‚T˜Ul*eñº¾Âµ¥‡ ªf/ÛËæv¯>EéNýZ¼"Üöo:Õìró1Ûe’÷,®±úÝðv¯sSÆwÅJS ·¥ÿÄx-pÛobÔ¦ËÌïwR»5Û8/~LjC·•Ílk0 jɰÆ÷dùÅ^>Cr+ ÏҸŭñk“¹Fé.VÊ=+mûûÙMžvºAæ`O Ü}ìÓÊãIfhûåÜ.³º‡.r8¡kSßμãÍô /݈<“©¯8eo×»Ó˜VÒ©"nô¨{9H@‚u«3iU»éÜc÷ÂÚ'0™«ôâVwy ItŸ«ËæHwû;s^t¸ãñèh7Ú'øÂãùé†Oüo‹¥2'81‰ž]¬=Ã|æ1ÏyÎ_þòžýçbyÒƒLóž'}çGzÔ—¾ôª‡ýéU¿úÚKgÞò3˽îwÏûÞ÷lhx¡Z΃×ß_NhI‡ãá35À jãô½6}êKVúξö·Ïýî{?ll» F`€- "€qˆ9ÿ­å§çûð¿üçOÿúÛÿþUK>ßç¦*>N]•……0“˜€ ¸€ÿG¥IµTîÆOú×€®ñ€IÕqíÆv£:Åó ‚"x;Ä3‚±S &X;(˜‚#P‚,8;ÂDU`Õ/bŇ#C{2FÙuw—N‘ƒN5498•Rr<FÔT„5„hX˜\qæp¤ƒåd]Õ„å]"5^éäNå5Q'QR&Ò]þDQwDh„FôdGgè;E€ü÷qTJh&ò„„A†eÈG<×P~¸†|‡äHCqx0xYE=R•˜O(‡¸vùã9ÿNåˆ[•=Ãtˆå±ˆæ!=À4ФXЦxЍ˜Šª¸Š³ƒ¨ˆs˜Xu8N‹‰ça‹'1‰°X‰„·QŒá‰-‹å!ŒjÔ‰35x‰Ñ“‰ e^dHtH‡„7¢kWAUÕCIèA$BèQõ†’xTìW4±è^³˜På8axOXh…BÈŽÖ5ô(|Ø8j8ˆ&¥†iÄÁ„Wĺ(x¼ØXEyrmqìdAÀf"ø†"Á„ìèŽ+‘ˆ…pÆT)IžŒhAŒÝ!’#1iWtØ‘v(T›YÆa%6¨?É’9ʼn2“4(“ʈ@Ì:$¹A&¹>ÿç8…*I‹ 4”ÙÁ”$‘'©‘'‹Ié”BWM-yEY@GÉ‘6UE?„>”l©C>t‡‘ÁÎÒ] æZ2‘Õå–¹HŽ É XYÕGñ´DAg´—è—°¡–iøb´))†„8H{ Pi”(I•_é‘⌕ÄVrY„yGH"%,…R Å(|¯˜‘1)…^‰Uvà(›ˆá|ÁW›øw›¸Ù}$`1¾w2Í·5»©5 W±)4p9C“œ¶)|ÕW¥œu©t]9X1¹f‘Aœ¯ì,¨0{°r± x\›ºÒ8¨“ xÿ*–™º¶ˆ»¾|¬²Ü¾ÛÂÕx±¡«ÁWys¶;³ˆ¶¸ìÃi1Ãxʾë+u»²ýrJ|¶[¾A«¶§¶¿U¦´D¼´Û´âÀÒ’ÁY¼FÆÚ:Ædl­fì¹¹ÆlÜÆnüÆlìž)é>Ó;°’Wy²÷z¸g{¶'z“zš7Èq{©·y²WÈ„¼È±gz·É€ŒÈ½YÉ–|ɽ9œ^4VÃ3š<}ASŽšS¸Çt1$ ¨ŒÊ˜¼Ê¬ÜÊ®üʰË¢¼<[¬7š ǸœËº¼ËÎ `Pu#ÇXFÊÑtË^%|]Óœe}ÌœÊüÌÀÇœ3Ø8Ò¬ÌÑ|¼¼ÍÜ 6l£F€À0r³~ÄüiÜ¿ÙÍîüÎðÜÍœ† ©•ÿP:•[jSM²ÏüÜÏþüÏÐ=Ð]Ð}ÐÐy1Ë÷cÌIyÆAa9ÚüU:‰Œ<ÉÅjÂÐM?c3ý¤;ÉšÌzƒ€aÒ‰sPçäŒgG`|¥§Ù4À=™[ÙF5UéÆ9]L;Ýàó‚D]ÔFí:.xÔJ]ÔI½Ô®8Ój²Îl!=¬³‚#`ÕKÕZ];ÄcÕ^]ÕWí:X-ÖW½‚(øÕ°ƒÕgÖ´sÖfÍÖ­£Öl=Öq;] Öm ×k­;OÝÓÍ!ÕkAÕ[=Ø„ÍÕ…}ØÅÓÔJÝ×Ç8ÉˆÑ Òˆ—9Ùÿcº/’˜–Y†Kmh^-]ŒâȳMíIJ‰S‘b•ñÓíÔ$-I6™ÚËÚ25ÚtRھȮ"Qšf¡ÚÎáÛ ñ˜sJÇ’ÉÓ5©U7é’9 Ò-Òðê“`ùoÎ+^^ÛŽî$rhy9R›éABú…k风ù’ÌíØ¸ TÇ­‰É­•tiÛþâÜ »&y9–Y„)ä—üøPzY–×Û™b8Yë†AJHÙC=ÁÚà{Ïá Ù"Ù@™•³]ÏnêàejÚã}ÙxHÙáýO~­Û=RŸIà*uwQˆ~‘æ …§é¨‡åCáôÓâ”ÿHÜùlܰܲ]ã´máÃýââ«ã+Ù¼Õ—G^lèÞmˆ|¹Û}™Ã[ø2ŠFõãPmJ®M“;ÎÞ=ÞXï]Ñè-ßþýô+A(iµÒÔ8¤fȆ–#ž™Ýò„£n¾âÕƒäáXçÁmãc*äuLäãÄŠ†~舞芾èˆÎØbNÚd®á{–g(vшm;˜Q·z^˜¤ùQ®ëç)N©Èà£\˹ÚqÜaê´ŒãkJèâ¿MãDáê êêÝå6M´n¬>˜Z!Ü:­ë1¾”¶ŽÄÔÆ^•.½ŽðøÝò(êJx…vNR~ÙÐøášíÒ˜ýãÑ-ê  äÅëuúÚEîå«>Û˜$Ú~Û‘žÛáÕ˜Óçý¸äÙÎÝ âùžç"5jfd™ •s‰„ënØj!á”ì¯Áðað4Ýì6}Ú=zíWUq~çyÎÛÜ•…ótà⣼ì­-ñ²^‹ÉîÞËíâ!¥Ï)Èdâ 9’)Óa~ÞîòóÑ?yñãð­ô1Øîµýîñ­óeî ß7BŸ–ì~YþL[މÑ}ñ 5à×ý@原Míшs^™×䆘™}¾õÈâ+ãÿ‚^ÜBÍëÞÞõÿðiQß)Bv:ܼe?£Z÷ë£Þïb¯£?øç–…Žžíï èªÙòøëoŸî¡ÓôaùñQ=õˈr܃Ïö”Þ]â߸˜3º†jOôäÎìæ>Ò\Nù‘Û°´_ër_š¯å&?ùÏãë®SŽoÏÿà’N#Û¨àÏÖº ”³âÞLÞP›¾Ùû¨úNž·ÑRª‡Ááßá©Û¿Ÿ Ê­_ò¯ÿòqb½þìßþîÿþðÿò?ÿô_ÿöÿøŸÿú¿ÿüßÿQI ÀRv”B˜PáB† >„QâDŠ*…QcFŽ}|ÿYʇH’#í´˜RåJ–-%ÚI¢ŠRÀ4xçNž=}þTèP¢EE*”„M>…UêT©'‡.ýY0f) ’~Û³àA—eÍžE«pãÚŽA†—¤Õ´uíÞ}ˆSfBaýþX0à¥T FÜÀªR ZítmÚwðä‚X âÅœÙ.[ÎnßÊò¤fÒ¥-ÚDZõjÖ­]¿†[ölÚµm߯[÷nÞ½u›‡½vÛS–$Úoç½w0s7¼u߇'>Dàû6½xå—ÿÿïøÝíBÍ¡è]u­¡éUz­Tb#ºžyïQv^ø»º×~àP ¦~{éÑÇ·&öñ|ÿ{ùÅ ßï³È7?ÿUÙÇ_¢þµ_ùÈW½ôýo~\Pý’w¿ø¹/Uï`!ò)îApè‹ Á$ˆ@úGˆ[X¯×= –o%­ÉÕõ—¾ vÐ…ú fþ7BÖ<Ä€))¡­‡ÂP…/"|bè.jЈñ»!öŽxÁ[5q} bå3DÌÌp‰&Ä"žlxÅê°‹;TŸÅè*V‘„g<˜B5¶±‰tc©8F:–§Œ2„b Áè)V0‡L„#ÙxÄ5ÖÑϹã!:¹H¤Mm#_›ø9IF&’’—¬£%1¹É(j’“Ÿì 'A9Jù‰’”§Tž)Q¹ÊÞ©’•¯„+a9ËÓÿÉ’–·Ôœ-q¹ËÈé’—¿œ/9Ì» “˜Çl›1‘¹Ì±)“™ÏŒš3¡9Í®9’#Ô$ÍSÈ Š*‰ ãæø¼Î=…ñ…D¤51‚ÍàÙÏ9³a õ´¦BnÖÓSÏ‘ 9ýW¯š3XþtŸ+¸¿à|s9Òÿ:ЀFž-d«ôYNè-´:öT">- „îs£`ó8‘†t%å¡óèF p‡ u©DXC”ÎÔ¥I©MojÄ™”-½) KHÓ•ò1‡)ÝcôàéáêôS2-êHØTt¦Ó>ìDÑRÒŒ‚´¡_í)Nù©O$žOžaý*YF5¢µÿ§Edh[[¢Ð³Ö5¬<=+]ÁZ@øÁ”Ÿu•©@õúR®ϭ-¬<áºÏºµ>êIÚXçN—p‡úköÄêת&Õ¨1Å,X³÷C¹îµ¡;Å,h…zY‚ŠÖ¬ŠkhUêÔ –¶´i½ç]eûDNµ·hE-Aó)UÇâ<õcewk\åzÕ¹$]k7ÙØÚĸ¯mímO»½pêU»®•­wý9\¿z¯r,c™{Ýçæ5´=•Z‹+ä’&½,ílb¡š_ߊjM£M¡[ÔÆr•6Lµì€ ÜßÔR7§Þbpû@»þÔ€–O?káíþ7¨Bý.}!‹ÕçQ:uŠ3Wß0Á&s*V‚[9bÉF’²&ÆñÓXœcŸÿÆr›ìûôÑ-Ƴ9}ÏI‘,ÎM¹½Ý„±ÊvB–àUºÖ-ËblYò*衹=“íj_1GÙ´Ü”¥cæ'³¶º€Ý­–ôÐ,‹ùÌflnûšæïírÚ\ó†S»`+[ØÊ¸©œÙ[^?ò·¿PŽj¤©J\3Á2žíüèL1ÃEî´{çP£ÖÑÀRóVÁ¼^8·Ú½[nó¡Ûkè¿bYÏÕE¬å›ÞÂæzÌ¿¦®«{fùö»6k±Ç©^eÛùF©6²mãLaôN›³ 6¬½8ßÕŠõÃŽõ5l‘lcÿZµW^4ËŠTFÇ:ºÂ}-¥³ogÛÚÿfñµ¬Á1ï{Õ¬ž5…'ìf†r[¼ã†7¹³n„ƒš½Ï6t‹KÞ]ÓØ‚µxìú\¸¬†'ßoljhÐb8ÂAU¨ ñ[këÁ¦–tÏ;èé};Ôº~9P1]jy»æ!g!–̵{+¯Þ¶^›{ ÙuÖ8›7¦£Ò;Ý!©ó¸èKÇz7þ8@gÝ뺺wNÍŸª=˜[ÿ3Ôý³d²¹ìo6û³Ñî¹®{ùèåAñÛ#÷/…½ÊþùZŸZS¾ð4”*á{ÎeÅ+•¶ˆùÐù·¹—N«Ñ¡k³žìc‡x»í~®œþq\¿»ÝzŸ¼+äËŸø½,O¶i—ìjŸ[Ø-Xl‡òš¿~ó¾Mý‡üÞÏ„;|Ñ8x[!~{nÛzôÿ.þ[±Ûåà;høJ |ï“_ÓíãœûöðÎ¥ý’G䌯¾‚ÿ®Opס>ý0\½…üλÛÍýï·~üŸ>ü÷߃úo'þó¿œ"ì8DÀY¿d@ÌXÀ„À´xÀ<ú“ d¦hˆƒŒƒÄÁÁ$Á4ÁDÁTÁdÁ¤ŠË¨ \ l€ P˜pŠRhìÁ4AôÁ§¨ðÁ"L !ÜA"LÂ%œ $tÁ(”Â)¤Bt œ€JH ;ÐÁ±€‰›Å°@ú1ÀÛ¦ƒ°ƒN˜„¦P8Â\B%Ä;ÔC„ØÃAÌÃ9$D:ÄB¬ÂFtÄGDÁ+üB-܉.ÿüB,C»‘AÑ@hCNpCHÅQ$ÅR4ÅSÜAPÅUT”U\ÅtEU C|›MÉÀÅ\ÔÅ]äÅ^ôÅ_ÌÅ1 [ ÅÆcDÆdTÆedF¢à9¢E·!F1FžØÂ @ ¢Ð ÉŠl nüF›è pÜ p$ÇfDÇtDÆÙJ€À ¨P$(€O‰Æd*ú‹šj,ÇKGŸ8ÇŸøÇÄF,ôFƒÌ‰nÈ‚üÂkTLJ„È^œ-°‚DPhÇ–{d›iü~ŒÈH‘$É’ ‹Ù:p@ ØHaü|T»•I“´É›Äɜ܉g¬!Ž44ô.ŒÅ¡$Ê¢4Ê£DʤTÊ¥dʦtʧ„ʨ”Ê©¤Êª¬Ê±ÐD™À¦ÑÉ®ôʯKÌÿÊ«rºl½}„I t‰JàŸT­¾ï.Þìj&áæ&åÊ^oç8q3®°íþ®q1~pÝþ·úËn‰ulM–dí>‹òÏwfç†×z ˜Œm؆}îŠÂ¦â®"Rn–ïñNòäVíPfm°î_ÿè¯àö†q—q«¦q¬¶q'c1Ïo2ßoÿ“ôNs:×T;çpø®j£½j«Ïœn˜¦àá¶Mtòÿ–ó6¾`•çÿ-r]UHnˆWèÿðqÉ•V5gN/iO7s×FsØösi†ì³ÿîð¯¦l·ïê0õ›fò°öoQÇ‹wá,§âÃÆn.wb—N_bgˆ^â5osõ´.ôV¸FÆdj/àZs÷õî,ÏbûÝZw–gt¾ç#7ä¨Þð©tOu_u'õÇfó;Ÿ\?sú†æVGV@Gwýt Žóßíw/ %Ó7'ôÙžrè†òWƒªv OiI'n/Ÿg)×pÔnvGõYÇWŒ¯ÍU˼†é‹£pô[îë†e7]Í xGíøhŸóZGæW¯kƒ÷÷·wcÆ÷²ÆùOñçù·rÝfkˆÝö_¯x’jêyÅáe_y#©‡÷ïtÿçè-ç'yn(Oôð^ˆwúpOù‡ÕZË%wj‡ù wó¡‡ó¢—sZw€o¶ÜyW˜óv4.íÀüÁ'üÁ_ÓüB¬?u­—o†îù±þùå@üËàû{ñûöHï$^䥭0W6v†_Z¦Þ|ìþi˜4{ÜFr•¶òl—ÞTÄŒEÅ„t¹|óËÛÇýÜÉÙ׺™×Ì­@ËÐýá áWFIô ãßÉáW|\÷}é„ @¬ â·~ AR¬IžP~F… H h€€dÈuLü1_î2ßK;˜þéw•qLHq$ÿë×ýÂ0Åí¯ÄÆøþðï ¯;í h)@Á*lèð!ć$ìL$Xê"ÆŒ7rìèñ#È"G’Ü8¨ÔÉ”(WÿžôáÒe)1gʼh§ÔÍ’:wòìéóã@„BF,jô(Ò¤J—2mê´hŧRâ4ÕaU§rMZŠÄÄŠ~’-kö¬I–jU¾„)óíL›8ÑÒ­k·c×¼z÷òíë÷/àÀÇÞ-l¸®ÊÄjÛÂmŒñfÎÃ’'S®lù2æÌš7sîÌY1è˜mi’–Ù3êÔªW³níú5ìÔ¡3& ×tìܺwóîíû7ð³v\sîéàÊ—3oîü9tŽÃÙ·ýxnôìÚ·sïîíô•µ_Oþý<úôê×óß²ºcÜìçÓ¯oÿ>âµúÇ[—ÿ?€ XŸ{¢½dÝq ¸ ƒÿ :¨\üŇ܃Zx!†"‘‚‘'mÈS„ð•Fa†%šxâƒo\‰O!Hž(Ê8#Ý}rQ‡y<‡¥¸!œ~´‰x‰5y$’»õxÑ¥´ñ‚lØdF7Šä¢[ý™$—]zéÙ”òˆ“8PÈø¸áI8¢‚_Ê9'v‘â $o¸ÁFgœÁAR ¡†oÀ!‰'K~„%y b'R&*¨ÐÂF’ªÐQ OlC—–¢D IZЧušz*~vø hs´$q/jgHKX*©(• Â®£f¤„¤¡ô‘(¡ª G)¡bti©¨:ûìy ,°jQ€BO7Œ"XÞG’îÊÇ­•òZCF—¨p "Ä ‚¢.Û©¼zj©&ÐÚ{ïsÈ`t€ÄA˜NÿÚ¸¥FOx+©»*»ÝP\ÊÄBi4VÄ[|QÆ;8ÔÆ_<ÒÄ#„QÉ({œ2Ç(wÄrijŒêÆß5 (Î3_ +u²NH+Gˆ à†;RÈþFXÉP¿¼ÑÉ.W\ñ…WŸ5Å&s„qË#ÏÌµÌ slqÍ#«mvØtrí²d”"÷OÏú(G½ª`ÉÂ#Õàéßer¼¥ð!ˆ&CäaÈEN_Rƒ¦¥äÈ“ɼ¶Èm·ŒõÕ™Wx¹ç›‡ÞµèbO-²Ô*úڞ_î3—¯®›ÝCã­°zs$ïÃ!bi ¤ÆÐG—¶à©(ÌBê }Âlðÿ†½9Ö¤[=تÏþñödnvÊÙSm:ö ¿Þúêç›Zýö±Õçí!Á„P¬Ûë 1Q"¡ŒÚD¨žWŠäï"CPÁ Du)=0«€wXÂ%è2ñ™lk!ƒø.X³}Nbh#ŸæÞ¶2›±Ízhë\̾öAíÁ®K«ÚOŽ BB" ?DÀ:œ@KR\á ŠXD“8 Etä}D"ZHä%)`I*zÙiáøðś݋Z,Iöp "ü€C¼ý`!²1]¸B)°Ð8‘ˆXh"ÐÄ3¤¸ $w¸U½¾(ÈAÖ' `ãN¼PGéäñ=BƒŸy)ÉI:ˉ|„"%3©É/YÒQ‘Ü$(C)£;aolserver4-4.5.1/docs/intro/tcl2k/html/img070.gif0000644000175000017500000002567007363640503021207 0ustar frankiefrankieGIF89aXÂ÷(60 0///0%(%(.2/0/)J)Q0`2z/0`2|?@?/g``0`0/n:E\Ri^hb`g/DDDBP_SSS_b_~~~>–2 8„ÿ/0Ï@”P›LžQŸ\©\±O¢R `7G;N%Z¦/g+cª5f­;l²?r¯`Ï/gÏ/`ÿ3fÿEU’S^˜O`˜Sc™Jt´\k¡U|º`gdq§/—/ÿW‚º`ˆ½[„Àf‹Áe”Èw™Æ£Ë˜"˜!¯.>†t”}g`Å*Ç1Ë*>Ð':ÿ0/Î7LÛIWÓN`áVe°–ƒ„{`ϗȺ?ëÎèÏðÒëÕ(öÚ+óÚ4õà=øÞG÷áIøäY÷åiøé{„ƒ„––•Žš¼§§§»»»€Ê—Ï…¥Êˆ¦Ð›¦Å«Ð—²Ô¥¬È©±Ë¦»Ù³¼×¬¾â™Ìÿ«ÁܺÄϱÅÚ«ÀáµÈàÏ—à‰™ìµ¸í¼Áð¼ÄÁÁ¿øê†úî›úñ¦üñµÆÇÆÈÌÛÞÞÞÁÏåÆÓæÇ×ðÓÛêÛäìÚâñààÐïðÕûóÇûøØãçååëòìó÷ÿíïýøéøøø!ù¥,XÂ@ÿ}XÊGÁƒí”RXª¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éâ R/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nPx?â`q/_‡{ö8XpÞŒ…v˸±ãÇá6$w¬N»@+þ;Q3E¿š=oök˜ó憢OCœºTkȰcËžRòÒÊtbþÙtá×¾AGôZxhá®_\œtrÓË›§M½ºuë¶iâ¶\öº÷ïàËÿœ½¦ØÜuyŽ_Ͼ½û÷,ˇµiY·zøøóëß_>åóÜíÆß€h`cþmGWwY-7HÊ™[„ì1÷…j…ÜO ¸ €(§—„Ì-æ „•ø—sˆy†ás¬A÷Úg(&7ÜŠ2¦˜Ž;–#¾Ø£tÓ©È£«åãEA*y¢DF.Ù™q$âÝP¢HáQ")]_Zr&dOÒ‡ƒ¦©æšÏ±ÙR™7xVc‚9$xBXcxuº9TŸêãžm¨œP âU[w§—&òe“w6éœ/bé‘*éèhvšä—„Ê©¨ Z$¡Ÿ®øiª:Ö}¹é¨Sz¹£¦V²Ú#®¯¦X奺҆(zöùilH‚ŽìY3 ß°õ¥çl²Iɪ+µ,aJ(¶lq[j³Î&­¢s2Ze¯¼fê ­¨¾ªâ‰€*‡š»ž"©î©ø²ko½yQZk¬ëfÉi¨ôvúd¾è†)p¸l+gWÞ2,ñÄŸÿäð‡åV¬ñÆw±T‹NlG @ÊÉsˆ@òÊ,·ìòË0Ç,óÌ4×lóÍ8ç¬óÎ<÷ìóÏ0—RÉÐD@4Ñ$4 ôѕЀË:û1Y!KœqÇX¯uÖ“umž™w¼“d—möÙh§­öÚl·íöÛpÇ-÷Üt×m÷ÝxçM7Œx1 $ÂmõÔ—]Ͱá\7žU%hóÅxLj+¶„4”9a®¥äjçZ:n ägKõ±•K{¹è¬WuöC“sœ:šO>ɸç®ûî¼÷^JïÀ/üðÄoüñÈ'¯üòÌ7üïÎG?BEe/tº±³W½¸i“´îýQÕÇÖ¾qöЇkû÷èûôºCâkL>Öç§/¿úd[Ïõû«;Ôýüü›´~Cí«þ8?îzýk£äe£ˆÏl°C ›¸±°4󒔤hµA&P/ “`WÂ'Â5QPcì—¾>¸Éæö;œ×&£ •ÏY ºÀô«„®«_)vÂÚqo‡H ï7ÃÛxȆð;b§hqbE¤˜í&ÁÅ.zñ‹` £ÇHÆ2šñŒhL£×ÈÆ6ºñpŒ£©'D ¦)‹"“"÷+Ú1Cÿx´š·ÅÇú‘‰å©!Õnx¬êJ+$R9›%Ê0‘O\d²¿ v¦’T`$ è–C^²‰ó‰Æ6©¿Pòð‡öê•Ö È¾?(Ûã¤+w¹:"•ÿÛ*ó×ýñrЦÄ.ͧÇcòÑ’Êf*66Ó™,$ÙL÷KÛ(2qð#8ÇIÎršóœèL§:×ÉÎvºóðŒ§<Çi‡yÚóœ Qg=Ó™Ï{úóŸâŒa41)L(Š ›adKW>…Z%m¶4Ð2JÑŠbGšÁT¥A-ÊÑŽ^” Õ¤GGJR¡<Â!ghHÒ‡Db#% œD”  QÁA T ‚†ô´¤@ÝãÎÀD$ËÔéNKÁSž‚:ЙWsI~E]k¢$GÃÂõŽEÓŠÑoZN#¡àéRuÊÓ‰<¡©YÂNCQ Ôà!*ЄC† SQ”¢7pˆ6ÑF4¨dmìH#@DáDˆ_gà‡ü!¥ D)@;/\¡XhÄiOË…,hA"1…¬lg;”ØÒö¶¸U‰msËÛÞ²¤Ô¦o‡K\’ÿ춸ÈMnCŽ«§m‰hª4ºÖ•Æ7`‰é¹KÌ•ªëAå&—¹ÈR«À•¥ëþ*I2 ÓžX䢎EÞ/FÀ+ßúÊ–¾öÍ/Iñ«ßþZ”¿þ °3,à‡’À¼9|AµU ZŠZÈу°»à=xTÖÍQ†¥áöVHæÔs ¶/)1¸¼¤ù!®zÃ/ø>VƒbÒqüU0ö®jF ~±OìÛJS™­RÄÁ“Rª²X»Ô¥výøÈmz2t£ü¯$CYÄVvÒ·,eYv•K ÜUz©ìd$oùÊ×UM—ÌåJÕ+(<6°œ“gÏðÃÖ`‘ÑûO½¸ÿO9n¯”\ìà\Áx¢ù󇧴h>ÏJÄï곩ּ/B·™»¤ò•P|æõFø8^&ÒˆG|:‡Íjî3Al^0£ÊgNØÀüÜâ'£zʬ²¶V}#Z·YϪ‰×»Ü|^M»ÙØLöu¨Á|$A…êGã1õœ§Í?i›DÅN 1§cìè43Û`‘öô¬íãA:P3>×±¥ O`îUï›ÃÝmFÛØZÒõ¨µK’ìNWÊËNu«eÉ+„‘Y»µÆj“±´de<àSf8‰Çº0Y[\Í—tžÖ]^]?¶û¦¶È[ò‘›¼›Mt«êØ€@ à'&¡4’•Bi7rÇùÍw¾s›Û¼ç?÷yCj>ô–å¼çCç¹Ð~t¢=éO7zÒ•Nuœ×hXϺַÎu¥A /d3š_êéõÒ=íã*y{Æ9¸@ol{»Ûä>wˆÆ½ípÏ»Þ÷Î÷¾Ço Á °… A Í%ÿ¦vöøýñ¼ä'OùÊ[¾lhçOã׳ø“·G›˜(åÚšIp³H½êWÏzÏ_'™£.±V^ÁÌ»Þ1°—é *RkrRzÀ¾ð‡OüâÿøÈwbûCí>¤¦÷}+¿|{©ºðsDKîÇ÷üàn´öºô*õGºQ»ù=fì©rÚiñšè'.¬w…{_žÒ›¥+ø§_ýµÓ€ñ÷,Ý7{î—Gá×ø¡~º'{ÑR€‚ÄIr8Xx˜e´|¢·€ì—´‡Bׄ€á±}î3€ ¨=Ìt€$è È} H.¬TL¤gÓ]´åCÀv+˜&(Y@((ƒ§×I_æBãwr=¸?HDAXMûGƒ‘„ÕAT%…Bñ‚'ƒN(‚,؂ౄXÔ„Âõ„¥`L^èxö7PÈ{ÑG†fx†ã…@¨…cÈ…ü‡Þ†Œÿ'†ßg‡Pˆ‡q˜†ë‡l¨~X†«ˆ´¡‡ ³yq8H^ug"·^G¨Œ.Ž(„}Ö·ƒ³BÞe…A!‡LH‡}hD]H‚¡Ñ&8h vƒk}†X;và(‹¨Ñv`׋—÷‹ÀÈw$02]G3l·6è6½D¹ø4P:P¾vtGy¥Œ¢m|Ø{ŠØjHˆ´‚Þ8Ž¥8‹ÞÇ䘎¸m¨ŽîXjði`.à )åp ËTMµ MUW9EXL¥MðS)WL… áLõŽ)0"DeT¸#Kr…W¡’ }„З yàT*’=â$^â&~â(žâ*¾â,Þâ.þâ0ã2>ã4Î4r}à†-ÔZD6$P (˜GÀ<ä~7ŒÞû4Œ6ɘ6ÇÛãðŒC~ãžã|-2<.Džå—gäß›äg³ähs¼ON2Bî¹ùzš=ÖòŸ8Üænþæpçr>çtþæðíDFlÌ® c¾çÈà~>g€è6è„TŸààžà†~è#•gð.@’®œ¬ égI Ce#RPŽéîËZ©T†å}Ñ: QyX©. 5©éÃ¥CUTQ êÿì‘©²Ue¥²6P#@"PÐão1Ò4ÉS,IWÂ^y’j1œ¹â“BiUjBÙGy°:Øþ›ZÜl玛Í}nàì$P qP#ý‘AXrë‡Ð, 5ÀzÀ¥‰åS› ëL5|ñ ™-P¹dçí¸,”ã^î‰îOé“”hñHÉ“QY~Déñ¬CîúŒ™pYDà3&  åªU §UÇ…í:‰ër@B0Bp&ÐY¡àYðô¥`:ŠÀ«µZ‹[}ôw‰(Ñ@Íõ|) öê-öpfIöFlöhŸjŽlßöÕùö´Í>a/÷!+MeoêxŸ˜t?{qß÷Íù÷_Ï÷‚—„øæ©÷koøŒŸ÷Ù±÷zùëøpù–ù“ÿø•¿ù–‹ùu¿ø ¿—‰o¤1*]úÿ&ú€¯ùí¹Âè,CœI´³û¬ÿ§O©Ÿ-$›K™¶Ÿ£ñ¾ûââú…ÿù͵¸œy› ›gùzc–* ;¥ì†ünÑûQñû;i™º:°´OÞ} › kª¾™iñvÏÚÏÜŸÞ¯‰†o9iಛD+üÿÉbÇßþQJà@‚*…PaB†}<|XʇDŠÚ)…ÑàFŽ9¹$#=~490eÁ‘-Cª|I0¥K’W¬y“¥Ë“=}þTèP¢EEšTéR¦Mþ\µ¡Dˆ­VˆQãS‘1ezµ èJ-¿Ö¨³TYš8ÃæûÖ,WºuÿíÞÅ›Wï^¾v¥þ¥ ëÕ‹÷ª]×mG´o?NëU-âÈh'¿¤Œ²q_Î=ZôSÀR«^EÕ°^ÊsC–{¶±ëÄ1iÓ®Y6ÎÍd}ëæ=ZøpâÅ_ZzêéÁ oÅ›¹²dÅ;q˶™Ô²3çYîÍ5¯ºt¦í6|k¡Í¦Úsœ=ïf½»Ù×ÐmŸ=êÔ!VtÄ[©®-'îoƒK.©î³-¦¸`í¤ç;Àû5=»Ûá¢÷êç›.xb…{¯½aèŸf6MÔÎg[ÝËHÇÇ3¾®‚Iƒâ€XÂA’ðq¸û]â.Ä=/v?SšÒ^3ÃH"reA,âqðH¬ß9xZ ¤%ÓG·Ÿñ¨ƒeéXi5¨‰Ïegûãò¬8KP¦…øC%5¹´L^ò‹o3&ïÿÜ8É24z4¥#ÙÒ2iFR&ܪ ´Ý¥ñD¬¥+·ÙJÕ9m6k™]ã²æ;™®Ž&ÁIÍNNÈ™ ¦.¹xK³ŒÌŒ_çWHб ~ÚÜå>ÕxL¼¥ó^eèü>æDVÑ‘]æoÂCN)~’l¶´çû“Ä@-‚´K(Y³È“êåž-Å¿§•”(/µiNu:œîÔ§?-NOgTÓ²´uŸ$%1hT †K¤‘"’½$¢žð¢ëħ ɹT¥zP}>j‹ªÊ9¦Â±/IÝj«º-‘45¬|£åx±¹*ô—c¤+yŠÆUrŒ¡ëh,¿z̾ŒV±-uÕhßò:ÇÃðq®<é[SK@¢²–¥¥7}W­&¾Ò$å™=ðíŠ[ò” §8³ëÑÏ¢v $ntÓ ÜŸV7:c[1ÚF}FÓ¢]A{[áý`„kèBõ‹ÖÏ:Ì:„•ë_û=ø=V¶OÿÅ–hU«ØN×Õ²/¯:üa*Ä%FqŠ…rb·ØÅÂð“eÒרÆ@añuLâïØÇ@íñ…lÝ6™Evh@H&Ç!ÉO†r”¥p‚ÜàGx¾ð…cÛFöF‘V>qŠWÜâÇxÆ5®ñÃÝ‹Þk‚¸ˆ$žïJ÷{$Ïô™~r~§üß,‡¶Ëõ-ójoÜæ7ÇyÎ÷•€`€P³|ÜL!ÑÈñòMÓ\Ò‰¦NrIÃ\êgžzÌgnòª[=ç_{Ø ¾/X! Ï?À£— é RºØåÎð¬ÏÝîwÇù¾`'`$`»Ã¿jIIySŠ;ÞE¿xÆ7ÞîoWÛ?Eø¨–tÔU²t¼5¿yÎwÞóŸ}èE?zÒ—Þô§G}êU¿zÖ³ÓŸæŒ5EcÌ;Þö·Ç}îñ.xÿ½ýC’²’*a“××›òn—€|$U‚äÅùñÔ|RóžùrþÒ¡té§éòTZþõT Í“$ü\ò½‡ÎŸ<ñ&û1ß¾Û»_¹2­¿þY²ð¢/_è4•þ@ಠ™/ëk¿÷“´ø›¼Ø µÙû>ă™ Ð?ý3§ÜȉÌÀT9Àðò$~±°ö3 ò‹7óC@I¿±?¤|#ˆœ’¬dÁ#ƒ¶<Á‘A ¡ÁܶÌŠŒ ù3¼úB BØ)Ù #$ˆIÂ)¤Â*´Â+ÄÂ,ÔÂ-äÂ.ôÂ/Ã0Ã1$Ã24Ã3,ÂP‹8ØBÙÁ 1ºI9¤Ã:´Ã;ÄÃ<ÔÃ=äÃ>ôÃ?Ä@ÄA$ÄB4ÄCDÄBôˆHcÀ1yC ‰ÃD¬ÃRÄJ´ÄKÄÄL”DJ´DNÔÄ?\DHkD"BË;<)‰D;äDJdÅItÅUüÄX”ÅY¤EE¤CO\ÄEUtÅZÔÃPÔŠ6¡RµS\’TôÅdTÆedÆftF<ÆQì’GŒ8D aÄTj„k¯k\3 dC&T'Ü0/ñFal1ËHšþË@ôXCiD?b„@cToljGmLÿn||ÌGdÄ%4>,ƒ¬¼bLHÈIÆ Kž|LŸÿ…NïÛÔ#éTXÅ&V'V[ÓfuÖg…Öh]Ó9¥PüTUQíRRMÓ@5ÖcåSR VúãNSµL\%I$UDÅTZÕT[E×Ö$Ôö3× IúP×d5Óe×WíVo¥S£ ’;mOí×=ýUpUVq J‚-Ø1=ØiôSmmÔ ¥Ô¶²ROáÕJMWYMTvÕ×…åÖ†õ×:µ’ˆmÕm%W‘Y€ÍR†UÙCåØu]Õl=Ù‰íÎ^…IÁœW{ýVˆ ×"ÜWåäMC5É‹}•Þ(Zƒ­V’A“ESœMÙ˜µÔ¦eÙqÙ…Yª=Ž{EØ|UXô Y®-¯Ú„Z"•ÒHÕY†LQ_uZ)ÉÚcÝZ²-Û™Å×LýX±Z»µÔ¸]ÿ’¹%̺õ[ã@Ö¯ÕÛ°ÕPn­WtEZGηmO¼E\U\¯d\Ç¥¯Bµ£Ÿ²¦¤Ü³Û´å[~-Ü®ýÙy Z„Úå<]ÃM]ˆ„ÚaÅFÂ}ÝÏ0[ÕE[ÖU[0}ÔÝQ ú]µÚÇÁµ¥ÜÀxr[s­§ª…Ž«e Ùu×Ûý[éM3êm]ë½^ãä­b L•Ü, ]Ý]Þ-]¢…W³ZZv¼±‡1Tó}XôM\Ò]ܾí5â^§¾ýÃÞlÓÞÞUNi5àFàNà‚P@MÜmàõuÝþö´~¸ÎßWUZæ Þ§ Aw3A!E"VZNÕ½V~áfá„óÞ_Ÿµ´ ¶a¹«á¹{¶~Ëa}Ûá>\ѽ_õ­JH󨳵â%¾¹>·Nûá}ëá|Ûa H h€ºã:°{¶Ö–Y$Fâ´ º¨3c&Fc‚sâsK¼|›b„4+¦€9¦€¥S¹¦[:-¶¸Îa/Îÿ0ÞX¬+¹4&ä‰{c.þ·CÎÆªSátãcÕ!µÙ&ÖB¶äKÆdŠóã7Ñ` ödžêäOeóäQåR6åOFåT¦àUfeîuåW¾ÝX–åÓ¥åZöÛ[Æå¡$…ð„èå› å]&æžxˆ„æbfæRøøåQiЃRéÈè“FiT€X鈢p&ŠÆi> é‹Îé ˆKPK@„@ˆP’Fê&0éœiŒÖ„¥L9ˆ2ƒ €80ÿªQz«¦h=Àé£^*ɰÈý…Ôë Ž¿ôæéàl±˜¶]Çö@ù øÕ žø ¤˜ƒ S€0Èì²r&D @¬ÎêŸÈƒ¢¦ÆmܶlÓ¡ªÝPÚÕ$¾ÕîYuÞ-êŽÅþÆ~á“ymC(àÖŸlÖi°¾þ‰iåˆL¸´.>M‚<0@íK¨Ž.…<@„%ˆÛIÊ^ÚòžR !o£W‹¬íÚFR\5›Ùæ?öÀ=©×MˆQêéâÞµì‚@ŒŽ“Ž>背n…¤“¾>„¤ðºÐm¤Hò®ÒÛyí÷>WÛžùn+¼ðoøeÇ ìú® W·*&P(k¾ƒ`‚@„P(é&é/…˜qX’Îh=H꿃%¸„˱lì@ì´ì虎#Ñ%õ.Tò†áíð€˜ŸìÕ±ïÆ>Š#ˆ€  ˆ€È?ˆ`ó XóRˆ€R¸‚+P„E¸ó=Eàˆ°RkŠîiŠžðY$ü6”Ë>¡Š€=¸"ø"¨sps?0:Çôè‚+(,hNçt;Ç‚?Ïfƒ¸šnk·&ÛL /uƒé UõZ_±R·õ\—õÝÕg]÷uÁ°€;aolserver4-4.5.1/docs/intro/tcl2k/html/img071.gif0000644000175000017500000002410607363640504021202 0ustar frankiefrankieGIF89aXÂ÷ (48''''*'&(),*,(.2&L+J)Q2z2|n:E\Ri^hbBBBFFFBP_TPS[]^kifjji}}}>•>—2 8„@”@–HšDš HšP›LžQŸRŸ\¥]­[°^²O¢Q S¡4BŒ5HŽ>N;N#Y¥%\ª)]¥+^©&b¬*a§-b©,h¬3e­†t”}Ç'Å*Ç-Ç+Ç1Ë*>Ð':Î7LÛIWÓN`áVe°–ƒ„{Ⱥ?ëÎèÏñÓñÔòÔôÓôÓóÓòÖ ö×õÚùÞëÕ(óÚ*ùÛ-ñØ2ôß:øÛ3õà=øÞGõâJúàIøãVøãZùç_úåføçhøçoùêyøè}ƒƒƒŽ•••™—˜™™˜Žš¼¥¥¥©©©²²²»¾½¼¸»€Êƒ§Ãƒ¤ËŒ¨Ïƒ¤Ðˆ¥Ð©Ó›¦Å«Ð“±Ô™²Ó›µØ£«É§­É§±È¬²Î¢ºÔ¢¸Ùª½Û´»Ñ²½Ý¬¾â™Ìÿ«ÁܺÄϱÅÚ«Àá²Åà´Éà¼Ëãቕ⊜뱴í¼Áð¼ÄÁÁ¿øêƒøí…ûìúî˜úïŸúñ¦üñµÉÌÇÈÌÛ×××ÜÜÜÁÏåÄÒåÆÔêÎÔâÌÛíÇ×ðÓÛê×áìÝãìÞéîÚâñïðÕúôÂýóÂýôÇûöËúôÎÿóÍüúÕüùØüøÞæææååïàæðåìôéìòåòöìñôíôùÿíïÿ÷âøóëýûáýúåþüçþúêóóôôõûôøýù÷þýýóýþôùùù!ùø,XÂ@ÿ‹ˆ¯HÁƒ7áSˆ¯¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\É"-|/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°.PxøÌ+‘¯E¿wã<0áÁxG™7qÄÆz9 &<Ù±ÃÅW+GNi¹!f·@á6¥%w¬N»-5C¤ÜÙpëΗa«F¼Ù³åßC®M[wdÜŽs»æÝ»¸dÙ°m_}»qìͬkÏ~þ0:séÉß =ûëûÿî›ôOÑKKÓMˆš3fçÆ•“_N[|õïòï‡çžü:ÿ»ùÆ~Q—Ÿ~Â÷WÊxQyšñ5]ƒ‰E'!rØÑÇ_sÎYèàÖ%Èà}æU…Mê™VV‰,¶èâ‹0Ƙ։5‰µ^]<ɨãŽ<öèãÑ–M¦±—#H&©ä’LZ%$i6ªØ^“TViå•XfôdŠt­hVYzæƒôQ5æQg2VfOiƦXw2¶iÒ–Qv9%JnôÚDýyg‰nþ¨ ~îIÑwŠÝ ˆ¹‰ „&ª›g”6*h¤ÿYz)Ÿ#NJ¢Ÿšnœ¤†nø^y–*È)sª*¤­ê”ÅažˆfÊhOty£—aö*æš¾+,Q¹Þ$å‘XɉTs›î8¦²Êš ìIÑkíCÅBµë™ÉŠª¦ ’©¡©n^žzú颱ÚÊê £¾*˜®¾Za¢¦>ºª¢–Yª¤×›íFl°šÓwðÂL\$Ž G,ñÄ¿5ÚÅPêzlÅwìqÄo‹ìÇ$—lò’ÿ!o|òÊ,·,cÊvŽìòÌ4׬ÌRqKm½ ü¯Ì §¨÷&”" ‡9øu¬†hŸOåC@õðŠB¤¢Öxx¶ø!íCô»b¿Š˜C¿‰íÝ„Œè>-mŽ[„Z¿¸ÈÀ[q Œ3L¤")†HM±xþcÒ MÒ¦I.vìÑtô…ºæ5ê‘Óû›''Æí-htû¤Ñ.yÂL²Jò•°Ä’+ãäUÊË’†ŒÔ›Ô·\^Ê—füb9”YÆH{ú™.å/v°Ë¬¤¹ÖEÍ\–Ò{\Ð’ÙÆÉ¥²–<1qUÿ;ÝŽn0§:×ù"c²óð;ãIÏzvežö̧>“‚Ï}úóŸ´£QëРЂ4(ý<¨BÚ‘„2ô¡ˆC#JшN´¢UèE3ÊÑn´£ µçGCJÒÙÃ!{hH‚‡ c##íH´‘]„à )ALP‚†ô´¤@½’îp€$øÔ©zZž–à:’N¥œ×æaϪe3˜¿Ä„U©bUzS}Ÿs¨Öï'Æ8šaK—”³F‹GÎaˆÀøÐ)O'Ò…¦¦À!SA Ìðà!&°†C–P¨!øC¢€ÔH&¨Uµì;'€‰]<0ÁL˜À9ðaƒUL ÀÇ2ð‘Z À! øPC0΀ضa lHL1Ë[Eî¶·ÀmáoƒKÜ·¸ÈÕÿàq“Ë\Ù-—Lî`§¬ã³¢…èBõ2UÏ‚ °&‚SAØÕbÇF:&mwº§—8*öÖº—óPv»+8r1MqëÕsùu5qJ-€Oë¯zÛàÿæ·¿Úñ¯€\Ks—} ŽpC4`û—ÂÆ/†”Æáô:¯ÁÃdä[‡d,¹ºåÀw‘0HPÜ\¢˜«­ qÆJŒ»ÛX†û½±ŽK–ãûø2(ú~LdöØ=‘Ì_ºÖÕÞE½L^“ø' ¾÷VþŸèôgÆ+(Êœƒ"3Á)"í6pÌ/† —ÅåÀžY¯ÍKŽs)³v¼'©A>ç¹’7¸ Î{¿¼cÿM™Ë’µ{€Æ_z9dÈâešÙù³Ÿ§µþý9Ò‰æ[÷²Ùªxh›Cô#7Wð¥™Ã䨞-XäV;7Ïq­ñV4ǯ'K³ËVŒ¢•e4ËïËdË2U©aëÍ™›x·œåc ¢G¦¤¬<-iò* –n4Y+ýÀn• Æv’Címé‘ÙÁWÅÏ¼Ö :äFÛÕð¬iLÐxÛÛeï¾·¾©”ï}û;Iýþ·À{ðˆ’fœ6uQ,ùìŠ5ü‹óÖ–ÊX²åSz Tûd¡™¹ñIŠoyâî_È3ý¿zxlÞ¸é$]ååH3BösÉlÀ‘+n”jä6òº‰ÿ”‚<5w¦çóâs^â)è*ß™š¨”p’sè¿’vËŠuv‹ûå?·¸î¶Ãr}Û9·ËCN陟ùêûcù»´Î* §å6; ±9Í V‰ê?Ï{‰ð®÷¾³…ï~üY/øÂß,âë áÏoÄ?Œ„VÉ‹aTv2i¤òP7`ašyb¤3ó$ë·y¹;éûŽ=Sn[¶ÎñHò•«ÝêåÃ!ËLÀ2RO󩌻UOîiŒ—Ûô­çø-yzNj젣g< ¯üæ…ùA Žöné¼}ÓÉØ¯æÛWu͹ƒ.ûÂ×½óïiü‰·ìéž?ŽËobõ»ÿeì—µ#3}nAvîª9¡ÃÎænkžûàIפL¡äLá¦}ß·u¨M¦zñ}ïwLéWPXxˆgªkõ¶ ¨ÿ‚$(Bñ÷%˜‚Dw‚{¦‚.è$,Èj/8ƒªÓôÖ‚4˜ƒÅƒŠ§ƒ>Po%d2øƒD¸#X„x„HxJ¸„DV÷à‚Ð /`ð ø¤N… %ÐTMõMUW&ÐòPWYðSøàTvõ†BÐ9€Wxå„6VÀà@`ðp Ńç)`W<…WæÐˆ1 ¨ Ò  `) ¡ % ‰ˆ3ÀS@P‡øÐv¦‡;u‡½ÛæUÎTjwt0¬Xj°H‹ÂC)š6Vµøu³H9iV¬8ó‹3bˆ*4)03$xØŒ Ñ„Îè|ÐÊ7Ô¸xÖx…—ÚxÜØ}÷à˜wÿT's6¤l]“·3]„nÒò<‡uÛ•;ê¶Šæx-Eg_îqzZ±ŽBáÐut7f±Gç…jYN—Ž<âsëµ`æa¦n†a}#e†jym &5èøbÆ_ÅA`ùhY%yf'‰‘&irÆã’!©dp’‡ 6Y5“³Aa ö+Œ`5ù_7Ù““g‘îXaC™“ñQ‘J¹”ß5e/Ù“fcaR™t#zTô’ Æl\’y“évÆ”.§‘ ’:)"é”(I–kÙ’`y‹p –‰’BY|6(qí× Âx”>ø—Ã"Ž™,ú¸©|Ég2ÿ†9Ž÷˜éo’9™úV™–io˜™™ð¶™œÙjžù™Dš¢éc†y>Òp ‰&‹)uUÇn›÷­™³Y4‰š‡‘´˜zy–ÔC’ÿ7gëö=† Ô;)gG½‰œÅ)6Íd<#GvÀ9@ÃùLkGŒ¥·LtéUt÷›ÀÉ8Þ×·‰bfÖ{Ó4w‡-'wá™dÁ×4ݧÁäu‚æžíé”˓י֦ž…–{²‡D¤öD5wž§£›ÿIj>‘ü'“¿›éijÇYkç‚(ö{ƒô4vv=†v@ª§rª€l=uD:°™Cr&—‚TlIkú ¶h¢(^¹ Æ˜Nȵš¥9'ÿ7º£ÝHšù©t£”šÂ¨£®‰VµRܘ{œw¢ÙÙz‡—^ÀQ9hŽÆ;¼)væö“ùhvwUýÇožÅµ¤˜#8}v¡Ts?mÅ …RŸÿnê¡©p•÷yMê•5ÊŸIÊPfJ¢aÖdÎY£¹V.p”˜æ º7ú§?*wÓ¥ö%G{Z9éb¡'Ѝ˜¤±¤©×§KÈ©>Ú\¢:ªÉUª¦Z¦=šªÎˆª¬ \®úª¼«²T´Z«%u«¸ª¤«:kc7F‡CÔÆ&wf¤Ãb¬± tZ+ ¨ÖÙ<Öu=¶§†ZE@äeÚI£\ç!2 €( ª’‰Z® æªŽÃæ8¾vsp¦äZ¨â—=‡P½ª)¬^×vô·{}„Fct!9hêK}âWGñE}A ¢äVrаÓg«­Îéf›i ›Ÿ[};G{ÈË:|d—|s’‡Nêò¥è¹s{{щ–Xó“ß'³o×Idç?Óö)úzhOêF̹iÖú¬!¦ucZ´ VB¡«ô¨NËšÂÒ´ôÿº—‰wˆ»:ƒJ}釬w:¤HR-¸„~Dª—A¸j=H›”s¶TZ­åÓ Îv¡§RH+¡¾sN¤¯ýé¬í v‰/æ¨f2©²0ж-7FyK±Ý%¸q›%!ûžoD_b9¢+¸Õ3}—Æ{Ð4¬(úzr[ž°—tþ8¸Û‡³¼7@ìu¹Öy}úU¯fÛ¹ÄÙn뉦h‹Û4¬‚v»I|ëV*›¦œT¥ž[ºÚÛɰ¹«sB‹‹A›ž€‹2¬[µ9xµÐ[QÒ;½õ¼Öë‚Õ›½~нÜ[‚Ûû½¾âKÞ[¾Ix¾èË„êû% zª¹JPë«Aª~éEK¿—qg4™7¿£k•ý˜þ;1X9¯–·ç9´Â«¥kvz+²‡¡iÇ¡á)'Ÿëz ˜²}ÄÀ \¹K¨k[©tz2Ý-ýÉÀÒ©'å=½+Ág°ÍÛ¡/l ¼”_ež¹‰¼žd³",°S×¾þ4ÀëË£ÿRûxÇXÄîG¾JœOLL2LÄN¸½‚JŸ è¦okl¥3¸[©0©`A;Ä?Ã&ÆÐ¾ÕJà hh¢øÊ,'\DÖ À¥I¾‹Zg€ZƧƨg·?‹3È‚FF‡£¡Êž£úÄMLOŒÜÈðôÈ,IïËC'ŰT½‹[LláHá·®žü(.ŠEx[9W¬Cµ¦®ƒÛ¯ÜÊ„ÄÊž¼ÊvÊÍ{¥ÉëÆÛºÀw… lý†K` äWA@qßF—»éÚ»˜UÓÚ9œ³a•6®¨‹[£Û·¡Û±MŒ½m3%;ÔðYLà5 #©å³U[AÂÏ%†ªH×Ä„€IpI@0#  ¢5¬0$Ž#€hp½ °e´u¾ [/MáÁ•-ÓTKã.}"d‹ãI¬ã6&$=^¶@>š#6ä9^äA~ä–m>Ž£J~ªLnÜ‘äQÎ\BÞäUþãW®ª<®åOÞåFþåTæb¾ãå„ä\~潕åeNälŽåSΗQaæq¾ädNç9açwNªsžx|ÞçRžç€çDºÛ?bÀù{ɘ<ãÿäæz~Nq„éèsy˜HÊz™>—YéíJ®ƒÊéxééö*¥%Á¹1Fè7nèIê˜.˜ G/ݪ®.©¸I²“´‰è±—é…nåŠY{¯ì` »^h‰ì« !\ŨL¡„#GìJ¡bœ_Ëd+i“øbÎs$º_ùéM¨n)4ðxVa&bª~#“¾[IÎ)iì#Ë}K·r¹l‡,ÎíÞÉlIït«{wyïJIeìœÆê¥¨ñþiŒ¶2çêHì«.쟪¢u9îÙ¥TÙ‘zlWC”䥕òîëÊ#³–?ð”¹I9Y•‘›êiæ¬~꣮òEÿ3òuÉ“+?¨*:’ùÂòÒ ôÅÚ”‚y»ÒŒô†òzšfîR]0ûiÖóï¼énë.mœk‘Ø¥ó8ÿî†t-ÿ¯ž”ÉÎpFOò9õK¿Gnÿõ#/±cß’<õöÉ0¯î50ÌôÀvé~òf¯b¸Í`g/Èç¾ï°ŽéÄnéyò'øaïøs?ø–ø<öç¿æ{¥`øëŸOÆ´üÅ ÏÍ _¥0›Í¥ŸÎÿžøg Ær©£ß­×9ïSÉ»pïí¼Þš¯÷ßù‰o”¼–ô¯ë¶æó]iÀˆ*ûŠÿ÷ê˜9û‹øKfÙêô’_üçÖk.¿ô¿ÆÆ“÷XÖ¿÷¾Ú褧õÑhþ;"þt‘õîÛûÊë¡þƒ‡ëB¿?þÁ/èï|õíOþOà@‚ D˜PáB† >„QâDŠ-^ĘQãFŽ=~¹‘¾‘%IžYD¥J|EZ¾t)p¾™!mÞÄ™SçNž=}þThC“EQ¶\éR)Ì3k…UêTªU­^Å*ÕèV¤+™.•I3ëX²eÍžE›V­D®F“.…ÛTìZºuíÞÅ›W¯Â¶Gß~}öé^Â… Fœ8c_“ãÆ;XñdÊ•-_>Ëÿø¤cÀ‚1ZôhšS& Ù)iÖ­]¿mº+ËÇr%ÃÆ[÷îÌG¹rŽë™÷pâÅ÷” œ©ðãÍ?‡þ09êÚÌ£_Çž½øt¯Õ#k^öºt¿b./–áKä¡8YÉTýî“•´qñpÇ93ÖU5kãîÒ±·¤­U™f_©U`\´1¿È[VL’Ýiãc÷»ÿ#½1³O}]µáÑÒf wæ³kµbß-ߊ>¼­©|ûâ;Üþæü¶e–|èÿÓÃ׫h¿«ãUƼþ£eI¿Að{šØ2´÷¤cÍúÁŽ–£¹~-rQÝÃ×ã²vÒº¶­°š¶¿Ã8Þk%ß{2é³7ê>ó/Y¿ß©±t.õ ¼óû¿¾ú¶–A6ëª64Aɵֻ² L8æ¢Að⾆)5’I©ï!Ákc!."p»>ÉK¥ºë¹Þƒ<Ü*DŸÛ:*ÎÒ*÷ ÀíŠ@z›“åâBÚ«BDSB5ñÀûJ4ãʽj»=ÀZÂ04Ã<¼æXÁʡ¹[:\ÿÂCöÿÐÃ>D‡øÃ@$Ä„ÄBDD‚8ÄDLÄE|2¬ŠÁ½Ó½â’@Fü G|D*²Ïˆ( aB¹ÃDÇ‹‘Q>^c>ðáªX9>éã 4ëã­VÌ6*AKä‰PÄ.‚á«$ì¼Ü+*“`Á2B!®:´Fü³E¢2@ˆC@¼ø²¯Z(dijdT5'+ÔA` ¾[FÒrB©Ëy=¬ŽÙ-RÌAäs@˜8‘ú¿^ã¿^ü´sĶoü\L $ÃÇIÒG´àÇ~T±fl:4HøÇƒôº„TH­cȆ¤º‡¼±Pc°i ¾½q kž€ÔÀß¼Oü"‰œ”6L(ˆpÄ'5Ó‹»ƒbÀ‡ae€[ƒlÀ‡E0„1U¥`“I˜‡;µ%{x‡m0†GP„C„=؃ €0BPGˆ„dè0% ;EjH`ƒ0@z8àƒ!0€‚ˆ8|(Få$NØ=ÀT0°„*%Uƒ ‚PÖ0usˆ0PÖZ%(00‡TtÀÕ |ÀÕ¨Õ^õÕKr€ðƒK%0È  ˆYš‡k 0f½Ö‚ˆ× h(iÈY ˆ‚\ˆÈ‚xVj]Vk(×GJ˜„9ˆ € €IPÿ°Yò‚Uk…yijž$¾ÕÓ<Íó<ÖÐd‘Øs¶ÍëÁf›Ùš=)šýœ?¹‰K`9àÙÃ%]¨X€…zeVe}ˆP}êAS#š Ê)4tÙ¯¹”QŒZ!×Z©zìÚ°E#ϡڜ8y(€‹À¥]UgPVhuˆ V Wjè,S˜…jXP¸|˜‡¦Å‡gÐ-PÐ* œå?“½Zvü˜ªeܘ}“uÁÊíZ®…Ü©\w [Çm¶Õœ§Ïm°cµÖUZƒÐ×hEˆ]°WÀ S@…^muèÕ€^ýSp…^5Ø=ÿ(Òm\šËÅÜ^‘ܧÍ\Ëý§ŠÙÉÅܱ¹\ÊÚë]Ø^0:V„p‚*€‚/ hUV0+](‡UŇ,yx…Zˆ%0ˆU¥R¨Uð„)xÕ¼ÙQ£¯IÙhl^3|\ÆuÙV½AÉ®¯\^âÒ Ì™Â{‚  &À$8‚ ˜jP… ¦Ƈ À‡3H^ø>^‡^@jJ¶%Øk^‰'sZÙß;¥ (…h`#`ˆU˜€U–â pƒ4À5+¶âVƒþ^ƒð„UUÖkxXešr&Žˆ78Cüâ2.:+…cÈ‘ã9fÙ;aolserver4-4.5.1/docs/intro/tcl2k/html/img072.gif0000644000175000017500000002632307363640504021206 0ustar frankiefrankieGIF89aXÂ÷(60 0///0%(%(.2/0/)J)Q0`2z/0`2|?@?/g``0`0/n:E\Ri^hb`g/DDDBP_SSS_b_~~~>–2 8„ÿ/0Ï@”P›LžQŸ\©\±O¢R `7G;N%Z¦/g+cª5f­;l²?r¯`Ï/gÏ/`ÿ3fÿEU’S^˜O`˜Sc™Jt´\k¡U|º`gdq§/—/ÿW‚º`ˆ½[„Àf‹Áe”Èw™Æ£Ë˜"˜!¯.>†t”}g`Å*Ç1Ë*>Ð':ÿ0/Î7LÛIWÓN`áVe°–ƒ„{`ϗȺ?ëÎèÏðÒëÕ(öÚ+óÚ4õà=øÞG÷áIøäY÷åiøé{„ƒ„––•Žš¼§§§»»»€Ê—Ï…¥Êˆ¦Ð›¦Å«Ð—²Ô¥¬È©±Ë¦»Ù³¼×¬¾â™Ìÿ«ÁܺÄϱÅÚ«ÀáµÈàÏ—à‰™ìµ¸í¼Áð¼ÄÁÁ¿øê†úî›úñ¦üñµÆÇÆÈÌÛÞÞÞÁÏåÆÓæÇ×ðÓÛêÛäìÚâñààÐïðÕûóÇûøØãçååëòìó÷ÿíïýøéøøø!ù¥,XÂ@ÿ}XÊGÁƒí”RXª¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\Éâ R/cœs Aƒ8*dز§ÏŸ@ƒ J´¨Ñ£HÊ\J¦M£îLJµªÕ«X³jÝÊ+Ó¯NŸFÍ9µ«Ù³hÓª]˶-G°_Ÿæœ»°nOx@Ì‹’o˼zúm8˜caÂx5>ì¶±ãÇUÂm:HîXvW2¶xðfÁ‰z-šôÅΦK}Ftk׈_G\Lú³êÔ‘sëÞ½vòRËtfþËz4àÛ²‹Ã.¼¸ìÙΟ£FΗñt䱯»®žZ9õμËÿÔ7Mà—Ë’_Ͼ½û÷áÍ×¼.OøøóëßÏ?¨ü°6]&Ü}ýhà&ØÐ•Ñ—Þp F(á„:Æ zt©—Ut¸YÕa…,}Ø‘ˆ"*X"ˆ?]è`†ö¥aÍA7‘i4†[h5"Zi2ÞÆÙk9~^:ú¸—ÒéEâsG·$B'‘82 e“£1ÇFAJ©å‹WYdt(ž¤b€õiXæš3žÈ¦bV¾Éß™7=H œaây”›zöyP¥ÙâU]Ú6eœÙ%öäŽQê%£XV©åmÊH¤˜—vž˜˜Æèç§fZ߀ –jꩊ* }¨¶êê«ð©*è°Öjë­½Q¦kƒhÚ‰ë¯À›ÿ•¬¾ kì±ÈúD,‹´–jG @Ê´sˆíµØf«í¶Üvëí·à†+î¸ä–kî¹è¦«îºÜ–RÉ»ð/¼$4àЀˆ‚º¬Tƒ:›ìÀGñkë¿d êNv4ìðÃG,ñÄWlñÅg¬ñÆwìñÇ ‡,rÇB2 $à\+˜5»p¿×üQ%ëå2¬0“úêÎ eôGJR„hÑÒÙ "ÎëL³Ÿ=³úóÓJW}Ó;}ð®”a°ÌŸ=Éd—möÙh§­öÚl·íöÛpÃ=öÚ¥Äm÷Üv³wÞ|°wÚu÷-¸Ûaí°Ö/sýÛŠ_Ã*ÿ6ª“¹I“ÿT¹[†7Œ8ÏŠŸÇxÂ`ûùø©—UºH§³”ºZ™ ´«Q«yê覮ޒí᎒îfµ¾ù«±+ök¼³Yüî'O’òZù¾ÕzzŸ£í#’×§åôMÎ=ê„ RäÛ¯ä}øá/”ó¯·*½ãħ_¤jô+JÿŽê‡x¿êõ›ž|ÿ·§ºÂ¾ü­é}S{ˆ÷”´)ÇXì ó.B¾ý™O€|¢J·&¯~ DŸxZc@ ŠÐ' UÍ’å<…‰Jq† ; æù(S„..¢]›L:²bžŸ/¯t£JAJRAt¢ÍB+5z›”NÚ¡þ¼i+ÉGNµ|QM*;¸m~éó—ñ7gKiKŽp‚íœf'÷Ër޵«¿hUë‡Õ!*¶§(…A9KºÔ¶ìe¥\ìØ<»Ð؆6ö­í5˜SŸ1‹d“ûÜt57º×]Uu³ûÝJu7¼ç­4yÓûÞɲ·ž•ÈœàÄ$ì­RØËà7¸Â^ð‚3Üá oÁ%ž-„3\â øÃ->ñ‰cÜãÇxÆG~p‚³ëä(O¹ÊWn/~áEsùÊ‹L[Þ´}÷@ú.Ãr–1Œ¬b>¿XÐ…^T óüçHOºÒ—Ît}ç$¶p$ˆ@Ç1è§ÿrÞŸ¦{ýë`»ØÇNö²ÁèžÅys|G¦¢“ÌóªdÇÏ×dàîxÏ»ÞÝî¸Gµˆú m+ÛÎ÷@F’ðýá:Ä6¸Æ;þñ7Ûß"ß¶É7Þò”?æ3Ÿy:6-§UüÉÐÊ›áqæ4íÈY±“ÀlŒßÁ)÷Y!1‘·7WD]Ïâ>$)Ta(— QIc‡+³gí<ø†Â2ˆÇýï©û' ß“¥\Kò*z=ÓÝYò$çCsiOÌíŠSû÷gÖÐyåœA™hO¶¿õ哾ù[”£þ÷Ïÿþûÿÿ€HFž—5 7HÝ7wÂ#:áçOã×CñIŸ¶§uPc …|Ô#o"P$H}¢xûáJµ”Yƒ6@I}«÷—dMÓG~Ûö|UA˜€¶‡Hç“4Gó‚"P4{2(P§}#aƒ#hû…Òg4´„A˜KQXOâc@Ÿä‚°„H=J(xl×~â÷~¸K²w~Ç”vSµ~Æ(†TH„APhQ8È|_hzå†ÅW~m!‡"È…uxw˜î'ðLJÕ0swÿxƒØ„ahˆcHJqø0©d„ÇÖ…õˆèh}oˆ…‘Oèê·€ÔÃL³„I¬W…Õ„4«¨@ƒ{X\AD‹às}kAŠg˜~iˆŠzR= 6ƒÛL²´MÕˆw…Ô„‹édjÔŠfᇘ˜$¨ýDXÙ÷GÕ|%Ô‚ÎhN:‚#á8[ˆ'ט ã(ÐŽ„Ás/f7ôX^·Cƒ$ÐŽûBMÃ/)š3tcW úø‡è¨‰kWx Uéøyƒ;x›8‘Y5™‘™jði`.à [åp |Uµ uZkõ’E [€Õ´qX¤ÕW8Ð,ÙWù“W!# pWyE6ÐcEZª Né˜Ð}p ‘n5X *`•onu=YoÅV|ÀV¹“ÏÛ¸–Õ䊌¶&¾§B¬ÈXô|É!K”VŒwi‹/XRmhñb*1[@y˜€X‘£çˆˆÙ˜¥¸+§8TŽ9™‰† u‘”™™Ê׈K¨™žYœé…Ÿ9šr²‘¤yšåÆjˆš¬™ ÿ &!–Œ0rg*‘`pæ—­‰"$Hg.Bx¶y|#"›Ö–›í¦šÀ¨ŒÉk{ œÃÙœÎÙ&Žâ&Vb‹ñmâÖω›Ä)Š÷›®&bafbb@Z6a*f æÙna&kÛ™„¡‰™½9jÌɜչžÎ&m–fbö9aü9œ]bý¹—úž ©˜Þwœº ãaš ú Tá :¡E!¡z¡@a¡º¡,¡¡ú¡fbœ’ ¢$ªZ¢(ê'š¢,š+Ú¢0J/Ê%Ú9Âù)7j|ûY9ªd€¹T»I›4ª*˜žÑöl療Æhg–¤GjmàÙ)¡Vm‹¢‹JÚi“›i‡’¥Ûž ÆiZÊlc²œašmOZ¦xŸ Ù›ÉI|:ФÞf…Âm=òh¤ö¦pJmuš$EЧÂV¥W:¤—Ö¥;*ly`ya°v§}j,3 gЩI€ižfФ†môy¨¦©”êgŠ% *f“šbtF¥(fe]öK¯¶©x Ÿ†ªB%‰êž¸ò¨Ö£1zÿ¶š«¹º«n«b ©¬½*¢]‘%ô4(HŸËЬàæa*©š*Y“U(Nz­¥&§Oú¬žÊ«.j¬»÷£´Š©×Ù¨sJ4·–Ÿcº¥¨º£ã8ªtJmÊfªäê­ᫌú³IªÏºhÄv›æÉeb`ÒYkù*¥ñúe˜¶¤ÜÑ­öjøú°%± ¢[±z±‹¡»±Ú± ¡ ² :²$k &{²Û™²ha.û²0³2[v5š^àZIÑÒ;°7p ×q&Gr$qØrqW´Qr—p w´FÛ´Gq%7µB«´,wµX›µZKsY“/S/ø(übs‚¿8¢oò,Ñ"l˶[û¶p·r;·t[· Yš7ÛJa;³|Û·~û·÷è`P-S³ìÁ²g±s)¶cãs{8šã¸Yt/÷¸E5¹”[¹2¸ ºó `xé”^é–~阞階/ÝÚ¹çÎÒ0$P (p‡Ã¹¶›êª~1²+1 )1a;ꨶÛé¸}ßqÌO¢.«Þë¾îtóê¶³-¨>³0uvÕ}È Þ*ÎûìÐíÒ>íÔ^íÖ.í_^Hx.ŸÜíQèÞž‘àî9îäþæ~î2ö  á *ªâê~¡'y/àPïJ)ïóN¡¤`Wf0 eïû^ãAZ%€[Ñ/M J%à“¹Åð¢0–ýo `Wx ðÚÿKù’7©ß3èäòN¸nsu0T° u£þ?-–n¥•¦Uòñ’T©B}ŒmF¤˜ôÌê–wYƒ-|vÙŠTÚôü}Xq ,¼Ç$P q0c?Í”a[¤5ñ‡•*à’5ÀzÀ¥»W›Pñ}5|P÷:©?Í–Ã8ÑGÏßRõKoÆA$½÷͹ÎuÉ—H+U?™°\Dà3& ÔåÞU ÛEdüWm¥Zï˜A4 3 '0`Ñ Ò²_ &ÀùW Œð]ßµäõù£¿±€²*%æ¿/±ÿ1UÃÝÅï­ÃÇ¿ÏÉ¿üäÞüZüüÐïíÒ¿ííDüÕ_¬æüü¼ý{ýzFýàÿ½â/üß_þ{þõAþê²ìîÿþ!ÿt1ÿôü„äýUžÿQJà@‚ D˜PáB† >„QâDŠ-T*ãF3ú ²”‘%I ´S*åE–-]¾„SæLš5mÞÄ™SçÎ}z’äP“S®ä™TéR¦M>…UêÔ‰?­ Y”(J•TYëUìX²eÍžE‹óÿêO¡DÝíŠì\ºbΕ[—.A¼ûò ëð¯ÀÁi FœØìZ mµ–䊔faÂvaR¾Ø åÊœ#bþ¬YñhÒ¥M+eÌÑñÛ“]%˽¹®ÂÙûîEX›aìÎz{‹þ{°ïàx1ë~ZùræˆSw\ý8rMÞ| âîm›3v쥸?Ø=7pÏÞ S¾ýWôùõê-o_þü§Ï? }Üú(uðÝ—¿Ž<ÍÐëO6âÐÀL/AíÊû/¡ê裰B ]²+‘XƒëµÌ O¯ ìlÁE$‘¶áÀCB;AKO¼ oÄ1dž2Œî­é&KñDi¬qôFó@¬(B!4’I¿sq» ´QG+¯´Gü8üHßPJ$Ù“¢/GôŒÌ&‰TÍ#lJ,ç¤s4-³âÒµ›ÄkPÌ4݃“M>‘¤òIC³CtI'ÛCóOG¥¬ìÐ:'¥”´;7”NÏœb\ò¸îÔ4pÂ'I¬M¸þJe´ÀÙ<%SÎJ_…uªK9Ô/®XoÅ5W]Ñš5¿w6Xa‡Í©×<÷#6Ye—ev!c3E¶Yi§¥V×g}Ô´Zm·åVÇk‹ê²[qÇ%×´o·Ê¶\u×eW¬s!K·]y祷X ®êÜxëå·_)z·Vÿ%¸`ƒ1ºÿ7á|Ñö`‡æ7à_!¦¸âu%×b7žã}99d`=nXd“O†•d[Qf¹e,UØe™g–fšoƹ9›s¾ÕÕÝ Öç~wöªEQ—Ñ_¡U”Ì»€.úOމ.k騬ÖëÒºéÄÚ›:a¶¶„v噎/Ô*‹£²Q(ák;,O<Õ·çŽÛ®»E¤[oHk|û¿ÀS];oÀ WÛoÝøÆûçÃÙ.ÎA£?å›^ªŸF"eK[»Ç_ŒÔsóDýsBÁtÔC}ôÇ]çÓôƇ'ÆÓ£\üQN;/}ïñ­¿òãÅnŒllK†­ëÙ÷çúècÿŸÿ¶×?øQ}³3ÄU1Ï{¦Óî´W=ßñŽ{$ý#Á  ybyÑúz·ºÆ0ny“ÞIˆ=º Pmjª*'¿Ê|í»ž§F58:-†¦BN‹G¹¾¡­ZäÙÕ Æ­%&±%HtbSô·¬)FÑ!P´bµˆú©Æ~úÂßÅ8Fµtÿ:_d˜Ù¨ØÄ‡U‘Œ9¢°Üȵ&Î1>v|c–Ìx<•-fÄÂ#Ód‡«@æ‘>q”bŒløCÁ5Ò…ê›ãÀ'ý,²ˆEÌ¡qÒ·ªM}D4ä­ÉnД4`o¸Ê­!j ä\ö,èÊß­•¡ÄÕ(‘&A6o‡r ðÞ—¸ Îð“Ákåád™Â¢êu›Ãå®t©”ì©Ò—Üæïrw‘ó‚Ö„åð–9BÜAӖ֌櫦™”èeŽ‘æ3fúž9Ì_b2žF{§ŸLU@Z “8ËT$ÓY¡uÔ †,¨Y&7•…Ô¡KIèC%ňNÔ¢8«èE5게nÔ£*&ëèGEº±ŽÔ¤+éIUêÁ=jˆV[iLY–R™Öt~ÏY¼ÂhSž¢ÿ´¥9XO…j1šÕ¨Gü)uªÆ£6µ^EujT‰U©VUšIíãý˜jU®r‹ª]+¥¾Öƒ tªXÅ”VÿÈ,;4 $ˆC\ãàVºÖÕ®wÅk^õºW¾öÕ¯l`;XÂÖ°‡Elb÷j³k¬sj«[w@ PL‚t-E2«YÎ6³›­+hïºYÑúõ³˜ ­iQ›×Ò*Öµ¯…mle«Y;ÔÖ¶¨]ìpY• ¶¾@[®Çb©­bèz NL­yng9KÚçžVºÑng[ûYî¢ö´ßµnv¢]ñbWºãîwÉ;[ö¶×½²U‰m›[ùòö·ÿ·nc…UÜ+E–ÌåDsß;`ØÀF°`KA7 †°f!Ìàà—\üµ’|5¼awØÃqˆEwº×ÝîwÇ{Þõ¾w¾÷Ýïï{AÈ>uQVýÛÛJû¿xÆ7Þñ‡|ä%?yÊÿWÞò–ŸÄå5?ùÌo^ò÷|èAzÒ—~‚wÙÏÚòSLZ‰7}ìeOy,¾¿½ì;_{Åç>÷³güèußûßûøŠ¾ãÿøå_ò¨Ï·êkx˜j öŒ7>ö¿}Ë7ÿößÇýå“zâ“ßü±ß}ó{¯ýÏ3¿üæ÷¾øÃ_üõ+_ýì?>ô%.ýýRÿÖ¯÷Œñã¾$@Ñ+ÀÈ@ÒK@î[À$=ýS9þ‹1ÿs=j @m™¥ÈÀ—ØÀœè@Åâ–ùÜàáÝ9²¥ä'ù†cžá§LÔ¨üÐÏuÔ… ¹æÝdŽâJFdâ¬âJ]a?F[@>#Aö]`é^aù^öÅM,·Ý-¼Þ}Îvæa&æb.æw}ÝqÜàœP<–á¤¤Ú Vî$âøxa¢mÔ$ŽOEÄÔ$ñ¸ÃÖdMaÃ]]RæÏ›õe4â.̶vvçw†ç«fYgˆ¬-ˆç}æg‹¯Óçûç~bYæ£Gîb{¶@Íò‚†èˆ±î°€æ°¦€$ €¸4?´øšgæ¸fEnè†& ;›³”–è•vgŠæ0‹Þ°øÊh  i h3&{³6ëhÓç€éåÿi¿¥³#c颎h—Þ0˜.Ú)ÛéU[°žºFÞb„¶c…6ê«Æê¬6±ŸVŽ »¯î‰zë±6_`&ë³öL±Fëµ6µfë·N ¯†ë¹–¹¦ë»Þ·Æë½¦ »æë¿&¿ì°"…ð„(ìªÐëÁflˆxˆ„ŠìÆ–ªOˆÃ΃Ä.7¨ëŦlÊæl8ƒRhƒp(ìÒ&ËÎk³íØžˆ3x„Rx5˜(„)è„Î^ƒÏ†mÙî… O€„7p6Hƒ38)@5pƒ7€Ið„ÑVˆiÊP0îV„ˆ'0Èð.%(àîR@ïá¶*;`n玂9ìu^ðænQˆPÿno‚Pî…>QXoЃRXïï÷†ï¨R€˜ïˆ€\îöo>Ðïïþï ˆKPK@„@ˆPövð&pïÿFoðÖ„o*ƒ8 0è€ÐˆƒÆÿ‚¢'àpîÖÿnðIŽo&Ä’ë“N¡V±$M}QE¹õàÓ+^ ã0gu™¤²œƒ1S€0ørÃ"D @ÿp‡ÈƒG ‹]àúÜ C¹D?äXØ;ï›[c=ÿ-r® (C·,p°„!wˆ@oHˆL¸/>M‚<0póK¨ò.…<@„% ѬDqöQSVò\Qu>Gu*žóŽsP^*7)L‰¥B? (ðE??ò‚@ðŽ÷Ž>èƒðnô…÷¾>„?vê`å TýœØªsJ…up¯¤[¿òZ¦\ÏFrâÖuy©`çPë"`%€‚ð0&(D…ön‚õ®öRˆ{ˆ!P`ïðÖƒø;X‚KH¹•BÉJœDÙ•GI÷æmõ¢›ˆÏõ6Þ9@÷Ô™H²ˆ#ˆ€  ˆ€È?ˆ€ù xùRˆ€R¸‚+P„EØùŸE@ˆu‚qîpî¾ö‰üÙRž–àje‰€=¸"ø"Èyy?0œçúè‚+(,h°{Ç‚¡ë;Ðï§qºŽPàz‰ð‚²?ˆÉnû±¶û»ÿê¼×{­Ë€;aolserver4-4.5.1/docs/intro/tcl2k/index.html0000644000175000017500000000121207441737147020540 0ustar frankiefrankie AOLserver

AOLserver Presentation

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/tcl2k/index.html,v 1.2 2002/03/07 19:24:23 kriston Exp $

7th Annual Tcl/Tk Conference

Jim Davidson provided the keynote speech at this year's Tcl/Tk Conference. He described some of the features of AOLserver and its use within Digital City. To view the slides from the presentation, either download the PowerPoint file or read the HTML version online.

aolserver4-4.5.1/docs/intro/tcl2k/tcl2kppt.zip0000644000175000017500000656460407441736753021065 0ustar frankiefrankiePK«nR+*Øëîèd! tcl2k.pptUT BAÏ;¸½‡àÕ@ø¢?€ä¤ {ù(@ùªP?€æ´ {ýðúŒ`zóXPùðìŠÔ<àöÁ€ü| ËpÿÜÿ¶Ë“¥<Èæ÷ùú{‹»ÌTG5?³ ¾ ÷÷ ÷ÏedhÐò?À=ì¶šµ£›£«µ£ /ç€Ð;ô½ÂëAcÿŠôÍ1üÕ tô¿w¢1á?Ðhÿ®„Ÿ°¤hñ€ÿ÷ °ÿ¦”òÿ¤øè?þÿ†aàþ†ñWÆâžýãÇþ÷û1pþ!Ñþåcú—’ãü§4ÿ¤ƒ~ñ-಴|±¸bþ·»þÅÉOÏøOÏ?Wƒ‡ëpøÿ¹rüçŸ4/ÿ¡þWJ‹¾û7øÿù°Þû?*òß÷|ôö_øoaÿ™gèÿøÿ%3Ö?¹††x(Yvii5 UYe™¿,À# ©÷ïd=¤çtsÑ{G£§o@ƒõû!uÀK1àÙg3W')55å¿IÿsY"æþ•çÓÓü¿çpÌœ\ÜþoÀ`nájö *ÍmáéæôÀGûö@˜ÚýCgý¥]´4¤èŸ4žÕ¿è_iÓÑ¿ÿÒ./ñ@ÿùßê_ôù?éüC?ú›n^Ÿ `6c¡áyóæ ”¹£©¦·«›…ƒ+ÐŒð/yþ%§”““½ÍCþŸwóü_Ô™ú?y‰F4ú_¼ÿrfî.ÿDCû¿÷ÿWÞ`@JãA9Zþ‹§ó Ç•\¦ý¿xŒíÅË@ ÖéþÀ(kóðÊž.6nn@Sïÿ–EÿiMJiø9yîá¼øó¿šˆv|}xúÿ¶{ô_ý?ÝŽöï!ÿ›îþàöƒlAG{xô ýÚ=ô¡jÜ÷¢ýø[¡ÿ›ÕÂÂÆ|ŒñçÁf>}`cþ}þ>¡c=ÂF{Àyúð  ý¯D0Ÿ¸£=BÇxñø%&-Ö+:67=áõwDŸx‰5œƒHL^Kç×3ò¹àvMò3­i Ÿ$þx¯å*#+(gƬ­£KV×=µ~jâ–ôÕ¢ ¾gzƒEÈòÌUXD^Añ¡`¬¬ml=<½¼}BÿED&§¤¦}OÏ(,*.)-+ohl5·´ööõ  ÏÌÎÍ/,.mnmïìîíŸ_ —W×/þŠüý1&æc‡‘_`о|Ì  {%¥ŽÅó™Àû]}¡F¾)ï“Z†®Ii—câµ`¾×‰š$fïO~Ô1ò“j Ș3Ḇ$ɺý•WÛÂ]Gðkè?Ÿ±%6ôÎlž§5öÍn]0ËéZ y„¥7õÏm#¬<ÃÓJ@ó;Hy=k¯oßK›v/…ôm¼#ÒËZ†÷®XE l}"3Ê[‡—ö¯ï—ÏŠçÑ ôIÀêÆj+Ò Ï¿‡Ü"QGîðÖÎË€ÀICßY9ãƒŸŽ— Ô2Î÷€eüŒ+ç*"HãÎKß‹ý¨{àñ]jÀM+Ò($0àê•é»j¼+ƒ/,Š“Î¢Í¾Ô,7ä¦Mó#ÀÛé$ìº!•ð q#Õ`L¯»õêO9B¦ÏÈôõÕ\zsFLQÐ:‡»eÎ"½ c@=N.í¶j|™%í2’ܨÀ¼|T8iƒa±|“¬5=sí“åvñSp|é× Jlin:ã¸hú™ rØ\³^dû™B©’Ü?0=üíHI+#My^s1¾‚:è"Û,Îe¸8¶¬¡ªI´¬=’o|<ÆáOQJvËYG>Û}í/ô¡~qŠS0bEÑÎvŸú@í#¼CxÕ¢jmkçgu sAã½²m—“ –ŠÓd!\’ª¶ØQ+mþûlq±7buÃå¥ çŸö¢ ^8¯Ï(hÆFñ©|ŸV‰jÇBMŠ¡þ¡+)N „4­Ö¢Õ.´?C¥t)²ñ¢Ú¼­¸Û<ë6£ÏR‡g4&ßNOÐ ¼L›g¯. ÊN~)^ï°ì™¹ -î7Ìî––‰}måbó‘5XS5h-Â×ÞQ©²/s„Mqëx~*/ØV@?¼X(‡vŠNl5#Í}¹¨ÏžšMo3T¼®‡O,¡4GaùFÈíí…æìJΚJXÂsæÍfª­§qŸÁËMõ×{ÂŒz'‚6o~(h°îââ·Þ­L¸ž—þŽ`}¬ÿúýÄ ÷†ÞÞÙ¬j®ÜY½ï|Ùµo ˆ:Ðó4¿ï1y~$6wݧaáéÁ#^¥Ö0¡š90m¿ÿìNSXF“Ò\õ•ÚôLº™Ó0Î\d© wÃgæí ¬µZÙNî¯åÖƒèUiGbç—º4Ð…çÇÜ2ÍQc[¿ê„."ŸÆP÷òaZ’Rcóc”®Rß½ugþP¸dt0)Z:›5ÜµŠƒšüòX¼c¹]\^ÌÎ΢þ…Œ%vŠP×.ûÔeÞÇRs…Q5gSÖŒúµµŸ¦^x,÷Xœ£Àq/Å­¯ýä§´à1Ù¸ê³mzS |4AF™Þï‡&("*—˜©>5b„7­.äùÑPÚ÷„T<ÑÍfŒªq?z¨ß¾ÿa1î¯þ99‚úVunäúÔÄoÌ·*9ì4ùY³oÁ¼™¾ÖöUiPÑ\a¦Ø¸A¿~«& o²÷~+c.ËÔ6~a‚ŤÌíøÚ€ô~Y´çhÇòQè/ïiß ¡ßÆ&A¡† KË+Ðá—s$‹Ð¸ÇÚ¿?äÉÙòî=‡üî³áDkµ³›‰KlÉÞ5t,þCóÂO÷ «¢«‚Ä.§G›‡„¿nú°ÆÛF÷…QMÞBÅÚòÒ=bˆ8¨v¡iÄá`~=¶gJ%Vl3­Î!«­Vþ!%oø‹ŠS囕Ûýê9„‰ûµÃÏA?æfCEô· ^‹Q/R'^}ÁÒ%¾‰ÌZÞdÃÀk'™Ûrfj@Ø= o{¶¦ jÊùÆ¢V` ¥tå`üÝõ‰›¿&ªDX+‘‹/§y¤ö¸¤Yîý0ll8“?ßEvá7ì8›X=<ñm~ }FèO²N•]k~Ú’^Ÿ$ÿ|¤´ë*’-;*ý(ÕpH¶”¢üµüHß{mcÊ!uMYB!t»ÓÀM?Ú‹q»7÷€{@&±Ù|Z¿ŸÉ*õ2ü`b듇ÄIÿÔF°QZ]Ïæ$ùxˆ‡dÁŰ¿–±ì{»*ƒ_„NüÊi |ç±8Nï²ãðóÁ<‚a/¯oÑ•øN+¬Ð4’ÙZ?îøÅÌ“#¦fP{“}eðQ7Ô¼0±9ß<”†XxM­àÚÈ.nî0áy•f¿Òµhr»‰Z6ŠhjÚÞé±@böL¬y¸ {}¶®ÈÏdñh AÒ EÅ£êlÝaZ‰tkÉP¹ö,¨ÄQÇܪhÎ#«ž°q¦–§°tŠ(fxÒHZ£B½Tª/ÿ)µg |étn}ÃÇ;OîÙd]ž®šKq$.öY,ÿÁnÁo£µùU†VÏÑ‘ —“m—…C9îHH…šŽ5Q™¢Îúé‹7ø*©Ý›¦©±ÕŒ€>õ§5È1ªÏ ‚œ:+HNèn8Q]òçM›øžY#y [©ÿ¥ÿ¥C‡‘GRž…„i»•ŒŠÕû¿;ü“ü³IÝ«±Îj®´Oê:‚“6ŽˆÑ“&ÞËÈ»íEJ6%™dXÇÉJpº«¯ai-ÿE}WØ¢/›ƒ&Æ¢È>-µlw·lrK1Žêƒ/á°Ø$EÜhV[ƒ·y” 0ÂÐW¾¢X)`›ª[K2AùM£1<»M1éa´ã’*ž#ˆiý0æt>lMÿžòT”"±â£ÇÄÛß3¡ÍO»ÞJ¿¹øa$›VôbèÝ$u“ÏÓr€Å¦ ´#ÃÉàå@„Ôú{¿Óߢ¶’½yÞj®wV„†QWÑ÷`ðÞâØbÄmÎiÍÚýðÆÛõÚâF&+¾|pô_®îþÎ=våi¡~M±É2TDJ#Lq evhÂí[…›¡4ª+“HälÄÊI4õúbŠi–ýË‹õÇÚÂÚôË×–;qnˆ€wkÓ–_Øä+‚GMñ–…¾÷—bZ–Ó­JN_y!<ß?”-R6qiÁw=šd“ªQ‚ÖŽaÐEÂgЛO§íä•õMIp×këÒ B@aëky»4ð-’Ív›ÜaÕiÛ.j„ž'=/I!bc†¿<ÍŒ¯:„Ĉ.oHt !+©Ùþ 6çK!€¤ã¡Ka¥4Î.ÊhŒ×ýæbËök§ÊC2 9ÈqÔ)™pt¦vyÒΓre@kh‚¿•˜£˜.€X‚µŽŽ¦+†B¿ËD c‚ª"iTcí£›ÎSÔW6\VVA¾Hþû2ÎÞk–*X÷”t\D¢Å;ÿçTâï>f¶C}UàD#î´nu1Êî’8Ê¥R–è³q©" ™W€8AxïômàôÀ=cÀÕŸÛn,¾¹C}ýõÐ@,ž°¬‡8r¯v¼e×Í÷§\ÀÚÊo-X‡,v%&b­K”y$[û AÖûR7<4€âý›Q†éð¦ÌÐÄuRùÌÞÆOßlŒxz£ÍuHÑJKÞê6£J$o­Ïdzßt>‘·ˆ&iø€mݓѨ¾€ñ9–Ælg³à‹åq¡s³"nÓùæÂ××Ç^|(}É·àéÇ8ܼ¢Á5¹ä‰ÅÎtÅ…±ÅÙ B­"ú©‚]–ّ1n}{ þ‹pL9B êŸ÷ö‹Ç+‹Ë0¤§qAk˜¬œf/OÆ „VÀ°fŒO‹ê&ùq…çMÁU[½/'é)‰Díe_j"±¬¥©­®j˜SXšŽî×™Þýl˜3<™^ž¦†N¬¤ñdæ$ìkÀ Å…ÕðÇpÿÆŸú‚*‹T+ |4´Ôl蛑Ö%—‹â¸¯ñ­¼uv¾ ×Í]Wfú‡<1 •2Åß+)ÒÛÜùƒ5ã~î²±w‡ºíì0ÿ„W8-t Åu©ÁÕuˆT¸)ÙòXÖÝÚœj÷X±¦´8Âkì>íÒ– }"««º‘ÄÍú5-¥YÌC×¥ýLÊ4”Ðç5ÒdgęǴŒ=í¶4`­FÜ4Äú }yö%™e¹{o–(r$ygÉû‹+ıC¼7ÛàµzJÍóÊÖöÇ$Ï"óLO¾Ž•Ç™€œӣᾯ¥Â{L¹gNg7y¼•³•µ´H®Éݽ÷mXKä7Þ?Î^Fsñßœ=^‚Œ¹º²µÛê§CÓ–ÑK”ž0 §ìãG²X¥ ÑF7ŒÿbNT<æÕŒt¿ »ÓéÄç‘Ä rW•†³lÙ…9¶^™7~¦‘0ÈzKkÛŠC²w²¸TCT+~>I|›p:Üxj¾-%áÿ$PLâ£ýÄWjb_ÑMÆãÔT…¦qFå€á.-Eú$•1Î7ØÅ"Ãð„ »ß#9fÁ6BتuŽÞ<¨\ïz›­¶×´NNܬR‰Ò{RA·tEË«£©Ë%#HÔìFƒÌ0þ¯˜°Ä—W[s BÔÑFk7£iý;ð»ŒÑÌ- ¦m+sõ 4S#ÅsηC '×Êâ§›>Ùw ecÜõ ’Í÷æåeÇa^…š9‚ó?} áüÕ=à¹djó0rÅÜ'd,ñoÅ' e{¡eù¦É¢x°‰¬tç6‡‹½m…uËyŸ×y#éYɾœ”K"s¢Ïk’>%¿Òs44„+æ–KÈÌßä-æÒ x*O[¤«\à=ý«ÌY wFló«)4 „'ñšÄæõÍH®l4ùD¼ -Œn¾«öжÙËž¥¦Ù$+%F×gÈĵñ?KdÑJØDÿY};t9j“ùêͪ¤u ÓIR¶ÕÕêRÀŽ&MQ˨µd ’3¼¸‘ºÒœëäñÁªFmTž&»“@÷šN®ÄúqD†}²Š'—±&d² ú¥t [Å=;̬eÕkïW8eg “—0¸m@”_kî¾üμë×â9Õ nÉÅáŠÇ{8gØò¾6xD] ø¬êÃc=ž›=ãFê!ÉtêÑ«ñ›pxMˆïY¹€‡æýo{ã¶CªµÈ–ÚŸÉä–Ld¿g‰œ50»¤û/¶Ê:’ØrcÿÁW§¨à{“:šÉ+(YX1Xh¹8¶çp ´ê¥eRÒ»U–ý¬q*¿Ñù›ú*¦°c ~ì£@Ác/Z]²·Ú5Þ3¸(?‰yG…Þ“Ì+êUb I3ƒ”»-:Ý9ŠZ£Ì2 ÙVµrst9â¨YåµþƒdRМû”\Ü]1ì˜A™ .ý±wWܯ€wôkä{âרºbæí0½õPÿ_30J}¯~¬cÁEv:ÐÌ‚£²NÄèù=òøÛÈ AA ’Õ—ùgÒ³I1‡¬ÛáÌ®³yÞÕ%##91ëªÇº(ž)Œ¤óÏ”Z碃‹¿ MæÞYz;ìŸ]}¿ù|ç&®ÛÀãŸ~ÒÙì§ôk Ä%§Ä [iÜ0ËÊöP— t¤ú>89û©ÜÒ£n´)ƒ‹¨ÆV]j¶÷ž_ê°Cºƒ•Œ­ê2Ü´Ì2ªbë˜KÙk0_†PØQRŸm¦ùÕNdbµú×OÔBe^¥“Fu3x—NÃjÆô8è\œj"þp\dÎ&Ì.½Q]„by|buB=µ°À“jÂ(!éE>b–ªÞ¬Å¹Ä áèº"#ˆïúuq&b6êdù•Õïþó‹WÁ·‹›¶-pÙ+xZùù?¿Œ®þ‰=Ë÷VäÃcºÛƒU žQ±æÏ¨dúóJçïû›3Ï ß]Ç`¢Í<)p ö9F]ᾡ¼‚ QÄNÂr3_æzn xØæˆ÷46Í¥fD™šTËd·«Ë&,êx§†ŠmõØò"Íc‹cdoÆàD‹ã¹^ª@Xìšå"¢-„$AžùLA“%:. ?©÷9’—…U+¾idX°½†%l ŒÿŽ|º+L¦7üæÏ¦0û¡T>Ú—O$Ï1r·¨o¶;Ó}ø[°Tžh[#ˆh †z—»Ó­æh gUä:ÒõôÐ9ᆲâ™DV ²ÁÍ{¯%XLú§ìDê‚'¼ýãÔYâCÛ¦ Ö[KÕ*aý^j¹xsØ™Ëo žEOµ‹Á@­™#Yiu‡mÕë{ÍÒ˜Xô<'Øj\ò1ˇ»ND ¾WØ”U°,4ªIk>%´à 8©¬­ÕAKNþܵéÛ“ª;¸úœz¤2V¯|ßI&ÐQCü â˜˜˜Zõƒ goÔy†M, gé¶ztü$·Õ•(%þ@ø…ÛUŒyp{‚s¬·Ã(Ɖ ò5á•bŠò4†KO“ë:êÚcIFå_„î‚ùšdŸL(À×ì2 3ÝÓ lè-ð:_¦b`šìqØJ˜Õ$• ÅAƒNì6%íÏ­ª¤áwÐ+1#ã.·›y¥ñºÚbÕ§íçm¹¸Ú]„=ìT-E‚@Ÿ…¥¿#Vì·²s¿{”?eû.ýøîÑ›ÉÜwÑ8Ð"ƒæE„£,Á[·G.K\]×¥4I}AÃ9¤òŸ;â~<—[Ú7IûðÔƒÈ1ø³a±œ#~3jÕŸÅKX¢m‚[–òuUÏDUKñ›ê+¤ò½•~ƒÈÍñÎtØÂÓƒ‚Æ&Å”¬—ƦðÊß&tc½´p!¬n”´˜˜·)=¶uþ¯DƒŽ'EsÞy¾môjÆé.žÊÝ 5do,4ÇV\Z¨¶z­Žq.@n;—QÏx#‡ûþµ *_’üÊM¶"¶¹G —ÛeEdQ²'XP]*a3øŽ;gOÓ2pù¤mÎSò ˜¶~´ÙA,c`È7C~öÝsÕû“Ê‚²3ª`ðgã;ÙO5¢WýÖ«ÑZ¦¾SW_z'O=fbv33‚˜WÙ¾6)’Aäà‰ˆ_šTþ¬-A<6¿–`â·e)·¬¨Š·Ê?–‰˜•Ö&§yJPø®ã%8øóí@¶8pé+¥P‘>a2ð(ˆœ¾þ´VÈ™ñ ·ÓŠ~lÓ®ŠýóE¾ìÑ®Â+@Öf+™î5ƒSþé'ÉõΣªv›¼²{€îuó…€[îr›œí‘˜ã±ÃZ“ÇÝa¯/`7ˆ“œ2§?²Õi=§äÐ%ùB«ÓÐ £Tº…Ò´ñôüÌ’Ó¿/oUÄ/ÛGö½O+D90dº˜©©©UŠp¶UÒNV­»e [xhbô<¶ÿÜJñs¾½œê-¦<¬2©ÿ1•?¨¦3Ý™ˆÓÊ:üQY›¯Qmh_áEÊÌ)6¢Uå!L›éÛîõQ=yŒöþs)Ûç~]]{<äZ µ°ÔºŒ`ú·RØ4ZÔ¹ïâ‰jEÞì1µ#ˆú•µ„$~-fjú¶©XÖ\Œ…öÀí$>äEúøEó‘¶Š,ÉWü)©HåKW“/c+¥án…ptßRJ 5Å ¬2É6Ù>Œ*µwoùªXÑN÷øg³‹MÙFô¶¿=×Z‹]Zöð‚Óu×¹"+W×gU˜Ý¹l/,˜}0›:õiÞF1í£àþß`Ó·SµR´ŸBc¾ ¶îNÚàÁÜ-@ ö×½ ïGs)ô†üO®4¿Ôàe6@šP/ûû»±õúñiU éÊcÜTô; ü6zÕ^¯í›äy^£ ¬ê‹h ŸO›G¡Ö%ÑÒ€ªáÍãYíY ì°äyzõÏDí£j¯«Ro}qëŽßçȨÌ`ýù¨ÃRPb¢áãðô2ÌãTyYÿ‡,c«b¢ÍÖTÕÅv÷Á0Kmº¹nLl™3‡ æDÏ¡^F®}ê ca÷ä¤{°b ‘†TB"frn»C7Ò|õQþ1ZÂâàÚ¯Z†gN(qu; +Ó0Q6ù|é^:ÖD(ú|a‰Î9–Œ›#2êÇ ¤qŽDvÇÖ{þX-Býow+üޝÁ=·S=ë’1Új÷€—eÇCš[Öë* vv•Ы¨ïÞ_ Ù(ÿvð›`ú“íD´²R¦oc…d8{En‘sÙŒ„CõÉ=ÀÝAg®ƒåñ s¢¸¹NhZy _•æqQ„§ê…¤‡CÃ"tlŽÒ’)ËžÂi)^±asp„‚¨L#Y¿1Ÿ–…@õF›¸]´âu”>Ðö'6ë }'ò¨ÚñZv´™A«íÜOhRÖ\ ƒu?Z*мd“–RÍ^¹1€gú t5Z§ò'¸ÞŠ||¡ö„°ÈÅǹß}Àä³?µÞç&α^÷jÑ'DKÛ¼öŸ™øñ–ø0„p8J¤‰0Óž ¿›*ùUÊN´²”溼³Lí‘ëœÔ‰œæ‹µàTqO2cÜÂa$c7»Q[6ÉN[ÁNÈ÷-˜9š —0]œ£U2’2»‘¹,šM÷¬1¸1¿¼˜Ï²à­†-@9æPJ®ì£Ø6ºâ_ ^7¥)!ä?S·w›ÖÆÅV[—nñöÆ SÆRXÖF\ù"TUð¶lNKdY ‘6ÿY½C"5¨îF,vBçJŠÔÿSÔ€…=¼BZ•´@®éàX•Þ ¡löˆ=í2EJ,L˜AåòGÿðj56W‘‘ÕFz¾Ó"ÿˆoÞ¤ jsX&F¹o6!'É DåèOØÊžz?—Úßž›C¬*Xo5Æ«'̈¼9gýUFMÇ2i|Û¿3 D¯â.ø™íqß ÈÕ:^o¡âî¡è¾÷€ºƒškÈïÀ뤡œM‹ìÔ5ê]N=d2Ïäkeäé#™'ß:÷7½¯ýw¹×ù@ÁT?FïD¢d"ÿÍ#BdèÈȱÆi|°r;ߊìt‡wÞO¯B;rO*P'çË>3W­¼¹_Œ OxgQ«WãC°š08hÑälÚTõ:æÍêâT>€miæ’„0Æiò%½c)·¥JWûž=ˆ°[ªqö*…{Ô"©ŽÌ—à–VaØ“…xÉO7¨ç¢ëp˜åèI s‚¾IË™ 3ö6ÿUFCxÚÏþ †ê.õ³€ÌÔ)<™'ÓÒÊ„Žq«ë°Í²í»èÛä+ïUOŽárB#ĬÂ@c‰\9r”œð®á[´Öêö=†×´Mþ^EñV7íK~Ûìßîqø¨š¼÷ˆ6~\Gmª!\ï<¬SRÕkä`X|âÄá‘Ýä›™û'RðÁ^j½šðmÖƒýÎÌî>eæXO˜%FÔ¢—‚]!·ÚË$e®`õECüºãßò´¹,?AX¿5G:¬‘•„înjò]*)ƒ OcÅW]Aþ‰Ÿ1Ï?.)˼#ï8ÄC“ø(2›º‚«§7ìZ}óîßß8cUñr¼_&¹-I[ÉT%l­ÛF‹€s „ç/“JkÓ÷(s/Ø–Öñë-šô/-ÊS„ÀJ›`Ýv6\´?Ó§Z ±ûˆ‚‹+ÑÔ¥’4ƒr²|G„Š•l8 Ãþ%s×à°ð _¹Å†oKÏhÃ#IDKÊÍ+I)¨NŠ»—d*2‡úŒ$Dñ›u/;QáúÒÑeÖeûb.Í%ñ¡"d#øœg8E…1µÆ^žØÆô†®¿±”%Z¤,0"ƒJu¿í1¯4¹L—Bßw™\¼ª±®Êz%ýÖ5dïwÒ·‰Ï‚˜¬i¢_FÖϾ+îføPôSÓ*$õéüŠ=iŸIÇa±,(0I®V–£¶pírvà…,¿=YfÉ×y¬Gý®PËyÏOSFÌŽ§¢w™TEê´‹«˜²~áÖl[Qê¼^lkj#‰àTŒ³‡G3úTPS$¶³¼vàl-·Õò6³Ð¤+e/ô—Bü8²_>ÔæòØ[‹#"Ï“h`ìœåÖ¾Mˆ,­È°1W`¸Ûê†Z+PçÊW÷]Ñž KNÝô>,á(ËÓ«™ ®š:pT$Uèó]®à<[1ˆ¬~Ÿ¤6ÕÅ—Û…h³ßÊ1_YOôÏM;æ©FüS ð/"ˆM2qÌä„ÐI7Ãç~+/)¼xró=äwIèøš'#k¸8Èå²ýŸéѬ™«ÐÇPN]„bÓáFaR[Ö?¦…X1‹ Dué08‡eâÊ6Vì.éGB ‰¯Ï±%éDÞ„YWÓ+ä¥3>+|Ðý&`%QrÏ·\.G™>?šÉ“S^ã%r$Þ<ÒhcmK–ØTàœxpŠWŸe‰Ô-;awyTe¹±4±Œ¸,A•·Tnbߺøj j¯({£cøû}”PÀƒ?…oÓnß~§MXcÅØLo¬ Dk›ÆÙ|Üïö ˆÕN~j V«G±u³Â4'}·8—ôa¢­¦ÓGhÁ—À+Gÿ8Q@s†ÛßÌ·Éhìs‹þˆ£/i]HÆ#~6€Œ}¥¸»ƒ¿#ålv·’ý=àiþ³JLV-Š ¬oâ¬âE{rÿ¡Ï¬JúMÇÇÒÚÊðä^…¯jšIªÔ^í+Ô‘ˆéæ¾Ò%Z²´fY>¨å 3ø¦ž²ª/…3 Ñ/ºMÎŒþ€ò Ó––µîÁµ-üÃmðEõ‘œ¼oÄ`¹(³ú}Ö¾ÔŸIÆüË Ã³éšD“@‡»©%ÿ5ˆ¯kÛ<Ó]Ú eDÛž(ëÇäMVP¢å‰¸ {Rºr EˆØ‰"¡†^¡®‰¾ÌÖHv1òÓ"Üãen Õ/fÎ#q ÁZ¡ºÚ¼`©àS‡y—ÏYÔ¤U ±¶­ùŒ;u¶ŠŠ×sŸÀËÚ¦¶4/¿Ø=ñ¶“Ý-SøðÝàRîîR=î¡xL%¥¸²`tð˜mS‡e©¼NSh6¡°‘›y$ Äi°Z-œ&µZ™#dû|P+Ì€Š}öGPbŸ™[AZè ®¦Œþ }¶·–RMAÆt-¦pªæsÍçè¸ÙuÓæëênÙ&Ø$!³ß±:ò)ZÊ‚ ’~ ôÓ ·Wü‰@¹D¡‡AµHFF,Äñj»3 Òᇽgœ=«\.;Qÿ «m³¥ªþoêS¤¤ô„Ø¡+–S kÿ`=sÏL ˜;ý°åÌq·QÛ<ÍÖàiˆ$èïÒþB–Qø[sË8zµ/0¸“àŽPxí#.~`¹šB2„tpͱ|õ”RÑÔzg®\lÚÁî!yTìµ·‘@ûRù¨DÓdA3óö×6Ü×W`;{ Þ‘õ&šð½öŒol²6F6 M€íCÜ•o²·gJꦽ¡í/KzýÇß›2~¿ìÍÀÉÂÁIšU½ˆÞvÐÛ$xM{÷€8jè³Ü€#ÚÛSè+xZ3·(S ËJq5¥1Ù0 5»Ëà=À~J>˜Ì€ÅD‰ÔÌâ»(BgbÙd¥mž'b:ö–¹[ ,Õì]/?¾½Ýɧ}+Rq9ãCßtç¡Né&ûrGž»b²`™xÖFÊñeÞ/%1rZê3÷€ãâܬKøØB ´+n_ehÖ Uð !GûIEßSF7&2*áfvù9):]1[$£sžtDãØZ:uðöeOKn3+4þú05ü¶0’â˜i<û½¡g§ØR"¦¥¨!Ó)Þ+²vÏ4>µƒ+ôi§ê¤‰ñr);­ÞôÙ^.éj?vð¥îPÓÌ­YôA’;dt²Ï$¦¦(ý ¦H¤ÍÌÂb2TÏNDœ©}± iþ5i"Å&»Ûª¯ ƒuHvzÀe‡ÕÀŽì·õ9,dÜ>ÇwçÝ™!Ü*W¦ÜJÊ﬩³~ì½øí ü& +\þÎùë jÂDUܘšÜ4#,ªçzÞPßêÞú¹ØºÏ’C©1};˜­¡óíý©jÃݟΦö5‡QÙÑ KS/K©·c¯R˜¤„f*#×›^Û²•>zèh%ëf{»øgîc>’I¤IÁK)Îã- áÉ0×i)Âk ô ~¦P²ÕÄ€SæÏ ö L×WaÊ«&çÒ×Ê’µME'HÊž½w«”§Ó™Jˆ Uiùè¿p;Ó–äÒ¹,»Úù‘¬­~Èr«Y{4¨Jâ„òý S)Ý0µŸ0Ί(›!¯wC/sy9›xòÝ^Úfü•f胑f5Ùy]ðé&dðœÚûÆvúôôG=e‹m©§åBO®ÀùПuE(ÄÓвO‚¬ž]^OM4H-.­”SKvÁJ`Ð’‹º]EÈ"[l%L·îls·›ã’×:>1|ÑšÂÈB_†ƒ­•ÿù­T)Ê â=R©Btüºµ¿¹àiiÏ„Qщ£90üäã§Ù(Ǻ¢>5ÜXUÝ.€.Nl‹.eWÞ¸!öqƒæPOk˜]Ò}ÂJ2SšrÈí6è*2ÕBÑĘ‚æ÷‘M³ø~¡&vÂÓþs]öÓN݆LÜÎ&Q™¬öy_ž1¾>­€ò'²ªÏ‹t„~7¥æçcR¬‚ IéàhñNÌðšpÀìV,óF=–šÄó^"G•ΑÁ/I¸îw$ÜTÁpê­%££©¶pþÆ7ட¾táü1}žÊzþÓ E¹ôDFÓ QŸ:jücêqƒ›§µzÕÍ[Ž;¹ÂqæH›z£S¡M;ï< ñR¯Í‡‘âþ†ÒTÐ4ƳYvÑ#.È!¤„Æ*0OO7F‘|­k;ìÎa«ý…_h(ž…ÿ عCyâhwAµ“dî¡szP¹d(飉K(jÅÕ‚ÂòùTÆ{À „Ĺ´Çg®Bj¤Nèû‚úvÕ b›¸=Þþ­ÚØãîÊ@õ’Ý©KbX?yÄý»ºàŸØBù·bÞé}~ï}*V“š1סU:îSç½ õùÑ™–;†—»ð0 ññÄ7GäL/S¢GØx!°6Þ‚þ?Ë—Oñ83ÊA$2÷æÅ9ƒò!q3¦ø—I÷´zm|—rïe]ö¦… TFW=Îóþ;ZSt/õ>B52< îÏ%a¶Œ&ˆè"°¦ÚLA*ž¹°é:Û ð„lØVï÷o*~fêòùkÆ»÷\º¯“}ü·NLýÏjïùÙkÇ”¸ü•È.*û?j}^ 9zíÅ%ú;|=QG‡hàwuÓAת°‰wɶœTµÔ5´cÒ•³…ÅDÃ6póé.m%ç8²)¢w`OI¼|z“Õ¡só`—9˜aTãK™Ó¾öCS _rÚ‹‡axÕ±Í$¡zý¢˜­Z3>,4É]ÅðßËÛ^d[²ËÉÐ’c$KCÒɨŽÂàé -NÊé'©µ©óÍ#û–¨¬QidL·ƒ;u˜H¡vµµûÀ¬ü~¢ÕN`ʪ͆¨aSgF «_ìŠ /¾·C^Ñâ9yl5{§­ˆHØÊ¢Ã´”T¼ßøÎ°EyI,™0G\^Qa4Éë—¡a^;†Þþ™K*Iv!©°<ƒtEœŸ ^Jä/Šù/{Z#fXt"…m‘ËžÔNHÑ=PÙßo’ß—Ñë­ßkù>²g¬Ot®‰u¾îﺚ†æ>».©ó4±ôû°²}h÷ ó_“‘ §•1ªçÑJiΞ¤‚–kx 4]`Šek#Óoi#‹‹±-Ì1ù1£†NAGøŽNÏRá~¬0ÑÒg…Š Ö!+ôN8Üe€ø'e»þ‡Õ·ç~Ð6—¨?ÃM Ïàq™eQ±û¢ŒÊƒ‡gj„ŽÙ„>qBµ6‘u[w÷g•ÓaÞžË"ŒëY‹A ž;7ká sñ[ÆB·v_“ᬒ–;äÒZzM0OýÁY +_äKn“wr¹J5Û17]ˆùÓËI#Hýw[}-’Ñ6ÍʱgH,.°Õæ·0²TÓ˜‘Š7¸Õ4 0 žÑ&ìD£¸™»Wïbñ kҞʘo¬ÍØœP~ÓÆšÌÈ.t«Ï½šÂ“_Èu±žSšwŠïWáoªâ-Ò)Œúm¦&n÷ÿ†µmëM*céåØï—Ý Ñ½aútxÏÊNd_ƒè›e;kÅŠo}FåŸ&h–d€(Ý6Š_Hã>"£Ê£E†oãTy°qH¸ñ8=Xä ”OµêÎk›àª¿ƒd–¨¡³k÷(‹œ‹|ÉȪ™÷âùœŽýh]dÈcp«DÔqj0¨Ì¥¶í3ÒŒd–­2±=÷0fØá¦Í{PÐÃâˆÂ€aì~ b­å"ü]-ßlÐTëù€÷Ã÷n7tu÷Œ5À'Ÿ˜Zò3¿}Ê€ùó•L1÷aq-~BJcÙºÄààŒu­­Å8"¬"z…©åÕÕÅZa9$³…©Þ[ñt¬Áúߨ¶½Iéc6‚ûóUX/½pÐúÁ²å•‡å‘JIo±Ò…JÆÛE®ÚcÖšÿð¶?qÒnq¶Û§¤¨ _›¼¾aÁ­•:}õûHÓ6×@g礠qI›jUØ[Œ¼t†Iës´¡8Oï‡.§–ðÀ%-Èf<Ýs–uì¦ÈžËÂâ‚wl¿%Øà†[¸¹6Ë–íïÙe|åì»á>Uœ†Uq¨ä;ƒ ìÚÌ æF€Nç×Ý-—/ÇÈÓL=ÃMà•Ÿ/=àcöªG£$ËÕlµlg^Ñ9$†\qÃ黕êñ…AæÖê+Ö[5–Â=iW¢YM»Õäß•yˆ#,Ž#,,R´Ct ÞÞõj!¾£–«V„ãÒ¨pƒòžÖæ/Ó¸/¿<"ãù©E¹¡˜j }âæyVvg&‰'Òf}ãxE|ÓÖ¦[¼nÐ,zùŸ5Þæ6#D_ØR(·E”·hÙj ×fUÚ2ʼ` -ôL¯#@°A$<¡ŽÞ©âC êåᦠ:z ½×Œ_{ñlÈóYÔ”Ò(¹V¿£rÿ¦öS•¾¾Mô}ò>¹OoZ+‚¥=ÃàE* 5ïLN›.Cψ·¸Î˜–WÇ ·ÒÔfýüºe8ÿŒÂ2™7ë:ÃÅúGÓªŽšÁÙ1‚\HG´¦DÅÊjZ¿“˜õÓðä^Cøªˆ‹.3ÊÈFÌt$í’Ùh‘`d¡%“Öo:ž±òöQÿׯaE‹»ÕÓyÞ3|qU87,l˜jû=«Z=I2@ÊöE³ƒ ôìÙÔfÍiêÙíä鈽ŸbîÖQoõíü0V#üUæIšãï£Ñ[‹a5 *\P++‚qs©­“/%…@š2ñÇgœÑDÅ´ñ¾Ñ¬š#ê&Qj&£³øEï  ü¬’š7K„üQ´yß ]GƒÓ‡D"6¨€’ã Ž\M½xŸB7„i8ÁtÒëÏ}MzÜžé*q¢•uÅ]¢N=wT':SPD\q¹"«ë ^eF94ÍÔj³:Ð’mÿÍÂrî nŸµ‡US5´¨º˜Á@r Š«»(¯QüC-4]lh¸cå9„„üÂovè$ƒ7JŸ¼Ç%“?0¯¼k=-gë=³X½jËj‰µoÏÇ\±¶H´s7Õ"k¤L‘rÕÖhý û#w5|ÑÑ™½ÓÍù{‘’z™|¤ѼK}Äe 3®_i ÿ ›Œ„‰÷¥‚W¿uë8ª·’&ú䊿t|Ê6T¤÷*ÐöAu=‘¶Ë‚(fA›Žú÷\b ¼û ·­¦VxKßhÝÊÊ~•í·ßÖ; œoX5)}&ÍÒÉÐË&§Ø:µê| –²Ç¡ÐÉvHé¢þ€½¨Å:¸¸^öíéÀÚ™“Us:Øi9ãºr¸™]0á ¹Ñ¼DMAÇ’/;Ou;Z§½¦€·Esäü³çßÙSuÙ²–~Z V ¾Pq åTTŠÅð[—•}{Ï=ÄתMïèO·ç&Lì´ 4ؾ3_µ×̨jµuQ}9n¤­£ÂM„7&JêVVóMÛEþàéUABKùt†g‡Ñ¢GEñ×ÓÞ«)öÖ,\ÖŸ Ѹò”y‰X†?ª=Дö\`àWaSˆ¯ íÉÕ5/М®xî;AÞ’: Ö’ƒRÓãäz­ðØŽ…ap¨ q¬j·cˆ¢ hÜ„ž8¦¹\ƒ/‡âÛŠüBXØN±*Ë:¶2 «5r“×i9 F~iª†Eä¸ÑPgóΙ¼íÜÌ= è:Z’dLµ4éäVj¯7Œ«DÑ£Õ—¹ò¹Ï.Šø°8{eŸ{0î÷Ái™””B ùCÆ?´2¾§‘ð’gyPé"‹7€Û+ªH«hœ¤_§„4, ¼2ëý“ƒ­‘>,:]±[Ú;{käÿ¸¾˜æ»säëAuwõøÔqã ágº;´{Æ—-9ŸlDº@Y“P6¶™—˜¨º~¡w»ƒ7Y`&{Âzð£Øoö}ƒº—V&jĶÊkóä8­á1.ÿ"Uéó˜6,Õ¦A„q“R޽+ûüãUyJ²?(3ËÓ2¶ã¿XU)H"MÒÛbÈòT’ùøò1Ãs–_iŒ\q`ä\îXîUßì<Îñâ®kE z.vµrköÈù eâ8Õn×*9}ŸÆuoC˜ÂB÷÷úØOI÷Ô‹TÔƒW$.Ϩ¹€9ã(»&˜ïEÊøZà ]¤Wa¢¸gÕºlìh²Yá> z¢ÈS_£zG"ª³ª-ø´ëãäïã^•KTYLò5êª%¾­ø,€6WG1A_~íøH£CSžÃxQžôó†#~›åäŽn–GÐbç riX ÷Ó¬UQQâ †™Æ°b¿Qõw:ùù Ü™)wÆË@&Ðj5Ch œtåä»£Ñ ê ªï58IݾEQýîU\¬Yah:¼©Œ¹nMî?¥ZxÀ’?£A7?Ë €çqäRùÊu Ð}ä ‘aÊ &„%ôÀÞc~˜²ÜœÜôæ†ø|ïÙ<ó6hU„}¤ú]äð+þµã±b†_Êû‹ç[ÖsX-IÖ[Ц›\ ¨Jßèé‡ñÖÉvæÈ_ˆáá//"H>(L¯W¼,&®ðå\k7†®´èy½‘¡új䢣UfI3PFÜM0»–@ÏûD ýó!í祥û¹ÿÚ'*·Z»3ß:xG(8å¡¶8—ÄYFH; €õ•ÇÍB»:Žø9¢‰¨–ü„»ý‚ZçxöI-ÅrDoñ4ôŠûí” ô ̯k$Âþqh=zãÃn8žEˆ1݋ۧWƒ ^BªÖqpûçJEè|TLå/r¥!ĸ< 7HÊ=¾!lϼu¸8£ø=?:>²ssÝ¿äTƒ~W~¨80œ¿ÐJˆÝ€KîVÄUq¶î\£àÆß`›%rCòæ]DµÒŽvÄ«®VK!†üêâ2ÃTÑ@;ëQ#Î@î=À+ЩBOôT¨DfJ–´ç`Y~íüö³ÖÀöX†mwT7ò"ÍxÂ%ØøT÷&â®RÒrRµž‚ŽAæ–NÔ.fB ð»n«¸i Øû}Y1”^Û·µ65‡H‚\:ê Z‹ìvÄj)^‡EßýÞ/©Ê/±ˆ”ÚW x³‰ï¤²Ú*±¾º´¬oìÚ´õº°T}²Ä¥²’yXÆ»‹ÊŒB$…£åU’'mkãV&CsLv2áçx©blaJÊßW÷ÿÀO¡¹iF(¤ñÁ@nÀÔÝѧöðWe²Z6ö÷Aä"—覆×Ù¾Õ°;ÉS®½£™ð|Õ­7rßÞ ¢6»¬Ö";AáÆó ÷€ê¨¬Yc5x“<ª||Ø0¾U­¯!£æ;ä@}U/þní¡>ð½à–Ú›o=|ê{!ôfr¾u÷éß5ÿ¿Ë³÷óÿ¦^{÷‚bRð v7Ô‰b'¿ÜæJÂ;QÊÄÈ6ÔôíÎôÒ%˜ éyIŒ$¿½®¨®wH6ÞáÞmrÔ¨ :ÀV/ ׋ {@ÕNÔ­mÁeu¸‘Èp€àžõ´‘1“Îv6¦wÏu=*ììzmín½ìÓ<R ¿Î¨è‘ó$3Û¥vž?‰Ù!u¦kî(ÈU.ªs;e£ :5rg÷:Û3ï¿úK®9xï²ÊwþRwXœKÖ§÷€‚¸«Àܳûœæ»À‚Û¸»hÉ ®#< r»@ã°Ž¨”²(TÕ :,p¨3ø€qì_7¹6 _[ÙAõ sÖPÞÛƒ ɘšwêW&ç:îs2 ·L“þ˜qùÇI=ÓÇ»S|6Å,ÅÉÅ,SÓKœ)ÿÝgÿÓ†Íÿ}FàýâßsP:„€ézí¬B¾`&Þ–±gž+¬íÿç”ÿsÊ¿ò ãÿÃsP‚Rñ—„œÿ8…[˜‡ûÿœƒòÿ{ç ¸Üÿ‡sPðÿÏ9(ÿß{Ê¿·‰F&·HÔÆ‘öÙÔÃkçÚ÷„VŠéËÔYç: ÆŒç@lú}ìëXÿYJ#ÂÉZ@0®VÖ¨ßõ"}õ|v½Ê}|A}ÿ»ÿaÜÿþïŸÛ£‹‚.Æúï’]¹Ã[P«Æ{A.Ý—Š¡ÌvÜ÷€>nWòä2E}úÂaM®BŒÄˆí’¤$OƒXI¥çã2$’rw6Á}ŠâÛ«MHuˆå¹>“äùZ&N¼ÒUj--T•F·ª±7ê¦W§è %z\àX[º±©¹-âY/£¢Nï”ÐÃV»óåۨ£í_øµÆ;"°¶˜‘FúØ'$Yß}ÀôÂçL|W´ú$i³ODäØÒ³Î*Ñágñl|ŸêF‚;EÀI§FkËÞ¢)‚fm#ú’+bšÕ4ãpŒÄ©Cü}‰‡7ÜÔ›û Wïýn11ÍDÔ•Ò­%"}¸ØÔ'6ËÈê-¥I075å½ÐÛî¬Ãü–„‰ú 5SCȧU’Ït–ÆÀuƒòî’‘fj¶#VâÖÄ-»‡P=$éÛ¤ Æìç3½…FüW­çyÑݶjÁ{€Á=`êpÔY¶š®ñ» ;þç­¹ÿ]‰ý`J%Ž6&¦Gl0¤¨°z&¬é$‡µD޲Â,ƒÉAÁ.¢æŠ¶²¬n9s€/úäså^ç›ö/fÓѹ¾‹á_Z) UõìÔd¢§Èï >f§Ë›®‰×Øb†‘Øçégd¼OèVnR¡Å¹!ð|ä’Œ‚]Å_cúÿj ïãÆ5} q.$‡v(xßR¦0ÅµÚ ËGúTHóõëf~Ž]‹Î4kä7ÓrÈN~äVû¨Ô©ŽCñøS|Ä/Lð±Jkí'°ÎØ&§Tƒ›¡ñ;¶Ž¢ÿˆ4 }jÒM¾G¤›zn)ÆCÏÔ[ßn¸éßý ûRÂTƒ×Ë–’š{úÚ!4®°ºeÅà–lÃumq’Ó#8Ï!2wѤ÷wc#Ÿ5ÅÍ×òòÀc[“¦W‹gm?îðü\Ç=m,VY0u ù™>Æ´èFÜ!.‰E¶~à‘Pkë½ý©ú× ¥©¬ìÆâÆÞËúê§ä©ÞÆg+pÃÔÕxÎfˆ CYaä…¼9¨õKƒ.ûvÔÁgv-²×Z/éáVÛàL°}ˆ+”Ý5ôyFºy :ÍãôŠ`B½¹/˜–Ú¯¯äïw¦` nÛäl‡SêòŸÏ¥ ”’ •Y#˜¼Ï™O¢2jèU¤53ô]5UXxdSÂ+ƒq.7lʆ\°Þœ—ÎÓmd[„GLM&8Åï±E-H~+ãmBð·úø%}ÓT·è¦ø޳¾ðf—U ¡=§EVíW‘Á‘õz‚|Å0øì ‹rR³õl]ýú•†Òòq³º¶©º×²ÐEŸŒQyæ!:E"[܆D–ZIg™W:fW?ûãÚ,7ZÎ:¹\uÛQc?c?8@‹škÉ[=fS‚¨wçNj_¶Ê™¿ÍKþ>¼UW‹ZC°L2kyøQîíÖ`Üa4>gò•ÿ/æ–Ÿß6d—9>¶k5ÔiÍý: ô¦d úe˜ã6ŽqÁúŸ´èse¶\ Äl8læ|lRº8Õ¬Û|nšéõump}÷^Waý§¿R.ÂUœ6»9gÆRQ>Vj6⎳‹i¨ÿ­NÂ`ëÂû<&¥žêcxÓŸôa– V/Ê#ïí¡¥Änk¸[°+ A‘Ú@D©o¤<}‚ÉG _ÈV£ž‡45NE}ý¨••x¥o,k½ñ”ÒI+Å_u¢ÌxTäüh|ê?kî‹·,œ.Q#Òpà¹&ý‚‰"¦…FÿòÓ8›êj²¥%߯MA¾æ{Ë«)Ûü²%Ú˜M)ûÄꕃÛ˜6–’??OI kŽbX¸jÔØ¤1´ŽIiÔj¿×"_.Nƈû\•㭚Δ:`¿b*Zi‘ªdÆ;cÿ£²Î`ø¥+¯Ž ß ÃsŶìVÄäû¤·+Oþl´`‹a;kó£|l¡miîfSÔÍ™Äi#Èæg·/kN(¨T86Ê‹<~z™?ýáEr¹O×*Tû‡ >ßhhÒšù\äuÈ‚€Æ.È÷€X³0P”Ê«_ë1¿ŽáUYßyVaŸ´‚ËFë9[YïêõåùÆžÞ¼Ì_¯Ú•#p^ŽFg©‘—t|°m{=O~›K .ÝÝŽ­K~&»×«F½A ٢ªûìëÈÕDúRòP‡7T—Tn+-qð½£ñ Ç&ßY+ºoÑ®qáÝ2ÜwÇÒ¶o éz—¿¿5Ð cX¡æ¹p;V¦3¼™i+oÕ;'9¶0;~=#£^³§æ6’í\“ò͈{v92í®Ä©ìÞ±sôÌÏ‹ÝÏ›ŸûI**dÜ45¥Î+wíÏÓPURV·}d®$”†lÎYöõ„§5Jlö£>Œ´F©¤ºÒ$®oXÄ®Ÿí¶Ä)èi;p³0|סÏWœ=®9Zk‡¥Íç¬ADyVT({ë# µš¹!^¥Ñد.ëD£pvÈnjÒ2×WÇ`KÐ¤à‘®yñ´“6§ó{€­‡,Iùj*#òè®±$³ äQH{Pq ~P·d˳±ü¡\˜rñNoJWïèè0Lµî;Ã;jò-:úý²sg¸£c7´¹Êpœ³”5¾ôhv¤Ìõäy®\…tʵÙrß8˜²±?ü– ñòè (hƒ‡BÝO`Cf¦EV^%r ´ðeÂîsÀ-›=ÝðLuuþãÌk¿]EÚ€ðLþj¾]Œ130Ð…l‡(ÿzúB+•;›¿ý=Rz%SÕZŽþꟼ8í‹,ßï~êÐú+ѢדÝhS¢úÔŠðS<òíɨ-µâæ~ò?†‹M޾jìø•È;µž*ûºYê2;¢HÕvži¤1¶df¯þá"¥ÎDe¬nÔŒÄUdµ°ó7~ýÞ˜¥¶áEKdb¶Å <ÌbÓiüúŽ™X숿À xìÞ¦Èéé?gñTübK±!ä•Ý('ö’¥|ÈÑõ©œ³#Õ3GÖ©‚Ê6et‡ØSæ_jørÒZΧŸäFòViA¢¼ CP…Vkâ„ÏÁWŠêo9¨=4¿Õ=®Åf:Ÿ»èt¢œ‘iˆ9»ª£Å@·´ ×€˜ô· Ã_XS37)—]èÉÃgha'Œ¥œ2DøeÓ= ž\4äðÒá„ ,F-N“(é†më÷‹%ò àòûKà(D^·zi«˜¶8̧’P”Z.”=Ç-EÖÞ /lvÒÌJ'Kû5c~åéíæí%â°ûQ¬Ž8 Dt½úÙóÑðÚ Ì7y)TåùÔ Sž³(ÆÌIMŠ|/°ôäËéöNÔß„ ž éd[þ»Íº+ANù:‡‘ïY^"oid Ÿ¸íÉÍP+ k—e†.ŠÅ0õS¤z/%ï–üÆ5×T?YJEE¹8Üh1±ï„wÆB»ûû&#†õ§UO1íývÒKnç;W|€:~IÓï:vp&ë1Tî°Õá?Ø^o[Ãõ´vã‰Rù¦«èBÎL<À  „0ÙrƒÇ7ýªí|3 úß^ö­á Ú U˜ÒÃÑKUwFé]ªÍåû¥wÚëûMa“+·FÙ½ó—¹§È?áÃÏ¶ðØ‡¾._N+Ic—Ý4jF<~Ÿò‚áÍ¢YzšømßΠȤ rÒ˼ýbf¦Å„Êi«ûQ-šÃþD þÝUÉÕŽ»ØYÜ²Ú Ìĸ«ADÚ×߬q·©ë„G¡Bû³,“xUÖ ÓNÀ'ÐiÃåHôb¦™‚Él¶g™¤5EZ§a²3è(v¬× ¾±cãpû~ îV×èQŹ–#£µc°ZåŽ[©‚‹PޏEU Ï7ÔøÑ„ƒÄnÓï(/Í]Øû7ct„a t}δ±1;ß/§#_ K¦{‹ìÁ‘ä¸#þQÀM•zçvPãKnO‹È}ë®ß¸Æo1¿è…¼Å6x©²·ñ "ÖðâÈ6o¸ö¢¢>ÐÍC5êHÙÜd šòèGá=ŸÐç1n9T7qi-XGâð¬TßÕö€ÍF{<6TxŸÿ‡à7 ¶Ãú©±' ìxZZ&ü•<òì‘dç×M}䨄Vü訅İ©^U”ÎGNçÓ£7“›’~êÚø”Oø’oV3õGS“G ¯Îü츻ýò]™¹zÐ@{Ô¦ª½7>D‰­‚J~k=Õ“K¬Ñd`,VÊlY2ÌL»Ë:“ÿõé9³ÈS hÿV›|"Ø1A†§`òÅ[mê×·»Çà8ަÈÿË Ìü§A™ö·÷f!¾˜SŸ7Û–“ÚÝœYWìÆtäæšŽuò|”û`µ‡Y–Âr6u…§Òtú³¸+wè"9–fU€¦ž&»Í&Ççƒf¢Š«= €‰b¬ó…ü]s‡UÖÚ[¹fÕïÂVG2®×`øD÷K€Q»%Ž#8~Ž÷Vô);ï¡=ÕòE®ÜÃVÅ€. þÙ­&¨í6ìZd•$^ª—J¢mVJæI¬« @î£uÂŽcŠäH¯ÀVa‚¸¡Œ¦‚R—ƒ¢½±ùÅ=@pøÂ$uw¹˜4lrí¬î6µ9&+„h1ÄkNޱw'O|ÍìÑ2{Gïînáûü×—÷ë;n7 T~b'Gªt𬇆Ug DL&ƒÙa+Qc¤©3\XF‚ h²ÀŸ³Ž­õ• â 6JÞEµ¥!I3̵…‹ô“qµ¾kÛõ¾x÷Fj¿¹â§—ʤ´a“''=y.$32Ñ*ðqú’!SWûJ˨×ÑCjÚü„죉rt)bqâص†8Jû|RUñ9ƒÉz3ò=\NNƒÔÈ&Äd¤2#‘y;f-½ÿW06Æs¯¿³£V5é|3C±Ë™õX*¯U«ã!m&h šúºÍU`P€Ã޳˜8EJ½– %&¹Å› Eº/â·öi Ã4N—þ-_îÄëínas×à)…†÷ðþdBK† «“È+gþk‡½AjmÌçT›Šb*€G%|'Jú{@<Þ¼éN³“˜µ©úb‰ÄžÃH×gHUZTfQ=p* *[…ïÓ÷z³îðö2xS6ăꂎ¨Zæ!Ž1;®ŒHu»_Io ÏÜ©”ƒÄ"ÁüÛªîÁyž("oýB]fcoœ|4mµ—Ân›ÌÞ ,8ìÔL0û/CŸFØ©‡ZA/PøèQd¼j®®ªRê<ðWÎàâŸÀØ+á{•Xr ‰'Ü‚B±¡µøoxK«Ž|>‘Œ÷ <>žæŽX¾˜ ƒfî9 ­:fÇà|ÜXiXyg¾EœéŒŒ‡s• ‹Ã]¡¿j‹IÚM~Køª„AÛ…ÖV™F»äË#;c¬c<¦­w†wêHâ4à4¬ ëÊÿáéøJ~~Âò©‹¬ûsS˜åÝ’ŸVDÕêón\›,C~.¹Š—¿ÙGL! œƒ'«dœ3øg‡J(lÏHû¥‘øÖ›þmywIá÷€GLŒ{Åÿmü2û_]¿—/ ¦‰´Öæ[gê¯~ÞļM8ÊŽ=׊7úúâŠá*Quº7Éü Ó 8³ãGB<ä^,hH›ïûpÖèÌˉ8¨ðŽ{IÛ”üD<ïX\ xK)Ý?ùÙÞ³U¬±eW[ctÜÞjŠPFé¥Í[4† ´É¦ž<ÇL–„/q´eB'Dü·ã…îfñb®æk©Ä±òÕ±ò…¡ 뉂ÙFTŒïÔ7¼Y¥|’Âì¿»ã6×QRxùö}0¶˜r°PÈGê7vs^ÁOµ½û¦Gj¾çhÞIæ ÞzZsï!5.(ñ–ã•f Û]ŠÇ=ižÏTxZ 39¯^ì<ß›—<Î5ÙÑo  ™4•`öûYÊxRµtÌ(‡9‚ÊÒ¸N6Üáð‰Š"!‡¥á=9&é­úF÷” ï—® ÂÄ Q…¸TÙüï•r—)i7“ª—»hà~‡€µ³“Ó[d€¤ÅLOM¾ök#Æw‰­ÁÅ9MaM9d­"à ëeEEe1ŒÅåÅ¥¡9¤{û´înn¦•…Ïå%f;‹`^0®ÜÌ·îÿ-¿£Ÿ1ú÷µòÿ˜ZÒe:ó^'Õ¦bægø!„ ß©£Á%‰•”×F°¾ ‡6­EûÔÕÊ<,Z©¤ü®Œ2³²’†ó>±Úø}ì‡qîŽh»‡ Zuâê »|“y´1Ëyvt{Ð`}PF)Ös9_›Mǫ״++/,²Ú§ëßû ÖþÔUh1#3&j¼ÑáÒÉ}˜){¸ں²0A,ÿÄN¿(4‘í+ Ø€ø3Ý©ò/ØŒ`–ú rß6ȼÚXËèãOدUl™iò¯û,€®|üVVDA?¯kÚA¨{@£/yµ]€‚ÕœÖØ$¨Èu— MnÞ‡ç쪠ZÈj¨_œý®—î|ªuÅÇ Ëóÿ©Ÿ¶mrd‡üt0\ŽóÞºÓOú¼àQ±+ÀÆÐÑÜÜmé¾ÕÃ/¬‹ºóyèé ñ*Åx7txSnÒÆ©Û5VVö?ªò©:mókGŽóÞf=û,_ÀæRS€Ñ¶N¥±h*·MÔîç”§ŠH·Ú” †l?…}ÓÌÍMUmö2W´ÞKå-§×naÀó¿ÅsÉâéd9Õníȃ5íÍ¢rž?Æe¶ 1¦T¾›‡ë ‚ž€áiJxó6õ0Þ1z]eg9¸>ƒ1©õÒFs_'æ¤æ“ƒCcƒ(z9ª' þ0'ýîö(û„,˜ìÁµÒØd4qÞðU}ªCeÜXpÿ~Ø=­ Îò”R‘$ 3ñÍ4a¥#eQ%…®7?<í€v€æ=u=á¶#á´ŒØëmóŸ;ðæS}—_º®ðâË'm½çØX3x ¨{À×?À¬mØX*±ôî˜2DiQü6|·§yo»¤Ü8ºIu”w°oï2K§“Ý[fðÑeÌ£¤ LˆàòG䳜û½þ;ÿ?k1-Š×vÖ±tH™ cмݪó4ž-ìLÒnvÒ¾ŒôÙyƒ/©oG8ž«ëÿp[þÎÉZvÄM»'—ûMô¥÷üUÖNÏ tè÷yÍ0uŒ(õ§i8ÕÐÒ-ñ—=£¶6ÑM9)‹³:%U)Uèo¶2ÄÂukŠ[ðœ7Î+¹Æ7g¿ugFFM#öHi/µÿIøUÉÍæªmNφ ;ðz"÷ç ³Q. h<â€èõëÌG X¢yq=$ŠS…ïV<õz•àiˆ› ;ê7ö2ðíEÐjO-|ºˆ?§z5L7,‹Nù´¤Ï_žˆS;7Ù®JmÌD‰MÉi5¥Xûg9ü뱫äkreâJð´n€•W„)‡¸) 'hæÉüch‹jš$êŒ¸Ñ ÅîLÛÞ9\î?†Pÿ´õb©õȤ}M6#¡H¦=Â/!QVZ˜Hý’êSb¹T…´Kpnë³{4B+Ò¨BÙî4¸öí™r ©¿2ší&^î ŒI3Ûñ°sÈ蟅5Ȭ ,s"±ïòÑ­q”šôúpòd>/Û>Æ“Ä ?“YÍ|–‰¶èu´Ur’äöóX‡ÕYOø•î‰Ýÿˆ üO:œk›¬èOÎLa7˜ë%¡…å¶ßöæÂX¨ê¬ Ê¿)l©r~¹õǺãv“]½›2”+hJ±>î¨6ÔzÙJIEt;|œC-C2`û8ü±${6ˆWü_öGÖ–í¡?(—ôάƒü÷y¿ÿ¯c¤/bé›|PÞ‡í‘}„:[ m–¿-Ì_Ö›ûÁìcçuÞ—Îq!ô‰0âG‰×ÛfkEòyÛÙ•ÈÍä!~†ÉˆäzØêÚ´Qãâ•Ä7(õ£ÚL`]œ‹ÆZi€¤=Þö2¸è$WXúÛøN“;žª»¸‡ÈŒò[°­÷Rd"þÏÊZ|³ßº5nIµW¾7·ŠîÆÛV=öq]’ߨ_±ùL׿¹!;]K¸’2í@¾!øµH8¯—#EÛgx±~_è_Ö…–Ówí¸YÉTŠ*Ÿöy!¥opyq2mæ†7°€’:ÀZ¢Z–ô%ê–p›J© £](“·½ÎZ̤&ÑH>o7F¤¦æu¿ ·„—4ÑŠ”eú_~ÔñÏšFÅ|ëîßúkLVÛ;ü}kÐÿuTààíCôÙ_÷€„“‰ dùz_ûµù ¬ÊŠÄ«/fOè­R`b”qOLk艥¦”—‹Ô$ঔ–8|‹P =”½FUCºª7Ó<9%^/'}¦¸lI2%a)™¨'• Ôy‹a2Û•o%|ˆùÔ²Ýÿ·°}ÅüW©¨cÁÃ[$ ý?Ta)µ.Ž:=Xé{‘£kaï§VŸÖ¶ÑvÇZöOY"ït<äip†%/CÚܶXœ.Ù9P<wð7Oè!Í)v cÀâ›bp®-Oñ "n+Z&"÷¯óeSfivŠ.4$ñV+ }ÚU…°Ýï”õ}» ÚUN£Ýó=`Ü·Š÷@Šà”»r½‹LkàÎ>Šés´ö ÛjBì•.ÀêÛf?8· ÍÊ]|?Z­åÍêË'¾e}&mR>@ë_¨¾æ¸>ÞI±5¦s_¶êcä0˜¦ÈÑHdë16Ô¼ ø¼-o0̸ˆ|±ñD¶Š3Ãp0(òÚ¯•Ø—¸éNÎ"ÀüÀQÚჷ-ù‡žœ­oÀªÃ–’ÚwGþ]-uW¤HNKÊÌÅ ˆ®‹Ö‘E¼ÚJ]Ó7õ“{1„z©z°L‚Upë5o8mG»<ˆÁ ¤­ž¯½ö[îÄ#¬‹B!O£omÙÛ+æ7˜:qtí㡪ñ ükI[³=~¡w¹˜¬ðùʃSA³Cê™[’ö¡­ól…d¡¢,µ)R¹²Ðl4ò½»Êˆ JÌÄó•¼¾9±,F?95­k ·A4×4U‰Guÿeé×é¢M qQ…qî_}ÇMïg—*;Ò™ÌLˆs¹ÏwN(»Í8/ókê5G] ðx¿Ü!˜­ÍdËÉ\ xpW${µÉSÅxulË®i9”[VÔ¥µÆ¯="ö}Ï4…A¯ %ÿ"Jµ‰˜œj’êdÌð«GfBFü"–o̳ d!§rf´r¡„Dzôí­™~¸ìd¾E¡Š!/>¾È¡fþñêxz'àpÙwÓ,aæ)9X“+xÊÛðÊ nTq2ï¥îè´ty-±2 爙·BíÔ«âz( ‡ûl(7>‹¯ N&b;´£È¶¥@£tú†\õ`K„ðøþø$üX"Q{ÖŸ„ü°re =öøSGš—eü¿dmGÑ­Ëk\¢3t§ |oâ3”üÀ»°éÐ+ÑÕLig¿ì_À}+‹*œOŸÔnu¹y,å/&H·Ø½Â î‚)Úq±¤–žÎŒq-3ûºÑÐpÁçA!©‚vÞ-©Æn±o®3ÞÎ?3-[l5ó–€ HKéÊΟ<´=Ê׫øœ—Ÿ™è߀V“í#¨½:^se¸4A ~;0êÂû^TÿÈ[I§,¯O)=ò ˜+[ì´Æ9SGÞ€hฟS¾špŠÔU­ö*ç5Æ7ç÷€ ‹ÞÜÔŒ›Vcï4Ó—^VÎ*&°²» Å@‰Š¤«[¿iøxüÂêcdM/üfÌܲœ9⣿ ¶KëÕý Úžõ³2Ö…--¸˜f¾–Kì÷o2Õ·) þЈ ­FX¥d¯eqx§Y(X5F0×…á’Ï©u§`PM–R+ºiŽeÆŒUÚ-@ H˵þD²žOœíï v&zŽ¢¼ W)‘uM™ÔÒ ¢rÃ@ÜYJ\Ðâ¼¶¸"fܲÔz¿×~rDìEA)ÃKad¬ d|$oÚ~Ÿ4Í´ÿ¶ìj.ý6Û<œÆ÷ÉV«€cË)íÊ*ìó¢Ÿó槯ùYÇD^ÕÍ<"ŒÀÂÇ„öœFU¼½y}E»ÐIØ¡h/â“…¥lÞÕ$le;y~°îÇ0ëÕÞ±“N©ÝÚä×`gÓ£ð–õ‹¹ì”}Æsx‰ .9/žìÑ”*’ñ›G¸1mÞì® ÷_ñæ­ wñ¦ë(ͬé1C‚š€mà©Ç‰îǘ¸[ø¹1+ë®z†5!‘L5±Œ^UýlØÂÛZñO¢~ ,wèii“¥È6FÇŸu» &:l5p+±£tŒ†í,‹Ê¿h²ÎÓêø+—“4­¾†´ìÁÝ2ÙïȵÀŠ_ûƒ"ç¾:‰[€ø}Ñ}s‘ß·ÄëSÁ)‹â5Muõ¢•˜$ö‘ìu&/xŸz¯;ã­!·c¤Ã&x¦Šzwgæ_èÄ=?UÚ˜)…ㆃ\oï’HŸ ˆDÿ’0G~½Ë%¸¦i­grJgzÓ™`ø¼t¨ú/í³CÿÌì!‰¹¤UÚÖ·ÊÍÅñËEب[¤á§2•!0ïwwktKá‘uþÒæIË Ž|ý²æÙ{´˜‘]¶x•Ä´gl˜\ù'¹Lv¨\kÍsNÛb1]‹†Ù£àêª4~]Nds©ùØv»”©Ä+`uˆ¼{+™•Ë¡v`.øÊ#÷} •MNÊF,¥Ùmg}ÎÔuk¢é‹Å†ë&³þáîm)’Lý×Á6Ç‹ZŸ¼SD¯îá[LœWÝØJžÞŽÞä%W¸½:[îms{nÀL2Òë|wïB_^\û—_»Ëݯ¸&㟗ÄËÖ.bëɳºôºû¨ðí 'Q¿'FVPÐwì'nÐ Û ›­q-O?¸Ÿn¯¹Ô„›8›¦aB º‡´¾Þ†:êz³%ó뙎Òõ(Iq%Jk͘ìA·é²Ýcå=t$¸ªS# ):š×îëW™»À)áCÚl™²K;>~Pϙ薞Úp^@qSŽ¥¥}Óuí»QýûNNrø¡gyXXhOiA2§ñ¶q}÷ Û*_&—ó6G™ær§”|³¨wZóœã KUKä@—Â@·'Íuúa¯Šj?Άö÷ í–öµók»=ßÓp«.y¡H„";'†Â*7¶²Sõ0ip²ß0L5Óøߺ k¾³ÄÚ Dè¼¼(µÖ#¯°6n?ßQõ@˜nEW}p¹Qý¨ÃKâ"¤9åQ ÚÆé»Ww5œuöUCí"W‡7«0ÕðsJÁÓQ%i°sÛ†ÒÑ([2¬p²?ƃ/ù;¶{V6ðf/ˆ&9H°ìïî®d­›g$ïÍ0H´Cœ¾ÉMp+;pÓKµ~Ä ÿ/7mÓ8VYÌ”C=Ù9ÂúžÙ#,> æ6œš6ä§ »|y…`F»·k±q _&[ÐÕlî…N‰OÏ~¹"„±êfœ:R÷‡µ“ÄÎ’¯ HGTäw¥ÜG(&ê]έò5çýŒú!¤ûË!e?sòq¿£:x*Eæä½§«Ügw4Ab¶üÕ·Ç¿´@å‰]^Ì€“Ýyë%Ϊ¨§hÁKÒ„/±¼Ú„ük}ÜŠs%áxeW.‡¸qEЙ|ÅŠ¯4ÞšÚz ¸2˜+ùíÇðX2G´œ»ùšrd^¦ÏMzMö,å½úì/ íH+µ%½f×YØVn[Ç GÕhBåä·Í)ù—´ßcT#)kA{¿=­‚I½MüxúÉ¥_²¢MuaÊ哉ðçCÖJ´ï¯MR_wÈ\pyHmÁ$ GÇGÃ2Ÿ.‹¶Uƒ"Ý9ÙHgù2WIã»àÊ@bg¸}cŽ»¾r,):&.*qy¶U5â‹7ÐÒ`>ðl Ê J’mΓª­)]˜ñGí¼í“QžA'¸„»<¼ùyñCB‰¶T>S¨{ö†\§gî©ÕŠúÌ*Þ…Ÿå¥¸vû‰»¸ƒQ+x|xôUÂàÛôhq Üa[{¾pU`YvÀÌšûšÁ]MEãùm]÷¦T}cJM«$`kU¼6¶NLjA˜ˆ®“M¤ÂÎéU¤ AI×úJi$qÌdØÕd +ãà>Ê£™þÆOh¦†Ð,¤'+«LÎ=Ϩ¶J˜„&ÿsm˜ÝÁ•V"«½–SUú²[ž þÝå“Rɕ҂Rˆ‰ØØV±;gX«YožfB?Û@qß•Gá^v<ä¼%ñ“Î%YßڹϙñRNu-#d¤Rºç·”ÐA>w©Œ6LÔä³ S³êïN ?¿Ê›%û¹º”`ìZ¼-HS-­H 5µ¤¥–ñü¹–.ì =`N¾Ãàß ®Ì]‚dÊ5.-Áíd½6eZ"jH†Hñ2Ž–¢ -¢Í'¿ÑIšráFÌvŽu$­¥¹z¤¬¤¬Rû¶ˆ¾ª¬ò. ´]w&ÿQ,B* #+žþcxvXýN9€Ìd½1†QÀ&]G†Q[‹váOÓvPãÇÁ©ï 3_2"ï^êªÈÌ¢žÈë¿B†®zÀS¸ÚÛÓ—ìŽPŽ“+…A '›‰½ù- 6 D†¡Çô,Þ*fвˆ¿˜Ëöm Œçz°DMæ'Žš>ÖÜBR{Ôæá¸©¨(î“ê‡úäÒЃ7;ܲÁd¹è\oÐ?¢ÖcS'‚H ƒ”kGÝ2,lM1ÃùjÐO÷ v:,¶)kŽ.`±] GO5û¶Ø>êÙ.ŠèÚ—êð£ço܆ÖjÙ3‚¦\xsªW7Š{Õ;u7¡QUã‹mÞz‰wn®îsðC?"ž\+ÖrÏ•{ÀÌÛSÖ'6½n¶6C‰q¡?ʘÈS±gbnßÔºõ%úxôD„WM+[E彯#‰ñÚ§G\ð a—´•ߊqÓå×[9Æ«m¾Òl /˜½{_pÏ Ç°Öªñ{E?¡É)5[g\_ ¤k2ùð0FáLOßüɬu(æ±i:Œ×.Zñݦ×m ¬ç4EqI'UËZ¼ÈH¶{&÷ÓréÌDÆn¸†´´}n%ˆ€ÒΤ©V¢¿߆þDy‚ÏÒVŽ€¡bñìUñΈuë»È͗ج“ ÜÞ?c¦¥b.Aµ@Ü»­ÕK«ã£g67’°1¦E/Ž ”#l·)›Â`e;†þC$._ÉÖøx*Kb¼ä|üoÏIò°&%À”Ù«7åwoŽ>À/óW#Ç“­u Htì3—"$(e±ÊöOEõA*mü²v4„5H—>qšRC\6à;Žõ³ÇÅÓ£¾ìJç¾…SCüjû¸oÐÎ)ÝÔƒÞJkîL&gR&§ šwFÙGV$¼{>cÛàMië}i˜¹ÈsgMyÓ"ùó Éß#VZ|þj"ˆRQ÷3éö5¦+#µµ.ä7ð_•¨b+³[ÒTGjh½gúþýTÏ6l>åÊ`:QxÃ"ª ô”Îû81CWñO˜ –ÆžEÙ[‘·¥x*-E˞‚þ9'!-lhé#jçI±bìòïW~O®°¾Þ™5Kˆ»Æ&¢%Ñçm\ÖS7½N‚–—̸O[ˆ;Mû@Ï2çïYÛ•ƒp¿hÍ ‰œí^ö§ÚüŠ#dô/ÏV…í“\¸‚:€™ÖÆ%èd/#ÈÙ*°æ”x¾ä…•¹OeÙ£Œ–Wq?-•J{A‹‚Š£1d™QØÍ ®’¦HöEQ¢­H’6‰c¢ âJ§æë‡£’Ÿ¥¼„‹8ûÈ[“È»Ö3 ¥…}¸ò'q|®KïÝi pVÁýÛÆ¦+MÙw°µ(×Ú’¯“Åñ8?å-?}¨þNÏ”šÚgffãjñÜ#ØäwÍ e57í븻WóÇÄ¥.ÙÙ¯ËyaeKmø’óéðöÿИÊ%-½·:Œà g¹'oD#Ùï:"E¹Ô†ïllŠB çMÅ'VÆ]–§çš>B”ë*ËHñô¥ø=4*IÂŒøhÎÃð4–òx-uä4 yqÔ¦C Èþ¨%ªª\R_ªbu}´ìšp÷ðô¾)\}ÔÔFŸ¼D.íŽtßfXá*,,­ Ç i|ñÅoÌ[Nœ&eYj£—IÌÎO»g›žùBÇ_w5÷ؤ}ò°ÜB:´)ˆä,­¦ (Y‡Y±RE¦NSç輌¶½"Jä¼~›W3:ŸßS{H\í¹›¾¼œl÷†W”xÜñÁ«¸ß´"_MÞ´qør|y½^œSŽKd“¡ìáø4ö×PÉ•G¡ŒÀ· 9uRS½—âK4ÄQ놶e}rbẆ·$tÉÅñr‹Sœö¨aß̱•=—vAO"å½Fi 5ñvÓ'äÊÖ'ò§ásL TÅ¡¸Ì,ÆQ:\9wÚmž­ ~6KtoS’>@Ùö~LÌìp§SÎ7zó#!†h.<–Ÿ“¨’žl†µ:bhTe‚ü›†ìFœ¡&'˪‚áRTå3¶„8NÎÆT©s5ùnÿ÷©6Ÿš4ÝmÂÛÛFPÔó&ÎÏù”È _±‚{ÆÜKzD†÷pIfí¾–²ÅŠ×/˜Œ¾Ú<À©Æˆ¬w,C¼•åL.Ò>™¹ õh· ö.°Vmµš•, ES}(ÎëÖRÕÕ`þS˜ dpÛJ}ò(õ¾ê*qÕâèIî ‘Å‰QsçççÇÆnˆÄ•h€V|—š[GmÈÆ\O¸’q"Ó\N³ÆÁX0âSÓ˪vÂ0uyž?¼b(ë’9Ùjw6t¯Wço¼â§kóÂ=óÿ¾<-wr7pˆ :÷ŠÕ˜Ä=4ÇorsTÈ“‹ÀZÄÅázr‰ñM`øMä=Àää®ã§zX!îåDÕ¹qP{uˆ¹Ä] koZ‘ÁGÿ‹}ˆný8&ÀV#q|Å^î¿ü%%3M¹ç •“¸M³ÝÙ.÷Ç>ßèG\¹§W·&V&÷‹ Õñ½*€C8õmüZƒ·ö o„ò—½ûµr¸8dw÷á*È¿×}Ðô±ÿîF ÷x‚÷wƒ›•”ŠPû-åûyñƒÿ‰“¼¾+€gûha-Gë @á½”–WÖa6‡DžlàÞuB"ŽïUCÛ Î>U]t"¤Ôˆ€ØˆxVVA]£TŠ×*®…Å/åñ›Ã®ÛÀœÜ(„½úcp×`“”àÉXP‚…~¢Å½ ì†JËC”‚I?;?b{mVh¯ô?Qby6½ý7t*C>”T t(?pÉÆ²]1Þ*¦'†* °Þ  =.S3QbçäV½„/ÙÁTš­4 ž85!åÎ’´Ptiùh¬Ä˜™YpÜ„“×ìøÙѵE„êyט<‡ü´÷<£M»Ðž}~ÂGã7ÇÆ8ÎX š÷Étíè¤G=sžo%ø$S¤Q¦ÅºÇòbÛû—oÏzÇlgÃä!û3ËMºÂ| óÚýñ%"Ä,u1a Ï”xì:’;«nhZÓòš}^Ï?Å–JQä¿,Ìm²ómÔ¹@tn7›ïOç’ˆ*;ðlY¸[=CØž›ˆ¢³h6à5ØÖ—È£ùå92 ðAnO˜7‘Šm„ÄX©ÝÁŠQm?ðÊ*% |UÑc5Kø$Ò²Ò¾'­ñjÛc) ¿• „3Â/6b¼t;+Fk8 ä T¡&é4àZ³èm. air|’æ+(›×Õ5p~cC»)<¯Ô˜’aO ƒ'U20L„[óX0-´ÛyQ7•ýJóÇ\ý0>„Tá}Óv%Õ3Õʧ¼±®"úLÇÝ47B Iâû–^ëý¸ùs­oZãde‘{iÔ¸xT)•(HñÞ"$ù½'Î"†o¢Îgu‡¨hŠxvæ:0Bú;ÅûŽΕPõ! ¸ã󨟋Ä+:Qû)NÓõ%bö =1’,Ú#"ø‘~¹Þ‡/ð“°(¨ ˜e.=ó§QÔ#¨ßi’*—|ßV¬9©úÊChAò§C[Àp]Y.#Ρ዇xù §Œ×² •X)í.ø³ójwQL€#+X¯»I’Käƒ#Eþ€BÜ2î¶ø§)íÞ6íÙûLváSúW‹u¼‚ï| kd*:¬–0NùÉ^Q…èýPŽÙ°Énø©[¡ÊD±ÖeGÿ•B"øÙÜ|NÛ‹uŽ=QüO°;`ëòd•Y545ÐñÑ8È ·ÔŸ2‰pŸ¨×zш¿ûñÚ™a·ÃžT'(y;GáìJ\%þú¹HÅè{ԡŨ¶J·A÷÷ÐØã!ëJÏÞŽ.±­³ÇÁY§¬áUI©gT!O±g…`Äžîà›5á„æzQA •êêjåéC¶$j³ò¹§Dø§aT‘Ä—|fB$àVÉ÷'+ŽÜ”È›–-Ðßµû¹º¸³iã0½k¸–5>g¶èqÎb¯Üõh“““Ó¦ >ë€u·ðeZÔ8lkŒ‘£×¯PšœŽ˜î~/a²?o×`Å&€>‡§¾àÞE=äsÿéN¶u*t!Һǀ©Jäwë!’÷²#Â1p410ß*ž¨êµr0ßc¯I  Š?ý@ú· îZC–ûäÀZM¡ÜøW €•®lf‹wæS”áPv‹“ß"íh Ì_Æ(dÝÆ$£~ÞÅt|âÅ"Zʤµ“ôî-¿CÓó+…ò©Zpæ^€²ö‹ ^º}>¬µ ~Nü—ðæÞV·›·Jç­ŠûpµWÊ¢Òùnw…I©Ÿ†Ð`· ªàvSI}(ÿÈ+¢šœHzßÔµâI¼ôÍÊ8ݯ±v3¶b5NÑæ¸RÃ}|õéò#Òä)—ÎVî)€Lµê,‡Cìô-ÿå.«vÀ;Ðúå­`2­Žr ܧãÝ‹G,R7/äXi˜K©ù÷ºµ ®³Lí9ïn~9n 5¿ŽVÎä";òþ­·Öµ‘0“ÐÃ븣½ýʳ#ÕL‹ö&í[ŒùÉhÛŸUô_Œo½ DŠZÜ|>wæØ {™¿§Ä9€öæ9Þ)Sè‡ÛÝ`úÇéÛhÊå8ºƒ¿Otä,®ÍßñÄËwè¿¶zZmê¢zü%ëXðyïÙN™£ÐáQèËžtqÊÜÀ7不ÜvU4eZõœáßù—Ì- ßÃm¾š¡ÖÕhTCɽ5éå ütQZ(´)øè„†»þÊ\$˜2`²ò‹šŽâ¨ûØÚÂàY/êPtÛ"6 Ù(¥Ýüªóu†øËWì9@ò.c9—i÷ëB5;nÇöO/ödôf™Is“O5³sOVÙ÷£*÷+n^Å]÷oö&_Óñÿ ºb=Dm›ÒŸæw܆èG\ӽݬžpœ£Ju¨Oó ÈÔñ›Ê@Ž®2¥BÔúq^OÈ…~Xõ³õò ö}^äé̽áí¬&Z½§j}ÙßãŒK†'a(Yg4B!t³LES’ý5ì9>–**ŽØ‰pêÿdûççGœ“ê#åºÐåU‚ohlú<‹W[³oÞu'ñi?ùš5õ)±`êUP³–ºpŠ\,ÿçJó•^|¢êš.ûS»{æ»ü^¡5Áwx¿BИ“¯#kǽœÐàæo†›(åÐÿIDÿú–¤#û>¯¬tïëdsé”&e†(Œ4iP2%`A”}_K˜€‚*†þ•mˆòÀ,#+üÚN±4žn]äÕW¿1;À'[:£Ó²$ZçñÒ®ô!´ç¯ž¬â=¥@Œl!›0±Om‚™AX¼L·¼—Û¸TiÚ°zOæ^ÝL¸êâ°HÍhõˆÓï£Iúv_O6^ýIr¢˜ÜSX‹<ã,Á¬:|ˆy5à$¶ Aȸ½º‹Ò5Ám*÷¸pzsC ¸çn¨­29ÜNÏm9u9Þ_Xô±L;Ù^ü©G®×¹`ut먉3?J7!_ ÂoÝÍ,~Ó‚­z.ßQ@ÞX_kÇïü"¿gê‡ÝÊí¯ž]h4ÖÆqzìüî†d¹û.ég«ÕîÄ\8ãy=¯óÖì”Æ(YY‡˜äõð‡¢¶5œTÁ±^¿¦¢šœ—0=¯˜ùʆέ³ŸùØöycôA†Ëm!ÿ7ú+nJfX*]Ñ òŽrŠò,/•´úèÖ¬±°ªÍ RˆyÂ(³b˹úoå·îÂÒV>NyüA“ÓC.7´€ðQ¢ÕÏÆío[¢%akޏ~£E‹ß‹ÊKëF‹-WVøË½ÿ“Øw*ùû ?K àGÏ‹ñ¶öé”—ù˜þ³nKGÞ¹ŒÄ?’ÔrŠrqõ¡qtI®¥þ&²ÙÓS<}=Æ€‰GF/«^±ÝF-<–Uá}Ùæzž«Ž2!ql¥*P§ÊBÚw ¾£Y›wÇõÞõfOðt*L´%qŽ{‡¿ öèa'\8‹ñï¶áû!¹+`Û&bCºŠ›í;Vˆdügb_%G¡i#ë«j’“†nþzf‡­ì>­(3Щ”E‚p€¥XS‚ùÚf<7 ûÿEÃ7é²5Í>cÛ¶msmÛ¶½Ç¶mkmÛ¶móž7n|«Ñë_VVVVtE×h™¹ï5íº[À£MÂfïq¦ˆÃØêïg:Cs’, ¸•`?Á!|SC‚ê@(@ÊÕqÕ’éô †‡Ýü¢-ÝJ„åtj# p#é@ªR©¯€ïýfN%¿4kH¢¾Cü%1%T°¥Ò£¡Ó‚¥C¤JW—^‡£Û|;>JÚ†‚Ÿ˜ÉDè0Å $cC1°¤˜³øqùFCudØþ3 é7Àùy[\™ õbüRiUÿÔeq¨¹%=JNçRçR% ÁˆÏމFÁJcœq°Ç’Šú·/ø‹ °VØ*€A@z~÷PC0ª‡ÎÈ¢®£ÛÈïö‰òÍr[ráîé4¹=»¡ÂÇŲ„”eˆåC# .®A)¿K˜¸øLXme fê·6ໄ]ký_:)ä]#…Í›&g¬‡¢!Cnà ™8ü2r¶-¶¾M3u†ŽçVÌŒÚÍÒ$èPש˜Òj$Èš—fîÛÚ©[Ž.Ûöð—ŸÉsÇ BX:¶—&/ŸùµÎsõè]¡š(L4›Âgïß=zX æ/8±™éY:ùLª!œO`]䘬ȧÏa(g$å%¢R;Í$rÿË –ò­"8½%ÎÒ1ð/xjú#ŠNÎ{„|ŒG:²âYÜ E—=¶Š=N’l+ÀÒEr×CÇÙ§î_ÈF6À„8I;Ô¢¶å¢u ÐØ©k"íp8<ßH‚ŒºžFÉ>Vàj‚: (‡S ‰(“í5sÀñJ‚~W›êï£ø¾&©?£øiçv`ßûÀo/H€vHDÙg@Í:j”œ¬¤hVPF™þ•·Ö[£P2Ýüï?IØ5ÿñÄa/xÁ6JÍ&Ç«&†Ðæí¯½$JÞÂcÛ•cÖ/âb‘ÕÔ°Y”<»tD†/rì/6G…–ê¯#J¼]—ß.l_üÊQÔÉÍÃæ­÷Ëmµi¨­'~8 ºÇi*ˆG†\IÅmzà¶³g±_œõ¼ì‹ØáÜOùÐíüDË\nÛg&ŒÂƒfòU;.d(ü¡Gf6¤ Ž…$#oÄ9ÜÏìBá ÁÔƒ¤zäÎz$´"p4«dîk©/Ï™«Ôó·Gd|ÆÒ¬:à™FÐtR¾¹3ë;UÄü{@–õP]ò⻌ß5a° ;ûñ3å|#ÙH©‹ø¡­¾²ñAf_5¬TYY8áÀá‹tÊ£1ãÓx¤B»Š(à Çу¾½ [çK‰%ï&u‡]³¹2PÐN9\ðì‡ý¸}ùO¿ÒýϤÜœ¢ÌðtVp×Ö9~Ømánò㉠ÿFš«;ûÊ•‘«^Îsn}8”ð}¤¥!MsèôÅ´›h$×ÃùÅmÊ.² ôœ‰€ÚÖ›\ðûÙs…ôÞÅ0TÀ7AábÜøC¶ªÐß7›£½z“>Õ‚o1’ŽSˆRA§ZosÉN—\sz¦· }ïK¡¹.ýgŽ ¾âè…+xò 3 àuO“Êݤ:;C‹ ViùÙ†7Z!z@>d{ˆ¸RTïj˜äÇÁõ†Õ²UóíÐubtÒ!g³›ð˜æýL÷œ-WÃlé§£ÉC;öZãŽjö›PȾNÒ ;þùö±.D¶$Ñ+íí@”!à¹Z(šŠÁ¼«†®ÝCè,p`Ú«ŠJ©¥ìü×ð­íe@÷çÞEzb2%¢ùCë¢h!ëŽÙþG rXhû×Ypdæá‚ú»„ز¹ÿãw¸Ls$Ö{mÚ¿ÀjÁ.[c&0Ô¸EdDøÓ:x½:Úؽw¯÷0)Ý1Ô阓ÊcXä±âß|5 Í~²2HFs"[½é…§ÍùÆ¡mùw®!Ýìó´ˆtœ¼ä>¹ÏZ#÷ó}[V?Fq>ïFŒçõk‡Ç˜š?òœNù·1 e°È$>©©Š»£¾1’'ÄÐ?S:)K“) [Ìe-0”—¸ÈI4C÷{n·ä¥Á÷Öœ–mÞˆoÙYÊéLèóæÁ³µ§’¥—m•'Fg³4fĉ–©FÚ8`è̳e‚z‡ì n¸TeH›Xîµv^°×(Å^Ó¥³Ô»lkz!‹h÷6ßÍ=˜VæÈË>O~ËA¬¾ïè š… þÀ¾ÑmÈLÒ–QX·Ý«f¦là‘{±~°Ê^ÒB4HzMŠE#Ëú[ï÷4œâÚZ!Ðs¢WÏœ4WáÇt•{™u9žãU;ÌË:Û¸³ÎŽg½¸‹µ¢)ý7wl};÷°G½-ÿhGãžT¬›:×OIwm‰ü¾,Ç{²ThzxÀÏãi÷é¬.Ë}ŸàkX(}¼¦54¡› ¯-YàEPsã³@±#ÿ“ÓÉrMxɳ . ‹ç`º3×· ÌcºéUÐ’×-µl°¸ë‰)j¨°ù”$óÊO–ÃÉ䶂⺊oÍ+fnŽpòÚlÞ›ëP “ý‹e±…ôOr_ˆ)|ãVœ"Mï,P³ ?ôÎa#È‚X)`eðÂEjädÏ”'—ÊoÝJD\^«ÎÏæêKÜ|¬FKšww>8Ïý£ÌâC¸ÓfY‹páå?>±âÅJÄ´7÷ÁÝHë¸uù†Õ y-Ù2ŠÕïž©ñkÜ hük5­þ—kËÍŠl_–uÍ»áz®Ÿ<Ï‹¯ŽîŒK# l‚Eèü–l¾ú<¼çLCûɇ=𾉋B6¥P¦B!¯î­Ö†ñX8yÖ4—Ûó—ß³¢Ã‹¢þöÁ=Iº€©½æo:ݹbÇÿnX4¾óðÒ³ÖÎÔ6ôIyæF}"FÎÚüXiž3‹f+Z„LÔ‹LËÀÓÍÿ¤c/MWŸè4æÏˆ% 1y( É"þØÏ8 ­°ÐCªDVä€ 6S´½qD§´Áx c¯±Ü”"õ¡‹àO11y»Ûqj[ïÞn4ýÖÖ s¿6dY×îôñ¯ØŠ̼ëwËÏ·®~6ðJÝ‘}ËJQü¥ ½ lB?„yÆiibÙ¿‚òÜÉ% ‘‡ƒþðÚÑz¸·@ ÞÒš6(TÓ ‹Îº‘$¹¾IùËú²¢Ó·ýúæãj‚ÄÞL.Œ6KÐÅŠ0Áú=<Û¹8¸ÛÞÙ&a×3UAÝßb×ùÛ“¼»³ó•aû௡ãQnaÕàPš¶’MýŠ ‰'A§=»l4„yÑý¡¸½×î^Ýšâ*¼RöòÚÏAâÓ7„ü7À5 –0?^âeÿJqþá 7L§Í5Tø¤™ÎžåL‘¶¹‘¤§Ü¦ÞÕ5èÏ"~ëкU®íU&ƒ°ÌjC†a%è&ïlíñu^wÒ»Wó… G†qeÁ€I?ø‘$ØÎ„yÀÁ½…‰ />D4ظgSouÛr¤¸ÆpoLS¬€#à"Zš] Jg'¦åÃåe“ì’ãÓ{Êqòn9†€I'9pôZdÍÔsM“Õv!x_¦õª©û /déÌ“ÝsKþ<Ý^Ä'Ýñâ^ô°;4 • Ì;´qT}°ê5Ãe  ™UHB°4G¬þ?,šHJwÇxEäŸ3¹É7¥êöë=²â§S¸|vO¡’ŸÓùÏŒ‘úøSE·C"ާùͯ„"y*AÀ ’]J-­¥Å¤cÓE”‡7€ŒÙô¢ ïÊø+°­ +W¢ 2 ªð¥åT÷¶KöЇ°Éµ\Ž^v´l•"„ 4#iaFàC 5øú÷&„ôÙˆšóµ"ú÷dÒÓìdXî:Iù4­42þVYTDÑž€@aÿÑ6g‘IÍü É4Õ'ö\Ž œã~ꋲk€èö€D`Ë“µ««ÂÙeÑW!Þ³@ÕGâgžg“‡ÚKñ»Ý5VÝe0|v»Êd6îl)IJŸu\0ÒòÁáMF rl&fŸª*-×Jˆç¼Çð-ìû“?FLìh †ÿ•áÿáæX«CVå¦òÎá=³…*ÎSj8qšiÏžeö÷ýzÝŽokO\œ¢&l9)ïµÖÎç)NÌ~Mι¥€»õã@qgó@¤Wn!óR/›×zY[ÑãƒÞŒX\5ksY%ëm‹Œ7‰fÚÞ·7.¯ùbFˆº™‘ÓÏ °²7¢'X&ð×Dt‚"ÎÕPáþ˜øá°›àbùÖÄ¥(_æO$ˆaÈMig}OVdHæ‰û¿ƒÿ$7}«MËѰ¯zN@zaVŒ×š†ÿ¢&%A@9í|©€Ô…¶¡ìû o¹nû¡a"pq%d£`dÓó=H¼ßÊ9' ’r‚ Ó†i»Ñ"X‡Dÿ_¶r;Hïp2¯lî'²AÐzƒÅD pá^ÿZÍÁjìƒZúߨ³(ª§Ú ìkw:Ù_è']®öýj²Œ£Ð8®¬´> FÁÒçÈî´Ú“ꗫ׎ð¸ ?¨쀩‡U Êݯ®omµŽ¼a÷˜þ =Ðß‹ßhˆÎåF¤†B€áO^~~¾à‘&ŸÏÂM;Éw?_w(Y½ù{sÀ(8¦€•@Dþ·ê°EÅŠãÍ´Lë<Û>U#Ï'|¾òö–œ`\Ðð’ °#sÍ<> † ¤H9é7#[@$Ï©îGO_ç¼÷q×&åÙëæ¶•´šÇø¹òjÕ€­]Àxû{êXåW/ô”C׌ƒ‡¿ì®ç"z+ÛŸÔ#&I!w¡½ÿ’š×µ:&{ù™9.ëÃîôs:y«‘|ýä—µ©ø|ô‡xïZAÉ6ôô¼xÍ1çBÀ˜Pªz”™…Ó †6àj@ñx £°=@*• 8ý-O.lfh#. "KH7g[SÿyXF äBiÂ…gTèX„c`wÂ[ljþcÄ’:£'œ6††z€•2|µ½=ÚV FÔ 6´JvKÌ–1­íWϯ›ìû°Ò.Ów¢ø2¼‰}Šb4¹&ÚiìI= Cc4]®oéq ~Xû—µŠø÷®X9tR½~ÍW.c{¶Î8œ×¶¥½c,ÒKGí½®­= €ú´ŽZ:¨ØÍõÍxnàPк5¶™IÌÆÄbN¹›'n×ÅaÚÍÿ«Ý IO4Äô£< ç¹ç ùϾßOß”¨•!ý÷›ü4¡Ò JC+ä§–t°6vÿÉyCqÔˆ&qejäôz±Ñeöà²\¸hx²ôªÉ. ­ 1ÔŽpš›ï-ˆ%]¾>YšíhR$ɽ¢•‰vlÍ V˜?@ 9!|A+&o´äBéT!cZ ,ÿ”VÉÎÕ™|çìhT-ay?økzkÕÓÚr½!Á¼¡MI•MŽ¡)Æò_kn®€»DäE ºÍC ákÁ[N‡ ±MÃ-úo¾˜’ùUSxš0/ˆºè±/ía¼øqãiç†AŸ_›;‘L“_Úú·š­–tCÞQŒ†›n#·®åüvãöŸÈΦÜÅEãµå…²\Ó³™£F4ÂCúâ¼4ƒ+ï¬ks ^]Îì lÓ̶äA8z•ZH=¿û´mãÏ( _.›[Eº#:ñÝ'à_nýƒlY ¢WüãÄë٢ƶª˜öÞØ³@\D€ÎWö¬¢Æð’ˆ*‚à­ìT‰¥F†vY’ÊyNXBx+\€LdCpm|8â–¼¹Ïž¿2·Kv,ÄÑ—J%-b-epÛ«ßÏ›[1Wé˜y´¸+âpÿTD)ä/˜Åd|äOÏÑ\Ô¶Âw¤›=À ½ò[†£ò/C¡´’Θ¹ 4hsßjþ7r£ôq!ÉaxÛÕšŽå,R™xÏÜ-ªõd—B&Qcš³ç~b|˜ø P&¥ ÁZÞM»ŠÉYóÕ\$µBûuNê,€Úœ1Ÿ¬Dw•ÁŸÝì‘ÙF1²ÑŸ¯‹-h˘Kȳ¡•eGï³RÏ®l¼l覞À}דjÏÎ9 ø7ã|ûÌ—Û–ý£¢U¿ûÍ­ŽÒ‹“VÑû4*ý­xš‰x³ ùÁí¢‹¤ CñŠÍëxöaÊöR­Y}83§wÍõ5ÑOÉî.$ç㔿_D4ïêZ¨>!·Œ–2àÄ"Äê7ËÏ©fèÅÜÀ)Ô£—ËÇ ÀgŸé¼õVøG‰¹ÔÀùîü¨Þtúéëˆÿü§tj¼¼óØ\JGz)ÛªÃM+Þ#köùxâÖ….%‹D÷Ï’B¸<æµÖ‰ wCƒ¶)xÑ3‚èyá#èTÏ¡%Ÿ½gѬª¥úäRÿÇ õ¹ænÃÈÔmÇÄp «pmã„|l\\ ¶'^ËC|Ùd•êdÖ1M>´kšó*ª2̺ð·ÐZÇË%âÛ5ƒü=Ý9Ó™©ý×K*„ ¦Ç—Ø\’þ;ÞKâžœ°M0®šÞ«YcÌ»ÆC»/z®¯,Ÿ²^¿M”~/ž¯§ŠýëÍÖg­=Û©‹ZË‹‡<+EÌdTnïA ùéë?:ç"x¾ó ù.ôsþKÕy=1‹WøI{ÿ&±1£“þcé‹ùóˆšÃàÎOc[13 =BèÞÄÞèÛúaý»%ÉZ>©ìòç5ô?K¢L¹Ø^|6œíÓ·Ö<̬I@a¦ÿS1|¾¯“™çóúŠ/KõjåX'ê#Å\aæXº) |­¸A濲‹™Ñþ½Ì‰ÃÑ{Ù‡É`djÀJ.dqçЪ±Ä]J­ ÙÐ43õJ€ÿT¡$¢ûµE).¿ºBâR¤gLÐr•ƒ©ú'%±ªŽK´uÆgP;›P&í…8XžßP©ä½uÜÀ‡ÐJ•¹‹%è'ôccï-ï®Ã ¹ŸuâŽ@7Z%«Û;squêE:e@¤á­ÂxiŒÿú|°¿Az¿'­ÿâìÓjr¢Øèî½é2G‹3üÌ[‰ˆÑÕOv~ ÝÒ‚×[¾]=B ^¾W]€Ø;ð£äˆÚcæ/Gg*®á }Ú0'É©Ú÷ï§M)u¿µ¬¾Ö†?ßïÞÿœÎï™0/zýXõbÁùaÇøç/þ®zýPoAœ2uº¼¹”Ý×g'½pt)yâ¢yº.}àÕÎó1éŸí96wû3Ûáô«JEMBðÄüÄ(Ó`ïËŸm j·0`K»6-𲇡rÊ×Üáuf±ÿöÖBÀuIÛ1°O] }4Q"&ÉA†²{Ú!©×>«ç?/Ö)%“^Á¯ÿ‚súšðÊíAÃZ €÷¡­ô)–y x‹O‹a‡ºç[mÒrV¿ç;‘Ôƒu Ã\K7ê¼ÂjNf (`«QÛT>‡Â‚He7ë¼êÙDq ¥- YU¯>¨Ö~û¨ž­ˆ5%ä™]v‡jF÷gŠä™2,Gn¦ Ë㯠€('ƒ1DTBòÅÕÎ|Œ©ÂÛšPzï‚Û5Ñü€n\_ µ­ó“R¦=6ŠÔ~K¸;á?Å[+!W÷o\ ¼Ôc'oZé:òÊ@û^Š´< í z¹­ù,¯nÅrVÍ)ìé°‡óœ¸×·Ó“·àò¿wÇ32N\íá£5f.w.þüÙO²¥a÷cPI“’_ô÷!²÷¼–~j> Ú¶˜qä½V§ÙM¿=—¼ÞóÃKW¿U0£³™I¯'½ÕЉ7Wì&=(‚N\ªÇÇï ½×”´Z;Í›•Ö< ÿì2ÿþzÐx½VSJfž|((Ãb(íSééSpŽ¡±®¥ðIÁÁïUñÒ`®E6¶wn[9¢}r„T`šF»÷g O‰ñAâ¡¡þJsö‹ù"1Gˆ]V¥ý˜ñOÉ&4‘f€àïèÑž¿þ ÀiæÙÞ#óí,kñ¥µ{Ÿнäh2…ä©ëïÝ¥²íq­Hõãº\Ô€¿‰Z¶¹c‹Ønoþj,¤É1XG1M²ló2oÔª0Pž]S'ÚOòS¶£›wCš&ìI÷N`ö,ว5‘Zë<¤ÆïlýßQÆ£ŽÔhæa1CcV§ÑuÖ…&  õC× ïÒçv2s¢*•a5ŠÿB`èfÜpË[Û¤¯ÛCˆ¢[ ºÈ«ù]OðÖ–÷Í±éµ >k¹(lùcÓàAO¡j`É›%û™ ùÌM0›ñ¡Q…‘„¸¿T€È´¢¥—ë”ÑZìYŒPØï™-÷Ÿb¾à¯â6ôeéüàÓzÅTÚOêM²+bƒ"öú°ø¼´9~ã¿`»"Ùµè£ÏDp×\—owc®Í¬^¦£0å•ÙZ¤¤ 8Üø³{º´ï_¸Ö}OC•Båéÿ%AŒƒ13¾mSúq4hÿôªýPX¨û0O¤,úlÚ€ Ò`ƒÓ9Yº÷×jˆˆÄIXBƒuŒÒؘ×PLرÃGÇïÊo~t9#ë'‡`‰øßJËè•£Â'aÛ¾m婪®úw„ÉÓxê>%3= ‰@ÒÆ×<Øqï4â¡tLK{jS¦tÑWiÍ×£›É¡ÉÀ¿:'ÁÐ-&5Z]Ì1<¼þ ¯øPïÙ³†1å”è¤$Õ?4sœ›éÜbj´ï Ô\“Œ·ú.®érÁ»YÇ­`éuÇN‚ØCÈ[ÀO-¿ì€÷ö¢Ow ºò>í£¸àøÕOB–=ìT•ä¥3ÎÒÆõ=4ÓÔ~§³™óŽ¯Õ¿ì±âãQA›Ë;_é7¼º$èûˆÝQ8@Á­¿ëXCEãî5!ª1t½h˧P7døÌû¢äÕßùÆtÖú E¯ÐêŸZaûFˆlEþrI?MGö™Æ—ËLVã™ff°ÿ°ÉƒtUv6ukù¸9‹Àcy§èœ@’ï!±«œ$(zR§JƒN£¥y‚ü#+‚ ¼<½ÓÕúRTI¯6ášU£| «ç8C‹‘ËL¼ Ç·—VŠe|ÙîAhQ9 sâ¥V Çý ]ç.‰PËuåæ´$T°Ûó–©ÅdWÃò­ÑY²½R;ë¤øˆgvt45¹h´®Ë;þ 5êò},Ý7˜yï‚äX!¤Ûd Ä!h†­Èªî¥¬CËEÓyÞ!½òÁœå sgÁ…1à-;{Ÿ`Gà¿=2µ·ï4/Dê þJ2vAö)vŸØK|^.b@t*í'5^Jª TmßBœ{ƒíSZn÷€ âÔ°%ßä6[”%;&J” ÷J?»2²Qge‰¨ÝЭ%SV_û`k|íxÇYôƒÐÃ~Í—þ©Xèüåæú>Ý @.qyô4nj˻f3UœèùüóõÚ™Çì& }Ël®Ux‚ÕS¹F´cK`ˆœfÈD>ÑÀñŽç2¦7¯ØÀÎ:¨k꿬q7á%V(Úý€N¤¼Sm“í²™öo ‚´Ã¦Ñ¾Òéôo ePÛx$뢕KÈ8¯ÀwŠÈFص¨eÖ1Ñ‘¯m5õQ»¤¨°5‘Œ±v‹—š*“ÕŒ¤þ½2¯ßñF?¢â¨Ç`7‡ê´~Ì«+ée–öëýHi!­Þîi„­æÊê¬1èžAŸ{UÛœò×:ÇÄaEÈ™z˜TKس>³ç¢ïaÞêdöøBRå´ÛˆË,&¸ì2»U*!Ÿ/Ìus€8‰ŠXe5t¢l@¿å\äQðÄî¡,€³rH$Ь‹Ï>Äy½J6~ ô¬P§Èú¿J.¿D·~yüZ–7ñû]ÙNì¸1J-­oë½bkÿLîXœ€*Áö„u«„ÍMžÒ!º!ðlú àgÇ¥(Õäˆa¾)Vá]·BøYŸ‚¯€ R¡Üà‹}ÚºU|»ÑAbÚþ¶á´lœO…mE_$½Vnðòú-wúÙÃÊ%6}šylñmòyy–±|'aužñÖÔé …¨æ>u΢Ðî÷“üê?m0ã†_7ômê¶R x- *ߦ'DÊœÆI¢¾Iîéü’/ìN£!¯úêUw ÂLˆbáô(HHL,žø¾Èáh•kƒÑ²KaÁ°êœâ»žaɉӯÈÖï,Yê=ÑŽ©/±Hò˜ÈoÄ/q4ÀPÅ‚úl‡ÿ¶oÜ«`éµÁÞKú¿U6V·4k\%ªôèóƒÒ JÖøîïî¡ä T¼ãCdÑD]êõTÑ»d ÑL÷¹ËP_ NÆ«ÞZu¦Ôâ‚ü"óúÃ*Ç—+úõÑIÜ-'²ÅÏøü½ ¤í¨ñ«ÚvèNÎ<“©ñPʶ¶=MÝΉ‡ê&“:wZVúËSðJþŸù£TÐ:Ÿ"\¥L,X!|iÓ×$[‰©úA ŠPáñ=¤HÉ–~ûh q–ƒª`ƒC0RC’JªÜ†ÍSJº”:þ¥ª'-ペël<삟«zûŽ¿}ÆúÞ¬ö@¶ÜJÞzú¼V}?u?Kµ–+„þÚÑ”øÊOðÐê¡òØØ…Õ˜éŠèùqœ}}^å|óµ¼$9€™Zq8Û,pYº‡*!ú=å`z¾4õ;Yމ#·#‘.¢î—~©,ÿ¹SÅ×+üdÒíPöé'ÂÉÞ)·ÆäiåTîH ŒÇ5ÀOd9CÓFéÌ"ô¬-üGësËÊ Ò°´B™˜)Çq0वLµs6V²¨†Ê€F¬iúA ÇÈï ¥«µŒÒŒ2ÝR+¬ä`'ŽÎ梑>Àp@kÁTÀ?èÐÛdÈš:¥fQjð]¶rËx_³ÖSÌ8 àj{äܺ Û¦¤?á¼·¥“ÇžøêÅ¨š§¿Æ·^û8-Ïîñ&¬â”šÅL¨šB² hMÚ¨ÛèÃBÝ¢—¢×¢—ù/œgÍ”ìtZlÿÿË¿-ºgðŠP¦PÂeIåB•í›XY ¡‚\ILL!'lÐ7ƒ[¤·ƒëu½“‡µ‰Ó¤ êÃÝëýLQþ‡ D^ލI"õò0ȈÌ9 ›Z& dà›V+³á6íïwX?Çè§õ¤y°´Ñ÷ô"¾‹|áüš¹T³í¶Ñ”¯Ì]†VœÞ©¥=Û@^·r[gÆ™ˆ(L10cîÕ*AOALJ…çüyP9—çóê˜ãb;Ù$ Ž˜†¼U¥»ÕÖâ$‚ÃP…¼jwÄÕõúy<­‰¡Sí4$³ÝDpU‰O0@‡;’Ÿ±£›í9OF­Ó¡‰bo¾ñÊ) CËAƒdçqÍè!›Ö-:RK6Ûøz |ùNI2³ûüÂëZ€üA1•x V^uèÔoçX˜¶Íß„}egÇÃÍ1ßfA‹YTÑÞ/¼¸ß)kx×t€îôåæ#ÛÙLÞ®6Pƒàí6Mm P }ÊLºM[Ø#»F•.ä%'‚lCXÙ8áf¡Œ*ã–3Ê¿úSÉÀ¦cvjåâ°'pùÆÂ8’l‰¢l\Æžuv%7ûŸ7uÇkËu˜¿÷Ž©¿÷@ì%>•”ŸÓ+ú)nGKJÚñ¹…Ýsÿ#ÚÞÙ­Ù!¹‹›Ç¦šy.M²ú¾´…“n÷˜ºU…µ¡Lñ/’[v”˜Bi ·Úö{mw·qÃæÆ_‚Câ?}ùã]¶‡ àg³‘œ²¼²#Íc±§µÜU% ™ÙÝK}Òµ­v·.Ró·?»mO¥+o;‰j¿Ðvh&!¬EÝ×£^º•‚K6óÅŠéyjµÁ[£s=Zð%„Xve‡qå§fánåOjELšB<š“³üGG¸e¢K.NkA–§ƒuáFÅøžÛÇÿsw¸ÉGƒïÍK03ÚéRðý ßin àWÖõ2³:Œˆýt¤òšÎùž7q"‘HŽ=ëÜŠçˆÕäÚÑr]ðdÿ½qiþt„-DÁ ÖAôÆx?èv .p:ðVJÖAT©:C3Ý+IÌ£Ã'¥cÂþ«ý¨]7h Q+bR}z½÷œÕ|O@°âLáàeŠ¿&sßÝïWF<¦möãÿîSïäPë{G8b¶ Î½^ÝN»òÊÕ¿E7N7ßfoüÜçâÐJAÓö˜`ˆ>sy¡ÿ+L=ó'YEªEË|@ùÍbvzMß»'agqPŸžBfœ8Ts¢])Û›]¯ç€ëöK'zIXS”jç\_Ç'Ý1Ê#"f;ž#ø±.=ª/TÛYO,ý×øp¤ã¸yØ4 N8Wº9­qŸÅgÝŽ?š½ šgd$¶`j³^áêšØK[ö ðn`Ô-lLt(÷n;Ïô¶¿-¹ê%àEaÅOBN”²Öü6>Õ×.ÝÙ„ÃOVñœ,1ãÜK6މK5* bm[×¼4é>^ߘÊ0Övv”´µT{Ÿó/§·±ûœ% +—Ýí`øQj»ð˜ŠžGçÅ¿ò%À6 Î7vÚùc½¢tÓ—†\ ™ sĶݛzhsÊÐjèþn½Ì¸^ž–¿ªrÞNèèXÐFgUè<.®¡Ú¬^é¨Þy#gB —£ÿML•`‹ü“bA~æ½È#×€Ÿã¿¯¬c+ü1ÀÌ«ÊÏÒArÄM ÜwrI5©›AÙ_plˆ•*qÈ¥ Þ[Uü"&ÒSUz(p, ¸•œ}ïEhömÿÿÁ.±Lø3H—¼¼4е™E÷ÕñSG&„ƒLþ~P+ȾF8½¾ô¹ã÷`~¶Þk^ ¶‹0Õ5Ü}Lë.wŸ˜[~–ZvíÕÓM(1* 7bË´ ¢ü¡gNb–•q©Mþ·ÌV«Þý^o—Liœ¥½\£lfì6çåc=ò§RÖ%·ÛÌó: SЛBƒÜ«ÀÅ.×n¬S{cÏ“×,mÀu,r•g•Br¥gÎè»2h`ž1Tô%Îr÷Ñ3fœŒ'dÞ˦ûñíˆWE×Û¡ûv`É´–çãùE8…l~Ю@½¬“¦xW<ïPÍ ž<£*fñùIâ\ŽØNKMª„1›²ºP£OyºêC¼°áâ ÒOê-êbö&¼¾õ‰@èWÀÆíî½®s)-K“v“|þî÷´±9W<k9°Z1wõö¦[fr®ƒèi››]oÏíÖ®x!jèþÛw` iõÇÇÏ é×òîûö·ŸdCÊ)ËYœ¿… <œf–3ô·²÷یѯ¬ZÇmâG€µº'Ô“Úi·Í¹þÕ資›©Ž©…Iº’ ¦±Ð[b^ü©G‰ÁPÒO¬øUÕЖÀ Gnöæ¥=¸ýxÀûEI} Ĭ«&R}”îïÆ´´|jÛ8]Ù~]áy#Y6q*VŒsqúç=Áó×=rOë>­tëi@g%+m]rÇ]Ñ B†«œvßuq¨žKZ8(SÆÈzËÉp1µO.âi‡è­ð21ü1À>Ž ÛDèaÌÐÁR#ÙªZÍu ‡Ènç-Ñ(©¹–<Óê.ÖO:É6u(¶í»¾¶vk¤$Ñ?`µ»ˆÒ-ÙM¸zmD©”æ y·öø®åE åľ„Ž{;HýõÊó^#ð9Þ à¥HêoØUsÿAû™5xÒýà ¢€Qêˆ tÆ>x´¾%V'S% •I-µ¤Èj–Ö¡¿b-r8þ¸ßÏàHɵÿ¹Ù\d±¥ê8Ñ~‘yð.´¶Núlï"Ü9ùpb‘7òm¦á?Á<+wX0‘¹mq÷<£{µWdl .ܘñzÑÜFðê¯.?€]¾…Í'Ø1„fÖcÂcÞ‡R±rÈÚÜÞ%¯Éï<ìNÿG45ÀµŽÅƒGTµ“ÁÏ”ZBH•ÊÝ A9”®] |Þ5Œ¥}è*OZ‡šõìˉXÙÌýD”°o@nR‰Ì ˆ˜3P·#wR²E͹¶­Sÿè{/X-©Sµáwú^ø°ôû½tFÖš‡óÍT( N6j¥þÓpîÃþˆ…c;àZðEÜ*b|Õ3H†‡†·ÀèSzZùOõ]äž§PÁŽÅËbAw!×[KV9ª jU!¹·c`#.HÕXêV ‚A³a¨´ŽL§MoL±‚Äqjßy1 ßûy®-õL[ÞÞHe“QÓÜÚ1pÙ;¶!0*î5€Ñ;D.î\¥åìšú7œïÊ~\®Ýœ$L{S•*øÖÂjWˆ²Ü‚aéä„“á¥9¸€@VN¼§ŸM zG;ÿ4WÛæ­®¹vÓÂ@¢þpX'ó¡¿9<ÑTún†eŒŒõ,ÜðQ!è‘,²9§!­‹¯ø ¹g ÓðÀÔ=r)‚GXÙe~EÙyÕÙÃõ¨û é[¨åpâ´T{^)¦¢b§•¿Þ¥!ypÑŒÿ7 ^/"XÓ3×52MÇ¥²nÀê÷RÎJÓiE‹LΑ{ñ»úpBÜ|em[ ”1yÊ+«ì%QçI‹ €‹Xà’°Qïþ‰ªöN]"X1ç/S‚`HÓ¥û;v²²•sÅ‘žXžAÚNtõñ¢š•ˆÓ;3ñâplB®™¦ž¬K+/ÑŠÛ‹ÿºñO¨,ÉåÖ‘¯¼»6ž£{ΰñû«mKHà{ß“}¾µBÃ~{·ºû/ëÞìž fkÏí T ?«Ìå|K¦…ŒlâÅ †áï$¥´ŽP>y‡7·ÕõBÏÖÔÑ‚¯®ÿ¶Å·†[8g„j‘/(€´Vg@Çdã·P„F0£ªu’™,‡´ÒPsF+‘J•©½üέgÿ2›¸Î½ÛƒD Šelß‘ÛßS-9>õÑ Ñ5‚:ŒRT*R€×_ûK£>~A; Ç m $Dú(žRË:á`è\Y5úŸZh',0W=¢‘U4Zz í;G}cé:¸0¢ÔèÆV³C¯œº±OÓáW&[û€P‰›¦CÊôYõUwÈ<ÖXÖªÕoYÁ-d"\€ç†§ ¨ß'«\S ró·%[§àóc;†–³äÞŽ£gÔD ÍÕ{.!‡`M3{kë >ðÅ€È)d·È«ž:âÊÝg]²á²Ÿáø%eŽE¨._ÂàÒž™à¾íÅÍŒ³v¼Ü|A-|cò‡‘¢}ïrŒÕä€Yë~ Ìè“x;ëwŽµÐ¡ÏìHê`(Ã\sÑ"úÕípëëOùt€YNaØ?xþó0Äî¿ÀtP¨¢áå<{I&%oõŽcÏŠ¹ûO:ó¿õk?sìÝ’Ò.êyPðlÆ^Ô7§¶â’ iq‡W0 Y¥lì²~¹v샻Ffc½´6*¯Ý›ïbp¤¿z% 7Ð"$…Óˆ'ÏnâÑ–PE…º‰?ê(á­ç¹ÊÕQ!ºÿ×Ö‡5ÒDFgþI˜;Ž'sZ  ~ù›búN²úôXò¥]gæ.ÞÐÕÈÂó™W”'¶‘›dsgfƒÔ“ÅÝÂéÓnÎ!Âå… ™ë¹ÿié%ë7éûìÄqzžUݹ¸…Ò¹›ã¡[Ëëѳéw¿“}éµëÜ©ÿamÿN@â;µz‰7*yÀ:ô4ªÞsz†ˆ€zÆo›«7¤Ð €›ç»Qgùd=„5ÔŠ÷3‚5åªÁBëê@ô$'6¨WÖ}LÊDª›çô~pªç\GÑ„%WúÏwÞ½ ÞJ7ï{ߣÿ½öÒjszL(‹rûÏ™ë̳Ï·¸ÊD\;³JH£…,ÑícÒ¤Na?&"G?*Dr™«42¶©”± ì ed:”*e€¤¯ uhT¿Ì̘NBr€'ñêöš u‰aJÓc†SD—L‹º4ò÷6ºBÌÈν2?åˆì W]Ý5ÀÁ¹´Û % ±ð¡ça˜•™ÿžðÎm[éï'Þ\3(îßéz#WŒRï9n*°:`\¿™ê–fG¦zf¨tϦ_€Ö&ÔÔ(@8™*àÎq¿rŠ©+ý¤¿Ÿo3’_ÉBFljDYÉÀÁ<•—o/ïç‡uðßû’q1X(ÙÌò‰ª&Î4pÀ„Ð¥çJl§—«íæ®ÍTn'&?ÝšïˆnOSb4Àák÷ñÆbûVîiõ<̆5ÂkÖ=¨Åým‘²Cª‹'à–-¨EZ$Ç^¾ZÖqm“¤ÐÎ’°}f jÌõêg²Ïÿ€ÎP“ø­ëx-•Nãöýf’°C*V¼€óP¦LB©–‰Å± xõéb´ñýLÿZ+•7¶%Ï+‡AkP‘3¢4lpþ|s¼jÆÍ½Ì÷.OñÍÚyxžõ¼w«1xM»PášBðÎsR{<â3.éê¶e€3bV0ÑìÐÝÑ^¼ìBË^.É@ht}á[¦ÜŠí…,ñßUPÒÈøg\6n¥¢"½½Ù3 ÿGWN¼îX[k÷Öí&u!.Øb¬k¼8îÙ­«²S® n“9¿9èCÒn"LÚøèÝáo†odÅÛÜò×WòÍçv‘ãQW3§RŽ>Xr˜T¦ éµ8ÚMäTÄX²lÙMä)$â¹Ñ_<ÙCPäÄbR%ŽâpšóÔíB»3jÓ€äBm%XÆvÐüé-‚¥)µþTsÕñ”äÖ¦€L•?Sæ#)A„· €xD¦i L]À øâƤ5¤àe×0Æ×Åþ§ÈÉî¤ÿÐYª ½)}c¬  æç¬c¶|ãQhh/¹ÁšÝÆÖ‘žÅ,ß°vén#k2X(†2côKö|.ŠÛödšÞ“,ÍG©ëû¦½&`¦HDûîsÖ†1EйÚ+Ý•ô¥–Ô¼w¿èc^Êã±ë‡Ãš_ñ÷üÄÊõéŸßÑõ»E€jaûù’nï%µñ(ÐŽí¿ô½ô¾ÙsÉÖQ¶žÛpì¦3ç„7¥·%¢ß•¯‘ez'“kþ´P¾Ø]™Î ÍaZPsM4+z”|"*ÒÎô F”ÍõKïÌïäéÙFìœíRÄ\/ÓÆÒÉÉA$Ço|”~M@#Ãh×ß‹ 8úUm»ºÂd¼d_Ÿ®þ1]ÅÑ'±Òý5”½ÊËÖæ¾‘üëtN+·Cè{3@Í A‚ ¸Ÿ™ÏX›SÄü»_·èȺ̟W ¾‚äKÚ+­§üDQÇš©íI. ØÈQ³˜DÓì•ú]¾/Ïêb­IçU š?³E}9n“®ê·À(?¿ G€ÁKó4¨KÖ Òv݇Á Bï÷®ÉJï±B™1®)RR*81TŠ^$ 4„4ÿª¨ñàäJÛÔRåo…×߬©">J¹€ÙÑÜÏ'bð6Z“7;-1IÆ3¾èqÕ@áT'lÞædÎ>2É Ns —{G@gU‰ô%Pð‘:ZF Õž©­@:Õx0ïüyP¿)};¢:.@x ¸$«Y¶8o‘-)™,ý¯d«1CeOªÁŠ¡ @HÆÙ§Ïܰ°‚œudnŸøuá³ñ>¯{é gá‡ÜÈÉJYm¸Þ`N3O“”¢~›‚ÆÍ©LpÍëMâœYz‰3¬Û>"ÇWRÏ¡{‹>ˆö2>÷VPäîJ×^9óma=Øa¹}¢^‚˜¢+˜ÞmFæþd‘7¸›D܃ìWNS5ÑtZ-¸OňØu F ã¡GŠ)CÍ~ÁrÆ>¯eÉø“nsBÂ9Z^GAå*®Ü‘»v“ú µ—öö¹O¬~}%Ë”avò=SÊ Šu>á­b»ˆÉB¦j­í™î‚Â×D­@&B5jôxòœ».P Á~)Òj4â”Tr¥T~n`|_ÇÓY¡ôàúÊæO+Ýw¥Ú`îûÌîh¶AÛ·é´âPŸ8íj3ëhBŸŠö¦ç’ÒwÅ&)‡¹­@9‘àSÜ÷Z-› ›´ö¦\5übäêlö`™X‹áÊNSº:4½›³xnO^žAn< Ù çÒÑ÷“v½{ê﮿ûoU…}•èYº²ñU£“/Ãf£ü2]‡lÔü” v:ÇüæîR÷÷ÙÂlÿ¾]½Ý¦–IÞ¢žP€¼WWÚüc®)hiÊ ^È´Ö4ßÀ¥=ÁÌ5BG/’;fY9{"]ÒGhÿ$+‰ ¸?WM,5áÀu_¼FûrH6aśّC•$²I•Þº0°„O„njߣ̇® *aB‘In#/f§Û´|~öÁ3(þãô½É‘I| ¨’adµ½ìkÝ„ÓqJrN’&Ïy™ß´ÈÛ¡t¢E÷›µÝ3O„0¾wtï€fÝ_²?<åGŠÙ1/ÿÃy—U¢»Ù<¨Ø‘v«A¹+Þ%àsk˜=„µè£é³^xLÍ>£S¶ÏYpÚGÄ>Lxײ[vJÐ0.Ž¥gúŸiê5uÅw¦K´Ý|~¥!HkM½†ãŸœ» þZ‰£³7·Dfåh6`Ò-5±Ò©@`8´ixà˜nçÊÏ q;jÕØü©ÄĪº§­©»9£ðç¾9S%˜µàV){Õ.¡¦¬Þ‰‹:rÀZ>òGŒ6+Í–sÀ÷èÁ|¾Ì|¾Jiëàð[8B~—x0³°sŸ^ónñqóð¾ƒÇÃê:®ST$þîr#ppBòÛßBüpâázi«¹¤Ðf_ýä,ùcuyðÙø.C̽dº‹j¶fÅn×cøvîºV^äÃÿ)4dù,Ñ43HB :ü ¼z•cú¼ïm8=-Ò fÇ€4ˆ³¿¤¶þãáѰìÂç{õæÑÃ,Cé©„_°Ä©½Ñ«B0hÆ8«soHA¿CÆ ƒ‘ ÒŒ:"5  Ì€*d¡HCšUno'‹GiSà2æÆf§8"¼YãÑ¥)Ðk,U<¥ˆÌ®’Iú{ÚÇýEVš ÃDFänXÜ£ì² @òl™f§%–ª¥’[8ÒvÔ¤´›ÒQ‘âë[«:”»Ü«mmÉÚçkøÈI'h_áרl¨  `±èoù^=R ¼j~«C^/†¾%ï<¹ß'^m€НzðàÎI'NoKiØÖç3Ò[GA§t€¤ª§7ÚìŒÞ¯eŒ¥O±ñ½iÌè´°L|‡zzÀ¨#€Ô<èŸ0r²‡ UEbÕš§!çúgG>TÏzô@¼]òÞT3m?'lj‘R¢KÎúK/¼WZšbò«ÏDR?CBkHQì)ÿóÏèÎó@kŒÍ6‹t‰ †¤k¼É¯ X³¨ÛÜM!e¹©£Bg9¼AdPKÔAþvá„…2*–m$q‘l<*†%¸¨Øãßǽ–‹=v­Û §„qbêêNGE<Χ:ïô¥Dðw÷(AXéFàʨÔí2Á{Äê,)¡š³d%À˜1=Xàäbõ†t*`„I}}6#ó‹ýkT^ÔuÚ(q7EΉ0NÔÜ›dY»ûÜæ8 RZ`FHñŠŸÍa ¬câLÊøK1]Q^ÇH¿ ˜ñém³AX2œg±¶³K2£Â;BU ¤š¥‹¬³Ù wñkyžÝã©ø@]ö:1ǧGú3›È‰*˜ðÏsb³¢º•ÝJã¨%šÖô®Þ9ŸÙŸÚ¶ÆmZÿz0J—c»Ý6…T‡øÖ ? Õ¸Š;Ä7,¬ÉƒSÁjd{Uœe¬ÒTmCN‹çÖ‚ny<›±Y3cÞáâÚ¶¼À÷Œ©ú€!2‘QM;HáÞª¾6e=¡¼ù¹¥€Å¢šWHØŽšº:C%%ÏFTÉP&¥e;)1B­åb þ!'⿊I˹ñd)ýHª&öÇFÈ’KŒÆ±.f,P^ðNÜsÕ)¶,*,™µÙ­>[¡­>´¿¶„ð;D™ àÀë¶~œ9o± ó¶×:Î_æ|;ß®¹‡®¿FõÛH°p¨v …ÿ›c^ÖÃÍ5)„¬H{â8á(<à‚Hílš’Ø×éžÉö¼)ÉÁÀ¶¿úq¸uÂ+.ïµ H£Âì7¸Ñ­zhb“4Äñ—of«òÛµüòsKJ¹ÑÝñزøÁÆ€‚OºÄ:6[{žTkÜNhì£øXë{0T€ZÑMô÷dÿôºÀŒ 5Ìvalw^EÊ€ÜÍ~Zt)ºy Ñ ãé~Ô å;è8u ’”4Šd'¡6h·eq’Ù£þCߥZu±>n ‹2K`o›¬ÞutÔF[Â<®4wa*Ζ˜G?ÑÄ>|p†À%Ô MK¸³}¥ûÂu¤ÓrG×ã+ó¸µ*ùÖ&œçiÉ“g¾Óᢼï…á ðf$Ó¢/^.tYŽ3jš4h€Ã°ëQ%÷ЃàÜà`c½m Áß4ð8YŸ/ØÜjâú錜ۀ·I¥]Çè+ï8 –¿œ±ëtÏÐìçOî×µü9j•ûØ&]FÂɰøÖ°tO² ¢t³ÞþÀ–ÈSõÍmH÷ß7hÓr¯.øÀ‚xˆG<°ÃÄ͸½­ÿà,ý‡°I6K‹ÇxK†¯„‰”ºêТЗ|bpV4VåOÐîuI Ïsƒ¸ÒMصFÒ4´Dó0墇å )o®ÑnľqQ¤¥”$Øp4C­æ^ì%o©1îÓ-ìÎ÷ÛÉ]† Ÿ$ÔpÄËÃlš&VàŒÍª#±Szª–+Ú»¥A‚É#ª% —ë¬QÇ ÔÆ_J1™«TE–@Θ“ƒ€‰’«H„¸ã¦83W_)µUíœ ÆÔ„ùÕ\%˜Š ãG˜x]#î›HhÎ葳`ÁòIñiÿØpÖÊ”¤pWf€K,³_Md–ò·͆jmy;%y3)"›ßÐc¬à³ÃPÿ´˜Û, ,š0DÛÈñ T>Ò,—í¨UL_ó¿]`Ð ]À“E–ÿ¹j¹V-.Ó¸u5x?Ø(Wù¸ì<'F77¶?ömڄĈ£ÉöáXË-»²ëã“Ý?z¡ >¶¢PnÿÓx߸©ºÛs…Ðò7¦v •Yâ+ë9ñˆ]æŽÐþ¯ÎÆzö`ÿ1î÷Š›Ææâ£`10‰sé„GÞ&÷Q[ ´ÐÁSf€SBþ$Å‚äQ—ÔwØu—Êæqã _ÌÉ6ßÚs"´ôû‘FA6†*IüS ƒ¦“•$×4À¦® EüXí„&bEbJ2¦þ©@b²‡DJŸê=:¦³»w}a¤àƒØ.4k-‹ËÄå/1âÙ5÷´µ4þ' cG{t;H¯)™Êb@YD*Ió»~»rÞtÎ¥mË#7¾Ÿ¨‡ÜµnLHDFÚ'ƒüg¸¯4©Ø‰ í¯¤c‰ ½øp“%ÚX¶º§ªtPÛ{ÆxvkÛ°@\»ø;œtúˆï™ØwwÄïA:WKîဧ5ëî[kìz÷£ûUP-ÙžK¼_5úrüúk½”ÛpŽô´è°kuâ·¤Ûìvˆ‡¦xk~ ~xCÇ»8fNz¸ÿéöÊÖ¡aÄ"`úýQ¼ì¿ftþ¦Šs ×Z_” ³«áѬìfk€Ýz!u#°ëc߈öa:élCTÒ{Â~áç[·Íu"bœB1-YwµrÓ Ð²'ŽzlT+Rµ!g”€¸t‡öa¸ã;…=­èugíö«§#ÒÖVUb,Èþ¬Jþ|àý;Ö‡5ÌýÎâ¤VîŽÞ//Z*•;Jè” ó¿pñG`<·P«f¼xUàZͪ™5LÕmv`Æ®…õ…T0[:^V’*Œ4åˆ;›M’²‚ùoh²^6]˜ ½ <3“gah|$gŠ }I R$“'Ï›s”öÖH›"[q·›ÇµóL`¦þk·^"^Ï cÐŒW„û¬–ëU=޳Ñô57ìÆ/[6Gý*ü'FFëEß?/Œq¿ÏÿR°îŠ•ÀÞaæÕ®¨‘_ßð3†Î|Jì—~l¡Hèä#j|©N/ë’«È»ùWD\ÂQÀú û‚öl[VßÙðÓ¶ËÛ£ø¹‹U³%®Sªâ›"+F«™SÙ'×Eï¦Í½fâqðª›sk¬/[àíùDèTw—†çÀ3«%™ù×£ÿÌ11ïªå‡Óúç Ä¢;„¾¿­õ„¿Nõâ’> < ´7åÂÔ˜ˆ.ôú„!í#«è•Qòð'xûQÀú'åÔJ-é»Êè –+ÿoÀ[’¾º=œ‡Œ‡?"Crܴê~ù÷ /³Åv×µ­›ZÎ{¦#-–;Îq7¥ýˆ‹´O-<]… À˜4h¸M–Lòç<2˜:,xiuÖìRZ]êV$³FàE¯0í7';û­§®5EÉÙ!ˆpnsÚÌÙÞ¾ŽÓd~Ï(Œ«ÑYó[UT±Áóç«ýö³çörĬÑsÑþ"h…ylš‰cÏéñ:)Ó%ÏoäD`sF|6ð’Á¼tdwÚç-ë«kø7Ü:’©‹j7È‚oû(û3W[ûµpñÇîrZlXµýJÄñ.¨džU˾ëµð½­g÷†apЈ]>Nø'sÓÏWÁ_I؆g«ÜkSÀ÷Ç™usšâÙ óš£Å €Aäççß¡·W|û7û͈/ciz±ivÎý¤Ô©®ý︚?¡Û&Eæ¸MÔ-ïàIiþ­@¾ëwtùã˜èªÇ¾Õ©öJ\³ÓøŸ <ÝìRóÜøO­_£æ£¼ó±ƒiçº7á‹ì`v6*KMˆL×¶*8 ÿöMi»fÅ]²ÍÎãµ ÈØñv0Éþ»u g‡wZµîvš¨…fjML4>8ŒÅ¤fÖ¬¹ñŠMÉ~-zÉÕoñ\ÿÛïÝŽr˜5ô\™Í…(L‘làŽ vAñ½]ÖÉó»v{&L.I™R¼e¢„Ò&ÉXV¹åŒ:NèzËår”‚ˆüý÷L·”«Faø¤(m¦U]8:ÊHgÛ•[ò'®›Ü~seE`GØ ˜s=RÖ‘|^yq|)Ù¬—,‡Vþü¿Ë–BrñÝÛŠE2׎Y4׎;"{C†¸Œ3©oüAÄ€™m.ßB,Ñ”+âóæzòýé=¨/Ȱ¹çìà›~Ë*! ÉÅÉÉÐ1Ø”ýcgš^¦UnÀˆ™îV¶8¯•5Ó ì€Ú¬U³leY#»)љ߹ cqÙÕ‚~‡AKáùÍ|æ¾úÈâJ‰zæŠÞz²pÍ ‰TKè"ž×úyY4ÙIù17¼A¯Ø©Øa#¶ì½z„Daë+âÆÙ}ïäÉ\›áXÆ«;¨,MËdR;n¬=ɱw²wˆV)Õ ½ŸáŽ€4Rn™‘ƒ(Äüìe@};ŽØ Ìžï毸•ž"_1­þ Ç™ñûDìSlÕ'õç¬<-µ­ÚTÏœ<ÛwWŽ{BptÍ×¢cµPÅ$º¼–3¥.•Öðí>¹ë™ï#æï¨Å6ï·sòó˜ÖKzû·bú-]æ…$Ü“?ì£ø¿Y/æÛ—<è=1"¼ÐÌ­’/ŽÑ~˜Îc”î(¦žEOk€{e0+Ì蘲ˆaé»çÀÑ u²­Ñb“Ï€ävEaZxe\È”`PínœÄ]Ž F‹’"Ot7º ]ÿ@&î@¼I•^År¥Ôœ”õìÁ4MF4R–ê„5äÐݨ·÷¿â߇ês}ÙuÞ¯mîÜ`?Ûúi<Â÷>f>笰ô>»t¾»tÞ·8š;ò¥ru@Ñ欚'lN®ˆZ™i‰v_§k^~Øc!Ç’½ºsÏ)‚›6¯±‚ÙÙÈí‰lÛƒ ·Ø"s…'/ئ)ª§´o¨~³Ís=¹å½®8,³ùvsóö©YƒÚX²âÐV½)˜Ê]˜ž¬ug¹s¯Áè õŽB«¾qG´ÑÜeA'Ê¿mí¯*¥9§â®kû?v®Ip±Yz!ÝI«ýæ¿ÅV Ÿú ¼@Å)yé-yJ±‡¤çðEi¾ˆV ˆ—v†?¹ßX™VÐqÔ!ŠÞ_Üw¿ómvó("…?Æ£œ¹G'·÷—ùß æ±Ù8qÎ"¼\!`kCÞloÐùb£e¾«Ÿs'Ê*•/’Ÿ¦úº²E¿¶ÀY'F͈€¸b-ÃÒëƒè—ù$yfýgq1‡J—J—]Utló'"^çž îuw«üµŸñïÐ0&¸8ÎTÉ…Ãÿ‰À0Üô÷ Ý·Ô»LºÐ òºvêþKÆm»,.Tö*Ë%«æ~ƒ ±žÿbkX³È~åbH0 ½ rÂQÿø/aÁsäÌ#èô§£÷-ôÀ^’½a7e§Ú:MÛ$ÞçfB¾Ò¿rN »\»Ý /¡_ÅÖÙ”¸M˜øD;1=¦ÍthÓ'‘'"§útHÌD§a¨¨{'Éòàt{éâšÍJ.I,±3tæDÙÏK¢€ÚdŒ²™³lªý„ýäJ:4®lUUJßB}Ô»'úQÐ%éM/=·wka‹zµÉ/r YÔƒþ]uÕ%Ì.ùHUfÙ—u¸/``D¼~ ŸßþÑ0Á¶Íë„Óê¶ìÏ£Móùâæü¨€9PÊPªa °2ê‰/Åü—Ç׬ò²åýÈàóp8Œè1ú^äÈÃÈ*¹­Aû”¿ š~^¶Õz—;ù«ñ²âšmðÌt„%9ÌÚ<èŤÂĨÂÑlYŒÅ.­Žg­›¯‚~á³àæåoó¡Û6pa$¾H#þÐaêY½/C6›3g¼P3`òÅ,©*¤m*"ÊV,RTä‘ÀÁŠ&‰‚È é¤ `bv¸T\ ZA<ÕÌVB¦JÑ) "ÔÀX@2JYíÖUôÉÎüöõV50³Œ¥/¦­›Ï¾»km,é¾4ƒÂV¬ØAýùËV®Ü9Z5j˜ù`pà DC¼ ô[t2;ÇÈÐD,eÃà“ÖÍ™šžŒt9±hÁÒЦqŠZ–…eè`ÚÇ¥èK;|øÝÁ&±~„Nu¤‡OSÜ0 ­¹^i H=K¦£jŽU]Ð9ÅiÏ$cmK%Ø"ÿŽRص¢5Í6ŠÓANX±×´;o1Ûñ-þÖ y–(såÀ,•¨c˜þ­.µ ÿ·WЄØ)V["‹!}7o4MíT>ò\¾ç…&Z¦¨8ò³ äñš Nç1+§·Æ s¨j˜hÏèI5¨ÊÇ£ê÷fózv${,é|{jÇŠ|¢ÒöPÌå#`ueWGùÞ¬âÝQ¸2é—‹ù°auX¶ùíîÈŠ x¨§´ ˆßãCÌ¥0÷W6œwHÆïâµî…Ží(«‡„LR·ºÆ©Hþ]tt¢ŠZ<ÜŒ>þaàÓ`—ÍÊE xé÷|±ÌzúÁ%fzsfh–ÛŸÝ|6}‹KeØã­hø¹Ø&y7yM«¹sPƒªgÊíqFÛ3·H¾§Nr™G«'ÚöíóªBc½•Ï[¸øñcwݨSëD+ÿÖïÿ®!2;b:÷V„ŽK˜E:•ÚÒZÖ Õ 4÷³–Dö]Y0˜e‡ ”CŒçã õ0³C’¥xÒëßtbƒqÅ®^Ï®l—üy.zñr¾©Š¢T_«{nž0Ó˜ÆóÏûûˆ† SñÚXÐÔE$¥-W]!VåjUX0Ï+ªÉнÑÉUÒéË‹ýô ]X¡YÐÆ÷Î3Ê·ÔG¥ï´ çJëÀ?´™Fõýøæ¶ý6G)ä‹àŒÚ·äQ‹ùZ¢ò'kÃ?¥¦&ë3¨2Z¹âµfªG¨¾N㤒úš÷\¥"Ÿ@‡7&SjœåûšX÷»L’½jófÐ(uƒUQÿq éRx¬Ë)Û1–°Ò*dé`tÜâgˆ=jÖ¼W«Ù-}ÛîV¥'mö¶ëóx\HWèPȃãt[QT8áyé‚Ù ñ ­é Gð~’LÙîv‰`oûžyd{ŠûÊÝ)ù̹hbÊÝ>»·.ÜBˆéœ³H¦´zu£\uO$0£"7w¥XÊ[H;<\×9úß…uY¼Ô³ìmÕ>pa8˨¢±Â? 9Óv#Æd‹¤¾½NËš"³Á60"èÊi{ûöŠüªîŽY4éPVš2ùºóÚ¨­P´äâLz[h—wj2ÔªÆÞ}ð¼E½fÝ7뇲¡qÎè µ¡±6ê@L¸!Ò·)™ ;]~G™ E°¸‚³¼«Èö´™ªr@5Ë Ô‹Œ ³n=4J‘"‰eÙM1ºz"Zß%.N_…ZÇ1#B½ôÈHïqp…ÿ8£ˆ7àë›uiT@|Þlþwp+¾ó>—ŸÞlŒÞ›:*¸i;–È/3AÁ”¯@$êÈiÈê õ¶”ÀäÝ¡ìXdt Yœ8µŸ}æs8Ñí¼¨NœR&äBXÎá­Ã¼³’é&©F8ª&´$LrϺ/É…ó¶=¦¹2e»4FÚULX™!æRŒ0€K§®±¤{§î¢˜Â4W-T;ó«ZšBüº¦sך*mpöÄœÆH»ÂÉŒ,S˜›i ¶}¢ÿ¥ ÆÃ,oæjOdmÊ'è,»šà–*æ · Wœ§ cò¦~ªÙÐ ÃÑcD´ ààÓïÖÔå3ü7Íån=×]ýÔ ©÷ $^êþ;5“P¾À0˜÷Z¢ÒìÿHžsßDeމ¸IÝóTŠÄïob´½ïoþ%^ä ¯|XXÇN§4SŽã1Eˆ[ÀÐÁ°æ ô“‰˜qwÄ—ÄCÅœò–É‹›~kƒôÝWq¦Ñ,|Y³ö,×A×a?í?¿9té‹En›âVäÃį‹öh1»ðÔ8×× œ8agHÎ9§ý{ö¦,—.6Ÿ·?ùºû­ØBRvO"R…ç`ç¤ÖQ£ Að¤ÙW¬€m±ZQì“Øz[rвGĨ>æ%t¨Áp(f+yâx]SÂkIíwB i•e“&ßzn÷}J¼Käkz*,‡$±kZ¿ãG¥®=ôjzüü{æ}æWÚ¿ýŒ i¨š3Äzâ ÔÔ¡QrNWZþ+S7 ÙO‚D[*JˆJðÏŸ¿€ä ÐÔqIÎÔäD“jWrƒ?Øy£GÖôgŸ%uúZ¯Ãâz³Ï¨9¦¹uáåyÉ#\àNMó_kïÓå$ÒŸãptÖÙXÝ^Š¿2Æóu÷Ö|{ÞD=¹ƒòoü3·“Gs¯z‡­w:…uònÒÃxÌ'íÑëK»NkØll@i ¤‰"{:{Ý}"¢Ä9t¸-ÜšO·¯@Œ"É÷ê£}¨'evw Š(ãÀE2T‚Òf¢oqò_iÏ ‘8roF(Ñ{zQ~ب“šò¢Ýòn?µ7û/3z·C»{½û$l UÕ'JdMHPßó"*Ü ›Ùžù6ú‚¥(m™JXYà¡p–ØÙT›²%¦=ˆQt€P*¡ÈZ@ÌRÔIÞh¾[¦_y«é±Dí<\”Ÿî-óxÝ<©ÙŠí5rãr/©>ðŸ›ñﮟƟ&M;v?cr.ÆÜ›÷lI´?ñH!¦1ÿ÷ç´&]TœmúÈ´ëBÎ37E—NJx+«È–ÿ .`¨ mŠ¦Î·P2o z¯ˆæ %Ìù˜˜>᜖yg­ÜRı ˜ÇiÔÍdd8û½Æñ$Db¡4,ÛpÆtè–ÉùU(Âì ú ßeÜ‘ûðcü-oúÇ\ÁkdßrÏ ð¶Ø@Y„)Έ{˜‡ŒdB)ü°”÷â÷åçÄîŠ{uå’÷Å»¯®óVæwšw}ãfîáb#`ñ€µ»u5–±÷˜¿½IêÊŒç%`×ËÅÎu /B~Â0µ}=7B¸öŽ€©…£VSGèÁŠÍe¾hŒ½ý YªR¤ u `DÊ_d04óànœa¡tÉ<ê¼Oÿ€†›$ÛÙ®ñä´€ê]Ùl^^Ý ù?Tá(lÊ9¿ytf:†$²ð?¼;ó£ø¤Ê±¤Ü£e¹TU%~˜„¨›qk6³Ù©Eù6¦8¢Û÷ƒÉZ#*)) zì´m^3è¬^ûµ6¾z„-íò:f¶t¿_¯Lª‹ïðØ{ðÚ¬¿Ü[ŒÝpdÉSC étPÜ+®`uJÄç£A)¼XJ­d4a ûß/SŒ-˜ÑT×”¼ñ®s…x©Ïw…¸¾UzîYTsä>qojëÛãï^ºsr_¸b– úßöXæ=ý®ºõ5@k ž÷݈>cgßξ‡òfFÍQpÚÌR'†Î‚ídkÙÒ”V%VTè5•CR"À©3ø§ÝÂ)ô°$Ìã›IÝ£Ýua¾·ãóUE÷ÿÞ(»wG» :j/o¾›p¹ R^Ý–œ´˜‰e~³[z/ßÊ~Öp@á¨U@EB¬ömVë,ÉÙKÓÐë q¡z…uQK»Å±T¸˜'a\(O¬ÆÆžjøk(»š&,’¸»/Ð7«RÓšuÌÜoeWXÌ?v|,Ÿ˜‘íÜ^l%µ‹[jÛÙ]˜ðÈbÌ(­4‰x©ÊÚµ”ù§§»å-µþ ¤J3œ·shç¾;ÐîmcŒ–Ý–}çÄ6ê;Œ@«ÿý´;ˆ‰Ý0bïøÂôC${Êwr‹5¼EÇíÈv/å9Q•$h†ˆQ£G{ µ‚+'"KÓ¯Sâæí¬<û†â«8Ví»\%üè}n¾ôïß{\5ã³^^&kÝ~xmÛ9÷wsÔþþ¸Üž'½¸¹y a‚œy\U!>{³îdŠþ‘¤ËtEϰ§hPR´QR|àŒzZpkÐ"›ä`NLμ°³æ*NõDáÖGžd\,SÞ—*`QÓÀÏ àª@BÓÛjáœNÎê¶ø(ÅÁh¡åN>µ¶ô´Ý§¢«ìÞùS#“Á<Ì|Ýz•çhÕûæ. âÆn£Ë¿ÿø6*\ÅÛó'-ÐëTðU{ôÓ{JÄ»±ý·Ž°úF‘ «ºiyóÚq «×þæ¹XKÀ·ý>¨gj)L•á(i“;bȺ嗶L™õú=ô,÷ÍBÿÇÑpC fa™6Êå@uáãò¢=!¡IXx÷oÔr"¹að¿…‘ý¸øÊ_ô´·nðûþÃtê6hvà<"qè§›u~NDΉQ® ¹¦šTî§"~Ï‘%@CN¨x™cÔC<Áúø–I&±èÚ5‰ÙªÎOŸ”ç"2%|Lfr¨›nvf¾@ofØ…–%1#1aR»B$ ’‹Fý¬¨‘èi:®opœ– IN$pÀ–Á2جir@{2@O¯êŠ¢q~Lµ«IUì$~ø­^ˉ±ˆp¯”?ºýSZaîŽoûÒ² 8ƹÂG9È{øà;È‘kÕjÝ÷*‹ü ²RwÆ nû×"±cn8òê2Äyçcøßñwå߈ %ˆñø É£ÐûUýÛhŠ!îJ2D6D6úÔ 5(ÂÉÏPÝ®q‹-IàçF¸Ð§¢8ô_È'ü¤TXà†KWðàÄ! 6(Á¦0 «}J5n/>ôvH XEaÁðYaÊù]ádtkŽD&1.G†œ¶ÇOò²4ò•îD]šŒ~U,úsSìfS¸±id ]y‰Réø)¡ÒMïó*\²ÝKnt,[‘¹­ á\ÒìJÌ(&)Øo)ºóHŒ'Sh¹"Õ¥êzS6è0]`M`·LvÀl°…€Klî‹ËûÍcA4#î{ÎI‰pŠŠ µ-W^ëµÍÚ¡>äú:ÏÓì[Êr—w¾ãÂ.çw ͜ù´þFávº£aÓ/5æj6Òl¢0cäyÞâI¹ÀaML颣”Ü/'^7^·ÇÏÁÛ³cPàR9$š ²RH$5£U‰Ðü9Æ' r¼ÂBzûtËœuDǵ­ß¥?òŸ—G¨.å=ß6 1[RàŽÜø©¨±DáÚ×§?ªuì"¶÷Ì­+ÂgZßTÕÝñjŸfÈ8dpÌ!ž¨èèµÓŠ4¾:啪ë}ÉIôSÈ›–n‡ã £Æé¤ï„¿Òœ81|ìyº=uަ0D<9?¯9ÓpÞ§óäÄ¢Öœ^ƒ+cPp·üRSjx© bÊ©ôŒ7êB“ÂP‚J XÂkÓ©ˆ÷;{§@ÚÆ@§I¯Æü÷¯ŸÝrþâSïçöô˜–¯nÉ Näkܽל×n¸®Ì*Á”ªA•‘%„ÀX’"‰@¬ÀáÀŠ‚¼½UpÆåW¯Â@xz8ШùèåhõØ%èg¶>q!¥V!ß™yàôÙ˜µ-ö4Œ¶!éÖqñ¯Ô»µ_Y0ãO0T¨>ûÌAzÚ3`°ôDCj4âI²1”%*é~­“ÿ’•,ÑԱછpÚ3Q ]8²Ž¥'BÙKDÉŽU¤~ÐÙYâ'!l Ûz7;vÏZÜ!ÄëºoŠjÄrn\7ÃQNÀ*ú1RE¼¶[:ðX;¿öÿ!k®ŠÐÌÐÖO îèÐ.TuW§uÁéø$R©>.aòm.Ðö%.‹y¾c½ÚÀ‡x©m™=V Ÿ„¨$ë\(ÎŽu=©1ø©†£Ó') û7³´Ù&0ÝfÑ±Ž“S^£°S(ÜOÓJvvâö¦bM˜5RòpJ5Zš$ZÄ5dXOá(·B—4ÌÍ;•¨é“Dþ~ë•­n“+IÆ£cño.«þ–íè¹_RW¯¸¼÷Á¿x$ìWÌ€Ž)ütà^;Ÿk,¡”ßõ@X㓤háp³I»ïuNOï†×:|ÝÁ}†°Û*v[o?{%jTA](¢`ƒè©_h-º²ÇòÃ7ɘ…q à|6l{¶–Y/¥aV0Qú½²zÔñ@áH @$@ŠN¶+ˆM_CCI,iå¦j M’^…h˜é}±Á,ã¡a}îËÑÐv}Δ[…µöLIQƒééaB‡û)±R/#F'ƒÜÞîoî;9ÌÉÒ­Ñ)ŸÁ±³Zf_ü ¦¶åË2 i»p'—qï *v[Èa©½°P–Ï!3ZB=%Yré³äM׳R½ û^WšZ.%a22¸ 0±ÒL©ó‡ÝfN¶lçævš¸¸M7ýۊƶ¥UI²³¿ÇE¹"Udàõµí*^„sd8â£\aó~U—D2ðy¤Ek¾ ‹F.S¾ÏÿÍB‡ÖDµR—RëŠLd¤¨åØ9~¸…ô©¿©741ˆ›JH3´KA²Ùåû“w8ü“º,ý×.… ãŒb¹¹Z|dÄé¯ðï ú<¤Ô§GzŸøâË!ÄÍá„yѸFX±öNó5T€h|ª(šÑ׌;n™ßn¨h׫1>(ÀK&ÂU;bREï·rÞìÉ_Èü½Oþ¿Æ­”1}³>jæ/¡¾ò"²$ «ÑQ陨"¥>ÓH I6a#¬p@ù€­«ã!ÎÝÉ©LùMx&ž§Ü„‡;‹ÿ#Ls¨XòzéÜc6ý¬CÈÅ1©½ ‰xvÍDŸÊçBóbHªÙ80pÛÊ_4µ7‘üà OUd ¶@Älù@Í9«æ/w~à×\xœWœìGŽQ†!—Þ[%1IÊÄ ‡™u-<…ú¹ŸÓÒSyÄÀyp ‚TD%ˆžRhBtÓb‹‹Sq®aÈ|ZD°àŠ`3&ÚÂCÛšpËN8qÅqG¢¼cߚNJü ™W^¶“0ÁZG%m‰B¬ æÂjó¹¯p4Ê,-v¡¾ÖæÇ^´IK÷dD+P"D©sy+˜Æ6ü(ÓþœµÞĤ¥>;Ÿ½Çœ×5-¾»àˆ_h6¶Mé¢+™Ä 5HT¦U–ÊËØÝ¹K«Øµ<ˆJ„K´Ôª""¨Žcj0õ‚èøVç{8¥Ê¿…Ñx±ãä É£ÿt Cx “ä*sF­’zÆØ&ì“i˜Ž5¸b›œHôä9YÍ͵NØhÇÿ$ãê#Þé:z~Ëßqõ䳆üv¦"ÕP1Þ ''B/Ç”«$2u´7—m=òbUº™ã@×^Îü"nñø¬¸³k îÇ+Ušéød³ˆ…¤7f"A?{Oy°,\ð_Iý]|þHVƦiÌ7«Ø,ÆDQ€ù¨sS" Þ †"ì-ÁL˜õ A»Á†¦àL("+® ÿ¥èô¬ÒmóÄhårÝíb>V®ÇhÎpd{ÐÉJ@?Þ`Ûb/F»V¹ ù#f‰_>üaøè\&„8. †ö—i¥|5±ö2f'v¸ýìú¥kw”¸™ñ»/ì—étÏœ÷­/ú$qÒ“P„ð? RrÛ†9ßmïŸ}ä ,p„J ŠÅGJŒ‡Ï…IÓ [ç¯C‘-HÛ',àÒTìàU´åí|)^×CÚýgUîxo•·”fÁƒú™?Ò1áÃ"Œ‚ú÷È;t+›°÷ë…7­¡fG’:¶×ÓR·j¿´ƒTŸÆÕSØÄÆ…z:Sþc×'tMª Ã.ŸswÜD°ºþs‰”ÙIÀû9 dÿŠ…›¦T°`8Ùªœ¨†lÌo!º¤¥‰ñ¯ƒ?Žï¯nÙw½ëƒpß÷ôõë+<‚þÆe4À^¯b< =VÜ‘32‘Ò{;w ÒwÔµ»è—‡]‘82ˆwôÆ4E®;×J¶kN²Ô¤Š<”Œd™¼I]Ç—®Iiâ±K®lñÜ…?D¹rñІ 6¸½½ýýí+Û#wº···Ñ¡ûEŠª!@¯Î¦•²×òmÅžWRܦGׇ{×1[G6n¸yÚžófºäå¹³2ë~騱`L`õlkÇw¿ûñùþnèòÛ§éhîk÷ËqŠ €Ui€ÄRÅÁÉýåÚTÖ#_¸4HŒŽ\"V$ƒ¢_ALÓÚýqáâÇýÞ}|ëÕ­*Ãï ?bÔòUà ΠÕ0Yýûðƒ†l™!-Ö)Ö˜à:ò,ôSbhǺKÜ ¢ï‰@A“)Mb¢Š$¬’eÿž˜«¿ÿ·|‹·í²Ê‚ú ™ø\#N=±´¹f0FZ9ð~5 ,ŒYWOž÷³)´š7¯I£M˜¯~×;µîØk«¿ñYI\f;-jPH±šEñ DÕæZ(á7è+ƒ^ŒÿÍ¿üqœsKÀ[¢œÒ:b²Šä¾$žÎß°˜Í:1®ªô³!³müžÿ<ºgéé0G•¾ÍþåÍA2ØO|·5¯ïì„Éßß;ÏÒòøø‚Û©`¿Ú Ñzxªƒ¡Ø 4Å™±wœo…¼C'®¹§ÿGWÑFÛÔѳòï˜f)7[ÜÿÖâüÆwá“k æx­%F9Q&RoÇX£áÊ嫸/Ö;öéz¼v2é¸g"bÈëOgµ+–‚jlº jb÷ñ±fÅEöäãA’¼‡¾)“Ú^`Í0åã-ûaÅp ný4Õ´°ºÃ;-ƒãñúúŠ/'/ÏTÂóâÕ½¸¸H*~v8 Gä0““›ûßËó~K™4©tÎnÏDÒÇ\\\ƒ›¤’™ijH®bfãóóHv®N&›hÿ®žÞqtžZ¾4¦­°Ÿs…Y´®ž¤1XVÅe~uZLNªUcsžRU­¿J‹æÇ¸ÒJ-Ic :¾ïwŠ îö'û94½ž@Ùàõss»f8‹·!6¿×…m;?GßK:d=6/»n¢¾ö“Ÿ,~¿ˆý¾TiØïn^nU &ˆÞ'>ÆWNý%&9¾C%äÅâ6ôÕ›A«ÿq_Mêzf€4Àü3ü4™=SÂE‚A0Oæç˜’Ô›7 eÓôOóîK%Æv¼kú²àSÄ[%‘¸0FñÖ£[ø7f&‰qÌN5ý|xÄcÀÀXÕ=†Ë+Ó¯Ž×T¨ðóO"Âo$×™¯!•ª'B°/wStÆÊÏnxF;ŸhÓÅ,VëÁ­f»L¬²¼³]#XjY:»\kñèeòyܧèN/O›£þ±å“¤:n[_G!euAÊâ¬0uuN;K?­X©§Žû³d“¾hNº”}QËŽoNo©4«mhÛÓ̲‹AAAÃ!œ¹¿Ÿ.wÓ\Þ¼˜Å볟×ãĉ>s;Ûë…©¸ÝܾÇw6ö ]×FPß~M†iÂàh/nîÿa|çQ¿íè[l] ]%¸ÏLÓTñŠš©šÀf‹ì¶<Æ ìÜMAdŒ*,Ç%éU±r$­ŸH«¤(¨\}á[mßM T“æ—¥ƒÁü,uC@b‚ÎTÃO)P‚ë+PŒ"í‚7!4Pá0D¯Ú‡R;Ì,±î½¼ ±ácáT¼Âv󴾺½¥L<õ,òeǾøjú&|\\ÖÙ3÷›wšˆb39ý{ð²TÉ”ažï6û~çÞjµŽj©c­ïïi#GÔ¦¨"»QWž™íd;?W¯v²ÉÉ®%³#×é^œkÿw«tŒÁyùì< Ç1<Œ×$ú°à¬™~ï8¯tâg¶‹ú% XÀœš§¾g§! „0í¼˜ ø%ÅÓ´øb¹ZAu¹pÊÇì}˜ñ¦Éÿ‰³Kn®û¤»²òµ'Pmnb‰F–ælMªù@jr¡IEÕ~çº;f“#† `•]îxîQ>Œåãç·Ë®°GêL.=oÈ?‘¸ÌîÌIÍvncŠ–÷éè /O"‹Yôyí‚>qðý<‡±wÐûápMØáòÇâÛî­Îráà­#èErË¡ûß…UX¿Ð丧7”Ï2îx¯½ÃIqöÁyœÞ4Ca—½›†VÄž>ZZ7nÖ{Á-S~wÃ,S ðv2†¬¿ÚÆ ý jD ã¸ø%bzUQ\(z˜à9h-jˆjØc¡å•õ娗wF èîþ<’nr=ü–…™¾¶å¤Îc¸»”‚\f€¾g’G0F¨ É.“îmÄÀ¸O”NÆLжÃHã™UdÒA—9 ¨¨h4Ž`7fIæòÙkQgy~~^±hž]êb±L>ª-æ˜}ö1´5uZGqɾ/V\\œåå(D»Æ#ˆå«)š¤LwøÑ‡¯­°£ý#QÕlfÖ&!uŸS_f´\:Ä>šoü»mIÿÌtåèþšïÀÉ;#(m+Ü]ÓöØS\uU˜Œ~ýsl5wÛ¬;õŸ‚LÒè?µíô«cY9H@îÑ€!ýQ“„ñÕhFzñ-«ìDø@} dèxÝš'týç¢óuÁš•kÙ ”.) Í»íîÁ¦)Úܦg€Ùû@ˆøSˆnLK~ D /…ntºMäË×H9"…Ä—šž=ÒF‘úýØè3„i¦zj.WÉOÔÁ*,á)K˜/1Úsñ²X‹²«-åT‡Ö%ÿ–¹¶"2#Ñs}¶“ÐЃ2çÇ÷pwo-ȈK²l#šÏ¢èÈrœÕ]Â:I«Þ9°4sð«"O´NùNò7¯5§?!©I•ð{Öží2¡#îºYÀk¦ `´2B(‚ÆVOð*:ú³*cÍ3AŸ#äü~ÏÖUøØÓöÊùm×äÚ» «|6I Ý3K•?åw‰ËÉÉzqm6 ÆàÐWM£§èݽxüg•2»ü2 ¨ CÀ8À¬k¾O"DÇtÆ&ÛwBÊ„ ˜/æ Ê«¨Üòòç‘Řø>¤{‘ÈR[ꆊV áá¯G[µ ™Œô êiÊßš®@```y‚RXa\FÁ×ñH‡_‚B@Q¸í}ÃÆÎšU5y`ˆC8e¬ÉÖÀaÂÓq¡| ÷²ò•N[’8µºÂ¦k&²?Ñ+–dÌ%ž¤<aZÇ•z;6$®›×ýy¨!ÿ±.´¯ÑÙ~¾XÝîN÷75K”Nš£Ï¶ù›ÈÂJ^[vÛ…V¹ä–ÿ͆Šè6¤ùjMHP“À·§¢ ¨”¦{—âZìÃM0àˆÏÜUH»CI}à&búã.P5 r·˜ºšy;–{)÷Õ÷¹½=ÊXÃ7¨8¨|M€IôŽh̼a”q]Ç̯>À?<àÚ›ÞÃ5ÎÆÉQÁØ©‚±]ê‹frHà\ nN™8Jžo¶žñ.Æ\–uíàæô5Ò£¼¢Ã$êߦ½›A²ÁŒt…ï„ÏcÞôó6Ê12éy¢ö.l|³R5ƒs¶J1¿íùú¸³%?Œx'á¯îĹ•“þq¥#Ë´óut†¹J¿Hüâ_kûêw²+•“%„šÐ©‰ž ïÁ>äTü†–/Ú ºÄUçlLD¨öTîBוÁþL€®b2`,ÞE {6˜G6MI‚äïáܦ–ºxÂÚ¥âj?äp!L L̺‹ Ü”RPû‡i^Ë¢¡mÞ²I¿vÇöÅsËÁ¥Èª²ÒEÏE« ½a³ç‡_ò&3{ŒØ›—J‘¿¶[o4W*ÞÙeq%©çLéP¨›âë>'B.ë9ͧ‡}AHXÉ?æ²s5zâ€<ËI¾ƒ§ÜáD¤…-ÔûŒ"ÞÇW½'Ëé{ì/Ü€½þ:™Ð #&žF9Κ÷<¡ N-!«6êõžKÇ›±Fb_-Ÿ—«îFÇ… BãF–h/{½µ›YMƒ{Í™¤ÙCþCþÎL0¡ˆÜGK7Ý/NîK1—¯´2º‹ú½éÝçñx$üӆxµÍ[ _ ´—÷?’p5ÊÆ\w\ jèÓ§‰Ð&3xÇýh’HäÈ(#ñó‚ûˆxHPg‘½Ì¨@ Pi}6…¬ÒŒÒd¥c¼§Cbÿ—òsnã:xâåã÷á³Ò^­Û*ªûMx"‰ÈG—tÚšá1*Ðn³0PÏ/ßÞFi‚0d\êpmÉ&º+ê'1­Œå#0½+ÄOˆX‚)IÓÏÖ°4šš]V2¢b­/Àì·> (Û–J5õ2_ûìîc`hb¥¢È$°W¸Ek¶·ë†jcì@{Sz(®ÈÜÌF¹Ô¹ë¢Ã(‰ö%ñGö›b±ƒÕÙ—é}]ðè+‹ä„µË|€ùþ¢Sõ“\JùéW]½|”Ž­¿L Lül»ÆZê'{9µ~U¬i×-+ÒX(Ðu8Æ‘¡:ÜÄLFWª9å w†€Ì«ƒgaä~ÓúÁ_LþªÝ²-±honvQ˜½¤¨ÕÄ\ά°ê?1\¼¼"ýàÐ2ç‘F¼p¾7è[*ÙìFhrLô×ö±zc¬¾ºDi}ÆÛjbÆxƒÞq¸ >¶}^öÔßw¾T^*óï$ªƒÌÑæÔz‰ìoqç;ݺh™~æ:jèçð(Õü®6nª®i|cØIÜ« ôÝíÆÍøyh¬ËÄëœ\ð¼¨Ø¡½âå‚=šž?–›ê³êXàm$¶¡)Ùà« =pËja}ÁËÒǵöÑÜÕ˲õ¥`Y_[ nãYž¾Ñ`­íðíèxÑru¡–é^/Ý’-)m¢¥Óe™ìvÊ2ëxs8ÂÂÖElI®® Èì~Ô¤""2”Î=ÿ"!‰½€.ªK²›7, Ø›MŠ0N]e•¼­3Ð+ç L¢ÆhŽÝóÞU講~´13^ Ùv¿oÝoù~–GÃ%ü虌úƒž¼QæQ¹id’ßIÎÝ EáŸÉ_ýØíÔOÄ2_q›”´aÛâ)ašgÚ€eí’tSºf žÁò1 1%öTÂØziÆ¢¬»‚?;«¡ QîÒ¢é/µ‘ͱN‹ß§ÌâiæÉسÅQ¥ý§ÐÑrOÓ†>‹¢3þs휗螆E.8?xõÖkÈ)N“˜Yï˜ÑãøÌSËÍ6…üÖž‡ ÿ™Îu#ë: Ë¥¹§«=S3£¥[OCD…íûÛɦÉág{}Á,$cãjúzùÖùnŽh¹Š\'ö>ÓU¹”t44ý…ìoL$34?séô)a¨yZ~‚»­ñ¯+–6p}@†Ä£æÙµý&kØ>ÆöÛ³² éú\Ýo…ÀPZú¡NLÉ-?ÅQ÷m{‚ôæf¸$â±l«Û•¿O÷ Ðáô»Û¡úqAàªQÉdÂL€Ä0üÝ•âßÅ>qß“jI,®ÿ"çÊà³[Sø~Åï@&uÏF¨×=èý'z<ýDŠÖhE;Õ¤Sáú¸øL¥ôXÇ “\ùç?,Skô0*Grs{Ü//4z_#ÿ¨MÅžö^DùÉGw‰­n#(Øî½si‰aí¾ç]{©j§ø†HV[é; Ñ¡J·êæ%+pïíÒã>O…ÖTÒ’4s]C§}Ôûüw„.š9¾“Έ±søÿjÎã¾+ : ºv “$6Šž–ÀFkiF¿ ì.¶ÛCCýàV —¬ÙO*ZxÏv{x[qÕ&©¸›šT2Í®¬ñƒµÞ–ð¬«^‚×0¬ü@Pâ@Ûæ‰ÿn€K"€$bâ® $“FH¤“MÝ¬ØØ>^9T—Ÿg2Á Æ×…™äßÎ"Ûîüæh›w ¹3L§ Ç·ªWÆÔ9iùú@h†çÜÚ›£[\!™Æ%Œ6bˆÞ«:FýK.¯"¬ùC¦ÑÞ¥Œ[Áó‘ùþáµû*ªÃÚºY ùiû"½{k¶³WѦÂxl‹[«~$$Gò3VÀ³®$ïO}Ó=Z´Û»^Þ¶Ûšºz^ö­ây-{k†*ްÝðcÿµRƒÌ Ð…à‡áÿ‰#ˆPê Ž°r”j)c{ÿcÆ]OÑH*‰@pÛÏ|YxŒEjÒs*"+og˜gŽÒI+þ&›ÖåHŒe—5’AA”ïTÕÎîR"ÝGb6ñ —€ W $šì§Ìlèú~G˜Úb[F24À:©&*•7 W%”à(¦÷ÔRc=E ~u|u¹xJ°ò"û† |>Í]¹ ÀÃ×Ó€]\\T©^ {·#W‹#š¿‰¯åÖuŽ81زà¬Åé´'uF™ø=€ý©ˆñ±]‹{n ô±T ô*LíMâåó9Y~Šº»;Kxdzg¯åþý[ÖwÞið­®Á»`ážrå ¯`§kfWÏx{2ôÅàhÕ5 ‚³kaÊ Üù€ °¥‘ntºh‘^8vÕ¨ f®ÿ[޶SI‘*/(A]Þs^­zÉ’CÅð¤s³3\ƒá|pâìùÙ´e¡) 8“KFݯw÷/±~ä´/üõwk÷÷@{Só‡Xq9‘DÅ’%߯Ï!þœí­{^ùËÍ7·õ×êzk Pow§§§––Ö¿-ޝ D¶ö fù›µØÞ‘EO¸^A¸®âÛôü¾]a…mÁ·'Š(¿¥üëm÷ùUFý‹éÆv ¬ön`üÀ×™³çϦÙ%ç—ªÝVnøçÏZ‡îksœÍ×qòn»8q"ª„èµù —ùßüSÈÏè¤-û¹+"s×ù£æ® ÖNJÆX,"xyœâL£Œé‡œÕ?CgÍ2×[^|ZÙLŠÖÞœŽÇ™tmMtMZ ôš&kbQ9RWÑ[žfûÂqh@·Þ |.F;’¥)W¹ß²,Kvk¹ úÌÒب³šÆç£ A!Ñ&%IÜÞº¯ØõC9y’Õ£/%ë1…†µ*Šê {…m(Jf›f1Í'•ð‚GبéˆnÁTãrœæJ)j]ÕSyDÒ+gE4{ѵ -ò?p¿í JÉùCûôúâ7·´°?»z¿&I’ÂtuñL»ý‰øU ”—>ä¾w9 –]W¶–ù4ø„3òn™*Ô{@Spã«©×¢{5F´°äÒêØ´ÁÃ`ûnâ²°lx¼0È4Á+òU¡ ½}BœÆV¡.‹Á³‡‹(z$hv¤E72ìÔ™Ð0ºKâàˆâ^qaû|.!ïþi… ,Ÿqµêm¢cyXŠuïudw mÅÏXÔ/MÆ ®Dѯ ÀåeÞÍ®]Ã> $w¨,T”ØãE³Vk3®/’¬ º:e^Ž´(|/c„5 ø$§¥ö;a®†ýSçÀÃl yÈï.;¨Ÿ«hƒiBPÛ¾Œ›e©]:ëwƒ!"0êsÿăëGNë™Ò5LU¶tl½vTöÜÓ´œSµÓDCnƒ&ñÖXy7­TcgrbµÿìÑË!½<µ‹~ 5a.Í6ZWVÃüÍ6íõè‡ÄØwÎîY½ÔÄ›¤ÕÍÂÙÍ8}¡MÁRçX¦óò5ó1ë¿åÍz«€é×.9ÉðWcÖ©á“3ˆ‚>õ¯@9V€ žÆî*ŠG ÙÙÄ5N"Þ‡¡‰¤Èšµè©®ä=˜†1M´p.„“ÜxÕŸ±]‚¨ìk©…˜±çô©Ò…Db]‚ v¤÷ú1Æ¿‹T{è BèX½½4׈}ûs&ư¦K%³–Mõéì€úÁ<ÒÊ·’T–ø¨$ñï@ÂîMeµ‘øzù–&z-#Û³Š²ºdÔ¥wš…Œ.JVF(JÌ`A5Jg//î¡î­‰ëíž犙ráEË&íwíºç±Ù¶¬Ù£~™æœÒÌ+ç{Ïž™•K ybpÁ °ì%ÁÎ:Ã5ˆ5Á5Z§BÑö^¹u­­—ï“)/Àe…ºcWE’|‚;+ >‰…y‹ ’.*„“e™-ôxƒ~è–ˆ–å<ç½!Sž?Ú®%VçRC>¶…ød<÷"šw”'‹LÉ:FÝ=L/íϤšë¬ÖÇH˜iŒ‰c‚Ú(ñ 6ÏRV”ÚVv“vÕtÔ€aXbšF-òBˤ&&:º7M&Éð»ñZϬ<âÃJf³|þþ¾%áAÃép:ì¡€I‰6eâèÏ“ÆÒÆ£éî%þåõutA¢5ßÖ¶g·˜s[„†¦Îá´¡¿ùÉû8/­fq7Š—pó.’úË¿€Äš&à /V®8ËŸü™™¤ˆ¼Ï‹Ð{·çn³³Í·I…–€yž½2@e½ “m¤±¥–`Y´(N1kX;ªÎÝ~$ÒòA î‡ÛFNT€ÚH뫽-ZÑ|…¨8ÚMDË2C©ÀoÒ1¸ O’í²Eiuоö=xÑAÇ¢À*˜ ͧàtoÒÚæô÷Z°ýD¦3ݸ NS ]The+ÚשöY4iNÙâjô•ÕíÏ®âOEGЏK9§* a#0³ jgTH³ XïXÏVB’9ùžL&l]Pb¸LVªŸl??sµP,…£v„otÒÐ÷Q£½j¯îì ø" Ð;ežÑÀ)7¬Y7iJðÕÁìšg•XFdAÒ‰Šã„ùþö¸#Í`p‰áEtIªë’‰ó™­R‚%¿fØúü\Ša záÔU…9W©âŒ@ÂÚÃ)¥hý—Å;Š/¸( ücÏP¿]»ñr½ç®Ç½ƒtÅÚ/Š,K–Î]Šæ„ôsEµ‹_lfDe5¢†)±ˆ…Uq¨xÇá£7&U°Ò—ݪ—û¥#’åÐㆽG Œóé"³é÷t,~MIL:˜éI7ÿØ ØÖv¥Ü^ß«\ˆØ¾„›Õ êý–®\8®±y ,ùT¶UkѦ µßâÏÌÁ¯®­ÝáHðý[Öî;;»^ YÃxÆP» ¶™¬ü2­'ãk:L#×Ê`æEzðÁÙ4€8[…ñ’YQ•é*µu&Kq… ,ê}âÛî @tˆ² ðý»™ÆGרRüJ* É~1¼x1VVoÉÙ’½ñ*ôáØý±yâ—2€Á´T…/îkÕ÷réùåÀ¾ iRÒÑ>Z™)•$¹î¯Rmâ5ñŒ/2ÉW«ºdÚj$§B‡ê|ŒÕ,¶j~Ô1d¬¤¶È¨›ª¡’ýDÀ04Hi\qxðeÙ±]Vƒ(ÊfÝïc¨]r°,€¥ß«d‰EÏÙökCŽÓ7YÖÖ‘¢ˆ£J0úÙ/—68‹ñãp¥.‡é ±´Ç° ĉ•ßw³UªIvÖÜk0(ÖЛ־ã—#äžYG(s ?ú‘Y993¦/àòKª;W™`a8QÃÖ)mSJÉ#›ÆI1×Pp1¾b »?ˆÆþݵ˩á¶BQÊ@é2í1™ôI‰T•Pê #‘Q£\Ç\#Ü/lB™¥Ã3%¸µ0.oõ’M{wÜ,ºYÖÞ8S³ºW%*;ÎØsØä)—þ±Z ò5+fHšZGØîºuê‘ù£¾‡pu¥k©†fA,vƒÆGÑ1¯n´×Ræ^¬Š\‹µèΨ"U³3áºGPè/ç¶ãÔCZ2™Fï–”ï»ÑÑkéÒÎ%ç6í˜ù>^ÚoyØ:X'\\‰f›û4#¸õl]|šž\Y£´ž[þž·û¹š15û…tMªšÔÙØp¿Xã÷—U‹pAIA.å —’U‰Î1WŒê7ïà 9à ±ü4€‡!”7îLþ¼S=²$“'QÅA˜ºe»)¢ªI¦5Ûå É"üy+‹s²óœ:.‡Z{`UËxI‘ž§›didŠTE‡ðÚÈ÷õ±5ßú˜Á`×â«··7·“Å?_ù”4ÈÄÿá1Ì>ã0zÐ~25ÆïœóûîƒÑ»ø´¡ÇÕ•¾IMÔî,î–ëƒ29»#ÐÆÓx cuãs©€ÐþÑ‚9kÖy;Óßà€ÊV¢XöÚÍÇàö"çÊŠ¾hòÐ컘?øêcØw‰Aȱ“;Ö[¨–æ¾ÓhP >íîiÖðvÐüåC|Þ“â+Zµð5ÃÆ×˜Þµu2Ä D'Ð Í#_ bñ÷nÎð©«dã“ Ï n=×çsõDGø3z‚n„^â•iñ5‡Z}bï?Dø»sZdã%˜ÃÇãO}—RÕ“vÅR`­ôë†/½xSdQ!÷Î ,UPt‡M 0ó4¸Õ·<$•8–QÒc´°µ–Ä8—zCiºï£ìE¢OUsr0aWLk&JÕIàêãþ‹f°[uð{7“¯Œ×ÍB€OâÙÄ}Öb|öÕP«â3ýb¦cÕÓ´b¼xiM^£»÷Y1—Vô*âuñÄoYwÍúïÏ—¾zLû͘%ÿÏ!S®ò.ëÈ CoôËN©wKmÁŠS¨ŽÚùôaê¸b;·OV!—Ãíz€¡|ÛT¯‡»ð Ö•KÉÖ°ùJì´vã0\ÛÓV!~ÞÇ>`öÉ÷*ƒ¹×¡jßâ]a5zø·ÊnZ±à²<hä`ÊpŠ®¶£=öçgúInˆX*Ârý`íÆ(€Oß¹²ÿù&aþn …qŸÛgïl­svÛÁ6öà£CÄwàÝÿ³!RBÃ+(ÞÌïRa±r"9·‚NöKf®3´uè9'Y*fë½ædí®×µbbËõ¾Õöc|5d¦9ô´‰Ê¦02JàuA÷©–Á$:! aE2­RªRºb¥¬¬›}« ´ªek»cÐ,pËg¡"‡%‰ñ›Øáµ²ÿ·Ë"$‡[ÅÆRÙÚ[³z(fú¹ÐsŬóD‡ÙÏî0ÂÐmìÎh$0B·#Ö€æÖh(ÚN57ò’¨é5n‹A${Méˆú4ÝA‚ªÜXD®U'É(º¨Äs³®ƒUÏTÚoR»Ùª'£·OF^Ëm/E)~Û_³»œ/¾×Û¨VêQÞp>á,½OÛÀ½7•ôgŸü|´–Z­’óäg6û[êû\¥A5H¼€ûCµ-Ï^±×Òœ¦ÛÅ„™›ü®ðàâFJ€r÷ï÷lyɫχEÝ‚‚õfÅrUÀ¬gJfK¾%éêNÁˆéoöAK¹ ±ê¹"n(-x‚âñ‘½Õ>âš_Î £?Êßë÷ìÂN’dIdu͆\”=5«? rN‰FÊölp8p;¡{†Á:He}!Ca%f ŠP»ÔèÁ~Ìn¬ó6DÛé?áëýM÷‰¢ä•H°Š" s‹G¡×iÿûia겈Ãl3ë9ú¨^8MMœÉ"ª† L¬©¼ 3>æO‘CýUóVq‡‡¬lôŒÛ±¤‹î—ãM’£3–l˜kVLZ[hÓ¸è‡Ö“Œ\tÑø\ë ‡Ýg|Ðm÷ÖF•.ëuM„V6Þ ûÆÖc¥Jó#^9­« 4Ë[Rêæù‰C,*ª—#vi÷D°CbæXTÇ|WU´òNºÐ òµ éz­ìón²Ió¼î•[ŒZàž}ÜÛ5‡t‰•º ò¯^W Æö¸É¢¡ÕÝ©Qm“¯”GmÀíÊUù‰®‰@”JÉJÌŽé~fצQ§µ‰°yFÀR—Ãoƒ›éåç)>wF¨ÕÐÞwûU‡KÖÌtà”Ê£Ç"ŸÌ 'e²0}ÃÓ@íõ"ÛåmLéAhB#\­!ø.¿S:¥B>žYXl™<àñ`/-T,Ì3‚ô&OG=iÚœ)õ½L"}È £sÕeŠ˜tÜ×&̲×PùЯ_|7&>Ô4^±»ÕŒL¸ð`AZY÷Ø6¤–¦U|ÇUç0Ú‹%3ÃXa­Êž¡±Kçs78-EfFÉ¿¦XÓž›»ë)&Žû9¾@-'ñ'z‡ÔÑzKiÒork¼ë7·‡Ä@FZ¬pˆ¢J#š-5†L&ÅÙ)®-< šve«ö{+ßFCrl²:.£ª¶ù§³â0)žr$ËxYâx lá.À,‹BßFÄaÞz‹ArîRô©C°m³œÛv­E®2YÅHV“çôq§x®`ݧßÅ0W ¹zvÓÊI1¦@ì“ÚóBŸ¼¥×œÐÐøÃîSåa¥->F‘U%¦éfõy[HŸwí” %X'¸oŸ‘’6NZÐ8 Xm¡TýòpCf›©O³_ßE¬L»³Èñ0ýZÉÿ¢Ø5I¨’,ȶž½Óîø"YVšý)((^·Ë¬¬^ö¸­ÎuÊŒ¦ûêÛ«á;„JJá;HÆJ'‡r ÿ³B’u߀ÖfC¾v´ªöľÂúË`–ý·û#w»ùf¥¨àЈæܧaÉ?pß+]¿¸'> †ËüJGÝ5ꆷt¹?ù#7Δȫµóp|Ù´ˆOú2—A9ÑÜ+ý–å$Ÿï³4ãí8×2ÇàfÕù@•Ü–(è¤ÓÉRM-ŒLI0Ô9OØmÅ*mŸžFpùažÓ-Ã%Þtòôlú½¶«!­V–¨¨uJçÎt²X}Th¨rK 3ÆW¥€hús\•6ùoÓÛâ‰Ñ¶¸°Rµ™ç¨˜*pÖX¦ù¶Õú:X·þ3‘bEý²Ñ8¦UVnœÏ¬ë–ªx%£#;šo;«ØØh]_›È!w $¯/ª”àlMÁˆkÔ ž˜Žfà|‡‹ï]P|Âx= ÍEÇ$Ow£ M¢ˆ„ƒifïëdop´?>̲ji áÏÜ«uzÏu©6ãp ¢uP›Õ¦ëÕD’Tiº? —„þL.…‰œFgžŸ`¨²Þ@œdþôþô;§¦¾Šü÷0Êþ-É᫚´?‘|œMSãÛ.Î?"‰ƒÄVØßug6<Îùì–ËG…¯G)Þ)üPqCP+þþ8a-Ó-ØT,¹**<ä2J:àV‰õª\*”Ž:+`¦rhÚ3%î½yÓÅTáŒ2JÆÂWB£HE`ýâJ5¬<ð:ÕAÉ2ÆMFÖ:û‚EŒ@uy@`ÀI÷_S]ÿºVÝÜ­Þpç%(|Ä IÑ๥£ao@¹Sa•!z'î§uȇ•MpB›2 ÿÓ¶ãà|]ÕAÛhô±‹‚è¾ØÞ{ê•›ù$‹3:Û>Į̂æù!.Û4¼£øÛ—ŸB ¨Òõ½¥Ú­á€—„©˜&©ªaÄŠC?ý¦hÝco™ê²Œ|ã=6|³é~ ®dÌpï z÷!ùéWLdƒ»B è%ð¹kêøÅÿüÆÅ ŽÈ{Â^Pâùµ`Ü=I@1'<îâËîÆD)êýÊØÜÖÖƒ2ò×è¦ÔÑm>ä;b®– 1×SàèU®—mê ÔùW»K…B)ɉá… ›yÛôé™.*9ΔÄáN×W!`Н J†ãP,Ç>‰ 5Eàø^G培qk wª>¶Oâ÷Ê—RÐp"¨²ÜÝcdÞÆy§7¥n)›eI…»}J I…æì¡w[ ßԣʨ]šþÊB^Úìð·2RKyS´?º²ñí…xSC…à N,¥câùÞz‚k×U¨òñÿp{i“œÂè´-=ÊXPBP¿Vâ/ˆwN{m""ŠÅ Ú‡j8MÖkDKy~µ"úÕ’bÂ3ÅÄZ‚­iý:T¾žÒ" ¾’3‡>gDà‚’õ²¡ÔÂ÷Îtåµ?°àCã!VE}ôÙìƒz2Fµ{í©vŠ1,ä­S× )e½h½z`L%âYÔ“ƒ’ʧ?ÿöð¡*dew§™†—CÃêû×rúµý"ê}Wn_ø²N‘§À â$ÚôËØÂÈ‘Cƒîc‘U²ai½ èi]z™P~´¶õ6ástRqÒº˜¯ g®•v’hñ‡Ñ>."Zäoíö<¤Âw†ðnWN¨4iÃ֎⬒¢Ò¤®þQí©¹â2’áÅ¥“:üRí:´`äø–1{feE¤ùä€Rí1íói|Ml³*µ¾¯^݆šŽós ^ ÓgB˜¸vvAH(ÿ#¬ 0¶`îpju’óèî§ßŸä¯ß^Qþ?Î,”æG¾3Å·5JÃTø!HîŒAýÆÑ‚ÖG®®ªl<§¦§mãH¿_œú +®Ý,;u8/Àr²ƒ{÷rf„!ÿ: q¼Åþ „Ö½ÉviYRùj£HôT‘AÕµô¦6eÉ<ÐD~8NµedHBIJ›ðý­Ûd“É©‘ò³þx¢ûOžza¿¯¬€SØ\ü˜Ï¬n`yO¯B3æôÏ‘­›NÜW.ˆç¯÷a:ÎgÊ; Å7Jé†þŸïCéhh[šˆîÅ@Äæ Ī“ª>ý^Ì ·"ŒAùtÎÊ"˜ÌìDÅuž3ŸÝZ…+Ë߉~{@¾)4k ²3ŠqB’M+ÖjÚ#Ž6´Œ#¹‰ªhÝì©çë˜%I“Šf«º$ß­oF6]yyùÛ˜¼%×ö$)ȼDxðÙ£t²m*‰1'±fPCD00i²‹ÇbIG X¢ÀÂY½Yel–†®yE*÷i6ÎùÔC™×¾Ïók!­¬F ÅSäøFï>­D†÷ùÄL7ËKÖ˜í-UÂ麆;°éÅ'ðœhò£júÔæxw3R.áKUL¼h[Êgx6l_•¸¶áˆŽ•ˆ›ûº¾f…à#— [sS³ñQ,”Vqå™´.øV"ú°ªs°‘ø˜á\¦ªð–Ç-ÏýGsÌNÒ³‹p™†KTªÅ-¶»¢óu«rÔ5k™"@@…!êlFȆûãÔW¯³JéòÇÖzþT=êÝÀQ¼bÓì€\ ØòÁûnÏ’’qÉòá™Þ˜xÐZÆÄdj©¾Ú[©ÞÕ9¸i· àð©ðQà`å˜ng¹³Áް†H€ë?²^<¼Xî¶ý»±;Á7ò ã*[PŒª8ë ß¾ÍÿŒ.’H&ѯšÊûI“¤¬(AiFä½]Í1ãä|%Z”8i’°¶Ýø¿Z€ONÓŠHLã{–£û¢MÚÅOã6ˆM_ãŠË[‘C5íÄ]™ƒáœ_ß6/¾¥Þ¨×Õífit/ùD•V½­Oçÿ tr‰žºG·1¶^é!ÄÆÙ=ƒV4­w‘©×e1P7!‡av€N…Ô‹,䱡©Q~“:¡K,ãô2¦,æ †*JR¥Iò昤óޱ`Ge.$5JGÔ†åBú¹ÃÏO~eyõdâ?avýtô­¾ä¸î¹æ´|jõó™Æke“dÿÆØÝÍVƒùÌݶþ¢Ó„Žx Ç: Èy™;м(ìÙ9wù‰Œéw :aÅ'{ø¸GáØênpT´ƒS1ɽbу;h¿nz4Pó]„:¯e_ qkeö×Ð.Z 2¡­(¯¢h,­?YÄæž2hV7Ž6 S5>"/™FMHä§ÂdL¹â[Oõ˜‰dh°öpåÙhn YÔtµSžxðŸ1hxV_Ù;¾üíÙ¹~C ÑBÙ«\ý¼íÜpç€ü MÐó'Ai’A€þ¨ÚÎÛ…pýq¯ñf¼½¾u©É)<Ûžv–Ø·¬XÛ¨žËiRÌíf{Núÿk¾€²B4§oÚâ>Ý®9®‡H‰1íyä"ð$ÉpWÁL˜;]s•A'i ÄúéÇc†Ðx*)†àñ¤ê×¼'v©’ßÝvÛ*U#jš)²ïÉÂopZR1ï,„z¥ 5wL=ÎwpÉÕû6•â)UØû¼•—š½vIõ§ª¨Ó¥Ú9k|¾² $»-øk÷(ÓŽ;Ï*Ä-vOÓÁ(©¦ï.m ˜ÏŸä 9.L©aõÖï%$óa ÉÆ³N+åNçÕ;E¹ÿY…ú]ðyQuÖÑBD1('é“ùŒ ‰ÂD*µ@dKùzAyÿxèƒ0%)Ê%“Úø†1iýtIæ(:äûᤲÂx܃U·ÅÚñdvŒ”&—y¢[+I募Kßn£í>|$XS䨑éD”æŽÿÔ».*F–.*D‹@ÄÒ¿>$Òq™»!R7'gâ¤ùßëüdy”B,T¬)0#.ÙôâŸ*»˜r9Øìý\ix0XF¡' jG¿‡}ùv˜ ›‰œ$„dÍÄb[}ön…£-@^€ŠŠ[kHŠ4¶ÁÈ5•>ezñ‚ÎTáä®På^ºò¢„¨’ÍÒâ• ¥T¿ V~±p¨òç)±¼†‡Và\ Q3_EQºâ Š0/ Ô·A8³ã;üó\tA’¬ò÷;QsÖî¢8âÓ¬ŸôîÚµfôrxl›KK3¨ÂiMõõ¾™zö'j8d³sùJ×1Äîf/iÄ¡Jµaåˇ/<ÿesWû h&ÃÛøjÞ=ÙÌýØ“—I«iu=,LŸ'VYÁ'½„¼ŒSMõ«IvÇ*L ÖO@÷0ÙJƒ¡Æ!ûè_\zzzrvšy-€÷¶€æs‚^Ð(”©ÈÕnüÿ@®´½xáªg çÅw£E+.E-œF«Á} ÄÃ%à‚êø‹•[p&´p7Ÿ¸WPàj9Õ (Zn‚žƧçz†¬‚5Øï€Äy¹ì• ÆXnïµ_0¹x”X½NIt¶ä?ȯ•Љz¸ . OŽF4Ô^p±L_{úº‡ff'] =å±vt›õv=;9z¾ìè‡ñ´ËœîI«‰…7ëf”&¨"I’¤2 ¯;wú죲LÎʼnРµ¾j“”J±ˆ$Ô­ƒ¬P~s袔Ifm'žñ¥Ž¤­øf¦þß’n;i#Ü †˜½³ý‚F§Qý¢¸³Ì:ÉDɱ1m1@ -«¥4‰°x‘ÎyÎ@Á¸àùüïí~skNg‚eÚ¤ä/ì fëz(ÚÀ)òpÞEÎ/n¨=ÒGØÀc$WCĦ :f1„¤%içx1ñ å0Qý^]á¤9‘RØ·ñN¿0²ºT_ê6Móñ‘pAÜî¡h©ƒT2c7®Ps׬¯on6âL‚†\èÃó)«yÕØGˆ¨¸Ý½ƒ¤dÏ´ôóA°ÔÒ6îA}Ö眸¿“5eëLÞ¥¶ý)ÙOñv®%/x”)OlÏÏši¨Wµ7%õò§Œ¤*®Þùd~Ç{ìOF7ò>EñVÀlŸÇögýdÃòûÖÇTö2—Œ’­×ßzá& gJ:ÁJI­ Õß²ûzÇä¯p.…1ø3:&Q­ÓEÜÄ (ÿ£lÞôq. dÎ] Tx§©1kçÌéÞΧWª¶©Âôïìº9mÝòz²_óÜô$n%Dç°æEŸ=}”?x u¨xµ¦irvcX`˜üÀ¢Y?xv–]“½T’ò„Õï"euñ™¯êKuœ&pL”UMi‹äºø‘¨ª+P‚ë‘(A+k²÷Rˆk;;À©‹QZ›¿Á$( ^Ú¹½‹k€Ÿæ°cÙjoy‹žK)ù,IñÙbÉ¢ZHx[ÊEK’1Pêðþ{áúyY´kTë{AA`º¶/C+=käzÀõ ã ­Ü|¡àIÜÈáJµ7Ÿõ¹Ý/ùõL?LèԳ#·°H®êà•bëQ…è)U0Wû½ÛvnA>è°iÛr…¼¿MóiºÚdÙ´¾/k«>T_Ãp,´ú%I\pödlùšåò¼4üòE¾Kàž2À,Å mhÚ,«ç.µüÓ±ýš3¼ÜU¥Ïsë­Ùg5IzÜd!Ï©ö¼aº.⶧̉FT´üžÞõ,’p–Qùà €(XÁ"ýÖ«õ fQC££OŸÙrBxá3ž$ P0¤b˜e\¯Ô÷¿¾ãO„ô£}$ÀZÝØÚ^…¬Èè»=‚ìMØúXŠª½Ë½®zëG›ÙïôÑ1$¼d,ôðð’BZ™ˆqZ-UnG­&%q)Œ$Õ>Pa¡îxþKÓpèmf²Éí¼2£Mæ¬ ¨E–vÿ|Óñj—²ÇŸZÐVýè z‘iâAûkˆRj;ùìB9Ù3L¼fÎi°ñ…m©¼UªºLÝ9,šñ/f`¦&/ë«þ&e™Šâ¨(Æþƒ—¢Dû —Æ9Q£¼ÅÖÁÔ/f™šË+ê²ü-¼í^j&¿O鏿‰Â›—#öDS*u1LÕ`º,¶€½ ÐÚ.l(PL`~ø>“=hÓm5ÕÅrÞííp‰F¬þÜîhÖ}Þíèz¥%ë_Ãt¢s¦µ«+(«÷ÃOT€¢' yœÚ¹œ­¢½‰d ßGò¤Q;°9/ÉÆj€ÓÂ}}„¼®i'QgÆÁ{÷CÛº<À9’@.÷üò²sA¡ƒjhwæÄé¥NŸ¤ ´ï³_cmÝݘX¯Z¡Áv Wáå$ýtÄ­ïy•Ô¥ÏC¿hZ|æÆ ¾ë¾XÕt7ž­÷ìÅ3Ã4)7|¨hÒõij.±xd~d˜%u¤ ŠQm%tIϵu”{¨œt…pºÔe'¾—£¿×ÉÌ=¶½O<áú‹¡~=Å»d[ Ù}¯Ï¡€€òž?G·3àÆN°Þ¼Õâ î1¶ ² Ê=nÛé1ÒÖ!NNÌq`S-‘‡x|zr/1Ù~ùˆÓŠßö-ìA‘úB|‡²haw¡ÿh´6np/j¦9‚?Œ4ݘ¾¢Â©SŠT#æüò(IÜŸIÓýŠÊed8=²©»ÁqDÎÏ%zÐ ¹e/[J@¹=éín쇇4mÙÞ\^ÒÔk¢Š|||4i^T¶x÷¦j¸žÄÉ;â3™ÆÉß`wj¼âºT¨±>ïIù’ѤxšÈµæ?yZ1cÇI-+ÛnµkZIu`öÿåTÒ´"ŠW´µ¶}5ÙyàÖªJZ쌱sI_37#‚¦8Wϳ•M7r*õc¬Y®º7&˜½y,š³²êÅhÑ%%Ï¿×ÖtŠÐ21/-Œþ ªÝa@!+`Â%ÔîüÝDçÓO$*†ƒ%Póƒ± ¶‚“悆JÂòû1ü­CPÇtCµÆ"íË6úç‘Wü ‚­ÂÕÿäÐñ°þ—ë¬w²â°®HÜ’_AVÀñ€f£»TýÒHm˜ëÏÚÙ„½Ö´•Ó¦ŸÂ»ê× V|Âã·.µ-›Ý(¡.ò`×Ýtw'%îãÁÙ¾ ÀgyM<§8*djW–Ù ÿ‰ó9KÕdÍ/j^mfÁ¤~ •»WtyÁåóUáqË¥¡:E@¸J†Éyí[÷àÕ}ó»À惺÷¯ó#°üI¸v¼¢$¥Íj¢â8ÝNΞ!Ó†¦K±= #)±[¢aA:6#Ãøx«ç¦¿ï9àJ·b÷t-îÄÓ=yÆ{F)§Ñ©ä·øâõR·ò¤¤Gy‡CxØÜɺyŒÉäQ£~H(6Y_> `>诂©p*2= ÚvøE÷òûX_§Òä¤É˜¿(æÅ!A=~4­~¸Å.™æLN„ø¤¥½¦U/ ݕà9Ï_€8äÞý}!pÈÑfð©^YIZû%M¥r1 'fQûY³‹ ÒxÆIG3í¹eÕma}x´Ȭ§Gà+j_ ÜµàC î¹p|Áëo0(2×OtŠ2‚®APQ  sQâÁ\ëšµ&]¥=T½Â,À)Ϧí_Òs.ŽdhŸí¾ûA“ ² BÔ6´až6å‰è„—šWÙ°;eŸÜ'{}žÞÍ5°G»º¸xŒtó¥'=IÞSÕM[DÔ¬ÁAp‘E͵üÖêNJЈ£„{²piÀ ö'(¦h•ž¼‚“Y×ÒDÁ< z(²Sçl ¿=LÀÃø °ÓWñ¼~·y 9ÍÁ9”Ûp[Û;²_6} XïYgðCfv‹ýŒ_ÔÀ$ñxŠ/€ëô^•sÃÔúT¹ã™‚ýRþÔS°bѰ¥2nmÜ¥y¡Ï€uÛ,­[â¥i¯ehˆ=5=½“/ó|êì1{VRB¥2ÂbºýÓ€ƒ0¢°uåNŠVÝ{ÞúÔQÛ“Ôó½×`}ËGN0ÎKÒ1O=¡À Lë"_¬îp MíY¹––¦U¥Ê sݤyÓ7Ǻ°®»Åœ—‹¬¼LœTnͲûÉ ¡¡¥ñ;YЦ7fd\O±þaBW úäÁãðóÑ>;V1ÈŠÏ–p½ØÅãùÖÔNÒF">iþTug4üØWóšPlºHÜ8—Op€\yÑ2ؤÉØs¡‰‰­aÎA¤¥ßsoÎÅ2Ð;9¢¡Ü–ëE;3+çóHXI+¿`”ixß‚û3äS²•0â\4µ}£cÊû©›ûöòq¬ ”*—l‚—Òg³æÉ );o¯m–¤¸ÑÓhµd"PõU¹cî’sžeëUÛA“|·ZÊ.$̧K_ðà¸ìZ2ƒHª'˜S‡éG!õ‰šŸ‹TSÛâ§½LN—ðênt^¹¼ŽÉdÓµ‹Ø€K>‹m)êü}ô[ÂÿRg͂Ջ„HרçRŠÒ9o© ™äÐÆÂÊRÍØý8å=IM“ Õ_ÈÔn·œÎ€ó5Y$v?{J2ö>1z¼ › R=FÅ´ùKa”?øbÏ'à|ÑÅfÛÅØMÈspã- ö*øª·‘ZÀ÷šw‰÷s%=7øÜ[vzÛôî^y./Ø>(|º©WGœÛ¹Æž ~L¨ÙEÄBë |ë¿ô-—“ÏsÝ‘!v-5ÄaÉáõ‰FG+Fê5"nÉåÒðæõ"ã+¨½"„PF¾ñ=WctÚžÍø B¯£•4ŠÊÄ¡&âÖûW‡TæÇþZ4’˜ÝÊc?½qží ±,¨ù'«›F-#h ¤âHP!,0DD?ü“L4’qüLw½¿ÞßLOWfòM]_F*A¸• ¼§/©•øah?ãä(—$±½%—ò%Ù(‡ºÇ\:®¼\rN ¢ðÔ{Æ£*&劒e_}¬°B×ø®Û®TIáÝEž)Ù™c$BªáÞøW;f˳ÈÅH©¨ÑzLa‰•7­¡« {Ť>ÝmÚ¹{Y‰•Q‹Š ¯†™bxõ¬§†gŽG𓚘â'ÈJá Í8\Uêw²3Öèéíµ&‡Ó‘®”ã*ò7ºàMÀ2zÕ,å)j¼HêÖOk¿ïnYUÝp$át[±yOfæ·Ï¹÷]c>:ƒ¹¶4"@tWÇc£cãèOš­b!Áp*dÐŒ—Ùiã†ÍˆƒôB#Ô’rÛÊ…{våNï…¢¦é!}[S>k+f/$&ýÎ qû”ñN X(üsõÊ6ò(™þ ¡†)€¾Ù¼Xú Ë$r)[K¼¯úGk±ÇpÝ·«6ûºˆîGü“pQfÁœy#ÑR"È$² «±T³xOÛ­HzôeuŒz§¾û ?ݯ€Í/AjÖ}¶ù/zS视c€·y@]³“Ô&;u‚Ù«r€‘È#k¥£õh˜‚H#pä%êWÁÛÏÔqŽÌGAV¹W(0 q€~1Ÿ* !³çáà®!AJ‚ç¬s–më‰;cÄr]¤eòÎø†‰ÄðÆ‘M jï‹7R¸r[PY”THMá(ÙnCKVC  ©Ð°ƒk6¾è[ïcgû£áWŸÇæËeþm¶³п>•(ÉGcyÈ¥MºLÛ¨zéÒJ€ê“ïÍŠ™ÞûÞÞó9z½ü|å“‘·(,VjzŸÀÁûépp:ÔµóÐDp„HÖÌÃwC`ÎðìïáùÕX‰Ëæé­e£ÄŒ¥GÞ40v9¾ðGlÓSqedY  qz{[û\~ìårÓÌeo‚æ24Š’owfIË}¬ ùo»ÁŠÐv7éÌm´Ñ Û¬Q~7Iq“<–@aªÃä3„$ŠIo4ù¶Qv©ŽàÐ¨ÐØ”I¶.<ÌÒ-jŒx{Ù—wlqßÏ7éQVìòÃþ\ƒI+l5GÎr1Ëh ½™‚úµcħ¨@\EÕ^‹Z–¶P¸b‹1QßUp¾Ù-Ã\Y¤˜žr×z©.Û9EÿšÂôä&1ø~rÍ~¡CÖlRͲÉGµÎ‡…é)1Rй«"»5Ƥ5sášÕ?§­mTRsS·õÊ—ox>H«kÛ3P¤L0ê0UîÜ´l7{íÜøžs… Ñ`d¾dß´aT?´¬Fã¿mÕ_´ÿóÿd“±ñ€ûÛ îªš€ÿ}äO’ÖBãwIw¥'{ŠÉÊõÍJdDZòa¡Q14Áƒ5.ÛôF³£â†4IM¿=#±P•´/ò$`BÝ߈೷œ·²Gx8UlÌûøC‡A×úTôÄ­n’»_—ÿäÁúHÁYÍ®›>Ï)\qô„¤ªtïÆ¾b)ž2·m·KŽgÄaòfòþ±•2qßûN´Ø‚¬i§©âC\Z±Õ©IÔSü=yºZý¢ PȯŠi@ËŽgà' ´ëÀ:.öýB¸½yÙYÅÇ•´c;=× Y9¿p$Ú|ašÇ‚‡ñ ½§QçŽmÈ™ÖÒÿ‰›Èº_Ø®‘6„­ÿí8ð;?Z±ÜÐQæmŒäì÷ñî m¥ë™‚äÔÍ”>æ*þUŸ>ÁF‘RC5w ¢ u„¼¾?õ4áà‹w¥><.4?*0˜>!Š4ýðe k‡á?Ø‚†90NHsý…cëºÔ³¶²pÜ—lK±.æ‹—p>²h››úvFº Pýu«_ÄZãuºG´T–â i ɯÖ]Æfíáù˜Ns9©;0LãÆ6Üœà1¥ 8Ä%aߦà!¼‹ÍØI{òÈâ-Z–‚µm1ñk䦆£‡Ú™"àD¹ü˜cÑ' ”†–a…9†ðiäTus˜ÐF»Á$EH*ì*F¦¢ÊÆ_“©ez’~ª7ûfÜâV—;‹À×r€ª ¯½WÛkÕ$è5Üt¡Ì…ûÕ'¿‘Ní/jOpH•|Þþà/JG þ©À#¬Ndƒ"¶§ÓÆ»/( $‡R¨D7º—®…ë0õš§þ; àg£tüÌ«‰V¾låY¡‡õ= `tp!¯˜ý‰…ðâšD.÷;t–—®û#›,“Þ!5Ñe$Ø«§·ö&6hÉ“EP¯hO#s–‹¶øfÕnѾ½IV’'aóNˆhoˆè-û5ËÝŸ6pÐr~Ýé=ĘÖ56¬1¶fAƒ(^Ö®0Æ=šÞ @\zùe%áM®v¡õÞûKyBe¢Ðû±?梻 @|8ñ£¶Œ—"”hÐÒÁú`àRcÚiÛKž]ìè!Ђ7©5õ"ŠsÀ¡¡ÜH‘.¸ùÔuÍ-6ñz¶má#¦ŽìÚ²ž†Ü yvY®‘þ€¬zto–úøf)~äŒp Ê4ÑùpÙN.&HÑôØgïQÖk$¬WènrÍ îMRe’' ”1ö6D!kÛðCs¾žùY#¦õbbýåù$µH•R—0T蟩<‡™„ ûªÕ@„ÔÚãìöNQ§d"+âö–>vçZíuFµæRnT0ãŽô‘]c&)‰LM¿w/¥sœÜg2ïçö¸õ±G+â{-Ãv@iþB%R°°yÍá”ìË­¿¯ë)a8]«nL x³Ÿ½™ú0™²±è]†0éOìFèaˆ‚µVªó’‘ 3Ñ>¼–MšQ¢Ì2ôµþ'â­~ ýa$HÐHá­^?J¾vv7‡cP[…õÖ·‡iÖ‰n:…ùùx¡óŒKÇ›RÓN}{„[z€×ˆyFH{§ ³iÛþz¨Z¯·—}ÒŽ7¯Q“ç™*ß?¾Ólø :ˆ|·¿FÎ^>"šJý*Vož.z–;²®#¾0žÚ‘E[”h«¸â,§—SO­ºUSO]|áq¥RõUý{ ÛNÀeJ>4?AÊô)ßÞ°N±Ì©Cç¥-Â&)€i€wO¹ò‰ô¥ÿ˜—%F3¤[÷‘uÇœ¢„ä—ÚíWÙ’&è$,^¨/ƒ:´ÐÐß_%Ð÷=m¸­öXq㟵‘¥¼t†x Ð#8ÝŽMøS¤d_Y7 MüÌ’ kvNQ;9 „£ÿ¥Ï‚ §ÑÚòÔ<Fw“ ÔaøH¹µ½¸‰8ùà5šüÜÎLÅú‹áÆÈ“iÝ_? ¡¬’ì6ú‘ó^^Ž,I(.€0Ñ¡q8"Y$²ÆzXˆžmXS‡üOÊ"וô[ˆ5.ò)ô,`xÁ.ÎÙH¤³r3!Ù-ÞÈ`¶gf »„g+ž²âeÍ&Óe˜IÓ×ÄŒaXVKçÄÁ.÷À²È:Q6ãÊv†t‰ª¸É:ð[J ¯–àÇ÷; xà$ºâ>|Ò1T«hè üÛŠN¢±Aª»Þ4Ø@=™4°–*¹»(çë¥ò«Z‡6¥Î?ÊL´gçÅ;qþæ⺷•q”©Ÿ PkEÖʇFËŽ CßaZ¤˜Ø­FËË4< Ž$*@kÑœ_üÒNU\#²Ï²×3Å{AŠüHSŒ£Äœã•¡L;Ü}Ï<%lšý,;Å—Æ n*M>2T²¢(9¯J¾0Ñz78ÏèÀô!¤úÑ¥Qaìóg™—Êŧzé\†_þgì>8Òš@×Uoµš³y0ü¶ýܾ»%$HKŒ ©ÍD¡v—’ýµ!ûþ|…8"'Ðü°TÉ]£Tô;hw®l;SÒ–AR—&‰òaЦ»`MA½óCú«½N„•qv€Ý×óš¾õ9ïNìàñeá½Æyy FMTgéâi```yCµaÍ8²²u7²®”fžE8.6T„gYg}BHN¨ ‚ÝëŽÊX…®â2$L¡,Ð| ±p}¨OÎHT7÷H“ÈåI¤ Ê2é…ïø#æ"¥àR0+ÀRëyYèP)ÓfÏ+«… eê/+üoÜuMü?S ›_‡»À™Ÿæ@ðºé5?Öú·CVlÑ%ÜèŽ<=[Ž˜(ôû×E¾ë,× A~‚ÆòüˆÅ¾ñaW3~‰<«e€J%ûO+‡¯³¬[S•ßE·xfõ½Â™ŽFº5ˆÀF›î;-ÿôÐ(å—R6x2)ç¼hëšµj…ŠÄü›€vÈÿjˆPå»~¨Â¬¨~L²¨ÈwwhúEº­—áåd10Ä`@RtÕ ½BÕëÞÛ.—·„cTX4\Cº”¶8 uâæ˜œs\E¬x™æÒÜ$¦êÑb¤r¡g~¿A ây]ÏÿU‚æE’ƒ2WÐçhdý×È™™ó§ ˜®ë ÈVš¹xL[T|Ÿ`t¾9L³\C ÁukIA|€¸ RöËô.ü!iÛèÐÐú6²Ó‰«Kc>0OÂdhL§g¬dX˜ HÍïG±e3½³ÉE•}Žn~ÉP¬H“YÂ÷=_»ÐÃzÜx>Ct,YÖY™v5¾wñ®,}Y~µpVñ­Ýÿ¤X#Ns «ûdï‹¡†0[4«Èd=xÆ¿g!•ú**càHy»+ÚJ,.S«CÞ9ÉajV'ôÐéÇCnâá ¨ìqšSx©º/è±Íñ ÐóÅ…Dï¨÷+¦kƒ@“kWY\us—gcÆ(µ'ÓAä5es—¸+s¶3”|¤å`l?çKT¼­€mzèuŸb×€2ÊêB`T`ÂÃ0h¹44ܦ‘ã. ÎzuíoŠ’Ž6}BW‡•N­þíÎÔÎÜO"’ÏÑL×D3Þˆ“dGýc¨Ý²1ŠÐrTh?4iÊß6I¿u–q‘0¹‚¹ì­j,—Ð;L¯\môÃ܇qä @—é`º½B²¬¡•Ù$l1EC¶-RqP4Eüˆ „~A|Aˆg†N/þ`¸5VÏ)Ž#!?8a.î‘fÑgÅ3hžÆ(·kÓkZ@Uéš]4 u“Šh¦åz†ž•º@‰ì7»³5ÀÍ[¹êûÄ÷)ò˨Üâê nSrÍøÚË ¾© ¢;ˆ  €ò;»Ú†r¸\òørWa¸¡æíž`£ß’îaí9Ó2Rݸ¬DŸa â^˜>[¡5as„Ok F“†¤<+ò©Ù©ãÂ4øèR[³bƦ÷·{ȯ¯ìòÓ‰šÙ8%„V/nŠÇÄ|é–V(CWi3 Qrðß(ÅèüKÔ’|·&·L0XÃêÁ&cÂøo7Ô+]À ù½ªîDÄ«M=5 eÚ|2vÒ»g‡±%;`ðX4ìâ0ŠfÓi:sư£špdK€ ¨Ã·h%6¦Ü‚NfØ]û«E‘•ª#Ÿ¾þ¯IœÀÇL;>}•8;†< 2×çá5;X´ïâËæƒÈü‰gíÏ}g!•ý¢Ë,Ÿ».°ßÂK[ R©­Ò„<YdƒèÊ•»‘oŠ9"c/h¿gÖö¤e'=À/H_ô׈0`÷S¿ãJúÚ$JLtœ#mT&?ÜHè8jršÊ·Q9Û‚îhâ¸1c$“Ûcfóí4óëEoÆ™—¶Õ3qþÜg©žfç_¾ñƒ…b+¶`4çÀj¡ ¼¥åqꔊ±F”Yè”’SbY`6*8±›9"Ë­<òCÃ…QQœàŠöúÕY±–ÍÚãóƒ!î Î%â¢3h@ŠcõDŸÁ _‰€cb~£ã„x ô ¸0(+2SYJÓ5§È@fì—h™’A2;”òý±B2p"K‰¯-ie´áœÈAÜs°TÄ¸Ñ ljÈíÒŸ:ס]› õW" Ì|éÀâÖ„RÊiËr®°ì}YÅâC²1¥…±{§3TIδlÚ4g2¥}‰C§sûpn¤TiÙN T‘¸ø‹bÙš®…Ÿ§ò¸Þ¤ûO77¹¿I$85s;5ûoVü÷ÉÞê)¸Ë¹…v,œ|®—¶ªÎxÞËrå./8x0ŸÖÜùÏ„e/tɨø7jQ!‡»Öñ7²PÍx+Üèþ£•Îm|ÿÒ+î_ü§ôëDï5Í=û»Øž_>\K¿´g[ÄR¶:{ÔÆ´6GMêLª®KO¼Ë¼#È\c ¢ZøÛ}r›µ²5«/8£6\NÜK@~ÝŒ;ê°Áö “›4?k¥ÇÁ¡L æëãÙ‡áȺ„ªÎ¿ªœ¸“óEß|$Î “Äò_³¡9îžÍ`" †µ®˜¨vrªÇV «BZ–…x5‹eþAì'“¿µhöÑ "Ö@‹Á˜*ƺaþ¦ñþQs{‰mÖp©xn–¬ˆè–ˆvH±ÉwryÓ fa)Né˜w“9ÐVvkÞõ[BV!åiÂìF»!ƒðlò©XwÔþ¨=«Ûýœc‰Ä^ å‚ÎðW zs>Í~ý\Å…ü`’õ³Pù RŽÍPK¡/iºX؉N/8Ó«¾¦züD?U'‹›ø_óŒ€Qgš€qÚH˜2‰`3;±íÅ–gK :®*±Ñò«Z`Z?G‚vÙX% ýS†/ Wg—)œÄW ”ï˜~mˑԻXã‚ •¬ î†é£È{µæQâ›_[[©Þß2„o¦ñã-¶øw×ÐÊT]&§%Žž;;ʴ齿ªöŽ.ð$²'HBÅj·lµv4²O²rr „5«‰‡rÞ²OT¬Tºòa! ëó‘ú!ËÌï-ú}LÄE$âõшÑîpª­êK=Å1¸Ó{ý•Ô¸ˆ«%ëÛÌ"›P‘¨š%jN þ$»·ŠüÒר$ÒÁ5®Äª OYоo„®mmL! j$8#)‘î¶[7M€y¯QuÞ­õ¸‚iqÕŸV7—ïúžï#ØTã 8׆ôŸ*xÈûbhD¸Ì6Šb}|œçµCQ\\˜ß’~ubý•ÜÔ€ÞIÓvÊ8®Æ³ÏCñòà˜þhä’+Ø?>Û*b=Y)°¾ÜüP3)M–r5D–B8ì3·gG«xS÷Ñæ¸Ž»„0ÀD…û÷Z[ì¦WÛŸ.ÏN½+­(?˜|à ñƒ3š€ô¼Ç Ç:±gƒ.YgþXá~¯)®ÍK{BÈákfvö_Î=UÏUÁ\pçÊ5O30“@_¯S[… hylí'ên\@„Ãh öî¥ÞB?©ñ°}œv øÎÌ9¶ËÅ[>Õ¹SÝ˸QÓ<¶ä¡“šËèÑ­I^ ¸{D=òåâ Ùb•®Òqåû_R,Gx:ç“]ãnÌaûùmæŸ\°+ÐNŒC¾†WÅãôo¨<ÚIÒ<w5@÷ŸiÛß ˜²ë¯[‚¿úÿl¦µÐcSö]¦?Ä‚ø`vÝÀØ;e×É`Üì Éj8KB‚×øì–(ÌzÙÃç$ap½´ìxY׋û‚0½î!ªS´×úÜùÞ„i˜¨$!R´–%=ÒïÓeÐ:L„CШê©jw£”çßR’¹h6ÏÅk Ò’«™lð ÅÂ?(>é¿›[Ù*+1‚ g-›GAˆo«;ZJÒ‹U*TVœµª’?ú–œ¢¸ ºð=šmô:;ØÙ¹w3g±N¸aîJÖ‘’F| ë… ³ÍÂúôùñ±§8R¸³ÖöD‘I3FVÒ?ÖÓ¥Ö¶æMm¾ ÓâÏúµ“3¿I°NTž?J¦ãhÜŒN©Ûl!ç΂%v- ¢&R^h¢åˆjÏ·Ízÿ5a)4Ž˜R@T<÷‚ù}¿ˆ¶W—:±Œ°6o#P*U§ój™÷Õ$ìÙÀ8ˆͱ×P8³íÎÙ\X„~,¼¼ìõ±ò»}ûȶqåĽT–l°ï—³^#/<`„Ó(hnéa\ÉhJ«óŒa·ñtº+)À@·¿.$´Á=–*gL”ÄЄ ÂolÑ,²®æÆ íôï*Ï›¨ ˜íÛ¾|svžW]؃c÷‰‹èZŸ¿c»T0ìÔ}šÂMyš ‰Ö*×,ƒìo'ô™±†ý j³5#ž©¨=Z6Ðâô#ïp®}ì³|9¦gà{9ä" â„ÃÞª4¢5ùZ…Iç÷h~Œr°‘>&_0ƒã=Vzʾ Û+Twׯ‘­4Pü,SUí·Ï“Ô¦“F~#fÇ·¹•hl«¨ú¶j¡*I&jà]£ N%Øî ˜¸Ntv÷º ¼"ðYШð“rƒÛì]¬—AÎa¶ûÿA”*à×u³AZ“¢7Oó~a‚ùÏ8ø­ "ˆ0®2cvp±Bƒ´ÑíþŒ/Òò6 rÖßJ€HO\ˆTÚÊ2'3Š|{ÿº^àO —1²@¾ƒ>!!'ÂøH%S':hñäO¿oFУFÏŽí:McÀåœK†QDšjVˆDâ)šÎñ¤¿>=&¬Vcúï4_â0dÉ2›.݇Ìë[DÐf.>.À®;^Ïñ½I”ŠöNÅÄ¡F{1~#Â2glHá0fT?$ Öß©pb_\Ó ±ô¨ÚsM·&™f53%Šo,‹ºéðÁ†õ×–†üÜü°Ž“6Cô 4%“I߈–:Ê ‡¤”qçû¸½Ië‡Vî|Óa—Ëu‚}ŸÞ>:Œõ&¶Ô˜I‹=9ÓGI8Œ¶I½ÕõT??ÉïKnå¸r÷†$&Ágýù-»ZüÖìD}žj´¨î¬eàãú¿Cù«Ý¸®Ï²5 ¾|™Ò¦Qãrºf=¼ïƒú•<ÿl ÀúBb)ÇÖßÒ‚;ö7F¢©Ê瞀¯áþ:z\þ Ôÿ…Âøì…$d¤V  ½ÇÚá4¥=Eø²CXt-ûòVT¹œ,(¿£8[ø"÷æ?4<Šð ùÝüj§¿4ŒFÀiD„Ìä;l×j¢‘%+Fæn{Í6æÒñå³ó=V}µl,½|¶¡4¶v¿iO°j&*4ŽùPÍmˆrÊqÞB¨æÖ>üœÈüv,4ô™zcÁ×…êuÞ²ÇS”„õ¸»ö×s\•IpÖä°kdèÊ‘€„¶ŸƒÚ9©œÐsôm¥‚ËšéìÄ)Q¦Ú0fÕ]g'7ëHZ" Q±¿`=^¹Ð.žiÒaÕ8#´‚ ÚéšHfr׬E)uV˜eÞ Ëwž°E§Îø@À.] ú fx¸Ö+·~x7÷.×"8¹ù´éö П‹ü dC¡AQXêÉ0ÿŠª> ZÐ(B… ÛÇhHõ±û1€íÇãÒÆFABÙ×ú@n9Ù¤ÐI°À~Ð#4Bpê÷’7ZRQMóÍENâÄ­OÌHLLÃâ‹ô4©Àa¹ØÇH·8„5Jþ@„ÏiU“¿€ø–¬Ïn>ü–¨'¾}ƹöliHfºvµ7ã¥a.°â\•ß„°þˆtõäñHØ”­ Ðÿ1Öé`ï¹-ñyV$ $Q 4gÆÎ>! d?iÚJ±«¡Ÿ››;\T„–Äþ3Ä1B•œo LWLRÁØŠ¿ù±_½²¶€CÓ¶3üûnøØ„Ãk4cø ØÄÇ.%˜Én¿ýzllìg·î$‡=ààDÕ%ÈÑg?’Œ·mÞŠ-Jçvs7Ÿ¯…@V63ÏzÓóˆ9s;±-kM ÆÓ¦|ÇÊøS.~€¨Nœ Œù3½¤Z ȀȭÁéùàR"éÖøÊ–¥‹J4ì’¸æ:,ÃÎ:ú•M€8vÞ*hâ¾~_ú%wœlÔØÐÜÐjøÎ‰Ò­Õôt‚iµªcz‹¼®l0O^SŸ³â?¡ûª:ƒ˜Ô7cfæd}ó},YªóÄŒ4´˜yˆþ Ø¡y¢ÀBjÒP‘VÃøÂ|c00,qg/¯Í1:¹Þí¤‘š6ØÆ`‚@ñôž= Áô⺙HÞB?dšŒÙ!Ð[øDaUëcî %ˆÍq6Ñ_J[5hC‡¡ ç–Rø~MO).Eø¡ñŠö±íUÖn#ÔF“å e.&sLT€1Ðn²…t1,1 ó†Õ ×hW:¯¦‘Ù©!Ú ÞÜq¶ìŒØÁ¶Á…/;Αú„½¯¼à›mÚ›OM&Wô7˜`÷#Ô.ÜO‡%—oO’¶ÛÚt õ݉ÑÓuAn€{/&“Lƒ†àªÝåƒëÉÒ–eÍÊUºîœ÷NŠFÅgY.wgŠŽpÎû?žyŒ²ðu:Þq-†ŠGxk%‹‡*Pošƒ5ŒILÃ*{–nýÜt¬ûÚÞƒfŸ¨»‰ˆk§¿ì8ÀµøZbËDú‰Èù^2¾8álÁÿŒv HT¼ij€lÍK iº(ˆTÍëD!¥£’e%AÍÛ[ÝíZÏŠÖ»êyùúÌBÐÿÉŠY©¶^´í·LÛØÐ*ä<ÜòGa¿@ćÐúGªÔC&ê0Œ’h?L ¦tf°85Fu¸×é$òí0-ÀýZaHêÊ„42ï(¾q‰Ñå"ÍÊ¡ElöŒù÷ªözì±â¥ÿIr~ÇJxÌQ¶'½NÒê¹ÊAÅ<¥»pqÙÍ83ïqÍIÊüO_š¾ÞH3猨¿÷†Ìè ìñɪïI†\ó¯ý¬n­šýWl–kpFåšklN vç¤ÂÈ - q7Í&j(Éã:$%ç¼Ï©VKažð‘ !,½LæÚÐ/qànñŽ)ØÂ8<©½ð?Ä5kòŽ­™~V‹­h±÷ó:ñ`C>”™¤$I©[¶ù[ƒŸÜoÂP(0ØÙ`Îÿ •LMQù}y6,Å(IœŠLŽ\¥‚RJàpŸüˆÏGE§Îdfâ]DdÙ@8Ž9Q¡0 F’Qj1*8©daŸêüÁÏÊ‹Xžmûô¬L–kæ8 }z¢î¥•‰±Ž.ö=ñ¨½÷z‘Ov²dÀƒ¶}ø—˜z’º™6蜓­°©7KV÷4±ÖN…㨃ëX¤±Eª ÞL8†½=‡ñm}•GÆo ˆØOÍÜOSF¯˜Í*Eõíƒ ÉÁXÛcÕiA©ÊÓ %WŸlÅ^ªÓWumß,鄾&NòŠá.þ¼âNX(¹“×Uq»R /¤ÛDâ2Íî‘ýшH˜‰”(¸£HO‡7:*Â]Ï,{_¬ó’„ j ½$ï‡{ pôÒ5—Ì­²("°ÊrÝ¿‰S~h¿Nš «ÌâpÅ07oEñÝï•LJ5³ã Ùp†YŒ¨‡c(Ÿ°í£ì@M;"ßQËÙè|ÓèèT†ƒêß+¦Í$“¾¿öt¯ŸU¾{R_ÇÔÐÎ×åèVʽƒLXl“óRb®Pì3¦Aº{ýŒŽ–½s–¤Z€Ï»±,‰‹Ò[­5úŒ]Õ´Qí»IˆC=k¶z Ôç ’vMy~éè •XNk©6ª˜ùM¼ÚaeÈá Ý´#Coƒ4CtÉ4ƒyWkµvÒØ–4XÞ§Õõò:Æ·m{ú¾nüídQ;;Lùû±œ‹·$†º#v¸]±¦&_£¿£½îÈü Xõq‡ ÒVIžšä›q„˜~­!?~ ä¨ËF¯”Þ] Åˉäy7™€µ˜hªpi3SG탻«åûùa˜ELáoXí¤AØÿÛk·êì²Zv­Kî«0€9 àQŨK…®mKµëEͬÃF9€º„áø¨&Õ·˜ }Ž£òÏ›ÜÀ[’~ؘ^õƒ‚L2thW]¢g†±—v'ZÑ’æÅšê‡gÃõaÃÈFÖä'“)sVÉ/É3sFîÇ/Lß“ïk·ó,P«b^Ÿº°`V§&þ)ÜáÙwkf„Â2¾³füª_}ÓßÔÂg 4ƒÓFêQ–1_ú/Gʘr:7¯ƒ|_ä·Ö[Œ®9O³³¢ gÖ>’eË7ë<T—Ø«|©SÛxö#O>+¼¼wL ßvÍÃfÂýݼú裨æIÁLˆD«µÍxi7Ÿ‘ÀÓf0Æ£«\Ï'ºCðéš*Üÿâ•Ð žÃ A!3pó£ï°†[x¡öͰ²fvÎ>€aÙ• +çŸvñäùüœËæÌ³Âõ Ž­=FËÜ\i'Êì+g=Îóæér)ƒàx³Êõ”e†ÃY¤Õ¢¾,×^`ÆsÓÕÃçL-ˆ{-óÎ3¤Ý(Àe¾í‰ïç‹.½ûäSÛü‘Uv!Sìh^Z÷ì6hÑÜð„È Ò‰![Ûóª5¸±vq¶ÑÍÂÒÚ^²2…™Pnn0P§7¯ eY"¡A­º7uc3"³sMøù+Ó[ã:Z® ´Û=q8!_é'FWB,MYÔñsö«ë僂çýCY/ïá‡G×Kp)fµÕ æÇ\ûB^|=§:nÏþrùԴݳ$ý3ã¸óËî»>׬¦E‹L¿Ã®K¤w ž3ÓècTV®¼8±#æ·dÙ?'Jl–ZÇI †ßÆýõƒ`ÂXhQ…ñyŸé'2í¾X›»•EÐÿsz áãØg© GìÏÇVN6ÿ‡…øƒ««¿â)"aÄRoªÕn¸¯ÚPNNåJ^nœ}ðâÉv(‡©¶Ö/±ùךW<Ìe_‚#聯³_¶f„}¤kBÆPV zd_ÁÈd}·4+àÛVÏ×’¿VËYAþ@´Ætà§FÎ ^çáa1{À¤Ò¡BÀˆ3‰1%U}N€bZ¨òô³ëdµ+ÛÄ5;Ê#9*à©Q&¾6s²._eÉF/9µï+ç²µ2¹‡å>4__¢œxF¥¬ªzÐÆd§Í„A¹};Yäê2õ›û~ Z_²,Ñoy€ÅÇǼúœgã~ûÃꇱ¾„F;°0ì.bêéÛÜǫݶJæû>¦àdÌ—Ï íeÿOÈ“µ”^^ßÞèEÚÿj° îÊ÷ÞšðÄ>üX›žn´ Ê*7v2þÁÃÖˆ•fý0þ?iKÄ™?Eø›xÝ[ÍÀCî˜Úz»\ aŸ þÄý~LzóBØŒ`ËÝ Hß®ØâîIf°ÍÓè€z8CLqÆ4ggãuvûFDöAŒnåÜFàÀDQîíߊI”ëÉŽ$j6‹ÑÐ_‡ êxhÓLw›¨åÓ èæ-“Uä[W_W;dæñc²=YË•Õ'>i»þÁsV5J’=rWÝ ½>‹ç®A¶-ÏÛ‡ö7r+¥ž7ÞÚïÐY]OìK(ÉÕ×F»5mOÆ̰í‚'#%ËBLvÇÜp>i•?1 ¹VZž3K Ÿãnokº­ç7ywWæ_÷4T#ÍDí*²Â¼iUØ~9®†6¶33övÅãh3;TvBIdÕ,0ټȴIvŒuº™±x4Ùr˜ÜÍŰVŠ›ÓöÅÒ DÆCv"Ø;÷©k€yIII±E{µÕ†Ë(î'·q$çïM݈‡XïCF5,€,¿3'ƒ‘ô$¡fã±ÐsœÈp„VEâ"\ìý[ï„(¶D ˆ‚ÄÌò“WU//VNŒ_»ù|ÍDß¾÷ÓómÔÊW~•€o.ØÍV?†»'gU±D_VŒôÈS¯N`ñ>Quž}Ñ£97Í W+>©Aß"þz߈"öô¥µf+Le-Ô€¼îaE¹‘Ö|¥h” :ЯÒ?ª±± PaÂé­»(,•ØWËÉÛΪ¹MØNzo zçµöÚÈ%Ûqís§ÀpÛ¬,›±¡æÄß'°ð’Xçœ\A®KÀ{‹9LUxzk‚aà{?¾ªp-»·_¶ 0#’Eì¢àÉÐù:u6iS\EþrZh»Dû9›!sÿê¯%"Ï+ëNrºl»ç¤Ë…Arcòj‰‚˜½Ww*óeq&sgÍxëþ± !Çt’€ GãæÁ„½ §Zq.hßGaàñ´fé6vªAÀ\¨ýDø+˜ *¼Bø¦¸Bš&¢œbÀ8‡È?)Ç­ºÁ}G|§txD,PYF Dg™šF¢šƒP¯¬ƒ ò—CG9ÃÛO¼8wû¨õÿÕ1ï--¥(ã-¤iV¯»óbÈñì ””‘¤üg"–ím=_ý§×Nãù2&k«d«J¬xäF©ßó¢ø$Ó ›øWçMOæt…Zá NÒP —‹‹«þSõjñÕ2–óßý‚J“’‹œ!3tdáÅ£ûs˘®é2–׉ lj(”†ë?iÞÚâr«Ì$ñ¯Ä™žNŠuîkî8š–‘›$ÔZzý¢€^Õêñ¢Ž¯øøqA¥géó¢Ôò¾Á¹oñ8wû8Ú{žXÃçZ>G§‰/Ÿ}ªš²±Bà’R¶ï'N7(Ìnêz‡ ü°.vg¸-x.//#E‰Û4iN—™e÷Õ¹AÅ™˜¹²¦§§e«ünðïÝK€)á“ëc ˜‰Žiñ8T Ú e¦(DiÇ—– Ǿț'HøŒ£‚–ùœÝ¡Wc`8%⡆?:Y¢¶œqïn„×´1g«öî-Ð@XÑuÉQ¨}îЂU¢u¢Ì` sÔ¯¸W]‹.#0c ‚‚”žµnƒ„k{¨{ñoÁ³=ÝÙ¦LÈT`ÆŒôñËï,ÑÂń/éIT”ߣ¯™²\c¹ýõ[Ôº&1o•ül7SÍ2K†ôåµ€'ñ¶À5Èî2T\ô£×€Mö.c€@6œL×DóD÷Åͳ=6”'9¶àPSšFk‡ÃTó‡û=rÔ"¤§ßw.“ºPºâGº¯ÌHA2Γ ä±l:Ù—‡Ej ´ËKàÔŒåõø¡Jx#©Ê›Úöu 8JÏ'àæ˜ œ˜9}|u«§$)“ÛÜ© ™b±G'/v:äiDy†VCö’:™…Á,DÛ¦°U›«\Õ"šÈˆ_7´Ûˆpc‘[üª"€ähD£ÑçYÛË¡—1ª0‹X€ïü?I#²Ár‹Ñgÿ²tfW‰í9Ãv¯¥ çË5«Ö˜åsÓñNªPd¶gvúÛÑØ?œÛ:ãŸOD›íÒxPKü±¿ÿ`…Ù(·mÑÃ{þq ¼q¢AW°Þ÷.¬ ÞÅf±ÅÍw=@&XÎuÐ !2Ò…JJ’… ß%wÐ$â<@ƃ2/CjJ­€æ£âˆŽ­øK™ÃÔš¾Ïý'ŠZ/L¢—¨SØ_¤W)[dIµüQt1êþŸ>;Î|ñ±–óY³L{¾QrxžSy¾©9aü02k]›s¸á2ЬãJ¡º'E½µú­«“$¡~žéˆU÷ YS$¢Lî­;™àùÂú¡rª‚ß.µ¥åÇZ­zM(S80Í¢©Ð-4-tf–¡G (.›ç¶ÅL£¼¤†Q)*B¥Å '3ØŒ`že„ÿÝ`þ;=–Ù=!T@ H<=F+¤Ž)}$“ß1”&ÀG‚c¿»q¢87 êYˆ×©‹@:«}ûpöè$ϦêêÑó’Øñ;Õƒ¼/½,FÏ:ÜÈO„™>]ÚìAI²ÉçågË—¢)êw¤où® r[Rðx†¤I‰ ²DHig™~ûRø¸lS¾¤âo-žÍÒ}5 å0ja´Aåµ*L*;ª(ª†$]BÂ@DÁV« Wv\†ô6&ûË/§›ÉM–$`ó¯?¢Ï…scaÛ˜‘—Ù›òîz»õ5;.¦ydªpy „î«ùC…ã¹\—JÈ—}7î›U2díØ³éëÉϦ°·ÈQŽqsž9^Ny|Ê%â5Ÿõ#ÀV1¦Ï‚ßZ~ 6’¡¸^³ôÔXsJì/Ü5¹÷ž!€ÆáÌè Á1–̬ @ØœlúÓ!·æd¼ºê^¬[P/«`Û¤EGñ`àÆ’Øûãrpp‰•buã`œ£«níë?¯è° ”ŽïKÈóQfâÔ Ôõ,¶éã¹Z8žÝT»T¶•3Ô Æi!ƒ„FÚ}¼ëéÁú@0fPÓfоÅ~úZÎD²uh‹¼•Èh<ûÛ¿òîú_Œ5“«\žoxdŠF~Û¼º¬Ÿ¥}±5›Èqy|« ¨×ø‹$_4„T]^š.<¢ÏÆL>óšé–]ç=Oç*ëó¨m‡fúÏdzçO#LWŽè¿æ t®lžn Ÿ¬[Þ:7pÔÃ,°xX3œ£ï/R˜¦Ûh Þº”fÖÊ,€ôS¢Ÿ–iQÖÜÊ)ÆûÄš}äWÊyƒgø¯BZ­Ðt+Å’?ã*j{­K/hAR Ö0F4`ƒ¿Ö¿V¡üø½¦1úË+EéòãÉôE¬óÑTI8Î<²V·JÚ°{¢\ÿЧ²uûpÕÃJª' ` Î?)îϽ®Š kï­‹Å#¤êüyöavä¹è±A ü¶'á‰}…˜É®ŸéÖ“{}AH]~WªTc/¶6¶žæÑn[xa¢Bü–yò¾PybxÒ™¼}Ì \3yRx{\òÓùÓÞƒ«h§¯B9‡`‰rŒYòõœ—ì6¯0È‘£ªvöšæ:½5H)ÌBüÑ¿‡ÿúH”:‹'.ÑTk@®yý|`ô [éÑ{Ç2Éö;fu‡,¦×äïôÛ±üçÅêåMq–øœàó9(#œ0—fmð6CFTÐÇ„‹'±¢¬¬ òŠÐoq{­‚ Ãþ­Áà3S£ä†f™?Ý+bÎ-$ì/ZâÏ~M75Ž ú¯Ëà»mºnÆvIT¿eŠ>/Ï3;š ª½§—©aE]JøsJ·–DTö/Â,àÝÍj³T!#Ò€?w*Ëp;4ÊÜ)Ió´Ùs&{ßaÌ›‚¾@©_f~±¶!Äj$+8võió>]5ƒïáèó¶Å±n ¤#Ê U'˜Gy3ÿ:+´‰“ÓZ²íÒDQJS¡)B&ª¡rL_ f60B^à>‘ņzÇ9Ѽ$8@Xårœ^=#íÞ,$õråÿ\£;ZÚ×GÍìôB5SÀBºÛZè!Ù‡Û#FŠ ²»ÞÝ‘Z-¨ y5¹Ôŧ†>Õ¤­ÊÈO_'tBÒXhŒòíbÍÚ4Õ¥˜ThFœ_ãªèDf¿¡d¨,9æµÖbÓnÙ,KOŸ%¨«t4Òßúä¸^âÐ^³¹ÿ&H^Õ8ï™*´î©Ð‰“{¡˜Ð#-uj}®h+Zlj©T­„'ÒÛí¸Nv}~ûÊOg5 îfyYMCµñﮦŸ€~tÉ`516ܚʛlÀ/¦¼Iàêo†,¸OÞ²¨lÿ)ÕÀXJ]­ºœ²ßÔC‡Ñ¢¶àHe>érý»òµÿÏÕõ+<ø·Rù4—$l‚Äôs‰Þò­ý Zª×ÁRÿÝ”¿ Àˆ¬ ’ÚÜàêkf+Ò^~úq¡"« •ÁÊ `ŸäHlÖjŸ˜'Qî1ö{0øQ;†Ñ"+BV?Ë÷¿)Ú9“HNMÐ4ÉÇG)“Ãʱ’±JoÚQ`—ìí8Ʊ¶ØÓ'‡‡‡6æbkG_c‘Po™*ÎðZ]3ì rå$È€kODûØòu2~ß‘õà<Í£äCP’tëwuFoà6gŠb''§nfÏÞ™l× …é-åÄ\¼ƒø½Kg„£…¿ç@36+nŸd³­ÇR°· ‚ï†56(”u¶v 3cccm*Ë ¯ÐÃikþ,à³ŸÝÆ¼Kí5aÇ8ÜñeÔ$Ë:˜5S£k’JŽÅ–EÈ/GY’«‘Õß: Ún[KÊ|_­KW ,}4®á=gψå›áY™™™ Ù­€ŒåÖóÍ%c OúâAãÄçÈ}›ªãi¾;|Ë‘Bà€ÆÔʬÊ÷ÛkTÅÄ z7ügïÜn£õhœJ5»\V++eÂô­-Iç0™‘0 ¿ûÐËë¦~zu†±2î É†Òs æOÓ`Jd¥Gª¸ãd²²Ï>/ê^XéÒ:éÜFÓc2*È`ýT ñw Ã'Ûc2 -6ÚχAr;<Ýk %ØÐýgy\õCù½\7üÖEœ¯M»0¦µ%.7Ã7 ÎËË‹( Ю/æÖÅ£Bm¬D Eà‘ k›cœ]²9`B=¸œ­B·^[’ÉñÿàG ²YR£‰æ»ËM «)žê }Ä4ë°-Ô ˆ· Op>èÖpcCÏB¶gÖ§?ã]u²Vµ4s¸K<‡\'L«Lí}ž¶dÓBQ¾B ×É”¼¬p²n°HÇmùšA°%Q7ÈèS5LÃ@'§¨‚&E%¯P»(ü ÁÓû#ÑÄÐ\æío/k©<¡îv1}É£Üų)ˆjrî­aþO¦ìÿD*_¹p`^µÎï»Å<ý)¬ßxCóD]u0æmÑ™1µ^¥­FäÕÀÿ‘¢€ ¢Hî¤FTEA½E‘<õÙÜ4Òø^ºÉ_ª@ 52`j¸Œ—ùA:µ¬’âœÆð¨|kíâ}ÝkUç¯6[¯~ qì8îúåÉ }Ù¾%?½‚fÌ·âàê †‡#W?@Uä»ïÝk‰Í¡¶?Ÿ–†GÞ{žÕÙÝ düdå¯áÙÚ¢‹¤qiWÉ[gÞhúåÛ%eƒ™=l7$Ž_Ukiƒ%óo/˜#; EæçrX[ÌèxïW˜ÃþPiÒF>Ñ÷g†ÀZ뾡»úD`rE”¹Å9Q*Ä´%KÝ¿gùùϲw­M ʵÖËSâwá7´ÏU?¶*1¿8š}ûØ[6ŃorßFŒÆßlWYA}Mfšw´ íÈ[ô!ó¤“]fë4ë~"Æ3ü9´³5Y´‘Ùß­‘;ÐhbŸ#áèo¼6žbê}Ž*§€œí´›µ•ÌáG„ÍLÃi#ò-×Þ…¦p×ó)“Ãafôtûø-žC*Õ@‚éSHïž H<Ö½q/ªM°‚1ù·E_Uþ2€Æn•ÇH ÀÐÎÛɈ€âñm÷à/èKeþ3Ý5XÏgœtQ¾æ²Â[Qp›µB1@Q4!Y»œ*Ȳaš±^Å3ŽWf+%ö‚U;o#·«‡âßÊñýÂRpUÚdEHÎÂ0ÿ(ÑÈמ|Öû•R2…¤@³”–&ÖïJû(ûæîÉì8ÃZÃ;´‹Ùn1Óï!Ôîl@°ê¿’é†Îê6;Z«K†Y9·l4‘˽§¿Ä({e\K»)¡{Ÿzl’s(¯è3íü5½×™ôÓ½dHœúÁ1ë(]üì¿ÇÓ·?&Î?7o5huìKÌäìyo¬ÔÊËÐzêŸ/£Ø× œ—}—יф•Nᆋͬg¦+Ý ÖÇU“[/–©ú6­ù‰7]“âCÚ rsßýJòÔh>HÛ¿;•ÔlØ¢è01ÀØd™$ÇKvÁô[Ëÿ8ßþÀæX…®TAWëª 4ƒpmz(?ùÞåU³¤HL*™B¼Ô¸sߨÝXêÑÉ´:±IÃV•S3;·ºòÀê×O¬_‘|ÃVî¶Â•Üh~íÂSècW–B´‡˜è¼\š¸:½¼ø¡"CwUV·59iKÝIŸµ#¶mÛ¬õÈãž{5qJ%'XÛ1fü¢˜‘Þ©æ§Þ¨‰J;'›{*Xþýá~¡¦í/kŸ"£¼ZQ¬ü5’®ŠZÈÐÓ£†6ÂÕÎ_«Þ®œg®æ]g%*‹í.Mô3#Îùfã÷˧öV–Q«ôO}§Sz.Œ±ÄR(WM¾Äª‰³Ãö¨ %µÿXØcZåüêldÍÓ ½ °i®czÿ àWb­Û}vðþS\±Zbø@R<+ØNëƒÁšøg¸#ÖNÂW–dkâ#=bÆì”2ËVx”•NÄަŒeǶR2÷¨¦Q~;Αåç ^;0´ Xr=ÞB›àºÓÝ:}‡SWâ[ Ë¢6-ï}ééð«É“‡f*°Š¾Ë-LÂ…É×hß ,ÄñKëçP<î>OTÞWzF/?IÿÜ‘òrÏŠKΪ?¦ ; (eHá Ù5Iüî?Pz“í"ç^©µk‰S¬Òï SwŠ+ä,Nc\&”FÏTe;ñ©—JZÌÙªÖ=ÉlÌÚ®UÒ¾Zp©Þm‹àïÞˆfmpò¡¿ÆÇ^hþÕ|Æ;œŠKöPK(ì8aêþãž¡Ìsm0€ì9’6skÏ…vê«ã…m{Æ6é£òº9ÖÜñyG‡#µÓ^¸W>-’êhM½-űþ—ÐGã­¸ªßhŸ{¡uù/JžÏùNøx{AŠ)ŒÄ×FÄùGsš.ŠA£Ò¯lÂê ¯É%ðœ‘ϚؤÆ/šå·v ]?<œ7•ÛF]ök»Ó¦Ç¿Ô {½¬<åj*ô ˜I´zá?’ø°ÜN½‡ÃÔÙlÉ#«w%Â’†x¿&Ÿ óK=ƪœÍYË¿8L&õžâŒå0¿g¶Ñú[¢nF(¹H!ª~ïç?)ªçµþâIDµý}ž{¥ˆü¸£¨ÛÇ&´ÃŠáË Q%"5gKÉ®ýÛ¸@&îG°™D¦>¡zkyãóóþÂôl©B#¾d¤†Vf‚Pòz§^xà9cm®¦É®bÎ÷hÑ­Ê_M­«gÀyE$2$àÿ’æ:­õöË«Emkî¹D×^£r&®8×~Of¶ÆXY¨» ª¤˜“óJˆ\³-–I‰Ì‚‘wJT<ù€s˜5RÊ#òXÎçzJcÞ -F¨5ÑãÄ’û„“Ÿh=Éór¢—7´zb)Ñ1Feá  üm%±íG°ºQÝ~×z9¹Õ÷ ¼iÿóÈ –/âs‚íÙ­#øÑiùÎ×~§^"öc&:aÈýf¿Õ¼Ç Ÿ*ôçmȸ%ÿÚJíÄÆ­{Ö"¹Œ÷ôú%¬á[‰ó\xçr˜Ù1é#pÜÉ'àÇwÙ¾6ûµ:ÅW—u<óûAH‚Šê!2ô;áyMÇBd\UíªîìúÒ a½õyD’#¶Â» zSþü/Qä"Uä¾(ÉðPK}Œ#$ïèÍŠeUN¹ÏüP*öh‹¤7eÐ2K,Ùdkúf‘êcÐqþÖ)G\½•š9•NT±¾ë²VØÚ¨íÅüJÑÖº†%«Kõ¥¯g&€% Æs@O/s®wj¦Ákœ'¬{Ë¢³@ÀMÊh‡Îù[(a˜¤SQ¢‹š«ÙIuK}³,1ß„¡FEuü©0£r—º #¤AãêÄÃË÷µÞXDà8ÂOgÉÀÐØú+Ä€Áý7Ù|Ê¿³ûhoglo^ƒAëâàÔ_¢9ˆ…rØ÷Ú+ô6³àugkQõõ +4b{Ñ­]”÷b“Ú¼Ìpå¾8çÞÀ RÞ~ rFíÝžôäÔ gÝÌK´Za»B ~¤¬X%µÒ:³t Tv¬,·~ƒSÑt^Aä]xý öv})°ïÉžšÖ»¸ë»ódzàÖðW|7WiosÚõ.Ù†#A¥t¸@š~íz@†5ÈnÎvï.dúùu jsÚd²±ÆQ%?ÁèW–úbÌ”5UEQµ{“û1¯>.]‘×’ ¯Í×Õ¼ÁÕÌ3"ráhýíÇä}ò< ¢¦¦&¼X_ïÛ2ÿÚævMÞ¼À‘A)Df}²ñË?ÛŽô&!Ïk²}GÍîì:ƒ³}MÉ£?A„ÊMõL†FìBiª©´:ó\Ä}yIÇJ)ª%eG2:oMVm§Å!s÷`QîÝvoûcÙÆÕüXw(Ų›ÕW¨Áu¡ƒæyIàÅP‹ï«aüû5ÁÀ ÚÛ~ÕÝrY©#{œžj0\"€0jC›ÿ}![ZVN G<)a3,½HS%éÍ|<ÚûW¥ÉD¥­uÕõîkϴܺþn†ˆ‡Ödܿո 0“Bþ²-•@5o2K¢™jõlËÁáúè¨Å[Ññ€!P¡„0A'f;nfÌ;6´}Ý7>NÌ!G´ôšÕò”ƒÜ÷…½¾¦EDv6²§»›ð²a6içÎΚ5À.vçw´é;ão×£¤mw ý ß?¿ú±c¼lÃט­Àìw?Œ®rá _ª—}[kÊÏç‚Å+xzÍrÕ*(üE»¦¼½»Rš¿¼æ-±–+ka!‰’=oÁÊUÿ‰Ì§ú‘üµ<½LÞ]ÛtM‡Mb ÅáË`£ACÏI•´hôÑJ¬éÃ0&£ûOX/Á„\€Ôn:ùYf‘°”Òm%ñ,Í\AðžBÁ@{”ð›#˜®¦¿W!jʃp¬ƒO*…•7£¡–Hce‰#bÿB£¾&÷¶rtKJ»x6$×Ù‡Ú#ÐÔìDÜú+ÔØú©@£î6þ·¯Bî×·ã}7ÒsX辰« ms÷PN2¹w;–Ðþ[_ Ê&í O[gOª¥£‚”tZrGx¦œÂMèó"M¤Ú|ÔšèÿÔNÖËeŽ¢\éȤÒǯM£‰E‚¹Ú(¬l¯½§–x—±“¬qhAêŸxº`AÍÃMG?C Q µDí¤WõgÑKi®™å`ábµ¿1ÌÍ&©TÑÍUʈ# a6Éuý¼Ôgbg ¥¥e1ïÂwF9£Ž˜]uשa,4å£<¨ )̤æADú²z©ëtÓa΢¸ž%ш·\ÈÒ²/ä+ΗÐ竼ä¬ÄåS„–­¹šÍ62×>2§'`ZÙÛd9çïߨö+Nƒ4¿·úG5nŸSˆ”ºí( ¥Ë"eŒ¥Â¥¯”%´¤ÈG¦_"uל¸öÍ)S‰ØCG§”q8ÝL°º½;±FñS?:¿vbå¹ËòèæðÌÒEnS„·i7JM§É˜Á1ú;‡9MS7?Òú%­‰E„?@¯„Ù°5dc‚Ú,Z§Ì¦Êò+èB»™óù˜6h– É´„2Ép—ùë¤Ø$oŒÎ ð#+‡ã¨Qyø ˆë2±‹©þ»Ì+’2Z¢Ç©4Šˆë/€6R›Oæ+TÒÿøÒõ‰¨$xnKM®[±:e6³C½¡pgän-¸“"ÐPÒ¼v+LtõßhÅ`óœÖsu#™’`Ì{®‘&³pzkfýN%† wÓ/†gæ $LM¿a#/–&à\~ÏÂyNµµ´Qh&hk¯]k#û}Ÿ!?î¹G– ™ç+Xém5-™©«òg½ðݹYR ²¤­„¨ëÔ¦Eäí܉îAh÷҇˿ÁåX“2Èä±ò$̶­hm“#ãcæ9w¯kkË• £[áöqàÂÙOûýzºDt‰‰¯ï:f‰øÒ4ÙyõgDÅVf©yñlPJ[l‰º\”6Ç,‹²ïü¥Iº’kšþW¡º’D 8+ ›`¾¨dô$ Ä”²v=©[ ©|}ÄI‹U dYñ´dFзø•Ÿò&?™,EÌS#CRx"äb”>\ü~e‰ïzI§p]:ì/ýtGnGâ%Îö öÓÜE:lr-é—ÐÕðÅc?´™¤Ñ!§ x5ñ—£±•–”ß uìF‘)¹otÉà=ß잃M¤æÊJM™œ5j"÷i$Üo•#'Úg"@FsàîûÆ·Àv­¦0½5´· ôZE𬳅rÓ1ëmy#pNÐH·¢£;UzÍ€°;ªÞô–¿Ä½Û?`ƒëxkèh.ÿ XΉñ3@ çÝÏ,Ä|/Fô8lÄi[ßÕ]A#ð,ˆ=¬Ë~âœZ_`—{pÑ{=>ß`%±C—î<'!ý¸/OçHœ¡ºkè×{õ°Ê ?2tßë€1 –J]ô¢:¶ñ`Å%Å㨷½Ðºéeü›§XðÖüjžëß…I*«2VÒŒÛD*À’’¾i€ñÍ\Ø#Gu+®RaF¶Py¤ªÑÿ”()/b¼÷á÷0&u³Î‚à³cï ðñ~=)\شߪhÉÙ˜Þðl…Í“¥*p7õÀð;úõ<·:=¸m³ið h ø‹ðôÛµ`‡PGmR~oÚË|öéwÕ{ÍÓw…ãƒMëí.ÿÂ÷é~AFÚÝkë­á˨%Æ ÅJùÜUÀ‹Q\÷ò‚Ù³Ç/X¸„Õ¸¦ß €å…nu%(Á} D>K¹òhjgpéO>HéOýoÎ0:— 2䔌ÔAr5㞿М(ì±ÂóFÏ)«jÑ(„–Lì)‰Á&eê `¹¶é ¤Ž e2Ò8ᲺšéqÏØ®‚ è Ífãï Þ «×ý´>Ä*’7igƒD,ŽñÛDޱ Ô…Ÿ)”9ò™ÒbR>^Àñ‹ÄŽ éŽ'1aÁƒñ„ð¤z öJå%ýà+ZîáÆH=6â}wEëü}"½Ï¦è´Áååò?é×¥'7z7Ø Mt®Çô›¡jI YbÙú5¶~emÙ=_&Iø ºJKû˜»¼¿Ø__(^KøñUÔ™@›¥j=Ë(k|U`Ür_v-ìÛë8o•zNërÇuwê«ýÇ‘k–_Õ뾚 AùŽœ¡}ˆ#l#ÇÌÂ/MGcÿD@W‰ï…–½éÆâA^Aü[ë|úõo0 J >éF@@5«Ê]jÆ+kîÊ dî k EÜñCªP“½ìÔßUätB±%Ɇ¸èC…*pÿ/óÝÄÂUzÉzR¬„JcºÔvÒÉ)eó¶·]sÈù&øøÑ± ª+þu0›b±KbãWÓH±?†Þ‚FË\Š•if;UóžMÀî0¾*¾JçTÓ·¼–ÉåfHYȼô£âøŠÕ›äP KÒ7C.´Ù®7›-¢AŠ/ä›Á ‰ö7Æòÿ\»õ£‰ªí=%þ.¢·ìOœWe‹8‚¬ tj"Vo63dÑU§À†O&¢Bi2t•á³b/§†J®¨Ê‹öv=8yL¦$Ëå÷pND[Äî µhQRu/§ÏΆܮñYžÍ¤ç”/ÈÙ˜élÒ°£yrÁúÛ ä°÷d5mþî‹× òþ‰­à‚û4]°Þ»³Ÿò­±·kMÈ–¬Î6ebžwVëaˆéR§?ß·˜&{VôTy"[ìøi5X—ìš¿‚ã’éJ®XHØqÈ+[ÛX§)W¿Úé»Ì ï¥§ð‹¿ ·žX” õÙüorœ¶¼)0°Æ=ûhQBš?p PJë‘ÎŽ„¬5“½Çl7–F)oŠ §y|"¯OâG¢Ê5Ù’Gó?Âê*„Çð‚âÍWmvöOô\ñÿ$=–Qf¦•E±U¸Yè\D÷W>´’Mù)xêX©aMøÝmþŽ|üõðl-5ù†‘ˆ}.ÖôkqÊ`MZm‹Ssã~JÊ&V÷ÏÁÖ‚G3ÛJM¤fj»mC@]Iù\À²û¦åK:mR¯¦¹àÙXß ¶Ö{OÁÂysåæÝOI=oitèr±~ OÍ_³æZµ A¯Ã×Ëj 0™lgãÔÂíÉwæÖaZaå{:_¹ÍƒÐ볿¾åÈø0ÚáèÐ7ɸ¶tC‘è;õ›0\q—ÝÂÁÃ34x…Yå€8gàÛ°¹‚²|iEz%ΜùIvhóux±°»8¶8©Šù@Õ˜ÊÓÁw{W! ù˜ü d‚’A(r{\@±ç¯ô߬/}¡È\³ÓƒsíÎÇÆÆ ´øïý Âf8œŸ“(Ÿš_tf½2Ê¡g´Xb~¤ý¢âZ¥1¬™v‚ë3LêÄG¡ˆÜÛqIŽÈÇ8±u`QH€£}Ì7GŒ&ES~’9…ÒH×û 7êàÒ¥ ·^^öÁáÕ* ÔßÒ\P`·ô£bç8!æ‰Õ¯VE0§Hüy¸‰ô”÷lÙuËYïáEPlI¾íVž•Pm€ÅЦsø"bµg÷÷®læ|ÌÜ·F/cؤ$´h°-ù–]ãi¨×ë°bŽVûhŽ©"úùî×ÇÎqECLîÇèmÊÞ¶ýÖºÐvÌøÛ?‡2öÜ3ufð n¢@­Hƒš‘­®A0ú°æú1 v8¡°‹™x2ÎxÖ³óS_\Wwy/Ó %oƒUתO¿Ÿž_ÿÒÏÍß\Ló¬xžœ¿’ußô Iѯ9]ùÏ/fÅP@Æà~i-²AÂ9Óe»g4ÂÚ tsuMr!žÑá}¸ø³MÑVxQˆG)áði1EÌ­coŶó~`Î|mùå4ˆ®ër?ÁãÀ¦ØNaòudåì^þ€ºße¼\'nýåÔxwž¡_ñVÅqÁ 1÷€*6bõå$ó1ïä‚.êÉõ‡«MJ+ôpºòé8·­cdcÒU¸Ú«+Îe ÅØìë¨|þ—#¥NðSÛî‘ êv<`\Yº9{âvRÒê…õÙ Ýê(j;}i,½u»pmN—m•L‹›x[X£ôôy_‡Z=žä~ê >žò¼œó,üTâ·î½X=æ©x³fœ…°ôÝ:oÚd¹óÃ>fQ6kz»'•Kz^– ªç‰¶42@r0û‡¿ö/ÃzMõ8Œ1ãÈp]Å}N=Uµ?ñi¾L#3<{w€/èSæÏ”ÔkIñQ¿ðoqÝáûûîÐÆ·GµçÕΘqõà;ªˆdzau­l@ž.z"°ŸØ~ÔМô½ó·6Eƒfî<19´1 &Œ,Çä,²³Ä8éÑ+¹>øq}PLvxBºü¢ou¾ÿMëö¾åZUŠNúÙC{–p¿BZŸŽ|b´Múâ’çZ:²òw={²®ÙEPB? „“ØñˆŸ$!.oÌ^+@|š:¹Ñ-øÅ÷ÇõÝá*maÛÞëHþ*mã͹¶¡IËûX•BÐyAg®½Ê…ÈåyzB¿£m2ÆV`äj¡CôK+ÎÛš„0Ë“üÒAÁß"9Ú´ÿ3ÞŒ~¼sÓïESÖŽy¯ nÈæ*ƒA$›ÑM*ΔßAúïu_Æê›•Azöp¯¼ïÛíqi º‰6†:r'Èè‘Pd­k˃\TÛrŽCüXnïô7µæ¨uß’Y|”ʨîÀ<¹´ŠMq¸ ½  í`ò£}&òm´TÄfhû6gèehßõç^¹,ÐgQêì3ÐA¸OS­Uœ¾vÀ/UÏtLrÅ”^25tý+NÍù?P^.5Åcm´yÔ¹¼³–ì0œ4ô‘XvØÿ$GRãî.<œÓzéégÑ#ùúºäø£ò-–|êAí\ÃzîqÁ° çßöm"Xߌ¾â¼çü¹\ë tÙƒtX /yùïßv{ƒòPuÒÀÿ窕Ž]ãœ†Ž‡aÚÕÙS'ê>±ÐV_Š|íp‹ÜîÆÉìè3 ”nh ²­Jï`Ò!|ˆ±bòÈ0¤mÙdð'ÅúšNv#ÓȺ¿Ö¹s4 ƒü<›@“2åºÐV!m’ycIS~ÍŠ‹}z-iýE9"ÕÙTMNOX£í7vü`P¨  ½Ì´éŠ¡ä(su¤Å«ô~t‚)ï»øKagŽÄA"dƒ-7€r-…ÐÄJŸç»ËHmãjá—= Þ×µñ‰ÈŸ$5ÂýÝíµ—æ]^¡O3éì…?ƒ•#žýYé´å°\ •¯2ÆòsèmD`üÙð¸7tÓt|ll&™»ö J¹­àÊå†ýã jî´½\€frÒ_ª.©ê…ñím©ú5~ë>éáðøùùÊð¿/,h â(‰š|À¡™ÅÚ40çòJ¾X@Ž ›×àW1«3<âI {U7¸ß«¥ ]#\—ÈèûsñS«‚I¼˜ü7§omW|/Ï;¿“ÌÎÀO`}ì1< r9?äAV~¬.·÷Ù:V¸Š÷¼0ªtY¼Žv$+]qU:i…¦ReJ†Ò{œh†¶c2ixdìtP``¶ÀZÐljø b¦íl³\0ú‚¤»VEû‰¸ýÅÎñ{V_çM¦ú'Ű«Á÷œýos:¢€G9­c–¸¿›l fkÄä‰fc%û PXãµ ØD¡ÒÐfIáÂT>"YÞ@£$+ÄTAàì¾V›fXìs—8 OšÆU¦¹eŒ0‹—‰ËÅœ4äe~ñI¤á^£ÖøÐb°°tãˆIB¤»ÒžuÊú µ,ãN[/ÜB­ž³ôkz][z7ŸHÏï1&lËŸKVfrJ/_7ɦ¹]oVMÍÊvYíF–}V¥Kþ©7"ž,«d•ª MwKt4=+pªöX.}”¤ÔM¢®“)ÄŒu5ûÔ ùÚ)bnK{òYߪóûÝÓÉv5 ßRtâeÉÇãæiúøŠ03ŒKÓ•—Ør©††GµyÃÅßúOU½JkÀºxø&ïu8ÄcÉ—•iÆâ™Õ,ÄY¦›ï­¥þ*iÆ @ïÊä@SO,]Clù+F=´ÈèÃŽ(òÁ KpíµÔÇûþR._†Åø)רHº°ø"©»x¢e†NE7½[UÝWâúK-g{÷­ É_°òVk’UlA}Þ$óq¾ÞÔ6ïã7òdònV˜ž¤Äp~»?=NÕîö:"!¨`wÓqÒHp~6^ÔŒÈæßV­{3…–#/Õ×kú §fÓ³Œ_¥QÕWÇcùôûj… Gˆ*ñ|á¨EÜ.GúxÙžç=µyÛp* £Á Yˆ<ˆI[Ї1“-Úñ“Lÿ2$ý’fÚ7®*´íó|ˆÎ-Re•+ á¥7ÕÈA£’Œ2Å¥‚w6!Rñ`W<Î&x@ˆ«]ØZSn‡h¢¸?l’ ûæ/ž¥þuRÖe ç‹ÇóŃ"+ŽñƒÇ®ÿ½µ|Ëlç<‰msÑèÞý93ÄØ,ØÎK±›ÔI0Ù™ê“ Sƒ’èSŒ Ø!Ã⾆i” — ñ*gyüû$yßwÌ)W47Ðsl3US‰ž†N[t}¡ÄZåÁç³MSI´M*tÒ¡Ï¢Ö«&• k³z+[‰§g·Öw‡S¤ÌiV`±òkW‰ƒÖQq&“ʯÚoNDK¢l7TR«EJ©5wùØës¼9q= oèÞV¬H¤™ŸÊÙ˜3ë¼Ë‡|Õvpmãíèq–̽)å0"ºPW>0Q£üâÖrÞ¡s¯'K£\ßïàòœðx"¿wÖî„BäøÃa­x¼Xw–e¼Î1»® šÆŽaN [´¨ ý„¶Ï;7ùÇ=²É<ÌÄ«2)á\LÑôub=IJŠy>ÍȈ•–@N)_ñØÆÜª}"kE†Ò³¶ C_“ Vñ.´ý@nWý1ÅqÁÖßq¿¾zŠ.aﯰJ&+^¢ã÷Õ-µê³c›#öQó)6r·#ûÃ)5ÔGèÕ #¸..!Ip·%˜eTÆ©¹Š+‡:‰ÄgÃ!'E›X?ÆQ ?úH²Dî¿*/jôo¯Q5Œ›Ü»zs;™O}yEñvÝ{'Ø^¼ùiô ‡+ˆ„ÜA”®ºØ&ÑÝI¸$ðxΨ4tví¥³ø_ÜÑ:tzðtšÏ‚xM˜b[p(~‡ûgÙ•¦ž0Ñ>uQ·‰ñÉbÓüQä¤M¸$}„¤Ûuç›Ç—î«’Ëöi•Ö[õqë™®²’;†œÑKû%ŽÆŠŸmÅê«`‡”M}R‘C®êhÖaž]÷MöššÆø‰¿ BKWVKp‡OÏ~qkÑ‹–eŠ•¤Ð2O𘴪V¼f¼r¢WbvÀ ˜´´¯ð¿ð¿_´LeMÊýPéì?;m÷M,PX²E¦ò!$3ÜPYÒ=. تnÖ€ÖšN$ÛAÕòñ¯ófïNöÌò–¯êYž¢·sŠtãÊ?Ž`jª”ÌO9Ææ¨Z´ìAÌÀt@;/`ŠnÁ/«zNâ!v—ó¶WIõrQ‡5` §ßó‹íŒLªÙQÍ™ ˜¢‚ÝQmOããGŒéDÃN/€ÙÄe„Þ*¯ô{É‘¾/Zo†\ßGYާÐâÑIfŒù­‰’=¯w0‡¥ŽÀYÝ?5gfÀïÕÅþ‰Û¡µw‚y@J±åñ§è>«ÝËžqæ×Ø™Ír…0Õú;±ôÂn¥wâI_â‚1» ü<“ëU®³ UqE¤á¾ã35Kxsùœi$»&ëdõW¢H®HÕ88ÓiÚA7Óþ-G0cD‹¿õÑPŸY¥¡Åɱ´çÝé¶§ö¦‡ÒVÍ àð‘%>…™«Î° ÃçF š:\¥Lšq:CeU%-pï»s`<¯'PÚì‘öœô·E&¾j¯®"^²vñ6"¥§Ò±ÍV“m®³›ÕEÆho+{Üß”¡ŸSÂo®k´Ÿ\‰1\¯M“ñ$ç'®»;Çè ÓgZeE¼’‰·vçq!~½V¬ÏEÞL}Ñ÷¨y}HLªqR- Ÿf­Sµqƒ>f‡´…Í5ƒAɘâB™FÂ"ܽ„k Çl_›V"_ÓgŃÖï ìqyæK< j£0ùyóº7ñÜ+Ú…B›*âtC¨xpIEJæ&ëóR[Ó"§ô|ÿ7ã¶‘®}‚±cBM‡åm\H„–„‚«‚kî¾g©’KÌ.kñ›tÀf‰üРókUÀ«+9óš#;…©­BAa›Å¦88›Ñ¥¬ÅxDå5ž=PïŒÖ‚â³ær ô\¹smx¹žv™um3€p*½ÔÚ9¶ÀS™)™}­‚¨g!§\yò—º_¹×ú˜Á_MuŸRìh¨à3´.ɨ¼{F­£°Bñ/MþgOêÿmR7ħÜÁ/6îðQ:zåx¼ÈŠrU ÷Ùã}P>Ouw¢¼z,Ên"ª}÷ž/¤¾Qû–m$¥ýÃk¤÷5)ùKŠjØ›1öGz9õŽ… iI#áS|š"“‡ƒU)]Æ –)ËW±*‘Žj›]Û†P0×2:i9K¡ ý¢’¼)öýRËÅRH[£w%M£°ç ClO²ÚØÓ¡\Hb Ù¬/4}­I|Ùû*LtT`"Ž,^‚^h˜"˜tšßÆÓ­°-Àøúò;¨Ž¬òû¯ØÞÿò„”y‰žR_¨T·õîajž–ps{æZ!—¤¤h‚=BÎ sYˆ?>)éЀÑÕÄ?s–R1©–Üó-ÊàS/ó ´êœVG!éðÊZY(Û•7òÞ>ŒYevâªif¿P$e'Ýöû;)iÊ ­Ü4'nõýÕ¦u’lë|rs¶¾ i[ ë´DSÉŒ•ŦÐ5x§°KT`ö›XFÚe-ºëÂâ1\‡€­ƒ0f‹&RoQ¨ˆë)šÇë¬óü—KF‚û 11Cìcö8qá9cIG îJÿ52cÂsó½Çààá5.ð ¯÷€mùi×=m¡ËqäºÎo¼žý‘³tñ˜ÝáÕݱíú¢#ÔˆjéF ™‹Îúùè£ïӚܪ¿O‰ˆ›Š ­”xÃä$·î«¯üD¢ºò_Tbß&6ndíÀA’ÉÞ)yµ*c¤,¬m°Tà|<®ü]ù𘓡òs¤%Úgæ_Ž-^aSC7É®‚B{¶NÝѾ¶¸oX NB¼’hؤ¶W`bJYò÷j–n,¿$Ù…1Nàê>0† %ÌAVáDÈÏm6¢fž¥ý؉<Ì])ìIC; Ÿ ;`gô—‚¦ kþOT‘9 Åd!˜‚Òé gÜMà"’ÆPbLŒ­‘8Â!–¹V›ƒóyPMdïølÀñèÏfêãÝØÝ^ßÞeÉg%¬!'.~®»8©;#fáÁÔ»…/³4ù*ñ_x}ŠS?ØÀ×ú¬_L>,¾ì(LÄ|ž§3Ϩãx¯Ó§ÌOZàæ~¡Š)™ѶŠ"0eðcǶgÕnH1Äœª †YŽ2"nòðsÅð‹qØð9’Ä4¥¯\ƒ~õ—¨F„ œ:óbSl5 •k`E' ¸µès*T^iX»OŸžßú–t‚5¦ÙBÀånÁ½ÿ`àÙ-%¢K»îT t´G1ð;æ$Þøðúo@^·ï·/¸úJJ]‘uE5ÌV¸^w\_Ê úÝ80£Qvt¶­í9mï1ÿò¸Ç&y奿M•Ð'øÔkP cŠ…¡ø=ú(UÓ˨?ý\eѹlŒ¢ÔÌxžpŠÅ+ê2Y±Š»ý%}|ÿKAIW’.Ö¬ÔBÉ<®…ŠÓ…®%~F?Ù ÅpáÙRï “iSNk䙢¾#Ð ¤á³T¯0më•ÅÕ»ûöŸ“*à›E§[&FŠ·­òÀüâχÃ×R+Ü®.?Êäð»@¹82NF6ppôRZGk ûhÍ¡¹óaë9ŽöQFäW`Þ;ÜOðM´@Ü7O ÙàRmpaÇÄâûÔå„%!ô…Ný¾¨ÎâèÐám¢öuΆaŸHÎP¹6éÑêÝù GWŸ¿‚Å𹽩9!×\Ô#½$½=¢Ÿ^<œÍ„-a%4Î:€pÀ*Y`ÅIÁ׿ j#`ÌIÿîE:X)ø.ƒL™'øïk­ ‡·Œ0ˆÂîC6cÅňƒ¹s8ª0}n+VðoÁšS€a7ëG‰îÈtÝA¦'L|½ ù]a)`|áyÜ Þ<€OÂyyÜ« ‹ŠÐLÁ|ø›ôj¨^T}ÎÙ½¯„«á*ë‚[‹tHV  @ ö¶v4ÉKÊ‘3ÒwïnŸ2ÆJe9Z@a/‘±d›æ†·,pÆýLË \Ùäw“Á>ÇÛ¨O”Q‘,–‰DKpQÏa‹ÄŒmÓ ÜÍæí¦IÈ8°ð¦‡ñCf•Àl‘×^¾ø·žjj2Iñí×|÷,X€Q ËOãæ0^DaÞ€r£Z˜aúÔbËS.c ÚŒå'ˆîÎÌ&ö ®ç™e7Ö":)*Êí›l-6 ÞU–U° ]¹Çøned@â8éÄ_g»ôãKD»Þ^[‰ ‡È<ó†³v»Š%åE‰«ݽ€¥_W`Â`b;tãõQŽç£°vÊܦŸé9XÇJ0V/YÑ‘Ò [Y3RVBúeÆBäòˆ·¤`€N•ÕMž˜yÄ“p­¾h߆Æ`QQ£¾Ø½;z–¬ƒ IdÈïìE„‹òr¦ö¬jËtLz-òçrtx‘YðM5µÑ`eÅz.=55¸‰e™vËô>Æ_KUo“lFÀß³ž­Ô‘ÌSC‚äÝ©s´Û ‘¿Ý-ÙÚA‚„¯ÉƒŽ´ö zRkN%6î c¬{+>ìçÔYűž÷ ’ë„l)Ró|ÉeÛ‚¨by¿éL •¥uª–­ 2eU¨ þÎÐ}v£ùN™IyÉþÙ1Mï?!ì»cÓ0ûçKH+öMÓ²K#Xi³7i‡1¿ !>¿á5 _!X8K$¢ÃôZ.~GÒ”ø™›Ã{¸òîzž´_þ"¸Š)` åwÜÙÈM솭 «j.ò-‡ &ÜþæBˆ˜:ý3¨ @œ²J‘:ã3À&°€ZX7¿ï¤K¦œJf´ûcì¸ð G3ÊãÁ#˜ µö@†7hî+ŒQ}€Ü<ùêÉæ ÌV6ÄšŽk…oT±žûèÊtZŠ6ÈIzRZ¢¬ÉÍ åb¢?Ø\Kšì"c!ö)óUVSP(eFÃ0®WÕÕ¿bM•ô]—N“‚”ßZ´«Z Fé›^¥˜‡¿º[äìSº4}×N×ê£þ:Á8I6ÓJv5ã§<‚ëˆ:Û÷öè96Ví,g‰˜Bê^jó_)ÌÄvfúËb3®p¶;„g£‹iÝ«8õ ßw¨jÝ1ü­ÒOŠuÐõÝþŽì XmW õu^V1ÅjŽv5ë 'ß·ÝÄá˜n 6€.ŸëðÖ“*è÷°¢eÓP‚W[ŽöØW½&/—-|“½MíR®R¯X²jò¤eBŽrìà[5Àxî£GœË Ü,=µW–p:*í!§Rä¦[BC²Ðb:Éœ(g®7[à²l5b7Îüê⼆ñE‰$¶â­aUGÊ”7¥ö ¬~ož¡áÛÞž&˾ÒñÚ*»Ølʧ~iQF?˜Ê(òÐ[èö…`¿…¾JqÆìÌ8Ïß_ ”©é&ú­-ÄRÍà{wÀDŠö<,8Âë—ŸŒvŸ«hÐ<ì蘎ç*ÚÑ÷³¡(~ ´^M^›1ËMLöG²(ס¹˜ h©ÊQÖ;<ÊæáÄÆ±i…:õo@ÑÉ¢¶¿9òD—´ÄØ·ÇÈ-Sg5rKdù¼Öçœû)}G›ÅšèN_`ZhÉ7…;ÝÂ2Æ’‰ZlžqvDTuÛ·w\çÓm„ÑšXñ “ZðÿKÑšG>ýöa 'BN=y›/Ý›²¥¡€@T„iî—¢(üGŽ«ÁO[mÊL¡¾ARL*`ºê=ä›%Ëm“—è|*âÒ‹ìÈ@TÛdz¸ÊáÜvèÇ0£à”Ë€¨€ iPIEÄ{ª‘k5—'I_ó"m faØ,›„~®(O…Ê›X²lE”I¡CŠÕ$ÝÚëIØéBSm¯¢He¦.C#*ÔDˆZ¬¯©b±y…Ç®ª›ÆfC^»â¾@ ¹ï1ÃÉÅ‹i4ôu®Oýù`˜¹—ÖYË“4-\¿7k,ô«€à6> Æ .é©{JÆ¥¶ŸÒ`ƒ‚,/ö]k$Œ‚ŽÆÌêXâ•ùÕvLc½_œ Â]ëé¾}ùu#µ æwKa6-ágaòE*…,Ý?3&¦´©Ùø#‚×´5/ã%ÑlÛËÂåœìá6ÐÞewžâP5î­Ÿ·"ˆEõpé[¨1N¢–A 9ìò’„ ãŒ6wå†e"sô¢ÿ;-?ñ#’ƒìy®˜Æyqž±©€ûá÷ær¼¶‹çˆnYf]“DØÍw LAî b¦ÿÖx¯yË=™ÆCjZ[Ñ-yŠL†Ïc–={íåéBF)œ÷WC/¦»÷VÚ6wðüÏ÷³á’•Ö­Uÿ¸è´¡û^ÌŽ„±ÿ,°PâˆÉä[¾eÐÖ·>÷¢}ç|`±½:¥ îÆ•­¿˜Ýx:õÓ$ßvr“ù_—žWHždÝ›=7º¿È_Käÿë,MâÆÖTl pÑsç€ÌÇ¥öØ›G\Ë;Õ`–ŠeWA¢É ¢Ðo‘AØDõ"O+W£†²¶³\æð3Ü“€ r0ŠªÒ *…æe0z.]¹¥ªçNŽ&ÿ·ôOÎqé”Á½+|}/X ãŽÞ/þý"~Ú4ª8Ašdù·¦¯!ÓoCžf,‘!Ɔˆf‹lŒ`÷èæà!`9húX&ù°Ãu/¡¶?ÏåOÒ ‡ˆÕ“…' áÂ\,Òhx4~¿‚©µm‘24Þµéê*(dHn‘0ïõ/VD&²ˆoÆþu4ìꌒÐÝ;Ý; y6Ç'Ä3œ³ZÕ/_tÂ~œ"Ãçýf¶ÂÂ]ß[—®j*{ºÄKPr‘<>êu´Ax@•†;ß•ëZæq*1ß?Ó¾ý|襼S)ÿ±íV¶íÜxÆâW@X³UBm³ªsßê@¼¿Tï!F?q-ë÷3M·Ds|Ú›N¿fÛ!le·”4´Ñÿ1tn_e„¡þ@%JQ3⺶ÓïÇXÆÑ˜SƘŒ»t-²3Q;Ô7Yr˜r(Ypt·XH{ŠE{ŽŒw4žV\èMµgl¹V™ºtF-þŽð®íÚŠWå•ß,Û¿}VöŒÐUÓÁZDØq[ÛÌ ˜Srç;(ÛòaûQ”!±Ût_Pa%uíc¾[¤é»ô5IvÕšf˜æÉ’/YH“³¸¸ € ¸Z}¿ñê?2w˜"[UtälÀÎvÏuS´)ÒŠÕ„iío¡»ïÖCçd×/âJWî‘å SJ_NªDðA…âRŠòÖž%:®d¥'sJæ®&@w‹´wÅ Õ¡ýóÞÅ·ÌÒFˆOμE¸«½¿æb¾ñ¼ö +xð¶eáSóÝ>ï¿’Ž*S%N;Ù‡`»™Zj/2yUÿÀ: uÛH¶v1øÎrb‡àd)äà>pÃO¾‚V¦p(+Äi‘×B ¶goRømG žœùÕ»@—M6üeÔ˰„¸2rßIÀ0| Ø•ùíâw¸p@iÏÁe¡¹ç ¤'õk™z$.ut§7 —¯ÿbÄÿ |÷æÜa /u³T )Fà Ú|!ÍÓöºÑ½3qaβžìØQï>À¨ J*ðPP}!¬ªlu–‘å¶hC¶¥²½—ë°Vy4¹EN»a#LÙ‰¾œä(¤›ÙX‚þ[áúwèVþEPq4؜à ~{¿—h ¢‘ÌAtáÂ"ŽÅRÿÒÝ!ìÍ{•½®—°H| ’+âZ;*¬Lä‘®Þ«äÙŸÊ žŠ· 0Ü^ûX•XêjÞ¶ôËF÷Ïe—<Ü?Þhò…” öÜÀ%üÞõû¢A›ÀœÓ¯™Jî³Y¾Á‡¿æÓÿîÞ•Tz>ãü¹§Ú÷£ŸE€ébÔî%ì^‹uTi€çþ¶qf}£¿ÒO¥KÌ«saV¡ÉÌ74…$j‹8ÌÈE†Þv4¬—Nªoƒ¥j8³¹8R„ôwi<†Å¡^Víí{DŽš%•džôÅ9FÜŸg«4ZÇØ%p–µ°©µmSÝrBBÓ-§Í8SzõÛ=K¶‹Ò[A°ëš×®aõ“Ñ5KÕõ2/à^îVáxvXÎõé‡0;¢&Kð4Úòd­ýfW.þà\} :ÎkZhaggåu&´\UT©<¡c™&ûƒäWHk·IÛÏz<‚êZ´¹d·mèè#ÜEÓYil¦_û³Ú9ˆâ ÎÐ ûàð´ñ'"fcZˆî8·Ûù¥›Î"¢ n~ý Éus=u•a««РJÖ†u0 Èà3)DC(Ç>¥ê1vôr²ÊŽ!6-.µÎál“¨åeâÁÅ7Škí¥uè¡üÎüŸ—Ô åÚ²FêQº@æÂÂ¥ü§Ç¡ã7€~£'å„£ÜÛÍb^·êêšäqw×nt&Þ‡.{Ø,þ  •#·p84@ñ®7‡… ŸOf,üñ[Ì}–'Õ¢æ—OxlÄ£r!ùQißñì«ýQtæŽÜê®ì Rv»2>L\;Q;¹ ¾R6– ýh¿¦¡)Ú§ž¼ìhÚ&NlÖñ„yÅÒyÏ…†Wäüw;]•‰\路¦½±\oUt†Œ&ø"ŸO›Á’š}»£õCÍáøf b3ª_Zm!±Õ Þ“z©TËÊÕs{Ey4h¶õ¸Æe‹…9¤ü' g9Ó"£•Ÿb†fÏà%®ޱ-¨d«+ ×1€mI£:ì¾â“mN#ÒØ2ÂûæÑ¤NììM3]ð¡é 4 î‘°‘–±OFPnÆ¢`S õj„3³ äÏ.Öã9ß(9ЉÊñèk,^<©U(¢'1©÷§;ø¡z™ ±4‰ëE†S ÑYÒdi'´›ÐA•Ðþ?ùÇž‰ ÙÞ±Å;uAëœG¾n8µ{Lº2:ÛM5œð}”¦I¥¥v¸â ï2m&9d&ô{ñ@ej®…,—1Ùl¸â ô¬ë—CG³>¶ 6"Ô?¿Ÿïƒi’ŽCò/øsŸÇeò_( Édõ_›ñbjú¡Á¸øŠkÏ\uñµ[ÎãÅÍÿúýê¯aŒô8ƒèªÈúåUëܵ-Îþ¹Ø]å_`"ªŽ*¶7†þÉ„õ¿!Gi/ªçqLžVŒÎëQFêJx×H=ÏVö ÿâÒK#ïNâý‰§˜÷­çëÙø;d–1” ôb`BHýÍ¿L.-¾ï;q ü(hH •†EÚ ôUÔ³3kàìÐë¬gú›×Ĭ°¶žL l⯨TòÑ(­í/¦Öñ?m /Ý}*šßâG3P“mÜg¨ä9„EugP!ãÉ@ÅÍ$äC$̃÷áGÁ.“ÆÕÎN?"åƒÉ+Èß´!Öl\xZøóiF#Ùí૾$6µÖ\¾ûóUMÞC¸°ó n1™ÝŸù¤„ãuò‡«‰Ü~H¢@œˆ¤nîä îz¦FOÚˆxP“ÙÞD€U\iÛòÑçCòkb÷e3ó°úå$Ã1#ß&ÉüÃI<­d²»¹l^,žÏnΉ=tB¦d©œas5µÊ­+ng‹GÇÂnE41,_Ü;ÉYV¹© ‚—+žHr€›ÿvÇù»½—8—Ø_(÷“Z¶oGt¥*uk^|gsý.&sg— ‹ö:¾“«:ZfôÛÊ ›×÷Bßz/Q5Dß½e±Û\A[“'¨Í˜—žš¥¶Õ a£4¾ƒe· Cÿ•îºÌ W@CÆÚéäÜJcñ¤e”ÿ<ü~Œ8ÉÃðd>T@VW×UNcöÁgºÔëÛ9JÇ·£¶vzrÝHÇp€*ÊÕ–\ƒžØ7md3-·°Oˆƒ_ ÿÄ!ºEë4M™~„öä ƒþaëzn²ö0ZhˆMvíDD¾Ý×gÅ›¿­lÇÖ4qa²Ð8¿Å¥¶±}ƾÆþÖâWäñ4Œ bA‘–)"Qä\¦Ëz´T&E7¨’ftÑ>oj‰—KKjè$Vƒêpêw¼á£å$&N´x37÷ý=.ÞÚód'ûÒIyʪß{œ·],ôÜÛ;+ÿ—ƒ•ÝÆùóóóÑ™Éåý}}ñà°$ø@ _ ›\d"Ôîí­ƒKÕÖÞŽœ£v˜ÑÌÕB ×ÓÎSŸƒ!fØGÑtO2[]Ïj ¶È†}‚Ø/HÐ30)eÜeK/8ÔfJÂáfiG•—ß›y¯R¯ÿèÈì­ÑÆï4I†ÌÛ î¥ËØE‚†ú5ÜàORïÐXmY•lØ#¦¹,mö 2ß¡Ì71‘ÙdD£ØÆL¶®,Mn uoö}?üÎåHÖ;KK6•aˆÌ¦ï¤o¾%çÿ™õc¹…|ú»Šë6;bôaëA­û½:kÕ/sèÄf<àÎcó½)ìòÇ@:¦Ë2]”h)§âºŠF*2Òûö8æ5üœÐd;¹U€xxéÐŒ‘^c :7jÒ¢GŠ¥|BkDGÅqMc³Á¬®m°vÉ+)#’¤m¨èsý¾Qt;»Fq-è·õA—u»Ù&°#€í¾Öë!šIê:V9K‹5UÆ&Ï1ø ßòí8f®›E mÆY?y§Ïáñ[8¼ù×yuMËöÇß¼YóiW Ðî¼lÆñàG§ ´v¾3÷ŽuÌð` `”l‰Z8^Ó˜ôÐÁìÁ¹ÚÙxú©rßiù¬õn¦õä¥÷óûÚÇT«ýZŸà×vj‘ÓŽ·M¿´ ÓÁi  êâs;/ñÜþi‘K§*Ùó?ÿèÇH2̉Àâ0==-»ÐX¹w4“b->ì QÍá–ñTl¦uœ4Ký¥i…cÛ¼¯sìíw$Š‹tÒ #Y¤ºÏÚìcaïê~È“eÞukë~H/k¶†øÖW©·¬]¥ÞÒѪ›Qn`hgñâíû ,A»ß.”›“ƒDìiRskx£·ìŠiâm(ÂÙѼ823m¯RT^}Ñ}‚ºèW ÔZ™hŸ–Xö«¶¤Ð>?ðBä‰òô߇¨»ï<¸KEì—ÐL^úÅÊn“×ÌΖ¤W`ÌÝß³’²“Äx‘Ó¢EiuÅCÇç¿ß»+òWªœz¿£+ÏuN°N`Q&&7\–×m˜d·fâ=qE}¸8µ'ÀÑ>P7è=›¼ºó骳ô}Ùr]†vÉHó)DŽˆôæˆ.豤F­OŠ:Øk=øzùmR—ŽXùeC.àÀ–8>J "£BŸ”©!†Ð¢÷®K㽇£¶¢GKá™D¢ b¢ª(ù´ †‰ÿ-?(v™XõH";ÝGE‚ÿyÆ !‘QAío´rtTò¡:‹ –P†9¶iö¶æ%Ô'~í¢„’9~Èì]~¹†cÃíÇH laË$Qqû«\¹®«+Z–Œ*7ò´sµE¯–™"ô‡ñÚšÇQ\ž/$0À°®’`®2;~~Êüc™9"#@Õ}8ð‰*a|ðØ3ÃPýúÜÛÔ0:j,›™Ûú<I+2ç¬}s’_!Ãæ& IaË4Ý’:”ɲËNT¼ö1ͨm G‚hˆ"½Í¡ÎaF—ˆÅFNÊ8ðY‘}r¹u$Å>5^ÜZ“z$µ*òñN=T)°kY+“uçÑyú`\“ŸSw47ÏÉ÷Щw}£ºî¬êu¨ñàæ/ D$+Ø;7Øg•ýûbêk–ÜE”k¦`–¢ƒQ9è"¢/íµ¢Ê=$Þ­Ћ¬Ö¬UªJúŽéxéy4„‰ù‘pÖšZ¡ç´uúâäþ8-HÙþV$&”Ú“ÍêsÃ;~× /'d,ëôþÁcÉP¬»%m»þOÑFðé²G¿¶ ¶ƒJc˜ìkrýEq·5¿äÛ*(Ôk$ѵ#&ë]ɱr‡ÊD˜Í¶+´~PúË +}lLp_Q.·4f;ª15!»IQxhA^ÜH@ê´ó½Õg¶™³Ô$ŠRœ|…D§¶¤è”ïºÇ0kÅä×Ëîw!ê$QÝ/c<)DÅÔ¯a÷y&¯ÍT~…ôµ5¼O ¬§'ÖÅÉý5X¿Ý»OeóiK7»QȦîò°=÷ÐçÏx÷|Ç_)à}¥¦ˆÑb’~yÕl´—â?X’¯tâ ÓÉgás-5S ¨fà[ÞüVP, Æ„Öh®#ÃÉ¢"¹ `ò˜&î”G«Í—mk}d0- ‹AA0 #&Õ#ÐoÞðÐÎŒ×<”žh;]÷À &PÝXºÂÄ P­ñQbÀíXK½ ó008˜Ñ¡ÂgèØW8Áf:¨c)çô/ABiL Í?ÀÃ…¢i}‰`RÌ‘;é~TbÞJˆ\D•†ÆÉ’ üpß%,‚yé^ÛyTŽ\F;e„°êx‡ùP©ËÓê0núŒ‡¨y"ã´Ó?XUn»\¯š Çe÷ªqX!³x[áÛC²º]ÔN|5#ŽÕhΤßKwŸª4ËQƒPºÔ}MÒnj£Í·çz N˜|,ÔØáWæ1Æ1·³þ\TþJþUÉ ¥õ§Làw ?µÊã½×"ñdÑæ×­år¿I8Š)™cá@íAŒ¯õû$çꆱw¿d!ÇFç?™‡§À‘f³dKbý—¬ÑqŽŸ½Yi}Øç·¨]­+ª#­]ÖQÄÆöÓ·©ŒÇøZÚØ_‰Ì}z[bø~©ÜPÜ×eQè›ÔV#¡«Ñ½ÒO®*æg'½³ŒË#ÂãÈ(Æ|ŠÐ‡ý¹¥cjHm­—–Ìu!Zt®Ô[Ôª2¬cƒÁðz#þĺ»jÔ´‚-Ê(hO¶ãé3ƒHökõYƒŠ%Ž3n l5î›Æ'©-j"Ïôxþ¿DÈÃoß½ÛÑ]Å(àÎÌɦ¸+ ñž·RSÆvÐW¡!©ý/wd¾ÓÖµ#Ç#Ä‚µªm¬žèñè±ÒúÃñÞ>èx OÖùQ ð¯åˆïÕïX±"ºJš?j9» ‹êÔ¦jöÒàð§q+ž&ê5ÄòEѱfYÈäˆ5ÛÀÇ4A»ÛàçŸY÷Od2›Ó8( ¿t-¿–”uŠœÍ ÷ðÀ˜ÛÔ •qñÇesΕq5x40ìÔ§5K©á&ÎÍfÜÇ dÄ&€ÙÈF߃âû:(Ü™‘ Éãj½°Í·É­]IA fõ´ÿ; 0´fë…âöœÁf&Û¿ZŠÆ¹¦’/‰Ys¯!Ã,Ï\w!§…‰¨¥Ä #ñ’Å¥ £c„üýwL·•°k±Ç±ï©/¨Öhaj‰É\ W8Úðû8:S“îWEë}ð®lXSvý/ý¶²y]a\}‹’afzRCªnÚÐ~Ú$¤ôøPd_p²]æ,oø÷ιöÕ“ãÁšgË& ®ñ0„ÏŪ‰ÀAÕ-©é¥GšSÊáQ]¶s9…úÓ`½½”s®§ežîmZðhåS±»[h¦”xŠã;5¡àw“ù×#¿fÁCâkfxtìÛš¬¬itÕå+0£À\v‰×e _$6Y¸÷çtKºU äš`³ ¹-HÀÓX䯈Ã}æW_«æ‚ Õ³ßË•#óYúè¾Ç>€LºËÚ™;“y¹eäî0"*Ùåúø7ÅýW«7`¸Àñ­ixJ:©0)ƒù¬H‹üÐ…ùjë‘°¯2›cêo›£¬$£“˜)3‚‡BB»¯Î±£8¢J}#hc*žx-*¯_o-!«¥÷)5"dìÃïßµ~¿ mv5!ƒ‹¢'`Þ/}ªg*k*q$ˆL Ý®>öL”¨t±ÚøIŒG^Úðâ(¶â,<3wŸYbMœ¨±çô‘ÔÔÙ‚â¯oHã[<·ëe¯› £ÀŒé.aã‚$MûwÒåÕSû;ª?2Ã㇕0éš•ÿ°ñ) Ô«²<Æ¥§(TÕ¿¦öJƒ<ª_HŒC’ …†³gÜdÔGa”Ò” 9‰bG‹œž¢ù&`y˜ôiW5—û=ØÃí(Mz`)Q²W/g­iÀóÝóHð›ϨÕà3…>8þt;ææ¬NNè²ë<åLK3³Q# *zé¥/ihÀå1Âq¹˜™«›õ8ñÒšò"A ùÊpƒœË.›Yò!eÎ=Þ#tèE#bµÐ7zßx}¯Ù/›3ªò{ÂÚ÷ÿ HN¨èáÍŒË(a±o…|Qúˆ›Èˆ}JW¼èKÃ4ÉÎu÷ÂUû;÷É{[¨¬[A —Y”dsšH?X§²“6˜öc<œO©^Á¥ÿ"†¹b%ÈòA5î~ûÿ{ªÏîµÚxØÚÓs`ÌzpÎù@Ï’ûqGŸ¢“Òb‰™êñ4ÐÒì|«žÅ‹”¥qÇ2G–Ѐð£“uUçõ[ß–wŽ:zJ<Š™­9ía²Ô@JÁÙÓŸk HgÁ˜ëk x"žëEì·²¼ý©<äMÞ±‘`Äs½ §Nʨxmb¤‰c¿D¹I´ù[L Dñ‘Š•ÌgÛ‰ÁØ:륃voþ ÞÒ¥7­ŠÚµ$!Hsït4øxˆ•x-v×σ™î¡T¦ä[`{4÷+¦Û¤\m?Ñ™ü7Ÿ“¯( COUÿš”ŸYº€ïÞÚžö¢SeJ«·r£ý¶¡\ÓWä¤ý­Y0F²cÉîÓ¥X„ÑŸWˆÏžAû=\ŽñËî©QYÃ>"Ötß”)år:¥D«KR wƾ›à<šÿg…9K‚™ èäÞ6ûT½EUà™üZ6ìés©¸Ë7âWöù`VcD@æ†7ÒéÈÀ¦ÙwÃs&‡ @XqF;TÙï§D´wêe^çï°¹:³ü;1eÍ(yC[xÈ mÑroL¿d|ÑëÐÅÍ{ßûû­7ʸˈ)·”쇔¬…¡7–‚ùaÙ•)/[¬ÊoSìBŠlXÙXHjº,ºJ–T •éü–*Ódb?øFx‚';:Å¢CßÏvlƒ¶ÄˆäcÈhÃåêKÿÊ=áÿ¹uªöP§•µqä2< ‡«îz£¿ö8Vn޹Aý¢“cAED%;K\ ”Ú˜çÄÞZL…ÂÌ·ù©ÅB“õ\Û$s²òm8¹n¸ -?š`ô6“©ßÍåYMÉ‚{ƒ–èN}×Y 7ÇMA’¨}«a€àª  àë+½'šB¢K¿æÍz: Á¿QÃýì¹}Ê =:Gµ J}¢ÓÿÓ¥ö¥vxçþ:GðŒð¼ÝÊî$qGåÕ¥ÿ¯Û’ÕÈÈÈÜW¾ÙK“NÅÒeðÀxzEÆÚ;W˜gŒJ™jeMÕ´=ž‡OÎÊ…ëD=îˆeËijå÷Óe¦‹ÕÎÒ£N‹Áß¼›p—Xáûcy:V4]ØDmm›µÆD‹äÏvú¢FÚ…þ—-I¼]ç,`¤zÊÌÎîÏçLº‡ºˆJ‰ÇÓ±¸Ãä_NJ/`à&‹Uw2EbÕ@#GÌ™`ft"7ø[ŽU¯Zq‰óí¿t¾m¹í®Zýü«VªŸ¶AX­ˆ»R|^ÇeŠ­8º[ö!p¦éÒn+Y”ý5¥à8{4y*FicTKÅ/%ž!‘ÆMÙT{¹M3÷ ºÑ™u.ZLµ-XGŽñ’rψÉ}¥˜ÝŽ¥]¡TBä|'bã½éðˆtßå”÷ߥ.SLô&5;Qö ä‹ã©Å¨ÀŠLS(‹E!©µ¸Œb»½'øWà’gp¤μ-ŽŠRë,cKÀYuäÒ N\;–¬¯/Úç¾ & /_ǘO 뛵þˆ«âB5ꕽþwC­Ï¾UϾp‚O•ëþÛ/ßi¾<ë 颸N …˜Rñ‚‘; )=n<Þ_Ÿ‹˜ßl´Ió¶NÅèä 3À%~$~fv–4ÕCè§gT7ÿ@O؇¬r‡É¯÷W=Ký’Ù‰?SŽL­YëšæzÁÉo8Û<K/Un·%} uYÄ3¤æ²¬R(ÖѲ!û©Í«òD6cÚùŠB’ úÉ1=îÉ1£>¢ê ˜ëÃuÂ-B §19VçÃþ†‡$Ñö5”™a/P«–+U:¡YÛ»B\“;®¹Ýt>‰Å“žDiÐv9îWBŒ¦Dƒ¤ê@†M”­;º¥ÂÎyòkSL$ýÛ™Ž]ÒÉÀLôeð`û}‡ ²r$íQçºMnâDú“»Ô{¥áof|ý¼.JøÊþ¶Ë MÝïÆN©Ï…Fô ˆ]{uÕFð1öH–ßoÍíÚ8‚ ý—©u›ÝëS°€ømðK|>Êë«+,ì=ŒlX°%È5#+èøàøþ‡¶óL+ÆÉ3½¯®ve¦?+·â6´5æö9ìªoµQÛ¬)Á•‹ÆJ‘Cð?êD@gÅ6 I:ôHËÔ#:Z×·åÏœõÜ=g“ ÓÇïK\.4V\0¥á\|ƒððûV}öÜLDMêø ¶7@ö…`¥Õ>U¬Á™[KmèMöÍ^ùôÛy"ORZ ä6Ô‰a¸Ï´ Ã÷:×Í äO;ÊwfTƒïâJÿy<º÷-ª ú"òKÝŸGîØ£sØGÕßã­c}Fá–Cª:ËŽÌød.žóêšp¶t‘!Š¿$5h¶øO/[â™BØc°ÅD»™–6=v<]ú±hš‡Ø®ú\[?϶ÛÞšà'©ÒÒky›/o¢ŒÑâ;ÝwÖ#þ,Ì×ïË¿] ‚´«–/ž´tÔË6=æG1k p`Á»,ºFå¶ÞºLV«¹|˜.n@0»1Ó;Ìï2æ÷^q³®QŸ:¨(ìjtÞ‹÷a!Æú•c½ƒSä‹tË}T€ µ–ûb!¾zÞ¯­[s­¾ü1=ªw¾Lö ¬Š¿D–[Ý)XO‰Œh€IÜȰëc0>ë“?V2;fHíº´zpõx9š#7¹ï‘ñM:ž'Ã:Š;ó'äMþ*â8Iú·@ ™MkÑO¦Ì;†ŒÊé0TŠ.ÏВט#!ÄD¹T3~HÜlêz8©ðO/u¾'Sø]Ý [3=¬½“‰”…—ŠÂ'"Êší>£l0F}?t3øT 6O¢s°_»^ji·ßÇ=ù̱Ùn.õù< ¡í/ï9LÔki/D^«$NZb`ÍRŠÛ¬Ùáq$$$ʀܶžwÞãÖ¾çšlÒ ‚1¾†g$žØÎ¬NZžË§ºàÿm¹Î¯Æ©ûË˵4ÏÐY»–Œ©bÛø;Șl\6ËõçîóN]ú–«i©’—ʯƒZ£mŽ™¿Íx7 oÀ}ªÄ®HŸàägy*J“0ÁsÚ’~ßyì'jq?–¦ 5ÎEK2¯Ê‹°¯VøèÕØ‹¹ʉ2&“}Ïl#L%‡~ÇLõЦ¼þöÐïô‡ÙBè²>ч#[@»ÿý¶ îÉ/kꃵè$ÑÑ|_{Gf¡—Vì´† SØ€_…?ÖtÄ&#O8k²Ÿu{NOã’ÌÒN┥â‘òY7;ƒÌÝzPj‡ ¡Å ’Û¤îJw;œZ^1U튈Wç×C«‚ï"ÆD¿±ž¢Á¥ˆ ŠÒ1ÞÑz€Q%Y2ÒÑ§Š¹O’ÆOù]Fót°”à5’G©8TœlqâIMçq9ñù®T“z8tQ"p€_.-¶»ülÈ_é"f\?ì‰!²Óo.þ׹🭊´¯†ñyH®~1c™˜À$!XP>Y±T¹,œÖ‘g÷­UÎ碅žÒbymŽ‘‰4ÂÍgKfs?+ûz’^óù ¤»Kê‡m_à Ÿ> vÉ¡(3ÊEÔÑ@KQÊPElCl؃YV("iª|&¿½rªèþ·.braY2H¡z…aÕ fp°Ÿ)ÉW»9ê³w¼ÒwŸ>["Í6ùPï+ãD@#±GA*Äì`½ãd‘‰UÃ=†{<<‘NèÀTg¿2K7;ñ‚Žt0b@Xì-ønLð(ó2ßO×4…0ég¾#¬f'VæÎjKl‡Ná-ÕBxXë#hŠsÀ|%ëMŽØ&aÀ»~Ü]ÎA»uHêFzÛÍl’ðâð+I},[;ã)Æ“RCjbÄ/Ø<¶5ñ?hNˆÊ„¢ˆ Qˆý©/ëO¡´µ÷J†VДµ¸rÕA¨2ÓN9 ¸úBt:Ðl’åŸÎö__W)±Ýù"7$þRÍåÈpòã/Ñ¦Ž…`LFxüá±Ìàq5‹´ŒIãy~~x§5æA%[ú‘CtÕ\ÿYŽølT"v±šÜE»áu·§TøÚs¨NeBÇñ°I®U–òÁzØß~¹k êš¶ˆùŠvåeš;îOc‰õr;ä$ù쇆!`ºìB!Bwä>¼ë•¡’…æ–Q›$"õÃöf'nár×Gy‹¼(´[¨Nn”‡¿\rœ®ÒÔÊ+#üÔ_uCéXh²@.qE¥tF™~9ÏŒdæ™p†AŽt»¸hcõ\ëO®´°E}þ,cQ?ØÐá¤YÂ…(‡1omž‘–ܸ½Û%V'¡Þb+˜N‰µò“2ó™#Î;òå#…9Ó7÷,­–Ç{àí§VC/ÃO´DÕ•îÜ63 õ9¦ááâ}F|Gi."`pÔÈzsRPî;‰$\ÖP“,mÍ×€:¤}îƒFK‹#ʉ,KXì0†°å²où¬§ét›äÈ´cj©˜ùI YH5h*¦¬+E¢ïk€î2®r?߈_ÔˆU˜Û ˆ/VÅú|A¼&ôäÝ'? ˜J»ý‰­›P’¯3ú–’ßä”ÖaÎ"}(4aÓC¯áÕ¹Œ¥ˆô§C†œÞЦó7äôÌ);??ÿ0-C½«?–M_Y^„U"Ç¥Z'hô|i¼æ„^Ýxz "ž¸«ªæ;©)•“èïî½³¶|¨³ê± #¥DR Hª“eBGãø±>¥fsìªõ˜Ï†©²îýgk|~M¾oÚßÖFXÁåiöXá!j`µÞ°óTjå{ž?ž?‡±è&´©ÉbòxdƒëQ{É“³"+j-x+j,+ê-Ä~Öú¦ŸÂ9vªäÎ#§6í*î˜ýV%ó'ˆ¡Q¡žX ÊÈñÞmüðÚÒchòò5')%'ÕTöKþAÊß)¼ã*ë— lHOi´Aj\ƒ ÚoÿX,™ownÇ©­0IÿÉ96~uþï è\¥ò8^™¦Zœ€IxÅ_!†E½–ÝLæ¥þ•Ùžùˆ¢R‘„ ñ:$øÈ7Ù´)øg`mæ\÷A=5[‚Ú:ГÅÉž«H,ÙFoäÒŒÑñ¸a YV¶=?),&ÆÒÁ-¼Ø­@áùntð$Òaàèp™;‰LמŠãÔ:= (®úô)ö“ó/ž'/ ïïfÔ4=®·¤zãM‚‰œñRóÁBH• _¨KL°€àoÚ}Ø©ØØAš>·Ú3%šü]fªaù”ü!Y–HOï+ÒšÞûIÍûžŽT ƒ·Nt›ßác©?_¡±Z¿‡²9ÜÒÄ3›OÿÆ­Á/•k£ÏÙQ@ŠИ|KƒBj¥-ʈi2Éôi¨×¨U±qa^zïUOH4¦ŒÃi" L)ËÄÍx©»á5ôáVé¨ëü†Rüü@úP5Ÿr^h*®JJ>én~ZH ìùò阿ˆ§M÷×nÎ&Óþœ”¦K{ÅÞr˜°%-¯xëL¾$ }(Öóò]¹ù],vWTáÝU¶$‡¿<ßþ"(âŠTnäÁ„U‡À7Ä|¨kóÖ.ÏEa;Z}ŸÝDꕽYÞ—Y„0XTÆxhÝü1¿^eu·oÍH½Ûr±•6 3:Ä"ziÇ8îÅdq—C~?؃ª–~ÿât@<£€+Wò•Sا2žðÚŒ -(¨­ƒTû,Q¬&\ Jí#½¥ø^¶ŠaÍ7çËÛÖèÚVVŒ›"@ªo0v:C@ŒÕ<’' aA6¶ë!Oå|°,˜¥\¢ÜŠ ?Ótܾb–Ê”† 8¼Žû~ð›kŒÉvÉÔøc@ÁYõ«¤¨–I6' Où9E#Û» ²“›/3YX‡Í¼ýJ`:k^XÂLLåÆÃ¥ÐŸš 4‹^¥*—üYç‹-B…ÀüÊ%>šXâ"eòc‰Éi"Ø`N|6ù—\•ªR?›ð¨ua,Múõy{Ÿ¾Ü•Æ|_–è ÕüîºÄ)™´*VhŸ>»9JÛäcë£)B\N°®µÎê U¤ •r[ÆŽv+ЩæèZÚt>δïlb]ü¨×ÉQdná»êcÆžâlçŸS8=6ÉÒlÒX&žæß#‹lO߯¯§JeÞºUä^Ûûq þÕ…ìnð_Öî’ó+&#¶Bl^_.UŠe¢îTM™ÕIÜÆñ9¦¦$úöÃP¢ÔXpd(ü¦ÀˆˆõÔMÓ Ù÷36êÜ;ÙÒLÙá2 ÍaÊ!?$7V}âÍÏ<£ÔéLå–!ébʳnqh‰Ì¥z¦[z¨®Z¸:ÿ Œ!!Û8<S0ÛHâ¡dE½C,U¬)ñx3­i…ƒï˫ױ„Ñô¹¹Áå´‡|*â²ʘÇTj/¦ˆ„»VóIj³aÙM–qCÄÄ^êMï çi®“Äù¾ ·Ø?Ä]ÆQ.c3È’P©@,Š”Vɉôj£åÆŒÊù‹ˆŒ­©>¾¾›6ì#}gµ[vÞö¼[tŽhŸîÝœÁ yñåú5%^î·;}Óö<__ëëh ‹W;îÞþOí¿·®Üo½fý–»ÕÁíO×’ñ@M䦗ü·v®.Ù3ä[[[òqo<˜Õ°È Mã€ô]ƒ÷PôÊyó# XŠcKP§û‡©·A]ÔVµPÒÊçá,yê"Ã$‹§9ê+ÎÞ±:Ü?œ”Rég+ yaJ[ÊqõêÂÞ£¯²–! ah&+"k>5094L qc:—ŒÌ¢n…ûb¶8, ¯¸ÏC´«S ™ö'«gÅξ=#Kþä|¼B / »‡µ‘{eßë+ÅWºÌ<³8ñ\Ccb×®m`!Ï–GYÐÇù‹M'Ó0+屮Jªé‰Póy.ú}§¾ÍÜ[~3X9[ñc‘µ$–n™ÒæÈE¢³×ƒ%™X5¡®É2 ME܉;Û8Lne°hÕŸ Ñè!ñ¥&@Hy!{ñ}Ž[€@†)ß&«-T.d–/‘vº; Ȇ õRF·‘Ù¨ð8öílÊ}0‹•)`Pb 0e2¦ýf†êöü! ³…mifÛ/]åŠc䪲ÈÜídD¦ØÚ¢0|Z±C¾ÕåQü¹lÚM/M¸ÏES›c`ÌŒ§ JÉd1p˜Ù íéÃäF`kD~$kL¼HËB) »/{íâDŠÅÒb Eñ”–ž„dî3\úqµâ* sþD]eWœxnãÌ|Œ\ô\¿|Ÿ?<=9vE£¸OO Ѩ^(èÐÐOävpX±^È!…7¸[1V Œ«H¢D<#SP„îíñAÉæœÑu²%,2^}T50Ú÷ñ$ù\üÙ8ø¨`!g¢!g‚dÑä„*ëÚcm·VqÉë&$ QY"fó.OEp™þYôrg~*‡ËýXxUhúžå†Dw³×A ëf›û-ÞqEÎl-Ò‚¯5 2)žb| Ñ>Ý:™ªþ`6¼î ¥ógØrE|m‹Qá3÷Øa„þ7Ê’Žo±±™^R¡T®±¸œû \ü±¶Ü(Úõõ¢¹%›¾„cÕ¤K•| ¥zêb4ðJcçs8®TX¾ÞïÜú=}põ'ˆ§-ËFŠš..¶eV]G™+¤ø!¶®×¸ážD¿=‰˜Œ´02%"pQâòà:F´‹X’ôT!(4™EÀ  ©‘Œžúxfœþrº…Õ1ÒãS@Á•°4eÕ¦|íÂ-±mÐå€m]U€¡gþ÷ÚÔ½$!ð•òu>@ͲzëòËiÁ1óè9»úÂ+»¤ƒÙ½c˪I›Rä:¿²?ÈÐëÑXž¨ /z`ﯚf £ÍOÕr}!A§°øní“* ôi!ȲࡉW'£2 $Ñe™åL/º®FÍâ“Íd˜ûv³\-®ž  +3b™äò«¯oõÛ1§ms×—<4qÁ1÷÷ÅŒ"gÚ|“éxÔôçë-I«ÀÝ&Ô”m¶uùj9×ÔÕ›e‡ûFlEµ ÷¦ÝF—[$ À<ô4¼ *=!Ë´¦mÍ›}ÆËcR}ꌯ¢Å*f`j]dÛ[}¡«p9R¡ á›u3í\yÈs4 fË\dôî…ç XþG—¤>=µº¶éD;«¥Iñö'ëÈLŠÇŒN«èHYµû®|žL£o)3@þ€ž”a[›%Y™ºÍr¹…cKB§Sw‚—ç¡8!`“d1·N›M2Ý6FÙ’Œê”Û`Hvå–#ýgŠïåYÅyÅNŠ£ßÚ(Av? ˆ|é­r.xñ›O§´¥MmJaûS"àÿÇÈ?FYÒD[Ãè.³Ë¶m[]¶mÛv—]]¶mÛ¶mÛvÕ×Ï9ï{ï7Æýs3÷ÈܹVÎsÆŠ1r, «? lºrÛ`þRÞÃês!m†f\ia£aI­õhá‹7‰ Ú԰黵¦éàRþ—b!kÞF¸o%î«H—fû1Qœ`„à y+ Vó¶ú¬ÁÎÑÕ\u*LàäuâjÔA‚6škç®äŠ$EN”cpÏxí,TÙ0jGº€[µdû×£$;Bù•vàoú´'Ȱ– Œÿr÷€›àáÎû™ë¸º(³©Ó±žt‰Pa·9*å•%Z\gø çQ=^7.«—“QVÒ7’¿qT™ø’íÊÆ |Šn¥[’3b ñ 8mnð8£ä°p’[’ ©­e9B\º›äè¡1e¥lQÌR¶´ã„TUí®ÂÊL6΄i&‡ëƒ¹ ÛN7†ƒ5½¥*þÈFäÖØÖ(ŽÛü´3“!¢sW~„0…DZÝýÀ”>‘è÷*Kš‰†!—Šá8… SüË“ŽÕœä)¤‚ÿtì”!­ke^0¡"%ô_$f‰Ü0Á€‰¹•œŸš<]±—Ú×*?žÜ,~¨;)â ›?¼2Ž„ëî\Y“†Õ÷uñZ²Mëø­f °»º¨‹`Fhùý e×ò¢Þ´Ý©Œ&ÉÄô>w‚1ž×ÉZ.呌-î!õ¦©ÒYäH E£ˆŽkwžgÝ瞺­­­íŠl·s ðxü‰3S¦ó·<ßS/_âV8½æˆjŸèrÎ.³&ùÑoìŸU[>¶Hk áøš% _à”$g}n™6MߪVçS¹klû¥6…Â$”F$Õ¹´Š°¬Ž Ь‚”ýF;<š„nx¬¡—îêÆÓ`õ`–Éü* ;…VÑu´á·;:F@_»ÿU¡j@ýEäå¯v²‡—½§\zŸBÑ‘ ÛÛBѧÙÕ÷¶‰x¨”¯ñ4†&“4` Þñ˜Tó6-œä—mUÈ3Ýg®Sª¥at ÿWß…à‡›Ÿ3ãÊ`Sû—E©Õøùûµápnˆ2(^Ã%“S  {+¬««këÖ8Àô/­› c;!ïã0DW׿_?wGze'è·“Tç f‰›M ûȲNï.ü´è”MÇÙýöFï,|úÆóžlÕÏ09øœÈe˜ ç̹a§`„Žxn‹)@…qÃ¥Ä;ÇÇÀ‰3A SŠÉëŒîQ¹ÊTÉÞ‰yšxZ„è¼Ä€€Œ3N¨Ø¯˜ñ[Îid€s+š°~1 ÊEb¯Ñ"¾Á‘ï·óW5!u³l®Tè¨t¯©” ØÛÕ³;Û²)ÓbÒ3‘É«Køn;TPªTxÜW?–N̩舉OÖ€$Û¯ˆ!!ÝW£ã””pP_>b0 H|²W2 µef~MËS#\1A2wñßjÍûªó~)¹Žgª·²ûÒHÂñÓÃ&ÚÖoçþ« ¡¡Á²lF¨<yÅ]ŸcîûßéJ:¢Á#¶Pô=CXì´Þmç±ãà¶° ë*^A™?]Ùëƒüô&W·n¤y†v@Å1À™âž«#5ß@ª‰Z7®ˆ,n®®®ÿ;‡e¸})’¦Þ¬/Œaö˜œž·®››Í*ZÔF?†žŸ¦‹›Í.yµß¼^¾ÿV¨ÕìÄÁTÒ—Ù3ªô鈷¶¼¯ˆ;|ps– 0;œ±û¡»\Eù“¿¨,‹ÐíxÆìX«ºN¥6^˜‹ûµV,6Í“xÎÃÑ×pM®à"‚ û¹S¹¥©XKâÇMÊ”“9›^>Þ½v.$ÏÊ”U|k¶+ü¦ ôÃZ+¥ê±C×ÍpÎ FÑ­iÓ\0ˆÛÌÆxǰ`h¶ö;5OVlÒZ;z”È7Ÿš`ª9!Ìж¥Àh˜á¦l^œÌfþ(~54·QÈ8¹[Ï;ÓF d‡E>Ë™§›[„¨±Áµ#$K+‹ÁnÈé4l5N‡±!AO(#ýxúWeîxÒÞJîßÀ3rï¦M¯Ÿ¤”)‚üÃÅÈIIÒ¤{ª^zÂõP«¯oÀ£îÁE äï0È,º~„ö§Í6)&ôÍâZüYîôòÃÕ¶ô„žPSû¾œž‡ žë¦€ÝÒ7—ûv³Ë– ‡ß]€Ý0â›ÓUn¸ãø9ü¹¡!0«º;YHÈíý-v;ßû¯·“¯žç`ŽÝÐ?ß×Vÿg…YkÁáú‡ä‹Ûõ÷…ØŸÖìÏ›°­­‰PŠ÷;üHâvc~éø…ÛÕwê1}¾,_ؓΡI™Ÿ{%²X‹žÌe±|î¥a$Õ4u—Gé+pÄ c™Žggæ·8õ˜Éù—OÒÛÖ_Uýç°êÂÖ“>ÂLêê`.©®ßAωñ,åæÊ¿O¿÷nOåÕ¬ã)9¥µdå°(½½\§9ào‚O ¸sôH+ Œ¦yf¼Zýn7δ¡Š[(‹äšh.ZÀŒÊ]‹Ò‰ùü?x/žVãD®Ýg/ ¸dJ=vãöèMöÜ#/'÷ Ç'¡7w;ÈÿÀßx¿ ué:æäz>S‡ìA8·cÀÝ}üúfë•C•[rG:õðûÓÚiq}?_åÞÏêÍØ™èðšãÛïë|I!cZìï¾bæs™DVþ½ït´Û}‹(ÆÎΞù€Oï§ ‘B]ZEãÄq²É ¾‹‹W)ÛÒÆr@—yq{f“%h£R|áÞ¸§f±2®æ4­äÑBÛLÒ÷pÿ…xµ:’;º»V/¸A•ânY—Æ‘¬@äbÜ!eÙs¿ßÕÜgz„;¬îÝ}€'Cÿœ¬ýöHÙ•YÝgGùuÔu£•µ±cê©}„‹»=u¢€ãA+7Œø”ÉÄP0¯‡6œoÜóÚÏÓL~ ÎT 3<ïT´Kб °µK˜øî——Q®µç—"‹ Ú‹¢Ÿò9qÑ<¿ÅuLj˜I½IóxFÓÊXžZdößBz ,ûAÃ&'œÈM,‚<µ¿áÀ?¬U”†{¦‹-*5²º("gLÂ8w÷wçhbëÒ¦Z»N¦¿››—ß÷wžµº §9ˆC½FOØ:ãëŒ!̽þ ‚§’ýa8.ê;‡Å dû¨W7%L •C²ñC:çsíECÓ¹{’Âù8}òxš|ƒáÛö‰]ÑɯÕe {Ìî‹$Ü.N9× Û¶Ê}ÅÙ¿HyýG"ÆÖD- þÊ`Gx½Ú=¬íÃZ£Ôý<>}æð‹ùmF?þ¡ï¼êÁãùdaZ6‡D5SDudž™ÀSªü>ô˜ý3 <6&>ž9lœ´¿ f•…’ÿAÁÝ);@raíð\)o߸›}§ÒaWðanp–u̵RKP÷n¹çæa‚vT€±DcÈÓÓ&ÜdAcÜÇÅt­ñŒÙÑßy0ýÙ’:ˆ¾‡ïñÐÁ}\âmr Ëh ‡1Rm9„Þo{ÚD`âù 0 Ç<ˆZ‹MžÍ|º›N3>u"ð«©•U€‰’ý·DÌÖåEt¤BjõwOaRÃߔLeQ$]Vïé9l[:ñû›]nÚ4yDò»ÿªÉ"Ë} 릜x'Ò%@»í<Ê”’ŠÙ2õ˜ûl&¨šì¬ZX 6‚ÛØ¬šXÝÀw0^p¸ÜTâ¡Í‹k ê J¦iD‰ã$Ïz]¨æC$’)«ìáxYÙòxE¤öÃßš:ù–”ƒÍR·­¢¦œ¸-a|pžüö6À;Ü< wè³ò…”ƒýh›Y忱ë8)Ð@–èå…ߦ€/çPé:¼lÀúûmÚÜê€ Èì¨Þ™FÐ2>¦k]ôMˆhýù¥nSe‚Cß•*Úd2NŒ¬4e“€ê/þ+ê)rÖ°¿¹MUù®dk·¸*z!Xsýƒ™÷øy IU5£Ú¯Z“ƒàú:kãªò7ô ŸD'zöËÓÄ©-Á§wæÏáûÁ´×øbR¸î¸À±ª&c1Ãð! Q^ÿ"¬?Ó„ÍÌÆòZDP×À÷óò)øwhÃõm‰ÆÂwƒ{ ÅcLYäú¯IøÐ=Ë•"¸ÑTUøbLñœíÞÒ°š—æå !ðÜþ6¹SZãö¢q7;š¸Ì´¡ŒFÝœ& ðÂŒVa|\]# N8C S9E²Ô$<:9NÏJ¡ )ÿ$J£‰Ú_­OÅÚþç'Áçíõö¡²/š«ó«¤¨ë6í)]h/f.$³Т»^@¯„T'0Á1XšÔ… ?V?w¹ïq±È#â†=4ÏB8ŽQHóˆ¶-ô‡ò‘]’dåÁfçËó•µb$*|Âê)¯)©I£äGÝ¬Š†6»ˆ$~—ùÑÿ÷í=3_äüz³9w+G!ä»ÑB Aö«Ïþ‹ó´zÁÕ]dËç'}jð\‰^AÆÇéžï“RPUŸr± NjÒêñã7¸:8wÛF®éŒ*uÿbˆòÕ°‰ÔŒ²d½%§O0Ÿ¢å—aì¯k¤†TKåÜeÔÙTêß6¶zQÙgJ+‰IFZŠ Úx£ƾ{oì»Áîuó[ësÀnoŠºÓc)Sùйfsã¿ þOm×<Ä¿Œdÿ5 &Œ¤ÿ»ÕŸ,8œú_Å× ÚÀ(Æÿ©ýªŽiô?›a™†ÿ§¬5¦qÔ­U&6è?6UÛ³k&Ó·óÕȇ@ h1I‹©¤˜ã°zî¢0ŸlbßriøÛð '¿©5â“ÔÓÚîì(…ˆíØ2,$ÿ™’ƒú°‰rÛZ»Û¿¦R™óæ[id+L¼Ÿ&øgN.ÖòŸ5½¯Š”ÔÐDǬ҂7íö¡ˆ±ÏizO?â!§D½ÅO%&tŸÈ&@Z†ÀªŽu\í_ÆÌ6ŒŽŽžÖ#K†LjÆ”H2ªÛ³/e† ý=œ*É®W2ÿx®‘Å7†HŽëN¡þç»7'ê³ÛÛ11¥`Ñ*n¤ÀpQ©LbåÆ]²Ý„B£sSÉõ--¾òpÂØÕ/2­FU÷{Z¸ x÷ã[Ÿ.4%%åànõsÁ˜ œÊpúò £§ïزmÙÈš2ý×оUý–K)Ãÿúþd¥¿f]ü:©ôïµg9\)¤«¢«7Þ5ó c£CƒÕB˜¥†¹·†œ&1W"KÐ`a–}ʽ ,Q¼L`Þ»áÞj"Vf]•×ôŸôL §,Ž£  riœƒ÷ì9rfŠ‹½dþA݇i„L:°ˆEUjþT1YZF¬[ž·ÙjªÆÊÑÒ|-²5hyUl\]It”Må¥1¬²4]ç©"9Wñä—4ÕÝÙ‰ núšþ/¾l¡:,ÃT,UßU“•I­¿cSô*2Çvr£×fóóîwŠˆ‡§Ð ‡ÐP¬•TŒ¹Fuæd=¾=ïÒzûžíÓnŸF:º¦Š%žVhÉ`’Ý]€˜÷kF <Œ´ŒækÊýF"Åþ<ÒG»Kô÷<þÿ!Þ(òÅ™kMwÖŸ.P!ЄÑH%O ûz ~ijCœ{ kÕçÿÏmç‚FA§ Q£Î'."ÉD …|avIl–Û¿fÒÿs¾nx¼ýîôoLAü㣊ý—TªÄM÷ù¤oÏI–_yvf¾£©¥»Ìدä+Nù†ï•Zª—ô"‘&-½#Jªð¦u?Vá‹'j+6õìy)–ùt½:t®òæðʈ÷a÷ åø~6[ûÿ|<¶#ª‚¬K‰Ñ§'Ö£l›,SMo“)ngùãµ'Û.·#/‹8+þºo˰å\À=kÍ¥¶/@19ËýÆŒU!NƒÝMpŒæÊpòðB³èÓ³«weUȡ䑶Ò7^Óœ«…îH™‚Ztû”ÖÝ…^ÿ‚ZÙzÝa‡3=U¼‘Œ]³¿™åR2U]Y6€`ÁûíŠ_WeCXuèßóBªºd²\Þ©N»ÏOQP¨ç‡4w4Ä:Š3?µ½e¶ŽX”(iÉ ü\Æÿƒ{þ5¢Qª~¡ý‚¼å±îŒ|œkœW0qpíµ¼­›ø¦tHS„%¢Rµ—DÌOH?â]“äöI7X>!®.&¦áµH7»NVO•ýɘ©À±PLŇIçɦâÁ™Æ“.FWl\œÁjjµX°c^|©€}¥ïÐXYÚz#:8¿^<Õ-Uh4ò‰½Õ¶ë3³¾ÁÎذ‚–\où«æÊT‹ûQ«›D¤' JtÞQzêà;âžk|½ yÛõÝ bÆy£y5km‡©ªeUç;ÒWAÄixy€Ùï;úBL,~¨>6ß«ÕKXå±cÉÛW#™Uó›R ¢ê§ºÜÑYv!¡BM¶~0í}.™ÉŽ>²Q8:ûïLZJ¥D±rZ|Í¢ò‘K––˜ÆÓm̬çsxv‡YåcÌ{¾w%=òÔW~%eqsÕ»hþ‘ÖÎÖEO:ÚºNKíJÅ0Ð_;¥:,óC£#”§Òø#åv•¢Ët¾­àíࣰôŽ‹'®+òĸ„’˜…÷ñŠr«1fOw1 <˜™-æãf—ê:zäŠKºòÓeiI²¥§há•3ÂZ‹Ðüö¦bô¦¯‘¬%öª;º‹ÈîEªcΡûTÿ˺¦ïª+ÅyjÚä{;Êø„_ô¤w Rܦ'œ&cž…¥E†Km¾“ñš‰‰AªŽÈy®9‘LÊÑ|Ût=n›u¤†ì*b„c3é)ÅE.«éõê·ê$Çñ 7Nl½©–Òêi–Vã_)g.¦í1r‡©¤” ŽéåŸj­.‰*ð7U6DûîÃi[ÇTàVÖ¿À¬*+»vG¢ºrƒd'S˜‰KÌ“E–Ù‘t$˜ŸLÏ‹Ëy'cMz­­´eù3ÒštNtçÆ+Ë6ÄÐÊžÜ43¦VìÓtSÞŠ24óͯsK•EHõÞD¨O>6¹,SN8nÕÿWîfL™ k—÷÷Š’ÇíMáÿ£|6š÷ËÅoÞÕ´eØãÓÇ´7È/Qäí¼ìc…xµr»Åº*Ø\Gø}å|÷+ÊÜJD¯Ɋð„=Ñ lf7Ûïåvÿ$]ÌOUa?ñÄÇ9ÿoáyÛÅ—ÿU<àÿ_\Ne¾Žíå(Ô’¢ Û±âÃy)ó 'ÏvßW;þeðk&ÕAÀßJðsûa±{YŽçÎÄùÀ´6„19àÏohäžž&ú»xcnµbVaÚùM y+ý¿o.þS}GÊi¾÷¼N‹Š=Ÿnþ™|;fôý1L}†5y_öšÂ,8²æ–:4½|7cݶ5W’Ž„×c³’D%‘âÉ è3`É LK|T®¬m¦’Ò†RËýL݆ê¾}ª¸ä?wÿ»Ø®Ž:8¿#]W#…”`À 0ÖôLˆ¬'Ö,¶`ÿym!üxþ€£ovS¢ÿ™ï·~Ñ„ù8}<[š²gbž(ØOT|é38¶$ËL`>rõ…¯pÞMµèÅ~úÄ{Hq^û„ ¯ú9XõÚ}ÎÊÁEä5ôž–V,¤¹33)ñ=«+ÎåW:}ŸÏp –ô\¼Ú>$¹ÿ?uBâË^ç%5$i5Šäjlµ@(Ö®UÓÚº¯ž‰þéQTvÿùä Àðî*¡ ¼³ü/ðMé\ ÏÒe<€Hê¸Ýð`H‹.Pÿëaxåäú¨¡Á–óÊJY¨ÀFý‚“õÎ:¹ .ɾrÑ5G~£Š½/ЏGO’™à¼ËBæ?½·3Ö’…@®hÔÑ@>=–j´›§8ðåàSZ”¶Ã¯Ÿc‘¦R}«)¿ÿ &¨mrN1öÍÎéÊ1YŸØb—îöIµQúBå’lîP1-¶Þ°£ß'ß"Æï¿ó(­¬DåÁèã8õƒ9ŠÆäÏ„Þs¯Õd··òN»µwôyA ´+vÚw“å3‡Qø±gq¯y¨_ñ(›ŸÙ–ƒ°ãø>Ûƒ¡Oʈ1AI@I'¥p~c¤{LoËeƒGؘ¤½}Š˜LLbFùžò~"ZÔˆ“Žãè‘Ø¸ G™œˆ@ß“°t$Ú-³HXlÆqÆ/T<æ-Û–=œq†¬éÝv¼¤‡àË™°A¼FÌ`V¢J.&?cè[ÙªC“ª1åöl½—e&“ÜÖ¹ÛGJŒÄXïT†ïe;–ò°Æ£Æ¢“’Ì‚ÃtÛ±xZúËкøg!§3~Îçé?ßäIßä¶8Û³¹$OÈoÿóŽl“œÞÁWÆ!N-J«„[Å Ïïõg‹ã !Û;LÖïþxz÷2säñMó¸ã.ñµûÁWï묎÷ç-?Õ0â&Ã(vÒ')†”ÅîiVž¹=fÒŒý=S˜ØCÿau¬½2BnïòÓ<Ó‹‚òõ î;³óÖ3÷_AýÊpzôƒ†žœ*{zÌ—¹³‡sF?ïÜÿêï{º÷/“ånÙÖXâÐ'÷éô5Ñá5Sª/Æ­òîGÌÄKh°üÀ©Ý†ÿë­v a«?æ#?èIØœÒ7H×ÁÖêO`&ƒ XµÌ¦”L]1§Ì•\> ÃrkÊÌdü7~ù.ÈÚÒÐeòÜÐâ,™t·:Ùom†õ«ç¿ê¼&ŒÛ×KCL-­æNŽÿ™Óú%£d ãr÷xìw TË ²ë~#|õÃeþYF•Ä÷!†¤í,#£ù¿vÅ£Ø<Ì&ÝÊ«ˆg¾&ÊT5P×a{îz¨¶v»›f>E?í[%¦S 'ò,ΣõuÑ©3Ç´-(sUÒ%>XAjoT¸u"'(b>,¶\¤MþϳG1í@Ú9Z“;a{\HBêU«2;îåP’ÑÔ ÿßN0ÎŒ)û àþˆ¦Ì@’õË ]÷Ãk? j.î¯ .c˜È ‚Ö¬$ÃØ}†:‹ælÚ?ƒ‘Óé¡;^€m·v€ç—£ã)ÛùbêÿéÊ"Ó…8y‘ÿJÕ°ûÙ­÷coŸò>T‡Q°|æí4^üÿz}mŸ u“j ‘cŸ8¾ÙÿE]õ÷Â"v_'®sB·x‚_&ɹAÐòÌÈ”ÅÔHTšu"ÒÌŠÐÊ}Âìî7Ç7öX‚ýoàÂïDíÅpU¨Šü%S<…ž gåT ÿwÝÿ rŸ§Â‚'X›Yþ«®V2èNœºÒmzH»µ£ŽÈß.}c|ã™·!i`4gÐ¥’xì rs(’î¹ËáNþ‡ãÒwtƒ¢Ò¤Þ#^ëˆav¡§C;ƒQ ²‹]zIxäX#_¢_Í $Ý­W-ƒ)‘woC'LHZãc±79^“D¤¾(àe¡*_e„£Bá¿$Ÿª"¤Ò ƒ%@ýi.ì§½ù­[:²dq@e1ȲdIú]pwv^:Óïf³d¨¢‡Ó:ÔÎ>½? P Ìß}Õ¨Ö8ìsG¨Uí—3I}€z]¨%ˆ>]ÙÛqZ«,=D O`Š”«T1D$f“0¥7Ì>íÙ€<ÑëªJã¤EÈQq“ø+gkÔ~Í»wYï'ÅIX÷ñâ…)Š,Y3œÀ{ÊA£ý œ<<2Hs–DÏ/ÜBâ„õ×Re\Y×ä]Ò’K¶n@püü±íógÚÐq®ƒÒ>b) €Ì†®.WgNó&BÅ…†Äñ.ÿo¾Ä ˜s–ééâi ÷¸ xÿ“¥ì›ƒ5HŠŒtõäÇþ¯yß‹UܨCTÕÈS\KL ¿ûÏ#}Š3âð¨'ê:_Þ>ÚGvXrüÕC– ÇîàÖƑP¿ã Ú-–ºÐ„@²E ဠ½º¹~×ìðƒ(Ëä56ˆÙ3màÛ¯/ŠsÒ+…E¦çt'žœeËæk`ÈÓ‚=Çé.nøÁl…Eè Å"#iHÌŸc‰}1?¿¥Š5½ä5ñ¨p“1𫳔¨']zù# ×'Ûvà–ÆÈ*9âh$Ù¶¿õ3Wm«‡"fîzd+(h5­I-U`LœŠL‘¯Ó}÷#GÜkâ†sƒþ*ÕêI"EïQ]Î'wñiÒı¬3a'œUËUÔI’@ö8¶OŸ¹k•—ž]ǬÄÛc'݈î-z2žwÕ‰H€“ΧëÏFä¥ V·à^\BE@ôo%™ŒfÀ_jñpïúÓ%Á70‚jÅ(³e܃‚BôšZ¿}Ì´èäYªk¦ªPôT¾_·ííÝÊ6º£4 €‰¤x “¡lJõèÂiæŠA‡u•È‚Á&éZ§hñ´Q5‰; ÃÊ$xr½Ûeq!j£Bãå’azlâ‰øw_ P‡ôqÍ)[¶ ö³ „Á̆ÝÊŒ‡Îr ¸€×¯À—/tî‚ lŸì¢CB`¯3BѨåµwíL4²lÍžåO`î*Ûà™aüA¡°øò5ÛFàTŠ8 ¾Æ˜xJØåp×ò*ïô4ó~—Âîí{{ºáX-¹ÕØÞpléÍ´4þØZ~¯åÖKÙöŒ@ÇŽ¸tJh\çvV#Þµ˜QUMHçwÆj;~y+Õ{¤Gè—¥s% HEVÆ({úÄé–O¦©¬xýt#ZqFCx’oµ ;=ONësqfƒK~~:p1± Jx"´ÓiQ7(2ôD1±ì±6àKVBãôqÏ®­àfYÏý­§…5÷‚½a‡M3*§iÞÕŠµ/ßuóLLt[î“(§BJ$s¸#@«Â«Z”ßÐëï_;W>ñÕçÎ8un™ V(F/?hyc";†þ`´.Ûj’êGT J–dÑUŽ2'*Ò”M] Ä&‘¿£aôNž|}”¦E7sC"Äùš&5¿Õ+zþ2yH:%•hBÐj€fÙÿMÖZ&Ú|ÍZ7±ñi÷lx¡#ŽÎÒ›_;=Svû'o\{CcÎÁóË­ì |Sm&Ž#°¦M«.YgB6NßëXˆzÁ†Çh !”=þX³âÄnÒeÒa új¿Îf¥Do?cÝçšx ¬ 憭IËŽjq‘=ÁhRÚttæíânq0ÿý­üœïùìëqP@D+Ç>È@˜_lÔ{zK„ÆË¿¿FzĆ܅©æóܘo[:ÜhrÁ‡µ0&§r)šöê0˜ аc$«ªìá(!OãGÜ›m:W#^ï¦4„*r(+_ßvCÐ |aÃUîE Àl.+4¡[ÊÎç‚Ô—µ’÷ͬDÇóT0.túŒÿô‰âB– ž^JÙ®³ÛwGIPÕ &ù;ßF Ј“úhMûAÁxˆäGiÂ8ó1¬nCöð¹m2¢qì±›[9¹y£Þc'þL3E$@õÊçË!´¥µgÎZÓØ4&®ÿCÅhxæá†6¼J½Ý#‰³Áùêûé/à5"ºÿ˜âúéÄš'ò²âÄŒ36èþÇÂÐØË×#óîì}á+†ïà5çÙÚX! ûÄøö{·…×bÐn“çŸÄ *' Œ&ÚŠÌÏ21]”q¡ß·û>§t%Ãªéº ÎIî8®ª´y¶> æ¹ÐMö<áö<[—hx4Øù|OSZ°‹EùLÞo4ŠÈ–+ÖšÚ½ò¨Ýºí{@_Í¥‰5éõ(3ÖÝ%„­:lmVhµ)Faÿš®=Ù^.3Üú5hÚbxöEÅZÄÛ wL©5üÿx.:mþ3h%=ï,®8N¥¥¨ ì?„ºÙŸSΣ$y§†#@ÅÕ2¶ŠöÛbFˆ-{vYñ¾‚ÇÀ$Cí9ò„Ãl…ÐËF‘¬Xßca®Ø©é0º±pЊ! |èͶqM+ø¬â‰‰Ìȯè?h?¶}“TZ“†¡\+Cm÷ ­9.Þö%“ õÇ'M ¹4‘¸“ªmHFEX’­[o™ÓW`ë¤ÃË ²Öt=ä¯e¬Z"‘¢;6¶9^+àG€„³ÖÓÍ–,³–}¦/Ï·ûYb^¾Ou?sø„žÝîop¯ ÚüZÓj[ëŸFÙ<7½ÒÚM''X¢æMIštÜ<#>‚smy7÷-)íÈÖÔi&ð¼X³Û\I cë‡P¹A¨Ós2|…÷¹m!HG¨:¸äú‹Ì’5‡&sI‹ÛBY‹mõ‰©Ö5õîJù”vU³{ÿä8U`Õ_E6 7R, àã#€Ô33 3äÊ ‘ý ‹ì?=ŽMД¡ˆ~N5ûõŽ¿ä‡~‹¨¯™æôT­Q©=fb`ÿȽOD‹Õ äÛï8iÊÍ™L&®! œDnƒaýœ ¸÷ðÈî·„£[„*v$ø>t»ÍâÆ“°÷ÍÉ´C¼@ú§ð1cû¶}÷ÙóÒ(Ø#÷4åôµÍ ‹Ñù¶uñ¼FezX—¨ ÷áÆå‡ªÒ’xôû¤ô%€DUÍá–åfg€ò*õð„ö1­vlhc„suUýkL¡¸t\§ÄëhF:ÈË*µiRÕÇ3òD¥šy†ðXmÖ]á€Ô?ò#°Ú «×dL–¹ç> 6cÅŽpFÕ“2×PéK‚’8©¦¬ÞÉ@°Sä–>½kz(ä´NÒê1ç%ý_Ig¿üž§Ñ;mŒun¨ÍE) æ1®Ð$D7Dâ×èê£dé"¯ë©ÌS†_hþ5MTfψ¸K;F™ÖÑ4D7™„$âÌäq aD“QG.I¶Hxßy}ßG æ&_-–ÔvrÞ!ý©M à€/HEp"à–qø+±Ÿ"äÂC;cáÌâ¢iµ™”~+açð:/”°áÊUÛÎ,¸ª'ã¢ÔÒ‘ðQ-ÒÖaÆJœ´© U¡ÃÏáwgVúÄ©Ñû`2½×*Ï+†”Ô—ÈßñÎydðÀ³± ®ðC°’×–$Yö› ‰<”…ìEc2£¨"L¹†¥¼DCp#-ZÊâ¡ßÆô[މt|IJÒÈ"Óª$¼Ã_Ô_Ž…›dv±3ÅÓ-ºTž–uÝ¿ ŽZ~uGQ—-Óˆ¤e$%Þ(†û…ZÉi èd+°µÇ•I{”c–’$kl«ÞTîQï)ÁýoºÞË8ÀfTNùØ"ù£†×kvœÌ#X@2«• ³}Ê~÷±YNæëÀêŸÔ)õ†å"]ñ›Î؜ާã’@NNøëìn~ÄðÚ—Íž8È,ò¤º#m¶¦éàî²å­ûÆnî(Òrt!’þ¯i­»þš4h ^¶®Ë ’iíî¶5Oæb÷­a¦´16Ì¢D”gb 5fFHƒµÝ²ˆ¤Ìô¡ JŽ5´â¨• ¶-´byÉ2åº*´5>*:Ö®(‘K {¾d‡à9è‚áG¥±ûh MÿJ!yB#PÀ…äX3–JɆžŸ!@ÞÔßFèÔ¤ðÂÆr~39DÖu'ª6]œØßœ€äüqh&ðd/” ÀáZ¼¶ŽŽ{û›÷ãÑpk `²òÛÑr œÂ-)·âyU~ö ä)6éÜ×VäúÍýÇΊ2;=#µÊý¼ù`#ÙAëgÿUÏyàñÁ̹j/@¾ºl”«·P¤¬ºê¬tϲ¯^v¼‚8èÏßÄ·4yNª-K"…IesÓÔ[rGóP:?k(—býI‘Y'u! O10S~­Ú«î ŸRŠPæ5á0¸¤É6DDa°´bPGšT÷º¸W³^*aÝa 9µv†=Ì^ÄÖÍ«ðñ‰pŠÅã&Œ|<ù=m$$®ùè‚ ì¥ˆ­&y.9¦6Inç @–ˆ'HÛ>ŽÉò(ánHÞlÒx!0Yö¨öa-Ìø9zúñ86úÖhp/ÁðF¸opÔÉöÉ¡04&®äXI_.¦ÓH™ì‘4·Ië-Ý©ìÌ#ýkãq ·€¶4ðŒÍ+N͉Žêæ ÿd„ª– ò²W ±ÃŒš7ª¦|¸7¶F U^r;~´íDZG’‰•¤Ï0Ái˜B½XAåJñ§5‡fÓLV–Ý…ù!o:Þ9ß¡†¸X˜ÂtÇ 3x¯å$1w¡”òPĈþªn¤÷‰Ïí·'-ëkpâ’è8¬ƒq äN7XœiÇÅ#ÂÛ3ŠºÁÉŒ6MièG6 »2€ôúòËD6ñ‹¸‘û³ oë[Iv~õóK¶ ÕN«ƒ[ö¿ýüGÂÛw,?…‰†ÚõX+nƒHBVQNŒdÓ4MT/_–%w¨¥uWÙn‚¤9]O5d†È´eÍø4½ :OU7® ÿA  ãkDw8Ce3° z¯Çz1Xlt]¨æ&1õÜßÓyðþ¶ ¿3äúç(7á×¶ ÉÂ;O3¼åüL´º?/ÆSëFf˜òPEß¼SM«€WZó”WHVž†œ?¿ÂËýRx~q1\¶?\Í4Vhâ|< ¯ÄfœºW]v¤é®^ä )—îyÑ#gÐÈ~’çB_¯j?W4^kúî6Jjš]/™—^š’yø¿…½òûÎ\G[.}SýJ/Q¥õÔn€+Di]|/gêZ”fç>J›\Ì-[¢z&\,Àv–8OA¢já:T,\®îd#¸`j¡‘‚+XäWØŒ¶¥c‡TÜBÖpÈ™TV£˜¥]²é8ª&¡—è EõШQeE‹™P%Ñ›B¸ŽäµºÄÏØCv¼®4Q\¦ÕâQ˜…à˜í«xÏk¬Kå×q&CJϰÒ"å‘—<°—pB"&~æ"°‚É¿ŽoxGöªT—¾‡Çñ›\æâ?"ënø‡ÜÆ`kP‹ze‰ÈÇE’Àþu M–X¦Õþ…ƒ‡Ywm¡èjˆð†« –H´€d Ô¦dk÷†-1áÍìvÖ¬0Æd[·$ üTUBÔ˜èÙUð™%-¯mËÆ‹6¯¿¢Q7/þô“XyÀ©ï„{|™”$KYfªRKƒ•šdÜxCÍ+Ø)©œÐc(ÂIøÏ@€€×£ŽãAG·s¦µZÛ—uÛß-]”ÏùƒMØXì3Óq -©ØŠ¥!·¯sMNi¼“œ#ÞPù7—®/â—ÖC»ΚªC» ±ç‹––#læcÛÚú )I<Ä™ „úþì•»Œ…GmªˆÐ=ÿ¿¼# §ÎD]ý1edåÑO`;s9w'Ai4Y…}‚ämêÚŒ+ë†}r¾V%Ó°TEÊÈEdT5Õ=Ð_¾ü2 K?œý+ÅÝ Ç1[g•f˜•ŽcT3@z^Ÿ™ñÿz1@³M[5/F”¬—C×6â~Ìø•¼bqµÕ…€9àQ´ ÔþÙÇ'ì ¿3£Ä³^“[÷6aç»È$]•¿½i¿2½tû&NÉè^q|†)«Ð2«}9ûDD¡ñ=‡]ì5Àp²·û Bßy‡Å{ýMðD­a5ÏÝæDM)‡V7ŸVaK0V¯ÓxlÑÃëw>bäíR*Ùùd†òßá!ôW’`°‘¯Ïs-½ P`±l’å©A¾Ì=[æ#4îØZ`sƘ>¤‚…¸r•ÓZj—ëØšØ8PwæŠ;qñìÂ(AF¥OQû gÝõÐŽt@à„ò¾”‡sÁA°ŽÔ5£¡¥P1ÿ^pNk}.HEo)T´Ô!¯MFòŠÔÝû47̬8Ȥ wZ÷a®í™Q;;œ®1-1ÂÅ / ®ë™‰Ü‡èõ¡ ÌqJåcxiB9©Ãknsºžj+‹DÙ8y§Ñ›¿ÏQRTT¼o4¿*L´Œ[Pe ›cÀ?ÉÖ°'*â¹XH•*Ç,ðñð€!Àmëb\šÙ-X´x…†–¬ÆäÏíí)»}ü»Ê^YÛáÇ„:®ãã»òò2À-!­ú¿ßÀP&àâºQš,òSÇ´õøåŸÄ+’†ÿ{wøˆæñ‹Ç‘´úri`¿Gψ¾¾;ÝÙ8ôúîZÿp¶ÈŸ™.¿Þ;Lá–¡¨ îúãís¸ œõµø¦üT0:8,óN]_(·®¤ÓÆâÐs†O2½ÅÛÿÆJs?›8ÏxàÙ²+³Ë8üü,pØŒ9h¶Ñ’ òê∠n.ÔªÒÄi‡ÃÚ¬—G©Çv9T(—Ìÿm¢¾ÖíÝsÉ6qàài"Ï`Ф}v8¹Ö£\­jÀ ðb}äÿõÕæ'UGóÝsɃŸ`º¢‚ø«=ºpšh«¹*p`Iûh÷ôö¶ÏxÂù!=fd£c«N’ü²ŸxÕ°¶ÑœÙðy~ñ@ ¹¶ZëK^N¶=ùÇ”°d^ZGMV› KüWOlº¢Æ%h s/µ0‡Š£óÙûmÝUÛsÐ?¡e:µµ3Ž˜¤Œõ¬˜œ ó;uâ $¡K¹_†Ó2ðÝv6 .ÝÅW?»ºÙ‘ÚíQ†Ë·èt57ÚaGõÉnÒM{ÏS–Ž0‚%]¥ 3ù…æpæCbv0FÍÑÁRqyslNÑF[aá!)FÀ™«£ûF¼Lš#:žMQ…˜ÅÀúÕMÀ€´gÏ€añ L, 2Ze0s°®tÕÎfÄ2ƒb…¶9ÍfôG±|{ë:C×ÎÙÉäøI´·,mTÆæC\î¬qvä4á¯Ñ[3ò©¤˜ùRùQ[ [z 0—”kF"fV” ƒN¹Ý÷þ±ú šÐdô-èÚ¢HЬÏÈý`)*=ܨ6ËËXŠòÿÌñC_ýªz+Ö™è.#ša¨‘=.—HF,‘¾ëêP‹øÑ0’Ñî6|<ÒTdå’!h·lÁe>sûiYY"@ŒpX(°¿ÑCçÏoàaËüþ„Õ´÷S1‡/1øÉŽe²‹îH®/¤VÍø¿K^øm¬²°"¿ÆÕMÑf$Ÿª†™#0w’{] ˆn¦~ùâAÖ÷Ìdp»"p±[¾‘¾»Kl/ƒh8HÀ¬¨þçs9¿=^Ø”Î8WØÆmI\1æé`…jÅ0ÆS§%N¤éCjÝî!I~b³&`ß$îÉSÌÌÐìúèÓ4€k#£Ö¢F÷(ólסÊ5õ†ð™§Ãœë$àÊãå'Gý½Ô @ˆÄ™|í¬VÄxüs &¸àp©kçî¼È½ŸŸ)Žé6Uõiù|ê›j+´FÃáÃËË(§ê`®ˆüà8»xíĘÍ« gÀ$AP¥#:Bý««Ì‚rŽæª&ße_ߟŸ™í¥öã ¥QèvÒDP Ñ-ø5ÑÁ…ÈýZQhω}Qf6ÏùÍÓ©| óŒ!Á†H¢‚4‘º9Ó¿¤,[£. $ÊðÚZ ä1_ iOoŸmGŠ_Ks_e^'|]Gm¨-&c ÀªoS'±÷Â$áñÊVT‡úqI>;>¿"À%˜€Bþ$ŠWøúQx^:¶)Ôßx‰´Ìt]G¦¯cÐáO צ–ÔÒƒš¬Øï»7QEiídµm¼3X‡}»V³•.Á^Wð·K¾óÿV;ØZ‰^þ–ùÞ9ÝzÛuÄð6â¹jÓª¾ùÈ>‘x­IÆ·bîê”#=hBké½YŸìLÒY nuHà•£TÿËÀ…xN†ÔÿÛT‰T‹iE¶•RÕtã5öá|¿ŠS 1)jWn>M«›N¥Z A'eëóN/:ü«¸£ø+&àóf ¨WÓÞ::˜ EЂÁ £ïø¥À4B×ávvufLcsÀ±½µ¥ÓVñág=ÀŠéw­°Ü ?`0oûôè9å¹…=Ÿehw¾çÖ!©Tã¶þítÁgv|æåä¼èõñ,#Ø8µœ±ÕûÒ½½øÝ|cãQ}_Ðâ-kwN"aËx£„Ûê»Û8\_[‹I €#4ËB¥ň¯ÿ'h‡ µ=? KU‹ Ñ7mÎш©ˆÈÕw"é)NWÀV~úº[?*ýX×ÕZyQƒº§PrWò3¨fõE¯MS€Œ›Âð'è;¶vZR tll3Í`Dq0Mü ]ÚýÊÉjU¤XX)ò¾-MΩŸÄZœ¾³lÕ]ž‹K1´þ‡L®HwT©i›; =<u΋ý}Gvó0õIÌœlPîjõÈpñù´„ßÔÖÞ¾íSî2ÃV4¡™ @(•Á sJ¨¥ÐÔ¡â”F°Žæ¡‰Gï06ÌÏͼ±¥k›JØ»“TbtŠØXp2«…Èë~gØ Fó»½O<•MÅŠpk8ªJqâ–éK©'PM¨ýʺªÇY:ÞZ‡®dÍÌ•µµdŽ@»»»’\Y²-¼œÿspp¨÷ŽÔ'Þ\_ãáâ¢ÒϽ°¦Œh΂ Lý[ö"àààdeeéèèÚ·lÓ¢n¦¯u_™º¶Ø…º[·,c³&¡Wš7³9ÆÉÅö†<<ÍJš”*¦ØP¢E-jÐýªÂy¡ÍÌBMÈÀ ÏÚÚßÖ¯>åá]¿ÜЧTOlå¦26 *H$âûÓù>Õ Yñ†>†,ckÆ¥·Ûòò%Ü-t•­Ài[àף؛ä#hr© ÛDD4Ø" 9ú!]-Ç– 9]õ RõZ®TôT JkXe`Aäá¬Á¨õ˜¹¹Ô“°UMS4>; +<•BžRZFQa¤M¥5M¿Çdйa(TÒ–& €¦+Û’Ñ!€„¡Ñü³Îê€6í˜uç¥KÑÖ£R8»kØ  ˆ%’Ús=pF$âI$æ¯\Ñáë&qÐv¢ÛZD o|ùW76^–´µ[5Õ¤t‡È37ÐEî=æ=œ>‘@8ÍÛRÐî‹üøpôäÝ7àü"?#R‡RèÂdpFäïQ¨µ¡íêq (#ó¶ùT9d_Âs&<iá¿€{¼—1Ž'W'Óá‡1Œª£yÞ—†ùK±›n;¶§moŸçíº³u•?>²;~íÈù̼4óøm¬dx²®Ðò@d0ü:â>]ÛZßš­xÄV±éÓP‰–^F$€{]ì7­àCÿò{¼8¼OFœ´3ý§¦VdDNSû¦&´òR8!‹`‘ŒF Õ¼ÊÙ!#ô1õ€”ýÓÄ0Z@½™‹ÒÕ€ÚÄß*(näÚ¾ˆDo#úcÒAÃÄÏü;LíÒdAŒˆ-Û–Ì–OÛ‡€†@¦ïøíª±­½íÐvABÌ S½?iÁ2óÂ;ᮺ/¡À0vQº¶Epzât Ü53Á"®…ì6}<·ñó_œ)ï~kVDx²¦Ûg-ÁŠþˆ’“ç bÇÅëÒËÆWÃRieš /n &˜bt•¡R> žýªj*ëQ³{¾Ïñ¾õ©Q}J÷,P wp\Ìîv%‘àê”ì¡öA1¼ƒ–Ž:1b~nÁvŠÅL÷C¯2JN™ÖPÉõ_Þ–= mﯵ 3½¨ý¦Âè9Œ'8X—Ú9ĈA°v:ýU(]Zw²ÛVù¢­¹Ëi`ο`[‘ŽÉÿõK„ìÀ"? :(OŠÍØv¹_sg´ -Y5_!””Ǧì3h}½Ã§ZôÖ-#²¼máÌ›*´¦þùéá©ù³Ëg÷£Ò}Ú D>(mðŽ"FìŠ}’Ê€š,¹VÃkŠËŽâx!®!»„žnýKë^w âkÓ‘¦@H»cÍ©êZ`J¡vYžyd˜'.ûY0¢ §8™¥þÖì1 ’‘å,IPÈDŽ®åÞòÌÂN]Ä€™UÎξ¯£q'ÔЬ4op×C·3‰SÛ#&«žänVß•ÿ ÎþÇçrèŒ ŒU.Z œ:àè6 B›©É÷ÕèÔEšØùS/êö'Æ38[-cÆ’—Æ 5ÇÎ6äÈ^³£ƒ÷­3k-\NVªOÁÞæç²v­òe®H¨Ç*W¼Ù­0à‡aù¸ñ) $Ä ¬ÜYϟ߉BÞéË*0®_|£ôûôþP rFºs½ýÅb[®o²goJ“׿ÁÏÔRAä§9Î,‘›v~¢æy^žËòÃ÷0¸~×ÐUIÑ0¸YÖ˜ý]² A“G‡ç`ûÀìÆH¼ÛV‚—¹±i ‡6ùY-ê™6wÃÍí6ñÃ21ét·6‚Gïô ó;_ ˜ƒk9ÚùƆæyËöE’U¢8нyƒ©±˜ÃW©´>­mƒ÷æiŸÃv墴áRµ$pZ’$À´­°TiÖÉÉîœ7=ªÄõÒs ]¤QŸEòöÛ7Ÿô (•[C£H¥†™¦åCß&yGÆl¹%b䟥!ÃOƒz6(Û;[ ùoIfM#pÅALö««ï²¸($fƒ*J>þ«çýÓ-eìPÜõ\ç~X"û'& .¿³àÓo¹Ã3hŒo$5;ï¤eïiéñ¡áÿ7{УŒ8¿.šÚßNÞ‰C§4ƾB)̤üw‰ÉèìÜÇù¥ŠbÃÝ£Y¿_)‚œӯͤâ%ºd»ù}Â4«€•v‚—QDªdÍè#öuéMMM¯g>ÌBÖe•æªU2ÅÚh*²+ío I8eè¦&àâ<~ÛÜ[ÿže,«ÏºÛŸK.¿ Óxßb`å©Úzm òJåBn=“6I.î¥kÕgÕŽqI7µµ7˜x嶪|eµáëçrq•ƤÑqW‘Üze‡b$ù)TzHAÁ|f¶l½}ÿ×Ô—@F¼i·,=u'$Ö6ìT-Õ'Kæý$.oÎÖrSú<⸔ßr¨»-v¡¾üEä͈È*À®=^ß/~®S$§¤$ÀˆéèÌÞè¾Éõ ¶Åäé9¥èÃŽüq©UAñ}®ãþéŽÒý—¶ª­èǦ,K.Sú«2M‘S`<93€g‡¬|ðÔG›˜ËÏ£oBáhëÚg^ÁG9ºø!&3µÎ][¥Äµß 8“?É‘“R)²=éSè³Á‡®…ÏñØ÷D¤A¡–@é3@çB¾õå%(.Õa@ZÒ52p³þÃ`Anw¯à |”(7(,w¬ÔdëþB U’¯+ONí.ª7]Þñ›gËPy†ZD áƒâ^*óØe“ÞÜ¿)Í[|ÊÌs¾³¤SÆ{ —“ïñôQ?··…:úÇÇ$\M†O'C§ÕXÜ«×ýÔ¾ßöÖ›)ÄöÄvEy8Cß;ü|à@Á΋Øo+P=aŸ†U°¬2¥a[Šrµvºã-¬aqj•=m¦!A@ FÏ̧òKdù1œ³›aµOŸ w~¤ .*>ˆ™³pÒœ—ÆÃ¥e Y‚бLîÄU>ËÉt§CšM^Rø†\ÙQDú‚.GÅ‘”.îÕI¬÷æ1v[ט۫’¾ËÔ+H+0>Dµ Þ¢Ú@_¼zÖåí#VûùE~Â/¯gþéøPéQ9e˜­uYïø‚ÆGAC°ÎI Æ¡ÝÔNVØtp¾ÂáKÆÝãAû‚xĺAãàü^ûÄ¢Œxk²7 ¾ç¶·á©_>,Þ –Âój³ÿZûï]’1–ô[È‘­k’å·ŽÂ7•= õK3jA=#¡0š& 7 þ‚wHÅš^]þVÊ—X™˜»'ÝjÕõt’*8²ÕÆÝîUÉ隰ņ‰>ia”7+¾®¥ã;ðn· b, Æ ­}H«ð®½MDêùn£ÖÏ}XsŒ œÚ‘…<ª{2> {JÃ2h‡QUËx ÅiXHOê€Ù^ À}rÑâÙý²iÝŸÇd¯%4ïšèPþq Õ~ì·ùÝÅN×ð«šÖ8iÎ.)-ý‚Þåkzæ|ÁöŸPûÌpªGKiîdЕéþRþ»`(]7ÏÛ|;ÃYlmûį N†"ç>5)–3Ç%Ç °Aãb(ÈÂèdYTöÌÚcîªvñÂýÊepŸ¼.&ÏM‘ƒÂ!QI*ÿøT9ÃÊ) Uc³ÐÔæýnþ"f÷Øg£«c˜ÿø°u–d+yŒDƒâ;Çt!†³½äu– 3Óç§@â„͉>eùÝ¿úœps»fDë= ÃÙÊçQ8mÖYlø«.Ïá‹On!'ÅîJ5Åõ±ñ•e—#ÇwüÖjÁ6×?‡[‘ÞN¼xÁÀ3ý²žCœ‚N]«Ô9Ø'c΢릫öê߯¬% ¨³/ÞתimSL¯ˆ•…Ñ­‰l1h*ë™”ÊéJ4Zϱë™&½²Ù ë–©VI0’í_ÊŒÇMÊj¡ßRFÀ›…ƒ·ö¯ôr÷n¿ùÇĤ‰d¯%¾ù&†¬SmŠ´Ú Œ²¼3KËAÐw‘öBí ˆç¡wS'û¦ÙJÊóA‰z…åÅXÎlämg‘§ÈÏA úÁOJŠñY¹'ëÂe¥©I3<ÒãD@M‹!™ÆH@JÔ¬l;ñäP¢¬¶Ë –HÑ&O,ü=†HÇt]1´X/sÛ6í¶¦M(¨nü+F·6óœ`íq?­ÃwBº¡»"™±ö µ²Š‡Ò¡F—}ëV=Π^OÙáçuwõ`6fª¸cw™ô>c÷rõÖp÷qWó³‰ýã0ÛÿyNt¯4êó*V´ýæÜ§$4ÃHhÍ`¬rbû Ëå·ùÉáä»× e«E]iÊSã¿o’}²…¹ôÌö6lâ« oÈžàUIŽÁƒõyÿ°½MïUÓó³Kp°³$óÄ‘“YÊùÕÜS3béÒ« :x‹„T©€Èü‡øO8B;ˆ½Ð…ÍtêPXT8¢`jÓèVo¼xåXà"»q¢IÿpÛZ!‡WŒZ1ÕI+ùåSÆè×"y0Õ_NáLºQæl?/:³îŠò¹èÎÓoÌcó³Êª ÒÆ7Ú¿å•¶oÄj:¦#j<álÏX o¼=e`~˜æÒ Œ¨=úî­5Ÿ'„ŒÝ¶ ß XßoçÖž—™Móö±êtPß.øT€¡+ q¬ZT+JHŒaݰwŽB€êÀ¢¢jä̪8æÝ;×OèB€ÖÖBTÔ=Gœ‰f·û“P"ý ´1¹pKц¹ÿÃ/–”o÷•ÞdꢬM üjX”ñsÛp÷ýóýøÎï¦÷éòúãI÷BŸnì®Ï1³m‚H"ÚNYOè´çV Cgàð: r²µuÉ…lâÈ…“¶2À’î×Aœìƒ£eÀ10@cÑà ’ÏŒÄñgBQ8º=>è+ëìsµ¤>ÆÔ»1ñŒn¹½?’áµÎ;|ØJ{󌭖]Ñ|½Ö¡³4ÝHñ»*qæ Êɨùùè@§ÏYÁÏXä–˜2ÃÜôk|°ü˜ÊÈéÆ7Óbu æÛ–~†wòHÚ"(;Df @3‚=+}RÈ›q=üYëмe«®üÒ-ÄvžÎ¥05o7Zôe²Œ$)°ùk’H[õŽ""êAS gÓ¸C4AAYdyŒ(á !"è7¹V€ÿ³Â/“aûÌ?Ÿ•æd&šý1ý†û{ä¼b’è€%6¡Œ€~Oû]‹Ù]%&ÈŸÒTiõÃ!¼T2";Žh ƒ†Š¹DÌRÞ7]ç>1™É5x¤ÀË';qnÁ6™þcyè5™* Óxy§€ ¦å~~¯V­`tc7u3­a„†Ÿ8Š» ×9=™Š„^»âü´™§x×@µ·žpŠ9>’ð¤«y¤ÓÛò²Ïµ¡@uc7Ú AŽ2]}•¬l¯žv®Ÿu]8Hß(Á©ƒÞ Z˜G)Z(XÄW*ØuBaàq)¸ë!4Èó@»À…E#Ñ­™(Æí€r‘þ­k¾ÂTåȹ,&Vê¦Ré%, ‰£4Ûf%R±ÒúÓ!Îáäé½úåözƒ*ç5Û7ŸÍ·/tý. ïK˜~ÎÃz¯O÷ü¿Q½n\»èE! ð  ý‡5Ò+ðÍB¢Ññ1q¦¸òhÝÓÓÔôœó¿ª½ÜŒsKâˆFûä.ªR6NŽeF,N>l³qà›»ýæ"LôÕÚÎÌÝ7w¬m]õnzeKR{ˆp¾kÁ¼”‘©jé§¶Rë¶¼zðiÇýVµ<޾»þ©c³6l±‹ÚcŸ–ö ¾*)–¯üI$¸ªžº–°R'àþ4gW¥;¨W¤/O€..2Ö2¾—½ø¸ø¸|8½ø¯ÝZ:6ô@Û‚m>f£jìPl©¸xĺØÑÝÏ–/zøv›s‰B¬€ý¦+t¯è¿ü I,9àˆ~ïxÕl«ç‹‰ò )/Hëûã|¦–ª;‰@-P%i•€uÎ…ë=*ËI/zÕ¦=;RÔÇË@•gÓèKðÑÁBÛñAÛTÿ’¤€V"ýš†~ðè/(±·‡j)ÈNê‘Ðôzü‘yð!×8»32èYFþšÍìñ_¼Ö“ýT¾Í‚û¹º^ŒÜ¦Á ƒê&†}ØqÌé|3)é!Cl‚­µßò§—^3ç;—‡ùqëdâœäCÜä³×»D ½)ù:r>º²²Ž‡E?=Þ*–Ð7¶¾;ÐA‘âd½¨cÔkƒ#ÄëR”,ÁÛ˜Âö û»1¨ÔUÑ7ë€ùºÀBíèÇÕ¯—½H³*ÿ™ÏÆDZ€Ê´ñð&j.ûaÌÁqCôÓVÖ±eWk#,Jx?ô‹—]ƒ­]Íë忬:ô„ÂÅÖ ~÷Z™ Ø’Ö'¨_§ég‰UÍ£À¤›àØkÚHÒŸV,E öªg¿÷®’ÂÖfîôZ£’l@)\ÍDçÞ$5zQ)ŽÐqb6×2S*ÊÃ/ÌšnqbÕôll6ý _"m&ð¿J˜¸ úùÒ $ þèü(BJÿî*¨W£xÈf‘JY* ÑzÚ}çEÞ¦ûkîd¶@m§_¤)»Aø\,ïe¬§|l ¾…O½{4î,.¹¯;ôž—¸„DÑŠ#úµb,xoÞ‰°y,TG\"Œ²`´´ì²»‹X¢dœŸêPuO~,A&Ж';·š{“.Õª*>½È ÖðÞãcÕ‹ðGF•î-Žè4bt€ƒ†kÎ’´`0&A{}F Pxà\°&ëdáÛ5¯m• ‹ÄðÑ’v(Ĭ9ÿ2zì& ,]1»ìV5pÐígê*@R`NÕw‚TÉbµ„åß…ÿòÒÒQ{oh•‚Ÿ¡¬H©TU©fª¡¯Ëì»ÛܬìÄTE£–ü£ËLš.l‚ÕuöüÓ´!ÿêAìÈ後æîÿŠ8Ê4l œRãÒ†¿ @9n$Óð#É\µšk> rÄó)Ì©ÿ¹¦. u ŽlÜö"Œ_Oe^D„ H›Wž[†š.íâ²`d¹÷&ð°<¬®,>Ì–¼­|ì,EF¾ÚQ|>¢ é’D]Dw}[cïrOº'T=8u,í½àtž náäDþú˪š ­D{ ~Rç4•GbÝ€Àp44#f@¥g I+öºþM?ÉÞ¶®^:ªÐmÜ:¤ê…ˆÆ·¸Ý#îOï{¾ðc·Dµº}yÙÅ™6 Š+ðS›Ðu´4¬°#s¤B|â™Z¤våÓ1ÝVÈY§°<èÿ½Wúf¾ªþ>Ö'áØ+P‚å<r™ˆ†B„j`:> 3L‚˜EÙ=¤â¬kûÜ̆ !Ü;uʃŠ/Œ&û œ–Œ6q¿·D¾eÍEÂ4hOú}»…«&ЀÆÖ]N¯B\“¯qîÐ%ÙÚ¹n?˜³ç8$OÚËÐMžAÇ©±– ËwÊéžM}3Òe`L‚DV±+n6éY-y’†1*« w¸&ßNÑ(±¨=—DY!ó<Á¸šùYš'ƒì;ùQöh7êÚ9wñyžÎ—–vÃm·ú<8u¼íÈOûںĻatŽmµ:A®òú=fôt¾åGk ¨æ­g6Ò;"ÕJc.ù›ÙõZ†‹HÔ1T§¡Þ'š5j §OHÕ`Ñ4ug³N¤ž8o•“÷oo—J?d?:~{ÞqoÉšù`"¬–W?0y·gïq PúÿK-LH*Ö|âU4 ;×X÷!a…ˆ'»“±5ýÕàp³ëQ³[ü7·».Íu;+ƒJ* g„hü'(‘A¥nlGþ“ÿàõ™sëè¨PŠÆI¤(ÆOçbD–sŠ»¹oÁs&<}¦ r4AtÙÆ‚Ï;’, Ë ohª¨2•$)ÂÃÆ ƒ>ž Vô®*Ûƒž|î$­ÝèØßÖõ³ù*!γ; \ÜÔÌ„Oé¾X[Æ[5!÷ÁGÿ.óm (ÕÙ'¦Ê[¼3H0L¾T®Y g²ÅÀôÔ縦ï +4ðpÐÂR’ê÷ŠÃ1î³ÆÒ£ÏpÜ“IŠNQoƒ `’<‰úœMºWÝÄ/á³pļ28Œ.ì+0YRO”ÑÂj‹û^1w¸¹žšM@txú5&ç,£©Y¢¯ ×câ>EÎdld]MÅP:˜„Ò€ùÁ¬‹$öµHx~ÒüÛùŽu¸‰Ÿt5ü ]ÜÛ9BXžô‚› ‹À çˆ8¸6…€‘C&&É+?–G5J­dŒ¥h,ÝnSC¶¥cê¼k(²®ía•˜Œ*‡Ù4Fû%‹œÎù ƒÇfî_Ï”‹äÓ4LúßýJ=öA~ý°*üô¬kÓv“E»ÇxÚ½6ý•Ж…L;Nwø·Ðֲ피Tž sÜ¿ÛjfÜÅšþLÁÅ@¨” £ò5½¼ò,ÈBCç/"þB† t•_Ù¶Ôw¢05é5Ÿt<Áø^@c³æ7=Ç„À¨¸U>À˜–3´ü´Íñóe¢ñf•ÓtÔ¡¸>i65¿¼ëw[x5 unJz§ßñz‰ì² ®ÃKrû‚b÷YYƒ ^~SYü=ĦÄBÐ,ðØë`e@E@Ì©¨“–7eC†FõUÍAJð0ûí×¹Ïòœd~­À>*ì\OQŸ .=–i°™_£|&4ôòV2&ô‚w[ÞÇ.kÑ[2ì—•dWœjE”ç$¾Oä¯}â !ï6:ø0pÐ7·'A“Æ‚%+˜pYžCG>ßÖ’ç;邽P}ÐY×µiü^«öQ`L®¯{ôÂu}Y§n DvstïýE“¦m%—ɇsÖq¦Q„OØFÏ×1 ‹Yre· ˜W—£p*8û¿4aàæÅŽÛquuÕoœÕÖØ±$³Cv§(lt"å§:#Ä܉š7ƒzØŽ¨{ âP-4ª2Eˆw›A*‹‚Ü;P&ž % I; ˜»P”<„¾Ö+â#AjXÿ‡2Ïì ‡ÿ‚ê93ÂŒ6â T_H¢ËóM‘A\D‰\„U&/õ/½&} ¼æèŠÈOÙnÖ+ŸÉ ^öœŠg1O¡»:3}ë˜K-PvJ”}Æ«{’ÔŽ„HA¶®-€[’…oö‹x­dícO#íâQpm2Ó5Í2«Š\F@‹v¸ç­7J Å‹‘ d @a—º—ÐèŠre£óœ¬F`Ùüz,ýª†S?E¥ÿp)ùxÛDi‹DÙ8m`îâkÊï ?Ñ$Ùº­ † ³ÆNÅóÊ©Á¯ &ß°+çŽùiŠÛV{tnžÙu]…óØŠó¦­—Ú¦ åàB_Yq›f9 v,íA™¡«"~ñ¸#5¤»`¹Ÿw|DPªöon 8ÞðžÖˆM.¹—,92ÄeøKEàpÝíœ5ýÔ»uÝF㌽[²•c9k²;k’@‘ ÆËÓj&¢c“FÒø„Zt†Òx 6ÏmNPh2¶ÿš‡¬Â¿‡­G“au„yá?òÓܸ˜ºþ¿SgÞÒáU”“qQñ)U:”ÇäîJÁP÷ê(E*A[`È G íÒä H¿7ˆÊPãèÿ” À$ £ÎZÜs  4£•õ{Ôzqdœí[„—ètÍ:XR|½Ï¡`òlÇ6ø…°Ÿ¢›;¤DQÝrk“ÂZ·÷L?þ–¡žõ¨“–d…˜¬YX;;ì/uŠBô°(]á*“S@“i‚墦©•‘ú¤u‚À (™–{b>AÖJZ°w:¨A‚©GH¹²£@àB€rªD,g"dN‘þ0ÃHÐEñȃÉÞfÙŲ̂¶^¹I'_é^ðûœ\æóT\N‘È&Ó%µW½€f `دæ!C}“Û_§¸ÔLrt œ9?þ©Ã :jý²ÚJÄ€½Œ‰ï}ñð1‰l7ì;ÂÖ̯Œ5 XOEê Äþû,'dâF  ù[4—-è4Í飓ſ'è~¯5sp@-íÐ×`>Œ%0ïŒðr! lZ×fˆjÇyIcZ¤Ê–’@‚R" d ˜\âÈÞé$*Êy6’˜PèÒüSÝŸ°Ð^xÖ5ÐB´ÄåÔ ['¿ $>¢¡V¢€1r¨vQ7ªÓtŽJL—dÝ–©*Úà°oùÄf…“ÛBÄ¡ïWI¥ƒ&Ã}ëh=¨Ñ°„¨c†pižËÜQgõSE[7û¨"øG$(­å»nçÝ´M^˜D.ô©\bNm E¢âˆJåòÒIÞ®jùqÀ.Ÿq§ÀþÝs'Ll.1’v—|âuÎ`zHÃjÔ~Zš-þÄ‘lìFÂ;ÓžSX‚2&W|“ã‡è–̸ñOpFkdî1õ é [Ä‘³× [®:$A»×jÖ¥T#*„šOM@%_ÿÕŸš3wÔ¢‰5ɳù¿¿v*¿zÓ ³ y€ƒÜr†¢Z¥Z-ce-¼ 4¿F3ñY%qRýÆÁIs핇RßÅ)ºêZÒ¬{àKÎÓ‹;cç.²Ü1ƒ·ç›… s/eIùc^N:´'½j§ÙçY¬~Û¿QÆ”²¥ïü€sI¼†¬¦–²¢ÀùÔ!á•^弜 ¯ì: ‹ñ¬a³ëT»à¾›¾ º¯ørÙ X÷îÉM&±ÊB—Ãæo\ÖsùSí±p»Ðuв{W¤>¬6ƒ?S1<ô„W­ç×µô©Þ¢ó\Žû¦‘©/bÛ.éd´¹ÊÒcKb¶¶§Ð¥?yl€b¬!«Ii(éRY2¢è˪—{»MUUsn!’²üû¬Š»Ãz´Ô F+½x=%¢§WX¹xTÖB‘ÁøÏÉ«î’} >ýõ3æò“%ÿŠG^ž½NÿœÏŽ]Á@'ÑvR$z¤[ר¾s%7œgŠ/ZlGîö~ôê Q^‰u‡B¶¨EpÛ”YAZ*âèØ´´­N—/+Ù+‘±§jgŽx[<4 Dˆ®Ø=žŽðQgõU»¬q'ñH`IÆn²´yIŠNÅfPŰ® ˆ?œ’œ©Ëý 1œ¡cOoàÙýËé©‹]\`NÇí¯.-Í*`»uW¶¶~ÃèÄ6­Ê•5Í>u-Ko¬«qåªg3$Æè¿[#X¥ÉÌp&‘#«1 ³ƒÃÞcŒéí¹pþô>>akgf'Û9ƒpgz§s°{¬>Œ¯Ô¿÷~²½½—€õ-Ì€f | 0Ž¡†ƒúêÞú¬dæäåôÅ¿´‰š˜¶à0%-ŒåÏä &ÁCLIx|%Ge‡jè%½‡åóœí Gš”S KÀ²4(+(ø'<38Í_œÑ@±rm³^ÐçŲ•ý|nÃþhÌ÷ÀÞÍúÉ?ÅŸºAg¤#ÊÅHÍÍ.€sÉ]ç»ÞsC§Ëæ=räkW¦£#ˆ]÷­õ¶íƒùHR5J¼WŸ¶AF·ŠîÜ`=ù‹Juèº\úa„¿¨ñ¯ ³«²jøÐ°$Dï©qcS;˜wmKÇ+SÍwk¹oøÚÍ€Ezõgë\©¨!¢×/G>DDCcñ¶å‡/`±¼iy‡ë~ƒBÖd›PÇ:NNú3<`ó÷ù¦ üÊ2[¼A?[6ÄHW•m€¨•]¨÷/³túŒ¼—×-¨ýû–Ú…X¨„CM£¤R¯Ð°³’êsÕëgò]Šž5?Ý –ôneB<“ QØé<³…DŽ3,Y+º@ÏHTj(þYzž¯u=-| ±:?ß®LÝÅàœªW§viæ†P¤ðR&2£Ûô±·–HDC O^Ä !Ä01Ñš—A¾@œb„¤­eòN„܆KJYö GPG0Á;ÝÔ w䯰§@¼Q@çÕe€*Œ±/ÈQôfÚKmK±ôåÑÏO?`ÉŠË:zÞÒYG~O]ÛGLèÄ*´6… • >&L$MÙïIÀ9Íý§±‚eã;;dg9Mã0ÿ¡+ZÖ0KB¿¡‹Ìý 0¾¯¶ÍÏØ/¤Z}k[V·us}Î`+žÖ¬“Ô`ÀN£»—†ÈséŠÞž¾Ðm|?€öÕf\†ýf]ÝZ3WkU%“ÄäñaŸïüÁÅQò¤°œ^ÎÑæËîlÙÙâÇø»œi¹&âE`¼"Ñ7½˜ùc@P˜ýÂìa¦®ŠWýÉhÎO ­h{WrëhYù¹ ƒ2݇*…"íåd†º³lNŒs\Øl”)A£K®µqU´T„ߣUi%e †ã€ê娣’qX±” sÕ sÞ"ý饪Ö?ë°ÅïØ¸ Öîátc‰ÄGo‘p§ß¬{¹ Ž|QÍ Êy%4Ó 3E@FTâšèäsE›µ'/CÌ E#Z«åçZÄzRÜï ÉÅõ®®§I!˜ êà6ž…©ƒ$;o84z•—txØ#Ü&Så{$¶dé:üâˆcî›Ùú[ö¤3ƒ„Þo†0΄Ê*××'X]ùy›ßµ =AÈì¦Ê5¹ùãq°^ý vLk¤÷ !ÜÜÒÒ‘‘ñO‹T šYÅÀaX¿¯d¾ÞhÈ?1 –KâÙ¥³@ÈäI1|RÚ4ÜÜ*t+"] 0–Ê›.i ,–kÒ8N`irs%ø¯‘Ì ƒeL±0àÊ4*yæÜ–—KÐ4Ô"ñ'F*FWl©-þ¥Áât‡x A·‰|¬k¥ÔÇÁè‡Å:#Øø•n;žÚÞÞ…×䨯ÄCs_ŸE{ b±'Fä,‡eM8!&ÓÓ°2èh£l§•5ô§äß&üœNºü¸91­é¦¦(*A`œL±1¶™§5ËEF RR$ŽÏ8Á :b$¸@®²(½fÖÓ óGä¼ýpy– ¢ìÿf–ļk{ âqð§'N!0Aj½&¢QÙÇ 3nOt†Þ •BÕφ­:õ”ç—68“×]ÆšÜ.$°&¶‡~0€¹ÄbÛ«­é¡½DC=%‹»W­¡UÌvá¤%*çÖÌ?3Àò#íll.'fAUt£_x':”TŸL6œÔ›>”é†4SÊI¦f”JŸm‰¬dLY~†—Þ¢m†²\ž[ˆ†¨B¥KOìCIÉr‡„˜Û80x_œl.Q†$¼KV¹HzýJÕÔÂIƒ_t2’5Mìú:d¹ï±É¶#÷EÌÈ0À^2ð¸½ãjÖôrók}TZÌ«k\­iµš®§{?ðëuÅ—¿:©bP¤’'Ϊ3¨fÅ¥­uõÍUªbÕå÷,}ÒâA¯Fü (w¬#RÖC`V̧Qxr[·‰@ÞmÎ’¾ÃÖ¦ˆ5~j¬\±¬9QEÜqD³¾Ã0&*؃䲮q*väÆTGŒ«Å)ß4w KÅ–ô¼D s)M¤NãƒèW–¥ |ße ó5O˜§ópºaó‡ý˽ ü@Ž=œÒ `ø™"Rt¾)x¸—AM ¤>#?9Ž\À RÂÓ·ñ0´LŽÓ½ïùp 0ÌjÞw%‰9 Ò¶hí*þòL|vº7–ŽË GòÂÇÄÕKQz0UêÔdµªPIäcíÁi,pÁ 9E‡óé …˜£ÎÛg³­Ý`4ú¤ð Œý†è;Ï,û´Ã]üé§n«Ã2>Î…Áëè >ôá7ÆZ ÀÝÆªÓszm¿˜Óÿý ©is{'ÔB߀ðø¹cëxÂöã¥%†h¤çîù™¸{¶)ŸÒr±€“QÂ÷Êipx"¨?txŠÿÈMu¼Ò¤A²•R±Ö¢ìz­k.B@j›úÛ„™ßÒ¨W]¥,H7>úê—lÀž.ÃPñ3wõÕ¹ìÓæâÞ:29±ƒ¥<œ>•‚]Ûß{âvw—\ÇÅËOc´³õüüŒëÇ»ößòÚ§Ñ™…–ÓÅ4¨rˆ˜Œ¶õ½8¶#åš|t#‚SÿÌ~صö^¦Î:åù[òôå .L¢ R_%Z ÎÒxšOê$“—pú/ã?jGeLª×…y'p&I‘°‚‡åSøÑå;×9È@K"'å’Aþäç›D°ö›!J*A<ºYXïõ¢Å=}½:Üœ{Bû¥‘} óÁ$**¬¢XÅÞ—óÄD?Ùv# §!X±šn/\‚e£8dåˆ[¦{â—Áf¨µ¼BøŽ¿¯¯ï.x‡ã×±À‡3–Ož‘¢H8«KA°6Š© ÞÔ©n oÄѬԑiû2“„ M†ùüµêì’‡ÊO·rOÅÙ× šà¸%ö €ãи5ÉÐÍãíÖ›Já.D%z¤¸4½ƒ²Lªe`õÞõ$ÈpŒÌ–ÿÝXæmˆ×?¹á+@mmP0³aÑ+bË€KˆzáED‘Eæ®…âdp›om˜o箚ïüNV¨e’D+ \ŒÞÏ­Žü˜øðººç}>AãÆ¶“Æ6š4¶mÛvc۶ƶ“ƶmëú|~ß÷zÏ•\Ýgwï…Y3÷Ì=kVæ~:‡_P:ÄO¹¼gá´®+kopžÖ\m¹“Á‚#ciV+»mtbƒ;ó}’}„)BAfdRcoâG& n,2uõuäTM=!ïQìòª¯°—kn팓®Y 7©IÏáŠ0YwGŠ˜g£Ÿú]|<ù®ŠÏÍõVü’´ ”nt°ªÈHÎW…é©£^ÃlWx¬‡Èö 65Ч#s,Ñ(vr×UP.]º²ʰ,¤ ¤rý dn•aèB(ˆ½A“µXr>ˆÙwŒÒGpûtö¿õ^ö]à^M6r†ðwâã~vÒ‹˜ô‚Œèñà’uG¾‡Rgúô€HŠ@wRpßIejøäð€à U¶ŒÔî—eãçÃgõ¬Íp@Fj1Ê<ƒ2¥•é Â9f9í¶Àû¥‹ÙÇí‚B©Q@mëaöÿhQôØ÷ÀÍñ4ú¡®B¸9ƒÌïrÙ3ÕŽþðC<Æ|~@bðsÞcj‰¶NEoÃÉ}*èü+©Ë“#¶ý‡(·š^Œ{ÔLxW oj:e{CÙ(w ï\°óµ¦ëæëèM=Ç ´lßþZ”½Çä›4¾nÜè–Ð.ƒnÆ€‡è`[Xýß\¦e’Â…Xé,øÁâ„€ºÚB Î^uË=Û½£Ä£Åò»"P²°X*¤LGÅÒ¡ñ_%c]Hz.2às §å™5Ø^0K ÁFŽ\@¿FUha*üæ!ôç ‘0M¨?GqXŠ`1èîøöþ+äGÐYÂF&/FŽÛ4-|«–·=§î~ž_qÞ¹ØÚ;^t@µÄm8»FÅš~‘”:DX%¯W½ñSá¬]$Û*Böy±9—[[•­‚¥[v¿ß¸ÊðÝPµ @îÏŒ­u]Ü~¡¯‹›[аd{ •"Iøîƒ-|—u=-ªÝž/\ý’©ßЀ [ØÏ¨ëÞ„\$RÑÑûVB\ÈÞ¡)Ôက›q>‰Û®Bws¡‹ª »*÷Ç»^«ÝáËÑâ®Yy·^FØt ƒVš*ÙᬀצÚEj"˜…>ù=Z¨™S‹åçrCȾrzw“2ˆwe @©;5·m•?nf 2(N1¶=%îb•ˆ¥äŠ¥öüôÝ G£âÃEðG:ã/79U¿—ÔŸqA‘ ¶}&¨•ÕA3HTøOÚgßtÁÐR;—üHI®î~<ÝXˆy.¤ž]=[WgÚÛNæ?øN»*žn³ø‘ÓŠ¦?W.R£þ–ÿYÜ}€Ì:üp5qohùjÞðJ°AôûVûÓô G'Jõ¡FóƒÀÕv¤©Ôànˆq iÝÖÕÅe¥}õòÑß6ÿso¸tÙÉ$ï5€Ýg=f÷áeÀö7ª×Ésq5¡dí¥Õ7’»šÄg9bжÁ‚Õ1Óe_ÒñRÖåLÊa{6þ²ùýÚÞÉ‚µjϵw²Bv³6Yc·e®±&6áÛeßH‚á™Êô©×έÒ(>€¼(À:¤$† ……„¤¹}N#®KÖ*ü‡œ­ù4Zc0âbàЖl{Ûµ]‰°@.æÿSÃwø rºQNóµpA4kk%¬Xï'æŒ*k_ËoJ5cÏ2°B$=ƪ_ªIŒÖÅ®®ºèo9$)§wèÛtj§’ÅÞÞrZ¯Ìto »ºN(迪‹Ï÷(¸C:<‹²S…W76_Ÿ2Ù&1§º”[‡aÂÓÙ©Ü?¯\®D$œ»/l»Pܱ8ªC½0ÅjAî¶|ª¦æv6˜OÁ-íšdeÃK”ÜмÂþ!à¿K‰Õ6*á¿Ê >áñ_t­å^›l$‡v~|Œin_©Ý—©^_Z´Ð(U²âò•/`oŠíÓ…÷è¶™ôº]nº3ƒÝ#Õ¾®n÷|ùŠØÚdòÑM Åyã¥Éþìâ“!À}׳ 3–q ù†ˆôS˜¸É®Ùþ»…ãÓcwLp%Qõvë›ÑY-@nµ™=Ó"§ö«¸?ŽÄ•úMJ:ߎRK .¡—Ô³òíªå¡¶E”\òJ•ea¦› ŒÀY!â”®¶¹êRU@—¿A)³êIÀ…S‡7º¶ô_Á½|ûF„Îñj¿”cÃçΦëÕAŸPÐïÍ-C¢]Š2a¾ú(r7Á—­ÿh©VÒ²v§;$ƒOVu °Ç?,Þ¶³ŽÒoª ûðz³AàÑ¿£nt÷Sè´eŸm룦ʦ&E{ùh=Q9XÕ}V¢'Ááº^—t@æïçtÔã"|Äó °É,•¼ÝÄ…<;Ë‚ò> tÝc¯_~ÒšáÔüi̪A=PÆŸ ùOVÙÆèt áe޽¼ú$YÁ÷ø6û¶³û^™Åià>Kü¾ÓÀFa¸$FêéQÀ+rèÝ7ïíTZü¶)é\±©k°¨là”6–þþþƒ$QJ¸_¨ô…Ê„/£®O‰MŸüìÜs“|P¢Ôx,3ÖßYÖ ˆŒ ƒ©Œ¨ “9/’­d ÂOÖµ‰·â­Ò»Ž÷°dží1ˆä­Í$´êõfã˦5/í%U·­-N·[ç#~øêÜžÂXÄ p$M5Æøœ,—Ýn'îI²œâñ½3;Ç÷B~P#ßÿPΕüæ4`#ëD•ÃnÏv½X?rv~¯Uuq—ˆß‰àÃrõpZ?yÄ\?åÃ.lO?:P'ÿ+Î÷>l¾|ñƒ%z¯÷,=\܃M,Aߌuünƒ"¦JsªÊã1ËUqM¢¿>ò»*Ö¡XVI;óÒŸ^IzLxð,‘@®ú°.ÿúÛÓ'tæ®~zdÎá–‚;R+pÿ¾Þ²ùÁ C)Žê^$¦3qÔeÝ9ùt[Þ ϯNö69À$CäÒÞ#¯Æ–Y°~¬q—Ÿq1—ý¶ØOžoŒ†T]'`8ÁDô»UúÈ.ðBàý€<=HØ~RÍGoÁ¨Æ\­™ÞàsVN©6 »%‚¹ˆ7‘õe2׺èÃ[H­¯³·CŸÝ°Í§—¦µŒá‡·¦÷N 0ØG»ƒ…Ó“ææÕÑ4Â=AYϦZÿúðÑG_.Ìîóá§¥½·‹í55¡CÅ|€šåƒËç‘Û½Gl—cì€iÀo4Eciƒ)>:†f±hª:K¾[G~N¨Ý+Éœ—™éÅUTcú·ãGÀÀ“¦©|(`Êg• Ë4† …m½cëÖ]mQòaqt{eSfNŒ0òuaJB!ËBÕîÙáKG0˜Ë÷„wkÍšÝßmÐö±ž\bÝY«º»¨üü ð²NñG+#2·¿ñÊ¥ˆÉcE ˆ³ÔÅÙ2C—Å“QIF(dó']–¤+•+ØÀÚUgjö ¾xñµK¿A|!køX.”7²½)ÿBÿf…GÙÃJ¤4_¤_  z„Ù<#ÀZÓ#ìg[2Rn, C\ÞñWª°ô7l°¼ß…R–bN˜ EMÝįG‚f®+º—ÎI‚wz˜,:þ›9öÚg“yÏ5Í×™Z°-žÄ8Js‘*4E&ùŸwVv™ðÑ1£àõT“¥ÐD¨„„ô·,âŒò´42p…ppªâJ=hÅóÐöŽYÐth?2ÌcœA$ÔMÊRLAE_T>m°Ö®gd¥4ŸDôWÇ‹ý»]ô:‡ê/-ð \¢ßh¬00U PçèK`왼µ#~œ#d pHû €¢ær³ ðƒÐ€‹ï!a‡a¿‰ð#¥lXyW3Âð¾§5¬g5Í«+l€ª»’zÒ<ïM¬è¢·”ðgù좚úÒ7~|4bVGÄê¥,RÀϹíC\}øá!N¶Ý^̓ѽ¬”é¶!Pÿ©îµ‹’iAÐ*ë+1:¾(yÿCBn¤2Ó¨oöG¤{/ó©Í8nÒ^×U®¤Û²BäcÉ©úp½$Ôßyt(úSJÒßv^rµÊ‚é!,Þ¿yÜü A!¥œ—xÂSA6nõÛ4TuPOýfDêV`$XIEsãE7²°_)WÙShÕ}=2Ø-„ ›UšJí. ‚(&$R®”žèÝÊŽ’C£•†å‡M&[ ÀlM‡½ªbä*!hG㣧ðž±[/Èi×/¨–{zÐpù E¡mn…Ãf$na½—3 d(úPüÒ¦3˜Ü·I`ß³°bH÷Ã4̦ºÖ½Žš’¹éª½Í°§@È‹×{Ö‚À†Ï%&û9á—±@2ÃÞ†hì™}éÎÖ´ªòë¶qË>ÓviÛæ¶̤åÉÏyß‘~EŒÞë–êò}=®.>‹/Z“ >rÔÛ#7ûûw§{ÑuõÝ+Ó‚‰‰åðH 4UjvKc_ý´=¿ÈTä7 =ŽÀ¾šŸS{‡ì 5àÝd ·÷äܫȒëúà?wÐz=ßÈ4³Ž4š$Š\I—ýͶnÐé˜ö¡Â©)0ˆÂa&¶Ky“è‡nö‹©A<ßu2ƒÅ81ü„÷ŸOÀ²¾ÂC¿"r^ÓA öÿhnm‚üiçA7)g¾bÇéù`;ìU¿.}…#üƒËØ‹í¸9hÖ³=Mô]Ñ@H2ØóiÎ;–à ;\Ý“þy·—BFùwEÍé45ù@ñ…:þƳ£õ(W˜u3C]æ>ebÕ°tÕw¶ŽáNÉ×LOæI$UöŒ…É'Ñ»ùdƒCdRÖôª/¾¶Œ%jï@‹0z?ß1¬75RóQ~ñÍ(dB;2ÀõùË-˜I5•mcë@Ê®K¸CÑÜ'´²&6ŠÁTR¼©eÌ£tö¨¢mótúÛ/¼(f@•"À‡Ø:fP“-ˆ·Ý³£‰úÇ"S3øö¨ÈßÏÎöCò5Zsô8ìTªÙŠäœÊo?/ãàÖÎ69î8A#z À&lö{>J€ðCƒ¦+‡^âáŸûn±±]»£«W%1:Áò¡Öx¡ñi3}Â=DÙ· öW‚ Ý4™ùÖx}£ró_\<¶ÎËÓ× ¤ á‘Öjöxú²#0•2öˆÁnQ¦rú7·(_[L0é¾Êô#;X'Œ“L´w(w!¨ ìð õ¨ ¤>øÇHÓ}ë­þ£í2XZnLRnÈaÚ>³ †¦a6*Äd(ÿ.dßm‰si}+™ëžn­D‹©kÕ*¶…WM£ôgÛ<Ô³ÖŒo›‹9MÔŽŒ*u9é8Bbˆ %¤ç/'ư=ãFoo¯ÿVëÌ3Æh²OLí%šº_äHÆI*û¨C•Õ €éÎÊÝ#£ÏʸÖZï @­ï°Ú!)×ÁcäŠS®´-þÒ¨­4Ìm¾÷ÙÜXW“÷³µ­à(]z-ÃxœúÊÏÆjÂ×;ð#Fš¼Òt\VŠÅÌîL¸°t ë ™¯ÈÉhÀª µêþÕŸ€?=ü<,ŽÑJ>±ÇwðšR&Þ°º ^|}¶Ó,Ò½ÁšW©uj"ò}Y¼âÒÂ5ì­3×­§jSäÃ%¥C‡ÇÏ£çØ-r>¼Ñ>Òè¾Poj£Ï¼‡¾Ú”»†Í)jad—ðûôU>͇l8ÈüdHÓ-ðªÿf§ Z2Ë8DV=OyñCµuap±wimD”ã ´ÇgÆE?±HA²»|ÆÖz?Üâ—$’õåî ÒO=HÕŒÃéùàÐþKÐ~÷ƒŒdÓ±¿ð/‹ÏD«‡­ r5(0ÌÓnŸå`å¨v sâ§Ø?Ç%‹q¸ç˜X©¬éÉÁ§Žb2nói*:á÷o\Ë lû›$Ñ€M+Aq0”&x÷NøŸŽß5YuÃþ4 øáh £.ÀLK(WX>?¸ÝLïæ4cѧY…‘¡øÿH·e܉âu¥âs‹sŽÚ˜‡Ûúq¿ÛòYêLe‚£‡9Jåð÷âB•mûï‰ ÷¤5kæ9¾“ŽÄèÅ—ÌRa!!Þ[¯û¢½etÜg7»ÌôœÉ›yÕŒqÁ¶y= Õ‡¯„‹¡Ï-ïû¢4e«’Èü<ËÉW‹'×ãAtÿ$ú—’*6fÉMïâ‰{“£›B”Åa÷JBßMÏ[m”ŸÎO'e^ÊG-’ɳ¤|ÏKè~Ç"g%Ñ"ÎÑàá¾|—¸øØ|€‡·â•ͽø„¹©›> Ë ]®W;UøÕõûý˜{õø! Šx;pRƒÙ:¶3Vš˜!ó£µ(ýK„Ýì5«ÂéÈ„¢Ãhq@à2@ömòò­Å‘m,YmWÄ‹(:­†üþG‚WõǺ͌z]Ô4>Ê»/B¼ä—ryk}Å qãü‡"/Á©áKÿÊ+oM¤‰ÿÍCƒÅðþ=Öè^Á²•L` È+ïäpÿháÐH<¢®xGœæº©¦**¤5FNÀ‚ÿ«P™$Ž‘{½ÌÍA?$·WMÞçY{ÉÌÄufq¼Âû±°Ð™Î¯”ž{0³"^²K –CÊ€ˆü‚gRß›p8|£‡ËrÊ ý#í¶=®ñöñ/TÕŽ*ê8 ­Ÿ?ò× §9ر¶V’«LúdÌ^oêæÇºxô§;kx‚%`[ éÙYLì5GéÀé;t_H * ãíhžÞþÜÆoyÒEœNÆ~nî¿5P¸˜.¨]¨’7€F a¹`¦JÅ{‹›¿Èÿƒ@܈h¢_@h•a?D‚”,%nü`;äamuX}»©jVÑŠ¥Â`’Ì}°±ØîbÓ¬ç¸÷^Èþ1þÏD0Vú1[užs'/+µZÓ®s©ÃæÀÐàü|ûÀ‚lƒdcÿ~t—ûGùV!Çų$k#ÅÚ£Á:5S˜f›Úýö³r JetèBµ½¤;†šROc DÑŽ¯Š ¤Ÿ¢=ÖòJ­òõ×óIå×à8T¥ÒvF2ÖQÖßo+?m ßdÜÇ!ñBÒ&0Ž@@’@m~•¨únM½Ìo6rOîmW¦O+gÛä¥]!÷D¹î“ûƒ]l€\wo FÏzAEr¦Õ³×‚yÌiE‡°'_Ól”qÂ&"-wY”S)(;úÄ•QOdŒz+ÁÐ; ì¹X;Á÷%AÏ^£võ ç ô.ldikô›_¿‘ê¶°/pÖÜVêu³Y]¬í.ud­‰$Å@5 ¿Ù`$L¹ì‰§Wâg©i©áõ¶z·¯–6iƒÒSÒ:  ª–: Ë¾68K Pß²|ì± ë>.­&¢!( ê–Ü=+©Î]5LßÎßÚP§ÌŸ,œ”_Œ‹Þ¥º¬ ¿ðtæCáL˜nJr£Gà™T[r?xë—ÊÓ,˜ÙÍ5F¾ÍîŸf8½¹ƒX3æp°{èòôm¿?o—¶4ÒNyÝ`ï=pì eˆÂ'Ïu…WÿCQªR¶J™¾f˜Nó»<ídn$e۽ʤ­nŸülrÎäDÞ®ÓÂ;%6æo_¬ˆYÜxÑÙñ+Êp;"fÚ5ÒKüÕÁŽü›C#a¡#Hl©5ÎW5GÎÛÈZRÁžÃfmõÒqªM«Z[vv¡Ë3¾Lõì¼Ðæñ]Ïf¸M̬é¬)Uc…ˆ*[˽Ÿ‹Ž’?j¤åN†;:`_—¶‹Œ2VNþk’I|D¦89Ò†*$À‡ÍoÓ¼ä®|·ƒ“‹ßîkIj4³ßÆ^ì×ãJÍm^Û⃀˜»8OzØ~ wˆò;„·ª JõÄ,{K;2\ÔÚÿ·ææ4þ÷)µI$~ê×°¢éï- Æs6Å«vkS éí`ñKZ™êÙÞ'T–hOÖqñî·)‹-r/f²™Y½vç2ë¯:E-ò§Ù×Pˆ(ñ]¨þàÍ/1¦/WÞD"}ÍvÌÉú,zzE+ý#¶í(yMªÂï1Š"ƒL~=¢Û8¿m[0 ¼0ü’¦¿u ‰ybÌ£IAùiS"aÅÃ¥5ƒ Š£ÕÏ ðZ4ZÒ³a©]|ô0È¿Â_3¾®sXÍûP’ØŽg}äÒNa.÷Y»B>4g½®Éì=ÙY‘˜Ý¯<˜{…ÝI†eywmócʘ9ýXØŠÊÕ³ÃÊŒ¦b‚0ÛGeOF…£êÚD?ꯠï'×Êê6]~öÈ{` 0â!ëùÅ#™xèKÁ>Ý‚/öÎ!à9à—^L@³›@ß×±×Ä\£`QÂrFÆêÙaæ¡Î9Å-©8º”Ó¶´êÖ热òh™q0ùâúŒÃãP¤ÖzüFdÛßt´>üƀååÎ@(ªb8 °m=÷™oÓh”{£ì»ü>]‹B¥Ž ‹‘ËÁ1ÒÞ÷ËU‹£ XoG@ ñÕ~9âô[•ý0b~¬ñ¶3üËï ÙeDîàÞu‡wõµ&÷–çÀõ˜:ªä51T}÷Òá³¼ü.:…DJÄiʉ²`êv‡|$$ðÕÌLm«9í‚ÿÛZ5t}3õ5¥úr6e;Òï·]; èOR^”‚i0ÀÂÞã±W È©5 óë”à7=ÀôjS\WÃÝrƳÎè#DkGÍîPú H–¢8kÜ׃G\nªK.ñãì©a½>Dâ=êSC8%ƒi=ÄY+¡9a˜¡ÙG1j"‚à²ÍM©˜-±©'šf¡½vcÁÏÖ9kÎUCýoRfX¾*ÑuµˆDÚ»2ue%ð¨m›ct#ê {Nž !¤Ÿ×é­“Ê6÷øˆl%óç¬} ¾í“pðÆwg2Õö°ˆÂ[d>þ •ø¨ý->ø­²ƒ–aµÿ¦˜ª‰ú Í*Ð?â(÷×ý­mà{¿Ñ,äµÕêf.Éx{јÀ•¡ìE\ãs•æêjUãԛ˂èËÍGíG4ÈÏ{¶'Š7þE¾ìò EÎ#Šxˆ>Ú}kÈ„ßFÛº´-ßý¼ˆaÚ€€hDÂç}&jÛ¾œ'>x‡w‹Sð›EM[îßô£KÔÁäõ¯<{BC®ÉyÒ¬„+ê&Œôõ>G¬[˜…'çùd͓ӹ†:Eãû·ŠÖ6ƒK[ 5çªêD-ãr³œDHá@÷b7žL…XΟD„-æ$ÄÄüP^5îrÍôøDºçY™N[YÈ„v|;_ë'n€ß‘N¦«oõ÷n7îoš¯û2à€“~BÎç‹ 2EÞÆºÀ˜™ ‘¯æì‰£Êéa~<Ê5þ%eÎé»í>÷§rägÊCš+Ùæù{¯È ×W{†w–õOŸµ;F—¡jf;î5 HõÐ# ­ ŠÊÔV›>Í=÷ÝQÊ;–Ñ0@ýÀÓk,jÚyÙWßø:"f^S½JoÌ.ȈCÌ;:5®þ¤4XO9vÎmúêBðuð¾ì»¡œ¼²PE˜ÿ{R'qf;J¤`Æ«¡’/]ƒÛðßµ™ŠÁÌ·¡4L°ý]Cxl#³¬Éò¶]Vãš$˜zçy\—l½é©”¼¥@ ï,ã%?“J‚WðûWsð‘ˆÒð>’NÜ F©û›´M›’Ñ›4]ã'ÏÎÖª nðo–qïàÍ·_lvèIüMÝ4²oñYæ5$Ã’ŽŠîLë¾FëЀÝ[“ Içʱföú瑳îÑÆ5•§~1-®ªd³æªµ¹‡D¹)ÂH\KléÌ’½…6q@µç] Êp93^̉½s T®ý±±ê†YËI’ß%ä¦fUòò:<@é©´-…T+9Gt™W¯*ÓD¨AÔ :Ý„HAwTürðÞjŸC“JRf!~µld0r)“JûÞ¢æ |ʲ]Ž}ïÑŒ%&ñ@ºŠG«ÝºLêáz8*ó–² Ð-ód5åh+qT¾cŸíS«§~§V©ŒŠ–&ûcVøÎ´ø~– 6¿SüÉ?ü{øÂË©v/вÙv‚ïJÚ#ìw9+°¦ùTo=œI ûûðÁd¦óñ•\•–:“¼7ÈÞ1^ÌÑ0•³“-¼Ø“{Ÿ$†€¨à5ÍÝxk¥h.ü†òU-®~Ç‚6U!°Œ5v;#õaàü­V©f6¬Vý Úg/h²ù"ösë׫’¡(}Ì^ëͳ-ùÂÝT»¿UÑ9çì˜?¹#f…«´ÛFó«ó‰_¸ ËÕn¨ÌY’ßb"A¬l‘ªæN›©Âæ|PR¤´¸FOŽÍi*¼2^k)t”nà–j•*u7 B¯Í_¤¸s0™EÁª¼c­A%=ä~«®î~vUjÔ]t>‰´b\ú²°vM)…8Îë+=/ÛhNwnÚ”¡WÜ;ßâGŒßTEÕÀ£à›zV*f•±3×(?½hk4:­7‹¸¬™Y9¸åpFV”_Ƶ8µˆœžcŒÙ(ÚöÙÍæÙ¸ÊXLbKBjJQ™.2†'» ufŠŽS¬ÕNLBˆrä¨O¾R k:ë-!±¡7zÅ”E.Ê¡im©^óÛï v÷d¥òýS|Vl›óŠm79>vdçƒÃ’Çñ~ÅŠÌ%‹Š ÙI\.œÞPZFEAýäšø»!Ü¢Åécû”kÊÏ6:’”&ª¾Žˆ´6cvv‹É=ㇷï`-ÿôt¥ƒ3Zuy“˜¥úˆžu½eϪQ¨Á¼yk;DÇ9g°®Bm¬¤Tn¤5ªà¬Ôx‚0«¹AíÂyX&7Yb8¶{]ž€ý¾œ¦êžw»ß7/¯­>¦(Šl\Æ3_ÔhÔ¬?Ó¡Ñ8¶2oo§BÑÌ“"Lbø6õȼÈC·û†uÆ ì¨kVSéîDؾÚÕðÙ-=‘bøñsÞŒ%=²ëì#’õ”¨‡‘ï…‚wZ&üƒê9E mF‰ÜMÖ¿šY\D²:2v‘;Pµê» •­*ž™ªºâÐT}øLÊsÞ%·?ÜàTÍðÐ9U¶jû#î ߯¾¬(ã*×ož­³IZÊvJl…ú¦ožÑ°^õàG™@ÿ{”›ØçæQNö¨}©Øçx‰áäó0-ܳŽ#ô464±iyÿ{ÇëòÄXt±FêúŠûã kƒûí êde¬×·ÃÑÑ|j+ö4ãÇð­ôƒÏM–tᙸºÃlÆjÇÈÑìÛ\}~.æ»p¤Ñ[ó>feÛõ[%X® 9ÎVA]“dú<³0êØkиղ ºó›¡ 'Mæôò™Ê 2)au¿ÉÚ C§¿l—ŒiìòÝÖ?'µ“®dÏ7Ø—äg-q>6""u•æ»/ §O·g¨³LyÖ©¥§MbœÎÿz[›ãáUÉ1í(gÖY*к£µc‘X—4žÇyüiéîÅŸég•LCa1£¢~)|:¾åqU,’Гgïõ.«xqiçϲ5Æ,ò8ARv][æöMMã$êntùñF‰. u£S–ÆÃ©¿[‘¬®¢:ND¾iZú›ª= âx.Â3çoN§i¼NŒžIÂcTkÊðjéf ÊX›# 6—Z xQ-§P3„ I™‚Ù"J#Y—6ƒ»HS¶âWôåGÑУì1¬YkW¾2M$žExî;¸SíLUåQM/úH‚nöÀ¡-É“€¢z87­t'¥ ”KK—ì`)“JÊ$%ëé÷Ý„ç+ÑZ<Ά›œj|Àn庯|AÄÓ;£Ë—!æt:ÙŽ"?J¡!bãüˆjÃVÑ -H0Î[ÈŸ¹Ï—¿È¯ÿË/¢R%ìRð@ØúW†DÒÌ"Öx~a$m¿PÌë¡^tÿ-OJü‰›Ï]!Ï­ˆôhò-´EH$±$—_§µuÚw<ÄkHhÔ*´ü·Õü rED¬¾ƒþåm=GbY0Oµò‘È©T¢±áyyƒ<†d%K8Ï"™=1‰ŠÓ¢¸',Ì Ô)g‡Ã%º3a£ü7⥰¨65ƒ¢8ëŽ\qƒX–ñHÁ™”k"¸,cŽÁcíp1fr(Â÷0”̸üæðºå#G¯ZòÉTBàý¾¿†ÐŽìŠªÄé««æcôoÞ%_æÉšÞPo>ØÝ£“ÇNO×^Nîí[·îïê}Š »ñ?ÙéÐ…bQšÉõŠhJ…è§Ù„m»6¹U&Òr~þmßÅÑAj Yb1§œ< ¼îØå§B•¶Þ’½Zf/.[pÉCG›ôw‰Ý™ƒ*„| æøà?£Hñ{…?Õñòð8KcÛÕÅæ;P[Ñ8ûQúbà¿(•2K¡ºfLoä•t:›‰/ “î°\ÛpÁý"]t¿²^ p&—"Œ!¡®%b0‚#+á7¸Ï¾J«ägÖƒòíí˜o¬škpOÎ%Œ‹¦HÑc-Ê0 ‰?U<<Ÿ6ÍœvLãL†“=ëŸ{@t¾6Þ/Ú‚; mE©Ì•"1KT¸ÖÆ&Rý ûÝ\•f‹Oø[l¶Î]cN0UGê®øßáf÷‘v"ÖrDf£`ÞÐ1"ÕÀ¿$ã«(¨¤šþcÆDxŸô'šDfP/U#|ID 09M>øœ¿…”úLi˜Š·\¯®ÿðá²É¡ãhبr $]¼¬NB÷0MMoê¾ÚPØKe¿Y&40Áœ˜DÿÙ¼ùH¦Xoƒýr"xÔl¸–l¸šœ9°.iwõ²rnS¤zW¹vøò÷ËpmðÊFN£ŒQÆ¥$ÀêØmâì= ìê+ÒÕos'Ú¸ÄD_'=˜è—|·/ WߊʌwÀ÷çëO…?çø|xž#„êK9ç3Ü»¼œª§™OÞ»Ñcu¿rÄGg"!…“ˆ¤zÕ‚ Ëw3ß’M™XµOb¨Ö2ټ⎠¦ µ 7ß’‚{Ût‹ڗÀÛ’w(©Û€«ÉMuÚ…Ý#„¦}Â%-ï'«ÃÏGSÊÏ¡ÎïÄ™ÿªÃ? -46ŽÚfF".EåÕ¿@TfbµÖDìî¿]UÒFA¾Ø>GñO«h-Úe“'aÊL£O¯ì–9øšú¬‰"éÔKÚ8Dβºs'ÏsÅEëø‡KÈk(‡ý¦H&Æ-Å[d% u÷ìœG.™uDòC‰N»@®‰X SÜ£gOne\=˜Éu±`$ÿðP`ç\Qž@a„D—›&"„ï¶p® üŤa&ÕNò–tJR@m§Óç´ð, öÈFÖcå©¢Æ_çð>uNT+Ê“µém¡Ä&­^KÂ—ut(ÁèòrÔ˜Mü…)ׂ¶ÿx­ÇÏtR‘,®G! EË?Mg¤ò‚=¨¹‚²Ÿ=qðMÆ×[0sVù‹Ž+l˜áº³*ÚPª«þù_ûæ{}±¾ê¦Ã—;·y ¬¹&l›[zØ ñ6Q“nS“ÇÁj!R$’)t3{a)ïWŒ¨ phÏÿÂ]($i7ÉüPV2Z+ûNÊä1 Íã¯æ/¢HÏ^a’éi¤"à]r_[½©œÆÌË‚(So9¤dßåÿ›Åžš”!7“0”•ükÏXHq8d€¡Î$“Æàuº ¶š–·ÉÇlð…kl)ÚŸ0ô`îý÷º;q»‰ÔË¿PÄ(⬆!¸uñ/¹¡MN·º[û0ã™Ðˆàu;Fº¦™&¸õ[FH²ªRˆàˆA Гjr‹M£Àkpyb´ÙH¢Ÿœ‹  ãMÆRÝhi½ìòm¿¶ˆŒš vkò̃ÿõ¶u¹+'œŸ&Nª+B¥þ©yîàñCid•PˆÞû¨"D'áð†ðHh?<þAÿb¼…ùPîaõßA´ØÔ¡ƒjø@˜EÐKt?ß×¥*ÿÁÒl}Àa(€<“’ñ˜]ãoèV;a”1Û,Úu¾!ab´‘ã)ý5ùÿ½²£gbÏÉÍ10Å”-Ie?#>Az0>jŒÏbào1¤< trߘÉC‰#¦¼É3#õiï°j( C“~b,d};©G$›?8” PÓEòlCT¤õ2ó¢vh’˜Ä=°w™lÑøOBµäÀIà  ßò% ó%mÖ”c9#ÒãR~4K»r)™e1þÓ “ÜØ~Gõù"òâ÷¹ŠQæ›*¬Gº;„|‡™ù“\Ýæ%ÑA§˜Fž$u¦ø6Ù­qö_û§±)Œ*njý¢ê‚ÛÊèòdžBÊ,†qL¿ëÉÿ-2ÖJ?UʱƒRYÚ uf]:ßQ*^°–I—†‹áDC[Ç ^ÐAé@32+Ði# XÁ·Q(C§*¦ßÚÈMªS:»…ì|n:Ê̾£ …Óê•è1qÈ0úf!‚–•ìŸÂê=(­*uPªÈäÒ­¦Zi¡b°MÝJáqZ<$=Á^Zl|a§qæ¬'goµŒŒŒW¯øp”º¹I!x]þ?óXpéôäEVôŸ/±[F¼usŽ©j`^c‡u8ûòM‡þ¾Ö•ãÒæÙ¯ÿ+µ—B÷‡ð¬¿-Šâ+ <<<`ûõßǃs{ü`[œÆZΟPÅ_â9’[›.#¯_MúϵypYÚßÜï ]ä[4#/)”îvêÛ&Œ¯ÉŒa#tC×Vê*í6ÍkGGG;{{ùû–ñ«4ÂÐ…|ätFÀysÇgIÚHM¬'Ÿ€¾q¿/zßóÝÑôX;†™·p~ÌŒ U®2Ö¸1IU-¬9¶¹?>àïÙÃ5Yv¨h !X=Suj-x™,®7ª}Ú- ¨ŽÒþ/ $+$K#Ð5£É”ÈÓ"D3.øƒ.17 ""¢  àî¿ð""ÖkÂÐÌ — .+#ð{”ƒ,tz®¡Æ`ÝWj(ôÙ¯Èá=à Ó9üÃC\MÖººº`=33Hɡԓfª„PùcJ‚ÌC-TNhST·($ýsm Ñé—Çñú­ñßÔCâ!S `ôSÂDâæÎäÄSÌx“7&ÔˆIœ´Z‰ ÖšŽÜÕ  ú.\4±v·· µÏ@´¸–´ˆ«ÿ„ŽAå-E:Šå¹ýóJi×OoÑ×'ùàƒ”´­¸Ù†-×Ú÷¸¯‚C\©´jp¿éÞÇ„¸¼)±k˜3GŽ öbïÎÎ,ájaÊ ÷ÜñË«ò÷ßßµÔ ^´tuacø2½¶ÎÒ»Vû”‰R„è „@QMóUs¤¼!`Ñ9”ïðR~™1zŽ‹)L.7Y ßæbôñh7_;HĤöâ­,vàGæñËÊ+Í{UÈ~d¬®6ñy_§&„Íâ^jÜ«×áÏSvffn}u{]Ãtábê?|¸ïaoå’,/º„–p؆¦ÐFÆGLµ„¦ %6Z¤ø|?y0áœê(<½âÛ;u®Ž¡hÿ¼®ºÌì « zŠÊy:öƒÅ°(Äà‹ÚÄÔ@Xàwy„ò 2Í8Q·÷/49pƒ_ò1”Þ8Mkggg7w†¸‚ïÅòñqqõ ’èoˆ®±@ê®þ(V³ þDFÜ¢«‚âÙºKý>ƾì¡n騕¯JQfR¹%ãx…béW3Ýò T¸7©:yð¼‚|Ý$¥2?ЏìØêûWÆ’7DDÇû†<’ï!ÎsiiDã›æ;}hÿë?B"ÂÔ‰]¯È%Ñ üë´YWÎÆK‘?r€9À…òc(±…Ê:cݹ°u(."nÁhË.Ù½˜ØÿSl€ î>æÔŒ~¤:öMqˆSÍ×’¢bYg!‘µ¡Êß­(«RD¬eÜù žß©0N#ë0 · –CÔzÅè/ñOšÙjY™žZÒoæ ޽¬½…$x'j»3«M`½:ÿW 0û{6#+dOþ€;Ïæƒ@T‘-HžàdC$]¯èÃâ Õz\Y INÊHã Yxž\OBQtw"&Š2QÔ`Ä­…´v¥´jJÓ4ªµ·™Üâ]<¢€›øÖk5µîãw°?l@ÈÉí ³Ôü™èƒȱ¿æcV®Z‡i2A—·É~Oƒ‡U®\Gæñdž­»™/ü˜E$”ª=b´¡^e¯ÁmRã&-²dOƒ ©èÔÉØbÎì•€p^“ßÿF.ù¦×mö3å—1" ìS£ˆÆ!#ù7` má¡|ŸF‚†He?>ð…D¹fg´]'ÝxÕ@&1r‹ù4àµnQ£œðìmFY—Ù{˜‰»?HжŽÅD¹Ò ±j@+ò°ú-ÔÄS)™¤ž±cë˜Ò[ ‰ûª~ä‰HtCÎÄE;9‰3ë|SùÅ !Î °4½Yë»v) ÓõÊÈvîô$ÔµŸš~?9Cb ðÊíTX ž~C«Í¯&TiCbăh†÷+ýfb‡íý}ðOaY 'š7Š_BŠ]@ã0¼çîÓc ôT"¿¼¼Ü~`_»ÔeÍöñÝ›*°}}×mXÙH9¡/˜=˜Á‹øÒFTÿ±eúO] ¼×Õ®Ýߘ3ï M_'£m¬<n·å„9l§j×1þ# ³‘a yÜ}m·§Xã`Sœ-lVƒË×£`á皯u×àqiçéŒßì~ÿÅÓ×–Ï©k2h^Íé*"€}ÅBäŒWb^ô$Ô—t t&»Æª‚3f«ñ÷Z-5à#¥LO§Dl#©¤îšVýúìz²}üÕ#¨]–Öõúvð¿÷Ó¹vÞŸ Ã.Vþ÷Þ~db¤}fr˜ÀK¨³ðÏÈÁ&×7‚ÕÉKÙlnÝ{H ÇËM§ñš(ÆäöEH‚îE»­"á¤ÛÉ0“/µÕ>s“KúsŠjˆÐÉ¿aÏäÔNì;.í±¹U3ïEm¥ìþnâéDš>=>¸1µ:kHÃR« ðYÏ×UnA#å”?GÚ’_¹‹}ì˜óÖcËÓ9‰ª©Þ›V¶{NYØÍ~ý=ëÚZ«Òýp€T>άƒ.i¿Cü'Ñ–{¨¸Ôs¾=¯À›}j0?Ÿ-¤£§A;IJ^Øn.PÌ»w‘¬GÝ<? ³'ºç ¿§Å¯¿åWj¾VWç§QÎÿ­Îm ˜Ö$VV¹je’ÔïhdŽ“¹1µ=_;È;õ‡Ý$½¿´ˆöeJƒà2™sqã^sWÂðÂ÷ñËøúx®›;ÿXJbo¨3@ÛªHÊ,Q¼B˜™EbâGWÃÖí«·)‡ÕºTä‡Ê6Ÿôãê`­7ÿ7¿2n¾¦©)+_à\&ŵÍSmÇÄ8™¿!‹4oJaBÿO²é[Wéj¾¸=™oo1‹Ç_C⦅¿Ämu¾½ü‘>øä e1Š)ž`iwúÇQ½s¶‡¼½¬@~–ŒŠ10úö¶]}šû¤ˆ û T$aß¡Õh?yC9C•€U±;ª‘’(.º=v£d>Ã?’šÜt€cPV¼RJ„¨=CI6]”ñÿ§/¬¯LY'Ã'ÆÙ¹¾lðæÿˆñ;y¨•Ñ–)«"¬-vòÁ-¢¤3iÝ•S ;ŠámRžØ¥SI¹iÈ¿v¦™“‡ù³#"ôIpÝÃôÓßf#S|´údýGćԃ5 §§¬æÃvV ­¶2Þj)[Ó0‰‚Ϙߞ—‘Û®)øª€#›9°>Ã#ÔNû·J/ÎÚ!Ž8Z‹ð ²€lÍÿÆÕç‹(dRÿÙcøG¬ »×qÞXþ/ìŒk¶¢%#Èž}È6Ȥ€-/Ç žV¹â¾ÂZ·o¹2Èd¨1ýÓÌ}ÛÅÌ5ºfÀá 6ŽÎk ûþ‘SþÛ¤Z#þU3|è¢Ig±Vu÷€Ì£&søÆ?{¼eçîâªñïÈ3©;ß‚E’~I¿™}ìž/â“gù׬D “†ž……'SÕp€0´±‘õùS´·Hƒ‹œËä¥ú{ÿuGšÆÞƒ‹D6d0HïØÚÕîšøiSR¾ð%ÃDî¾ÑQq ´Ýæ9 ÏëþÑ:×õghB­Z)..þúßÑ—Ü·#ã´üžÿêË>3ÔEÝ ÷&M5æ¬úó@«î¬ž ƒhƒˆë|þºšÑm˜FæËCÙ{ýHa½‘5§VUÑ9EKÜQIüåý‚O¯C›½x&ºRÇc ´Å#vý¿X,Ÿ»ŒºL ^AÞ·Ÿ²QÛ9 ³,v³È0ÏoJoýµ—´R&8Љr©ì©=f¦uÌÓÎfütɱŸ2±P •œPÆ¥Pd2VŒ?y"äš‹¶1VA#¯ Oã2´]øGžäZ¦Õ É’xGN«²LÚœ=¦ Éë¯(=ØŒ·°¦3ãí(ÃS_ýÈÍxÃ…Ǽ_KìC@þnœd“:C'ÖEeÓjêÝÝ#ÝÁšRÔ­á zÿ‚ܛϸÉÕ¬K\”?çœÀ ðÿš–ÈÊÅBèYkËþ& ½?¦Žô^Â7îªÖÒíÅ"•NrèÔØ·« òTx|‹¶Îg}æ¬!Ý—êZFc›QtÂ6㤪Pû¢‚ÞT2åýMÄ­PÿåÂF”FL­¶d“¬AY@ÇÉ $O.9£ãÈÀ„Œ¦öž Ž™I¡üÕ<³Z‰}+$¢Ê69ýH9IÅþ.ËöxjA}h6†9›vÇñIùG.œ0ô{๮»<Ñ$¦{Ó“&mÐÔÞ Yÿ1•ð›ŽÃiÃ5 ÖÃNAàtì¿$q™ «F ….àžòÕRH­k ñ"{ÂcB#ЙZ€ÖÁ$éÔU«³øK$î |ò¿ âyÓW[ÚÛh`·pb†z Mö£ï~o<äÕI“ƒø†&†«^í3ëï þÛ¤ÙMØ0ý_vs¥nP´¥“Y^¡ø|$ñêû?ª 9¶*„^Œ¼Ã‹R£"¦Pl`Òˆió‰uˆ4 À6Ô~Å_®ºÅ*â‚vx”í›Í*²… z?\s™÷3)Gÿ리|$m>¥ëGˆ÷Ö¬³VQý•ÝY3¯s#ËÇ™“bÍÚ™ ŠäÈ(‘Ý2š ÿûE3Ô…#*j“„Öºq¯‘^Æ.Æ'‡&dRW œDíòF§é¦ý“)ó¿L=XË_æpø `P= ô4‚îc+¹£_ê|ÎðB>%)ÚEÌYx†ÿå›ð‰Œ·dCJœwôÐ;õ;ÔJÚ1PÃhþÈ¥'Qc ù ýK°jü‹ßØäù Aýn±PÀŒ…YX˜uð+²u‘SHOLZáJü „¢Õþ&þ3 -öjŒýFe£ò“8™p‰"Ç~¨RƒΨHèŠÿÓ…Àa u-0hiÔu)5½nöY2’²ˆ¼Ú/ätÈC#íÏ𺶠S¸X¾&uÙ]R.%®Yä:*u²± 9xón nY„CÌ4;$ @‰¼[tÈèÁ¤¥ßã±(F"ó ‰ivºOlúW £ž¦„œÏÌ“F†™ ²5¡Mi¬´Rpx”“eIÉ©Ößq ›@C’Í{‰ì/RõÚ`)&íç3~Á` äcïtÈß¼oöç’"c14Þ°N¶þ9kí-¬„~€Ž(úKÙi¥T©²fb‰Hz䯴¡øä¼À€ªf0—L#ǯç)é²Ì©×,Û³J,CäÂzS³´’dÞ0g…H2ö8S F¡˜:>õ°ào¾îÊ@-D d‹¡“û_ #µÕËQ¸KY¡¶~m{ïåj¶† )N9xwY78µ€¦×Ùboçž÷ê'&WÍALJ "šÐ%oâ>(Q Ç JY1™e©x 0ÆèÛÒ»xìÁ)~?•’‚F‡Åb9 tl ‡1¬ "þÎp)ò#ÒcèÌuÇtQ¤ZM¡ .Ø™"|ð)â\hVMw!µwB¬Y¨²ëÓñ×7È?ßÃ6o«Ê ø·uWN¸[Iel$«ú¸¥„‚X ·œDÌýú`!‘˜ã0n»íÿrŠ}]{ämj†Rp|jz¨î¬Oƒ×ýÞÏ?±!D›üõ—õPh%è_*Ÿ˜´öìç9%ô<Ý~ñ‚a/×6íG=,½¾Ð:û0fýîˆËL¬Ì=1*°BJ@¢'èþÛ8Z(ä3Ô}Í1ùè  |ó†ì¯`Îì5™ÔB’±ÿmÀ Q´O§•8JE &κ×8f*µ‚ó¯_ªØÿ®'?Š4ñ¦ý ‰^ÈÓ²vVU.ú™„_ÞŽGþo‹|`[|éÑAÍô_×49#ûa0ÙÉšrîe¸)]IÞžsÊó[3ÞÃå +e)uS©jÂä_™©zmÛÀˆÀ‰æcù]e†SE$=:êÈ©ï5xºíƒ³ìÂCnéà-2´æ–lÏn¿T´Š@ã›T9B1ÁQ;¹wÅ{¨õ›]\*Ы–¢:@0¯fwÊaŸù?ç²úƒ‘̾Ńê~ ¹qÙ‚+2o—Ûnç3¥Žë2¿èˆaˆ—逷©´˜ýQ:ðß Éyrì»Ô}ìj ;O¨mÆt~›šèw(ÁžÃ*÷¾3 3ÕÁ¾ûàÙn‰?§îJSÚª! ¥ÓGÎV€u/Fª ‹„¬ÎÞpÝ[òºe9ž‹‰Iàß.LÚßÈo]œ‘òÿ/q¦*{t•ûÂ'œ) VnЕ³\{¹¸Cf¡É  ƒ&À%Ce•îª9V<㌠r€,FGí„ÅþÛ[Ìçªô›VCŒïǶí¾7ÙùoÓ9;2+ž‘Îd]Þ¿¼/h~È2ox]hŠ[æË¡êÎMÿµ ØR<¿íù1¸.ð£®4NšÉŒ¿Ui`5A‰yʲºn„4)l÷§83~/ ‘0rØ3fgŸTÚ@o„œ~ØðùýeÚÁ>®KÖ_ÍØï¿$ís“ƒ jC‡ —Ù¬Œε‘LlA.ù/Hc_„-éTK‰ð(ÖðÚDJï1zꌟÿvM×ô‘…´èèÐÇ©Œ¾É'†¢tb—·(Ûa†¥8xÛû²D¦p½âÊÈôLßìǬ‡ñèoÁõûppyp"ý×`’÷æ óƒ¡ç6/Œµ¦DJIƒjUU#j}à¿a}}N,—ÿ#H AÀÅkOÃ%eXÜ›Ûf>.šîoëîr‚ú¢¸ÔþV8èÀºhëþ—ÖîÍšõ¬A–èh —qÆlñM9ï²§¼såìJÙï^oòÅj#÷ÉRfÿ«9@ß»qcÀXWXw'{xý»\}½[G,9‚ô°Lï¨ý:ÑTùÑT/t`À°°î׋íÊI%èÔȇŸQ¿t§§ l­ûág©ËÌdjͧœ>öx+Ç×9Ž˜Pÿ©€%v¢Îÿ*SÌ|VÈg(|{ˆ(MkÐ’èþߘ˜yïãm'}!ýo|µÉ-ª €"å—/TûËý76íIC5“ÛN=DA(º½ Rú<'J€âØ]Ú'*æ=ýŠz›œrhq2ʽÑ"4ð! Áóüþ°ã}aƒÀìG}lœ_åä*ÙÔBð ‘Ŭ]q®Öç.¯â¬æ¤@%Gß9ütlõÇLJM¡ôÝèµa‰’ÅŸ]ñv™'ïc¹•Ÿ˜yð0xÎØC\±?º|>KÆXKÚâ»>a;<ð©å»lÉŽ9'þIääôÇn2?´ï™æ† iÏ~±HÀó.I¸-'³TÆþ·-ecür L3?q&jõn)¼ng$A3Z5dËŸv­Žöivýõ+îhC€ßfKAòÄqüÉh˜°á-oZ])àè¡È5¸©ï‰}Šc ¬»ƒË[ÏÕeõ¹çÚ^‡xdîõ/ýõ3Z'c¸<‰B:Cþ›‹M5Ý”FxHHØW K}Î%Q,8dgùÅÓ]÷l¨íø¬áÑ7u!±N8èlìàû„ ÿ6i‰ ü2œïO)øð8QC²Æÿ‹÷;ÃÚµÃyºF#íÙ¥Õ_Tê%-ƒûñÞn ©£røÝ7KÔS¦ð9ö|ŽGîTÃc 1:TŸµàÚ3©/j®’(gC‹»nvÏ3Ÿ“Œ˜Š›GweOÇŽKY Q¤ ʵ'Hh˜iK{5BTûÌ?Pò¢§6fÈ:»ã>ŽG#gТ,êv“Éh¾ÏÕ»¬4q:Z™XÜbò¿¨—AVè3¸ QcÛRÏ8ý¢ÐϘqx{‰ô…*·®¸«\µî½:JÁïIëÃnsëUN-OÔayÙíÕ¶BÆÆ¥]í7qVCê§JiBë2Sxq“Jöù³7rf¿ÿ·sl`Íàstù!xPÊäë!aƒÏÎ'°hµò ¶G[<Þ§€qvk£6½r7š˜è©Ó¦Ý€Þ©.½im\ªŸÇ*ΗÛ#nx-³½c `ÇçxöÝpÊi4—I G$_6ŒOÖ ê‡.³N:ªt^†3üç²~%ßûK@ì0óp6'›/·q#yŽ#ÄCý‘¢2ézá³u9Ú]™¸-ŽúVs4þfM¢QÚþ¬Ú‘™Å7$uéx·7B+¦ï޾ÝÞï{h€kÈ¥½ŽÍZ€Þ­5`³àm—MåSá÷½w q«§*ò·,Èï;§t2Ÿí׿‰KPY[Þç ¾p½(ö¸…žqïwv} â 'Tâæ¦f•'ÊÈ"c†b9sìÅLHI꯲ñ‹B¤BäªÌ,üG¢(ü(ìx1˜)@ýÔ™3lŸ|_Ç¥ÛÝ¡”1ƒli€í)íÏÛniàHZö$‰ e¨J5”·lí\܈2êpû%á+¸f8¾"æ¯Ç&R}ÌÉ¡H«á bM¹Â;èÿU;áªê+Éj«@%ÐÄ«F7~OõìÐËz¶ŽZŠKÐqjGjÌ/ƒ&†Ìîq¯­ùb4j4¹{ó.0¹Åfo–êàU_¼œ‰1ͼko/û°³[Éh_ZÚ£Ÿ#Òhö5Ã÷ÁìOŒp?Ðh/ä0¹¢}hg,)쨘‡Ã&~+Lsy¶»%y‹Ù⑊̙Eæ3òÉߨOú¡ÆgI\/ÎYjýŒ·$xG亦1{7 op1Hôÿ0syDÜQclð×Yeo?®99qÓ×iúÅÍ]ׯ/ïFV0 ˆµê«†G:ÛËiN@-6ÎVfÁ(öäR3îçŒmo“ Í0‘ÞªöVH=†¦†ˆVø'‰éR"wZK…2èü†6Ò*i¯2ye½ù×J2bC’£™ŽÇd®À.u£vß E+.Å›Šó´u  e]n"b“† ðô–Únu­²ˆx¸÷ZLnl®M±&,&*±;'_Põâ®1˜–õ(\>K€]Ó2?xvOV;`ýNjé`{ôg¿G÷I8Ánù1×iÁÉù xyܶ/ó® ¸*‡Ì…ÙtŒ%}cÞF¦ŠF0U¢ôºÅ{ŸqÍbLò¸n„ÇzŒIë/¡€Çª~lE>[PÀ‘âúÌC{{ÈÎÝöS?˜_{»ùÝäü&×öûñCë0Áð±Î¡M@ÚÉ“Âä¸^à¦{a*\N¼AÊc•º€8î×/xÕOâ·ÇkËÖ:>±^5tß–Ÿ(-M§ÄÔMNa„#Œú¹€¸þ‹ wO³ÎcÂá…‡”»“±F’Ü¡ØÐs¿ãÁÓÙ×}ÒÏš,EPUÅ øù]MÌ@ÅÒ#¦úé`håÛý}Q¾ssyÃúò’Í•¶Öç[“Í¢Gï¨úíßoRì‰3Eg†vE‡‚Ÿä2·eY„þ°é|PÁ¤kî›âë¤VW<;Ê,)ËMÒÄH¼§æ³Ósè×"%õQZOÀ¬×‹ Išö1ýÒé)¸ÄY›”;:ψ~Úîœc迺X£V:”x<,z䢼n#û)­Ïëú™¾vÃsÔ&õ² @q¾ÿúÅÀ´•Â4t:…0œpª¼(käýP?v˜ê¤€ÍHe à%™–o¶ï}E‚&‡9éuU/Á೑›Zž2åC€…<Ss¬«"F±Ú¡êŽ¢´Àóð³Ö±c5êk[Hç’dFßZðˆáíVú y+ pô'–G.·I;Cj¿Ì(ߎq4Ãá†v^pÃÃÉê‡w›ó ¸lûMcF‰Èqxê™(ãÛΙ‰Ü®O¹&n™íŽ1Óœmž =¥irÌjQu[¬«“ý7÷áÖ”ñ/˜@D¸mãÿj®9Ø1¹Ãªš­z•6ŒUÖu\V ®œ<2꣦Šoº-DK„`OGåX€ zPŽ-ïv(ÿe)ª øHnÞJoܼ‘qEø‰V=qþ´Öºö7õœß6ñ¿~C˜¶èÖØP¥ì•O“Ÿ—6 KÜæŸ¯Ÿ^þiDj®3gü¶ ~ÖŽ&Lg“]KzŤaßùŽ2êÙ™?õ{ðl@{á˜!†˜ª‘ûBáÅþŠÄ·Eé›=f@9kóùöx–° ïÑ9Ùã€j÷»¾ËÝÙàþæÒ[qo?¬ öðÜ4é×ÏïâŠà¿‚°ôXµgµ±Ó„ßÎîžé˜¢iû˜Áß :}ð`„ؤÍ ×Ó‡`󃨀 ÒDëÁBgR–;T¶“XQ('¿?&c1LìjùÝÙí!aømP¹Òˆ?{‘¡`VVÎ#õØÜitÄ4“ši¹éªCTÕ¬gÂ(BI’cÖUß=ÕଵUËáaüs üÅâãïÆï?…µžŸ–ÚÈ ì°!AÖ[ Õ®pƒ×Ðm ÔaÐ@ÒB•‡CgK¡‹…] ’»åêÛæ 7ìêeuòžBROBMœ32†²î“¡óUÀÿaâ˜@Ò£'u®¶«º‰!Ù8^Írd†¡ûzAþöF¨ýò¶ýòd  «¤ówˆÎ9ÍÕ˃Æ8¿ ¨pÐ7œÒ¯2„éû†S´›X­ol¨'Å-þ0üAâDxñ p™³,¡]­£rA>êCáXoíâÃñíì%Šéñhˆ¢JQ¬KÇëÙh`’R&/úcJO<]½7«u®€û­8qeÿ&«cÛLíûÕñ7,©eéµM£LÎ!ÓýywW|Þ þyá£-L¨ðo$Ú¨æ ×€÷!krã©{f<…]‹ãÓÙýÑ)œ- ÆqÞ#ÝÆð‡¦œžô¬á7¶q-%êk])4`Ù4«®Ìq£Ã7†-öäӱ±?À7ÒVƶªZÝ6Òh–o‹‰Ø_9³¥ƒ ë ùÄ¿Pg|Á•‘b°ž‹C·L%Ð$’Ûi·µÃ–-uÉYôëIݬè ­­¾ÑÝ6Cº{…n¦Æ ‚2L"¢šgŠQn¼ËI°½ýô<7X;Üú‘ðÁÖ3QW“ k¢Ãº¥\“ï*ªìäPÄ0Æíp‘õ) #ä82d^CœÈ¤6 ¡ïdW[‡RYÐï=U2gÛD†dR¨ ôAØ‘ôVóÓÈò¢ñ½þWL\IÃ=«ß®‘Èê>þv¼<¼?ŒéMèM¼Â[Ù=c>³a|Ø¥Èv¯4#|tZ?fø“M.ñ˜¦¡YDut&Ú~p°>ØôN—?éñP¨# ¸Ì2Ǹ›ÙÅ} ã*™¯Ux‹JݫӖqCƒÄ\ñEÒu £ÄŠEÜŠb5¢b¸‘ï2‘²B²®˜{i}Y•¢…5YO,ܾ»Zó>LÔÜbÝV—GêûEAoð\é<âg{ÓáÈ Ü‹¯ž+á,E×ýÀĆ€¯y³é©û ä (Ä3è@Díz—{wíúÞû—·8®ó1§WèõË@"Kó5Ö.‹™èÐuõ®¯JÜÆiªÎ‹6ê½³*®°¤JSÒ¦°û‹aþ¬@ë¶ç3 g8'éI¾÷€®Ûnu#;ó¶w¥-ƒ“ÍfEŸS/w:(úŽMëž1CúS­;m PŒÉW…`ä½ôÓ³àÙ/ .UÒÒÚaH.iXß*lÒñ{ȧ5Nß%”S+\Ú˜]Fõ„¯Â‰·ð¬»%ؘˆ &"Åí[ýñBFåªò¡‡L !qëçF£ÃüÒ€ŽÔÛÁ)ÈSæoä„ÔÁzÂW{ý#ö¢NÿJ['·œZ>©ˆ1¶aW ©ÍgëÍÁnǦ•Œõ™ ˜ßk´r {¥uÅGH6æ7á®^L‹5Ðü®æIŽœ©Kë·ÍG×£6ü°˜åÝ‘êÌojƒòv’í³ü³±$õ•Iκô²æißSb‡7ç_  99…ä.‹9²üËûÐSƒÍ¥†N!!‡;ù¿ £ëƒådô¿Ìw9›Dó:Z%¶çOåï÷6ÒcŸTTÄð,AûVn½käl¬E.œq'7Z×]p>||4uØ©§3þ7;+@ÿAv¨°{¶Š“¿ypY‰ƒ+¶ ™wæ–%^axy@ÌÉ•™¥Ë»—m¿‡Þ—t;,zvfKûoǯÏíöÁx–GV ¤™sùI1¼­œNXoÚùÍÎñç(hØp—}Ñݬ ŸÜ‘_œèº¥ˆÉÿØaFÀx¦QSÛ¡ðWÁ~¾yú–MmÐ v¥þ¢Tƒ‰‚Üâ©ü:áгWÏKâ]Ú?ÇÞè×Ë7už{ªŸfømšÉ%ÃøÞøQîÜ¡7‰^X…Äë_Ñû³ѪÇpÈßXEªQÉøÄñTa¤ìœ°Ñ(ŽÒúí”å`”µ]Mv°;QZ£±”%‹ƒûîÇÑÑym±–bs|ÐùnÛ)Ÿ¬ðø[iˆËBý ë†5H-;ðc±l>­;ȧZßeKv;‚˜Q'žöœ¼–ßiˆƒ>ÉšÙ¿Ÿžoy!Œ µª ¦ì†÷Ì-¾qCÀ¶×aã÷!r3äO=Ùð½…«T‡Ìh-"±hWæá¢Á‰Øî?b^o1üf"ñ>À¨'ýXPâ½-%’Á¥K‰8ûbö¿‚;’ãŒ0$:Pa>CËá §§\„6À"u?ñÓnÅ3ãoû’ö²|9†µ§¹ÁÛ]¾ófäó,ñÀ=žåm½â·fj€YzÍ@FìÀîÁùÒÉpŠgÆŽÈ\$í:¢õ1HÏçS-­m13@s*ä™88ŽÖâøÝ¨çA´€Ðû:¬µFQ6"Šyy'»°ÇuŠpú+>âîÖ|ã)Æ¢òw‚¤uEs¿±“ÅäèŸù„½ÒïžÑÁºïjñËOœZÑ$…‹´³ÛõxÛ^‚!˜1G³ˆ†Pð/¢`ö;J@39¢s47³W-µ±ß³ÝóÙÖp>íp¹U½­ˆ8åVÙSÇÄÑd#wsKèQÛX­S zf5™äyß ó>[~‡ÐlÙ„f‡C jFè +Ÿà]rÄrx‡"ä™y3”&-7¤´SI0´ãZ{/+uné8Ìð‘ð³lö Å%ëôÃã]'{¢Í´¶êZUê#€Ý‡³g­•«ë·GÎO÷nm0:’&}¤ŠFC¬È¼̦÷d"}Â'—y‚¦-¼)\ÍÇßVõÉ‹Œ°’OÏç 2˜ýˆgQPãc¶ ?øÓ5d\Û’¹æ‘Šà4v)¤BÅ 6;¼¬)XÓ•4€ƒ»ñs¥+'ß&ü`dr@ŽE©’¹Íˆ¥Õ<¸Æ 9©.áZ*´Ž‹ñÏfÐÊh˜VK9í'"QLP`µï–PÙúWȉ½Ï[ÏSÖÛfWkûŽWpF‹Û–ª[š õæÿz›¹@¡R³yÿËVmã‘g’*"_– ví€cY@±ž‡Ê.0}:ŸàãkâÚèœ9¨˜„=𼃨¹»i¨Î¢µCŬsï/$Ü2/ÊJo(-Ìv¿»ÞÇJÍÜë“4@ÏÖµ.°}îQSRI¯rÊ"BZ0>l¨¹ –äVšo‘—l¦Ì!wX9²œ¾aȈ}˜¬jˆàò¨+ÞC c¦R‰ÂB|{©Ö–t)ÒäBƒÄlÒ‹­3DÇlýܹ´kæô¶í1E˜›ûQ)»íAÇ’ããèzyóRaJ¿CÕäRùÚ¤¬o„¶jJª%†$m­ÌŸcß%'åLÇ"#³ÑYlœWÑ-ä$i—ö<à›F.àTf‹#÷;B„b÷ ÿŒÂrœÊ…¿;Rft\ªb0X÷.3}Ÿ' ƒ6˜£ôÍb k‹Òƒ¼Ò%®‘‹¸E·¨£ »ÚlÞF’C^:‹òßGÐ1ydiO³~Ÿrã.@Ž#‹\BêòÏ}m•¾¤&¦Îþ¯P²¨òZØa©¼ôD1Âÿ|5 ! x̹µ/¢4˜~çÅ“ëK Â=ÆÇÅ| ÒÕqrKÝŽN^?ê: òŠßgE²kr,âO4¨þÉ»M¡¤AQ”ÐXÍF´Z—üÑ­Ü&Ó¯?ƒˆ&11žwsÔØ3U5 ZsfÈP H/rfIM o\bÞv‹ûëy­çÏ=5pún"%«vÑ[’†I¥B0?mš¹#ŒInäqIÜt×zÜ]°:Ü„‡ç…M´6¯Œ¸láãR‘°Ñoeõ¸i”¸ë±³õΑ Òô°Ý¿÷i!S¦^SÚ)`?“3ƒ©…Šf‘qļ&g}ò/–•wuôVX÷p‘…#é°$ &æçO8ã~ÑZ)Ò<Õ¯€¢LlȘ¾v°7"÷4®¸yz6 ›ÍzÃõÎWúuIŵJ`?åùö˜bç~@ˆXå§ç¹¾tOrPYØ´-Ÿ¤ò@¨ø{WfýöšdØ’‡Œ°¼?#t“6îˆà±Ë 5:Œ×hÁ¡&¥qéßvÇ/ã\ £üÌ#`ûYnŽOÆ®ÑÊš6¤ í»Pª[cFõäÉÁŸÔ/y<Ñ_ýR¯(*»ì+Å"þèˆÚâÌ:Nü¾ýwˆÆÄ:ÜèÿJv˜¿±ñ±SöUÿœ–’È^lÕ%éÌt‡œŽƒ)„eìét ¤i|ºª€ ,3€!ZükŽYdD)n¡€A&.çÔ<æÀá õ÷,~ÉEsÖaõ(ç5`_{/Jr›_cr ÔÁ«gvåfu@ûó!.ðÒ¦2îw:!¢Gö¼x9Ö·­­ùÜq¼s›g´áÈ(Îý}? òpdJñŸá47™,¥­&Ë¥Õ&×'žfWn¼Öjyæ¨+ø‰ô^ 8 ,ÃÃ`‰àuiF£:ûÝç ´‰BŠzNít,Þ飛ƼvCÄ †-]’æ1 þor‹–µ[ 75½ØßÚ *Pžž¤÷¢F-à, *Ø¿aBV¡¯bÝ8#ƒËcb¡`Ö,êæ=aF΀®Ÿ\æñ ŸùySS·F=Ü÷—¡ ¨¡qÆ‚ ¹?·âQJï‹WllòrÕ7UAT0©}`~Nþ§i&ƒòW«·zy޼x;¹þ-/+¦¶Ï&"}#ËŸIEÄHÇ­â@:~0³‡|²ìá=Œè 1Ò(DÙœ=E¨äÂuât* tÂ43qéÍBq'%h4HÛé„53’§9ÈQ³(ê[¼AçòŸÐÿUpü¿zŒ^+ñp&q5bƒˆ˜ëJéëèªüÓýƒåÝ2’… fC‰a”ø0KÄ¡E ïpÙöãg¤N¥B,¬ÿvºÛÜ|Ü![ ÒjàˆJë¯âu‹“ˆ=YX¡ ý CYIgøNaDì˜ô¶´©„©…‹_W+l†4ˆþw¢T¼£F½Ó-- Çy¢³r lö¿ƒ¡‚¸Ã¦¸…Ut§kÊC‰Iþ,†ÿvu)ߨt™ëk¶uÍÿ׆×H¼Ì¬4D¦ÛËÙD±–ô¿â—%¬œ¯*C¡VÜ7µGT(Ê@Ž—Háß·Ñ—ߟ EÙ°l Jù Û’þmÿ»Ù Ö ’.DÞmýŽøWD#Oe‰› ÖªêËú¯kau4yUo`ã¨=ÂÿJ ÒrÍ,€÷ý)±4þÛèG$û•þï¢@"œùðk Ëž¨RÖq¥DZI^v%Aá¿zD¾P¯¡qqÜVøÍÿà‡"‰àŸÍðVălŒ'9«¤ü‡o‹XšÜo½­-£+*“#µÒø ™l œ Š­âcn5¯¹˜ë²Äm¨Uá§;PK¦`â¼³n$l^‰Œ(€ãÒ ÔúSäÁ[h.o1ô ¯eô¯rLMö¯if›»\ñÎù1o —òV ]Me–·¥©¯“û&Ïlj ˆ_ƨ‘Û+ º÷›šÚß\ NbÙŸá@,Ä)RBäáä·ÚÄM £éà1%]cA2¶upñágfyCøííœÚBZ¯œÞþ^]4k$ÔÌ-¶›|}š08½eÙðgÝp:Èiý=yéñÉLQ­Aþ ä}R´)KIÞÛ#•ùÊ™\–¿\rêì]]MÕÑ-&ÿ—ÿy/Ï ù‘ Îisp›ë˜–1:ЕÃÍŒ«#¤Í5•Ûuä6{õ„L\Âþ{È…y_ûHwjðåøuã ¿ãsÝ–àÏ$- `ÂõÕÙÇïõö‰p~±âËkÙeÝ·è@.ƒ8p+gÐ%“SGì^±ËŒ¯­ãÜæ=l¯qÕW(hŸ;˃«ƒK€à/µÓËû àQ3§*+Ù!$ks˜ß×E#[ÏÍÅLJϢ9Æ£sgó2Ïáí Âô×Ó(­ç.¸Àþtºù÷¸ S­$3 ¼'~oKЬKýO7æ4©.yRÛ\ŸJõǣ/¬Ï‡Ê֥ޖ–Æ íÏcìÆ¡iß·Ö9^€ß½îÐWË!®Í›T/ˆG‡›ëAÅG*a¹”Åhz˜oûìÌ|©e4]Üø@ŠÃˤ‘ÿŒBþè¤Q¼â|°~Ìót{³fûjMØ0Í”äÛ+öæÿN/¾D›}¬ýÒ•d 7Cš]C@žŠË¸ëŒá¬®Æ­ë¯9w¿ì‹æÍYéÞ¨gÇ3ar¿ÇïŒøêÄŒ)y‰ÙȺª¡Ú"·09Ì–!ÿÆp×Íe¼`Xœîk6âòß É0ˆ´uÏ75ÛR“¡ç°t8ù ”¬·í©×ļ Õ‘:ן«"Pä­¤á1biqä·†o•C—]+{užÎ^/o÷ÂÈÔ|†€“ôFí™D~‡a{[Û·”£ßO_Ž=­“Ú!ŽSGëA·ìãóO¸±Q7šß”¯×ô· 1ãsÉ$BDqyõóàd{^ÁïǺ^]Å>È€¢ÐjIÓ˜1p.ZTDógÓ’2`nOÂ9Í EæéU©7©d ãÜy0yì±íž´ò|$ûèùøÙ¡ññhã†i 5Màѹ98x±Ñ̰KaÖÛ9ËÌvŒp—iÎsÅÞq„Åhþª¿õÕÝÙàjƒËÞÿ‘–§ R)£)_nÃmYÑ®$éâ™tTÞ>uOgÍç+ E®¼¨]-±®-Ú6V¨ÑêH%®ìB-¾p©" Îo4¾{‡܃8ÑÛ¡K ž¹Yêb ¶•øÝ’Û„ŽúÃýcï1ÛžÝ óLýSó#¿}¼Ü%9 ¡²®“Ï;ˆNK by!F‹Ê«|äÒç͸S«šÃPsl‚˜+÷c4E0´Œx7›+æãÁv³»»½m5Ë¡mÃê›ï'­ìБóF²½·Ê¥S€þ©W¶lÖ&‰°Ùj‘f DÑ~~Ò´¸þêB¨ðMÿ|4ú=LËøiœ"Á`fÞ[iã Ø"YB:Œ£ú‰µQ×ADßfÂÇ$ÓºŠÍõ饊Á5§»4¤‹&Nk>[¯Û(í€t— ÿ:];– zÎ:5Ç 9ñ<Öû¡ã2ªÛ"é$í°µŽž“ñúHËâ1‘HKñâM­åÛë/šl{¬ }jîÞæÍX»lxaˆ¨à$æÍë#û»“Ƶòæw/šªšs„ÂþfÖ }€¤YˆŒ"(EQ3<:9yÑA?ù­G„¾Eûæ=ÛÞ¼,‡aÈ_¯íý  éBkíàËìÁœ®åÊ—; ö$F§vh+ %Žýv@Ί϶#î(†nøäeÒöe‰Èö;zŠìEï5bR§AúóÚB”?øqûºô2Ø®wëáåÜHNìŽÙ(ô:°9r§ûâ›ó>éB܇㞰d()pZ^] AáÕ‚'ü`‘\Q49·lꌽÊà ŒbZµ¸>M"Gñ•¿ÀUf"á0ѵ°ß.,)˜%dp÷~ŒžÕñ#c\ùŸéÖ`<ºÙE;’¡ "ŸëýVEù¼ãi~ú2á}Œòvr ý:ÒGy‚h(Bpiú'¦/ñó­ÿÂËçå®õ0uó=¹øDQê …ɾ·¹ho`%Ö8 rÿFS«V? ðÔ#ÈrOøR笓Ã)%KǼUÕ;Jî̤2øƒÔÂpê$ÂÞpÚ3c¾±Ì×rüâ%çQÄ…~JMȸ!…µ¾î‡Ö*3¤<¯)k¡CáÅʼ1w 'ýv¼gæ¾,3l.‚D"PZÞ9°ÙëëbÍË@Yà¸ç¹Pòrº7ä{ Ù—BÍø=?²–hŒîçI-¯Eþêoì½ÙÒï^ãæR“ÚTK²˜âÈ1£2un#˜ûGúÂDeÍ*ãŒùzó÷E£Yã·%TÄEZZ¥FÙ‡ŒNcc-&°mAMF:\÷ã#¯PÁ¼m?8TÞGžÞA °ønŠçÂ0aèZ¾Æ¾NRäì¾®|;‰òµÙ„ÃȼzåÄ\Ò(Ï*ñâ²ôªh7­ðT~LŽÍF˜I¬bÏ\•¯55v)UíF‡§(ÈÚY9!6–!:ɺÚë/ð$Ãb¹‚†“Qÿôêyñsœºº¼ 5{ßhU2è ÊÄOžºyïÏ }ÆJy‰(Q;r¹i+ØNI,óL[ZËEÅPü®ÃÄåT‹»60(V · ÉáÑ£æªôÇ+¼³hï'’{¸d©ž!~ Ùˆ«øW’¤B¯ÓêëAÍ»m ÿò8çaæÕ­MË×§íÒNLÞàM•ZdŸ¨;E6Â!Xü‹óŽ ï š –q}ÞÚ|ˆWSyMp!RçC¢Ù †Î ¹KF²­t±€Æ‚†1É<í”[Êæùo w[–+½åìãúçQ2ÊÖ,z7«竷u-Ü/^Fÿ%7|ê_-ÐjCjõ8CuÏUÿN¨ 1Y'e¯½Ï¡? ¢ ÎDwe0æ7Ï¢á§þçcH³PT˜qâèOuˆ’‚@îä"—•Ke‹„aɃ ëqÛ¿ätÒúì–ç:6»c¥+†ëóÚv/žlŒ°þŠÇûã«R1â)E戜jÈ'˜Ö†$¿ß„iµ iÙ±E2ÊdNQî­\}Ù¹?=èîVœt[gî}Úqä”åäòöÞäžÖE Ïí ¨!ÌêˆØÿ­¡þ1RÛÕ!ã_ƒùWÝ[cô®¨AR;`SÓ. ÝV#ŶÅïíYÓ)OãwwŽùäSö5~N°«(¸h 1xI©mQ«F²ehI½ƒzêù3ª.a2 4PD‡®ìg1g&’Bþ°C©‰këœ]]Ñ¡¡°]mAŽp€cÎK ©idÊ]h;ݘïú6~¸>ËÔ®Ñ­Û å À<èoâŸßÁ}ÕÚŠ¸ºf9‹g~á€Ëm©m‚kZëÎ< yþtä佬 HÌ\€öÏÈß( aÅäL£UR£ÓYCŒ€\ÕDa?;p8­²GWÈ¿z€ŸiRä´´¨ƒnujÇ1’=óÛ'Ûï²€œPŒ¬VЍÁúì8°·Ÿ`øaöj‘ÀK€™¤|Æ¿‹¿nC?Eòp╆Æó­èIx·“}YÿÂ?j(ÿ÷ÕÛÊÒ`[ø¯ò°³•K´\]ãhK!µô‹ô &p^€¬¿v9ö¨Âò¨1 €Ü_0{qdžo˜Ì"B¤†‰úØ{ÕhI €Ò~|F8ÁðÐÐ]–b·dRíFÿû߆CMé\Ñauò‰Æ­¤¦êÉ;ÐÀÇebQ|íQ™ Z‘Q±‚ôW{L.Y ©¹’Aù÷QŠ•a†èse ª=B#"廂zˆ æ:!D¹¿s„ïoM«ÐÚü ÿ.¦ ªQÙ£"ª'ΜˆÞèŸA¼$ÒsÑ. ¸æ<†,.²ÆÁ p ™/Î-¢sªixñ W2í«þäЇأ§ I¨2ŒO’O)>Ë`wá}÷²÷ž]òç“ÂËl&^=ð:Ë€YbŽ mø IXýˆ‡ð=m’$§+'Úxs{ë‡ömH(å°NÃÓÌb¢™ÈÐPÑÀ@}ª­y|KfàÜ'ö¡ö#w)eíŸÂ¨ËVûøÀ¿‘->AdEîçv€,ÐâI™;\@FÆAñX9!¡¤°cB°¸Æ–í<êºìaÂ!XYä!©Ï 9à8›T¬O)©3”2ßMäÆ*‘ýFåÜ·¨ìOéÔ…Ÿ fÒ²ùTjh<é÷~=¶ ¢>F€ç[Üû’á"Í {eeY³Ú=íWÑ\:c‰s.S)!ñøâ»á@O¯¸á¾QLjn=zò™ãPÓÃG´¡$À/€dºƒêW°. ÙâÝÚæ4P{xÈŽe$È"W ê0c†8°‘€QÕµºQÉ*¬Mé=ŽÏâØyë  "Š—ûr³qo³Ô [• ЃrýIÿ ð¿ßç­ïJC¸xá¿ïâÂ2BÕ‚zþük´Oà•‹|-'^ßin‡|‚ÏÐë+LNFô; 6 ðÙïâbB h ð—ê_ã4ˆŸEÀÀM¤€ºÐ¤Ôûbàwh;1uGÞâß/HpëÕîÿT¹ežgÑ{í 5 ûzäøðÉǡΣ lDäç~oˆj²B¹[™vYáCÅê¬]-ýQŸb-¯è±[ ®.`K_p‰®.¨‹[Y4cv¿µ’yeʯ®ŽåhB:9ÃÉŸøâÿ/µEh±»½½M ˆ)°‘~…Ú%3H'÷«y'˜;ù#¢ø¿;wºÎ8ÿNy"ÒgÕ,\<þ!gþï?Œí½7`’»Ãéƒ}¶fœym*Ì=¾ý;ý|=ŽÂîó3³Ýlj“‹3MG/Yù_ê 5à(í6Mø¦Õ¾8Ÿ²Ç‚öS‡z  ç¸ôùiïõú+åý¿¿6Iƒ›öÿÑõÖAq>OÜà‚îîîNÐàîîîî înÁÝÝ}qw—ÅÝ].ùþî­»ºª«ÝvçéîiùìvÏ&Œj=ózAsä'Ñc!ŸNÜYÑF€PàÛ&÷µZˆ-Â÷ýãâî0~âMj¥ørMÝ Òà¯ã ¤¤¹W–¦5D EÌ (h ³œàyÍS¥ÖkM'";š©·àSÚ§†å%4‚´ÔòÍïÐï„ÇT+7ç®<¶§÷÷.Dšê"“îœó!Mhowô8À4þμÃË);[;ôˆAÃÚ–föØ6£)–@ÔŸÞäûw4 ‡{åUK:µ5PAeéÜè»R܆ÝÛNþeèâÚ*MºyžÞ “ÜgGé”ÄfëXØC˜9`=3•¹™c!UýMµkË6yaO8`Ÿ!²7Ö4Éñ¬PnÊ–<0éÄ î0?”:5"¾-Jߘ ½×Î]ÛÏ/éAaDöÀþáKk5®@·5€>®V «ë–Öß!! {.²gym%»èH±¾ˆÜ2®ÓóûMƒ"èØŸQ12!“CQZ ÀÃeŠj™[³™Ù)ûCZ1-q«Àf "ëÎ-7ªÜ1E«œ0ÌMaaÙÉaÅâ!!ûÙÉ¿-°$,rMz“ðÍ\µGZð ±÷ƒk¾FÝe6Ü<ØW†Íó½ÿƆys¸bqÀøxñ)v³Æ4㌮qi­ãôBö<Ø?×·¡ÀÈÒöJô“7Æ?U …X˜DJt˜·†VþÉqÿzNVÃÂj¼m'©Âð + ÒЫ2R‰á'Á®2О̬&*ØëlWz?ݦ‰:£³E­íÉ>IÿÜÁ–vÍ!’&­»;~½yY*•2¬lÌÝОä»å±T5Vô9—Ó`²6í» 5á@ðç$í½–w!GÝ!W˜:‘•Ê3íg´¹Š2ùLp%Ö¦»Æž…´½¯Á+Œì‹JtBN”b5á¢i“Wž˜æZ^3vš„ –aFÆÝ JÐà.Mø!,;ìÑN'sÌPÆ7çÏNÄþ–¡ÐÁA‰¤ì–Ý5¾ë{B;1¢‹‚ºÈédb[+mDºn‰ýgÈBÒ¹ ;Ãzü¡±éšåq5xÓ­`·ñ²ƒ¡ë›:€BfÃÜSÎ3´F_ðB õC‡ 䋈@ØÛ”ÔÚÜP½áëá;€3&º&|ÿJMö§Š·½"Îx·üymÚE“Ä 'y5)ÅÍXøySy¯AÒžhL»FtEõA%!¼’Ù”ÇBœRŽØâDD'sØÝÞÁ×|{s:Z,+·Û·uH6¢Ò‹ÕÞ7L›Aî2OUŽ_6­­ãd°9`t*ŠKŠçoöÿ†º_P°˜ ‡[›ªœ( Èšubž/T·K2D´Õ¼ o+Ú;M­DÛPf¿Ñë ò·ÞäÆþ2VPšôì½iÎú¦Íúšû[T°ñru;8ÕdóÃÂe/”íþ¼‚£ ÏÜT^uÔ ,É"$-½¡õ)R`aË(ÁœbyW3$MΔ-ìí¹íPÞ\20]û”ê&˜)ò:-Ûè |ôÔ.Í;Å ‹_&Þþ«È¢×pïš–. ¾@HMšªWì;eL‰01Å7)yÝÍ•Jq§Wö¨âo?Ý]Á’žÿGY˜Š´Zsù1¦ý×L½bŒgHÿ÷_ÇWb¤"‹:~ŽÌ"v™zI«ÿ¬l!²Kc&“QxLXxšlqn†Èß.°W<û%Zµ›·Í¯¹loÕìÈÿU¾aÕÖ—jU¢æXß!JBèx¯))~¿É?HEÍ[ræ¡7] àÀýò žôæ¯^ bž®Éßv€ÙóA£è½üøsèá’!øm-`\*Q’¥€ŸÇKæ «…8&“I2·ÚKè‚…\ktâ×+ “á*ÙBxR0c>ü}ì9hrâ\æ¶%M\ˆË]Þ·a›íWpü•ÆŽÈ0ªŠ½ž·A†NÕZÕ™};¦Ÿ)9ÁÏŽoeX «³]»k¨î÷{ÄzÑc¶‰"rjblô”;“KO"3éoƒ†Ÿ6vz;?¬¶3šOõ¸±í‚÷ )i™Ù’ Þ¿øÅÐÅ*é8o–N}ŒW[ñ Г*Ñ•h®ïH•Ӆòáç—jt,-˜îôQL¨"®¶¶vûÏÅϽå¶Í´jØ|™ÿwètDׇÚü/ýê+”Ì2x–}bbúÓK%FÚáÌØDÅo ÆãîÛàÛ)Ç­Ey}N;<ÛÇÎØî&è¢ °ièñ OZI÷¼MNÑ0(ãÍZÁ›ÓQm!ü-„ÇWŸÏÃ֧)blŒ0¿äàSƒnH¹_÷¨ëƒž•I~㩳órOÐOÓswÑöMuAûßãe–+‹€êÇëþH~DÙ?gr‘(ö¢vZoÁ†´ÎÖà…mŠªEÝäy¤…Ú:†^=ðß¾Jæe^5Ó–²Ú"¸%rWá¡d >ÁˆÞ{CW”¬d´Z ›Bª _„yú«“5 õóT€ûatµõúÙÎñ9$ÍF™¼©Î ½•½]Ø<­Yžd‰úBT¡ »"Êmôã½µ‹´û-V½É~çãO,õ× W8ë'ÊÅÁÆPÅot'tR5.{«—ÍD‰±ÖÐi¦0¼L‹ùƒþieľ‘h_Ô¨²ü‡&[¹?»ØÍ!Ú!Rè•s)éUˆ"RFCŽÔD³³lß§ÁDÁ4žÿ˜~™Öûž"̪—TL£ÎO[)·x?œœŠ<ôª–OÑ»m(Ÿò`CøòUõ—áHm§ú2 îÚÌ‚û2OÀ¢·f.{-Oÿ Ô皈84Ñk™)õýÁÁ>\ÎÈCæn<à§ŒÇe–/½o )OŽÔ=ÌÞ»!îÚN Ä÷#¨DH^2õ_ïèº=.W_{€Ñv[»§:þt?ær/úö¥%@B“©„¹—¨¨_ÑÎ[Ô2C~˜jùPÅÜ,€¶H]ºd.!ü÷¹ø´©ÃˆÁ<[š¯†Z©S‡.òh™vL\84µéœxôÇ/ÑJ,Evu(5Á›èé"ß0Ä*Xl5ÑÒ|£ùëaÇþ=¢ÝÁˆþÃX%iöÆÒX\yèG$_óÐ¥çxýÚõšÑ2&S¹EþkÏF0“62úσó±šþ—iÀöo)ÿàYÈìüÿŠÚÿ‹ x3<Ýgª»)þÅ ua]}‘·³Hžj<ÿÕp‰Kë:‡×\{éGo3D‰ ©¯“ ìý—q‘¸o½ˆŒº ½í€ª%0·ð¬Ÿ¬G‚V3ýi.ÙÈ 4°êZ †|¯ðA>\üËn=ñLû›«Ý‡;}ßÛÔSŒGËÓÁuõ錅ϠN?N9“x–Ámß?q)Ó›¹æt0 ÂOŽÊè(·[ÍÏX`™©5£5¶©’ˆœ-žŠ*±µDW:üE,=.±CïíÑ~üæÌŸ}ßͯn²$‹ ˜3 ЧNꇔώ?Ï]µºìßãj íoB¹|ÚŒ¼„uî;ž.LÕÉ?ßwö„‹áoÛüî‹#àrõï|XF‰jÍÚö+Z ëªqåÝ›8‹b½ûøÉEnþyÌ´=ÿÍð«8u9&¦~×k×µÝÇLJN©Ë× Þüµìý"‰­ÃÆã´¬²<%‡è “#¢ÛYÒЯԼì`þcw…‹Þ¾I­ 8Hâe|Ú×EÑdÊ=ýŠšÏQ^éÑyƒç…àÂrG ×-«xÆ“LÓ¥¬1Ãп‰L­”‚ø`Ì=i7}ƒUÏT[ ° e¹cãtåÊ]Ý‚¨¢ÆW2­‚³-Â~’‰;ÉÓ•lG®€^–¸Öœ S¬t\¢‚l}§GóI­HHrV9yô^àq½—!~Y¸Ÿÿèi¤i}yïI5£¢­&dJ20ìUa5ƒçuc5ÃsªRJv6Â8û‚¼v%^?ÇüÑòÁd˜ ûc6Þ¢õžÚ‚ÌRµ.½ZÅü©íWG ³†.C5Rd™.YúÝB!l¢¼ƒ t zsT}&^oà¶^kÊøóÆ}ÌÕâdrÑâ˜[yé7G-y¡`R¾–@yñ˜sN{MÀÓ»kÌ\*´±1ÜV_ÁSëB#2³_BÐ:3%`ê=AâP]ù;lücƒÓgbJ™à„•q¡”•Ðÿ¼€w¸`ø…HHwiMÖ· G­qzØ¡WÇ­ï›ÁyY«p®´ÅÕŒ±&Ú‚€‹Å³FLF¸†¦æa€¤œTï£á¦Ú½…´ËðÁàc¼8Y‚9m{rp2üÛ3ÀFÄn”—ñ%ޝ¡ÿDݾÑIåU«õd·Œ±I¬FõÄ÷w –YÍã²ý*Y¨1ì²PÈS0rN1ŽeÑ¥½Óͯ‘qWÌ5´Y\­úòuh®Dà¡XâòÆTéÓ™wAÙ즫XM!+Ä–Á[Á·É~K;NïÏéùé˼}f6ÇÆ[cŸ>ŸCÀöÆaÔ°»÷4–VÈ$ýK؇»á¦x¤Ø¥Áû4– ˜ïàFœ=Žæ¾»‚gÇb´5å8K^˜"à‘k=ŠIÐ]R¿_rËŸâkv1ë}¤9§¡’ÿ­Ø”z©©Ž†Ì¥Úl†K@†ƒz6H/‚ðÄdXÌ0=+ÒTÕPºþ áã¥Þ¶D¬·(®ê.Så™É¿}Ó;¤ÿ(8[›Ê ×çŽq1»ß(fÔ´xðz½ÉX‘)¾Ý£óÞê`ÞNÉÌgN‹l @+Ÿ7‰¾^U‰c$¯0¤¨ O«¦·•u ò¤LìÓô%íBÐaŠ5MÚs£8ñÞR„åkdQ¥þîÕÇu(ÿ`޲ÁDcb*R1T›«'äðf~ ,Ï üßi5yB˜/×k¬kD韾̇ü1…ÇŠ1X ®jF² q[‰±º>P£N—Ay¼t”º‘P¶â.Xd©>T¤šI±ê“Ñçë@ØÀ¹îFêõî­ïeóÃÞÆ‚HŽ3¿k$¿73÷DÆßs)½ú¼SÜl©oAóÒYD•!««])ƒñAJ´;s#…Œa(.ôñ¾ºé×Ã÷NÀ`Xu”E4ºÁdS¬ÕÜvذªÖO}ät–CËáJÌåä͈R‹Ž‰þ.éD5¦ÝÎúEò(¶]rHÜž¿?ÓD"â¼G´êjü= OADX<‘™=/Ñ‚XG>2É÷ÛòEö¹Ùfh1NÁ‹Ò¯ÓÊËæ=ç-r¡Á(À³úùi¯±^°¬O}õÙRŸ6¶$táê¯Á­‚âò}Oø6Sb¸ß¹æ½¤aíe§r{æ< (¶È ðÔ+v]^ñÕ7v´« ê›7ŽËuÄÅHaòÃkÝÉJMm ;hÛmÚ·þ€II›µ£„h—˜O÷ç·@¢v•ƒ~JÜ3" “T2 GbúIÓÕá½ÖD—ÊŒ¨‹lØvñÝæ*/"°ˆnUˆ'ô›¶ÑIŒœë>;/,Š=~Æk•ΙØûTÑ—O>EÅlV;dÙtëj¾³‚$øÄÙ =’ߥ_„ƒ…ù"}# 2vKóìdpÛÇ™´¾reE‰c¼T–Ù«3‰¬û‚ðñbC¹ @Óª0õƒÊ¯rN÷k%߈¦+e¿ÝËí‹]åÙ¹r[+=Äë.îýž›N`=aÍ ~4‰‘°k0Ó3l`øoâ_)C®äY›êT Í |+Ô±ÉÈÔ“n«ä\Œå }t5A©!4ª<`3Bd"IÅø~?Øð  Ä •I–!Á7Ã}Ão»vö6¥åj“ ,¾M)AMèè½´tu ï%u…⺴ÿ­¤ujŒ$«]jÌ¿ü*hž ³ÂÏV8˜æx"Ú¾Æl1»”(¯ˆ’¾¿‰¶šlçð»]ŽøÕ‚è¡‹="“lÉ1û:hwŒi˜ñq\S)œšx…Ӭ儰<dž ñ'__B¾´]énéå,Çç´ûD,X9棨°ºä|YeâDþÑäÙ¨÷•ÿâŸL÷6+D&Ä=ôok…é¥%‰ÐŽ™ŸRûœrÔ$6rm©Œm à0§)·,ÛáèœLˆê²¹‚ON…×[Ë-ž6¢ŸFݪ¥;‘H×ói!ˆJTp>…ªÈUÔ×¢zÈÒ,MpC²3@œÇ3àjþR®_LYQÂBdÆ‹¦³| ^zWàïv¨­´~z¯Oç tƒ9—›Jm`½ˆ‘ºÍx”ɵ7;ù:^úg@¶'›ä×}Ipðá®f–Ñ{\CWwyð4šó®Âpb¸¾¥–بÒ++OqðÝåËÇ(ÀÕs›p¯UJ$ŸÚµ¶=9ÊùR‹™)×à`peIܰ9l-êjh'®As$W{ëÛ/‚éFOíIQKQ1†…º¹_×}`£_¹$Uà+§ ß"‚wÅ7 ½Ã•COZú R9öBcê0Q"¾aeFºäVsì«î†(ô‘„tKÅýÜÉ'(OßÁFïAëy,*ãÒ(³‚(8œL¼KÞ°U¶yúf%ðãÊëDˆ!ðq² ö]‚Å2˜$òæGHlÊ̆ms1„rûÎÑq-´œ…ˆªÆWŠÍVTPçÖê—m-Šä¤{Û™…‰V ¡ëOpC³oˆ<«R»HäoV¹Þ™òÄx[‡¼ Ãm[Ýú ÓÔHMW–¾¡Û…²¤ã…ë=gu(*‡ª±5Þ<’04Rà àŠ1â¨Df@ŒnmºsÌT˜º,R¢Àgûm”<ˆ<ùرÙT×ú™™Zë«ÖW@ê%ò¨i"Þ1lø h÷—¹#š-õ¦ö3\49`œRI{T ½Ö´U°ó¦8­Óü)þÇêA‹”šÅºN›Ð縷\jx°x THØ·Ù_ÏéC©Ëö‡áÌiaZ8ý·4ýÓjÉ}€Xéf¿Ý´Ÿ‘,î‚EþÀòØx7U){ÉMhÅ ¦ŸåNëë˜K°ÃÔÚ…¶-£æ<Â%Þ5b™¦{íXÈËe1ÄGÔ›íî=Ö.Þ)¿ŸV¥©LæXi¼ú º--TPk»ØAßwc|¶ç’Œªo‡°†n—ïþhdDiºZ-£3WÉØWJW‚÷£ƒXlv–³”? ]ô”ÕÑàà½1'9”R[^[{o=øèO¢ÊÈøQNÈ%k^C( q[$ÑÛ,Uf¥›@âž|ΜÏ#ƒW­eZB¶æÊtü‘ FÌz×ç ³ÇLôeØF©ßo\ã¿A¡k0ž¶à&9H±´¥OšäU4Ú`€1Jse±_ijá÷°N§¶TÚ1jŒñ{FôDÅÝ96]‡&íÊäWœÕæì÷o«!­¼•¡Jýo—bm<&…›T»\$r¯ä”X‘‘õ*MÄEÙc9.¤\lKÊý;/íœðÛ ŸXŠ>÷¨/Ög|{5Ý>!òNc8}V%‘qZìIoâ4Nx Öª5€ªþ Ý €‰‹¨(U…lvÇ: EMÜ>­O“"7û!Ø€uIæw1ˆ•ƒÏÙ™``˜Žˆµ”p°WjMhç­J¥Xrv9´0¨Ie•;ÑV¥×@'‚á±Æž· ©+ß·|3GE/,¯C³—»9`æ¨çp¯æááþôè_; HAGúšl±„DhʻٗÞVT‰7Ú%ñîñbOP·Qà‰ÔóÓÙYu½·©MÒÎÅDŽ×‚ @â©-(ͦ´Æ®oRò“Ͳb:Y?JpÚ2NbŽ£3ËZögIºÊ­0ÊŠ†,ê8|&C'OéWHK­ëã~nštÊTº¸á!q["  ¤Op^EÁ ¢†Ë T•<ÓGÙ€G0åâd/ÀI‹+ƒà8™QbrÖÒ(}!»Òí’Ô˜*§KKKWkЯ`mìCaX•<¤?µC dM8å&"+ýÛEà/KÝ/Ç×yÏè!zÈ…úJG©ÓÓxIÂŒ~hð6þ‹}N9‡€øMù¬(r²¬ô`ϲl®UøTíÍ»Mk=ðm+qi¹7¨¦,’8ä¶ð3›GÙ¿ýØÓ ¦jfü>ÚK_d[¦ópdi›ŠSWŠp¹ÐÞÅyd7¢ iÓÓLòu;ÒGøãs&ÍÃ÷Z©Skúöå+à«w>—u»ÔnV«„ÕÞ¾ghëÚŸ}þHW!âåû'''e®³ @ÿh;c(„²ðXw0}ÅîÜ¢x©ŠëLoõùÐÔd“ ùQOlïѯ^çç(+|™UÏôisét¹ú 4Â/Ô?÷bS¢‘“UÇ*'ñ¬œäÀ†Ù\` ÎxüHVÈWòؘy¿º“Œ˜jOÅ U”‹£J„»`™F º‚îef(³4`!È{=È=æ¼[OêéÂÇò¹OsP8ü¹‡x‹ÚâT|ßÁA_<µÎ¥ävòÒ¨¢„Ç|]9¡‡‡ô4öŒõ2¤¦ä2ÂBfli„´~ËÅŒ ½X6íż3þZjÚ²ÃÜ@ø©Écøë.S#Lî‹\Úyš’ç””ÿÀs¼Méè¹s`íêke%é©ÜÞÛÆsÈ Ù¾øº‚¨—þ>>v”'àÒˆåClsþ—ݺ46ª¹Ñá]ì6ÇÅvÔX*SvÒÅ×¢Šáç§CÿØ%~WL:½Í»ªO×MÚí™Ù+oÀU:…8Í@È'í³}à ?|u@˜d³ #µ„Çvàí6¯aÝø¾ã}áíÂ~¥ÓF·:äüé<‰[©×ÇØ×9ŠT‡X›qzY›³QìsEÓ‡3]Äi‰°ã逄‡B™•$(^Ý)!Ôø•Yý¢:=œÆÇRÄ×B.>&ÕÁ¸àpxáö‚4ÏiTUꛢ¹ôŒUc6T=6DŒ½jvýL ³nãÜK ÆT£ “ª÷Î ]àÎ9“tf¯ÓnNôV¢´¦°a¼©i¶,ß蚉Ҫ«Ï&æVÈêvy¢£ì,n `H[(Š<ÛT:±%xɺA¶p©÷éqÚÌ ´Ã[5NH—±t‰h(ÿÒí Å6ËM:@ýG\?ε'#p;3˜&¢U<¾¼Ô­q›û>ÕÇ`oÛ*—-ç„läDZur²UEW¥˜¡þ ŠÜáëʥȵÒåy¹  ’3kÉØæ•r ü ÉZ¿žëf#- › ™oC;ÒÇñý9Æ A!è€FO„e®Án1Ù9‘”-Á3¨pÒ’Dàzi‘b¯šx;cVÐfê[?ÈÀ†pfXŸ+®ÖZŠg„’ööÕÝ­‡Ïpø]LgjìVŸ† È7NCÆÙ¹H<3€ÔæO-€á3$–³O±†ç{¸Òìñtùir¹Újü¶9á ñZâIÎ4ºŽ¡~c§ðÀ+ÐJd}ïÄHaÀZ©ì‰¥/h—Ã6E&ÌʳËàpÇ]%uñZ~ú c»‰ç£ùÚÙuìesEnÀ²éâ¢,àìá©›’ÛNÁ[´˜Ïô:Ê^ÛM•­ŠÕâ­µóC>¨­ªmâˆñâyÄË›rM' C/ôµ¶±'i´oç-»ôÌF«”¨ ÿú+Q$²è¸Ä-è*]ìøb·9‰q Ž ø©¨4¾p«bLÑc‘žWØÓ=Þ!–r·»¦ j°ƒ~>Ä`ºc[Bf†Yùù•îtò“~ž },&úíÆ„þÓ![ €~-­«8]AýmÙ-üÞBìYEÿF”š]þXùXGÄs7¥ ÿªš*@©U¡[À~Ö<PžµC›„Ê­hôÕh8c€L;ËHd'…˜ÒÍG•»?7Ý^¬ ÓªòÖ«ÙüHK¯Z@ªä­œ =„&ˆS\AÔë‡Gdç8;7ø;“‹hÐÒÂ=cñîñwSl¡P¥Äy‚,-?fŸó‘lWïÊ¿/‹Ó`?{’ƪ‰l*ï0I^ äÞrb»5]—œvPå2Û¡ISô‹‘‚ø ŇÎUàr$ÛKA#0AÚáç–6GÒÖ· ï|?½Vî Mìç ùó5ô1¢‘y]­Ý÷ã¿è2&•”ŒÅÏI K7ï©WÿÌyJh޶)|—µŸ×u%cç®_”TÊM¿èP»–Sp}Δâ W .XPã hq2ísÐtõà¿ã·ƒÊ.Ñžpj äÌ$á^ô™jÔÛÜñjŒÒ©"ðñv¼‚ çKôM¯í#Zð8¯§-Ô´Z¾ú…/.ø‰Š—.o>;þä}.»¿2ÞÍŠ·ÜDÜ–b %)ÈÜßæE¬±ïñTËí ‘÷œ-~t‘xH|Mi³AºÿˆKÍ&é¶Ÿr÷4+`?ÛyCGÄïW 9Ì–6ÈP@FÙ3ó²´@•¹Ã(yþƒ*E #·D%&K“(©Û”}ˆýú¹©ióß²Y ÕZå‹ÊY{GÖð1L@ñ~'q¶vjOyð9µ¹Ð×:g8Æ\ 5dåýqœÇI9Ÿ§ƒÝ(ê*ÿ(¯ÙÐNɾо"Úz’g¥€Û@7Š©Á+v*šœŠx ™>y8Š)°ˆ?Lѳ‹Ã_ó¼ûÑ\Ι³O,å…ÂZ^ö“úÓRƒŒ3+óuaŽÖ0;Љ-s‹ºaó*Ez,¼×–¯ÉcdgP:wÎ ñN #v€’_ïéÂji=¦e_òüŽHkDó•ËÇ~FGT—#ÞÑ@žad‰ˆ @»zÃ[7[Ž-¶VcÏ3Ë%ß&:UéЭ²º›ÅXµO©ßìŽè·¨KoÐA¼ ‡&‰´›±iŽ('9TùL£$KÈ:!:M§€Œ*¼{Åßs®b:ÆDñ ¹Æ‘8Ã…YðU»nSë~äi*ás¿g NÚf^ 3jŒ@ä:º³løºƒ*±—µ?Ì%Ū5 @ï˃²c¯L‹‡¨Ïa’ÊDÌNŽiü))Ñ^o-+4Õ\SF»ßÚ/âLµŒXº†ø.Rj9'1#Å#”¬Ðb:‡\@-H{·SýˆÚKçØXË¢‡ÌÙ¶?rt1x:[G"®[ÒôwEèåÞ96ìÂ&ÜMÌg\¹$¦ÀýƒËQ#Ôü9Ò-„«'ŽöíÄ?oSuç—ýƒEÏ— îQ{‡ˆŸ‚˜3Ô—³ªŸöžù-’3w…­0å«¿k¬Þ|+?R@áMdÃ2‚ý¦¡tÜ'sªLµÉH‹íá ~­0¶_Ôe¶X éýV“Ò¹˜ úX<‹s’DZ}í{&¤ iÑ€ø5mÍ¢jת¼¸|Ÿ¿± žp—ùêë3KPUsg¾µ­·ŠÌ=sxÝ}kg7q7¿š®/öqfÈ©m+Mßòû™ýWy¶ågü–ޤIÔ,ªÔæüJQN<·åÆœw%UÀT´Ô€ p¨ó[ª«ñ(8—ãáã.oª”~^$G`+«lî¸ç62ªÕ{°,(05yÒMô²-%f9+ùôï†Z LÕA¬ÓN„*ø¦HÁ³p†Ò5Û¶p£[ KæHÇ:´*êï05VˆŒÈå Gÿµ×uy»ƒ-%Šr˜Û°#YfŽpë!€i´jjÍÑoïÊʾ§Ïç‘V$¦?–„„“¤Ð©ý*Az¡›’áÂm”­ üåÿs9NªeKT[WÜçöj3g¶Þa}¨¼â¡¥È3.z5Ñú“©¤4Ö@d-)Øš…QwŽ õ‘Ýhçs†B É^2f»~Œã®ÝtVøÐ´ç•´ß9®^ʾL™[¬Õ¸r—K=ñä§!M»³H:›Y&÷¼Ã﩯äÆ&{ÓJÕÏ.i1æBu–7Ž¿â¿èERkâ{9Õ"ÜÍ Mö%‹›igM1^”8}ƒïÞ<ÕWMµëWð~ä#W]0d‰õ•–™7mÕ½•ƒÒOD¹-•äF&ª}Ðæ]Ê‘®&‹L ÓžZÏõαÇHÉ‚¢×"ƒ?Åõ¼N¶èÝà‘âbºœ”žŸð õ,ã`œjkÈûâû¿G'²h>¨™©Ù§^˜]ŠÒû þÃÙ8¼ŠkDxüjÙˆéQݯ0ÃxÐ~ïw·=!žæo6³†i뎆‰'ü¥°Oö(…”HØ~HžÏ™aq°7¥ÂUí÷V~.àØæþ ‰˜¶’ECvÃi``=œÕ¦AFíÕç‘wÑÖrðó'KO—7÷ÍgË!¨ݤÅÐ"©ô€ÕǘÜc?´PÒlŒxÑ4Rð‹|úqaú JÆÑ'e„É÷¸_ 4@Òh|eÁèÏ^äRèƒìéˆA±®I/;!XKϴך«l-À3Îlã…Þ£:ºÉ¨NÉvˆ‰ç—§‹(³î½ÃYOå…]Öâ\€4V~xðöð×,í”Z¬Ï­F*h0Tžh%ƒ 7,¯Fà‰– 1Eþ-=:×û¦t…ñ{Ù:ËÃyRݯ†¤ Ä q«z¦”Ñ7ªInÔaÉí¹kî iŠV* m •ààœƒw·"@^ó`é‹õ mFmê+#߬ñ0WŽ}'Òþ&ªY6-l„bĬ£´t¿¼…#Ö–1ÜP®Ñ’À‰lqàÐÄQ5i  )§98È:—.‡¯I‘£kð„W$`=æHÔE‹÷Ù!×riÛ^ÑW"ê÷tî÷By’¤“Ä2BSýßhš_¸¾‰Y{ŸëìT?ïC˜\÷ZüÉêªé˜ƒÔM(Q Œ Ðtvq£+U®hKLw[’Ç<¤È5XPÅ œ¬KSg.&€Ï{xÞ}pÅjX,Û~ ›rmQC¦HårN5ÝÒsæéÖ÷•5«p‚¼ÖQŒã†èGJr®êÌ>п'±âõø´lø¬È(9>šppŽš‰ lýȸÞsìa,·iŸÏ Ÿ)F†äàÙ†Õ† åÿÚó!æ‚Ù~¾;{ˠdzEÇ8Égˆ¬ãZzÁ2ÈœÿÞvH±‘ÕÔlmÙ[:[û iìch²¬Ë8ª® TüJ¥ ðÿOœ8NüÓûði9ïô³Ã])N^1¬F6å'„`^HI¢,°Cq1gÒNAðH“h-¼H*biŸ)Ë«ÖØºÃ1YÔp{ôVûsÏ iMgÕvL»¹B$I"°µ3ãÛ áÃJ÷«W7ݯ -—<-ÏÉâsúA×Q\¥#D×!k`€Ü¼³öZÕŠŠÖO&œ©+kkïßÃXÎ÷ÔÇÃb±†<ôÊ÷|W.to‘•p*.‡y{À¶$[¨Äv?¼å3núD²g‘2sš);]T+&&yñ €?$VáWë‘ô7à ¼O¾™È¦Bb«þŠùôµ¯Ã{&ãˆß7ÔÁH#‚‚ÎMabÇZÚͦyÓEÉTŽ„ÆG4Þþ*®Gþvë»tJM² œèâ®t\C‹ãá’ -¶Ëãnd˜èY™ m-{š¬ …Ï˜Ï|+fGÿ-Ø$Æ“±ínÐZ›NãÐø¡¢+çz%ÄÑÛW‡×SëÁÔ±Äþâ‰JªyÒÆŒò€ÉÑÁ#Û£V(S$ÿ­ÓÔ’ È:¡†iEÐöµ>Ø|œì|µŒµé¬9Ûo›Û¶“9­Œ#ŸVuQA‚FÙŸF÷ùûÏpõ¨\—æ8C¡(dmC•ò~ôA欶¸Ütt±ŽÉÀïàðÅPsu›fÂN9„#Ä®ÞL¯JH6¶–E™mßà¢[Õ<¢^’‰/Ô1Y“¾´u¨3áè§Ýàëáu)g^§4`YõãEj*K¨¸eÂPºu<óÉú¹ö,GTÜIc¸æl »ð«’Ž#mï• ÆKër9¸>ÑQ¢ð(fvÌ·$¾«Xã·ˆ¿*4'4¯ œ±k¯¹œå¿{~®ü˜0œQÏ@؈e@ÛzÇÏåŸÔCÜ6Ôšp ­Ô÷ü:å~è.þ<\Š_¥U CÒE°*nSþEÀ öǦÙÕ±Fgp~þà ÙÌ0ÄJ§øa-Î}$Pö¥)URƒª”Û0XlÖ-©HrP^°ÝÁ'þpk –Ýhw€8Äb)ïYxQB.>µ—7ª¹Ø+YÛÀó&ÉŒÆC[,µ9s%õ¨#á"V0ÓGÍtw-œÁ„å#Q[a*T’ºø„˜™žïb+¾µ–ÿÈ¿vóú9‚'‰ÓÞdÃï™}È¥Ýsåý¦n@A×Ñõ~éÙ5aÞï’œaÐ}!÷ü0·táàwi<íwjñ~;|8¡·~UÜñ|ªõÞ`™|”…ºpøÜ[€ô?ø°¤ÒtBnæ¬Ê}Ö†·T(nû•ð¥ö+ EAšäe¹³°”SˆßìîW˜ÏÝrجr£Ž¤ü ÊexJÃ]ÙPdŠ{퉽¥¢Ð)¤+“÷ uX8¿Zü¥F;"Xg¿›d\k¼h†h°,%§zïXã Ñ uK$l{‘O ‰W.6šÑ3E*¼ª?ï_®fˆjjîä´Ø¬á œÝ½  €r!ôŸìüx£ ¢?(e|ÞóÇ÷!—!’e#9 #ÆB6nõP Î lÿÜCÎÏ#^çWÜ÷Ò ‘àÚ¶þ¹z¬C1 KGªÑ£LúÓ[$£Ï?]IrÚÈBŽ‚ŒÀDe˜ÐµÖØ•Æ^L#+­euQΚoZ¬$tÊÄùƱ%Žl%ò2•Íúô*ÊTD hS(„ŠI4„Éë$§ª4ãó÷ÈTq&,ö¸4v2±àúq³ü¼s¤)ØÔø}C?»’pÂjÂ'ZRP$—¤éÜ<è¥ï"å²í·©YžÕðÒ[üÃÜF©lƒ{¿ÛCÛ´¯W@~×¾Õ[ËVgmí 9£âƒ'Ü„°£¬"–Gq0¼Xª#vÔµ;ïÛRƃ’«£ãìg§€7ÇèÄ7#·ÀÓr®qSç#™;9ç£g¡¼n©´öÍŽÇthÛϕޠŽËÎ%a?6%õðñB{ö2À´¨šÐã6›ÙØ¡]cî*<÷š˜~cR¸Ô,’_lÐ!-­Y‘X$I0±CaV±t¥Î‹ç{vbÞ[c‘GûQj£Ë[$‹Ú}¯‹§4cÑmXžœÍÝÓpyF­OzæC¿kÝH¾,ttÜÀ^ŸYŸ¿ÓR³î~»öêèm”Â8ÄEò·l¶ÚÊ  ÉaÄëynðšUÜj?j]>_ŸMaä3‚!Ï9‚ûCÙl¡÷ryZæ-²Ï˜Å“=·Þ›½.eïýù>ÍÏ»oV¥KʳáéwÖq!¼ß"Ž ‚&MÙ–¶ ÓÌàæŒ€*»|ueY_ë2á&ï½"edó[þ,“í¦hÕÜ,¯Î>jx ‘bíò‚Õ ã¢0¼(ƒÐàt'“"YW¤™¥ZHtUí‰i0 é-šû·*ëR†. t. 3™Ü¥LUfW½ÐŒ+V¿Ç"0Ì&u3;ݯw+œŸ óð©F8ʧ/4Ùó¼E7³È†1{¦oC³õœÔOõÛwVÏ ÖçÔúªnC'(çó’=ÜÙF8”šÎÀ¡3N]×[üùŒ9ý¤Kü ®ÅC­BÉtâÏùHcBO«&•–œ¦iq.åB]uÌÊдaåpaz'¥m!ƒ¼hØpË"¢WäÍðü’ëp¬ÙY5ñà˜ùÔ4µŠ`qm¦¶‚ZþÑ ž¤½RµÍÿCñ[ÄWª³î5ÔIƒÜ8A ÿß˳««ç©)9Ù¯@.‡Q01ZྵÒêZÈ©9žK»¾]÷S劽Ím–ÏA•Q†Vœ«#{îˆQNsû¡nµ…Z÷“*`)žjzqæ~S †IÓ"†%KŸ+q¶D>‡) ÷/q ¢µŸä:l2JÀUyL e߂¹>ÀYîpä—CéUÊùæ°w¡—¶z ò*>é•þ¨ØxO¡×²mRk¥ÖÜd7”Î!>9”UÈ ýg N³³ûãÈïA«2YÉ)=4ÀqÆö ?CÇ$âçíºè·pÙ}"ð¹ÿ<"G¸LºÉ|CÛâ¶Ù:t|õâAôïUÇ׎Œ~8G(þ´…ß^¿y8ÝXìÍxįý(ÉNˆ~,À“éÀÿvaŠÈŸB^ƒ Ó\°%hK²[f‹sîºB4¡½;ë 3ÎÜçÓ;Ò b‘‚ë‘æå†ë+ü$ja”›ˆnJŸÍÖ ìµ lõ Z·«½E衦¥êmým! zªk„ÈÂ"6„²CÛä§$…Ó$•Þ,µN›v|[úó§kH%?Rlux¢¦Ë³%íäiÄÁð Iãó´‹£é¬QIîË æïAJ§«(„Ø‘ EåU IêvKž-nɼڭ Û×;VzT¥v|kI4žtTBt‹–èØŸ<²Hü‘© mw‘n¯œ>æÿ/¿/Æ€Þ·:ñÏÅ ²Â(§/t& 8²¾ß–1QÌ©³Ú—Ò¹BRÇEÑÌ‘yä¹±%DñŸ¡Ìœ£¿‡q“ˆ×Æ©ÀŽ—B£ÈÌúj9H¡f­Ñ6ï%r²†±8*ÒBÄsBX«Yâ H?ß«r2^²Cª9Ä©'H7xÉ£ËÛQùÆxÕÑõr&–k9HBêÊàäN–±©:½ÿý”““ mê^+BGû6Ÿ¸=ç»hËo Ktå¯ÚD0ñÑñE_mc‚5Q¹]î5!ÊçªÓùáÕäsc¹*~Dy‚Sà•/]^Ñå:_À«ü#ìmm¶Ýyïm÷T[ô¼Ë;C1¹uŒxJ²ÌS¨þM¿í·!Û)¦Ô9Zß—fL Ž=#´ÓÀÄC©¶ßLáaªFÐ"Øî¸q’ÚBáãa%²EY“ßêÞÂÄ/äð¯++IÿúH“Fx–¨=Ý÷.Ë9QâÓEát”<'ÓÏqþò]«z,;;.MaB%ºm_àÍŒ¹Ÿ—Ã猊3eƒ·¼¤ \Y¨xî´ÝÄbœ3-œ2¬¨[ñd|Â/,YeE‘?Çj…·Ñ¹|ŽS„Fÿ˜ôivùÖ;'¶øþ¹`³«Œ’Ôù&Ç‚õrÐÑ삵Ï7aKd”Õ3+·7÷¯Ôýý<¨LQ Ü½A-?Ø,¤ÌQúmÁ“&Âò<\ÁDñX-’þ%´gÙÿÖ_à¶_Œ%uÜm3-nÎu4‹ÿ…k@c·~+:}Cš÷~y!+¯…ƒê×V5/ ‡mMë0ÕLJá™/þb~¡h5“†·0\»Á÷ð¥zG¿ˆqÄÏóÆ»wË·': ÕÇrc'[É¢¸ÚL¤níÕÏ£2ÎÎܹÚXA·¹ª;òw:é<Þ-Í%¯R¨Ñ_s}Oy1g (;Ù÷“ýÀ®;&õ«9€Vðáµ<îÝFÄý EP‹‡Æ˜nûD¢[®poÑ?0ìÔ7Š£6•/†÷JGubg;ŽsÐc‘P:ÌÁÊ£N±¨1±>iÓŽy| äŸÝËlï£5ñ[Ϭ.õÜc¢ý0nl‡v‘Szdõ8v#êc e-øÚ‹9‡èhH‚ÑjiëˆDVÕ|Š÷'¡Öp‹0æõÍž/ùSæEùƒ2?œ/ûCAÌÕnS°Ò±…Ÿé ƒE…-EM†ozÃÊŒ[¥|!Á/³E©ùµvÌsž÷á»Ê˜—’xëm»[—…ŽˆšSÄ£2Ý•8ßõÏÒm’¸Ûqii¾ÏäIôÑäÎôÆ A;w^9ßRáY£¸ôV]u ÚÀq™ÕâsµñÛ¢‘´1ÉŽN½sŒ=;è"ûbé ~½Îb!xÃá§=§£k²¯FS)°IÁÝåÝ`›fÒ_ó˜©ÄCX9ßKŽºW4’7´X ·êÑo CÚÀÄ@á÷–³·-qW۬淘…Ý*¹£>= òÅxšR\9V™¨5P%ö€ˆ¹ÐäÇOIÝéàæuQ¯,γôàPŒ^cý·vM\WÅ\C¤cš®· -× SÉêßìŸ8èOeS¾f—´EUp-K¶”ÌéÓYm°J†ÙOÕÇó÷(q¥«Ü—,äì²Ås+Îhì}U•XNã †ç6n>E/nK%r*. Õ'P¬Ç“mŲ l—Yä5o}¿Ý•TÏÄ©ÀyN„æ”&m¸dSöWöc¼ò 0¨­ä\I(¢¹vmçø?bwï%ãòçÿ„(îÂc½$SÓŽàcݤ7¨ÿ=éý$½A ï“p}µ=[Mg˜O˜µÓ7ñV– t…üÿy™îžòü„çï«®i¤ñ¥C;Å܉J¾öý¡wL¢\jÀ°9o¤¤§;NXÔØÙ#f.Ëæ˜Q×ò«gÀ—äŒÊv}¢ñ‚ùÙ»¬¢qN??9•4–ïÀ<ŒJ®V׬ñìE\6¶t:¿vnúý´e*u¥£·Èª†ÈÕq"U‰ùîVläM¿rMÀ•L‹yñ%:È.9éUªjàâù\ÜbªRúO~ï燖{ðS¸è&>KHéiÀÄæ+©]ºWïžc1=øHÚ9•zåJ á«G}K;(¤Á¶çÞ,ÆR3¥&eJ…6ñS2ãă¼ž D 6HÈ>%[…'òñã/š '¨dÛ,É?è®þ ý [ÝŎA²7UXžIy Œ%®—Fð¹°Û®Âu›Î6«OXª„ðÐw+ʦ%Ò†r5q€³3 ÛåñôÇ~½€úýh2?jï¨åo_Y†më}ìV7ŠÞˆŽüx†gÚ¶_8£á¯_nøžoõö9Ål5w&¤Ù½b'tž?Dÿ]ÞMº§k^ö^òÄ‹ÞòQºL¨5|+‹ÎD½· âæVOšþë%»z­É-žÁ¿é°ôª9ûÓoÉQ>Ƚ`~CKìiå­‹°Ö…Æ•‡´SA5ÝX7­æ·ìûkbŸ™Ä|8Ž×vúùK;PøåöÔæïÔ§µ@3%À<Ÿ²¯H°iÉ5ý,ŸÇ°ÿªúšÃþ;@Øå߉ÃËŒ¤ÿþRkðó¿"=ÃþXÌg„1ý;à7‚°áõ€8º-ªKÍtrdÛljüÿzõ>“óÕž:2Ê8É,ýëÁåªÉâY¢í?59YS†™2¶oZ?b3uËËðœõß\¤HÔÀƶÉOÕˆÈ]Ýd £ªüBE‰eÜgu'ŠÔO«ô" Çôå|wlQî,YO™ÿˆÅÖû^믩sÙ›ÅÇ sQàè颬¥M499™>ñ·—vªUÊ/ÍX]PV¼`ÈáåÝ·U»jé´Q“®°éßäÈû;îDBÎs èD# {†§m_ñÌ>Š,NÚ²¸Ó¿ü«{lÓj3ÍtH×ì1 3jL˜’rÂ:(Ó¨^Rª³l^{+ñì”e™úÇ&ˆš(Ãñâ¢ç­¾¡¥ƒ°Ä1JµJÕ[Þê­Ë[½ãQ™t3‹à¡¶qЉ Óßá=*¨LVÊû;fZU‡k†g߯­ÅóÕ‘l!/ÕG¬Æ?µÒ$ÊÓÒ0¼P¿mϹÃmÚ‘äëb\=½fRU´ÒØ¡¾2RZÕr“ÏdÇY}§Îƒ­. ’-)çy6öy æTÙÜ÷€Õ >»GƳ3ÜJáa©í{ø¨wã³'ä¸&”=l¢n×Åù?K÷^yC!¼ù@]¸8Ågƒ *íÖóÂtßì|§%*:‘ yƸz(š¦W²Þ·àãCÆ&„‚®}ÅsÒ»#%IŒrMhÉ2‰pú+ÞüÎ4Þ©“wã©×5cr.mhžSÚæíÄç“å…9uZ–æK¢ßV"ÖÁYáp%ú­ ǃ:ÂîªçY£ qE[ÍÁÚtû¹dêæG~%Y© é_†úRÉxâ©âô~4íŒÛ©¤n‰TûžiDɤíÃ%â{YšYÀä‘S“®‚‚ ã=» - vFQZiyΰÚoAò?éPn{Ô ,OÞ, š‚[fb~À¯¥biJ~OÊ4mœÝÏ¿c£‘ߟô<>¾÷ó·GsÑÃ{ˆÜgd­ƒ |dØÍõQMÞZîCG¥#Ô‹±É’`’ 3¡˜OÏo'5´’ÝQìž’_U’¯Ï7ÇN¿±ƒo‘9+¹¿òì‰Uu£;…Àiáç2–ý¶A’°1*u¯½[>MUöl•¾îÍ€IÊæG |¾O¹»­©éöñÿ†4ˆè¤Ê&Û]E@o<6ÇéËCG]ãf™,™"J~®,ÚC-ó¸ÃˆWv‚­ÿ䟛òP”NFGéäÖ&Q:PP §ksÑÚîÒ­…«ëDèÇþÒwó#~'RË w¨µ—/4døÁ©Ñš á㔩XóÏÜúÿ´JöƒšðWÀÄ ©Šð®Dæ@=‘´$’è®X~Jä6¶ÍÕ‹]G) ®˜†ú¦Á‚xnÆWžº”yNÚyÌ'1{âÌ׌ë8ä2!'_Œ¦Ó‘m-e jmk›uÙ¨£$›°eÈLÝÖáJØÙäý5JT‘Ç0Ô1äãO‹äÿÕl?Á õþ±û(lÀgI”˸—$ö̾6"|ÃhsÓÛ5YuQT¤@<ÿ@¹®ßrf+ëÆúŸqû¿Õvú)ùfÞÇ6jÃý×,b™Íþs¸?Í\¦þ³¯¿ÿ?wo1ÒŠŽ’šWMAyÊidÓbÍvéè%^†}Řá ç2ŒÇÛ"¯ŒD¿Âc7wO–a]729˱‰äöÍhJåOŸXÒYVóñÿz˜ã\†òx3êc;é3ªVŒd\“»®}Õ}&0³áDƒ98¦6=Uèð÷ŸÇj}޼ÔrYOëÎe!ü.ו^œ3]µ/­§VYg¢K)~[”XSzn¹.æu#ä^Cg¡†YV@í0-µ’fMv÷D;åˆGS˜“¸ä"U.ëÎ2S¹îHÀz•¢VuÙs´Ö„®³O”çX‰[¤g„ß°Mþ¦ýçùs×ß…=€Ï]ù ›yŠËï¢û³xAÓœ¯ç‚ ó®nÓ+<¦`ÊŸRs%èfÌS¶cüL ƒzF-Ý—^9®É§<²ÚtŸ•ÿޤiŸŸº°{tÖ®š>NÊšI•ôà¿aÑÐèzIÍÚõey£wø >XÎ÷ØÐ´}¡q­,@c¢·‚2ªY‡òDã¼E“V0û ðûéBߨ•¶•ßÐÔe¹ ë^Vòe¹-Ìûd!Ï¡-ƹõŽ(Ç­²Y„ʵÝtžG—´Ù“‚¾©^[O›br(#®~¤Õ.î鯛8EØÔ|zÞs­tâxó¦¿× éõùJƒ;¶©`W銸Ÿö¶ÌøÏtTiþ‹â$•KDÌ ±t½¨M¼uZã>¿dSè97 ß7Z£›#Z~-âøjðW½¿‡£,g8G×R*6ð®XµsÜ‹ÇçR³ˆx—8gÏ¥Š¯›ôªqÙËŶ?X~þù"¹Ž D­V`ü±ºemõ©\Àc-´¬í¹ý~ÏdIç‘ÅI壸!Âß!’¿X¦‘;‹6.ÉUåfèdå‚Cð—Lí­V‡¼ïvPjf®àkè¤d“çVŽÙÀ8S½: Χ÷ßÉ\—¢(ræ¶[Ÿ3¡þð`’-<,L:¡‰6’y•ÞÖ¼¬ôñ}ææøf^`Ñ躂XˆT¸C$G2TP¼âÍCšqÖ¸ìwTþ´°æ’¿r¸š¥”ïÊÿè¹ÚšWâK^i×Ap±‡ $15ãÌf¼8F¹ÛE¾á ~•XWbåAÿ£ü—"Ž]û½äLÞÔ‹Õx—Àc<_ KTÐÚÅŠc:pþê (ÿ™7ÿ8áýòï†MÀ!çÅÁ?=+Xo2O=¸,ÒÕ‰Pévq÷ªáƒÓ?ú´Ú4ãOµÊu¹XO ×»¨qä0ý×»`E÷¯A0Z/í?müõJcý¨¦ŒoôBg}ÞkùmYs–R÷h ãf†ØNèÚ7¶¯5$–È裼£¾q³SM¬­W…(ØAÐVbÁâ}Lh¬ÿÕóSm–Þæv¡%t|ãFõ«w!€ÿ Ä׿¤w*Ó¡?­3¤Ô>Ýoüi­heͽƒ›93ÿ+½u ü}‡ÄCú?+M ½ét‡M¨V#XÕvg±sfµÏ¼CÛ³µ ×Ã1—wUØ †×?«Õ[ëkôÆÛ¾ÙÞ>Z7zç®ç-›qïÇíP%u1Ãs_˜G8öŸ#NñOÝ„Vå²ãc¶Y6á»"¼£¼µºŠǵÓeš…ëFt#ð¶š~Sÿ¢Ótýf¯@שƒÓ®ºKóy-ÕÕ»…͈VÔKz}­„ñYBª¯Cz ^eÆðÐüD´JõM֯á¸;*¶f™TŒ••j»;Íác–å^ÑfÀR΃š2ÒŶ£6ï(Nïª7ðeJ–¾%æ«ËA7Ô’ ûA–ÚN­½~¨·Éçèdß“gû…vÆþkïAŒÌ˜x•Ö·)'ôWؤ¥Ðèè.]^¼Ì÷Ùr“Íüš«¹úIóù$U@Öæÿ¤ÑTÈÇizŽùH‹–½5•Þ8ëÞ7°‰»#¾H3è- sƒðšÞÇÁf5ä=ánÏeÛq\TƒC0Xw^ð×~<­š•óÔ0ñrùzÏOE4á<›µt)¤ E”÷ [uJ»D0˜,uwÝÞÒôÞ:÷u9RÊÌ«E?2ÊW±\–GßË`L¨ù%ž2ÃWƉÆÇD=ÓGœ³¯ðvÕ²Ò]¹NeTb ½uᇻTa5·59°•‰Ò J…z ÈÏ×lO—,kðVk°bßÝó-ÇÙ×…>>|?ÖQ“Ü”Bgƒf#Ú®ßþš7l»Ê‚; —ŒgÝxû6µ6Š$Ç«ÒëÅðƒ&ÐÀ kÈ)œG&åà˜šøfþ¦»U£/]X§ñÔv†ðµ©Ù0 c¶;7FþfmáÆ|jÌ\Ôpä®ÒŽ%nÓ-—”¨ ¾¡ ,Š‹­l5~Ø8«‹¡±->OåäÔ‰¬«~ÂgÝ$.&}Mé]žRMM­­J+²§®Â´þø/è$±¸Ü7ª u°³ñ|z¹ê<ú*š’˜?8Rð"Y²Ò™Š'ùëNSNpŒpÅ)-¸µÍòG½¬€Æ—ÙKͺtá\'•œñxšiÑ/½-ºZξÃä¯3«Hƒé922U«]]†]ó~Š£ì™¨#¦R×>“ìRq2À—ÿYhãËšÎãÓv¯×©òŒ3»^_JU ÐfFìB°ÔÉ×ü¥¥É&E¡¿1Áú_ÐÔò~ù€}zMg”~ðdÚ¡Á·ø‡®Šò/þrX7HÇ6gÏ8-â[X@h`Ðûô3.ëEóèð ÷Ù’'”onûñX=þƒø¿¡A²†ð„ y”h unÊhÉèuVû|Ùû~øßGËÔÀÍXd|L#{<^t‚ç…þŽä„×Õ:½-ш¦0{ÆÅùÁ½¯²»0þ¡LHP%¡Æ#«è¾lö_Ä8 +<7¯õ£‚~ñS¡ôýSPW ì¨ÐÏPÎêC®ð¥YøÀó|ëlr_NÂêžäA»VývÙØ?—­4æD¡zذ‚`ô+=ò¬R¾Äœº±©ç~êomkøñßøÑÿ¯Œá”>ZT5„ë~áÞwóJíïx|Õa$óáø²¨ÏˆEQôï’¥ßY!¼WX¡æÇdƒtpæ4Ú*V-¸–€è¾tú?çbÍ:ÐŽv¹8ðÞ¢¥‹¨Ðþ&r²rá­—w7·³¹U.<¼tÿÏ’«#ð-Uú­+\Ï÷#Püëoñýw>­Xu±—tìv¯‚öþ]ÎtÆÊ*Ó‰&â2óô!¯òGÀÎpô䳄՗Ú÷͸Öêp¯/ÓUé¿çHZ?æYø½‹ÀäX‘¦oW‡±Šqÿß UÆx8‹ciò³ZîÎÚ¥‘ÝÒ  Kÿ_{ößõäGà[¥üŠ©‘Ìüu/-{`á„_å»R;˜ñ2zÄbÚA"Uwmý6‡œm¿_/Ó"Hó¹ò=`*9ë̱N²ËxUXUnx«ÒWÈX¤ËòvaÓCø ¹>MÔI¢rpLçæØ\ÏÙõ–&y6d–̹.Hu9TQJ¾Åš¡²+~Œ…»™EºÂŽߨ{éyA^ ä®Ïž`díŸFºóÕ=+Š—ÖÄ2ˆî·ÎˆªjèÆeǾfÅîq'Åf Ö£Þ†}™Ém;´[$‘ _ü]”§Êa%€+ ìßn¸óç=ǵzÍË63£q®ÁÇ\/íúôcSBÎO±´ã­pÒæ½½ãvéì°Ô/åÒ÷¡žeñíí‹£â^çäa6dЍŠa4Ǻ¤e‡w¹ñº°Ïì½Ð L.ÔÑÝ×á@Úˤ œ]­ë?XŒ2ºŠå#û^Ê>°¶½W:[cBöËgS_¨q¤°`™Žðê7EEð/=åü„ÖQál0Ú°v»­t¹ÞߪQaøÑºó¯4”˜Š1^{Gß“©xç*{å×rpÔ­^5÷= o:fÛTô”—´2o”—ØØ¯•]ùðß晨0w›BL“Xû£·£´SLj"½€éö£ß²:Qý:ò.žv·gt&SkÐnðߨk›ùLVg­.Ó¶ùjpÑ?³XùI£¢<¸âCPRVúXÝ\ ?î‡)”O9cĈĸaÕÑŽ­Z€ú/ „%i•MÒ«'\ÐÌôtG>«šB²rté¤ÿ~ÏåÓØrP¸ëp»î=%+Ç¢ªO·eHWA$àò¦Ä-+`wgÚ´ÁZõ¨I+é´ïàª2æˆ}ææÒ¨iÊÀ/ˆ/-Œ&€›ôðÒŒO§ ñΩäÛæ:…êýÇ[ZùëÞÃ_sÇæ)jK E½µ_ï0{²±Ë‡.ÔÓy»Ô×.¶«·“œÁC4×±s•0èmz£Š7ê$ÉáJÞ÷ý†ûtàTÔíãa~ÜF÷Ñm ìÔÝÁsëY|´XÓ»½e6ã§ 6–æBní!vЍ|8¦ë‰ c©LÓ"¼zÙܸ›‡Eàîà sÈ+4W8Ý.0©;qÿÓ¬zrr«ƒÇç~ê$¢µz¥ýÈe3]g Š01uír³ÃªqÒ#ëþò& hñì¡a¼féÃ8e ×yÄnó¥j`2gr[§þjð¡sG=Øþ«òsr°¶1 +NwèÂùEï¬?Çê¥vgÃ3‹ÿ‰ùó‹;8ïõÐ ×Àq­žŠ Ø?76Wqq§RñÝ `ÇO€Ÿ;K¶SzÚ¶Ùª£`ë2E’ìÃâ(zœåQ;c‚ü3…sôóìLZuÎ<7w<˜îHT!™ÚÍkéμ ¨lÜEëÓBCÕΛϠ îÏk)Íc±<#,d¾2šQoªýÚ`ËkéwÉé÷ùF­è9#b–í?wbq€Ë`/oâq-[M^ã®(ëëÄ’é‘Ô}»Oëd²ÉH;6ÅK}êä/¿¶IãPüP ^¨dyCÀM±`]4zP~~vÍëÖÖ}¿ƒý¶Û-ª4#‚7FTM !-?³æð¦â‰ÀÙaàn£y©EoTû(rŽ.éKÕÐôßo¶²Å6l!¶y÷å?”uŠ¥{ºÝ[âÛð¸CÍk¦J¿¬s%¾‚EWñ§´Odv ä0š® ßêùÛ“Ù¾­ÇŠFl0^„9þ%úv ÚCE«š·zøÃ…!PyÈ@ƒ"HñÚœõ£^Íì¯ Í½ãâ U2‚DÖðAŽöÆü–eV4PÄ¥dðo«üx»w—»ý BP®3¾ç©µàîgä¯ôÕc”Np1©åWëž[ŽÅôFÙÖºþ¸#sš•À ¥êªÓ¯_R_³x÷˜Þ”°ªê²d)övËyôGÑ9CÎŽmà?E:' õrz¹,žû6œì¤é~椿ï°lxÛŒö©zèRác,)’¹öK*^ÚêzîJïù5¾_) μ¥`9F˜ˆ‘´¿äiR'ï O?†£Ï{ÏsÆ™Ð:T(EâtgŽøÓÿÆB„ì²H›lp)$¹Ny^±9ï`oJŸù¤Ÿîv²†h*#×8Á9@˜ó¹Ÿ ‡Ô€/­e· Úû§ÅÇ;D18›,ì2+hè¨}3¾õsljc&CøîÉîJûUþΔc–¿…zŸ®^ÅWº9hS[²çÆuôŽÄ(D„Ú¡û{õ¿žÂrU|Ñ×P G‰Xe^Jê¶v†âQ–ÿÌÀ„" ¤ÝÚíUï6ûËNëN;n£â'áã®ûeNzUÝÌ3Ûž¦C› ıéx|)grÞ‚£±§!¬¿›/Ë‘Gó&GÞ¶0\„> '·8]|ZÑsO^K©£šþ]±æP¡bés–"žìÏZàÒ$ļ$Ü;àP"M?êlS´ú¥ŽZ®@xöÒƒúVkÒÇf[ÇSwŠàˆêQù‹ÿ.RáëØØ ÅÅï×—âªû5è÷<ŒêÚ«§ÓÚ¶êÖ¨„wýÿ“ °ë;P¼ºnZåŸÖÂ/óÍN¦ÿmýF›ÜB ê‡Ý÷ÖÖ9–hÔ¶EÕ`IÓ :.š“•uÛ>8ÃeùËD£ ›Y&`°^’Š•/Çdlƒú ÿø$âDû±íø¶SÁαóhëš`Û1p£¤¹ìòô¦{ß2mj¤X®˜A›e“ýB*ò|çÏ“°ÄÔ)qÑÍnÐ'O[ÝAã5¥XŠëΰ=PörßãºÓûj°."n‹0P¥7©y™á¨º ´V0”dƒÒ£­êz#qh–¥Ô÷bHÍañ€¬B—µþtmÄô˜šèE´SÉî··n<.' Ѡ΀Gϰ™‰jn¬'‰cÖ+ˆg¹æÕwÖ ª›Ë´Þ2UùBF>òôUûŽ\‹vôI’ûŽ›2YÊ%ávðûvé¦GEwŽÍеâm¯¥^®žÜ/s3Êlmù–¬u&ô¼sâ~ܹtR¹¬Õ¸¶\À¢wÒ†ëÇvëä;«ª½:]9ô¸­Ö.¶ž{ÑXá#½gî†úÖP?™<úO¢ À|16ÆÌhjÕÐ3„÷ù¿ctÄ äßwÝ ݞ犧GX/[£½q$½Áíîlyniz¦î×ë«@‹ZŒßgéºVÞߒвJ–?;~ ±–Ê‚ÏùU1*@­ÛgZO¹ñm\ *Ú¤ô5÷Rv£\v¨Óàm$.¸¬ÛäëR½ŠW•òFò.šÖ™o›%¦VVvK¦µB'+oˆÏ2gô« ¨N/£nŒ;»8ݽä'í ‚,`“LX¥²Ë{D'&Kn#’ªR~û04jˆþqïíœðRðî¡ðà~[þMoćNz?ökœÿú£‡ ´’ùœê‘^mõ~IëŒÜ¾1N®K"I}b¶òEÓõÅO•XÒaҨɛïöAÆÁÕmÍÚy8¦ãÀ1Sjò :¯)ó€>gìý¶zí-Ðú¬n)2?òÃÙ¸’î;üþÁ¡Ý>Šž@éy6Ó´©Þ§óy vß?óëÅ øôA›ÅH¼ºœíÚñR…’ü­ß«çë2ï|…:”PðírmF}ß¡a}9w·õ¸«àȾX³5/f$ƒøh/ ™ç’Ñ¡RNÔPx™ep@Ùi‹Á_©^U ­Î亙ٟIŠ‘2KC)$ìø,C`p÷… ‚~òbönߥÌ%~éŒØ|ÎpëÔ­~q,b]íBW4¼m|®ƒá“e~8Ž?tR‚ @îTúê¦Î’\ÚU2Z¾@$ð\÷âÈÎÂðÕnM¶¸ò&òõ=ØÌ3Y³2ÚçHüaˆ7Ißab)›CÌmÝC¦eŠ®}>ßí¤Ž=Cúc'ƒv% 5|çÃ꣄°!Jß¼®ƒŠý§»$ÜFÒš÷`Êõ üTî„ú[z/¨‘ÿR§>ÌLßë—îwº²¸‚bçôZ—ãZìC¬[÷ {e€?NÃc'زF¦ÑcH©ÿ-ÕÙJh™¥ ÿ¢Ó›i í—®¢ß3ã]@úѺ~ºC(kð~-Ccš• vÚl˜ˆOl1Ç.^À™1MÞu#ÖºöÏ÷ˆýiÆ—9.®Šœý¤Þ¿Al¦„ìLÜé½çÂÉØ [UogDö½ôs¼›…Ñè £ˆs±+ÓêgÿTÿr§©BC™·‚ö'=C¶†ÍÚÃl¨[kbfv=WˆðÝv«Éæ9â®­ódÌòý°í ýü³ã&èäŨ+&áVèv„Ê>'‰çÕ–hR'6ø…tD’5Óå{Ô¶œr²äŽ9#{-­é€43NÌŠq¼6Yö¤·ùý­Ÿh‡cìF„m Hb<rÐ )”WÑ!ðÐný±žÔN#} ·]Ÿ7*,ñ°¹xàkv ŒìßM]VUÌSç$:nÅNðç¨EMIe) ä¾ún1E@àÅaM¾)º‰`”€§õëê/@i xïÞ8ŒÕ‰iämÇ·‚†ô·€~Þý/(ë€WTZöX;w¬wW¨ATÜ2h(ú¶Ö}1d†!ºÕ•86ÊÂîñXôþWó‘þöUCåÒ¨U7^M×2· 2 1—Û9êݤ~Ëácƒ,D 3hN ‘½?‹#ÏÇx{ýÚuéS(êlº±S|5Ë_²šVŽK]åõ—òe:iv»Rå"*o'—gn=K• èA»Ô4†ûƒa^cßí@-%¥§gÆsåqàzÖøÞµýJ[¾OŠUè+ lMç»×w “Ët‡Îïáåü â³’IùD»C³o(9 g£~Djnñú¼*Ëf<~Þð¸1¶½uWÆ]Á“at‡žõ&F¹CÚžÁoc’Þc„ÝH°½R$»M|ƒmƒ¸5xC”IÚCxâ¯×²íºN…ñêŒJÊ.ñàCŠ£]Qâg‚€õ>a5ÞÉdqWòZmgéöØ|FÕ`'#vT{÷ú†]—…ªÞ|Å…h¥™7«“¤[g0?¨ìq™·tù0¶Àì§[dðTä-¸‡¾7½mVÝfåש"¶Øm:žófÇêÿ×þM.Sábýu8“ËXÞµ{ÂëZè«2êtwaugÍàÅj$dŸ×ý—™“îÛù"píƒuƒIOÝ˺çdq•º-SÎt”ÅÂz9íCI2%¦ö¡?W=IËí¦é8TZzžÏúyÒ%&ÔÌü‘Õ›úé&PâÇ•¯UtÂýÀæ.ŽÀŸÍ–L“ô×!Úb*å®6MK‘]†´6ù»:é°,oÎÅØõÙ'dÔvºÌ?_³žW­µãKE·)zJLäVN»ÒO,­ä“/yÔÉÍ•S“¡[šÞµ­~3S¶Ÿí$Ž .ønx°Ž×GèÛÆï9ox+à±®éhEm>5»Ø¥rP¦ôåˆl™˜¢'×§å«sb f+ÅM’¨tgùÖKE ËõA4³¿v)ë!=Ò»GÍú#püVÕ_ I(ÌŽïŒjYIÄ“SàWt;òª~Z ²çA±´*ôy¸[P0²‡4ÕžÃØKÇîíÊRb`‡«s ÿÂ×c@†ôw“ü¸e¥,æI8þQ͉ÒD§‰&}±±;õœf¬a¯íØ.„„‡ÅuÛ¦¥wŠ7û«é>mÌĪÿÛâ_½|Åðñj@}:¼œú‹Â’Ê?ÄÐ}?¯ŸVg«øò´è4S4q%Ž/Ö Ý osLÖäJ9ËØ ZöqÖ#žk?ÿÛáú4ýøê|$~ ;bt#̨ŠJºó ç/ªëýŽ~—àøçQÁêÅt­òlÇ û{Û“ÇLįUù’ã‘ ‡%qÜ2úoh$cØ&ø7ýR\ ­O|ÞP»E¡žÌ,ÝÕj¾}PÍ——ì[âWäF"/>¬‘b®„Czaöê CàÐG’;H­úÞk+¶Ç¤¬ÎgNg9¤ÎØju¬‰sŒ¼aêºÆ¹òn x¬ïòx¬í”ˆ'5Eæ¦ ŠMìýÜ”T«:‰_|èÂ#W õrIý„«ª¾‘Ëü´Íx¼­koH4éæ8MMMሠª1°,ø\‘~íZë¶qš˜½ºDjX¾Ê,¹WòºM¹Ç`Л ô#0j#˜ÏÚ‹$p€©Â8Ü©2€"û4Ú8'Ø¢Ÿ™j!%O^™ï#‹¼$ˆA⩽N¯Ø×gñfàâ\Éï•«\´[S¾íJãÔvÊKì3Ô<ù½&Ä”p-³·Êû´¨:±¸¸ViƒEø6ÛÏ(§l¡Ç;µY{û˜e¨ÿ-ÒTŸö:Zõn°nŸ£{ûÜή›Êê„Ë¡ÿ@|…žØ>jAD½Rº”ª‘¹Ò7]BHÉ—?ElÕŸ” DíÌ Ou‰n(Ò7LG‡7ž7´ZvS¦¥|¡DúÉ|ýöQKðQëç aZvÐê™BB>Éæ‰jöÆ\/©I³„Nb°â)¥Üähe5ÒI £ˆ5gϘ0­Oä6œ<ëC-FÛöøræÚ®3jÌ›}Þ2ï |z8 §ñ¾=ˆâ‹°À8G¿¾ ¸,"³õøüR%¬\ì'õñ4x˜ó~;x˜ƒjm›Ló¿X=ä<¯ûIÕ63ת‹%+íi’Æú¦¶1ñ‡UƒÕ"3vÐ6çÕvϾ§ƒg¨qÊUÅ.f[XóŠŠ ³ÿtaq w^=ëÓÒÒr%ñpqqÑNÎâ ^\½9}yñlß G¾`¡nêv~óöâÙ:ùxa‘æÝµòŸ;½O]}}€ÞÈ O?:cúÚÓ áçPv+MÅÞ¨IX,)"9ðóGJIâMrË2ó……ѨâVÃÅΫÎÞÌ}ÌìýGûßRÍõ%¨‘ËxŠÈð冔“ B­²IѧBÀ¿§sEÚ»üÕ:S$¢i޼¯òˆRFªMãju‡³šV••w\^ÀWZ ¹«‰ Žqï⼡,D»CŽ0>AÕ³³ê<`ZŒ4-,D¬›€çG^òŠU+`¸5™?u 6ƒ‘ïmâŸæTÉXÿ¾TžÞ’ãÀk'a•% ëïÓcP€íß| „^tÐhe„I„3+±R ïº¨yL¯d¹ Ye±[«gã™mzÁ†>ÿ¶C³Ÿ¾²ä,ãÙëR¯o׳ú¢GÅ7ó¥íO€¬ˆ†ÅÁþëBrÏ\X¢Fèx°´·Ní2àZ¤ñO»§|£w-Ä ñpÜK?¹¾Þšadó N0ÙxÓ0uû¼ºúøl8dnÔÖœ7G³Kš>a¿¬ßË&-R_”ÿ%¶Å'¢f‘[[‡‰)1ŸL¿²± ;,2ú›Ó í"òvMôt,D7 'D€Ã,@?¦(þ@º‚p…;U޽ÿ2zO\ð%Vâk¸tðñØ€ñ-ß?Mf˜¿žstÞm šL’S(ikx½ó? ’¸H¥¥Ä6–©¥er@Áž'S¶íÎ(`g¡Ç(5}ùFLì‚„q%éfb¡g¶r&¼ìW©»:Š Ú_ò\#çОÊÞ¥âC€‹»l²¹…w¶w ÿq©ü—²ß„•I\â™=N¼¦P@撻ưÈÅÕ¶YIË6q|ôŒ·‚‘õíÃóýC«·Ž ïÆÖ7ŽæÏé/ )2.X\ü*Aûá« L UÕ*$Âʧ´´<°ïhNñ…ªòá³{å^Ýr¼šJ»Žßê“ Ã¿1‰*í]C©øž#ùÍ7Õ ]…ÿìžÚÉyÉÉ|Ùª¹?ò=­þ²¸¬[ß8w¬ÞÂǤÛ1Çé÷è`sˆFß{}yqÁì4ãÕ"bákqeöWœìƒ6O¢ž¶æ®ÅŒÀ€ó5at¨È¬û‡BJœ9à­ £V›—ѫ‹;ÀÔKP 7 9L_èþûTšŸ†X<¨Kªbê!Î’Þ\¯švšÍ¦’76N”á'ü)³÷oØÍø"ÿÇàh‚õ)8!7* ožÐÇAû7:`& ÛõWÒ(Íö60Áw[4dá´œú݆:÷yØpšÚ4v'sÐ˲Mcî±¥ÝßJŸœ1ióÀ˘üãÎLµ¤$t¯¸9ï!$g&Pƒ¸é:WL£Ä7ùÒ kéæîI†³TöN¥2üc&¨#DðÓJ£$.9ö“)™(ÿ4©Åy²eOM#PØÄê¹+½º›îá=ïá÷B¦!,=;ï×j²cÓn®ÙMš»™!ù]–ÍAD°ÒÖÃpú+#´Ôæ3pÝgшŸ˜Ïaƒ+¸Rr¼€ˆmî×c@ñIe—öRNÿ]G¨µ’F¿ „ JÆ0¥•ÚëûWŸXT\.Ô†uïÄE0¸{¦Bõ >_‰Òu ñ2°û=ò0Ž»ãp ‚‹/ä—…ÆãnáZŒÛmÔpø\⥷/°‡‡Ç7òÆÞQsϰLkþRTl¶ÐÊ_ MÞ‹ÙáöÞÂLEšÙʽå«Ó‘p$$á¸,ÄË+ÅjzäAǘ¯O`ó™ÙjùE@ŒñtÛýE•G{°êyYˆ*ñuÜ¡_ÈÁ’h–ZÎ3@ðç>Q%+%ƒÎÝ—@x¢IíD€ÄÁ½FÞúTX¨½õ¡U`<60ÿåm ÐM0:]Þ^ï´ŸõÈ«2´í_¦úô܇Mjpiuàô~(¿¹½Ì+Të­ŒzOÊ帚yÜùàaҨΌ“gãaú‘n,­ýÝ&iÔòLÁho›+eâñѬç`yÒ˜‚P3¬öhãM”þdžœþ³ÃMBQ´ûL ½DE݉¥œö”¶¡uã/à‰V-”Jªë™ä檷>»ñF× ¡Ò÷Æ»—ò´@>Ýž 7¿á\sAt, ÉúVBVô÷ƒ©¬í!4G¾J£ÝH½Î\8ß«ŠVÜ3|ß3ÄG‡Átc-ÉÉç–G2¨š»'‰„lwÈOä§…Åc²ks;%$9ß+dØüIÚBIÙ)¸—4¢n…”KC3&ÁÉÊ rª„‹œQ(|‰… $=Áøs÷4SçZA„2I ¢XÍê åu¹ÌLžš*d (‡va榼“ÍתÂòs›ÎEÇ,ö%p©¿[W׷޵vŨ`5â·ôª(4›n)jŠ‘’@ÔâÉÓææûò5pÿŽÌ)~#‰”ìI·PسÛUK~'N•¼ôôS.ß~dj{ÞËÀEômJ8‚,Û™gwMϼÅD¼­ˆm$¸+è7Œ¯“Œ\³>Ù¶Ù+Îû­ ÆÙÿ;¬?›Ô¶šŠ¼ÊÕCÎ¥îÛ±¨3 ØtÛØúÑíŸ(¯p_zF&’v†­›%QëEäe”ED¾ ú8ˆþH§¤¥c×Bç{§«“³Ç…å.¼ˆs)þT„ÓŸ…“¢¯ þÊ Ž¼ ~!z„?hC %ÿ“ƒÄ±ýŽ/.Òénqyb»î[¦q¨¤Ïa7†””Ô-Göo­ú¢ÍØîðûåóÎKÃa.#´4w/-­€u/:‡ÆiîjbJ~LÃô…yhã<'raiåbÊê¸îìÙÜ3ⶦ©Óøg¹Õ®î/KÚblÁ¯Mzô›ëSF%)MÕóõiîØ´Çé½¢` ;aEòõ¡—ˆQ%õÀGw0;wèú7Óæ·ßòÂlÖÆ¸Ã6èRެ¨ǹLâYn(Á€!`ϳ¡ð3àH;ÀtºÄ̰VMšÚf¾Táð_¶£ùû¼ç½Sû{ÙŠ5»ÖT†••UùTrÆo¼-À eÀGi­µ6C€™öTK¶k«×Å}¢]=ß> “Y²[iK­N+ˆ˜[œu^îðf ’~U÷5Z¬ã{A=lλqÏŒ²¬üòóm×›uƒ#AÍ9ÈÑ”ãfØr ÕòÄÁ¾¢ª¨^Í «!ëh¤+Ò/F.MA@˜÷Ì3_懶ù/}ü vÔ·!#†ØR@Ž\P°{›×öÀÔxKG.ðİ1ýnŸîâh©`›vuKÚêÆÕŽx€€ÐKzYZ_éã3'JB½Ý¥TÇÝ€Ös®Á¥¢xNkwvhN?Ôë‹rq º:WJ¥Oèg­óä‡ÌxX¡WC<ô\(öWíß›¥ÄHñ˜¤€Þrl‰m ï/þzïžD„qß¶!DB_»ÙÀ ¨:Än I–$Ÿ}} ¯¼ü¼T&A‚¥;Pæ ÑÚ•Ñ1¼Ïã“55E%½°°Œ‰ƒ»M5ä;áœçÓY ªÀºž\b±Ä pN¨€ˆTk?Ÿ½{ƒVÃ1hhW*|瘟µB›)T[¬Âd·B$WKSjÂõsG “òïϽžï×í¡qîöÒÆ;àÏ^®(¯FDãDû zpªV?š9ïã?Á<¹äPF$¶¾{æÏ­¬>yä·Ö}Ù¿k‚ezý>OU¢ÄòµE¶c`ü ¡LЩ4}w³[ëdyåèJ>ç´¡ºŸÁ ¢_÷’s‘È_×}÷”ñü”>;®ì«S?uyã¢Åz&аŠRîÏX¡8h€CŶЗ¡zž¼"Y£Ø¾r=/‰™­ ÅÉ×û¤½‡¤¡§Õíƒìr¯MÒ¾5ìDÍI¾ÃC`=Q¬É½>ìUÔX11W=ñŨçgO^—aVÀ‹I ß!ñhþ΄yÇ%ÝÙGÃd " ‘Hä´oV]DçRnr JRÊüï(õËÌ1ØA ›* ›La‘YcÃË€Ðþ›@½®v?²D"v»Ù‹‹‹†Ô-^ëó)HN0•ikÍÇÝßèÞ\³? %(‹ãÞ瀞âÄ”o÷á­,Ta†–ÚàYÁË ÂÆÆ¦̯˜¯Hˆ~Ió¼ó}Ãôvð¯6û®Nç´7øŒÆ[Îòp#Ê!*å„èq/Ýê~O~ø×Äbf›9J†À‘®xIÈlXÛìíoùi-ìù/è‚BÑýH•ºÓW-iRíxà¸\÷c]Iþï•FÖ…(FËæŸ6Op=“¾ôdÐ~¾8Y Ýp)‘vQ‘ž+g&ù®.ºC‹$”¨®<3£õ#–¿ 1´t½Vj𦛣¹RXlÜj³«Ò>ʾœ&kF'óº=fÄèƒ$˜œ–1Ä¥`1 Œ¬“Œ ÙT‡Ó£, &¾;UÖb‘÷†Ð†w.Ú=m[8ôlÐ4!Ç5?„n$·`¤ã±ˆ¼TŒþÜé“ÓFØ\›—33ĶÁ¤áŒ'£ öX¹—Ô?­p®âÌ5{ŠEúM¸¢±r¿~’ 9<2#“¶Û8Üè=T¡wEáÚ á“H Ócc‘‰åoæIOoæ™?N]È{ù`Š6WPy^Ê×›Û)(5¨Í3µÑÕA³ýH–·.èŽúÉ0íÎ[›U‘ðдŽ”šÃKbÁz3ú|œŽ?gÛÐO¥i|Zl_2BX9§.§³*Ê ¦'LÂ5¦&Ä>4÷æ–_ã„Ý âéø?>ȲöweÁ·F™!—=0¨É1&X™66Äyôø „Â]&]¸-î™}ž„Í•}Dhtã=¡ø`|µÞýøª†[øÉ[ÙA%;]›¾W :yÔ’]Æ“/±·ç÷Íî9äRm{ü6_ ;­Þ<±ÿ°èLµ§²‰\öí\ Ûp‚¢3æ’rë9•^6ÞðèSèLÖu¸„§·EËd6±ÆNÚ׳_Åï¤üѼõ„Qiß– B 8…L ¥ÎÚS,+'ô‹æ>ih  ‹½(öó(ÿb¼++mÖÿã¡ÈI­Ô–ûMNõ=#G/ ÆdÈÚù`e•C®èøn!ÐÌWûó©ôžMIyE»W]sŸnRGYÇÂû/KÌþh}ùrn²¿äTÕã¯è+9Öˆð¥Ø'PRö§N\×(dCþÆag·0hö°–]iÈoղȔºëN‹ë“hÈ ÷ n+u÷¢GÃ,5´AÛÅr]º7cH½âãÿɸ›í±·Piúðþæ<ÿ+ ¬@¯Èñ ni5àò²°Ýo#îË]} …‡_–Éå8’“ Äï‚¥sãO^xiZΘµYÌ188Ê^÷ ÊX«Xç÷ÒF|TÎE¦š¸ÍÓò^ìt\¸Lß‹)j©u\]˜0mD|¡zù£ž¡Ì¡Çnß»“'¤ì‡åÉÍÖpÓ aøøI½÷«ÇNjCÎ/r5æ­´ ëG/S¤ñÛLNñ r>hNñt1C·ÁDo=æ®ÁCÀ‚ÌYZ©ïÐ~ç[bJXÄTdF¬ü˜Øjlt`„h5ØÍ½iË,xÐöâ ¨/I¯!Õ]˜åê5ßp7ÕiEà B-ÔošO0Õ+Ð^›bC¥Â¥ qõl*6Lá~ \’jÑx!§X·Íëí–F¶)åâa¶ó®lwbª"ŒÂ§f4”à[fqg6ÜN㢥¢\Ū8áwVø¸ Hˆ¯FO(¸_eº^0¡?•ƾ@è÷^Œüø+ú™µr\:íqym`æFà¯xHÉâ•uM Ó¥IÝšsÁ‡ÝåÒò¹”?:ñÞR Í@sî|yJ‘ö ÷¸Ÿ„hW°60%æQ»=FÑ×›rÕá2£ÿD×óêF’ì»@—±wĘkÎÎÉ=2Ù—ŽFÎê½ïpq´/™ÕöûXU]þ=Nï0çó¶>£r¿&¤!&ƒ-ñU¼8ì-žªùVî`†Ô)ÐÕÔOgïÓŠßgÓ!ލFšIkÛÒõúKĆEÓW]3¤·«ÞKbYUÔ?õ½¥.q_z©ò窘®—b$öä*CšYø_&§á‰–Þ&­Ö~yÂ|#¾Qfìå3ýÕÑÛœ˜ö •Ù6isÈdGDZàl÷áPsûö•ò~H¢®âçÇΫÎẇœb¤‡@ûŽÛ‰Ù(~°X¬ô¹õ̃!“œÎÀ‹ _5ô[~—ÎÖæâ&/—µz'±ÃêªÄŒ—÷¿˜ÙÌ;ñp½l )nîò¦,$È©Šº­¹kÊkÒ¾r§‚ŠùÀÿEÓ;@GÒumÃÛ6&vÇÖÛ¶5±5ÉÛœÛöĶmëÏý¼ÿW«jõªªS×¾ö©ÓÝ£„É8@ Ðe²+Ïm³ö°JˆœhÑU¨3•YɘË-×/ “®l9¨]Û›ñ ¶ž ¤jH òòŽÖÚÒ~¸¬}ußt¼¬[Ø*@Œ¡‹ŸË?•uÉ,feb à` ÝèîòÎFüŸ•Û¦k—ææ:9kt½ÀÈAò±Dÿú!ŠÖã˜äŽ<Œ’lÁøÉxÌ„š³JW—éØ ‰OLîÎÜŸ”¦'½­¯ÁHœB»Vðÿ¤„LM ÕzúÓJožßGàÑ †pªœù“˜‹e+Þk°é)ª×û!E¬±½ÒÙ×ú>ÄQRÓ±¬œŽ/I‹ÍÆLwE†ˆØ¡’”©Å»æ~^í¨ç-8“û´ów1¾¥Å­Ž,µÙZíP-í—E èæÎ Rï°eÿ!/Šf] à'ÏÝÛâhÚ6"±NFñr3ë5P?¢¸R"‘|„ƒýùóe« 6—„‚­AD{eœ»›­ÙNY§?-™³zàKw“ÀñS:û„.ÊÊoë"_u]¬Ü>$¢nS˜:JµxŠ»»t~V´= jNTUÉ­/–XLò®-Üž#Wc5nï'+2MXßìéÎúóó v¯‚gœËH+Gd‰êO}âu¤’;XµM²™geõÖö¶as³Ë'¹ÄÜÛ^„ZÍÒÿ:;PVv8Ôþ)s;œ4ݵmÞ˜Äw¼P ¬XýIlú>Š‚³¡£j“eŽ= 5b·H›r·…G¶‡ñ÷Ó“ƒí~;eåД$eàƒáÁA/\xþ¸¬U– ¼¡·X‹¡ƒÊM/ˆ2ó‹\09,{æÈ9/gB lþcùùŽŒÙ«³žŽ‹m£Ú¬¿T»Q›T'Ø9‚…Ž}dQ“ì©ðF2j^'š´² ëzÎ+S qõ&˜¿~ôк1{Ê0} ®¹“Û¼Ûú¶Qx•´L·°‡Ò¬›¨ëçb£Êo{¸ûø°J“ÒQ“4BóA΀<磢tÝÄQW6Ê_nµOÜ¿:n¡Aߣ!ºñ·hd(Ám¢ýÔoœn…Áˆ‹¶œå8þÒ˜´:èzÔ"oñ#™M†@„x ÞÏDdtáä$r¹Šo§ÖñÙìü>K¸‰&ëY»tv®ñ˜×³ÁHd½^Í{&_÷‰ãÂÎéªS€ÓÆ@[‹ºWFG‘eÀ`ØfÁ AyÕ]Õý$ÍyUTÙftä&l' ³—´u•ìB¼™)Žëïz7Ï™-¬ð°¹¿SãÎ;)kN×вø¬ÖÀ¼öZú*¨§ ÂB¤ñãµl·'I&ŸÒ¥C9° ϦʭƒúÛ=Êb ááB¸wO`»y¼>„™=žŽêf[誊Üœ»bƒ2ímeËC½Á’b&ßVœ´t%Ù_QlÐEÿûßHïX¿õ†|Ç(ÁZæž k>ÿ!#Ù¥ÛnVÖÀ¿ÍN‚Ðå¹Eïk·xœ×#ÿ®k“]ª~ “¤"ËÐÖ웵Nz\Óôˆè² ôG¯ F–û0\€_ýeèw¼O{^¢—g·bé…Û̺2;§ ë‰ ãLLx¤•ÝaURÑPGv˜ ë "ô¶§F1–ÔW-€ÌK¸¼¹££#élu£Cqe .ÏÃÌ#³ô›"G•Þ_bñÿ–ŽrF™·ðat|TQ•~t™! ߎç (l§é<üÙ!HîïO¯A-c•z{ºÔw¹çà‹Ž[z ³êÃlé …‚¨IlÇ䩸ȸíá09mîîÓwÜ —Ã[``RCcql팉ÂúÆ+Âx!^bº×ü‹P'”-™¦¦HÓ[Ž¡.Á¢¯eI ûXÓvõ¦vº-ý *ú¦”ë¦fNÙ.……ÁŽ V œèŸ!‡ðæÅïýGçŠ?´,Œ%UÐm†v6z@ Rn5 )4>+¢ÐDÙ·!OÇ ÉþÀM £gмCûtëÃûÜj*— O¦îW–šùøF±~2!Î ¢ÈóhÅ íú]^ ·=QUYÝ‹àD/=Ò~ð÷¶nGgA7 ðÐy{ ÃsÍz“ÑÛ+7ïÃ#Óz·P5T— –ê·Ju»‘ž†Ö k™tµÊÆ‚º›`%O¥¼ƒ5©ÞbtªÖà¹+í9mÓŽŽ.ºE±ìÚÈÝüö2BR½åþ h TèB ƒÖ~ÿ¥ÄDH©yŽ¢*ùS›AŽïåé®~¢Ü¨Äw¥ŒXà%ýûsk+"F£*À2Yù¦ìLgQéóƒb—wš‰ão´s«×s‰ŽØ’ûwϦ1õˆh/ÀúI¹ÀöÝXl…Z &—3ïXP7N?ñu÷ìÕ?! 6ȯ Úä¤ÖäKt.ôTêV£!ŽbÏSC€~·ß ²k¦~²FèžMô‰ÒT‰nw¹ÌÔ.žNÉ6,N%‘u±†¤[qM‹‘~íÛ"€¢R–ìllët/Fø92 ­·ßÏv­þ[b4Õ^F}ÃhEWíp’;R€´ >A-çÚ "´Í§­ŠM–àSlsÎáŠûóÑUT¡ûb»ÛLbûnÀ/™ÎöÑSÑã¦4tQWñ©¨åctè„,Üob£²²ûB¶„«RÜÿ Péð†¼µœþܸ™f + òHLpµÝõ‡I#Ôgq‘ü–1eLR¬aÀ%%)a¸ÕD«Ó?èëÞ›"9¦¦|½5¨A’ "Å¢‘BÚxûx”ÛˆáãqWJ´ç]™A×ï—þpMý>ÝI;Ó<ŒÊ±Nþ³féêwß.ÝZP“43IH^=S-]„qW¥¦n05S8z**¶õ¶<ãd7˜ÜÏ3ñ+z0ýâ›Ì„È­yö¨"®°+\ïl:·–ÀR´Ò¡Q«MÚ§[†ÿóR«–iÝ‚UD®6Ï„U¤ÝØ«š¡ œ—¤Û»(­¥‹¡Ë‘ )u‰Œƒ!©µEä9ÜYyñ´ ¨öuÙèB“EŽ’?0§y»Azé'uq ³À¿Y“æÀ³È?fZ9©àOEá‘a¤PÌÖ’i‡=NPô°5ö8Õ‰JÈå1™\<ÿhÿé­N³Xuê«Ný¹ñ»xc:&¦5g8“nØÓ_fõ’Ù‡ÕW†´kÅæ„½‚@†=.x'ðÛÃ'–òH麲P“lü˜ôµ\.YíÏ^¼Ùý¸=ÄŒ“ ó¶üâ9€×„\0À,€\·^«c»H ð¹¢!qyo*óc±—Ñåf_*C°G ã­Il‰ SÊÉ&݃ÑëŽÔäÁ®K4J¾Í MJˆÓt±.‡DtT!ßS°‡#ŽýV ØýÖó.°3h~a:gưù€7¥v°N¦Ý¤‘Š`´Æ‘Øôô¯D0íé­!0¦¥"þ2ük³% ˜gß×D;/×Á¾t>zUT.lãk3Óxô…"» TÁo3ÀˬÙúù"Ø™+:Gç¤ÂKkn0[ÏÌ–§]ÉÀÈú{m=!_?#øsœº©´ÏîLbÌŠýº²4T»OPw†‡ËëU‚‹<$¾4+{û]¹$]4+-^ ~¦´¬4 -ê«ü€4:ªA±E•^ò “{ú3EÑ2€Ã¿ãaÙÔ„c‚ŶÝýo+â”r¨­FíÓH€_`ê&†€\Là r€}*·ëäPÅ+Üo4‹ åæïO›H ÕÏ^•ä:Âòô–—Uý!ûšH&@êeãq‹‘NªrDóÃ&÷: àö¼qÓBÒ_ûòÓ’^Ü祉²U“ä³­ÇoiÙ‚ÛÛ,s—GX ¤Œu錻“…}“bl/FÁ‡mB‚§?ý!#œ# |ÝgŒÍ‘VŒ/d°ÖTk°Nbƒ‡Š€§#mZŒ:ä‚ò”Ú˽„@ý7#‚3`ƒ"S¶DjC”æXž××?XoÒJ]ò¶šsÉÒk-ù•WÒü€ó¡Ïqîé ºÓuoYA'±4œÇ•Íu¹ˆKé²) ‡]¡Ö¸U”…¡šýµ,Ÿâé2·Œ½Ág¹–ù~0úGÁ.¶ôeÛ éšùú…§9U½ÐWl4÷ØÙAȇÇŠé„6¨» þDú÷¼(«Ó½rá=í©&HJšÎdŠ·›ˆŠa_Â~äÅxòèp{ï,Â\×™é0B' ÓЂd KfíïÎà.i.âáK6Fúãý.ÓÚܬÈ%Űì|„h|4̯”] ¢öõËðþÅr›óÙÙ•Ak¯ãå»V÷B¤1Ú:EöGÒhîSÑM«gÙ_&~M¸5¤su÷~U-´àzSt`|ÙT!×ì°ˆ†/y\GË3>¾ÆÆjÞxK²¹ñkNgü¾;eøˆX¼\•ûOjÔû…g wlKâÌ%\Õñ'“á}H?3÷{D–žØ¨Ê‘Šc;·>…aº:ö_å^íí ‚ þåíoCc)Q4w§·{ÿŸ/ZqQ&HYÊÍ)NÿœÖ/ûÆåî P†\éûiÏ)©šæs§Q;j»ã÷»ˆH—GÁšÕé:é2•ˆ„#Mè¾cí¾ŠºÖÞXpª9 Œ~ŠF!¡†¹ Ý>† Ñ&ŒÃT.Xèýî{,".÷Éô_Dg‘¨µ[»F²¶Ê붪 XÓufƸ %ަ‡&.m‡ÿP(,Šm°ÉÎÓ” +Ýeš”ï¡=pñ‰â°û9eç¢ëi=ãÑDz™?JPO ÑÓ¨o!1²«SŽ$¿ †;vÄG«Œœ÷< sÁwº ì–Ò¥3ä”BÆèÒuSì÷j÷<³Ž¼è ùôt´ÿ¾õÕë%v $æù*ÔE%?]š®ìÿš Ãr½ý«ç”=· ${ÂM¹:Yñbñj“ûk‰Š­Jnƒ_Y™ÑµGƃ¡€ˆWÒf ”Wê‹Îý·+ÏŒ'[c•&×pËÒ” {Q ú´ÀžŒ3ñ „‡ÅŠUV.«.k.jj¼€NRŽyy¹+ììödùÑiñU;Qý·õÂå„Ðc@íÄ\¾G‰uµˆøiÎùûqæÎü® rÐ.v‘Ô §ùÂmÏG[ æ~p~ýGÚf›SdÇP§ ‡“ôã鵪E:4Ðx'7(¦ª²qYØŸëÜÀð­“N—;ÂVw’ "~TGüþxZ“éøT­U¾üy¶9û!¢tÓ5íÏãþ­}4I…Lj,q¾(Èö%­÷_p2ùÀæ\Úùv6h“¨2}ª´\ÿ0ËMCG ê+Ó'«Ù7g¨-Ùjús¹ö¡²ó'S=”p]T‡UÙ‘Tr¸ÑÝ>UÂÙô¿9,Dç5UÂð¨:òWòŽEò›¿aöØ{HÙÜ'@Б*Š0Ÿ¼t1Ö˜ëήäNÑð]:M‚ð®Ä\~®d·ÿÜó(Jõ弟ÓRÁÏÚ¸E4†$Ixe|Á Ñë,Tömç‰BYg_æ€ì_ÌĢ傇dÅp4 ý}@ÁªøŸ7- †)äY¬^ü)gŒ^­£Œ&|8«+uîß.æÌ(å´4ñäÄðÂü^0à{9U«©qòZyk8\|c© è$¬¨ïã¯tw jÉòüä4¯9ó+X2;PVŸ¶@¯ñþhïù4å~8âú^¿Ñy¾Â ðHdÜûTX_Œàɘéüé%ÿ-v–QŸG8lâz¸¹‹uR&ã§lÐß{Z¤dJh@pø—(‚f³ò!ün%Ñí‹ÕlLHþýþHŸô¸ §k´¬ñšõ¨˜HÑdë$^ÌÅzrè¿{✮ܿOÉöî$Rií80P&ƒ—Q~c¡k5Á\Ú7=ÊŸmÔúò¸é] ãVCX˜ºôçk•d¬.OkWSQßï­5Ù׈Ýc­a°ˆÎƒ,dóŸí($}iÔ«j1#ce°®„~ûàµtãæÀT_/ð¨·jɤ¥{é]@n—~“ŠäNVŠÊÓ+&ÚÁAó«6^­¡ã‹Vrdê{šá¼ Žò²^®s'5%Õ ;HVÒKIeÉV¾Þ¼=¿oë9ú‘'š²‚ô‹§‡¬l].ù9ËlNï»$ßÒ }×þ^2­‡¡Öº¹o.è<ê?‚n§ìäÎ'•!Þ§ÅœƒšÄßþñ,]<66LÇÖ•ù[ã%‡ÀÓDöœÍbü3¨¶(·&ýzz5Ú=YÕ²nþÑu{Óxæ™ÝÎä –7f‘ÓËR«š‰¯®œòC9”¡áÎùÛ7…½TÜå󹬠°d,q˜+·gmâX{N?áöWæþ‘½f!Ut“‹õc32ï€Ü@p›ô"S¢ðÉžÎüÒK!{¤:ÿö6“!l¥ƒÌ/§Á}ã.6Ûô)”´<ÿþ^’d¹æ.p°îö|Å`ðŠªÝE9û£œØÆ MúÔO@P;òä†ü€U([£ÈýšuÉ+ïŠÚŸ/%¢éZ½–FÑ'¹¶²›M°01º®†ö…¤ã‘¬ò‰uNôh§{1ÓXe§ZRý`s{¦ê%iïüOL_CPUŲü H E+ú¾«öÊ—Ïó,Áè·/œöI;'{(éép¸úMLº¹ývî¬/ø°–’ ^º?¬Âyîl3ôÛƒõ©ê¤!ï®<=-ë|«kÍ®|“ûZ~ móîñ•Uúý£ßï畦Œ£¨k2}‰ih²ð9e!™sBʆÛûz™ù]]ç.¸6«*ö¾œ«Ò䨵I✯NR‡wˆØÃí¬%ÙÉÈœÆtÚŒh(>Îm’2~ß\DÞ64¿ª»p×PAÓ¢2ÉJ5C¾ƒéˆY6‚Xß<8Krš´ã$ÿ# íêg1M8Ñ¥Gø.ÀÃéWš îõ¹˜-CÛžL¶óíÒ§¤‘û {¬•*)¶ÔG³Ž²Ëƒ 6‡€é”0[;¼mѲ)ÆÝMa_Ç.-,â«ä‚VŒ\Mkº“ºƒÚ¨ÇN©ô¸>Þ¡Ç$Mœµ‰)“¶OT~ò^¹[ˆÝ¦ÖakA>nöÅñÊD‰á¹|ÏC3WŠ’ãì±kKnÇÌÂÇnËùƒÓkÍîåfZÕÁo YóNåDúµ±¨Bª¡±]šmÅ<;‘oí”Wàl‰ïŽ¥JÒ`ë#7éó­­Nã+†!’~ž,,âK}û'ŽŽ¦‚VÌ¿Çß®ÖW£¢ßsOÙŠÖ<µÖŦxe¾ß×e'ôÍ_¸ãʪ]†> +Éòuˆ€ûÐ4*€ÑI&œA îƒÞow£_ÀÞpc^?c¶µùs/À¿•êȦÖ*iVy£¿×F.#tÇš‡“œ¢µD½DÌ0˜´p1¢UÜI|Ÿ}6àépÿLE–9—URgdK„Ý/º½îrš730 B€7“c'TCPˆP§ÕåCSXæšFYH¼¨G˜ùäpÓ·òîF2®ë‡E¶íþÆ ÜS$›®elÙ–õU>n¨€V5l~ÓèzõÃB%+vª®Q6Ý_“\BÆÿ_BãËÖ‹÷‚b°™¯½à®ðÙ Kb]puµxTå ¡×Ñýñ4 ¨_ª.`ËükܦÞEvr¸-:Ì;RÆÏ܆Z]ó@»m‰·ò¶ÌDÙdŽp) ‘`Û“ÉÂ…¶V~(²_£Û3{.WôØ—¼#žØ 5Äõ(øCšÓ@ƒ´¾Ü>) Ç‹ÈÐâ±~uàËz®Fìs¸ùÚTu¨t28KËvoËöMøw0¾:ç'ähœz1‹•7“L•ÕMœ Ö7ž¢z_%·;±çªJ\}Y¡UN€cedÀãÂÁg{è–Ý·Ub!? ÆØyñx¥—XÊz-S¨-ñcq7EL<J‘ rzƈàÆHº:Lq .ñøé¢aÎV=SRÚ”X}ì‘ô/wôÛT°ÕSå?‡[öm:çNº‰«»MùÖE;ŸP.‹VeØ!!ϵõ½õ{Ãtq§¤ª¹k­ˆ@)ÕLŠ& ub­ª€'ÏÝje­*ÇéîíÔË~”ýÂà_ËùŒ!ÑM#Hf8Ò*t=«ŒÊ:ƒÎŠwIå³¶›EèJ·àÆ,¦q¯Pcð³®½'dæ³:Rè˜/Ë´È ¾˜Ämg…=UÛ¥[ óÅr÷'«±¿›aYû·D'’' 6ŽÌúSù©1E˜ºñrÐ2qí”Å8•G.åõ3ñÒ‹-}Àp ¿ÂŽ6êþ«>yù/!†ƒ &b\.®kŽEÑÞm¨2Zï†r. ïvP…Üõ¿MR¦·>öÇ}Ý,Óø)š¥4žðæ·ÖàF_ô‚`ؽ«–ä×kjú*½€…;¾ƒÛqiò<„eÁcB=㢾•©åt_!nŒÃ·‹êœ3ûw¥ x@põûì,6`‹Šò=DTœQ Ä;ùí5·$ÑÝ‹ŠÉaw):æô(\OÈj”º-»¨)“ Yƒi4[èh8¶¼Gô“­]¢ÝÞA, H&¯¾^êuêwžÜäŒsÆ»}>¿ÀçߥåÃô;ûjDÊ$8®û×­²Î{l.e¾;“%}ƒÀ´Þ±y?u%뉭KѺš]5sÅyþØÌŒÁn¬D©”;ô£…œfc˜O° ¢>3{±ÖË:œ}ã̤»ú§–‹kCíƒû´`ÜÿtÐ!a¢gƒ+¶°*¥Uo3èÚ©C×¾©‚Ø>(¨tÉ»n`Èùø¥ÍÌìâdåw¼*ÿ îçÞ5ºjL8æg¶­]¢´ WB¹F¬sœ£‡gsdwyÅØ\…yÕÙOßv\¶}DU¼vÐO¶A=‰@•¤¬ŸÝ†c³DŠ&b«•G¼FÌZ @ÃĘYÿl4yê)q”ö¹?î²çO5×ÎÞ÷`¿²ÐiÇ€ë H‘€µ6]'°O»Ú_{Ú~2xuœ²zõñ: ÚNš“B§+u¾w¥Ñ@™cÆ%â7%–Ò^ýÁãÑYû÷ÑÔÛ„ïI×7IšõRCA[ˆéßñ ‚±ÌãÀ‚(Ì3¢%``äk&u÷9&u#;õ‚•*Üšøúñlu­ÆqÅÝÓ› Ãà=+‹ý½šãðúëNœEÉâèv´m<½îé4¾z²ÆQòk­iƒøÜþh™rð[ð§v~c6”˜rÞh¢*€÷F’¾Ù³Ò·¦µ*WëWþLàg6+ÅëÃ’>8Ž7DÏ5ùyf@°!ÖÌzP‘3"1üɨÕñ™¯’[0}t&9øw³iƒxêL%Þ _¾ßž^2ôÐó]XMjök“] Î$["~…Oû›šÞ ~Þ)Dý "´Ùñb,·î}­E~<‚¼D¯¬P?²ù§«ÍOß7‡kѶ1%·ÖÆ’I¬W=™"›Úû7…šEEÉOÊDÒ Ú…Cyû¶Ahü«´J`$’6èê×S’ ÍË2\hD!šêž—^¦³œöjµ‰Wþ´Aöû%†‡Í„ ³pú¶•$’íé‡Ñt¡€ôò9ð}X,9ÉË·†ZÁ+¯èðôp²ý ž–!ßÃP yꌡþXàœfÖá÷¿YÃÏO|¼8PÇWÝEÖ¾~d²8„0$uhŸwà¥Þ (+‘+$ÈHŽN•7lüΘvÿ{¾åüG~áië.wÊaÊ× ¢GêDä:¯:u5×ó¼ù>Ž#8:nr³t§‡ïxf¿U@¾JNÔír·VÑGÌ´œ§>!'ø©Îc4Î!yÙåêœæ,³9˜§˜ÕÔæ]‰.{2• êcÜ,_êzZ¦åºQðò?,áILa¾oÐuÿßp0Äz/BnRaUdÎü=+>Ëõýõ²92,äÎ5äÅ|`.}³mB´¼Õ0(ãx! VSÞ—«ÎTaÉ*7uG®|MD¯/¡üX¨ã;‹#ŧ},²3³úQ¦:;Ñ`Ñ"ÉOm׬ g»Awb3ìrëJz‹ȈCNíyÔ˜! ÉP€ˆ|\‡¨:W]þ¹” ìr ò'ìSéIYðU7ºm9†ˆ$µ!§3fû}q×ïߥb<év¢È'Ú&§®²ý&¸!̯¶óhwËC‚…€ÅØ·8•œëëgÅ¢‹®j_Ûùš[«»žKj-ÃéÉî|qLÎ?H7{¾à® 6ª0N4Q}í,JLîö|ñËk£òâ²,Wd ¶í¯ÊfÅä¨Ê/›Ê¹þýµ ˜ûç¬dbJ‰£ò¶)9I_cÏ<ÄóX Jk ÇeNÎÛLqhKªÍ÷î‚'›¼'¢5j¿•Qèñ™Òÿ&žÊÔÚÏeˆ~Y4 vþY zÏâØàÖ yl+91×½‹6z/Š3X!¨c³¬~À²ÔèŠÌÂÕáþþ}r¼áZXvYkÓhb ÿI;°÷¥x˜gÊÔàŽ#Ö謇|ÿ+´Oð {»˜æ„ð)LúýsŒ_w_YëÏ^T„n”‚z9`L_îénÄëYùón¤7æc׬ÎÏÁZè#–(pW˜ƒ_“ÁDLU¨ …Hvœ›çô+—2¿dð&ù*+Y4} [ëËTÕ8Q¶•Àº‹ B«ÆJbä#?ÍŠýˆ†DŒÊÞó¿ðhj¥–álm*à™/\DMíó¼ÌQo `Qæ´Oƒ'¶ôIfÈsx¹~ÿ×C+PoMñpU ½ajÕ`x®ýÔƒ__H¨pŽ­Ü ðo1?K™m^r*þñ~Ú!¡§ÊÐ!2®§q¼c*˜ó˜›¨ :ôöN2·†nƒ6Àñé%ö@ÒÚ×2Oí»‹óø¶A¶jâÖ¥Óm­ÔãӀغq¤dµº¸hYµ5À°=ËÒ~63“\PïçpèÙà%ðü7ª¯oÒnÈÇÂxuvVð]΃bκáëR;‹«ž$±?@ˆ úr˜ÌM{ƒ&‚/zBÌðàʧ‘=Ooþ=ËA#|Ó—×ÐÅÊÈ’¨k–ã\Nç¹ÒÖ%ð\vå@>Çádïdµ$ÓØ²):ª»àw˱E'•œ °Xç{ýýzä ÂBìcAFäD?™B<§¬{©V/Ö]¥F.¯¹™j1ñÓ±Gãá‡ÇÉÍ[­ó*Zd¾&&pïÇ‘A¶A:Žù¶’CDô®f2Tª‘”•É,{¦~t+”ÐÐЦ¾‡jw*u½'MG›þn ‡@÷6@8åYJ‹ú]ƲP£1¶FU ñY‹ Y.×Às„6<Îa>I•ÿ–¯™<ÿ¹â®§‘(&•hˆp'ÕJË‘!ç«péêíÑ( /FÑ›üïòÑa…+žÆ3ûð‘iÐDM혷&Ÿ¦Ï¡oÒÕ›Ÿ>"HëWcÞGk•u™ ß;-Ù—÷GH@‹~§×†êïMªåÓêÓ¶ùõŒ‡(ÌBe<|ŽÕÆ6ƒ¶ÝK“VhB/„l8²ó)»G!ùK˜àIÝ%¬J ¡ØßÁF†ii}"¢¡8%l žö¤™?Ô+~–¦ÆWs˜ÀÖ v" gö[pËËËw'vPþ¹#…b^Ë(ÿ%¬O-@lÄÌØËØõ£“aÊ俉w«ºhÙ¬XïÇËþy-ÃX½…õja>¦õáÛrÈŸ|U=‹×_Gòš¶`nQ黢Á]Áõ¦c”¾C\—qÓ“ZßjΡ;¨¢\w5PÔt¼½3Xõ,uÉgšuÕýè2Ï "Ë &¥’~ ,¦•SŒ€Qöo! Œaccr=0‰áÀîáЩPÉËwîs„üÌH«K„¤â £5X<¨7Û¿§ßʦÌ^ôϨÓânšÜZF§¬¡aú†‡ö»o3™1q±ÔB¹»‡-®dªÝ"žZ'a¬Œ“æ"{ÄãÜ“£ÙøE§ù99%CQ{¯WòäÁ.—ÿM°tsc<¯ûìÐ;“Ö¼ª%²é ,Äë’×þ²5ö˜k÷Pqæ&”Ǭ€Ð¸yaCblê‹ç-áJí.GñîNž" ò7>Ðõ­¯»t!ûïgζ¹#÷Ù‚]Œ¦I2!LÅÀ w­¡²Íш¡ƒDÚþû14Ð/{ÍôrÏñƒÝ= ¶P ˜¹OÜäúèìZ'î±àÕ-ôãºõ]‚?©ËX¾nHÆÛÀ½=¦D§Ð¼lû6ðÝDþ¤Ú(ʦ~BdêŠL ög0pС8žÊÒj "Ržk7Ž"›áÕÒAl7~H'‰˜Þº?'ê"›ÂC~`|‰‰Û¯Àm¨ ògîg Ô~î¾ÑL×8±ƒÉÄ㌧׉Öè}TΖ“&Êë<`Az ì8ºJdÒÛ‰mÂ?™þâZXþ_©å0?åQbM9yucû´”6Û2£ªÇ¥ä…A/•†Â…µVÄ¢j¶ V$Y±ºÀÖ|· ;lO¥AúŒ¼,ž\ôAj8µn°:ëÔï›XñÅæ6ö.ÂXÈ0êÍ’f»m)CãÝšÀ¼}6ƒpsu„£u’"zœQ1Í‘")3´Ø¿JóK“&ª½FÎÜž&]j<™PÃ_}O/BÆ­ô`ãœÍ4Qa¯¯P’­ÍÆßÇ\7 I‚òžÆU#â›@f~gåüÝ·ý´}){,U BèÐWH6[m¬i›ýõ±ìàMêÜ2ÎõÀ€U:|Ïõ»NêÈÕyýûí_m‰Þô[ºÝ€}=ãü°ñC «ß>œdo•!}ÏJRöÜô†ï6ƒo§Ù}_ö Äs¼ò̇EþjÊQXÍjî½5˜úßLÕÿeXÍÀGî/=b}¥ûÍ#CÇk—çî¼P …»«Eí.½£|h§c X·ëgº$JYÅ„lÿUäÇ¿P ʘÜ}zçtÅÔðóÈÇöK0 ~Ö¹l…“gß Gö"»óA#_i »àÔÆ ÂaóÆÁ#w »àa|g™~&g›¾vqF#×v£¯å; wIsÓ±nÐ&5{}»nЩ<O*+Ÿ[ï}| i[åñü[]-Õeð£š)D4O‘`Ugpµk¥0äYF=ÇzüséPxØWîO×ä;Æ»±~’ˆ±ž &¬©¦ý|”_”— Ë=æë+·àÌY„ȽõÜDç´¸î*ùKàIδÃIˆ¬S‰ (Ì‹¯&_Ï”¥JÙSüý#}cƒ:`Tg¡nö)œGäEÃó&öJ£oúJmÉê•|yø®tP·&èï¿…j.ÝÇô)»C°-Aô÷úþŠÁ3ߺeÈýêõ×ÚžäõŠyk!1øž¸±ÔIU ÁÖ3Bޱ{ŽcDþ•ãî{Wc ÓBSö5 •JÝë™%)(1-lºìÃ^ļAÊŒ˜„ŽàžÜyk×¶u–U ,”œBÙÕà.ð]ñÿjÞºsVéÀe©¹xŠíøWc‘• _F²Ñêæ¹[ù<ÝcJ·èheÞa¥ðX`ÓL}¦4uvãoœøErŒd`ÅáŸbØðò2.ÝÃÍõÉkË ¯þì‰ö/^oŒˆÛ¾¤(cy:rCØ?zjgXsÏU{`.œP§Æ ŠB‹T/îÒí²¤1€f¼åà)ÞEö‰TßóSèz]jþÊ¿÷1ëýqM  §3×ëôÜ(«: f„€¸éjHRK u&–Äì³%¯Pub…9Þí[_'µ¹[:x÷@ \,[ ÔûDŸáJ§;ó‡à ©»³Ve&ž,Ö<âRsFáÿrÄÞtýaW³…Æ1Ú9¹l“r2s޵·áéX ÷еo؃ûJp‘@{*RúÃøíôCC(† 7DÀ­4Ü-s•€§\‹s Q½ÓÇëÊ3ÂN8c ²b{¯%¢©É©nŸ YzÉ-ÝëêÖR.¢éÏ=Éáü{n•>'‘–‡ Ìu_êñ¤Ì«²ÒÞ¼’ifØ#, MX FÈ!,W¨N,zŒöUP4³8—b›c¶ó=m>:ë²h¯d•S¯Z²ñytŸRq÷ !gä¼Çƒ¸Ê¯˜¢§¿>í´÷f"gË]±¾«û¹­Û¾€Ô)äzÍê¬ENÄq¯ðOò(c¦ÑÖ.j­ËJK7Óì›)úc‡$÷#!»-àVAÒ¥ì-Ø,:J¦)!ÁWo#È‚¯R‘áÌð8RUݹõ,‘BKm³CÝÕ]’‚C‚¡z; VëéàL7âî.³Fµz¬Õ³þDJ§ÜÃ4uVcÞà{Û³02Xµ ”fâ©×1tD:cÆäBÏôŽëß’–6XÕM2¹J¶ìà/Ÿ$–ׯY®$¤.“Xÿ©˜N—!½-ºGχf´¸;ˆÍ£ú\†¾=%î%£9<ˆ¿’Ñ6ÕõH’ôüuDø•Õ WŽ.:¸y<ÕÕŒ/w™u+}¼ÓÎÚAÍõàVr–‡È®#>æ™+E­Tw·ÄÚÙÊTE5ëýSŸV/3cÖûМ}" *Ã5§FY,vígjWªg½ˆyØ›†y>s‚ަmå¨éORAàí²¹ˆÂ>Á§v´åFoJ4"Tl‹ÏÍLó{Ò©j?dèÞqÒÒÙXƒõbQýlÛZƒ”Ö`:hhPçZd%¢ð‡Û[Bò 3Jo0%íܸ\²œ"f ÃRôœ¹éÒÿ[ ð;;ÙÌ{L“ÖD¼ÕÖí[¾sj™\åˆ ñ‘ v7Ñ'W¬LZã²B£ð FÉ…-O’GÅÙ Ñ‹ŠalA¹_ŽS6ùØ-ÈdCzßhŠèÅ^„˜r…«ÑAå#7gãJ)[ÎÿG83Tÿx{¼ˆ"Ç6·¡1àþž ôü;üÅa^ÞE?ér—¢Dä|ÜùŠYj~Нâ­—)ž!#Ð×-NÏ݇"ÞýÈ´jø ýuªÿ‹°Æ–â¶È é­þI\‚©ƒ0·ê·—ö÷†‚@ÁTðo²T_<$°At,¦Íó^îóI'”a]øA°Ü°¬zKdbfÀÖk­Dƒ)S š5½ôd(1Y±ƒù<7Ø}?é•Züƒ¡KJ¶uR}1€µ}ª,ÉàïC§öΜ¥Šýû:Us•¯g9öß[j1Ý£ø÷.ìï%Jg'H€"ƒ»Qɦ÷¿bd÷#‡Ôƒ‡pŒqë/×C¬£Û.vÀ1Žù4KùüC L‡Í¦}A)†f†6*ô€ÙŸ,s‘¨Ÿ”(ë•ö>šÏ½ÍèVžmç˜ðÄóÍì_dsøû¤{&ÅcÒöB<·T¥Ü;áf¬»›rz<¾ðQŽVnƒÖÙ4ñ_QXÓ–Bdt;y™ý[lZûSx|´£º:Š}þè!XÃUùJÜRj@¥PGD-·/ï¯Ì…k 5äLÊ@ÖÈÎõ»7Ýãtl2!À×:MûH"­§o ^µä­»Ñ‘¬ :ò/„Ïå+žA­…´Ö¼Õš î*¯§ˆ§â‡.¦/}¼ÄOYh:pô’rÝ0OÇ@üÆMÉ×LØï?vß ñÒö#`®ò·›¸ìTd:¶lËòF‹Ù¦j`3¢“³ò€XuBL/aã MýÌ-4›Z¢`kRªn T›Ç=ìÛÒ‘ãˆtìõ‹Þ$ϼ“ˆQH¼ä‚P·V®A³&ë!»¾ŸÍVdm–cþ›ý&:;Ï 8'‰®‰P6IÅA ŒÕMÜ: =>Æä oµôR€âk“WÅÊc »ïà`ô#›ÎÙz¥¥ÙúðÃì<î‰ãZãok*ÇåÜ_gñuÏy¼÷σÉ©’Iúš:¿á[_ ÏXóŒEÛ_ðÒ¿«–'.Œ&ìOÙQ]ßç¥:¶Áù[Bê!@¡XØ·<§Žâ!úŠ:”ïZÎ2·ú%È2þGF ¬{Xwª z´Ž¼ 0‹[Lñ<éÉjMÿ õ¦Å“c §wu*h 7R…ß þXèc¤r¾€V Ó‘g$i°–Òøà¤¶—ªxIvMP!hxS„ÔÅÇ-êzKt¿m·Áã®|ŽŒ¿%t·¥¨„n.t¨ði5:Ô=Ä„DÐj·€]ë3ÃM:tÝ]LÛòVßœ-°Ê“Ћ<8-—ö‘–ªr‰ ×a}fƒ;ë5ð50½,©.o¶ãE†ÀÚÓËâ^0A‚mjÁEK¼qÊD)ÿð}’eÓ—~A†Šv7‡6ƒ&¸U]²]_‚(…-ø²êûjN@€4à¼^“›~^»üS—÷³æP€iT¡ê™ÚûÐýßçpR‡~ÏDà… ÐÞLꪣ7ÁÎa>Í‹ýl,Dû°E²;~jFò”¨ÓmC™T>Ûí“VJ`©$¬ ‘êà1ÂgBŠÇÒkÔZB\.Ï!OÃ{ªýŠ–${cA:•‹#3l7éNàë ™ÑÖPć.êÉÐvi¦¤¦¢º–Bf3Ÿ¹¾w&íX´‘î°rº³~‰iCº7ÑÌæ [c¯Ô»f`#ý(ö@ëœZÀ²cÍ1²!ž>ô ö`c‘žjƒÍ6Æ-å¤`ΙýPX?`jüj\ÌgŸJÅߺrùPGeβÙS«ëÚ);.Ž”‹—în«%»†%lÏZó-©FöÌE3mør;º¨4Æs‘J—ê¥R'o Þ¡Cñ=Ê#Ã^œëIó"hßöñ”²†QÂtß™c¡Í°­™(†ß)’Ÿâ»rAkÏ<Ê÷›D­óú£÷­FîêÙë9ï Ñ®Ï§:/áUÁuw ™"Á€€–]p¼sJUvLç®gµg_ˆ*—©¿ï Ñì@sv[+6Ûþ«öé{åS>*zE–cX1ë½? ±a ¤ÕÉŽ¾ˆžòxº ´FKüÝÜÔ¾OÈô‹ÿ†‚¬Öí¥Ÿ2Ýÿ»ûCBå{77ò*Vꤸ X«ð@òb‹À½m'WX«§2¤¥c©Í.”«Û—âÅ*üÝùGÿ/ŸêE€ÏE¹zù“Xæë|x L›üñÒ\ç(“ª+/dX§âÇê §™{Ý 1çuÀ–`åp0›»nß¿{BÌ›eÉšÕúŒ¶'ŒYößmú{ZKûÞ9@¯hZ£6púFÅ«#ꉘµ® ·ŸÀ@ÂÖ–ÎN†‹ ;¶vv9‚˜¡NfÂ\è`‘òù·¶Š4¾ÿÍ%ÛqfØ>Û7!Ø)P*PaŒ»µÍ['½N¨Ó ÓæÔ(•`ßoƒ ;† –õÙq#/§llÿ%ûÅ;ë¦ð£:A¾"ˆ_>ŸŒ$Ø%- j öó­hrßÞÅïá‰=ì«ãõ‰~éwzÇçÞŸÏFæ”’qH‹y&¤pð€ŸôOâûê=X¸ãFhËiÄd%6`¹êåN”d¿’E|Aé,¸ÀŠ/"€ìý_7ƒÌ©ç†)kãÖPøž÷à|Vóšo¨PƒLGÏsW¢«€$±Þû—(ùGô ¤ †¸^¾LÕ§-r|´ [‚-ñæ5 ·#g» Ì»~¶l4B¯Xr•ÄE%©ÖKÎŒf7$›³^m°&íJýjÉÙ¿êÝ•ê_Vôœl"«EìS<• & µ3ú˜(ñgÐÿ|ñ 6æü xº«_燼‹õMMW»}d´g/Ê | Ɇú¯‹Þ¥Ø¢¼0_àüO³Æ$q®È+ôœ†ùƒ¡×¯©ðJéýóa’¸ÕŽBk.ÄyƒÇFòÛZ®e=ÚȰWÜðp[ÜÀ‘uA^~[Zé°÷·Ài"ɱËÎ.ì£lqÝ–g?LÙŠ‘ÆS‘ã.lC‹7èXº\K¢«úþ–„±vÑpD¨½« ä.ã+U=‹ôá¯ÏY*ãÐç–W5>]_~ú¸ÜÒ\1qÜ¢~r 0Øàz«>ýŒVÌÏÓ€YžêË"YaBZ]†á=1åfx:ãgô›ÎO˜—· æZ™jƒÆ¡úÕ‹§÷º‹â¯mŽf ¨j"ã©NO­ ˆâo†¿Ù–¬4ݾ=5²ä0ŠGUy ²;€RýøX>E â}¬ç>*Mè#o3aó µOkÚèåm“©K¬kÓÇã{BÛ‹{I¡F[ýïÓ–(lq£wÅfœê=Øñx?Ê¢Hf×ýR \ v:Ú1g+WÕrŸ$k!ÅH'Ì'·B‡ƒl,9i‘Õ‘[›y׈o¯_íºØACWÓèXá=&Nú.4Z¥sÉî,T03Oư%Íå ìVã–çlëq‰§Š¢6¬†œ®é£5áÞIäcí-¤W_>­æ«¹ Ú¯/PsoIô¦¶´ /‰:CÖý‘ð§úÌÛ:Úš¼=÷‰?*íÒ̯.žvñüà’¯hœÇ¨0&¤NŽÿ£:ÀÊ$·{1á:õ™ãSA_…Ïxc 7Ïê†è;TÒAUeðVùôð0T}¼a}bMûä¹$nìà#XO®ü8×—ü¶¾;š­½Û.®”þ™ï×Ý)aèËêÀIÈá© ÷WeÔ?LgnÈ‚HaãTM‡=XïÛ ¹[{ýž@ zÿÎ"ÕÜjL¹½6ûlzîÏà<—¸¸¹•*3*ü™ \UÁÿÄæîòjùMkòUC`ý5HH7ʡӣgÏ\°óåjì÷X©ûý,íÉîB¹^3  [¨l,ôw±ÃÊÙÔüŠ‹º g`dM4…1*âËXNoÿ0(lâT;Î •«­2•­…TH€ð p7ƒ™À¾jàþti±ÕrB°k™æÈp3yzÙ;?í+® Ï º9áHŽˆ9Œa@¾›†žÿÆpÃâ`{„¤º2 .¨Î‚`0 EøcEud;=6øïÖÊÝšl>þeŽ·/Ö<ÇlðZÌ&£úúf›ªQƬm÷K2ÍÖà5¿²Ò'ÄùØJ‹µRú ú³ßc 3¦˜3Þ8| /¬7Ö.BŠ ¦› &0o\}4„®ÇDæ3~Z8Xžáóµm¿#²ÉêøÍÚcV…“É€Ol'§³Àë듘€y‹¾ÉÎ\zÓŸýÏ[]ŸGà2³Êwû!ËÖO"×tt8NU¾=–5‰ÓYŒmb«=¡ ¼1lÅŠ&5¨¿¾É@~Îèo`mp¯Ãðù‘:õÅ#ÓJh°Ô èí´«”Å»Òëm™­Æ›e§X¡'¹¡¯ûµ¿q7žnzû¥ôk€ØgÄší¦r2/æ¶ÃT!h"¶P×+¢ÛÀŒgþ³Dòïtä ‘ùs½óÐ1¾ù¢‰D“på§'3:fK¼^}sð*ÞÝoý6…xjÚ$£ü6‡žÕÉ7Ö 7Û$‘^Í0vÉÇ~’[ÊÖ=ƹh[ëÒñNՠň²¦ñÞh<ó¢f­Š¸v™^**Õ2o“,–1Y];ñ—÷±ª+ýlæÝMà¦9þy00äÇñxÈdÊMñB{ø#NI2†<i•1ÿù`Jeÿh“Á¬¢IJ~¯kÅ¥kšÔäâ‰ßðÇÁˆåæT¢à$`Î:X$¿Œ¿­P¢ºþüŒGrÉœªÉt> ô3`çÃ*ZÃΛ¡±…Í[5ò×,ÖºÔÄÔ ½4X6ªwñ…ºý2ÏŒØmÈå1ï,íס¨˜üžÎ,*b-(XkëÓš*yš®Jo­‚•r>sR¤<½(ÌSìQè唸ÂûCMìs"µ~‚ŸWô‰^匫ÜOã ŽPƒîC³Kµq?Áw\Óî[hùŠ5cÍ„¼ÅåIÜ5(œ:ú)vÏgØ5"åÞtty‰k‘Në]ü‡2õ¦Àg1EÖˆ`†öfæÄ[y "z–‘¸z#Ÿ#šØ0•¹÷Ϲg°Â³s¦V5…_X¿–ÚNB÷‹—)8!^¼Uèù/%¦a6F+mLË| Iu¥áÔÈB«ù¨M𝠅i±ù¼¶…,*ùáááÐÐÚî’Sf¡£Ÿ2JYëâ©‘¼îÏ¡ÏÚ¯»Yò0€^=œUôþ„½¸Æ0WðÈ c"ŠdЛjáO‹Ò\MKëü“­§~nbDh¡Hjcè·HZ[Í'©ۯ:-°ˆHÃèPñؘþÀï×WÛæ³ÿ´ ‚N—“³…²‹óQ´<@††0‡‡8m-‰_=ç,B„ÞÝ5Ù—C…2ç 4 V<¦oÖTz GÓìOû5Ü—ÉÚ@ÔÖåeL›w/:Ê:þÖ(O ´¾“©S>wÓQ ÍæÆœjÖ¥ã2¥×n>êÀu]~/^i˸‚IÁ9 ÷u;ÈÊò¤¦æ<Ù½P2á®ooÙÀ¬<;§€ Zb²t8a-]KZKÁ/\2 0þüi !üHsD uf`úÔy±>ßÞÇSD 9ÌÊ”0ª5x”ÒhÀV-Yææ»U¼ Ÿh«þº KÌvS£9ÔÂj#õ~Ø-3Ãc‹qy,é‰A=$Ü?'†:*èr÷;ÿÏy;"7ei(§ÿduQë¹®ˆø¸Žmª-c &J{CÅ—³ˆñ ë‹ŸOÍPùHvD'ô~93,>SÂO´¬ËÁï1‘•œX°¾Â ˜mü€w<Á–ß•|ìñûwùº^ ñX2}ùš‚3›yN¡.…×ÖA-Mÿ·õ-Ÿ|ZY#€ 5£3}µ<¨’-z«Ë)YÒ ß\q 3òt“-ìZ’ëP€Ÿs‡suÛ‚h”Õ29B`ì“iŠTá-:»ÌþY$ÕÄÆT´Îû›•…Š$»ƒÙ^5:¾èÛºýbfÖT«±e^ÛmÑIZªÏ¿ÕÉäz ö7ö}‡QìtÕ spy¢Ã¢&ÂaXW‰B®ìÙYýKȸT!ŠÀòÏ`gtÕh7bWU`N¥.I+>nýÐ5&§#ö½Ç WÏÒ"ƒjÁ HëR5ÆQ¾ô(óYĆÆyñŠBRÆh#ÉLw}ˆÜÁÃH¢b ”ù„“™S>1ӢРF83'+>ãÝhŠ!Sù¶ø¯ºlªˆ*›{<»OÁø@z¼©-.ÿ­LÏ8Jl„…&ù„J¡*%ªçUÓÄAy”ÑRëîz<¶8:ßr]86×[£†NÞ þ¾õBiœPú‹MýóP<ð†ÞÉ,¬áæ‡Nÿ &Û0º‰Œx4ñ®*º1_ÖqJEUØÛ’Éz¸)ÞPÐXˆÑ_ã@Vh¿æöT/÷„:6îú$¬Vó²gˆjÊú{C 8òp¤•@„R—¹¢ûŸžFùTƒG› Z Ķù‹äL0È&Jó—Þ†ñµTißéÜò(jÖùw.§/Ï¥à1ȳds–ã¦i&:‡ ‘ãfÁq8AjAš©ÓÚ€Úly t‹qtòÐ:Xmˤ±Œ=ï“—Ìj–†eŽõðfúûÝ9­NMùvÇn÷ú“à|!¾K„?×uA²k¼aî ˜ÚêØ¬†@¿q#yƒnzüèt±74‰p#ëXF"ôm¹èo+åp˜hEvYK-ùwaK,Íœ‚€ñ3#pˆ¿·†n†ûKVÒö.¦÷nzë ˜Œ£¶4çj¢ÒµÒ4å§Ñ‰a^ÁQß¾>îºÐ’´ ±Çà}7qýYð”7Ö¿xÐ$69›ÕÑ÷ bS¶šçˆdsöEt-¯B•}Ô¯ÞéH}M",d˜8S©¤°;Vñnã©_NMÍ]̋ý›?¸¤ß%ˆ4̵æcyNAq“ŸH^)È;F!íÝo?Z^c}ÑUoÑ•Ðâ^ R„¢¶åÎHÚü8ž%¹ðš]—œìÂK ý"ýæñ›¬U²¹°ÆŽ„0™Qߒè˜#}©&ÙL¯'Ÿº- ¦`þ7;‚}óåzf²˜ ¶k*CNÐÁ=ÏÿÛ®¯*ùî¡F¾¾H(, ¶[lS·,Ÿ××NV擄AÿÈ+ͤi„ñ$Ö–¡ÅÔc+ÅÃ’Ð\XpÂÿ½þðê¦UrŒ‘(X2ˆd% ïÈû"€êSœ:ƒ¸V땤ðõ©’Jų×ü1‰ô"¨X”]fí-ÍÉmí‘ö§" åK8<ÃÓLÖJ)KòÙ=† Ò2™/áüѬ1 0›Á§ð.Æ‹gu”,f{ŒÿüePç@ïæåra9-覗RdŒ©¤Äi<Žk”ž¤`jàÄ%]$le U €ù–ú›Ñà`øÚøL ýˉððîîîé©yö83;{çŽÀ-$ô»ÙS‡?õw…E)g>[4’E/@H ¼H”5õE¡ŸTà 4ØÐk$ÈoÉ?y£ƒißîÊõ«‡Ÿ 3D+âÝ|Y@E$R-+ ûöÿÍ6Mc~QÕ°²„MVýH&§1Yl=¨†/բЕ6€4: Rx]Œ¾mÐ’ç:krØB8ÈóË M…¿ šš\_†pÝš˜GVG^­‰ì¦iyë׹۾¬²0Šû}Ùà ÄIãŽÏ]XÓXˆlù½ žïí P“Þ<È ÓõÃÍ8"q%d'—ú“â¤IÔøM"6šÅÔQúú˜HB,?†#'J |î{e쮨–†ÊIJ͉–‹ªgº7!I ‹¢“Œ)×r}oõ>D‘¿°™088~Tþ ïêû2³sÍ4z,×¼N7ÙrI­p,Gb¥gÆÿœSö,£<¢º®^õ®2+MLN·¥¼œ«óg0u;”£Ëî“á/P¢ãª4^×øèh»ófN}]ìz©|w3an½†ˆû±ò?û²ë ìËV €!?ÊÃjc–á±6_rƒ‰gvÔËëA@üxWó5‰hì¶Hqv‰Ü‡V]5!ß^¡‚Æ—Ó—“C„4.µÇ-Õ8B4±¢Y>_ÛÖ<­ÂÀ:­öÍ“Ë[7×/âRµØ-Kþc’´ª­´í.Âb h`góuW êZ¾î™PŽ×h×°jG¨Úù¼ç•“ç¦jõ4 ™DrÒ…¨­È0 )áâC¡$©J÷ÿ{!¨‡l,€Ïâú²íG„(wä ¶‚¬,f†/›gйq1hè{¥kÿ³±^¦?ºÙ(k ³aÙCqë~5kÝU} Pˆ+Ç¡×!ðzÜö¼©çØÜD‹oóþú)RËÍtg>[~k”Ù¸ÒZ»ê_í‡ ^$úhz·ÚŒ&«º$Ä|è {v*ösà5ç÷:)¼Z+ó…”ä2}×Òxº‰…Þ|SûaÆ”mÛY‡bn“Ó€Ùþwÿ(ÁN» q¹½‘J?·%{’«ð…èy[N'ðÆÇ›ÎQA¡w1!¨¯$cü޼TÊxvø9> ÏÔÓôdq€><^ÿȦôŽöoÕwšlrd"qûl¤ß”P`k}ðlAq3˜Eàå̘4äÍX°ãKò|wQ­~±PÁè77vÄ0®³RL+`‘}o}+ÈLùª.üïËwGVíîÈ!€Ý€ÃÆ? ÉaäˆæöùÜÓ–Õå»*xìDZ"Àf· Ôýº¨v?UG0gŒ Ly‘]ûzu~¸˜/‰U_Ca)“Ó8îcag5Êæ"S(ð".Üm<`;Ê‚ ã¾’äÁbºÙ°l…Õ<c†œÍƒö [Jûkú­ßŒ5ÊuÝ*oÚ†|FuzT‡Ä­FÔîA¶Ý¹fTG¨Îº?â)ókêrãkð6V„õ§ï_ggÚ/1ÀåÈžýxufÚï±qúaÒüº¨RƒôÉôƲžfdŸ"hæ3~>²Ö~ƒGýó/‰áÚwÑZWÆ&(êB©À{N8çÁÑÒ(;£& G† áâØ:»bï[Ê—]·daWãF‘[Öº4<^J†ï~~¥f'ÿpÊ™é®óÃõ&©ÚKÆR‡=XI|q Î$þ^MÎ޾Ï2ĶfÞÕö«ÐH‘'ˆí«-Z :›mY|Ÿ®®OMzp8¼5ïÞþ?O!ºEê;²ò%ºZã‘%˨Mi•M¡Ì<=Êr´º¬–-ÇpÐÂLLp Z0ß"ik…‡ûC¿y/öO–G²Í›ÔÑ¢›5Œý²HùÚ)‹Î”f3oL”Ü9¯¥ËèåÚ^ÎÞüT|“¬BÆZu¹KÂQP2úr¼¾v}.àž û¡‰Ï6aÈÌ©RÄØÔÍÑÿ˜ÉYÏ\öv¤úÂ|*,ó!R×½žlº8÷§äí–ZEV/þÐwçNlÖª«åíØ>•1Ô·û]SÖ4{§ƒVŸŠ„,È}çϦ¤ÿEUÍuH&-DÐdÆbz†jF7c;cÑÙ˜ååü4)tÀ=à_+`®39ÄÛ‹¡c¢CŸ`êåQ0½ë*·q³Ý~…Oä ‹*G@ýß#Àòss]Ù[Ié aôï‹HŒMÌ !Þzž–|™î÷wû'g—Vd–.Dü‹ÒŠ )pÒºkVš ð¸m¶]*qšh5šspо8ÈFB‘¿\'±”°CTû g@Ы¯?wý‹¯k7´è3©Æ×ö‡ÔŸ®VZT“¼ü¶ùçÞ杻€³Þ“鿾rï¦ÛÝ„òƒ ¤É ð€!¾F»¼A§ª¥~&ïêçÕ‹½[Ș ¯cúô²~cÍ,f ­‰ßh× r½Ù=¹ý\Ê>í™Z«M0FœäP!É~z,e®½Øfß®6Ùüöx»n2#õÿ«Ÿzhñ{ˆZcãœpþjÛèö¬«ñíÀu÷PG!o`=e]°éÈm±ø³nV'l¼ˆç0¼³ûVWµlk.„ìTÁów{SÁÐ÷$EÙPwr ¬uþ)ÕÛR{°Ñ©Þn¼ÙÞùþݬ8K•‰tˆ¼Ò¡™œ¿¹|oÂylG ÚÚ­&Ë}ho|ícJ8øÄ«PÂè— T3ðÛDLª‰î+ §’‡ªø:_\¡_¶ky)ÿËëïj€Ó÷ÙRu™µÎ X“í=ØÏ^ôèèÔ—k´gˆÞí/šuKýÒgÒÐF µ?¨˜­dUùÕõÆsæùõyÛ£€Ž0R©± ¼Þœþíä<ÕÚšÞþ…ƒo:êÑà?R>£*Ó,#Ìþhzbð7æ;R¶Y NŽÏü¥A‡ú6¨Ðo¢¥80¬2æTÊÕäç Ž¦QçWO47150™ìÁG¹Ä÷«wÚwâ‚P—N,Áv-Gl72=ÉPçT êú¤út¾<µY\Î3ûç|vg·¾ýù`Ëx¢\*6"ÝŒ §âg|Y«Wò#b†ãí$K4ÆŠŠÕ»R“î/úÌž,:ˆäí¢ºJ1”Á.Ý6>a™Áº =8^Xü^߯›Žc$+§÷!öTyî|lY—¢Ø³1=ïã¶.Ö|1Ð…f%—äËËK.‚À Íø£]ðD`F\1,{¾,ni~mÉP2:V± gÌæw´¤YSv ~ÊÙ¡z-Zc„’ÕF`FèfÐÈÝ ‡¾ÉäÉä*€÷|}¡“ãùìÙïjW©ü~T@?F¤°ÙyüÖ¨|tá„ x‰öôXêg$Àyœ5ôÈñùÕF`! ‡ðÁ9;X†œO5R¹»¡™aíÄ#À½ÌNƒÌÛøç?ÏY„ª•²#c5î`ɘ8˜ æJ}åÊÑ]r(ü¸>’|ÂfèÉ]I|ΖÎ'_o\Qþ-… D+y#¿ÈÛ iË MúåãC¼lf‰Õq/ äëÇÔzWS­÷¿™¶tvª§Ðý_j+¯é‚TÂÜ ýXþÆ“ù†>ŠªËÃu@ÉùkP¿ày{Ðéý>}›H¾•Çlû×ó'ßpÛ <– Ø/úý‘Ó3?t½sšÿ°†|`þw°Üô»mÛ 0žõ+Šc¾,UD'¿R£ôF¼#£$j^&ÓÃUd¿‘» vª—Û¼LæÝðÜÎ#K[ê֦̻·ß$Uë†Î¢—0cD)ÿ:ÛSh·bœ©S†þ4#¾¬§PWE_\\\˜îWÌemüoÈEWFw?â\íVÿ†ÒýõHxŸó4Ûà:{G›68{ç€Gx†y„\†ŠápÞÚ\Ÿy[ÙB5¼ÖŠÍÔñÊ} ŠöEc¶Â÷ðï¶Èí‚íáþ—Z|n¾Cìr³:ŠÂ`|`©.–O߆G4Ì:=ô›\·#’›ê±Ü2²‰žuÊ5Îߌ#-2Ä•Jb88€˜% à t á51j}8 9„J+lu*š`2ùX kÚ5エ-쉧‚qªæµ°S…–U~‰jR¥e£âôA¦†ð!Q¡_µk,UË„†Ü­¸/kÇWl –ö«j~ðáÉænð(®z¯ÚÖ;"?ܹñ¦9Êy3{lXZ(è톶xìh]ƒùÊ!BÑ™€®¼R¼‡¿›È%òjåÞÖ§¢ÖdaÒ*3±˜×؆«Év:³«Çgc¶×®V­¿6“QØÌ¬§l¢;Vm>jeáp¦«ý¯ç‡nʱ»–h{7ØBšÛ4ºªØ°‡‚h𿑘€Äƒ–d]ÖBþn_⟳?à1³O ÔñwG4hœƒ`9Û9ÄYv³Ž7lÜ©N‚Ùž5÷õ¿ ƒ]¸²f)H‹¢ÿ/òc-Ë`¸IÍáÿæJžÂµ“Ø£—"¶E\®l:âüZ8E“3_‚)0—¥ÂÐ'ÙíyJh{ZAæ“Âçý0Á+«&¬º1,TÆb¡Ø.ˆ¡¨©ÇøÙ ¿r%ô{O_Éxd5¡<•/y$ O l4õ9á9l ÂpÐXèoËb²rÀgù Ä41ƒú}ìr‹®}Z­E6S6_Yb†ÂÅ› eJ¿r\Ú'Tk˜:[‡3c[\äß„òh1µ³{/Jô¯8™7¨ÞÏ6ieöI€Œ ”åV`ø/%­¹ý÷6Çx"ö¿ÉÎ]nd‚´U*±y#wpô,¹( Ú@G¯Å7Ø HñŽfN9ä( »ˆ¬™ýÖªÓV‚ÿ“™©®Åwô.waÌWmð;1…îg³"îà)F>›öm³Ç¸¡@\DÍv‰ì¥~D±½­.q8… u%cV†Ø7W³ óíŠ"òwmøg?Œâ)±Ûô»*è6£ÐÑ–{ˆ™=h\—5ùâ]:éiFŽ’Äkÿs=¡`dœ?<ˆ}ŠBܘŸ#óKXä§DEG?‚Ê)ìØÏTYëöiÿRòÎSbÓ º%è ‘ÚX¯˜SXïôã‡+÷v²±tÕómñgâþä. ±J×F†‰Z6­¢1‡©â¹ó^“".o˜Gq׿ ˆ$Ê•¾d/iò^#»%óâB“VWj‰ÁÕ¯Ú9 ª·³JÈq¼º„’m áNß°’3U‡9­m‡™~ÞTS\„üŽúÔÈR±ý»”ýC ïjpT‰]¹+8ÎæOó0šUÜÝðf½Zÿh¢+P¡Bs@üÇ|aÿM'÷õ(ÍŒ‰m'©ër¿¹Ø¨f{ªhÚ¢+ „Ei‘F¾cbÜÃô¬g°§ºUø|?iF÷;Ð'fœPEÚ{nÌûf x28’!ãj8#±Zžºø©z‡c‚ëûÚ=bYÀXä9bÆÔµ£‹V ÚÕ‹‹(\ ÖW¯s¿ßž®*u‰EËsh‡ÖÕ¨TÌû q#ï±ñxà^\´/®|}˜x8:îR c‘cŸˆT¬ZµjªFꃨ‰. ¿àŒ BøLj®‰¥(Ä^O¥žg4´QÙ³8¿rrs˳%ÙÂ\? ‚)ec”þƒ?e¢ÛGØÕjÎ;÷sÔj ˜fóâs›Ì9UÍCsrIjÅË[ª¦Ca¢ÍöîkÈõZAn(7€XëÃÌ“]™Ãsn†Z>41á̸&‹ÖŠ–/öõ:¡Áü{ÚšÖ•Gç×ÒÔHJC9ÖîPú“—é±~þêô]U «Üx ^[.b᪑¾A[ÕëÜnÄ•¹d „è ‰t›ª)ù¼6°’Äóþkf~c.¸Ç7qº¿lM‡²¡ŽnÖØL× ‰ìt‡ÝBÉÆØ%7ë+Œ Y#}TÙFôå·¿€&¨¢¨ýJs¯v³{¨2eh©À]jAÑ/ÃVù¿««ö°âÿÃ8éO€ðTÿà÷»’çÎYÁÛGŠ€ÿàk“—«5 Ø_}’úl'ž9ˆû$M·6댞>Ãå%‘àñá¿Ê"IýSÀ}°à_WP?þ|}@ZˆÈ‰5aI©wE_çpŽ?´œdëÿ°Ð–Ëÿ÷¥n̳,f—Õá•A_‹©ð`v ×8³z=̤e‰&œy³±ñ¦ ý…Hòf[•»ûü[fëäuñ¸i¤H§8qžkœ¹"a!ÊðÝ‹…T²i›§±…FúøøëätÉ[kÚÛgÂÿô,L¾ø– 7ëv÷ß9¿bà*«É$ýYì¿)Ë¡ñϳ°ÿÄäq想vü8AÔò?ÅD–—gw½ëýäDüL¾Óès”¹ ÿOœÄŒVƈ[gïZ¶/¿cH !non ÁSþ{UŸO¨»8œ­¥„¹8œRÅ„â¦7 Ç2 Æ…ˆÙžu¼\SÏü·žÚ8g;Ób„“8&r³(Q Øg„Ùò›k×›eŠãž>d³Ù¢ôj‚Ž0~ú“O‹·n†YbDߦgO™‡/}m-C"JÛÐR?ýOž—:äÈî'ÓæC%’±ÀøÅCò@Ýœzjm•nÎ]™ó«ÿ?”t4Þøæåc‡—««ZD©•±Sž>ìØ¦«õ‹Žy6 ãÇ­—À~¦ó¤…º4‘xXDì)þjNGæ©FÌv~YqÔŸaqI¡Ž‡'ÂÜ"J%§—ж»šíRÅ¿´J3ýOâ*þÑ `[wÚÚ“-ƒ¸¿„UlܦÅ×¢üö#ò.Q:Wÿ¬ù¾);Ž‚(˾© ª˜û•úu}u¯cG+—ö«kF]Þ«ª½ €£)FŸ¹ŒKÆCÝ„X@:ãŸ×öŒS;²ž<~7ÇMFJ¹ø|ŒïJ àhyQn*²ª˜?7—ÒÈœkôT#P¤~“ÎñàÅ(Åçôäqú.É_-µE”4Iq˜^3fYÊþÜ=VÊ51Q¡¸“\]•ú-8p^˜)¥Â`^MñcÔ DüÎ@mçæoÜ!1s(ð&пhâïn÷”â‡øûfÝYÏÿ9à&™ÞáYFPÀO9Èê§–ò'-¼ˆ>bûýû^ÿŠùÎ~NôL5srçJÚM‚ŽIÄ$éëÙ&âU‚WžãTó;ê]àè “)qøO g°Í ~â6 ¹šh¹Ç2M;©_…ÍDlÞx•Ô#š5»©‰lV„còƒµûú½bOà™âáh|lÄÈû6rG$mUM–2°,Ð:?°ÊtW,ÿºDÿ™Á ñ"j¥°•'O g`kYâo1Ç:¶U¥ ù×*3=Ȉâ)ógq‹‹§ôÃXÕË ÊWâÃcÆ/~±é¨RÂèçºtèÒ!¥èÓ¬±~–<—Á¢Œ–ÍÆ+ÿ”ú_‡ðÝ•@pÕËöa° ¥<|ÈFœÖfkŒïĬI'"sÛIXïTù}uãOÙeš²ì¢z™5q‹ÔäHo'î´© ;åS&÷ÓwH*KC‘œ`ÔfVwîÇ ÁÇÊWíW9(CÚ?|Ø4ÂMÓä$fßK¢3œ—•XP‰9Wx›K”»­î/¿Ã`ŸFõúj+ê¯Ç! x;×üÑÈ{ò,1·m5»©<)§ÂñÞ7šŽQŒÃë#°IZPóš«p‡@µ·\ÍÐ8Yƒxi×Ò]CÈ §3{jHµ¥lqñQå{oá¸V¢Ò‡57È’øÁ¶*þ&õ5Ùír°Ø ÇrK¸ª²Mñ{²_Z,^[‰Ð‹‡Z£?MÝ4®ü×Ùhô*“J# lˆ–ªûUšôìSe•މìG³#Frç`0é&ê!dKFé†}qäS?!Ó\f¬¿M‘?9û*ÌüÂ5c CwñJ?¼Xl•^0=캮ûü¾h„M³ïKÓ+#õf5;Þzöhˆ@€yº?²`g§÷ òš;/œT ^Ê!—þ“óg;òì¶<‰Òþ7bW}p÷¢Ì¾~â|é?ÏM´ÿ!Y̤¤þ(¶ŽöyÞã[W»½>ðMü2–íâz£$üǧƒJ`Œ3OÅgÿ‡Ã˜}, ÜƒÐ¾¹P£¹c¤ÿ!1g¾2ÁíxêÁØDj^«Å×#`WJòþeËËcn4”årÿ{xNbÇúD¿¦›Ñ!˜ôÄE?½£ÿAñŽ>«>‡SiïëZût˜Ÿ£ê@ÚÔa›[¼*!m³{€ÝæS`ó;)loŸëº^›0ê«hr Ë« oÖ(á2Q•pydrô²8í}.†+êK+u­ï ée³Á»Ð¾$ ʇ‹j)d »ÜX¼Ý˜Á‘luñúáºu 4R¨JµÖ®ÊU\†Sï} æ£Öb§9Þ¡],Éà[¤<@l²‹êÇ‘…ÉÐ4*òšËj‘§&‰UØY í6öUÌøØ¹°aÂö« ¸ßäq³Q îUFg…ÛAUýï˜Ò½r-­þf2†ç}·ð­}]eTðÈ7ŠŽ.Üè~ù…*«NE,ÑM/ÄîgüøLÉ¡û3ÑÎê-ßàçÏøÂÛœš™ñÅ,z^¿å(têå|^$,šzrÿ÷ÿx×b_â~&€ )£X•è~´B­Ñ©„¥Ç®0Æl?‚ùDÌ%p6ÞÔ:ý¨=¶wl“WîbR)J¸z’ã#"£G7¤^ ~C€Rr*Î<6 gÏ[(I]*Ÿû­­Ñæ"aƒ'‡^@Õ/0¬xÙØlcrð5®ìQ6s …ïÖú8Ü3÷6ñ›òÇè Œ@w%„Sß¹„„ÌJ—÷¨Á¸_ ¥º¦QŽR^Å-'^] ¨bOëtâ%/'OöÄì=2n«Uó7ÈCrR÷˜V„`½¼3<'¯!hvލU硈Նz<ø'‰“} Ôæ1§ãÑàuagû‰ÊSÁf„“× gJØK—7Pî„N—¬IYI—¿qÓŽ¼Y´‰p3¨&"(þŸü”¦sÐÞUÚ†¹Uk_,ï¥äÝ¿Ý;w"™gt&ÿŽ2C¯W <ƒŠuiörÁÉÐIUUæ~žñÊÝ.¥Ùˆ´¢ŒêfÛØpÔQ²£…ÏÛAÀîaHÖ»‘²LßÙª¨ÿ¥L ¤BûyÇÞ¹<Á'0v®Üú˜,'±›9{í³ôƒ"*G»²5šË©ÿkép°(’6w.ЪÓQ'Ò[5|%¨RpÚápÄÏ;_¯Pðb¸>âw¢²{Ý÷Û±¯•¬xú5êדÏvø{ÅÝÒ&±|ôc ž ·¿aˆ6pä;¨˜àMy•b Íw6C[ QØ´ò š7Ù3%n2,ÞÙó'K`)c¯²ùøáTy¹t ¥ÑiqŹ w÷Ž@÷M‰¨TÀ³óV0b¶ÐÜê¬Oa&œ¤DófWòmKÒo;Âaè®h¿ƒ—Í¥çŒ?¥Û¢gu Žf‚>è½¾Ð{.¥º‘}T×üªÝA^)Uir©æO&þj‹ò6Úð  #UµïN n§?8q¤±§Æ7μ«!Œ!Y!Ðöô{Õfš–€2òSJc±WÅ*e*ô«ú ®*Èñ— ‡.­ó7ˆ%)ý lþoK¶æ9·JªXP žÎ›^ÌŸºÉû,"U“ ŠWe¿”–cEcFù¢f”ê Š³ˆÖ½O°ÓÑÒBÚa¢½\¸òÿ¤tDï ÍI þc¯ë—«]=í]ÏÚ‘•ýo„ÍBK­TI~B2Æÿ~Ô GZ3Û^&Œ¸{]=ËÂïÊz@%Ü—T+¡=Ø“ø¡;ÃË¥ —$ëlÉÔ;hÖÕñyÃ=º]¢ "þ‚—Œ¦';”ÑØ@ßI๲ðRWe­ ø®T?¹Ñ÷ÑÆÏ_Au^¬GPÚ“[UÁ<—*8^Ál­Ÿ7éO>«R›e·Ö¯“w0´¢¦€ÅäÐÐÃÖJ+­ÞÔ£+©]sªºÓvô„Ð>÷æ\²äÚzn*d@zg˜;è' ã? –—mµEPUmêÚ’[ê þÆÔüò^rÔ¶}aŠkÚù¦ñû¡ ¶qg-Íû w=[ÚÓ.=Û¼*šR¹À¶õ&²ÓyPÀkYTR¾¡e©6SgšÖ–ô6Ò¾þ±õ­ˆ¬4G‹z'hf·MƒSÌ\«†/yCÑ8„œÛWƒ•íÖ^ry-«æ¸¥š´]ÝE¿@i ¯-ëÓŠYXõA ‚øæ”€ðCœQ”x<äa>G#šb€Á¦[—î6væ¶ê/‹ÇœTâŽXÎáhßý+6ôY )duÏ柗×N’;¸0Û0…Ì ÃgÆ Ö]\ékà,¿©Üa)FÔTÔ[ÉѪ_⌖ÄŸËß¼˜u¦f¿G!Ý å~BèHÉïÛ‰C¦Wt«åq‹¶sÆË|Yš³YIT¬{ðe­;¢ßšŽÒï–Ù˜òkÖešÖ_ÌÂ`Z¼'›W…0yú |0~#⦃4j/°•ÿ£Ê&S}ÓJD¤€.£}¢»$P#8C ¡ — ¢êÂÍK]m-“cî7!`kkK…r”z«ä¿~'!@À³ŠThïìÒŠä €ôE“¥6=Q'—¯cwEï¹$þì{jêÇBî§eC9/æõ‹Þó„ñÄ«(­¦Æº+êìSIn¤ï¨þ­RMÞ,“·éË «Œ‘P ¹ÂRFúN ºN™E?={»Ý`c‘¬±u#±}Ç68›'& ·IÀY*7™§ZuYHNêƒÈæŠÓÜ›×LÈVâªcsk,p¢'5áhÞ% ?ðåÐöjÕå?º´µ´ša¶j:$û•_e‹O½;2ˆ6(*õOøûõÅñxù0Ùl;N’À]ÓBüQœAíºùKÇŸêѱHKl¹JQ~nœôó›Þ,B<ÈËzWI,3žüài'-ãõ‰™{çù"º×µphÛ†gE¼ÆM¹ÔëñÏ-*ïÓÉ ,:y3é 1ΘÍÙôe¯‰}âF`Àð%¬:5öü¹¦ ö.¬ùžïh ha8tøZßåßâ¨rÁ¢I€¡ë•°¿§ Fy~4+8ÛmÃT&¨Í“˜mpðõO´xVs4+Íê¼y»ÉŠ!fØ|òQÅÎUô¿¡Y°£ûØòzDˆw 3Û·ÉØ¬÷·ôeäÐÞÂ,ÈøuÃCà Õ·j>lžV—á •“Á7¹lEˆr‘>65_ †1¤ Nª¢öc¤„KˆbÕ‹RøkkÚ0÷ XT×1{óPI¬9ûaYüzG•5ŠÞ^ë5éû’/ñÕÓÚ®ôêÊÀ¶¢ˆlƒâÄõlp-æÆrÜÉü8”µÏ”5¤gqô1›[žŽ<®¦u$ýžÅd"ýò9aæçÆ£úÓsùW°¬ýƒžEκcs®~bѳ7Éþi²,1A978Ðæ¿%Sÿ0Úѯ6¯)<€È4³~¸P1B ¬Fß$Ql'ûòqÈc.ªüvŸ«w‡Õ¹)Wp£Ò”šYYüh±+vh ¤Â )»½Eìå¦WÌëÐ5ö,(¸dU‘þ±—iÞM å«Ð{WŸfëÓx~ Uw9•1²’)- þgngYˆ=–æ¢NÑd‰¢"†I0qÇb†‡Ó…>‹f²1GÔ}ÝlþR˜~ÈíٟͨƒümÁ„y³xSF%NÁJ±•|¿|SÍÖä<ÎÓÜ/Nr|©âoÚ–óªÊÚÔuB<5V6­ÕõªA–QŒ·’\eíµŒ™eï¯)3]߈o† ?ZÖçñØò0¯Éþ¼1q«Æ5uúòyç½Ýa ÌYp•(ïö&ðçAk¨ÕÜ’aÿîÌ[osÃG:G¼µMXZë´¥]â&¾tþl# D9δÅV&f„¾Ë¾ä®©P—$:ïÉqô–oÉrCL‰X‹$þõÊŽ•¹8\ xÌÏÄ'Â(?;5üŽøÌ™nù¶Î°_|‹n~~H p$û´ ÿúY|³ï¤õÖV›ÛC(½=xä86c—ã.7ÿPqb†êk“«¾‰û cðøäµÇöašk¦N×äfK?„“Kãºù¤¾æ@2D„/×â\òÒ¤¿…”oH ì1T€ÎÑZÆ3ý»žŒ Ï(ßíØxyËrÕwçA=†ñg+®`ÊqŽ(qµ(ŠÔQCKI?lçr¬¯ÜM?‡ ~Ðcim^Ëbìm´ËÌÙ³K…Dy™a÷íŸXôP1ÆÑ?ï<U·=Ì_7ndvrT|£xUþxXÙXj‚õd’_@ûˆ”²ñ´YÕ!ûÁ¥ž\6jŽ Wƒ»IolgYOÁá/ÄÝmZ’„»¥u~•ÑP˜¯´#³µðÏalŸï[þµË¾É8ð†îAg¬=Ù@$R …]5Iï5âϾÿœ#öjàÈ45K¯É D¤oáÞ@N¢•Ìœóœ,cС àÃ'îÿC$k?1ó6t{å`cžU¬A¸¨Ð°On¾û3¼þ4‘PØ…ß)-’Ý]úÍúw”dña~¬ZÏzÙ’#Ñ1Š[N@ÍÀÉèÝ>6Ž?›|$_Ó}]È;«Â"I„D}ñ:IšË›hO·‹¤C×–—3FÈõ3î×X¹}ênÌw8nθ:9>‚0¥‚º¬¾ð4Ó¼t¯÷VCîÏÛGß¿êú–y>b+TJg¿;æxfHÐÞ'7r”™´YrÿÌé óŠn[²~j²m!£7¸ fÙË‚w2´KÍ&õ7*å^Šß`«9zïqẓÈ~Ð;eb „õ‚2ÈfHä‘w\ÊÝÄãÝ…ÿpˆÙÃÿè}S™èÌ×î•#—ãŠêyª—½U–.? ~žuJò‘ßrôüPͻ߬1üqî?¯?&¼/ÆßÏŽW·í)·Ë‹Áeïl%s«ˆÓ=tòþò uVœ°4 *žb³“‡‰Bã,sÞN(¾ÎÉ'.\q…æÐ_¬^üL² .«M@Lö[&¿Q4Ú¸Ï(Ùûy$=fr\îOŠ e¶Øn¬Z2d_V‹[—Þ¥-RgîHœð|qÎ -¡Gc`³æ.ý‹í=9JÀX#û±±M ü²Òd©ß¥A6œ 9Æ\êI$ÞœVIq !; Ÿ'»=ï奊Ûýp’Nf€ ïÔõÿ9† ‘æ¤ÕûÛ‡Élè]3;…ekW,Ò.>o‡‰óýLRRˆòûørùÐ[JÓÆÅ,ñ›”ôC>”/´@BêJÀ{ŸEC2Ω àƒÒÖ¨­Ê¹ðÃñ5Í:®¶‡•Ä|Á &ß³M%±÷iËtáÔ ß 2‚qCqs=Ê‘‘»®L ×[{Ì ÷º$n¡5 ÖïAMÓL1_úQGD‡D˜6H« ¿ûé9>¸9¾°_Ûá>y­ýy@­0j9‡*öÏÖ§œã¾ç”)}k¦?¡Ú–§]3:ï[uO_3C-M2WÄJç³L!>’Ïsÿ>JÔÎØ5}Þ’–tÊ£„_I¨Ià}Úð"÷²h6ˆJ5žS;1?ãÁ ŠXˆ%iÈ(C t@vˆÞ¢ˆQ^7ù(örðÁÅ_²í&Yƒ‡.¯€ õé3Ä£{I†ëÀˆ¹€þ¨­LJýMÉÒ¡}‰™ÆN ÂÞRK*U]h—=j¢ß´…±(Û”y­jÇoÎkýh¦Z ËuèˆzD}pªèîK•Ƭèš]µKâv0ìØÝW)[6¾Ù60&z_ŠöõX¨õz ŒZ/ï‡hó¼"|YªT¨K¨O”<Å3n†+bkƺ7@Ë«\ÙÉløÃhžˆÍXW£‡U©j=cÜ øÑúv=-òÎÎDÚ1¾Ò’ù­dØ‘;{be3Ô€×0‹áœSn»°pˆy2ãSDù,i¬X·cûŒ! :ÿIb—»ƒ·7û¢3ÔW±m×’› ‹0'Ó2gBf)4Ík MÑf ‰¸ñ b]e…ø€>¢&WR€öÚç³Ïj?9$€L½úpC¿`óþ.NÆpRe?Ê/?¿;AÄ)µ›y–3©A|y‹Ù¤D…¾ *3 3VâNÊ{|ˆ¯ºÆlÿ“Ú„úSRö·/ö•άßñ3qXÁIÛ>ÎoÐÈ X2öÔhU¶nªY”j§ÙìÖ˜)Œ˜¬­UöOYylWvhieÝs¯5b•3_†ÐÌK+€X’ êk•ƒJFJ4Þ³•ûÓ8“·€–lzñ(ìKW’üï<%Яšèza—‡ž'‡^”dJôÌtNg™TQ1€¬i@Ù–ó”½MºT ¡¥ö¤€Ö³\JQ²®LYÍ5§³¯ØrÔ•ø8³¶Jì™#gR»LjªêVµ"Ž1rù5c‹xóæóJ­¾W…ëó'EÏÑ?ý-Gç:õS/Ï/Þ÷ MîÈ=÷œ ùH×§\?;¶||p~¡§çØ*0ÜåïÙ›hЧGr!P(U²ÝÒ4fC­×;Ÿ4+á>‚dæ úsãg!>;d¦+°}]O€±ë„á‡ÚUŽÒ„áb&(¹30¦x—ôÔ‡óXl?xMfï"‡9ÛßÍÔR¬yeÏdpñ,WLéK#/ú#˧ßc¶cƒN¦lŒd~ßqKÜÔ‚pkZRéó`Ù•¯ 2!›E‘Ex2 ÜÙjJkÖ¾™1«\gú‰$‰(’Ïú ¥X…ÿ-Îð×”<ñx0úžèÆBŠñC ²÷8†ÉTÿ÷ôr›Ù\ÙÃÀ)æëßÎÛƒ‹U«‘T[T©‚X"ð²-¾/âeA?³&Q€Å&:wÁd8ÕÌÁw½Íˆ€éÔÔØðô·S‹RÁ¼ 3ÀìUó‰@òè㢘 gaM{{å¢Ì<ªœ7‚+ÕAÂù2©b?‰‹ 0N¥«rÜŽ[WH[û3›q™òyš,~|´üAŠp¤xL—&l›e®ÑÚ=;V~ÇB%^ÃVÙ¨´ ™[ÃâwÕiz¡ÑmYW=ª@­¦u®ŒLb"Xº髽¯cE¢ÛªÌXK¾EUÜä¸ ×ëç®  OpŠm_¬òBÒõƒ}m;Ó¦UV®·Æª!›Ô8Û5wj{ƒVEÕ(¯ 1Ñ2Sl‡i%”ê×󾣿ó³}º%[–ú$<º£x:$˜CH.èÄ/²á&•)ñŽ×Ìúcwq`C)Å—iÀ–#w°ªÿ‹w`ùJÜÓ&Ð#õ!w+’â™@óy8E‚gLëýß]}éŠuR(3ïÊG Y±ÑF”à'sMý1;Õ‚†Þ›0?0 nñÇáѼ~öލ I…´«›+Úhº%õ óÓõ…ç3cˆ¡×£ z Jí7¿XmÔ [(…k‚øm¸ØŸ+?¡ƒ¬e×0ˆÐC`H+ônŠ/¹²¿QÂì›W”õ^y³ ”2Ä6+^ üá 2¶Ïûcv ³MÄ»ßgåê2 iL‰´‡ }ª¨5!å_A‚¢`}æÙ•ý˽gÉL±Ö¹Añ]~\ý^Aü,iŠ ´×η=ëÁdcÎ?"—&s÷0oAÍ¢Â).ŸTâ‚I€ É•XUQKņà ½Óž4AÀjŒ(>sƒxZšxd«ÏÖùÕN®ª¹ÁŒ€M–}`'Ëá´,»êúÙÀ”E]÷jµ¼3[9¥œˆ‹ý¸2OS=Ä\‹‡ÅA¹‚“ˆÔXcãºÉRUùâ»w—œÁ‡PròT<ÏœB\' í¼T´D‹*£ÖzÙ˜£OE@J”ãµÕ¤,Yíö+97¡JaÕwé"Ö%äÖä1ê;»‘H;­i¤PÝZ D>±ä‚Ë]Û'ïá9^ e]îö\¡À)< ¦Ñ¸#¿ AÞTÚ$C·GŠ3L¯wÅ Ç®œSŽCe;m°ÈÂí G>É2uBà­F€† Ù[•L oú'Y8=, XA{9U €CªîÕi§Ãíó ™›çàêÞ?0=UŽ7L[&Ê]âûuœ}_oÞÈéãÊxÄ›¸CUžÛ=ö÷²$: d) û<á ï›ò›ÆM ‹ "ÆÌå@mÿf+È qÅáÎÞï«)[#2ï7eš‡‹/ë— ö÷G¨„¾`{¯æŸ;u}pˆ·Ï,Â}C©D3Zôöbïˆi¤»Ñ‹¨ÇÑ10¢ñ4 ÷bv"˜ü¹7ÖÅñÁ1lG¶¬Š4\Ì©4Ô΀ ÀtæF&ÆËÖµ¤‰ + $M<mö4’Û-‘Í%WN½†¤©¯Ñê`ÒýRëÃ$oS¾êDÔ²ä¨\ï->]ØLÞ¾-m?Ì”¯ñ¹¥“=êÞP¾à¨Ùš¤Ÿ–OMö «½ÖbàjÛ/»êÓ’£%ÇNºu´]i4ÛšÁ§ÔªÆl” ¢.¶´WRÞ±ýtÇÓ¯‰Qnë#ÿŠgc¨®^>Òº&3Tɺ‚éÞRtª¼ñTy½Ð¥ÛÙj»ó³qi·Ï©\= °©ç&S¢Ütº² o®@Þˆžj,²Òkc¾Cß·ö¥ãÂõ‡Žf{zC`|n³\‹+Ѐ7z+BýÅžµ±ûÉëªsÀžXÐ/HUìr#NQ”·mn*ߦê rC+ j [˜zþcò6 v3ßåÏUþµ{QQV~«âÂ8RdÌcpµ—B‰R wFÆf€÷xªiÅ£ú®÷îÇN»î.ÍzØR?-f{æ“ýIÓ#§ž#—|&s–S+‘œ c€gáŒnÉ:3Æeõg=h4ìR@¦›D*ŸüÏc-0‘]ÚVY«×šéD§±èÐUA/p><ò7çæ]w@»4PÕaŽifÙàĘŸG– v†ö0È ‰› CÂô{³Ž±#¹ŒÔNÚЀϯŒÈ|‡é¾½GîïÇäZŽK åKù:ýíßR¹ ~>Íã»»tz~Á,;öd~`E&÷q&^$æí}ï>4OùCÝ^M¾ÎÌ:<\z±]CuÛDû¶ÝãÌ_¿UùOÉÊùko*x‹µÄ¶õDèÅ}l¥Í…¦´XK܈¥B†Ý¸¿mûR+bÓóUvO¦}H`þ:¢ÆøÐN?xÊ)ÞÛË(»£gtèÈ3lôÏsÿë:?vô‚Ÿ'©)ÑÎÀf¶Ä›ò^1dÐ)Fóõ‰#)w@w5]Ê=¡”Hñ÷¥Ås}´èaQ p„4‘ŽuŸq‡@­²ÎI('ýÖmÀÆçϲŽ>¡§KtÒ§?Ѻ¿¹¼yš½$ÁAnŒ¾, ͘¢¥T0‡ /‡ez1:]ZwYÂemõkL”`‘CœAe—NE¡Ä‚«ºJFZ-F“‘ºc`é±¢oë°7ËüÏÒˆ z“·&аÓP¬ŽÁ$^öøÝ6V-.𡀎mšÊC¡¨lðU*ÀЪc¦QKâ¹6|Ѫ%iì{{YRvèR×Ǧ!ïjm:S Z!^žY9ôð…ÍŒ1dpªgV“”i'>ˆ•¯ŠV¢Ø4)…Œ^ŒôœŽ) Ç ººÿì VMò=_‘˶,…zÃè­õ Øù!û¨6˜æÜýœk`‰•ûañûV‡Aý·àO“â¼k €R9 ——KŽÏDà$±wN^ü”þÔò¡2ú#‘h" Ô7<¼qFêi Mÿè/µMt€óÂyþ/Š*+®z––„v%zåt˜öÖŒÜ sf¸½±2j¹çŠRÙa@×óú‚v@Ç4&ª¤Ûª•ÛÌhØÙ#ý´ûÛUÔõIŸ×ñºÓ€¶R¶Ñ݃NyžK ©€pHŒP~„\)bêÑŽ_ÜÿÂÙ¯:½ëà9^J=óRŸ¿Ê28Fòù7YìœÚ‹Ë°ƒ›:8RÛtìBÕà†ù6O$öËË:so—gVÁ.xY¹´’‰·jÂ$`om[_BϾ»¸ÂƒùÆ%ON ¹-$ÚÓjˆˆÓË„RD¡LÙ³Ó`\¨„TyG²|]‰õ%IxB·x~y"€Ò<Ô³°iÁN9¼ñð­_ãÓæj²NœÇðàRq¼µÿ$iË+SUÿyÑ­§YŸHÙÛ®nÆ’Wù… †.ŒÒ`Ä·o2vWZ®(5A2 šÌÅÍ#Ú5] LBS{ɦ„Q¼Ý >ÛÇU;Uç8ÎÖc;z5ˆ5ˆte—jÆ›({W–øfÆÜýþ¶KíÛ}Óìð»÷+¾\(R˜1çÏ]¶ÔÛ£ü!>5‰[ª³ß÷ê™k"­Ÿ,ÜdŒ«›—ð ª7Qa£èÁý™cÀXCa±Ý@Vð;—$*¦D!I¤†õ±kƒ•–ÇŸM¶Èj5°ÉŒ|£*€Cñ„w°å´Ô?ÜèM/€-DåäP¡ß'²<Ü }š‹‹›Ê1 uHbƒ@‘6Á¨ä£^øÂeÄ$^¬-?ä‰iÊßçª%)ÂD9¢A˜h+Æf¤„.jʹô'Ë»:4ªC4gªf¯)Ê=ƹ(&ý ?²ºûe´5x ÂImɈ¾úƒ "“ øÓúÕà-RAj›dj4Rñûhª­¨¿ç;éª>™=³^ä‡ãÏŒÇò"uw3{è_¯íŇκi·Ôê£0+”ò3kí(ÓÒy®ËÕ}O©ç¤1Ú*ãöÂß”Ìö@^[aø—’¿6Þ¦ ²tÖ"ºè´Ë©*dü¸ÔLX’TáÁéµ ZÄ·éBy¡ãÎ_šÎÊ×¼A˜OÌ ›Eä¬E5b)dql/\5Gˆ^7èÊ[KdØŒ#ÞgŸì(œŸaÁ³ü3Žü™9.+FNi=Óú„<Î;WšA(­~DSLc¶‘üù‰â³¹ñ|æÁ𠱥ſÑü6¯Ÿƒ ÍÏ;”f(öÐÛ¦„˜ 93<Ê R—/MÒïeÍëëà€èŸ6â`¹`Në¦Òáãõókrø³aņ݃~šu€æ÷¦ßwI %N1‚Ì/tû ƒîÝÉ Æ•´‚˜rh_éížEͳø˜×3~!6%ÒÕAðÎäxNXQ¤S…ÝÛ&Cëâ‹iY…¤MlDQØ@¼wÆÓ+ÉÝô¤káÞ_×ȵÐå;Æ¿¨¶ ~jÁßö¾ŒHgwstÌ I™Â|-ƒ^Ky6×î”Ñá¨w—!gâ„4é~UôŽ˜¡ï„©%:µ$ŠB$ý$ûa§TTªL†–÷«u€;™Oô4›*­ÜfÈ*µ=Ün ,°©ß"£d¬aÒb¨ÏCŠP£¨¦Ô¹Ù|O>éQÙ<°«ÉfÆ„„6±æ€£æâLÇOë ùµD’a)ƒ·üüú –5-˜ßläV/•¢bH h.`˜žQkX¤S€÷𰫬^Œî¨Ç¡úÕ?˜ö?‹åÎ ¥†Çø›¿uu/'¨–Ô ÿ|¡t)Û¡ÿµhßHÀjGâ”óv3ËeíΧÈý§vü¥¿~ rxÌ=Û:q¤`m æQ¦>5‚4“®¡¢>UÇF†‡«ÿãó5ãŸ-/_Ú-‡>½Î¥ ¾D¼Óȧ’柕ûãlvûz4×Ióªqø,G4÷NÏ¡àOœ,Ðß²8}‘Aç~9I‹£ÞÉq´_b쇯¶CÂÕ¥÷çäÞ4iêÁâïŸDPƒIlxðo„+\Öì믲©3÷g®¬øBè»&&cIø*@ŒO)x‰¢ÓõWö“^÷²^Ê\Å+óWŒ¬#Oº¾ gfÕe¸§§È´± }Ø^“Ì„±Ûn|j3.9PùpË* Uæ!c!וjUT ¤ ~&»I¢´gA±LÚÝéJBSÅ÷ P 9Œ|ÿŠ2‡Ö¥_ôâ”’[ä-½Öá9y/0™æ²ˆ«msVÙÍ6¦mÍ©ØÛçùôx\?¤³€7iÇ“ôÖòój\òÜY™?X‘Gã"ü||·ú6ù1œg%á(†\ŒÀ˜ÿtbÎe³=çéôñHÒâÛÁó}Ђ\4›ÁŸ¬dßrØø¾^ïÏ,@${° ç‚}ª´ zxÄnê’®ïŒMêémDî“Mâ <ïX€®S!pV É¿ ÎT,^·q³ûrK†BØTÈ~ªt× ¼JL/“øÃã)ÆÄ@{{*²ôŒM`ÇjñÓ¤uSÍúç¸ì&ã½^’:Y<,{çårÍü¬Õšk£èßhVVÇË\IßãÿYÊYBÍ:Ï "yΡ ¾q»‹ æüݱàRòÌ繯ú‰aÞÖèkŒ 4Öí†?4ãw9Ûl-¦£¹¯kŸ¸s&¥93´V´¿XÁ®wÊ0»)Ö]Oi(NNsN&Á¹àŽõD« ¡¦E-àvµhêèU± X‹[*üùn¹Ÿ,xËãjd”µö’»ÆŸ¤›ûL VqHŒ`Ñ–Ë$@ß‘ük²5ÄÛCo¡aÄŒìé#8}λ½Š€  +O *x2Ü­”ÓúÌÉÕlïÐeW´dzôÁ•÷VØ$%À´+ÕÿÙ­¹Ìhæ© ÷Þµ¯·n¡ZŒ-hÌ º’È,hËt@ÕÚ,ã£Ùˆ<œ¢qEÄ2&ÆQWØ:[FÜ%u¤ÍVÝ[Õ´aêªË-…nÔÊü Ýu©Ïè–ÁsòÓ6îá˜f¾Ir=Â/â©YOE_›—'ÿüã˜K É©}êWq÷åCåxw”,Øx¼q›03–ïåv‹9ˆé÷bI8˜ mÐf~Omë h§±’WÂSá¦P“¢93@­CVd ‘ó°Ñ’{é¡%i؆æ0¿P,åi¼h\g²²°GÓ²ZÌd/÷Yys}_çN.ê}"nú‰ $~£_Ī“`z:€k#Âîݹ› U]tã‘ö<ô %’0Õ.TQ6òõ¼• ¢¢)ÃFV¨;×Äh·¦^A–ȇ™·ÕBœú1oÓÍ}Û<*ç÷.øJµÆew{µ¼7K1zÊÐUãã ‰“¤0Áê*P§ ·žÁO™&Çá.?|­5—¡%„[étgò®»ë˜‘Û7¢;;~UÎ~¼›/܈ڭë((É= eKoWµwÓX­Á€öØ­¬„ÙLðYÞ÷ËaÆõ~—·—·Þ€¯WäÄjqÇ`]˜cSC8÷ˆ+$ ŽÙàG|­Q“YµÕZ÷ÍÈ[,ÐÙAyJÜoãF_L–àœNãÅ¢?µnª‡ ’ù”#­Ò!š oIŽó¨CÕ,âõ»ùê̸/§_¶L Aœ˜ ¡ó¦Í”rÅœ$/[O)ý!lÙ¯|Hp—®žjd·ÅIŸyQ¥ÊnUª^̦Á ¨°ËKU¹¢º¹îu¾´·ÿûøqépw@'»æIœ‚¸×(á䨸á;½Õ­IŠ= -'M·¾‡(¾¸|ÂjBgŸÃ=„0l\×Üñ–9Îö&áyê]g '÷JÊ…H•UŒ£©jÇî±,Go î ¦ÏI¨ÅÏ´²P½ÁÓáà ´Ã1¶[ø‰inÊÞ÷Mß‘\‚Mϸs; ªùpò¢Í—ÇÑ”M‚ÈŦ³ë4üœŸ¯š¬óïGæÆÈ|žrý e±7Qa¦*Q¢~ÔÊŸþ²`óƒeúR-€¾ãÊNÐÆ¹ŽüÍä©•®È¼kŸVØZ¹‚Ÿñó¤Ozþþ>tí?QEŒËKmrG¡–å€ü!êmðyùî¿Þ¥Õßš`û5Cœ’«€SÌ(ES´-ê¦ðRÀñwGÔUa*±°K4«°§š¶ aÙT;c[[Ì6ôîRTÐ\SÌËÀD35g—¬ãÊŽïX# —3K&óéôÛ—T˜ç>œÜ \çóC•Dïî§Å T†´+¾ºä‚fýícpÌ3@ØA9†#×ÇæÖpD—DñbœíS1p ƒ§<Ü‘õ+ M]A4úòUÐýAQ¢ia7ÊŽHʺ_õ÷:Kæ&úLÖ¡cÎÕ28>+À„<¹ÃÖ¨ OdÂBfY.E BCÅd*Ò˜pÉ9£53YÕ¨ºNáW ŽbÝ¡‰ÝL«ß*çÖIã–¦ÃÇdEgíz½Í ù ÅÎà}0Ÿ¾áôt‡FrµÆc¦ž\xÏBeA’LÚ«Z OC¸Ó2À–³£Ët¿ÄÔuËž¦ª[Àµ‹´KH_5ÂÐØÂ/AÓ™qw ˜Šr”I z­L_l_ƒ~ÉQw-}hù(Åa¥ÖÍ´ÍÔ½£²Ëv+„!Ö²-^9:’1–ÄL»ïÙ†1Ý%ràÆØuÒ8v†d £Èr"KÐp’Ãÿz…ÇÅ?½l½©²Û”qæŽ(Å¡T+í´¦U©:²×8¨¥°“7·åfüîÅ,CÈ1a\Œí±J$Ž“GñÒËË©¹6³‚kù‡aøX'‚©]¬iïÐQéïR(˜| ãpºàéä¡V™@ Ï“›xÍ~°®:9ëbØ óD¤`ŒB(Ø¿©ÑŠºÎYrécà ¸Ó;ÎÝ“„ e‚z yÜjŒ»LÊJe]dÆ»ìjG&Ñ@4% ñx¬“Ça‘‚_³¨½DSƉ) Z?†tÕÕÏG•Ûjyã®fÞ©˜õ fðí³ç2}So•õåòu°Ï´~º™˜­ JÉš4LÚÇq§+‡Lã9ÔÕ¨’4hôi®ZýÓDf7¼æ¯Føê*r4…ºi1 J˜%gµˆ¦¦îrþ3` "®s­ç¶Ûv± {î3”‘Ý–i° ´hJ¢µ—0†/Ñœ!m“%rÿ„¬gKR…)ùXJÂqȤÊ̾ë¼Õžü±ìLDƒßŸéyðq§xlà"Zk§Ždmñ}—ð åÅpý¬#^Ïa߃™ƒ€ Ê"Ågm0ñoÆøŸÉŠ;€`ïA:Ùè!ÞñÙÖ‚LÉ‚ž%øØ; ;Gó”r*& 40N¨„¸<€.Û¶½·»1ŸD÷¨›ì0¬ñ‚…Ýù'ü>Ö¬0k?ó°Â3›/'›ÚØvÂ~aÒ¨ÇòôY‘#'sä÷™F-m6ý¬œxÓûbÃâ¼3+‹b®bU-qýU×証"‰ y¢q(‹rɇûoÇ“[9™­3ÑÆ“˜q­Í—!±ÎÉk5yÂYýŸ>÷˜’yˆe/ OÔĦœ7f°ý¤¿Yí«[Ãøúˆå ¸¦!ƒ¤,M§$g\?]±ÕkP )rnº‰±ø¿î qšL:gULݯb‘wá˸`Tél®L¨$ëiBW»»1–41 ©êˆñ_Þ<~ûÕ€ôƒxå{*Ú:³I&Ñî*x]¶¦Qš™àìy,Í+ ˜éØRs~ózpMLÃZé8 sƒ€KÒôð0DK‚S´›L¥é9ó]ßñ5ç)ÙHÕÖ¥‚ëûS[õ—¼N¬ÃÎ5J0ŘS£…¬åãìÉIÉ£CæEM£H[9œ¿«–—Æ@¯)“ˆ¾tzs^¹ßð045¬âÒ(õE—˜Ie–G¯™~oépÿΓ"úýKÌ4nQÈW}r@wÏ j£—‹›—ía(dôqíˆø(û©¯áQ\í=ùQýôIå‚r\µzVë¬=aõ.¦wQt+•ÁlˆŠ±a¶9òä¡3ïïo£ 7 @žÉ><ÈÙûp8XllKϰ$l ƒ¥hK,«g2í*!N¤\#ƒ Oˆ(·x« Z¨Üh£ ­ &(T%³·&lÚäýŽy ×ɥÌń3ÿáÚ´]Äo¶çMJl6æX0Ä,TÝØô¸ïx L„|>æo¶ÅóDØ-_(̱Âä´"Ÿ]%JûŸ³x¶è÷øÓ8—2,xU L¶“îÜÚaH»Ç V‘¢Ypb4 ƒ<,\d›y³4 Âkf¦çiªÌ©àN¶ÔúºEŸx–g¼œ¯µÌö(‰²ñ'ˆ1#œ“‰y1¨¢dð§lv&|Œ©h*Zß“ä=hØh p¹!8„ØnŸˆÒ‘t¡U¥R³ÿ» ðmªUmXÄ ":c)½OšÕ9Æ{íÑd¨“Úå˜Y‘~tçBç¤ U.\6»Ÿ¤Ó… —ÿÁU:½½{ºà•¤o¢=JùTyÌ*ŒG9£ ^)? %· É*DXÀìÎ}+Ð+ÈƒŽ¬ª£SlD·Ñ‡"OfS £ã*?*˜qà Äo„Zˆ I•HøS]›Þp ë4˜´©u‚f¥`VíN™ä9ñM±ì‚ög•Øí÷ïK±Þ3Õ?¡¶ñÚ`úS˜Òáòz ¨Þ…¶ús;–Î\¨È§Þ¢O ­Ëy4®¯{?ãÄ‘à$º ¶»ô†æóåÑhըݖ7¼Ð\ü õBÅ ´°)×ñ“3‹ö éô­ 惥}?V·Ïä¶t­itÃ|&uŒñ~{YLV;˜TŸoqØMeuÒˆú’È«(<gŠ‹1.þ¹ünos*˜ÿ [ÃF§S{™YšM"§¡€ ëæÊ½±åßÝôÛü xä–¢DÍšÙMƒC·‚tWë{k']ÇzF`ž(4n¹Nqè5×Ç2­¿O­ƒkŸý´Ž-lÐ1ɉ-¼coذr¤Æ Scî'ëúVÒ¹¡Ëñ©×EVõ“„IóWx»Å.üd¢x¹®žØÇòDªÏ{›q“’’ ÄŽ õþ0¹!šÕèÄÈ]£q'òX‚Äcå7FržiBZúžb+Ì)uù;zØ„z˜õ>aFž%Û0¡Ú3ze;RÚZ·ÆÀ¡V›òe–lå9¤ûÅõk¿jûÀáVÒU¿»VçáÓ^; ¿ÐImÖ½ávæÐ@¯wíÙ€í÷Íu¶ošŠsjuäŽ!®˜Å•…ô¸ýCàöà®ï ¯Õ× 8ȳã¡yl¤ˆÐìw]xŸ¢ÖÝÃo´I¿™:ìOßÚ¸™ŸòÃê¿´vÆaß ,˱¶Åüt™+l?YqùžŸ`N/ÎШJ¤ôpφƒÊ¯E}?Äþüž¨‰ÎH´Ö¼™P›üDb …ëøà`z'nÃ_È|´°p{U­ùÚÎɲ­øŒYÛºàñozêÙòÞû·^¿mk¸ø—ó¯½ÃSÅzªì<x~Ѱ<"? {Êæ°ÐGtæ_¨Úù»!ôM®Ï³’5?L?%{ÿ³w×9¤Te9˜#ßO¯'?@¿’žËJáÞÄ6¢?ï+RïôƒSÏ!—…ÛŸË-4 õ«Šµ-ä,o€Þ³pCGÛÏõ¦> Å«|ÅúMX‰wQÉÆŸ®ä݇Æ/¤,o5‹”20o PýgW¨Õkoé<€Ä™è˜3êloˆQicO¹Œ…>êµó3/€Ûª¤TÝÓåòì¡›}¡wݳ·. naP½+H~òE¤~ß=·S‰çÓ|Î9_ÙþL¿Î*îìãû:ª—ÏîÇ:ž¾5˶²¨m½þ¨ãÈ«Çósuöð™¾'vmkóÆõÊ"Ùõå/Âu¯Çö…ËÎ÷®ÒþKãG!ÿë#ëõ‡›~×w^§ßÎw¸FASÜÉ®á\ð\?ôöÏQXL÷ë®røÜ€_ݦŸÈÑ”_û“0Hz_…»·.wáß®š”ýO“ÿ­sÝCJD‚+»ÇóÉàè eOæE²¶;j+#íe7ÏÖ—÷Tjé ¥Öœž/²þØÞ‹ã­ð?¦LûºýYïòkoM°óÖ¡UÁR(q« QŸª¢Q/n*g«@TýTm­"MM)n¬àS"¬<ú×B¯’ZUŸrlU°PLSùªê5Â*´v"ÄpÔÃËÿƒ¤™Šiiv½Åm>û§¡ÇTÉžáº÷3 rýG[m…ÓsA>ó3=̼ºÎ*[`$,À”Ø\¢ÈÀz%/ƒß)­«¶íÖc–J6ä±'-ù ¿¢×%H¾F4\fÐ’ uÅÓ°z—TN/nêˆÆ8*B ÌÀ“;¡µßA¸U’ïøcŸA½º(Ö²y÷¨ Ð;º™G6d¡[×~ @‡~Ú•~¯TÛp”ÙÌÿsBFqøEw ¨7üa©i?\zö–1$õ3^k×°½rýœä‚0Ð}gßmuǵ¯Óò{Üòç‡oNkø@º¾àø,L×ÏwDѨôÅý¨¹U{t}ÅÔºãÔ:@é˜ÑíÚÜýà¡PÓneÎg_þN>“çÎm­ÎÄö*ºB­¢uÄk«™T>ÅzMqær~Ñb­S•Þ„t…”ÇÄHéÄܶ6_Ug»Ô'¯½–-^´6ì .íçbȹ¢ë‹oé6Ø¢ÆÚ®VRã³×!|é~¸¯¦aŸM¾¿^º7‚Îï‡ã5Ñä0àøe@¦@•Á ¢8 íÆ€ ()ûQÚ×è(ò™—/u©“P½-Ç÷4] žÅ«õ3°ü[Ê?_Xéö›¹ä[æÈ¸_®Î~ø Øö_eÖ~<óܘ|s+Œ1׫ùpt–e¤¼»Í°›gWnÝ—¦‡£XChSÞˆÓÖ™¥Ìtç€P#žÁs¸{Àà/6íÈRÙû–¯´ÙD [sý3£QN*®8¢ŠµÚ]^(JMþ$a¨c!jäy!ŽK€´h¾‘½n“˜2MMÄáÄp îõ²UÖ{íá6Óº³ÃÒ*Ë ogÑê_¼®ØÓ««Ê·?œ_véøðmǽMƒ”?gŸ[F]ËóK: ÖÜÜ¥ï6K´Ðu—qüÂ~0£|4ø¯MGž@õ€cbŠÈ1 êÑ–¤»«É¯çd_ªö1?ŒPÉ2M*&@³s²÷‘u¦›ÃÓö¦S3ïqãiUžçuêà_Lù Ønµ´%Ê-2xpx•Öc) ˆñòôÆoï÷6ÙLe×w%X_Ps>èžR6zB8 ":ÌòÎìyî\_Û%òHq òýô¼Ÿ€PÐQkÿ”¬p~¬®ÿ•–ºHÉEj_è²àâÄœªKà7_sßI¾óaÂz¨¥4¡%úqÒ2õÔ%HaüÁ…wÜõé¶žÓñ•7É% ÖÏÆº³ÕÉ纔Ͱã4Þ³ƒ-Ù°§ÉLÄœl(B+I{ˆõuË)nò9Œ4:§XˆÓލÏýöýa7w±âØ&öx Áï8Ô’ï}ªj\d"ŒWÑoÃ$¿pav«ø££€P}„iéìCws˜ ëì‡ëÍVªs`í}Wq]2®R³5¹: [ #Ë^[÷¸ÞѬ,1šC£Ó÷¬Ô;›‰Çq!Óò³K·8ѺoåÓ¿øŸAþ·ß7r tÿ¯|1ñÛâÈÁÊ?„´>r•YŽ%ƒ$E¸qÄOüqˆRݦZ°É@e¤*úÆÍs.mï„ á pàA _ÂË¢n-¾9Ê~h ÊýÝFäå,{4Åä ¡•Ã_ÿ¡Ne!ÒSD»™K¶âÒ»æÂ:«/]`4Û.·ÇO¦ŸCÊÉ}„UY“)ã˃—¤3 Ïë° ‚ŽR‹?u¥tñówß=A»6…me§ž±]Z¯r©•Ø'ŽÉ*ÙWþý’ü3R“]žöÝÝ——¶ºÿlzž9¬€þòô.²SìqHzo>ý‘áXÞŸŸK–Äy ·¾öâWG£S´ôÎêFÑQõö䈜å×j¬| *¡³øß7Qeûyá 0bMƒ%è6©<¾Œ€‡¡‚«öë„}´”v³Ç_y™Ï©PúJXþ*%7‹ö‹êœ1x–ïòäUh„¼m0Yd,0¼­¶,½ªÖE¯sŸmð˜"7¦\ØÚœh8“¡à€ìä­¡ô„A ü¦N%”]Jds<ìTC‘ZÙ §«êd´ÅeÖ©|¤bÕ)ëeð§fÝ­ˆŽeɬt@sMäje‚Pÿ×]ÒÒRFÛ\Ín¹}úrÒάAŸ`&Ésªä¹BÈ Ð4Êsy–° £º1ì?`;›RÒ]²ü=ùJbþø¯ó´zÔ¼ÏêíÙÄz¬}è2`Šªê|( ô—MUMù~j ÏÃb*é6ÔÊ´…6êSF¶ÒÛD­£&¦]§®Ÿ{Œ×êž/Üå@G$Ë8×êœcxŸ)×]»KMÿVmõ…kÿœ½£3F(ÉNÚ˜»Ô¦ol±XtàN ­³[Ö©Ôe|…R[ü±Îu@”Ye§èX¦'IJ* µÙ5ÃÅ%9¸pp÷û{ùŽáŽÔj%­çïTs9£}aùƒ”òA›ÒJ ” nÝx@i0’ؼµæ. h«j:÷q£¶Nèü{°§Ö|»"`'}q-]G@Áî™rÞ(dµ†àÙ!UdW 9—j³’Ëjy6%Kf—%è2.È™jÁÕx»í»í—øx7#-n°/ãs)#VÚúËç}iª;ÍÑJ Šf‘––dMû¹_¨§ŸŠìaãFµ†VÃ/^ÌØ|ZUYÓ'¸Yu‚Q!N= fŠyB‡tmЉ_æÑS0Ùº¤J^ s†ý½OI Dz;R à~‰ƒ,…b‰ACKYsi×ß/-lz³"$V)»’dmmw^GE²Ù>”½â' gùË­Ý?d§Úkià%áÛt(–Ø\K~X¶>xÚÉJ‘ Ñ!”+Þmí¥ÀŸŠg¶uª›®ÝAEß æ1Ád*µDehS†Æ²U©˜ýà"«²W°J­Ã!>àLL[Ù¥ZdySKÇÝ‹7¬Œîé<­ÃÆ8ð€ú÷l·¸!è\‹-aóo¡'0Á»©BñîÑÖ*¥dàÝ%{½ÁÓň½±oààÏ+ñx&-ƒ¿ó ú×ú”n:IW¾˜£LØaHKëg¾èLP€KpÃJKÆ3ï¶*k²x¡‹ÓÏA«ˆJ§)µÏ K ]Ó³Ú2‘(¨j®æà&‰ä4¶„Ÿ´âµºÉ—Þ/ #'½’%ZÚs€:h°ýzm4Ú«˜ÔÓ°âXúíÒ.;•/„èÞp'~,U<‡P¾û{õªÐB Kt¾=j¼XXV:zLáåDíœÑ™ ó eiëPëÁ½ +ÖÔÔ„kê‘,Û@—ŸLG1²†Ð~{zPJmj†Øfî;KîxPžêéúÄ”Èæ=“£‹‡Ýª¹îÐÇ›½k1}ºÄ§žq¤¾4Vw…´è›ÒáMã?Ü}°§‰5g6 á!€§¦ù"?“ær%†̘£VÂRã³[ó—ݲK‹"£¥”™Ó™Jt6}0[Oá{‘‘_f2t(H¹ îΩÀ¡å(¯™IòGŠ[Îr¬À‘%âþÜÁ¯¢¿ÞA-†z@Œl%õ`¼Ò>ò½bz*)x„ìá@l«rÿ~3íÞ9#û·] IGÚI:i þ›W ŸƘ«Â˜@^¶w.™m» •Ø*¢=Æ‚æ¹À(–k¦Y°P*Š2Ë;üphHxEÿok¦ÉÙ’L¼Þó5lG˜jûhdÑ3àƒSOíÚ¸F¬¸sfùÿz%;U:¹¦$M%ge¥õ´zŒ Rn»«-=ªÊÍýÓq=Iû‚ÿõtÛÕ¨w\ðÅYíÖÉõ€âO.’eHHº5´þ¾4áÃs4ÂzëÊÐ1ÔßyvþwZtذ å‘÷Gà~ ÅBXWì*ÉûÝÚé‘~í¡Ô(Q@BôQ[x­{—ßðhQ@Ì«>B­¦O]!ž Øh­Úá×HmÔ™B@”X;­Ræ€&q¢–Øqå DW¬yʃì”CœÏ}0^‘{7Rç G@Pmšã¿=vœN5tÿA=¹L\w<_ÊÁ¦ÁéŒ>›ºP+ÿytð_¹–Iô“¡¡M|Å(s€`‰Sì©`QtwÒJk>ÈÛ1ÜBÛ¨!Â;D©£§Ýß„A’|S>Ê-.—õS§c¸WÂBt-I€<Ø Š ÙiR̵j´Pˆ”Ðkm{¿1Z¬±˜SÊÌø2H”…„uZ¯Ï€‘ÊApÛ:,aŸ/ 16f캕Jr„ØŽóhÏAÓ­ÎB:áæˆm5¯úÚl¦dz ‰šáéBÓ~°\BY–^{H^…Š/Ps1yÙrû™ÁûQFS[&µýaÂçFRÛqF®ü,ºz/žF2Ä9¹âš³q´¢ÙyM¢ÁA’… Ú­Úû<¾Ÿ*iªM MÁì»]JJû< èã²ðoT¨™Ðp­GÅ’ »(‰Òú¦ˆ×êjö]R0;ó¼ìW[NUò@ÔqovÕvðÿVɈþ\¬<°šøi–A"ÌYC+XJKþ¨,½Â*5åQу·sþíñalIÛ´œþ Hm´àðÛôõ-óE&´ãUŽ[Ëe)X%|¦Ù‹u}ÇnNû]‚Õ* YrÙí—|µE@ÅRgLz’rÆá ¾ûi;U–Òϴ˘Móy¨µ6)o³¬¡Ô³|¸3¥±¦¿&°‚¿fb‰&Ë /é•Ì_0ß\;ÆÜI èCën%“ÒºóóÂÙTŽŒ#»øæýô}/_¦iEB?z ½©Ì—Õx¾˜¹ï‰íƒ˜ðÞÍŸ%1 zFºŠ”Öe¯›0&ÂҤʫ‘°Óð/íèÙWerªÕ¨þçìb py®™ ÒŽ ùFœ’VÄSu¦ fÓDÀ’~ª…\›MEß,yOkÃl›;þ´#&v›;OÏ•£ÃÚšø«è™­~SÈ>º¨½À.0`ãžð¾v/n¯”n”rXµŸ#9‡ÊÁ´nÎÊu^’Èí附STK×ÇVVRø´;.áwZO“©3Žäýë®E—bÅŸé|·¢,Qxâ'§‚ ž¨Y±J!*›¬™Ú‚Öøž<ƒÎý»\Bñ‚uQc¶¹|·‚QW¥Š¥(SÉÔÝÉ7o/÷sQ¥RÕof"bâ^¿OÃû»° «'U4¬Ó¼^Nu}þ^ú<Ư‹¸Çí½³‡ž·$b³ª£zjòòÄø‰å¯`ßD+ƒLßn]S茲?ßó/Ceø?H?Ý~?”t»ùO0æw»þ‰ò§_F²1½ÎG“Ç“µÕ}rß§Äôþp|ß o÷‹R™¯¯}Ÿi›üq<žï>üßßé¹u‚‘,^ZpaCmö»x 4£„̪~:uß Z_ïc’¿Àõß¶Oéç“Uû_þqwcô€Ð]]]}„lu@moOj‹!`•Þòíßï]›lHÂYßþ¦Ù;QéÊn×Ê]çÑõ·«_w€¯Jƒ$R¡îص´õ_Ëã˜0ûž¶Ã»vUÏÎmf\Ù5‘Kã1LŽÙÕåsfþêU+X(@¯ Yó×B²úêª0=6q­þ‚×HßçûTYÞ5f¨!"B5’6üLYÛ@Yχ-ëš~TƒãÈ9/†µ%ìêþ“äÍZ«†×iN|…#=Žft¨3ÐiÉ!õ÷©UÏ{÷÷VÐþ^HQðé ‰×ÅÓËMNZ³ÞÝù‹~ƌzUXµH[xµQ£”Ï]º÷2ü0þ®ï;1ßÒáõJôðî8൶¶VÛm`ëÁ-Z^ß>l¶íçn·Çïë‚t3Ž~TâÉãö`Þ<ö°ZM½jïîƒþbì)³OBòÓ¢.õáéôi¹oic •¡s6P ïg#öA깋[xŒs+;5* ºR“¦,ÖùÉŠã1thÿ¶ËútS= vƒ‰Š1tX]Ÿób¬j•ç´„§6dÙ*D]ƒ¿V½Ïèñ¤ïçîn™UO—ìg×#9jïøé6‹ZÜÃ3ÛܪAƒ&ÕyÀ<}6ÅÙ•MN4,áˆúôÜñ‹B)¬‚FߟÙß×G\¤èѳ§œá󺲾á°ÛEî¨A‹-jd!{ÉXP{b¶ Qü¶­Ïì¶ÌD¬žë¾DÉ3 œØÕKû¿ŽNtÙ…0……“±]Þ}˧çÝ1³ ;fëòeƒ¨£†lÊ2êQ,Åuþ/òOîÏ6åº óö¡IkǦþ®Iâß\Sù¯ð¬dôn&^ ÚõÇ9ÎǤˣÿU²qOIFÿWâ‘®Æøóšüÿf òû`ÁÝœf}ÒW¿R1%Ë{Ÿ­ãª9Ð%Jkæ6œfQ†æ(×<¤Põ>91ÂÁ_o‹ý¦Üó½oq-€ÓÎé–[óXyÈû(ç†áœræ¿., Õû ÷LiwJóÀœG˜çù»q â+ ž ´¾}òa´P^nSkFgD¯Î¯ÎíΤ„´_þ_X: FЭãe„Ð@P0‚~ù1þ€Pö€¾`îñjÃÐ,½lЬœ4p©Eà¶5 € –d©@‰>4 “ 3}Zn¡ø&–Ñ&¦9š6UX©¹jmâéÀõ'è7ozÀŒj¤dô&p&ÅÔÄå¯ãïEiU>ü&°Œ-œUŽX¡jtÉ›< .âEx(èÆ]á](ÙÆu™+ǯa £×==9€5¦6÷0Bü°i˜HûWF@©àÖ€_‰·éø¡ß{SI‡­0äVÙf>íôG&¹ê`ÉDBÁ¹…%³ËÆ»ôþI3ÈcWcJƒñŽ2Ýë¨r5 96­=jÐøû‹Ý@„剹ª°th&n 9/¼Û¸Åå±²l  ƒ ™ýÕ7t Ä÷Æ=É0|ãU¾Ô4s¥Ë/ÀöÔSZ›f|¡^jšx„wÞ@Ò u>Ø|–ʾ#};pV½¢P‹f$Òšž¤ÿŒ—>"jÏXäð±èyuç(íEß2ñ§zÇc+×y ~¸/wß}¿KØ—{°÷É⇇ìªräT¨ÂF!ÈÍ(ó’W©\A<6Þ"‘‰¸îZ³–Ð8£5Se§BH…'•¾ÇôÏ_ÎOÓo<ñ#÷¥²¯SyWga™’²í—¸Î^N“+GÐçd’RÏàâ$R`kƒ´´ øÌR‰þß]€ˆÕ éÉÅ\먬·¶˜Õ%°„}ŠmÄØÎ]<†n¨Bß$J¶žÂF•è ¿DÎfÐøŽTIqh/Sƒ4 º—®Rzèt£ÉùP“Ó“ð†ýá…qœßw ³Vv, ³ïL3Fj,š‘” ]“$–$¿g“ýW(mÊ$Œ‰’ᛂd1¸Z’y¦™#’° v]^qÄ Ut‰”Žu×wL°[ðñÁ%½±XS6ýØ`ÙÃë>ÌPq\eÌtÛ²º ¥âÂe‚ÒÇ©»•?Ïb€ôŒðFRjm4K—ÀFˆÅߨõ2ñº4DÖá6©Øµ8<n0>–æ ˆ‡”’ðÏ'ÂÖá¶1}YD¬¹J;ºhmZzðñ|EÍ…:óÐû;‘«žxíxZ²)Tjáîøß°üœ@·ñÃR._ž;yAC6§ÖÜ­#›Û‡°ì 0UÛ=ùŒ:€¯Ë“ÌfèV½®!¦)´ò'Sø¥à·T>Ä ®ñúÐ%dk”[J§3£ËccQQ9èB#<æ;K¾©«aD(çñIV÷‚ì£vy³:ˆiÊHÊŸÍÈ|Ò€Œ†j³“jv)”GqÁzãÍ¿›çøÚ¯ó]pÖœ7g@—‘uÑë0jXðãކʤàÈÍmLy…“·´ã+¡A×`ïÝ/;Æéß¶=fnǘÄÿ ŠpæÓÆÌIrQÓCYºòƒŒ”îˆY;Éß©„¦ Å]ùµH­a æJËàÙ ·€‚o†¾åYV¶ÔÒH­ó ݇X†}IVÞªÓ™Õ)Ð#î%"êº/ý‚ߨŸ‚*¼õ§Tm:ŠÝÞz”9Ћ:*CÝaãbqê¢7j½|`¸ ^þì;ºUƒáfDzÌpº¡4í©c°)MEÇòÁê7CÄ¢!ºCÛ÷¹.^¿º­b@ð²Ùµ]ü¯$Ñ·×jhÀõJ~ Ú,édúqÿ¶çHáý¬È~m Dï}n!VÝø.Êê¤I »þ©o"ËzmÖ)ªnÎ2¬²‚1Ûcªgw ù@öi´£ïíÄv¹IòŠŠ2LólqÊw‡—¬ŠÁ•‚§Î9!æÝ—Z¨ýŽ ³2D•·“±jKò©h˜_«â˜•©Zn÷”ƒâËäȧÈ—bçSH[oÏcÊyÅî&{s|° {úÓ͆‡ñ¹¯C­"­×˜E?K3_DvJÎ(#a|Òqó+ì\¹ÜQü_ŒóÆ îÍNx!§¦I+&®um:ˆ O]†£#”¤,-•d¯O¦0©1Hb·ª ´Š»§Ve.ÎðEåu¾³wD =ìÉØ/ v{jœ§ÍârQÑ`. ÷à'_Ñ©yf™F…Û¼)XÆXÓUÑ—÷É¥Ùg¦í(f´“œfë ¥bKìæWáâUJÒ¯C‹—j§5c–8v’ÐÕ!l;v|(¾ªMéиO7ŠsZ«¬É˜ 1ÖÐ4kâÔñÅ7j¿].{KÁu:M?ûE›Pû}ÐlîAV•!!6©Sleíº6ëë]ªO›8½ÏŒ¦à›Ë„KØT6$±PŠFp­¬éà[šH3©Ø+0Vl¤_¤×9’ê)W…0äEdeíÐìI_Ú'øÔ ßk? ƒZ?;6nªrÚ&uçÝϑ͒ØÎQèXVû°Ô#Ó§üòmŽyi»4Sÿ‚ÿoLP` Öb=©ž:QÞº•pLy‚³k’¨#£qW¬° d“ìY~)H  ‰ëH¦‰Àè "…§ZÊ‘GþRîžKŸ%R¥C%”ÃM÷Ñ ‘µ‘†A´X©FÕ4ÉÓ3cüâávÍÑ p¼“¸èu/rÉD+,¿JÚÉþók{4¸ Ã¤/œÀ£f˜KŸ#x€T™µƒðÇJ›ŒÝ¬ewįLX øÂÍCú¤¤ÍùäeŠhf^9#U‹8RµŒæ1Vs ¬ž¨Pà|þ:{gª{:0‰Òõñ¬žbØúù!ðFEâª,†§v§¦¤•=,jÏ*¹¦ÊÖ{ƒÉ/rÞ(msĪ lõƒ¡úýTBy‚Äõ²”£z£êö.¸Œ)í‹·E1ÞÚ²XíÙÜH ªbð0‰ä³üØýB.³ŠMÝÊ#ÏkþgT%¤É6VtJúd´œ®¤c¶=±ÃÎíQ&ý3¶6¯i«“C¬Ú¿.û+ ‹´Æ.íÊqœÙI–ç [ÀÍîØ¯a·:4ž8ð5Üú#G‰Œh.î†ËZwïÑ åÖ H@ÅâMö_ÆÂ±ii1•øÔÊ¡º·¥Œà¨«o~R‘1NfMê“3*Š2EZ@wî.üÖ­þœþ8|„)(è3ßG ·þQ‹hê-iÓ&çÊ’[•¬+ßš;]lÕk=ô¤Õ&”¨Pˆ€J›ÌúØÁþ’épa¤~¤#Ò#3$Äwexš4ÒIòy³åäzöx‘سì£ÚP®0\6OåS{ê(㳕³UžwÍaB¢‘vƒçÍS_åïnT¾Ý1h$¯0KNx©'Ûk rï,D(Å»q°)É`㠆ߖ&åŒÜ$ÝßóZNØŽŒ˜‡:€ Ê)kƒ¯:âüG6çtä<~CÓ‹YÙ¾:æóJt!Åy4¥;¥ÝÄ!$9YLzš³˜Q͉¿¿Õ¦*¹ÕÅšâtPP *—f‘‘Á(jþ¬Š¬²ÌhÆì‹¾XÁÕ0V}Ìæ&kä˜pvì§,ëŒy´Nko}³º` êدnè€þ!Y sNÍFI£M¡!ÊÃÂå¤:Îoï:V“¬›EšÚÒK“ñd˜!êúƒî¼£bi"‰RÝ,<“Šª™¢râzxMÄ­†Šµ€tÐ…ÏÎ@´ÖåÕÇ©û¼#.Äþ†“BÅc“z%l¸dèÛîJªúdì2HiçU‹f¾Ì´ƒ;Édïððj´+ÿXN¬ö£Tõa’; 5AT?—žÓ-R²Ë|­0*)z® ¨\^ÉZíy-Ú^›1Å-¡{÷-SKéø%||¹•¥Æä&yKYCæÈÍI°'‡Ä\ÎÎÔBå€yVŽä3þ¶¡ét&É EwÍJLeæ·2æ` âg˜Çèloʰ®†<èÙÐá„ =_y¦®e’ò ˆøã€æ-*Qj•×Ëd7©©m–ú»Ó¦ãÑÂÅÀ^U»g‘óa‚ð&¹u™hàˆÎ{KtêxŽúœ ]šE¼ê…U¸‰ÑouǬžn˹Lé¶è!OöК½R"î°•K­05F$4¨¢d#gƇƒ’U6QÓ¡Vø‡…hÅ}*ìÁ£Wº†œ\ÓKz}9G¾³£m ÚPÁÚ=Y_GCÌ 6Ó‘IÉ’¼Þæ+=_ŠÛÁ–‰=¦©:d¿7»À—æî”ƹ€O˜ ãç¡d—ÞŠ¨*;X­ÙòÏô_«æþ°æšt±B\¡Ì)Y¥ÉrÒ¶A¡¶¸‰ÿ¸‰!]ê.ú.Ëá¥:5)«Ó›æs¥ñW‹ßVZ§‹WÃ0 5ɬMŠM¶V¶êÍÅ¿E¦Ò© IŠW£àI›mgÏ–;µ\ ~ðîr/Òx`þÉL èÝàãÇ%!΢˜*evôØì“`äÜÖ´Ô“†FÈ¿à~ ,½P%¸9dIïy­oÏDP‘ÍW”¥…Qå/-.wŠÊ!VÌ·¾V\ùCÚÕŽÉž#ワ«nµÒ( —ojq .Ú‰«f`)%ë}´uçH»+ø·íoÓŠ‰ NãÐ'ëv#L²Û˜•Ôò8ýº#Ê[p”µ¹0µ\.æë1Mj->£bPÇ[ÿt9‚–ü…ˆF¥ºÔ>C­­h.Ú^úô²F ²Ñ»æ!AlÑF:„kpM—'¢™Þý#I?27ö„Po»¥ \øHkådºl8Ùk¿“wb¾ÔÁ•ò¨jÙFü„û ŸNpFrŵªýÞ³|X£Á8ë±WÊ펟>u Å€æ©xfvÎjeýCC_ºÎä&Jy€ËåIô²»!íáÐ Fb9X BìŠEJ^!t¢#$Þ?NŒF¼É…Éù_ËvµbÏw²Ñ½˜õ®@¸¬öû‰|uñ˜&Ý2Ñ90¼×·œ€Ë-7û¿ì7SIS.yxÊ8M‘‹$9~ÎÙ`?lj¼b~«œËÔª²r5˪&C\Æ)`iˆ’q‰7Wš±Up|fFÎTepJ­Mld­¤z¨1‰{šMïC0UMÙ ; a€{Ü‹.ƒwIV±sß;3/ÇØÓõ¦i¿)Æz4Í¿÷{‚´ö²òªãCÅØ=L¨5÷Œ×„ñÈh¹ÂËq{—&z„‡„pË3µií{mjÔqɵb-E;¾ÅCrp‘ž.ňÀ°]0Ó:$ù½’wW ”y–*¤ûÐ1€(¹ãÀÓ­üÜÚ¾-ó©Á¨:ýUEt„Rõbñb=ðh›GÍ<÷7`êáq”Ä»Šcß#¢ëˆõÚ=B…?©¨ð\בñ¯ú‚Q:j(ÊÆpWõ`œ52ÝwÆg£‹âÓ}u“pÒdÄ‘òŒjΰšÎœæ$SeÈ3jϦñ6u¼ ÙbNódkâJAŽøåÿ\{Ò­šƒç~›ÿÙhäÆ*#Å@ÍM½%˜ _¸œŽšìP˜¾] A¹ïoOHsgܿDZÊ% "„´÷÷ï×j¥ÖÏä­lȯaªò:5Ð r'Û¼oËø›NК1+Ï>aÌ=ŽW&&ðÊbë”+m$YÔ cª! pˆË¿Ò’>ó1Úœ?,Ý]°C.RL:&—õŠª Á¥ƒøš†»ÆÛ‚= ‚E ñ4ÚòO¦NM› ÛE þ Iæô˜öªh’;\ °uÇ;ÀΜa(Äïn[(ȧ¦ç‰<Ÿà¸O*Ù$W²_ÞÌ}TꥷMIŸ”ú‡ö!ć™/hêÓ£¹q‚X¦w IBÿÝ–]Ãwx£H¡— UPÁ%••DlT«·ƒÆÔâØ(VpÆKˆ`5¹ÆÅdaGqÏŒª5m7¨´¬× ŽéŽoĤëY;I=£@^vX#Z“†´NN4–èhLx5\ýy¶ì›ÔF}òùTŒU6¦;ó^Hšw°ç` Õ *×,Oã–G…kûpe0¢AŽÑQ +þ¬þË[Ó?WÐ0œÂå?¢)lo 2å@à.aÎuÞêN/@ÃZÞ8­XŠÕæ¦]"i°pGsÜÚ›÷‹;ŸeO³¸°¾œ ;ë¸ï­”¿ÀfnaÏñLÚlݱL+:Êðb£Q+1røtü‰Â áPIQ îNq Т޾¬°ˆueº·2ïÎà˜‚ô:Lâ¼AÆIÍbd}µhÈi=)¹òâ³¦Ç Äæµs’1Än<¶‘ñ0<ô€€:™®K¹²DÈ}¡îsÎ妎 Ö«V¿óÕØ¤ùÔØhjm÷Œ•°‹.ö$YåíÕ:iÍì„ù±‚"‚¢Ðã?;ámþdFÒ©º’Ó “Ù:º˜²d|»”+­Ê1—?ýœ¡;"á@·ÒÏÊÛ°Zåãµ½Ö7qÜ=/„!q°_ˆÁ;Mk,rþü›ªÞ-‰cCiO”9úzÖÉ9¿ùÕ-|_9#³^¬gzŤÆ"52ެ§Eíü$…ÚP K 6õ#‹Æm=ôšJW]»˜Jæñ³±E->ÈqÕÚó˜…ÚÔÜrÛßMy5¯~F§‹v€°˜~‹ø/*ý» zÊ¥OêñA{Û=,Í’†sš«4l/3ÕñuÓådwZLm«åاΆzGù§x¢IhaŒ§ŠWúF/‰SJ&ãu‘(a`•I‘IÇòòãÆxuׄ‘œ7K²{ÉLæS:@ŠEó;›Qj̬æÐŽ‚Äü)[ZÆÞ –Ò±P®ªˆ h¸hÐ'-~¸L0Q„·өPE A„,0‰”ðmSpOþ²Þ/‚пàµAç^ÓÊëã•s mu笜.ûµ¤‡BY¤t {dï6ÎÙ©´dhaZoûg³ÙŸVàgN[bVÝðWE´ºŽúö]x™|Y£6ð²½5ö„­ˆ0Ãxá¥æFP™3Z<(ÓçâÐ~ –¬jðý‰ÞÍOóõ’€JÄD|J{šYUjW6…^¡øà Ú:|B„_aü”Kª»áoå_@”üç;¹Çb¿ò[ðNÄSç:é®3£iÕ­’bªÐ-µvTŸÂp-³Î›kÄEˆ{4K<ÉÇ®5Yä&pV˜“K)Ìå2"#7ÞŠéÍqZ¥ÝÔ­xg3¥nÄÕ¿)Iwf€1gI°—ì­±0(PJÇ™v㜯€šŒÔ3 ²Ž4ËRõ˜Ãö ¼ ¨ÊÅ©1œ ®%®©ì2² ÖHf²rs#½¸ÌUìºMàÓ{ìTç pÝkJ¯%ª_¶«&5hŸÄ|§Šë—%غ̆‹­É¬2 ž¿HÐ&£ºÕ-dU°É×Ý”»Ì¢¨—-í¦þACg×ZêUÍÛ„Êœ‘gSÌåÚŠ-–3V˜/žVžw7Jå d‡‚’nZ‡Já³ÎIqÆJd’®d™¹%_Š¡† DÒfý©`eûX•SÙÃL.÷@á¬Õ=Çå4€($§äë߀ۣ§)G¬-JXRiae4Šà-iîó×»=Þå-§CB=µ‡c$ŠÚ{›“;JNìš°(5Oj'OÕ̯{øûfÄ·³•UÝ‚†xÖ&­˜åÔ#ôI?¤eÂez­4g5A‡ñ,j]æJé2Tƒ ÷ÍîGE¢Ñ×7´û¦ )1e[.@Y^"‡Š*äŠ-?½ÚSµâBˆ!Â8çSµ"ô3³:„RÓ–¤k=~ Öž%§• ~üÊR Æ:wXMå@ÆèÛ:ÍI³#bˆÇìHTï”Ìl’”{òxïü=x½<ž°_)’ý¿Q 1šO¨~vðhUwˆ„ãlß ÛŸUÃ’葞à82VÛ9ŠÍ+®lºŒzeA 1'“Îkªö ³Qóî¢ès¶E/*æm'Ü­¦Á¸;·cYä £ÉvšÉ¾¨îÎÒ®<æYm>`¾—Wýõ ‚›)tz|ûó³îë_;1wXËìÀÉñß³ŒƒÉý¿’óÿ?¥-±Nçv´ÿWûL(o¢wÏu}•û/,^• ™jSâÝdªúÿíFPÐ~D¬Êò}_éÐÓÞøÚÀÀÀ~Üïò³¼åºƒ~ŸI%;© ŸJ’“[_ ™Ñ($çi3¡èôÓ;­›/>ÙEÁœ›—e>þ¶ÜEìHÁ¹ó2 œk¤_ñ˜ÓXû<·±–9ÉÍÔñº£“ö¡IѨÏ_‡‡‡Už·OO¬°C#FŽÞÝÝ}}ù¶h¹¶exh¼¦á0B¶Ú±EH¶!ãKª‹”SªÊ 19.%E`Ž;©¡û!À »iSâ: <8˜ r'<ðB)±÷À:lï2‰Ž!W‰$žþþ?ïÿ=^þþò‰Ê (ÊßTŒ/[ ,ËÎÞžžóÎUò7‰5ýËvc†x3ZÕ¦»Ô·Š¹RNÖ)—Ř뿓H´É3(@³œû6cš‰O“vÝ"8é­­Fñ\ ä’©$ïzcÓ;Ž6K}“¼Fq=ÖX&Ù¥–——õ.Zj›­©ja¦ø²N‡á™W;»»«-©ôêUË^=~þþñ$”îZnÊS¡•þWlu¹¬½xqc *¤–I$ë7/'8G$øS¼"y³Øqm¬­zcš¦íozb}¿ ÂöóÓ‹(45ñ~e‡ÐH/<ùÈ“:×ä´r´÷$—ñƒŠ:.™Á‡‹Ö-˜z"ŽB ì\ðÉÿ.8wÕ ä—ëCËà ³»´:ïLUý~{³|ã—Y/oMy^jÊ<âb1Ôp©jЪ‹Š¦§§wª´Ì¬]µ~H&kMKKkâççwžpŠyòÚv;ZÒÇõ’rÕ¸1}ÄvtpÀ€©ñŸ•ré6‡ä‹GH\Ý“B@ôL†|'‰p2Ä(P)ëMD ¤~™<dœw•µvdO‡Å#â•0›º- híEÌyé1Ý׸“L7QjêêêþÅM¢SóÆóñ±i‹ÖDˆ^œž8ý׿ׇt—ýV- PÉ$N­,ÿw€oqŸÏöDøðÂÂ;Ë–þýînÞ²§&)Sàˆðhz®)ÛºY#ˆÃa0ìVêüøè/pA¢öLþ}Ù]mà 4{ð8Â(0s|ÂM9Sã )ຎàýš@(ˆˆ¶Së^lw ø é è·¼DL3C:&dDñÌäÀ ¨ŠP‘`Ûb¯ø£š:^H†,ñ“þh+«Å Û†Ò’‡§'U˜ðRh•¶%¥¢••s„ÌC†wHy3ß Ò`sL§ºÎ¹ÕUuesëóQîÑ»CƒÞXÉ#Ü 2«ª†ÂåÝœ‡Çämöýõáþs"ËŸÈx•€@GÂð9j(t¡BüQ#©^fyTp’g£fO°8NŸþ½}m!@ÉFe€jGú·SÐ$”Üá-`€™OŽÑˆ{ B™Sš'ö«°][)­®žNo":r€psì_aq5gb:NÞÁÐ1 W¨ †+§âÐøÏÀŒ¬œÄ²³±æB1'4`Ü$-´«›]ÎS´Ú±/Rïƒ,—kÅøEß* ¦‰Œ/.h2æEªêwr>«e—lcž¨µkԼ– Öÿ¤Å°]›±Ò×,qÕ"¥4ÓíüRéK*G „ ¸¥ÅF"iÔ&Saª×Þððæx‘U^ˆv¢äJVR¢w „ ˜šÐó=&%zA•º=;=,‡Áv.B¥[s‘l˜ßþüÕÍ7“ˆ¶d&³€}øj㿠舜"¦•rþ0˜+/] ÔÕ©~jû’NË+1²0a=Ï<~~~“!~±v*òotw)¹ò¦còï\Çõ[œ wÚe›x•‰P Âø±¥ÔŠšphóH+ýë'#*}¹Kpp”†â‰(Böd2òª¸ Q‚óƇ2ï€I•Ne6«mp,]ÝÀš‰óÇ©'¿aLuõÞG£Åô$R&Må呬f#ŧf }ˆøØL,É[·l_Aw•Ññ@[¼`°½·³pVoKk¥ÒÆ[,3éÐ¢ÆÆÆ`/<ÄŒÉVw—­L)mdWk®Oóé]ì&àá_B·í^›õê"þ¾Üìöù}yyy%–ÃØîekzRzoÓÒ¢d¦õl@`ÚèDΖ=©+2€d7%§¤qB¦Hc†Â$ÉÿÓñãš8<õf^¬z@ <WX%ŸRaÁð”¸JEú|­‘³!ü•æÇkqJrF零û^pÌÕ–®bK+)³HôTž+XN=M†æŒè•ßdÔ`§à¯£^šqŒòj5à>75°ºÿïyxHÊÀÇÃ[`ñýgë¹€ŒÑ=ÀYÏ~U³ ºöX1€0‘ÕýßûwÒÚˆ–ž],]2‘Æøe~Q£A®‰eè–UàÒ[×UõÉz˜¼»%X‰X³e¶ÌàËI:ô (ô\§¯êý<Ï"rDÒceè¼–­)9êV ïuá!dNt„˜³t›·Åúò5 œ`‘uõf¾~¾¸°îÛÍJ ίƒªwŒRÈRøË[í¢a½X5¬lïdݨœ+œùªtÄšUŸ0tºtãþÚ_­Óäææú}½?}¼Üøÿ|½\’oW@S%dã„Hócï…2Ì'¿%#;àˆ¥ 8y@ñÀðÀìÃà‚L6Œ'CuÜ 6Hà…¼üzlïŒÚ(1‡VõÌAß ŽM“…D±MŒ?vÉųŽÀßýžÒÿP,š5-ذ|âÒƒ'3¸x3=ÆUúv¨“qÁ¤Qº¹½ëíš’èrªrº`«¶ Xé¸ÃÜv¶hÕ¸41ÀÖ°`9y™µNožå•Ly¹ß7•¤ZØT‡%9'­ó{ÁŸïíýù]VFÞ!ðõõ²ûó±ûÓ™y‚r«‡¦tÁʦéÉù]=žI-he.\¶  „sŽuM,ç&ÊK¤%ýTDÊùòÝ屩 :{ÅÃ'8`UÊ­6!ÆÂLß©ÑAÊÀHÛòDˆäŸiîÆ’k-Ü•ö’ã.E¤3uE£¤&[ÿXw>eê-&*´Ô¨ã±8k¦Ujg&(¾#½ ÒßeÒ‹mŸ{j) r¿ªiúÙʯÒ>`öööžw,—™“"0Ö-\yÏâ/¯Z+Ò E‰‘‰-v1cÿ ô¹C„evĤªM—••ÍÍÉW4^÷¦–l¬¼h&š8î €$†§mSèV¡Ì‰Ì3&y<'ûÁòaQÌÒù{Ñ­D<áÔƒ S[ÚR`9îMÀ¦Ò‡r€áßò V£eÅøÚu~ûW™m„ö¤¤‹ è,XYUëL×›Xœ–ðé ‹ÇtØŽ~|õÒ-MME‘2·døÉβ»cc'wkÕL·¯‰=N,Ϲ^i®Ò"|}ÿ\æ0zH¤ŽáÿâýÅqÞ3Î¥Dto28ÿ,jV¸ ^hFì8ïƒÎjÂ>/Ä’ Ù˜ƒ%¾‰­irNô ‚6/#Ž6ßL¬{›¯SNB„fðÝ7§ï{C^¢´¬ÌÛ£NjY=C?Íy°€– /®Çh a ÛýøñeÖ¤YµÌ•ÛÙYµl•ˆÑÒŠY)sJâ½Ô“óÑ”ø7{R%×)–ÙMxéĩޑæ%‡owaš¹—”k.¦ˆ]>Á¤0¡˜oÞâ›ì+l8ÆÝÊvS]>+f?¾˜Ý”± µü©ó³ÝYSÃxÁèðA´8(€¡EË–#YŠ”0ø¢“ŠB·FmnvI†@’±wyŠ-­Q\)6„ÀKÝìÿ£ÚŸÃ+ùž/`ôd’‰5Û¶LlÛ¶mL2ÉL’Û¶mÛΉmÛxóùþî{ïs÷?}žîÝÕUk×^µªŸ>p|­xiXiêVߦJ”›Î˜‚U½96±eki˱ù¾×ß¿ƒÞªjnN.þ©%«.Â3þXFPÄ@ÿ±ðÏJ>Š}Ïp¢,÷#Á6I4¢øí‚jXÇ[ÜT)‚ˆÃhãò„%ê¡]FÀ½_‚ß¶=pcᨽüÛC®á¾7Cg^wŸ4µR†$0õŸÓããc’$Ý\㪭¿/âÝwõ;F€Á÷ÒjËúúüö„¾)ª?[MR°‚J±ÉÒBÐm† D÷evú³X1íZÅÊ£Zö"¦‚xž- .ô{ªI~Ç?b$ )A® dÏË-=¯ùvi§»ºâ©Õà‘½Ö‹‘‘PSM˜,FôÃ@ dׂ3EŠŸj˱ód?ï¤åÛËì§¢ü<†ˆ¨Ø»ˆŽÆŠŽÎb—0:©}ì·ê¸fñ×Q}WÁ0ùé¯Oj)åꂈâPçweiªóVºÉ`Y· Å2ý{Ž‹Üõ\o6\IìÿåÒ2üAæ„ÞC·ŒÚû»Ìê,žø$ãt*E+@@ɤdúêz™]„¨ ¼«luÊã»b•ámå1‘d¸…Æá¾‘’/Žãi:œ—:†È FV-Ø 'ÉF—? b˜`ûÝo •í?ó LôÇ÷tÿ¡­µòåqµ: ZwI`æûg­àk0A~áL_‡jÓY,ãÛ2ˆ±Nåj¬q¨?™»ÍL®b¾QDWÜ÷‘)^_sÎð®€êæ U(VÝp$`_'~3Mî;­®Çá.Ø»ßÄ*€5¦Ô›5÷Øbœ,ö®ŽÝCÑa±O‡Ì[ûjˆJJ‰Ï(õ{:ø¤”…†ïÈ·C横Y†>IYõË¥+bI[`ËyååÔ‡Ðm‹Oö¯ù*5’úƽ”;ǯ ÚÁ­C9{ý˜˜m[wÃîQD¬9m}c+-F‚<°òýŽÅ»hL¼žÑr«Ó"ËRcÕ±òìSOZ/fW´*ÔnÜÇw\uBÿ :ÓñÈ1GKö>¶ÝwõLǶõJÐé?Þ/{ÓËLjÛ;´î dž'h ?ŽÃÃá|+8È•tË8Å&˜lE2¿À l´¢"1Ù{¸®æçawÿ8Ö«:œ2RRá‰Ìkëj÷¿‚ý‡eÐ*'cê…fpM ]KÛçÀª1ó]+R‘…Ö™çàë€ËÛÖæÿ†ÇçßåøN¬Ç<æ¨é.8Í2sh]4']0î®ÍŠŸ0QSÀå´K—RIñ¸VEáƒ^ɸTR‰Ê77Žzà×6ØíÅ4¯¢=ö\Lì~øry8uÐý|þ¢âË+,¼•îï_?pÉ¿݉¿ÿÿ3ÄøuO¸ñ—5€M jûˆ6WåoX‰bÑ0Ôc°ÂÅ–_ãö{½_a¨TJùMɃÉÃlú6齘öÑÿM¢š¥+T|¸ÞÛ3Á“–)Y6mÀýîFŸ£|õpvî#‘M®4ýïu…yB µn—\Gã»ÐÔ¦AZÒA¾­ó¸"ûÒMR*9VL2“ÔFߺ¢kê3“8RG`6×ò©áÑ[œ4]JÊ¢­ äFë(¿5Úcl‘Âk“™Îó¤?Ò®ó¬ÕÒQü„â³YJ}É­gq“ó{Ü|²ƒ.‰{Vÿ’Ÿ˜IÉÞÓ{|í‚tJ÷"xëãQÔXÓég÷Œ*4±SH9Z/¸»˜Z‡rÏ–Ë@uÊÚ¯ätÔåPèûð4“^´ÑŽ}¶&I­hr~ÿVºZ›Ï͘—l;G¿£Ûó¨mËND1Œ{ËH¦z܉¦Ó+òO­EÍØ™YʺÆ,ã}yE¦–lBùÕ:ÓÎy@‡Ø¤”;ˆóóÕCÝ®¼¡õâ)“æþ 'ŸlþeI0 °9$¹R'Ÿº+7A²÷zFËã¡' ‡CÖ[f  ‰W'Ð q˜ò~zL^cÏÓ5¤%\è^òwC¸13æXZÂóÀ Ó\~Ï×{na&é_¨¯%iî4o÷o+IÐKU÷ž÷ÒfcsOæî1ÇC1”óCÕMçÆ{Ñ«†½P—|´Õï·1j·W~«MAY°Ï×\ìn·L\ËFO9‚ÂTX\KoÃfW§õ‰"¤Z†2\ún¢$æSEš)†0eår¥Í2&×¾­ð(]0{2èqÚ‘=`Ÿ#ÆäB®kµP^æ¥.Nü‹O&V6®:RŒ.†Çô¡óíQôlGœ´z%Ögm·ÞeC¢Rú ÝLOSÒìO&ïl—ÈkÐ »¹.oÀ[fÁ}4NÏ ýw[¯<Ÿ°«SÅ=IˆFü¤ü“MÛo‹JT¤()Òã¨8XL“½X4G\¾R÷­*"'ÕXOSúݲ·æ¨žíð/i+jÕíH¾Å­ËíE>jÏ×s˜2É‚×g™O-Ä$d"ŽÔÞ.†žŽÒ—㤫¢Ñ*Á\ÁìõS Pdèqï(Öއõ¥jå«e<{É4Çë`-¬¨«Ʀ(ØÇÐã…ÿúpGR¼O{Q˜Î´*–¾¶e?,ÖÅ VÙEƒuS·R=:‹fÌ4¶ò™Çyѱ÷Ѩù¢>òKIKÖä¸f©ºÔ¢·ë®Öž~$¿´œp…±¡£þëK'#òªÌϸ¨c0>Ha‘kgŽÙ_Ø Ò×nîÏD¥~ÎgwlÇ®!øº#LeÞw.Þ_9Ü¿>ïE=â§Ôÿ ½Uÿ½y¢U|аù3¯-§ ¡žº¿Ž`¸Yí^õd¯æ.HjâÌÞŸ‡´Ïkìäô&öî°Ö[h Ekpy1C×RÖ»zÚº¶² ¤‘¹Í®ŽyöÃ)Ò•UwêèÅG óÿ¤F(BÃ.ç¹ϬîŸ*v"Ñ0Í0¼y }7ìÛ…ÂzëA°±6óLÇ-=¤ò¢©´ésbêÉ?ó2ྮ[gÁþ¸ OA«²yÁ. JG³ÎùW@å‚£²é¯ìxi+¹^ Ï—ˆ±£ v|©ýÚ(É‹,ìÖÛXCý£ÿÑd™òæu–üÔ{ðÿøT«ü3éÿ¸=¥+ Ç÷Ó1u,îS¢ÅìFo¬ÖÜØ‡H8ž+Áf2]¦Ðz°”-þoû#ó ³Épôܨ¢I«ÙxÅÈ>Ü´ç¥)áë$QQBž†ÿ§hòÊfŠ7ÊðéØõ.O+,ÒÀ?/ÉwÜ*ŽÖ6çÎè/«í¸¢ZSUìÁ .©Iµæc4Úgr·µz ™—&.¦c™ï>û»¦üC‡œUÃ×»Úvw¢Úv. ô­¹²ZŸk­—“ÏB!ðÏѦËÖ!£ƒ¼›À*Š0wå´G范W­Ä}±&L­"²W%ˆQ¥Ìe`3ó}é+ÍÈE’ùÂþˆúbYî\ûÚ ß ·Sìµn Ò}çJÌm0<Ö ÑØ /:KÑL-¦jÊEáÁâ^½¯é¢eè¿—¬üO‰wùÇkËÄålÞ&,GÓ3iéI%þ–ò×`Ô÷Îc®ÉGÍ}Ò]œ…¿ZV?f 8íü1KÞ.¢TOï<q§¬|òu2­ìÿpÒi ¥ƒ:;z¢w—hAe¯Êóm–S¢ç6:ÛM-¼•g ѧ1>‹u¶9Ï97G¥ƒŠ¾‰-+É)¦*ÞF'Lc6ºHD“b‹‡Lº‰ä?pøèåë£åEr7`æQF¿2¤Åb&¦îö资#‘0eºdOžÛã°v“®_{}Îtˆ¢èÎxæk¥†·Ñ"2¦sÊòq5™Ð%ë>"0C'x”×$>ÁÏ‹4d›VZôp ’>‰]Y¹(¸dç‘ÊäžÓÓÎ&pS–cîôKŽ{AOâi|ï¹&(yÝ%ÓÞɱ Lî×´;§ežGT—%úR½|b#†ì–ººéŒï߸èÐ: ø0>ïžXÑ_ 3øöVð~Y¤üê.o’R³>¿EÔuçVÚÌݬ#IŽžâ …¤GȈŒv–Z+?¤ænäðŽ”yµÌÌBÿŒ@ä‹¥¾uÑý[³Ïf¼¾œ¤ö84¶‚“3ZÝ€?Ä{Þh…6‰±‰?¶É«xéVõWÄd ”ŒåÉ1CwmÀypÔôô ‘À奻µ©VQ÷ËûŽm2ùFÑVù~IuŒ›.Ç÷üHžß¨e©t„ÝPâuÇí.û¼|jÑ~˜Ý}ÆÃßÔ‡·çe—¬<‘'e:Ÿ.²\^ŸÄî$²¼Yýóó@¢Ä©z+Î3«ãÆDU6ª!¦È—I|ÞY”õ@My àûa)¾iEËäLž3½ ÕB eV~ÖËôüí/,_ Æ¢?ŽªÆ2óž ñÏ{¹–™÷‘³þı…íV±èò:$¿[˜Â€îÊP—lZ¾æ;žgÇ7›×Š1酪©š•Z檧@Ó6g]­©n#ÎYO%þ}IÑ.¬ÆEÜ%ø$æÖ1ñ:‡Ë9K5üN™„K6y0G³?üœ¬Ut[U—…é&>Aï–éÞ?S.ËBÜ+ÛÍ{Nxï!…_•4Š ¼TÌì ç2Ã-\öy¥züðg„xÕ·ÆýM/¹¶äùV&ÓÜËR> °X¦ó: 7%Wün( @þé“7¯Y¾ûs-˜§†¥Ÿ 6‰ËßùþÀsápé|6PÞõ¶×h+ÈS~QšuÖáMðÆ¯ƒ›X’h•†I-_ñ瘗Vì$ÿÏFÞ´TÿÛò¹"Ÿ`êøÐìÄ(ñ¨Ùª ßÙî;p“¹M¯¤kÎÅiੌiÌ›ö»W]ÅnÊÝi•ÕóæY}þêF`;gÔNº•f¶‰ï£ Ǽ§×¹¿ˆŸ$U°Át1¡k³±iÊÕ9Ê >åy)”õ+Ë©·Åz7óZËz0úQ}ˆã òòyëoO­ýWÿ}^óí‚'|©›°úÌMaØ©¥ç.‚BV:°c8 ŽÂ ¯îôÊä%Ýñðp’|Õ¯»^‹îEhµahõâ¿.—«¼Ú ·˜(˜‰<×­­£¦‘€úKôˆÀ%6ÏâBµoŠÏUá©]Žõõ½7¼=±;Æ„IG}õw„0)^ƒ2ózÖÑÈDZÿ0ýïÛÈo&u?vqg²ðù^®¾Ú<÷áÈ4£ú—=O|YÝÑÃÄÏ›™"QmÄÿDM£ta[I$ÌETg—¼ކ½_áí7@¸Éûú<ãà*Ñ,}'õAXAÀ°„7ë5h†­lÿW¡MÃß[óõ’ùœˆJéRuã§Ÿæûi(ǽw×èÇÐ2ˆy Ð}Qý‘ÊÄ»{n°2°£/—* BÝÐyÿ.°ªn¯¢Xæ¨I§zò¾8%7V™ž>©§öý?ÏÜþÞócþï¦<£žWî{¾¤·ã½?]ÂÜðQÉ¢KÞ·‹ ξm£ÐŸ!æ_lø"ðmŽ~ãóM_±ìYøÜ>ÉœB<È?*´øéä˜"˜W¶ˆe áÆ¡<_¥þé¾´èû犗οlI‹DúX|ཋïÈîç«àú¸µÐòÿôÖ%ͶÛL‘–jýYØ\™ï§>±×f yî Ôê‡Þü‡û–@³ræ— 06ëôrE(SΖܒw!'âÄþ°STsCšÃ=Ÿ,{<Æ-öf›{”{ê—aðˆ`€%¸/«!Lˆ­º´>®E™Ò"wlËQÎü¼»”K¿^ü_檔íOj~éû^F…^z¶(•hÐþTÜV%z”­Ô |©òiL‘5‹Fuú>:§X#QåäÂúJTÎ `@ûB;Ì#CÐÞW#³¦6&Žåqã>ÿ.$oç²òs¨W­Š˜xô}‰‡ V5×E‰ÛÏ·ý2O¦Ð.Ht¯Š›ÅÙÄðwï¸NC å­ÜsArÔ)ÁÍÈL“‡­2{7ˆóðìfÙP¯mêdXeÉä—[†ßÜäD¢ÚX'/÷ÌÝ9“y?æM~[È åÁ:Î ú m²yö¯ˆæD!~”µ{áDX£`9󼹎‹å_¯Žh*Äÿñ£‹rB}?´Ó㣊ßû×£*üsjc!ÃÎæ\f“LTIA™«A4vFV×Ej½ÖC± IT¬C4f¦‰öDOË–~ÚCSh‚8J4Ì2 3 I;Ö•ö™µÞ•Å;$ž—Rctºà=‰UÒÔ¦¾\µÉåüê_8ÍŠð+ÑÔy“©™¡+6~Ù­avÉùlfÝÍ>Š}ÂL£ju¢ð5ú•Ÿ_ ëÑ«C“ß¿áªYæ‹Ê8×Ð5ÇhRSëÒR“†SøgÙ´ Ýá®jœ%€¾î®>h.²º|ãñâ@à4Ñv,g~‘5w|ù‹’»§€ ¨OºG+–¶¨ù¶û³–aáôa+*ÎÁ}ÊŽu¼J6xêOTçaºóÔ-¾7qTᑘ"þL(q½ïÆ9þÁ#¶¨d‡Ý¦þä@Ä£¯o1ó‡QWÃão SŠá%©Öˆ9騴gkcµEÒu,€ŽÄ48 Cü5QÏßüÛÈpÿù³÷»ááâ—Ä? ÎÚÍ©èÅ^ú‡j÷->åô``ðÓ¯Jvþ7wþz\«Æ_ü¡ÞFÙ©²–JQì•ÇÓBÍPÔ¹Õ€ÀÊm{´ó„©S ²S7dMQ¸Hà±#1`É,2trU—i›6Q(Ês¯Ä–Ftèè *´Ö]­¤MyCé¢Þ­ÏâoÍô~~ÍÂ!£„#s[i^îê L™rRýþAƒ´/ §c þzrc(íÓ*Y•Çl$-.ý@=Í€¬*&s®—²Ö"ìH’8uBN¹YàŒòîñð/!ôÃã#.6°wÌÜܼòtv±DV9Æ\©²B-|c6Rù?qÙÅmºd. þFÇzm Ü‘6^)Ñ”±Üa}B N¾—qcÝö´uæµsÊš­ ÄóÓY44žm3*Œ–JµlÁwŒuyŠÐ œJ{¤û˜=^àÌ@¦JM{^Y¤­íÜîqš•¦ò4ü¶ý Ü1Âý*qE#M±'qZSÈn× q>!Ðà&/†ÉºBÚ3uÒ[~‹n>>I›ýPC>äzŒââ5ŒQ|xÁµç7¤?|çß7T…4%åúâ’‘—•}xÙTà þ˜ÕËI;þ|ô¯·¿Ý îmä1¿—%(:ÐŒ†Äò}|Ú»ºä³o6 ¡ »ÌGéûžø‡íje V ÌÖ°DÅÂÀùó5A Ù¶­ÝåµÛG¤~GØîFŽã 䟖j>YàÐ}¾;½je(!5–Ä -†Œ€NÈî[«t îÐN»äM*¯ØüDS ÄB‹ùSvã³…²8F _Õ¤' ü.§\‚Rk%Q%<úþ¡dÅvâõ´øÞbssç ^s­´Á÷å·/ê“CùìÃBï]Ù.%'1ÅlÂT»`q÷ž+#)²]b˜î7#\QðxÕ€·ƒ[­kN~|/vT¸ÍŸÚº-¡\a/isbƒÙŒ»$ÞºÃÂ@£çvo(¯Lñ ŒŸnÙÝÿ… ìæ:üÑÒZ)YcmdT‚ ˜3)¤§»€±bGÆÏ>¶ìjTZ\~áûÈýÛB0²hj¤‚Ò¬Iè<Ö”ÅY5 ´ ªm•ÿ¡þòMJ5­gèPúȉ|¤º¼º8èšò®ö± khÏ8† w,M­øuRÂåå%ºf¢Êð ¶â >}Ÿ^ô™£%@Q£ T›k€¥CÕK¯·fùHŸt`Þ—ÊëÝÅO‘q@Iq =· Rd«•©&öŠþòx¸C…¬PCâuˆªô•è_ à”ãc`P'5ÁAø«ÁË Ú­¬<­L+;$üWÜÎ%©T »¢ì¡ìÂqÿXeͱ3AC¸t/ÙbsCcÏWœ¦š\Õá†ÅäùûNIžíŽŒúí>YòUó¹uÔ£ñ¯5ÕîÈ™áAwy C¥fá>j,Õ#5dL£4`#ç6S•¦ñëàuÆ’ÇLš`j0º$ÌŠ]L—õ–÷ò·äõ~+àÝÀØ7p+™y{ÓV<þò´V^^BµµÙÒ9°ædY>¿³aÓc}]]ÐEk«$û#£|̉>oû55¤G¯ƒ;g#2 §pD‚ÒÞ®“XÍ ØRiª)›ÿRK22™l‡ _æO~ë^|eþ‡ðW6Ù¦–>‰ùÛH»10pîéÇm6Ãù9¬kÉ|ð޽ܸܤy&ܿ̽káK^õUàÞu²=šÃ8H'ïRKèÌ‹a¦_øÉ/Å?Ö(Pt/?Aöø„^sÔ×'ü"]ëñg€3¿;WÁ¡g=†kƒÉôþ»Žûåh²ž@ئ)½x¦{ª™¦–[\zºN•aœs¦Ú¢|8*Ø! I©Þ‰íÏ-UxIJmjlÓL)z1µA^0¹]†ÂÇzfÄÉëª÷`g¨¡ 5e†Qž•WÛòìõ5®b@¤üîëœs„íê3¢ß)ïÜGVdÄë­”S&"iuÝä­!ö;mC9º¨‰?Ò BáÓÓ`òö®¥Å®w@<“k¡a€Tl¶ZœG®ôD¤½J›ÊäJ"\œà/óÜVuJä–E«†–Öe×u­ µÊB=V‹™©ååe›ÏÌCÙ ;-þ‹¤€¶ “LÝ6É£2¤Òª“‡&¯X ÞIº¹cvw¥žÛ«9|ÜGDsoãµÎT­Ó{¯BK%è´Žp)¨2(eìðx¦çÇÓ‡žH”Œ"¨®àÇ¢C1’Æ,ËOù!=¥/aié‚-Õhh"eÙZ)Ïœ%3g’/{tjs;Äèà 8@r5ViÌQþL?=-?SÇ(Å€(e8žŒQãëZSK*uÇEÖŸ%¿ý‹-9H o{çÒ¡W"3¶ó]Fóözõ—Ü ú#8•˹ºg ódTï?à_§5ðÕ8fúÍè2Ÿlò6Å@k«ÞæzAÉœJ;B•Ç@7mxd”Œ²¨À¥ë ;|À¹­0JÍvÆßÐŽâ…»¬¹²ÆÔðÎLáy‘« «këû#©@„ƒWkl4¬0LBÎL·ÀÚP&¶ƒ,?»¬s˜gUððo„q7oh™9ŒÝoεQ`ïÆP§‹Iæ:6)š#øxÚøÞ x®æ¡üz¤ ltÓ'Xhj«ÂU7PÚ0l±N=0ð °ju9§âœ¯"’(ÝÎwn]œ¹QP d„?ñ<óþÐõÞä26Ä‘Qf‹aú­”$ÕŽP´2·¬cN Ó7ÊÁÎ/xBã…-Ôe”;^«ŸiÖ¢«œ‹u§ªÛ>äëg\wic¢$õ òÀ„WÞ­·@­|«?Ú¿7õìÑ÷ëYmÁº|kw`h‡ž¬ ±X’ Ò"AŠ9ÞŒ´zr©Ðó±.ªÄÃÛL¥,µ’el4^IèŽJÁq½œAù ÒGXÒ]Ÿ Ÿü[aÈÏ€FCƱÞCm¹·@œ_ ~êœÜ$ÙÉ=Ì¡:¹ßý¯$"ƶñr=ñºÐål‰†°¼¼– 4ò2?ûOÇÔsb¬ÏSPWG>>Þ¦>V':êh®-s~€ás7ç/¤û(‰jï°íZdMu‘òú—™W»Î¢7?Vþ ä?øµ­‡‚áÎg8½>ñÚ¾¬mØÏ­žL ¶à7ã‰aÎ8Îñ†††[â~ì%Z‡FÀÒ41<úWïrj“O|Y=§3>©p÷æš–Ê£óCf§¢¿&Ó‡zã,X-&³Zb46¤Üà£7ø÷$…Ob0!Ÿ4?NþÁ~bL‡™ÛO¿(IŽQ´lü z?Kpâµ íy(ÿÃ(úg'ÒPÄIùºÿ@Çí»ñCd°_]»”Lâ[Ýö<ý÷Ê]$KüÈLK–‚*»¤Û<õµ¤øú:S#8×!jñ•,¹Gö‡›O¶§ex2Z%û¤†³<ÒNZ¨Ü8Ü ³Íåýn×í)ðy«!6 †‡Ó:ÕgZA6dv—&ŽÕ§h?>etÐr7güžIÑþ™]ïû(Œq¯Io3°¥6¹;@zÕ5Y ú!Ã7éwØé¨"«ÞÜ}Ï<«®´å)í©4UÿV•Æ*ãR!ÕFfÍ(K×þ·C&€Ï¥\’ì`)ïò|~:ƒƒ]ö-é0³J6ÙŒÞÁøÌ~ÓïeìÒÇüaòüi½;3JÙ)[;œ··ôÔW½Hd±³Yä:+š±•þé-ZŽ—íŠÓÝ1JY5“ ×_/ôº¼Æ­¬f°|!ŽÓu/'Þ|Cu9÷=ˆž# Jj¢kô÷§ \&Ç̲ùlj¡fÓã“ê<ŃƒÐ@têxc·øb2@øþþeq®'šB]H¥“GÂE‰ì²WŽX>e´ïö1ð¦©V”1‚«ŒÕõ!ÖŠ¸m;­/Øcàó‰ ¤¿du9N¥ÙÆQÀl¬Y^)Át¤3º¶¤ÓÝi(í\#|*;âú,D7¸Œº«j“ËwìrÕºcÜÜBu¡\€üã%4fÈê×<_zö„fêkt8DõËàRû,–ÎîÝÚÍ f°~%+” 8ó1Þ·YS·jcðêÇUQÄ%û øØ_.ô£-Ûƒ¶*7Êã6ø^_  Zz pàI”.ä®\Ê_H/˜Ÿ3† H˜[!Ê ‚66>ÅGŽQjÜ04íïêæ¥Fðލ+yˆ’Ú<×Õöq¼ËÛÙ ’s v CTÊ´f2+³ %Ãó÷LÏ?Ðr‡|tþíjŽ«ùÿÌâ…2ñ-Ñ„ ùyK9ø^ÎbÛg ö‚MéY(¶©§›$©4¯Â£ ¼Œ ¦€€Q¦R_FVauN:ÜÇU”ö›¶…êN—oá‰ýÝÇQ^-ò©~Èð zÄ égÔ˜ žnSi+Hà[bEŸ?Ž#ÿ\髺ù>Â÷ê^y<*bëºóˆÒR[…;4¾©OiËv¹f¬û©ü¿ÂØVuxèFÁ¸K uÆá.q©ÄæÄÅ{T–›šú†ŠÎ_̳}ô#­ÎóˆØëŒc½pkÂÊ>åì‹`Îõ¥æž¢éíõïü%Àý“?Eþ—]ÆÉÞ¤¤+Rr‘ó‡t³O˜ßÇ'Ö€£ÛçÖp¨õæfj~2gŠ'ÌäÂ=Mò̦bKXéÞyÀ¬4i:…:•Á…ôÝ~,¸«êÙË{Uh˜¨5’ª”®_Äï³Wíƒ1®Cý«8 =¢¼q~) ÷ž¹gœcà#SgÃŒô`[‰ö÷(°òÓCSúx×É bÝÀšsÔÆV…¡ª<Ĩ‰*`Áùºÿ¬nUNÕÉUÙŠ®â 8Í®eDƒŸÝÜ¡©?” šêþƒ^·v—;\›EÖé±âŸ–{ï¦áõDCmZ‡ŸjæjîÃþGCÂÆÙ[Ö¿ÊPúõœŽV)½ê›¹:kG3†G†cÍpóë@áŸOóK«ŽÆšxˆ LS ËÀÎ6 ØV]“WE\—1â¼*›Žr MÁ&QÇi¨ŠìFJ½yºLW†0`£(VÞ9ñT¶G ¿ƒh¢É3CZÖâeœyæˆÇþêíÉ8—ó$½ø†_:†6§ÛA&ÚKKšåˆÙ®ÑlÙE×ÉýåÔÓí¨>9"(V‚"šp\ÏQ]œyC¤J6Ðÿ]÷WȶÛ*ý+À`µ)ÄdtC°+¼ÿÆØXªØ|q%=«.ªôia>xž@«3Š[€5 ´õ~É[Š÷´Éyígs®"58v¾ •€K,E>=–'m±SïÔÖâXO™‹=NùÁ\勯töuÖ=áú‰‹¤þæX/Ó¥ÿÌÖWÿ¯SbÑØšÛͯ‰E{D@Ö‚ð¥ç}­##ñÆ6ÀÔÌ~[Lh»ÁL ?–‚e%Ÿ¬ƒ&|%´¸˜ ú¬w "0¡;<úŠ7j±ÄåzÖà ƒ¾]¤,S¤ûÁW n„3ëœs®K„¿£í¯Q‹Î ã–üÜ2h˜ÓÕÈè[­dÇ]í¹HØÞ-.1Þ Ck뺗dÓØóHa+ñ…¿¨$uÐf6+xžG­BKBK÷êzw†Èzw‘›®ºêO¿oØ™àA”Ï¿m­ç%çƒNƒW_”(/ýª?y‰Ê.¹œ ®°†î¢ÇÒí¤Nû%†6rÕç ën0OIûtú®pÉõÀS‰6FÄëHÕ^Ú³Ô“£~Îhx¦Â*eÈ9¥Sf8…žõî')HýèbÇFØ|”fÆÂxЧ`²§(¼è¢Å‚#ÚÚg5,PGÊi¤Ë×›¿ä0éeËð\Ø6ɼþtÀåyBŠÊYxí9®*µ¢zó4ÎÐüqWÔüHo•µ!Få¨Ïy~‰W²-ß7Ö×çÏÏÖX*Ü›`ÛEë5D"µ?•oäw>±AOYš·ÉÒöNw.l˜))âÔØ78xemU4ièôìÅeÇ{Ñõ“9(rÊÈäù›X43"›%Cn»ú|¸ ËÉù:¹ˆ¥»ð2^lßc{b¬"×QŸŽ·ã|=”[Ó·–x%)ªYþ±*¬û;›-¡o΃èúØf6{UR£ÖÏÒ]Üj 5Ü/…Xin¯RPæ‚×Zó­ÞTÞ—/ æí~g‹Q«¦¡hžªÎ7Ø©Ž!žê„Æ„RXíûÊ áøö`ãvÊár/wV“žûÏÀ!W7*¼ÎÌ?3 NîÂR,í&£ä´=ýÁnG¦~a\Øäå"ƒÂ[VPž‘À®nˆÊ˜ <¬"Åæ^“Æqü†˜³ì͇žÇI7êãú;v0ÚÙ<í5¹Ot`Z8TU¯ŸªæŸ%àŒÆ»~®‹oÍ^Gñ­Löþ'÷/f¸q\)—·¬dÆ–¢žªœ}í4"[^o5t—Õ:€Æ)–SÎNSó's¿ÙÓ§ÞíSÉîJ´ˆ¸ l .S™^f™t1¿ n¹™“¥x®ð}ÝÔÐ]}Ì_à©Î“Ë|2[RY[kM5Ü;¨äêY¾–Zi³‘Šcæ“_Î2ÉóÛú>zñµž³2Ù;fm¥/œÒ310¶ÛêD†;¯‰kuÿ¾mÐÊU|ßÛ™è2eUвfa¿æŒªÁ©¶wùò™ÁŒÙÏác)Ñ]#ÑO0xøHPÏn©¾ËÈ1¯¯Ý;ž¬™9®àôÁ°‰Â˜…Áè¨$©Áé‰ÑuQÉ׎,ˆ¬»íY90’Ï<щeD‚²Ò~7¨4ʘDi³Mv»D˜ØU^òÓ œØŸšq´•,H¤.dZh¾H&UîÚdÅ¡'líYËoÖÔ ᢆlˆƒÛ$•à \Á²>x¼$+  õË¥si´{]E •¡ÈÊ-­íBØñû„S*p‡ÒQhºÎÅ@ s¡µín¯iîJ5Š¿á¹Ð'i[/1>Ÿ ǧ¯›Câì 7ù‡wûHØàäšãθ{õÈΙŢ‘ŠL ¦ƒÔk/vcÀ¿]?\q•ĪW%bè~)"2¤oÅæ•%:øþ-ôn žv§QËö± C4PF%®>Â0<ÕÔ MYõ­)”m€ìû=†émMrT ŸP–û|áVÚ&äÃ~Œ/jYdåšõ•Û*ÌÚB—‡’²ôjDÖ=°˜ÏlD“àºz‡›²æØÔ!uƒ-pAvá«ÒàGêó#¦†œNpоƒ ´›Å-]OÌ]¸‘Îe@+¬›:{¦ß®x«Úù@@såÒÞ{j ÒëßJùý…¹ŽNzmHoæZZòLKcøg‡ýÇ›Á?¦ w­ XBh±±:ÑŠt sÅcŽËŽéÅ9U¼u @V9ë1ëI¬,Ê*å¿ßZ‰C×X ËW3Xü™"^³­OvÒOœ½PéN×࿜õRäz¿¢ ÉÚÊÿt z¡ hŽc#×bLbÙþ`ü³ux.øÈ– 8…L¶Z­œ_µCEPy=ƒø…ìòW˜î¼‘¼ü&w$Ľ[&üª­dùæ%R©*…b.=wÇÓ<¨gÚñŒrÖ2Å~CP Ò­˜p(óØè!¿T÷Û¯ Ž1øÜ?%`¤ƒ@ÂÆFïE•hŒ`ãK. Þz µ>¸Yç·§m¦-‰ª ?Uh9àmóêéÆ 2 ‹Í1µRj»Ž£­rCcebåóŠÉt“bÍI)Ücë‹NGPž]¦È˜Y 9ïõØŒ§vq2ô«þ‚ ^3Ÿ>…üŒÝÆ­~h–Z °wé!"Ïô”uÑi¼p–2ºO¾yçi’›ø}а¹3B„M ijÒPËS³÷X¿ã<Œƒ& ¤„ÅÂGtmÂé×í~DÊ£´hˆüc .1<ëj P¢Tzg7`Á‡NîûÊÊF&«‘ÊÊm±‹]uªÚÌÍ)QŸ"„3 ÐsPß•4GT=ÏäËÿ&–þˆ5ê:"Blg½TgñJõ¹Ìë—\¨C:# Î@ …Ü*¶Ö¬1y;Oxt8¢«{ÿÍW¢^Þ"B’Oªºç+q!vîæ/\TŠX,XÓQIf_™³w8SÁe¤<É#_;6¿*ÐùP¦ }±(æ(Ö3Q ÞîT\¸ƒäÄÙ°‰†¾ÿÿ€ÌsÝ äiU:Ÿi _¨ yqÒ~c\¬ = .K÷´ %œ•˜±òм¹8¨g§ìæÅ¨¿à‡¨dò §€Êå[=ˆd¹ÆuÃå±X°dIa:xÍ9lH˜Äc{f*Wp°#¦]Á'=ëŽ K•ŠXϬ•Ö¥nmºònÉs®J…«´eމ€?Å€¹?­éñ ÀZ_Š¢5á›$>ˆ¯Ô½×®‰&ê}kçæÜ¡Õü ÓAkå3-ï'¨b,ËûlLcÜÈæ÷&ºá…rÛÎv°õÚ7\[îée¥L°c,;5Wç…c9‹ý¯o:1¶`õÖu3ŠO>©éð5=Öêñ¨p Δÿ{‡þgú7À/(ô,ÉŒ¬O6˜º¾ ¾¦þÚþ¶”.É®½ÐÐåvû¥³&,ÑÛf Èl0.×L¯%礡^’^%)îyiJ.ÏvÑo+ôvMò¹”„A׌@â‚Èî–}ÏÞ[‘ºã-ñzQZÓº¹ë2UsÎù¯ U¿úF³õÛ¯\ïÌì«…íôÞ «ÕeÇõ­¡›0WÏç—½~á\½G¨/t`ª®.yc†¨Û`_µÍ’¬[r¬nrˆgíÔÕ…ßVó4«ÁS²áê c^ëNºqmî¢ÆQûjùJLx|¼t6ó/Þ§l_2Ö[±©SydJ6mÚfÔ¿- ñ¯;}w ‚å`l`;ý­aÿtðs‡ï h1”švV'¶#zŒk¡7î¹tæcz×¬ÐÆ¾Hàó- ÷CâÅ/î 9Ü!5±¡}‰‡ß¡¦s<Ý¡+6‹œ‡JÔT §°Në;é’ˤ;¤æJÂTP÷^?~"„ #—zÄùï¢×GþÙÂÀøpªQ‡ 8ý—ÿIi̾-ª’ùr4Rü0 n °;aj¿‘¾ôúvC±üÑ~Ô—ÝOTö^Žk ªÖ|¡#Oqw­,Q`Ñù]@¾ø8pŸË·_¥aÇÞû,PßyU=åßú¶î×n íñÙ3ñ%Ž:÷Ä&âv¶@„QýùgW_¡ì$“G9¨&FaÖ2š¯m·8šeŠžVå–-$ £cöÔa˜#®Á-õFò'­"ô ”|ÍH"3–cÔÉŪJ‰ â½7ÿáø-⊭§\$¦qçå·­tpLD׊Erã+ï÷m¡¾4ì:uäÀUvÄûím*㸬ÈC.Ë.¢3Y9åì¨T {^!Êå>«iÞÎÙ®ë†wJdƵÉû»^§KG"ó÷üWiÅ–vé®™h:s½ãÔ€ù˜>õ$Ǻ«fíáeõ7‡î9Ã)œ™Ia4@IˆŠg³Ó³cA©¨ˆžŽˆÓSJ> -1æÖe¬ ;øŸxÞ·+¨—¼\ÙyƒsG²ÌI¼Î–?ó:çàYõu@%o`Ñ’ÉA}™ÕÙ$Þ]¢¯Àr ÔÏݦÖɬNûè¿mf³Ä?Ń@Ç`¸ ó”<°†ÙvU6°ÔZqˆéŽ¿TÿI|= `B y5Lî LºìÏ“!GŽÂÈäÈru|\rèYÏøc׌ýbTZš*NE.móSSèJÆ$ xrüúÝÜûO2§­iôEú?Y8Û‚Óô:ƒV¥ÃôŠRñ+ö¶dîðzOÝ‚tó •ÛÕ¸ØíI?·HLoÊMZç/4 D+ µ0páš’ótÝZO<Ë:,zT¸Ê‰Ç³·TòJ”³¦;&¬q¿þ=‰)‡­Ýu»´ÿƒAá ZŒ«žE°°]Wíz·bØÚ‚(›ñ2á…h>4(th az½bјFôdZ/c¹°n[ïÑi­ã0}Q<2Ö%¯"(À®—Ÿîþ x1rÛŽé18­ƒ?sVzÃéf¿^BñyÞzÊðµ]¾`ÜŸ¸;·Ý” ÔQ!“×8µ³±îÊö2£ô¾­î„fÙQ9dÌ îj{ÚÍ)ñÃè¼9Zð[f†ˆosbvÇAüÒ“ï•âøêd"4ÜmÈ}Ú!P(Pb(‡ô¡ûJæ'4öñNÂŒ#uÍq5Oñ–ä"oðÈ\ošnIu«k’igÏo—R¥ÈFûñx¬'^±M13h \Ìñ'nµW}Ä òV¿ßÕšp–ö¨µ•. –a¥…eªW\é†Ë±þ€ªÓmß¹°ïRLþZe¦clU3³™Òý©&¡ÝŸ÷ÃìžzëpÒ6kYŽFZãòßáK– ›«åè‹B1 ƒ)U/¶U X%ænBXr&µ_=J2VçQFR-kœ–Bld‰C’γµ0©NãÄHaYCažªD™CÔKÍöÍ«X”yíFĹ”Îg«Ò{ÂNx–×a†Ý»jƒÞ£M¦ïî[e¼R¥·Ì§J9Âa2®ùÊ.zy¥¶ôž¡eÚuã\üçÔÆ} G$éë‰øN6=Ñk4j=)Ö]m ú@›&îÝnýØNöºènv†ðnvÓßAÁ¶pâ¼6Á˜i“2'Ž0¨ãß±«µ¤4µýq"ÿýWÙ©laÝê󹤴¬ì&:…Ršêƒ!‰²ÀDˆü,ÅUé­É.\’} ,«'ýŒ9u¨ß%%÷P ÇdRý‡\4à0E6ü†yý£AÞ`r_š°LòºR)’ˆÆ› €‹‡‡G@ðÕ·÷1þŒÔ5m,Fĉd¯o¨¶¯òó8àú!÷[y½³€:0±BÌVÅŒ~kfKúX6Ƚéã„È• IxAÿö†ôŸ~UrFnÚ­ŠÔXN1"ׂÚ 3þVž–Õµ÷hÔÂöYÝ¡+j$>ª½­ò|ú,L,>ò\§‡¾ @Nhôî"ue€ºZ;64o•WŽ¥µÆËÿÚˆlÎ`©9’@îDBq×!2ñˆ^ÔÁéF¢¤1^;~p;¾F,¤xä\Ñ”›~ƒ[ÓTŒ~ç:7B@iÍ8üÓ`¶ós ‡ÕxåL9ïàygjÑôZO €çä ¶{\sD<^µÊ(­0bz ™Ú­ñóò¶®Îñ¯}«Ü ‹Îô¦r‡@­¥Õ:c<ÏËÍ&¯8S‰K7¼MB9Ëð:%´Ÿµ°¿`¾• sƒà9~(j¬ŽÚ{\+^|N³5ÝTêVÙ_Ã>þýPäqº¹yïî¸ÓvUùͯ¥¥Žù N©ì³dv¦ 4Z‚•/õÖ&Áp È•N…䉙òGš Q)–“v!~:á6KñŠ5WêWÌÕ¬ÈÎ 8KÒ ­²£.Ø+õòܹ ÖWë¼;øþUW~Û4É[Î1šš±…½¤+À~ÝÞKfÒ• 7:Z‰ÿc´‹f‘ÕÍ kuÕÝll«¿o™³$®u{×Íœ]%Ó Ë‡FÞ“ Ï›n‹?ŒŒúÇÃqPÖJ¼rQUÔÓPM«/¾þ4:Í* r¡•¬®ô MØuáÕl7£ºÔ<0"y¤ÿt–©ìg‚RÜOnmÄqꊜxD‡,¿€QÇ™h R#°áL5ØV/‹¨[ÓÑt2£ÆÇvÍYä°H2)w¶ë)-Ep¿§„€bª©4þì°¦¡¿¦/õg%&áB:´*BL±LœÅL¨S¡úÙ«é’‹w©³ÉeŽZ6Ýõ»øÁ“-§nðà(£îM<„'çnúqÔg¯y»»,€£G]â§a48R5FÜ¿6ã½RÜ¡FÊ„R²Æ‰¦ðŸ;ï›H“gU8¨Ã+ÏQ«oèªÙHhŸ7™ÉOˆ Ñd Ê牮ó5Éá ¥ðMDÀ¹‹ž÷bÿÏü°9¯TXæëé²…óÔUòUcË ÅHAÉtfG—ziRÐ)— ±ˆÅ*ËY MHËJ¥Ñ÷w½¶÷œõÆÕsrp@3LðaË|•Ùj³i±ÞWƲ4%kž|%øÔ¼5eÍEŽÐé«n”=¥Öù¾ã„©÷Ý*z;Á@µS uÏÆM· ¤E†ÀÀpé:6›a½÷Âä_ £Í0†tleª±ÞZˆùçÄÏ>Z"²­¤QÚCèÀ±Ê:¢=}æ^‘n¡_f÷“üfF¤94_e@t ÔÒÚaÎT™ØOvÏ[ÞèÙWÍ-Ÿß§Ûb”¤¨x†Ìß‘ .òáÒm¦ÏIÄŠ|~²OŠYeG‡ÒTÌM‡ »W®r\¶Æ›£\°Û{s¾9Ñrª±›µ÷îkP¯6´DÔ£N`*[1•í±¦üf³Lqm(‰Þx$æÃä «*c³Ä./äÑõhjÒpííO£mÿ9ÿï¡W¨±*XÝþ ü\kÏ\F70”,‰v® Òœuò_¨o–=1€²tÎ&­W5Ö6ຩ `o´sEÍ¡m¹®î€Òb˜ŸrŸ(XÈÏ`´ÑÖùnÄš[>þ·b¿“ÖjOo'vîvU³5iQj‚É™©ßB>g¹žþ›ã¢;®Â3×)÷O÷ƇS ] è?¦®ZbUÙpTú(V3Ü ÍM2pN²€ÀÐÅ2'VA+˜”Y¡ñHÙ”(°/ñQ0¡xÿâ¸z9_mÇœ‡1¡§Øõx—Ó¦q*,–`M­$æÕ™Ä„,µÚepê¢~š•˜ÛƒqûcaŽ›?]&ÑÞ-h#‹çª6)‚‘þ%ºè2Õ’o~ÝnUHdýŠònJ ý S[:¼BÊ3-†S®š†. ý#–€vJÓT³â@…MÊñí¬rY(„‘‘ï*é}d½FÁkˆºÐqç œ¾ÖI<æ`yC> s²G0T~†Ûº û¾F/çYHŽœÜ½$ Ë©]dÀ°~Äá*^3Œ0•&š!îK¤³#Zµl½ñ3'Jt=óµÀÚ‹’Œjë}ÑÅMDÆ-_uãx/¹ðªÝ电bô¯Ò(ÎïÁÇdû’ªUÈßõ¡wkÂEÚÎê[Z‘@õã2ûÆ®rðé‹I¿Úïúìl­JžZZ:EÁÕZZ’;¶¢Å‰† {CޤÄ]ô=ýDÙvU±†X(6P¤ä+¡b< HUGjþp-Z*ùï7t§â“}¬mÝ8çoZ.5i‰FjçÔŠŸP„7’Ö¤F¦r`+A33vöå$=؇½ÅZàyá~PMŠŒs4·ÿ:üÒ‘;B Ø}éðòJ ­2º ý¥§ÅS(™‡†Î‰øõ¡–ß߈f§îÞ³ ±Ï½äl²*ØVýEïê@FµyûËú¼Ørq©?*ä_:ü™éZZúytiK.[ç>tü¨b§‘s„ÌJhjH…Çíh˜[õäqÃ3AàÜÎX´,þÛ»Ÿ•òÒÐ̦žL‰½ß·¾õu°&„m7–*+l\8ä7âîç‡Eê`YÆ•ÖSW º lšŸ:ûÓUœ´ôÀèŽ,0Uÿl•ñOÕ.¨¾îÔ/> H¯+æ”5«‡žàT£ þbKÇ|ΦBijÿñfd°pc 7ĤìÛñg ‚CøivÖYýÔ¿ç5sêzüºÆ¨•i8Wm¸jâö `š\˜gYžûÐû3OÑå¹ak•¼"þpšÂ‘wʦ3´<Ìå>âØý¤wìÕÀHTÍ—W>x¢ öà´°É-£Î±Ê (Üêí6•î:¾ú%Õ1eêiy´=’¢qŠê[÷Z€— ×GtìmÖ1X3u÷bÜ “Ù‰¶æùâèú·¸¿®))œ*åuõ³ö°¯ó7ÅQžxçkÜÞbdÝ‚Cü®`IØVÉE´š«Ë¦»Òp›™¾cswÓˆ$Þqw«ûÊËcÁ»eÞM~ýòJ¬Ï)âõŠ )Ï¿7šAö=Ëä,M²mÞ¼^Î[`ÿ–ÚM>~K†«çjVÏÇûÈrŒ‡g㧆PJ GÖ3× ±P¨¾ÜTÇÖààaÎóq£òœ\»“r¦KźxýZ°þ!/ÕM.î?YÜ~hA0El)‹Õ‡*Ý×W¾yäYt(‡„Ê(ªˆ ¡©î«º×•(æ‡|›PRhÏ%FŠœë½N©L¶ ñ¿£8±üŠç××ϧcÜ6žwxœø½xŠ`Ë#Q2ð³zwÉ~“ýcÃcö:Œð&OÝ(§É`‚çØkfÛ”ø‚0có&cS:”¹Ìz°Ld+5ôõG›lÃ.¡JÆH •sÒ3Ñ"©´¡Y!Ž¿=æ%0üÂûúB$ëÏk4 —õY`…§§½Wš|rˆ·Vq?eô´bèvòÔÕpêbسMç¢:¹$Å‹Un=Áy‹©")eŸ¹¨¸L²Ã‹´Ì.ý pbJ÷ùôʪñôú”³„ è« ãö~sìlãáq }<\Î ÒÄž76+RŽ»G²ý°Uå oêmbM«o•¡Øè&;¢EFøíSó»U“‘·Sqh8]”hÕ>ûíR¼|åæ“LkŠ’Tbôyü#ÖnLÐJ« ù¤{˜&ßGF{Ž(fcøÌ<û8¸?®íµ:–×NßÕÛ®„Ûž­Aõ´¹ÛÁ.;1Z.Ô°½Îésç»/k–Ö"½þ¥>¦ÿ=¢Ó¬]j‘œ?íùâ_‚ô3£“ç¿)fs’éŒ?uš$OPãa–úQRsõü#ndôyÅ]§Í·« ‘e"¡?Öã+ñÃ5¬Peã¡uçI7`{FŒåGưF0øÐŽqUŠö´+7½õ¶Ž$€C½fÄÎCpJCa„stVù òÆŸwŽ×;*x<ŠfØ;­¾Y2©øf†ÿœš¥[øÔî<§ÚѥܟkñðÑ´ð Ř[ôédz3B­ùg ntØøØøÕIŸß:_2TÀé#¢ ŒWÉpGÿ=ßx¤ ' ‰J’I•ãYOÄït-MÉwÿ&„ ús½¯) äZF’oRËðVüèUñ Ä\ÂÍ“æÖÁ¹2(^Àéþ^¾ytŽ/ý<ÀfÝeÈ Ówôå¸{o†Q—ãÍñ@‰%Rð{j¿3ù0“,ÍËòµ7euG)1B SN8•‰æ:I'šû[£ 69 ÕBʃŸÞÒï£DÃå‰Aõâô>ÎÝlÌ`„[s.jú‚È6é#›ï'*õ€¥à›žb+ìØ!Ïv:TBP€ý”VÃéÞjÔoy×ëz푨$lZò<,zì.}WºêzP€ì.…:QlZ~^¡×¨‡£ºù÷ÒA°î73õçþu.fs½uª{|U³g<âÉ Ë[¶´8FÎÏRÏ…Ì ± Wßóß~ $Óßʧþ÷š„~ÝðæÅÐOågp,sCÀV›ÝçÕtšç‹5Çn½_ÇþçÎÝðaR wúíÃÐÃ'þôêÖnök) àAO·ïI¼~ žµ‰ŸÎó¯øòRò²û£dŽ×¦L±ÁïTs‚|së>OTÒCª'J¤ŽÞnI7<>‡äb`4QŸYª ÷Ï-ò/¤'¾pÅÚÏdŒ¢ÅË6T£ 5,q£ß ýéœN‘yï¡<äÛ¬j˜‚…Çrhùty¨„'ÌRä͘jšcp ¹Ø`;À äN!zðãM},3 Á”‚¨öÓØ…eŽJ.¼'Ïò .½Šì´‹:Æû HÅæ( òb í…–(ç +"XÛ! <ý33:%?72'/ò®Suš˜BÁöÚfôØ"µðʰø õîVš7ÊïÎÌ Ð“4xÌàQû˜chŒÉ ÑÍ´å2#†&Ç˱æn;!B¼En>—Û¼®êc*|‹ÓU°UÉBF;ÑÈ´‰JŸÊJMhƸD÷m¾Wî¨ «¦:5È¡ÍÄÀW*©ÖЈ¸Ö¡åQ·%títk!!/ˆ_Æ™ã3¥ 0UMN¥³pü¹žº›vÜÊZÍâÆ÷£.¹9òãä'Œ/=è1­ª÷@x)ÄB‰/u¶ÚµüÜÚª-j\}f2ÔЗÑï¦=àü£ôì«ë§¨·ö.÷÷Ýž’¡²Šöœ@…ÿĨ÷Ó… œ\#ósf’üeôò4/2k—ÝDOfݳsk;!+£ƒpõyùpXóÇuŠU[‰ˆ49¢Nv—å©©{‚®fÊ‚Øõ0Rëaf9^Øt¿” —¨ß²=N£IÎøöÍQbö en´eû~ ¡—,TéÀ2$-οx/E‚ªàòt}€éS—;9ÀœOoX«1ŒNYàFxW[½Ç•ÿDÞ‹âžP´T¦F…+¶pý4$•‚ ›åasø;…†öÝ™·ŸWw-à–a ê´ŽkEÌñQwâÅ„qÈ0²®?¨WÙ¿Ž‹eÀ ¼]]lÙP­†“:Α=IY™É]°Yþìã3õÍck¼x˜ê2Ðð¦þÂÚëV˜pwÐ"'/å§v ››=} ÛV{ÝaH5×¼=2=¾Ÿ42D@è/¬oD³…fÊ9s¿…dë£mî#üòÛáׯ<%¦rŠ>OO ,è ùÕn'þh äýQh¥¿ •îîÉ´å³¾KRL*ÎM‡ ËK뛈D÷†O8/ñ©¹0­°°l²eK´ÉÙý‚ôò¤§ÿ †`34§BÛ]ô "çîÍ"òÚô"ÔÚ÷©›òüÙڰ׳fåS`bf² 4ÞLÝ/?ަ ªªÏ¦`Êe ‹ßj&›¼÷”¹Äq“ßÁE‡‘Ûa4 ˆ“+ÙÑÉK¶ãsŒö ¬øŸú4I”äÈä1£~?5oGŒL<LÅûI5²ZRugdʾËNûGj0§QÛÞºýÁ²Ž„v¹ý4måxÄñ?ãèáy˜qê¯ÚŠKÈÍèؽMôm`Žø³õ!ÞÈÄ|ô¢Ac½óƒ¬¢e8â'b÷¯;(–÷üAŽ•tÉcåc™#à‹xŒ\¢&ÌA!•¤°¤Ò )cg—à’¨Gèe»´Ö•¢!©”=Ée5X™u¦ÅÂÙµ 8 V!̯k\ÇϨ ¦èa7gÝ]ÈZ”ö{*jbÐŒ£ÞKVè~4°8½ŽÆ[œ´[³íÐ…í‡6×Ã'SSl¡ñôûcZtÏßûÞF1«/4µa:Èì­GÃiƒpñ°ÌNÅóÝ4ÔâGuÆ ’Õø”Ý`R¹ÕÅçlð}-n£fÑPÄÅŪ¦=ZS[døøb Jhª±¼™ñùáó3u¤ãÎ<ÌRƒ¼ÐIs8ï9±>‘Úqý²§A½—Ô^lrS{ïà¿a„Š­w.Ò_»!ªS0kaƒïü7qÁ6a œö=ÃÐW¶Î²‘Ö´¨úU ^·Â+ÑŒTÚêï~¯ÿÏ“‘èÐ:­ué\¿™ã{qj²:SIi´p0‡sTgIN»ï±Ž£¶Q:¨G`.·• ‡sï>“¸³ÒŸù磺 >ïÛÒ•ó5K¿ÁäŒÃ¢´t½¦«öîÕhh‰‘~@Àl8/€Ñq÷ŸáØÖ/å¿(’ž“ÇPBÀ½\AÚ"„"„9½.ÕyM™›µçDL j¿ñCQ¹A&™3<^«Ü'íNó”0UOå¢}ʸkAOdz?ÆAë¢3?þÏ›!AFÔyZƒHã ¬ÈæÂZ×Ú}Éxê!×[]<ä&mš¾ÑCá¯À:Èt j¢U?Aµþ>ÿSZuă¾Ï2܉!¢ø÷OùE¾wq¿š,TªSnÚpü»Ón= 4VXL=!Ý麲t`›šE_øT™;Õá9ÄÀ«DÒN÷ú¦¤3ÀVùwJc<ÆG÷eZl€³´öZ0Œ+`*Ûw†T™±µ3‘¸pzšwøÞÃ}N?‰Ó¥^Æmžž•-óí'tïÒ ´±ýÉÅ¡ón„×k–ò°Û¤7+þÅ&-¦«“o´‡gBŸVׂ šãå]¹BbRf‚aâØOOègB÷Þ¤oûò딜x4jÞ LCö] xzz#å~1-2h¤]àÒÿùÛQ,„㻟$zµ¦” ³-à‰¶u$¼Ú8rƒEÏm6Æý²%¡]驪d{Þa‰ê|Þ®äZŽQ‡:„ ¯«:‚çë0ž×ªp‰b”¸ˆ8VÜ)f•$ö¼d£i§Ð y¹b¨9¾ÑÉ1oEíÔR«<ý9_~É~ÓúV›ü¹½µâ0Þ-5h™Ò,˜ÍCÿÌL¥#÷íoBpºt5Å€Q-Ê<ƒþI|kåikeMÕ‚—ôä(ãØ¤w_1WSæ×Ò•¸”&„bJ¼R9„ sf¸ˆTÆ¥øÑaƒ:ûíl?ÜÎïB@Àrm4¹*Y%š‰H=(÷VåX´šHT-+é#@tÚÎGRáÉÂ8FOÐGù³ž2fãýmÅ…÷Ä €ZhËÙ3¶¯t,ŠOÅÌ‘¤IõëÐÚÞï†Ù˜^8ˆƒ}+œw:Ùð¡€.Œ&_u¨jAå@Jœ`e`­B/ÃŽŠrõÿý`‹¯L jW›ìŸp-ʨ§e–¹\æ›þY)Ò.x©°Øsª˜!ÉwA.’)KåÔp§h‰XºKüêáh¢*þŒì«QÜ"OŸzÓ{ Ï”~ÑRÂyäÝX7ª¥DyC°§æ¹Î1€ÐÞ¼ÉQÍiŠºžžå÷¼ÕÉEZÌÃÓQ8þÍmXÔ.–NóùÖÞ݄骰éÙrÅjszÛdK³[|†PñïÅ&Ⱦ3ó¼›åÕŸ÷ãN-€b=víÄåÙ|:n̪‰þîÓ{”ûº´¿Â5Ô#˜>]g¡K?ÚÏxø±x;ìGû¥©QFq‡\×Ó²8x%H“šìúÄì!„[÷tváÒHÕ & x° àè«î¼š6sXÔƒ:ÿšÿ+÷}œ£ü“·sÁCŠ–‘Ý.êm/>+zë#0ŽÏ"³!ác†‚xŽ.ÌåIj!Š¿Þ¸¼ˆTz‹\0¦KW¹ý˘¢Õ²±\®­Œ2!£Ń -acƒ=–P«­NÎÝҾ꣑0ñŸë=ÿ¦7t‘ý:)9É!^½œåº9…þ1àˆx•r*¦ ó׎aûìƒ?R~V:M ‰ÓÕòîû®Û±9"­½èæ#Gnzò®÷W¾0Êí¸dUÎ_k†ù"4® Rý$dP=© ÑÛ•FÓíàz.Moø:‚\L¹NÓ…‘ï) Ÿ„Ö°Ï„bÚ:K¦Ò´žéh‹EçøfZëøÈoÍ  í¶ôzùuñV&fÉ’0Ó eóA Bù¹ãZß>ÐWÉë‘A.¾‚­·Ü4‚,ãÅh&†,D})f×6‡$[yÕîvÃè€Î£Œo /Æ^SÖqt¸;-Òâ}1Ä/4ÉeB /âÿè\h~¯Â):¿ GÔ˃Y<Õ™èIO/R|¹#.n~4bá(•‚„[ß›1±„ÔªêÚ„…Âqï^/‹Ž Š©Ê×+¶¦ÒÇûŸöqHÃÝ#ì®=ØëÔ®- ŠP~“¿ ¯]íψœ$qÏ n<ûRŒ»7>°UîSâ>>ši;=]‚¬o}œû:AW2ƒÎûJððNþ~lKAf‡Ô¤bP?†{¤Y4.ƒ9–s—kÀëï*ö·8fÙ¡ò³èë¾$(¿ ŸBèï+†ŒYuÑ×çÒ•ÿ+r_…ð7>>ã†Õ3oÝԀ賞¾ø-{e…šò Š6£Ï}ž²ü®x& "¨u ÈǶµ;fQøçóŸІÅ6/¿SƒOŒou¯ôI@˜’™Q|iû‡†ŒÍÑÍÔpƒÁýçÔ 5o5WÃY?7ÚÞè¬Þg9ï÷À_äÌ:[a\ß~ÅlOŸ(ŸG¾¥¸Ã¶Ù›Äsî' èe=“[†çšÐ†~ëÛ»%þõ»¥\M ¨—…eÖ•L²ðÎÿ”0ÞÁ¿O«ÍC›ç8ò§^yÙ6xúñ»Xj²‘r75uŠ¡.êo¶Á™KˆÙ¥à(¢cв d>°æãŸÿ%½o±¼ÙÆùÓìD:ÿjfØ õè!ÇÞUVÇÌ9%2‘ÿ¤ú`Á]ç’Ýè‚àÂ0ÓÙàæ ¾Tý•‹Ê·} ­L×VòµVÉÔƒÒƒ”Øb-X»T$›³áíQÕÇOñ—ØDIÒaBs)˜û$w¤.¬6¸Z»ÞaÅ^:þߦN$¹ˆ„.ŘȪ™Ý-ª’Ó‘KÌï¿™ A‹¹sv?É&«;NèV*9<½5à‘‚n˜M¶Ém“å#^Éúh_%Î·ÔØÂÒ1ªb zƒ2Y§·3<ÔèE¦éÛÈ J’’Z§ÿˆÇ'øXˆãð?ÔGÈLáÔ¢¤L ÞpT€ ©c Ì¡ñÞ–ÐNq¸f¥²yeàÅ aíƒoÊ:Uv?ç|úó&¨–tW…âMcTtÛKIbÝ¿Ùà"%D¨<+õ¿u¾£±ö·Ý ®NI§Ó,äH 1¥CºÅBd€YŠgZäa+ƒõFH5=ôÔ³J»tú[²ìí3¨ú86 ÕܹH2ÂN3µ>¬„@|µcrcâ äCGÙ'O(thŧ­ç¾–ÂCLHÖÊCñ”ûÛ"Ü Vƒ˜§@p•}O½í´"Š“cnjX°h¯5m3¯Ö°1ªÅéÝŸ·Ó‡ñ˜S6:tsú[ƒªÛx@ÀÜ©cN"ºô›EeŪ'fܵÓù;Û,4vÆß\•ƒ‰øv5W-þ@§”ä«€%nhe7óx AdÃ8²cÊ!Wx´bÁìRêI˸ÄGù½ nÿÅm…[ÈE¹ÑDŠ®2#ýÓº‘8r0€oŸG¡ÅÕÄM†8y<º Ûòäíœ,å\ÑÃ*zÿN쵎 €Ú$eK?3Wÿá÷Ë! ©—õåilÑï»v~>¢ß nB©*wwy׬QŒ6iÍP^”<îâÏÚZïÒ[Oû5œÇ¬àL¯˜ý½Ë/1h¯o7|yZ¯!…¬©ì¥Ô°΀SÛ´n¾é©'I)û°m¤'ÙîôÙnñ\‡²ü»—±ö¤wRÓõÀ˜¸·ƒ©Ó>ÇÞ{PŽøÆ 6 Ñ‚ÝЋ½½‡©9e‚•0sš÷Õc·wµ¸uÓ¹õªû¼øÇnö•¨±|;!Ùä‘j$XOµ-¸ô6&eÌé †lÎÁ¡F(MyÁÁifœˆ4jXQ]¦•1‰`Œ%”¯ƒÏ „M’ V`&†Ø15Jö<츢nUΗˆÁüÚ»$pbDýÝ&ã'ÃmŒd<(ãÌêZƒ‰p‚¹*¹3ŸŠìbiÛºÐìý6®8Ga"b¡·}‰hÇ™‰ò©RI„h`ˆ:=ƒâ&y ÞnŒMÉŽ'èƒ3E¹p)Ç›o78 Ç\ B *EáGrK”Ë!©¸sc=Ÿzëþøù*kÞéÒ”O›ÁóÓïý¤\µÿxšqgædW‚òІ|^ÅyºÞ/¾ÚO„Ö«ƒ«”ôpµ²ƒº£nÄNc2ïGfœÜwHÓ‰[7 ¬+N§†êK®èÁè[ aqL•7:Žu ƒB(õÁ9òøÛS+•æŒÈœÐy táØàRˆR~í'È*\ÜxÁû‘*Ãe4" ¡ƒ{'ö”è÷wP¾Ìuxo -/.tàUüZѧà·]LGê;;X‚ÀU4Ú :aw׉`•¯®Ó8'ûÛ!F†—/ƒæÚ½ê2pÛŒ8Ï.äY#bE„ñú .Pó¼…G_;Ë:ƒÌx7ÎðÍÔ…¡  à¥XÚY¦æF]¦§M;6ËJw—ð`H$üï­ÓÓì¼Íx±Q!Uo¯!¹´AúNåõðÝÓ¶ŽXOu–‡gUϳdjŽ×\ï:~æ‚é™A¡ZÙ?Røt.i”§÷ ú•ßKJ?AV'—Ô€%õÆ\ʈÝBK¦ŽÔŠÂ\JŽÏµÓªû­¡lïeÝ©=Eç¯l)±²iþÓm¢ø/¦lçÔœhK¡„^Ô(ß»µüsäèÏ©—Dƒ&ÿ°–œ¬ì`$n%y!F4@®ïyv©…ñ ý唼?PÙ/•Z]7*“ušÎžØ ßO£Ý,¡q£u‚i5ùwÅÉÿðA{°Xm¹ïûF]ï¯þ‹¢Á/m½Z€²DÈ}‘óʨi6áMI0‹…>üN´î´VªÄ_pW=¯ ýY 2*å_2caaÏVtÙüÙ ˜nçL2åº%óŒeâÇhªí6ƒVrÌ4›Ä»ê&™¦ø›Gj×lذŒ¬ÐÄ£MS†‚M—W3üYù±¬žLL2MR+ÌŽF¡"ûÔU+Ô°Œ'Ôæx8³§«Ns¢ÿTžúû(áþfÀ×FY2yc¼Á úS] ôØ>ê¾b÷1æºà÷ öP™a9Ÿ(X‡ÿC¤£s7†‰47‰¤’;…Ÿ”y3˜o˜€Ò™ ÿ5yIÞ,õk‘1×Ç*ýœ”*ápz»ï¢^–G4owxŸ OJÝé‚Ê.K#v!=¥íSÍL‹fOïþÚc‹¦©úªO˜Œ¦­ó¼ˆ] „ •Dr=oÒ7ì ˻;ºÕ¦rÀ°21°dòµ±ø£²Ô¿8bWl·™è“<<¶¸]í?·ôhn¤5?‹/;—ÑÈbxÀI Ü;ݤ¤þ ï2{—!¼¸=Ö®Z6Œ°(®Äǃ’Ñޛñ»ÚåÊè‰Í²ëj 1jÏæ¾Ès¤VÇG±žVÚ»ìÞ‹ÝDHíÉ( @‰Z/Lw÷£"J†v¬6¯Á—Cên¶ØÚ¼’Ä£jŠÙ§ Îó›à°ahŠ5ÙèΫ£Â4ˆº)ŒÑÖ¡„ÏþÍÏÞø{bJU LÍmÐ #®Ó«×›Çɇš¼8óø8®¢[ÎÜL²ï9O™.ËÛLOášzLûoø_æ®îÜ¿/|ýˆŠ]Ìù'cÚùG´}J#KÖ·Ñr—Ñ»¿vãþ•>9uêÐþãþäÿFîðl×òühÜqjtˆ;zí¾»|Š5»¿ßV`ª9CPöqëwŠ‚‚Um™ZåçL®<÷ufŒ5ëý‘ELÀˆ?‹ÄòÂg…I¶nõü!ë1o3wÒMy­¶Èr5Ôíêóg„½ó긶€GhT¨ÍØ+¾æF°§ý5]ýšzµ01ðSùðöâì¨÷/kJ‘+áñoί*PžFtpž9¶yiÍ¡Ú*ójáú‘`·S-ó[ß+’†3@—7q¿!"؃SwxŒ1KsüÂaÉU˜‘ÛSòFßlˆk®ÌJ–‰i-õ[MY }H3\›ÖH$–ÖM`-³0…©ÀªäÅaÃòÝ%Àøb&²Cü‰“«* ÿ·oùtù¼«i1øû§¤ÞûÓh-þñîúæ7·pÕÄËľ±±F˧¢ëÇÇtoö¶.~K°_OÒЀ¯e>5»|ð`ÕêÔžôK5\?vDîÖg6êµ{Ôø4¥wd"üÎß=ÑæX‡6#úô…Ò7;ý¼ßoþ&iè.þ>mEhiúàŽÝ¬ êñO`ê*QÆç`èÞJgKÒ­ŒÂ²1®¦ u.u¾YñÐ2‰öúŠ~]DvôßÌÿûQÿ^xÅ“d!©…4×ÔZa <ûb¸ü0q ðzǿظÓs@ËG î^?µ1é5xC:X€tÈ·E«bö}h(SˆýÆ:í&í*{&6ƒ¿–ÎwªfØ/ÎÃݾ–Q<ÒäÒÍm\o X$öšëëìÌ’5FBëÚöè댛®—¸þ-bÄ$pP|Š—h!øéê£oŒ@o´Š•U‰ˆÇ—»JæY zZ‚`|B‘Ž.{ª²ž‘›.—ö§‘U?ôG» ýñULê ‹XM>ëuJ3xÀúTÛí3ï‹^…šm™mÇ·¾ª“”Ù2õª}r-Õ>ÖñÆe¯Ù°]ÇŽêôº{èÛ½¨§Ð¶õ‹sý¦±&P“»dÓêeoÝ#NÓá]nšyÖJ…ü8g¤=G€?ªë-‹Á³èf#©É]íË*)hà>w¹ÜÞh¤ˆZñ©CáOÑEÛþ]«Î2Ô¥[å×õ|eÌèÐ)ûói„ôe ˜¦)L÷‡¥ï»‰RLÒ.óP¨Jpß™]é9<€x¨:ÛûƒÄ£ldÀ¹©˜ö7ŸF‰lÚ7øå×òW ÞÔÿx¦ TPõ-ÀÕÐ÷Ø/å-ƒñÕÇáÃíi!Ú,±ÐRâgá>O–›Í*yj¨m=mNF^œ6FâkÄØ)„â°É6Ýt7gÿºÿ3úF_) àj±B´ªEî|=ÊZœe™X×aÁçí„9ç·C}ïDyÉB? ÍJe¢­ÿGF"võÀÓ…@N¦CÆó»^SáïšÞ>\D$ ýåZõÔ2Ü0‹†T‡ÙÁé®KÛÊÕ<"î÷8+ú“}"0·½²Â:an%™iDùó5ŒÌźêD ÙÖEˬü°g HÓ?Ñ–6¡óµ¨ +¯Ðbù99ŽØÅé” > úXU¡\d u\ÙŸ(¢P-0×Õ.±ŠvMÖöçót½ØlB?f9·{™J‚Ù¨ÿàOÅÿÆšã ˆB´,œ¤æ“Å=VŒ¡ŽÎ?Óöb— sê0'Ñu•i7§p6„2ÓÀDî„‚º d< *ÂÆúÈÓ,£EniŸzv¨ÌZF9˜Ÿ†ý&ôåN즯Qh†ÒüEh&BZ}¹ù~«çq† °,rò2Ó«W¾é°Â¿ð"7°ͨb­˜µ™deó²Ð»}K’“'\˜¦Œüv d³‚ò?QK”þÞ>(Úôm-ŸÃYA};¯96Lá,ñ–ÙX/(rÅ¥±$$$dÐ/Æ16ßû´[ÜQ5ø¿ ÀhG<(œ¨âb¦†ˆ0_´ã;<Ûê ¾ù—ïyF:RI«4ÇÑ‚qU²|FÆDÓ{ŽÑï(Ïãåþ h¹ª0/·fMce\Zë=ƒ^úZÝ„7N&.ÉbMèÝ„Þ\оX +s¹Ë\¹ùî–Ð…}lt„LèssWK@Šß˜[^ÛÕ(—f–Œ5M„¦Ó»]m“‹-$©Muÿø»Üõ…ÚŸb®õÍ…±©û.¥ n´îƉi øS_ºgí?¤ÙÛ–Þšœ…£½s42_z⩯Öçž¾•ýÅ’.Ç`t.í}Bû‡X«•Ë)Ý=þ%<¡ã~þ臔tûÔ¶{€ k~D[ £›-ãðÝínaJXgØcaˆØ~q8V“K}÷õÁ¨4¾fưØ7åpþåÍá,kjn:‘MØYžgÅRšÐ?9)5!!bTG ¥ßŠ7Íeú>¤!n÷Öt®é"©¤ØÂ%Á ËbÛðOoxNHX}åUPa„YŒ"X¦3ÖƒoEùÆ“—(–j(m Œ~ìB¤b„ÑÇh JÔ‹>þ¾®;˜ýn{íõçÑSWóÍL3ëXïÚ9"'@•%ô…Ù`HöæúyqAëÁub|ã˜ý§Þß­ÿ%ÇÒþÀ#=­¾˜Õˆ7·çSÅa jÓÒ`–&…­x£©dcý¥‚ãÉË»Òy7˜?ó+ò"å%ö4û r¾†"‚•Áàëòmé\_öcá+Í•³lKÿïòͩƟöb£Œð5"¬¢“°n±YYøWU„¿Fv¼ù`‹ï`s¢UÏ$ºtî0.<7 ÚÍÏä$EªÄ¤«ŠóÞ×›»¡z3ndðѸ¡½ÜžìumK% ä¾ÚeÔº×wyK™¾÷cñ5Òñ¬®° z°;˜ÃixÁß{Rw´­ØÝ ¦Ãˆ¯|ۢ߇­B1Â]ciƒ3å*àmG¼*;óve¿/} ¥aà½l’ëQù!ÒûlNÝ:BÌë´¬èØRÙÝF¯ÏMO[Ð~Úhûín€)±¿Јm~xa0 Øìš° Ãì–H€¶æn$»¸hÅ­.*¥ Ê^¼×ÏŽl7÷1Þñ" cÓ¤ìXÂr)Ãä\ÿ±²N¢³1-ëv±qÀ%Ÿ„ÌÛï‹+­^{”í;Â=žS~{¡^æÉE É Vï›&d—öÙÑ;}ÕÞŒ Nµ”Þõd4_ˆYü• @õÜ[ ™AïtWš¼»åœ Ûn¥ÈͲqÀ’Ù;3b¦¿![Z¤}Å3¬P¤Œc^êéÅŠ…/Ù>ÜŸwÆÉÔ2ê‘Ô7}ÃËmÀ3u (×}TLÛ]ûñY¯ãìF/­vè˜È}d»Ì³¯#Å´Îã³)Þ‡¶ÂA”äÂ%÷)¸å¹aÂã(ž"÷-?³‹îm=ïcÀˆ >ù¤˜:°×º¤3ZÆ'¤çʆXøÑŸ9…3’ä­mazkæ¾HQ±·›q •}›phïçf¤Ÿ‰…Á•¶â<¾ó+Ä>,Æ;´K²_ï:õÝl´¤?õÜòÄ‘QpÛ†î§zNºO¹K^–Ìå|÷;¾¯@²wmôiÊjÐ^|IqÄüÒd)2øøÓyÁÂÞAƒHú‘ÿv1Ï™þü6å¶Ü²_|§ ƒ ê1`”(ÆduÄÍã{àE:ý™ñö›SÓN¹PÍ#M26›¯Ž‰$hV2ÖàìŽqD¹Ç·~§£7þ›°š©1à3FäõvÔjc¥ëÜ1k äôJ(#4 | õJ¥•WRÍÐÂCïï<|à’++Îd…šHqJ#«É=zÍŽéÊþ-k¤gBÃÖÅ¡ fšÆô‘MíåË(Í6­•“3ž)°\ÎÈ]N1?M½C"{–¸‘þF[¢{ÐttΩîÂ$ž<ÿí­Ó‡g “±'ÜK¦Œà_.úÙ¸¢À4H6Ö¤E£\qöö X®’Ù%O–J`jã ×vÚ1Ö0vg’BJ#ƒc \f2¨ÈùŒü.õ©¬a¸Æ›´>ddÜ0É$ˆ;”€"5`«M::w<ËÛÇýÏÚÂD¥y7ôpÿ¿:ïñ CÎ]¾ˆ·<ϯً!Ôºðsˆ(Ø½Í ÿVü¦–á¿È>6a¥Ð «çÁt¡|äZM¼Š 1¿Í÷a<’#¿6ª± ­ˆÅR‡®'3ÄSqÖ4ñ3Ä$>4N”}îdp-u½ù—KIRDÊ]¶Ÿ}²ª2üÔõèšO€‚íš ³vVÃ0„{ºz½Y~W¤B‹ÔÎVãg) t®(4K>&ÍN0&_àYt˜¹Á²WÎQ«éO]ËÖ“­P$ªŸz*öl^ÿŒ¿N¡ˆŸrÙ-:«¬º~Ñ«Ê]g‡¢¸™škçÊu4önû—à4¼9ñ4O³úbHÔùµÈM’²G²Ã Hª©æTß/…úEÆ»õÑ=›Ëïa>ßß 7ªWßç±'*qv†ø”²˜º¦4†¾8»^³Øm !dK¨Ÿ3\&ñí¨vósÜ®å è²+U‹e·Nö«dÈÁR­Éѳàð¼OÙ’@~˜†\Ì´PeÏÌ>mÄ4Éj=ŧº9Hh¾ >~Ïü€½iõMýXòÂ.‘çµ@O.V–EËíÿœÊî='eVßû0ðiÉdõù ¹ãÑ^úYU|¬¹t”•¢€!ï{$wŠH/iî.NÏ ¯è=⿤eR“}Îç'áö)¿°¾`Y<¾.Jèa¼øÜ¯P­œa #–¢2OÚ´öϾÛ-Ã5¿÷Ž&êrFÚù¹©÷þH$1¼÷}cü`Ø´¿»ÌFºÕ&÷¨·˜ÅGЮkHp‘wÌð(;?åxúðUØÂDlg%󺚽Ž}J$¡ÏÍ~zk`Kùrc‹#…õ]Ÿþþq§g²‚Ôšë>í± #Óéò>yãÛþâì, 9ñœY·7rFßÁ@éºîÄr {´0ÏM—®8xÏ$}‰¨ÊQÄ}‚ýª÷\ºt{¸eøü™1ý¬¡¯ Î|A4x¸dÿsÉÞožž†õúA,1ØóøÙR(è™.Nº(ëªIè² ·¨ËX¥fùO3tŽ%볋æ‰àÌ™âHu˜î®ÝmÍQýP@%”ÌÒK^ߺS´)?O”f23ŒÃ ûá˜z¹Š[2dÌžù/üÍä;ÝØWM\–ƒuý«_EAVi.ºüU‰’ü†(§6vMy†¯Í‰í¶åÛ°žªß_>fƒ•ËE ¶îNÔº»g.Ûqü¶š–^õuZ9§u€“’”øC —ÎaÅà»a.ä¥ú¾ÕIÀš¢æõ¯…ŸÉ ²®´d†ïÜJÓE7©C ¡ûS¨ógêN & %]î.¼"$î•ÍT èW·jøÝ¿ïY;³éÏ2ËhçeUVu¥>9+ U¬šëhògàûk,ÏÏ‚\ÜPÒ´(g²vɆëVÏì &Ul}Rk¦Âx&L…(ùJ=áȳ¬Œêx;c³Ô–í¨M¿‘´1©¨v¹ï–ç_'9˜2kä¢l‘Ÿî—ú 4ÿ¿ßžD[|sç½nÇÝWW>õýÚ´ßôD$ož¢æšÑ¡ ¤Pê‰.÷¢lú~¢“£’âIÿAƒ#l¨ð%±œô[SžËyÄ:­wÐÔÖô£b›Q«KôÔ{„mÑâV@ƒå…ÛÕKƒo/r¨/¦½—ÉŠµä!šqUJ\ÑB@¦¼™G…ƒY¬¿, Ûð¼è|èYÒˆäVNk¶ÌÜÓÖSñ!³à¶—¦—"áÿv“¡Ey –CL‰®ü ËÄ?5á rôÿ(öKÜye]/&^êÅß”XT’Ë„Œ =¸M&YŪsÄ{Y©†1°~<—šû3·@Vì%CÌ õÚžãÈnERd&å½YYM§Øéàz]oåóàߪïæÊ¿ÿßÕ/©œ.7–k‡Æi©Éc-9 ç½ÔÝfÿÂÅÏû;-k½•DZöÈK=¬,õ?t¼è‹]ËBsÒÅ(C}_áå…ìÀNCÉ“W³ýÅol‡¥h¢äǪ¨)B)àwíaÜá_â–â{CÃ4e¨•ï`{ˆÑ8&€P2Q²6ðÞÅê²§”‰®°(H €Ž€‡Ä þ¾â<%­%>ü"İ_¶t¬R¹)¯Àt< Y€wŽAÊ…¸Œæ#€O`íQÄLJ²ë­hÅ6›¬Á´ªóÒU~ÿ/Ùå³2³fpd¬/­Â{rbš¥Y»<«s“¨Ïf?ˆ±þ¨ÉÛ‡‹Š Xy¹êé:k‰\¾‰"Œ\^·üt§VÝÿh»É‘7LÊÜi/>ã«{Öex÷¥WªIÃf°D·^-ÄÞ;íkÕ¾¹3ëÚµ,â`i mòû\°Ùx™"ÕIþíw§cºå¿qÞ·€á³e«<º;^€Ž{PâÒ-·u˜1t 是€Yy¡ …±®Í+ˆú5UÒ4 Ëûƒqº)¹f>ž¾¦Ôòáû¥1~6ÀØþì1©õ¬Îv™ÔÓ¿NÎ-~§ÛÙ-&c¬·ñ>åü%­6{;bb¼ªmt<™,~3„íû ¿(­Ó¬¡ÁóEÀ’Q¯J™ñ¯~å²ã6TÙõ§å?Ïí¬ä+’XPÉG~H©ï /ˤ)Ð4D»¹¨@ÊP“Íó‚ø >´,E«Ð“Ùf7暤h"¦øÕd˜eZf{.ÛðŽHk•¤c©Ù¨Hêe íÇçSóˇýÒ1{¡9ÿ'eiÎÜH‚:¦¤>S¤8ýÈ¡Yõ»O*iv7¹Åú+ ·úùxJVéú¾÷¹Ì£Ï8äHû[ o2»yæ>Ç)OWM“µÏ(ïTTÕ&)"ÂLÃ=ÏG–àÄ®¾nË¥¯r7 n>µMt?;CÐ4OŠO!WÉF2Ñ–KQéòqîp¸öã)*3+³ü0PXJ©×K&ìÛ‡9˜ºú˜€\¢Kz{k² ¹ú¦oÓ‹ßÅûfE¤”ŠÃ "Õv'á'íVÖó zVe%¹~W¦œ¯hÎýª ö uáeBe¾‚V‘úÑÈþC¦[F *³©A¿þ¡{õ™\¢ÊNÚ©¼æelÛÁ1ýĬÎÈWW~·íõN‡××­:& ®{æMVû§Ã»þHQUÞ᥀Ξû! Æ "'+2ÔR0·wÀñ£z“ýÆÇÕ.Òzéú9™ügñ$C Û„FBó§U_ª#.ø/|ÑCÀ/q£9á]÷!]0/ÒÑ0]ÝÖ ÙèMyÊ’–öíÚDmÍ%Šì„†Þ¨±¬Ïæ¶tŽå‘Û‚»ûaäµ)ŸÝœâ!g‘R{¦˜FXCj ²riÐô/JÚá•á"7B™ŒßEMM„õ2{dÑ̇M+Ëúª9y i‹ÞáàL1€5f•4&Yøwͨmà ¾Pàó¸~=L•VÓ½ô;6Þ3ኒr{9ž_“Þ~£}„?âýóª`Mq¾i™#ÇGÄjè4I$ÖÅRi=XAî ‹“›"‹yÁ”.QéGÍbŠÒ$—ÆM󸧺ÀvÔ¸ngŠo‡K6Ç‹ƒ7é°o3O3×6©u(¨GV¢Ú|h»ÈRûÒ2ä}~™»YÕvdmttí¶¸}†YøòVDwwPïn%%`þfq28 ¬‹Yþõ•rJèÕÍ [9Jx˜ú~LžÏÛyFjI ˜§j©ëÃT$ 3 @=fg÷ÉÝl!ç@£:ø˜Cª|3+e%Møúy]TÍkÏŹ¾ÈÅÙ³5Ìå9B걈,ÞÞK[Ÿåª¬ˆz îó09qÎ2QEs_™ŒDuýÂ'•½å‡;|È3Ÿûu÷8ô+{z ŽÞ_Ðn(|h0@$úœ‡´/v§TL ð£Û ^s ·6‘ÝóæöæåDŠˆ–¨;=ð—s;Œ#Èjô·í`…¹rÚ‚‘" ¿Ž|N½BÿbÑøç¤\$%<¸ž»ÖQ;1[xtå÷lWoÞª›²j\r­ëË*¹…MU«hªº~³º€’‚§#»¤QA½Æ»×U ø¦xµpúhE0Œ­J¼ÉÎ4ýÏg!¾”²À—ýª…¶ŒÂzµ½’¶+÷Áu›ÁÁ¯^•Þµ·³Z’£ð(+ÁÔ×X\&Cãu*d".»æên4à~ ´Ëû÷G÷ppÌ.pGr-Ýæ´ÂI¦žá±i‡^ŸJiÚÇpÁ¿I™ ÷Ö¨BYsà ø̲Y þ ¬/¬­•Õ<èA±~^®nsÿ'ÂB¶óœOâ~»ŸRÞD”ÑÄF½9ˆìA9¦D=؇°£ï¹Fð]Øßü¶,ATc¼ÂYcÁ¬³?ö9O’ùîÇIÛÉIÕþ?Œ½stdQÓ/ܙضmÛÉ$™8™Ø¶mNlN¬‰'¶mÛ¶m'·çyî{¿õþ÷õêQU»ªvÕ¯Î:§Ã` «¯ æ|ÔWüF-)©¯ó]ÃÚ÷,¡ºüdü%{߸JÐèðåOàÕñ]³P#ÔÜy1E1 ”£âpÁÀÊ]/Uƒ?@#¥ša» øHDH!Ùê›òâlÿßLh ;?ò_o·ì|£ŸŽo €oÛŸmœÎÒˆŸQùÃk 5!I„÷mk»€ý¼ùG†£Q¤ý‚8ÉÈ‘£ÄÙ; Õ¸¼ „¸-XÅò?DÿX¹@WcÇ„„¢,‚]Â63r Ò¬ü¤§ ÷ˆÀ¼tº²öÄ'ÈøÀî[4Ò7¹ú“އ‹§PÀÝœÉ$7÷] æTîÃQç78Ïäv§€P ì7a©Zoÿîd)àåпÁF+äÆá.éªunYÒ< Ô …åݵ h>ÁŒÇÒ+U Ž_1Þ¬÷¤Tª‰=Ù²Ëæ66í±¦¾WUϾ¤Si÷|K³Tdõ}Áþøùz1˜=DFÚ·RèÙW[¯‹æûìðß‚yîX–Ø} jŸNn=áÂNçÛÎ.!84Ù +—— u¹ôUL¤û;|BWÃgT ¤akÛí=ŒŒÒa lõ¨"àv|x…g‡À›¿Jÿ`´ËÆL @d,éº/¹«bèsÍng-Æ?µª™1„Cå;¶yä=N»ð$Š7$Y‹¼\·2þä³#M@$’‡1ÇXÔ„™2°¥´\‹Õwl[go¯g½¸°«v÷Ç1k*.ñžžñ}IÏ—º,ðpgãgyjQ¢nhnëe%öK]‡òa0ñΣí¾y6hwj«²T«?s\b­Ãù7Rí¾êßÍ »Ãdʇc¢¹¨&ìVKGü¡`ª¢¼9Îúï }=&¥’ÍôÊ(Œ°ß‡ k$È ¾‘r›i` ÕÄ—#í‡ÿIÆHTÃ\òóÖØÄüY¾]¹ü¡â,½½ ú´¦xÅ{,ÜræYµu¬Ú0·kËrš Òl©µ¥H׈mçÍ|q Xž´ÜìW’¥–䛬B6Æþ™vô–‘JÆ™çäkœ<ï×gè âCË=I1 &ÃZd´:ÿE„^5¤\¿3¨*áÈÕ,Ã^‚Ý|Ú¯Œþ蓃dxjà õ­Èž*/ØÏ…%Í]¯c’ -è70‹JIÀ"KBúÐô‚1«ZUÚ¼é×mÉ»h#X½7ltð3lM°Vu€ïÉAÚsqƒJ’?Lhø#š>Cˆ‰÷ÓG4m³åÂ;õìuÁ{ž„‹°Cw"â k2'þZzéÆ*˜öþW(~`wÀ+þÌ'¬xñ¾ä’*Œw¶#÷ÁrÀ»›"P‰_ÑÝÁ% L|F120^uF@ Š¿v.Ç_Ò„SsV½Ÿè‚Î[fVˆìþpiYkXÈ8‰Õ»ê°1åð5kÿx£2YÑMSÓçÀåÇPò€È`>5EìdóIny—˜á«š¨q.B÷ß{sc+%è›5ÃV¦Ûúÿ$Ë,¢Þ€ ¢¢¾ã“Ÿc“D¡ˆ=ºó@³H/²ÀCfŒé~úàŠy)<ÿ1Ò£€EõÃo€Ô™¡óÅíŸAÔ±˜Ðïr,Œ ô iwkË‘æì Vüx>»ØÊ·ÎưöÔŠ¥Aà:mõ•]LÞìÒŒ?ë²eS4÷$€§ÉŠcŒñ¯öÜÃ&{©([Y·ö¾So–׌³¨€u,@¿Vî…F‹xtâßîü8)e1¢ý2Ém&îe*ÐíN ·H1Fù‰'†œ8¤€6zâŠ&æí¹²_ÅÃ?Õç’$úKS“©ÈΔÓm€lŒ€2”Vg0ŸÌUçé#4;‡»žÐI AƤeâºþÛȽyÚ_ÐèG²‰õiò4ºm™Í'ãB†0ºA,”ÈÅTêÑ+O›ÏÓ£|ûAÓw”XAßößSLçѵe›vyÒkÆÅx¢­ïu*F¯Í¼ ðZŽÄ§W´D¼°B °B4’gÞò$I¡nùîœOûÞ»:=x5¨ÏøÅ %µÅ© iñÃŠÈ âíЬ îølü±Ø>î‘ÁWoó¯¼Ï`Îîi±U©i ož£O>™zÑD0ÎÖƒQ'󡱄É8·©¡)ýײëR(wµ»?w¦še8Ô:MJŸÿš¶½B£>™Eíì|¥Ã€õõ÷äÈP¡óÊÆC&œ*øƒçTÄÂcd)V$6-&5',‡8Álö#Ÿ¯ÒÕÇÙ°!€ÖYp] £çxœuÐþÏtÁD³ÜDÑðôñZ”GeUÝÁ›ñ«‘jxŠÔ® ûYç»ôbšf®Óe /¦IÖVŸ427½¦åàï“yÂØu+Î4_¿“„gWOÙuDŸû­Ã§Ç^Áú‰æ5·ÁX_4¹«^T8à4jÍ•(Šyݯ'Áʯ» ©ß :F°€äª÷BÁsaPÿžƒwƒ|A£SqƒõYô’„~Ø'R”Ï<õ¿=IvªÕŸéˆ‡-æMµwÞ†b_`1]·O,S8õ‚皯žúÅ££­”êØ A¤¶ [M ò¢žŠô~Óp¹% *S›H½9XªÊê*kôéÇ"rÛxÏx~h:Ù¿3 LWé°RRìOÒÍ~e‡¿tÌ': ‚Ý´ë ß1ý@Âz„ý§ƒW‹Áß‘cc)~oîKÒ«Jt”¨œ²}nu‡¤kFößðåGøñiÖŽ§R+I Âörj‘÷øÜYGݳ?ýÂîZPÅŽÐ{è:®¶^úoØ“†‚èð;ÉÄ0ó5›Z¯SŸy¤›„=€5_XvšÙ”5¦g744ÖdÙ ¢éÉëÉI¦%2eú¼}—¯eo7¶@Aƒ¶¾7à ¡=4 –œ Ðï}A„íx~35š×›« Ý–õœüB > }°"¶„ ¸¾¯ÇVƒÚšÐõËXe wA’X|¤…X=i°8ÃÃïúv$'¿âš!æjg3… V©”~ƒÄ„ÙË­îÖ@Æ[]»&$&¦pZ•Ö÷7ëc²È”8«£¡­iê1ßzñÚ>Ê`Ê^ȸ²÷lƒ4riD)^0Åõa—ÐÑÀ­›‘§êq~q‡oزry±ä‘§Ì<å³pž»¾V†g©±¶I~cÜP••#¦îV[ÐLnâ úIcôb“¬øðgš©âƒµÁ޵%OUÄäf^¶IŠ!…ìÞr05¹ ¸™{§¢ŸhÅOD•[¯ÊZ¹µ’äþù t¬ ¯˜ZÌÃÉp³ÇZþ7æ‰äR¬¿ÏwüG邟MuƒáCº$±öàåD%³a£õ¤F5$yL…ƒ@q«Ìƒ/f°Ÿwž/£u F;r€e,{ÎCÀ”QÁ•Áð?FóðöÆŠ±ý{À%{wq^Q Üœ ÎC•W)–@/Z-džUà£LÊ–ë ÜSâ PÑàÕm ‹±0~˜D¤s¢=Ë5MzœV?î¸/yµ'e©ZؘU‡<#cNM“õ¡b#Ï_? ¼<ØÖÛzé˰2ÏX¢ðŸ}ê̺ɒقéSÁÂHê0àBè;=]D'üé³EéUf@˜cêÝ^ï©ìÓ†­É¢ÑãnÝו>ÿ¦á›B¢A{_•’¥¶hšQƒc¶tP#PXÒ¦p4Y3i•#¸GìM¡©Ö'b1ø8÷Ø£ê“D|Ÿí³2ˆ :A¼r¨ú2ý»‘zHÜ€ÕVfŽ>q0]üjŽb€Õ*ÑÀoðüm[DW$²ZVÕâ'ýÃþkñfo–Çh¾‚im™`á¯kÀ X–oHïïÆp]W«AkïB_ŒÓ¡Â;¦†^ \í’}‹ES¾fA£y½XJ6±Yå¢Vs‚hVg8±ÑHsN”µÔN­³ÕYÀŠ»¹8teú¹âm±tV-:þåžù‡ P£&S¸† q®ºÜÎÜåCöÁ´¤9v#ëz`6Aɹ?¢@JD¹'°Þm;Ô%öÎÙÌLgŸ©z´¶ñ o]çÈ:ñ9:&ðµ/oÀæ42ÏüÀ–µ®N§ÙÙYÉP­ÉQ¸þ•n¸‚ô ‘aŒTÛ£™Qã°6*ŒµjºþÁ»çùÅy…¤úNŽ;EØ·è¶ ˜Vý£˜çóÓz›Ì†q\‘Μٿ–Ñ¡›±ÿÑ"9þN^|"›à®å±ÎàwSWá_ñ×þ8‚(ÌÀº\ŠÁái³úYñxõÃÔnâ!©Þ«ÿrid×ÑÄIDè–Ÿ-* mq5J·ƒÃæKõͧ4Ó¤;–¾Ïu<í•ÌtoŠe Ñã²7†°¸ôýï›X}VÅ܈—x£Ð­Ö¿úåzö;— ß;(^:z¨åfŽ‡Çªf¿âÀÉ]…“ “82‚èâ½) O‘|؇„Ì‹d• Á)SúØáÚ£N?ñá„AÈnëÎP@wUEÌwÖÍ£>oCü!¤ î¥{åm¶½Žè÷ºƒ¶'¥un© ‡ôC@œÉTIAP…M’˜nôN†²o¿Ã${å&·?ko=]¥m­§¡y•©w¡þÔ‚À°Ϭô\2©-ùjTh¿œß Z ^a-‡ädíxaúå"+€/_y°BuB{ `;ud&lŸ}Tyµ52«oÞbE$!ïn¡p@äÌ­»»/]Ú›¯ …cáDÆ­ÜH{€šõEMÃ-åCaº‚˜½I‰ ¢ƒn)2Б³n°l’”´‡$‰ÖЕ‡›0ŒŽÍaRlÔ™ú™\,÷Y›ÎÖX(òTpŒ€µ>3L›ã‘,_PN|M¯€é¶Fô»?.Š[ãÕhÌ.-iyjkKfG¹º½7‡Q+~˜¾ýcûDMà®%ÑäRU°rºT¨ó»”ñÂý± [³4ÞÞ[6,„<ì2Â.Uy4‰ì yën5Á—hñRÚÛ3q%F¹ºÃô ŒÁ3mœìŸO½§gçðŠ›Ü<1×Åkjû“óðÄmÚŸ2»ÿ<¯’AÁ·õ# ¥u‡VÏ ®ƒ°ÑnsêÄ-bÀÝŠuƒ:]°c@ÜÙŠ5:ØQ k¡o|õË;aS †Ü‘ÍÂÞ‹ÇVúBTî„ÑôÝ/d†1%Õ&,DƒÞü»±¶I…<¤¹ÃWöúFé¹WØŸDp8J=h…F;"ü ö´w©¥‡ñ†{nƒµ/#IÏ\Ï|1FÓ7Št|ÉS9[‡]b‡T°üTFÍoF(;TÉ1«d"G×OÈü¸.8ç_dÙ°÷n…VDË®¢ÎÔ¢ýôʇ÷<(Ã\¬”wÊÜͯϊvØö6îÊuÛøGNûL6†¦õŸÀ¼¡q‘ª+b <øDE¦mlN_P5aâHï€hí&T‘ùáaJœÒäHqc©Q¡ŸCÜ E3«´QâV“"ù7?ùßoîñ¦tõµ°Ï/ ï›"Dróì|P–ÙGÙG!ÂHë››ªŽBU²òl2{}ù_¢5›7ñ®„Ñ V2ùz~ª¯·#âù r]PNP²)E±:ÚwßÇPÆ%'r;&‡Y{zû;5ÒòãuñKìö0 Hø¤’ÍÊÒO­! g`~ª¹÷;ÐE‰û ÙøOþÎi”W^³}]¸KG?‹+W®¨]°ÈágZmìBuÞ[`NêÈëW•ÚMæ0* çQìŒÓÉþdõ­%,—YäOE#Z®z—–?˜yãüµüžx øå¥%áwG“ŽãB¥†çgŒ±õùÇ” ¸l¿ÿ¨í è7eçŠrÝÍ ‡dß#Æ^…ñO¿I„ÿ‡)§Mù¨^Uý‰ Nã#¾û(7¡73ñýBŽKÌ»œJÕ³wÎaßÁ¼8Õ¨7~˜õÞ.°c­Ûø! ‡Ï¶ÇÕiéeˆï€÷¸ç)‡õÓÊ4|ßY@?"‡BfGMÛÕéR}ËIÃs'¸bé§O™ðDÿ]ÐxO¾cnÔ1¹ÓÈÈŽýűGlaþçV] ED­J+[ˆêÏ3½›^æ]—J§ò:’3™¥@ÎßÚºTV` †µMrN6ñiü錩˜¡þirLáÉÙ‡7wc8ˆÍ <Û41'¤\K‹¸mâzCdë^!¸,fËV‚VŠjëã—ÛQ ïÜéñWë¦@¦V¬°C5'w/ÚÍ‘øèC9 Hû#3¾x ƒÒ1¿n6-#·°¸~šG±ÉæS•R§PJ&Q[‹¹`…°‘»ì„Þ/³Éž¼‹|—H6q^{ò T‹C- ¬ÿY¥â‹&]xYÍa” %k^I‰ Óüqb™tµ.ÿÂ8ŠÔË•÷7Hñ»`7„øÁò;8“l™$Þ[È _øÞòß›XM„€•oÈz¶+Õ’¾jࢶ «ïË­ÉÖ»ÿTþÞ/`%¶‰*ŒTùÎ6¹]oºƒ<=îΡŒ2‰ ˆÞЬ-ÁþµŽ¦31?ÜÛJ³/S-á¥Ï:žŒô¯Q‡ªmHJ¨<ü"†µ[a9ÿùŒ ¥ÖZº±Ú/»«˜„ ð*8B³Ö8pUˆ­Q}J˜/ð×H6Ùµ§4]²iÚ\Ù½˜DN¸ û‘»(Á,£¨}f@¦9ÁëãÕ2î ‹©k–ÂF£[H›"€±€Ué"zÕžG¦Á¡!1R¡ãbž(Ð^[¡§”a5(HAvu‡¹jÝQ™µ€P”éT§·Àô(ª_Xß0ºË$ŠAæOûì=¶ÍeZ].QÓùÕX ËuôºeDê »‹¥‚ùF'öòòðßÏœØÅꮑÞe¢Z¿Ê^Dmšc]³òcõisXÐäu_7D±ª0]OPo²¬’0«O–~J­´uÈo© Ú2šÚ½Å¾–5Êj¢< NhAíev8Y`Õ’Q'£P~zºW,QÞ>7¢‡×WÕf;‡ÙÂßÒo§¸ÌÁ%g›EÞZ>‹ý8@[KûÙ¿{0N¡Œã\ýrž+Et´^{ÔRÉ9Ý[L­UÉÊ8ž&c9Á%ᔬŽ’ гä ñ¡žÎñS³”~“ß±x—"À(àÁ°“)Ú·8^ µD°{ oRv þk‘§¶¼#øÞ†(W¥ØÒRÔ^Wß¡ÎíáSH)1í< %Ágl&oup›*_È1šÒ»ìF’Ô™+j`†mM•>QŒOu\Éõ¥¨¦ä>6VVŠ ÐîƒÓô”:Ãç£U¹ÝÏ÷ ¦C€¿ÙnÉïºìn§)Ÿ··w{W×ÒŽ¹+Èõ[惷Wƒëu-‚лӤé#¯ó%æ7L‡Å»‹…Õž«ê+TÀ=€Sr\ïøz×ùÀ ØCõÚÅsþ;—“­ü®°%¸.Ûthcx¾Î ~ Væ­|…ÿ”‡‡ÁŽ…—”zß· à‡ê9:¤ÏBàÌLXV¨ KJ½/žCÛKh8–ÿ> !-W»ÿs›†{æyV•ךDÓPW딀|-Ì*CiÀ*¦E€"F½ÕèèîgÅH’|ÜE4›HúÚ"?agßx·Ö iÃ3ûûvßÛIý$§B|ýl×\W«²1U¨þ,øÔ±ºgÖHM^߯žÍÌláI“DÙEãͲWjË©FwÌ4“ÁñÐ̓SF˜þ?Ó^_æN"S c¡lU( ¾%Z÷íT«²‚Q bÊÕ@üû܆önN®ÑüÇŠPýä#7ðÕ+6xâ´¬ÿp›œ‘¯ÑëI–‡HÐP‹Ð2dzàZŠqã$pηk5\’)H™3¸ŽìR4 •Òªý©’bkz…ôg®ÿíøiÛ”ñxöòâA^1|u322(y¹ä§»²·7Ýèpÿx¼{&öoá2¶µd²ßÑ<²™kv:/iD“ß+‡µCL_ÕÃ_ª, æÔ¼b§@N5q‚!ǽÊgß@švk{äŠÈf°÷6G(¼BæÔÕIUï+5FkP"Ö<mËÁ?þì°Ñ7¥ÚMô —³~G‚¤‹Ç,|™wÏSnZ»pmko'ÄÊÉÔîòm°èø~¿ÒýòÜͱõZgdÃí?!¾xY§Ó×L82Ú£ù¢4;Ã|£ÃF?¸Ë7rQï*;\Î1œ\B=œ#ý2ú®2òG­–B„%ö‡œÇßÄ6œ`Ú+šY9²èzœ•{2£„´bqyéóÁêÆe×ÕÜ¥°¬dÖŠ?EbwRÆlC ‚QÆœ¢~å¬òá®”WPêç¦ ]÷ù[9]¾ƒËeK@£ýz IeÚDô×2¤›/ký¦$î´Hã7z_³hÈœ(á¨ô(fKƒ¦>Ô¦xø“¢Tò®ý1–û¢ÂË"¢ø+$tÙžl”<ªöð[íU¬NúßQ%™Ï’ˆ…äÛ€YBÛÚ9ÏtlZW¼9ÇÛß½)(Êf¦¦·)L н€ uC*þ=_¿Î« ó>†­ƒÈÆ^¤Æè3ûÎ_Ñ/»8g® ^Ú„·úãÓZç¬t*X3™á6L7û¿==Ð=Y*,ÒáZ˜ªˆS¾ÑböÙSkIézG¨.Ÿi†šN˜š%ÁÿÐ]¡Á“qÜT7I@ Ò¢Û]ðDtôqÝQGýê5ßûuü©…%Ëó¤:„rFÍ”NqRFo'‡Ée3ê¬:kh~ V:E`Ʊ¡^Òê±­ˆÎE ;–ŒS•´À7é‘­ž-¸øJ‰wòØùy5q rúkþÄïÔ¿zrÈ P U“ýjÊðË`™ž±ÆÞÙÕÂÃðuŸb- D!4îhÃFË_Yñj¡²?݆«Tå}š¡·¯1埵³JŠ¥êï|ª¬µ Ë¥Æeo¥#RÐu0Ψóó0(§ãhÙ7ÛÏÃ&©Ï±¿lž…®‚Š·jûi¦¸0 z'ÈèÜÑÇrʵ•œj0’ o¡Y¢\Š/q—ÛK©ð,~[Q)u±þø•ö° ]Ý‹*Ék*ÀBoF§Å4AªU$E¹)Þ+Pükú›¢5˜*OúÍ5EÕìDAÿë  <ò¨ˆ-៲RÄù×ânN&[a8™ún”g0¸çpNO•ò¼mdCȶ~9s7Tƒö –õFQó óYrþGÞDéàò|Ž+Ðy|h³ù^õáhâõ½0Ùî üöòHirÅ6‘?!qÕë® ~ûìA²è½¥¡ŒÈkFÙž}òñ€ŠŠŠU0‹Xªþ|>ÃÔLeEBl£Úà õééæaZÚs)kÁQÌÂÊÒÏò͆FbAð]ü]+u;|K‡œy,S\Et—a~gÓrFj\…ç*Ûµ:+К$Ь,BíP=jAˆ4BO±…¦CæÂNã` ™@a ½^mZœ¥¹Ï#/~tU𠺶•ôc†ÔëúÙT™KᔆœZ,ehÐŒ|‚+8í£ÊlòÈ—eco1q n«Ÿ{ÌôÖ-"ÓwÃ_»óa¨j Ö–K©þºqéêâ¾ä™œ)',fyÜ­ úå¡O@ÆŽo×”›ÙRÝö–ð,ãìÕâIï ì'.]@†r×{&sp‰_/bã²ÎLxDtœíÑw0tzÎÅV·{W$úþ÷8³ ¯uÖI… Οc~p›q¦îž bè ËdßÛ½ìÌY[ž=g®žÞ>>Ï=¿ü ½Ç±Å-ï¸Ø•¤ÖËîý×6az„{z>Õúü£Í8˜öävZÏ?h"ñqg̃‹”+‹ûÓÿ–(˜hyzÉ"™;æ<Õ‰X/›kF8&óÈ"¦Yî$/ßéWˆ¯´Î6£ù¥žBˆ. ¤@5¬‘¶“Ý]ùaû®Ç^0—]É97Yï[ýovŒKêÌŠá‡Ï>ˆ[>ÖüC?ÌÒš;aׂ¿:7TpŒd¿’ ¼?j,Ɠ֥Zÿ”dÚ _æwÒò¦OjÚiX~¿ÌWô­9 6ø ‰Ú%•±bØ=¶€| )!Š/§ºÿ{î`×¢MòŠ&™äjÔð7‰|¼œÃ,&)xô.ò¥|„¤Æ’õLc®Z±Æ +Q›4P7ç;ß‹±úu¸q{éøO¦¶ì—­wL/FÑÑ£º)OiëÝVeá  k®åÔ>Ó¸@+¸XžÔ蛲ÈiÆÆòÖAî=¬ƒüȉñ K ê¶Ÿ#$UãR aÒe¹;žÃÊ‘GY“- ‡^M:ò D³(a5ì-=wX#;º€ßÔ+æEû飲ÆÒoÔ¬ø'£ÖcÞ þߌöÌÛÇ)TaV0 Tšµø²dôÎ;â*,Šäñ"½ÂæzBíYõ÷廸Ÿ;AƒýtΙ‹³Y;!÷|t¦Ýß$¤t?!òŒàÜ¡×Ê‹VøÓ’ÿ|rª‹ÉÄ Ô„NsÁXù0"’¸ôi*ý]ݤL{$Ž¥-ÛFp-FÅ «2^,HÎ .uï¦2ò™%ÞzÙ?²âè:T}jã;,l³¦žþÐþo©ÉIý5‹ïý޹0 t½è¿k—íCªßý±}I˜uIˆï$í½$ùcœÂd‚5ƒˆnf•RdÅðµò7! ‰NÕfBD#ÈWþeOF‰®²F¢<ëyW²k²f¦‡TUŸ_M$Û\8jŸÔÄbÏ¿¨&ͼ¬šÏqš=Y©@y9žâ!ßš^ì%Qè¼7íæöQæÈgÕïÎý3kù¦›·Ÿ¢JÁ ¿Û73´0”­èÄÒ*WX 3#Ù©S›rë3‘£ó¤"œÅ¡¿Âq|œ5;óæi‘hÓÎn}´î¬è¾—‡:xµ7†c°êƒÊ?]³[pJƱhAý=% Ðc Õf3=²¥v0ædJZô-q¤t£xNé¦U‹°^ Ô,ÌA¬:X@é†hæɱczk3ȉ&S%iËÖ‡µ£´>Ær8Œ¡ú{vÞ‚Œ¹D*UÑGØé%½ˆÝákÙ§Iå?y4Zè&7§.¢eË5ž]C(¬/ 'zc‘¶ª¢z<ŸLU–T1sc s_¤*-£@ Ö4Ïìj“dTE£ØTÅÛ1ȱñºQÓªŸ¢¸¬â‘«‘7¢Ý߈=$*¶±¦æÕÀ3C-UgûjJ”ãÚpiUÎ\²ndÝÑݤt—|\& ŸñºÉ»‘¥.¼§œ(A»<×&-+M®ÚK· §ê?Œí¾Þ#‚áô@Êw5usFAdYm`äƒ ;ÀFnÝ‹õ*À ¬ÏW1r©‹úÜGcáË'ìz§0`F`Fåè+QÄF2H+2ÅsDP«ÉDªÁ'ΫP²¹Ïs請ˆt˜rCN“N>CÔ Xsœáªê=¨vàb$P»Ùñ–Q¼Yr†Hý è|70t™PÃà>ßãÿ^š—ØJ¢1æà<7À >u“-h«±6˜ !úŸ¤Ÿ „‡ƒÿ@ž‡ùdê愳%°$©‡ .ù+ò,ø¦ml½Ùô…ªº(ÿUo8’½27³ˆž)<ÿF¦&ž¹´Œrz͵ýw]Ì^ª±´WPê ) ¥¹¨qGÕ¼·Øý“ÌsFKÇrü§r‹c¦øG1ùßú s®¬‰ÿmŒ&‡u‚9KË"K²ˆÊUŒ_DŽFk&cÍkÙ99fÄSÿ‘™†ô>ãyhLwÏa¹ l‰Â×å6ê?™ c¡þ/v¹ÜFÿALÒ«˜Dpÿ—wáO_tfL ÁÌsv†A¶ß8ƒ½G¿l2’áERÍ´ ìEÌô2µ7áļpj³˜=é:4E\êe.jp‚¬Dt‹æJQµ@×ô†H†þù1×ï Óg¬ ò¨Œªë_¦U‡²ºVƒÍCþÎ[n¸ }!©MâJváu ï-Wc.9ºF¿W~(»nŠÎŽ-ØîÀÄNŸÛÉ¡ ¼»þ&ìÈ5¾K-3ŒF›Ëô;x'6çþcß“‰q±·y¿0õ÷#vû2^ûd„n%WÛ³ãR€äFý*Þ¶1 ÌÏ Ôíví5æOÆN°À "Öm?¶—´{Œ=zLqàðÀš¼$²‡->¼°—Æ…»mÖçÿY*Žûɨ[û|:Î6VoUåÙ¹š­ i_¥è낵N¼bм¢Ü·‚i¶»ÖËQW¼“ÑdÍåèùÖ3ÂÛµv…KÚ7Ñ.AßéI¥ÔÖn¸>4ñ¡Û$—‰¦F'þ¹þø¶Øç~«:œð©wyÎL[Ǻ:‹ ®‡ÌoͳÕ„³ƒt«Ño4s¾›^Òö7‘L'`“¢Å%;%=Pç¯ Ã§ xà¨>§¬Ô0õþV»5ÐO±sµDKøK”Ò2HO©Òï7ËnöÒ_ ö+³óÝê\7;ÃÐ"xxº99±Iñ#›¾LŸ[°øï6c 6¿~íÄXÑìØb7 ™é᥿uû Ñdòè%Q Ý4H¶âEöê°Ç`$Óøw\ïü¸ŸfæŸ0¦CM.cÅ63‡™5W…\CkÝ NòŒè‚-pmÖŽ¯f·È`3t“‰?cú¿u:z9óg°—^òë…‹‰ª¼OvòÉÁRX1¡…óöHô¤ä`Ä×_9f ·È)­¹}ÜÏ$cñÊF¬)j±$›1èþŒ¬æ×c’JFâ¦(Þ|ea€)¼Û,‹b:ÛXh"›àU'z¶ƒlQãNic¨2îV[œ{GÆ÷¶‹…sødľ )¤Ç|ÙÃíœW¾wfz§í­ãÏû]³¬¢":•Ú%êCH‰„ æç>ÑÆ% íºIs뼉}= X fO ž,AJpM®—£»¨rŸý>œxÌ]qòœañ:Äý#h#júš`´DMÈ,AKv@nó d[¶NûR`‚8\wX+A{• ÊÓ¼°{&<—&ä• Í®0[:F¡Š9û¹;f7(#aç¥m\6}ªLZ[?á>ÑuV/~ÒÁu6Êð@Ÿ—Ø-æ9s /2©©# ð†2f2›–Oóâ‘õYX¡í@ï8ÊžV\òIJí´Ð¾QÓòõÜv|+i»>N•">ž  ÿ²,¿rm(N)¹ªÀ4_¬Ûþ‰{¨·:²§µÝ™+`‰¨„(('‡Ðƒ°ñy@ö’‰ÂY¶Æ{#ñÐï&/h *Âß6p5Gàj¨Zùż œ’û´„¾¦»ÉrŸ£ëüá½Ôå)ø^§÷gò–}^Óm­ë¾)ÇF[X‚N}Ë×rÀd§Í(G Á Z,äC×ÞÞŸ>™ûE¾FMÈ]¼“Sßn“E8'>h®.±gR!oâ$¦æ}E©xwqCÁ› coæxïÈnÐ% «±¹Öa¾~p{ wO0´ÞßÂ~ÎÆl:¼0Ö”lóÅ?Ú݆>¯û¦‚Ô^n*k€a}뽃xïÆ +L+{¡†Óɪ›¿CY}t“X—µ‰[!å¡:p„\[[PÓk•v'?TSÝÏÞQ_ö´½æ;Ñ„:¸Lø©Ñ¯Z¸°Mðˆ€ §°*‘ò›ië Á«˜P.ñ,˜çQC+{:X]‡Óy1sޏiï.Øþ*ð%b¢mi޵¹õ¯YøÔ!E8ã^j l*dwTä3cê9ëy‘ÜîŸBuÍSsÓ®I'ÌPß $ìy3êÛáé·y>»( íåQ{ŽÊ¤ý¡–]V8\±¶Ûx»#¿Ì®,WpÅï­8¬Wj%§áÊ”†;†¡5=0µÑ¹Ê›Vªk~Ò)[º®œ€cçÛäó»â¸àè¬N„x&Ð8î.;ˆ_%ѧ”ÆÄìÖëeMl(3““%Ë–hÅÌ™º >æoGziQ¾ùž5ï b]³88Ô2­Nº–ŸÖ¹ð4П3Ö P^s³Yˆæ”9Ÿ,Þ͸ÅÝ¡|õûuÜÒQê5Á?%îI[ƒøD¾OUz&Ðpï Â Ïc°Œji/ŠÄ˜Çóá/iXÝ( ¥fÚqÚWg0(,“Ym^¦ó4¿¶ó {Œ$²Ô‚5¥•H$çîA@!àÜRÉ¿ò•ï練8ì^v›ôVؼ,¸t-Áóà<¢$£¨ÊÀ±S… jݨӵÛ{ð„Pßâ§ GT!¹Ë‡+NezGuâ\¾&åÞÛ-J”ŸJšƒ°žÝþ G1cccoo‚Þ­VZ,ótИ1þEnô=®æw;Ø5X¡¸¦ VQïÁÔP¸"XeânO‚¾^~‰$m\p?ÿ‡å²3§šT¢ÌOœÑm¹äìeLgÉA6ApT錎Šéd/G  Ð%ÆŸôotÏnÜœ:¦cÂA¦S,zCò¹N @Kä>˜^Ä·MBP³Ñg6¼;~µdˆ»Ýíi»áô{ç¿;[Âa1mìu'×€™Óa-þ)©Â˜š í;¤‰V¨¥RIRÌ€Aciš¼Ã€ÌÍ&¸r8”ÎLô#ƒ!mÞÚ5M| Á––§§ÊêVЦÐñr∠]þmdâ±ækãLZw¤©„Ó Á±7î Íö.fRn-òÍUìóÝöÒ¢¢cÚÔÄzìoc¸nÝDT¢hÄ:?„ò°ýÊÑýYKIÉD€»è_‚ó1$ì̹4G¦S@&9(%êÃÞ ¿¾¾®ýéîaI¯Ë@ м%¿öËëáK²]/5ÊI¨¼'ˆ©±ý{LåX‹Ö `€Qø›Pç FƉ‚DCVS ‘D1@c綉)ZšvÞ+Ü¢áIa5k?1ÎëŽsê6 “ž‚]8p58Èr͆·;_Ý3dqnدnJPfËEã@$$#“@§¥W&4`¹¨(`¹Æs;'v,î°¿¼]iÆ™exBÿ@ýæj ž_Àer~!ÓÄ€?#düxé²yWïv[73öòXÛ’ÉiàeD˾hÞÕõkÒëòeäããs÷x:k ÕA…ÈÄ ½ì¨ŽÒ€è¨…®a2u‰¥7#DcEƒåV¸Sƒü¦Á P®qDXöˆâ ÀB3"ˆäû=…óðj«4ý6Δ¶ùגשH¤-‘ö˽$:t廵I´ÉËù„„¼¤ÎV¿çøýô¼_º>††onXæ7××›7-!óãù¬|7£IønáXDx¤QƒÉ0lAÃ3kæ1˜PMù¬ðtœÊ Bƒ£€a8}'€h0¯f" h–côüÂñž~aA£ž˜Â¤ÂÔ+…b‰‘†Jöµ¹^ÕSªŽ“”cÃZmôæÒ{§g/èe©J=w¹–«7 ›Å0»’ïô½Ú nØÎl“’9a?&Ñ!°ùí»œ€ÿŒ9[Xw|f(&Èüx¯ûŸ/.Vœèye‰¢p"äWiàÖ÷åUÊ(Fâ—ÕæhP $‹þAÚ ‘…d}{5«"6I7ÖáSpB²ö«ÔeßíOóc+úö)Åïëmàµêá¸-·'wcž1.¤ýãÀF q¬®[á,Ê ¢yø:=nFF½WŽ ¤ùKu:M•ù°f6m1MÜL€,äF°¶DØú–({Êš(âGä¢1x@½¥Šò”»Ù9Áo¬½*oðM­ØnbwÈD±søãY)O/Ù&uPêj'!p¥0ÖÎ,cÏ9> |^¹<8ÄmžjëÆ|ú‚/Ý„'âF®¹n̤äX†r®ÿeͤhi®?Þ*û R”76©<½x³œÑöÝ5ykòpqk„m&ÍÕÒþÛ?ºW÷Œí(a;Á‚'Z[SÏf§ìû„,¿>nþÕž7â%=€¶ž^ÐG7âYÑcÌÁTΗ+UZhïqÛ̘uuªxm”H3\U”LR_ n°̪RÞ½MIG$`(C¦hc±rÁZß 6 Ï$¼EñÛµøve…$Æ3#c”sl¡!ß4pú°²ÚiÁzÈ8]ÔaßÒ€õ*éq}ˆï‚zº$.çî8î[¶E‡Ü_ýhÞ9l2Éñ8cݺ<)2í¸©ƒ†Üáü¾ ¥5:šùŠÎ™ÚÝí¨-z.B§eX íFX¯{L¡…ËIgݾb‡¾&sî‡N9sd~ì\òÓW«›Ì¹½Îc:é·%t^JÂÛYAÝljÔ=2ãs}l+ê:k=Z:ÓÍûj"z³°M¾|q½¤dèãÏžñ«(ÅVÖ ž‚ðÚ™PEMúåqÁò ygNL4)ûEy‡–—€#ÂÅ™¬'¨$ËqA,dq>5ØKeÄ…¿®ž¥ßëvâúzË+<°Qp´ëVM„Fô•šB>ç»Ò¼B=áæV@Û\[Ú=чïglÜUÔŸf½„‚º)•·Ü8ôk@ ˆÙ¾ÌkŒ(!ÁëILÖ=–²v·—µÛVÊÁ™+Ñ%^ô«°ðþ"Ôë%ô{4WYMIIATÁK¶Ù2ËbóÅbqnZõÍÛ.vÇ%ˆ…¶†‹žS!‰ 6Ó@Hi—[Bõm@^ðke_¯$çC%«ÙI¦3M ¨W½˜[¯ ·ÌËb¢5â‚7ëƒöÔœ‘¥–¥1H<õI×ádÙß+õl³{e›…©ØÉö˜—Ëe±E?‡Ø`W›ä‰f×È&ÊÅLOÃǧè¤iž®ˆ_·¾>%*=åôÈ>¸\:ЙYsŽ? ~\?IöhË„ws6ìÐ…¥ùd²òËßèÒ),†dU™tèŠ;Ü{¶z.t[™4gÇ~XU\SãAwÀ®až zx½#“6(Ù¨¿ÔÏ,»¼xÓˆo—óöáQ˜ÒDE6W9QËC’sgŽ<Ý%â@ÚHHÀ±ªoõD²À%¡!jò ܈”£úW8`¬…`¬¥F:U’Ú.*hc ‹JS°›±‚¨î¿j°œ™dOˆâ=Œ~×é絊þ-ezfR§ Z{\&ðj[r¬,þ1±ßïÎ<Î1Vv_gC¹¤Ó~]þP$粚È©J@CÍ¿¦užW±=´¶M.Ë_ÁMe+¦ Ýã§®.A屩ÆþóÆ©^î}üD×¾›sŽ;ºŒÖgOsâöÖ­XZH4­„Bv1¡©áɇ†K—µ*õ¡;³Üdúr ’]ªã x!‰Ú gÏÚþÁÑûmô+i\ŸÃ§Ì9Žj™Á¢ácÛD Ôì&2Ž5o xHy~¶ÑPˆ,wPîÏO}Åò9<ͧEùÄòõX=òÈkìG™ô{ùÉ ù?Z ç¶fòœU»îçÑ+’ʬH$ÉØ5{‡ÊeܡÊfJT¸˜PˆªPW²&rpƒÏÙ˜ûÒøÑ­`ù®Ö¬^©£ÄfÆÈrœ5}Î)u„¤Þ$ k XžÀùwkÛBwÒ-Ó-Ñ’¡ˆ2áfsH3Ý.”…]·P È^„¬Q…?7^žiW¯[˜ Õÿpæl?Ï~é_ÌØP;?¼þµ6•#¨÷µô[¤óÛ/qø­kÅkÓŒw¹”ºØu‘”–{¿ÏKõøèÖÔÞdmV²×õždÈ((T æ[ÊüI̾ÍO6áG3½¹5ó)ŸM4Ò^z‡ü3æÀø—^YÍíÉ”|L¡®œ© §gö…®â86Ý^q@/T À»2Ê…HAp]Ñ[› ‚è¾bNª‰ÉäM‚S££~ŽÍÆ× [m¶–ì¸2OI¹²b½êom¾¬À2°÷¯òþ»þF›ÉÛˆÚÀ'"èíÍ•¾Ðœ’Áƒgq¸4IΗ|Cªp!¢<’OÑÂ})â_ῌFÝ¡hwíji"F9_ÿ‘8€öæ·Ñõõñ±/x•òåµ§{ÇçV<™^øºWN¿—ØÐG—–Úƒ·ÈLw¶f—TO?T™µ¸ÝLÀ´ý`xÜ£ꞣÇïí üþØ;ò J¾a¼ÿÆ}õó`€²ß‚ÎH¸÷bËLu°Wõ ¶›ójY}Ðä€y\j”y|´}Ugk9™»\n©ÕÌZÞ«X.Í÷Úœâv\{©14±ëã1ÛtɯŸp‘¥³«‹0zMo“àçáÜÍå’›YGÎ ôð2+³¾ö\^Pœå˜¿jFG†1kc†  Îè‰ÆÁ¶" ëÚ{yE“–lÆþz&‹Ž×¸1‹ÿÛæçíãÎ^ ‘!Ø6af¬­­¶î2j]ßwby~+ŠA £ASrÚ!#–áex-¡8‹lÔÞäôã%l`¹ºÊ£‘§y¾¶¨V6C¸)QƒŸ$7Ô³ ¯¦&¨³P–CjÚ.ë[ã±µHëZÄ¥2žÅÄÄ£'ŒRRâ˜ýà¤3ÞlΡ¯ÍߤÕÝÝ4ê2æ`G‚ž‘.“ÆÕš/z¶cGgŽ8õÀeiãÉÅ¿¸ÚZp6µº2íZ´ÈyýdùG ³çd–:­Dì¡þ¢Ù÷#ªå¾½éÀn¬ý¸kâ¨eÕ;†6ÁÄÄÔ묿ì»ÁcÞ™úx±ZϘÇÅRéA¶0> HÆ ˆ–Å6ùf ý½Öô/u¢ÝÏx©(#·bJ@çñå¨z@o^ÑêÙÛûéíИÑÁ³9מNÆ£XöA23f‰F2s,8®¨Sì/õҚ̊¨ÉúµÕÇ$ëz&ýnäP¿TÃy' p}}SºçÒ ;DÚL§5Ô?)€ÁO+ö»esþû— —ì&ÇìÅÑqÙÀõfßì:?kÍ>Üß^>ú‹j÷ƾsñ2ÐbmHŸéŠOj΂;d€…ðï×R¯OhI`@úªƒ{ÌÈ:]QûœZ– ¥g­•g{7î×gþa¥ §““È žå¨ñw‹Ð}qaÍÆ šüõÜC5}Lû X«”Èøš¡“Z¡C5LpYMkó.YcÕqË”® šËYLpˆ}¦e#Œ®®®¢2r{ –IJ;9î|‡† –·äZ{~/Ë2a¶Ž\Mw‹;žŒ[zµj|©”<9Ëñ„ïÕñòvR ú·Æ<þÅ0s–Â.¾ÇJ~ ²ÍÏü KC5s׃àKcûXñ]$ wL^_u¶ a¤¨¡=Í  S¡&h”(‡™£E5·»[¤/z.¾qÐÍØÞ‰³%¾ÆùìååeOd ;ºGÔ¡Í×R'—‰¥÷Ó“ì× ¥ÎÿÛɹÝTJc€œhE`òÛæ„îÙÊ–aæ±1߸OÖêÐãädÌrSÒb€æ.·-’ ›d†MvéáR^‡äôköªã\ø'ç©è½‹ìÍàT÷Ëc¬Vkäòþ° ˜nŠ Þãæã¾ç‹€¿Ùðj›Ó|<|cvSé‚å•K¬Y y¶~½üùðàßà@«ãºGÄžXy£ áZe’æ”æ{ƒjÅ‘_dMï[sð îCU+cÛ.½ ¬8T×6Hæ·ÿnC— "(š¤QàbMË,ð5*Ž*Z5€ñŽ Nvî\®TºÂ稓×ôÊ¥ÊÈ-ìïŠ%^“hÐ’Ï pÍ…Š+ ®ìmFVé‹5¼‹ñ&XƒS)7GöžÈ gÒK.²sp}X_1¿•qÝ6¹Ò‹.ø7p=Eú˜vo 7j(à °®ÖÝ•œŠTéà¶l†æE ìYà‘W9:í¦?xsÇ1(H΂ÙïCLûöÅ@âGÝùÙ&îøHnù®îïÙúïúþ-á‚S8` Òʇ5IR5@D‰§ºzó­P„jÇð•á8éØl ü™áƒ¼ÎÀü^}5>uxè7É…œÈŠ«Üdÿ ÛÁ &Lô[þÌZÛãÆ%à_ˆDXy*lÌ&·¾×€6 h05ÃQ›/´€ýŒˆJÓh¦2ÅÑŽGÕcüçŽI wN‘0‘=­þìFÀüñÇøÿf4Ô=©Bußl·ÄQqD*Kb=zp<¤—qK½(|à\¡a®J¢´ôZì2Á[Ž>­Czç¶ ð`†ÒwRo±8•*T¼ÜŒfƒT÷‘5CÝû‘ïàé9Zõr&cæŠtS(¨Gõ]ëRi—ˆ‚nIœåd’v…µó"޴˜`¸Ì³ÉÞ¼NÞn¡Nî²Cö¼Û5­=ðÉ3$º£¥”(ÓTžM^’3"»qO<³ë9MSåb’` ‡,«¼ý¸0ÓÕÐÉIÉ‘ ‚lX „è¼m“™2ý*Ë˜Ó It{’GyÀÀ¤¬ô‹léÑß.ß ~?'ŸsL¡=ç6Ù9Çìx 0`òÖ ópÿ„Þ1a*Vãcœ`/-‰ÑÃÚÉ_½à0Ífè¿»l§À^í3æÃVi–cµî1éGõÌwÀd-Ôe˜É%NÏ*×zí3/–Ó+åäoV€?}µÝ­–]òÈ'àçñ„±aóüï‘4:.ÓxÕ³{ë0Sæ5ºÓ„2%³ÉCô¡†[µœ;«I3[6GÍ£s6œèÁ2µ*w3Œ”þü$A[ë&Ô8´€•ZU.„ŠœÛ”W3£qu)äFšâ”U2ÖL&Ô —™c“‹:¶5”°NÓú¬;˜]Î7[7ß¡?-l*TŠ›¥?þ§ï ÓƒNÔÈ„ãÿ2‘ù%žBªR*gF­X ok`ÉÇœL6N²7«òŸ&zfLÔÿÕÍÌÐG"œ6‹2wîð‹Ø/\à%5±ºå}}To!P1Ñ(Ϩ;uåÔ?å.§³× {ï-­Ø‚8¾’¿ÿÙr^§š²ÞÖ,“Nþôq„«ÍøRz@F޹ê䫈ÖQwdõûPm< È€ø"‚A{Atò›ÊËa !6áÑyJ¸šè²vÖY†Åþ«©.¾˜_¯ßTZE¥»¼tˆäÓʱ ´õA%Õ—yœ{‡éq_šE:xkÕ}xó€<ÛpB}óè>ÚpO.;“›?§‹CõȳÂGºÓ‰fÞŒ+:Vo34÷¥¾sùSã/à êì9Ùaþu–™d=“á¤ÌÜ«™ß'A§îIÀoÎ_Z¬1^(-„l9‹¤qN³žp¯™x*ÊW¦ÉƬó$O«ýê|ŽÖ«gãSÆï2SM|²Ö#Ã]Þ.»Â3)¥OGjûV¿‹1'ô0‘k&ø\ƒã?ëšòÝLŠÂÕègiE¥×8&Za3^ª²Ž¹=NQ¸Oë†ýbÊÊ/#‘7Éí&R¯ž—É€ϵweð­Èp£ÚÇÌ*R &õ"×­N|íäøTDZŒ0Û3N^h´çfu"ÜöÔ(g QÖ/Na­¸½fø\Â;+t“È,ÈÐÉ>(k†òÜ$[ÄÙ;+EEo\“nc!nÛβÖXÎò–Ï¥ £²÷" ÀÑgM¦|~Câ г|L&%š¾|ÂÔ9qý©ê‘†ÑLÖ²÷L?ZDßÃç“,œx•Z Á#ªši¥¬ø[ M`”¼ÑYÞJ׫Êþâ+(fïdNÈS9hJQ[ ÞªüŒ´pêMóárà ÷@ÿVPKÏ9­K½ÀS#›¨JÓèV—ÛsÓ½ýK¶*w™e™ïÅ&¥pïNáΡ”’š¨jDÀŸM?Ä 3¯˜1l‰v%hQ!.ùdni±d¸ãrД¸ˆèôZ’jð=Ý}F¼!x\€.EU|r|Júÿñ+,¬ñ¯!©-(Pð¯gÀÑèï TäÇ´“”: þ=¯Ç*¸P{t£Q´õÄJBøÕáÈÔV$I]0l m«‹ÝÔ» ù«†ÎñdFú¤7º£îÇ‚|-ù&oé™â}+ö¦Jý,MÁ znCFz‚+ýÈA䥸D}¦z¤µÆ†*Ì×Ý|êkÚ–SÁOqŸªýg•5þ.&-´9Ó.[Ói9 ctåló&߯‚ê1:Í*==éùôõôyø-åWÎù”ykÍ1bÑP1ñ˜#“™ÔŒÇ™™C{7»µte2s6à‡g NžðfyÌræÃÍŸ–»Î#½;¹q}ñFƒ'BJ,ÒSZZ;o! ×ßW­S׳Yû· y|—?ÎVÆ…»øsÌ âZì³#RÒè!ýéÎ]bÃvg˜Ž(;È0€:x|_èLíI=ïÏM» Ÿ)FFn‰‘ž #LûSú–0ˆãa.M—sœ!äª8Ï@a½×ð·Âk=»¼y½Ú{ô{¸UCº¶î\=”öÉŒÍ%gÇ/Îw®rÁ'I9R”ìÐ0¯_ç0aîYŠ7,utý€EðÜ*G+›ÝóúÝ ¦¬»8)щŠØ–ï,D’µ¨¡¦?Õ‘H?Yƒr%Òéki˪øoyªB¾éþ±â ¤_éP«h ÆškLûNÀ¾HÕƒ5d_ú2X½³EaiŒ“ãïn,ãÔGãpz‘¢à¿Ã›1_8'äM#EI}K`y`ºá†­IX+§M˜S°žßG‚%>Ë,or5þ#Å/$SþØþu<Σª˜ù;ú€…FŠDÉÃU tWáë!2mÿµ´nwëRg0‰<\bp `v¤ë¢(IR¯äW躣òÔyMêQ”Ç“j¶º nzįr¿•+½ÇQ‡l}7¯±N% üúþ®÷€•}q&\Sc† £Â—Ê/<¾úcßoáŦú;“ãzp€îáôôGÍÅÚ4é¨þ>˜H$q¸ Ã5Þ]'0æÝ»|yÒÅ«à?Ñâ·AWi‹pÌÄòOœå-1V ô5MÒÝ)µ-[Qû@½Z™ê0ÅÈ+‰c„³ÆJåÞ§ešŠ™Ó~iÍË­*h 1ÙFÔãƒV0Bò;1M‘ª-©¥ÝБ$+ÁM87§ÝÍ…B݆1fC¯5­&oŸóFµá*qiI–±²’Ýý;Á yã=sxÛæ¸3¬àMÈúÊ–þ’ÛÜì÷²õ¼ßØ;iX6YN53õ®rtCkàHXÐÀR:`Ùд(7Pk{}¢ÞýS¬ú#âÔ£e{çýw ô¢ÞZúóüaZN—ùºϛ̀nNˆ-Yx)¡ñ”ÊÃÄ•2 ¥ÝF€4¤!\§âhˆ½/ÖùÚ,@ îûù_,Iû_ãc­VÂSH= /‘²ôïám´B,^»Ìƒ— –ŸòóeP‹µ*𬢹åô›“““„÷e‚FZ—ë!C d|‹ôŠÒBå?Û;ðõà«t€u< šm³=d‡8öYxß«õÙ„åe¯îK+ÎÇ>øø‹â^-ì_@ã€>/b€ÔÀ¤.îŠ9åÚØwÚ‚7͘‹øÀÎп Ã>û yošZ­w@TÌŠ´ç(±0Ú %;ƇŒˆÖ(©À¡¢:Ö_eü[¤yYšIalw©‹r~Ön”sÓWm)jÚ(Vÿd“ÂYbì¥Ï+ÂôÁÈ;{ϳ–Ç^²¼KDYY/ãF½›˜9ø/N¬¯CT`Q´LÇ$«ƒà ã­\&×)Ó')´swa|ÔFƒÌ>¾‘}¶ñI×¾cßbk®õ_D, ¡Í 1~9óŠKpŸ©Çm±<Åj¢Ê^Tø·þEsUÁÈØ À è×p3ŠóÍÙ3+Ék¤ÌXÖ:„èþKÓ£ÁÇŒŸE´Ùa¥ê™T3ݤ #<ˆ+$Ö Ï_cæâyÞ$ËSë %i}i™ãf*Où¸æØfýÄn6î~—™ç#Û†ï«uJ¯,_e+ ]ﱜ/¤\õS{¡FœìÿôTe˜ø`[¬•¨²‡:lxý—Ù•çΜúâcMøª0¹ Ýi=ÌÏ  e/å°Ö£R$/e”%ypmÁ$Ñ,_\à©pƒ‚Ƽ z¹eYª È@9‰Â[8fˆÁ8ŠÄ÷Ö©X=ß¾óqÞ¾ÙÛó»IÞ+ã´¾ Ë¹x ²/š—ý`‚ºÛ-þ±¶ÓÖØ¬þ?÷ؾíé¾í TÖøS:Ë/EýûOÌ»ÔÄ*ƒˆPº÷º¨×둳U¡ÊØÅÀza`î»°Úõ^›˜‹Ï­naÉßOâ}1ªãlG)F0ŒËLF 7{$·jý³eŸ D"ÞPÊ|mh¼ ™ÃÍÖ࿳Ûw³·öì:fòIxaD¿®t$p8}*û_ô“kÉ.7YonTï¿®¼ùpgßaª¿•Ñr‘ЉÞÜØ—úCƒl8<úådøâ^ßNzjË76tÅÅÅIRà¤O·ÁéÎìöÔÛše Çô.pË‚||Ê+l|æÝÍtcË@pkŠÃ)nÁR‰¿€Á‹ö•ÿ$ŽÈÌKœ¾GÄý‹£gˆ _gò-QP&öîÑL¢/1iDAÒ ±ïð%¿€ÑëÝV(ÛsLê(½¯ èI’:¸¿wvsKYl™ïJ6ù3Hc½Æ![§Y±Ú¨C“$U˜0šžéÄßÇf»šÛg55²W$QCT€Ý¬HG8(£]‘ª®g_e oÙ8Èd¨T^»# xÉfêd ‘i ¨Büa›y÷÷¨àËËÚ릒¸ÿj°¯—P¸â·¶„³„|_w˜¿¤Û¬^in ÙÀj#>A“fE‚µ)dxÂl¼¡°Ä×@‚0„g¬å aŒñ.ôìÆpŒ@_æŽÙÀ%À]glúÇNUžìâ‰6¤¼ŠâCi©ÇðP28¹Çð·OÒŠpÃ4Ò•)Ó8L^­H¿ÿÜ+rÏl~¶'bàFÇàù)5H ‡V³À# Âî¢ÒsSU% ‰åƒáG„ø<44Áï·ýEâ÷H¬„¦²,NŸ¡R¶àE1ŠÃ9°'ÚÇséÆ (^Ð<r[5ÃSw³Îä<‡}“›“Œ'AÞl8ÒñxbÝ“&M'~ÐQÓ3ÓµÛLjÑà#H<Ó„ó` ‘ܺ ŠOMÚ“Àâßétä¨}ù¾C}á–· ­Øý³Yõ5ñ„qd·:V³·ñbøâ÷‚e’g|IpâÅ8m„Gî\­ü'öËDEÓ‚öLfI•Kó†@#Õ^jóþÔ5ÖyZîâÕWÎÇ2«=~;/àçJ…uÇæ·êŸÒEX‹% )ßÚbyG*‹ýEȨVS,– ~+„œP×7È»{DõHè µ&þG\ª%d×ùkòvèm•«¥¿&­Pb¥bæÿˆV*R+rfiÐ$Í›Ÿ6 fEFFVX6à,oüæÊÚã®KÕÎÐ4uFé—¼R£²Â˜üô Žž¡Åœ¥%`µf®víÈð)d_&áÖ=â"så64p›Ý^ÿ“bÕÞaò®ë5ÛþèÛîÛACÝr‰rû/}\­;6%Ê4ùæJÖYB”Wž±Ð?w7ãÏãµFñ§ë.E‹^jºCµíÙÆã_=Ôý.\äèw¥[ßuIFŽçÏzxZm§*h"RS-½ér«KJ­(Uã‹{p%ÅHrmí¿m‹ÝÔ@×;w´wÈrŠ73|iç܆ÿ:¸sö :ó,Ø_Ä^v\ƒÐo§>É×Ѻ§•wÌ2‘a}ã‹yúFt—÷S>JÌ|sT¨4H×Á¦WmÁtö;×0÷ìMî‰c‡½¢TØG=‹+ÚyÌ)œÅšãÛº§7ø3÷;Ù4`©d"Ф£ë®³éáFã‘âg+¸Z'uj\J tU©=Óþloÿè+øtû‰e`kl­·¬UÕtÛu`"kÒôÝ.c+ýAÞ¥”lÊõNËéî èn.ç7YÉ9ÿæüæË N-v“è'?e@üéÆQ‹f¸ìÞfÉO\=ýæ¹ì†_¸ñ'_~™­Ð‰¨6Wr"­œ]-µ=>yþáÿH?‹â~ð<ûeRWUZul[·òµI1ª|ö’R#üù»Ý Qà^EÇÛ&Ö¦“ªZ üùº’fÇwé¢êOu©É·µ_»iꋈ/ì*²Ê0뮿¸!<Ãb]üA4)öà‚föÕÍèÌd즯ZßïÄÕç³î:<2ݬq…Ù>²í=2Ž[¾:²ôC±CÞúf–R9‘õÑtcGñ!¨‚Ðx_kƸiRs²˜±@×2»zn¦ÛŒSò™ŤY-šú©³‹»WU“-÷–¤&cÐÏ f=WM×—4ëäMtÝ+0¾ؼoÍa߀êM>¸¨õLb^|_ÿJ®:Wý;È7ùÒÓ8èJ<ÊÝ$Gj´•ò‡A´ÏÒ#Ýâï…ÊÛ½¾ð] äÀ×ò¶Ž‡mÝI£¦!>Á_âtŸl· YÀÊ„ìHs¯ 9$VWŠIj‚½Îè…L¯ó©åuПGT‘À-tŸ5"UñZw¶úÌx¨[(³ì]âÉGD.›¨XÏi˜àùäÝgÐ]g·S“Cu“C¬Ÿ-rœ?׆Yúˆ*ÆáHåPî4´ÌvÅÅ׆qì¤nï#ÑÆ.ÙÖŽöü2²’?¦„kÚ›ž–ÀKt/ÙZæ2kúx^ê”7&%{]_¼(Z?Ê{;Ažžój¨X(d5¾”)™iVâõ³4•$÷o]¹Q”->”ttUÆædH×üGmƒ™]¯/·Õ´Ä.ÕU¿¼2ø§ÀceòìÖJ!U<‚Ï"|µèbpõ¢ÙÙFL<$­pW΋´u“2™®úlþ*Ž‡ÔºÏ´%¢;‘‰è‰)— XŠ23ÿxaùPXN¹òx¥CôÓ•ÿËXÊ&£äm: /bé¶ÖåÖ¨~ï€ áb0åä+æ;Ü”cÈ ŒDB[\R—n«YÉü´ZJ˜/yôB#Z‰ƒ¡¥ÊnÂoí—[Ç+éàÖ¤ù(Þe¾Ž{”é¤^–s÷Ù£k&ŽÚs«w"²"¿Ù&Œ»êt÷]Hº…Nä—ØéÄsǾøMái˜ëéï .ºòPC9!Ï_s"q6€¡–Uúóê$F¤Ð vX»‘IBÈÉ_;ð­»¡±APæù!Ñ:)ZD°ù»?L®llHÇ!¾¼{XœØ ܹRyC']vóŒ?|Y“jáó5¯ÈÔQSÚ¸â!Hé«¶¿FOЯeþ~”5»Ý[è¢pè±Mm^¹ºVš»j>®¼}ttÊü€NÅÅÎ GÍÐ ÷ä)ÐôŸä°|µˆKM¦]É`äô£f¡^&   ¢© wò;×ßNœe÷%¬ü¨I@Fwò7æ,Ê¢TahW’”"Ñа‹öukm¾1¨ Œ·¼ÊÖ3Dƒ‘I#ݵ?)´߇ õ<ÍQ+µqgd&£¤g$é"³ý‡«èä)ˆ‹¬úˆ»‹0^0©Ägjne}u¬t¡'ÖÀƒ/–ÒtJi‰V#ZlÂyF‰6’ ˜9pBîœr~éyÜñÓt‚.cH~M™ëƒñ¯ýô^*HdædQuÚ±÷åyÙºnq¤€a“~ çÖ †×èÒîøG)Æ éØæ,HÙ%ZwÝ?þmn(¾dÝ|;ëu×ý°"¦`Lš½P@¸X¢²R·I~T·*…VDÑt½xFÊ^v®Z¤Ý/›ý#ÀÇRò_vˆ2„0T“(⎙ŸNI‰<ñY ª;ËÏË£ÎéûÓßÍÄủò JÑ15Ü¢‡kSáÄØðÎ1=y’ìüÌîÞê©*¢æ¬ØP£jðôû5¹vøf•m,óÎOÉЄÐDýúʱÜÉ9¸}#}¤»3¾µ— ÷W‚¿‡=•t›i`yYªý£¾9Ö±.¥{CLoG±ÍŠÆ(HFSÇ`íºä'„¯9C)Õè!ÐÑ”4¦&/Xl-¼z¹b#,ˆм£¶f¿ü¦0I¹óøê Ú¸ M=³U#Ì^ÔF…¥™ÉŸZ¼ëw¥Œ•otö“OpFîƒöÊ<2Qµ~`Jú®:Ëm%aN-‡¥ñb¨ÿˆ;Å$ ŒLƒ€p8Ặôîá3pÛ°ËÒY´å:É„‘µÈªÂ_¾Ýhg:Mr—Lí#_Õ•ûv÷õ‰ô10ùYÜñpA:õAÁœ%ÿ³¥ÃŽ‹G]»8ƒù¨6þÊù ¾†SÏ'-ý¶‹K˜Yß8o`ÆëõF}\A3­ª~;–xkQÓ`×a'=5¹[WRpyåݯáò e‡ýò©!Ìà¨egÓµtÜr<¤!v ˆÇâ­Y˜ö foG²Ò8ÒÊ1œt‘ëÛ·³!ͼ»ç‰ÚE-——?ZwS`[ò¸e ¹yO>º9¢&8vu‰’#&“¡š0u<GU?ú-VòÖ ã1¢S´î™-ŽêñRH6öQ¡–+¥âà'Y+±õ@iPÎGL~lL§ˆÀù`/mï6‚Œ0U\ŒžÖ4ºK;oCßȃF¿sÀR·÷ ÁRÕÅRM•NÔ8å¨DZJrH>KC£A@ YdÔS1œAÍ^!ŽìÛ“ð8 (ÉšfÈyäâƒp°Èå1;îÄ2}xÔ¿Wâ]]^2ðb—-Ó]m°b¡f’T]¶ó‚µ~T۱ˡppgÓ4Ϲȱ¼=¿Ãº¹j¬½Z¸šš¥2¦¯†šÖ­˜³U·ÏŸ¹FGOþY!©287˜ë ez}"c;ÔÆ)[7c®\¶”/ÈÕn±¾ôËŽ0ݬÏBUØM}o*»êRéíÙÆÜHàc«\Õ÷åpûøüúîeçÈiK-ñ€6Ó@¯S6ìîÎ nWú™õ/±³ëÈÙ[5 ˆ3L£„p».™þo/"BîÌɦÌåö )WÙ;%;<Ò VX†ò0ô ºvÍ7fUïµ[].«Csƒ«EÊÌ ú×~–’ìPIÐQC³Eå%#Z¶¹´;w};®öÕ¥–Îu»gÂ9ºø ¦=Ôg[lÚÛ‰ÿ\aõŒjfŸŠ™ê Š‡Ò—C¦Wúu.ªçªkoF{’ßÓ¡>ów&¨úÔZÿùÌlc‡¯‘tà™ÏíJ”iw›øbgc#xÝÕ°7­l–iÞY‡¡ã* ŽÔÿ µz_‰´ ™<\t{º¾k9ŸýZìÁ·c—:&j‚ðP øey㔤r݃Í0R‘Ó½X2?sKµíc¸±Á Õ:ÆÑ®M3¶EÑ…rjÓ{ëõ[g–w'ÔSÝ0 ó@âÆrG™]è/à8­gŘíRý/ë| fC£Ñýø+Ñ`$Á6ïÛM[]µ®<Ì º¦±0÷¥ì·5ÖÆ/wÃç½^îO aÐ^°ž‹-(ž»,è™?`®Zu©3—]Éí÷{_ª©Òô±‡Mó›â”5Fí](t¹d=v¢ê{þj\rsKñ7ˆ²Bˆ‰aWerÎjìz~k”;ž©)Âlgh•#†Ü€5Ïú9þª[©T‚zp\\|gR$Ûæã¥“tð^è›é%·µþ}i§gøD¸±„÷°ç­Á…Û?<ãºžÇØ æÏAIá«q;ïÝ7ÿi²Ù:Üù+I°ŠÉà«“Á¬¡þoÝ# U¾ ˜gÙ;Ô{ÛÇt›§ UtÔ¤Gì¼}‹nMÑSì©ZpI«‚©¥ƒ³ƒ~glV‹UE÷„o,šc'Û‰Cºç?^KéüØY,cdºpæÏÐ.ÔÚ/£¸xø"gn³–7ª‘KgõÙ3-O½6ÞÎTå{ö¤ Ÿjk^;<‚¼u ú]EÏá Ê+€µù³OŽS½Œ|#øbg’b´Š9NÎ D]@Àݶ¦™9²ªiœºbàj–â,¤?ôSñ_e¦;…²Ù?Ó¥££Â!ÈK‰Bu€á¯O}%¸ö¯ʘӶľ©#…úÕ¯Åüà”éH“Vüä·E=»äMçÚÖÝÅ÷˜×w¬­²ðñ3Å0ŠÖ´›´K°±ã´%˜ÏŸ ÷4mÀVÓWW²­êú†ñfž‚Šy³¹ /dæô2ã-µÔ잊j‹-NÀ_t¶C¨280 '©Œ%ÆE%ÑÌWœ¨Sü (-Ç£ %鬀Ÿ¡²ëþ6yÑ9Š¢ëÔWgbïý娳A|Éž¾ é6û©Íï%<ó>Šóù|jóˆ¡^èzóòf¹ÎqCQ5Áï7á:ÖÌ~ÓòP‡p7Y>{5ÖXã¢À§(çJ÷Œ™â*•Jþ5ÍÌÿ.ÔÿÆn©cáŨýðº1zú[ña ÷©ÓgðwÍO£t'b®¥HëšË1+û!o{ÐLŒŒ–„ðÀ86º"­E0Û3¤·ýŸuî•.Ô€V% ØÔê·À•†ßûMèY+³ %Ë:g=|ö˜> ­™qC왞¼ð}±ÇÓUûºµjɪ©š£æC”qY-u©ŠN[äŒbá-t#õS¥®CC`o˜D#º?fö„øè‘S •õnj£†/»è âÅÿjÈLöÇfï½úéºàÜ_ ¨ÝÞŠQ5Ýþ°©×טþnбhâ'Dut´˜Txt¿iRÏh.üA§'Ô»É6ÔBZ &Lç\têCnŠéÊ LßÞW/@ë‘–-½(—§ZÞ»8uý=ÌóïK¬3P>ÑŽ¶ô S/žâš…Ħ]´˜7åzû9Eemtø+ÌÐTÐ. BÙImt¯yrô vpæ0›Œ»dÆ=ro«%§;1³Áê?°Sm4ð]ØÌ fâ&ãÁ«°T„޶ ?{÷%|ÖÂèÞ† ²^ü6èû ꋲ²³¥„“LX·l›Ê,ÒÓ?JW¬-ÓC– áÜ7ŠeU2,±/ñ4³C€ú®Ð›®z;4’~A±5×B3e¬êà›OPo0)_ Æ2Šr˜¹i4*i¯k‰ŽýùEtêÒª—ÿ€¸[Þ'b#[5VCqð£Â ˜[ÝevÜË?“µØº.B[ÓÍÊà9‚¤œ7Ç¿›n&hí;–“xÜÓwcFî,aÏò ZF öχåî.× û…leâ b®ÿ© ¾òºáµª …iQ[‘$cî›liÜoÙ°g”Þ [L'{ÎõDD؃»ïUZ°ã¥çÕúõj_ZÅ-zå]ÓóûNcLÖ\ÉMQsàöá K8£û¼ ÑÇÃ?à¶ó¢zê“ýë!ínÔIÔ.þf+>˜°ôEÄ `íú•k‚ö$ôøàðÇûÂZ!NÀz).ådd“C¸)õïÍeh‚1ék¨ý4 ÍÊë*E2ª«e_ÅmíÙ^b25Í1õ ¿¨ñ žtOŠÑ‹=aHå!q¥:Ç‘–Ú…oÞª~€m•ƒ>^¯j¤£= ÍFT"Æ?Ä`™¹b”y;Pó¹­A¨† , ­¼n"ÑAz»ío”ö„Æt@ìÒ¥XÝ3N"o–pÐ0Ð:œª§Q<¸Ö´äªN™æã¹|æèÅtì²0*yP¤Ë <.üF|zmÐ:ŒäC½Øš†$óZ-Æàß»]ðR;’”¤¨è7Ó6àä+ˆ?ÀâŽ*_²YØT} Â1‡E¨°þÄÊK+÷Ê7ƒ ªÞÚí¹ìï°¯DÕE¨Ñr9;£B8aœC_èVÿTÈÀž_ïËPP©ÊüMMZ%ö3{èôýx|wy§Þœú–\#/¢:õ|2Ê UêošHæH4(ö×â úZÏþ¤ÍÊcógz6K„¡á lЊ‘| Ä^.¬èLW§ÈãNï èõzتýÀÀÀ&»­*Œ!Ë(½i&í5öCí_øë ƒ|¸=p©¼N*umzØ_çužƒòêÙ yN&Nc~±‡Éä´_ö 6ÉóÕên0ÓàX2#,›òxhêÙáJ~°îj@0 9<„5XxxlΆóÌÊVËf¾ wÌz¾¤g~UæùÆEÖ‰¢¥;¿.½›rÕðƒü’¬Ð$Yísá;Æ7<$á#]BÜ„p'}a$`Bfš>/Ä D†IØÍ,t./QÈÅÑ> Ú¾e¼ª/±WÕ ’^a¶NÕÂØÍ×z«‘;ŠÖåû.Á>¬:ŽxŽs)WWž2CBZlw”íz¢ Ù Ù uü}·÷Q y3~ܤbÝÅjt?«  K4B·•yæUš ÇÁ½~§`è*ïøKè+ ÈÅ“ÏKœ–SÑ3ðVJÔ(lä1掜à Äê†yó&R»ÅÊwZ6[÷Ôc î`ƒHNÍFMo…üÖcKÚ !Wìö8^Ù)ˆš³¶’c¸õ—ÿs/€üT¾ÙðµÄNTùäƒ>†éÄû½ï–!o>ü蛫šú¦YfLT‡º¶ŠªM9®ÿz}LoXþ9—¶®^Œ` ccýŽÓø蚫׽hÂb“Ü0HX"€Ôœ5.‹¡C@Bw]¸ßýEWÆeK;˜¼)ö%nj7÷=i‡º­kHŸîSÞ䥑“‘Ï•'LE\IšÂ¯ò,dϾc[®›~¯wÞ9ùœ¶Jš_jL‹ŸØÈ& ÿêÀ'ÀI Ö¢‡¨nÓ¤çåZšW}34Yjœ ¤ûÔõÄvf™>×Cʱÿ“{[0Ô›‰hMÙO•ãñÑV°µÙžáíoôG¾éyr¿¨~'ÂY×Ñå0ÆR¦µR…>Ó\P;€ÉõE[Û3ÍÚe®@ŒBœ™½BÈàÜp•ú3ÿJûñ `?‹ªYÉ\?mVÞ®Eó}?ᇰOOyÓÜ(ÛbÂ=÷ΫÙÃDƒn‰µÞx¡‹Øe÷“ž>)J dÒÃQ//¿ÃîO+/M~uEL»ô“S6¡Øp|'}N1<Öú̯=ã°O#ÓÀÈßzÇC<{uÈÅò7Á«¡*¾,þ•ÜøêâO£–›hk?Ýãè› UnˆÇà…‹¾ÖÑë¢ålk¥|Å_ôшÊK*™Òr³0>¾^í¿Ö÷•5ifz/rÕm5–ŒvÕT‹óaÂz|K‚Yo”¡ËÓ)Ú=mlæ‚îàPë6Kþô%C,­ã¯höLË&² †&ÿí­ca•M ö( ïë_ÈIq2þá›ou©ýª·ú\ûy:Ì^.¢ŽñÅMÕòý:§oß’ÕX"&Mf^°³ÒŽä) á%Jy76êV©ôsÏBo á*c¤ìÔßie)'©¡û‚àdÂ,1ÞfÔ·Ä|´ë©eï¯6‰mÐÂE^Oè!þ É&è/ØE=ü’ž¿ÊP…†$Ã;«1ç* VɤòÁᲉ?i¸ß@­ZóÅ2™KëÈâä@¹MÊ' “øËÜrõî†Eÿp­4AgõcSÔ1çí(nóØ"ßI%ð$]†§þ^ ÏÑǶȀL¡MM7ãH‡xŒnv·»ßL9F($ÏZ Ótoc§¡žÜ ]Æ{+fsœ‚}Ý?ÒæCîü°± ØÓøƒîWoƒÿ°¶7Íjí¤Ä bWÏ…MU$nîk¸ -¹fŸâ£÷x†¯€#7Fs-{]q$‡íuveFQaéY¢†–_V~¤„tqZêWóʾãú Tâ¢M´ ýj½R5Åù퀋ùõ¡a<}×UÏŸQ«ð§c©Ù8\F´-áFýŒòj—Æz.VÖÀ$s–¿ÙË&b`‘âÐcy›; ý¢Þ#Aµ ºîñ¿ÄXad”ŽÞ§þš!"ŠÁhóâ5øKÁH«I ï[Éa˜5Y?‡Fp¡žÀ€,ež¶šn±£RB þ\[‡§ ôL#f1þYc9†uAƒ-N/«ÅþcÕìªôBä>,ºŸ°/©ÎÝøÍvq¸Ðz¢m›¡Þ؃¬#¶wð'£oÌì-Ù’™É¸jä–’KÅ‚_^;É^XÃyÓ¤§åÉ…‚¡£6ä·ëÝ|}yrrMžUú€  ^8KwƒÍ¢§Ùd7þBûq%àNÜŽ®¼Z“JÛÃ4=ˆ™ùpûÛ‚‹[Æ WL~cí ¥GÄ?—§¦’—SœF+öb 0L•1O=Abëup× ÅþŒ›>EAAn› ”Z cÀ2—IÄCæÌþE[ÉÍ*ûÚ…;,¦ê–kÑsMCg‘=R‰Wz6¸™½×ȶ<+³Ü'ÌÔ9)ÝKé R”,SMò˜e1E›aXÛ2ºÂ¶§C ¤dâõíª«ôi¤G;ÿ>©¸iÜfÀ1Ë Ù:]¿Q "ºDCΙlWå­) é,¶¨²bg)‡WbTl4=ýù1Ô‰§Ec(0ZÍЯl㩈ÄÙ‹ßfHÒZ\l[\çP·úd§ÊU¤ñþsË«æé·ÁMå:ïz|ŒBª÷1Ù-èjQ'f¶i µJÆþ‹òÐŽû¤úªóQàAšÑÖƒŒn]&à¨tné áan.×bCÿe#×Ã1ù†EH±?ej&£ú .ËÕ3÷'hÁûÖ‹[8y RçU]Taá™ôxW§qqLÖuN–±eH¶ø «¶¥W‘·'JÐö;Õoþ)R—v§g4+$ب@´DŒFÛeæ Â=j«º¦Nª…‘ŒÄùÍÉecöšb9Rþ‡\°ü׺_™…ûÅ}“çõÜÓ‰ïëÃS~ŒÖ+¶÷[º'Gä7q8|4Yc£µ¿¾§èeŒm@Õ«tëTËcq,¾Sȵ¡)`y¿ÑP–wj.œ~Õ¹=lÛàʾšôÖÖ*¨ àÿuCß¡9UQ *û›¨½¢]º«œL;–v* VÄ[Œ²ìSæÜ"5vº!tP0‹©CW CƒÖr'µç~ÞÙÞHË‚ÞìÔu¸æ (ðß(;\Ø9ë;oÎeÞ,I\Ø*I¸+—uáñð:Šr™î`kÀhKŸ¬ß;­1oa–Ì׎<³¢àÔᙕŒÆDúÞyvÚ–ýæ@8j7I·vhÚŒL™]ç1§UC”Gt+?À9Kƒ¶[ܪvRÖ·Z43ÿ 5vT”ÜŽQè-}'˱p²¿øµ·zµ¨‡…xþ0Œó1åþ5.ŒAÞïsW3¡"Q<Ð;ìwcÝVv: :t:î>â9ø!Â2u3Ë—º$Ƥc“ÅÊÞ DÀ¡ÃgÿW«ÓÙnÚy_¶×1óÙ îÚ §k¬/“·Ï )?€3ÇŽ"Tþ¥É¬®Ëô°|JÂíxz§²:ËipýJk»¿–!Q³JòTíÄY`~Tz¢rÍÜJÒ\o¨gm©Ø«ñµÜÞÛÃc;ñYG?¶‰?9µïu³¶³ÉzÍ÷–ÎemÈOwHóq9·ï±ÆÂ4*ë7*­lÙhím\«-²Û{éÁ&B³ßn9+ÃQ+Ú\QáåMbQˆyD&3º£—0};'3ÿöd2I[¦yЕ5}‹ ^~–ùÜ>’e6ÖCï'‘Ø%ª¦_Œ›¤-ÐÊ^}ê“sŒ$¹QAv…0 lŸcC–xnAºŒ°ª§¡¼ëÖ<é­ðÞ•‰M»¬BQJÉ(µ¾©¡6¹ÝJ¼^ë;ú槃Q3é­"Yí ëx'NÄ1•7N‹¾Ì¡&÷²y©!ëzVHµo}-©%ÙÌ®o“Ð…‹ˆo4Ô±{îCh€—Mêè=.ï#J*üw6E—w5ÜÁé!ÐDEŒÿCÖ_FÅÑuÑÂhãnÁwiÜà‚»»»ÜÝ5@pw·CpwwwûúyÏ9÷Ï݃Õ›ªÞµ|ÍYÝ#%ø€Ûë´Žá€(æ¸Ý§Ý½—ÌûÆÓ” ¨Z¿¥4VGk©ãœ4õQsuuÕ•nÉdªU:“ð3K˜ SoÕ2[²kYŒ;aX@ŽCX`Cs¹|Ákt«àâÈê>YC8\ûÞe°Å=”·$Úæ –%›ßg?÷#.Lê"«á…ö w*pÓ‰7ÔÙŸÏÕgÇÞÜ_nÊÒÁï~\0ƒ_H:Ñ¥Ÿßãùäˆ,ø;qìñóé1O¶~×vƒqÝ£¾±77»[´¬Ž'Xm3"¨#ß,¥¿[çÖ®W#Hö „3X÷îz©ê·mLžp¥¶#æÉ|¢)ug÷2ãöugÿˆÏ'{ƒûŽ‚;0éjaòXüò†éÇlâÙˆïUÊô9Ìzµö¢Þ•÷Bf“ñ©ou˜2 Ð‘ÏÆ¿Ù’šy}¬øk¦%ŸôÛ—À¨À‘Iù¼òx™dn ³úØ®k´hà=‡)V0›qÆ¥øTÜzê,Yö¸öJŽ‘£‹þá#{y3t¸"¬_ú –³©^)=GÑX”ó»ÿñB}òZäßæ:ß6Ûn÷Æô +ØBÆ7ì=˜½óµr8áù˜da™ŽKˆi*¿Ÿ£=ó0“ uA íÖÍ.çwƾ%NþôͶÝJÖXC}âȆö4äñføUH•]ǰú¾fj‹–y{zÞ]VôÊÕP'eþùÙ÷œŽÔ_Xè¯ß–––úDM؇õÅl0C&G_àP]QÒQNäÍßùöº÷}Qƒ5îa3ûþ1oN_w"@–¡ÆÃ·­{²FoåZwÅ2Rû²Sçêm껿Õ×8‚ŒGè…Ú‹âÓ/ÒLÈÅ1çÍÑ¿Jžñ[Š5#Ã$Wì)…±i¤ò¤R‹&ó£ëôµíS9meH:j£¼CƒBüëp´Ûªñûž¦Œ¿ö/y ñdE/ã¦X]?ÊjñXnKkâ.$ÏÅ6Ρó‰¯úÊ¿0ª€1ÓN‡j£ò†üßeÒ­&2(¹Å¬]èF‚,1Ääî å;”¾q~G(Z‚˜¢£D±J¤¸íl"s›£*JFODâ{ 1°t³ÎÉï*Ï¡-¹xrÐÜUMý®'*¿è”suf¹á›Y(Tîÿ€ÏÓ»Œ½®r{?8è¾P^§5Ë¥C@cý®åï ’7äë !«A°@IZJܦA¤m É‘§&^~w+ÙÏä´½BÿaÇ5½¿ÊOZÙlŽj°çaû«Atï1ýûÖ-‡+mŒ¦÷ ¥ÓlNÔxüíëÜ‘þzp¼TÇØ²±Õš lÌD€é] Sk'Ž(/Aâ3Ã3ß;Wïßp$ûÚêÎ.llŸŠ•4¼s³_/¨Ä FmÈðBÕP,KX†^'˜c)òH ÌX4Ž4@4„¢†¢ð¢Qóì—D)TI‡röú7‹rª X@k\´5ó®R¶ÊÉè´qùª±Á‚AD4Ìóâ½2Úäµ9޶–0šËÝÅÝ•I1•/IJk2 5t¨1¹áñEMêV¾a¤mQ&Ö‚:¶ˆ×ûdxº€èÓRÉP[Öêê¢ó:](­~ýîo-Œ­Ò×|Ι*K…Þñï„×·W|Á@Ê"ñŠœþ­2ˆ5.éS¾ì 06=‚„7`„k @Ÿ/pÑAçÛ·QçwHÑü0-ô@Ç7}ÔyB5€ÿZšGK§µšÍ&ÿöS÷pƒl_ûurÞîg)çZ]È[Ó Ë“¦·Ñ"áÓÈqÙú죂öùc5uz˜Xý žñlîUè1šØøîf>ºîÅ(YÞ¬Ã$N‰ž¿gu™â±Vwåy½ªÊð;¤Šüj³0LÀ¯)   »R8^Ý:sz‡}$6H× àBæTî¶æo+TÏ“õÿk[+oᦛ$T-‰ê†oÇ­ºÄƒ•×>ZË ´3‹NòÿòR4omì?³°×eSYr¦Ý!T<¤aú…É-å#ÓZ½¼éƒŠ·ÁgŸ€?ÊÖÉÛ_~¶RˆÞ?.çŸÌë^‡ŒŽèm[÷Ì&Н¢Žþ,p0xßBŸúÖLU<ª—¦‹þº|ýdG¬}+j+«Ë.¾c÷=-Þþ™Ä(îEøË¢ag%õÜìf†ZÆ’´S87.ËÑÆâ*àäS§8à݇MÏ|H•–O Ôã€RÏ ò£]„³-ë$ðøR¥8Š#!øfþ2‡ŸDm~Ìå:qK'Få¡åÊ݇æbÿp>Ü?¦rãh"]UÓèà÷Ö c&Àèÿ•µþ,îù•¥ S 4Þ¼þ+€Ž¨%–ÛäŒÆ-’¿Ó9=üOìè*áùòÇÒ¶,¼¯ÈÉøª{¥RðAÑÂa>Ùš’ùêÛ'û(ËìÀ Þ¼Ó½¦Y‘‹ÀQ ƒè“’ìîÛÍO§Ÿß¹›ÈŒ@£X+0;%Zø“f¶eíoþB±¼’gg{¦Õ\y¶lx¶›‰M9Uèo¶‹–ñÙÀa-%S¤ËA쩞ÅÀ-—{¹&0 XÖÜUxèMù{â?©:Kʲϓ1gO›³Y|ôFôœÌ§ÎŽ·bÿãTZ_˜1|‡V+_±g:%þ”qãí$ÚÐA³ؼrÒö:TÛN.YôÇÇ*è¯g¸Ol†ð2Ρ%†ÅÃq VmƒûƼã,7³8d÷ô‡“ÐF8®ÝWDäŸ>dìçdÚbÍÝȨÆÅµœ*à<÷ô£O1ž3›ÕQ¿Ñ©·Ñ¿’»úâìêÔ¶F”ˆÆñP21¿àþHyuRÊZâõG!ÝènúpF~KFÍ%enéD1HÙÇEÝè>Øã0;ë›å°Scö8Üßýùfžî,ŠXÄ4ø.ÑdX»ÆgµÓK|°V…Óï¡/Øk‚(Ô;LKþ›¡A:—:ë âl ÷5p­£´Tán¸Wè0€ KCq‰D(×wI‚ ^Q¼œÁ•Ð ½Ç@Ò»» ›ÚR©PŒÏ[ÛÉÎŽü=¦Žy“Í420€×»“8¯ŽÎ™ô¿ØÚ°yFÔ†Ò$þæ‚{F¯§¼ 1 x&½î?ޱ9L‘hojINzNüC&‹ÀobÙw'M‹ ±gçV(¦:ˆždûÍ­4qséóÀ}Ï“špEˆT”Z…4¦^c»&bâ!ŒøI2³ TÎJµ;Ž:fœl3ýÆ@C÷}Ù¨–ȶ!­Où‹u´SºõÞA1‰’¸b.”xôíaŒz(Ù‰¥Vh‰Y§ ^˜ôxÈ}ΙµúÙTÄÊ  WS2¥:l|®×—·”±wA¥UYŸÔÌʇ”Ý1Ç9^¥Î. Û¨Ä4±ÔxžØ}Iëãšgºc:iüTÝ›—ºÑ›PÕÒ±4sëÍJ­{î¢ÝŽ7!QrÅBK½iǸÝÏû“¶ìöä–t«¨V s!r?@‘ËnîÁªfi1EbóãܩDŒÃiZÏ®¢Ú‚™~º^…‚lô]P즠xÙƒbÉ ¸‘üƒÌTϦ9¢9e!¥‡²—¢ÝÛN-Ÿl¶¢®1‘.Ö<Öd9í[¡ÂJ‚éST¼èðG”K!bàDúÁ¦A"Åân¾Ô1H´l~o汈—˜°š‘û-ÚÞLŸ–Á`OÍ+vù2HÚÎ>Õª3‚}w6Óßèc°Œ4ÀHc2aq i‹Ûo›!—úß-Éç%SÇT¼-—b§¸©ÕL—™’Ô8ïMGD?¬|«3;r|N}í"Ïe5b4ÔûH‰Ís¶Ÿnnb‹5`˜j~›}²ß ©xûàªf|푎õ<“ –!©)Uâ™8wuû±œ3bGTÄeáPßMךH·"˜œ4…÷<‹ÛÚF}A^îË„ÍÊy¿gœ¨&1+\4 Vt`òïlåç_èÿ+!Ù5J»Ekô—,ö³CyŸØ²°•SªÃÖë#·õá…§^ƒû$_ÝÅ« Ⱦë[)UÕpð„i:·k3L‚~þþ48]šëH;‡rØqáÊ,ì|YN½1É–¨åð‚Ók¶’[ß; ߆NJՑl¯¯~\û¦ÚzìOžnŽk )_‰;ŠÈ>R„ƒCÅ·Àurj>˜UiäjÖi%`ÌÁW\g<~XG`=ÁHãkñðú'9ûÎÓ[ Nô)t_ÇKðDÇ›°õ—’9Lç«„RèÔZÝÜbèpX,¢mkäßÂiÚ¸àò5™õëÝû€}9‰ë9ÕJ¤  Ó Ñ-¡¿œ JcÃ\§¼xô_qõ"7¢¤S$A¾†š¿HUÝ‘›S;§Â彾觼>5Ÿî¯ó§hEÕ÷V«s*U…éÖIܧŒ½Qeýy¥g—_Ú¸''lŒÌÌ0bÐ_¨oñ§6¦&›ézËÅP¯W÷P#­Ë8’­|úå‘™×OõäaªÖ¢ïñ—íþDÔÍEbãîj€ +V“2þ>}Y2-Àð ù ;ˆ ÿFAÕ‹©”ç} (`}.[¢ùÄÁ鿉¢-=> 6*¡óݺzõÊ';M&‡S½ïzˆ‰øSøY!â£á¨„b8v Ï£tÊ/³¼´U-\«q“mrô %ÛÝI’ÃÞÆ–Æ~©€CUÛīΑ×k–ÓjT‰q¢¾ Ö ¸ÊÆù’oYap,KosRuþÔúüÉùT}û#›ìŠ˜1l…`:þ÷ì§·v‘æÑ·° c¤Ãh7-g=·°ÛÎóšm¤$uÉ‚äðýþsI@pS­*L¸d\¾>p~¡'|ÿø… Ú¯’¨m;Õ"©1ç7f8_ZË9ú¸ *¨«>à5ç”x{',Ñ[£m¼]8š'ªü³2¯W°ÿ&ÖRŠõÍ„²O'Eö³B.ùhj¥š*+úa›â߯2+—Z?þÍÃÊ ˜4ˆúãûc¾âŸÀ;…63‘ÈŠ<à…“Ê¦¾§å›Ïæú˜“É(ã? i&´¸ëÉ¥½ç‘*ãÌäQ—o} æ]¸CŽDpßDæ«wÙu]\Ý`{7Ô¥kêvnJm¯þm?[ß(:qH‹Õol.rðxøÈj+襭Ž7„a9Úo÷` £O//åvzþL˜Q><õޱ™+a.î~¥áG+ñK oÀïäªÆ£Ï6ÊþY1¦iÖOÉ0;llÚ¿ƒ2ˆ¿ÑEêEæ–Þ-U9d €èDJè•´EõcÌ…?B”ßÙþ»3%ñ1©°‘8ÕŠu"x¸uޤ„žýνgî³ÛŸ–»âøÖ@?†÷cñœëNšOQ—‰"og«§ëŠMƒµ D7æ¬Ç¿+údçô°o¾)ìOÀäQlñ 5¼[WDI•¼Rݱ–“V’õT’Óói ˜ÈˆŒÇ§æg– æ!2ÜAðØo *)Iúâ- Åñˆj_V¬8(ìWRÇ8–âœéWÀ`F2,†õÞ3Ú3¸û<ÓeôX^ð‹Yù&[ÚöÝØåõ똅wvãûªR÷¬FB,ü¦q¶¦ú@'\ ÑÒÈ¿õ¥_Úië´ö0N ¸-ZhHñ,Ù_œgZåרýò}% @)«™ÂÇì gnX¹Óöïš ¦ lÏ@ε{»×-ç¬\ëMœ÷vŸåéŸÏ‰g‰9ÝïybEøCWE–CUxh‚:«3Éþ¥¶P„ÓŸ~Coqô ]ííoÞEŠñªs„ÝìÇ„R$«¾åxB|&,fòç|ë¦Y=y.ɱTÄæ­ÏY¸9ˆ_éÛ¥95pkS3Ús!¬Q·‰g1£¾Ô³&O¨Å~1ùg·ô}9]•IS–¼R×j9Ò7õ|/ò¹–Œ¹—™o÷ÿ=  ­ááë§vj3+Nëcƒ¤¶)ïûêz“S Y^`^ÙaÇzM_0}Š à’âÞ׉†Æu¹UÉw4uAŽs©ì–!Ñš1ÀcKàK¾m.¾þ /¶".ò{g}dŒÂyŸµØ'¡Iï—Æ]ïþú˜‘ÛyÚñ…Ô3yŒ˜Qâ]Q‰ñ¾ëÙÌÐÓ©E«,˜¹žWÕ©˜6OZ¬böŠBH+m櫵[z4i¸`IœÞ_ÃÇSV6Êsˆ‹ ]°—¿ì‚ìõBÏŽ6¶VaË2PÚÂz“í1~¥º;aTð " *ªÆxN8¦×U"XŸT>ž‰ØhYÆ}çX¥7!ùï|ïžXÉfÙOÈ™çZ½t1ÿ„΃rž}à·Cy‘ûGLfÜâõné5x^é7­f5ÖºÜÎ=SëûäàrGÆÓÔýu×™Ä8H£æ¿èø Tä> ¼x}B/v?ÏêSun\rÚtÍ©‹û¢-ÒýÚ“a:EÑÂpþwlªnÞ¦BÿÜÛ€ nRÇ3&UÀ³ð Sßš,çôX‹çkÙmÙ§‹¬\ÀqÏ0™V®¯­d)Pr+ÔW’wþM´ûFÌ, ¥ÄZP­èÛfMóþç¾äÊÙ„=ö:h*/¿Ú¢­Ì?JØó<)ÐSñ¾`tÌÕØkªÞû]]©š€1úsÅöEhàA]òQI])y5CYða¡¿‡SMéõDOçõàÐÜÊ3誑l¨7h‡|%/²B\^)w¨M¤„ÝâÆ‚ö…ŠMnkO.ÏÜ·ÓþÍ<ïÛ.h&·¢šòI¥Üó«b=Àò·ýï¸Ê¾A9ÈÙÑŦúV\¦ UñO~A;›éÙxª5Åq½ñžZñÏÁÁÀÛŸ êô§ž? LÛqÆÆkÙA´/ƒZ¶l:‹Bü~1;M§ÿ6¶ò'Ì:óO75#ÂQº™4ž¸4‰ãʤÙN‹^Ã?éùEráh'ïw¨XHj(9¤-›^‹×¤­€{1Ý\'ÂViMø™<޾Ó8•$ÀnS;« ¸(¿ ûº8Ëœ8µ†yO ažµö©V†è¼ëV¡õìÆ–aà ëfâú¹[‡brG4~T£ŽSÜQš)dŠtêšo+Y}Ž´NjÊUÀ%öœÿx à(‰Ž'¶ÿ†n¹Zh1¸ž§©Ö ¢ ÓJS A¾¡.“C—-h­ÿ}è+Çç­É KÙ?$‹i»ð/ óvÛ¡ÝþDâÛ— ÉØnË„N}~Þ8¾œ!â~…)…KíB³ǵ'ú»‰üBÐÔäUIPŸ¢·Çê…¯\Û-L4W+­ÆˆÖÅ¥‰ª~˜ÄÏtÔ:zѱ6¹ÍÞ%†bÄ¿d"¦¹Êv'Áùæ}hH§ûÀ3^‡¿™¦¦”†CbSÿþJÑG%ê|QýoÖW”«¤§?æ¼`n6ØÏ‰ç¤L2ØaJkZé¿×Œ÷p¦äÌV øu‚šR¨èŒ:ñ:H“/fZµÏv“}Ú+µXÚ‹#é çÔ·õtõôtåÁ‚÷CFwQWðäî¬Ñùp?i6ÎÒ…¤Êüºt*Pžxyu7Ápõdá¯ã+¨…Þ`†ù鎪@' [™_Zã©4v(¿È$µí±Râå RÁÉxÊÚœ/$Nßu¤D•tB2P<óbh ”{#(“à;5•‡&»«…NýÎ’±÷ ‘X8‡SÕ =mÆ‘AU9-ÄÇÕdп¿d;½YÛÕ6!á¾ÁtÍ)ýû¨fѺ¼fžj–ó×aŽ覻(àDö¯™ÝUö\ðBù p±ðüsýâŸf½'êþ&⯗7YW‹x]jýbAFª¥Â¼s»C£ÒG:s˜´aÌæë4:w#3¬dØÉ3U &ΊV­¶eô”K8Ù¨ z¨MM|&ÆôÚL@Ñ¡ Óòž³i2ó"5ÕqÇôöÔû»h/ Ðø˜òçûFÂéE°h+LÞXt°€qƽ_”¿Ã¥‹íÊcìôiB—½u¹$üt3{÷oÎÊ+g°úäø²ÛÁÈ»Ç °ÃÛY«¿ì¨C㦫þ±¡Ã€³vÜ¥Á Y˜àÕù/Ôp¸°è±‚‹ ¦S¿krW!kŠßT΂ƒ 'jðx¹ŒŸ'`Úb€ÖïãÄA·å¢ô¿_㊷Fi§4å¡ùt˜Ì¬9‘m LÉ™¹ì¼®yî]å§û1"Çp¥@Æ$2ôV‡) åØ>éIK‹ yJ„QˆO‰˜æèIZµqe-Jß œñ⋹òŸií×@¨e¡/×ÑlŠM › I§ÓnyÝÕx+Hyjß™_übQé6ß{V\q\ç>ìÛä\ÏÚ°~õë;O-¶<™=áÉ;vÉô“ƒÈÎÍQ«´=…£÷Ì;#>ƒXúØÀC†ödÇCfÂ4ê {̽/¸=º;s9D Øú <âwRMSF4^Àc–Tî=žñJ*NŽÔu‡ÆŸuô´¨œ‹¤Þˆðgœ(ÏBARRæ-haÚ{ÿÇÂÛa~— np|$³> ò ¾¯×ÞR*µ_Ý[¼˜•ó+%>"±Ãæàò5, 8ûò]u^éò{ œØ–ñ}r^Ç»ú ÌêAÒk"å°{¸£¬@õN¨ÂÇŒŠþ„¦Cð_SÔZ+m¢=ýKD©Þ+¦b‹ïÈ‚#[jBÇ˺ÓÀ<‚}A.€€¦&ÜÁ÷ ײ'eËýƒ’C²A£†ö…‚’ݦKš¿Òt#+üÕ¨n€ÿ îË °ÀËJúz@¢8€R Âõûr ¡&Õˆd’(M…œ„p„üȺ«ZÁ點ý#ë¸9E™rÔ[øMâ7¿R{[YRN)é”õ‹¯/ãô4SF_°aOâ+s‰ò8Ìñi[žIÇ åLHôš‡†-qíw{æË—C=퉕ۥú‘o¥Èñ’X®]þuºQ¼ŠžÛuNÙ^´ÀEè 7išçÒX’iˆtÄ{îëÍ™ÅÈ„³^u!øçºîgÊ%h³ÕFɉ,¶>jRl_Ü(o³ìóŒ®OFæœY!—;ÛQ9öì)á÷væ¾Øñ_ c$¨Ù SXH®úfqjVÄQÊ ³áaáÿ,³»À[õÍŽP g<Óùâ„ÿ®spÉ¡„V2ëýJɱ­q„_ûà°ïOÏÕ„i–ºTWk-²)‰~ŠðÅdådøÈÕ17]Ú…SŽª-–€ ¡ß#ZÊ—ÌÛ$Q5%Ýð3‡DÑy€G%èê oâ=H‚x»>e ªP³Õ‚l±ô¯{Èü¥œYL x&F†õéÇ `—ç`\•û’#uœW†§,Mlz¹z‘`MJä -cùÄD"Hê–GŒþ17Ë5K#KÌߨ_]p÷Q²øTH¶õ'CªÉU—T4Ô?øÝÜ÷q8fWÃ;ߟ$ÿ#Xd_ÁÒ.ây÷Jå#=¨ï÷íŸä€—›Ë×Ïx­Ø¬9`·'Ä®üýNVà<“ôBÀ1¼‰nþ‹'*T’i³Š$úW³Ò[ć%ñƒÁÐÃ!žãxÐÐk¹Ü§¿¿¶Eq«+ ¯M•WÃ„Ï Ò’+t2(šg“Æm49AT#CØ‚QF&¨qá·5ÂÁµ9!XÓ%#n……T °*€l »o {‰ƒåšõz;Ì!]í% \$ž6ž×ŠßWQL’6az›m/rr÷ii¡[` .W ²ˆú~yï§÷±»ú¡y/^Ö½›L‹±&O¦Ó×ø÷fÇ€«¸*À,º1[ø¼rR£’t4ËwÇ´dõʦºYá~=ýÍ~"{îñiȇž$N±oúø9J>ã“þxíÞö& "E÷¥¸TÓæ@•)óÞÓ{kƒƒ7__ ö¤ ÍŸ£V[‚7îh2¶œÆ§#énw­:k]™Ä£Ç€b©É¥¾*È>Iþˆ›—#G@î?¼È,ÆÏ‘ºH¥Ýwñy&üÀÜhéÚäïN{÷¢;¯°Z/·v5¾ŠK¼¬÷¥ ²Å'%Ó†´‡¦–™_]”»ÆhÙZú°Çr4õ·m9Ù8ÜPüOÈ $Dh¾{éX({Åî‹¿¦ ä&|u»:óãU(€y§A’¤Ÿ\Á·h«Á}æš ž\5@ q‡N›W.wM$˜lô$„@tƒe…j êSÝÌÅŽ»íyàä*ÛåOU‰ƒ&§WY%UÊݾ6ä)}F³Ö¯›)‡Û¶Ýj¦£ZØë aY‚Wéu’à ™xÈpow“}×Û¬qõ¶«-Ϻ7•pWüÆã€hÜÕûB©TSÇ_˜!‹x¹9S·áè3žkø]$Ĥ$·ÚCaCÓžìÊNR­Þ |SWÀó‹„UÏ5¥–¹eh€„’Ç^€!ÞZ×Ú<h—õò’ÿâ‡Ì³Y5åÆñóëóÑ}é„@mLGþ_ÂYÌ0^Ô”YSwnG‘ÆbÚÑáDgVÚŽzù• <†&¸½× SçIüø× br¾b›ó_áq ørtrõM¥š;d3üNBbyËÙoýß`…·b v̳žÑä÷š@lˆäØý{DúÝ/—ÁÜšÕ.Øožúã-YSDIHi€ì”#t$ÕíÚñë =ëX‘¸ŠŽ³ôÄîè›h%oãñ¢/ÀvßòôóÞ=ŒPk¹cUåç¢Ä ÷½½~yþ¨<âϤvök)tyR«¼3~y¸«ª>ÝË›Oì ïÍf¿zñ•øA#Œœ=½ãvÔ²H‡›¯! BÒV'^}æ²BÅQc§ðê)¯ImV-…÷/ê~?Çë¼»Jˆ&‚¤âÍ»ß\ð?Ý9?{ƒÙÞ–“Ð"tZ4tŠIg£îv.œsmj» ˆY\š£b#içQ~ˆ6ŒQ4hÇ MÅJ‡ýÆaÔ Ú ƒ×ø1*?‘–Ø U³q3ø§bšjÙ±LÖR™tКj´B½ØÊö·¥S¢/©I%oO´¦šÙô£ü ñ´póXå,©¤}.ØÂeÁof:u-eæ 32òûa„„4æÃåà ñ_!Gdq´6,² Öc‡t˜ûV=ÒÜÕH‚ó–÷¿fŒ¦Ò|@é$èw_4Yd7`piZH˜.@ßcöfûÜÕêLiˆm)…—÷Ægwý ÷uz…Æ !oÙ»™8…#1BX8]ðUmÛðYPïéVJ°?¥vè<;biÚâ6(ûãã»Þ¢ͪVmîSá &¡f2ümSU ñ ée ¡œ4î7ª±Ï¡ò¤»EZO=úá}¿Uü¸ª×²Ë FŠ;¤fî§9ü†÷w¯­¥óp6ìc‹]8\ŸÅm#¢ôt }A°´«=ÿ} xþßN=×0̶‚\OÐe:ò;CÒí_ÔŠÙ{<ñ]ià3Â.h‰¸‰‚ᣉoÓv…ÃíJ_šƒ”%s$R§WɘiÊtÊéR(e›±KºwwUÚ]OSÏŽ^*´…’§švEQá¼±úY54KÇÓÜ0%Üx¤äÈ|‘8óÓ¨ÂècæòßËð8×y3Íf¤+Þ·óÞHˆ:á ¿eRá5²Ü°fH:÷½¼ÿ¹ LicÆ£tÈÒÆ7ŒƒWŠT§8”¸m3Ô£æÝýšû9î’̳›B¯|¡Âª˜>+ýo‡nϺ‚Œ”è¢gc*×<Æ«Ðï§Ðœ ^©ÈOÿwjÂc—Ö…²†ƒ>ZybTŒ¼iÔÙYlŸxt‡Qäwº¸NØ]cÀ‡ {&? Æ‚ræç ýbþg<Œl²:Èjf…QÛ„×¢¿Õæ*ô‡t*Ý„·»á—3mÿ‘íj*ÉWžQ'\žnsp®5•-Ý¢Ç÷ú¡r„î?öºX„m[IJãl,ÒRlQ||"ûØú¸îüÛ¡(d™Q d¾áqÅ(ñI0hÂH Ì{áÓ©È¡ŽZ¦m !ØW-šû>²²lïV^ÈÃ\BBm!¤;ðZoào<²\íž1C¹s’ôz2ñ—ú•]!JcåÉçð™ë¤I~êË­àÍá!''$ þ|ÚcMzví¬TçüN–,þÝaUêY^hT¡ ÃrÀR$¯´¢Ú\VŽD§味à«~Âf{˜Î÷¹j“ú?‡»_‘nW†Á §¶4ê' X"³Îݧ¥«íÈ%æË“€¹Sò“÷è{åûÑ(¨7ÐÕg/ÖPUVÜ3ß9 PšîÜ'(E "áé²—kÍÒÓtË•’Ä;jpŒ[‡¬z¢ È.»Ÿ¨dx…‹!B†‡ª4…¯4d$²”Þ2Ûèp곂ÔuöµäitEü%{ý>ášZ´/Ÿzà k[÷ëJ`Ã¥B;zeÔÀVq¢<µ •zpj9D+ ÀÃ01VWåß¹à—X…Ä=avéPۣв¨à…¹NˆOI‚üä’AÜÒ¿qPUßo˜ž<ˆثW¼ÆD|ÓﻫÙö[™‘Üÿ8wN¦[T¦8 z7û/ɺÆÞŒÞàï~¸%~÷ç­C&æÙ›\Úb1pÁjšå8jh0ØÄ +ÿ5E ä‚0ˆÿ…ßÍ á‡\ø}í$@®`íÊZŽ*À¸Ïrw윮¦ò/ o`E>úÝ„'û§×䣻5ÏnÌC±ŸH—Ýì¢Yvtvõâ9J+±uW8Úܤ–P!U£àž-Wáø ãŒTŽA­ö¿¤èczY;îŽú¾‹o¬ò܉²ážÎh£šÿÆrC ‚ ‚{r!Â@Àß‹}²á"¸A`WÜñ*å>嗲섖­Ê#{eßÖZæbª^&ÒLFsišË-BÏ~i÷ಟdûËÇ[ç™äSÂOÞ~·V^” ³ÍAÁ~Œâ0+?FÄ}ÛÀ®~? ‹ÿ´¾¬@ûHÝÈ«IXõ4% Ìj!„@—k5³ŠgJàü¶o±èLž*×þG6ÙIÍV: UŸ~â9¡' qhÛЏ¬¢i΄Lv«¸] -úŠà” Ám+BhnÚ¶ß Ý ‘êŽ-:€z ÃÃbk@$í¼—²eeYµ¨ŸbÙ;¸›ÝÇ­W4ªFXã–=٣⢗3/£I£àüå]îB±À2ꢖqÉä½`<´>¡X'h\¤ÔiCµšè~e–9~`Õ3õí‘q×Ê * jYúO:£‡¢“ü8Ôf4B‚Õ#ß™jH£‡ë³Õs‘€Ç="V#Ú>ê.UMÿ(+ªg¦ãbo‚ÇŸÝ ‘£¦g–¥–‚M6ÞÖ\IÄçŸÍ˜ê÷êêsIÎØÅ¦—_Ý8ÍÖIÊüvÊ貉 ädñÈr˜)³jƒLdk¼Žþ[§Õ©EŸïÌðˆÐÀû¸“^úRE­ŽT=ª»;ŸLùÅm"÷šV®ÂðÄ×¢×ìíK©ˆë·¤^$LjŽÁ‡ TÏÜiøˆÛºf5Á—µê¹r\•§" ꢸ{ò,!W™­S™>îÛüÄ.° ÑŠ‹tÙΙÑkCå¨.ÁÜw/Œ¾,˜×±=kZ¡u&Ä‹q¸Xqd‡(§.ÚøiÔ¿±( ¥2îÖûè'ß\ÞT[çâ*Ï0§ù©…_ª™å\°üþuøð bA”dzvâ]ò7·…ËÇÙVãLyXÍÞŽŽŽÂMo«Ï‹‹‹»»Ÿ¥ ¶vk*¦q{¢œ¿m5S{2P/ý{6í›´F?µ¡ ðÓ_ݶ{]“Ü,ÑxŒú©`Ÿ¦ñ\oÓÐ\Umc›AßÖú·ýÜÓ7΀i~(Ùár¡9Ä9C«džgî=sZYvßWnÇšQ8½bžÕoº1l?µÐË ëœºËWÀË»E3n”{÷LExœŽ‚|[W1jبA¶YÜ{5XÍŽ>ûÝ̓%ʯNyO±l†u9`ÅÕªEjÜ@ jÑäÜç¶C©¤¡Á,sá…¼¼ñªÇÐm©X· šT!š’‡ÞÒy y¿§)l‘)IrOýóacQšgçÆûp²·J‹—˜!çÙ­åÍÜŠ4¤M–¿°(íÈÝrµ>€ þk0ú(sÔêš)WÙ¿ËGâ!%e¨ v<³N[‹tVÄKù®m^c^&÷uHâÂÔ'µ×Y#A´¡Ýx«öjÆ©¦Iz•×uÅô©þkRöÔ³cÄžÏeà9âÉd^ÿ3?Ű¯e‘r þíC…å@?óûxmô×Ùe[9Î…Õ;ßÏ»»dtå—£êâ,ÊÀØT´°þ†àX}òÙ&8ç­ÀÝ×v—ûò; q³«ŸÎè³Ö%¨zÑVÃÂOãÆ5…mâo¬$Þ;,Ù‹ÊBÉC—Z—]9똨B#Øuº¯Ö(á6ˆç°*®<)–éæÃû}ês§œº:9DóN -HÙcÎ埇ê™Vç÷^.Ñ™±Á Žöà’DGn?©Ñ\»½1÷6\ËbŸQð<6Ó¥á²âVbÛuMu[¯oàaʨ‡³ÎÄÏ좻êj;…Ô‘×ÚœxiññÅ)µÿš"™'Ï›äxî´ùtåBbŽÈºe¶™0f.ÛñÓIºŸç³öp¬P!FìgЮÚWs†Ð—ÍÇ ²­6S¿îK•Ij¹,dØÑ?•ÅÑdðlN2f :¨å—Å’æ,xÿüºfH1aaí1½ÁÈ·Ó-Ù)·ŽÊÉî …ž{ÑÆ*?‚= ¹Ó‘®r¥G§Ódg5nU¬Ñ€š¹<Kùw/º%¦êl[ãsO=æí!ºæ$ZuºÍ§u“ ”¯ ‹ft Š<ËäX4ÂWÑ=ŽCü´ º½úôÿÊw)üž°Q {ÄpóŸ0# \‘7ð&™§–­HU³j—•êå*a;<»kÞ*PØ;n’Lêf+½[ª[»yB«!tÜÀI9Ý0 •ÿ¯¢] ×y±r=òÔ»Œ69ÍDCùûAÿg¢5›Ê׃“ƒ·›ìiéf¡køÞžûÙLn ›øYàÁÿ{ˆÃ`Ó:¹4 GF.æÿXxÞ9sü²8ýíšùlµ.¸Q¿î½Ý¼Ý¦M…#°®M²ÊÃo“×­ |ýÊ LeLϾ&L• 4•¨élŠäx UÀ0“¢5_Ü,¢y»N‰åº÷¥ ̪ |( L®UaÊhd I­ÂÏr¯\4îCÌGÃ_@úb†AƒœD²ŽFsZÚ"î8Æ¥Àи‚ž#JÕ» òä ^ÿbûº%—¿àÇõwxày‰ßú^W @’æ“ÝÌiöWt_á,Gõi…˜Lg kþÐå'»&—n;ë;¹–t×õ&5FËä†04Û~“ýT¤ß«Ö²Ù¤w[RZ¡Ò¬Ô‰7~=©ôÝப¨+¶LÖÄôQc3èÎoÒ]Ø>Êéy~ãS™õ§‘Ï” ªob1?2U•çÌûŽÖ×WÆ?¬Ó쨚^? í‚]²šã†*j„'|ÚØäÖÒÝÄûB… ÕaŠJ 9mWÝv“ÜHÆdÖÃátë‚R'°Wðv;ÄoÞC/•ÒªÕ© z4-CkY&6¬O}ã#«âe.= oQòWoØüdÈ”!žÐýò’¸ RzáV=%q{+[¿XA×ßsïm.0tü›±$©Jðãy÷n5y±d¿«!×ÿHÌ;Bo¼3¾t&ÿ.©4³1Ww|öÕÍÖ0òM$cÝÌñÔ¶º‰ªÇüNsvVçkpC!a ú^ÓWα!õ«Õf…*üÞa’èû&Î×›3¼0)®ŠPº\s›=¨ø (OANßd{éÕß ÉÞŸcÍÅézÕD_~X±ý{ªR¢¹Hé#¹^ž7¦Õ”–_$âcû'”¸™a«z¿ß~”ÄÜ(Dš`ʦ.`#ššjæ{ ë®¦öAôWþ/.X‚¿kúÐq4¨ÙÆ:í°} ½3Ø\iÓž|[˜‰§÷)¾>˜é\îÖ ¢3^oEô™.1 UÄñ¨r2Qö“£eü“Á8u>ÿD•à Çø¼ÜPßÔIó=µÓyy“4ê÷Ù`AçÊyÁ|Zf6šõ»L}Á¥Þ?³ÈY >èû£uê²W® ùÙh‡½^”ä?¦iqÍœù\K“˜Ñì«›Re¬iäãM'X,W&ÂN’þ¾¼öHK2æÆ]f—âÅpä'äüQ8¯FÅwZ"vƹyÏr¦ðÛxv‰Ñ3¤t0~Ú®ÍùdÂÂ… T«ÿyi’ãÆƒ‰§㔊ìJv~æRyö™ï½PÂbxÿ†“SÏ¿¢±±è¨Ü•Ÿ0‚æ{2ûÑh@' ƒZÛ3êÿ@Þ›µ‡iJîâŸTçy”ÀãÆ’úØ3Ol§–NûVsƒ+PÝéòœOµ£ Úáí¿[Q0鬫%ÞHÕí™­ƒˆ¦þš4ks“ëÍå–!xYÛã=…ÿ_Àûñ_;Ýæi{E¨ã–…ä±qk6“jBÃ²Š±´!FÅâ\õ¯qY-ÿ½åÉ´ÒŒÉùZZÄz¹ÂÞ2e6ׂL‘{Loa™Û²n®+xœÄ|{ö“?ÁAä BÏIøÉaó£g v8‰ôlÈ_ :¥H}™“¤6öní=$¨ç=ŠË6U·àn¼xêö>Ló…7iÓÊɳˎO*fþžÜÛÃt¿id,·egà§Â~ ­‹‡1«:ª­»‡©'—‹î1rMå–õ±÷šÅóûŠæìBÉ.;8ý¯KŸZ„zš?7y¬ U¦[ ÚO.¯FÛ?­ÀTU˜’ÚðÚ€Ðø|ãï‹%>š?ú¥ÕEû»?ôÇ;ƒ¢t«AÍ­ÎÛîÃÙ£ô»à–þº… ñTÉîU\ØVuágæ‰v]âÖXʨ„W㫯:8¸LQã½]N†NÂÕŽjO½VhEØ¿v¸Qiƒ{-™§+N<Pd›U„Ìüî¶Ó=:õN]ò¿n9ôsqÝ„$\%ôÂUŸinøÿøâoh4bª­™1Ú+Ö¬nûëï‘N¤8žù‘!]x9™þªabè,v_‹Ò»Õ¼[Îã|ÅSü«°ê¦Ûñn©æ­žõaÇ!İ~¸ü¾¨Ubë¾Âé™{ÝíºÓš"Q2Ûû"MŠCA~@Ù—Ôµ‹Pƒ.qy».ë¸y¿s]CBH!m•Z—Ýáz¿î9äô\“ú¢Ò§ïꚬìñ5ÖÖÿEb{^_¼ç¿ðá0'˜†G«2­ÂšZ ¹“p‰ÈñsƒH|ˆg;ÏEM©e™cšë9ªÂäÏ…Zý¢57Y«‰ù"}ùw4ó Rµ›€œ¥¿/ýžK|­a! ••¿¦'‘ù—Õu"Rɪ3/¥eL ®}ÜŸ%Ì\"C‰“)Û½Ó÷•%üÇtƒyçxôn0 7!…3ÄM[¾ò‘ðk•yöx>büû¹k^ÃÞ­¿·þ¤.¡ð§S›Ñ¹4q>v¹þr¶ãƒ~ž5‡iÈ—çL^U!o46:ÙME6Eú£þýí„Ñè8ží×ͪlý"Sþîù^aiMý¹¶š@£~8û5ž¶î—+³äùúHý)ûD÷1•³ŸÐÿü‘×U¦@¤¹P4l󇊀JT¼ðWá½äðô®@øE'|¸·“‰¹°™ÔB(!~½gB†Å¥xø°s!Æô$xoóGÍåü;3MÛúÚ/høŽžþkZ®¢»¯ew®®îGGc\€ÒÅò{-Žn^®éã„ã"ãsN¢ ؇†Éô4_¤÷!øÐºF5¼å ‡£Áôk}ÐÔKZ"óÃ8]D~åb: ujˆ@’y?J‡‘HHïÂþSùïÍËÈ-v/>²áÓ\S|;d½!w´Æ«K«Vé甦9ƒiZ''(Ù›Œ'Îýv%÷|y‰rÞ@è2Ì[,µút_hC2:˜ŠÞ? -U²>8Î&™Ä—”j=‘$Ó/ƒ„4Îz;Àð=:P4wsû!ðÅ“M^ƒö’­dœèþõ'ÏmþñÞ÷©h®å¬L°üÞÛÜ™’€p· 2E á™ÞÁ4»æ£Úê³ðQ[/OÉ]¡%…®UÞ–7)¥åYŒÌêHµZ>ïUŸyn*1š„u³+OÎ~oÐ|(öëòí5+¢SÀÄU*^ŒQpÈ9ðŸðYjüüò’i–qVÂÝâ:+ç­eðsû;¯ñgùD±i‡Œ’2â¿y¯-5V˜o&V†î6¡62uëݳ6ŠÅ ÚBt^!rI¡mwEõ3“(׌ºÄ‘¹‡@Ðøâüd)n”€( UƒkW•š1#Шõï¥Öd¶™Öß&y"Ý+ÃWo(«…ˆu¨Õû€©ŠÖ„xÕï ÙJWMQÔE‹1£)¯)¦&*íù6à¶Â—׊8VQí‘‹ú4z—TÎZ Ù(YÌÄ(€ùì)©„YÉÙÛ®ÇhxéL\°šõ;Çì˜~Žûº³øHkâGùdCÒu`ˆWlq·<õeΪö÷Œ~ñaÏ\l¯ Ú¡~ÌÊf*m¢¶rü7í9ˆx”~ãè¤ñœØMÏüPÑ5Ö™©b½)üÝöՒϧOüfƒ[‰‘fù["àƒ¼´n®prLÙ?M`>öàÚTþl,›O jÓ0þÙ^ý¥mkÞ¦BÁ{¼a$&—€xå`oø¤ÒîêTêk>}L]ÛÅñ#ƒµÝxªZ!8‰ŽËÚ¬Úợö)ò]Öu¡×žçé @x°9RŠÅÃÁ€µ ¢U¨-yîJ#Š„L° £4ºjç#÷cY½õuÓtq<Ýq¡ò)C™ÊÄæftu8-…8Q®sG61V6P´³ŒeWZ¿ýùoŠSò_ØÌ_PäŸëjýF™-"\bØ_â³Zÿ÷øµŒ fbè®ÿò4¤OÒ*F)›:-ícãˆ^oñã² ¸$«ëô*•ÆØ+ûjÀÖ›CTŠHŸ>ÎñínEéÎi\ÕGû· ©.½{ÏTg8¼E3v­KÊýÖŽÁoæÒüÚUåÃJV™õÙàø/)ÿÆßKŒõUð6å{ÑèÕÔˆëi%E{;€v Þqjv;2€ED¥y½}ŸSÉ”Û僊ÕmQ§­¼dU4<½]?Üú B‹9 O¯†ÌçéÑÐJŒÔ뎹÷œŸ7=“Åûq6 ›¿EîÏ _%¸´*¶Ø¬š“*hxo…Y<><<7RÑÈ‘Iˆ¸{+ßý3ŽBÒˆº²èûüðwÙtt¨Nm’½= –ÓŽ#©·y»ïûxv~·%Ã@CCt+É-ŠØŠžÃ{ €âRò躤"Æå›D±¾ÝFÅé3Îw'ñ­ ,›h¦êšG\™©t-8ÃmÅJ7'‰ÿéŒB‚‡UHíó<‡´j:†émÌL÷YšÙ(Œ4Sg> ¶öÈ=ÎD{ãÃC‘u—9¬âqoTù£" nÃPÐ[çeTö0ëº6›êSÜQÂH£:Wï½ÒþqÓæ§¥.Œžµ·à?Zr__^ŽýM²ÿ èXœ@FŠr@ZëJOsBxêìa(±·È50S¼I$ü&´päÚ¨ÍâÝ¢êçûÓÆn4™Èur̦cOS‹iØíþžxsX«4™çåL’ª|6¿æg‚5 ƒ/Âc ÑýZß‘.R¦u¾y䥿¨åÛµ¸À{"DÐ5FâiÔu×Wg–,ȳµ“µs,óS£ŽHÖ¯PÔ˜*mü€ ”¬ÈÀÏ–*ñ?6…é^(+ötÜ·Îì]ƒÔ^\× Äλ®Ø ¿Ë4ÛzyËÞÓ{:=êàî:›î·m”è '8þ`·`¤àraȉS•£â1ªÌ-Iœ@~è ×nd1…Ÿ4Ì]jþÏ5ýöB_´î{ïþÚónqªÞ˜˜3!œíAøî…eÎõÄ bIII~îL}eVV–_ÏÔ۵ˑ /×ÿFŽBØãàw¹UÍânË€Xäxh_ý;‚j•„D,îÊÙkåõG:ú²Öbkù1pÀ.´ßÕð$äë$F££µ»€ú—Sƒ T¨w7ë<ɱié–žŠž=ÚµlÉÝ"î­õ[­Ï*mìè_2x‚K@n¿çqd–éÏ«ìMi«õÔs|Ÿ™Gä\¾ *õÁi«mØ6bÇÝsŒ¶˜ NçG`$þÔ…¤sÅPšÆ'IX$@¸c] k%úÓÎÎnåœSE˜tíØ%]è…׃l¬Ö"Z—ätlÑ& į»Ò.•Lê”SOg`›I8Ð/D­ÕøC¶½9Ý3¾“õ6ÑJ‚ ævoñ#z@‚hµ¬«Â®0'‹u1EP°_Ü–ÁÔç š±áì?¤l©p”G$G®É0K1õŒ°mfâٜࢮh|JPMÐÝðxC@@„6D5œŽ¾öµð8Ljhi4Õ=üªb¶D•äv™îüݤB,£r§Ÿè×%îºf6š©S·_ó®óGñd'¡†ÖíÇñrÍìm«D;ÖíZVC ·îOŒgÀÙš•ý±TËê=Y.3&“"ÈýgKàÕ.âá#(€…j ›ïo•Ù²Tpºfà ©&òÈÑ8y™uú€D7²²a®ñã†ÊËîZVÏo¹;ÇÓ^ENˆ`š½dTUY{´„Éèid4_KÊ}žCßð¶?”³„Æ·»åè„I‰¼.µÐ~ø¨4~6A¢“9{£’á"Œ3–hQIز>­Ñ qPp»Œ#n܈=¦¿y@™5ÔþïÂ…Ù$»×餿/Ü:º#f# \x‰»³%¢¾ºãûºÕ,öÓ°©MŸ»þ×ÛNÁ·ò™U8ÒBº°7é¡ð¹ÜÈ€Sþód2hµóHÝßɺ\ë¹Í‰àóÇXð?©Å7ÁÏË/Ç{\¡>:ö‘ëѧ±h Á]u†ج·hx»Ùi»– }£v¦Ë_ëäå_>Øã\ÿ•žµÂ }g\àK?X³ùÍòB(\ wÖ¬)Þ&H€ïËÛzoLËÂý@ ÄÜ Nz n記ÎVš?I£¯ôßE¡þ­Æ¨È¯=Ìä®YéÛÌf.$[ËéaÚqu˜¢Õ· ´ßî˜)uÞ2È'©÷r*ÁI‰Î­ƒ,•´Ê|ðôiw>r~ÙÕ’ Ü!Ù²(^Vç nÑ$ÿ×WÑÚ¯Xÿ‰Ðê¡zIñá+h%Oñ£Ü}Y¿ÓAq¦ßçë¶ð¬¸Báë´‡²é§ø¡¢ hÅߨÏŽ“+ØÏ½âàY·m>P-Š3}MÅ nQa*ÝèžÖá+“i(–;êùûÒ67þ_„ˆ¥!ïau¯½õÌxUÅIö_Ô?øÅ›ø%fΈ]8qó½1«½µÈÖI¤•$9íª¦†ûª~$×$çëÍÿ6ü¨¥JåJçöÚ•+ºTš•,ß$Sú²Q”x¾:E½WAûƒÃ ;ñ»Úï²#ê±rîÜww×ú¹yÏ&Lý¬÷§{¿Tºá=eç.ÏC÷Ñк1¤,CW¢[@´A§^¡i¾›7!Ý…¢U0=£'ü"‰f—¿®ße>T¨¦unßþ”3u£ÀmSì(y—øølþ›Ò~ñ<Ý}¥ò³ %)½þ"änTÜPZü ŽÈ›òUŒœ5éÖf<@£³9m1ÒïNWŽ˜«ý*À¢‰×+†[`2k_­Ÿ|+ò¬g‚&a°ënº7èñ¬Ÿûu&}ÜN¢ß'Õ4ò|„•âÍmo4pòä5«VšïˆáÏÆ×Ç•I«µ.#ýj<)—ƒƒÃ¢´ŽÍPR¯(WøñoŽójñC ³é¦U™ÆÆÓÖo¿Šûñ)ëd¥ï#¹Ìå!މçídfq ØÄá`¢è„I¼wþšáΆŒ ¥Ò˜Ãþ)óž vÔy=–¹×;SK$F „ü~N'’Õæp|R¹ñ'Ạk/ š´>®àÜzÛ òÕI;„n<ñ#õx {½±É¨=·ç°1y&G(Lù‡(脱oæ(£¥Ø5 ÈÞ‡ Ì “h7‰ìÔžI³±¤i l’]8õç6‘fÁâ&-ºƒZ™ž2hHoÜpF¦ßòÍjóÒ‘7Ý÷Â?<³Xw·Ä‘¹ÜVþ(jPOëX:_©$} Uؽç:]o×hYÎ"n²dt”ÞýÚk·|¹¨ƒD¨3²Ïå”êL‘!QçÔkLHþ-Ã@ˆu÷Íïë%—Ùìý!Gá^pœõ2²µÕ7|!zŽÂ;(D&Beí帤Fÿ*3ûš†ÿ¦RÑ-…E™‰¦Ú‹ùÖz”¶{8Hï°•<;n¢‚Géדƒv Ü–¹ÔXDR ²^ã¼Óè úr¨å4fçWÑI¨5ݼŠÕ“Ãß„yI“ˆðD4`2&ÿP|°gbµ:”]`Ýhjüõn¯¿ÿQ”Œ„š)˃6lB¤¼õï+à—ØPû8·…aa:+³³Ò¡PÉžmÿ×ßÔ ¦Á*4ƒÕŸ|«&¤LrïÉp¨™*šÂàA†t–‰["Û¤Ký^÷½Û7%J"PgŒUõ€Bß™$ì†óTR0N… „?eãòQô'yTÃNNø`AŒ¾¨~36þã¿.²ôÅ­Þˆ³‰JG»˜bθ¼ÉÔ‹ä ›ÇÞe@üC Ù?¥¹ÂŸÊ35&º%­ç¦LT?cëì×eÓef;Ÿ®÷POzÚþŽ}›·A÷€n–©Tš´ObÂuì®…)\=šDâ“€ìŸCŒzo¶Z¶Ç»–» àÉNÇßvn¬ÂÙÚ˜3O÷`u<ßîr˜ITx„xâ'‰¸2°`Ÿc9I²îR´XÏÅ`$ÁÚPÕõŒu,ýC=ÒŸ`à7©¶^g˜[±r&½±+•pyØ%µp~œh5o)šþªÇ¶¯Sž}Tý÷BD&>‚MFJk’‰È>Xˆîc(‘sô3X˜nf„ m\Ïhüµ§-€ÇîÌ~}IÐqL˜ r,)óªˆÚº ÿ¡ìë±.|À6‹_H¶á8÷‡›î)IhI¯òUn/ÿhuyýÂúA¦òÕâVU-­vÁ›X+w¯$‚ª³i¯JþùÏ~¦º•(½äçß}“†W3ˆVT w´,\YV>ž?¨Ÿy"þ ƒ¸Ý YÂ@Ó÷V‡±å^Ù•ÞÛàÅ fI‡¨“-ˆ7œ«Å+m³6‰F Ù–Ùf¿Q6ÚMr c5gô‡‡®‡q’“Ð#ÌkL×OýN-5®ß_²øG”h§lKlü—Ÿ¤ Æ ¥BÆFâVä¶cL™êÚùçs1äW­ÈªÔ¹²7 Ì” X¸+Ý…Rmð›àÁ¹þM•øïiñîñ$4%Êj¾¥w†Ún—{{:iv)&Òê-v¾Ð÷η4À9”dçÖ”*™%TÞÎB¢Hå9 ˜1æ¼GKo|kÓç eRBè9ÏÃhãµ½xpñ¬UÎM0Wi›MìÓÉñÅ~8D÷’?.qæ1®ÍÞ.£æÁšó+¥©¯˜Ty4¢Ì¢bÐdöŇïGýëNhã™°®j”,÷5æ]SéÉ7«JAÙ¥¶lî±::j0ëzÚÓAlóª&þZÈçãzÎØ£ zWœwËñ'më[1s7ÚÙ `ý›#OÑqjº†Ð)‰ü:´ìaûGi×q´oHÃôY?åƒÜí 'gí¨õ‚Ù>×p ¹çìm4pÞþF5i¡¥â®üº½òµüŽ´. ë|9qyœöÙ‚‹Ê¬ó¼r8þgÏÈb€oØ­[3œ8{ÚÄ8Ð.Ö^êÆÌ-‚Mc&Ç6X+Ž»Q'üT þù4$y÷ý);!ÏŠ‡ >Ú8'ç™Å^{ö 6¨]KÑY~üéýRÚ‡4‚Ö}Q}{Ð…ñ|à’žE.ë¶IÄ“à^ΧÙt uJ_Wk+ºÁ &tçølÝ€m¥Ëf¤§‰jjÄQƒœk&hf$ƒAÈʉTW?㔫TY”Õ8‘~˜ÃÑÉI¹3¬|Ë¿ñ˜éÀ3¹ü sÐ廵ï©V¸×÷ù26ÎÄ|O—Q.«{,B þ˜~kS‹TϘ) ƒPÉ¢Š˜x{ö—Ls9'ò|úãÍÇ”÷¥³ª«Ñglæý×î›÷²p剃¸ýïõt9'Œ:Õ\«-kÿÓh/“[H(lèµ›ºïùcdá5uߤ~ðómÕ¯‡Z$³8i„’ ­D`J]›¯½$™â4A÷°TŸÕncý§Ý\ÇCÈø·H7ñÈ=(ú²ºÆ,¹XÜ_!™G"6.NQAmÒúŒp¶º»kÌoúróQ‘TïèÕ¯dv9’/ž,s$’ Ãr¤©´~¸-(×q~z.æêð»žæ8w'ÞFHÚŽþ £š¹nh['[Õƒ ô¯#š0ÃadçšEcZôìììðœ%h,Ñ3hµ Sû­ÿl ¼òrÞªÎ:oŽ ÞÏ;Ã;âç—PÀn Äš‘ÔFw’[ÆcÌŠ^Þ…Í|çú·ÑÙ²Èèâ;Tþd—Ž—ý4Í£y´Éâ`°ÖæçG¢ó˱<šUó£O£[ÿ*õ?6%:Æfp€¾ÿ‡Ïã^êujvùˆ‘ÿå´Hr¯ŸÔ°ä»-GV4¾»^“æŽ Wßy›×x+"ƒÓ¸ÐKwœÔ¢7ÑMTÒø‹ÓêøÌ²ÿ}T|`mX¨ve^Ì`tÿ±Š÷Äcÿ_Ú@àPvØÇØüˆË«‰àK÷”²Ï&ï\¥~fÚɽW»28bLYw›  2éz|m~KÛ¿¸^Ž2oã;Í2ÈàKCÀ«f˜žwËCD ¶ówÍßh12“3+§_¸»ƒ-»×¢æx߸5Œ‚g%Ÿbù˜0Á˺ÖÚM¥?«n›𲩺.þò|ÜhÞ´@{ ÆåãâÅ]ûmÅH^[`¡ÁnÌÛ3ô‹ÙßMçLíŽUx€÷z|òWÄî:Tð4¢fÈ÷ MØÀhüÓ‡è }Ž.Ø€É8Ú€ð¦ Íðª ëÉr "ÞÞÒ… ð56Ÿdu"ôûN¸ÍwÑ(‡>P]ÿ ØÜ\äñt£}ZVÑž81-E*8G‘BÄÁªÞµDŽ*!ÜM#wNVß×|²9GƒÓü¢ððjgÕ#;å!/Bƒ"]öµ§ØÚ“ rÑI2ýùz³"­WqÖõýú_鬧 vî¹> ú>šfš`½Ü¼i:k[Ín≈¡¬ wNÓzÁÖß=2‰H<Âà6¶Ø»;#ÿgMbsÏeú!è:‰½îjÍî)Ózž—ù?=d+Ö¥~.!ZÚë@·‹‹ ÞTàœ!^=ÊYrÊ`Ý|.Ä€Ú–§ž_1?²;1tšÂ¸qÆ0{TÍHªêjÅm†»íu¼n}hA˜½EüÇšÛ—©àGÒ Þדõüµ}ú!õ`„zOµbmNÅ4•·Q‡Ml]ëÁÙŠ?ñ.¼øcÚ6<ã{_·+ ª3üº®Â7ññ:5gù°Æ6½°4ws4JeÊ)4Gì ¦Gž üÊbeãÖ¿ä+ZåB34„F½Ý$.£dTçOéJòKÍÇb°i;99òØ;½0µ×U=ϱNpéÉSŽˆÆ\ªn³ep—%ÅRŠqLÚl3p}ꇂ­ÑÜ|=ÿª}缾3( ®ª жÖÎÊÜ#ŽçmKˆœ˜Ö/¢,ü(S]Q,NCÇèÐ~v¥D»aI'ƒÍQ¸ÖÎÊæÄ·Å”]¦6«µ¯Šu+¶ ’r :ÄϪ‚¿ôÒMXÖhúýéTp#Žm%ÄÓ ±b>iV8ô{V°¤>u-–µô»šu ×Tw“ 'ËžE¼½”e[™Uy€¼HÎDõXa•„¢‹^Ö*Þ«Zе?æ üާò:©!Ïñ›ðµ‚[¾Ý~]¯%ÚÁÊ3`h¡2u6$Ûó{5Ý¢Hû©©‚bˆÒD†ßWM1&üUr¯lÞE•åN§tŽt4Ò\ÓWÆMeù·,‹@ ެ|àÁ#«60êü4Àê#ƒÍW0®ðuÙ‡dêÒ8'×!r ™êÝÍ37_÷€„ÅÔcôÁ}D‚ÍÔôý »LNóµprÞ`Y·x.òçy‰]:-Éã`OÛeËÈj¬tq¯Hy “ì»3}¾ê5¶6U¿Eþ¿É‹Ä1òl1t¨³>ÊkzUì‡ä·W*P˦=òã¸Ë($:¼$çÏß,]›Ý=A`ðP¶ŠÜ0”A.¡€ßY®ÏH¯£i¸/Z¾@õøµ5Žïë²¼“æS!ÞÙ{·rÜ-v˽sÕËÇos‹w™² :§‰Â'%ñÄÉ8d޲Žó†èçwêæù•‘v %ŸÊ´ €ªÃȘÁ”m5U§>5ës|wTÆ ñ6"äÎ>K6Ÿ<Èï$_ôs–+¸=¿‡’*ÿÁ‹Ãõþ ‡þMîP§m?íŒ ?l”á˜-Êi9s)j=9k«ÄLâÈà¿õó=Ð1Vgȃ¢ÁµŠg¶­gÞÊs§<ãÉ´ëëÚnÿµØÜÔx\£åÕ¾ß#º¿ßín~[[Èt…áe-Îøoуáÿ©ý(CÑ޺ђ×G…Þ¬°W{ö¬ú©ÏM 9<¿ûÑ,íõ¨³˜U®ß>Õ t¦æ=Ræyk6ã—t½:™Q¿JýN«Ä÷äࢶ2(—5ÍÖå‘PO`êY}q¦}þm3)|ûÚ.`¼l.À ðÅœ Ɍӷ{·mÞ'äw×?þJ$vÜ‚p¼"—¶ïY±‰u,wÀøv³¼ÿáˆù6ǃ_r<£Aÿ–¡A)‚y*®3!Ïc®›ÖW)ßèZs'+e#3⺜ ‘UÈ4¾VÑÔ¨W\É"j šBR_€­l¶ŽÈ(·J‘ß°ÕX)3¦WùÂsÜ]æàf»ïÆO|Ì3”t¦Ï’¡Ñ!µêqyZ䌮ýŸe[|¹§™JˆŒ*B M©Î:°ø=:–ãÜ<Ûõiëcƒö`„‚î–FŽÎ™MdQ´XÜ&(?a^ÖTËÈÙ ¾€&Å}ßP~ç»q‘«Ò@1«ÿWÎ!ÕêeØÜK?ÐéþENçË{t¬²ÜÏ•±+[6úY HuqXK&-ÿŸ#†8ïé< wYŒ@uAîµÛ¹y§æÐzsºã[mO›“3ï¨è‘LÄñ>ήá‚r0™ û¨Ñ1 +O«åPS†'H>Ü=q->ÝÑ  nwP…çÞu"9úÒ²?޾*jÕ¥^—.%×8g?l©V`#ÌÔ¾›xZ¿¨¥«ÿhq"ùäLaË¿K·[½ú~*óÒ²3Ž® ½É,ÞØä«[PÿSRÍjxήPdÑ\fOFÔG›WÆ-N¨<\)¸€LâJ@•¢¸v5[Ü6?¶^èºy›%àä8…š—§g2[^Ùš•ç¶¹ÊÇ4uÜž]Sç4õJΈš­Q}Kñ¨8«D›•úÜ ìr^F±Ä |à¿:»)–Ȥ E‰wNNÝô‰ŸzrÄjûæ„B:zƒÓïÑŒp8Ù<òW|-ÂÕrÕó Þ^®ë !t¥ØÚvY(õkÃ^²Ë9ø£è«"®S­sÕò3á:YJ”ïœÓ\ñ7:ïl²k§q±.°Þö—kmÖΫ¹%þßCÓÉšÃO Ë¢ðwÏ¢ç÷ï¢X7Ðø…J>Wv´SÈÍ=³[¾gÝýè³S¨«Â–™.›ÅB—ææ±’Q®õW­ÁüÖœ/'€'O!ˆúËþ©t=ã;GÖ¬‡§…Ó6€ög"c$Ï[<ÚÈQÒÖ%)©q![N (Òýq÷ØüòšfçBûî!mJ1i´rEk¸Â Úðà=ì1Ëî/Ðtý6ºéã)zÈCèj/'Z= _ÐVÖ t¬Éº_]É‘Xž¦1£7ë&Ë|Nu9=Ú®œBZ;—Qq\gwªÔ´y#.æÂŽ¢„³ˆ`ýíĪS^˜ZBG;€ånHbcy‹¯w1Ä¿™Ðùôxk`_ͱ—,OzT…QÁq²÷zÈøŠó“asê%t‘¬yx‡(ŒyºDúæÐøÔBSI˜Ÿ)Á©a&Zsª+¦óûxª¾Þ`¥Xëm¹žƒ_åÝØ~óòÅod–÷ÊÏe6ßí4æØ¿„È ôöüvÁ=Íé¬à5ú–zù»ÃϲVÆVr"ÒÞ›õp×ßKæ¹p?JãÃ2úY~>ù§òÑŸ.Æn=m’&÷‚ÜG|Hôõ@o4Û—œ¹àEêí¦ðâøpÂTjÛzÎÈõÎv<:—êÒ}÷>¬j]Rõ;€×…› ë_·{ý¾ÏÙ÷ç¤7Û†YçÅü$B/õq÷¿;—6ž¸‚g‹êÛ]ê²6‘áþwµpüžOžçê§E>Ô9M„@²p)0Áq·%ðsø ãW2rå;:«cÀ*nÍ·ÁxEp±š|N:~ãþhœ½£$½æ›E\"ðÉZSônÌûz"W“£Ç5’;…‘Í£q0ûç•Sž$qÞ†å¡D‰¡™4®›U ÿ‘¶Þã¶>Ô¥ÎÆ]hðx¶Ìct6þzfÐÝ6ò’ürÞšÕç9ôTdmMûC^w™Ž,ß‚ØýôÜ7$Úò®G„ì §“Ùm]2•úoÆD¡†x¡Ý—êsÒè`®[\ݘǚW"K“±94qí«.0åáz÷ê ÇSö¼“\ÇmO_{žcûW’µ`OP÷%œ`ëíííé)’­&­*]Ž*£ÙGÄÌq·!***)))šl¥Ð`Êk_£ƒ9j+ŸA)(ô¿ÁÃÓÖÚjp|¦%7ë–±5€£ta#16%Ž(ñÂRÁÌL#Жéx«;Ñx!+å‹s¢ßìÇEhz,z¨!–„ëçRöæï00†àù?ëšROE`uß.z2¯à&¹”èÙŒ+øþl÷¬gŒ håwµåx`üÕÅ´âˆÂæ‡H¢î.ÚU¢|ø?†eT•[‡gýóICõ­.XÚ<~VöˆÂ3‡Õ˜L!{ÁËá…Öû…~û¶‹ ß¼À®²µJ”ÓÁt³·Ç£eeÒ^Lüùë‡7?ÏñãkÿvqÞ$$¹Sƹ$¾®~Í ¦A>£9ñÿŵ–F‹9ÃK½ sás èİåjcien<<°Š#‡j—µx16}“þQÇ*P±üÿTùh|(‹¦Î"U ¾»ò½œðÛ:ü¡Í¢çê+YÃøF R(Á”HØÿP“|g5ø pQ£!lêzÔQ³6šÞîS=%ó}ý)®ãJøsµ2‡Ï³KÓRîü’»õ]0ƒx܃ ‰>§N˜ÿGdI Vea—‘µù‹òWŸ>ÀXBúa žôÄmtذ`œó I6UZ0U`ðTÝÏßCÓÀß—aKù? ÛØb¡[ 24ª=›èõ-ƒ²ä.XGF²"žéÖ#ÅhDnjh{"…ôÌýŸvaCpx>rÉh›ÑUÚ‘þìe[«©œhýªØñ-šû±xzE—|»S[åí_“ÃÈ å¤ÒRz½ÿ½ºø8O‹wI›„áæ¯z·ë¼àôóÃ;QÜ™+rW3˜ý×®—ÿñïYÑ[º¦úC1 aŸáTú²æò8§ßÇ}§ÓßZt©àwðã£ý?]ÃÒHgŒ¯ïÌ>Š;B¢hÿ–w÷ô•x»D°:jü±Ÿá••­¡ã„UãUžÛÚmÉ P©¸§¦EßBµ¦þC#ÏܧL#…;©JƒÐ·9ŲìŒUIEæz«(p¦·dµr?½ö8N Ÿäæäê%Û"š¥?¿ªŽbåª,n+}oË¿ÎúÖ–ÉÄÀÊÕ?YèœMµä\{hÈSS"ãÝéPö‹ð l6˜ã¹Câ‚‚‚ÞñŽÒªÀRªZ­kѤ¥Ý’ê"Ò˜º2õ„?æJ½Ì C:a£…Ýç_¡À’WÕÖ¢îðÞ§îÈ2€kâ}wÒÅo0)ÕÕäLêóDjêùGIý™\”‚+Coî•ôñ¼?ËËD´¸ìL´M8ãYrÞ=¥5Ö¹¼Å]xt¤¸–=yèy½Á¢»âÂ!F÷{Ì€Æú6åkV×_¯„s»jJÉOPÌõù÷'þ]ìu›‡¦´¦mz9~&4²U¥3ªüsV6'^LmØÇ51—Ò>ºõ ‡½÷ki¶5ë×+ć¦cžóŽ~WWAa\›ñqS‘Ÿ¬ ›\ײA!€7ªž×õ}ãQi5•Û×rr-}BÙh§Ûh½Õ¹ÛhÒ2wÚ¨š£Ø”y¶«"Ű˜Ÿ/DG–o·Ò8 Žg£<Ï÷1B~»qæêë ›ýÏ÷Ž/§¶Ù:ò} ŽDôº'”C/jVÃ÷ßÊûmj‹(%#Ò+ö!vðªCÞØóZÕHc«|' çQnhÝE7(³÷É~  ´ÇŽÒñžŸ~ÁÌÁwÕc`þ¯Öî\£©ÁÜþ3©ugóÇësØÞó§ý¢,¿¨]ÿèk˜<Ûk·‘wW!˜DîwP{k×u0…Þ}å>vÝLÞøÆ—BññôªŠûÆš~ßñ…UH5¼E›@Ò¶ ›òÕá5gl^çS-%ìö§Sz]yk·Ù•2éºÃ-oßj÷ë=ªÌõ¡ÜC|’ÚžE[´ÞéӶϱ·F>¡s7=ži_°ÞD —¼¿Ž9¤üæSÒ=%î6h‹A§ƒŽ^î¤%›*‡ph›*œ*ÏþVαìá.—¿ óÓÍ+¯*¾ü_qBkI¿`õ÷‡8YŒ3¸S§qÓèîÐÝ¥ 25(¼"?X«îç²?ÇÑÖœ²/œ?^}¶bçlõ< >èïÂQÜ}Þ^Ìôq­ùtã¯OåÙ{š}nMl m8¾Œ=_¶4<ÝÔt½»Ý<ï“ölNnn4z÷¬oLî,Ú^º¹%}<2gPíÅ’OÇô×£¯ZÇûë‹a拎ã¾ ê Í Vú¹³M·¼4B^(Àcð©ŒI¢ë¿ë:ûf@h›d ¾KDûŠë¨ì)ðPPêlUŸFÉýö==+©ÍE»z¦7äùjÞë+Î mÝ"ñÍ˳kh¿(XF‹Ï&ÿ«Ðç>õ–Û=ï@ûô5q€^K×"³€kúì)nõúp,«Åçýô‡5àc~ì#}þs¾þ7ETì…¾^û´ºJ —R2›µÊ©šäÿ ªÆ™!öÐ6VÜÆvþo‹éúÅjëâ`ÚÓªSÝ¢„ÃA]L<2lnÐÓÑwæ, üßáý4øÿ|>íïÚévx!Ø•3È¥oÞ;°ûìbÉr_H~º­]ý9}/JoȪš¾¦ûÞÏÒ£õ®s<Ö´r&óZäßÚn¹jD˜¿eý}|§“q1Ë>¨ÞEWHÀ[g€‰ ‹C ÙH:¦KP ¦iH;9¼Ö7@y’HH([[º;ÝpPȰ}ø‹6>]å9I6ûHF(ì£ý«zœÞ´]ϼ§9S6‚0WCÍ-›mööÝ“€§Ï{µûÊγæÍ·%Øû§wN-¬;¢ê=ûš.#kËoBïw*(ËMeqqq\QàöIUÜTFïµüߟDD’ FðÔ—£þ;î„E$/ÿß?ü‹¯Ç›Ë¡0í¾ ÆŸ'’­n«C’óe¶/ž:.;T…/ƒÏnl'Ñ‘Ÿ;ð¨d%‹µÿeAîg"üß]„À(?þ×îËW“80°¢˜%•žZ: :0 Aè¯6m^òÅ‚ÛsÏfš3¦lü´JÚJL?ª¸;w[˜f»AÌÏšŠ;Ã…I/ºúš¢ÔM.uéO oJ?6VÊÉÀ{n6jê« €HÀoÒ‡×÷?"Ž' Ø@"µµ}±P½Š³!fµ+ö¨”‚tnaÿrRõvÄS˜Z‘«@Æ?æ»?B\Éþ¨ºh©åÏ»ù,P¥q=A¥àŠS®Ú¦À²R¾ØÆóã~Ç›IÑÇ÷#s^^335CîÌŃïg x ”åwaiDÁÄêâ°©vÀ«!* ‘‘E^0ÙE@Щa-ôÙK0]ñ©à¼Äéj„°;k*ô9¹g×ã·‡I‡‹´É¯ºèï‹ù8²åDR³ˆMßÒrMé„ÔÛòæŽùÚÎ(¨_L¦¯±¬×á™<Ó;›ñLó~è çøleÉ^„2‚ßsÏg[Öª”öó¥°B´<-rÿâ…ö,fq+À®fçp»ïöߨ°ýyúUŠAZÉWÖJæäûÙ°AZHm¼²ya_`öó¨ZoÇR—Ei*XØWÞýþ­Õïgþ<ŠÞç¬\ãPÛáO›-”ë»)Ü,þ¶3ýåñüý·SKè WSU"M EÄ~zÝ µ_À ü(öPÜl“åíËhRgå/¤ÑTThºÊvØ@sŸû©5i~l¼ls{FX|ý*zXÂ2l8ìEï“kt‰yX¿|ˆ1òeÌ9hžu—ìû¯]øw¿šžVšÃÆu£9«ìs8ö.+ÿáÚê«NJ ƒ+f~X8¶Þƒæ|pª ~X/:8[— b[•yˆŽrØÔG§ÿu¥•÷޳!€”¶‡$¾²H˜3‹ ð €3‘e8TòumPÀ?A±Dôo×ÞÁFé½]0Hq8©FÀìcAµ×Ëä—:ñ4à9²¦Ëéò sºš"šu+7ÿ`Í$´÷<·®³ÌºÑ1e;ÌUôFäù± 3ðöyj=¾öS×5…IüØú,ƒåXþÅT w J˜:Àɸ5s¶>’‰ÈˆÚh‡-¢L5M®¯ç´²NM_>†Šmô³0¼#Ùî•Ø>Ýÿô¾%ðë„®#ñp¨ÞùÖM??‹’Fbš¤·¡ì’ªfˆýËg|„YlEݤ)ÜN*†+ë(ú ô´UW„™iÀ…ÙžV–a(ZÞZî?†O—Ùš`]ñ ÷.2s®—œþï¸ÉŒØòˆ±8«¶OÏÞ¬«0˜¥)•uîiíd§³ž£‹¢\(-ÞVYz…ƒ”iþV„ã«§“…ëUjÏÞ¡wü:ljü_=¬ ÿüð‚üïVÂÿý±øD‹Óz'£ÉÃ¥€‡´„‚xµ¨A ÁWÂ+.£ ^èJ=($¢Ùc‹–PQðÿaàãßÁóJ\Àïd xøðX©J`•AíɈ¡˜. Y‚nœ‘ôX*®÷“ —F‰VþN<³ü=6ž¼“Þú”,õ›àgËì&TßßC³ŒeÿÝB¤í…߃Äó<ñÄž‘^¹¯ã奧¦š’ãFMŒ¯.ÆÞZõrÒRb÷ vŽ“U'‚ɺa½]÷]Vø¾Š*sÅü/-ë.IŸ—Ñ9ÃGX•¥xŸ¨g'`WÞêý½TV¥Hú²f¶dø‚ HvüuCHðn¾OC8Ûi8ÑVò¤lëíé§ô }*wÙBy¥:‰='ÜÔ]eœ Ý ”}òtÏkùùÐúT¿×yH&\–ü_¢_©]½'D‘$Ø‘\ÑÓl^;âIa]]¨AŠÂ{Ÿ?¤P Á–B‘þ.® @©—ðÿÙuÉd¹¼ƒ6‘êÂSÒïŠÁs‡ïšÎêxë‡X±J_ûŸÚà‘}¾Þ“¶úEíp'H=Ùº¬»§D%UP¸zVüØ4ýF. •úˆo–æIœƒ1š¼<ùP1vÁÆVÏæT(ŸÂs†"È@,ý[#éî+W§RZÌn–ýS]W’÷òrýž­*ß,ÀÞ}¨Æ†¸„Û  Ô·òxeh|@Z¿ô¤·}»lj9q7¦5"’¢>jZSr h‰ÍzÙ‰Yã-AÖÙ»¾nj}Y%ëÇ~¨†è´ØAû`¿ùãvV{ÁASH¤+)”¼Z>÷îLZ íu§ÙÙÐ}àë®IB¬õQxU'zʽæ[LâŒúµK<ã(;5”çJ½¯¯'ó¼çiˆ@™* 2\3ò„اի«âg®¡Ó!U”É- œõ•´ µÍ–Y=wéHªäè©ù¤”õø9DLÉ'Øù²Ú&¯—¿àK§\rÎuÀhmžèÒ«™Wÿ XÏÀtò–m¨¨ªÎo_ýé æ4·8¯«›0šØ ÅáÇu`#OüøMÉ™æÍÒfÝ}еÑT!§´½WŸÏ0Ȥ‚„¹¼0~ªøòõy?QýÁÝ{ØÂž°ôòƽß(ØRÆìsW½?Qù¨È…\¨ÑWx®!)´ÒõN ¬ Ý€„:mÆi–y¨Îí®]isØRNßXi_낦öÅlÍf}º~3óÅ„`6þæQgÍÑŽ`ÜÁ÷ƒz®qËcE÷h›¹„‡8D’]Ð šiµ\ÀzyWa ['ÄÕ~j¸€€T}~þµÜ4ÀfTœ ì(. Ø 1 ‘³¤qŠó²™Ÿ%Ç ËŒ,ùvÏϺÄÖ¿?û»´Ê¡ 7å-½Šb’–dáßq»8îúûû{ÓfÿüTNã!‰jëü釚Ÿ¼Ü–yX¦û…ÉïÛÓööW"Õ†Œ¦•uÉljК!™’ô™ÂmÑxÕ‘Ú¼/kÛÊÀË¢.ÔùÃmûrf+éÑŒ0õâ÷<ï%1à;V¼`z‡±ìv€Ê–Jˤšªá¶¨‘ÊÝÕ¾ðµóÑÔ[µçˆ³å tì‹ Uuæ¯F ¨V=i `œý6æux誢`L–ÆÎÏI8jÕµü‹‹í¹J~ƒÛðyCI`@]€á°³lãfµ[¥CÖíÁìbŸŒK¿©¼ƒ 5ˆÎÍÒÅ×¾| *ÛÂh]}nb(ކ ],2“fæ!_x{cm«`íjºožÑšI>î^’liäš´è¨Rã´ ¹^wÀÁè¡)miüáÜ¡ÊW¹TÕ÷;E-fÏüËnn7.Hze黪ø`çÑL Ct¾‘ýÿ;ìv»˜ ”ÍÏa€Õg}pÖ¼ÞºBÎùÛ8ëÀ'áÆEüæþ¶õ, (¸±±‘ÛûŽs¹š»ÉHƒþoyfPT/¯ßÓuØÈ©ßý¾º„* `ì Äcu.Ïù‡ÿ…ãns/‰}ÏÓf^j绯ªÿóÃcŽ ?¿ßíîªÿëMÔËçîõ’üwu}lÃwèµ&ŽL,þ²ò¬ÐüKÎÊòò“§uãÛÏoª]OB›—µêuåmñÞÝ뺎«‹êL#RRý.ºZƒ‰¤ ­‡ŽX¬§««°J. f~’ÏöªþÜ ÛÖú]'5ˆÒò“ëë뿻Ý:&¡Íë'nFâ¸8441kùжIÿªLjw¶–ã âˆÿ1íÕµGeù çGC6Þkñ=]¥ÃJ™SÏ‹}×ý‰ªµPç X(ÍåÂÙ¢Þ°°ÕÝkGÑV‚Iÿ$닃žÕ‰´ÜÏzd!=ÈKƒký]¨K½Í¼óýj­¥¥¥æô«¦› ñãCÞPAõrM³lÝ.wC/ÕYµK[/U¨sÕ¬¬OÉ!»Š’ë‹kKEª½°aÞÔÁkõH‡zcâ LÒT\ùåð‘*+NªÁøö玷¿œª’ätj¯\PíÉ2ÑË ÍùVGÀøæ¤÷уŸSÿ ´gÅáBNº¨Ë.0çüà÷²§Ëû3ï²DÕõí‘úõ¼#í’Jý¾ÿÚöi]ñ3Su~5/×÷úyªÐôãÐ>÷ó-nèl¢—³¯$—rVykžP@Õñ'÷PæoÝÍjXÌä± 7búë:†P×ëÕN\ßÇM —Ї«“‹÷ãͺG>»»Ð»õû޽ÿÛó[3páý£ãdQQy‹kSðµEÈïåf™Ù¾çù=+,lÈô€`¦ƒÁOù¿ÈlfV,au‘*WYîÝu;޵´WâÛ2â#¿…¤¯(ûKõãÍÞ¸H©w%lüñ\÷~ßþpœrNÕ÷¾'×ÿuJèí´êsßÇ»»ýÇyi·ÏÃØj‹ýFçûñCÔé)¥ÿËÇîTÚ €"M@¥=âdŒ!sqöµÖl"B5dS‹bš³dV5gº»ÜyT7 x‚ú¤R„®áFä6ë³¢þy0‘µVÞýôv}že>åç©=u»ð‹9¤¦§Bï³'ë„ÔžêàT¤‹êÿá«Ãv;ÐÁKÍaY¦—ë1!~ÉãÓwCÍQ¢ÎÖV^R±ûà w–¹8‘–¿ðÝ0ÒᙟE}ý®ñ2öé­!k÷úÀãíylSð4 Faª#Ï÷sùz3î¾g²m±’ßÿãí‹Ù™>CGõÇ¡­\ã_}û-$gÃ÷w'DU– š×”âå‰ÿÔç½Ý÷éÍ¥^·õÇúÛcj×Ë›½ѦØ????9aŠ_ûÇkz^¯^¢ç§>=lD·7»<Ÿï³«!z±ž1û€þÒÓ¼Ÿö[÷¶“Ø}u·ŸU fC2˜Ç+×/®Žuz§„:2•šÖÚ¶U{1OÞžIãôùýJV/{¼ooNUïŸÂÒ¦üo™í?®nγ¸ ‘ zwê/‘h>«S¯B?ófw‚±ðróñPåÔ§ô³wßý»?ŸŸqôËqiúBŸöÝe'Â~C»¸S›oQH"î¸NxšO[ƒ¢7u´A¦ôxHÒ Ye¯)•ñòªY¡«³‰Õk'Ü?Ã-ïçûÛòòî÷Û O^háå›R.é{¸Òûl;Œ C²‘à5Ói2Q~Îã 0]~Þúžê·Èíêw–o³ÑªºÎê]bn?<$ÁlÑÙ ~O•ñO¢Ü@`»{éX4Uƒ »ÀÅÃîî–Ö§>¸´½€26Àfêÿ@‡ÞÛŽž!wÜ‚ÿ×NúůžÏŸÿ ¾6r!öYá?² ÌŽÄ믣þÀþ:DN> àê!$$Kê-( ¬®G:vmòìñ\v¢£··77 É 3q€¡ÂWÿ¿O4l¸ƒB|܌چŒ•àÌ9[[¨ÃõƒPÃú- +‰²jƒû·|Šì8¼+Ây~~¼7¯8uù½óvÕcÀ£qIa†D ’MÖA¼î-Kp'ÓdÓ‚;(ùRPóA’e.lôF•Ï£Áœ0Jý¨ì .ß²úsù‹T-|§Ó«7´ËÚ©¤ùΫÃ=«|è'²„d bœ‘C»íü‡r’4®jØh"Å" öb AÁä÷‰*(ZpÊ£ùª5«ÚÎO¦6¿ÑbMç¼·æ¤&‚›Ýy’»ÆMD»ÊþEÝ—è½bþãph§×‚ºÑ_yØc·_—Y±EÎè3mkƒ`ÝŠUE]$|q¤ÎàøéþÇA¤^ "ÌýâÐD%6r{—®.¬*QÑ…Æi0ó½ÓÕG¾›ÉDAºU' ­r»35¾ºéã%û”DKv~mN¨G¢²nrœ qûû6ݾ.*Ûa\–Ãúm }Y¼¢ŸV‡wáÄÇœ#ãzqŒ Sð»Æ–N¯Cq“û—fÕî&5»Ž63=fÈ</¤ÉG×D¾ÁHb™íCY÷Ö¾„¿“ÄZ‡¼këëë››=þŸý˜†„`¸R£×åõx±>ñÿ±ïNÑ•}ߺèŠmÛvÅFŶm'[Ûv*¶mÛvR±íäæ÷ß{ßsν/÷ñ>ŒÖf[s¬9F×׿>09¹¿oÔyýøøhÿìäÆÅf€ô°ëâꪦ²xqqÑÚrôè×ÿMM}éwΖ«›/Àcj¡¤,¦Úý~<÷ôïÖxóû)D˨ϔ«UOm‚qgCºqe5]A ÒǸ^mÉT}šÞ¶Ù']^]M÷ øOÏ‹†üvQ\¤’B(LõÏL÷ZqEs²°Atm$€©æõ>ò>BÈÏ‚æ® g®,E[ë8uë^4 ýh~z‰¿ÖtÄ%кÝ~ý颚²Ä[ü¥_k¸’ÃjŽ„ÍÑÇ+-´!ý=—›ØV5GŽaÉ1~›Óñ³ïoõ¥Oüõú]ê‡xzÅúOŒ‘t!0?®)ä¯.7y¥›.h’z†&,V·¦‘•:k*îgÐi¨±¶q;^!'(hû;“ì`¿¿€õ¸§EîAWx*¥¦½X;9¿  ïÊÇàC3ñA§rïá%ÛU®wÀO#Wv;#Û®Ø6.•¶«¬q†Ê×­üÂÓÒe¨ˆiL\ÖêDP¸´Õs–Å­‚x¤² æpåŸâ50ßÙˆX9ñ+¨ö7ж<üu {ÐØ§Ü øgȱ †¿\X  ?ÍC‚ù­N’?†+=›yÊɧ'×£K`Àvä£ XÄÝ0à(ɉ~GÏ÷5¦ñ Ðcš óRüQèÙþx-rÿHéîÖ+¥áVî¾h~o×Û6¶Éܸíde©î/MyjÂñ¬×ÀÚÉǃ_Ä~jP/ÕL5âƇQ¤¤€{?¸ºêç@KP4•}Q'ëäOI<Ø$0ìü³^»âØÉ¯tÐëQ5„L³6@Qj«n7RÛW­;YÊY™ž­Sõí³ Â“Óò‰SXñG3ªí*iÑËõ§0dnµä…)’jÁ>‹ZÌ’^Í: ÑwE¥nêø¬C»Õ¬6ÚW©ƒ8•»2»2×PÊ]Ì™ÜS¸|î¬üQ.u$Ñ5™²yd›#[ìap&XrKÐ#¢ÅÜtgVµ»Ø~ÂX~8{»ùc=¤ØäÈÀˆ©9cÁh¼{—R_êʨ]«Õ~s ¨¦N…<`Úùr'³œÉųm}í#ò£&œ¨×W`4¹›j"3ò‡Áf!}¥zé­Ç¥[é-ŽdãahbÈÏEnÃìvÜGS/Ôë£ùn¹® CýŽŽ¡|Îí*V$NM¹Ë?6çý»wHU¨¥ñÓ ãÔ9sÓÔŽo°¨EOÇ·´bì%~¹´L¹ïžÕ;!û=Ê€šy?" Ê¾¨^ ò¶bzª\]Ÿ©£´êd)ùäÚ%¤LkDŒ/âœ÷ušV­Sp”o¹yz/9¤€Ôÿ̆/c¥†Ø·‰ußð¼•}ÓáÁMïoÉßÅgÆPŸôx ìÄ óÛÞÞþv&€Íˆø÷úÅÆÁ7R€ôµ+o[ÕèŽwB¡ "®(´Äi.…÷ôD åy„ì¥Ç5¶ïþÞo§X@ñHX›×¬ïÙ»CýäóUQ­º*~j=µöÔ´>ü}¤ÐÆ7íRw ‡ùÉ—0*4ì-¸Ûö3 ZÖ|"‘òäSø¬]N> 8R~ÖÓ˜ãÍVôEò„+)Uy;ÏI\&Å\Ý˳goUþ¦Ç«óVöM¾Õ~‚ÄŠƒ =˜A™™.2ן¬XÒ Áÿýïʽý.¿ž¢¢Í¹Ö'úy€490p†%þÏxüÃ:hX¡ïOÂñ¬T¾Á6¯ÜnxsÏ'^©f¯Ð„(¬´+_~xÁÛ©ó5ñ4g§ª¾ÔdÛÒ€\ÿk&S£02nŠ×c ŒiAñÍÉÃ"ÆïQ™ !É Ì“• ÌBŒ–uRšO±èôœ«®Íו1».UѬ0ü„‰ QËØÙd8`˳ok—OdŒÿÛ’ÿ†¼Ü?®¯‡"ìO>B !+Îì9žÅwéÚÏl½'¬§ ´€‘Õ—‡žìuOÇôj=r,Qhª´´*â/û=ë§7ÓhM’^§Myð@%¼Äøé<pÙ5Uš¯{æw=Ö'˺ßì[!6œ×'+CÎÐ×é<]3–.‘.&ãwy)ÎJás¶ú§-"ébè`õ¶|ÙÈ…ÂN·û6§Ë–B–Žsn7o7=4 Ø:/—¶_)-;/—°¬Ø›ñ«ÔÏ)ð×m4ƒú½+p Œ !úÌQ6=Ö-ñÂúià š:¯¼{?ëy‘ÇÐ"$AÀ‚Ç)’9—¯¼sØï±ñÇÖl4W)½+ïýkz»¡6/Uw->Ž´…vÂfÉ_–ϬBš²u ~e(tÎÖŠÒ‡Ž úÉævYg9®MÚx”z´ÈO²˜\†3Ǥ«ûŒa‡”äl4 aœó¯3ÛÍrÊÌÎG&„â˜e°Ž< ÅÛp¼ÉñÌ.É.ëwgõ[ÕÑrãi6¶–|Âåå,o´ÄH?ÔüFo½ÿwõ@p¹¸ëZþlÀêµâÀ¸âÇAùöë͘¨Ë3°òÓl4¾ÊÏ•fä3¾âí¨­¼§Õ•”MltN†y¡ÓÀ¢zœŠß"vEö®Ø—è¢÷mTb¾häiÞ× ´i_S¿E8:·œ˜ÄÐ÷ƒá¡´Æåàæ×ÚXZQÃûßS5Aæì¡™ÂÚÙ_mB•W#±q×+Ô‹H±†ÇOß“›æ<Û éóàŒÎfL°@!û”êÄv.¹tÕºÇ~j3þýÕÖQ^ëö†«#TñŠbwû8=¸‚ïð_ªŒ÷üê»äC°ì-*ïÚ>ß´ƒãù[ö¥V{[ÉŽvÔDp,'n×kžx÷¦}ÔXÙM{Ðæüà´¡Iû²2ëù'mÓ%&L¤|ôd{Ì«³žïLjN·ÅwXô·h¶—|¹þ¨BµiuªÝ,zãz|ß^¹Ä(ç¯¥èœÆƒÉµˆ¹œä‚®ƒ_Wÿ°z_]+“a¯Ko1$&œ±Û×K ›—›Œ÷îÞÓP±z:ϲyE<›NF÷­?³éTW¦û[íìÆ ?SÐ>€N«§ÈeÉz™çæ7-¦5ãÕ5§Q›8 ¸g6Ï µi=Å1—éÈ®¥ˆÚ²µÞh本¼·*ÎŽÈQúÉù/ ”Ó$HÝ…– ,C>´24ש©ú¦‹¥W.ƒØ5½-µÉ­Àkçlm6²y© œ‡üc£(†þ'-¦OUÿûÏj¬cãËfô xíp‘ÇÀ4ŠÊ>SiPñˆ¨¡^´úuGH`àqæsAÿóGmt$ÄTJ¶µÝ߈ÿiNŒÿšÉžõS,UhúVu>„Ð}¿gý2ie5Þœvïu1`¶ºÊœ‡oÛºÝÎä(¢OW \ìþ<újËyÌÝš£ò¾¤ÛÿŽjÅOQÓüÙè:åÿêø–à†ãBôÝUá ¿©S®®Œd¹Aï~Rк$÷m¥Yµ½Ó nY®«ZuøÇ6"ôSòRö<7ßæÚEùêþÒ¦¤aˆYÅ»¢hLiÒš‰Ê?‹~•ì‘í}öÒ½ÙÔF ¯"] ­…€]É=CzQ¸¹¼¹É@‹²Þ>÷Ô¶r‰ÇÍctP¯‰µôÊ]ÙŒ²øâü}ÎdÞàC:.í\S‰~)rÔòÇ6¾òœzDñ ¼Ö“ /ˆ ùWøÂŨªVY7m Ul(4«ˆã‹ž—|[Uùf:ò!QzÂÆ)·Ã|DQ¥Úì\¢ çɆ"#À⿇è¹_ÛÃÓÔuSÕ£M–“JaÖŸE.¼šæÍ6é ÙpÖæ@ ŠFY;¸q–å¸MŸç?¡§'hܰJÉï«m dåüãAŽH@yÚÝu|0GËüöJaSUYå1ƒƒ$ʈU„`èsꛋ›¹ÛXWø¿3óV`\Sã•%“Õ•çzÎÓÁ”(hróŽ=$À È?ÌÐ,ÆðF ŒæH—1üð§Ì޳=Ç#½Œ'߯°¢fõç*"4+ó‡˜*oÿ´/·wƒp7z/\ŸRá\Bµ2(!'É;\yºò–çWùúú¬‡ÁOŒ.¹(š]ùÊû;þ,Õ Ü¢oq„kÝ0è3™Û×¼åOì,ÑÌy¯ÙíË.›ƒÏ,¼ÙµW¢~–e@A_'å„NX÷ϰ|`kÿB ~‹1UÍíá:4Hìù†M‡,²p8½¯Z¹Ü²²þ¼/­ƒö¤ÒФ ¦|Ä„¥ê³²Ø3OôŒ¥K•·v\Ððãª³âÆ±&b®À·gY=o´ X-lS£´ã›tÒIú“uÚ²7‰Ó¹r2rcªëZ-Àùu~“.Úiul ËÎ7ྭРNïáÿV~{ß±”ä£t<Ù’Ã|çÌ`-¹QêaçŸò%””«4³;÷ÑEgÚEZü|ß™ûf³ù[EAÛe|à]PÓg>XMë‘ ð<0ôM‹ý‰¯Þ(éM ë-Nÿ}A ïšI!zMØ6¼-ë…¶/5I¶(gO/2Ò¯]è©Rßvþ8ôªîºG×Ršfæ·òV®Ï½Ž!kGOecÝ8lœÖT5( ´…;<Ô~GÊXŸ¬k.—£”ïÄÉiǨáùÎÄ%[V à于U%ǺJ¸Ùsì^î’’¾†v§vИWÑ[ýôÿÊ(ÇáÞÙ2Ï™RÕ¾Bå0Þú(õH@í†ÿY&|#ÊàT» x/1!c\ „}ë÷oÿëÀj´Áúno0âéj;§€¢'ƒAwBcóœÀ±¨S ÃJØ’NÊ?KSg×××ö—|ßÕ/Õ¿ˆÊQ¿ðõÅÅ…FûwQëÂ'ܳ²¿há›úg'Úñ_6ÄÏn<ÙÍ€õá¼7ÐÕååÔÊ?eÍÝߥG|~{GGæzšï—ý­ÿ4Õ‘è;ŠY57Ä›Û!)'€û"Mñ8Ÿð!ý'NÐz@¬¡X_ñ<ïè¢û= ƒê9 ÇyUtB1dœû{"⮥ßÂúÒ³§—©çŠ$¹aúß?<º‰Ør,¶âbôëðD$àú8)¼HÚPÑÀËw`À?åÁÿª-mPëMÉï¢r‡û…Ä,ÙîŸbXù=œ“/!¼”å@!@j¼‘D,t»È‚VÆçú•ðâûÂvFoh&´dФ_~t®SÅtD<ôy†ùE 0ª! OùJÛ[mš2þÐæ›I¦@¤˜ë!]Ó†•¹vØp<°‘Úë S“¾Ð3!§t²Aô›]ôº1ÉÕ0Ë M‹\µøÚÆúshø€žªs+TÆrûË0¿Ê H¶ÕÚÅK{ϳýRÀðˆ’«–<ýòcIñVñ[Ò GР˼vrýT¡¨@Žò¿V3ò™ãÑ~•ZÇ@ÿ˜éúzö1ê²8»¦Ì yñ_5q¢yÚ³•=3ÿàרs:/x‹* ³4ƒZÅåGW @×üs@É´ÜëÌÂz7¥³ÚHÎf^ËΦ /XªIQèÑä$#'¥S¼³1ˆZácšXwá ¨jížÙ¾¨.æ ~/(í'•° £•yè8(@~:«Ë”úm¦Ä-¬$^ºùø{¤o‘™µ/…¯3¿ËÈaòtWdE @Ù‡4èðTÄh'nKÒ„&†åBR`uyñ² ÕÐX3²îÒÁf3[72ÀèÛV‹¯ÅÍŸ+&•d›aÕéS§€ž€ÇH™åì ß ÙS$!Âþ7…à”‰XÏÝ}ÕĚݩ"ÛÚÖkkógæøVSëk}ó ÖÜÉþ—ï”~»‹yÞøÁÒô«yømc™¬«Àdû-p­Ênœ}ªQ/ª©=χbÐÔ\ ™ú\£º{ßx?it TÀ½µÒ“¡ùWtþDNEÂΪh«©Î% î»Æ¯½®»ú%dƒ‚_ëFÅŸ¢òÆY¼™eݓ岲 ŸñU¦lè´y™øë ë—ÊmußÄdж扚eEÎî­=÷„»^­j_ÂÆ™÷†žuûf Õê©bÅ—ã+çFyMü¥I+õ%îñWÏíîùs785BNiê–­Ue¢Oôc±äÊ§Š™ö'gKúâe5Õ›ûÕþ±ÚögeP+HŠ­£ÔùÓƒÀ‹úè%Ä´Ÿ*MTÐ=ùï­é?+·–×ÞpËÛ:åí¥F뻨ð^O înN-Z¶_OÜmYŽOýþ·µóíÞ†“cfÝh®ÈÛWö¾ŠÑ)‡ãþ9û×.Ù«—=g‰‚_Ålµéß2£IÓ™=+éÐì{^çÿX×´Ø`Ó>Â=öÑ:üx±‘#¥ú±™³¯x1UáÛû£ýc†ÖЉÑÕü"2î×Eð’Cí«Y4uTSÆ[‘Csÿ1åò„ÇÔ­ÙhËÔéD`Žš¡JD3N¹Wiθ"ÿ€cc†Io·½÷£3§x›ii¦w»¼ÉoUr/+‡¬ò*îâìD¢äÆ·GŒW|±u™“iüÇé¤5<ºä®Í`ß/Ú™°Ú ‘Àlé» %݃ý7}¯"OÊ©K­¬ãËÙ,X˜ùVY8¨ÙC ëi[ŸÖU[}bÏ\K9KÇÖ¨Ëí›à§X˜p–[ g…¶_FC¯œ5xmåµH)þf·.ø+bë66ͺµ uªh«ŸµŸÃºÃ[j’¾uMë=Ó¿vŽ•Û+U Á‚›µ¤_¶ì|ýÎêÛ![æ²ü-!ò‡Uèòn×ÌUÍ©-’N>–&.2WŽl[/è»fçÚYÖr/2µ|÷ÚNÀæ–5ÿ|¡¼&l]6äì\DÛ†älþ½à¯R³vEbœý«7ÃÝü¸Þš8ÙØìsYÉ/G4<0F ¿5mÁUÎoŽÿY3â‚SÅsv©]%å×ã%å=7[H²iª׳ؾ0.¤Jÿ왂ÔîúÐ_ˆ®‚Ô}HX\PÊ'V0<©A€~zgâ–Ö ‹3 U rM ”Ç‹Eóöþf´x2b‘`Oç‚„;ÄáØœýS\(½ß˜ñœ‡¦ÿöhBüìÄDeÏ2÷oIªS¸gLüÕUÿ…4£$& ø×âØÿ!Á»8éõh:þ6wõ¨vçŠyç[}1”Þ[@› ;´zw,`©¾r…”Ÿ$àŸéÌ 3ëˆÿ@W}AØÎüÉ_íïÌwN ¬ÿý/òÿ>ñ¯ŠtuÜ(#Cˆ}ƒ OölÎO,Ë´& (½Cïß, >“ ™Ðãñˆù=šúâ%q.Ñ÷'/è¿%ªaûׇÛ#üLý¿gØÔþ=XÏÚbdo®³Ã×ù’¾¦ñêêjj ЂDãŸË(Ä ¥aöy\5»ÚêÔ*¥iý|÷Íl‡0¨Þ´{¦ùÞ¬£|¾ÉLÚù·„¥\¸ªX0<¸ð‚4ÜmÜ;W>ÞJ*‹zŸŸŸ#jO\bG¾OgœQÙµGù€8ÈîÃfQhk^l759èÏñímö0cæ~¥q$Ëo^º^©¶íP" 0$ä™°âaävJÔOžä_„#Z/®ÞÕœ}Ù·åA}•ŒÐ}Þ…oÞÖ\~þš£â+Éßn×$eàiã Ð篆ÔeË–-®ÛióbWl. ‰k;cûž$ŠU*®Æy×åRÚ[—Ã[‚–oEŽÊ6@wÅœ~¨‰PSv‚tm_‚Ž –Ɇ´S)±>Ë÷ct.Gép8}ã‰Us½ì}­lÚ`mÇ nä¨òðK×mõ½¹¢B¡°Pt™­æÑ|µUtö ¨çQÔúî²Ôc7ûn;CËõB›CÞ÷®’ùÑà÷"_”‰huâ—Ã4XLHqJPq#ë¿ä”– ÇÏÈZ›iOè¶¹˜è]Òõ›ãï]ŒxÓº7¿+³û?Oý/ ç€ÐU$ûΛîŠöžLÙâÃÂJí¤u[ëË. Fí«V º¢{ãC—ˆJÖ—K­ä€¾§»ÄêÅû•©&ûOŽ÷½Ó›AÇF¾Õ œÎíîæ••í߸¹ºþ³¥:ж¹±A»X¬ðÏŽÍ:÷ÍÇÇfëw.½ÊLQ²Ãájª±úÞß !º79|!{ê½¹ÛÃ'ED{´­Ä’­¢„—_»~ÿpÜàÿôûócíž ­Ÿ ÆU]â]{H#½3)Ýø?Ùùwèzqe²Ûƒô5þR‚€oòø‹x¥ñ›5”¯Sær÷}Ǩ)’ü9`eŸ"à;4’þŸËIþðÿwüÿºã Ã<þ¼Ú"T~Éÿò­FƒÇð{¿ý5]‹î¡r­ªÿ€< lú_Oø ëx—çuˆ¼œ[Gný)HÝÖ| C³¢b—‰ã*Kí9ðT›UYÕ´ììŸIw˜ì¹9 ì8õéuæØÛZ;¥® E]|¿<ªbµ¦Sþ,ãl%¦ýµ°‹#{ÉšAçQ^k¨ÛJ³u<ï~R%^ˆ’Ϩè ÍŽ=ç*’aË’–q96O5püÃuÍÌ© ã—šö\Ÿã¶Î/vð ×AºML¦˜ 4v'£'µÙ(¦»_rìä(®ƒÌ›©LÓhNFc<ÎÓ5;Z´ïo WsïOxW¯¯cë¯àg"ê”ÿX¸Þf÷¨pæÙnߟƒ?G…þ/Öù üomãþ_íäß­£¢((…c€šÉnU.áy<øGÃÐÜ1Œnx16â/ê "P9‹‰Ä“>]à=¹ TçJ1PÜ{:ç_¶'â;P!o³ÿŹ-k;ÏÖù[—·©[0ê.6cP dŽg8„ôÌOŸ9œ|Ôß„¡–l|& _ËEh?ó®MWܪ¦˜Ç|1s µ›Í·”Š#5¬©n'òÅ1ÈÐåM¡TTŒ@ÎîgwÒy†ÙªgöàxÀÍ™ÍøhÂñýWÙc–—ö*mÍeLWv€—[û°Ï*êFhÑÖN{¢iÖ•F;;ëýÌ*WßýÞ © ÔÌcå8Û̉«ŽÎ,8h§;wh†q”:Œ}­ QbˆEVQVW4ßfk+Ê…ÂÀ¸ &6µ*¼vk—ñŸщ`×­Èã¸Q⊞mzaiªVÿ4˜GA?¼çDl[¼çF^åý« ñIÊS|\ |Î…* cn-åÙ‚? ‚âvO=ûþïdÏéX¹Žû!Ñ=ý.~= Âç¸?ŽÅs|è¨Ê–gõ6‡ÒIJãÖôTðÞÛº^Ö5ŽxÌéç׬¹\—(=VÚöñ¥·Û~Á]¿Ì~}Ð×FLÝPAv­Á¼«Ë‚èq/~êÕeÊäÄ'ƒµÉ?.ÂýmrïMû2áž,ÞŸ(@决ŒÿÃE`þÍEì¹ÁPÿî"Ší–ýˆ™›õ¡QQܬÚÚÀ ä*;š_e ôsm’GK•ü„Y7rŠ¥@î.5B˜BN°ÜõÅíY:²Œ@}ÅZ=QéFæ¬QÙ(™†2êi‰ærÙéVî½”‰Ïÿö,߆-‘Œ ,¡`\²GÃ…ê:îß[X6Ôâ 8<>0é”Ïz݇ÎÁ¼¶pÜBÕ¯±ãcfb»c³¼ûREÉüvÐåTpyðÑ¿¼ÍÚœ…¢x”aúG…Cß*‘ú3:ì ˆø{g!橞ïçØ¹u±üo­ é_-ñßU¨£X+Ù/ÊûD¾ØÄFØJJ¸Æ®Æ¦4X!"‰Ô«(/ȵ@¡Qìˆç´`'Îß3ˆ`~Z!Äs5¸°ÄCÕñæpÙyD¼Ó:’{÷&=/¾ë–ò ©„µìùϾØÉþjž¿­¾·>ä Éņ[ºÖ\0¡ªkµ­$Ö5—Ú^µ7÷Fç³£ÝqFóI–¸Æÿz=C*¨ü¹ð€Õ¼2ÈvaL·ÂßQx´§øü3 T/Zø“hÌøùUØe€šä^½¶ZÅ¥¬VièFb)øx H¨ Ç#b®?Žß®¼ZHžf8A©Úî+xV3¿µ›#fQˆkÊë|îº:Ú:²Ô{,!î›ny-ÐèðIÞˆ©½‹ÃÇ{¬ØÚK®d4d4´s5É>N®sðYX=š~á“UÛåéãá%ºÓ2xñ‘1»Hdäö£ë‡Y.Gÿƒ¦sOÄ"ENÈfĸj½úA³!‡£ÇA»Ë´Ô©Ò¯[ˆ"ß(AO°»á £·bµ>œý·5©¿­ƒåñ+·= 2;3‘—81F‡ÿw>´cÂ4àçó¸v:ÎÒ`û,ßÖÁÌh€âÿ²n¦‘ñޱ¾þ”©¾¾¾!¢ ‰PÕhß,Öè”VßÇÍGšà·©ƒ‚Ï/Í0àÐihÔ#Sà@­[*nêmjŶ>jÏq¦žfbšæŸMø¿u€Zz’@SCcÐõ· ‹;þÐ=¨HÂøAAJRföFÌ?bD”üìLU HÖ$+ø©XŒÌi½¦€²<.øO°ÿ)õÂî[Áÿ"É1c&;ô,úâýúbb´dÔý„Lƒ{ÿsmæ7#,à¹Ô»Œ'&¶jŽNÇúsmìû¤ç_×fº~Òÿ¯×fþã†Ì¹N«Ã_®:^,&$}°¦W¯/%æ‹IõÉaõXZP¿ õˆ¶3LÅRaC1b×XÙpBê”DåOÍöœcyÎß'Ý" ߯ Yk– Xt<;¹‰ª¶ºì}*€~ËûòЙoZèå…|[VîyN TbS|H@æ(þX©6ÜqU³U®U”E~ýTNðŒO™ÏMÏ>Gt÷ð¯w²„ÀOiD0k»äTÌŽmf~mkY,¼\Mõ¹ÒïèZŒ/Àº鬉8gôf)®q—oë ð4Þw<’e¥¦«ÅÈ’ gE5(ðLp‡Èg%Â$€ü€P´È­èà’!‚QÒÐï'ž–ƒÊ8½OJRë;sÞ\ŸœdüÏx¶3†ûXåгÖužÈY>86+?Ãûe—êˆûŸ¯žï0€„œê½ç©cH;!°K†#Äé›È1ÇÏíFüÔç>ê óYÿ=‚ u Nn7eç,’çtnfÌ,äqcÅÔr®.è¹Ä9ƒùwõ¬8µ‹s¤$"+­«UEðšºr¨ü;³Tùôâæï1¶¿>?¶ãlïo¦C¿>_ˆÊ²¢`¹ë¿Íè_ ü0¤™q¨dÓïõ%¬úíÍ÷ñ Mv–¥3 •æ°ØÉh¡ÖÑY㵟“gsàç¦Û’ð}/S,÷»ßJD/ 5,0íC)Dˆo—JØù&r•·»]X^¢Ø=ZBíºªöÒ3[Jú B ñQɳI«É%>%äCÁ1ýüQ40Àpg„¢¹ê¿õð,ÐðTŒ7°>¢<Šé&ß0£1üçGHD t#á1—$ão™ßÔ^çìDêð¥ _n¢¸÷±ë»Æ¥—`Š›¦Ý;çJ5·¸æ¯´"jŒ•/ÏçÊ»¥üuIÍ„ h¼Ù8’C£Øç8m‹{¸–D‚ 2Á$'Ç.!3‘Xد˜‘p›,tÐ÷††¿,• èãÛÿkÚ{a„›‘í Êw´[Ç6´—ËóU“7ÊqA³Ä_½§¿£tÏd{±œ¸Â¶ÒÂKÇ5ˆ¨8¡dÇVZm“Ôàs!d#"ÁÛ%Èâ¨Ö„pC©H†D 4`W%_NýÓyM…ç[x äÔ¾PÜfGI³ÖÝG´Q=€ãó%gwÕ˜šÊT 5?Çä;GÂ!¥šK;‡ítÔ©uÛ×sÊ A Ó*fÍ2S¹ß°GAŒÄùZÅó—è“ÁzÀ'þó–œãþJkeOeQ9ϰLHFŸèý«í½¾ï KšØ„ò*yP€»¨gÓÊÆz¬þ˜ü" P[†ö ¡ËFØŠXV0Áè¢l…#\T§e^b³Mñµˆ³ -'“»´ŸˆGË.”åÛKë–ÀLŒù ^‰Èd'XrÉ—ŸÍ€÷¡œÐBLÜ|S4Já²Â|z FDûÖõ.n×/ñ‰Œ(T=[ï0ÜÀ©¢*ˆ`w 2²éï¸7ß@²?Â<1¼%fT\’²è¸è{¦†Ô(ë<¶Åš–Gl‚Gù€ð(ëd€Q›>~ BгéQo¥ÝáVQ¢²\^ŠR¬ÝÄ“ÔbS“ž^Ò­UŠZØ´˜!ô§^ƒa=cJºê ö1œ#cFÀ«¤ä:˜Ò!Š) àžÚÂA›ätÀòŒ‹¿i­S»‡¥“{9{‡'”(a‹S,J¬øÙ%W-íä‚臂7-ÝN(³D+¹,¼V¯A,òd* ¸âõZ½Þs®ô fÿ%Ê`%_f)¢¸|ÙùááJ±ä]ñ”»Ø'#¹‡Ñ+Ým¨´ |sXt’à?,…€ <Ã÷C0UÂ_*±1œ`Œ“CìõëøF;e¶ [€1áŽzëž_ÁäW_0šdÆþîì" $Ä`K5ƒÈ€!@DØ ©£ ØÞ[ˆÙ—ä„,Êh` ðVÂYr“‰eÚýÕˆ%ΔzÀmN?3=˵r%ë¦pòä¶­§9kG É,ÒzTQÖSZ~3§ÍÝÊVlŽÐDQlÿ6í¥q PO湬ÝÜê"%R;cŽwÎ(Õ]XÈëi1·×ÅZu“«›KôšÝ‹ À Gs¦N¨Ìô,ÅãqL$Ä ²IƒÜ – D†T½?ÁF)©Í9mô]4øÝEš›°³Àgð;‡+zã >ŽG“£)ßÉ\Ù)3cVŸÀa׸$§®:·ÇÌê_z„^µ>ûíùõµ«óa¯g%4¤þÀ ‘½z¿ç»­h9—ù{»ïÌKÑÉÑIüE˜…•DãÁ!ñª!Ômw|òû<ìíî'nˆ·ŸÞˆ}éfy¯Zr/ ÉÁe&Ûÿ>ô«õ† ŠçýF»û (n¡Ûšxîhíg²®œ.ާoè¸QÇe…RN”ùóª¨*è1@F²¾ò·}„í„Ýþ…•ýôÖ XT3ès/ŠÄ¨ª§H¯€êö<´³Ÿ„Mýj¼~„µ‘”üÃðÖ#wϽq£(É\Œ#nló”;Ò Æûƒ§2â:?­–üq)0fûÎ,¢ôþÖ,¯xwšêìüéãš,}ïK¯ð‘ù¾j훺t@ÒЂ٠,“Ž Ëìu¯6C£Šöjyö3Dñ à«ñÙ“6!~–\€Õ KTvGY1ô±¥þi”:NàIÍíIÅÓ7èQÙ¥ïV[Y›Öøá‰(¾`à¨.Šü»¹îo÷žŠxnù³ý} ËZMSvå:´öFO¥„ÒºÀŒ…9´"ÓÁ³jÅçgÅ•âæÝÌ/O©îeýf³BH±a%ãÌ?6:EÜT¨ÍRå%f‚?LdC”Õ gË{dÜ_,Ô"‰Ð8½šÞÜѲ¥ÞBC‡RsÁÞù4OËtÝ œŠ®6;TJÂF–ɇŽQö|Õ<ökb«Ç¢ hyÓi£ûq!ÕÈîAYç¦}†@Õð‚. Ú{Ä2w„A\Y¸\­wI¯‹zϺ¤ö£,[´â_××x1‚BSu䟆[6mñ4Ù³<ýãeùbF¨žð" Övd!a§\¬ž>™Ô=vËžTû>Ì,0¸-ñ§ ä‘ÞXªÓpìØ1 ÏÛ³ï40 ‰`>M\aºLùü¦àˆíx€Å°òZC÷t•z¨2ëF"Öedšô»èÓT³ãþbö©åU–÷B5[b¼jÆ c´c/3­Æ…qà–=G²k&RìáíÖÞ;…ÃÿÁ6%Ó‚ÄÊᙀö|½üÁ™P¹Â8üwòy0Ôàq.uIþܤijƒ@„¼:u—§©W·)E˜†;\ i6R Ò`|z¢r®åO”dÒtÔŸvžÛŠ&¹;ñ£`µ ¨m‚lô¾ùcÌmÊeáÛU>¬©~&Œœq]r­0jWJWg‰ÑIá}lã³ÿ–UÈóû¸º˜“­œ4:LC9Ó•ºÄ߈%}M XÑÁ"1I–ì¿j¨‡%?/Ca.˜m)ĉWÖãÉSî‚¶1…w'p ˆã +P16!¹Õ°ø…úý¸O uN| ÍZõ Þ7A+/Ðå›é|Ìuµùí»¥,±lÈYÿóÓt›ûáð$ôH7s? «äuŽÂ„³ Û×Í >ßWf­‚¢*‡(–pªÌwðôå“CD¸‡èP„9¢ie÷¸$¶sD$K¯FöH–×m Ï mŸºúà*ä*øNôË|&pëõœÕ¥2a©dª¥ßYÔ…>¿S›®ó¨º´)â:" ë™5zß×7j¿DÊ ¡Ñîü2#óÉ­ >oµ55]wÌ_{rÃøÖ³PÄæºÚó w$ 'ÿrÇÖÛ?† ¶×„EÊõˆg9 àN†Îl7"=õ*n¾+Éu‡÷+öój°„eËV.#‚«ë%ÜòÞ1&×6ñŸHWIN誤šà‰ç…ñ²ötJnÅp„z ³ËºèSžWœ„D¡RØöü“\LÀï«nu2ä’{£$†…eì«iUùqÔOêß&©s¥‰:Ţsôh”fñ}•ª|µÀÂÍÀöÒ–ÐíÕîã“u¦EßZpRF­Ýa\r¶9“ð¼®G`*ÏVLÛ ÷lä³o'¸†ÉçœE­¥Pó;/œÃ,;ùÞ“ÎKý×Np`%òUÜë­ðOžPA–àk|7M1rQ_:wÀ`9X¢§ã‘#Cfw»¾ ´}\Ta‰ŸÕjò¥(bo2¼!œ”Ëî)1{šR5œ‹)}}Ÿñœ?ƒ9ÌoUS¥¸uÝe‹^/báY¦V÷ZãÀxxh á±¾ÙIJ> lt`…ùê¦u±[5õn3 ÐR·wܘx$Ðñ¾M4€V+¦|Tœ Ñ.>ªÒ%Ž¢bJ¾â˜ È 38‡„‚åºyUW+pm*é›H±«Êƒ),hùoöQ@ ‘ÝóÃt„•ö­ÓǯÝJÑyãs2;¢cA'Ø?DßÌòMàö,oª ¶’ W¨‚ (2S`ŠæÝOö«öGM°§É; åü{y´+©~j!¶ÍÜ„á4mœùõŸ¥Òy6Yî¬cNGYªYüg·*Å* ËíêÞu|-sòútˆ4„&Äî`X-“sw¤?Ã]ýuŸŸQÓªŠò¥‚`½Ì4™Ì.n)K½¥'½AÅîJè|KÜ5ÎhvÓ¤‹uCI',œ½ak¾ºŒÞx§{]]«¯^z­}¦Iâœdüˆ¶™®®zþΓ!w0ÂöÄâsDÉž‚ t~>_óAڬØcÀøÜþÔ6Ug‚år­J3‹ ©DciD;à(êóVÅÄE=‹… N§Á˜Ò³¤R4·HÈ›ãV’`FæŽáü$ÃBÿìÂId#ÙËîŠ=%uŸ³Ã«¹÷\vN¹âÁôµ0šêþ~pÐúíÏuK… ìß¶ÃoP«×]øÉgŽ5*@A4l˜˜42(K*ø2-OôŸîˆ>í¤ál õE6×WU f¢––pS*ïX»­L‡&<>#¨&¶Q$ug=•åeˆ¬úí$4•ª¿Àÿ¨þK%°ª§–Õõˆ¾³HÿÕÆ„`Ž…ÒâA¾÷¬…1aËG~°:µüó$å,d `LÍ\?$ïG{ú¸ÏÃ&ÌLÄÈÔÅ~QJxƒ‚¢ ª U5\¹Ùc:5?z]‘¡f¬5ª#Q„Ãëyʰ D¦£{ýK×V3ˆûàG)´N´ž;…%h€—%Gu äQœ[¬’Â;pCnø–ÖúšTôùûqf¹„íf e^ž9¼ ýY~>pÖ7¿c¢ x1ì)­™½ŽŸV:ñ¥«[­±úÙ‚¥@$6K¦Z–O_îh‘‹RmA ðiuó¶ÆC×õãPEe¤V -tgõý,w°ZŒwâ&÷Á7è‹tò²B„¼€åÙ;ô–à gä CQÍ…dè9ïĆ’ dðÔ¦–a|ÖógêC«ú÷BCø$—Žæ(å9 E×cÛ>*¨ÚÏ— ÓëVA4IzÝ=ñYĤ[•½ÜéÍÖ/ÊìˆÁš¡M7Õš+Aóð„ûºÞB÷¤)#2‰\­b­÷fêÞ?æºàÆ™‰„<Œ{ÄO#¿!ÿ`¦:âTI¥J^Ú ±ÍߌÀjÚ"67ýqT„¹gà ¿õ´ÇöEq"í÷·{¼ûM[İ£uFž½÷|ôS2‘Â)Ö?ªš3ZíïÅŽÈ8mÖ×*r~8ÇÊRÄh°¼`ÛyŠŸ¿† ‹ŸÃœÈϼ„ضD~Q¸Ê9^¤ sWÖ)(~_|_ÏqaÝzª7ZU;æ’È©|‹ F$þŠÙyÓѽšyã3 6>8·ôе<œK4ÑM«8a¢àš\í±䔇,èÕ'øôŸ,”š‘AÇ[’CýàÀ{þÞu\Á2 Bà ‡my¿\ÙSÿØT±,ý>ÈÞ@| †þLu­L²ò¶ªHVЙ1PL¸x\$4F…8Ýñfž¬RCè?Ñôlˆ û¥Ð=ƒ¼=oS—KSÔÈæþÏš^ŽaŽÑü„Ê‚±Ê*äƒ|¶:ïq*÷€íÌ ý˜žë}‚ütkÛl/İݲk÷zzÉŽW§Pq;¾Uø˜'øC×ÇÙŽø,1ÅI(ØíÅž¡û H¦ ÂêÙ‰¡_µ ÄRœ¼H+þõÒîËÈtŸ¤1;ÒEôFl‡ØnwegÌÿeÖ-ÿo½®s–$P,ú{ú+ZÕ¶•õûEGQÐý[8!9Ú$mu'üŸ`œÄlZÎÒÎÞʝ ðîKjË넽zƒyŠâ%= Ÿ ê|f‘:\¨¨J“ô e© ¶iN–xˆøˆ÷Ù/ ã‹vD¬OæÐ4’` èåò¼U¿^ŒÒýíˆ&^ƒ5ôÈŸ÷°YŠX‚T¨%D[U~Vj°XZ§2š6]h¥ë9²JâOŸpíp.³¿Ó¼!w¸(jHµcÌ«Û<v$DD> lX·)yÁûYj:‘ŠßS¢~TG¤¯â6—Ë>jÖ^)ÍÞg.ókØ>«ZÏpìþÐü¿²°ñðî”ÙW§4t³}uÄÎ\  t£"IÊ|ØÖÃ.¬—f*8ÍÉeAƒÂ‰lnœ¯ 'Av„!rj„ó ,†3žÝ”o#óÛ0àÒy›ö”'MÍÙ}º®´ŠijuÏÀ´ ÒUA§gvklSlVj ÝL³ç¨ç“¸«‚$Eöœ\ ‹Îr7Moÿ©Él¹xžè{n!7Ìø2»Z[ÕZþu!$Ò¬LV|ÛµétôùåË´)Íú˹ž%iºPšB6,yÎÁâõÿL¦Àf¸[  ÿ€Ë_†ª±ö6±‹Çàý“çÉ.&*o–¶7óN[YÏ®¿ßPäõ<ÅkèÎæ¶K.ÿ³Á ‡I¤ÄyTß»N‚ö›Èd?žù'¥ñ/  åØÐgT•¶É0ðë’¦”wa“Ô…¢˜JH÷7×r%_X70&œC‘¹é»Ó ŒŒÀ”ö9µ}º$j&‰Ç¢úFp•è¯?ÓÃi¶u{¶ðÖ÷Ÿ|…ŸvoBÚG‚÷ʽKÏRš¿¾ùz:i• «Ò÷¦£‰‰˜ñnã,8ö!7ïWƒÒK`ž"*/Y⃥Œ´¸6öº~ØÙ,{MsCP@ë/eÙ½O4:œ¡cÞÕºt¿ü’~SÝߊŸÑÄR©TÀz*¹ÿ-ÆÇ®£~ìõ@)Àóã·X×ôjü&¢š™• wóÑú‰ûc¥6ˆI5DÃòhMsÿRxEþ⮥%Uy6,nXjÊLp§NÍRgįBB[ï çxø1¿útAŒ¥—Œ«VÑ­°ôÃò 5—Õ£Æ÷ ¨Þøœ0¼ámF]4poæ3O]ðêG ®¤Lge š˜YëömEÉ2ªN|ÄT’<‡5Ì+áìÀüû(_KvÖ¹§rL2êiOÙìѵ÷Ìí$ð™øÑÇ©7×8žõP`igÆ¥qFlèŸý˜¾ù¢lÃ)(R "fl…ãš6ÕWK/œS¯¶M¬£7ï‹¶yKM~Àuè+Txð '‰^M&裰\$í¢G‰.«3^v—«…—/îll™gŸ®í‚ %&?šQÐ%¨ $©àÌ£âpÑ´Ø\ãI·˜DjMd,“ÊLw ý%_Óêcå~ŠN¢ ùˆŽŠX‰‚x˜³J§U?\È» Œ¼D‰„,Äö°odq¿óÜ®ÎKvBùÁ Ã´€ÏSJ½KpûÁXYŒþV)óâ\„?¥[Ô0$#’ZM-Y¿zòuF]eîêuÄÙb=hAᾃÖ6iú£nÊårûÔi:û×H‰zË´kh²Ÿhy¹56…. AwÕ gfòñcøï䉿¬ÿ6°´Y÷™šÃçއaWâ¤ëôYW,ªÛI¿öQµÕj ?†HŠ\c=w‡–'FããUC!÷AßÕº· ÏaœXË0;ck. ¼ Ú„ˆ °Àd*¤`åGÛ°ýžçø‹eëvšêìœÜ¯åýæzí) M7ÂûGsõ2Ë×¼>¾»àÀ¾Ä)üµ¬¹þBÊ ôY!+-C–˜Â­úåsòhŽÈ˜…ëV]•Pª½oÃI«šÇÉB8_P¹ôé ¢g5¸ùR?Sárÿ+ð„º¹X_Ÿ?ÂðOIªBãAEB$ ž!为“›ØøÂŠËž: $Ö> ºÂ?`=PÐ5h„rx½l’¯„E¹°µ‡ø Ì¹ÂÆS¦»þÐÄÐ;â¸=þT\¤à¿e˜•ÌýåA^ûwböÃWÞ4(k\ ÔB›u^”}5´ÓöµÜ^Á»F«GÞãðû뛣IòÕya êu~û`4?Q‡‡hä‘°@üõOá—ê‚|Æyއ0‰þìˆa3¢Ó•‚ûšRµV×'8Ánoä‹ôg׌)9v?=,ÐW.•|¯MÒugŒÜ¹'µ¥gݯ`\2׆ü%¸ÊïÁë “Võw ’g ‡¾ælþ8MÆ›^Áþ(¿,ÎÏ6±…Ù§³öŽÓtv‡„VãT³œøm¢|ø8aúÈö4OŒÝeL'±ú0ó¢àKzõ<‘aÊRŸ™ŽQ)?㥦iêl§hbáî&ÿð£¬ÔØßò5kî,˜4vD×…x‚R¿g•Zá±î*;È•X:dûU7!ˆð¦RóWãU<e²aU$Uü9f0·<ê¸pÞò2ÛCž¡¦Ûú _—©’ÞJzÔÛQå’1È*k§Á˜©&f=®ÄUØæ:þ¥æôòrKc)]A3‹»cXC\¥÷—’<Þ)“óûr!ǧ8ˤÔ0bL ‘ Šú_®ùQîØÇx&¬òž ûƒ(?ñ)lq@®…‚ø¡â¿;­ ´+$ø’75„5jL´3³ðÖêe˜ä\r§-ð üø¹¼> Fiç §ê–Eé‚þq W©”ŒŠpøÐ—a¡ÉS»é] þçõ„§Å»sÕ1þãò†jªRÊ ºIìm™àˆ|inÊbOæXTÓ³¾Êä ‹ip;}’òÔ¦Ì÷íö¹­ZLEËùÖ€ŒtÇÆ· l::ÕVñõG1 ‚íªÕ9¬°x“ú EáP'ßÎà?Et J4¡L)ê+Fj2)¡!‘%Ráfâ—î¹ FeiË×¢CAÒÌ7½-´)w™7ä ¨ÕMQ弯øâÅ6ªÙ7,Sød"JÊ´ÚFU“'zCBGfU¢Ýë=ISŸ¯©Ä”Œ(H*Àúaâ6$¯Xö—(³Wá‘q{‡µV«\ˆrnUšµŸË Iht€ë‚å›ë ýðµ|n8}Ý¿,§á (4’Ø‘oBµ':÷»´Çde<­g·>¡ÏøÞ-7 ƒ–NúS£À¥•oQ­3Ôº}Û«<¨z0ûzñV–‘Ý „ת¸Ÿ¥˜n6úË›Ð6XŽ„tEÇ?·ä&˜¡u¶r*;5ÝëùðAä¦/uÑ1êüük›¡P{‘Ë=ÌrÇÇøy›zKE%­ªÜ€e‡m¾-­”ƒ§xNðߦ‹ùÙÄÆ«s7ŠÒÉ´…‰²£á KNÈ’Ð?çþPÈPiÈŽ0>¿Å;å¯Î1á! ÷ŸÍÖ -Xä‹eÛŠ:([îŸù‘vsÖµÛé˜ÃA öÌQÃÂÂÜzÀE*SÑ"€wt?~2ÍI°µ5ZÍ´¼/ó+ªòÊD°*¸àÑ>T÷@òP<ŸSÞÆ*ø>Þ˜¼s¼ê×ǾPZ¯x\ŸÕ¹!(ç¬?~Øùùþý¬SQHŸ|™B`ôKž†‹‰ºRÍ‹¿~5XL/u…ÿ[ÁèF¼Ìê ÔùEfH-J·t×(¯Ï&4’š'|Þ`Œ®,󧫘½ÎßÎüØ®UúñO7ÚÅø?H\°ïíuY0ú¡eÃg½+ý¨.‡W§S߽摅ý!‚i¸Žœf)Ü ˆHg\P/'Gk²Ý0NÃSr#Ê6çµB°W!ö;û|Å–t³€M¶bL¦lC§‚|ŽÛ,;]Î_T?zJŒÙnI&îqSÈ ?Ë 8%{!\!0T€ÚúC‹–"•‹I„Ü4Ü{š(@¢0Zœ¬×o.=¤¨ä4À²•{ÄÿÒHÚfÒ^*u­HeûPOu–‡ºtsú„«Õæ$HÉñ24À™o6Øg]÷ã’z;mð¨´Ñ]ó©ÿ2eu kƃçl*¦ËÑMÂpíš|.mk£ži°3ëvºJ€Ób4£-­‡©í'y-y™ßJ¡êÅÞ)غ͛{/ÿvyNNïO\oaóµÓÖ(/ÿzqz&à:²4yþúöš_ÉwHн}øÊ‰ùL÷ˆÞb¼#o=52ÏÈh0ḙڽuÿ€íùgØ_žßQ¡ê·£Ò›'™{ÓÖÏÎՙ܌["t8i–ÆaSÛ|ù»~û‘Ž`_¸ó§u.AÁÀ·NÚ½¹üQ!.])8i¯¬XÛ¶? ®ëû4×`T4(ûÃDB]óWÏÿhNÐÕñüÌg‡÷CŠ]¬Ë£9€Œ!ͧ¢*Ü–`eòÏ =ΨófþÝ…2Ï fº4¿¬0±aN+TœÀ —šŽ2 +S}CUÜ”Y왼“…G…0„êzÛ,ÞTïÒ©ÅML×áL^˜¸Úh‘X$ŒàŠªæØí%Ák"êƒYŽið?,ù^³¨ßîªíètW¤ñcíïeŒÝ‹?€zøÄ4†z’ÊBÊ Ú,“\„~^$!‰ÿï’£™« ±§p<÷<å°ûìÁ)BÛé­ÕËà÷›\Áëbõÿ‹ýH?öñ¨î´—ñÝyùz̵¹5s*9°³Î#þTºDÐjªWÙa¤¨$%X¸“µ Æ´Ó{ÈÄ6¨Ê`ƒµÈèöàS°{­–ÓÎFI³ìGšWƒžpÕ¡<ÑLó®Íßæôö¯½…½ù€·È.gé-½iŸùŒ¹G0?DG$7¾Ö§5Úk"%WÀú§¶¸YУۆzľêÐ6–x¿ Ž<ÙÏól,Ù·Ö߯n%,-ÌÄ**6J–¯?•Á­¸ Ñ"¯Z®£Ä =…î{Z_êFaËZ”Ñ…¼®\Q µû„˼ ZšÎAÕæ*ÇäeÓZHJÐó-£Ää?ôðDìwþx¸ñ%¾/þ¡ž îSÀ­ ÚHÃG‚dTa­O6ð~ŠOcí¾(ëlIaû8f}®Ä+¦’¼;_M Si 4ŒL×+¯§–ÝlìL<`p“nuÚk]±&á¤aêT?äÄγN¥‡®‰ì¿ê¿y§íþ<}|ÓÓ¡€t{y‡ ½¼]}}äø¾O‚^…8=w÷Jõ!5Ù¾ð½àvß’Bµ£}Ÿöý¸sãÁ÷¡€?ÎæFìîÀÕý|ÈÙ?‹a6(ÊÔT¤'4&UlIQÅ“X¼aön¼F•(²Îsžú€E Mà 5TÎf)cÑæÿðé»#/Sç~Þ2ЖE•>»˜þèÂÂøñê20ÒÈ€üt:¾eJ©éj“ÛÄM@ŸÐÉ攥ç¦tæ½7ám2Äm­·¼OƒñX5Ô£–¦ f^‘}|Hu¹ŒoŸìÍÎØ¥&1dü•î¢ühQÂÇxnõeꜗxä¨>–Ž©ñx?ÅÕïÊÍdƒÊÆŒp£<@þæ®e!àñl1ßë5Qý Ð³C»4qO£±­FLÌŽ`.Œß'£¦òîˆú¢;i?1Ó9?÷[W€Õ[¢"ÿ·ÒÅGºK^ÄÓô^ÐÖ•Œù‘ËŶ@™!)æ+qûëÝã½8ÑHð·Z°O’ëtÔ®Ï;ø3ødEÛò”ùóÕÞV.-¼R²b8~ÄžŸè»:Õ¾åÖËTÅlúÖÛpŸÖ²WòŸâr—·¾žæÛ¨£(¨‘0žâOG ëâ&æU‘€Ðl܈ ’0kw ¾H÷ÛG¯Oú£‚IâfpfÒÅßÝ]ÁúÏÏ»·Z¡z}»ŠKå°…¨uŽ6Sf…?²å7wâ8QAdЙ¹0Ñ¿ˆRŽ”]bÔ#Çë¡%#ùñ1TÒéÚ\ s­cS%wö¤QôÁºÃ,©*.ùî×#O {íG1ËÃö(z¡ÜÍ0µ ôºÛ8Õ‡¯]]lá9 —±£³;gfß ò0™-ôÕÑÞ›S„Þ ¹ «Ùò˜)ñ?þˆµþµÍb³!@‹Ê€^þüî1Œ L&:ý>Y¥ÀtÓj!¦—-ºBVØ ª¨†ýÍ2"÷ÏU;&ìn)ã“Ó»ö¬¨¬"(½£{ƒ‘½kWœw7¸“‹Œ(‰¡'ùvº`¾„:8ö‡G3òÀÕ×{€¸ÙùÓyšÛaW»K^£'-Gò-eÈ l—;& òk0¯¨G‡R×#†xkPηH—-8ЛJè,Šé«¶ØFR2'KǰZBõ©éi¥áí–ô,Ì!ý@ˆ£\ÛPþçÂðý°Àv„”°=ŸG»×ü€Áq#jñRxV?ÚùFR\ŸK3Ó`XåOúAÉ_\Yñ"u«²¬Rב¤J -‘ø¥Û’v|Ž?1r£| ܉˜ìOÑ·dÒçað#£,,>Þã°«Dïª ñ~ AJÈ#M’—ýF;/¾}XÌŠÔ÷Ï´áãI?zÖè3AÙÒ‚ù½Ìÿzh¥<ü…È%’ž#(,uÍR“Üâ5¬Gè½Í³>ê4q Î e ºÉîµÓ íººyÙMÖèSß2eÌÒsz†4ˆiÝÙá÷Cò–¾H1pxðXœ8»ìÆÛflMòŽ÷E—»u"©¹>XyÁSÆæÊk~ÒhJ…à[×ÍZð9VsWs¬)ÍÇ1@xò‘¼ŒU¡t=¨ã®!²Ä8]èGÜùnMJ1Tz5þ«åcÿù‘sa>èD@]{³Î,±ÂÔ sf;¥Àioe<¨Ê$¡myº2%õ¢;í¯oÞû¸ÃqãCSpo:‹{TÝaK·®k¢·>ÂñPpHbå{N%ÓÆœÃÅëéöÙù¬QLžl|AV:ïô4ú·£ø  '¡uCrí¯Ü ×qwÕØûI¶ÓHÑÜïƒÑÛ¶mŠâörïQ@^ãAIƒ•bá1]Ä•šúÇS–ëËúkT1 ¨üÉd眖t’Y÷9©zÓå½êÊÑkžË­­+ñ¹“yõeãôu›Ò[ír”¤ˆª±ò𨅀±_Ý)||áÛlÒº$•uM–!CHÄäé9ô„Bí\E¤lß/"Ý^ÑÒXi#–`D{Á¨Êª!ŠÝ_bÔâW¨{yp;“Åq1%„0W)~%ÆNÓ×(»·Ó+ã,Æ‹_Áçc¦WÍ@X›o2ùD†МÄ‘‡Ž'>O>o]¯ch[ É’ïÅã°Ý|]iOžëcÎñŸh´‡¥%‘fõþ‹nÓ_^éª%3ÆËîî”æ[% = ]™ÑôטÚ÷iÞ=´)_ï丌›€Qƒðôéêe¼ˆ´Ú ‰Dç¼<-Be‡“¬"úñ]‰íL…>7A­8îOäÊDöWí£»ú)¦“oØ¥Ž:$ÇZm½lï C¶6æ÷<õ£>`AΡnÐ,¹èÄŠ½­32Oeñð|q7:Ê›ø·Î´ð eW’… Ñc#ÚUöªŽ-l=IÀ¹*8v¾† n<Ãù\Û]4ûùé¬c0“7?µz{¯ûh>w–'álf8ªZ ‰z‚ù’ß¡¾ÍÎ6@9w-áXÎíó³º$Ôµêô¨©i’>©E\…ìÕ¤¿oà°´Ù$µ¡¼ª˜jÚí\?¿ÍTOÃB†)´}¾¾av* úO§Cn cNsDÒ{nÂ9µ»l½§'t¿.ê”3±Wëì ´gã³+tŒ§ò§+oèñ{;Œ+õ/×–Þ ;†€cö*)uUaëò½»¨“#wnb}û‡^Þß^E†ÕQoúµÙVúUö6Ãä4é«pc G³-tS¯bþNþáæì¡Pl HÆÊ¿¼è\ú»çå uuÜaÌLµýî¢Ü¼±ìw¹ë½7•‰¨˜Z=ûAÔ4…g~l‚rUo®á€^F è0Íuæèbm“žBP.f8£ èЗç­L^âkuæoÞ+úàa l:ZQã¸dÅÉÙîaé9˜aCŸ÷Q”ºiØEÄã¢fÍRQ÷¬3×´õ6ý8É”“ý}Åå¤4̤Óá^dÓ?©Ô+ŠiÞ ÚqÍ Hö`Æð¸Á~h¶÷ÔFUyÞþzÓ[]­öý¢öõI°OT ÿ¢J'ÔH³;5Ϥ«ßÃÀT2,kbgöts[áçÁÅÇ'¹‘¸!N±KØp‹a+gÐãówpdk) y\0Ɇ+|kJBtsn)àÊ€ÌV…ó¯Ó.7o´_B7¿¦Ûò×x ž­öÊùþxÊ?ÆÒd 'öäÆ˜€ôn‘$°ÚŽ Mu*^ ±w .4}Ðm„AŒ ØŒx›UµVúiĉ.À¡–﵌Hl,ÌÑ¿r>ª¿Þ©}Ç xöj…Ï{ Úë¸%ªñSªyss̓Kp!Þ šš?b¼S$)ÔW?^Â,Ÿu˜bæ²E04>9ô™›†ê‹‚D'JâeýÒed„Ñì Ò–’"æüX`·Ö>µ=®à„£Üï“­Ë7‚ÆŠ0ãö ˆÂµY:Ú5.KÛëdO?õ±Mà¡à€Í….(üǑøu ‘Ús’ÏèXY×Z‡G¬ód]ét¸ºq Ûp”»”Š4…=¸)ýAÖæ÷qÈg xgS,+®žËvJØÔûÂf¯{é]!ž£¹³âÏ€¥¥âÔÌÖ,zÌÈIøFéf½ÉôÃdüš|Л‡o”FsC/L,ŠvêïÃimÌ™Fö|ÙBõ‚Þ*[üŽhUl›ôû[uÍWÝ£M’&)<¿¦62ÝZ …Nè--É ¹Y™UßÏô¾iìÊׇÿóîX̬0ÆK£‡ššÚ´ˆûUOaÜ_Ú•<,CY±¹]#l­\Öö²ñ.Èžº–»¢•t6}\.øJ T˜¼'ólŒ$n§LƒéúWÍGÌï4Nÿ%©cÏEÑÅËôèËMÁ,uF${ "eFqü„ú[!d矴‹Rt›½Ñ[YîДJy«¸3¨~ 6 a’¤q £ÄXæÈÚÆÕ¶Üg}>mÇÄV|9—ëNQgoé;NÀ$••íƒÚ©¨Xé*õék)¶ãÔñQ:¾näK$Œ×?{ðå?ý¦:íjçà[H7³a’IG<\ýºQu•á<‡¥fƆ~ˆ 1'ÂÅc gwÄAt58~œ¢lï­º71竜È&ææF;Ð&©¨†_\¯Ž]#ž9¦þª 2†¢Rþåóïsv"Pï;/ÚRݹ)?Jl§”[¨˜¥L‚ËÎCœ<¼ýNÕàlñ¤*¼¯¶5µîä7"Ýàr–Gõ+]ùÔ7Mo×6Ó`‘>+‚š»ËÓvÛÛ6µÐ‘l{*{*ðÏ 2ÍAÄ ¸†“ °6 éïõ¹t..½/.Û<Ì6„ŠÆž—m+Xl§Š?j©ÁWA,šaµ’N¨˜ÒäGFý¦Y°)r`øxÏÔ"¸ÚôÇÄ,V,-¦p1¼ ¢95TT^{>’‰ÖwYK 5^·e“: |/V‡ïYü·ïNÝ^Ëyø;)jñRš}')×+ñ¿*÷w¢2Æ'Šž$ÞºXÌ+¦Nñ±Ï¡F&‰¿µ áô®œc|°bÍo?œ¡/ó•AhÄ!Í™¤ü›½,4Ô3=´}§çã­Ù¡²*{ëм'\Ê#°ÿy™~äD2ë!D+¾ëOôHq°‘ïÆÁg©iÊ84]>sS¼mÇvÏê½®Ûaj¹Æ¯6©xUµü3“3ù…G‰ ÄEŠeW‚?’ ¤5/„€Ÿ €)jøš>²ˆP¯%%´ˆí~¨.X.­PùŽ+ƒm·¯,%þ`ŸjQò¸Á[ŸœGS—g÷Ø,€±ÎÌSL§£³C[”5ƹ­ŒBÃù\n*®Ôé¤ jb Í™“@¾è§ HÐTQ¼ 3@Ðwźì‚bCêêƒÆÐ]6!r. t›a€ÉjáàIûvHcÔü@†–…ª‰y2|ÁÓ˜vu@-ºX)¦9 ø¼Á”ߺ–­)ÚA¦âG%Å«RUîü!ƒ]°»|ÎhÂéÔ.£CʶæBù~ ¨k?Ž–b­Uˆªœ¢1|&®Í幇7¤UÓ‹_î¯ÖîªÔ¹ÕûãR+d*á}hÝ£¨:P^Áú0uÛÈËÍ·šë@*ù)Z pˆgCÉý¾’.T¤//áÐIÐI,̺ŒbG«5QÖ3³$Rÿ¿2·oÓFÆC¤¦÷vQÁ%S%Yó"á% ‹²Ÿ3˜.×Ygì=Âs¸š¡X¼vª<®‡VÊØ|¶ Ò¸ÙñÜ uéaeéiO„z“×fqÅfB3q¹t–ç)¨`¼b£CÒð™sƒä‡£t4uÇ ‚¹ÄºãEes©<êàÓˆ˜¥#Y~”×êÀs:‚úîg²­áJi«©XÙQÅÝo®Š˜ï_ç:íû-Ѽ¡”b;Â(S›__éÑ.lÔDÔL}àªøüwKµ$B”–M2|J¾kÈ—I Æ8‹=$9iÿ–Ýö6} ©‚0í¯±P6±SSífa„eW:n¾5ƒwAØžþ,  H,]áIÛƒ5™& <ÎøÈ©:CØA…BAN"Ù Ý…;\¾´Ü·BDåúæùŠ8ëcÓÐy]¬âB¡ÜË>Ê×~(žßüñsÑ…w–d ÚÒl¯.Éuò†s$°œŒÓ÷Ó¤¼†â×Y½Ñ>Òi„Åé¤W‹Ïðd3¸"}äUtî›À3Æâ9ŠfQPHdc]™ÒÀ%:Üæžðë*ó„óþ€:@“Ñ:C²Ü¥evb\Ê9‚LÃ}¿ú)Â'â4Ðý~6”£ Ë^j#úÊä=镇˜z3…{LyT4Ê—ÜÃQÍ}|çE¬×o–”"‹9 ˜ ªióeeeQ{–„Ÿ;…*ØNRÎÛ;CÀ*=¾Å'¹5·…Þ ç}Òx|¥Ez)ËÞÁðVòFè·>I× ¾>/Tº™Æ{( ¶nùˆäç8ûä¨ Ð)Eøa±`eµ›H3úýâ³ßA´lÿ¹kŸøqf=ȯ íY ©EùÇXJG] +VèÎå¡‘O¨yð°'º%âPüzF,Ü oQŒB2€ùõò–ƒYàš^æÄ^Ù—±Î5w†™ÏˆO‰°¤x¹CÏJŠØ&ö† f•ðþ¾ ÞçÆâûD{œdÚÆ°tˆ|+Jd$n¢€–¶mF:qUÚwB.€2¬dÌ6Ì0û·¡,ÀÉÍa#èª/ùS@ʸÐUEâºR?v\«Ê1nQhEÙHf»ºñ’p†1ï¸'gGuv÷dÔCçÔÔüqKŒ‰1Þ¼» øR2sÖsÙ‘-'úˆ€?€ÀE‡g”œJ ¹¤Áy¢¡Î—¡y‡Kò<7Y$Ü­:çŒ3 ¬`j —–÷ˆ¿äÀXG©¬ÚïP³néK‡"üDcbBß=¾—ýCxèžÍ©â~ ºÄzŒkÚqÔ±­M_rš–¡»Ð…ªÀ¿ß©Õ¢²äµïÐŒ›¶Ãe;ÁÞÄ ‚Ùp–ß…ÐÐo(¦¹´e¸×Õ#‘}Ñ’VcÐð7pÛ¾¼$0§À_¯·×c%„¼/2ºàΰRzo¿S—5G•+( _?£Å–KÛ§OÒ{ztèÏý±¾¿ú'B ëh\#ÿM ¾°¬&ôá·=1@,®¦Ùr]Sáâ(j¡'‘ªdi¹–rmÓé:°}ôöAú2ékåK²_%×Û3r?.`‚*±*.#üãš7YÙH'§ Z¦L7>a™µ cLjÃyOÍ@(’­NH뼚IILŒŠÀè4÷²L ? ‰õ0=ž~õ,£@ §zëY ,2‹“ŒÜèvâ®ïÌbü³X¤)en“Dm·€„ƒ5Þ ª ™Ì¤Ó†ˆbô?Îà™ïÔæ%Âà­ÖîIšbž-rukË»¾[ƒ=÷T>_>¶·ç,¶&B:3‘^ß]\õ72ÂAL€çß`âkc”@<`¤aýúcüxùú›•Þâ΢m=R@®Ž­R諃 œgÙàk>Û§ ÛÃÜá9¢†2– 3ÐÅN– ¹“TòÉféÜ“/åƒQb} 2BëÂøoRÔ’?%£écË,JÉë^8€NI‘Î@ñ€ósÓ1çׂ²!xÔÙ‡Ž¥QÈ´Xw‡>Âè h:§¤@ÎÉ-´PÏ‹ULHÆò Ûº‚+8MGÃCjÜGŽ ‡ñjŽö}5aT±dB?¥$šeÏ:3oXê/(ýÁß܇!jØ·ØPÐ7-ÔA´Ô§Š‡ÕîÞ¼¢éä¢Uï …ÑøÐ×þg5ôûÛr¶ž dæ2}Í'ÎUïß„«—Ÿ7|°MðŠcÄÔ~= ¹}Õ$mŒT£Ä¸Ï¦àþ ô¿ý9Øíb AÍ»e0°®·æôä×s>Nx›êf0ÄÃô0[åË(Q°&“È“\-ܓʮÒгeS·f/iAgÙÄÆ_t/°%%¯Ϻ·C©P_i&eíØ »gq‚2½sI M üî]<­¿·M§^©¡ÛUbl”µ0‰ ݰj8Æô÷ÏGòïò‰©#  Ìx߬õàj/zÞÞ;›#£òló«>ʀ剋?ícÎÒµº¬„¸Þ͇sW“óö9d;=JK Èy`âCxËÃ-ºÕsM` ³õí·à¿ÝÊÆ©õ¢ž( {À¦'üöxP꺡Ù¥0 )œÓ/jq~ƒ$b ´š×ã/~ Òψ®{`·Ò:Æ»t‘ ïãE6þêªßÐÕÑÃa ÜÀVl4ÊÊÒäGܾͣÙ!JîôZ{ÉAMÒ(ÂQ1ïPÄtåîN£Íi<‘t”³š]a"TÙKÃ÷±&Ši~d®ðHf›*%’Ý͗⤦9kŽ•áªE‘ ”fFå›ù‘N¿Ú¥Ö© “s…§žG#¢©‚‡BÙý(6M¡ˆåÜ€òzãªá‹F1~?0*ª©Û÷þ½X4- LF>š*×Ðv“pd©ÈJÜžt÷–­÷¨» 6½bô$Ê ‹nÒgJ›£E…LDcB©/VˆGÈ-+…@†{íôåŠ'Rd»DÌ»Y3V<¹– ¢)#ÿÒh"É6&ŠDœ@”FSˆUÔï…$ôD"s¹dšl½yïŸéiš;IaÍ%l6ÞôÿT©ŸlôS×éÍõð'¾&+àü ÒôîvûÔQÔËÿý¨‚S­üù¢ºgŒ_/,\ àiDØÈ~åºôgæÞ:™#Ÿ`åu^¥¬Æ/˜'LaYê1ÑÖ!a‚ QP‚ZEâ¦YÎÿâ¯^õQQ„Ì›!ƒ’“N¨jKõ`Ÿ¶«Ÿ•éɾþû@R ‘A!ÖîPä4%ºÔÏü”ï[ŸFZçÓõöPÁ•ƒ¹RÒ{À·ºÔ¼ÌôŒjaX/&îYYÄ™ÓzxåÌÿÜ%¿óqì*ÊzY©Vû‹6öÏÐÑ9©:ŠavèˆÃ-V¯˜‰ˆÞ\à¬ÞÛ7øêYºÈ-ËfØÁ ßȤ§È$…ÁKL1¥Ô°Ix ”¶,Át ’æ Q¿¸ºznqýȲ³®Wó¯2ü—ÞIeÑŠ‚_ÍDûÙe0åCl2Gå·‹8ã5ŽŸPãßþ4` RÔ>j±ËËÊîÉ9®…«¶9÷FºíqùíqIhÿØ@NIdÊ‘S|°çßGs òUƒÊr–À¹„$6h~CT°&}©šA€çJæšÎk&‚$-xë&xµ „kD¼JCŽùW¤•—éÙ¢p*~~vgáý­rVoî^£âïÁ]Ig+êÉ„‘Ôèé«©Qâe,ï(Å~Ðk@·^Ÿk<ŠØeº:82Xôwä“f>ÃrS+A½pÅc’ξà‰c†'­HÒb¥P%½<(ô…igޏR´º3Šž‹@n,:(ŸÁy¹Úr¾<3ÛdÙ•׋&?³ÒƒhÑsZÏÑscïtjAÀóéüÜkÇØtìbqv:ƒ ~?ŠXfˆZ1í*t©l Hƒ®udʧˆ••niâñ ­y]î*˜Xã»e¼µ›=Šsö¼J&¿\Ødqr‹¦BN0eœv(rÄ«¨ù ö?.YS™Ów: ßK"·ÄËw68AÕ F:Jh q$\z‘˜‡•"q7¡¬¹od©®<²âbaü·RàjEqLæ0®Yýì:3.ùí?VeÞ߸€î‹>‰·úö¨nÔÿ.wÛÝuwû~x@MÄ9,úü•Ï£\Þ}š“4­8æ;&ê/¦WŠrô¹ÛC=KœŽ^kÓuŒ7üåf  @ãTÃ…VauWy—_¸?GZ4eÂGqf2h¾e³å\éý&ý+ù$AûIàA§žXOǪº· zSŸæhYQ"ÚŸþvNÙ¶"bfও3zTþ£d‘än RY˜ï"ˆ—FîuU_{Üù4åÍ SKfûÄ|2ÏzÛ²Ó4áp%WÒšŸðoa‘C÷d‘ÚÏ4¹ì [ŸÕ~.ÕI 8>Ÿl·ìUÖjP•^%þUaU/Bâ/\—©ˆL ážLTÿ†eÿæˆl­«tÿ¡c(ÆŸ.ÓùŠÔ^5`It„Ú$(ô·|Þc²œZ?׫§rƒþ|0çÈa˜ëâY9‚âð"§ uá0IdýhO™ôJ¼Ë¢ìȹ[7×ii¿”5£²x[bŒ Ÿ<¨Q<‹\_TDDÝՆЛe°|5ˆ/[U]¤>ßiÓ%芺.\&•K:îNºò>i\“kíi÷ÓÔˆ[àêkØn™ ²Œ%p…q»n£j ,ÏU)—ucÃZv§[X¨ÈÒ Äæ¼x§h³=ݾ ^Æñ@¾ËŒP§`‚£·ä/†”ðûñoµãg7mzLÒ`ˆÔlææJô”­Õfº2ˆ8YKÄS¯õ0¢€4Jk%º9CÊáïQ©ÇN ˆTMâ^‡Ì`ª Rë¥V)’¢¨TWů±ž)éŸÔΈÇu ^й=ï‡"@ŒÓÉ:äzdÔ±ÿ)]±µ$V¬k­‘Ê(7‘0–n 7À£¥¶Ñt…_ð*©­¼Sت wéÅ:PöTWg3ókCl]ù€™o¾H÷¨” ï_=Vá‡Ðv€7i±ˆíÊ@‰¯…)h h…™b;þgËžjr†}ÚÜöh„* LE22;Ì%ûjØYìU/Í.÷[Š-uq¹Ôm%–SÜHw¦6cƒ]4])¢Ú]B)gžSóë­f n%Ch%ëÛä‹ážZ€ä[=÷׉r6_\ˆr]³‘õÏÖ_´J ocJç¬ö ‡‚Õ_ŠÞ~küð>—yìG¿ò…ÎÆ›JÌ)A€r{²ï¥vÂy×ù7û»‡xî^#~Ñ„ŒoUS@Ú›‚´0SBûýÄ-Á8 ?p!ÉIãº×%†sù ¦›˜µþà 'Ý,ñž# Aò>\ª`ʼ/Um²6|؆@§@Û³ÄÓ„7è‰fXjé‰L¬Oý‡{…U;I}¼á>õ».fGÉw”sê¿F@Í …s6SÞµA› H5:â:”d¯2û©$ z²s"p1ì™m?¶'éÚ¾ìÒÝ&‘k¼Êç¥6½™ÏKÆÉ¿˜Nu+Æß¶T#;V¸éŸÎ']&kÚEœ?³ÕÜÊ·ýp‘dŠ ªÜz.cù¢Tl1È>«¼Í¹eˆ]ð2w%ÂÝßÅ媆X#QÖ„:jÔ*ðâœPaHrª< ç ÚþòQ¹?[ª‚c0²céð?9*«¢R¿{Ž-IDûyQŸš] ·üª¼AjÏ¿½¢_Þ+º4´wJ4Σה鴪ÚæS}ÛSΠïêû—I*ŸÙYÒ^ 銓Œ€ÄÖ»F0t<1ZœPGÏ‹ê=ŽÊ{0ŸÍ›5û']îè™ã Xó9;“g!P^îo;»{ÆW„;½—Àw ˜•´©¹£²•ËúfþvŸîœ\¢w¢1é¬ÙãnÕ‘ª ö­gwJ#}ËÜ8Ú¿_Cýt£”NŽ#*¿ßQVÍexoçïò‹mÂ,o·òÒvtÉ!,- ¢Þôy¹ˆ”_4ÚÔÑÈÏ]ˆ†?öàOׄ8@¡º¥F|P#ï/È*™æñ«zòNŸCPA. qÖþ7îðúÔy# Ä¥%á}ºG©G@Ù» b î~1-jrY¿ˆbXkÎV;wnð£f@ÀKGTÜàvj9æì²|}|x¤ÏøWw¸¬ )À® ½x®+‘ÍRhÐ0FT'éfen½dóË謮{Z÷Ð0‡ŽÜˆ1Æå!l÷ZGq×¢@ÐýÊJ -0Þ|}ŽÉ·—’VisÒøBÓ,ò~ÓiIÞù³¬ŒÿÕz€™e8Xéù‰/õ—ct$üvÑŸLâYÍ¿LÙ¨%Ãä|½Œr‘U·¢âªö9_?¤’ôj˜0ý6 #™Â·jîÒ’3¡S[äƒÄÂÂã†7¨‡îÝŽîš²×°=µR1Y.Íë1JŸUp³ˆ)K×fŒô¥.æÕæoƒg+*ç ÈîjȾÜZuÊ÷oÝÝÃüu•z)²ðþ²ÚâÑ%/%o\ ¾ºÓbÔÛ¶6îàÉBþ±á.ìÔ`/ä¥ñûŠóÑ(øóx!É"P Œ@;dGŠÉ¤¢8)Ö"†?éç têÒ•Q„‰µ/…¢Dl¡oÙº‡³ŠZrȼçh.2ÿ@V’~ÚJÐiD·;(Á±6h¦§9ãy¢=H¿]Aࡽ\ÿ €¶cb:™ÁâõRÉþŒÉõv|”á8’,’sÙN‰¯$ÝŸJã®O/CE™‘ù‹¾_®…ªè@dº"ôzÛöJ¸…lžÕæ=³ùûìGé5®æ4Å`wÒ—Ñu(ùƒå`Æ‘»Î¢gáO•„•O®?ÜVc[P9lW™Ã§yuc=ô ‚„™öóKøA£H!’«R§Èˤh<µš.èlxl}ް…‘j—öü†Y¼{Ñgûd?À#o›%ð¨-OîÞ¦‰8Â3{€AF6+uš¶ˆ.!ÑA ÿ¦Ah¶¨3#‡ºbm%{÷æ‘“Î ý^;hêÏ?H¤OI/³ï #Ér\ŸnÞ%äŒÀÞ ½~1ƒr½+3b þ©˜5>¤f:PÊÅ„‡r'g 5HäʵA„ð Ì8]K&Žª5ê=@,_ÒC /½ù+NrÛaÖ¡©8[×è„O¡ÅM9ÎÀ'ÂNÝ/ÖFÙR­:¬Ð¬¨ìá ´O}Š<Ä’ጠ¸rö| Ñ_š'Öb„{ݤëj ‚_ð°KáµÊǨ—®j;o"h±‹(Ê † „ÎÄ€·¿ZÁr;“€¯ ް­G“ç/:ñ=ž† ×nq㨨PöIâ8È›³†}PþŸÒÐ~$Àœl\#ž8¢¸üµ°ªQÉ>‘#†ú·0Ò!‚Ž¥ƒBû;¨ߨJp /Ú*¤>…n­E…ÇÔ&±Ô˜=RmTÌ%òÇÛß…ªá +qf²H¾ .Ú{µ?zâ\±¬zGBŸiÝ;ñ­¨íp7ûër¨àIµž•ZqÕ.u*ìÂaBÓ ûkè¦Í uýé;syÕ=žüù#.^–å:á–¡¸}V³«Yu¿œ©çtïØ#ö-ú“¨2Ãòyž4ê‡d?iì@+Áý“š/ÞÏÚ¦‘™o‰©ôaÞ ¥Aë™aƒÍ_½sb\UZ©I‹½Y‰`ï4¨¤“”š(hƒŒ»ßûÙ0ᙚÉ]ùuÛ¤Ò–ÅŒBñˆ– ÖügÏ—öö±'X)<5…>AW~k¯çÆ%/Ÿ]ÊÆ ½Jº%lÚcÝH…j°_ èè{üœtß ™å“‰ÎáŽS-Ôùõ¡Jæ÷ÑbÚi6M·‘Nº6–l’H6ãZÆ[soP¬¸q.82r»¿&)¦ŠÇÒYc"3 °‹/¹*ɇáùƒb`¯Ä!«KçT²Q««É.D?£e>«ÑJˆÙ°jNJ)­£7’”äl»FIxƒËG"ŧ$>°ÁðR^Ðb×É®ˆ>Ãäʺü-#AhqçWõ¡bÊç§}L‚F&b³¯0ë¨|0vú ÀÇ»Š'W¨„õ›Ñ—E¦·•ÃÝx[L›>á ˜ãüÄ÷ñÝüëÝêVî¸mÍ'î”â¬:¡‡âðPQ…0¦ð~h°Û‘¸\ІٕG@ŸV7‰"ë892Ðwrê(³uéPdå’»KçÝkS²ï÷Åg­Â?H´— ¡Ñ¥Ò€*$„qZ)ÿª€˜«½Æ•Ç"Mù Ò–R`nú I‹ VHmÃÊrÏ`wØ©ç@7ú`Hˆ ž*Xú-0q:ðqþl†,êi*Û r‡[² Åd AÑÇ«š <Ю?Šd1Éöï Ù-\äÙŸtkßÂF»\øï‡7ËÜ3QBˆ>°÷è2[´ÌvëCÏD,õG€N&JE€-(e¨2Z†¡Òj`˜H½©t@ÅX:!èåb+q`æLÚ®t"!Õ*ôܦl¥]œP6gy£îa ®jO…¯§Z(‰ 4¢¶"hd-ä£1}O9!x¬.P;„BMlr]¥UØó=ЙˆV‡3ƒ÷dúË Jq ä<2øb=º´Âw›+Ï\ÅBj eŒz§‹]4ýì1Nü6¼·D÷þ=[û ü—šZhy·äRl#‡nQ+pƒ^ ”)—š–!"LÈ<“½T÷Eü:_¤&Z¬ÉÊŽ2n_„ \?Ä€¨:„eÔÖ°ØA} ¾olÛ™Á—±NÙ'Á³î/³=úÙd”èÒh‘G„GD•r #çv5- PµEZÀ?Xصó͵„g¦dú'^TÜÞúÆHWÔ]D ‚8݇`+‘u‹Â”Ž,¥4bE¡áv„‘{ñuEªAW7Ÿ{5Ñòõ¥ÄŸ_{‘ Ü•îâ3*ëÓÃz[µ°±æžØPF ò~ˆO3S¨þþ‚Fª“«e³ìI;ôï*B •™Ócí•]N§~Q'{CA9`$ÿ!ˆþÃÁY.ÜM³²ncÍaú×G™KP?3ôV}»oï3([Þ­lFÞÐæ,¨ 0¹®ÄÒº™2¯{bÆ¥eÃw醆§ç^#Ó¢N%–ìGÛQ>™â詯‡‘DƒÏ4¡în ì[‰eH¼’ø£Ý Ð³‡hÚ2ðï)oqz\Ji=’Bé"Šk0w¡Þ´â–ÙýŹƒ5}*£èk^äî›÷|cSjNÚ\»À™,yCÜ×"EaÑŒi$o>S?ºÒ¡ ‹ÔRòiÐI³+ûùYp¼ÈgN€vg⡃N|, tCS&>æúZDôv2úß™w&Ó\BS¹¡ª|¾zoæÿ‰ò1ð­y1°aÚR6J” 8kóK[ ª)›Ø„ü:¹y2õû2–VeL÷"Øë ô¦îPnáþÓSTg@Æø3T…„-.Já÷ï.·§Š žI¿`– Åy©[.dø<ƺ¹ÂéaK5kUFt$à§ $ŽQ犾f"?©mzk ¨DŒTß«29]“¡´† tÕòK×mV¥ŽÂÒ—ÈJBöÚ)¿Ê ä×ë#÷J‹AOE¢—Z#{Ô£ÜB^Žß«¼z.S’¤¦?( ¿¹¼µ<½™IPî|m¶ýþU'„)dâkœœóðn¸,ü6ÈÔ3]0/åǘbÏ;‚Jl.×Iˆ†w´étã ’L±Ž–ãùÔå[ý˜}Õ^õ¥®= ° Æžlõ¬m±Ú1“'Õ_ íÃFRAË߫¼œØ{þf òhTüH¯Þlû{##ÓÖª›åŠëúY-Œ°çzÑ(3fQ‘¶@Q¥Ê»éÞyƒóy'%@¥Ä~3o™òíîKàÍ—‹^>ÇSPÝ¿&~ú¢o±æ$„ëçcà.€›öªŠ~ú¯æ$kÄ‘x$ó_– 7|(Š]5ÛŸ žJ»çÖxõ4ep8ØmÜÙ;m× (·Óèˆ9pµæÀMÆô¶Ó®ç«±´D¼ª©6‰.”¸Fq@“é« ÃЄ5£l2$¥Æk»%­•©‘ëUÔ%wµU4yUž.ÆÔ„Ìû8p}#¿ô܃QýOÓÓÖ·p0”¢¬—¦BzÎSÙ*ƒ6egˆ‘HÜ 42ÔÃ]g?Uþd®1«¥±c]Þ²… ]®ôýˆkÈK³‰‚q%žvGVD¡gàý‡»5Ug¯³ ºÑr"H-ljéIX1G 81Í÷d‘rl?ÚH«tU¡gdº¾(†0óÈ€µ(ªi*­ŠîÃ}\•-Ý[¸Ý~Ĉ–Rð×Q"Œ‹Ûˉ\¥Mþ_{€„¼áäW×Û‹ƒ„æ„ïµ)YÂÅqý´†Ì‚cÑà¹À%剳l…Év’õû¿¿Ç[̇Ælâ…×Zy¥F ¥" áÀ ÔŸC¨çüVçH£çÁV% í*D"ZzÒê)ÌÜ q*î_²ÜÝ÷¢f•ûØQ%\¾Õž;/ßžAéÛ.Ð÷´òíÊñq‡iº Ÿ¹ÇÝ73Eõ'òŒûg]£hüñ=Æ%ÖeÏBý¡î!›'¬ké—×' ó]»>)bo@RÕ‘K‚ÑFDP¸T½ÅˆÛ²Eê”cÅ!&¸sÀU˜EÌ1Êà©iy«Ì%µUK7uQ­  IDATÉû±=æs@”Ìá÷ý ¼¬€˜È"b$¨ŠÍn"^H2]uãm§ïP£l”Ëùp•Eé¹r(›Àt”¬cõY9Á!¶þç LÞë¿ޤã‚û§cl‰ô¡ÞL •pP|%`+,àyÈM÷Ô%·«Ï#šÛ«xUi“r¦œA»æ‘VQ5~á fãºW‹ )­J¢œqgù"Î5£yt2ŒäðÎ'Ó-Þý­ëÁ{Oä’ø½qæFMjïX÷0®_qQ3车=‹,”†Ø`ñ6T4Ù–N„¡€^üWáE¾v²iðKff#HŒ¡$ÀºA7ÕM b&{Ft(È„˜ö2=[%(eïzQ#=Æ ž‡\#àª!Ñ ³PÙÓâ 0l*ÿÏÞµ+8Žë؃ˆrVtg¢žÿÿ©Ý‰öNTDd2Â_’è*w»ºº¦ÀívIIQ€åt~Òu‘Ó˜“VS"e&ÔÔb8øJ³JÍ"E¡/¦Ë*”D•Šò&®Ú‚:Ð –ñÒùuQ@r­·þ? @I =î=Åýj'¸ÁéË€ãÂð»Sô©­I¨;À ^NZ•ËZ"¿±MPgÚ?íÆxXC•ï ï:™5Ì8œÇvVý9÷Ê5©P¨+Wk§å¾fãב² |!Ú˜5ošf•Œo1 =²÷­ói‰¨ž¬^ÛF±ùïc|²uò8®Áïðtåø¥•Û]ñV ó]™ð0xi‚‚ŠBÉR¨ž¥¨~}a€‹Þ °diyøÑ Pƒä"ŠˆMá)Ø@‚"ŸL¨²sÈÓ_S‡WjxV±÷vƒ¿Òþ»²§½«Q6ÁÌ os¢Í_ ¡Âæ‡É”8¼µ5ûÆûg y h>º'ht âÚˆƒØÏ³.çëýšÒ­¶_·UN·Ž‡ÇfàÍNóÅŒ:íÌw8ÄO#¯Ê†7AI䪒UU${51"âÈ‘£W÷€±¯Oß«Ÿ¯ƒ§ü”§ü!LoË d¯7UU¡Ò²ƒV€ ý—šÁ?,š È L* –œ QbÉB™˜"…J´:zõ‹§r™ô ¨É(q¾»!÷%~Ü:ã,b|¿Õ½WÅÆàÌgHãÂÒoYµ„5´˜ÉÉçÊ É?˜Ä˜{mEi±eRt@QÝ\)0gÑ$3Ó`{zkà=è¤õ(§õâÀÆyÿcÀ^§4Pěפ×2•“`Ñ ¹W_¼©¨¦¯ÉÝu¡g˳žÌ丯 ½WqœËÍ Ãi‚ ZWà±²Ì1&¸qÈj˜ÑQȃ)El(hs²¨Ê1ŠÑ…cí¡n «¤48VBJ6 ÜÈ]k;T¼uFûè;d¾X;Zx¿D:Ж>\›ç:Kí>¨ ˆÄM´DKüsÙ€"¢1nÊmò@¸ ºÏýù…Õ,’¡ªÈ"À·?âQqU7ª7À òl¢%º×úcÛÅɼ[ŠÓ¸ “ÓpöEƆ+!D´ ‰?;þ¼ qšB7åxŸHH¡4}ößÂ|¼<ÌQ~¿fq}´n9µÆ ¨£ÜîUÍ…’ÄK¤¾Ä£UU®3Ã¥ÉC]OøÓ„ÞÊYúAùñg~|t>M#þêb!„¬`"iæpåø–µãT. 4uAü¨-ÿ£íG¾X@ 0A6ÂFœxžUŸÚ, ϵïú4KÀ‰%¼¯ØdIƒ{C!>ïý¹,!¦÷öç ù¼%ï‘2y·a/ïÛ¯œ4ëôOƒ¢LJ`'1ªÑ8bZZ fÓ5$`Evµª§:ÅMlÅîè Ú€×@šI°öæ"Ížò~[X$Ÿ¯“UfÀJ–Pûynïµ¼ÞÕþN'{uÍ>\ÖwÚw¬ÿ±KÍü(§Wû‡ÜÆ Ôç­T °'¶AÁÉÒ^©Ý#‹âÆ×ÿ¾J†dL¬o «Ç™8F"æÚ¶æ2"o=¼Ï ¿ô á6ÌEXT€—L)ƒ^ÈM޳pñn¦Öë¿"Šç©¦ Á|ž\GªÎü¡,°*ˆ8ÈÿþOò9 QÜ[Œ„¿ÿï­çÍV…¼ÄHÔ7(".ˆªB£g¢V}¿ÌO†¼j€A4+ZئiHƒµê@g#ß>¥BÐá[Ýæ7Rwž©ÐüuóÅ[G¨ ÍuŒ7Q`lDØÌæ2ø F1ˆDÏÇþ³EíËðéˆòîbB%Äùò(„×”h0ËnÇzì <Ù+†"§tUQ…xuŠÌ å8mÃnä“ýü±FúÓ~Ê»äñ)û¿ƒ½¡°…í / ˆR|c›&æñ|HO?MmÈD›åX6UÜ ˆXjM`ç1vJÄ\®ãó×¼jÍìzß„|ï|î#E­(¬Ÿ YS†Üþôs äFço{µ‡‹xäõqÕ9€‰Ó¦LÕ&ñct€7öo¼óE=WôýÁ§y ¹<èâÖ•¾s§¤Ûù T)Ïu¶²VdQq;‡dáœö±zsÝîè¯&;møkDÿÝjb[TÍ3UUÙOG†­@n¦»U‚"f"lÌèŒDÞ A˜foŸ-ÓÖjææÙÁ¿ix™Lm „¢káõÝC‹@7Èu‘>± WÖÖ¾ýQﻺ­)%ŽÚµ¦¢­+Zi¹j¬³®="üõ}šŠj†¨Xºþ·?_j?ý¾« Ê‹‘lqmJ̤pº ,­pZªd{‘úE5«Š q¾¹ÑKàŒi,§,¤OzÀ¿½ŒÉQ§2; ?ß$øº2Õëp —ý.¬*”8,róægþÍ”à{#9+¹ÛÀ¾/ðù¸8LzmL*ØH²+z’%f’Lq‹ØàkLÊÞ/xlahñÞŽ>h`4ßèžôøø7Øøhß"ëzˆ,ÞaÒ²òæO?åà??þ†u×Ï…5› $<t`¢D”ëJ#@Y‹˜bÍD`jièï¬Óú…0aŒÎ½ÿ¦´³¦Sœ’ ƒq~âûe5V7¼‰:&Võ†¡»¾/-\Hý?t’ëë‹E„¿®7£¿:lk{CÝe<Ê+îÜ!·&{0Êo@©é²õýë~ƒ›:}½ÀÈBD v¯œª¦É•gq0 ñerƒLÛÇZ*Ú<3´nd/Í=3WîQ ^ÜߎÈE$a¢|Óž#>T4†v­.*jÀHmT#ªŸe)Ðkj˜ßK5jʵַBŠD=Ð_Ñd*;Û.aÑR€š¯²õIã,6Q±Û Ÿ7 ‹!¨·pè¯ó[Q’ÖǧyªÍLLWì2Þ ­w~‰"¤ENyE 'ˆYW=ãÃÝ(; fۣ侦Ú>§'ŸVI¢Wü5ÿïÇ^=^÷•›¸S'ì:i-Õ)=Ö@$C²HVOhß@xcŽÑ<2 ÈÕóçi£Ýé.÷+'+vú§ü”›òôì=@&ÅÉß«ª2ú¬#ñj;ìÛø. ãÇŒgj%ÎPB²E4°fUU¨:)ÈÙ8í¡¾Qùsd"Œ½ä<·]oœ¿¾ØxŸwËêÐ×2YE ©?§Cü„ ¢V U% ¼/¿ôq› .N¿'8ÜMæ[®Ž¾ÓÀ[^ù{úßË­ö—õ{CwÄiŒ,Ðö‹åÙ¾ÑÝÞTmlÈ_=Öˆbƒ†N¯w^¡Ê bžŒ<ô/l(wȤèVu^-íµV ’-Ì$“ ‹îé!Ó<,…‘ý{¨ÉDDÇqyÕ¡éµC¹ÎÙ“<9&b…õzÑ-FZ%²ê»ÖÅc•!枌†™$êÅxµŽ…æˆâeR¬¦¨á ˆ/v€“0{Ì?F[ršA9vRkŸݯ¥ÅH³.°y»H\³(q©xc€âX=H,Dõ¾Ä8–Vš ' ËPsØÑÿÌWl˹:à­M,GCà1\…Z²†ßÓj©ø#8•æj“\ |¾ }ê+rØ&Ï? øù´Ì£0\?P0t<ò;¤®¬öL™RˆüQ¢@ñ¸X©…ºç×J]tºs>H’V¤î«\°1,d1úá×;ÇõF¼Q¾oƦqíçD§ï/døË»îÄÛ£›ÓW.â ™xÏÅÎP@‡C°ïysñ®Ó$-¬ÚŸÒˆ>PB'}¯+â¾UVÌù˜Or^®"EÛ7–×]üá˜kw“‡öõ¿§”äªx#Ú˜/Î1HØÈág§ïIÿyThl!:à»ZøwÈnÙ¿ÿø‡¿€oÍ)]URJ’¬î4-BÇÿÄo//´±^ÅÃ&˜ýwÝÌÝ;žr¼nùÖF¶dQ^ɽóÿž}ìSœ2}Ü݈ø8˱ì…U³¦”Ò?I(¢Y)€7Š1Ò…}ïÚˆ‚‡D¤“ Ÿuõ,Ý!ñ§rœó› 6KæòþÎ廚Ÿ÷±>»ˆ„­â—=F´€Ös\v¶ )¬TmíQÏÍõ@˜ÞJ-÷–6t|INˆÊnjðwGÉNU8¹;¢²Zݬ®þ÷Sp¯êUì*)½¦”’䤒å¯?¿qåÝ5ÿHŒ‘ëí<¤„M©wì¶§µèå”ß);‡le#£·Ë ̘ü%¢äg¾T‡ ©wï&7•Ž «U3/Ë|íýoÆjN¸_­t¤Ek§½)h«‰'¹ÿc4Ž4¹ŠPxý'¥×W)ÂéB1Fæ7ƶïË­;]—GÛÇ>öÕòÞ”gø)oÉa=>ó?PŠH+OFï/ ÝùB)(ç‘QFÖ×üÜ߃ðyÊo(^é7õM<å#d¡‡‚ƒá  ÍL‹ï»Ü=¾TºÓáBXo¤c_»ÊnýÙ#kÍ<°j“åþeA”ae‡¨šKÇÍ¢üX­šVðÞñvzø1u"à ™A·Óç8¢0·&Z¯Û²‹ÝLðHn§»a´m àJÕqº+Ö"µ˜˜(þñÀPI¹Š)‹ŠR Í q‹t¡oñ›@xcóâÍcV䛦ï(òz®*.Ùàç@—ÆŒ?ž`¥Ò8.ò‘ÏÛqƒù±ûúHqv¯ÿüôøÚ=n f 燞On܃\ί›±Óñûô_x†OssFÂ_³¶ $#eU1ä9D6p`O …îž—·|½ÕÐíØ”Sš—'úW’Ѷç~h<îCA¿»të‹-½‹2 ¸ð盾_üÆóFz!i™B`Ò^®ÃPíkü»Ãl?"7῟ܵC~Pì÷ 9dÄéÊ!?åSå§ÀK…Ü î7K -§nâA‹ÕBÖß'¸£ïÞ©†Hé1}2€ÓzÂÈ "VAaZyª¹]Ê37D6Í·Kó©:Úš‡ºÙŒ¶õ®Oÿ¬\Û‰ÃÌ€=7ÛR…"û«ß ÅQ}ïçW[ýõõK€Zj´q‰YE_mP½’dÅk^ݲ±@¸0‘#_˜42!¾Ôë´É!økÈÑÔ½fUwIìçp”ÒÄÊDõ8pÍß³Ü71Δ"ƒM¨q¼H ^Sz{é~ÀkxmðŸÿ|œ7h…ýésÖ·T¸Aýa1FÚVá-vãÙaŒFóf¥ŒJMK©©È‚,Í['—‰¥@|aâ­Ø/ ©œÛ(::&¡bí_Í]wÀÓ~Ê¢O¥üCdÚfÆd†’"€ I³çwéSîÚ˜Šò&^ËA%%Æà &Œ6ðSžâ2"úBUd'õ½b¡|ù”_Q>ú‰_&VÔ?Uô 'bì‹®¦_;ò¼öò+ ]jÞš~Åœã¢ä„Âp;Yp†6v‘ÃuÐùŸÍÑážšöÁ[;ÿ@×íÇ/œe<Û‡]*$x ƒÈ‚dö°{Ú›ìô§ãâ~\"b†jKn6 A(R¼Dfæm F ´Š«K é*G­ß7Rꚡʣ?qªüT Ž6_å`òXùâ2N£ûà”6ìÕ~º¼b³ï¼.?ö”qfÄD†´]µŽt ñ®½ ÓrÓ[¯*>ö‡\]¤–õ²ÖªŸêLfѬzU½&ÉâÜ`r§ÌhÖ:¤ÙÇ™>üR¢‹ú8/Ì•gøw’ïHZ4f‹²|àŸÆÁwŠA¹Fž½*«vð¯R<ö«A©ÐT¦ò¼ý‡÷x’/ox8PÚ ®fôƒ`ÍQ L‘‚LGõñ~q9Ò°þZrÃX€~ò—”ç:ÿT ƒ‰È öf1®cé6›¯6b{2,^h¯ƒµ’ýàgçñ½qäÝMŸ‰ñߨé»ú¾1=í¯…ñ›Í|?\)¨\ê}ʯeÒ3´ß‡®½¨É8'/è¼$Zo®x¤zoà— 7¥”0$mfÑ¢VÜ‹°qÜÇ ÉU“ˆ^Sº&#ýbŽ1ÆøòÍ€Ášñw±@\LÖÏcœ¶þ~N¯¶.÷êø±q«¢Œ"ûO0‡]¼WøT/€™ÑˆJ†êM§¾¡!mþÐT«ë hÄ ¬x^-«ŠF£Þ€­ ûú?ŒÂ"Àã9ÀÃþÞ LØ„&Ýõ'#@så±JyÁlMO¶W"µd=÷óPèÉ·~ï2’hJ§¤šH©RÁ¢ÂÊ)§fw«et:ûi=˜Úïè¢:ÆÊ0~ÀO¹%Ó²ù<*¦¡ÔÇG/]óz1XÔ¿|V7¿¼BV\]É0e« ¬ü =?å~ùùá¬ÝrišÖå+•_§§?W~Â^° 0ZAWUͪÙÔG÷:2ˆ)¸ÚÊãY.¼ŽD=º·zøüÑo5³Â<´U«VçŸÃþv^a³‚%öÈö8Ïm Ô\û­ýãÌLe¯Æ¿‘”Zìt7RTSd@€ëÑŠsÉÔ5û ×µ¶*PžÉÉTIRJ*×”þII”\À—#ñÆ¢¢é*ˆ½‚1ÕHÛó®&ä¤NÕ’q§Ÿõ”ñÓ2˜[<¶E2—~²sÙ Dù:Â+ª0ƬïÿgïÚµב`u*j8š›ÍÿÿÍîÜu6  ˆzƒH€$(Q–=²†uæxl=(ˆ~TW/ÝÀQöôPÍ·úŽ«]2Ä1¬{Ëöc(#UTKFaÄf!̦%“ËRU•žüô¥ò‹¦ŽhEtmãÛ<ärÆ›‘Æ)‘KÇÊy/ƒ B/Z‚¬— PÉCs'sÈMäçúÓÉüµý}VK?*ÒÁ¸‡üº¸#<«l;¬¤%{NæG† hòA‡DÓ‡À˜U$»,3Ü4ªxG _o½Çœl'©ö`ÊiXàêÁ%eÁž+âC_}W—ùÏ2ZŠ(³×Ö”«6¢Sq>Y§úö.”í ™òCz5¤>ûjŸ¢Õ'Æç»ƒôÞÎÞxÇBi¥Ë ÿ,¥g-õÖè¼Ù—µöPŠ8…#£oJyé´ÑO\Gp3@åp6ô2Ú*œOºJ½ °9´Ö•ÇÊàØÙÓ*VÙÎ* Ýߺ “‰ºÁ²X†ṈÌÄo#ºȱk=‚ …ŸÙÈÆÀb d•B“V~uéTÂæÈ¼bËÙNQ9›iªœ  D'Ϥçt–‹„TU¬f~`ÏäOèäý›A&ÇÞå⌣ñ–ž¾e¥©V©ñŠ‹NXè1zâ ûïšpÜUýJV·Í‹ŸWŽX5&Ì5Ü B6ÉF:aWªä&ÆÍ.¬Š´ Xõs×/ÒõÓÕ¬³×‡|ý€›Ç¨cHõKñí¾ ¬³ÿûcØy_˜¤^ŽyñÀ Ò+Ç9zý‡ûßzI‰kƒB ä¢jÊ„¹¯æ‰™ýØRrâ¡U2ŒË£oa뵪mYÛÄêqøn9rÅýÙKèÞRYü¶¸#lY‚^ÊÂv}ÕB¢1˜3Bãò'OÌ|òP™u³Ü=ž;ÆÓbPmnŸA*yÚ¿Ø8?å‚çÎóÇ?Š’Z4×…¸èÓ ˆy Â%œßÏïç÷¢¤ &²ÊŸ<DŽùDÐ\ú[Ø•@¶}?ó¬î¶wOÜÕÉ^ÌÜÆ±o·+HÕêš+?~¶A®ùã;Ð2–\ŒmÈ­;óíÜ:”£'fÛ„p>Ÿ¿‡s@{ïþx#ÏÖ &_D€ŠD”¬¶}·¶Åü+lr(vMŸ¾£ÛsD·E¡Vp#¥yi.Þ§›w½^  \7XGFÀøÒ®öÜß¶·t=ðõóC9„É`@üÀš2R¬UAPÿá‘  !üûßÿüïßÿð'OÃXdî={:Q.ÒVHšºVeß~£7·TÈ^ÕêYml,…DEÕ×ɯÁzŸÌ>AÒï3Ô ¦Òÿúµ­gÃlHP“´`sYS¾å&ªo);"D•0{8‚U¤|¾¸ð~<8 SNÊö?J \…¨´ºR|àÀ²ñ§ªi »ÙÓRÖþÍ/£åžÀŒy¶VÁ¶FT¥¹ñÊÅ1gíu3¦ç`wW3)‹`ЂBÕÛï0¢Š57÷â³ÓbfCQ-lùœ¿‡‚˜œ÷L?xÿæ„zã³ K†i‚ ‰y%Ô2%{½ÖŒ—Ô».7ÆÃ§ñÜz¶o°®é5S“.ŸÆ7nF{Á'UgÓjtÅ«áèÌÕë&ä¶Æcs¸DÆ-ûRQG—¬°•“ób~/AEaâäŽh ˜²½@82TdTU ÂÄ Éõû.~“ S¦Ûòx»y“Y˜1½²Üs2rÊO v,Iª{UD™“b€À¥"hâV­NéïNÅÜ»±]³.ȑى(S*Ù“(±8eŽlƒÌÅi_Áh=œà§ÀênÑØ2n­¾Ë&‰I1Âk¨ƒîSleŒž@u¤¶òTýËp€#Ú®|”=ó°Ùû˜}hY]µýòÔùäÍ´Z“·°ç\Pg£YËHU»'eŸ¡tªšf‘pTQh ï¿‚Æ Þ>y:yï½D%V–$9»8ó¸3“¶f,Ö~ï²2ó&ðÎÎîX/“Ü;~›²¿>¸i¡ºðRO¹{B;†.šf-‘æÏrÅóº"^@«m«“X#b°õ” Â9¨Q‘$ˆ33 Ä'æÉ‚Nl:mšOK!<^°ŽÆÅͳ€Ç `ý¬b½Óô½š$¹Òïîi°OF•­,»þ IDAT>ð5`ÇS)‹©;p"rXZîÖ1û·Qþ²÷ˇK@Nú ;Âà1•ÑL0†O™ÿùùÀ³ba@3 @ ÆLlÃ&Ì‘þv˜ß‚Ÿ™YëîŠ)i¶ h‘®É^Uÿ‚ˆ­[&÷x›=ÜA¡ïiö:äǯ[ÉÑH.HÇ_î9®ão·ÝÔëŽc<‡rÌN£±p/xÄÑÀì ZU@ZÛÊœÓnÅGÌ¡’öï2˜½™óÛ2ù7`ï »n1õK;Ç×¾åµð~5Ñ÷.d϶|âèàþöXC[?{ ÝÌp´' ͸êÁM c>k…Š*K”ð;œå"4iNüžrÃÈ™‚ÅûÍÉ[ͤ<Òž:wVˆÁŠ´¥~r”ª¶‘÷{“IwÚ¥ñ»;À¾Gnãë‹¶^=ƒj$êÔOý©]ÇëiYÇ¬Š™)ÑKïoaF8o•¢ǯþ¬ú0Ú¸<°FÇ…¢’åÄ‚)u ç_çpæðóÀž= Ä̦\3ϬªÙuI€ƒªöÔ¹u!N–Ç[6{Rµ—ub…Ù1NŠvi|øH2Ž"à/ÆÄq®ö›†Â’Àñá=Ý…ZC)6Å…¿ªÉª:­/×ÒÞïßÕyÖ©G² † Œíó¾~¤¿%ZÕ«‡õ!XíÌaýc%W]ÖýöHûpÍÑ:nïÁS`á× °‘Ÿê¡–ä;‚°V •q¹e,0q@È:.*Y#ÚM5lSÆã{­ó{“]½Ll}ËBÜÒ£®·þ*ñ¼Œ"÷]=4ULìîhØ£:wàÍ÷ ˆ¨ÈE¬#. ”öä½Í´ A"ص¶OŒ£înþR’¢~SxþÊé}2ãü’ð¬?ÈÁlœ4þp4ÆÕl¡0£¥Ç,îÖ“õ;˜ô Ëž8Õëšhh’pÑð; ìO$€?‘ÿñVz\­tW)*U>àn8ÐHE)$RºÉ½ë@g¼æ:Ó«•¥µ0b>%»b‹ûK¦`5Õ?{|ïeÙY±1]ø¨*B10ðæZâ—˜˜¢†‹ 8Çx5;-¢¦¸™Gž¥`ÔY«j¾ûÎïõÙ¥½ã/… Gô.ͺÈ(c»…éÝ „ 3ën’z¤…VÛª@ã¬["ÀAÓØ¦Ü¤g¢rÌ—ž&Ѻ—ã版½˜=˜™ jöªXëéæóî7w(ÐS¦…(Z,±2iîHjTAÓaÔš{=®pËlt(÷ ¿?ªEà–¼ÿëŒý¸Ú¡.…!ûè~huN6kÈo>¸Î¿ïø˜.zoµjL›‡]Åz¨³1ï=á›ó¹™C³8ßteÌuYBõtÛ­~<™3Êʼ¿Åzð D`öÖÆ¶+ëÿ HüõëëÖþürô6¯²°fÙ}-y¸’J”U£ÐÀž=Û:>0ìĪmº¥÷(;³kè<èÖy\å~ßjóøµèηÕÔžœÆbûÞ&ý»àÅfIÖ 8„ó»$0r7iØ/Lþí§•3éE§Þ•Û¹å‡à¦}ð†>À¯Z¼Ø|g-¯>Šn '#ÉÔ …²éL…ßçó¯÷÷s@² –_LÖ=ÓÚf‚@ Ç ˆˆUÄ‘›teZí'5uƒ­aî^Ÿ Ær˜mgŸ¬±´ÊŸ¸ï.r@êd€—ã¿—‰s»£sÇd£ò•­vXª*’ÀÎJ3¬¦Vú{þu—àOþíŸ7f~{óþÇŒ$U£˜ØQù$¶£5_­®q½veWŒ«bõê¬,,µŽCïø_¿¾m'0n¬ÅØëþ”£Ñ)šsoÍYuÀÀÖÜÄž @ˆŠHTï÷óï —€¨ÞûŸÿ¼¹ š‘µ)jGرTïôà:˜6î$zQÖI’ ªFÀa¬7Ö¨GøÀ5дjéŽ?ˆ–‡[júí&²SZ8DApJêʈ¡óÖê|o¨\x,öÍä/Ît5{u'Ô<–3I5ºƒ|ÙÞ߇k‰ ¦­]Õj]Š[»ÇT<Ö«×€Ž? Rû§iVQõlÔ,´«B4ud­¸NP½Óñ趺ç`;±Ü¨Oý=°Š-©*ÍÕQsk`&±ª ‰F ‘`º}ˆù>yx½±ó—C’LIàj&°cQÿÎùȃýòØ 0}¤²ÿÀg¡ŠTÎíõÊž’iÑY†äå? =€?gÍ⎎) @å—‚êÄêð'”ª‡çùѳ«F«"A’01–j.·g§ëíå0gNMËu[R>@+/úŠT÷7¿ý\Mt}_|²á5«?ªH®ÞTÑK@ìÀÌÞ9æÁÄ{E“®–˜æ_Ê%™Ù~wŠÍ>ŠQò‘)w˜²準ëR¨¥6w …Š‚àȃ@ÌB€ªñæ@ØðŽøÄ|"Û­öî?ÍD¥Jù…²VNS'!G‡| ‹fÉX0£|&xÕ÷)Q°kÛÖ²V1ëp¨ ªÈ ÇuЪwTÌ1¨#ÉQvú\étœ½?†'\bæ³€•ú_5!5C¡PÒ==lð”ßþÀ-ØpŒYˆü¿”~Òë`B-F ׯ½%’èžn;æõ}ÐzO7Peá»Ê.K…FQÑU@Lù“'ö£ I 'ŸÐ°  ÙXå³c1«}ùàÁáÚB¡L…#²ô/TÕþi"ðÀä=Øø¹¸ÃÚü¶‡ÿBïR]Ÿ·D²JiFmÂ#|àÀÓ!ÛL•lH•9•`¥[5úÿ^$©w¾±îZ< $¢˜âC‚2‰ ä­yC½|:Wë{àq¨ÜÜÆî¬/—¹(ÖmKˆ ®È 캇—ðz˜{¿€$Zbsù‘±÷ŒP:竸i%ZyƈýˆÖÇÑ]Åvª=Xƒ5‚h}`Ä\ÖD¥¤‰ÉìÙÚ±–Zî8'?¯JØÏó¥níÁ§ÂÕZ°mÍš˜XÐ 2m "„€p çó»DU ¢`"01“?Y¯¦ìýæ½R¤Ö'©:h]Õ&]YŒ¤hYÄkœ'‡|`ŽúŠÏFak4>0pÓŽ I&¯ÓSÔ`<3'ÈVyUI*ªE”Ù©EhŒ‰»æáù—1À4JЕŸ•í®bçœZ×ßåJ†Î~{¶Þ¡½ž¢È‰¸vÊ19PI‹­{? Þuïwí“æx¾[ì[à#{C–Eæ<;¶ù QÂ%ÈE5 x ž™i`Ø8ÀW= ©m¼ÛK«žm‹<Ñ5ŒNé˜%W,çŠFRaÒ &¨ö~Ÿ‘=I€AÄ40@ÖË R)–y˜¶T-î›—$qÕ–ù^$[GÕBÒ BQ¥<à¿+*‹ß ßvà7b%ÖPùÃ%¬Ö<Ñ,+u ‹²©É@dËz‚@Y‘d Nî•á½nÙè¡Ñ3VI*QETãÿÙ»z.Åu$zk‰¨4Ѽæÿÿ›Ýl³×Do&B!EwI¶lìn ¡ß3‡×Œ-d¹T·ªÌUD|AÕ DX®›º¯ _–“7‡AU‘žnŒëÖI™Yì[.X®ÒkÑZµ†3&‹‰F‹1b´dêUw‚‚ªQߟÌ}µÜ›&L^ÖÆlšš”kÔ×2ÝbnÕªÿu›!nØpžšJódXРƛOŽ-«¡`ú‹(ôÂ,€´š€WˆÖ„eZ.SZçó¥ë:ü{ žüÐ¥áäõk±(¡Özug-#ÕáeÀ…“ƒ_¼I€ç“B¼ƒJ]K—ÔáãøO†Xxý¸å×G?Ó/ ™ý%E2õ*~©}&+Ö/8¨‡zßܸïðë·‰áÍ¾Üæ3ì§ãŽ²Ã¯[ˆ9JqÝ–¢â„kÃ?FâH8 A÷Â.¯""RTPZé9Á; ÿBcAÐ-d­œ OD ¥ÔÂoÖ•»z}w©Ñy! ïκ¾,Ö§§e&}8Wº§|ˆsÓ.Õ:áûWÉgÕ•œ×bý<ºqâô©/8½èìÓ¬›± pWüs‚±&Öä—g3@©È0oZxCct9\Ù6.VÚPóìͬ44_Àuëjês'Ï)`Ì Rk N ®¶ØTDz‰I2›8å1F!Aaø”êªÃ)ë_eSéý çàK¨t+sÝ=W3ýúy¤ÙŒÛ9¾ „àìuúÝ^p\Úw÷äøY¨Ä «°$g[ð¡ KE|+­9³aJÉÍ÷Ç3Ýt—¯9ùBä‚ú¸t’QÙ•QÆÝ%ïåÞç?½àI_Ê«p±ï¶Õ|6@½¡#P-m…IË':pr£ެ"¾VnmWô¥õù<}ŠÐ­ŒçbÜâf fEJN¢|òz‰ ¼ð©›žÿL¯>½€µiÐÉÁãs¸ô„™ããQ”{%l-þËxŒYøÏ²SÙi!h@íú[dâ¥-aÊhYníÊ}¿½¢TÊ[oèíyÐ~¾Ô÷—ƒØ=8œá2,Þ±Ûl×íI?•†‚¶Ë}þZ}Õ&"˜(^à›ã€$ÚÑpD´c,2IJL¡€…ÝBm•T]-¢eÈ™àD80¯Ë¢¼5ÍiÏ€3ä“2“ç œÖÔ€Â|Îv¡”ï ^¿ýõ ÀÛÛÛËÀnޝ‹Ïž>Ù·öR«»h¾Ÿ7}®žÜ~Êõø*?J]h¯OdÏ<ÚvÒì'PÅQ‘¢ ›½™ô5 x&‰ëý)ä4Ê‚íñTh‹áªýä™@™¿~¦ùQ#DÊÉŒ¾³ ^+ +K¯7\ä÷>ÿóaÂÌ4–»Iê1C‰>àrMÝaæÜÚð`þT¸.›Â –I“¦€yU/Aƒx…¯Ï•Žn-z?ðLÊGZ*‡Ó‚FiÉúí{Pà!"Á+ÚZO‹C̆©žŒý‹[õ×.dŸF9|eÒ¨@¼Ê„BðÞ à «Ð?Á~j؇¢Ÿ⪠§L4ˆº[vò{iLBKƒû³[Õê`TÙQ2µØð™LfPIPO+Uþe~ÆÊŠ~òðï;ØTÌ31÷ž@b}躧Œ è<&Î|[”®°6;ñM|O›Cä.cV%ö‹ ¦’—ÑŒUQu%;í´q´q5ÓkÍ’]J_’±ávà yJ´–A7Š‘¥ï‘U t'Rˆ`cp)_늽ëÞòáÕI ý”>ñ¯¶ûWŠ[)š`´–ÚÄKßÂ_iÜ`,u`Òº96p®¼è¯ÿE#*‰Ò Ó"Ôƒ(ØþÀÃ~ÿö¶ß à ïáõlàÚ(b>h]Ë]¹óp>­_4AVÌ`˦NAZ–µß{KL‚ÀöêÝGxªËn7ñI[J[ïDc£¤pM%=Á" 'HÎÍß\{qmø½`@ #iÙx$£ñh"@!Ñ/„Ij¼• s¥b ÃJ«­âÞëgU=›x§/:ãäëBeä{ô#Ç«–°˜X8)–€©×‚:ÀOJÉ­£–0tn*ÇFï§îO¯°œ“ŸÎ!½¹^Ò+jOãhG;ìooozú-•³Dφq…= ÐWµ/tË J!Eec)Ù÷%2.^e¦Ç"eyÐ2à-É!Þb’!)3™ 18aò#_Çò}OPìä0Ÿ%™gY&}Óo¥¡°³Q¾O‚øƒÑû¥ÝÄ…Ï8­j[,`r’nÑ™ )ÉU$¹§tD¾8lELÞ}«÷÷É¢@K1&Z¢îDwBŽ=¬jnƒ†6. Z4ï™åÇÃëR6X«ß{L¢ªa/õˆ 4³DИ*å^œ„ï!øÀLf4pV·ÀàÇ8Óú½zòwÿjK†1kïß–/ ¾æ0#þŠûö4îÿyÛÿ܃[¬ žggÚ(`­€AÝ1jÌ!|ðÍ? kæjU*sQ#•b=' (Æ Øœàålài†ç¦"_‰>$WÖ€« „Ì·§®ðÄ2è^8I|à @ÖŽ}-¬@©y´ü1c¸|ì€4µ~Û@ú¯Œ"é}¯Ööì¿ D¦ÆoÕña‰€±øj³aĉ¨¨W¸`Ü*`J|EÌ{àÔ~^#óÙlàUGB$É£!·46z »B`¢##"ˆb‹C«OÍeMµ4È8Á­s§&qk“æ‘RYP½ ®iÉbŒ4Æy¤„÷Ž’Ý,iþš@ÅÜÝé8¹ð×ô.ü]Ÿb¯^«›“ ÏÏåÓ¾ãs›Qxïf|03§iœyÙ÷OÞNtÉ’;àwC?>÷ðä—Ô«RYº9ºÞ}ü­þ-õAv¢^X):*cq‚Á ܳò–qÚIøÜÛ#¾òþòü”.‚=Ÿ\û3Èä?-2ÆÍHêkQMñµò!“Á©xNŸ“L¤ ]ë= ¹ŒÉS9§]´œöµ÷O1ò!r«Öí®¹U£ØX!>)ó¯dK¸tþÏ¿@i¢ãþWŒ1Ö' RcßBP/²Sub¨­\;ÂêtT².ýÈr¸–¤Ðá€cœm 2ÔK ú*2¤v[»ø„"[H»~{§dR<z>{üˆû0VdJLÄxð)šaR%Œ%;üó&>èN«‰š»4|û÷&³#™M pã •° êµÐYd†h§k¶›N ö(…‡2Ô8±DfCê~?aÉTŠM… ¢¢¥ , ëëam_¸¯ü¿x;ûýžù Ç?fŒYÍ6µ¼2?+òYgÛñpÎ\²™Dâ ‡Ÿû···øóPJ^‰‡ $„ßC!Ú¼ßuýÿ»¯Zy¢Öäð‡èK/?F€Ï>Ã¥²åœï^ Nþ»zúµél-‹Ê)X&¾)$‡~¿êñ¡”Aއýág4‹!„ð×ßC©}UTGÐ,·“OÇÚLÍž}™Tm6‘!C½Ö¤ôáÁ)_î¬æQåK€î‚8D#i"ÊdâµÀ^UÅ?oooÿýÏ㯊üL,åÓ·ð† 7ij„{ ¨³íïúä$¨¯ANQ‡èD<4µš‡‰’¨ˆâ¢­Wpù΢À÷¾%òÄÌçKûãž8WÒ¨ZÁ¹bo”Eᢠ˜3d‚‰™7O€™b1bX’C‹ïö%ºRI€–J$©ZÂ̵¨ã†/ÅÜúÀÔÜ"à‘ ñcŒ²Ãàà»×x1*h"Z¼TeQÅA¥ÅCÑ÷’Yñ­d3ÖÌŽÁÙZËF»Ò® @ùTàB°Vxh;Ü{i™a¾Wß‹Oý,ûë >-NæÙ8iwGš¨Y?v-ßøC7üip£sutyÖzάŽ0i[ µtú‡}4T¯5T ¡nI,‡ÀÚ&õ%èŠVlŽc)·Œ¡×—øÖMÝ €x4-îÿ9Äý>þ:0’ŠäSu¶ÀÎÃtçéÜÝV0«>| Æé½Úq›AIß÷|&ŦwïT˜Gó¿ý%Åq˜iY29-Fp'ABPZ›sNâÌ¢¹㮄ÉYúËX­ª;x©ŠÕ2F‡»ƒ~>Ðâ׎XDˆ¢ê‡Ùjú–¢¾Èc7àJ8!%²ÚÅÓØp5i 2ÌÙiO„ƒ&™Q3lÈ}š\dN›ë~w¸Œaq;¬2MVÖ×¥Çß Ö/Pƒ«âµ†ÑË¿àëÑ*ñ*€Ž—â EÏóÀwE6&Æ£™1‹¡kó ãÍÝ—u"8…/­ª[äÅ‹:N}ñÞØ×ÖÕêV>÷%ZñI]À5°q=’¼N ‡‰v4¦8Hsq¼–­î!] ’½ .Õ™n½<ÄÅÒ]ôºß3´gÒ Jà·ôWsu¥Zh´1þŠeÂ7Q¯âÛ>åZÒû=Å~{r´– <e¢RÛÏZª\©áàaž*bìÅø3ÆŸ‘G3R2Õ=7xÆ›`Ip>Ъ,Ä6¨ J±[ X^'ñƒyn3xUÆÖ³¤Ìf‰šÍ2Äk8+±úÓS³¤ÖŸ DŤ3)ÝØi®:ÌØZæ’E–(ßàŒé¸põK}I$6»‰ÑVÜ[ŽÈ'k£Î/—´þø rå+ó'Â%-GKVj…Â.¨kÜéâSK4ALVsíŠ5Ö¼LˆÑö‡CŒÆ£´·Üœ["êú%DˆD‡ÆxzŠJcìC¼(Ô`êxUÔjÕ•tížRÆ_t_ô>!­q°ë9j”Þ  eÕŽ@<Ô«z¨ñ @Jƒ­[ ãÏ@O{¬d¼©h€]n ÿªÔ¦GLÑc´ÈÅëï¾ý(aÞBEÌòìŒ7ÞÎSChc>ˆWf³Qq PÊYíðsÑŒ1î-Q2TD]¿Ùnè n…G¥Ï-™âÄhšuTe¸º"–ÛW"£L]%š©ƒ%Q¯–‰åsT40ÌjÏœPÈ?§sMkg˜¼ßKð™»ìÁ,è›E¥¥+\DêÞš¬f3 ê ­•+@G–ñ¦ˆëà%r°ÊÂHfqÕš„y»¥²ÙÀ÷Ââ´f@ … Oòi4õ€ *íÖ´®EÌfЬÁ"K<üocŒ‡¸ÿuˆÑxŒ–ˆÔÊoÀh÷ª×òÊ%*C„Mâ b„î ÐÒïWDkv^&ÏÌü¹0 MÈ>ÕcÇÖ½¥maÀ’Ùñÿì];cã8¯=¨HWàTûuóÿÎ-·Ú¸Ú¤2P™¬Î-@J”Iœ83ÉlPh<¶BIx¸™á¥fd•¬È# cZ<Ïé!¶×:=ë¿"'ï‹«á/Û^N–æ[¯;CÀN”„àû¥£ äH%Í •RÊ¿ ¬.˜^îäƒSänPB&ë«u”DÒ¾ xu{:˜¹?˜*x44HlnD ßàoy´7/÷œ|&ëwÑÄS·Ñèéäo.gõ{åúò› U,d˜†RáÕÏY4ï»Gœ´~!H+ÛÏo°ñv3è‚å¿9~pŸìq ' è\œNì8O¥›©²Ø¦ãkð™ø¢2˜€^©xÓNÜdï[þ#6ð­Ðèkß¿Ñ6816Kψ IDAT<4)’8Aw3ÚÑÑ×ʰl5»äžý¸i`$Ý5x ÂRøçÁµhæÁàR¹ú_XXÜÝ CVªyUÍ´*HV13½J)`Ó’{ø hH={¦_(÷¸è¯èmúð†ÅP‚k~j_'áI›~44¨Šäáß`"8Y,žµ~_'·’Z}9ù„ëà{n)^4Ö/ ­CñƒÈÊù|dÄH%Cs)ZºYD.NªÊ„ <=æëC/pls^„U'Qu$Ûï÷öx8ü»w'ˆH¡yécƲümË·|R™s5¯²ˆ__›Ø A‡“;+J¸¾6'”°¹2¿|ÄxÝkb}oŽ|öL ¨NƼ±TJvÈàø­›6Þ+i¡¥Ñ9°°ÚÀʿݾCèwmâ3ú}~…„¸°k@6 _ž=·j#ý-ý|v$˜Ÿ}>acËßÄŸEºÒÊIGÝ$–_ʾA.Ž™·-7 ¿¯¤:7<^zhzuoPYóæ$<•Ÿ¢ºëjh/k׺WÚÁ{{ ð«™[p ‰¨Š#ÃëÍ=×ÑÜ4è ¡R UDÉ£ªd0’ÚΊÜÑ34‰@K“#ìóöå×ù{ÉU·Ê¨ <¿Wï”En¬±Q—²Ón÷ÊfËÀ­Öï‡ø¾Š°³ZþÖJÂïKì/SE»š'êölGzuV"V¡,å¯R~ɪIG…7*|3Ô×TÛ;ÉyS¯~2¼¸cïS ü?P•t;Â+龨ön ëWEÔ«!‹ìD“VøÕ·ü-¿ONr0äìx[[C>¡oï÷Ê5´O»øíŸ$K¸gÕèyÔ5ðäìÕhˆNiS$í¬ý=Çfmçôz'£ùêz¯mõݾdÓúÅ_ÐVAøJ(Ä?雿Uÿ¸þÒŠsš)¾Šs8(5-¶çZG LdøJ’LͲg^?Ó¥ÈÀªˆ$Õ&3‡Wòhÿ÷÷ÃÃ?‡ÇýPÌzÙŽ’‹ŠÈ_¬ï§Ä/`¾[®×mP¥›ëîÎ÷9Q‰l›™•.'ÿYrKǽÅ[6&í°ÊÖëñìˆÁ†Úäêñô†? ç·*žÊˆ¬rª¼‘ç‹öQ‚cðsÊ•ó·WáÖ¦% ¤7<4gk*idf:oà•‚æ¸þНvϞ*WþðÖû\[;Åõ Ñø†p$U8H‡À+† À—ð’j'Ìð 4öº­k1’¹ƒ¸yL+ZiL™ÍïŽkêúžíI§©b=û…ÏöußûÇH§Ù~ªUŸ¯Ÿs50:tº‡øÄ¨´ ظü‹w1˜z}Iî¶qV‰ÙÅ“°–.ëÁâ$*ôq¾Æ¤]\´#ý/rœ¦Ø93BoO]Ž›Gžþ¤_¸Ý }µpko\¤áòìx[ûu—[>$ Aôð štQ͈UúaÏ 3 Ä̇ýãþ°?<<<˜Ý ,›9\ u× ¡Å«…%…O€ ¡²9Rè|t’/A-Ê]MF‡ JÇi' M<ç½Ç6½v`ð-/ɘN:´|àÛu𣛛;IGFIEJÑ]9MezÕ径ÈöÃóÇ7¶ÿ;qί•×%ŽXÝ]/vopº×`McgÈ„í«Y Bo±QŸóˆü¾¹­"ž¡„‡/kM(Z¼9v4{²ý¿‡Ç½=üh¼BDЇ]VÔý´ò®ßð·¼Rî66ØË?l¿Ü<Î;{lþÛsøzãaK’[ ÛŒQLEs×^|Î_úc˜-î%Iªp£âhèîQ)$j†4ø´F_Êv|À/W¯M›ºZºKâ$p.:_àš¼xÂöÄé¯\ô"è@Ð`qàóÛ^ðÕ­g|è°}ÞzOú¦áTHëÑî²Þ¡,àÅUÝØÆ÷CO%ÃL•µMˆ.\m›Ù8Ÿ<º–¦i—–Šöò4@#S““ü¡hɤwôÑœõ‘žÐK¯îñ°oÐRŠŠì~bO<ô¨ïžÆýaovx<˜FiŒ> ‡ÔÇIÇZ@B›{îó×)"}¥wB«[¥4YJñðÖ^fÉ%öŒ‚"(’*ÜkŸö8Ë þ(—Å'Ð Û dñåû8ÿüâÿZŠŠÞ8A7iGWDä.X‹6a÷Ñȸ±ÓØõ°÷~|ëoá\-Q"j¤ÑiGïL%Y¢ y)¥”Ò7òJÖÈâ0@ø×äTçüJcè]}̈d‘]€Gîûý¿fO‡ÃãÞ,ET"&«7§YP.Îb`”ûÎþ–_-ÿë7ä^ƒ«!˜+º*Ö%^ä¢þ.yªU~Átù@ù:nèàÊNâT©¶Œ«{*ÒX2Ð|Õž…‹ABøýíÖož_%þh6‰ Ë”ú‹[7½¹™‰ðfý•Øî‘g}>+CAÅÏÈ:˜uvŸÒÀŒÿnˆ»føÓ]eí·öQ—¸("*BˆaX¹³+^=X¯ºÝ Ã5Aµé €iäxg´jX*#¤/å’l]D1§ÌÈÆÀjz^zÒjOjóìë!èqʯZ˜/^çÔ¢ºŸí½<Ùhn›»”é‹$zõ‘Ãé=©‚É ~ä!‚Ofsw3;Øao{%KIEwùcÏO¢èê%Ñ´ êÎŽ ˜ ò”ç’è  E°½H³aŽ:{Ñf–R‰mŨ;äLάß;Èêt~öº hdu'û ŸPrÑh1Ì3ÇÖx5—–ý{É!ÍŸE¾ˆõ{M®O¾%8à×­ôæ}.g)Yu'’Tµ¨4ZocM|>ða›ƒ_üGá=Á*‹$U€G3³ýãáŸöû½EiôJ47ÇÒfuf6:®ÓÅE‘¹oø[NäÊÂ|§…ïk/Ÿ×¥?W»Óó7êé9ú‚,ýpÒHs@=Cél*9ò¨o7„þh!!Æ MÂ$NÕp"6RÀä.ª€äÑÅ"’ “«¿ Ô6ï‚ý§éÅÍÖïæÃõÑ4Y2ÃCráäKΓ“€ÀE ïÁÛí” zeŽ»9û~Ivå å»ëH%zv¿fòœIçšèYO/:(7{z±¼Y‡lèš­*Ö`'{iY*½ÃÈ־Ѕ3B^V2¤Í}¾Öèb!ÛlãÞÏžû}2è[þ¦åâ˜Ð>ÀκèBºI^µÀoœPÞ”•^=Ò;}0–yÌÐÌŒû÷‡ýÁÌÌ:C©äòó‚•R F飾¼‘D²ÎIÚ}xA4†+-£S§Uß—ýèH*H,ùGl^..Ì”¨1+ªÉ½âÔ?y¹¿dsÿ`×v™©#ôü´y!}¯oÅ;t88XÝŽt3'#v%[;mï‰õ{²î}ïæ÷’kcúaæ€N7Vzµ^y>‰’ƒg^´»Gh” Òëû”Œ¶ž—sž`šJ)^»f%©'6ûÑ}Ø?ììÉìèæ†Ø³Få0åš÷®I-qÙí½‚ßàoù=r Aô'ä}œé;˵|à×÷` |f§#ýuø¨/°‘ª3«GH6U%Sá¶ Ý«ª¸'QªÈ°Ú•·#ÝÀá¹®Å>‹mˆœtÛˆª.`NYßWÇÀÈå[dÐM÷ÄÁ䜫öÆVÞ®¸"§tµÑÎMÊ膇ìªññ iâÅŸNlØgO™Ðn“g&£ÖB¯Ôàp…JäQwz0é­ Y > WcÛภLš¨6ó$¨ùZ–íÐÙ™ÒBÝ9¹»¶ž(˜ºqíÒM´~;¦¶Éê®Ê…Û g~`¸ñCöóRët õýr„deÃÞŒfû'³G33;Òž,Øõ$kÙ)v,špk ±uî ЩÎt¹¤Šx"’¢. ÕÁw$uîšÑ“*Ü}‰÷J]„yàÈ% Tu× /ù‡…Ð?§ôazGœ÷sí%^”b…Wº›=é’µìJÙþx ýXù:P«Ï"lŸ/2üŒ{ît+ìg:¼[¿G3wø…D½_‰L¨ŽÈ WÚtÝë]äCõuNV-vLÉ¢¯Qæûÿ{3Û¨U©§•àh^©ÕœèE€Ý¿±ñoø[ní ¿¼È¾Þï8™Áÿ™Íô]²ÆònµW“@×`or4EêÜKï3 þ(ñ…#«·Ž4SŠK)J«DƒŠ»”’ q,éXI–²ÀHÒ"Á‡•|”¸ˆŸãTÒY½øò5÷šù×mà+ïðªA¨“µ3öEô]gýi—ÚßÃèaΊ¬|A#_xÌE®ÃùñÏ!²ïªêô–ýœôþ,£‡Eúg‰É#€c šq¤sêz„ ”¿~ŠH$)õ/ €"‚d̺¤ç“ŽFd“Ñ«ñÛˆÁ $^它ó?7fk²«Î:™Ñãõkͽ¡ ûax—œ¾_nƒÀøGï&¿o‘ ÇVêÔÝÕíÉöÿOæGGTDþðöÿì]±bãH®,DÝŒE³É½ðþÿK^xV´v$ bwT/@7EY’gf×óvvÖ<Y$›d³‰ …‘Q¾- xzzÊR½T¯™Ok& GÇ£|Üæ›bËÍrH”†!ôzdËx¨l}ô e'¦Â,‚¢ ÐîÜ!îƒ#äÔ­ú3³ö‚~ßÝì¿Ã;|?\tç¯ýz­îÁláÍ­Šª¨É,ýUôï >þpû»Ä·¯À&ú³ôq ð;•Ã[øê ˆ˜šdl+'›f'‹t<2²`P–?/oGó18.}¯ØFi DµŠ,¦pw9¹ûùÅý|f ©jÕ `ƒ¸;« ^w툪R î`˲çØD)?ð§}Ú¯n7†})É?¥ ëŒžr VU†„6„ñJ>hÔÈɽ—ÓX⯚È>ùv½è_1ÒõQdúQ'ß‘âëo¡/ñmågor¡ß£ ܜ˰Gc»üVk}‰*ü Àô·ñÁˆDƒ"3À$¸dz®mt4A§¿œ ¢ì³U#¢RV—’zcÁžRä"Å!ª~¬ˆª`*o©ÖqB±ï'1Ï zuØ”áq“Uÿ±Ðq°îvßøÛÙmú7CM)dµµ8ŸÎ§Ï–•ÑajZUªpÊ8k-¦•AÀæS“ ˆ¦Ç6oîˆ`8(!:ä:XBº¢¦Ü4x)0À»¢;TÈj…@¢Wú:¤§#LZ®…òÏ‹”þ˜L×.œýø˜Ð.RC¶­n3m_jàšJú §ùÌKQ­KZy]·d~•²9©¦“&Ÿÿì³ûÒÛ3j>Vä:•Ã"W‘hàê–ÓãÝÁפæÎ™“ 1U’Æv¡é6W¹Ìœ1ø‚£/K}ÎHQôQC Œ¹‚=¤ÒÚ=õ‚¡’ÙšµŽé+ÓeÌ/ÛwR›Jƒc&«&¦¥Ÿýôrbx4ú9üÕS¸åüêÑæýj^bDO2?ÃyåP­*ÕŠð 0Dþ÷!¹œ W@iVâJ5ÏÙ›k[TTt1)ã>ŽÇãÁÇ'[ì2‹ªj‘­6o?‘Æãšw0n+¶RÃqsñãñ´Þ†$öCÛÊÒú ù=²òZïDÓ¥ŠVD£ŸýürŠp©Ù{8˜ªm_Qî”{w)è›vz›ÝêÆÿ¤egoÆ?’´Á3ÏßìF¼ ÷}×Vï èýãÏÓyè/‰^ž©ä CBD«‚ˆlïÖÔ`óX‰*ǃ™™E•QU~}‚¼ó2¨|Sgs{©÷·àu,f»Mû[6¾Ã=Ÿ WËÃO|•KÕã—ƒývô8p÷Óóóÿ÷¿Ï§S¤JÂll¾°­Ÿ‘¡g ±+D‹!£@¢c8òIþ´Oûg™îËù¢C,”>é”7©¡±{ºÒ¾¥¶ÞÚ÷Öê´û ½Õ·û¯Iùå­ÒRT¨VFsì_”$z¤Jê8PLé¯ÎªJP±:#ØâÔ€t5*ICªˆ5’|¶8¿à —”ý,†”Ïi£èePx ´šì–|ÈhDCf½Pºû¢]‰ÞÜ;óä­ùÅm !"EfhÎ5"ˆÄîÌB¿‡VÀ***EtQ”ñC Ndë«G ­j‹ ˜DÀ[ª‹!ZdzU]<‘¤M¸ÎC#¨Èà‡]Gh€P\CUíÃÏf °ê3ª²lž„ÏŠ\ÂýÎǽgS«/®? A¢p÷Ô°ªR÷t¡yN¸ ßoµŸ5ÕùUûè$íO”oòpFŠ Ðus;F¤R.¸=zpe–Žª5PUŠNjñ÷"ûÛA½Ï­Ú!ÚÝ,Ý"ƒûm5ßÑ#×Â=MÉ̲¸O!A%1Ÿ‚ðF9=??Ÿ^Rþ ðî%Ìk!Îqü™ÆSÊ¥ûü'þ´¯Ú„FÃn†¿íÚúOµÉíÂ`he:ý¯x=ÜóÐýîŽÅvÇFF"·ð6ftLñ)Ñ 1$¶ú·) þ|ÍÝC+_ŽºHVNº•„ÙhêÈ¡BÑétiB¥,ÂJD[`Ê38€î$í`Týì©O#U´0ºÓ­˜eÀDÖêÙŸ6›A»;[D-P`‹™©TCV¨‡˜‘ÚDnìááѨ[ßÑd ¬îAP´¨ÀÐÁŽXÝc@>`èòôtäæSv@J“‘:>§‹l[F‘ƒÊË‘•ÝÒ¼™Ò5ðüüÌŽ-  è$ðïÿù÷Ll*±• 8Ááu«¼õȨ"°-^NÀ–‘.IX˜9¥ˆ•5TÌý˜þp¸ûêôˆ6R¾±…Û©è Ç7E1ÎùLP¢íØŠ ½@j¦´Ý ¶vÀ>BH£šI fò?P¡P‚ÎT)Q-ÕT&ïž©ûÉì@T7„ RÇsh4®2 ™ÕÞ‚g@IJ  ¸£±hú@Z-[FeŸ§Þ³-ä-ñ*ó!E͇Ãa{*£Ae²!ª*ˆ8Û`˜- âùç¶ù×Ô´S€šý{»,bª\¿˜©mvi²Ñ’s ž_ýtv¾úh=dÄ&Óš—mwŠÌðûDÚHÕ†›éÅKÄŒƒ0Ç¿%ü7÷ð²bêgA@5{íì/l$(%´ªÈàó3 mLl1dÌ×ë¶Œ+¹ótófx@¯¿£wVþq>¿i/û~ýáü™Í«f «¯ïùa °ÌÊFÆ ™Ù˜JàlaUÅD«™‰= áÛaÿ¢Æ ý>„Á3Ã÷1Û \þ¿Í¿JßýxÿP|5÷ `˾æ„,ÛlÚ<Qh0¢‡¯N÷49e0­ªU’€óFfÿaÙˆKWõYù§÷7Ý݇Ø ·‹Ïù|\F²a¾[xøé|>????ŸÜ=s @ß]?ÆÒ,!¹ß@›mç˜c[t(ŸøÓþ¤ýú«ð¯l¤1D´:•ò˜Fõ§ìÁ‚ÿV]ök!õÇœ§ûG}çT¦åvû1™;UUèõ,ml•á ¢ñür:ý~Ö*€êo‡tåƒÀ &U´–²î` ~f›MIiÖMÈ€ˆØ2Vj-ˆÔYø›ɦ4áE{ªè€Ž-)@‘ü^,¦ëh< !”-á¨ébH ëÁèdCÂ<²¨‘ô»Šhö³uwi‘ìM;µº‡D#léJúéwØÁÌìðÛÁx&WÓIwÂ2k‚N3K±tŽ¿V2ºUì‹m÷ßAØbX€b px¤ð£ RfcW'©‹Žh_Ïù&¿µ˜ŒhÄ"hÈ\}G @º{Ê "¨äšAkg\Šôò²KŒ¼î†šzî3YÓs¿YQÓçN°Ô Dt„T0"&¨‚>ذdDÈ„m#‡,åŒMÝ,Ô1Á2Ñä P ”’çέ¥ºëäPS{ b“¼ötë9´¾TT¿¨UÉc'Ò(™EÓ-Ûìk°h{ØÍ9 ¬˜þÌ`Î7&¾W(")_7”œ®š$—I`Î(ÅJÏÖU±ó‡¶uÀ q®s[Lžó ~qG½£|ªu‹x¸¯îîþzö—@# $±bG4Àpz>ßÄÞ¹ì $JŸ„Ƽ ¨Wë'HW™]ÊYwkæÔElmÌqqÊÙ̃€[Ç”FÀ¥-ƨvµmCô&»š½·2lÇýKˉ¿Óo‰íçõ†Q¼±í?£®{ô[ 2”Þcuõ ÖˆÁÌ Ð -9ÁÇú°Ï<ïøÏø&|ó½@ï/3þˆÝ·ù_þ oggåÎïßDØmxaæ_– F#D¤ÎN¹‹ŒÕ~_´òö,ùc¹ßñØ>ÙÍó(SpëÁ†ã¿ûcLŠp½ÈeŸ"ภ_Ý“×ÍóËét:ùë9¸Ó}LÞDÈ÷ò`Ž>çÉ”äG IDAT‰~™¯¤d½2%Ê(8úÁú´OûGÙ›Þh'˜ Z‚ýaàqw¾¾üÁýA$¸^~v/›=e¨#Š€ÐX4_0¬’™ÕÜĪ¡ùy=ðåfVA($¸òkÿõ$1µÔF"=²øø›Ùb™Ñ: üÕýåìÉV;üë¾¾Ç/Gÿ?ö®Í‘ÜÖD¤"@Ñ(+9ºw£G×™ý×ï/¸ÛÙ:j)uT@Td ë¡GOOïìØ¾n~ûi{¤z°ªX$€sppÔðܸ;QOøÄ.NÄæ#‚ÈžwËj„d £\Wâ0ˆ Œñë9ngˆì9³D2 B>I¤4«)ÃaPÛÍ¡/çñëx¾Ø¨ÊÂÌÀQt@ÜŸžžTÕ'§L¼öÃQD˜ “R%Ÿ\K/ C*fÇãqA²X±qõå¬êV윔3IfÚÀ3T¨ª}Q´ÙµD…|’¾R{£Vóê6™f ê6×ÔÝ‚› "pZ­ýÚ3ãÄsU}ÑHT´Œ#tp2BÏk¢kkŒ O±œ£÷µo3{ Ü šI23vÄYŒön5`CGv4¨Ÿ›˜ðtfbÊĉ1×RªT+Ô&ìÕÇ ?ïˆ2oÕ‡O²€cè„»êV"9–8‹øbˆxqK6"áÌùêÄ@u/Ææ-ñ~ëÏï"ƒvoSƒ¸—,åê4‰A;ô;ŸM*ÁªIo{ P6+âªtÜŽUꔄ€ñƒ/Ý.œCqÔaÅ"·M²P&‡3Õ ŒŒáºO®/¦£êh:©—–l¢¾è ÜÏ¢ ‹†¢^þ*"EÅA«®ë±Q²X{¿i Ÿ=¼?s ƒoº½­p3äiõÇ«·³UIkd¢å°Dü:¾R³ñ2êËÙŠ»ªŽ: ¸ $¼aRT,EzêrÓPh«ÿ, ¥+›/ýá´öÔÚu³ŠGð-bu¤Cš÷øíõUf;x¡üAbf^ÖGaO¶»±-[B…ÊL .Žë Yq›ÜLÍT'`g<{að¹žÇ‹úÄÃaà,È|<Â'R•P}£™m,]´áÑbçD–½›«›ð9ñ‹*©1Bã ÌÞo ™oЊn% ×hVÅ‹ý˜N-ù­Âª¹;ÇEe4ßjûá²Ã¨Â)j29*æ<ð8¨@ ½‚ax‡‰(5ÌÕ0nc"e í÷…a“k¤[ûÊ€òæp¸g+Ƈc9çLVùÀãe$–!Gò¬Ô½ø• %íPrSï¬][J”µ±½Øˆ[mŠÜµ'»†Ñæ¢V-ÐäÀþr-4{DÅ·ÉTMGÕUÓÈÄF⦄7»ôóœó͹–æ4?¸¢)©õž@ÑÎZ\¼k¡z»œR¬ÔÂÐQ† É‹âš'Õˆž0%0¤M/›ÇŠžÉí—ß«éð½íuCÿÑ6ËúUÉú]¼]7¿ÏÁvot®ß3 Í|R7CñXˆcJ¤…˜âÅ«÷CÖåŸágë³àD-ìØû5üG´{co³l¿¸³oÃÓ "ά®ÛBýKÌ D$ù̳H$¢Èµ´4ðö;úÝêw|åp”_©âÍOp%s$µõ?oy#n(ðIÕL'×ËÉ P–¨í½ý:šÜ£w˜;pK¤Šž¶©¬k@|8Àí•Ö£Êî½2}1ø&ãŸJuúh×m^Ëg¼¥5oye¨ì=CãG!Ás¢Ú©×=ð½†ÅÃF ÊûúŸO&ï¦k´V3¬håC˜@IP0ŽîÀyTÕÓy¤Ì²fpâS)ˆ"›/rºDÌê~#¸²R+ ›ÞÕ#ÃA²³ÅzùYssw¯Þ°_¬âµ‰PUwwsPß -E€°‹ªÎÖyËä0ÙXÆ`,s¾~"”Á™=û•eÚéx£cÕvŠ€›ŽG‰€‘ê¹Zé91¬B&@;> gž™TÌ‚,´ϪŽLÄBÒÄ–¢G|¿žq ‡ýñxYº¡“==Aƒ ëlÀçðöÃa˜¯b<'œL5`ðvàŽóét:è¢ fb$‰ì ¥ ƒÎ5xUµC>HäÕgíë[#©‘-k§¼¦ådvQÖµ­ñ>××yGÞ&db€šxljâ(áäµ$CÓÓóH;jJáìµSSг7<„€âî ‹$tª˜2ñZ'íãä×ø¾ÂnÞdÕÃ÷{5+pwßE9kÓQ­¨èë¢á0„[+©Å‰–‡ø¢z9G—#çmŠŸ¾ŽzQT£‡°ì\ÌhV™XúÔtÞëŽIL84Ó8RÄ÷› ü‘üÑ^kÊÉ£Ñõ|·jó—ùÞ¯ïhF‹­×‰YñƒÞˆñ Öyï^[F7ê,^Œˆ)3WóBFÎ JÌžáÂû"ú¢§¯œ„éø§?Q¦Æ¤%3gXÓgšëÑ[m&»c3330 ²&;·´±†­*äC5Ryjxcß7ÜÙI¯LÓÒcV¬-Fs“bÍôŸ=o^nM½N #¸LA¦uWÕçÓ$-Ë7V©Þ15h”28¯žf0:æE2ïTX8">ÙXNÈâżPƒÔÂcOtªPµæœ˜†•€bÌ,‰‡ƒ¨’V¨ª“?YãØL¬¬¤¢?i1Ïl>!@~ùŒê'Ó`ÃbjØN¨U›.1•Èømo(朴*p°öâà5Ô‘z­‹ø* ­S­˜`Ô 8Ð*[ @öä“¶JZS·~RwA3;"‡S½À÷Ül®0Š(YYÅŠj‰:Úq¨öJÌX8ÀQÖ . P‚bÚ5-%%FQ+¦/JL²cÚ±ìX˜dÇœIG7‡û•µ:p@íE•­âºd'ÄÄ86U9SZA¥Åf`3ækƒMä î"}¨7j÷’úÜw««˜kOÙ¥VdTÕ˨“Ù¤ZÂû5Ô>þç°rmÿ§ÙŒ[Ï}ÞûV6° õ>óŽà Ê °ýZ†­kÂfè“CŒ´Ü8ü ǪÍj1?+ á¤Y1ƒ U¢äK´ž3×úÏí×îÏ£›Àߺq1‹øÆÏžjxõùZ»îÉêž÷v½ ׫ïi-=ŠÀMJ°‰ô"˜öñ @;îkǪ«Œ”Eóá½í§˜ïm?­6ï¿Ò]¸­Á=YðLCîÉ;µ©ö…žyGñGÛxniy»6¹Ï·GÖ-øæ{ßÞÜWêp:|Šà¬©º–6YYu!š³š›Ã_g•ÊÙ÷›Cö¾%Cèƒ6_b%ŠöÏs€ßBMùí‘øÍïªÇ <|WñÎÿ­#Bó«ÓÆQݪ_Yf¸Gy›EÛõ97¾ÇHó›¿}Þk«ÈôÖbX ŠÜbõ´ž„€—oÜöP óŽ€ë ™¹Xå#‡öÑq¼ïwÌŸWû·‰¤ÒêTCoʵͯ¬œn‘ôçp-ß";wM£Ìs‡3À4ä#2ŸuôɸûpxÇ hq5í<ê{ý™M±mo×µ¯¶D…H“¢1³Že»ªq憎bÙqí U ÆàðÖUyAŒL¡´Ù7•]uG3CÆ>í—Ê´hÃÃÌ´øù¢ðÓþ°ŸãÐVŒ™Íì|>=?ŸTõË/_†ÃÐÍt33{Âsõ§Ó ò·¿€Î ²@ëQsÕÓŸÿòWa¶Ò竌³ùðIÆ‹œÊøô¿ÿ‡ŠÏÀþ0̘gÜàÓóóx9‹ˆŽ¶ÿ´›—àæÏ¿t²ñÅǤ_þgc}1g>_Îáýššt¸% œÕŒS(u·¶® ØÕ±ÀÏj­ÔVõ¢#|ž(æÒˆå7ÀÒãs­UHv”Âiq$ vvÂL´fÈà­TòNZëÜ+ •0Ð","Ì";B†MµŽÇ‹ÎlüãaøüßGb‘L«ééùétGÓæ¶Uðaü¯c€íç}þí4~ÕÓùdÅä _>ùòËQD8’ÒÐétúíéô÷çS¤ò~ùòË_ã1Y1/8¿Œç_Õb ÞûAöû½Ä ¡å»«»em¡Ì,bAh/N‰>Ÿå0DÒ¾µ”ŒcTü¦Š¥אּºª3A'5ÓqTUÕ‹Žd6ä?q‡Û¢Ø\Í»9nh"Øœ¢´¸¡FÑ/›yæ„…ECI¢r››UBr¸°9¬8“5G=h!AG f/pSÒ|­ zSê@_ØC ™!ƒ»—Ñ+އ#eöàÌVoÊ-¹õü¼†ª—ï7sTj¡œ·~âþ§½bÍüµ4wjýk³QÚ¸œîó_™î<³Êç«kWK^ ÅE@‰P`ÅUu¼œ³ û!H@¨@%â–¹m+®MàìÛíºÿÀ6A‹› Þpœ×¥7vnuÖßo?/ü”ŸØ®ÀUlåjÕ_ÝòðG¸¹g]<íÁúêð¢cQS§f'ÏÓõ:5,Ò²Ú?B©15Û ¥ oû¬˜5©OÝàÚê›-#0"€emdFˆÔ[-ÔC1‡"%Ä+(cYÝTŽìwŸüü¢:©³ ƒY5wÓÂ>©$ÐNÈ] ®FÌ Ba›Ô‹Å8Žì'ë}çæ22¬ðì(”°«€_D „Nå—ÇáæÎˆ2¿ã³íWïÌâsï°jœZÜØ™‡Ãÿ1s&7dnßJ–•ÊåT¸Ù(ä Šp“ E¨°ã*pèݨƒáˆšÕá%rwâ*\UCf‰ gYÎ릈&L‹ˆ."*Aa®Ì›F1ANbó)´,˺®£ÔÀ•PGh,ÎâçU ¸~S¥ÎrY‘DMß®7&Ö¢hðîÞ ¸ðår‘E¨’ÜÅK38üžîârfA‡FàMQ`=}`k®CÎ×UÍ<óóÍÍ3¶uÈË^Ù<~IW‹uQ,v@rç M7NÒáÕÑ™Èàä€Áðžz‹ÚûÈá¿8hŒ–‚ý®t„«×^hŽSÕªÄì€Ée±#+½¥1Š}$Ÿóþ™Ï9´¦ÿÉ6ÁúÁc±M(hßâ»íAÊÂ6Šuå …îj¦¦èŽBLRÁ¡¿Ã“ïáÛï覔ٛ^?Õþ¬@Î?ß>+ýûžøt›$Ðh»Ô}å<ƒˆ+3‹¨Mã:Á2k€)Ñü0×Ì‹¤m!ô8eK¦mû¶÷}LNë¨-9$gÊ ·ê¯¯7W½Þ®>ÝŒ"졽²)qUΉ©EõÄm—%G6ùJ ¯Gþ†òaûåÙ—ýÙTÁrþØ27U@É>ÎtøóÏ´‡,÷ŸÎâÏf£m±5NüÏ–)¯[Ò€(P°œ|9¯Qòä×_ òj<²êFxš‘þnKÐò; çt¾<ã–ŸØ®†=*ûŠPD¨ ÿ¹ìÉÏÜù ¤û^$`=i‡rœ …˜x¦o{[Î+:®t‘@fò´+fZÎërq|»ÒáD˜·kW±žEo Wg¬6;P—¿]PðúúÊ•è$´Ÿ‹`=ûo/+^oz·Hý­gÙÇxa©üú¿ÿ£Í„åz».*"B +ckPÓH¿K¨d£Y®5™aéÏPx{…=ˆã°©pQüáPÖ…»÷Ѻ1X=PµÛ¢Á ‡UCcUF =³Ø ;‡+‘ÌLJ~wbˆÈ‚pðÌÍínèÂBÂB•9Ç ŸDªyqkl4©DÄ#IÎqíü/•×—e=/€+³xP¸XEä$”bWCzªòº.(ðnËËà}Åo«G‚Ôš ‹ˆìC®BŠ\ÖåöFzwf‘l!Îpwª¤'Õ» „Ê"‹\.K¢s+ÄIM¬AU˜ çu]‘Ý®ßn‘¾@KÕ´(X½Us5K)µéêä"ŒKÔü$|¢@6@5.88“?˜«£Ã*$Ô_ ÊuÊ×…XÎ5Ó3“Þ#uÇ 2Bsoê‘ÿ¯0À»é¸ÝPàDÛk$Ψejïw¾Û<Ùò“Ìö6À²Ðݤ4¶Op7>2~elÚ -%Ü©‚˜ä$Iª¦¡bô~ÿßkåÉë{–~Žù>þü£ùè`Ÿç~ÿ•=Þèšçß7xïZbîLQ‚yÇ@â8"š¿›êÕƒ9¦Qëš û1öCn‘¯‘*“ÿJóbÇ{ywp÷UY¤¦±¡DSˆ!N¶@kÆfPU¿k¨^]o׈$²‡ozYÜCÊ:fÀâ Ux&9¢䯷Ú"ĘԀ÷þ!B‰»+üâ¤7•mV6rã®ä,×4V¹é£ )òä°ÎÉÜŠ0Ì&гC¸°<@:>-kÛ²3àeqœfœµ)7èÝP…d†®Á[¢šÑ…+QGÙ§šwuø]ÑØaT7—xç£[#S%>¬ щù¤¨™[`à¹è!™Õëy•e•aŸézȲjsr!!¸p W|ËH;¹°ÈYŽ ¦j\Á•—EäEä$  2³‹š×t}õ¦ªêf¼ëä?gÆÃÜÑê #€S¸;O š™}šåL)$ë*¸Šœ±Ž¼’Ã*f]¼¹ 3Dž‡÷(sEÅräèŒ19–ÀïîÕMÕ —¨MÓ4¨)`'¾HÁ‰üî4’ØŒg»#4¸1ÑÑOf›ïOŸ‡ŸOgÁ*OÂGüSŠFr}<úøÊ ps Ö‰Ý݇žâzê×9`Ã'™vþ§æ[qz>¿~† ï÷!VýsØx¶|öjfxs7|xÔ Ùôщ*nÏyâD &pG÷M:e f¥)ÄœíãsÓÇ…áØ,nrìÓ2ikö˜ŒŽ3Ù>jSu¿`И#ôjÚôv»Ú›æó¦;b2%XsP#>˜Ù»Yóˆ0fóZŠÿQݰÙ67ö†ðÖÃJ%ªüåÙ—ý;Ñ»y”A¶Ccò9ÉÀAòù¡öÙ3ÈS‡Öà’oŸCœåÆTÇú²™%JõVÆ/—x4ßn£¢,“,«ˆ0“ü¨ôïl3žéý“ïûñÐÛ4f°ákíŽÇ˜Õ æwWñ¤ÅÕ÷m¼¹šÂáâ¡»ƒWzS‚9‹åte#½™»©©7{½Êú²¤Pó0¢,£ªÖÖã™aäTÙô¦7 /"ï‡XÀUÍî °øÝÌ 3|þBÂÂ'öæVß»´`]Ä/—ÿþ¯ÿ¼ÝT5@ìAàÜTFÑèkûw›Ê+…å{³7Úáþ‰¬l^Þ]Ü ÂàNQÍdQ6£ÍØF%¡À?;*qw#‚ê…øšy˜~w4SîÖá妕(êEg d$o6Ƚÿq¹\.(À²n'ü¿GŠØ©æ=hsâ‚Ã46hZ3y$»°Ì}’?g……oiÍA¼ü\`={Ì÷kõ®F×úHøü®ÞÌ›¡ ö\ ¶™›>”W²ýÎûur@,ÂU¶(Iø-·¢ Uý¦¹ZíšF Tp7À¹–Q 1æ畘˦”™, @˜¤=³5L0?&ê*Qäõæ¯A,o®M­©¾iÞ¼ÌÁÉç*L<„žGžÙ³ÍÿÀ-þû™ÂåG{lYâ.~dw' ]»ò­ÜÐÝ›£¹›…÷£Ë h—Úï.T= æR‡ë[‰K£JúæÜ-‚))0pÓå¼Ê‰¥NðÆä™ì±Ì@î-ÝDðÆTÍ#€ª,f}¨4§4:´8Zð€Á¸ ×€ ’ôÞ$rÚTÀ•¶fhä¦×·›ˆ Dûœ«9jöÌÞK~¿§û¡Ñ“˜#ƒl$º`T ò(ãµÿ¾àHnaû8œ"ÃÁÚ}„RoÿžÄáÂUG•;ˆ,tbª&Ýb·\fÙ¡¿Ô)4‚Só«Ú×óëCüHK×ègµ½ßgÇîûÏÞMÄÁ½?¦A{Åá Â¤’|wÜeÉ2ˆÿxU8+HíÝ6\*ªõ]xw^ÿ c6ï7Þ´1f€™lOî®Yzæ)åØàªz÷PþWU7%€‰Êÿ(œ)èC¶yÄ…7ý z÷Ð(Ä;Þ*x=C@%©ŒJDŒ‘þr€¿ìÁæÇ—ý+a’ •šT?6ÐP¬- ‡v0í‰ß76ú“¸<;„£“0æþC{æb?²gÿ°•Ë#ðžÏ Œš»šD%ƒ‘\ˆ+i%}»½^_©q¬ûªüƒ³gö!°ùá¸ô¤ŠPî1Ë‚ß IDATÙÓÅ0@xg¼¸ªZ5™Ñ¿s®¸€@L[êïàŠ¯¡²«ŠžÌD®™Þ —X^DUQF£’× fb:‘ˆPek¶¸ÌÊOL@åË…Uu=OÙcvW.B'ÁßÛ…aºçã@£pÌîæcäcKÁ€`¦×ßoËëë"<õ­7·®^#q·86ÁÌpŸ ¨óAÌf¼ç%‹Å¯pŒ¬¸"žJï¡ëÁ[x^ D”„+nqÈü°{ ˜zàœADVòÇ•©nåˆV¹ÈYìÅ…åúv…ƒ8ð™‡)" R.=¼]¥ Ý¢ƒ+% `vKˆDdép79 íÇ0``¶«È‹,g¡Ê) 4ÂÆ\ .@wŒZÉ®&ñh!ñFŠÞ_ÿ·óäô'íP@èg­:€ÿÃp!Ô- ÀE€#0 €‹#Vƒ|górHFVÀ¼{GGä¿ËI#SgûÀ¸†U“—Úü:ŽÜŸð3–ñ½õûƒOñý–Ÿ·óséx¿ÚúÝÉÀ ÑñÈûçǧa §õÛÀA:±Ù,m¬oáëŒK2­$⃽‚Kú¶óÇg#ɶÝ bƒm»Xà‰¶Ó¢Í<Õ9k®«^¾®ÃQ˜èh›¯|ôp«†@åí¶«5h{DãS€¦¨Ó8V›B\8¹¸1-ÄU¢K\ ày.~¬.÷!ÿ rãÞ »ã»ï#60ýêüÕŸGÞ¿Üíéöòl+ß>åq{‘, ×FTàÂúÍòžÈ‹hóÕÏz §›8ºÉÉîý¯¿F&hÙ‡ùŠ Ͷ¶.œô¤s@Fý¤ô-¤–®æo‰Ü»È›ùÀ §—]IM­„Jgh ÄJ¡o è‡ÞzskÊNìõãD-€ºY—™Ýš2öAW³«ãªÞì­¾%…ÒÌy¦TL½;ºo\¶B—L>ïô [±î¦fæ'©LEÒ?=Ò¢¼[`Œ„rtG7K‚ú§2–5{}Wë+a“ÙpiÃÝÀ\l Š–·ßáŽH2È<¸a:©+µ(Ú¼‹ºw&…Í”²Òf(å¤_õrRùªx‘Câ(+¼]ßµsÕµ !ùx´Vr$1ÜìØ³®'°ÍÌ.ªëe¥ªr¢dÎö ™ãš¦×i2~åsäCkt/Gm´§÷‡n l•SÀ5E^÷è†<¡€*ñÂÎ.WE'8Dm«IÚp©`Šð/¸²Ôˆ93W¢…¹!ªëÍ`à%Ѓ̕ÌÝ;!Ãûc¦Gùhr40ÁJ<;‹8'ÐÌøk<ÓútÔVµjì¡(³Á¸$Û›e"€ eEq7Zi­+ ¿ým9÷œ½£›ß6|èîÃø“”'éçëí¬ŽëÅ”N¢r 'OÒ›û¸# Öh©ì12³è1x3¸[3ô-R_å“HEòú®y"£$ÂÕsÞ?¥ý{&>ú¯_öù_%;øñûÒ1ýŸ;Ù=/,,ºƒpäË„W¥$v)¥Œ©ª—oƒPœûˆ ‡ïlWyqÞÀf`ÏúR@069˜öŒ!;þ×l?`ÏAÛ«ÌA@çâŽÙ[š=óžYE˜ÛŸ›ú}²a[ÕÇeó`¬Ï€7ð¶I ^ù(‚õPŽ>þ½L„Š?Ëx“y4ÍS&©ôcž÷g׳£[p7 ^|¿u¥Þã&q$ûåíÈþ×d³IÚA¾k=þžq˜r¼s~²ÚÍ·wš}·ƒKòaTó;ŸÄ³«|“ÎçqWp“Ürß‹ãùþŒqÀ¼ñÔ3ž:OŸõdÞÊ“]óéûò,2ü£}Oö]7nfÍý!5W[³ú.Ïà›šÁáS{Õª§Ó«š©®ªJ¢¯"vUš°ÞÍ{ú‹r ò}äý¾ŸG±®A”7,CCÆà¦ýó7Fì»Ç+Ê'AWÝn­o¸#t0³oeQ9õEϦ.v±æÞÜÔpz˸\+8_ÍÍÏúYätz9É'že,c7=ŸÏÞüóÿüîÍÞÞÞPчjèÆ•Ï_õ|>Ÿ/çW‘ß~{cæ9à‘ªÍׯ ध·¦˜žÌ7„ÓË+"ÈÌÖì|^½›ˆˆ]•E¸rVi>{t³«#*vθæ\a:"08v$ƒâ¶Y‡ýÒw¯UàŸ;ÔîÖTØÍ"ϧ<ÒÒNÖ=íçÆ»G¨Öè–šÁ"’Và¦z5k.ŸäòEWUýÇ?DäíMfg~ÿçù|¾xwd!ù$A‹Xo ¼Ã›ª©šZ3múw?%”Ý 3 îë—UÕ¢¼3NoøA"µ {s½š€£œXL’‹êúE˜‚±é$”wL5ýüÏß­ûÿ×oQ|jÿö©êåË}TÃ*ÀMÖÀÞ…”EææW÷æÖŒ"âæz½¨9¨dM1(¦bBž"E¢)a0è.À¯vQ>€Éb]Ä€éu<èNa`“}KÜåÂc‡ugìVÒŲ¸6 n0s°‘s!÷dØö¼Í,;c¹w0@1òTÙÅ "9½RxšŸ¿®ªþÖ@äÄ [3\”,kÖt7˜ãÅþÛp/zXÇÝáêò‹þ“}s3#èS6L3Áò¼uHgB»wØãµiZÊ1[ƒ $—Ëz>Ÿ?>›)3>½Êˉ+ËKº­m„Ò³ú½ƒ·ýc§¼mšØO˜µsb; »êz–²IXæOr³ÈûÐ÷:žK?F#P¯ ýµüãöç> 2a*Ëó?x¢ÞÇÚ ñFcÚ<îܾ;•°K°§L¤š“ß,þgÝᦚ¥•ƒé÷õå•rw!ÉôøôÓ¥'”›£2‰z` ieDdÀºK*¨ˆà-ðôq‡¹is´ô”aîæ ÞÝ qäb£àòEÑL¼iTª§J¨äͳ–[ËMjý²ž?Ÿõ‹Z35WUwAXæ@ÆB /xfU³o><>¼Óä X’²$¨’ØaÞ”* KÀ"B adPƒ¶¥ãÃþï—÷Ö¾ÍÖý ÷ä‡üõåêõoëȯ–ƒ ß»=ôd{¤w!°o¿Û±\‘e“ˆÌíÔ‚(Þ2ØÜ¾iþ $ÕЇê²cï›è7wrñ›KhßþP?¨žÞÝšJ£ Žå‘ò$"($ O»t(|bQUjl>Ð\7]+Ì•"ZåÍÁ» yZ™T;š¢ãï™jä¶’]m]U+¹Ë«›y‚Ά§™§¡ÀÀìŠ@ L_ÛÎCz{±ñönø9Âäð’ïßq©=zRl 7žoðÃ%þYú®Å<'«á&'¢„ôÏpëì·¼°U„Dx!´Ò‡g1RÁéŒO—¡1gd½›<…¹®ÆÄ I•-€ð;|×d\@ ˪Œ‡€bû>W”ñÞ<¨$ )³Á’Œ$pïÄ¡aÇÉ„Añ:ͤ1˜þ‚ÄDÌ[0ÚrÄ6 gDfœ,íáœÀh*FØFÜ—3ŒC w@±Uu›­RÙÃÁDp& ”‚Ïž0¹qT([Ä)ߦ_¦ àÐÿO%– “c°æþ§I?n`Y ðœöî†Ä ¦Êí£6ÌÜŘÒéîn®‹re[1é‚¿ŽÄį̂{¼ôÀFâ†îhh½®TI\rv´RD ;ŽˆÄØY+i¹éÕä*7ö°œ^Nt=ŒØ>B("¨ìаôèN?NßCŸ ó"¼³r} '&aÔôr¹ð«ê—5ÊþZw.àÌ4áÈÏt(.À(5Jkt– Ám{@ÖŸh‡tø1„ Të/a@b³¿3Bº°îƒàÍ}è Y¹2ª³8†µ>-´4gªƒò—î¬_D•'Kí¼‡Mday4»@5íg¦I„ ,À€F¬ºCGo– *I`¤û¢N³ªà0wžÅ¯úÑHîàÂ*"êøU×bñÙÍ‘UÁ‚Y"Þ›60èÊ@¡ÓÀæ¨ï5B¿yð䉈Ž{ö§¦î üëa?³íBƒ4‚[õÝ*N¸°õ^¨nÞ ÁâdÝ9ÊP/ðî6¹³Èwxh ¬™:Ђݰé§VÇ;Æw>÷~8²A  > Mní—÷¬;èéÔˆ¨šéU!"D"òúI‚²Ë¯Ò¹…Ä5y€Z·¬ŠqYA9}Ñ Ëwd˜aóF“"«Á¾gò >AÒEؼ ÀvÚã'p D8¨?a¿'7ÉÌAÛrô0Êçé\Ÿgex‡û!pìa¦X¬9“¾l¼e(@cÀ<Êf†—YT c4PÄ0hÔ`Ê‚öÁ3å5ÐÂp‹*kÁÀš./p#bòA7fZK'FæWwšËéˆT¶Ì÷“ÈúUœÃ…Ø Î¨ˆ Û£™©êªúU¥0UEÎK„»sÛ@‘ŒÈܽY$Ì[YZsal~ôÆšÍR&{eUâðÌÞxoƒôíÃþ?*?¼æþ©òa¥ÿr‰šQz*B|¿ µûž<Ã<ýŽ˜qSS÷èS¿Ü¥æÎSÏu!©–Q¼¼Ægm®ë%9Ä$ƒaõ¶2ó¿]zì|9J×rº`dC`*[nHS7ê ¡cQS“+ ‹ªÌÉ›1¶.WÈ'úúUՔ뭅<ýöî[³I5¬ú §i“ÿšŠKôÂeáÜI„ EÄ´ùúe…›™ëzqsSEX»i d&Ç$U6Ä5€Øï{8SöaðP­ŽJáÍ`‡R;P/f¦¶Xs;üÛs¡·)<€©Ê»†­>ôyäû(ЦT>Üì*¬_©Ô°3·h-¢¿,qø¡š[UŠvϸÇËw‹…œODÒI.ÞŠÍ ?0G$vµ~Ùcpu6> Ê«Š¨ÈÉ’*Z€d ãêl!EQt§`j¡¢ü½ŠÔáM˜±<’Î ¾)€2}:“™åhý&ÒÉ0QzìƒuZm™‹/•𬩅 S‡£m:¹†ÆXv`$CFGM‡’íÐj^/ZdÒP ÍqçûÝfq;é«™îÚÕ8?¸`°ÜÍz]K1ÇŽE  $ë­ Ã#Ðàlá@<¡ò9ÌÖÑä¢N¶Œ;‰ÂQœY‡ú¨5UJtJ‚Ý£vr÷!1OÙ›;³hÚÀ3B«]’aK,:ì®$Eû­Aµ›ñÓÆ †uue]¸H†7±ð$ö±b»§æ£²\úÃGÅ—&ýÞ_ëùÇÛ^ å©pþ”ÇCBŠfÈ[œ/î狪`'QµÁkU¦ŠO El†Gtêú7MÊö¿Ú3Ĺüòí÷t`½…ù| °Ë“ºë•>úˆýøÌ~ñ[Ût\ëIé¦ÿ$f¿ÀÄ-€Ù¶°,_Ýû@ÆÑ‹[sñFaGŸÉ)oÞH–¼-Ј„}·GU …_²Ù ÌC¿0µLþö<"A%(Ú4j0 Z€éV©¡T­¹%UULà G OF„>1Û:â7ׂô×(-†]{õD¥`åîVé8»Óùù—ÏçóÙƒ !ñgÒ$…qÁ`’̲äácÍÌç½QTd"Õ·x¹y‰œûl¹@Uä$ª*U줹=5 =ø–ýM¾É¿—<»ú»d¯MJ8•¼7ìÓ’<Ù&1u‹]!^=ÁGøC…ø(‰iÆ‘{s3ó‹Ã=<Ü]«ÚÉþv‹÷N" =<™rPŽdÂÓíšøO{ãûøeÔ €­Âù -ú¹]pu3“¶#œiQÄLs4Þ(ß#b, ËἈ« `“à |±»JãõoFP²ý“_Gi·ý˜À&ѬՃÐ*ªŠw\E†<ú'@¶ ¢Û%jÚ6œµ…iôFÂk%=c@ѹ3Ó VLNŒyèº7¬¨¶ˆ2"*‰€æß‰ÙY  Q -m`£®orø¢cšˆC÷4×ûì+Q-ÓDL$›¥ÔƒËGS¿L„ªyCÁ´“¥#-ØŸZ¿b ¥«ÿhø8Oä›ßñãt²pöªÈ»®[Ý<,Ø’ñ-""Z¦á-1ùaÛtÁIÓ~"š®zÈ*Á~k:Î7==tЪÀînë2̳®DL:|â‚FO(ÔKH'D`Ûð£`ÂÚsONIBÚ. ƒ Ø4j$™\…hð« WÉØüÆûûå÷Ù¼_ó»Û£À1aØc°þ¶ÔLÌ,UóÌh`g\g«âˆ{Mòæ‘`/ÆÞdÔý²û ¸dAo)ÐÒ…·ßQVg<™ [ÇÈÀßûPz‡” ­ñ¯¶3ŽÌ¦›‰6sg^·Lhåa=3{†Øç¬Ì†¦´ÊMŠ@¡ÉÖ샬€Î€m&¨cR¨¨iUáÕâzFˆš&þÂV^¡¨ÂJéF¸´ Ø:tàÅg^ýL&Ø!#­:Ø'mÄÒPTL"ªÖ󺪿iX0áªv*.Ÿ/îqþå|q TÄLØUÒ·“Ë~R:å:ÙàAºÇæ°žYEóŸ@ب2rôv†ˆXMF1‘9Å O1AÈ¢s ÷òé›üQùKâßäï”øÈ(þÊý™àÏ¿ê~&kxxƒÉB¸Ù:BeÔ[†Õ6OÒÍU,™´i'óˆ$~D}z± °_/EðKE ¢Wz󬷼ݼHŽB¯›ÀNî¸WgÐcã=ˆÀ¯F¶ èRR¥RÔD?g1Þ ËQ–ÿvh‘hŒ\ŒTÍ.~–QEìͬB3‘0óÒ'ð£“îTÙMt©*ff'CgtËÊ>̪$Ñ+¨¦jf€Y8"Ðè2M@²A–d †3¯LO61³ ³ëÀÛ"?[cpî#4 '¢Yk·i«"º+8¢»]E;CÒ*0óÞ }²oOs¸9¤v‰nÔ}Q‘Ó0RÌLl ÆLÖÙFŸÕ¶i]Ëžú z03í{h5­÷!¡)=P kzüVÖ<.G¦Õ`ãx”Ã<œfü]vøÖó“G w^ÜãJ¶™ÁXt’0Eš£vf+s™™î09jÒ˜%©Ømû®¶gÉ æ0˜·¹XÂ9ŒÊÌT/¢ >¨„æo{ ÚÚóÃ;3,±½£²1I¬•ª"«úÒЃ·f[k ÷“à>ûæ e%¾K¨ù¨Üd²ì†Ûöy÷þùÆÁsx¨($“F’€‰X®‰}õɆë-7—"ÊÁ ‡N–¾½ÑÝï¿ô#ýØ;ð¨xqîl¾ÚÝ*~âØj€§™¨û)ÊæväÖj`À”gæ80¶•eú¶ïÌï)1 Âùßí„ÇúalÈd³¤HoN“cøx9áÌÎ8’‰ª%öTTÞÉ­*Î%¬§1 3KzÛqéLÚ:ÁN¤åœO|kÆË›@$7Ï@àžeP2œÂffƒß;€ó¯—Ÿÿû§Ïç àT½üêç_k U³¬$Ï%`DrgŸ*€öà5Ü@Ô] Ø’â‘Ôå‚jlÌLtÑ©šÑ`9©}÷’»ÏŽ}Á´]£P!èñÍþ&\Ö5îcʽW¸ËÈÁûàûýRù5<Í_Oþ4öWŽ/žÝŒå––ïÿxáÎ4yÐÓB½ßÎ+φžš0Lw©ª¨+^é¿y|ïñbÒ²ä/ÓxþVÿѦ(ÈHß=|•›Vb·d¼÷d”¯ïð %$7éÃÉ4úpcŠnÊGêô €ÝÛ§Q½(RÍÙb°%e«O*'ÓâÞèál¯{¤4Õü™NœY[vi¢“_ÄŠŠ™šhZåx36"ÕMŽˆWgu–Ý9½Å¢÷“2|=ê»Öâ]FèÚ&º Æfí'*b¼úúi°"¤ƒc]1 ÊPÓòâX­#ê Ð Ūšª-ÀƒÝ»„¿t …ä»i±ÁÌȕ莮ÇÖN"¶©·¶áöJUJÊM;WcçÃÝÛ IõquFpZûÀšÞÓ@·QsÞ‰øV©"nÛWªª»M°Þñ|Š‘–pS”ØÊä¸[/š^íÉÖËŒœsšZà®Ë'Ð.‚ ˆ.,ðoçY\seDi((þ€ÒVkÿfcæÝ6ý%Û6ÿü!b_ÍÙbì{‹>²G§kM]Ê÷¨,àÕÝ#®Ž\¬¤Àk¾ÒnL"±É²ÏÂû½cŸ½|&ÝÆÅvyºûl‹¿`w­uDySß@ ¼­ rçTŸŸdîê3 Œo~pDózÛ $ªð2¶ææäÚÇh€¨½,ý3V”=(ÉewÐ*£6GJVâ /$ÿ0ÞT²¾&*'{ýd¨ºçãXò%‡Ùr3³¤vû{ª)£ÑCëÌ|yh™ßÍÈL9Ž–IÑ]Ç+ZÕÌüg§{øÙ#)޵pB$cæ³@ÍmÉ&Ds¦X`@U“¸‡@Qf‹L8}Ñ J§ÿTT_ÍPãJ¦Ú€ŽhùCšF¥þ¿ÁzwÓYÎnäùÚú>!ðåÖŽËŠ¯ç>»ƒfyX´ÿ|Y·y›ûÅ~çÆ£#åò¸× €ð˜(Râí÷ûmêCbîcýÒ÷³Ž¿FÂÕÒö¯hÂw+ÜcWäÌñv³A&«[º£d¤)µ5™›Ä“s®—ývò³Š/}½æÈìõýî4sW<>¥Ì2m(D$¤RN8{ØÉ¼bfáç‹#`°Ï¿\TM«IY0xî kÿ2I;|F_3L­ß/KMæ ¿è c=MÜÈcƒÉ±u½”—ý¾Joá-¬ :Ü/òú"€VDƒ¦Q QÑàqmÉýµÀ믨úã?"5Ÿ××׋»ÿrñ_/þéüb¯în™ì¡U_¿£_^£áçÿýlf¯I k\? @ùùóg3û׆<¸‹Ôª Ô[àWg„¥^xhŒ àh‚ ­ œ+H¶Îî¼::b¢qŽôò˘8KÌdãÃJE\7˜–(Î[E…±yùGµð>8+©–™Vs”ТÑ0¹¦†Éz¹xÞHv2 øÏT ZïrËçX&U["®þD3š‘ûZ-WàÜA ¥ÜîåÑá ~Í`ãã‰hÔbx‹¸Rb¯«q>ƒW³(NðªÇÖ"íñÆ1% IDATÒˆpµš˜ƒaø .‡C€ÇNê©éAÿõ|¹x4€£R@N‡‚cx@gStØíDE×y!]vÆwý}ʰ«ÁÅ + º¢¹ß¬dd®D¢§j‡7(À“ÀF3C4 =ƒ$(I+²ácå9œæ”„¥ yÐì4:G$Ý`£ì¦&0Ógb‘—ôU/¼Ø?ý}+çz÷ÖL äÙ†lýLØmA'ZHUûÎüš¨`~v÷ËÅÂjöò¢:’âJUEN–Å– ¢™ôq§p-{ÓìºU÷éï‘Õ=’î°é2ö§û³xûüånráé!é÷màˆ6]Í(³HŒˆ6žwÙ™º ¶` ^=î‚EšÀ_äß¼À±•@gæù£!z€Ô™0)³$Ã6ùd×¥G2ªüdwêË9Ißmç´«÷üòƒƒóp¸!d`tí÷»<_.ËÆˆdUskÅx~#±òŽ| ¿óûÂýߣkýá+ãKl[iƒ¦Í¯Uú•þÛÅ+^õÅÌL¥ê–L úزDêýö¬#îÒË׊ƒ›×Ûòæ>ø!}©gi {—I’  ­·ã*dSfbÆ™õQQU,R²Ç‡îœ‡6~• ÅQan^½µaC\Ô+¹‡GQ‹#§L …8±ˆ ƒ21ñ £‡4Bœ¹Eñð€ßíÚZ“¶µï×|÷ï33Ù8¤Ÿý~Ãæ{ØtɉÐÀØ7òxêvø™Ýñtøe“ã‹lëÓ´Œ#,÷V7ÈÌÌ~5õÊ^\MYÔÊ•¤í›Ø´ëÀZԋϽšÆßœ§EÚªþföŵš»·fHQ£èÆ•‘@™iÇÈÔõ&9 +ÙMϪdž+É$"ÈBV`ŵ qõ°‹,tñbñŽ%ðôÄpÏëåÆ`"É$"VŒ!ñŒ‚¬‚rôoîÈŽ¤LdDHL‰«à&å ¸7Vpb®-÷Ë;í9úÎE~ñ4õ4ïJ˜® £#àŽr‰ài²º‹™ˆ£Jp—iI#i8‚ÆŸ»»U÷â` TGkŠÆž¥ÐOÆ®Aè ¼Óàcý®[£ÃA´úº›eµmBD­—ãà7ðìˆár3>åðâ|Ê4f¨žb3¯ˆ>™Òã,ûêßk›¦¬pÚ4'v‡U£Q®6nÙ”)Úá@NXÃ4Î1n§«m·7éÓz/ý ®!Ãnî¸wÐÞ|…Ïq(Þ¿Ë€ECèÚ¿ ÀaÕe1T²J²ÈÌjN/E¸FÌh¾3„¸jAû•óõ7Ê'¯?³A¿w-†_W)gPL‹úE]Í/þ‹ gàQñXGÄ*’Àýo…; ëÖ!Ì^CSuv\¿v*íþÕú(œ_wvóÍÝ7ì‰í[Åríз?PûŸŒ©ð­öG<©x¤G¾w‹Õw_èšÇî•(2$®èE†QTüÊ!:Öö™À@¿oØ)íWØEϪÿü÷¿ô¬ªŠ U?ŽGÊ€«Uw·V# æ @¬ž­ïWÈbQSoÞ®ø-‘nQÜ6ãÖ˜hé‹)p '½ÄïÔwün¿´mÑïöK ßŸÚîyþJüöbºß/`Ý©s¬Â”˜«©Õ-Ñ1œZQ±rö/®ªzq+Æ/žý–&í¤î13ñ\ÜHY»ç(pl" Bu¾4Àбt.æeê‚ܹ‘´ˆˆª²E£‚™eÚÁ 1óEQÝyu (³ˆŠÉʃbÀR ³êZÌ‹Ù2aËb!UIL Ï$íÈWóÂǃDÄš:á™5{kF”PÓÂi”湓ª­ç'1a\ÀÈ=®ûZ÷;'¤ñûüÝ_½4×´9”µ{¼¶ºæ‘åK7´ġÑÈÏeq"ËSzvÎK$°e0K‹Ü_O°‰Ù Õ¶³Nó¾Un ¾*(‘0ŸÖ¼i§!×£ú \Æá•ŽkY„„D¨ó G›b+·ëT_hñ#10¬h4˜ FqÐÇ5Ûc{ <ÌIÞ8³MM›y ³Ô_ß¹šÞ b|28Qäšf«·ˆ©Å;Úï×&kŒÚ*3Ûn aœÆpXqid jW F²?I8÷¦Ñý… @h:´æ k%VÕýŠ Ù`x÷ò¥’h¸ÞŽæ+NàæëøÍùµO7^gI-_ß| { 6¾‚iÝÌýŸ6qšWì÷©CÚ„«ñŠ´ê6ÀÏ`$tÂþ+s¡—6D 8Ñ3Œ˜eW[éoëå ÆßükojëŒÚþõ <|~0U}TwÈAþç?q†Ór–ÒØ ¼íð„ÂäŠõ»/L^} ‡J%±-]𢑟i÷ÚÖYâ§¹ ´ (¬ù;~·_Ó¦‰ìeËé ÔžßížMëe·ðã z¶3ðŸ öb¦Óôf›LL‹£*ŠkqYˆ«PU+†G¨œô/M0ùíK}Fr»§õfqûUÚj$ß¶7{ÍÇ&¸Â‡þIœì_WsJ*F–6Xš3Ë"²è¹„ L˜J2y–Ù‡æ‹fHXûQa_M`/0U5•ùÓÌ"ŒSß.ùJ÷ öu¸‹ãl‘s£dâLV:Y¹á(3o .FktÔ|ÊÌÈb-`˜¹{iM€Ú¡4×gtæ´¡ºàäYöœ„cÅ~4~m$+¼—ªÒ¬»™‰ÚˆÛm©qË)‹.ÇÒ²F=áÜpž$ÍgKÄ™ à罞— ø›™a”‰Æ0ëÄ`TØÅÍó( _¡W ­/@ÊHmÁÁ ‹pynO°Â€Î×ãçÌn=‘Êps+ÞZe&o}Oš&óÚzz=@oã<øÏ@bË´ÙÑ®â`ܻڣ$¥ê®ƒm¶\A†©æQW9áÿ«²…ÏÜ/#à\ €¨æU0öˆ}•rjtÔ>`6·.¤óõÛ_ ý^YJsåÒ¸vkНïîí7ˆC€k/ý5À,"G9/1Âu<´%ñO“s2Ô«…àEp|ÂHO€Wýø ‚Ó74ߣY HÜFØ‚á{öÕ1‚?)c’÷&°uÖ¹ P.`Õ8*…fD8“|á‘ÏÄœa¾3µþëçÂC¾›dÂBÿøûßN®ç“—E¢ù‚â³G”V.®ETÕ ^48" ĺІWÛËÿXÃ"+ ”&('¦ÒÁ! éô]*÷¶rPÚ–ïøÝþ;ìý~½ ú8üÑç£?ÞØ®Z½˜ªº‚ È‘š=v±³žUµecâ3Λ·RÏÄ‹ÊLZ§–h9Š¡¢Ò¦ýÀ€º£˜èB’6”'JàÄœù /­#/µ=rfÍÊ»ŠÖjæpS+îñŸcmXí­b+ÌvqJ.mã¥MˆØ¼Ù¬4P}D˜ÏàùpŽÆ§«£ãÁ¢)°bøDH Ô¥,[/7³Ú½ý9k  Â“Ñõsç+ÞåVZzÇ?Më°²‘n „ys¸íüûÄ P"&õº¬é‹Aã‚vû˜ ìEPÓ~3ʼ¡BŒŒ½››¢‚˜yÙø­VaÞñjºbHNÿK‰vŽtkƒ»´jAM‡g?E„NëP77”V‡Ü˜G»ð–¼í‹ÎUïÛ6UTô\ª™3o7»S¼^˺ÜÀ†yÕ¼í+ã<} 3iôh‰ª6óç h0~·;ߺº¹&+ô®½ùsË³ÙÆ§ÿÖIà'í×m0ðýßažC/^aÕóI¿¨$óá Ç"Ìüb-B7ùÒɱçüÕ¥žýѾ×÷´÷îôiêsà¶¹ÅË Fß»,¯Åç¯Êú®ßºyÿ­olcóz×”ÿÀ½SE¨…œr«ý ¥(Y:ú Âsz2æò†6z#ÇG=à³ê§óÙM[ßû¨‹ÉDµ…Ô­ |Kæ˜á §Úײ©| Ø®hÔGéojÅok˜ø¹ÃßÅþÄxÿÜ­¥ÕßÔ‚2·í Àß2lóG­…voNÆë;[záÞö§?n¯ÌU±k­ÀZa”–ú`õ!"ÍÅšžjfRÌkÓ”˜´´I„çÿýþF€Ï³ÔÇÃÍ ÕãˆèèÇÂô˜7XA,ÐxYÓfS'Àn^¬¥˜ ìâNDìÜJ7×ÐÞz‹Ó ^d¯Œèã‘‹Cymßà'ßÉöÍZbj‰ÌpÌàǃp ¼Z”¯€…²²³ÓGýüûg8Ž8â&×q[rü}­»zòA>¥OªjÖu°¢Ž7اe- Fï.;ŠììÑI8® S+b´¨Ô‘EÎ_N§‡‡Ã_ÿ6vÍ€ôñôðŸ“U?}9‹ðწÈ*Z,fœ¾œôñD™‡UΗ øx8©ž¾œÔìðñðé/ÇqfAI•rt¨ž½Ø¿~ÿíÿ?$¶bœÙ*äƒ “~9?|¶£ÈAþ:¤>Zýs'œ«GŸ+Pœ‰±¸^Ô.Ä’©Ñ‰SOÄ&²–™Zô‹¶¢îÞ¤‰¨ñK[›¤` ‹Â'&¥Y ªòLÇ(!ƒ¼öõ6¶Só‰Ù #†‡ÞÕÊÓsꕽ¡fòbJD,œÈÀ1©z1Z9RãÄÂlfÝleá1\·OnPý……y55@U¾œÎJ™± ¯Ñ ô1¬ï‹Öü³qæ‡ÿ¨ªÒÿ³wíZrä:2`‘emÍ\KòÖÜÿÿšU[W² °Š´b €ÌÌzHÝZuKs·qæèœ©®Ê™$ŸÚ“œÚö¦¬0¿™™ àÞZô–É)ˆà½5 þöœ-?Ø&ÜMµ`g–Ñ¿øÅ¤ªTCÏÆž(Àps i+@ÒÙÕ+Ú~ ‘³€&Ñ]àÝ .Ü~‘ç5M%ä©Ì9¨Ã ‚=â ¬¹ÚáÞÁN…zE+WëIÀN°ªtrd`jí“F)cÌmÎëªG `h Dw(‡Éƒuì6„#ÇA|¡=:þÿcÛ× ôõi—/>¢7ò £Ñœç???9=ƒ“´¿ž>ÿ×çOÿú,æfÆ|,^¨@§.À5?œó?¶¹ç>Ú/ö;øngñ±Ò¬wªô¯í§6£ì ¾þ͖Õ¥]û?ÛoxFåðÍGW¨k>?bà‹îôUtÑëIëoöÜvˆJUbFˆŠnB"QÁaR“þnnÏgs·OAþúüßOO»«=.}ß¿Ó_bßa4<0ï®¢é ˜}ùòlv6s‚Í w·‹±s&½Áècçd÷çnQá,f©.Ý&â鎂vRц“hѬø-²‰hÒý¢¸`¯ ‰‚ûIàýçÇÿÀö²IÄ"S¡‘ñA3ÍÕGEpjw"ùY@ºu/XJÞÒîmÜoÄ"ú3lŸsØÂqWûÚûQ|³ÍùíÝòÑdz|ú«=3td×Y³öwkh×û÷{¢ß£ÉiÚÁ]‹ ]&Ÿ¸‚î"‰ôÌN z²&;]î”@3¤t;ÚžH63º =CçÙ·0Vm­iUæfMµ´€jya%:¾Èó™-RÄKg«@:4¹ÄdV;¡zCJLxÓâèP¤³l™¾¨ÆÆhq½PÑhÕR%h*om*£š ­ì!ÁmêO…®œ’²ËÍM˜7Ã4«%áÅz>½úË=E9óáœëk„ÖÕê!’Ó`\ûONb¸JP”O2óˆk†ÈÍû§fTÉ1ϼEa;E¹ùmù¡«üë;kÐ+–§5 Iö]BT!`+²-«Ú²o‚Çåê*ZW’ÝY%ƒ¢S7h õí1F å¢Â†æj§wç€UºG¹ò€Åq6%*OV6‚€W*|ø`p nc=€Ó^w—`‰¶Æ«ëæµ½Wå—Ï)Bv@\j“서ߘ§ÛÞ#Ⱦ‚Xé-ÙYP5.˜rÜZš q©PAkOÈ,?[ws“Kãp¿¬%›(¡-j£H¡D ëˆà8\îpBÝiáÓ*Êôé¶=ᑇ^mÀcfËaÿûU,¼L f#¨xÎ^ƒìî3£]BŠ´ÖôÔZm€ËÓ ´›eï„]§Ãݧñš‹xýü〽¨cÄÛØwμ'0‡ °ì~±‡îw34 ¯w’.$ÐZ£TiUUDª>ìvùÇÚ¡Š€¶F=‰wâ½x²S÷!ôóä(eOÇÅ6vO”püUhU9…"£dó°­Ê=}XtÊ>ð‡½³Ý÷4V~ äd”„8HŸŒÅÒÍË*(šj«+²àvG"úôûÿÃ$§™S¾Iâ \VÞãÑÓz´Q½ fVå»ã°}çöâf*cÊ6!ÝN­0•†ÀÌÎ_Ï>ÿësr‰ÇdQþ.+È,î~WUeÇRÖ%Ën‰Qo«C%}ÅͤH–ôR´UËVFÈ] ÕΪHmN$C{7TEN 0ëô߉`sü5ÄgÍ8>œØ#¹äXî•Z[Áçòä\DI‹‡à51ð¼? 'µ mëˆSU+œªp—P™’«H×ܽ6¶ ËKÖ6#10·O·ÈÔž©/û|ï„i±lŠH‰¶UÍ A”÷ÎLSïÙ¹töèk à¶„8zÑ=¦ ÈP¯,Xâ³·ðaFu‚”ŠÖTêqÛÈ4>T *“¬¸Û\VõfÙ÷/‰ïÑé̼ým@ä;±§˜!AØ »óbì¾—‚Ó¹ºÏ·@fƒ2" ‘ÍO0_·qhÄu¸Â Ñ’d¨кn"ªÙ-kÚóNíÉIÏír΢˜üRD;m ³¾3k§@V›ŽH##a¯´èo RÌ;©"Ï’˜o·Lçw²›³þ¼»õ™þÍ7¢ Ž ÍhftÐN-U}OÁ—ŽölLó«ë{Ÿ¥þá㟧›x럒éþ±EUüNÐñ®í÷-¾¿›²©71×ç*ñáQèŽntSÿýË»¶ÞÌXv÷nš6ïgDóó!Tñiu7^èÝÙ§ÞA&NÜwo¢d‡Â$j©œZkMTˆ<íûÃÝv§þyûÀö¦öÒ0ƒÙÑJ~«U¥J“àay¶Lœhùh7›ôûÖ6³ÁY*6d6b=:£³T ÿB;â1O–Ì÷ÖÉüåm\GvxQ 7ñ©ÚlœÍ\ fÖjãßsoX”òñVNÉÁŽoDߣêÚJ|”>^Û6Ø(ˆ p©¼¼(OÀà{ÖÑ@QY+ØÚS§u—½ptž+ùŸRUOæZG‹ž@á¬Út iX}V· VÑÖÚq}˜O@ñÍK¶‰šFæqѽs ™ÛuŠ)*yÒ,®SQ©‚ŠFØ@+‚ØvAÜr¤‰ƒ§dUÎò6/.ˆï€ ¼Fb`QW¢R}}g³NR nNtGU9ô‡rvº;ʦMue¤³Ãºûp-*¯nÕˆ"Š»n¦“Oöp«ÒN¢+6„Dé+'ræE@ä–o™öQ+‹«’?ùq»Ñ¢Þså"²TmúQ ¾®b+ž IDATHõ„¶r¿S)È2å¡ÞA’z7Ü"Q/!TV·/8fæ´Kl‘ySìæ·nèTiÀ„µH9L\ W1ËÚ¶™úÒáÚÎË(hU’R™s®ÑyƒsD‰3½Ö^µ›¿ÑúÉ®ÝðºÓÌZ-ú©}’&S:Ó+‰s§‘wÄÀAèhÙãÞ—;-ò´Ú{t ‘â°&-¦÷Õxyô˜Ã§M…¨ãS­ªª­}Š6G@l…¯ykο')ì–5€°oÏ_þçË—/_0(µ±8:ÍÝÍB À»› œràn)+wµ#LAQM ZSUQN-Z fü¸¼‚‡Sö• ¾üa†e’$kñ¼Ý­'AWÂ[mM£Ñ¨Î¾y\°g.[¿jõún¸ç½®ä7ÃašM#eõuØ'ÖRÚ‘¹sÜßRïHà¾ÄŽ ñNsËsð-0ðì " ún/i'Å gvžijfͼ{I Þîü}0ð• 2T¯9µ"NäuCÁ(øº[à„² þ}}QmÄç§Ç«<¯gתÍ.ÎË™$G‚í<2 MZ0Ÿ#»ðL¡MÅ{3³®^ÖTÛIl DÓ›)QDªbzœÔ£×®TL»ÎÃqc>KöR$V‰ žÝ¹²vã öÌ™—vBKàP§®ˆúI!wŽ‘uzâÛß`yº @Ô m“B&~åØùY«D9÷“H;5,§ ;@Gm[Êúh>YÀùßõ_Ó¤@«Þ™ó‘ã•ã¾A°!¥Sµ©´,Áðƒ“Ä,ºÖzç(À…̽nž֥ŭiÐöð|þލîŸêº-Ñ´õÉ\«–™h*óGwW§ˆÔ†á¡4v>›™Ù׳uo­%æ$c êÕS¸nÄÌ@Ì#îúl­çÈñ^ÊÌØŸ¦F]ÀþÝZ«ó<:SýömoM´;á—W[,;}ˆ<^g¨ýÛÅ2p†&Uä¯Ì$ê—-Íï°?s-¯5¿æb=Šùa ¿Ø&=áE%¿-i¬Àñæî<[dì){I%¤MD¾›³6gC¿Pÿ#/°å·0K~¼‡° Ù7óN­.ª©f‚ €ƒt¤æb„§çg6¦ —­µïI[©k]º^Ÿí»ò€?ìÏ1ÑBVC;ì~îÀ03 ’ªíÔTÌ0 Ó;Ìeúh[¡ÔûÛÞýJÞÆek÷t@‹s¨Φ+ßÛÎ~Ü·í'ìç@ãN®è‘ói­µvþjînß̪ٓiÕh´6ÈY)úÞÊÃó‚_ö›Œh£¬de?—[%-˜hìvÜÍÌ3P•l¨¾C%'ŠTè©%û×xTEÎ|i{úÔþ2ûM8ÛªŠÇjœæ<ólóË.]< UD›\hçÅ OPDEY £ÎEñÝuëÊ3I­‚\jÓ)ªEœ*„‹ìü½»=€äµf!–/A£SšW´A ¼»TNe@!8µ‚÷Uj)O%‡ª¢Dx`ìûWOQ¦ÒûLq+€¢ ƒ ©ª¶#µÀzV&û Šx½3QUT‹™dƒ“'<È*@r²Ý[¢¥J„®¿0¦Û4õŸ'¢ÛÊÃY,¢ÆöoŒy¬B™Ñ훿>ƒh§æì³›R Ñʺ™+KÉØˆˆ­)µ̫ô‘@4†²€2["Ó‰mV:àáûP· íÛóó9»Ïš»ÑޝÛ̾Ü:Üg&ÂRÕõ ™›Óq7ŠÒµ¢iK-‡áÌùΨï@”cQ÷oÙ|Ù•à…¶%á]Š¢ "µlϬoÔx2!È}Ô¬ÛŒ Ç4ÞÒ¿3 ÿ]{´+=ÀQîñkë¼r¸˜´òù•„ø'ù=åúZyåN¬Œe9Öˈcçd.å©ÐÖZÛ­3Ñ@nh•öû]v»Ò=–"=c ¢ªÅeSæ›KYì¹Åwí7T üjBÍÕ/šŸh§¦¢M›J}‘ÇŠôµ³ï‡ö€?ìm,çîMðÑ‚ÏYqWDúújʬÔÖ+|Ã+Š\¶8²8 òƒ=eÿgß>ÛÉÛüûdC?.æšé¾#ù9ì ^ns#Ÿy¤‚÷ÿæOnÿý)ÛnŽñ¬-_ÑÈ·ÀÀ0ˆÐX:1„¶VÑZk*ÞafÏåùé_Oí¨ôàQÁü›Û]ñB\ÿ)gpV]–{_€œ3³·‘c3I+”µ…î~.²c‡¸Í^Gí¤37ële7œZ`'¾ {4n…´U‚%¢Zaôާ•²Ž (°`gÁ*œ_h‰ÚËE[eʈ•cîQ4„¸2E¼nn=Ϲ¶%¯µh$ó8T¯hÝ)â!³U¸k%ÌXûΦ?§XYß*:`» S`&ž})ƒ°ù¿ì]½š#9ŽŒ°HY@Y=kÕ¼Á™gÞû?ÂYW²¶Ú`‰´pHf¦¤ê©þÛ®Ùmúªô›Éd’"H)~³áÜÖ —UH‹áÔj¾(²kE±X<Ø­’`yë¶#w5ºsfzŽæX Üû~Ù™2fû¿ÁwœÔô‡¿þÐ:ÜÃ.vþç%e2àÄ܉@‘âÖò§}P‚óG3¯‘‡Öá̶:ð©™%ÈŠAAá`ܰ»°Œ&ÌSeÄ{~µËåâæÖH–Vòɵ'¤Œù2œÓôˆLÒ 0|² Ç§´­Yº+Z€3ÅÎ@ääxoWâ]ö±C¥ÊíµŽ -À“Šª>Ma0rì5#ÎÙŒím|«­½u¿3¦Ý¤¾=‹ñ7ÉýßE¿Óøø¿1½×¢P!J¶öT&ü `¡ 2ÿñö¾ýýÛR6ßl÷?Ô1ê>z2,Cª0ìÞ"º{H4÷¶¥=RrRB|-G\͉\  *&ü››¯ןâýÇÀo•ܼÙø­ ñ›ÓñøE[㋇õlîhgÛŸïZ¸·SþâܽEæõõ“¦‹–œ¢Ë«Ùål(áé'ÕOO@˜;®±bT}ô®œ¤h*ä<¼ð/xm¼· ×ßã5>:ó‡óa÷ÎÞ§ú§ÛÌK›½Hw¦Ài¢a·7ÝaÕ¼yüë}ß-|o]ûñð–@åûîß( ôréQ]¼Y¸?ý1Š…¨*!Ñ<õ íS<Ï4Pê`É_¥r[¹}ÕñžâÆ¿zæ@k#J,IpJ”颅}6½õŠ ¢skPU’  —ÏÍ¢‘'YÊÙý5¡xàåŸç?Ë3çég ÌÉž²«©þ™ñ@½:žU/¢ ίÆjÿóßÏyR ªOOÏçó…³?—üÕtÞ¤ÐHoaWƒW˜g¡§Ü'Fï¨@ɾ©`9Û'öB£Éx/É¢›zíC@h5máÍ¥‡Wa…VG¨f¹rÏÆÂÉMEF\àd‘M0ÑæÖB$ÌÜ£‡§øA,xþãy4½¬3…DanbËDÏŠÓv¹¼š7·quG‰“°@NDýóÞu&0dT»òb—ÏtP&ð۰Ƀ§Þ)=ìê¨Ê³’'¡þ¡Ñƒ1¦r©ÏQª¢ª©Î-k?ÝŽÁ‡hÐ\ù¿Ò¾&fìûàk^çïñÄ‘Yv¶‹™¥È­ ©O©Üƒ(A¥5¬ø™£!²ÈÔ1ÊFßáÔÿX`²‘[ä,„¸-ãêwßð[ã÷ní±ŸóUaò×p7f9Fn©¾wÓbd{nW#®ÌE9|F+͈¨dxôÈÒ¡P¨)©(Ô“Rt´:»''¾sOû±ÅPoù FƒF¡>=ƒ‚fq±—ó Òi©úüñ«]^Ïüš¹`f2“'•f>¿“@ô@îqƒÍäÑ9g­Ì¢§ü9ƒ‡*žØ·ØÜLp#¨¾œè7Fé-²á\üÛ>¦ùЈuP,Ž Tñvñ«™€ÿûßÏ×gUå)ãa ÜfªHB–´?bî˜ÛWå}E£í½Ÿû%U?ÊxüûxÎ[ dzY©ž’ñð} ø>F½y,;žÌÍã×l“rüCŽO>°ïÌV¯ózTAÄ »FâÛ±ºP-ÂÝškŠ×Ý>´{^ÖÛ>ʪØGßmÃØÚíö#³ð›¶9ˈ”]4)$‹ÃË hºƒ=ôt ‚`š£‰7<Ÿv§ Ì)âÞ5}«@~tÛg+ETªFß5lX“¡ O!vµ|Ú E6ɸ7LI^‚ý&³´Èέâ[²Ž§_µ½úöx'œ´ðoÁL‘_Ü3_ï¬È²çÌ(åÚ:¸ÌkǸ‰'ú·@ï)ˆÈ°“ÎL+l[«/à÷ñøÆð+µŠÜ¡+™.HÍÏ…ƒ_–åÁû áí%æòÏ/pË;ò>p§Í»·9 ™ÝKiSH‹h³ »³Eö†¡ ‰ƒš”€¢ƒUPé×)WÑëÁ4ˆsÚ†¯.¤YKcæs£…ï «ðŠ1Ï3Ÿ°óì#86ÖÄɳCoÔ1ïãfbsǧ"š{s"RŠLUô¤ç ú"eÖ–\âFê0±bßý+ÇO|TÛ±6æ™E4·Ï†õ–ìuÍä?A ðã²ü•ùõŸfn¨ïChn™~â,ßikþïÜÿKRÍÃi<á õ+*%gC•ÕÜáø o•¦ÿkmy}÷o¸_Í.g¿ (ZçÔx¶PGs‹– óð«K‘ªo££[F³«Ù›Ïß%E*$?d6Bþ={t™ß¼ô’1¿àßöA,Ò±;,?Lr£À[œ_/ã…ÊgU03‹EØîò‹Gø÷ìÿûí{*pþÖ1ð{,ƒ^&ŠSzo>2ñs¾39½«JÝlS„}bRjÑäüÙ¨5e•¥òUNÉ[Ìä¹É0®{„|÷Ìá6y KO7°ûÆ™`㈔ @s¯ºÅ+k[Dª[ˆwè!Î`C.»ž¥2#è#Ú,Rͬ¹6Ãè÷ t÷"R(U¼wÍy;¡þÛkÌ*ªFa´0{¶KtxŸ+JjÔ›í:›z†: £‚¡ $1زj&7ttü\™Õe‹Ã<òå öîá„0JL˜Ý=iÂ!Bxx,\#©©2]tOñžÔ&-ÀæUce06gL;Úy‡—Áî²T2¥¹¤ªYY`px ™ϧ:£Ü91ËŒÉ;¢ÿ*AÌØ›ÛÇGžíô^û8/%ç€ÎdÍzÛ´¡ïÙºu„Ñ"—8kŽPXƒõ 74¿Á]ç8_OéµV $‡þúZp¾@®'aµôV±Õ¸ZX{‹h3’¬`a¶ßæ}ÎØkxš’b©=Ž* x"»f(;Kî¿qÚ[HA=ɳ耳sR+COk(É5gËYøáÂ-rã|ÿßÄXdié¡$mÇÍ-®Š å$RUO*'aa¦åœàîr?ß$•乌Îûµý›YÙoŠû÷üÒhoÙÍQÌ[p §¯ÜýXW¡Ä. ’Ù=4O C_©ù"™³cU©Ü(<ÐÊît¿@ñæfŸ 0tø§YxHDx\9:5O>”{d·¼\%p“uû¿‹(€JM-½CãbòóíwüÛ>†í7†÷…‡³’•*‚ޏÚùŸ®"Y-)"zR'ivŽtuëú— îÜ‹¾ªÒßgãÿ&›*Ðð0Ðy×vÆÀ?Õú›—øçîÄw±½€^Dº{É?ˆ(qÂíjöj—JSU• ꇔGè×»àh>°÷Œù*¤ß{HåðÇ8¬@`5pZ)Û ÛÕtÀvÆ„½¯†pty«ù yÉ¢…·xZ¸)èp7o:1æ1T5ü²;Â:}6WëCFxÙ¨®ânBóî:+‘fìKVm~¸ôXÉŽäµvHáÞázL¢8}èc•åUYзMƒ(EŽNÔ`]¤"ÝÚ=‰Ú!´– –‰(@®ïrp ×%™{7Á$Èžsƒ½ùÐ".GZ‡7C‡TÑ“H^Á62 £ € Ôß-ÝPJ•C"`{ƒ‘²ß7ËŠ?Ëó1OLÑÇõP7Oî‚j`4ùˆ<Ákȉ(¡TZÛº,q2A™bà1aöåñ ˆÞãxüH o&‘„ù@ÌÂÜðœÉ(ƒàà5©Ô‘‹G•Žè.Ñ@ŠÃóÂI Gè£miôð6ÈÞÌŠ¤*R©ªO*ªŠJôÈýnÉøGúÈå9ýÆ4þÅ`àí%þÖ=ÞP(Œæ–ñï5P *ÝZRµ84hŒ}ØôËl‹—=Ú ¾€»}…­_‰ÃþëQþWø61m4»¾yGdÆì¸÷Ñl,õSÄq(>Ÿ•|Ô€mþì@à`sýñÈâ#wD4GBNJD° [xtCøÅ,š¡E,×½;¨^Fö{: #•í³£¦ûSÉ*"ÌŒ¿¯Ö›}KÂäkuUÀ¿íšG¢.Ѭ =¬ÇËùÌÊhñôé ÿhæ>¤8ŸTGž³ou_7 ý±m÷ôÆåú¶ÿž_¿îÿ‹-”©Ô‚¡•r3Ž·ûKœ–÷ ´ßZ?NÑK|ñþåõeÂYÀ@V'Bàôæf×€\ž>5,RåV;ñ+l7ÇžóÐõyÀΚÈ>’Ù¾k·)•q°ù|Cx˜ø@ëR€—ì— ®‰ì|…¤GC40‰¬}~3‘‡¬E¬¬Ó*v‰góhð€ns$á¾c q{  †Ù½PFT9¾¡ˆÌîûÉÂ"ÉŸs4Æš3e«fÌOîaÞƒ/½ï<”\è-.Ú½´}Z žºJ¨©Â+)ÉãÛè—9Pù¹Yç²%2HæD€älq@<ÜÍЇÃJyìÇíö;×X¢ZIY½©&ïãê š(9(лyèCs%€É.Þ7Åí°p³ : ²ædÙ>>$VÞ¢fwÎzW0öhÑúý^^/ç×sQ5z&Ä‘09”«ò"&ãC U… ¤¨µleùyiæLŽ«g'L`Ôd²LöûêúÛæujNt@ˆ oÈ ‹ Ò³UUjÒ`$E„FdW­‰NG¶ðÚ€¶¼û(®®PÑç'UI9q èÖb‹’2VØ-#ôï’êÕ–9Å~ìÕÌ,Úˆyø¤2ið£,‰JŒ[å–*ñ^ûÉx,¬¼£¢þpÛÒŽ¿Ê%`ØÎ˜öKÖ¸#«X§ÓÒ ‘I" YUDTŸT…55ó¹û†gû¤6À{l’~•âÍ`ˆPVQ%ŠšYdÛ£«c—ÎQ‘\¦¬.xgAêô°bTòŸ‘,˜5 kÅ(Øþ±ÕCûÿ¶bÜ„xP,TUd纈xyy‰€´Š¹G+oÅ“ú¯Ûƒ÷ÄN|weéßÉ&˪‡Þ*BÿÛƒ'¾ùè¼â>ä€àjÞCVµ9¸ gÉìr¹\.QUIšë»3 Ia¬¡]¿ØááÑÂÝñ [=Ò|iÀGìhÆ{OÍÃc¨ ï VW¦ÜÛ³Ž’×I„ÙÕÕ=H ðC9-ÌLU÷…Â[k‡ÁÏ{.:úý.ž^b†·™Š AvµpÇnçè÷®–…pE¢»5×FŸ˜ù(¢n03o†€‡kH}ƒ=™…¸Fëe %&c…4>ƒ«}ô¿=¾d44Âè¯XÈ”¾SqIŽg;\tal¥!¤€>‚´‚5… Þ"`IöF’~±ëÎñ<ƒo­…7Oš÷6&/n0xáÐçÃy|Ös^!æXThaÍ´?íó+A Zc¼Õ×ôÖn6‹ï°¹™½¼ž_^/éÆç°d•ÑÜÝ‘rbˆQj@@2abê¢/‰òÈ\íŒ×gK%è¾±(Y­2ÈF\)½“2<=QFin ñ¶8¸÷!]Þ7 öæžüíÐ\0PkvèéÿÙ»~÷¸‘äú*Ꞩ ¹ÑŒ¢u&]èhÏ™3ÿþ œ:;;³££ÓE"‘ª"tGå º1ÀÌ:î·’µß©"~œ¦Ñh ëÇ{¯(ÔD„™©š‚¡£E®ç2½™À/âiß¾¼Ù!&à áÍ¥]W@;†3ûÚôYǧÑÔÈDä(Ãy•ÞL£#·('߯¶kÛê;×uBëKŠ·íËíwA 64ù±u8»aõ›Ò Ð {¾ðj±Dá7ÔÑ#CDáþÐ|›ÞÕ7°¸À fÇ÷b:«µÚùY LÅåÎ) Õj¶˜Ci!½ÇnZc_#:'×Ú;€ú.C$‚Mû‚ ÛÑX¾©ìø‡}F+É"3Œ˜3kV&x†&²EC$ªÚöéeöb(à‹ô®!¥ï`/¿Ç¿briÿÿcÅÀá©¿ÿcÎÃ+òh¯ÄÀ{wšîP% ¨•"âŨ¸ÓÓ$#Ã0„˜ÊKE`^s=Õ¶•ôÎx<.REóÓŒ –Í6œšŽEDÈ ¯»nŠ¥…¸&µRX÷t­@ÕlqÀ!—±Pô2ÕÅôsß[ÒK“šÔECy›)‰#`Lã^K«›iÃFÉP¡³šÙ0ˆd¶ŒUGºÍPÅ ?~¢Ã§-næ’b¬2Ÿ'}V5\†™¶nDlì½y·òÝ9ÑÍvëlAØ{!›käsR#NQêþueN° S!;p&d:€.À“É k°¬ vnuXZc`§pל¬†K¤è7ºäU aCñí%ÜkÏÏCÃÌ@Dœ.ßÒî°b^é¬5.±jf†h¬zaèðâ(f$±Þßà{^ f-ÿF·]TM™‰ˆé@|`ƒ1E|ãZZ-Ú*…6®f™¥CéÕ€™{Ã¨Ü Ëý@ìž#Ž »š“xCԓǽp¸ÁÜQF8£Œîlƒ HÚõÅeÚHÑ aR¢ìcðrœ!€°…wBî«=xÕ/áë)’H{Åðá™5ùõí‹aø[ÌÍŠOó¬O  ËÝñx?ˆˆUGtµi-SÏÇ8}i…Ö›OýWµ®dkiš¶›Zß½~Ï!uÀËõþý®½ÝÝ <䕬Ük3ì£_`ǼpÞÕ‰ €™63Ã8 %¾_Q6¾¯èw7ùía·Åu5S€D˜»ª-®EÍ!bª:ϳs÷È*Rï>ßìjz7B}=}ÎWâ1 uÍžë.(?àö=Yz4‹d},³wSÕÙ‰„`‹ÏO“ñrDq:`œX„€Ó&‰þÝh.|WCùÊÖÝ‹}ïí!ïK™‹ïRR®y®×ã'0à‰¬xÐP‘@9Þ dª³ºê8Ά‡ãýq¸ä rw[Gù†EÒ!ÃR-;Ÿ¶šWHEØP±SEn¬¿ð¿’Ý Wµb^Î^|7šÃÝBÌdÎ;_ˆ­šTÁÆ õŽq53]ÌŠE/ßËL0 ‹{™õÀ8 °-âmè²må•mhf6?©Î¦w&X+Ïçú3¹ßô„¸U§Ù‹y!†œkÈ3€EQZP8™ƒ£èÚu˜‘ˆ÷X­?Ô/T Âún¸xEàWÁÀÑX4„G÷…ÿê-î¹3³ÑÑê„Ô'aFz¯ ¸{+?Þxz×*fæzüˆ‡âmzXÓRvŽàøúI <­7…*Þzl5JÀ€¯5³Û7 Õ¬ºd¿Uûí‘ùë2×Ë£´( rˆVŸlË,í­TÞPÝŽÑ^ˆz"ÃÁ V®(îKƒ@[V*ÄÉ ÄM*¯ëÆw2ˆ‰m­™Gs,‡‡(wå~³xÒP=_ g¢`î6œvpð|ö¹O/ØÏLѨpŠåžÇq袨Wäí5ðp¿±b^(Å~w%*ï~õ·&a[×:UÊ|$†Æú„iëç|A{nOÇ.ì¼Ü,þ¡ìÿÌ«N>€‹Uðš_ˆ¶x7F˽xJ8. Ïìy¿8ÛMbå/ýî×±´ù#2àÕÕ¬G¿¦‹1Á ‘L4æbn¬ªÓ<µ¶‚‘¦Ü®õø³z#¾9úsç .É]åòIlgØóMöF¿ñGüªý¡°Ì~¡­rãTW'ÙSC:*é|š•b~kHo1a8óUÖbÅÕ²¾M;ÏKÐ2ÛÚ¶ÛÖO¼{ Ëî•Ù ¬¨u‡0¤™ÙÜ)d' ‚ê4•aæ†/%ÌFÆÄð«¶bœØªÁƒT|¾ÈkößÁ¶îïÍ/|¥mÿ˧]G0ž—¾öjÊüÕ½{ã¶ÖèÄlS0Üš’PGâ%€…’z¥Ñ¯+¯/Œù¥A_°û…5½þ¥Íõ^By£­~x»Â†|$R 9Ä^Ôª1Áaw!"_|ÇñÓh¥iÕPW×|¯Cõµã|èI ªë*€KÝ[‘PDôÓÃü¹õu ¡¹zÁ™æt¬‹Î7ó¬ÓÓäŇAŽ÷Ç¿°ÅfU}š§§i~Vû¨ïþpzwâÓ±]~1}VUž¦ù~>ý|~:­ågNxü4ŸçyQT2¿wZ ŒnÐçyü|Çqh~šõy~ÿó): 3az²ñqô]< “ IDATâ(þ—ÿü ãÏþç-.JPU9Ð Çñó4Žãði8½;®Eƒ¹ÂÓ4ëbp“?ý‚c_oTâaLUŸUçɬÊDâ7·.™¶ N šÜ,·ÿ¸Y= Ò ©! ÀoçâÒ•wµÖ ѹÄÖÜ”^àçgiEYçFU³µÚ\â…éÈ„âVüt/HlÅ$7÷±Åû²Æ™‹cun-‹¹å)©‹¤¶héÈŸ˜ÅQM-†Ã9LeYpîˆÎhÿÞé*ÁÍ Ââ L}:w£át®íÓkÁ@cÉb7ÉqwÔôi6S>Ð4OákQb’ŠÓOÇéiVm|UuÇp d!#’Üv÷¸_r 9 ¸°½/½ÂªÝ^®Vƒ-Ç”|­Ûy×Ë];·¡_ïFn˜yT9š…Å*ÜÕ™è‰ôiž•!±-FrG””ˆ28“×gS½À¶(–”n«2Éýñx?ˆ>'4$|wÜõ¶0Û(»Œi¾$:ÅØ4RzÍܰ›KëØíðš0[1«WÎèwkoÈL”IŸuÇÇÇQU‰ù ‰çz…Å:öNÑJgl÷÷¦]d6O÷9r~áÀm,ýJhm[LÖÎ?![¹è»Ÿ~cˆÞ¢¥~kt{«7ÆEËùJ¹è«¡m—e“Uù"»çÝ.Œ_ö“ã[O "j¶@313ˆ+XSlr'V\‹yUUWÓh²M"Ç,èb ÈAä^ä8œìœò{ºoL\Š_¶Y=¯J«î‹©Îóódê³*eBb}š ‘bsUEÅ”fÎ$A$g½Që‡@™E ª£MHÀ}~e8Êñ~ Ìnª‹Qî §0ê”ìÖï—ÛÅJ/ÍÛþÿç ×ëó|5{?àö}ØZÀqðúÒ¯†ÌTy–ƒx±x‰Ek2¯n0(¬¨UY|kQ´-0È÷@b[£_ü!¡¸TóâX&Ih*µ sxES±­tNÔþ“@õ2yO/AÚ^xñíÁxç=i'ò´ÿÿMß굜ý­O›úÔÅØ8“-²K"”FŒáÜ·a€ba€r4Í#J“£UÏǦ(<ÆÖÞ±¢# y­!»ÕµXj‘þ ØŠ³›‡«äàC”ˆL0‚›fzø0¤3 žžF«:~Wô»ªN³>~zøõ~E»z÷áO¿œNƒo2¦ñµÿûññá#J”~uœF/wµIUŽ÷Ò²ïÞéÇp3;Þ‹En ^]<Ü 6«€ÐÈà(ÁUŒãüyÇi~š­ÚýðþÝI„UuG}štV/6W8<ÛétjáPñàF2 Å$GµÍQ»L‘Åh]KÔŽÙ·‘á•ò’*ßk¶w™oUvýiºI@%¦5÷cî@íe '+ÐÅ|1u~žæIüÎôà$ÜÜI•!GV ¨™/zdªæ‹[qA<Ú† άÅ&Ug¸[éYà+˜ŸUçÉ*<óé§ÓvèZlšæñi<ý|V¢õÙÃf ¨6¡‰µ—@o͉-Ôm2KÞ?ÈûÄè8MŸÇqÔEUçÈLY*ÂQÑ™Ïï `SªydPëfLQ‹ IüµoJ`×¥ÌÀÍÈQà©¥ÖÛžç\ƒybË»Ñt×֌ߕäÒ«h Gª÷pÅ„@‰#”LrfÁ ´z¤ "kL™¸²¥¶Î½Á ÜÍLD²oç°j žÓ‹„u1`—oÑÝzÞ,ä¿/ôEÇ^~a‹_?®†x·ád—¹ó5z:òNä pXq¦sr‰ˆh-„ðV¿mkë¦p=ÄëØï…úùÖ^!é¼vÔocüÞ6ÂÚn÷FºD 4•¸¾V¿ºÒÑ…U\ ËGH\ÍÁº—€5Uu]Ŭ¶xÞŠ¹iÔ‹ ,<Ü G9ö€í»Gû5ˆGWM}1”®ZIóž@÷ Tèbì-E J¨'s+âX+°h€”Dœ ™+Jë…‡ñƒž÷ö#þa_ݾ°„õ7'¡c𪙃2@8Ü K§Ô×ȹºUE"/˜d’aÁ(³(QKê·“‚aF!ú•.ô‡½\¡% ‘d惈4¹2© áxþR˃A-§~0øLn ‚_º¥Zœ·'¿¶KÊý&±Î«ŸØòB·ás»X‡:k5Dx÷ó ´öhm"k€3( ˆ{5sG±+в9eyRèS_+rkHJœ@«p 90"@½.9ÝêUKÚ³7ŽD¸ªò¨¦›K  € §/'_Àò²ß¿ŒíÀ¥vNŒ6¼£¾a‘¶kØP\Õ3â侺3 ÅŒ¼ã ˆæùj‘åe$‚ëëð#L/YjŠÊä´‚ÙÜlVk·ÏY}Ž®&™ ¾‰ýX-¶ MTj ô“ª×ÈRQPˆHj Ìür 6 è XU–­jVeù`¶3­}H Œð·ªQ#=ÉbÈ9g±Ks2\OÌ×Ñï7ÛÏòæxÿÉžáðì HŸ¯Ï%1:»”%Ýñlô/îNXµ}Ê‚UN•ØR¨ø«VäZ®®þÛq|ßš!ýÆuÿöxâ÷Ä$ËŒ‚9ç(Á\ˆÄ \!`ï… oQys¿ßÙi{s@I´š¢¢R;ÛŸV§; ¨2³Ú ˆ‰ÚböaY–½^èùèw”‚Œ-"<£yô¹øœ§„!çð¶Ù1“t%À9È ¶’ (¡¢¨bjˆ**‚^yC9y0ZoAO?ØÞàwûö8ôÅUoÓQ÷Ã¥VP’A°3ñ]f¦*þEâ<“Ç"@¥w§»ûêbÐj½@zˆ$<<Ê4¿Ûecö,#A@*Á uÆxX Œ5Rºò Ã&xƒ,úêIé¿x°Êþ/ìˆð&ô'j•h 8ÉÄ|§<¢íLTµ邯„›J¹0¥@» jlÔeûZ@„(8œPAQ—Ä%ö+À' KFšZDo€ {TQ…T] R”áÞBŠªªJˆÌÒ}g˜Ÿý¨EÌ̪ ýÇ §Ï믿|:¾® ¥µC.¥„¿žÂII$Xt1Ód0îâì±\ÀTá)U¬*Ã#èçP*vPS­Ø\@¢Gœ¾º‡g4¢•zÐbÈrw‹p÷“gT“l$<ûéè'èþƒÙN¤è~'ËË^÷°*Çc¶Lœ7ogìá<ð¨ÏìÙ5??Pǹøio=Ûô,ت(ñÈ‘½­=ç»ÖYÉY!YZ'#AÞUг‚Þý$ëñå×ðÅ^L‹-\wwž^O¨z|]íó¢;³¯¯§Óët—­²¼öEвÅÉ}]Ý[°Ã#Nîb¢e ME¬«¯ÇãñuÄLÿµ·:*½Ñ±ºÇãéhfØ©-Wªn Á†Õ‰Û!6@bA®þzŠF«²±åeŸÕ9ÐFÁGð€ó|Zýxåßä`«ÚÞÌ2Quvžu¿_ ÐNþ E B“ãаÌ,žÓÌ ›¯m5ÞD¸(EƒSfƒFwZ$.lô›Á‘±½ÎÎx­èIG°h* 8LvªU°C&+Eu$/Ú(Z6îý#øzάøËåÂÈíÈ'®*º÷!îE±Hx{”¯MÞßýÞœ9³‰æVI8nö}·ðs°‡TÝ/f©WÝ݈‹öÅͯÈo¯þ绡°Ï‹À—©á;âÄÁÈJ÷Ì¥áz”ŒÛCºýIwäe×p}Çy5%‹£îdãdˆ¨ ¤ ™+U1[–Åe¢ß¦«þv«¿5õ&’?Õ™åß8“äd4‰Ã÷ÈPH4S’‰D` ®Yá4 ¢¢¢Um1”‰jâJøjÚŸZûM{€ßí4ø€auƒjÝ`‰¬¨Ð’¯Õâu³¯§5œÁÑÔvøêÇã¶_öR"¨‰vAa û=‘?ïvmg5¶pNw­~éeß-RÅìÒÑj{FùÈÎÚ§eÛgǵ—tíO}_®ù Ye&è¯öI :Õ‡þ*(ž= RU;"cþF0ïCÌK¦Lq°I fØùZYIÒé ‡fϽ¿þ¶ý!ƒ1%‚µ@d6èÛg… ÈNTÍv†²X#ݽúÈ‹šíTÕÆ¯{A´X^œ"Pµ¤ßûêyҶùïq#C\9|4à’Ý*ºS©¢å=ÐȳÙÉjƒèX4ɲ‘úa-¬š˜¡*;Rd8ÂѨqïPÕh—T˸ûáÑÜô'd!­‘áÙV«¡ÃbçÁx4S9û“ÜøÒ#µ'·ê¸à&>3€Ï¼¥àEÍèn8ÝóÈyØ…duûgIžœ«„1ƒDWt—ž»Sè*gÿôïOffǤšƒ¤Gø™è¬ZE>›îÇ#VõXÑ9ˆõõ1GµàÓ¿þµßïmg¢’´vw?}^ýKhUû`oß¿,¶ ¬é:•Z°ú °|XòyåÿüÇ?O«k•Ÿ<~æÏf&UœV__O§ãÑÝm§~>ü\/–÷9IrŒÉÌ-´HýäÓç㺞‚!w*=l' PÅ+`/Õ#\+|§`CB­¦œXöÆ `$›6É7ø) ‘¢d¤¯Œ Û™}XÌ "è`™zo[z‡Ógzrÿ! è“ωç¾Ûy@Ûæ>¿KR÷ûÂ’7§Þžâõ½ØD¢nnнv·ó+‹ò5›àé1ÇÙ‡èB§–…L4Clôpwd¥fÖ°bbf;[–½½ìµÊÕdû×+ÿn*<Ùl<b  ‘,s`*óƒõ €h\â™+ÃÔš)`ÁŒ~³{ÅPŒ50G³Ü£áõ=>×o»zfïð»ý»P_®ü“a~3nZ8d0À$#©ª à{4§:ÿäž5âË)£b{Yög¦<£ªD—ûeîÝþpm'#W#Û)˜¼ «Åcf /"Xô¹Ü?rûãIeø~ëTθl/÷%ƒ‡JüO9ÀÛæ'32Kz&š?úÀ-³Jta#Á¨=›R&BbÚ h0›ªÊ¨«(ê€]‚ÿ!$†èšHŠy[à׈˜QFy'SE0KDzq¤ºôTµFìÄDíð>èN5ŸfßäjÂ>ü4YÁ HzxøLÒÃ~¹3nh ’×IÆ¥+¬LštQžT3tÑ¢¨ˆäñ)”%¤Âto€îÄ>ü”÷á"=}vwO9ªê,PŒg t„ ÝE4Z*dª€ÊN?;:!‘gOŒƒÎŠ%.ný“Ùïñ°zþJ=Úz}¸Í ß^.tG vÉ­Xc–S¿:y¹éÉM’°VA'cõ朴j6zÄa¿—îôÏ£7»‡£qÿÁ¤ŠDX]ÖtÏS­¬‚Æõue£©É5‹2$ÕÌÌv&h<­~üåx|=¹3Ã’ãñxøå *#äAA‹h8þú+Ï>€Yéîgàð²P ¨âÙÝ××ufgæí1U¤¢fªõó1ª&RºS+RÀª®BwžM ý |=±0¹zÔÛsÕ.[Vf-‘Üò´)£RSHO·øv>ºØFÉ 2uÔ6ë@Í·R d Ú©Ìj34èHo1çäË)*ú˜:¢G*iQ㼊¨ŽŠB²ÂC‡c“— aæòž/Ì—zêv€¯-⿵ü \ä"DäsÉ¥*È3á~b„²ÓTqø¸þ™ZŸ¬wòu_Ý@b4žÄÀŠQÛ¿ •¿ÛòÕ~„ø þhã²W cãÛuóMüûüÐweo7A' dN~™oм™$û˜þSJF6âkAj¿>î÷/Kb@’¬÷ýÌ©oÉýAcRsSæ#Wê÷ÉbÈŒÕàX¥Š,³Qbt1i”Ìäp©*IÔJ©Î:4>Ç£—Gù\Þý÷ϱ÷øÝþ»øs_Ÿ&úMyVTEÊräp Ç`Äãœñ€ 1Î ž‚nîî~ø¸ß(‹ ü/<7ý?1ÝI&ÐFxžnú-6&KjC w¾ÂƒX÷Ù¸ºá_kÀlŸÚ7%n£<[€¯/ëR@¸¨@7\Õ·Ë@ ¤*ÑoÛobàëoñ~néï7Æ3úÅÛ™äÛþöÎæÃäÍnרl»Ýï‰r–€ #ÑÜ[ð‹{cŒwRÕTÌlù¸ß¿,ûý^l»jœ—þ”ÿgZQÁ2×Gc"\‚Ù*<¢‘]@°Çnpt­ë¡õ~Ã¥–.…Š-¦:Çø|e¤)®Jåèïðÿ}û¬ƒ7Ãò1ráæôcn»Ä}˜1«|×?`DoN-:AbRÕ^phœ™:u ‘Ì"шÎõ‹³ý{W¯æ6ŽlOE€¢*F;Å>û}‚ 7+Úv¤ªˆ@T7¨Hª%w{Ƴëû}F ·dŠA¨ŸSç˜w0ƒ‹™ÜÈ®\Y‚Ÿ¿Öþ®Hƒg9!m5?î4¤VfK…ùrßžöòn+š5áó|ÇÒ¡¹}wÂD`µ Œãx+ßMýn¼0Lp‚†o›¨$7$c× Â&tæë–üme×ûK;CÙãp¾MÄ\Ô@+‡èÎ%õluXhVv¼²¡æ”0ª×ø-]ÕÍ›|‘QÉìð¦ªnݼ²„ɺkÓ™Wª$3 ojÞLBžØB–fEºöªânÖËAÈ”ÎO3EÒëªn–õÉÍ©±æ,DbzS³›„;W Ÿ–,X¬Î#pæhŽ®qØô¯F€åɃU†jQUV…ñ`…M·ÄÆ‚fwñ}{“Æ›™¹9Gd$[fâwNŒú‘ŠÏ’{2 –5,§0VòŠhØs"§ˆ’¤' À.;®`aâ…´À+G½Y0´EòÐч·Và©S­è†ÂqGv»#ò ͥ˙*9@•AäÍ]ÕV • rY€Å{X®ž`øU­¹œäü"²\$žTµ™ýûF4r'A‰ª]7³YáÉ'’*p¿ZÐÅ!Ä<´)à‘ñ°æ#æåE¨²®âæ×ÏW"–ÊT…u³Ão »y/ H6àÑ1“² ªY¡¨@z¿»)D”¤ÜˆÙadpÂ:è zò¢£ÚÀÚ™ŽK©uPw&X î€) s{.t"*„‚qI 7P*³Ý-ªz ä âúw¶¡7eÐØ—¥<°]žg8géÙꦪ«š)U9 K•ÐvBˆP`ȺÄ#¢Ã3<÷Æû=@¥ß´C5ïèè³¶y¿¾m=z'£ú͋Ӽ3ò­'|vÜÑM¾Çvõãë›sy’ä¦opxƒ™ùªÖÜÀ§Jòr^–år>Ÿ 5 ¼´̘éºýÙögŒÕë®±N6ç­@œƒÆÙg¼5v÷‡Ä=\˜ §C,ŒZ2ÖžÂ\ •¹2Uš£`àOá•ÏûÅOx6μ͇¿ð¤ˆô£‚ÀÏçô{}PÀ{Ö“7e'p~Âu÷~îµ>q€<ØÕhg¿G 2AÞI$U5Íá ·bÔä¼4ù*².‚ÅÛg3w7€ ¦Í½F#€¯… ¿«êr>ŸYP„kHnØ4D§]Fß;µ‘Žãîòv?rýCüÝžò' ë;¼ oþûeÃwc±ë ƒå°ÎêfÖé„èáé9ôñ%?* &ÅøÍ‡»þ³,îÝ”CÇŸ^ÔÛ×]Û¬UIÕ¶ŽÇ¯Œníí¿kš†0¹HÔô:¬a4Äݲ‚v°Í4ãBo†¢í^ç•Oƒ5²šœ'AØÓ_Š/Zøu‘Æ#Ï‘¯é²Ie¼ÃˆØUÇ¥Rî¢g¾{zYUf´Tñæ ¨ ÓMºP7 º,3Ä ™¹ngÀ*a|¿‘ „jä–àPÁˆÙ-<½(j4w\M¹$b–[ÜÀ檆汪»‡¸Qmî®@`n·Òe©[x‚*‚‰Ì"ò + \ç}Bˇí9ÜêðbÛB~·e¤á’uìc¨}üwáð*#«é±îUCs®¢0kŽUnU$‚p*q¤¡ƒ g!hSƒ…åD^°p‡š[S_-Áu®$,|{“¥bg'‘`kîy!¢ 3É|ð¬3›™»Ó‰¿ÐçCäÞ / °Ì1í‘FVs€„ë p…T&–ðèÜí¬Šî(™§E!kêݯ·tÈ/DT 'q8½^o·q{š§  RèTƒ ç ‹â˯—¿Ø«Iå,÷¨Œ:2½\uÖ÷ó7ëΰ eÍ{i¦%ÄãhÖ/ #¿ùH†XŠ/’‘B z3rBðönfÕጠGGetʨñ3"âJÉÿÔpUÕ/Š ÑÛ•¢.©"‰ú ßÌQjZw‘Mu(\¢¨8ž£ŽàÈñYÚê¹l<ƾwfîÑk«Œi6Û¡@©TLD¨Éˆ o¶|:£ÛMÝÍôvÕ×* 1½Èù“ Â:8ø´WG#ï=Þ}1êø˜ó©ož˜ŽHóftñî?:ƶ ³Î–º¾‡ óî#ÿñ°½k=øño:~Nýˆ¥Ú$‘Þžåc›Å·}ü&ŸA1À¡)D±'f¼ÚVM©v3½©kÐ1Bá¨àJ"|ùe¹œÏ"2œ¦Ê"(03¤ÔYÔÈ·æXK¿‘¼ókípægÃÖMU}UUMv‡­Žn†Eðç͵´CW7›ð5Š%H8ŹÁÀÔwk®Í‰Cê\ètáF{¢H°å€‡ZØã¡Ü?œoöWí…~ÊøÑQ¥ÿÓþÿÙÊ<Ó?àÓ›·s ;FÚ0D÷ýlz0­ÍM:{X¢ * ÊKp¢|:ÛêjCîhh"Ü %ïn:,šì • ákñ}ú¾+?$šå¿ÐÞ¾?øÂ¡Ñ–zÊMªófÊDÅáävš'9òˆìò‡‡u›°y"¾ÚÍlÏ ;Û€ý¶úµî¡Í»{Ž:à;e¦ÆLj…8>kIu³ëÏìö@9ÇfÒv„q—% €º[™ù"¿;}DÇJØõm¬¸“EÄÍl î(pÈ›_¿()Ý””r›åPÂF¡ïø9Eaªy€†”YèÂBp#Ó@]v¤›½Ÿ¥ddFQ³ènÖnS™ÃF:” –_Îæ¡[kNÁèC "*ñ`îuŸ>žÝßwÊA<ܸ¹ó§÷²n‘÷G÷ý÷~ýþ°ggY©Ñaí"›™]^Vwa2øV©7ò²D}):Hî®Ö IDATŒœÝ¨2*¹úUu*jä L‘VxÐ2S°ÁYDUÊn;) @ä Ä2ðÈ\_¯ ËùÓÖ%vP74äy¾ ˜wk´ôÄx‹H$0w·ÀÑb6|"áLä’±¯F"h†š„Uû ’7×AA‡PÄ­2ØàÈ›ëêªæD$‹RÃ)ÁÙ× ѶpQà,ÈKÍwkĦ÷¯Åb›sE¹ÔŒL¸fáâ$$7gÌð­ç2£fÈ RP˜¹Ø$ÄVÇjº:*1™A²&Ã\pSÕFR]ëû£âç—eb³Í؃gçÜq°]:z}ËEïmûšs˜i‡ïì߿߬oºBoª_Ô›'!“0щ¨›Pê#y³ûçÇ̰Ýí#B»OžÖßµ^ñ6Ñö¬ƒ=çïÄ{æ’oËg$ä ΠäÎGÄAè–(•ÕMMÕ#㉟YärùŸË¯—e9ÏFÒ_•­Ömê™ÿ‡[ì¹Û`Pôoí+p2àenhÐænf¡åph3oQ`CÖg.ªÃ@ ; $†Ž’“rì§I1·»“ûý’/ß«ýt€¶¢Eth®ùÀd!t³HÌTˆùLg„ÛMuÙÍ#ìç]µ»U׿TøV ,U823Æ#H–?ŒGµü˜®ï_uÿ Û^œ´3°NF­8zäÜÊýÒxƒ˜!íãMFÁ7o¥ôl<ŸÝô½c Þèç;(G§ {åáM¬qukA0£èðâÖLªÌš¢qp {÷Ù’Ouœø.ø>^³˜Ç@ wfØï"Ó¾ýÏþÞaû“O ˜f=áŽ^ìöo‹”¼,—a5Œ“$b,3ð¬éA\‘n_pt·BÜG‘A  93ßõ¸dmsúc%g#u–%írspLÜ ¸Bg«Æ`"ˆ$fÕT¹2ÍÖҠT)K+1`±˜0pŒ°£„öSêƒÇ³gÝ÷±Š÷Í|ìâ Œôqd$žˆÙg èoØÅ^¶tÍ sÕEˆnDákY–€Çs%’óTëá*€isý¢ÖŒoZ¹²ÍÝJcôÿûψ¤pMöµ4  ©êíõöû¿~G%*à“³®2‘½áN]ÈpŒégØY»°5þIXoÐüf ÛÍ÷Ë~3ë._}0Æ1]ê妊ÐÔ@\ùü鼜Ïj‰ÓVÕëëUU½9ÏŸBÒ,t¹‰¨pz§A–qïJFv¨4’öq_šqáø{Àé„IíúåÆJW°ØÂ ¥‘NÝÙÇcz°“n†Æ ƒ¦+½Yd‡PZÈ;“+(5ìfÎhÆ•µWÖ¸´BÜ쟪A%'xФ³®Ê–„ÍvØ MÄ>êwï\Þ<ߦø>tÿ@9Œ:{37U5U P«°Pð~³D–χ´iTÊßÿ¢?<=âŠlÆ"ß_¡a{’7œÑ™ï¶»÷›þý/¸û§é™Mõ—›Xûë¦ÌG„¬dD3@(úªÁ^‘Šh•¢ÜݺI‘år¹,/çãÉ9I…¹ì>|Оg‰ö¨„oj=â˜ÈÞb¬™¯ªæHyÞˆ>bÑkž™á n‹Øådšµ‰#pCßJ¸˜’ɬ’T2®6*º’ŸÍ7ocCï·ïn÷BÆ?àŸíÇh!eY˜f¶'lŽ:˜T`¶"e0®g¼Uá×Ûµªá3!࣌žüºª»Ý®a–.èÊâ+1­­í·« DDÇ×Ÿí½¶Û³>päëpÐõ…nî|§yhG4—õéüìÏ‚oeƒ|vøcDŽÝ›Îð‡dÂzN7x'?H( N¨àº2ƒ½¹UpTÐí¼ÞÑl÷ŠT ýŠ¡s(:•‡ øÁÊ=‚‹*!T|N$û$tã Vh–É0˜X¨ê0ÓÛM¯Ÿo·P9«º{ðE¢L.6µ yÃ4Ȇ:àç ¸x/Y˜ÇŽAÍ´aÔG­¯o¹+Œ¢«ÇÉ·¾§'6Åç\ê@w-†&Þ]›%„²2Vµn¼²º‘3*¸) Ý‚­€”œJÞôð„•œ¢Ì8&€òôFvÅ·»Nâ®ÖçÃóòl)Þ.߉·YúRÚÔ’‹¾€Ár":‘ˆð)„¾vñÖ|jùAáÚ´aË/ Gz©ˆ–M„ÆÝô¯Gü46‘ûãž´7ç{ÞÞË)°íí»¶[ñînåwË1|£a–›Q~Õ#¬³êõUãT|’3‹úEU%ên˜9C¸ù t‹R ”Qñðƒ ö¯væÿØ»re7’\{`UÒhIm‘²:ÆjyÏ|¿?ÞÄxó,‘Vßk°*ÓÂ@Veq¹‹Zê¸/B0´kÍËÁÁwÀWýʰ¤ÖÆj`•}޲nW²µ^}s«sÁñø¬Þ<…¼öÒ*=>ÄŽd¦ìÎè0¦£]Ö°U3oº‡<Öׇ՞À¿ä£È¦²_3‡!|r¥f\‚ƒqNš¸ÃXݪŸp²ª¨GÐ@Ôrˆ¯/ŠÞë/Ò€ò›??æD¾+?bcû>Y`BW6ðàæ±@;— î—iP(ÐÛ! |½eÒÕß×òSÛàëºßßò£2g±LauW3 ‘-ŒJ¯%”vìÕTÏ—ç5!Í*áœêþwc jlG &ppAæ6o*£†fú î§×µƒ»YòY:ÄÃ;,HàœEÖ½À]Í—DV5WUÀ˜ÉUE‘ ª€ÀÍZJ>§n…Ƈ;ZÂ8ͺ4ħIFxÚK£h ÿrÿÀQ­\«Í-2[8ù¡¥ÕŒå†…ï}1#âÅ ‘ë­Ãš;V&Óž2Þ½êF›™*èY¹p`Ñ ‡L`L©#Ywf pw` ¯˜G¢r{Æ+•(¡9+uÑZfÆamT´ûSBñjF“ƒ¬]“àpr•ï„ ¸TÝ«¹CÕr¸US‡©{Õ Ôš{ÖV€hb®¦Ïä ¨8?]N§ÓéÛérVÀö‡#!bF5¯ŠêÀ&bb› 3¸2& “/{'rçªWE’Ð6`—Á+Jx…Œj/@3kc)f„ªŠ“èrÎ]ÙN¯N¦BµÂ"OÄæ²42ÃÐ`Ã=À6%p&2@Hy°ÙÅ”—h`Ù±Íu¼H ãªÀõ•oúJ^°"®’#¶²¦€ÅVÜ›i…™[s ³ì…8˜ÏÑ'*S±Í´¥¨Ö¼^Åoß-‹v²|ËfxÛ­ûëÕÇäë×~§l-à!w殌OúËÕ{Ì«Xb×h¦êªg›ÝU-˜“:*˜ nóÚöiÞE¿òÞ~Á#0úPÆÝ¼` ±@ÄØì±@ÅFÆ…:¯U:.µª›ûì‘Ä4X¿}¦¬W8ÕzœyÙ;’‚õëè›®[àÃhÏýðËþ%JF/xhJV*KA¢ÅBK›Xg'‡Æÿù^Òé|~¾ôÅ•PÀhPõË%ŒÚAD˜ÁatÕ¾œ´EÛ¼pœª`¿.6³÷¾ÿ÷BP‹“{|©nÓZ!vÐR-ö•=`ôX?Œ›ý]b/ìñåQ¸{ÊŠ&VªËdI;ÊËŠC …yc` ì,wHÕïìRÍt¤;?Å{f:h¸“v_3ÜA,àŠRC Œ”ª¤üq74Q(nYøêYÉÞ H p“Ž¡¾z1ëd{Ù€ˆõ¡s“µÞbKŒ$Ôâܹwiòñ5øl`£ˆÔ\w&MPê„”ªÎLÍiRF/WS˜oC†€:ÀlÊÞéøF Xìz~:‰†¦ØFt7ß›2ªø XvŸ¦ÌPès ;Úšïá´<”‰lb›€£† C½Ù¤Ã¸ÅÍ ÌÒÈN_ÈóKŒºV ò¾ÒÓ‚µþs¸`*Œ­à 3¸kÍ©P»¬ŒÝ€”’%»¬9jD7-Ф¹B ˆÃq`³£ª.#Çj×qmv&ÀÝMϳzUk’|—ª—‹|~:ŸNçË“žUá vU?~&F…Õ4sî6Ùލ泜\Ùž=Š©[¿ dì•ÜÕjôe×øyƒÍ05ã êÝ<»ÍÂëV±£'ÍOŽE¥´“)À™Ý79Só;¼"ü,°PK÷÷àÆ`Œ`žYÕMä“ìEx'á6òÞ¢ˆH#…w³ëǾŽSÚ!/%pžü`ë㘉Ž@ù«©©GiÙËñpDUØÜ9ü³¥–å¨Ó™ÖÄøÙ0Xq ¯€Ž%‰´ßpY¾mÚ¬Ûy°?âÁ§¦mlBñ¸Y–¦Á@µ÷×äú>¶6þb!?zÐýò–̯q “ÏëEÍܪ{³seƒ‚…{¢ªZ/§Ã^Ÿ5 cµ, À*Ü”˜xaQÝFh̓ëžp³ÿ>”µ»»ëpâÍ‘ð0VWÕ˳ڬ^Íšó'±:T˜sst†uËàÈ  6Ô°Ésóî¤éØL”¾qgZÍòªtívzâ÷’üô¼¿_ð/ù8²¦ó¡¹57ÇaZ))¬ VÁY^…|8ç5µÈÏ™ÉLçóÅTµÊ±áø;˜÷²cL¤êœ Z¯ þ.;ëGÌùWö³MHö»]ԯ˸¾oM__’®#ˆ㬖 ݼ[^oÍ×dyŸ<ìÍ·/ÓoÂ?ß—$@ª¤„© ÍàY"/"c\܇,ä°'itO­kvÿCB×urJphÂ!qÿ;wM3âŸVs–…ÃÍ> × «8í²ò°V "LÔ5|ÝíFïÚµÃïÝ8ïæÁ„bÌ€¹›;*yÕ…({€Yf–ð*§E\OÏÏzyºØlÞ\g³çËÿþÏ×åÚ”8sôQ¥$5¥î‹ÉP*ñ”ùáv‹ÊR‹Ë¦¿öšà¸˜¾Éç4¸ÒK×®l`ž`m(#ê[݃F2³¾.„Šœg›5á’¯}ØïÃTòíðš/ŠNϦƒÎJDÌ*®®dä¸<]ÐNŸœvB”ƒ YÞÐQ<Èç*ê˜ "L»ƒˆyÛÛìZ-:‹ ËR—˜"FG>«Ã!Å|ð­XE|cTÌ"ìPƒͽ-M 7f–BV]&öÇéé¤gÓ@@Æ$56Íá—äL9"ðáó^>‰™ …¥ä¨ˆ·%ç6{³’àùèô1¬Í0ËBÖPoÐYA@Í UTr9šƒÌµ‚Z& f÷aíÉôø.™ö9Tb&!š:IƒhlSþ› '²£|Ë&¬e. dfxUµjú¬ÔË~Û÷ ˆž@ßàp*×N±k _HŸwk·Ü^²ÊÊ:á}Ž0&µ‹‡E„ Â"ŸDöbn ¶¶ŒüÎ#Ð+ú}®fÝÑc Î#Ô¼tÜìb*ÇæËO=EÿöåcÝ»»ugßpíkjË’Ê1ê /™+/Þp[ξ.yË僯¢eê ¿¾òÂÜ2>èŽp *ªyu³žç=k0È8ÌÌuE»š>«ÍnùojOúí?'õë?¾òï d@\nèI:÷u…+pÖ›œéx—µ$n¼<]¬šç·–ž’6pr jáŽLF†œÅÁ}-^^*ÎÁŒîì vŸ°V?é»go)ÂÇ¿Qÿ~Öýgˆÿ2€É‘t‰Æd2ϽDˆ†jð¬š7·,¸C\ Sž¿üñG$oøl h]£Z!Q‰Í›‹€@î!ó0~ž)øwÊO‡õ»x»Ý9|¥Å¸ÁÁ” ÜÖ!<}W×åˆè»¡Ñú‰òÓwI±{£L@x%o@ñÍn¾H¢g,1kõ¾õ»¼ÃáDÔ!©Wwð~Îxìp¨F¢Ñ¥[2Œ‰BÓ),‡<›wD;öYµZR4Ü[\H'P0E”ØÝ¤pbt[*Ð<1‘\Ç–-˜(¢j„^;º ?OÄ¥CvÍ(¥f^í¬îvÑ9­&Ì©L4Ca* €Ùsûïq” ÄRh·Î­2mÛ˜úðÄ±šƒ›£P8@=æ?t–Ó¢Ùnbøý»0|¯ÿ¥ÆWjî¨4/Кkìr±ˆ„Ád-ÓÈÍ£ú/yÃùY}Ö(";áðܸS5†‘e®ÓÙËúaI.jæKN8# å$$ ÏVÍÕ‚5MDŸÇߎ‘žÇàHióÙuÖ±¹¨$•w¬ð%¸š»;ÖèGj|\ˆvÂ[3ÕU% ͽp±ÖktEm"¸¹ùùIUõÛNf °ˆp!‡Y5L Љ6§¥/Dy°¤_:>jÉ®Ég3ôaÙà0«nÕÕ4êZg±®]¤êY¸9rNÞ¹ôûHÜ´vrŒ²ÉáÀœ­ù‘ú0ÇŽœ q“ÄöŸ/ëž `uïèkcgƒIš€Bø‹b„„â[9½¸÷<‚éÆs÷HnÌTD  ‚H¼ý }>«*)AÙ%˜Èu5PÓž#,€ÏõþXcãC¦CØ?4†p×µ}1V#fæ­ut7¾¾öKAÔ­ÿëÕ-hÓÎ9Lw–è·^øó—eåñ0ÝÜͪy3í ÉUΪg¯&Ÿ>;3óŽ–äÍÎOçÓ·Ó¿þù/«¶ßï¿ä²¼æ ¥ë ûMÄW—x¼ºšYUKæ6º£KÒXuTó›Í«{Uz ÷È ŽHµ`Xœ±"À‰™ˆcñYwúu1qãc/o6H|é˸ñ¿]VFÁ.?Ì8y)ÂöŽ:Ào{Ÿ×›÷æ>o«ü¦÷¹‚<ùÃ3Sã½]‚l9蹺1åˆçp8®îM¼÷¢Ë:)‹ˆ3¡¢ÆÈIU=N§ÓIU÷Ÿå°ATÔ@Ç…ºY>„ÓŸÿ>?]\ÍôIOßNªa·kt<È—¯_ÿøÇ—ãg!–H®‹Òçq<âDˆR® rfE`.{a¬ WÖΨß•‡½Üµ³WØÝ; Ã×®¿¹Ùµ†ýžçÞ•á†öà}ÒΙ¹j4q¤˜Þxôór~Ô ?ÊÅø†]˜¶O¼ßwä »™5ôÜ˰ÁÒ`fé5¸ÂÌŸ¤u#áÄ÷¾BöÆó¯N{‹ûð>ËéËl]ýw$ÛeLˆŠêLãøÙ,jt}0À™ãFƒRc†›Á«éìjñ^«Ù/‹þ[ø—ß„'ìwrü|XG"®[-¶µ±0ÓDHdx_#,KÅ®ëhW|™ÃB&LY5·ÜQÍž5œë5hwÐ9W–ûÖnja1.dUU]gUƒGd£A;ÍÏÀM>ˆmÜîH@ƺºßÓ¶o®Jç]Fü2D0 IŒÓJ£â57­4k¦ØÀ:€|ó×ÕüZ¼9[Rõ"ËEKvƒw½ÏBn±x5 ÏÎ8b);Lgÿv:YX㎄Pªf€ˆM**aöLìEŽŸE"2\pˆ§8d×)…³2'z­l†›ZFÍTUY„ 13í„'¨Ùù颗³šs¡(n,eˆÀô±LTíE|€` |„õíÂÜý¬vÑ‹>«F t²U3Qã¥_ú€Y1½@ÆAZŸ¿³ì$y{–g&Ù 1s!*Â;–"É6¬¢½æ £óÞõñƒø¯c»ëZdÙz¸£! Y,¹–2`§?/§Óér:‰ì÷1Ùw$ÌT„wdºzæG±ÁÕ“,ð6a§ŒßlÁKÍÒõø°)O}É/¾]·¯Q67²ÎŽøë®ú1ááçþíQd{8±æ}ã‘ö»Ñ*·­ÔYúÝgÓš…QâÞO"U"¿èùYõ¢^³ÐZxÐr4®,ˆ)É,T$ŠŸ / ¡ŸÎ§°$‰ ŸöÇ߇ÏG"f7ÓË%¨à}Ú—ßA‚@Í}ÖÐp„©Ó ïXX–í¦}2ÕiÃjj Þ}ÀTsn&wæâ™r¯fæ::m¾5Dɺ,Ï^Èg÷ ¦2°p¢l²ùÖŠ†áöšÀ›~¹Õß6aŒµ‡çÝò‡åÃ9XG_ÒzM«>³|¡z|£ô+üK>¤ôùÃ…ÑM¡»&R‹°Ú¢}î&GÙ‰ªžŸTÕy'¼ƒÈáÜÎÌ "«zV£ÿ;Ћ|9½P”è@É8÷=À'PõûKõ ´^ÅðþŸ‰Ã áÿn·û›ûýò’Sƒ@ž4³ÿeïÚµÜÈ•d¤ÐJÐR¯ÕkÏõöÿ¿bÇZsDë¶,"-V¬‘ Š/uëj÷jÎi3"›¬Qxä#2@3¬™æ"†ž°9 vóöeŽøÐ ½óó¿j*}(‚¹Ïÿ\×-¯6^Ÿ zö<ŽDËöQµGÁ¡£^Ѧ'.ê#é!:À­^ˆ†rpóÚ!mð­f”ÔÞ¤\"v¦L¦žÒ¡ëßj&…®@Ï6šfM n‘ÓÕ.Èð;Îx%Í2 ΉÂ/%xAýÇÁ°°ë±˜ÜŽò~¨¯ïx]äuç‹¡mC—Ç4P)".°ùƒÍ.OŠÕË2oì2C÷z¼ž]Kß|KV_Ipàñ Ñ´6•¤…Z§Ë„V«µÒ.Àö²ºj^€7œ™³¡5ªã—x¶Ðš9NŸÎÌP Àä"oÈ`eG$ùó¯o%C˱kÍÅý|–‚L‘¬Å믷þ¤S*lÃ9cS¢ —£EÉA Ì$Œ°½ÂÏó`7!dÛ]6ÀNCEeÄËå +ì°Ní5<±æÌXu${ã1•d+Ü€tÁœ¼»?`üØgúõ­Ùˆtõdç·“c³å š¡Y$iú7é´›¶âQ—qx”» á4ÿçÝ-qúQø°«üÝZŸë2ð\ $û"KžÞG⦾Þm”™˜¢8ñÎîÀúÁAðÜç¼ßÜ@b9w@ Ê+Yqìf •Äùd çoßÌà:v¥´„DéeŒ˜DE}Sé@Vä1“›© 8¾­°’ºg+*’•µZ3PJ"èÓÀ1 #íL@΄d—Ô¶js¸êÚ¼—J35I9h¤gݾ8tÉCf8~y•nŒ„ÐòE·põ;Œ6pûËpö1»8¢p‚zQb_ûãÞïòÞ×xõÿ©­FË>çñsè…Oø³ý~­/ÿ0…y¤zp+#7ë«·Q¥¼¨dµÍçZÂÒª¤Š¯U«õüV‘Nh&"¯¥”/¬ ŽM $X<Ãóÿ<?,н¹Fû;y¿ÃF@èŒYw,î¿Sãàaºßq»²l$’â),AÑHÉñy,ÝWrƒèc£ô3åÁWÖ¤î¾?¹n,í¯³·Ó Ø©7O̦ªyâP÷ñÀéVýCçÚ,&šã;‘`]iÆ »×g^L|…¤í†dª.!Aº2›kO×wóF¼KNò„Z´Ÿg$Såb˜5H 1òÖÎo§“hƒš±¶ÊK¸ºF…mûÛÀ¤½{&Ü8¾1-×ÎŒ‡åЈ¨J«^}ÝÉi–Õ´³N+V’¸‹.À5f{FŠþïn¼{µ&ÐÌy§ÓÛÄ1½rPÊ`ôm`«5³¤òõ¯ÀÍôâ:T£¿×zö¬/°AÑHìûˆˆ0pCÖQº¹eNƒW “c9Þ„çÑ{Fá¿þñÇ<j­¼DÚùø¥îÀ÷”¨î6`¨(5Ô^%‹£vËqzËžŒ°fÖŒÍØ“Qݽsë–)°,Ì‘ÝÊeþÏñ çòr(â'»Óí^ `½ˆ^XµhqzÍ&Q  •¤ÕmÜfö‡6ÕÈ">6IÿBI Àz $H£f‘üZŠ”R$`ŸÀšŽ›Ó›À(òä!¼ß|›ºy;TÇw»¨X‚^©λlG€ÍË‚Ð<:µÓv~bHÜÏ[ßl ÐìþŽÎm ¹²Ç*øêÓ1@̹À úÉEÂpÙÇ|¦Lã= Síbµžë÷ª^1§ÇòRÊË«”8W¼n3ÇÈ‹±Cb}A†ž_ M3¶×á'€&QQvð‚ƒ*€KZEè ìò¥ÀŸuc½„H^ʡ֌fõRÑY!–*ÄQ?À:ªÙ‚‰jRX5«n<4Z‡ 2­YéÅÃó™"†ÀæXVU‘¬; Átæh¯áÁËkïw÷½¤¸Aø?i±øxóî¿`š:ÀŸí÷i¾—1˜lÆ›>½%)›m¼3²ëš#µVUÑ,åKùÚ¾J>ßj=Ÿ0Y"€cÀ¬žAÅ ‘´!IDˆ4•$ÑàjÔ8ÝÆ™þNîæoئãáÊUÉØÝ6¬ƒDñŽˆÀïÖ8®»õœû­ßƒ¢5¢›dAVm#Î-PîœÃ i÷؆ï¿ùƒö³çÓ}Ÿ*º1ô„ÍH IDATÃ\‹˜Ôs¼[eÌmm¤¹J­ß²90±ßP ‰è°±Z‹s ¨d@T“X‚¸ŒMSlq2!Âu#²Xƒ&EºKGÆ‚d¸¤Ó¬ÖÆï¢ªÐ­ËÀÓî?ÄùÊNIbC1(Ü0Ä¿gú¤{\Ö\R9.l‚L{°Ý~ØŸ¶a‹ wYËk#MŒ @ “ ºZ’ ÕIàý" ìµSäv¹Ð¸þó µøó“võMû™éF3ͼ¾ÆÕžŒD³ZY¿û9r®Õ3À‹hÁ¿µýì´Uj!ÝJk¥d°“bHjÍTœÐ‘tÿ<¤†Lv|TwÒ×—âW«V•0J9M*¶è§…Eë^^mP(ê¯^(4³Mù+!«l ÷§OïîƒÇµôÃ!TðD+ßäý—*„î0æ郙Ò"ƒ¬`ÍŽCvbprumëdÛíXÛ}pÆÇ;$ЄÝx©ÁŠ—Q´ÈAßÏš³ÝÝ1L”~~âùÚ¹ë6·ëw]"ÃÙfpWY—F ¨ÍÆÔ ñ…±Á=†@/õ?ÜÛù˜llÀ @ÉÆq‹+‡øù-î¶rUï¶U¢y"}ÄåÔÙ¹$­! ÂÍ|åj9Š9–r|-¥ÈÁY‡¢¯ï·B²41/I6¦ïÇrN%ädC)Å`ÅcM¹h‚dуJ÷]!è ËfT'œc«ý˜%Tî–ÖF¾UkÁ¿0Ã3B*Zܶ8Úª—“ü÷ÿœj‘5J$² i­æ(ƒ±üàÏö[´k;y)ÝÙÚØøûZÜå* (ÊúŸz|9þõ×·?ÿüöúBÖÍ%aÖzB7k¯HX)¯rr(ºáB=GUÇio%~ˆëè—·_Ÿûý?r©ÞÓˆ.® µl¾á.‡÷£Îý²üð#ÓÏ/32ÙO0q-i âz<ÍsHD#;fY Í :¬±_óz¤wî¶µ¨ïnâù·Ï?3¿žwk~ïþêe K},Æ!|êPQñH‹ªËkÜAÝ™¿$Ò‡_äØ**€â˜UÕƒîD®¸@kÎM@Ipx¦‹Z[¢ºµ¢ºqïxZ^*€Q+¾™HªUP´(0ˈÒÜî›#½Ö ÈÔ3×¶¡[oÒKÞZVûåzVo>Ü7’>U'f€6Gó@@ÌÓ%[kæFÕÄ4t`µ¨k»‰|ôµk†'‹rT£…çÃVJ‚™¢ m[œ£ XÄùŠF7 Ï§ÓéŸçj¦IÍà6}t·ÑXKŠTÒŸ@y$­YIꌃ¥98À:ép.ï'@2ë€@Ujãf÷ ´h9”€qÆ6Itˆ#QG–  Ñ´«e+T뢋¼³fj>˜_/îú€ jÒ[Çï~{„v ïѤavWÓŒSlÕy}Ÿ Î"^¥jV»ÔR ð±<×á÷9¢a jp×ë¸L0•ˆÇ‰j­§så÷êƒY´hVW0”Éœ7Ø&¿É(9Ynñ‘c÷ùgoÃ=}Þnùæüç’~—n‡æ>ÇÚŸ@ —Ö¶òûµ¸ò(5¼Í|?»mO»^ØC¿àþ•î¾ëõ´3áA̪7'ׯ&#@6«µ²žO®Š 3«fk}7ô¡¹€²xtXS80G8Òšó±ÇïÐèNo'g‚”¬¯*rТ%س H'!Ò‹Ôëk­E…ÅÈÛ³$¨ÖZϧj²cG÷e?Jl"¸y!šÑª5üã×é´ d×m7¡€Gf³ªkt'Etî’;ßKYÁ,¸Ø(?ŸÆ»yc}̪º ÷ÔíE´}̃àΧüÙ~¯5  oë#íʬaìŽY¾Zãùä0˜ŠFu*ŽN#Oÿ<Ûëñ¯ÿñ*ZJjµ¤ÛÛŒ;ï÷Ÿí~{Ïy75c!‹M-y Iôñ.<Î ÿ*r¬Ÿj|ì_Ù0Û+QÉU slmóx0(ˆúIoW0¸yÿªÝTa½Ó…þ5žöÏæ¨v³]¨XºáoKQàZiÕ÷@ÿŽ=­Â]Äë(õÈ,ÍK[IÂ.”JJbYFžddE8z›•Z,{n¨Ã{!iݦe†VõPø…®ï À –,(×ý\ð/Ö+Z¤^¾ÙɃŒJ@.lÆvÛR7IÑl¸%*ÓÍF0˜ÅvÆÄÞ·Y“0SimãÖUÕìèPÍjRq­›fµÈ£Æ»uòávT¢z†Ü¿®IÖ©h-« ÓK®ÖC>s깞ßêéí\ß*»™úx+2”°ftíÿ½û.ú4£x±À¥ƒDK"hFÕnÆÄ„Á´©%SwMÝUÈZJ±n(Ô’©¨3Ó¨:Ž×Ф‚¨ÑÇÑü1 ØÎ¶¤·mD;ëÐ%9kSE„¼ò£yÈãjoxX÷:ž†c¯ ’$ë‚Ê IAó>yÈ- %« ¨ÂÀ3‹êF~ã\ÙêËp߃"¸ 1䎽´X¥(/ÆK­ß+­­ 8õ ²è6Ù†}Á¹<¶Ù3êÕ¯Ûv»+ÀÅ’öcÇÝîÞɯ—G§ä»S|Û]ô^ýcÑ us]uæC~¿.áx×w^Ê„ÜiШFkÆ‹{•Ah_¾”òRŠ–r,‘ÿ'Œ†E¾ˆ{è¸õñ0“]0ª¬£ˆWÜø~>Ã#Iø£ ›‚#qS—§Ó©jÉk°Ö‹“Ô fDC½œ×Q B‡©|ÎàDzK@ŒNo' 8À4 &åAç¤`D Fd—gÓr¸µä~÷ó-ž‡Ü‹Íõ²ÍßûH£÷¶»c,ÂB"þƒ‡Ä§üÙ~»vdŒW}XZ7“|„…›Ù….kd¹hF9”¯_¿¢“*èd·¨‘Ë"(çZi<Ë™ &ÀBà ™Šƒ²«“éßêû®7~ÿNò£<ä¿·Íá%œ/‡~tçyšgãAÿiëªýâëï}à‡÷˜L”Æqª,Ò¤ï#kÚí=®þG\ßk[êæz@Ïrç"Q¹}QžAß4%l7ú+’s'ø …7À‰…Úp}O¯ùý§½¸6Ž¿Çõýï¤o,M¤‰6A²°ùC Ç*X=êå—΄Ô`I‹ƒ{Iv(”¨µ+zÕC)EŽÇR¾ËAÉÐJå…›tÈðªæP_g}9êKsj_ІÁÀ<ÕÈ-´ ÕÓpÒ²·…u~¸àLºÌš‘ÈÛ;¼p7c“™oäÍ´£&ƒ•È|-ÔiVé®íÍhÂÒá«îÌ7ý¸øŒ›ÄŠKA¦í 7šÅ*Ïç“ÕСcžßª5B<·?°¸hÓ°c üA;m ²Á2v`Yئ÷;ÆÙØiÙÅÒ~yÉ7"õ%*¯ùu0µÂœÜÕS¾ÍêÅ9¨)y“aÓu§1+à©vçÃæüL¬¤Ç)žlz÷¼ßt³K¬ìÈ•©wÖjTˆ÷͢-AEÓïP81`€¦UÌTu–Á'Ñ`¾Ý\mõHVWd°UÍrªtÅDzp&£¢¥ø5c7è!k<Ô d,ޱȹ›¤ëHö“w]zƒ¹PÜe4,Â^›wý:†Å¿.«éBc‘w¶Ûçò Í™ù3ŽýìCð88à ά¤œKùTèÂèLï‘è[- ã£@#E¶QB×ÕÖÏ dLÝYØà#\bMµ1ªG®΄6RQÀe–ÎP“¾Ð1Á‘ @ƒÞ M×h¹Àr»E R‡ƒìêÞJSÔhÏ¿½§—¿ÙŠàÇòâàÄøåL 8oÅþÕ¬>:'$Œ'ŸÂû¬ßÍe·¿<ÏÝ;ÇëŒo§PêC"ú™ü2€ÿ;¥1Ë4>ò^æÙXövîíºØ[-°)Ds² ŒÕœz´"öÂXX)1_bO¥¬ÏŸŸJ¦å‹\ÄU ”Na"@«à‹¢¹– ”²)12Eob×+aÌùÃڽ뱇›á_)?mýþ-ÊAëJsïI¥k¾ÓÙ¶ÝÐz†—g¶ {ˆAoê zÌõbb:¯·ôJ´»õi²û0R.±>/÷Mi÷9ÎZÿ|Ș⚇­†\3çï ”W00OÛ¿M1“ÝPž½n^{ȵŽ*Œ¢VŠ™UÓjtW«‡UI@Õ|Ö[†UÐk6ø4J) ZAµ”øQZ/Yœ½vîºà¬ÃÉÂPé+!Ëró®¶Q D ΪUb 0^ˆÚšG¶•©?¸íê7ž Ëv˜IkF€&òs×,e^›PÜK %•`£AAÎçÏ­ Éý'½ c:Ð#CEäõv{½Š('Ð… s)¥¸Ð}n X¸Æ8y³÷ç ÁÛãO„n–olg6ʶm…²+Ãáë±Úòºˆ%âÏ‘×V˜ŸÿñŒÔËü´`}¹ùDý­Þ÷œHW·©F ’þ˜Äæs6\óÓ"”º; €AªiÓˆÃɺ•¬„ëA‚ûênkq¦QÁÛ Õ¢ è Ró³Ú²x®oXÅQ|ÝäAQ×3j2÷Í‹Aˆ:Nó¼I÷1vºïA ñ×G߻ɩ¦Ï~›§êÝå;*ìÈ:77yð¤æÏU¦×õȾ v;YêaÏGYLî}pu~ð8‡étÆe2‹þëy=ѦѮþJvï¢`yïºô'ÈT2p/RaMèâ*ŸÞÌ/lâN뀘 În„×|<†{OØÏ«¡²ùÒ!£qÍqñ4ŒÕý焌µM¼ªÝ3îB£s êµv½f2¡šTÕÿô6UÊÎãJDlƒoó„›'sÍ4bGæ&vcL›'±B„Jqî=ÅŠþu¦yíºž‰ªâBzç2J[%æŒRJ [bÎį ©V˜ò¥”adÔî2ø™#Y™¬Th‹0 ”Â13©X:·ß0W|™´ß923:ø/Ž[Ì¡|Ä®úlRÕ#á®[/êEJDEÅPž LÂ0JE•døø2\*fpG¨hƒ¼×ËÛ!+ÀœIs)î*%’»,_äzýÞÅªŠš,§ 7 ¡ø¾“À…´²Õg 3LM•˜­1ÆÄÚ;"²»áJd„’Y«2@„ØøÜÅ*¤AT»  —R,Cîr}½‰N5« ZÐÒ–OLÌŸù™ ¬ª,"¯ $ŠýÐ…˜2)õøBZÑmfXU©fw…E-4õú?æíΩCe e‡ŒéÄÌŽó쇞>= ¨ L`.˜²ò¥<%X3­Âbš•/ªT({Q%.Ð¥`2õÝëâCWÆ.Ükä¨ÞÍ*ä.æ$a—òòùÉc¿Ä"¶ €LÚÿ;S“¬~Ì7 ¥‰y-*³¿J˜)Žu#sR †1¼4ÎÝÉ#¸‡ïC¾<ºv÷yLÅèHé<„÷†1aª†phÓfõíÏf Nw]…¸þÞëñ‚تÄÞg0¯w7ÿ³p!"Ê(ŸÊóS‰ÊÉ™Ö sr¬¦<ò 2‘_DÐi&Ç-#5îÈ ˆT]w}GGGŽ®Ž5ÖWBƒ1±&¥V €T¬” 5È™aARÀšÀFÆ ;D¦Û"ð<ÓQÐŽ2QŽ$ÏŠ&¥0›'xŽSs)±À‚heÀöñÜÀf!OIëÃnûO ] ø´7Lu›È…ÏùºD:Ìɽ|9Š~>É.^ ïtCvùxð/ù>ÙåÀþ7ÜÃg#í¿T§š##hг’|*ž}‘pE¿—¶p´ƒP2ùÚdW³¥**@Æ\ˆˆ!Ò˜ˆ\ÿ÷ÐôåŸÿrO¡Ø4 Uø¡Ð© ü÷ÈÛ÷FŽ•ðBGø7 ›î@÷¬˜ï•3ƒó´LÑþ¬þKÛ~Lùd‚Í̳qèPhEšMi–§º ñw÷ÞîÑlÿýúÖ~ÈkɇÏo4Æ×Œ¨r‘Šš˜x˜È¬B›Ú}-¸Ë\r2Ì‰Ú €ÖSæb â\ÛÐ &Áìuq“ ”„8“’QgGöƒ3`‘âøÏjÖ£vìÕ#£ 1()c)Ö©7 \Jx` 0‚5Õ=tD 1gH…c½frob+­Oýh÷dËýˆZ=hÓŽ1wˆ7УÁ56Â\fÖ̪ùÚNé« ØA•î&N?:Ïåèánt;%[è°ª7ƒ—öÕª¢Q-yÅxO‰7,¸ÃÅõõÉ>ÕŒŒÈt(ôñ°™J"BQQ˜Š¨s0]ñ…=w–Jj}4Š @1¸ÜnËaVî'ÙX„ôW˜V4ív_IûÜŒökL~blNH˜H<fVÍ Ò˜Y}ü[‹H÷¨­Êw6˜4¡"b$ krjà%Ÿ:JVÄTp¦ÂÄÌÄÌð°óˆœ¤8öC„Ç9±ï'ç?êšœ_ó÷tþIß8~|Ç ûx×ò Áû/OíŸJZ‚Z"fËMÔ('¦ øR\«ä6t ExЉºÐµ%¨¦äž»¹¡]¥LÚUÁ™I‘¤u2ºœѶ¼å©?cŸµ6s'”ja‚sòõP>?£¹‹­Š‡ˆ‘àé„‘£  ÌkÏÆ’Èî; D‚Ã-MãºrPjòl2–i?€k*jpÜZ„{†YS9öjæUæŒ #IÐ*4ƒˆ™¢"Šg$¯ÊÁÝûG­àî¸P×KV‚¨#ÜÑ— _X«\<íÍc-bªîp\›Kgᬯ¹r‚ÝÕß!ýèÁ®ûÆU+Ïâ!«ª JÄEqü¶¶³<Š!¬ý1,rŸšq.ȃ®¬þŠåõ&_äöDz|‰œ@D\à ›{Z¥Ùaò†j×à}T¼PÈŒy 6§Ò‰yýò{Y^oÀ"MŸ?•————ß+OÝ'ˆ¨oîöº„mªÍ "‹È—ÅÄ•cãLÜ‘óR©æÏ¢fæþx5š½1wVúOÑ}y@⿊$@)9*?¡FXÒÔÁ•ˆÔDÆårÌJT8{"N=[d¹‰oñMxê/•âEb,€¨QLå¸÷ò ¸w“³Àù÷ÎÛÙã™ÇåêaÈãœõó“f/éaˆ\AxÐpÆo„Ó3VMMQ£¸]aæ ¾0e ™&d‰ÕN B©dTäËÍ3˜€A±–(,a¿Å´ÑSF¯”¦t"ÆìO¨±ü̘¬µŸSíðòã¦U¥Š©D5Jd—°ä‡kOU`jjr﵎¼=««¶ØÛ‚%rЊì(ãÖ/ú×1á[OrÜ>„1|Ðhöîúþƒ¯ÎÐ_ð/ùâyw=ØåÎ"“‡æ&üÁÖݶӳŒ\EðP{ÊE¼¾_)ååå…Ë뢢²,êUL›— P¹Ý®Dx6-å¹<½0Èãâ_k›…€ðq¿Xf=ìT:Ž.ܦ57X"XÏžzû¬ þ¼·µß*s”©M-2ÀÄÈ*5ÀWœŠÂ8«—áŸ{²;ËÏZûæ`°=~eo´¿AtÖ>Ö=nkˆªU­šUni0csºEò^hÞãcŒ°Ãd7M6LoF ˜±Bì²=¦ÀDv$Ö aJ°NªÖ+I8šÔ-a[Ë5QbΈŠÁÉàLDàmþm`òˆ´:í–B)S9Ÿ´"™3Áá¦ñœ›Æ~Õ2^2¯À3g䢩ãSg×­çY€º—Ǭ1g÷QšxPð,×í`6à LÐ=_s# ^\Ç;ÐËD‰šÝõv[®×ÛòºŒIA™à\¨éä¬z+gñÖó’ÁH›Ræbj`øŽØ ¯0‚¤œ°€ K¨¡-"êåóU±»iÐh»Ó'Œ3…©:¤q×]º/‰‰ˆ"IRµ‡ÖG±_m0¯3Ð(t† Úl]çËÉÑéÐñô5ƒƒ·ë¦¦PP&®â“'R0î_T‘˜M ,ôtÈA^e 6e°W•jòeÑ/7Ǿ÷U¤Ãù6™ñMõ„bçï–M¾Ò:ðí@ Wûé­ïä̰Ž@b†Žú@HS’`ÌÐõ®f† 8q)O…ԡ½ޙYøI}iµÍìÍ6 gL¹»zŸÆmÓ”—:?‚…ct}LˆñÈ"$÷r×rµŠW/Û>¯B€Ve°š„^Ððô©Xe©Š»Ûÿq ÃYCuâ­í$Îa¢S"î¼z¶KèÛå+MÒË\1½‹öõgÈDA÷Fë¿ à_òAÄš§èøýÛ êØl ¬Å/tƒY탿cñJëŽiW~úÇ3eæ|•×[, Í”=?ªUyÁWy~±—Ëo%³$P¸ÚõëÔþ÷쌿Eø¸›¾³ß†t8ëá‰ÃÕjN“¬„aé½ÇÎýŽ‘Ì³8ðQ[Æ‘þÝÇr€h@l,Ù¸ŠÂÙ€ƒ‡àGu#ÍûÞ×zÚ%çýô§Œ˜C(Ø•VMZ¸ÉE,LÜñc"ÊæY]¯fIQ'ΰÕZ;i¾®‡ã÷A;rÒ¥5¹A±A͸‰}…JÖÅÈËêdƒwE'§‰U r,™dcˆ m®©c˜ú@$ÐÒÃ<5`~€ |¸ó¸LjÓÌœ‚§˜màÓîÓõ÷³ ëjôm‚6¢ ã®Ú”‰RŠ‚±LÔóIuömgZêº5u'À¼R€ÈM^å?ÿ¾Þ^e¯Øy%âÌ"²iÿ˜³›%ëãlªÀ\°Íµm†‘ehC¹R ‰JbÎDƒƒ§á&ê°Fk»]ÿ¸)¨,‚w§pæÂ… ‘—Q¹.þ½k×ncW²»"€Q‘Ñ'šùÿ?˜/¸ëF3™Œ®uUD ª ª€Fó!‘¶|¬»ÆXË–D6›Ýh<ê±ko«*"ªbgçmÊÊ…21Ç(3³ŽŠ2­Ž„ št¨œTƒôxíÜ‹ÿn oz&Qš4sUbòÜÆ‘äå÷ª•51ÝYÐîĆN’ ÷äœ9s¯ 5B’’'ŸýJcV͸ ZÕDTf!ü[ ï ‚OØU§ü+¼èBÜrŸ6E~[»Ï¦ÀeøÿQîd˜ï.x^™9ªjÑÀÉd`qákçÞvÌ;æÀY ¨°r.hÆ æŒ^æF|8ïTSThV6Ök&äHÇh! X j@0CÇfQ$ •€ 5uiwSO\Ï”þàĔɽb­Êƃuyy•ÁyAÄ%®@®`­‚‰„ðQg´vjëNK¶y.ïzcc¨µÏáß@ŠuˆÌÅ1o¶?ðŸö‰uCÐW53ó…ÀS‰Cªû¢t3m JüGáâºçÈàñ~ú¢g³Ff¢•‰Ø?KÄr¼¸~ˆ–BørP€I)”Ð)òtOæüþŸ7ϧ¼å·½kz'TãFÛ#õÃ}`à.iÖc™ÕòÀ«÷»š~ØfsÝ×ò⟒I\A¡)ƒ•´d²Æ”{¿÷Z8No¶7x`ðÿŒo¼ú ì5Ì)PgV]îÈD¥ûöLu²™fÓpÊ–˜ËónŒd^7;u¬ yÊuu yЏAÉŸÊ­qÒS@ã «ê)$* …@¤p©;ʃ?N–K€›/nñx¦[9ó*à¹>ãÖˆÁååì¤ÐŒÍQƒ: ¤iNÍ÷BÓÿ#eiÙŠu^±ö×îÞ;OUèf•A/Э Ù’©WÐå'—×Á"AS!*9¡Õ•D«./ËéED¤3ШV¢Â.g5¹ézcF±Õi´vc s¬ÁÖô¯R`gíÌ IDATÁB4LCÃÜ=&‚×€øÅ˜hêᮉò]XÇ'À Cå ÇöøOûÍ<ÁU€@d±„£4¸ËKÂ¥ÐS&Xâ•sh L°Ù’ǬU3h¯&Í\¾˜ž‹UÒjhQ€çN2ÌLÏ'N8–c9í ¾”’Jw¿I›uÉÅ~ôïŸþumƒÝºÓ&ßx£4ƒÙl<Š4Lñý¸iqŸª§sç7˜³I6¨Áõ – ¹'F¦¯|:.û¶~Ró:¥ù½ñâ/Mšqƒ’YN€E_æ×¡L“¼¤ûeÍ º€y±twe¯²DwMJf:¦u¦3€åö|Š ÿåȤEPƒ‚Ê]㇠ؕ éó­¦Ît ÀZøík@çAMàäôfDÉúÊÖ¯Ý*Ê VÌ+ßp²j µ<*Cí2pp3‰1=“‹w'qÓoónësÔ @‘aTäÂóž>5ÓªÊTèr>Öèê÷n¤.‹œþ÷("V¡"˲Ðn¿ß•ýTÙ&i/ð~£rm[–>ãhÑ“ìcjVúÓ´Á ÖD®Bl®E[Êò²O*/ÈB|üï#rŽdGx2gB.h&g•×EÏê©ä ßwˆ/ ,Î  ª:ez5kªÕN—iÒ¿%ÿ´éÙól»¾D¸JoÄÝ1,CÀ´›j3µ³^NÖb ¡Le__J)eýd‹ø)@”`Í£JVUÚÊìíYÑPöN ¢(Ʊã3±ï#>G¬CÒÆv<¶×(õ•¤Çã†l¯ˆ˜ªžEÔì,âêHˆº\Î] 1€íl¢úíðª™%šZUm&Î_“@mÂY$bZ‹™)Ïù‡êqü‹=±M¥ô›áÔqLŸ!ý‹;C½=f^Níü§}²6¯°ˆM2†÷k^ÛÓuÖÙp›¯"aÊa©â"ò”Ë·¿þ×M9‹V±jZÁYbáh&*§-ZqøêÊ"¤ÉÈØªöúO øçÚƒæT´Éû¨$ðí³oÚÍ…ÑoŸÆnDð0­1ÁRÐ/…ŽhCg¾<ÃÝö\'¿ÝþVx={‘{kh!là :Õ߇?\»Ù §¢f¶ò3a=窹ñæ¹Ö "NÐjܤQ ›®ú9–Àן$ C“‡uz­;ì 9@×¢pŒ«TÀT[¡jÈdffá»þMð™yâÂO>@¿G¢R` 8‹,XîtuG_o;~óî#áúY›µf¦TýDFÝŒã½÷š"ZA6kÀnôÿûß Î—w †G\TrZŽÇãò"d°j"‚¬´+œyÖ_q§”´§þúÍ"‚H¼›ýÑèXál´6–’ 2ðí°Øå‹DTEä &¯1w]­B3&ÇFŠŠˆÀT3;™g.™8S)L\WZ¤:;…ÔlTEZƒ6 âå¨4)Í…;OaÅÍo0«÷Ûž#‡Ö©z¦Ü‰=®g«^¹Ýo\˜¬E8 ðl-PSR&þZûœõZGn yU89(4qÐk¨cŸûD°„ †âw´'\ðw½·ƒé›ïþªÖ“½ÓEt˜FŸMc¡vbv AÎåQyHàÌœCÌ™v Ì5ªÕ†¬íɪ•^Éb¦ZÅÎ"JÐÌ ‚Aª¡ „Nà ‹pNBYסΛEo½3 Ó’€W¡‹ÈIÄì,ª*g158÷¡1‘j+Eu´Q59½ÊéûÑ"£ËÄ…)‚trª¬ÑDœÑU‡Ž'„À®XTn{¼ó[ú «/ƒ£?„e ëjÆOÚ> ªñþæý´&ð|mw?k—o^ì÷ops=wô¬.풑踾´Ím´Ñnš³óR5ýÊ4b`<w¯­$5€lºkêó°ihTfÁªÇãñ¨‹1áÛ|ó: G€ âŒjÀ³ ˜z½Çzyx‘ÞÜàákѪ²Èò²œŽÇãñ(§“ˆ”rpÃÑ×V*åÛ·¿ße¿ß=”LRƒ±Æãy.§U­%*;¾˜\еxõ¾ ©w•gÇÿ›óÚf£زANßå·õt(|ƒ ½5Ææ/˜ßmk8x\ÞH䤯½ño ÷'Û_î®pííDlùÎ×ßõ§O<\ímDˆõ,Vvåð¥3•ňÚÝÝ¥ž†vItï~MjH§?§w#Åí¼t>¹N/²¼.nÂF €?JÙyI¬L9¼ ù!¬ÄžÞY2ƒ¾äØÛT†ñ¤ Œ²s«;ȫȯ6³#E)îÎ?Îh]eqm—+@ö¼P-CÄô,ò*rÖx½Œ¥/¦Á«¼°¢»AÕãËr<O‹ðŽàçLaIqx:]?.ļm:3 âÖÖç·¥Üïeb$19A  sÁ¶eâï¿ìƒÍ«y¹ŠRfΤg3'qõ W·M3´*˜] Þ1±h³ªÚ?þñ_*†ªËi‘³–Ì¢Z¾<¥Ûñp¹›`!±bYÆâjÙ£‡!T¯xðÜ.Sé§ '|9SÉ Ìe_œlª²˜H<ëµvÝ·ÝÌÄ¥dBf/â ÚgZ‡ e._ö‡¯ÀIÄk[ÍTÔ¼ZR+ì¬ k³°ÊUP¯ôyk„ÌúÞýš.ÿhïAan7W3‚ö¤s&ÊXMüð¢cŠ—²Gæ²#*¥x•t. “©ÉËéøýûétìÛ×ýáp ]áDSÞž˜ Z…û…m“Þ7vlÔ7eÖôñ4M°êc6Èó9€?Ðn|ï~¿~œ‘Þ°77uUº}h—ðï €»ëüýãÝ< ®{˜9-s<_‡!w¸p:N¯âccYäx½œ–-""…‰º´¡x„»Áßušhk(\b?+Oòï²1Ò|åìBPk2üGZ¿ü`ѸƒÁ¦ m~¼ÂËF›Ö£æñüêäc¦ö'ü§ýT»,ø±HÌü‡Åq:ç•c T ¾/ú2É‘õ€K{wEä×ïä"eGº/‡º‚Ø€QæPi{•…"mB™¹¸‰EbOÈ(Ôš iÉLyĪ5Çëâ>I{,“ó7´÷6Wä¬;»Ãõ´X¶®Ïñú½ñ³Žî#-ö¤_R¤œãwm^ólX”Èê;_úî¾ó;Ûun@ž[àâÚäç÷DëPQ¾Â}¼Ñ·¼ß‹Ön­E[gN²®‹1ò¨ Ÿ>ÅfÜú‚v}‘ïÞ¸j…±]­¸ ++iíšÂ2€Ô*¨±%ƒ#ý&㞸æQ¯z*xh}hã “æÿøøë¬'T€ƒÑÝ´õIUýÌÖ@y=É&¾ã¾h¼®Õ¯!3ƒÔ÷jÚÔªÉYÿùÏïÇÿ9¢…ärÙ…ø=Ÿâ{jzk[k¿‘ˆòªG½ì‘)ì¬h§„%2‘ñbf¹CˆÌh 0C”Âz–×ă®6À¥^Ãì;©ÿïR)QQ*b}Ào‹{¾¢o-›×i¥GÃÏÓe˜Ò?Òf Uâ2DŒ_ .ú+.ÐÊNzDÄ™æ6x8cûEµß•£'âSíåñ—lñÈ|±)uÐuö™®f0ŸMËŽˆ‰x„} ‚“Ûþ¹“W¸¬¹`YíUx³·æ«ÙA±.%¦¦œƒ¸^«wãÙÙNV  RXŠ3ÏggDɺ¶• °f¡//ÛÈ—A"bb1®Høª®²[/Noþ^“âÉÀøß®}jÓ"pÅ?²l<±;é÷^eÑ-/ ò<¬îhˆù·^FÆBú‘@nuõTO@£ È|8¸Ü/ùä±GN¤0¨Z5Á žmkÀ×=³úE Ú}’„ÄN2iu /öíj¼þºÝë‘–†åú»Ûv—ºå‡Â]ˆàÚÍtóuwצ?ñür|gëôªØï½'û–'jë1Õh0 D 0±’ºÏƒš¸Ìz¨Å‚·æñv73üA`ð§Ù§Ñ1ˆÓ RM­§éÂê%$ 2Ï*¬b•[íÞ[ÝvÔ3ЦÈèÅiÓ ¶ÌîK5 ÷¤wêØ¹nçŒÏÏ´@닞¤½ø&35âf”{ §y"÷â‚Âÿqás)jtÑ=yð2]Ùõ¼H@‹Ùð®†Çš"î§>qY’Õå°ùá6µÄÚP`Y€¯¢k7¸ã·j 88‚CÕª©¨œeù~”W!ÀáÀÑ/7Ãý­©7ãlò2l%¦N –`ðJ`ÕÊ —¹õ,¼}Îd™5b$wÈöôØ•̾Ǒ£âÝ=ΓÙêb0…z¾hÝwçc÷¹gá>jƒ0Ü>½×…Ý?G(©)#Dª¸‘ÂÊ@½Z¤’Õ‚Eby9‰ˆ,‹©ùM¥pæpªƒfÚàEUï‹ËËz>¦?¥ÝtéÎö[­U¼‹«÷véwr“ûM§_F¢»G¦~îYÿ€=Þ¦³3 èÇò0à~åˆyi5«jª&¢Õº†3—ÀxØÑˆ[DôF¦÷ÿØ»re7v%™5@«p,]Oš/xóÿ_2ã‰Ö•,¢,VŽQغÙ$Ϧ»D¨BAñ°74 Ô’•Ùº5_u?Ûé¶9Ómn_¾ôî[©nƒÒnÍ®–sÎ9_~\rΨ@”Ö˜AÜbôF»'É;ÇḴ4êÀ½„©WúxJðÑ÷é¨ï³Ÿ^ë×xš~À¿åòâ]ë³yt®šCwgµY­"âsâ@<Þ¾ÒømeЂ™±gâ­{z¶UŸ¬zäùÚ*OÊI4|çÅ ˜if…½Þ¯X!Ü‘LX±ô%¥SRUˆhT?D%šžÅŒDÎú%µ.ò‚™{ì†ä§ æšPvÇ¡J4×3Z¼á 2B¾õf¡ÚÉ'=ˆÙܺ$½CvñÀ^¦¦FB©9æ¶±Ò`*ÊJk)©Ÿx³aüÙœ«ELûƒéÏ‘…F0gf²˜ „çýJÞòï’ÝË:Àƒ Ö¹pY‰ÁÀ‰®fõO †êúúlŸ¢…ÚŒíoéaÝLsZe8 ‚B‹½%780›>Û–W›_Ò¤EàQОŸbãÎ_÷¤Õ¥l•B±Y>š]óîu58‚Æ¥T·É™HØa¹Ò¡/gwÌŽÂ2À+óÏ|þóœf3¿/[k²Ñœ={ëÞ:^¿šbjêÆá&¾ýXšM%݇ÕM=l•œÎµ£ÍI*¢M0\Õã¾K[z×yË2µî  0€-YV ÐþÔ­qâR¬£/ûµî9°vu‹`¼Ó7ò`Æ mÙ5žEIbçEôQ€þhL(F‰&E$ªÂ†Ü2QI/_ÝdZÀ~7¾(<7}-ì¨ý»“=µ0çÖa<¿}>{×äüY6ð{¤û+v»Í`…]3Íò•ùJ+– éôòåë€ 6ßT¥™óQëMÞ\zàv¯•¹J¶[Ä]é^Qj óX‹Ã”HË–/?.ùgÎ×ì¥ì%6ë·EQ®9_}.:îݰU´ä¿}Útáˆ6ºõ0¤lßÍæ†=ÂåÇÃc߻龍_¬šþ6€ËÇdx+ûRñÚyôFå¬ ^Tô„ ÇÅq¹Ü",D+^ åPQ`!Ægâµu“ëy*³ )¨œ$I"›òy1s¾PiÎûb„æŸg¼47¤FAHa%{<Z$#߈þvq¸Lw»b:ÿ^yµcÖ„ŠJÈÞ´“1ÚÁ·rgm¸é½/s¼{0êÓ¦ì1à<^‚(Õu>B EÐË¥ @ný/‘·öÏƒÞØS}@KíC{Ž,°«åÒ93 5@ê°@Üõì_ ø‰1üºåY–o\CX²|v÷ÜÀ`û¹'–®Û©V0@€FÒ­_lR ë£19mñ, ¤`j¬ªá4ºqC°C0Ïõ(t (2̘Vo©Å{j롉³“¸þºCeÙfí|§s‹p_¤‡òÚ>•M«zq`ˆÙzkÚœîö™ÁƒÉýv­ÅÌìüçùû÷ïùgB/5ú ½WïîkùÓ‡¥Ñt`gf êP5û¸"Îýi›íjµF},I` / …YU¡u0³ƒœå±2P£Ù#|”N¿U|#û¬¨" ÄI¹¬ÒØ–`½ý øÿúèáÀâlþÜn¤²'€t¼±Uµ‘c¤°$^™ƒ¡À,OŠà”Ò—”4i”l}Ü·Çw㥙ÝS«òpÝO•utl¿ð}ØÁ>‡²¼¿ZÅÿzx6ØÐ)©Ü6À¹¯¬0gc#¦‚Å b£¹Ì:Öo¤Æì³W¸Ç6¯3ùöðd¥[£°›r2àh0©ê…GÌÈœ-g+Õ³0¹pß[™Oö˜Mkð,_?]œžà>,él5èø©™ ÷øv"·¾^Þx†OuÞ¿A~À¿åƒÒ'Í€–`ö¸¼ B£5Îàù~è¹õ´Y)ØYÁ@w„·ŒßÂ|5\!Q•sÙðÚâÚhÆu»ª)`HΞªP‹–R‚¨y‰ÑKFáp1¬?Îè9EˆŠ”^"X,—œ¯@O"½fRkVÇò¾¹‹×N{­EzNT'2U’_´jZ`!I¡³ÔëÇåΟ\•n(–¼š3ý8ï+;׋›\zk2g5Ü’­—xün «vªêê7R*RܶÕN¨k¦:ó—Ï#À$÷q3´¢ËÐEPÃÄÁX54'32€ÕÍ×3¨­—½ñ™–@õJHäÜõÎÓǾø—F´€…Èʸï{ÎN° vëÛ+)’Ä̶YŸ¶Ñ_yq añ‚79ç|ù3çó%ÿÈ´,1ILê°Þ0.ÒÞ²![äy¿âpx-±Áî>ì•ÆßNQ3êÎ!j@â˜®ÉØóWÙÕš;c3Ýgä¹…¶Úð J˜VOVÄ·jVÌJ^/-â9>@¡ÑW^Z‚èÓT‚ãèŽçðû–ó£Î#ÆÊÛ^g‘¨f u¨ hF/ªäžš¢Hô’È‚(& äF¥ € ·fØý{y¥Ü¤¼¢ü–‹Þñº¼[^iÿKeh€{U7}Í[q@O‚”^ÒWIêÓi£hï©õ“–l¥¹sÊ܆}Öš XÒ!$3¤¼ìeÛ=c”tªs8[¾2#Ñ9ê¤Aê\Q¬ÕØO:æp/7ùØû%Õs+: RDtƒJxëózºÿn‡­ãèØ/ðúØ^m[ƒÞÏEîŒ^Þ9Ãoøß&oLòþÕrl9 ì<•6÷Õ>·,K&]í¬f\rÆaXÌrfERÚ)Á©¤»Õ dÙ Cênw"wý@¢¤?^¾€äL^ÍÙüÚ*{5'â7´ «9E¡Df²àµûûç˜À¿it+-ü6iîýµ‡;èü«žÿ–88ìSrör×<~§Vñ!ü3ntD×Ëû«Ô"À…ZÍ÷ÑÂ,¨ê¨7øæ‘õwy^—xÜ~uuÜZ#¬0_6÷CS¤oèC8ôÊòK]U6éž µv / Âž¬èZN£ða]€åë[0…Ѝh–ܰm²3„ó嶸Ù$ó‹6÷œY¥|éì  €ñv8ÜDÆvGµ€76/νƒn$pàܶt@׈`;‘¬)ˆò•—K>ŸÏùrÉ?òårF¡M19J|è”Îkû·bƒ°·Annä‰5 “,%¥b~ÓYK&„ÙÊfU¡ŸA¤€Ã§ t¸ô$ÖýÍ5 e4"-¬d!-3gDŒ¸Îòˆbt³¡´{ÔÑ¥ÞQnì@Dÿ{t’5!` •* ¦V¼"”õµ{MwTTRÌT‘TŠª“žº«”íé&U[¡×ÃÖ¾_£Ÿl;ûŸ.`Ô˜}¾ó³ë-&"þš8ðm0`áÌŸ’+²¯Ù)âU ª)&=IÒ$±•cŸ½à^¼Üx$_{ƒ3H°ü6PFX&Àõ&ÌK¦õ›sÀ±d+†Ú9ðf6ƒNÓ0BÙq½ŠLxN¿ZãÊ'ìü”µ™âŸ"ONõ`‰x‡l™¥¢o3ƒ_/ÿõégü-ÿ¤yCí î÷ÚHÕGóM«]³o5‰ÝnÒmÆ}ã<‚…¹d+9‡Ç˜FQ/îǾkÓúp2Aú¿!VÌ®fW³_¿|ýöí¿ÿóŸÿùö훤äÖ¬D 4@fÎ9ÿÈç?Ïçóåüçå|ÉFhJ)%=%2g¶­MÑ!j·²4¯BkÿÄ;?_)ÿ„ðï^޵äý/=7ÀË4Â럷ÿ>U>jýKݳ;žV_«¡^ÈK?Þù÷Yûßíÿ¶R׆AÓnÑ Xë JžÅ$\§˜ÑK»±;çÇDz»ÃøËe;à&¨u³mwÌ' ²b(ÓúµjÍT¨û³†Jõ—–8ÿÁ“žHçi-ÂY…YØÂ)ïDoZüdyZ=Êv8¶ôöÚ“Sêf±Xð8“ÇuL¸åY¹±¦Æ.2ÜXêCGƒ²À²]~\.çóåÇ9gÐSò¼¤µþ Ј6ü\†FzðžañÄô¼eZ_‹L@ucúY-O‚¦¨›uÀjÒG!¢ª§üÁ1@‰Š¨ &0šXc’Ðë!É}†Ñº2nÛî¡ßŽóePí£y‡Ÿ›3ÜU'8T‘p"¯v¢*€gQù ¿æ†spw€À Ö™bïß/—„gnôwN{³éï=þ¡ö%ÍõÊç[{ÙÎÿþ¥[Œý_Hš• :-\z‘—/_SJŽY`;òÂ[]û2.“â+làgKc½ÙÕ•ÌÝ2Ú¸XñÊ^Íà5"›åk¶Ò[dóßçËïð¬E5Þ\øî£jN÷éòy—Ƽ:Hçÿ·¾À~Ƀæ‡õêÍ€›–¯½=²8Œ­j‹Y…ê.è°¼²<‚‘XÎfD9i8øT€–Ì–mëQ‘’3³’&"’’‚⸩l–ÉžK¹TtDbÔ…Ø5ø$)õš¾ÇïÎ¥áÚ¡E7¿-ÿ”ï@ÊöMR:A^RŠÂS’â>¿¦CkUë´~ÛÍg7W(æuƒá·ØB·»Ž?±!ãŸí¹Èt®ÛSwMú•Îàžë²×½S~°¶ êÙ•0¯‰;7­ªÃÁ{,wözýÛz³í±ø}ýªÎ6ö–˜ôµ°U4- Ê2‰!ËŠV[q¾s÷rƒßê$>X†í½íþñ®N1/Ûë@ µšžÂž÷ÛßMf0mŒ¸xЬÁÉEüî¦ÑÒ½ç»~&e”–H†öi¼ötx‡—ìÐ0ÉTvÌêôØÃ_·‘…Û=`1 ÚÖ9½ÚŸÒ[U!¢:Ÿ~kªÁ *bv7K1Y¡Š %¯­\UIË…ÙÌ ¨ˆ‚ Fk›Q‘_h3I·Š9êyXKq8«ÖÒ“ó ó¹7ÈzÕmËÀˆöÜH9!EdÅ€XµÕhZÔ"ýMŸ6f,Nn”äKÎ?ò÷ÿûþý¿çœ%H:%Qј¬ÒH"Ì‘D^8w6tA-†œBÚ&«èb¼e2ž×Ì+q¤; ÕŒôø$I+xñ3VOäöš%xý<÷ûb` J¡g÷UõtøµhLVüê©y|ƒ©c£¿\-g²x˜=ûù½L( îI4s1‰©¥L/;oõxp ³pk'í ’Mì¨ö7ȶÈq¦¢¬) žÕÉ%+$!Ťq ˆi.™%K«`vzŽŒôÕÏ–^’Fµ²0]£eS& ¶©1‹Eu+äýmÀXn³¾FqĹ»Ìƒ e[0F~ÀmHà°}›¦èþñ5Ü…îV«qSKTu“#ðôº¯“F>GC!b¯×m-»Û®9猒á3 ³Æ”^RJiÄ9ͧî²TÜÅc:JN†¥Õ<0Mû†;r»>®¾E…œ²RTæšÅñA[-®J€Ñ±LNòËžóÏ ¬ŒÆ"Šª IDAT‰Ç[…hT9‰Æ$ðÒh ‰X(ëÚ ÐÔÓnh‹×uŸuîÌ–¼í¡öWYvè~‹Öägt³½=|ÙT·¶×Òà§Ÿ¹Ó}`ïÙÏöÛþ7Êíºón¯š«Cë¹þ¾•§Äõï§Ç¬´‹Ç‹‰@îÝš/‡^&ÑáÇ—i®ìŽ:ze:f–›­*¡‘ÓK²b ±ëd1@…ùgΪg_ 9)à$7# p_ŸYœÄ¿ËqüýÖ}þHxgÿub=ò”„לü“d]œvò¤ ý.* `°F6 UZð»Ú\ <ÒYÆ! oÅÎþmÈÛ¾±…2àd9AîÆ{#¯Ù„þýoI‘8îl]üŠ*[«Ô XÁb,Ö¨Ôú´çNú˜·H¾~ö{¤²ìv˜·ÕT›Ãj±v Hû€‚cÔ«û#\ƒé“]µ¯}NðÔßný ÀÐí1ÿm¶xŽÀ -´v£´¹?d(»PZ!·vltza*ö²ÆMYÜDfL»}~1q¯é’¨²éãá~ª6ûó6´v¦ÃnkµßÝ)àÝ[Òê£ôABüqÄVÿ6_yÎ9gË™–͈$ @³sçÜÆIÖÑp×d›}ên~ àˣߗ?èbtØjùu›Æ=RiFU7±E!¦>–<£ÇÍ‚tR@ý5!D]Ô(°£pâ\»"ý?{×®ØH®+ [èh÷Dö~ÁýÿO¸ÙÙl³•²™ÈD$2ªd³%µ,{ìûóZl6›’Šx­`58-çõ8uøâq Û²E&؆&v#ë¶ßÜ¿ºôi’;Kr|ÚÆ’Ÿì¸ÚÝ5>9é‘Y† …zn”Âý‚zÈ¡pcÀ³‰~³?G®Áˆÿk²’9mžÏ*²’•A¿B’’U¢°5Œ~"Äl» ±ËîñµBœŸeÅ!D’xÞ„GAkRƒ#«‰:2 0hó ¹qÿlQˆhòܽAgpWkñÃe›<ø rgœ? Cý“j×´Õÿ2€ÉÉìAغN¡@øÙ߃֮ÄQU,]MtÛrø5C‹‚ÅÏol+œ—ñ¬´T£P]¿ò"IJ)òíHÓRÍùxLÌ)yOO¯~??QTDDµ5¼ £WƾÞ72Ÿa«š _ø <à FHÓk…É¿Ò.X&3*Ú%×öPuw@äŸ+}ží©6"`Tó"x6HeQ­fÝ4 c-èAÄ׳哿ÏÓŠ6^—á£uÛou¾«4c1=IØÖ9$—?\[¸sóK™3 ÈKµ`¥›ž¬âÅTMGê솶À Ú­¸nÖ¡‰1Ó†ó#õª9"Ñ ‚"6!Àn_;Æ;©…Z©(çbg# I4 xä0Ã…ï} G®°«.w;‰o¸‚ Ú‡q´°^¨€¡£”Ô¥H¤ŸÑÐÄ¡Ñä¦ShÄ‘“òíXÊ©TöÀטQ”QÖLÓD9¾ƒóܘ:ÜN¶ñ,žE<»®‡;.Y- zùßNô3‚ýµ)‘¤ùá´‘¢æ@1œ4¨(VŠY)ÁMR,«õmžNÒ.<Øîÿ{kÈnüûCtÿrAøqÖ;ôòcAÿfá•hQ®·s[4çœeçÉóƒ‰,çz}¸«_a˜®î#ß$‡?âƒcûèM'Æ]7á§IDþÌ»J<—§¹¡hN/=¨xÉßC&if…†Ú»É° R÷Ïõàï4u[{›b@Ð` yœt-Rñ±H@Á ‰B›0Æ™î÷ áÄç*€ŠDè4$»,§sœ¹Ý#ðïüá”—{cn¿ú‘¹³…|ŸËÝË~L~À¿ä‡dE3æÿ~@V° kÑXáó”wjÿ$A š1­€($ÅS…£vçÐ#/¢|¹¶<¤—I(²ˆ2~—¬¹X9.(ß_íxîÙîJ/åCa™ÏšÝÎð#9°—Îûeêô!¸?n¨¾[lú>ÝÖF<˜0¬æéšI)Ÿc¬ep>-°{Ou¾íiœ-ãÖÀàaD[ñ ÷ž î(Î(ÊNºæO”qüŽˆß6¡Fiµ=t-r «ñl^#qS$<ðâ}mò|íÊý!Jp¬Ð|ügréq[÷Ð7xêµMµÎ|N"aŠ~p×_>Púíƒl8?}9WØd ˆ(’¡¤C^ìªÒÜ¢Ú—RÌ œ$ 0kÐû£ €P óжÀ1lFú ºXg"ÂÕ=›.«.uñŽ:ˆÊ͉*J3ÉQ- € K€¦t³¿•ò­¼~}=½–35‹Œ½n¸¬]'­ÉÀØwåMcÀ]w/ñËÖIâV(ô²¤v@¸ÌªªÀR‘ •$Bº“"x›ÅC %âgrò}CYaÕñðâÖ¯,ÈI‘O~A¥ÁØ<ù• ){HüÍ2–®ûnö˜U÷ê¶ìµÑC"eüßïë/¥"wçT0%,' Áï•Q•EtQ£yõì“é€àGJï~¶LSîr€¿Ì—kÓ?¾2åéB Tú=§Ý@%©&A^å·(’z܇5Ö³mC¿²d ížûyu/rêD¦—‡j” 4¨,‘S×ÓDX£ŽH‹ÉôuO¨,ªÉùÛûi˜€^ËýÁÇzdzn7@âê »¢S¹ž¤ÜîöÔþ efÛæ/øÿ³t5øøæ:ô˜ybíiŸûúD@ îùC Û‰ÒwêºÁt DSPD…ƒCªxY#EŠÔ_nˆ.î‰uœB‘LÅ‚œ|9 ÊÙÊÙ±¬,‹dA)&gãÙJÉO¥d'i8ˆ$Q¢T´jº¨J¤_<û|ó[$Ù}×ïH¦¹}Íiû°y½šºã'óÌ 0B¡¡YdB×<صNæV’îåíoôvîÐvªoöÖ7 ‚²žƒä|zÎí3QÚå*¶H4 •Z¾æÀø1Ñ«.E:eݘPÖC?¼Ø¯UZë%‚ÜÕ}O7ÕKæÝC!>mTÂpÒ&&€PRW/.zÐK>:18†Jš@ÝÔÜ&ß½qûQ“w`În.޽¢y¹K‹Z‘  h…Ö¥‡Ïaã°‡(ÚÉÎd½µðnn\ÚÀrcw,Xº ;-ó Cm¼ã0@‡õÜ}”=™ŸÖ$/D£-ÈîÍL`¥@¤Çµ–RާãñïãñÛI’JÎ~ÓÒ ÐSÇ€$cÝÚÀÞ«ÑдݯnŸk÷­ä(ç„.ýòËWѱÖñûfçôò"|£Ÿopa‚˜õŸëššK|.ôWßÜîßá9¸g5\&Ù6è½?]¿é?h#Í5¶1Áæ$y¦Ð¨(¶ñeL)”잇~ïÛíå %y3úôÇå]­nÝý7>üD¹Ùì×GMi_•t ¯E¡rT3(¼V‹èA¥|x¼ÂºÉ¸±½ª&Ûw«|±Œ  æ¤NþÜÀJ³B³WÀ*IsòIªIlp+LOçå|5 ¤gçz-·ø6ÎÇr™ô7dlÞ×¾-†-Y÷}ë÷æŸ+ý¹SÀRzW?aJnUïÒ/ø—|’\çw}@hƒ­OÇ@ËL‚$!TÃïÕq AqÝËKzDÎX,­ˆlû‹Sè]ßünA+¦ä"È9?Õ\ʳµHÞ`£$ÉŠRŠ2¬@3üöìO!‹9)—Ÿçºˆ=¨®zÈ'g¶ôð¿“4AÚû\üÊãó܇âTʶ\€†"EèGŶüÆœ3íãïUs,½52ø·ï½/Ç?{Ð×ÄÞ‚Ncº²·ÕÀù«òU‹"´|q²÷ÈØInú-›û®¼s¯Oáv/†3lÿ¨ãâm)ÅHÖŸqW·«gôˆªhx‡é{oúÍ[z̪øK2穚z`ÍX (˜cðç_:æà‰X;žÁ^ãWV´BK‚мxxK0§XÛ&nLdn¯N­ÑH”jÖ I}Û5Ù&€ ÑiÀ«¤0Ÿ·üžÛ–u”7g8D6óÄ;S!&¸õ x¶ @à€¬ÑòZ^¿•ãß§ãñdÙ-½‘Óca ME€üÕ2kÑÌZÎáúÚÊx‡)–-™T‘E´ÏpúàW~ ÷-@…U!¢TÐhÕ<ó0CA’E5Xd7ú$ ÊÑéÉ&ÿyÜ®Ó%­ûE «&¦l%"ÅFukö‹a¨XqeØù^/Úi.&"±³*þ¹,~¥Eºú‘¤šÊŽb¿å{A*ù ºˆDÊCPdY5žã …›òÚ+/P±ƒsØÎ¹¬C†¯ ¶'x>n¦&Õ¥”CV N…XÊcº^Êfi/¾Þ$ê¦ï"NKÓã"מÝÝËV*¬ÑçGbV€˜u« Ìéóžú6goìƒrñ÷®nϦwË-ë¿ à_ò£"ÛcR®w<0s× J4r´Œhü²ÂµB' YÖrÒœQÎ%tVZnÙÏ6÷‹¯þrqmcv0oL>Å + €ªhÎ//È*å{ñô*œ;B(4¾«<#ȺhÖÌFóÁñœ· ¹­gØÕ?>SnØÀÛcx¯ªøGîåê8ºº¶?®·Ö@E›´‰åÆzxtRYÿðÓäÍÚµgo'•Å•›°¥H]…<µ€i ÒãK<¼ —`õœèÜî3cL7y—¼S!˜+UóÃÆ‘œ ÐÕú=˹ 1 ;a<&‡mvШ§Â’+|÷¦'îöÜàôu pgY3×N¬Ã¡«ß€fÔMþy›•ȸ¶ÛÓ=êÕÉÃÚ}ÄØL0,mã.ÖL“ZCö° C´&Éê¼¾(ßËéÛkù^ÌÖ\b#4 õ ÚH‚p€,¢Im3YÅÚ&„A““ôlƒžØµ³›2ö:ˆLCsÊ4›¡ÅFÌç=o°y‰gšÌ)Ur˜HH’êGYYÎVŠ9ŸPøW¯¸«Ñ=Îýq‘¼±­.O*y‡éϺ–‰ži¢²”B•LçÚuçN “p͸”RD7BD ÀÓ:CÙ~6_ÄÞ±øs{õ5ù½¤ÑËü²˜±²¼W—%*;ˆ‡ë'²°œ-æp ’6ô¥#—ØUÛò¹óùú4œWMòá¢ÏODs&‹°êeQ]äôý•~Ä´ÀfÂF·~[™_û†-bw¶ŸÕújCÓë0B™ÖnG¯¼¡¼ß©2làðÇáé\dúë—üK~P¶æÓ;¾™ÖRÌÔk?´Gå%A6¤At1@U@Aqª`ø±ˆÖŒÕÞÝuOÜèжÔÁ•b*È•Í9Ÿ–WðdgÒ¬$G‹D‰Ó(]†ÿúC±˜.ÏŽEÛÙ-óGâk­ß­üð[û±¿½ï]1¿»qêlð·ÍÏ×fv½’{ŽÌý¾ÝÔ÷†s“ýF£åÕnvc¦ÂÂô QÓ%‚n¹IÛ­æºhzï{HBñÃý"-I£±Ñª™¿†â1Ÿn|­O°a¯‘”ÙMﱯ¥ÿÖVŠ5Få†{ÅC²ýñz›ûOŽýÏH¯íÇ«îÆÖœ³êŸÿþëÏÿ÷¿Ÿž_rÖg/>´ô"iÕ¬Q!HÏÊÈ'ô¢»h„§Ž$X5ZPYE…õœsÌ(¬SñØK¹²@Âi®HÐ,ÎÓ§Óëßýy<¾:R„áº[äé÷ç—ç'=èÓËÓËËKÖ\Œ,]«Ûf]§ñpkHήy»º†),ð}òæöäÒfSìÖDiã›®ŒÞMù~ÛMwq°)ÕÃÁ´qODÞë}‘EôW†f /‰æ`QÛ¨?ø”û³µ‡mîñfí€Êr6–YUe‡D¤ã¢@gƒ2‰ßvÌ~ð‰.ìÝypèFRfVJ)¥ðÌbÅsÃ:ÁÉd¢6Sâþþ³×í=«,&–§›)`îY+Å@:‹’§PŽß°Ò†žU_þøãé·¬Q=ÀFY$§¨†]:òÚ,ÿZ@pyQ=dYÂ8‘EHX¥—C¯bæòTJù^XÃh‰î $çüôû³.rúöú÷ñx= `E9³X)g³Ê×Ó©”2ç<œ5ùóo9|åÌc)¯ßK9›î±qKìcË¿MÛËE ë,»Ò‘¯#ZÇÚß6h•^ò÷ù÷œóØ»z5·u]»PQ®À©ö¾Uöœ÷”S¸JR™¨LVë)J–=žÌLÎýî7(’±-‰?"Aü,qæ–ë 9ç—œI¸OMOY4ç—oßþ~Ée·†+¼€ˆ„t!@iûm;ßë÷c…ì|øom®þÀuŒ«Ïùfç½Ö&:ã `¼èÒ»vÏÐ3™¾g,´]ï+z:€Û/1?4‹z‚¨¶¶B²¡”rþy.¥è¢/åo//â² G1´Žý™JÐõ‘Ž^¯lÛk£ Qü.cë9¥ãž{¹?£¡E…B¯ú1¸1hæ÷.’½jq5Tò ƒ©¨¨è);*¡”òýßßÿóŸïçówšs>eÐÜEì9Ÿ§¾Y%ë'!fU+Ž ·ÚiŠ[Wz/íwÜC8ß㇬££“úÇ nÙ³9pþžwÇÎÝçx8¶ÉwÀ—ø‹þ$É OÝý´þ¹Á F_ܳä Ò&QIÅÂ'œL›ªÀ4«ÑhV‰$¹’)ìåQãÆ± à°AwX¬€F¨¸Yò_ù¥’W³¶ÁBòj—_ÂLù ”™²ˆ[õ` ¢G¾Í‘À£Ï‚} ù!­6Ô?î –‘¿ä1õ7%Ï{lñ2§°7«ð¬–mAߘ½ö›dý*Îévt`Í׫žŽwG‚½6—âf,°Â1½ÞO‰Ø„8¸=ò‚#£æî¿‹l&È•Ò:àx´½º@Yi^ 4ÀÈÜ`‹ Óèž ™à–ïyggn³iá¨ë ‚¾1»•®@q_´;tiÞQõH^+ä¤Je©Gâà[¦â-w…ïöØ*1ÎÖ;î¸×9°Ê~ê^##s…‰ñjåj¼FF«Y鸷ô>ÓÁwoêlœhÆF³šE¬+‡bBÐŒ^GÐ×}ƒÂ é)º×%Ò>qMÑ|.%šo,v5«SA/q½›¢OA6;ˆÜÛ:ÿï3¤€Iä3™ <°²ClÔ­d5cÎŽ‘Ö«½*Ä 7]QúaB™9¹Ï¡cnEÀ ;39ßcñN÷®æænØÁ,ó®ƒg½Ý‚ŸŒâ|xoܹÿ~Rtû^…ø¸æðÔJ4ÓEÅ•CñÔz¹#š&pѬ¢'/X¥áጰØM?ǃÑñP–l7Ùg+˜{7î4õ ‹Ã9—Õ=óˆ´©Á¤›ÿpð<¯`ŠîéZw=àUè¼ä·,ççãqv¯¨Ç‡Ò- û£~ÜÛæï·ýà :Ð~ïÓ—üEï£C3°ââÓäÓºAÒõ Ýu¼±|ƒ^óϽÁ U¢Ô"XÌb0°š¤LšUÑE5)`¶uìërsf gIëa`‰‘“¾¼|Ñ˳Tnì”V.¨¥”rùU^¾½|ûûŸü’ÝÖExõBCõ£»§Øik¶Šñ‡’tAsÂg®:ð<äÏ˃2úrôüU {¾õn’'L¨ëÒÖ—¼qGì}ÿ{ÔNÚ½ÍÕÕ (½9#òcÝu‡¶…»­§àzªÏ8ðíé¹;KÄSÿldcOEÞ§˜¸•©ÖæÞI»£ÒÕÎ$±bj‡æ†}^îa–¡l4 šÕ¬ã±„5SÀD¡°2äiÏê¤Õƒ8ú¨*"µ{) ]·AƒÁ|®ìjìRf é–Œ9iÎYNêÙøJ)Ž„„G&^èý4øëÊyz¸CU…Ø%*ŸÖäÑ\£/Ãí]·‹mè„4æ—(ª¥”ó¯KùUʵ°Yº3_Ö6®¹Û7þ{ûñžüuü½yÙO€g‚¢’-Aÿ,ðLc¨edíš$`\~œ/ð“§gÌO‹PçR ‡ërSØjz$šXíuyÇîP|¯Üö5øÁÞœ-Nàƒ7†Ûpßf/)׺ö+ª âà/öF* &5g3;‰"C€EU&Æ’DAkÉzØ-ë:Ð&ªèÙ0E~oTeÏ·èÆuÇk· 5¬)#,ÂçíÑÓ2–• ­ú Ç¿ví·³£0p+ÓãµÍ'l<Á zÊ’Àf((åza5g8ùïoÿü#ù%çümQ · ç¶´¹]fu& )D¦]øúˆaN|%7+ñ9¶ IãQîP€+É ÐP“¨°%I{å UÑ`æ¶T Å/X"ósÐÎñ;‹+m[ûpsá†]0ž3䨦O.À÷Ç?ïÌD¯É _ ð}mÑ#½pË«wM:+ñdË‹äHxk$Ìy…Tç$H‹*ž7C*  $E£‰d!ÄdQ,ªÕ<”@H½5<(ÒÀx•î‘4 þ,™0),tx¡0V” ã¥ü»~SÑ|Ò!‘h«Ú5agâé{øõ€º÷Q@ û+I¡íØæ‚£ž|¾J|LëWí¢˜,Q›t÷òPõãH~4ì90ë¿>i~n»›ªxÜ!ÍØT’»*·W·”³EßÝ¡øñÐöÛgwlÏp¬n¿ofWÇÃ]&ÛWÜô{½±ãºéìò@X×'Úå¦BÌè-Y2òʆNÑàòœ$a£Ç/XÄÔ>‹âùŸb‰*ÍÍ0z.ƒÚÅâla€–ÑaÕ´âžg¨ž¤ˆ‚‹h‘5Ë)(årþy¾”bt7´ïeó'9ô\Í>ˆ¤GËÆE÷÷±bðü»9a»º6†r-矗ËóùçÅãÆ%AÓ¤èîö½×ýVº2ö@%v}U$|†¾´jóbÅ:ĉ†âûdXåBOÈð-RQn¬”€WUA©f•¨–sÎ àS†Ð~çYéÕ¶i³1ª9â&áw2¸¾‡¢;ÐÇfÉ㌖pÂÓêæXrpu* 8L#k±*¹ª-Di¢:%¨ ÅŽÒÊÓœª(èe¨¶+slI@=7áy^J »zƒažÀVÝíáo-Ä  ÖD¢n–Œ¯ÇzÌŒ'>àŸ2ýw»qº¶‡Å.nÀü2éØû""XTÛÿ‹£Óó¢¤y!€`Ù–5 ïÅjmÜž)Šžvq×ñ^¡ÎœÞòóü£XÏÛ³/Ä]¶ˆÛ¢¨È°•U V®d54B hÖEÖX›Ø}‡NÜ£/Gú |ýoÒ±}ž¿ÝÜ|^Üûé>})À_„Ï€9ôSÝLTCÚØ®æs K!ζŒ€%dÉÁ¿4{J=4£‡1,* ëàFzI‘5—zµû–ºAO@œ9Ì…â^¬¼@OÐEÊ¥ ¡ü2†çŠžç“f…@Òs>Ë"¹’zý7] ¦&6BR7çÔ;¼…¯¾ÑUäé_øæ4Ù,6ªÈŸÉ“ýz–'º‰€6a2ij‰hC¤ÛLÉ_ÊeÓ9ÉŠ¼K¾Gí—u!IÂ*4Ùd¯ÅÖëû&CëN~ü2<Æ =äìLèŸ+XY"‚€ˆ§òš¢|%2`!÷gèžãN¡ ö¯ aYG'³ŸÁ*åZ”ÊMR1¯×`ñÂ6¢œÆ"È*LÙµÚð9»GiFE5€¨î×b±bÕ…—^=kÆ" Kµóåüýç%8J_Än|ˆDÖ»9œÈÑ(N•õôÛÆ¤³‹æ€ævÝ :¶zބׯLÈbZ¹òûùûå|>ÿtG÷ô=ë½›î Ço°`消Ôß‚ ƒåš±€ \ Ž?d­t¬¶™^;«»^€¡ ÍWl¯ˆht¼[¨?¡:ï*VMvååç¹8n_TÉKþ§•Í0’fÖ wXÄú: ­Fo-Œiúq¨Á»1M§Ð±#VRO·׆ÖÜr €)(›ÉÎÔ0ÞPƒö,æ)è¼+VÃPâ‰Ú²f9uÖ;úöNQ„7ÃÂüýGé÷4í·ÂoèKþ¢ÿ´†v-ôÔ?‰ÍÓ†¸¤@1 +€2‹£àD•ÀpJ’^—n!žl®q” ’'XÃŽë„Ê©î¢_¼’‘! DÃíÆR Æê™o²$e3«vùUt¹”J¤ò¯œe‰ÓP« Û0)·ba†u*fšý÷Øë»mñÕ# DB€ » —ùt¯®bÑøoÚªáðø™d±ï£×†$ A?J¡R ’!Ö¥„Ís~k9=…>¾2J)ÌŠ/Ð TkfÕhfuÚŸC·ô«µ‰nüØ¿aGèm½À¨~Ô7ûœ·“,ЦFë•uU &ÕCbaá©h{ؘè&4]e1…jÝÅ7`Ïî<ö/Ñš•Bµ@‘$꥿DYy©¥X¹”R®ô¼,1cý±ùœ?–6ÂÖ&ÏfÀÿæ7:ïôád Ný›µÞIÄ âòãüýÇ¥üº”«©¨'Ns/êÔÎÔÖ¡Îÿ~îz+لm›‰¨œzº‘•‡«‘kÛüL^º^:ÌÒó®y*ÙÕ»h^ã·ÍXYª•ÊÂÐ4°c4´ÓϧMOv39:]u'z]™qUø»Ûº7iÅN^{&Ë\º ´ ã™þü´±ÕñÁñws8­‘ÀÑgÑñýÀ1Œ;.˜W‘˜¶…JèÉwÝ^?·O h7 žhã‘"½ç²žT"8‰6`ÙZ¥ï¥‰Z.B ͪçeÔRÎ9C—oY5¿dÕŒ†Н §B¼Ù»¶}ŒîÙ)TVSÚ¾&0cƒX2uÙîï‚ñÒ[x¿]ÚÔ^ˆkíOÛ¬_rÖm©s"´¼(zÑ#¿l;–ÀHßéÐ1z¸ódë¿ã??ã ÏV•oò}²rˆ>W1~ôž“W¿à/ú<‹v—EÎDXáv¼¬? TVƒÀ¢P8´‚ÂR®¢C>õkDIëñº.uDPX›TÓÊÊÇV³nTß„Z9ÏuÖ92ˆ&†^Ó2i†áïe˜°?Åò"\2v-çŸÐj²hÉgÉšO BŠjF·\êÚð'ó!•‘£%ÞUƒÿ˜;'Š z­zû†ô<ÂÄ›äÍå)^h,Ë'¼›¶?Ý|—jÉP(pYa!Ú”z㎛ÈGz§ÌÀ{u¤|ìQ« ›béè 8]·RÉÏ[ŽfÞŸ•Vås­™±Û€,À4E’X6 &ZJp›Z"z£ áÆ wúY¥’ÄeS¡ ôæA˜CûmÿËÞ•k9’ãÚ ‹”–ÕãÕüÿOÍ”×ma‰´î3À5¥2»Þœ6 †R©ØH $ ¥$d.¨MI X±lÖJÁ¹ã¢§È‚{o}?,æáöú™1õ´„œÖ¨™½ìÕ8ßO¯u ¨9s!+Lˆ’YÀg¶gf¡‘Ð îÀ:÷IPíS+ýLwqéžÑSI-çY1 *Õ$*(Z‡¼H¹AP鱩öÌ5ÿd Ô¸•| ˆîvëR~{;¤ÇX"Ó<ó\ã~sh¼÷½iÀýûÍ&pñ¶_N€×¬‚Ømk ,D¢mX"âPQ! –,ó!ˆjbI´Uå©P˜,®ª )`ž2³‡¶ÛâpÕš7ø¦ÿUwÕòÜõå—&«|È~9Ù‘bzÍì èHhn'ÇÏ Kë§(Ç£~(ö«9ôÆŽÛD³"BÐ^¨²)~öÌîù¬1ÉC4ªªjÜž¬Q¬£ÿîÐz²ÓÕIdô‚°"÷ŸDíÅ߈lÉsÇ+=‡ö«ý>fÝE\Cà K$ô9|pæñ«ŒQþ,ÞïpbƒéÍ6U"~áÙŸ£Ý-È»«ïÄÀ/Î1_èÕfÿ[þ€ÞÊÛtˆy{Mœ\ …×—téäfW:Xí6®pñܵùku¡O-·Ž^c]Hž:ôýQAUÄ@}š—ó\¿bU|÷*4R{=a‰H•Ø8²ýž¤ÁÞ$h*0’O³˜P¨0tWÐfÒæ!Åô( †äÈÉÙz„iX?@Hé¡ò/Í)gˆfüÀŸ9˜Ë1",CA>óÏb,†?’>¢"†ÈæœØ8£Û7T^yØÛHÜò/Ge¨Âaÿı°á‹7è‚E÷;? ó÷ptÝÄýn£=›Ã³59FÜ®0 0•Z…ÀC½W×óC²h“;F%õk3º=½¬ýlÚ ½»n^+Ê«§¾·îvT¥5Çs÷Lƒ¬€’ôC*7€ÅâDÓ¬±VËÞ\§–OëÖ·¬Æ¯\v³L ÆÔKà‚…ÙŒÅXÌ 5$ºë/§;èy`>åi ÀcïÛ¿6®©M¬_Ä? In J@ÒXï…ë4ªëE}Í ¼ ›FckœG¸}ã3›©= Ô{Ë»‘4Eá(~X(ASÎY£xi%6ÉÙÜ/¸˜B!A.OãISaöÐÊ>[ü¤Dч-s5 Ãôr]¯q€óÏͼÕÞQh±»~-VQ»¿L·Yiìf>ÂåÆVè‹]Ò#™ ÿÌ9 ~üù“fI%¥À !H)åç1…R£Ðe£Y¡ôÔ£ÚŒ«Ç¹¤ƒOu=ñ_¾€¦,@T #”1%@€f + Q<1€¡¨¬Ý{S¬@=lRþ͈ä>öž%+æJõôW 4ŠÍ\ hÀq3‡Ú5ƒ¸±Žê!ÙÞÁžv}«ÅÎ<áüׇ¦éyà·Få{fkQmþÃT[i\ØÓRI¬æžbP€ÂL¶Kö™crqþ0í„Û)$€Œ|Š–Ëȋܴö¹‚×wmç°Zž+LËhú•K$/ü3À‘ƒh€ÎIXÁâ¶^%K%ôþœ?Ë­’qu4/Ÿþî ô5X}»qôÍPjƒ8]_ˆ@ƒ¦v’¹§LöJfáw+=ÝÛ*´¬[¶@–ÄŠSTxA\&V¿0¡£H«ÝN¼™çŽ…²ØÃ1´*"¤½ÙfÍöý ÚEø2” ðòï‡îî?Ž-›»'GªŠBé¶µ6¿·ñ¤¢/7oN<§;txîDȲÄ ×íh^Øc!»S§-ÏÚ/.¸ÏÂá+À¿éïÑçeu¢ûý§­¨G3²ð­­Á@k/̵:§ptWñòqÙØ¸s¢B Åù¢Rèn±îŸÓza'¸IzÎÉìèŠ2í¼ƒFÁ·Ô]5ÿ•QóÄà+-g3ó«$ô˜C´®5ÞÐ6¼Ò¿A¾Úqüœwp‹È¸jý¼á„×vŒÁý ]egK¿–\j!󺉃ÎÇès̪h0R]Ÿ¼hm¦—ï¢ã« ÐM3ï^€lç¼cPÑG~쯸=£r…ý:øv‚·óo3ÿ6rcæâÀÈJ«hÑË£S”y zWïˆ':´o;úø±#Ç›üEA/Tæ·˜ÙÜLŒ„Q…Îa8¦-ò:&HÓñ¯Ø OlŠï^úfzªó6ýYÕàï)Ëúµp!´ßÑoø7ý3¨#Fkpæ¾$wR@?µèе¸ÜcOË%+R’˜Õ ÂB«†B5ô WÃÀéAh«<–›¥b˜¤­¢ãÚr™h‰)}¾õš ͧŸüïþ£"9¥ïå;ÿ`JI’4ÑrÛ«B³°zlð­íútù<Ó-;“u+醽´îþ2}ê]âbžŒT÷T@«¢0z²œ7[Öâþ¿ékzö€oƒ(ÕÀQÍbÒb€2@xƒÈ¾¢© ëî»tBÓ…Æ[>ÿæ)Žhúa7>ÿ{†„xþ÷hŒ:XíÖ¿Cp\Ñ(¬Í–Ñ «Ð  ¡ „ͼS¡01¨ˆÉSZIOü[ 0MÁ€¨QA.—c•`y÷ÖÔnh b^ò€@5zN¬ž¼¡9t8ìåôúœãó~áDîÛ†vÕÜX:¾¿¯¦Í©o};‡EP#XOËŋ܌»Éí¬ÅØ6Ø%.N~-5.GeÁá3ïؼ¼uχd$Ä} HXn jw ­­Â– qšÇ ð›Ð t=_N_§€ÃJ0WO? óèß³sf£K+Ê;ôå)t³¹è¥\›ŸY¥¯”“-k¼,+L%çgJ0ˆ !;?½Š®h5^>©^gZvo,l *ÍÍå_t j‘ˆ›w·Ñ]5k÷ˆžÉ™Þ¤eûÛ,o¹7æ Éõö7·{rãŸ9£zY#ÏtàÙ¹¼Trù¹‹éb©ZF@ Þ™ZÄÝ;{–#À fþ¨˜H””Rþ+kP+Öªaó–‘M[·.ƒZЖL 2t73‘(Æê&GUÏìúíÉÅÉÙ™¾ïgùÏY4j€H”ïé»>4çì/J·`‹ÄžÔÚ©'Ç[qÙ“öûy @=éÀ+‰×›ý_Ñ´€ c¶/è’ÁÈ-‡$¨UA0­êBäÝ5Ççn/¼óÎÅW7€/‡¸g{³Iv;¡…&½ËòeMÞ¾¢·ì뺎Ž`~,´§W"µ–ãW†U·ÖÃ$Ü~ÔîS«–#Sõm^¸ïË•D¤É¯û4 Ðg{" ¤‘šÇ—–.|W¤^ùÆ•`Eè>^`/2MZ} €*S. žEF ЧYÉÙ˜)% "1i@ýo6¥^yøµtã#¾q7Þ‡a¢¡Â ¬{ôÐjí8ÙŽsœÎf öd.¤ÑŠg‹Yî!mˆ>6„ù:Z3ŽŠÊMgonûÁ\\ÍeÃÈã³Âm³¾U‰Ïê{šŒ>n\f¨W“v›¯Çû­±b §tVË|= ºÖ<Wû^›sþèÞû;Êßsº÷ÓBmØíQÎÆ X̤yþï׊ZÕb»ÐˆTõ›D @‹Ø;I:n¹´3”}Šì¡K˜.E­ Òf~÷e؆±î@Þþü&,Ns¾M¬‡ ¤ù 5µùŒIùœÀMm÷eS2 åX)^È—9ÿð‰ŸZ néZ} —؇TÙ÷{±öô{Ü#¬¦³'Z^Ñ>”>—Êz˜/Ô9AÓ£vd±e¯[H&Ô\ÌÁÊ\¬wßÈÒ|§ø*uàîr|U þ¬åàêLžDÜyçÏ}í€} ð·ü›ýïT›[’¹ð¤Hˆg7™>¡§ÕÒ* ¹XÊÆGXÌ#` ’$µ ‹§«q¶eê,26Áþ cDž0|Ô&‚o(TE÷©6ËDz¤¤)#§o ‚ôSòŸÈ%#@¢¤¢ È/Ì–} ÑË&·Ò"Í¿šªog ^3pcUolä/L®JÕ}*xa»îQ6ë‘,4à€_HkLæq˜€¾. 0ÞN ªÀðÚa6èËfp¥å›Ê‰ß±ø_b:&=büêuWî‚T—wÝ&é•c+MÌ äX´„¤¢6œØß鍩pÞéOY©zaŒaE›ÐÆ¥\b¢·ß?lô‘N¶_î?ºý‡ ÒÄ^E󈉬*éÁ–9ªv!†„Q­ |­‡ŠV˜ÉŒH†(¶ÈÆn”³Q£É1´Îj4(¢HTs—N£I@RI$ê ƒ‘06 ‡<²}N5ðè}³ÝY]~–å?—ØÙÌ¿Û^€˜ƒ€ãósž<æÚ•/—eæe$|×EejåRZ#|R)N¨ÍУ†¬:WZ¤âÚÙC0‚cÜŒÀŠí·KŸã2«¾Ö @BË[ÑxŽˆ5ù¸®‘(`JBˆ·1‡V1þöcë =½"+³ÙšLDûnâS߸D¿.ˆ¿Oí=^¸ÝÙsú,röà¾ôÙ)ºQ‘Ð"' €UÓ",BQ”V‚hÆUó.1Пœ*â<´/† CôƒÛ M{ïÁ®ë×S6Þª(áø]«˜ðeà²=+õnjšIפ-gi| †ªE=jªb9&š")¥Ø·Ý (ÊÛwïÚù¢ýû! vþñcjNv:_,Ù^:ukŒ<…vÕ™ûO`5期9giÑ´ªM¯õáÍ~~¿íW‰¦¿sÎARÜDÁ^s·¿£*cN×=õÄŒKºÆß>D9±z@¸Éêêù­ÿ¦IwýÝë:t)tMz`Oð’7=ª-j~PÞþ+{I$鯍ՀlÕ@ª˜ë–²ëÀ£1[ðÌ%O«±å©O¬x@#²AU5 CÑâME{^ ‚OËŒø÷¿¾7Ïg×¾»sMz!‡åü ÛïZj:°`ÿë9Ì>¶¾ý"Žî·äbÓKÅvî ¯F#X¤Ÿ‘&êæ‰ÖÕí)RÙÛçב?F°¥Fä:Y5 :”Õt>¦­wË#k›OÍõ3ÒjîÕvw¦!Ý΄U' ½…ï:¯Ï™õ¥*c»¿Ï± ]ê‚Î ð~jP¡A ei¹¨Dƒª×7j}$Y`ÍL©Ð$­„©­æ§iÏꯆ»ŠÈ£q03æüƒ…UH)É#yÀ‚ý¤yGÅ¥ÕO# Ÿ¡¶ˆœy7åaåY<Âûa5Úô±BÓ 1?™Ÿä¼Ôqꇌ/4FÝuà¬kÆ1pèÀVlá(6é»ëçxÕè·õ¹HÌ–Ÿ «À TDa-.×6#yë&[ñž ÜŠo^Ú¬gÑUâœ+sAö²ÛÁZ™ýµtXmŒÂÑÄ¿ý·Mm!Ÿ%®ªoâYõ=m<ó‡UÝ ±,jLõiаCöWšŸ–öÒÁPŒä-Ÿê›ÎóKŸ¾/—ÆÇ9ËÉ:lÂÜñåqzçQŸ´ÇÛ^›é I6( Ölõ¥ˆôP"š’ªFA…²˜¯ëåæÿÇÞµ+G’ãÚ+³,PÖôZÝ÷ÿ?æÆþÁ´·c‰°Š´Îà;3K%f¦#VˆhµTÅd2™$ñ:êÆ:úîÞ{@µ`–SZW{¥äiÞž§R^¸ÖY×<˶¦ï‘F?sJZ¼ÓÍ":âÕŸ^wê3:â™\QuÝô¤ü¤|ÖrhÇ—’kR‰¥‡+ºbgWÃÛ¾à/úÅHE´yN2ÌùcwèLŽ_ØJâA¼žž‹²AƒÑc-îðÏÕ©›ÃQö¹;dÔU%ñ:Ø¥jQÐVÀ^uά;JhŽŒÙÔfbdrAYƒø"Fï¿vA3SØOÜÁ‚§°¼©‡ÖÔrŽîéuIMpåƒê¬íÄx}œÝ'å·A÷­¼õ³~õ3óY4ê6}ªßåuXav÷\1£^뢃OÙð~Î,=Íøð—¯ªJ"—˜;io¦_$¢‚X +îW4ìaš '•F\±“ëgTݵÌmmPÊØVW¡(¤„XÕÝî‘’Í8=È:ÔƒŒ||Òº}'U €çÞ+ ÆeÌwÕ®*¿fLoEàYªŠ·mÉŒnç¢úI…]AÔbTŠmª§°Uãʦv§næg”lÅÁÒK™gÄ»;¢%„¾¿l-Ï Ý9,»è&Ø«vц¼¼Óc¥“÷P%ÂÇ_:ÒÝWDžY—¦´¬˜\N½Z´¶æíaP:RÆŸÌ")*r’-øtÃâ*ú4þú¼>€îÆÙN©H™ÚG 8dõi÷šx8d̆ì°›˜î»êÍ;ˆ´èÚé࢘ê,n5ØM½*Ö8Â@Ì뢓ž ¹¦«ÅÙa[fæ¯'Ö›ö=uðØ4 ï ¢µT”HYÿ”4øºuÊËù ‰¼ÓcŒ"5IÁ‘¿<ôC– ígÀ0±¹U€´¹õ„ÛL&Û´á–­&hnÞ†;›°ÍÜÒàe`ìs´M‹ºÀŒßY¦Ïµg¶kT¤@màHºŠ¨é‹>Œ¼P¹Ü"2âݘˆXßãîP8Æ91ì’OëyzþŠútó­ž?WpSM¢Þýó2 4»ÓŒ a•ž–r¼«ø€';|ó–£kúôÄZé™ýËI×mtTƒŸèéc:ðÑ!µpàpEýÓíÑ }ùxRIiع_ ðýJä0È–FÏ•ÝÎF!D ëÚ€lB6 7‰ ‘ˆEËü(»WWnR´ Ý/à¦"ºœ‘=Y n"c4¼ü °d¼›%‹• „`‰’,¦¨!Š6Î{4‹ñ?¯ºKØ•xù±+nÀ¨è.^ãaxüãïó4ž2€{B6vuvy‹<ߣD}"êcÕrqEÚàŽ£Ð^ÆÐ¬V1ïu»ÿ´¿w!ÖŸÕ¿'®ôjêìÙvꄾ‡úS?ã^Û æ=´P­, €z줠æE¾†L¿Lïî 9 /Ô0,¿uÐì´z«’š@6)à×Ù`²K`hý”‚( &ãŒÖ¾Õ•jzƒ5S¼l[Í’$j#ͼ ¹î*!à^üB–Í2 ¦[À/ÎÑñ&u>>­ru}A-f¡Îá3†¶A¦“9‘Ts³¨(LUÙËÅnà9¼,!EÃqë¨ô±ùÉv½v/fáÍÉ¥ç§O†–ïDz[cAº†o%™PFÐÕ¹]jÕ(zHÏŒ,6iè :8•l>Ïeû4f4¾éßÎq³\¯ZŸî`cúÓd¹ß—_9íÿQŒnl¹zÌÿâ¼âi“}X`0‹²k-‘]ãbðÆ«œÖô#ë'Ë"œlO–¨Ù®Ú# ›–€Ápnjþÿ‹—`Rá '–…wQ³V»+û‚Б?úŒYñ@˜Wes3ñÑÔ:`j®ŠÈbÍÃVât¬.9ù*èHø÷‘:KšÃ¦;¾K¼™Wíäaj.¶Š›êñ>»øêU#e mTº¡d§+œ£~²«/¤™Ÿ›(¢„ß^d×p !g––€:˜c%Uïüc§ú<‹˜Q=À˹.g+ó(X|Êx–«×·¹y]M-€ù½mÃ^ó¡rñøóõ•A%¼„°‡›jzxMVw)1&rw]~í]‘öïâÅõ¯Þ«/œjßû\´oò¤c<ÌÍ¢ÝÝ>5z€ÛC̽øiM]lM˜YÅ¡ËÍ×/ƒÍN‚å×·ßä~~Õ}–Ò~õ¾.úï ¹A`)eôåþ¢Šø"i–/ƒ” ›’ô¤ÍƒCŠ“¡ê3ãñ´)`*°ÝµW!JúGñ“ál÷Y¤žYEåªT¬-g†:™¿e6¹Dø$ - •„1¢A4“ÂQ€ì`Ø´¦ŸmÚïá^WgÓr‚|€qn8äã½$mµž£®ýþ]^åÕœY@ù¿ÔÃT`)Š0˜Ú˜ Àréß;|òþ+=Á§O Ñ™¶ ²‰3ÝÌHcVñn$B"—-ªÒhÇ€ç\£ŸN„‘‚Cµ‡§MýOÞqp0öwñhW^±æ ©þ¢úyÁ^J³¤·ßT²©”èMËXÜõG@Hä5*Àúùæ½¹¼ž=ÐC ³DÞÍŒLˆ)"[¸iAn59ÙƒÌ|„˜Œ«ï$(ï|w7A€HX.ŽS—Æ;$~ÚŒ Ðñ±(Ý™,ÄçÖèêA]Ìg­“¥·rÒjÙƒ¢îÿò”ŠåRÙûE1dÉØ´&zz!𛀋kETÄ6G 0[|.žó9çÏÜ¡?és/ˆîz¼¸yÉf×d‰(ƽ‘sl€:‚Òkƒír(þé›ýû±NÿIs´¶Wôjä@£ÀcÊè.(YÇFf3Rw@v•MZ¢ô?ß«=ЂҙŸâW£Ç©LþjZ&ç¹ùŸ–Ágè¯$/.UŸQ2…/ø‹þq’x#$ ¤%“$Ú€··2V>WÕfé}èk…E³] T(Ø6í¦fP…)`cPÍðè86aå”!O š‚¨öƒÌjŽR½™!„$”_afHPk 01ÆXžmW•àÂÐj:-š’aà 6d³MÎÉ¿Ú%–ƒ¡Yªƒ°ÙÔÛTÓÖ3s×1ŒÅ“>,ý¶ÓªT¡zwÓñ6ÊcãYOt<Õ2£«ðª~£Û|Dô¸ë4βr‡Ó¯ÞE‡!h~¨6·½¦Zy?hZ”öc Ü¿œ*XW÷ïäïåÄκ;£÷JŸä1.H¢6€׊W¢/ø‹þ!Úª@\4Ïá'x†*+ZÁ¦º ’FDç[5±ó¨¹‰îÓPÍf»HÕiÆÞÐÀ±«u¨&^†{m=Å8u²Ð9ã´°lQ…yõsKÔ’â%áã¦Ñ¨{ŒÑP³¡°µöð×I×5–Zj·Ö À]¤¥'´ÞÐ\‡s.{~ßi<Ì37´€z´‹æ‘Í‚ƒ…=ˆvhªà­€È>'"ôŠ2ܶŴW?}×A»?|~&œ ¥6õµ,¶±ýò.:`þlÀÍi/À®Š’]6(b™Œ¹(3€)kØÖjî”]t¯ª‰lõj Rê£høíåÇáÛwl`©)ÕRîÕQmÊ)ö,y¼ÅŠ‚AŒ)L›úM™m7ÍÖs6+'óÁÎÚÀÔÞ™ÔħŠ-Ñî€ÝCÀÈx7•‡Ré“ô¦˜9?ìºGíW¦­‘µ+¥¹k‹­ýl'·•”N»"EG„½¼ˆEAd—°yb¬j„Ñ,1& -e™}´ZTßÁTMή@×ó°È§ÙùÇ{Øð±cæšñE ³9æcgi¶fõCêݬYEs’«¶ ˜ËÙ(jBI ;­•+ÛND‘·èÃvß_…úœϽìvˆ^k`$fc2Þ-ƒŠÞJ)òNc„†en æÙÁjï“£æ—òýòvKŒ¦Ø‚²àŸíâ|û ½9=kƒfª|Ko Q¿ ²€0–/øŒ\¹ü]ØÛß½®«8Õ+1 @¯©«PlŠˆ sIZ<*Ðù5\4Ý”69@ê×KW[Ï—±¼„wŒ*›Î-íÊ÷ÍËÑh›*€]ezðóÙ%Æ£%:»!€h€ç1ÚDj¢£Ago¾ßQ@qAa1[ºOi¤±A}ú®` 0Ä'pÕmèÞ´?ZXÇy{nÚðs¡!zÌGØÏ@=Õ—ÁÌæHÂÍxV¦Ò–ÿGª·&€Ùl£¹}¡Y>€ŸëÍ”—®²C ËQbÉcزáÖËçù÷ áOTˆ]ŸóÈFëÚŠJ’Ë´€ ùœ»µÞe½ @§u_nýáðxSÇ©[¸ªWJ7Á –T“™(RuNHfž …ffŒ»†]BPÝ#K$ ©„z†jdÈ-¨Pv„o!ü‚JL´D3ãÝ,U5Ç__îŠY¡&pðù ÓÔžks7uŸ¥®/ØŠq»ÿ¹'Ùžnv\\žäË›Õo ˜ãº“AtZ’ãÝûæ\üö—¤užÿ1­–=›Çdø¥Ê¸e6úà«’¥«žÔª9TY@–ŒwŠDRâ^Ë,ï*Þ¨›É®ÜD©’å‘ÙÓh¨§&‚HY„å> ”Õ8ÍOüë^¾­êâ“Ôô^6Ìòख़i„S)ï¤_Òë>׫L dÅ^oØÛ£Ñ‚1ÉÂ&(¶ní­0+¶‡³"Otµdz\ C5£ÿ>âðSÃT¸|B §MÉÅa-{WÙµ¤wrfàÀê/÷Ÿ€gÇÖ¡å¥åâý ¥Çû?¾”kÒøNù-cJž‰æajÏ6¨ã'†9YÀÚoO„\5ê<øÓuàO 4h¡"¸MŸ3Éc_ ðM´ý‰3â9Z—¡³ØÑ ,*;‚Šî )eŒÔ,²‰îÓ‘õü ½¾Q·àZƒZ4ˆ—© JèˆZÅ’jö 9{êlÔ+£ÝvÑ€@v•UÀÌŸé'¢»²BÛ žû9dwɦ(9­8ÌBº(oçRfâd]œ°k]÷M$WÛÃäVWöÏÑÁä,ù$qýó´à¸4·¼\Vƒë>§ïã©0H„‹|Õò¨¢_.¶‚4I43“p Lg¥5þ2jXML†TòaÊbq|€¥r”ž½æ°d‹a¬¬ Ë·o©Á%¸˜´‹ƒq<³H"ï0ØXåz²ð¿ì];›+7Ž=ˆHE #‡žýÿ?j·£™‰šˆDFØà³ª$õãÚžÝÆg÷•JU|‰ÇÀ¢à”œ-›Às2©6Ì€fƒ"¥[!—œÿ­ï9ç{–¢¨J ð„À OuT§PÝ=Ö›>ò ~6Oá¢`7¤8lÞò*I d¾Þ©½Éá…&œ×ú2¹ÝêeBïák5Ø =¨EU‹9ºd* {â ´ÇËo±©~÷oåWék׿)Ð=¶¦¾w¹˜<ç…`§º¥5Ej' ›fg&¡ÿÕ¾è¨XÜ_c»4ñ©Üu^üíO¯¿rî|ÆÕœß‡jÑ÷5I=œ2‘²£aŸ‰Ë÷#ÿÐ_MMÜR49-ijG¥…ñ N!QR Yi’¢@Ájƃ&䀓JG•3ïŸ,•=:þÇvöéHŠ%1왪'…çHˆ¿A‘‹H—0mXî"*Rļþ4)q2¡‚g Õ¬e<˜‚GÕÞ¦ ØÁµ<—CÝ&¾lˆLøøCäÒì…e©S›7›×å~C36ªÌÃPû›JS1T"áÈä=iûà$€!öNJ»>X\ê`Ì&šŽ•jˆú«ÕȄȃkQ-šïB‘zà.ŠäLÌ4†’oýXécá¯^m–Ìfåõž>0ƒ£ëÅÛ»ÿ ôßžûÚUHh2ð‘í˜Ä¿óŽ:nyš&‚'3‰¢jå;`j93pzp;}6¥û²¢&œp`‹vk±9%(rÖœ³Ü³ŠjUPõµ­ŠHhnŸ‹âðª#+ߣóCg:—adk¿î;ËÎïX”¥ð‰œfÅPu«]“GøÕƒàcœÙÒ¶§J‚ýåfò¢öÑáñçÂîîøCâ±—PÉ‚_°gEòäO¨¥_-–;G¢H)2…ä ¾BÕDˆ¡÷ŒJ ž¸U37zBbOÑ¡«±­Àå6¸9eËøúä }"«l1‡©.mÒk\g=²H°ÖiwIzW"5¥¸Ö¸ÙDç‹X/~‚¾«œï!Ÿ[Û¥›ÙVP¹9 ¡i*ÙǶ@ïš%S Râ4 ‘<Ê 2èúE;íãÓÖ¸WðN{ø‚Æ,U¦óSC×==(8*Á¿„>eÆèÍH•Ö”ª.ß¶ rÕñ¿©(B&­Î> Ú Åù#ÿÿ£“m…¾„ùDh‰Å7dUtÓ®ÅÊ`â7}3E6#YE¦]ÂÏ©®Ã&8NÆ~1q.4ÍV„¼m.Õšx¢ Rû j©ÒŽç*æ%È$9Àò1³ô¯ŒJÌœnI½g)PyWUMJR ÜZOmä"Ò±¶ñ³§X—0ù¡½ õÛäùͺÝõk骒Yu½µs‡¾òý˜"·6Íÿú¸_Q aø*]ÐÙ¹ÕOF`Bün¯]?uF½‚†Á[‘Š]f®âÆÐ" v—¶ÀLªQ»Rª)MÁãöôcytÖïJBú©kƒ ?ä®?[ÛôéEuU[„gH²óÀvrc8Š 5×^@Åæ‘¢ß6Ê­È*¨Í)QÇŽhB G¦[J¿;F‹¨%ÂQÃ%ÍÖE =3Ф€X©ñqÇ®Û}íâö¢ÍwœŸ2½ äÚ´­k[%‡æ©®œäØÉ?ìš\[ßÀS{ûÛ.A êñº.i¼q£ t1Ø(€@ˆëA È´ Ζ@µ@ !q¤\³Vdwÿ®ÞÍwÚLè¶µv_¯û.ះï»ìàÑü{ñì²Àt|X¸ðã"ã^WhXz¥$Õ Ð «J©&U­ x¦Ò½ZßrÄÑúùã꘯’bÛ»fÍr—ÇØ‰ Åå[©Ó­8‚bÒª2K¿:Ô{3§ô½Lhß?¿ðrËá³,\Á|Ò)ØC@_ï²{r ×Çy7èeuä‚`÷Êþ,ÖîŠÂ3¥@¦€&ÖäÃV?èG~B—y>1ßvÆ«Ÿ7Û[sQÎ7ÁâM8¡SéW/u€ }ÿòøáÀ#ÂÔ¼üUbAŠæü†¢@B„oå ¢ùŸo fÖˆ]—£DÐ; Òó­û8S„ªƒ`™§è/ê2 Ê$÷¶Ÿ„‰KÏFO®¨®Ø;ë±[Q¸?+PnE¦ô‡w`¢üã¿Þñ.l€g +¡dQ¦*Tˆ„8²Dp³Ú1³Ùla«H¼NypÈù¾Âô·º?ž4;0W3Œ T¶šg0HDA#­œŽÕÛæjŽ"Ûì³Ø3 NŒ7wÒ4”“Yoá‹w5ÀŒÀ}ë´µÛmÓDshAtÁèYìÍx6s_:硵®´­ã‚8yÍÌÞNØ^&Ž ËÉ„é§N¿|`ÏÖhE¥ß“énj{}{K*Hɽ%K“ÁLJ æñE mÙ}Žt!¯Ûp̶Ö`)1H ßë±|ÕbÌL7}Ej/Næ¶A”àÙ'Æ3`®6 pk¾ö„¢¢uR»8G³Ù3ÛÌPû´ž @•=«g­ Í]ÌSD0%QAM|S«ÑÇŸšÁº‚`_« nÿ„Åñ•ÒššQ¥ä·,ÿý?ï‰o©ƒ;,NK7êâe70v©ç ¿Œ¼Lßñf#!æÐ ®U™ÖüdÏwŸä¹ºÉn2ïÛˆjã!Eò=žkt(ñÃR*Ÿm¼ƒZgßÖ ˜ÇºøÖ³ÂÌbº¢o _3@ÎJs ÊéÔp€’D¦>¡œ‚"&Q°§z’v@<·–q|HAÎòþžµ¨£Ÿ,¸#µu^Å­¦ãeŸ¶dÒ쵦ŒëcQ‡¾E›G¨¸}S¯ó¾žòHèÂÄ$W¯ÔÞ4¿2¯Éö  ‘@‘z4//„Íf*U˜ baG`±„êR0A¥†ó‚lË¥åãýt¸‚Y÷ÖÔ…›„|Z”ÑcÐì^o+‹æˆÙ@ESS²ËÀez(gÏ×RB‚%¦– ˜³Ö<›¶ï x¤aŽ­Š^ûf9%œ¡–áv„G‹€yEæáܳµÒºùXI0ýQQTä»ÅÍBÛ#¸¦Ò œkÿèù>/£‡ïoÈ€Æ@ž”5 s¥v]Q¡‘Z"Еf[ÑDª¬fá~ž»kþ©?{Õ€Ù¦ôñàá 4C´)(4ñ’XA}.ä èæÊ½jÒC‘@Q-ÈErÎYÜLŠÎÎ:x‰ºÛÅ:d§‚âæ&}æa}œ}ÃY~:y¬þå¤os­žõÀÁR"Ãá ’IWu¤ðd{¨ü‹t’/úèùX'fK÷ ýžÒ-ÑïÌ@ÎüF9gmªR”(Т9  ïÿÊYT‹ú“‹Œòñ‘×<Œ9îSÅS ‹~·ÿêôñSv»½RÿÿIËMÒ RÅݧ}? † ÁR+1ÑB ¤€ÄîïõrÜgt겈ÏқѰ¨Ü<#µ*P=7¤¨j€SDOw$K,Ýþu½X€|•f½Å,åý::S´]^~2w½õs yGZ˜áï G‰™Nia—'y¿Í*8Þøz.ý¾XLqdÛ;5¨B‚Òa§S•õGþ¡DÀ”û{„˜«20ðÂø/0Tˆ`q¡Ùb 6©UŠôˆ ‰ÁRáó Jši`Áü ƒÄ¡e÷'ÈÀ{g§Ïæð¦s_ X‚¤8bfšq;K†eœ/*¸k23xÌX»Fà~FÏGõ,¹)Ü9¶7+L:þЀšãfç3¨zBF«~Œÿã$€Iå¤"•9’ÃùZ0-iÁ?\$Vï¬ADÁ‘=u_}~ÒdNmLÃ~¶}½¦"GóÑGiôoœo™Á¹d)Jw¡H¤”š´BE—P'[‡|o4Ot ¨»ézDÕÅàvóìyÙ¡³õ£~ˆK«—+“ š_] f/ì‹^ºj¶¨î­ ì r Œ©`Z\ßŪ–Bó»4­_A†*„D T4‘»š² ±£[!˜²€qµuŸv³ÕFyëg3¸J¿3`x­×?V¸B³ˆÛNhÜ<-Ñ¥ÚÙjôíÞ3bôˆe }“¹‰R”¢þÀÁº€Še@î¢E¤ Ý’ˆ°9I–»4ÕõÆðâq xfzhDˆ…OhßúNT]ã5 ü]£O…=Š &sîm/7¬>±mþ U¼Œ(XzKsø±¹üÊîÿ‹NŽ×k r_-­‚bãc5?Š0ϵռx}œHˆz¢c~…¦º ú?‹¦^»Æ°e¯þœ ûµ*C£ý:ºåÑÎMY¼¯=|=}M?w’~…i¬¢`AfK) zF?ðR{&MÏwJÂ3kKÀÈ ³™‚×!s~KœÐSÌyrvØR“¥}3² HHé6§ÝÓÿOŸÎ¯ôt!‰I&ŸR¯¿ b¢,"ݲídI/D‹ªäLD &(%DŒ:$´ËMäÂz8ýŒÁ®Ëº;·/zÝä‹h6·fZœ‚hü¥dédÎ IQ÷2õ$+î®Ã³ï·E–2‘€t^‚z—°sc%»¦foÈÅ8tÇøíæ:üø™²ˆ(ONw¸@)¦¬Ù@-¬wEQ%K:} £6Š8\ùà<ªå³ÝJD3K}uVZDw®ܩР-{Ú‘/Ö)ñÉ®ßêfåàMûô>@“¥º™TÕÛŸjA$)0ÅIñÐÜäpc˜CG¤®Ïu7R¡Å¥_3ÿæ¢é–Éaí6ÆE?Ï¡dêªM™\ÚhâmŸ¾_ü IDATúÄ]¦jj¿ù…Ý!ЪnÀ$BPnNz™£Z§z¯Ê-“ýêLÓ²VÃ.ÌŸT÷¼Lž[ÊÇ;Õ5Âl€ŽÀ•cÖ[i΢E¥(I‘TRVˆŠ4ýNÛXzk©íÛ¥9|>•IÂúy¼ËÓvÐU¨§'ìÞ®Á6Þ+›ìZ•ƒ%<.Cw:•"L¬%ç{”£PíÇVS¬<°ë¾N­|{I­YMû曆6“ïp FJ ‰€ºÅ‚º¦’È õö¨üûˆœËWsHR5™Ê`ʇdWK™"[©U)I~ P™Òá™éõÊåÒ¬sWÃÔͪÁišÓk5Ç´gµBƒ’e‘‰`å2 KªDâòôù9=úñºìwMW3K®jNt]^˜í !\‰3Íoa…Á¶M« ¢y…so½žÿãõMú9 -BØ­ùS‹y(ƒPƒ³¹5×5QsmÌ à`PÙÌé-£K‘¢¹ŠªJ…AzµÌùmŽE•©§½Ýøö5ž9<‹ÿ¼-—ŽßZ "TòÀõÙoÙßñÉ)"_[н?cWÅQÊ/á´Nÿ"ëkmíÞ$®‡µJӲþxNÆÑÒ³œ·?é ¢Õ½ µ Å{¦wÍ’ p ¬ ªÈEÈ®TÄ q+h‰¯>G‡ùôwѾµG çó>æA?þvN×ç«®ï4-˜ äØ˜ˆµUÒb›¨¡wbIHéÅŸé¼Í£ìyÈö—Cøy?ǸÉWdä⊠åÄÉYhÝ‚&Vtqd8Õ=nž[5ÞzÿÀ§Yb[2ÀUÖúBZä›I¦Àžtýâ&'cR#)Ü£/ªÇéçÄEŽ®7÷Pöæw6â>ºG1C¾ð7Ý ƒ[Ãÿ<‹¤ Q¤-DT¥T9pŠ BÂÄY3 «Tpe¦"bDIHxAŠœ)ënðp©åÉ©!áµÚW‘s‘¹p¨Ù»ŠP`Ž$!¥èõ*TÕ½8ˆ¼X( EQ–ôNjÿ1QtùKnóÐûqqí²9=ÆŒ¶(2ó¤mg¥vO¹{=ü}Pú°œÒU(““[\zkuè$zE–„4ñ¯™î§1ø„,cÓöùIZʉŽÓ%Ë$>Œz³ü2gá jÐ=áÈZ²£²¢ú®Ü|=ÇøÝ)o‹‰ÎJ©™]—ZD¶¦ížëÇ8í¾ ò ¥¨·m4­¾zyË îŸ#K¡'¨·>æ }$jq‰€b¨ë¦@ó<vô @ñ#g5ÎhîÁQ8RŽ suï*pbWêwUM«ÖR©ÏÑ•7VçMÀ~P¬Ë|a#ëg–«¬Fk5·üÃU§……¶eù8ÊÒåçC÷4 ÜÈÐý4=3üô\«0poæfKøco†N$ÕP3 Ûl¿vld/n´«ycL$ (´¨P&åTUckcS5ö·Lc‡.þõcB/ôƒn¼¸+ Ä5¯¥|šcÔr°W "ÅDÍ7ÊkmȬé^ú^Œlk¤ƒ ò^˜í³túrŸMOØÇƒÿ˜Ñ <°?J7âÍWCm·R!ìx"w)'t0쪢‹§ UŒ  HIÁZ¡RÅÓ$>üô.©‚z¤_%‰ž‘hã=V“ÅüàqwuQÔÅò¶~«#!Öaê¾²ŸÞý¦JHˆðÝ 6w %@a«íÕ‚XV?W«Ôö˜¤ £(*ò÷¿3šº#@, I¡U©™¹˜‚g œÙõÕp5Ó¥ôû1R€_(1§ôJ/ €¤òú-³f[éL74úÿ7èi–ŸÂt«Ña§elWšïI[ùP;çMÊüërýÑ­òfg7Æ|Ú݃ó¯Ò°Âq*ˆÌ/dšÅœóÛ½åÿþ¡EÓKJ¼ŠêÛÛ›fI‘Ó)½& ¤%çbªnQÑœs~Ï( Ëö̯ÿñ:X«v`^ô•FÉD¹$zâ‡^ËËõ³u®½F™a¼¢ ÕF’RbfŠ /f73‘áyOë¥È9kõrºþ4ßp¤ô’(¥”˜#Qd— Uz††åj:{÷Ã-\]·9ôǪzI×Ô1ri(€6ÔQ"r¦ý9ê!zºæ!jã¼ÊP")€wÍ"R*½0wª34µú¨œ¬Âj$½4>7òZÄm¸­–¦W´Ûò.4¡ú9±mÁUši×êY™ÖåÁwcþ!æ”U*ù]üxË9sL¯¤ôW Ï|Ão§"Š´ANß.Zm“ ›Î¤I¢9«‘÷¬Eçé,BˆÌ´Ôù¤)ë›NõEçyY†UÔª Q@sňþõ}Þ¾¤{û½e——åJ­wó¤êA¨gkŽW #ž]¯ÑJ-/o˯‰82EÂTíHj)î‹þȹ¢˜ä"ª:ÖÏ|ÿh»«ã¨®;1ÀRÃnëÊdš³M7fuXéæÞÖg…W]®Ã]M½¿kÎb1œ®ªsõ£ÑõdmºFÇWH¾eD;Ãëû“ÎWlun94ûb3÷I˜\Ó Õ¹4/L€ôl~yU·ÜvmËobÕ’F:ü#¼]gu‹ý ‰õã@sØ£I}¢ŠiV»‚hA¶ÝÛv®Q'l€1´)k zø4ÎO°?\;cÓ Ð¨MÛ|ôÿBÿüãÏ×?RKî󣤫ìý—rÔ•TÈ‹u÷.4¸{Îøg ×÷Ý¡®{Wô7…Efпÿ~ûñ¦Y(2'Jœ¬þ–¹àå¿ò¹sÙ¥ŒÚg–Î?ßéƒjØíy»4U´çšZ8ÏÙ$øç Î}jÉ>ì…ÎS}îÉE+ƒš ¼ò®Z$‹šzš"13ÈrCˆ9nŒÂÏ-£ð!-?–—»?÷qaíÕ¤O·ÊzflhƒMþw8Ê=WL¸XWhÿÆÅÇ.VNJÿúÏýùçŸ äÿÈç·¿ò¿þF…‹|§)øvþ¦_NÓù3QWù› ÖÎx· IB²…>Ù嘢¤”(’Ð ©’^Ý hè×Â¥bêáÇï]Ù‹D¨"€*# <®`w-ÞNÅ ý^  aò|1›;_ÛÌ>Y!A¹t«ª%ÄÒ¢¬­´#ÔyÎ2¤¦ðî ÅÊV8j€ç«3Ƈq.DΟ2HšÈÕ}áÜ¬Û “ ÷tz@ù¢CEÕ=*›,¹ ¡ &ðõwúŠ€ªÒtLŽùAX`ÕðÂmßWrD¿öÿ3|¢kýá@ˆÒÒöKÀíüÙHôb1ÝNöy3 @ÿùñ5sØ}{£g=›•µ™s•º§-µwÜR©ü¾6›±¡ÏÔ}ÒWEOû¡«d'zý¶ß=ùÝåØ1jþÉ&îÐÆí'úÙ±ÏT÷å6¶ÌÊh›ûú]+1)‚»Í/V¸nØS«Ṵ̂O­Jµ¦Ã>—Ú­4™3é΃ËÇØmÑfemWš@i…RPT‘Àì±þÚÇ 4ˆ€­¡`n–ä Aaz]…*×€N¾“[XT„¼Ñ_üln¾f׊íb+ íÐTL"4Žv —U`w‘9–]’Ÿ O¥;+âdn½µàÔWMmRÿ¹œ.ýöÅíËŸ-Î|¬™H8²’EÑ+a0^é8g󅣄þIÛ§á÷+@¯rü3ø ÷D÷4Úu«Îˆf Œ] ÇÀƒÖÇFÃa]ê*Š­óØ´Ïoùú]äHœ½­¾ëá¢mì<,¼ä©~̰ìЗ€(¦–îÓîb¨oL!!M©¨DMlÑÑ •¹6À¼ÍøŠ7^‡®Lû9«èùõ7·4ÉXM¹`)æìJCî§ZMŠQ…ÕŽÎÄœ^R²°óÈžä¢6ÝÜGýWÓÖQèìöÞx¶ôTc@“¨³¯Þ³'¬®ïî~v´5Ø{SsÓø‚˜èŸ~uãÝÜzm÷Ùþ/¥ƒAÂUÏIŠæwÍ甆ò.ø¥É!‡øÀßô»¨ïü¦‘Ú$ïïHsø[4PæcÌU$¡HdU‚Í–¢,ê)š5r:â=GÃ’²öÎT¹¢ˆ2Ó”A磪/ƒ‘Ä@„)JÄN¦‰o¼p‰B8rŠD5!ÀÎ*@;ƒ–¢P0$¬$%±ºã$©*1.*$Q˜¢àšØÆÏÕ}›wq Íh8+>ihê;ŸG™‰AÅ‘9Pèš×šÞ?Åí}6ö\H`ÝÂÃÊ0Û}ts*†x|~ŒžÒ×4 ˆ}_1 ÊIµ@9$TXâS´Î›ðÂ27/ÕÓéožbð›”çÃp3[Ã4Qå r—§¡Ì‚‹ŽiWfÛomí/‰‹B.Y„'¥nŽ&ÛJ;àÀµ*Tì^v_áñbAàE´BŠöÌyN»voØWåRˆïOr.íÍš“«t½†ø&Óéߌ ¾LêªS?Àœ:î—ÐÑ1ÑØÙI›õ)¢žÜa]¾ ý®xú±É¤3ÜpÌô¾Œ¼©’gkáÑ£dþ1+¬>BØx ºDû‚3iú]U‡ Ýy‚HI©8!0´2¨¹ÒÌ/N¯î…Þ/š—ʽñ_·ÃcÖZ Œ­vÀ| ®;UQˆ„#1;ôõÌÏ„+Yùõ;&œë¶ôÌf€‹oÐÝ•zÞ‰3‘cµ‚Ÿ4_n­U€ ]zpyehÌm/¡éã;N:žÆpÙôT9~rÝHfÀŽ'æÓm¥–oµ@$‹HÎ’E±Æ?6´Ó7þ¦ßCÇMêÎLÛ¡ÂÃ{PºÁ¯™SðØKf³ž +´»¬ W“©IÁÉd9yJÂÑÏr9uÞÇœÞ{3ù2‘EAU.ì]3ðœÏ­îû½ -ŠêQ·žT¬2HA"à”%GÀ`‰‚% ÒSïˆ À0Ò’#[FªŽ»b`cÀÓ›ÍF`‹ü ìbÖ}ƒöñ£F³ Ù"6wwYò¾áÓwl+s·LÜñöfÖ‘˜`uGQkÍoË÷ ˆ¼)pRA¥¬jWSIˆÐÐ-®Ð÷èbmûÞ-[Ï=:b`sé n[Ah‚_ãÿ¶ç×ϰ„v»ûåéÄ}¯Á±ä/ɽåiÄ€ @=²NNUrLè9ȵh!©ªÃ­ÚR=Ÿ¡ý£gètÕùF/ÈyÕ¹4gyb°b%+û\!05â` _“5 ÓfõõÊÒËc<“_õm{ëöíæÿ_!ôeÝÈßò‡:á(&Èÿ°wíZ’ã¸2¢ڂÖÚ½Öüÿg¹V V‘®%壪{ÎΜS0²²”Å7ñùG×¼©I°ô'ÞzšT½.ýNkd×êIîÅÍsþSØ]}•™~~ÈH~su¶ÒÓ„žÚãj?ÃPÐUX=¬î=o­E±ÛáË*š0A¿jösióú«3·šÒˆ¸I¸¾ªo&VU›±È¾+ñ‡÷}w䳫Æ&¶©Ÿ_÷Ûbbc‚E»Nß±í?ZwOûéFQó’ÖÏ1¢2w¡È—q½>ø$Ž&pI¡<Ûg^Iì·´¨ÍŸôØ/*ßC^üoˆÐªü‰C=ô¦ã=ÉM"ó ;/Oà[þ¦¿9^dhÌH çÉ’,9  Í\¢c÷ŒÚÿý‡VE3k‘7-qîÐë«w°Ùl¡àôsdV ñÿI:Zý‡·0Ò•þ­ôû›hQ9 !^é‡Ê&äÌxäï —ª®0– Jb(XT ZÓÏ:ŽŸØH~˜À=y<ãèÛ”dàÙðlæ=ß+jÚ_„žF†!R>°¨¸­u°AiBY ïŠ]c ù|h¢èý«ù¿Pd'è¬Ýœx¦I‰ãÕ¼öC嫿ìâ8®¦z›Ü„ ¬ÇÑŽ½îZ••råm.N€2 |!"^Â-t1MŸÈ:ô:Ì3Û~w—o?y0òÔ˜æ_[n`¿þ¶SoÈF3­*±+`Й/»«ï´* ¬%¥€›D÷ ƒÀ“ß´Hñª-a¶ÏSA yÓÔ·Là{âü»Š¸£½`Äýb¾>Bûõ_yŠéæ×ßgþÍõ¿•~ÿ"ºmõä©J÷Ôe`,‚³÷yÜ-‹Cm+²ëín´åÏÓûˆuN €úY,®z›r€º¼7EÊïqôþj=^CöÈX+)$Šù™¢f¬ŠJÆ®ˆ£ÇÄJNk+Þ$WÉeóì—‰[Á{1ã×a,žŸœ,b ZCœRZÍšîÛÎÿáé'¸Éq3bÝfáÎÕiˆ|õɧWâ zÐ!·Ž‚@ô Aغ’q¶—/ç%û £—m2K^k¶€<4™EÉu'¾7Væ'5,'x±lÊ(ëÑů*®>W7ˆÄ*Žã°ÍôP«ºuúï)ZBGü} Àßôk”|iSß\nVrç2‡°Q€"ÓT‚ Û™¯+nl$`L{½ûÿýëøØÿþ©Õ"¨}U5Èß¶ðsƒ<é‡e?qFát»úú8PvÉt»z ‹t‰ ®™B÷’Å#õT¦GpóÜd/ ðh5gáÿ£*M‡ZDnawZ~—‰…6Ìnºª*û¸ÏˆÐ©'ÒµGlMŸ±·œyÕžjxXæ/̬u©cy‹h=oáæ¹~§@çðЧÖL°$¯¡ø¾?ªKH¿ì¬Ù« ,ñ§æÅ;Z±ÐŽ…ó䇙§×235íœÎt¡eÑ€ÜÓÅy“5yHW]òi2„õð”eæSCæŒ;8%±U£ýêãúéêñ%>y K±ŽŠÔjRæf%„·H÷ª †}mÜ·¨¡¹þ.B¸…^ÅS¦Íì)iºäImG^â~Ïâÿl艇/ÆqTžQ6€l] @¼v®>+)¼2'ÿsÄèû3tùíùŸWB¸Óà¼û³s EH¿±"N1)¾,Wš>ì[†§çø]‡,í–c\꓆ï±ù ÝA]ÒŸ¥ýçYرÕH5 *¬*”@5ã, Y³‰û¬‚÷íhñé@bÉ7z€.o†È+ „H!=ÖMŒÇàò~U4@°ÿØe»ä·&©ÅîGˆ];S€&Œô]²ÞöÊMcœš?j (îSíY·0sd$=WáÔIö¦Œ.¨ úˆtV!î™Ûý;s3±a^£ËC}š(ÌPêßOö>sõw¸¡¿…˜®¡IƒF£©‡}u]ÿÖ U®Jø·ü¥ÌHZËö9ºÛšÏ/¾®‡‹mAÝMÑYÌšrß¥àø¯Z5­D(¡Þ6¨6ãvMÌ¢5¨Ãƒ·êûIÁÆãçO…«0Õ­‘Œç ËIOÈ:Ré#TºÁå.. Ì‹³_¼tµõHÃÝÖ³¸ÍA¾lt6QÍ<ˆ¸ó\ígÃ&ž‘&ÚtÚ¶c3ZR®7ÕS…«™`ßw ÂOðXuŸSêT&¥Æ0%ÉŠvNmÿ9h 4RG¸)õÆùÏE„„:ùýÅϻټ24—Égf?ÅÕ`ý°ãP«FÏiÑ} Yz çäf)” ïx=ö1µÞE癟 ”ƒÅ¹?Yæ‹4# î§2pG¶óÅÓ…Ql‹€–#¶; ÕÐðó¿?­Ù¿þ³C M­Ë* _GÃáÈ7ó[=ÆLRqXä^¶¶V5¯‹hiG7‹JBÔÓ!šÁìÐcFd‰ÕGd úºNýz2×™ÜyG‘gä¼>Ëzç“¢v:j¸­ƒê‚)Œ…!úÜG…”]ë1&öI%}(ÕÜ‘FPÄ@nìÔ¥Õº§0»P sæoêø ë‰0s“-š‚²ÎäÞšˆÂ]¼w‡FÃÇ¿†@Iø°Fe:lwVÇBm†¦Õ2¸ÌÎd·Þ…CÚ€ aÊ@–ÆjÔúlz)HÌx¶©7f=½]ÏÝ•ïèÊhæh—ʃë¸Ü“Ëo°2ƒŠY¼Æ…3yØï¾ÍªMÎ+ ÛâªÛ‰ÑÄ¥£!+b¥ß“ ´=¹.lóë“ÆØ*9Ëw戋Ý|VzN§ÉU-¹a¾T€mI:^çYªÀNÑ]‰‡…ÜL.ƒ"3x¼kì“j¡òŸÚæIñyÉÿZ¾Æñœç€)(Rxèaàq”p’´ÓÚW1 ÕöªZÄÑRçeB°ˆÂìA ‘G” ﱦ)Ç¥$½|‚…;€ûiÜõA=­&vÅ_XÀ6Œ“B0XÁU»‘X}4\eÞ›±rRxXdýõbÕ m™%±’ý‘2OÃÛu7ßâ—›Ž ·c´Ü–ù‹›5d×K™Ý%p»ü6ö“’DèìÓtÞ‡Jà½îy‘KS;ʇI/¡(bù–eóî­ßy€ÿ‘4˜Î§üg¬™<8 ¦UQÃöèW}™ÈF‰x 0R]&êùUÄÔÍ¡VPS «ˆ4j1k½ã™Êž1i×ÝS†µdTÜý­Ãõ.^È£’À}«z FúËßdš\s6MØD¶CalPÓ½R#Y<ѵ'<˜ö޲e€ºy*=-SCfeØŸfYXKîè’I®‡úÔåœ fè5úƒê]zØû‰Á* ôpDÁx…\"@ëÖQs—~(ŒöÐÓ…ÓrLÎ!eSÎöŒ/И ÙÀ1ÙñNW€ÏÐ/L,ëúT—WÝ̵pr×5 h¦1ZúÙ†!æi[º,÷[ÐÌ|Ûaö]z´œ?~ _Œ±ôbOM*^ÐÝ·ôþO´L»þÏ;¥¥fÞ¬ŸyûËݺ. QsÃÐ0ÞÊx‹)Ú®iþJ’l3´c¼ 2ç©2×Oi/û!}óòùfð­@ôXh„ÍL¡U­š6µftezlT3©JÊ}G@Äkúµ< }¦œÀOÏWª¾ù¬]+•óŒ–.NÇÉâ:ÇÔ0´i¦ô˘f”MÝP`Ɐô_¡è‡ŽFVº 4ý)âô¶YjvKoa9ÿÔU#à–ækj×´TñÛüM¿›®Vi¼qÈÙÇaf€bÛQÐ=b#6s‡ ?àKl]ÁÃÈ—ØúÙç¼Å ÐÔ#fy­&nª¶ »öÜ_ïztF{ÐøQ”øôÓ¤óyì I.ÏMvºÀQ‹‹0fBɼ¥RDìM;,òŽFdЦGƒÇìѾlèFƒxriËHàòpßR™p!Ô3ÃØ7Ýœ=‰‘Íåã®Ïmôã²ÿרûQ‡T™ßwË3¤˜Ãf³]0XÕ¡žyƒk¯–·rªx‘-®Ì@²~³!ðêô÷ºÌ †ÙÄFqnpx°h:yÚ<" Ó½xÿ»…–a'Ñ¢ÜDš0T;Ûa”eH¼wr{sR+³·µðCd½dQò9C1­ë]»ár²ËÀ,a3‘bÝ×Úb|óLi'ûRO;Ô=c  J‡B”©~zFz–9÷¢ÐªL´M’ ¶)°TÔ"Ðýé½±<áWÞjº4Æ#¹] ‘¶ïEC˶ÔÖ¹îíl»xŸ¦²é—$þOÐyKü]tšówÖÎ×¥Ï÷¤yœ?e5¥ÓŒ{ŸrÄ›¤ÒÚœÏÍŒC–3N)K¿c¤‹/ZýþÌiûsiµG§SÃîÑ"·“R,õ[H'¶WµºëF äW.rÀÎou;OæP3-Ÿƒxó³Wtù¼'m‡`TÀ{ÍýB(BrÊöZM¨S-8¦T£”/­‹e½t{°¿¤Gó½±ö]Ôo«ø³þy~‹Ÿ¶'Á8™.m\yFIþ¼²ÎÿtLÜᤠÃ7¡Èg0øÏK¿ËÌQm&'þ)ù>úu!”ÑèUÏ*²ÝÁÏ>Iz]al3nÙdã¬ªŽ²› öU¾AÒ xNE(#g²ó ìè¸Üêk?x¹%7êL¡¹™]j0h ›†öc×ÔU½{ÙùƒwépobcD4XÏPyôÕj øy«ÒwC¥³ßê2°h7Œ‰3ìØÓ×ËÒK‰vG«[¯¿ÿrÂYQÉîoºgÆ¥ñ$ûœNžÆà"qÅaÊî®xüÕ*;ƒ¹‡vhý¢e­ÅÖñn¼«›ª_h‘~#H© «µ]ºeZæqöŒöpúeU¦”± å¦{)¼lËÿ… |JýDt=´NåOÐKóö„[§û¾šªdļl±~y­¿eˆ<}=|QGQ2\¥_àa‡ŸCï‘6H«q^˜%¦)WŒÕ Á<РF=vîÓÜ:–ÃTXÏn‹Úúe±?½ÿLOãUí4t‹ž!¦ÚÌÎ-ØìÜÄ ¼úahÐb=ÝwžÀ¯Ò_= íM˜ÑR¬_¿£‡âÚƒi ëÞþšÎÚ ±†sé÷ïÒw^³¬ø8ÊWˆðaK[×5ønùVÍPé‡çr›p _§_yö/!&µQ¢¤}uö@?çÌ(ßð7ý>’»ïç-èƒ×¥(´;^ 68àÛÔ(Ü)"û.ÜhÕ°u.¶ÜŽšb„P{O!” Û÷ 6´›9:ˆY·…͹ã_VL!ª³ªnNÖî-±º÷tbÇ·dƒöÿK—¡,´&°bÓI}#°9tIª”ðÕÙ„#«ûàdÇqÀ³­6H`WL6‹)ßS¡58.0´ kJ¤iv‹1pq@£‹aW7ÊŒs'=Ô&”gà,²KeÓ29Ÿ²°d*šùÄ› fÌ<'ª3:2\+å<©-Žv3ãÇBJ„‰;>Ÿk"+•M=j8ìI‹‚?h@ … ÎðœÎÌÓd75öÒèI‰ `1­ô9Ì ØÈ‚£Bªj%#yxlf·…[+ÇrxË0{šâ7d0v¿ŒåÇ¡8^å°,_ïÁÕ ­„ÍÌà“_SFðæ:¼Çæi³p\¼=‚/bMÄTÃÙ]6U•M´`ߦۤ5=êB=ø³¿+A\2Äd.iäÂÒE=(·å¾]fç·Qb éëÅ$ÊÄK5ÿú[hUOÄßOá]‡¯Ü×ÿ¨Â#½Ðgó¬Þ“wÓ›F$—l¡•ÆØå9¶ÆLîÀõó¢³äcÉÓŠzÝ®.{—Ix¸âÛU5ÛÚ'õ´ŸeU­Ð*­’رuüHÒù€ÎHïH™h}zæs4j⯠Ú̬oŒ ç( ©ªeæ%øi¾VæÓ+¥ï ýœz~ª}Z0~Ü•÷h\}ƒ5û"!ï9^NÒ/?}”•PìÒy¹TðëÒޤΒÝÌïÙÞÿ·TÒgê|ñî¡âÀç-Õz(J³Á‘vRù¶Óß"¼gßuÖ·؈nô@(d•ÈØ¾)†åÄw•@ö¡¬%`Ø77¥@«í„mÄfÃ<ª ;û1ö«A .Atf(Tô;Ë ƒwÒorXêŒ]\ïB‹ÒW¢,jMÜk_HØö˜ñŠK챤ûý˾M×Ôù ë¦6B`ºAA/ºP‘š6¾»½×]1 ˜õ„L‚6i=û ‹ƒ!-ä‡À›Xÿ;ºùå¦Ó¤¥_úZ‡<=¤ÕMm†:xx*AU­f!ú†Xk— À1Ô%Ö˜sÙ»¸5ûhÃQSm –C69*S‚eSJ€ÔÿgïÚµåVrëFTìÕÑu&…ÎìÉüÿ_`G^ΤÈ3‘ ÑaEÛP/’Ýç!éÎŒ×ÁÒÒéf“ÅzJÙ¡I% Ž¿¥%èj`|襃5u0a㞘QƒÉcü^ÁDÙcÝÀMXa„îÄN$`C7vZÖäsDñwò]aÃ×FqŽÜƒPUÄteL,G°Ñ7ÄàÞêp›¿¶¨Çô¡TAr#ð;êÜ­%($‘Úö·$ð<̘Ä11d±›U3B¬`séÚzg©" ÎéÕÿ9šÄ$I¼¶×¿¿#¢ œlwÊ,i*<¿çĉbÂ/+¤ã‡<¡åyÓ\ò£2~­ø‚&µéÊØ½MSÐÔzœ/.å,ôF×¾“ê'jù¨—–bÅÃì^Ü8Ð:O^uª ¦]îXð›Æ½«ØBcëvPZw¶­o5ˈ«¨%sE¡í”ÊÆ¼ ©×C²uT—kãë›ôênËÿ§Š¯ÐƒnXÔ(MNðôiæqP°b3vèà9žÌ¢gìeûý-ܰ"B½Ëyy–¥éŒ^[&Áø•8|×Âh,VÇÄ9Ë(’xP®W”_ïÜê–¤o\þÿtôd‹ íÏNš-Ñ/Óqëù€?éв©µq‡/MŽ:EgG9¸öÆçIB³Ë´¼iX€+HÂyâ$ ÓßeaWòmdT Áêñiû³âØB‘^=¥@i¶&îë ‡Û÷Ñ a»ªÌ·!N48èFB k72 b‡E 3QM"T`l!‹÷¦2\žÀM:"´w-a¶‡D¡CÎ= –·`Ž¡µÔ&·+iJµ×ð™Z{4Ëp¿9NÁi#?Eoßå×9c—E5]<÷â2-w³×BX†<ðx P\ƒ•!Ívro8ØÖ3‹u.Û“€Ydhpupk•÷/wìÊj²©rø©rçÀâØ¡›–½D|2ˆÔIvùGpav›ñÂO9C‚ pµÃ¡f¾@œcK*e§îæ nK’Ïyw9a³Ïkvâç¢RUâ|Çä «BE¾ ”z]0"šh»‚f•š¤ËÀ®O éwIìñŠXAÒ<ê{ÍûrnÒï±¥† ùj½›ìd·$Õ›gãÙÉÚç/­»ÊnŠ)cùëf‚I¬z?‰Cipe ‹rCú%¬Õ…ˆD _t‹*-ªµôÿ$ü?ªú+Òқ钀º.¯vóï!§‹ú¶¼ë±Å»KN]ãwÄÓž©÷ÿ[lw­«µ=%Ÿeà!2ùÁ? ší·[»îifÇîòí§´^©ýŠ0*Ø¡dàíûjð¯µñýÙ: ºIšBm/LÚs(^L.Ÿõ¾<ýúsô$êòŸFm{YédÖÙÍÊK‘ UÅ¢s ðú“þÔMgýoØÖ 0šLìjÖ›Ê-ò׉„žU7xØwŠyM• !"“=L©"ÊBÔnPwwÜÁjžN‰Ue…n‰³“Ç\<ªÆù6‰¾À´óvsMí{±7“^NÃýc*Y HàŽNèS!Tw³(Í’fGÌîÆJªÛߺ¿•ܨ03Ú ¥ݵ܌UïC`f¶½Éí—¬R÷ îñQb³0+-5/wò_³%¿ÝT‰$¶Ó-½æá@ÝÛÓhz×cí¨(/Åv°g¬ ‘9Ÿª[C±k ¡Ÿn:®†¿‰$ò&²‘Û t‹CRLb»©§u­@"!RmdBz@¡dk—,.kã£8ÔM°9vÎŒ9WÂâ“ßæ‘3Ð!ôúO†Ú,Tg‹A[nÂÅ6-òY~HÞªÓXG$sT¸I¿¬D„…n+çp!½”ÖÙxLÍYä *0ïmæ—-K¢çy²¶C¥9Í&ÐhÉÐbœ@õ ç¶z¥Ó‡3…ª`⪊bîî4äŸñì ÿ戟¡–Óèù]‹×Ã`è'â(Mv;dß ^ÃWŸè0æ-¥öKýæÁƒÊ€Ðû)†€Mk}Þ».ðÏIÝ%_>¹ýIÎdëŽWŒÕX3q+›íWÂPzN‡æÚ wCÐß¹ŠeQ«ÿG=d5Ò¤*t‘~Qa$z~ûºH­) ß{†Ï.KWêŸë‡Î—ìÕþ9L®ƒté½G‹8`.Æü¯ÖƒõûL Ac\-+Ë#´‘Ñ# ’ŠLú‹×èùAõJÁ®ÿSÑÒ;®Ô4#ͱ(ÛP¢íWI…ü9à–Þ=Þb#Uÿó:<èç‡ CŸ¶—~~4­\P |úçV©‚ÏM—už7¾·O–cÿ7{š ìÄ-!÷?2w|ûöíÛÿüø¯ÿþϯ_ï9çûׯD5æœUE6mCRÙ¤ü­ÄQä\K7šsöz':ùñ $’‹ð‡•‘ r#A7Íše›Lv *àiµ=0Řu6·Tl¦’|S4Ñ‘<3jNÛ *ê<„Kb!Kwýa·âÒè–óMÃåxo%l*›`[¹j¶j,Å^XJ¡ÛAšÜrþ#s'ªÝ¿|ýúõ‹ÞrV1+HÊÝÌ<…ZF"5ËÒbVgÙ ›ð˜D3¥NÞ˜5z8;¶ý§3o=l}5`¥@ÜuYZÝ‚»‰ƒ¦ »}ÿëØáMs[•¬°ÝøRZ•&ìå¨ÝôòÞïªN|\§†Yh)¾šGTTÜ1I¶V8Û‹%²z¦+Ý$çœoYT!â …åÕ8àq°ùü$ò<&ÃKOúµŒæ8ãéêR³û=ç?î9«Û„ãYB753¾0¹©jv<‚hæn-ÙØ_V¥Ð55¡5uËù–¿—’p˜{éhNÕ@CpY€c]ÂU[Xi/“a IT<ñxëvï´.$‹\ó:â žè7 ÷û¶·LÀŠGÔüfãñýsX¿#ºWZgzER’^SFH™y»1OF°·è ¯[ƒgw/z¶`9±ï ¾ÙØÒàågÖ+Þø€Å­ÃÞ5÷†íT„a;K±RJÙ§[d:ÞÏG—³­u¼¡Ùý@aoot{jVLþT±æJƒ¹fMo؇o–⛂/n›Éבû¦Š„Ò1祠¸{¹'»+…/Ú5Vap%Ü£™c’ ¯‹4 û`”Í6xKëªÆ~³ †¤‹p0B-ø·þÉjGRX‹ï¾B /SÄþ‘„¯ì¦šäþ/_ô&> V© #¸‘Ÿƒ#ÔßÓYÙÕLJ =^?´á“Þyð˰(:â8rÿ^îVJ1+‘ùv“¬*·àŽ"Æ¡¯úP‹W°ן ãÄŸöšu¸—•rЋ­ Çb·ŸaÅ=?Åqï«#¤y¦4Wceüè¸úÏÆ;7‹ê©‚΃Mó-ë&öBîVvÂÁbmÛ·yë[èŒø˜6ñ´bh¬Þ!ó¬zÞéŸÏožE–üóþìCÐ÷ ï%bñDKÌ9ÿå?þ]E¾}ûQ~|ÿöýGùQî÷{;l,U|Áú¤¿7M[Œ6ÕMeS…EfN´=í|PQAþòÅQ ¹x9É 9¾ͺk÷ pÝyvV,¿d«–™ÃCc“&g–DÍîL<`Šam™2Ü݈UNÈxiÍÙe°ÌŒx&™w‘› 6Á"qïG P„¬K㎌»ˆ'tÙ”ˆ™å¤Ìš7Ë·Ì{$/»jö½ìé*sûã‹n"€ˆêFãèÆYo¿y.":êéÞóï5µMü@\Æü,{hK°EbgÛÁÝPa;ù†\VóÒ~ˆ7‰Mîò-]ØËG‚CÉÝg`¢ìÈ^w< ¸ÁìqÝšCoe;e£VĨ³Ä5À{ãØðàggla3þ‡±2¸‘‡V¦{‹Wž/BöÃ8€’ª**;°°ð›•RŠ‹åYs¾Ý‘ÔÌ)£ÚÕsJÑ&—µ¶=Ê'v<´øi" õyç,]He $êA÷Š´Í‡™ Tï‘7H¿A«êýÈ'DkÆ:º^Q?ÇíòNÜs:7ôøª2±™Ï¸ž'òÛAú=û\ü>zÕŠ8šÜj³È2~Q¾¾±Ç˜ ÝöîaZd‡&˜÷Ò¦þ€;Šë&(…C—Or‡U“ä±×]¶VMZvS 4“µlpQ”M½=KÞ† |$QÀDÆjtá„Æ:2ÎzV¡5ÚçÐ9Ë«™5ÜOÂîD}9e×ë‘‹ÛË?•9”sµÛ ½øŠ<ÓA3Põ¨gáäëØJö"† ˜«¹½Wà†£æmqñÞFaùPš]N®0×2:zBºÞ2¸6Iï'zžÒ‡ºrr(­‡‡ŸÓðjž‹¯1Wh]g%Fì©E«±ÐPýj„V°¥Ê‹£áHŽ!<Ö&&GáŠãÏdêü€6åÊxÁÒí¡X «V (0³R IAÎ7äMÜI*N<ŽšNù’^Sм›Ú‹Bp¬Ý?ÜZ®io£ÇN¦ÓÛµYbOc}P—œ4KW×§¶+/"qh¿‡Á[Ž]•®g¤%ÉOT©®‚OÊ}p¡Ë{#ü¾ŒB~ ÷oÐD}ôEÚðkÒ³‚Ñu´bU¸[Îâ¡ÝÙÒøµÚ} ÀŸôëèÚ4’~0Ó¹aÝoª›L™/÷齉G®¸]¬ØÔoÝO½®žÎy/Ÿ7áÌ m\ÆÖøUé~8]l|èÍ¢[_ŠdØD+àη3õ7ž›Ì{¾wqnÙQm/šr}®÷L¢âÇÿ~3+Ôp~†¶ ÀÌT›à¦.Ehß—>ñsÇåmÚÄ2F˜èÌ‘‡;^èÿØ»víØq»QŽ G}:²û zM6Ùýÿl&šðº¢>'2•a$(©Êöy¬{{ÆÊ.•D‘â±´øzŠ;#ºqÜà|.ëDϺóÜNP­µÖ×ZkU“®•/a¼ P!^@ Ç|ƒCZèfY)†¦ç]Êž4Bˆ_Ÿ ÀsÛÝ¿JdE8LŽ,n%±,#L69¢à QðêŠû]‰ T=‰û¤Ú91QÑ-Iõ ‰ %”üBvv±BµÌZCÎUT³ø\"*Êfy/Àº™ÝŠPøéËãúÀ6oúz©U ‹¸nïhv˜3Ý\ S[&ãko`ö¾.V±Zmê=,à8¨®ÝÇ[p`¢¿´³bI à’tÕ1F×f›ŠÐN’ð•Ì@Å.¤h#¼èð¼FÿàÃP*¼­[ºŸÔ¬³Þ¨éC¯š°ºêÕÑm&ý£S§J€Vˆ©@äåu¦)FHzVÐwßäIwrƒ×Jí,~‰(†HA/’%aøÊ“œë'þÇ,•BE…&(gñ`Ìôßõ 8úmº·¦äžiF6eްo¢©¡1##-h´ûe¿ÙýÂó±µïÇ÷ûû»ã÷CxÄŠ5XH$¿¿Þú“°ÚŸü‰6*õã“RP[Ä(¡F?ýçÜ­T‰N¬A=òþc'h¬[̈›‰&ˆK*q’FÈ<æ@R®¶b,“êóä·-r7¾…kV|+Ñ‹Ö* þEìÝ”ÓýgÞ󿦜5ï×ó"iå±É‹$Œ 8d1Yö“esžùúGÉc.UþᇟǮÉO?³$œ>9«ëŠ _-‰¨a–¥HµØ©\ŽÎzUgŽèz¬¸AÆÖé½f<Ñs0BcaïÚ,™òÌ¢aJ½{ç5QHEˆ‰"Zµ2ÈÅß·b]HšU'§V›råoYQ²ç*ºçÅdræ¯/VÂ|øÉL ýÐ+ᮾÅgàÆ:·Ž*[FvRÊLœÀE‚]5×ÐG†h§£. F2,ê›^‡ï7¸ö¹öe¤˜ó,üš CçKã?ùä¨WMÿ4Bر@0ÒhTJÍyU¾60u‡p=SÄsO¾|­w#>D\eòÐŽ›îƧ«aAC+½ÀÌDöe6Ë€¿$‘7†!Y=Fº E¶e–QN§ÒŠïÙ§¯“Ƈ\ŠÖQBŽjêbí_mÅÇÑ||2L—!¹ŸÙñVÿh!l2Ð?}}~Ô÷îõY×X…mP«[øÎQÕ3‚hÝruÒ3óE(A€“]œÁþUŽ ñ4­æ,¿=@Í¡2WçväŽÅgMô±©ª4÷®¤¥¥MNFGÍ ÂÕ•ÇPHZuÈc¤ÊjN»ø N‹æŒ=ÇåŒi^˜sI€ÅêB°AÉЪ9ÓEBÛWGy©îÒXkßïÝA¨!M^TsE1³ç LZ ïàþ§KhH¬ŒÊ­tŒ-Z…-=áíf=ÑÌ¡K{yù>~>þßÑÇÇ<ë*à=ˆð"f~>?O¿o¯‚ß÷Sÿž^x8qQö,°ÖäÕ×2¶@TßÅ…ôrd¾×‘S%_ É­öRBÖóCÜÆËó^FL8<|–µy=Ô™¶Þ’ï‘=ÄQKŃSt1«GîQïybý}äÓ|yÙk΃ãÌð¦P€(瑆ð]§nù?8£¹£ôÛmd‚ßGËüÓ ¾±’Uø5ˆ¾îm2Š“”gŽô¶ðÕý’© ‚wÅèvÝUWÝqöèÊ(«q¼šësÝ,•ˆqÛ­›ŒÛµ5ÇŽÕû0-¼Ü™bwìgo×n{w¹„sÔøª1v•|A @%e%V„àI7 i·¼³9jö 1þÝ<´³Ë]ý®É%«[MWpàCM’ÐgÁ?·mõ]sÓ1§=ü^ð0W§M=^ >¬»íìõK̤´í”ZðY®JøaÖ®·;$ihŒse¥à¡=o°^õ–À<Ù+I>(i®NÊ)¬x5'‰.‘ºæ—*jÛŠbÉeXÒ‰½t!¡b¾Ú¼WHÈ Eœ–¨îƒŠÿ ÐOŸ|ŸNî>زzúU…¹"ˆlýÝÏ 69_3³6@«^.kÛÕ€l³âíí‚k(%çÔŒgÛôÖ¦§¨Ù¢¾~7*Õõ;Èü˳B•¨\´_õ)P1="o^ö•&BŽõ—FomNWît@ªçëÂ{g-ˆö‹±“vO4peçùñeIo¯}>=æ®^‰ˆÞdÀL2]“åÀ,²ÚM˜&²œâ«¤ÕÛvôäׄŸÿýOn 1’7¯XW/µ™¿Ú£Û¶˜«kUãÜ&ÂKØ›î²ì˜²ÆðV)þ”ýü8ÖÍts=™C‚V@¬‡¡"½5©Zq3UBu£¥:a¸®ØP@ Ї.½O@b!¨¦á}Ö,Þ»áíÞ‡†«| ³'Œ\¿ðÌËÁ<\0Ä3ÅSþ+æR˜†;îÀŒ1‚gz3êq=éM"8BÆò§bä(?yã”p‚™ì×U\þãÉ©HíVUî™_Õì;Õ*2W;ŽX\1|÷ü¸E¬»¯\ÄGãªÞU¥¡÷%ÅN3{ ‘š‚1Ò"H]·ZÅj¡€(ü'ÿ‚Me:ç§îÆ{´Ë—ó”h_ß¡¦¿‡Õñ“{‡7mÀЄƒ˜‡³†—4Å:kͨÕA¯éQëý%W·ÊÐ$S¤/Ýâf~y#%ê%ˆBz¤…ã'wË ÖÖ¹ø¼<­Ìmª³±4 ¨çÏgèôÌïÂ,õâ››xþBäNW_îè";°‚}Î ÎÔ°·]åÔéh1ÊÃC\¡¼¡¬\ŠÁIæ¦$¥ î§.MßH7ψðm€ $Üùº×‡¢(ç­³‹OÖŽ5<÷î¡Ô¶Wi¤R#x™~¯š&†ô8×XAD«0¥/Uÿ®dÛ‚ŸLaÿQþçZªï‚Ïylö^Ý­Nÿ`þ¬ÅÄ>¬GnÊ·‚ù?瘹R¡ÎZ# ëW4´Ò×ä¸î÷‘Þþ±^å Îñ;ß'5æWÕKãì5ÎШ™ÒÔ9ûKþŸGúÿœÓ¿wéú¹#žbüÃÍó¹ºF+ï ¦¼eJKþ*EP4½µR°!€Ÿ ×yUÞá Gû(í~²í1îà "BKddº ZЛ٠NiSç˺¥Ê¢æikiœvl[Þs/ _ÝD\ÍÈz¦‹»—s÷+_“=Ó0ц0Q´» s—8ò5TPª¤à“…HsïÚ;giÕ]^JSƒÊº?´ýlöwÝØ_ÌŠ“U©…Z) æ¯ø&ˆ#u([™Û8< á—÷R‰Ä à ‹’œ®D'‘ÒuäVÁ‘¹ i)oyù›ÈW G*ÞÊ“­€ÃüW]°]óíx6DKÔ¢HY…Å>Ú6Êiö’9QšEã¯0<_0!eK‡ÐX0Ç6zà÷² 7±—⨛k±q™å‰¢3œÂ¹P6Á À°FÝ×— |¹`ÆI/ ˆtEéAN%B,€b&SêÇ véûzX½£Ç¶7'¨íS~Ì:»"Æo p,WÕ€Ì"žH4VîðêõíïŒ/džS¾Pp_z­¡Vt·Ç§éĽãH‚ië‘mè‹=¤5¬K'‹2£Nw YH‘¤1¼ #zù~ú‘òۊζ`Á0\Cš-Ub ç´–oùáeáÕ úP‡røZ?]pð¬eŠ|W‹Ò…UîV·œœÓU1%¬Eb`ÑÔUíšuAð÷ŠiX3ÍuÙ–v½YÍΔ¦@ëEÁJâ|tß;¿u¹\…¸ 9ÆÄ2ñv„åvs¥ÿðúËÍÚ ßËpìž”~~Åwk@úÖí<›tÝâ:@jN6ø´Hž (pDç»Ã~‘ßöòâ# Ήàýˆš8& ´ÅY…Ë^5• 0Wšh`N¨£l‰¼í¤\ÿöMps&çJõK1ë†*Æ#FÔHÕï«Õw ámÓ|%&zì#¡(þ Së2z.Sˆš:‡ã© S–.甄„Œ¾ÌÜ5v Œ6ÂÎj³’)7°ÂFËTÛÛí+-”%³m±6I·Y’„QC½d&%XŒKåWa+XÒfÈBØõa0càR*¥ÉÕsUª¦‹ËáüÛŽ}èúe¨ßõNî,Ô¢„¡Í›%”ò ÉÌ`#†\š†-9f|øàC«,eè²~ZB›¹n{k™Éò½ecûtÈG+œµ1£ìë®–„x<šO.],9MŸ*ÌÕŽâ§zgÌE»»};ç¾9¦¶E 1Ÿ$8Ç?¥.c=I»ò¨f( ÛYDpQUùÈ€õJ¨”“ìºE“è^/y<Ú/?m?u¯[ži¾LÄ·Å®Oë‹ûÇOž`|êf þQI€Š…lM‘5üö`É9 VLjlF¸,·ž·Ò›^‰n çYê+âò#…íUUïC‚ÏRˆ–*íÌ_.Ò€½?ÉSà Œùh=z.ÿ’\ìÕ.× Fr³²/† xÙü2{ED›â<$1Ò‹C\&õmÿ&;ˆ¬GkÀðlºù%•Ñ:{öU£¸œ-(±MG‡(•IJfï1‘ /þ@å/XÀ7 È0å _Î7èK£(íaì^v½¤ísGF6®‚J]XŽ@ 1f¿œó£íÉ8 x®ø‘ß¶FÜÒ=÷¨½††dôÈ ~«8úÓ2Òí®ðO:§q%®š1à£ø<í½÷-¸ Üz8’•f­T>?ü·öþ¸"UÜ|j©O‚‚¨`‰,]w©í¬Xçk/á"Îi>ójLolú©RC”œ•/ù –%gUü¸'º¢’¥<­Ú#l¦`8¯§  ôECbº[)`ûTK¥ÈzVŸü¼+²u…Numƒ[X1>äÔìóB”?j¶TÄçj9‰#ŒÕüÊ~žýòàªw6ðŽZ—dçQ££¼ ­äç9Ât™è¿ÿ&9‡Ë B,—cÜ$ŒwW3½»M”ŸAãÁýˆÒ…´520¥FŸ7}_«ÿªŽtºvƒG@{Jú™…(¶Û3‰¶ BjXüׇwÈ>’€|ª®˜=ŒÏdŸ®$g/Tàå` ÑšfÅÛ\¦X×H:Œ¹§ŽwEƒ×•¤ôJì"e¯[üÔúÚNfÌNA¹¯wçôeS¥n?DÚÿqȌԹÝ/‡3Ç8§—øPõç=ÿ+iz{ÝÂçäÃ¥\óð°ë^™Ü=lùòVñRˆ:ï¿”Š–÷ên]Õ¢†Vêv+«B‹:ãòB±DÀ±LzouÜÇSÑ[X~‡,<>:‹UŽ…Ý묈8k“þöªÐ§Wª’úŽï¡)k¼»×¬% “qóp&û]´µ3T³Ÿ‹qµ·Ë85)}¦YËäâÑN°ÝixÿÊú¨Dªs3)·9t¢œÀÑé#a—pG³Ï­HÓ¤)Ê^#ç c)iø¢÷V¯Ã¯1F n$©'ùK2>ÿÍÖYWo_ÿY™eÛ:Ë×ÁýÀaEŒŒe i¬Ô&Yï¼ü¾A ªP6jx ÁÔÂ2ܨb3Wªuɇ³Ñ³€Åj¢Î9D¯câæË(P?Z(D]ËWΑ‰ðèuÂïî‘x¿âo€‰Á_~–ŠS´<Ñ5T+ÃäþýH )¨ÑÌëêj€ _ \æüæ  Ø€¹ö5¥÷$Qf­R7i“ ;Ù@Òü'ó~8@œ…oÖ[4Ë¢ËÉ ½eúªƒ²’ãCÙ©WŸh<:÷þ]ÖsêÌrÌû‰åÂ…£Üž”Q²Se»pê3·Ïï‘^£²“u¦üðߢ^ ÍÑÄ2¿ü·íÅãÚê«]7bÁ>þõX5“«îãfÎ?¹{ãW|)ÇU:4×[L¸†É:œÍ™8Õäý}·ß,¯ö~sÊ·óÁUË<±ï ˜ ICoqF¦lpýâ(TÔ©£>Eè ZD!¬%SB^hݱy' vqîB£ì‡Eé€%a/Õ·H\ÁJXü±œaAE=Œ¢µôS{—G ë×ëèçëý²‘=x„£´VŠÇ`Å™™Èqc*ΨÉG¯E7H1^ÕÒtÜÊyôDÖ5W½á¥ìHõ÷öØPœ~„¼éϼ Ke¥R0ܧƤ³ºÛé9à'™ŸòÉ÷‰ûVÓó›$Âycc^¶cëÜ[2?½a.ª[ýá¾ò|áBñR¡’õò‡·¨xÍra$M^ñb$T&k X ñß"†Dõy½¸þÙ:øõóÐK=ùþT œbÉžåÿâ³=šê(h‘ÌfÀrYZ†Êø?а$NNâåŠ*Þø×jûc7Ü œÊšðEð0vÑÝK%läz@ žÅmV%-œL­µˆ²ãó¸õ€ü² ¤M(S7.Øû;´Áxvsô$6¤ÿhìEð 6ö½,舤PD(ì÷šT}:ý<Z~>^þ†Wf Z̽/fÖ L‹–•Ö² ªª(–šsé¥"»‡»î2Ɖ”Öna|›>X:›±nÈ!ïÁïßqOw0´1—Ù§á9¯u´^µÍ»—çzeÉÄÌ_•;³G½9E6gmÞ¦ö|g1ÚUí¾Ö¾!¶ÛøØŠ¶(šOqÿð–SÿùÉ ›~Õ&N c„Óî§F‹Ž¼„G\ªf@L›ÝèÝ5“¹û³Ç…Eihy ©¸* YY~nÏÜ4ñ\ÙíÐõÛxEÝÊÝ";àÞ·­‰¥ñ¡ÞÔ¹8†]Åâäñ§gAUD±éþŒj§Ãi Ûrѱãl“ƒì& Ÿ[¥Ê“b´H˜VšLA¯)ûçE H¥´ïÒ‘¡ó×ß e‰ë±¨;N$4¯Š-ÈÐÑ.Œ¢ñíaΗˆd*Ì ;…h¢¸åÑÏÿl(%•)zT:¬Vdh$áš—³²1Ñüc¨k•W+Ú4óØ%{Ú–ùÉ&PÖýO…BóçÆ}+­Äƒ­Uál(™kCzl)®Oì«Ï ʱÀiávir=]Ç[ÿmdJDš1ùAõè5€s/‰x©þõÞ“Ÿ,¦f:!¦K&F% †“p!ü•®û@ÀÀo.”e7âÌzŒ¬k«’ª¡/„[H–W혋Ì^ZOF‰¦ÓDü÷;]ÃÅô¢ýæºRFª"¬øŒáðäݵS»k÷¬6_LJ1q´‚Ô4Øhy)µ± ‡*ý[T´™xñú Päˆ:éòBƒ­äám¡LÚåVâ¤-*’Äô˜W” •Ó" E` H±l¦Á“m’0<¨!%sþÄAŸôñ“‘ë0²Ê'ãNŽ˜Ð²^Þ½X,ñùþxZt~w*=ºvÿÐø—|àÖ£ã×U^ø…èéί‚#RÜ{vBzÁU%†ó¡ëx%è¨3¯‚½‘N³‹]ƒˆÓèU.+w¾2¢Û²¬ZÅ î‡qFÑà¶^¥hé|O䯺ï¿KlœNˆæg`FÅP N9*.:È"öÉëû.ß³;?Õú½Ï-g#˜Î ”)KJÖ/ÐW7F€Tç'Ø÷¨󢿞ÛÛÔç'1@PÆÕGLµírY“Ÿlè÷)ÔÜÏöûê˜øéw§Òˆºx¡í ·ú÷ûÈSœ¬S?þhðÃ?[ÿ¼Ø®Gí¸ìØÝiQ ’qâE’{à±½ŠY‹v´Ð ¥¥ŽÐnS©auÉÁ#aCÿ± $Þ1Áˆìï>ˆÓíÄr^âùßÞÓ %Æ%gÍ;°uþå6Ä*¾ŸIíuŸì„ßFHdþ ,“qhVxz‡Ãs†à‹½#,†À À;¿õ%ìcfÈxÿTEª¦‘¶²ª•[nB~.}OSú+|_«9gö±ø½…þP¾Ë㈠<€Püö$Sëž¹õ¨YɨKi5B–+ìX±Dª£»™í>#àšcë)ivCüÝmt1¸.ÆZ÷ÕRµ®yv«Ù­Í­æh0yŒ*gT¶œÈ”);˜KKO<aŠ{ zÈî‡U2¹ùv×N`ÜâioD‘ÀúËýp#ÐgYh/8ÈP@é™{mXÆæÛ¤Ù¹ü""¦ˆ¨!“²^q[õéÞÄ":Ÿ\!¾¯«ŒL¾|2$—ÃÑd&Šœ/äX®cÏî™`©¢u¹š×ç÷ýnòñU˜S¬0}ªM¾£MTR¿‚÷»—pëñeš¹“Û^®?¿ÜOv–•+UN3zûϳž»vÆÙ;»ám¹Àssoz»{©Á‘¶ë`É˵`åpÆK¸Ã-Æí \—]À2ÁZ9ô‡Ù§ÛÜÞçÇ‚kæfÝ–g”-2>°oÀ´Y F‚I-Ý'݇îm›õ×9›õ|Ñ Û¿s œmöLÕÃÑF;úy÷\Á76¼&¡æp²‚¹aèÍQ¼²›„ÍßÖU¹OýeèùÛï/ßÏö¶®ªÓhîøœû½{„O½éÅë9øl²èq“/âÍ–Ã$8îÙÕ-ßoÎðâp~6ÆÎ¥R À…@nÞ†B’Íæ#xEõ8¡n3e§€&SŠrCQ ‰)Éñàúi_ìE:À`œÔ1ŽÆ©4âëP0(a’lûðÍbo:.ÙÚÃë½…LÇŸ…ñ`Ò˜zÎØeUá5%¯Ô×8ýRÐBÊÍæ=ˆØÈäà_€Ä£oüŠv%˜ºà*eùÅ€¼š–"|Ó¶\êZÓÎ`Ç[YòýÞ¦ßw©¬­³e *šD’ñµvðÙ3Tÿqrt5&¬L.PÌ„ÝQ™OñÓ3š ]™Ó¤ªÊ…4­òTÖ­O¹vïÃ=-\þøeÁÓöjg."v.Lê ¨ËB•VÕŠV‰Ú ¬Øxqå€B—ÖeCâ¦12{’‰NîX’¤ÈÅE8ä¿é;Åél –úï+¶gÛ˜™¦†F Št¯~!jq- Œq㟿¹6$$jö eŒù¡!È ÍªÆ½ÊlSÏ)ÓE‰G nDWÔàA–„<3u`r3*E>®ÎTó’‹ÉZV&íÛôë0”,(-ˆeh^1ÍT)u¦8)¿=^¸Ø¬i›¶ÝñõÚ;9àÆ—¶Vnöënò=¶²@ˆ<-O{žœ%¼ªOQö(¥we¡^é-¦(—Ö#?‡£Õ¶Ù'vc¢ÉÜSçH(<ÏÆ'â^F\×0FçôÖ®•6ÉíûUn1Þk ßSG{ܧÅ;üÉ¡½x|6—úûC®W£Ú”m„ƒ#I˜s‰4Œ6{GSÛiUG0©›šDБ]‚Äje€s¼¶OþPŸôž#85¡zò}ÙO’c´<÷zƒõꈶ.*pex—ã×ÓMšUܸ<÷sÃðMG&3ÚBiÚÉÏÿzøñ¯¼ÿï¦üì¬í?óïÑ¡;CË€v¦<>ÿú:T¦4Q}PQÉ€Œ¢BÒ[QAPDüÇÓ/S>j(…²¼NݮȎeå(Q_k¡ðx;Ѳ²yìôþìôý®Ô·©"GCåc4!@l«*‚EQ’ ãx2¨"§C¼š¶Ñ±B»o‚r=B*­iùç—í_-´-•n³­°¸Aõižh…ºt %öQ§@v/ì,¼:2‡2'##Qר·Ü «÷KVIljÌ?¹PæÈÌ?Äðạ]å ÃâT0 …pÄûjÞ‡ÿ×hé-g«èSW\ªýý!ø}õÿ¬8RJ/ÎÛJpzwû®ûýÉ›<"îבmä »¦v²0ñ»¹¦ ^Ú~¦V3öW‚CMWÒ½‚0”Üý!ì¹øihŒôÒxF¿»5}obÙßäŒDùIÄ™ÆÒ7¿w>"˜ß­Éd5Y(|2À²øšô+¹ÐãG’GárnÆŠ™ëàiî7žîú:‡Ù}IÓ0¨õ|ý‡:»…—:ƒ嵦—‡ ¾¾ ß-þ-<Š ¯cCP1ì€ÕŠV÷ã>‡ú:öLSÕ©ÑcvTÒüÉgíåRÅr`ÃÉùzo¶ðFWÐ×0»E[‘ ô¢ÙÄkœ¯ò– 7«d\K@òù ÌŽ¹w\-¾ø[ƒÛlkü ªfÃa1ëø_w‰AüúîŒ Z‹‰êD™óWa¢•nLYÖû„~ÑòëòùX®MYwwÞ:ÈÔ˜Žøíaóøa²Dúy´$¹Œþô¿ùO”%¨Ô²2‘V5Í+T²ÿiíëxj]ÚMûÞ¹.$騼~tªšµ†ÍÊ÷Q‰7' f®ÓP³’ò[±@)ףà 6:1B£›æÜ2ÔQc—Á±ï ?¯‘••G¬P†øê‰(DmÔZŠô8,A=Ÿ#{Pj d’ò¤ UY2eCqŒªÞøÃxk61ÔRЪ%ZcÆšs…"Q%ÑM{nËäƒy]ÀÁ˜#¡ßµ¤•³•nÁ?u¬>s¾ˆþ|Gi’“§ Xý¦ÃCà§_ÝÎO¹göd£R/<§i‡ÈD{{øOè“( mó)Ë#0ømªþñÈɦô󱉗),Ivö¼8õ –èéÑi1×a.fDž°lõFnØÓ~j9Ù”7{MÉY¶`: €„M•®‡a‚Üww=~³[;åÿwù‰1yØÁµÞ „‹*5ù˜%„×ó=â §ØÀY#~©Èw÷”M+½f½c{رñóö nL¼fæ¯nŒøoÀ•D}+5o´ 73ÓB¬Ê°F±%rçiÄ\cŽ*Wý%s”BQLKéLÐ3G˜1w_%:öm›mÒßßTôÄ5©:¹½Ù³ú¹ÿ½óü½øü=tç÷äõs$Ú! j5‰þéJÑ àÎ¥ª·"ˆ/@1R ${šýƒB¤7–0¡€=‘ ¦íÉ÷ËÜÂ,J@'Üúº¦:‡z­ï)΢ꉩÂÕPÙ’ª5rsÛm‰ˆ2"R”!§Ë¸+êaø› áƒW¡y”…l° ˆþŽØ’37öüþÖš¡’ïï@Φm¡,òXj¶/íwhÔJÖáp?^¨mµiñ^ñ•MJ¹àÝ|yŸýC4ÎåRo'÷垇”xSþÁ~×©Íæ#åÓHhF4U´UmYæM=«méYù¹Æs®I­ž×¢Ò"ÑD«§ÄÐÉÐ,¦¨ø{NÔ+œ2EÂÄϳtF:å…p*¯üYGN’ÕÌ (Xc'zƒ{.Ì”>žÞn¶»ÂÛÊ#+.EÓ±@)©–ÿݸ­Ÿ6¯ÝOºË/¹‰g104‡îù\Ù&tu$ôˆÉÂâC,–ÙW’öŸ ‚ë§ëoįç+\,W…¦º¡¤(¬ê±Ó®_A͹"t 9toA æ(£2 Yhû«¨ßá ÷þã/™ëÙÚ{¬ilØ^’ÿ …­Kã4Þý€hÒ HmÀ2]1(HiñWç•"\o} ó4l}èÉ<÷Ê~¨-¾ ±Ã.®z´o¯Z€7³kN~1©’›øÔC E¥EÖÜ´Þ¬ðmÁ`‚€¹£&O–EºI´"@ލ$QY±2ʲ‚Ò\Ääþ¦EGEdª6!ïïïáÜÿ((“ËàMƒ›ûL pÆ;ž¸oñ¶×sHèåÄlî›òÛrïØäå@—}^߻ԾÃÖ×A¯‰->e¤„×ã±ïéœ «J‡KOn—ð–lPõ¯E£÷ŠÀ°ú³:‚æ‹Æ³êŠŠ%ïÙfGb,¡´«É¢ ‰Yh_²Ú”IÈ¥„ƒFqÓpÑcj®»cÓZ&¸Ž+Ksz2F}jùg?àVu ¨7 ß·‰( F1”%DÉtiow{xsîNÆÜS¯ ,Ñz¢ZÂH"ÒÄÌ'Š“—;œXvBÉÕ¨{õ¸'¯—aÓÇšs¶šk @lPÏÄJ~”Î3ä’¬¶6à°à„ᥦŸíQ\…w Qké€N´†]úûY¡­K*4sT«-Hj;n@Zì‡ú?‘¤ýñ×›g­ Þµ«˜$$ª.t¦ØÕÞ06Õô暥ðó™¼X!ú¯Âè)¬$†¸^lánÈÈi)¡÷§¤–£ùôàr¿Š`L¤Ôñb+Øæg¶¶–›á–gNÂú0÷ƒZñQc¬ëºêçY£QES_ èDà BáŸC÷.\ßO/׳ü/xVÒ%œlÞMl™bÁ9ã1=$â•ʯ'¡×Jb±!Ô;I+¢<ãÊRÒ)ÛNb×ï2žÑm·ˆ=d±ÜpsjRÝÞYŠºqZ¤'é…„âãí<¹–û˜€÷lŽNüc©ñt0 7œÒý‚5çÀ¸±®3Œ;Ëæ°9ÀçFãØPÔt€þ±;ÊÆ3°êê²”»Š@²ÛuÛà«ýn_ôUmÁÀ!y‡IÖïäŽGÏçÝÏ×þáçãçäiˆÀýO¹¨1hz!)$a4¼Œ‡<rÏù;è2£¦"L®î¿P¯¡ K\¯”ɲd¾²d%×ÀÎ×çOô]Hçn’NãqlŒAàªc’ЃÂLÁ£ûäòæݨӛZ[ÜxHD‡döfBP|bê Š@LÍò‡¯.)äø7¼˜®Ü‚‰P *¹ ­Ð"<Ãò2ÝÃØo[;[(ö“hNM É©ùìþá^Ê`†bùâäɘ¾Q§”×ß··»Çw.OrÚb9°jª¹|¨ûâ¹8šRAp¡±­Ÿz®Šoš©¶ßLùk|f‡ ÔÚÐjek›¬6oŸöS7˜6ˆëj{ýÆF¬šgOùÂ]Wå±éÙÊ•¨(?ûqÌÍV?â[5ÚÖ½ñÙœEU„)eÊ!’Ô5Ƨ»/à¹Z:Óruå£`A!°ËØt xÒܦf½Ø†q<û®Ch2EaØ+hMyIØÅ;7_,»‰Ü6‡ÎŽØo`Û‚–Ä;®ên¹eÂLIç¥jÞ&ãXP3 òÅÎ3-€ˆÀ‚êQ!á¿Ð¸WF|øÂJÑ£J À(æ-B/ºÞŸÔÛƒ!žÿ÷oÐwÔê-ë¤+šÝÙü¯ e‹íuÈ¿œ‘H£îâošÇ:Þ¿¼îÏÝ^ß÷} µÆÿ¹l³"[ÏN9/Ë*X©wííF±ƒ¶à.Ã!×ÏÝD¤–+ŒqQ)ˆA'RO¨?7P<õÌïëÏvÝ-Ÿß[úŸñ}‡¾Û•Ú³6ïò¼†åé5»ß*X¦:·:À›ªÚ¦m°U~¼h$*UÎ̲·Þq²¶1X‰Œ‚ÁXíÄé#'¯þâûô;!.r«x$¦*“‡"‰›I ˜C„Pp áXk ¬µwËJ0)h©ª|¢i‚:xíT‹»Aåm%âFü‘i*R@’I¥f<ÕzËߟ?M»U¿›»A ªÐïäÀŒ´!ŰàURJ¥4C7¬°$½ÐÄ„#…cÄ'¶„û e‘Xmž‡X©D ¢Ç×7[§>:h·œ&%½Ö^F2E($1Œ'FÇ÷>|þ¨ïòfƒ6K7Àð©‰.vÝmþÃü¸Y²-X5“´¨/+8ÖPÂc7ïLžc–éMHáÏ=· zéµlˆjìØzOF¬×•x½ÁóuÏ‚æ5–/fÖÎý¦¯[£u¥¶¿V1*°®¨ì<”Š6Dûš0µÓ¹4ç™âÀ •b*ë;$ÍìxN~3ª²ÈȆâð,òÑÖª«Abヴ^ÿˆ¶ï«Â.zƒev ›(1Š~¸„"Í”‚?$<¬8–E_³Ú «€˜ƒsfÅÆ Ÿ-¶¤íô*’! T–U5%K·¥ÏÙÉJ:1º4fFÂщ-ôK/’Ä{J*Ao×›m}_¯ô>󬀞5½†ÆÎÔ»GQ;LøÖ¸9¿ãêY÷nA›Gû#ÃvÓü v?êÍ`y¾Ö›ÝR„+DY=*å+d‡ÍL¶oMUˆFæÝý·OgÉÄüˆð5ÚUDDŽzÔŠè£ ß^‡mœ9z»×Í>h†^Ãþ³RŒ‰R} »ª¯Z¦Ùs­²Šî?RjãP:¬h÷2÷G©"¤‚Wc²R§ÔB?è ZÛcc'¼¸»¸3örçTN˯3£ÂÀˆ·?ˆš¬¼U@·T¼©?xä³Ëß–ìâû±”%ãëÞ‹¤ÂórO–/…-o>ï$DutrMÏN6ùñÓQ¶8÷ç9<Õpv<¥¦|d¥$u‡¬Çj&aUyh¡ÅÕ ºSÛ¯SØJp xú©4¶~Æ+1¢ “Ø^Àß”À‰#˜é¡±ßÜìÞ‘^¯Ù(M“¢^P±èÞC³OÃ?»Þ]ЩöD|ê× ”¨Dh Ú¥“wç§šŠ}Û5Û_øUÀc?úØ«ZZÆB3îÒªÀ.q—•*[) 2{Á·Ri×—Riž ©-ÃN-nÑ}OR¹H{*O+(uIÚÊS¥É÷zÄ$ÜBFʧMžŽ¶;˜põrâúqðòðhG¢è}€&ì´¦únü£•RNÜú¢Ì²InË¥~m>ECio"±JQ>)iz†òÁ©Tð§³"~úÇÜ;peOP–˜<‡°6ÑU0†p¨”úZר è7MŸ½ÖºšÕrk“ÁØl¦á¡~¥% ?ö/?Á¸k.ê×¥j 'SÊ4}¬¨’÷åõ²„LnF¥+pFÔá Ž*Ø4‰<öÿž':I¥¹xú,Å`*{i ÖÎccj;ÎÚ-/-‡Ÿàw‚hÙîϪ¢ßt˺ɚÎÝv ÷Pìkæ+º®ôº#+*¨öçdD¨ý’˜´?, ë 3µÒ1$W-/MßðU‰àçOùƒÇ”]Ï:½­åóêz®¢~y|â¬ÿ|‚W%C];˜ãKUVÃl*‰Ð^?J µ4€ç× ¥Käg† ‹I8=#xþœ¾oÿþLÀŒ~–ÃL ÿÍÆ¬×)—=ÇüÖâb1Ô·«x Ì`¨E錬»m)4È  ‹×_V­Ý(ÐîÜëu¡_LûÇë¶êZÁ̤^gÙ(ÆùN^kœâõ³ÔËç02Óêg¿û€Þj;ÿm'p^¤þ©Ù·mõ›ÈýZZ¤~kݓĎÚÈzÓ3 ö¼¡’ÜŒ-{¶¦c±¿üØ‹òwrêÃýÐJ-OÔ@,6‚²+ ˆ»fƒÝ­û¬©€§`³Œ¬j rýÌsPB1G¬‰=íµ>Kê‰ØŒfk?N— qù1öulⳄ[´ÒÔï02â?¤ †.žŸ†‡÷õľBüÎ¥0Û˜‚å8_ò˜ä2§Ã ¾–Ö/i kÞÚžSËÜIØ^&˜¯š ¬óJ$ù{vø¸{ÁÞëð¿³õ½dÈlãÙIëîãb/9 .89$¢‰óÑ™í’ š¿ndo#üN·þ/.ÂêŽ[ŸGÿ‹¬ZÔѺËSË<Ñèçf«uRægiµæ®‘¹ª¤Û¥ ¾ÎêHÒu û^Ø/‘P3ú¹?E!¼ÝíãþU–\øô÷‘Isù¸÷ø8]Œ4&ŒŸÕ2Öq]ºÌt >*I¦T9¶kÔR†’ƒª¢Éž;ýœŠŽýƒ1P•§@í±¬†Œp¦»e……„®G ½ùiTcô„ឦ♂EŸV $ ¢ ­<¥Ç-,  p$´wÌ‘—Z?ÖLÀ8C@´¥N¿)­¢¨Ìψ3‚Ĥp•YN¢õlkn< =4%Nk\¯°ãk%ùÈ£Â2 ã øHx'ŒcF'ïïï±Vǧf­°üz~m—Æ£+K[ÙžÔ¦õ¤Ÿ_Žî]a‹ánS¤§u7õ¨“×¦Ú û'TŸøÉaµ¤E_Y«¦—yý`÷^ÄŸþ-þ…ÄËÊõ¥ˆÞFÌm7W1WÊü@ÊüýYìµÏr=Že=¥|iÑ.„5jéV¹†\›|z†r9¸êã½UkÞ³ŽKž&–Œ_~D¥À?-,Rep¥ Â„×yÝ×I¶›,žc—½×Òµ*†×=º±ôÏb!–û½%æ·ò»çô·ÝãÖQ¼î„)²ãZÆeÞ&xõÓ¥z¹rÏò¿£#‰Ít•E9Øö¥/ö@šðÒŸÅ|{a¼4¹‰$£ó#Êòõoqä×UýØêI%ÉM__‡—UT }ŨÇ{œD4Ã'™ÃOA (èG‚$ÉØŠšŠÆŒi ¨PcMsHù‰NJ¢ÝÆguuÐh4>{¡‹eâÔ‡2¸ž@F>Τq Ö#¿xìòUsű[àñ2EÏ΃<»ëÆ©;wge°ö0ÅÛH#[õý"(;Û•“kbèZ`z²hN/·›;üÁ¾–œ­(¼N]±›É¦Xæ¹»žmu‹Ãw® ö‰=ß, ‡à9=nÂO ¼yo–æ‰è58gæÑ½2ýËÊq–ëË·›þÑC‰¢³’kÛ9ZÛp ɆÛÅ5($!£Ät„®ÊkÐte'ÝâÂyË“.s]Ô¹ÈIe¡‘ œ*>¤,û÷¾ï×ÃÓ¨ð°ìð›ˆ÷ë-žo›à×eOph2ÿjÊÑçeο[†ùœžñh}Ò^Þ_EîꎣnþÐ*ú›ð¸ý’H–ôÜEîÛÞ›àþü:ÝÛ3ôE´+Gçµú]| qXIU[!¥H«ù¦ho 84½¨¬Z;ùEW鎫nY¸¸¸êùš{" ÈkfŒÝQYH| ‹(ZœÌá…Ô·…}ÓþW=Qœ—=¤t%5÷@ú!׊;ôÞ]NÍÍglN‹£;Cx‡½kŠÇ<§þðÐ"h>[4|¦rc~5y,Ú ;dÇj'Ó~3l4ÓÑhB&’¢¯òˆœ27ã,‚9…J€bª`½ß”®Ÿ± °…ˆ*}Ï-/lº\ù”VÂŒÔ œk›Lá%‘@QúÏû‰|’ÃÖQP5 n d5¼t‡wBŒÜì!DµÍšR]Ф²Ø¶ƒ, ;Z:TÔÏ4o±ŒŠýop¦`V‹ ™›m µ5j@À½Ž`³ò¬ƒå˱ҔªJ)Y)ûH6i€3åÒLÅ1gp PÈ¿qèÓ„°˜8 ¼bõ‰už…;±‰_GŠ–²½ZöèKÌ¥£ª|ïf«¤É5;áɱ™‚¿MeŽãàçÖóà ¹ôàÆð2õµ¶Û½6žËåªÆæ«8I´dÏ”³:Û­c™S,& tí/ƒ PŒŸ'ñ‰Úá.ê.­[[u}H¦÷·¼¶Ø‹+2û×b úMX íÞI:ŠâjRªê.siñ[ókÿªüø–¢¹jô8¶Çb'ÂZ™íG=0°ópo€üññù9%ÿé¬ÿ»ÏWÞlÞ¯Ï×%ɨ¥mjÃѭΆ¶ñO¥R§4¶*]]! êTVÉ5RtÞY­WWã Æ/ì+e­žc–f?ÁC×ÄÚ#Wcø¸®Vì,e$ЍžËHÇâ> ©{%Ž}H¤RYWrÑÀ#ÈHU@@ J4RÂu!²* XôAIô¤Jñ"ÂyJ¥7Ø–ëS²ŽÅßýÛð&e_´§13ö.oóxðãÿç6è˦ÑfÃ÷?»w¶‘4«F‚k-»­å•¬Gx¦††ào#gyiŽ ­F4Eµ<«œfÈÀѪT£Î׌fÌH9,ßò¥Þûm¼G¸CöIw†=wï ßù¾­ÃÖ첆€_÷I‚*Ôzö¤Ï„ÊÔ4` <ø±9á‡~Qê,îýi¤Â˜X§¿?Ó8Ûð©ÉOÒÑ¢–n ¿™@ ¨*‚&ÍQC²‹±kkÚØdMewÔ•%Þ™ 9MJÓ3S^;,¥ñ7¹"v•%ZÜYúãBU äu@¹_™2<¸B“¦ÔC']INŠ·>$8e”ÔLf•¦xÓˆ#iG_Z¡GØ‘T¥•¢ˆ\5%Ò6#ÒÚMM §!;„'×\ûqŽIˆÚ†êˆ+ÝpjŸPdä ²h«R€Ä·m†”©Ry(…5BJuj°tXTB^cÈö;òt‘hÇZ“²J*¡J5I!tlåð¼§9ë,¶Œþæ'ÏígÀîé%›NQBÜG§QÜf©åhÖ5[(`"Ùl=ž_w ˆC²Ñ/tsÝ7=ˆmþÄ¥ÌP…%“Yh¶¡<õoG¤SÙÍèëú‘‡uÑMªþ¤Øé5ø^3½v Zˆ¼=ò˜*$býWº7à„lÜçE%³1n@™PcâÏó<¸Yìêbϼm4\=ª£–i<¸–N'wµÛø¬ùÃæÞÌ®ºÛûìiS¿°“4Ccé6tÉ® ˆ ‹8ÂeFøÉ+ ‡bØïç°¥ü¿V} 0BÜÄ•„$!›wUB:KN®ÕHà†S(‚Â?Ö3œæ5^Ý¿³ü|<_OÎR–¹àÒ+åЊÙ.×Â;%Í·TôVªª)qWãjô§ŸíSØÃ?–M7\“¶“½ºíY_GÿŸ°Ÿy£(Tˆ«¥áìðŠh®!ûøÐTì¢[SnTuB5õþÇÆJ±9ÛZ5# Ò6h(zô°xº"÷N$’¨äˆ´d09Ó{êa$õ]M¼,Ã$Vª×f"í•ZñÛA̵lt¡ ´7 ú4‰”ßh9©J`@õObŽAþ»@̨ØÌY˜¾©xõSmê'L<<±ÊÚ$•È‹ÀiüÍímÍŬrq™ÿÏå“ÏBa¡D¼BA×gr¾Ž—Í)Ùëòæ)Àf#÷ Ž/è&â6½ˆÊT{±¸RähÜTŠs's0V*‡ˆëfŸ„Ô 3D7Û P|w|î.NA“¸°Ÿ3L«gèZÄ ¤$A.0fëÝ*Ðï@ã,á* ƒÚÂùöïÉíâ,Ç£r͇’u.&«˜€Õh<@÷I-g?¬¹Ù +Î}¡*Ÿ/±Û#ÇŸ +¤dJlC¯»€9O®æ¡a[æ/»£Úü#š\oÜ€(µÒµñhœè/Éc;²¿!2 K¯Î¿«Ã÷4×3N@‹7+·Aϲ½·‘¾`ütg–>>µVOªíCÈÍîUV£\’0ŒAù ø é{!×þ‹åƒo•“¡´[ïsê\¯;Ó×Ä3uß3Nàq·7ÅÄSè<¬Â£ôãÐh~±Ü>†©hÊß¼Õ»¢¶aöšêÀ™ÁÖ=Ê`Q¡bCûhå'‰·sËØˆ™˜ìmÒ)¨…ù5ñˆœ¼}Ý_ŸçweCßCCCòþ"P&$0ÿ£Ðr>Eg!Hèÿµd¢æ”#xL)ë}þ¾¹ÆÞ÷çÛ%b ûÉš¨,‹…6–íÀÆQ¹‹5îø‚xùÏW'?Aé)^Ñ ç¬Àxlƒ4²hôòE›•â¥Ù2kõýV3kmºZþ…Ε3tuQjŽË8µé„ƒ[£¡Í‹Vª9/ŠÍIuÔ Æ“…°q®Ë™©·d?æØ5!ÜÛÖXÜá‡cêe2Yþáã-M}ÞGõA—>ªð.8Ó8°H‹9)")ªÒVªFâü’ö8PDÀç!#¥Ç)dçæ:Íë0Pž’ˆâòý#í¯¤cõŽŸ›ÜÚXø¬á„”ƒÁ÷–ÃÔR¬µ\XO6dÓ&$BHÁü†R¸¶%a[@p Q‰jDÔªX§§‘Í ߅ݰ³sMæ\qªvÛ… |øa¶€€ ŽdT#4$*–j:Ô}@€2_ÏQ¶3øSš¾Ÿç×{Â÷1HD6mu&¶ƒa›aéWÕ+nwQ tò˜§9*º‘©sæ¿«fóIÿRèøe xB…(³\×Ãx…GŠe§Ü÷w¨W€ÖØÑ)A² !uÄÚƒ±k4E/àŽ Nõ(9 üƒ¦CàŸTØ¡ûMç‰z†l‚Þp=ÍJ’³ÉGFkh]ú–DùÀÉÊÙ[¶¶c‰ç Üb›§ƒOª}Š*%´I_רåŸr³q…ˆßÈ1–g«'PWœµéôz†Éú~W'ZçEq8òÛn›c©Ê¨ÊŽüÏ¿ž °YåŒ×{[uGžY#`ûm·Ý/âvÒÁw±Õ€H·ržái-‘¶²ûöÞ[˜<\àš¸€ØÑ­ÿæ[¬V6nøGRj©ÄjÒ=4àDÅ¿âU¹ú×ü;,&u%ïÜZÛÔ eö5¾”EÊ+ÜѰ#a` P¢ÿEÄSÅAE0füznI,°v©êú7¹ŒVt,E1 ªžý+6@–}zxHì;æÿy#NL€+2‹bqÒ„xlL´Ã/²’’Be•¯ŠIùþxž DduI "¡Ž † T"ò€½‚8ƒÖ˶oç./û å¹(2­E(©`C@84Ð茎‚–wâ¬wÏdi—7¤8ÄÉ ª'€ˉ¥O!bÂÿ}ñû¼;Ü>=‹·0Q4t–ˆ·8¦Æoz?Æÿq´‡z1+²›Kø¢Çüð­‚5ß#ƒ»üÒÏù1 dHåìlóét½šŸfü†nãÞ+|RëÀeåžðªb_‰h¨×­J|Îÿa‡ ±Ì¶Ï}Kb?sçõX`ψ;EÓ"äšÛ»Qc;ôá=€Ò'qÆÔÜ97ÌÄmÕÇ×õ<]x;nô<÷ÍÚ ¨fmêþˆ'ŒÍšRb¤Aô–xñ•]%»Äùp!€˜ßÁ° €zO*¥€’Gï#”SXô£µé‚¤z*T¥¯{–÷Á\\äïvðb3ޏµU£bÞˆµ(Í›.šÄ'Ýîi ÔÑÐ_ïÞâ± +“žá”äbÒI'¾å;R‡øoɧï#©@¢½a‚Ý>–åÜ3ý m!)“>t$ÀÆV¬ÉÏ#>9ˆ%¢ŠÄ™c“f"ÅÌ6¶â£ùdcªTEd·x¢þØÙ^ív+W Ù\}yRŒU_13:xU}â1Y1Á¥k«+•þ ƒ†2Û‚ÛÓ鋱’gÁ?›.î°Cy6‰ÏåBbª.Báý;‡¢ïëYÃûyÙõO!F\&.‡JòÕÇùQG;Ôb)4uúzH[Z„ ’S­ÉW.c{é2ÜC¤@FaÎ;ŠÀ•pàVIךg…Pg"±ò΋D‚"g“š‰2@¦<‚j¨”¦@ ™­FÀ¦¸0c“Z`‡™¢ºH¡ NájSƒèEFÐaãPke‰¨±ÀñÅ-aoõ½¦búgî×°„êyF¤=ñiÔjkx 3jÚÈÚ2=Ô7|œg¶ÚíNgØqZJù]’¼SS &ëèÅjüVà@ì{·ü›¼“{¶¼S/ 8éƒÕ8|³Ì<¯ñÂÐ$m“^µ\éÑU‡'úÇüŸó   ëäK3ÜæžŒùltK5µ6ñÎc <¤©!<Ó³>é0ú»:¶ØË4üaÙXoÏô[ºŸbð «@F•žH_h þJ¸+ƒðž‡sµTB wíÓf7àNÆh–ÖäÖ(í&ãjµ›ƒx(GVȈ§[ºë7dïoôJÏЕO-š”¹3ªÊ5jê UŽ`ÓssQC¤"b 3ÈX`mÚn>ÐfÿÜ|¦e½,½`Åñ†hs^- H¼#¹q,,žž®Ö™e+EPõMvçÞ}}¬¼SÜ·¹Íð/Öû¼‡=ŸŠåúôÝßüǸM7úoŒöz~ç‰Á#É[“É»*û#W’TÑ 6c¢dÅ#aˆ˜§ÐaÉܬtÑð&ÕCRTõÊv%ž…àÚßmÊâû¸ ûs¿!¸{¤X ²²…”×êÕNÖ|Ædˆ@#ˆM1ò˜Èký92V2oÆm½c£{'RŒ!ñ6DŒl—½@žÁLLýrùÉ÷Ž¿hO5£P€IgGþö+/ !i%Φӂi©\\2ç:»c¿¹R€Í͵¤šd(›´ÆJà®M3òr²Éæ% ‰.$\%é&¶¶›eˆ 2¾‹—°\YªŽ Uú)„–ºc‡¿IKñHÌÁÆ™œð(Å7° Q2øÒË'rkÿáÛ–gYÃüŒ–G&YCÒCR‡í@ذš]"vImäy¸õ-N± ²ú|?Ã;{¹>ÈT§PtEFdÀ,«öä-?ºcq°Úµ×™ç€k ù\éYxÃ3K*æ¯&aãÕ¹mÌò„¨Ýõ‘p–€Úæ.éŠ]¶=í/¤Z ú jntµïý€¾,¾ã5ÛßwY0-àU&ß rN½çMò4&ØäÃδŽ`cJ¬ÑùyNìÊëp½uZ[IX†rz¦Õ¦ˆcß0}‹ã½Ð2å.«ÌÕÏŸ¦`Èñ€smBFS¥Õ[Hðà{„µPEO«.äŒ>æz=  óøÎz*›üÏã (â/Úû™Ýa…ršq¤f"ª‚”µ^艃* L£Í¬³ô0^ÎXj°èÁ Ì”µÈ5ðDŠõZ6C¢M®nÌCeŸl{¤µHv,·„ 1ÝÉ¡p]ö5QýƒYD±Ê€ˆöyÕ@àŠJ0¥Ð½¾UBß/ÇIù:žJÈ©De™ÂT»4%)zzz§qNs/)Ôñ ´ÓÄé°š“kË”Œíe»ú[­P‘•ó*gϓͨËД‰³ï_¬ÒŠ–Á#|(‹‘AÄmüµ]3•/SÞíDG?dÓýÛW…Û²Ô4OÇý=‹×¬d¤5-Ú̦pú€fCýâT’%:i1½z–@Ôä×zÁú…èÁ˜‹Q\jOÔˆÚã™æ`5æj7Iþ Š2c>„Ê3>Wʯ̵oæÙIÃ/ DƒöL 5÷!¤på#–ã¢Á5sLëp¼}ÁîuZ›HC$èZžk»¼ðT>®Î€Åû_ ~n)þ;Ÿ…CôC½MÿO- ¯åÂ@?Cª.SŸ E°ÊåŸ9vÞÔMt )ŸCjÙ¼9ûߣtšF~?«üº©W1Ÿ2´)Öð—ü:µz~ÇÅ;´—´݆©ºm Ý`€| O“ž÷puCÝê~Ž6(x£v~pŸ]“´]WaS0¾an­oaAlå¸}ßef8….'“\»ì$Gy¡«6óS¬H¦FÎd¥Z¼‘b;jª:“þÑó%gÚTv†Å8ðרÿÏ*?pß¡;W‚‹ÿ¤SB2‡¯,Ñã«Zy”ëu#ú2õÙ놗ßÛ·Œj:Hdî#‘}¢ir´Ù< ç)s§ö5ànà)þú^x§æëùÁ «¥YO’â[ù»ß½Zý¶QÙï¿Àç™gã^'îÖ$yQO'¬C³ìTj¬çé†YÅ"‹¼-?P%jΦÐkè§\œ¶¬‚u6iÙ\‰%*?á7 ‹Þ=QmSa Úâì"ܺ€½>qx•‰‘áħìVˆ´b6vnÃù =`±$f\ð0xõá;ùì!tWj.ý—òˆÀ7AòËäÏå-mÊ='jnˆ°?Lkˆ+µ&ÀûèŽ)4T¸(*N†K1ÑÌ`§ôZÅï€(3£6Y J!áXg™M¯"W ü6{ìnã“°žÊŽE×0"±ì•§Ø¾$&Ëk“"Iæ°l¨¾kÖó#R ¡Áˆâlm]jsJffÛñÀ1¹H¨H‘œ†[ *ØÝ7X;¹ œ lêµý?/v·vý¯ÙýÛˆ¢gŠ÷¦*Exá4îìL,K.£ûW4Óî;ˆà ¯«Šg¯ÜóùAj¤WµÞVcw(¸cŸÇâèÆyØKb|€üDÕŒ$(ÏÖóEo±ÀuâFÅÇ@Ù!KLƒ÷—ãB­NoΦ0z¹×9vkD ßquj]äŽ+èzÚŠi(Ë—¼éô?#7/î“^ xmTüm’M-=½Gnùa‘³ï¯‡5î:ô]@áÖΩà«E‡Ÿ©=Œq°0´‚Ðñ¨ "‘ª*òXŒXi´êò§¢`…ª%À \ŽÉD‘œó” Qš¿o¡ü¼DLÄ,§«ôu^ã.þï§þ‘œf§ÿ¢ž‡cI²W{`Æo¶€úö¯ÍõAΪï¦hÄI…•¤ÌE­9ßÑ·’¨t阼¼<$, ´Šf$9Ì^·ûî&ÿÔ*¿½‡ËéúSÃÝ_=¶ þ£Õ žü²ëzÏ ÌLý†÷‘ Âk–õê=&ýJ̧ÅZ’nóáÖͰ ‰§‹)$`¢ `–a eÇž¾«×HnëÑF UìëÖ?òs…e#hYújDV²j0sÏýçEÞt/öZüu«š-Ÿ°X2ñÊÀ„Äù„rPççë¹ÊйTýPh ûýOɉ^ݪ0…**–îú}¹««_´ÖóÙM)ØJb¬kÝlac¥ˆJÑ&ä¥leïfU˜;•ziH'.F° í™äŽã/A!²ÿÞ<[h£EªÛ‰¨ æõ¹8c·qh$AP¨‘¾éž?Úþ…PôÅÊÀZ¾öÊü >ÿ3™ä„ µ 5~OгLµ^d˱]n9Ù8…{‘®3¹ÀÃÊWrtDø×_µ1ò¦ù¥¢ Ìî'$HÀåËЀÊÂz¦ó+¹l“ºõËÏã?Î&Eª˜ç3“``è²ÓÆ´¯N…>Š`ˆäR¨ ª"Q'Ä^ŠsÄNãZ„šªÿåý«¯N·Bô$W> :^Øi@ã¨`ï¢Û‚˜¡”‹ÍØ<X½[8B) 3è’'i'HŸãØ\ACÃ,=›»€Õ%7­ ζ§ŸŠPa2(Ô;Å  xn``Ø/6Fój$Ý—, ×ÓG:G½’ eÞ6ú)^6g)åßrŸßy|À«fUa ]8gµc—qÔpˆê~Ûv!ì[:kÕñôåÞµ§ õ}%켫o+Ϫ½±ÝN_ ò¨ÿ§·€×ZÄr¼0Ì3òÂåÈßÖ°a±e2dÅFŠ ÓQ)F4¦ å1÷É2ïî1Umã›äýåá··âåê¦óº=-Ö@@™E4Mx8ˆ’¯m²á=t‰$.pK£|Ñ>‰|©3).›æýâríd~¬9¨Á\HhtùvP NL•²‡¦3Eª’ËSòjd Œ ’"í9¢?e®f9JDbÜE̶×N-œ¢Ì9;¦§É&~χžJ 8iúÆR½n³¨p.ÙAnª?[îgvšþ™w{Vç.Án Á÷kgÒH¢3sj¯©‚åò“:J´’m稠n}ýºmÈÿ¹K òzüz3Šø2Ÿ î¬bO*ô*ŸÛÑkudDP¶Ûªõ?ÜùŽÁY®W™N¨þ;àB"(‘YØùÿ¯5 åŒ[óBRµÙ‰pùùÕçp6cdBs$CÆ’%ʬ<ã\,óvéD%9Ë€MÙ<åèô ‰«§+Ÿú%$`®ªcËT4LÛkm»Ô=—…Œg¡‡^¶<üÿŽÅªŠH6gÑOØ´X(ªK4_•[%ÁT‚TÒ Z+!Ù²r—1žÙµIzÿS÷ Õt¼æqefÄ”Ï?¿äˆf!7a¼B #„ldXí†ÍEüL&=¤i‘/ÁX@5sĹ¢ôK‹HP Ú¬Ö©·¥z»,äÞý¼{úûÅŒ“qžúL®Ò·m¦Ù [työèн[ÏdPÄÑUÙS”zžïyÝotB#ÙÜñ¬Uƒ#àæ‘Joj´øF ¡*†&%0I |[鈕zWfA&39fwÁÞÛ¥ Vâ‰þ_`è§«òeú#Õánf’Š-PJÁv×d•W›m(Ÿï:1@v0OlM–i¬ÔFÞ™’v¥ Ê ´:])6ƒƒq¦—}&L;Ðfا´þ;øÚ¬&okj¹§zsè¼ilà6 |áAØ%yç¥1Ó0Ì&Ê颌r‡ÿy'Ë*Ùší ŽÅEH8%®'“|»»úi¹{Qÿe ^¢½X%{½øÓ%“-$J„üÔ­e§¸®—5Ž—é`:²=zm6ì4³~@Ù5ñÓ|Y*6ɹøöe·Jž` Áã3n²©ÛÕš¨É+ZÜn[Á3’îý>dÐR£Åý¾a‡\„O2Œœ)»Ö`Øœíàﮑå®9/ωW°¬E6¿{_Íu}0Žq—ŒNÊêj°[ê¹î¶þ²y:Û­8^ ’fD~.W ÿgÄ÷C‚6Ÿ Ÿ!Ùm"@æ8þzÖ¼.D sI!¶$u3t•_6æ5l8Ö9h¢‹TYµPÝÚ¿z§ˆÌ5†ž0Ôt⛑qñM[ ?*ËÄŠ$ŒììµB Y‹Qtïþ+4–g'³p#˜ôÓ7¥ Ì7Õ"ú§÷xã‹« ½yTÙ*ÛÜd¥§LK×[e„¬ÙÒ©,vn?Bfõn/cMímüóß§žJMªœþxÑ8ëvÎ:%¾¯7hVÙ¯“rl˜$3ºv%´f”êù!Ë þœÏ2J€š¥GáS{à~ ﯠÖ¾}žÿ̼ Öjß>¨P=•v|hÕ½=kS*¼|>„.Ê >²×F•õO{­ß\È'‰K+ŸløïÆ!2˜ C!ð‰%IâX)´#¥@Î4 )Å&V19¥F!¨XÛoƒä¢ ý¯›Ú²7¸Ðì,¥°Šò›AÓà '«Êâ5àŸ”™òs“p›»qb3F“4™¥Y·ùÜCi§é#{u¡ùÈ7s÷žïô öáßc*µß†Nr»-žö÷=ü&ê§gM7›Y{²·ì ìŠ“¯jafæÉÉǵ“Rƒs×úï#Z¸\Œô矯ùˆü-ˆc.Í-KÈîby/êñû,`ö¨ÃÀ ª]à¯ç~nV+0"#BžC±`µ.P‹#Ó»£QˆeΕ[vÛ‚P‡AùÀ–bñ¹œ]†{.}øÑîŠx»£ ŽŸPI y’G’*VF^w‚( ôý Áœ%<ÿñ…§?Gesœà#Ë-)î©d®Þä’Eîu²E/Þ)Õôûýºr™SžªÌ¹yÛç¹V4cš /I% 4lêïÙó•™à›Õ"¿|'÷th–é¶¼Ó…Eù.þ/ª¼»ulÕ®^ÒVä ºoßsÿ¶:çó£ ÒCPp€µL ¿ü°â½™vMîÁüºŸ¥Eû¥÷ÎB7'7*xdŒ€•V E¶6@f`7£$‘Ôjæbre„6jLÛs²=.¦.cS‡„Ë2ü-ÕêMúXP€ùëy4Ü oNu0§ºÃ‡äy4  ‘U®CÓX*Xì°æçq ÛÃö°rnk¿ùðe&q6¬çŠÍ#á­­õßÄ¿–«—±Ã&Êè];Ç' Ò²›D5 F Ìu÷zAtˆÑcŸ»;ÁlXǃH €µ¼¡(I%tãuÅ@hÃg®y&°$R›PHÝy~RáP!Y›±:„U0Ý&^õndË8صZ^ž;f™¨DÏQxÈ K½Lnº9Xx½ƒÉÓÔ|®Ò¶›®ŒºÁ#Û'‰ÙÎmÓŽ‹÷ÉDRN>âð|î6Þ‡a×wŠ/.z¶mOýÚ䢅ӕz;æS^iÆÁ… Û¦úåZ´°¨‡”ñš«Í@+^üœuE1÷KšŽJ×r»î€‰˜jf²^ÚÍ4s¯†²¾žõ–¥vÕÇëÿv¨È«6f%¡xþ¸B&sÞ—!˜R· ªÿåãÂÓrkÈù±5~²~’úåÞ)™¤¬<¬tM’È>T”N˜JbDŽ2hŒ IƒöÅŠSÅé¡0±\ª…ë¥ÙDP|ºBYŸ-Ù,в‚°jtƒtš´°f±0Ì3]ö’襱õ¹¦I‰ÃìêÏ2m$®/ÆWçÑälõv¿\K‹ßc™ú]lt*Pôö™`{Pz~舆œÌ›Ût«›·¿ÏŸ£òÎ3¼ÃN©²¯xÜDY(•ƒë5.çÿ0ÅMQúS#þ²ù6BiÙEŽf9г š‰Ñ$K-ö¼2—…sÂ(k}*‹€“‘È6²ˆûQ­¿˜¤ˆ;v˜0„PµX­ Ãiê!YQ95B#FK̽X«å< fË©èâ#4ƒØnEHÎM;Ó¶wL«eãÇLŸ;³KS㫚CÚÚˆ/ndý€É@¤ŸßÞ+Hãƒîåà é&Äï›–€©O"ÓFª¿kH0¹îª¿HA0 ]t–öÚ¢>tËÝÀ]Ö•ÎÍ5 en±¸ÇVë¹ùâuM~k;rUw8ÿ¹v×k&DÓFYáÓ[ÉÒ?®/t#÷2¢†ëzäÛ? 鎲ñj^¶»ûøÂX)Ë{Wúz4`ÔYôýÖ»’ÒhÕŒí B"äÈ2cÛ„Uö 6I¬y˜nR&w²û) ˆ¡¹3L‚ Òº4å Ù_;{í?zÜ‚ŒL;¦…8ñãÓ®¿J]<Ò„3C¢õŽÍk¼lÐiƒã€²‘ƒZä¾Ð3EAŰÉÅ@÷Ãâo1Ö¦(bl+¸š¯îËÎ_þ¡XÕ‘$9~[i…·Ù2¡¹zš‚5Šã¶%‚rºì5¶ÅºêOÎã4ÏW5}4ÃA}è–/ZûÞYë¤Æ3ú4]\DZ%­ñø3n¨(ˆwV›ßtÃ1%\›îk»c«ÃL |hŽ4CÍâÇÛqf©·§Ú¼¹>’TqC–ˆ/®ýÞ@¥œ;9ªŸ Ô9œ÷|n;ï¯#øá îÒäêñ}”ý™¾ûÿ¶ÜCLü™À¾‘MC"›šÆrâ¿<6©¿¼u¡!>­JâÆ_ªcí”Nf Ü¼…œ9•ºH}Èu-8ó >(«ÇRaKDÇ"vZˆš¾Õ‹³eØHDãi@€¯·~;% žJ:“ŽS”Ÿù˜º…ÉüK>¤ô0À—]ó¤¹ë¨¦@¿Ý!¦ãjÖ§vû6Jã¯{‡áÿù¹?,›<ýí8ª[÷,3_y¿ÓSìÖ Q (~!ý$«ĆžDæÜœ”‚ûºË”BDI‡¨\×Çñª`ÞË€¼!y`ï‹T«Kétº]]aB;Ú¿Ù§Ô>ýÑÍrV3eüyY<ê:æ~ÜÞ±YVà}·%¡Ç¸èíjÔÄÐ!´Â˜Ÿ†tõ&ÛhW°~³Ãâ½&W‰çÞ×àÛ“l—y"Åš‰. jŠËû—¥·Z.GœN¹¿yGdi½SùÔˆ 7ÌÐü‡òO'_izR}âVóÃò™7 Ó3tC§„ù¤ãÂ1hoü»g/HæÓ¹ËÜ((ÉìÊÛ¹¶ûÕïêâgò°æTþÇ h߆û¹­™å䇋1P$ð _„° /þ>éž#aGÚô°y—Î~¸>"hÿ<þdòd wÛùW¥ A­ÅïwÏK¢i9êÜ -ê²­õA\i‘Ñ ¬*›`AMig•UeVM­ð]ò°=„ϲïe6vŒ}ú|þ©01TîMÇŒã®ÚIy±’jAGVu»x·=$Cª–UPX¥ùÀU;LuzJÑD?%/’x~©›osÚ u1/Ya’¼pì“ór¶ù UÓiåE½ñ«( ÞpêÏœ„¹—ýnÐ’mb2]1vÜafþD´˜ ¶KN™¤C—ÅѽÐ%ë£kf­žÔ꺄D¯Ì%‰tÂ;(¥pò÷ 2’Þî±ì‹,À+‘™Ú-”êîk“YÇp‡˜-Ýd¦õRá¤Æp –ݬbñ·ÑýZ+îˆãeب±²{ªu%û÷7*£±tSjü‚J:äÏ 6€ ÚTÍuÖm–S›áˆ‘ø ñ/L>A˜³¯÷!€Öwøð£#QÉ/ÙGà׿Ð=¤¾6ü‡éoÞíûÏżÙåã¥una¼y” ‘R‡ë*‡*`ÉYºØ¾,—sÜ`Ù”»·çDÈ©å.ÔÆ©öð*[b,ZU‰ Æãï¤,+ã+l ì•À°0äžXjç©YÃÇ+ÞÂú|dR˱A#(!’üóžàžVY2ƒÙ¸èx,áNËîÜ&Áø~Ë¿±3)û£yÚ’þærKÏ®/=º´ÉMû´KußÏ×Íg­)bzÞ)±ÊíZuRt$$ fÛ­‹X\Xe‘7‘l0@ÎÚ¶î`]CDšË ;fTšõå’Mël´ê'å»p)@péW¶?'’‡È!ÈjÛ7ršQçBë㩤Ø# µ­D îHi¢ˆxðÈ# Û΋½«Š¡ Öݨ ;ÚPéZÜIÐ$±Å™ª¼8ÃÐàŒ¥äó„Œ+œßçq³‹¾…6õ­¬£½,Rf…Ö6´!zNÌZROŠÒÄD˜„HGž7†Jz«’1ñ" ×Çà ŽûªaQÝ·ì²_–×ÿ!Qì­þ}în¯ðæÃ¢“»Ó´¾qçôžnÍfAð¡rDæÇ¡Ãä+¿3Ô8¥Ku ÛEN"éÒ›d]Cz[½{¡)D¶À`7þ:mq„±EnL ‚¯ð{‰¾·nFá“»÷‡–‹yŸ¶«l‚†mcº¯ËÍ?¹õÕØ Ùç˜D˜/Ð+ÛVdþ’àŽ×¦×Š™ÖV ŸÈ˜§ŸþÒcè¨YÔ†v|(awQ§´Y»hyq[›µ¿*½ôM‚1I«†%ÍE؈ˆ”A¢TQ8p 9ˆÉ#Ìänܲ‚’ª;'‘½JM¦»µþArŽDú[—ºIlà5òœ¨A X)­ñŸÍ)ëñÍ9ί&Wdby­À.HmW“qh Š„Öa¨Ýbj­9„\;yäûP +·ÅˆV„‚#9"ˆÿ}¹.L:ìõŽý¡²5n ·D•‡ˆvk`þ ‚[ldvøV™*Gô¸€Ò;zk¶aR1\¾j %‘˜¨v¯¼ºüÞ_18##==©î1¸&DŒ33¼N v®IŠÇK‡Öª~M×dñûÃ-®~þ÷_÷ź”{bf'«—ù±¯BÁ©n§—©ŠêÅ鈃ƒ»ºÔÂôçRÓbQ:ØT±ìäýÉ{BÕ—ƒŸw¦q‰ŒYÎì ~y^Vv'%«g¢Ô \Ÿt4] \ε bþ[#t•QÝÎO}ñ¦™.14€6¤'ÇáýVýÏ*jJf)IìŸ×8¹ ë²’T‡îäfÝêäϪö{©Ú)Þ10’ˆœ…–—™ø)Mâ{j¾•ñLµêô ,îãbgï’)=0)st<’å2¤³~,aèxræÕ4”?€_Þɲ`dŸÏ¼ñ”«bH'…ï5³Á’l‹lÍe¿(\‡º©L¾L"Ô¿¨’â@z]Õš°b½¯~ç$dÖãÖâ ýŽƒÿ¥=سZ©“Zp@üúŽPUncNl8ŸÌ˜Rà9C׳ø¯Ö†31¾üöFí’„âÜþ=™\;öR>š•´_‚x!×^6ðö-®nì½Ý\ÐwÒ15®)Œ°¶Q0wòÓžšxÓ#^˜ÏFYQ–K±ÆõFsA½#ÍÒÎë3^3 ǪÔmrÂGrËi|Ô«#ÐÏ%Xs¦ÒÌϡ÷IÀéw|ÊÁ9; ìµ»¢6›úÚíß…$"—¿â¥B.é ¦Šº¦«©¦ð\ððÿ · ŽSÜÂÿûýq~+;œsãqÚ×4ó×î !rªZšŽý¤Å„ÚV—ùÚÀ8%!•Úr•!÷ejÒ£ùrmîú< ñߘ6Ù`ïK²u&=yè”0Š©Ë ³ÓÔe~øŸ/­CŸÝy딣“]z ¢û™öMhä1s½2ÓÛšãiâÎ*”T­? JMªí €I»Ÿ©ÇÓ (ÉÄÎô·óCue²‹õXwˆqJæ›Q1ç˜\²å›’hö¤ˆŒMzÈ’ã‡9‘ÿµ"£kIöžK“§§?Åà´aÖéîØ¶†¤H²ƒ¿Ó ™T7çüËVõê˜<±{€ˆo’³~p˜|ëO’à;ù°+CpÌ/í?ÖÙÐÂÔ+~û¼ëæO³,.§‹ëz$¨¥E‡½ò ›u»Evyÿ0çðXéƒ>a¤Z§ooßçG¹ m /j‹žNÞžæ¹v¦"Ýa=oŽôò¥±’ïN­UZCELŸwüuŽZ_ú{ПÛÀ¬ŒLŒò­!Ô¡Þ®¶·O1Hj'$>' /ä†ãÚÏÕ(öù’¢Ø˜:,0¬\#O:L»íÇŠÿŒä£¨oZî9wùN¬+ˆ}̉w˜pd—  ÿ2os í›ìä³^ˆw‘<áÈÀ«$Ó’Ò݆†ÇSæsÅæÞ&F>}hs¯ìS„ûkoü¹¶vR$üëâþímÇü/ÍÅçì_l„=Œ¯ÿ}9Û!¼Î ,†r`U¸;â+-™ì8ƒûÁ¶ÈžÚ|ò„]EÕm/-h-"Ü|BP˧‹ ³„ñ­oìó_H@´‹kPÛcÌgb.]ðÒ_=RBy»b¼æ–Ýéo h‡ÐÕ ¬°¾É:ý ³R¡ ÀV·šÙxrþ_ÀØ{h‰~7HÁ2f&}¥^ÄE ¡óQ¬¨.¯¤ðøžÔ&ð—L“FÃCMòg j—N]šþ.]Ÿ~Q¼=åÇ,5õä•£(m½×%ñÁ¿àE¨ð(ZÁÚ LBs|£DD4(RÒû1:Ö lÀYK&dNúI4lŸçʱ›6;¦xÔ1¢7{­AZŸÎˆ],XøA5eûOãÁ‘%‘9QÖxÎÑ8€(y „û#ìläô‰ÁÍưã eÝ+‘K‚Zêõ´‹xSÐ…f¢9K+¥lVH¸¨]›Ü1ŒøXÂxSç¦ÙwÅU¼»ƒxZ»£_à¨Öx ¬Àúe*…U¥oÊT°¤¯‰Aco•^An šÓößv \¶ûü£(>úó^µµeÉ_£Êýì¯ /O7Ô#ôÆKàVàþl¿Ò°£" ¦îýð<š^‘Þ6É7›Õíšwu£CÓ¹H®?#Øb±´~lâo‘ywIå#X+|®8=Õóý¿¼ ‘O*D¦­×Bpg!ë‚ç;£æ©o!š ›Y8ª-.eh°ØËkj!nsøº©FµŸÖÉ\ÇäÉœ{^ S äH©vúv9WAä˜-‹žqç‘vËf½f*I.D Ód¼/qmŽÜŠÉÜ丬Q®²Qºüxiß¼vÐŒƒ§Påoº±² ì .{HÌÍ tƒÜž˜ÙN”º?®rÛtÂ¥ã"IZùtLAjNØX]Ld› W8s—ílMÜU“dI(yͽüc¾‹Éÿw‹¥¤?Úž“½óL‹3 rÚ,'¾<þH?Ǭî0$eNÆœòd¦7(órtŵ÷—kp’.mI*|‹žÅÄŽÑtms8­Éy3Þ! ìC¢¦'` ½¶0é@¶¤œ0÷6SqžÕpQ:º‡/‚ZQް¡é$ Їæmgz€ú§¢b5 ÊY³Ÿwµ®mòØ«K§¶$;o¬lIŠRt_q1ã˜yþ?óÈ ÑãË;–‘ Ñìß.Þ¾rêÐÛ¡Ó÷ëZÛŽêô*Iž¼ýCZRç;ÈdDÌýWø1 œC¹NvkѬzœ+n\õ‚ãíB8Q™ƒIÙ¢3BîÙÛOr‰Nä€âÒvf*°„îdJÅò¼”„Ç̲¯Î˜£EÕbFÐW»MIR¼zkTƒÿ×pÊb†z|']`ÎRpàÐB|:™>±¸ËªR£ÍiK¶]®îÇL&7,Dˆ˜¾‚²ÑÖF¾[@Û*“›0”÷“dòNøº ¢BŠ áÅü?T€«ÚÒáú0ñ=ÈÅE@SÛq gþì ÝÏYª©ÂªÉkr‚(|(6S·øÝÔ6>¥Ž]D5X÷í÷jÓÁ8þmwÁÖÑsÔ~3U‰=)* ‚GQ„¡›o‚5ý@/»ÕeA]Íó1­D^ñ3Tãõ¢½Æ¾½{wÃé¦AŠï"0dP(ŒÞ¹Ø}°ˆË¡~÷ÄjÓ±¶ì=,âaë¶n´Úvµ?ãGý'ÏÚ?ðL×âAë=*QâUæ¤×rEœ’@.œ…À”b7žï-ÅrøœÇCަ/ô½EË- k\.†æ¸s`ÆÓuóÿx€ Sgñ:íù}‡¬ ägÍû˜Ö¶ý£m?ì½ÒÁm—¯ÿìX°0IÚø\cX†^¯aÑ;Ã#„´¦H ãD‰àÍ¿,Lâ;æþ?HUìÇž~*À?éo#k"¥r~•jh(¥X½\ ´ªÞ_þ‘E3sö´‰T ¨ëÈ xv{"â@¿pÍk€¢#¥½€SÒÙF!Jâ¼=D¨B  ³,+*;ë·RÖ F5¿[w#3~F¼.1»ŽALi1¬é̈HXä P">1•ßTïZZœ œÍ¸ت–[¹\o—Ëåúûµ”bÕäY´+E8SÉôB¹X)3rûŸ_ο¼Úývþ|f¯"¤v-zy»ýëË[ùZôî íVôz+·ëÍaäÂàS"&vˆé,6¸]ç÷ö@¯±79ýZÙ5ÅõØ^T)AîÅT!B™H„Íh¤Sn°pý¹R×sW‚]àŽ;†¡×plôtM<Ûö~ª5B2—›-Öꀈ–S8þb¯mÕ̉%“I&ñEÏL¹€àu•kð:‡¡SßüV djÏš‰LL™<¸kØÈ½NÒ¬  )«of…ù’¬ÌU_åO+Çzëµ…ðþÂÌÊf–ŸÒ*€Ük„@ªS‚5u¼7%¶îœwÑA«©j¹{Î~›ˆÓànöÿeïÚµäÈqì…E¦¦UZ«ô ã­;ûÇ»Ÿ±ÖJžÚR¦5j+«H k|DdfU©¥™éÝNŸTWUdÉà¯ë³bêìjðâ C„dk'ŽøNo~LØ«¿¯j ·~Ñõ¯šf°¬f¹µtǹ÷ƒbñj´Þ—ðÿSb6cTù¡ô°UõûÌÄ–Å[•Až™}ÔuqÑ4bn°M»ÿãÎÑù»2IïU)ŽÞ¹ Z¿Gp­a™fÈÌØNL >…edDx†ŸÖMKZÓã6‡Ÿ—åÑc¦šÁlÌhòžáèû®¸… ÷8îŠ.—Qz•o†§ñï æáÜþ)¾I6)ZéqRŠ[£Ö2Ÿw% ¸Ë ì¯Ô‘‹õß[oéþ‹žŽž>Ø^ñ£.¦ n„„ÁR;" ×r»·éãÛnŠn(òP&žŸÖÍWÅ–S½ŸËüw•áÅíOÖCB–°³g°É’z“†™u·á:ý¡Â}úúéëåz“ »G¼¶¡©ñ‰½Ô–ιàä¸q?²&Oã 6 ŸÍÞBlæ9~½nÀ*Lf0ƒ¨ ‘%PF/&1÷ØgP¦¡°Ðª X¢~XRS{φKb4%¬gV(¦:³W¦:aó=rÎoEDdœX h e.Ì%3%°;(3±Ó¦%—>&k)[†)ºL6f Òªª†DLB™9‹«° ”ÒË wÅ7BMÍX+8XX}Ј֗c#R{[FÚ¨ù´?€&í&xå ôK^¡"´¯,OÌëÖæ|38=¸ëåÊ] ²^¥¬Ã€pw{ò š–¸å]œZs™Ï÷wÈ(rüõ­¿èï'GØ0w’fžôvO% ‚„ $£–ÌÈX¶ÍšYëãŸÂiï #µˆcÿ©JÑ­;Ò`äuwµiüyE¿€Wðkw¥×)½¸§uë0ê7±¸‡íÍŽ¾¿yð÷¾ÿ5Ñ¡ÃzåYP><?&2˜K)…2s&QAæ0a¤¾©Ž~ £ÉA¿ï2Nÿ%g•‰ÀU'MkR .âàVxØ‘7d燌W¶|i.Æû¸4 {Åžh«´”åÔŽKÛªyGÅ÷Š@½œÇ«r¯Ûc~sÏÝ‘ØÝÈ÷ÊJw;@h»¡£d‡ˆŒ¸Étµ ÊòœÞ¥k/:é+3a~çΛ4裮ÑÈI¡ýçþû¾E¯x¶ñÈ“nM qº4ñÿsýÜá~‡¥Uýä{åòþäÛ^ÿ$þgùeÿqò ÿ’ܪ?ýÓŸT×o›×Ùc.åé)<®›ˆU‚çÂ\Jb4¶*N˜®@I„œ{ša„=Vmƒh”Ji=ÇkÕð(T¯³5O Út¦†rì&º¡Å½j¿ÂÀ™©‘GïpëY¦6¼ †ö¯lî¦ þ[­f¦ÖTÁlòé¿/žä¬/b¢¢†ªjvùí²}»^¾^®ß61õÄ­$g* Îe' ªÂD”A¹œsA*®ßäÓÿ|ÑËÓ&¢_¿|ýüåó×/—ëuãÝp;ëˆï9?ŸŸK±ŠXuß<)új82aŽ­¨ë8OƧ#ÏGD PÅöM¬š+ô”Q&Î…|húµ(32 r —%EVÑfl¨ÈF ÊÑ$%Xœ¸ø`ÞÆ8z¢€Sw)%†)^:¥Ö‰Ë©”\œbaD„07#{ÌÕØ†ï}¨ñÃó¹ôéä·0È^tÌ´Hð#B‚Ö ïR/ÂA@bnf‰ÈÄ ëuà~gÉÐô¾ƒnþç߉2`ÉÐFð1ƒ"þY«aÂlF­@ÕpYwKg8 Øßz é¨2ªØ‡C¦Õ|<ÄqF#¬}놠Ý×CÞ©šdÑÀwîßûb›ÞE ÚŠ~Ñ㜗;G·;µö¡¯mdSFWÁÍpQ(¸B­—Ë¢¸B‰9©T`âýI ˆÏ[qïå4BùOc? ꎈPÀšõ O ,õKoC%™Œä£F[lùùÝr«¢Oy‹oùðÛ?Na¤.™ôÄ^^nø~ã|ÜU§§nõZr®u^}an-àCÃæ÷väÝ#6Ðïr³*Ób˜³8°¦ø5vÓb[·e¿»µõݽ¼Ï°}Ðú; åOK¯î·“SŒ ŒWÊò)-;áÊÐvܹݸDžA¶ÇiÝKÇŸ–_%ì‚YManvª%Ÿ¢)h#ÐŽŸ³dÝ|î^ÜÀ·ûñ\ì)ƒqC×&Ì £‰Ç¢_¼ÙmÄÚP²jcó{{ýÞæÿ§<²þ$£é/üKþ^¢ ‹ÚS˜Ç QÉ\J9x{Q­¶ý.ò"z5Uy~þx.\2Y.”Ę́Θ§×íż 4;Ul)Ñâu U¹+7 ìì”®ñ{Ýãk°fVͼP~†™RÖ ø¹u{0Á’Ž8±%@”:Bè–c1¦©ÕtåìúûÆ¥¦’‹YA¯aSžß®Ÿ¿^¿~þz½\¶MPE+LÕÔ´äÂç3qéŽY–*V•—BœYPu»l£L¥€Kñ˜RUùÏOÿUÎ¥<=$j*‚†òáÌ™ É9„s"îZQ9±¾¸ÜÈM›"wúA¸J|‹{ŽæÖƒÍ.š¿rèë• ÜWÓ bZP†y}ãâ•Ã@(ÌθH§nÈð㪊߹”â*¨5^ f6ͳœ•l ›År”6 Ì<´3ŒÀÄ%âRp~:??•r"^Î`N$€U,!Ð}öB¹”]¹×d6í•“•KÞøD[b§_¦ ÆM Pª9îa€L53W3"ò ùd‹Z`0Z3nÏ'îW®Í½¹êV¯7Ü»¹¼ž´“ˆpÇ#ÂYmç3gµÍ=ðÕñ³\F#MʘúJ±K³U»·ì÷]1ðMÇ:zìò ü1ƒú¼ë¨¯Ûìöî‹r‚A1,ýF¬ŠWÒö c¥Åmò]¸×õÝiÈ਩Û×àžÔÀ©€[…¼|‡¿¢ƒe¶>³4ÅùœCß%tÿ̰WúŽ pdË{FkO&5C EÇÀSúK®§»Ñïok¨ï 6þñ§ùc¡×¼gê¶P¾± ¹Y6Á Z!ž1a½FúZïwyR``nÚ8ÌÌÑxë-ýgošúTüƒï÷UyË:„:è.úÀˆ¥+Œ üDïÆêËÔÝÛh†œÿ´þúî"Z_AtméßaéùòïSŽgk'$oUwúܼ…Ð×vuÈÇ̼³l.ï¾?ï -w¤Ñ.UxÌ1ë…ßwŸ@O1»ýÜ©m£;~.c.Àa³ð‹X95Fh¡Q<ÊÆN2H8@ŠLÖ A½Jë¨ìß­Å‹x}¿Ø¿Þÿƒò=ÁŸ(¿ð¿ˆôežm.û)®Æ¼]Bá-ytä˜#øŠæl¡xï6¦K?BÆtêEïÌÅ}~”&w[ľVåÌAœˆJGk¨Bêõú ¨Æ>žŸ —B§âÔ¯1+àQ^@¯›ÑíúNM>)``Nª 4FVÊ„jpff¯CI†& B^ TÍj0.g¥Š,&‘«˜¨i¢¨—Öµrè” p=£0öÚ]»Œ,&Rqv& øH[…8T†6åŠ-››3FÅ WhÔÀ¤ F,;£3‰&ñ¢}1ûÐ4‚Á*@ ´S“æ›^5ÈTŠH·±N:.ž÷ak:ü–ÖfZÕÜXá©Hp…‚=U!ãùTÔÌ[è.lõÂ#>šrb!íÌŸXÓRmÙèh ËÿÓÉ^‘×ÁÏ=ŸC5F„‚ü´½ì P}öv‡ªÁû×Ô;Z ºº”ß3çÂ,q¬á®‰Ô†Çª$t·¹xy®ùÅ[âZ)Nš B¤Bgwnû¾*áËPÄ™¢k}©é]`jÚCý3ÃÔ°„¥ ²ß”ûò`n!‚²9Zè2#;&K‹s×w«åìz˜„Þœ ß«±Žë#›=ž5OêѰáqBQŠ— ](P }éÄnÿ²ªâuÌTëœl píùûÝ/G ‡ð뿜§}BalÚ¯‹Ò¸flê>ý*DÆMO ?"%»K1¬«à0hÃ'Ü^öÛŒç¿,'T»T÷:3<-Á´½#Mà@+ÆÙ8ÍjD°´O¬È÷]ó»V-Æ&k‹ÅgíYRŒµ–}‘.Í>Üzòë0ÖòŠ…­[Ù°dMTg '-«Âp¿0 û›2û9 ­±û~{[Ýôæ§’RcM6«_}X<ÏHQ÷c¦yÄGd]ÍûÎíŠè dX£~tmÍÞêÑ·ECO–a‚¦(@šmì‹ä¶HC¬Q«âÆ3ÔB£ÿeïʹäHró+²,D[äX]´4²¸úÿ–°CžÆ€}UÀˆAbV‰b²DZ-$´0Cew,–Rz!&:1TÌtSQƒu=´¤Á4Üä¸W‹V«o£ Ú§.>ÙîÎä¦F0ec1a ¶¿ÈÀɬní*c³ÁÈh©,cTìµßŸÃq6ÝK°ÿO?Ìã2¼ÀGµzö& šö´2¸MààT¯ñ†ÕïвPï5ÄGºh+Î 8pFõMBóæ ZfõM[³çyiðôðXôvi†Æ³ ã‰_O!Kã'\jjDNmžbÜšÕÆ%Z ~2q÷7õ¹~ÀˆV–Ì÷È >0t,Ïí^ßKó‡#ôËÛ?êãÖ-Õn¿„‡Žã˜Lpª{«ÿã¢Jú]¨Jwß?àÑ«:~ðCþ³Ñ‡ñWÿKz´Fõm݃ä"s&‚퀳®”OÄ/¯¯?×ÏYÿû¯—_¿ýçmûv99[íLù[òBà|~=眑\Ù¦4)ƒ(gÏ?dª÷€MÈíO0H(”c2³Ú;€)MP•O»!Û4×.Èyd‘kĈÀ â´03 ÆäW¦Êæ¹v¿Ëú¶mo«l¢ßÅv£…AD¶Û*+¶õœÎ¶›2-$W³]éDGKKÕï‡Q ȃ‚U™ (Ñ·_¾é®®²Í§|>ÍŸ^´˜]W¸adûȹjÛ5®10'Œ†u¢Ç1²þ£•~ÌáXå$Z:ЬžìA›Ü±g'¼~z¡ èULì¢b¢º›@Ïçóׯ_¿ü|Îùœ?e^^´p”^³ƒýxWw¬­e¢@²©[×<‰"È-É dzÍ€, rC†4Ù½yZUb^ Ø01Ÿ8s–7•uÙEwî¼®Ñça8Æ…WÇ©æ)¹'O’‡¼LÃßµ°áBR˜–䆀l¨o@"hb.†w½œ=éÅ Uã4º‡R ÕƒëViBó‡ðæZ@‘ÄÛ£:|/3AH±8ϧAØ!õ#eÕÂÀ ¶%`ïxm¡nÈáæëŸ„ž‡>§hØ$Ïw¿ÍM'ÕxgtD °pŽõüØ hdûÐ|Ô2âB'÷ü ¢Û4Q¡£)õ½†'w–ÁQô!C3 гŦõô^åÂài›ÏJkoÍþM5Ù7ÕŤ\€%†š{¾k#©æ oí™ú©YÏöÄ;XªO[…›Ýû¶«7«âðæ¦†ðÄuˆc-ƒ" zJ°Ä‚?õúfLj÷ bÇguO 0piAïùÁ¹/ö<ÑtÞº-Ò.ó=§f&‘¹‹Biø¿7£*F§Õ¨(¬‹æ8£Æo ôL{Þ´N©ê5_wG·ò¶ÆÍXc¥fB Òíªnóå‚€Ä!úÅÂÞ˜ÉÁdžÜz×슂¶3ß›ÄIsPðñç¸&­+qú®åß{{œá鋨ÿ¯Œß­`ú!ÿ  ~Ntÿ SC6T½ âJ{üúr†ŠeÎ_ÿýkÎYD‘[ÑL”È\¤ò8À)tñœ_^²eUµÄ9?rÍ×<䩚_<’§¥ˆkŠ;“MÎâJuÖ,nw"eO¼œÍl]WÈwy}=¿¼dfr ˆ¯4sùa-l5_ 5i‡êK@нÊf±J;T!j¶LTª$l6‘,lRý Á[Däûj€9¦71xØgð`Ð ïÂò€Ï»ÂØÌÈ”»1ÆÙâpÏ“€”¦€%Jj%# ž±c#>Bó“1#jiä9†;2ê’§Õ‰N;ƒÁ€9£b ¨h)åz¸ ­µ¶Œ‹ËÀhòU8§Ã)muÉTzw§ Dܘ©iöêrçü"ÂJ,ifGæ7&«Žb/ãÒàІŽTŒ÷׿n%áºØ߸éI…šÍ˜Æß%Ü»¶¯êÊQ TBÁ2„5žlñm{Ì,^ôCóŽsÜÜ4n¥_Lƒscz@MÜ¥Ã#:`7XÈJ=ßù±€§Oì@_×’˜gt£®io"©ÊDI¸–ïM ¨ûeؤ,>ÃLÐÅ%®I|©%ëÜÑp&”÷MU>©Ý^úÎØSW/Ô _t-fE*Së lÙÊÿhj —ûyäïXžbëLv3Àq  OÕÖÃ7të¨â'ä¨q;@˜aDàÉÈŒ&Ï Ú‡ÞuHÝ;·ŒÕ[’àx±ûåéWûÿvéqqç÷~™SáØ8˜á÷­«Í¾'ªÇ¡(r IDAT²}‰($“6°QjÅ1®Ü¿ *O+㙊ð!uœÂíQðûGé‡üƒþ!ôëp³ÞëUwy»dÎyñL ‰¬`Z”Áùs~ýéõüogù."¢¦¢f"—M™˜Êœyål5å#ö`—i¡|Ê0¨*;§5--7lbîyz”j¼œé4®úϹÙ!WÝ6Õbœ ´@®¶}_[0g"¦ˆJ(À®¶«\eYEäjFU`p0Ââœü`ï’úýš©D˜øÌÌ¥ýå5S*Á(^G Ǩ)`Ç™ ÎÐ ¤f\ÈSw'ìYÓ¡¢#ÂçJõã2tvªSŒòUãœp\zGjÔ>¢ööÀ®ƒÕâHë0ÂçóEm¸Kž²HÆ›G5õÝŒN?Jg·ú¹ÙáY’Ýx y²Y3R è1ÀUtÄŽg Õ8[Í"/L1þ‹ƒ#ì6óÇý&âÝ¥¾«)|Öà:í~*„€”bEËmÓýûû{¬0C5—Ù¤>6ˆ†.ߥæZ3tç YŸk,©×n¤€º/ÊñÃ&yùëTu¸~ŸÂ`Z(ògž°í+Ð\žaÕs¯8Ö#…»ï¤ãð–7DA¿ÚWl 2ƒ­žâç3äÁ0?3Ú:þR½”1 È-ùÂö[5J+—›³ááš§ößа–¿ò@Z•ÕC˜Í\VׯsžP£a¶î£Þ»ÞÊ»4U^ôl˜<`±Î+g?´?©W4(¼’ "¢4VU®´Yž¥ß.Œ=Ê>m:¾w,>ó¥ò­¹fÓ2›˜Cª©.”Á/tì_’&1õ MHÃ=÷‡d``R½ý¡ÄH?àô"øÀÒ éVS(Ê>êAYJXÀDL|bìÙÉ™d5ÙV€“攀؃€ž?ŸA°v5ø”=P–ÁxAŽB$;…Ò:ÅÊ s¨$Ád›Û…@jÅóýŒdÞÔ¹—rO“bgƒ¹IÎ//v%ÝMwµ«­o«£a¿ýry[åê\™züOk»šŠRÛ½ªœ„Ùɨ 6µéø°Ä”À‹ Éïis[%F1r"œ²‘úÛi!&r3)7P¨EÃWv7LÆ¥íóô<úˆÌ-¯ä¥jLB—ÁÙãZ%䜳Gx®ª`-@RóÁ AÁº ¾]ôjçó  âÈgJðð9ùñ½g†€l7+Ð]ESˆ˜gf–Å-¨¸\."‚Ë9/ä6g#b«‰Uó¯ˆìƒàDDH°ÝYð£ý­éÄ»'óˆ|+ñ‹Ô`ƒ+¦«¨ jĽ*'¶ÅÂ+5¿q}‘¢Û¸øâ1.7¹”îÓ£ËÍjº‘V¦î£öGgòÀôº¦)¨ß;o®¦5å¯ò‰âd²Oo˜š0ÈÀHÄ0Vhå†Ì¥‹vZÈíÀÖé–·þƒÔ Ãz¸±Xú›Æ¤Ç­­Áu‹G ~ ³³Ž20S¼ (U1à=ÖÅBFX ¦õÈXå&›Î}ºÇúÞˆIQóTÀ  æPgÕ·ÿ`¬n˜ÏÒØØH$^m€Œ¢áÝ0l «*§Š~ÚÂ*œüNO›ïe׺âæ¸CóˆÕò<Ž8ãÔǹI¡à*ÎGTflÔê„oRº€1 œÚùý+¦y6?ÌwS?½O¶^7ëÓàLf=ž$®ÃÀö‘ úŽ%S¯Š«þ"¤=ƒGÕ-ÜæF§Ïï½ên-®¦Å`é¦ã¡9% CΑv1µ"ìºÎ6*U¢n¤Ýþé{Äã?í› à+pøX¨ Ïsôö©×ÖuF­PèO«1?ZKï5£Ge0C†Ï«M‡ÏŽ€ˆ^uœŒ\%pÌzÍpO5)zbì2 ×°Óï½ãˆyÿ_ô±<ÉÀéˆ%jþ»ÐøÏ@ÿ4Z¤ôð.Ë/9{ׂšÖHDŃ+ȶ¹MäO¯_^¾üå?X¶u{U‘«¸ÕÔŠåœ_>¿ðÉSª3 àœi'Ûeàu³gióÔ8`@vPÒ¸‹,ÀÒ¥©+ë<ö¤rwlY±ùUƒÝ0,D åÌb“m½üºmo]/«í&q­u‡ˆQÚ<+€ÈÊh¡¿ç…‰`»)4/™˜e&Z^˜ ä*²ƒ“1aW'%¤ˆz­ ãj¦êqcEDU_?gZ8@È‹q%WÇ2&Ö¤ÜÌ hÇ\µ>ÜcU¹ K”|ÈTÔ#2²‰3dpᓘ‰OÌ ,fKÔ&Ômz”óyÉöª""—_·uÝLÕ3NçÏ93½~z+§ÉKéFñ¼'¶âÍÌ®&›lÑbrU±Ý@‡'ˆ±gHv8ú.ž•;GnW‘Ý\û0…XC5•TÛU§0m ¶«ÉKÖØÎ“úÀ¿+¦v0ÁÈ„]|hsf%õn³¢€õ•ª'"·ÃÛÿ°wý^rÜ8úCDvv$9šq´o#û‹öo¿ìB+:;Rw$)* j2ÂTM÷Œ%{÷ž÷‰ïi4ÓU]Åb‘ €ïp÷mîûÝ;³›i9tØ#çy¦ ”ÁËM§b="aÖ`G Ɖ(ÁQv"%Üq0âºMy“ñ1àJC3P¿/Ã3¯î`Xž\èÆþΟ÷[? Çb³+Ùú ;¡Cûë¿%а´8ÇÝþ!€&ɹ$›!­O3ØÆo¦[¶Í˜dJè ´†Î€GЏ¯Pꦎ;?›Ž9ê¿…ÓÊlu°éú§­ãä H¦Òž»+ 5ò¥f)AÃÁؽ KÜs§ŽcËú¥žùx7ïrë`$€†ý´ØM‹‡Æd…SXŒGž—ssX’~ttº²Ëþk/ìÙ:)À€¥°‚oÅüÂØóÏ'}E×]"à×oü*&¿¶{æèu³·”m¿H=y©€½øvTä®ýÊA׿k¤##C;qþ!ðCUY¯Cë°'î'-doÀn0ZÆÇÂͪ#OG2nNâ[Ú`ùÒd vë Çñw7ÐÃUdã4Ó u¬GúÎ2nÞ…ÍÿÎá/›U“Þt< :·Ž1÷øÊ*D#ÖÏ+,@ˆ‚ qçÒû÷ól¯ ÷«_à¡P; ÆÞ†~MþüMí»ü½ýËÚÃ9ÉAÚt±h]&Ø‹(tÏ='Èç+ˆÏ¥”w칎‘ UpQKA‚ˆIÝLõïÊû§Ÿ>oÏ{.ç3Ü$4}R˜ÜÔä xIXÒ´V’  2íÔñNƒôìÍÔ ¸ |ãwÖ€’y Aˆ(33[…¨n›Èçëõº]~ý°}ÚD¥pA1qÞ×ĸ0•Â÷+"O¥€˜˜žÎEª]?]@a-hUkfUÑ ™9+å2­£þÓ?p8’™èT(ƒˆ‹U!s˜ÈùÒeˆ®{ñ‰ øˆØ’Ï#^]¬_ê9«Ñ­»Ñ¢R¢çñV(ÃY U¢B¤3)úªqXÌ=l¡?¼ æý½­÷~û‚÷[ú"Yu÷ÁvdÉ ´PÛT£µ½\§½©ûõ s†þˆŠÇ¢Ç~L/7÷°~¿êçƒçZawÙ/ßá…ìJx™F¥#G½««®àÉ®mjîÆR· ã-`Îôq¼ãçÝÖ}XßÒîÝ\×CsR*0MÚ ŸÞó\ÀŠbyROGìF'Ó'ÿé•W”À,õœpË®aŽ­ã…òö»óÏ–ú’ïü˜ËÈP|BËDÙâö0ÚfHäÊ‘ ž Z;ÞFÔÝo½`òx¼0tß$† [ý—u´Xû‰­ê4°wíš@`£=öEkìÌ ‚§FãûògécÓcyã4*Ü‚±§‰éð.År»7%ÆúZ¥êZåîÀ#íÞ÷ÜqV¬ˆ rެ&ôòFâKñû¬î‡¸ 懱jLÈJ ^êl׋'.•‚ޥɨõ\À7Kžjd?\G7–“;x˜ïÓ_è9M=‡\nÏ;‚0ß5/nÄîIåwSïäÚÃŧªíùÔ£KÁ¦÷d^úΔUÈÿ‚mըߨ*ÿ¢„ÀcµãëE-赡¿Dû¶­ô+Ú×Á§úmù{ŠW/aÎx}â z_žÞ9Óp¸K{yŽ·¹ÊûÅŽ—¶Ž]¤>kÍ@t~~â„Ëõòáãõr¹˜eâ¶ÀÌåDA½gr“™ “VpfÊ}£o¸n²}Þ~ùßÿç÷OÏOç§÷Oåìá²´m›Špö”ˆª£ ÷ÞDª=½?—s!Œª{çÜnà^Ïy?}&„vE‰‘CÒ–S)¥ÈÍ®¿]>þz¹~ºn׋|ÚÔ ÛÖ»óÍ3¬à†!3Q)…¹”“ïU b­"7± ­jjjˆœ7m(¹XõB™~…î"uzqåŽOü¦1H‰B¿EpVQ¹ Ð&‡wK°c/SzY3`©=×ÕÍõ늣/?\ÄMŸJ)…”„çÎ?þíùù‡'Ï‘¶}¹ÉUTd³ªž2~âR\ï)™¤Jáòóßz~>#…iML.ªz› Òòî @Õ¶Ï×/—ß>ú]P•N\ʹ¸#Ƨ‰ÔÌéd…©ä‚jÛõzÝ6.åÇŸþéÇg.—ë/ÿ÷Ë庅aIŒ4´{ä«×Ú'1^ÙÒh·o— P74ÁLDàÄ Q.Èà‰Ù›(¹”wç¨döщ‹ÞyÄc>î½ÓóG§jav”s‰tÜÍDÔj˜÷DÄ™ÕH¾ÈåÓ6b¹ÏO瘨Ô¥ ‘+ öÂ~ÁÕŒ‘Ì}ð¬×’%à^‡fÝ”}ª;AÃ& Šfæï×WÓÑ=6GPÇQ©Øq@Ø>mvª!9¼­ PbΠŒÈY°HY:¹_ųí`¢{³½ÑëÅ™]i£ÄÑTu»‰|õà”.OŽÝ÷›Î­Bûçx&—rš5EBBºÈiÐê!) \úñ{ îì›tî…Øâ³qÐ"´™ÝTëpxu'ÂsK÷ˆ}M1à1&ÇÖ€¤„#àoPÔn“x¥Àß_ŽÀ`‚Pw³'|X ÏANtÜáõcÿÓªç§ÅŽVºo#kú|Ø®cÜÿ Õ¬*ÀèõØQ! T³ª:8Ã}§;\ˆIëR7•x…ô÷Œ˜·Z7ἑ%/Ýe⌒™È¿ò±k¦DŒkê®ór*”KyW\?`ÕÔ«Ó°bjU$p.D ¨UèÍzÞ>×Ìœƒ¶ÞÕÚˆäÕÑÍŸ#ÄKªðÑô¦?°lBäuã›ûݨgf 1e²Šf­dâRTÅ%¤z ô0){OfJîf0ˆJäckªÕ|9ïö3u…ÄÊ;_§ûdÚZ…{pG÷>À¦ÄVxyó³àþ‚ýòäíÈ9xêxvm°*‘Ô#÷JK^‘Þf³]yr`qŠ‚aÛb ûÁ«ˆöAH¤VÝÔTwÝ^3 Í÷ÍñàËç¯]â~ùjÌ0‡Õ»_˜.øfGý²÷?~Ë*;ç;¦1á;ü½ýµÝ %L"YI @AyYaMÅYÃÓ‰¬Uw]8³ù¯ÿþ‡l×MÍä‹X³s;S‚|VÀµ|àªÈZÍ .“ Ñ2+ €‡þF?ï´%ßà!ALIáÕEkS5ƒÈå²]?^®Ÿ.òE\`s.”ìß¶“ûfF¼È“ˆ0—RD”Áì#‰%IïR‡Œ<긓ñòŽ«1³—>f f€Nžgb6µ «¬¦€Ò çÞ7ÞFÓ•öeH]¹…:õ‘oŽœYgd€Š&'0V)ïŠzrìªVET­Šš!¡$R{€«ˆÝLëVÊ åDÄÌ'*…9“´8¶ 2àòÛEÍDtû¼]?_·MåYÄÙçlhÏLPdæª8J\2y.+b.U|&(¢˜uËA9/Û;^ÉïiÄ•Ù5Ýj–ÉË3D.Íž¢&”éð[óµ{ÕBìÒ†çØT{äÃaŒ¬=4>稌ŽÙî¿{m¯¼9ÖÔ@É"v`$‰!äPçŸèƒg@›ze;£â“vÛ Xþ‡tÛ5Žt§€ÕÞ©ƒ.Ì”Db"3­ ½vN9ñ›ZgY£[€‡–á¹ëxµ£~à"£~QZnt·Û?ËóÈË„)nmù–¡ƒá¡ÉFæ‹Ç{b\‡8ì—Y\1\ODµÁMÕ†¨ÁÖx8’œÁŒÛo@~î·Lííjöùßðr± ‹‚-\JÕÒÇdé6e2òZ +˜HÜ•^º)Á¹ïYÂâöÄœTk,«Ò}"àfÚFÆuY`έ‡6X!âÄsöv¡*²Ú3ÄLêéBD5|îÑH ÎèõI}z\¾\«Ÿš#ºv~7 nHË™4¦3[RT¢„˯—T{¹ 5 YÉ$X¸Nm[Dbè!ò‡Ó¶”÷–ÀH* I…9€f|"¤¨†¨FÜyÛMP)Š#ÎX2 Ã.îgÊÄ3 ‘.øÏhîxpðÏY§¯´;œ‘×Úwø?¾ukû…xT¸§OÿßÔ'ÛûSƒºéÑ)ÑJ.râB@ ¢j"WÛJ9 s–RŠž¥”çŠÜÎ×ÏÛv½Ê¶ÉgqݘOüüt.ç'§úzB©éœkêÁQœÈŒµYÀy2ì‹"ÖÅîÿ!” ”] ³ÞT*.?\~Û®Ÿ.Î~‰DS9¢ygÔŠ…”TDpÛÖ}‘ÍD8£F21X 0!£ÛÐ mÚ#xyç:ìñÏH ÆèÙš@󤎆,)"XfjFYÙX›žªU¿öºå¼®îšºµÿ˜™â Za0õ4TŠ*V‹Ü´lÌ ß)UÅnrý²9Z" k›Â}Ø7¬œËõ‹ _ˉé&¥ðõÓ%˜ÀMÕ1Cš™ªÜLDUÁTðžÏïŸÐ°Ý®XГB{!=ÿð4ó™«ØM¬:³ øN¯MµšZ-‚{†¾üþõøº)aqJX´cÏž[’Õ°‹ŒH¡œÖøn@gÄò„57ü:îÌkzðÊ|ë3*A­û‚»>¼ä]‹^‘ÉSkW|ã9»Q;&n]D¥¡sÞP2ÃT h.4|¶‡e®1ƒWve ®®ÖâU¯?Ùæúž:GnÔšF#[^ßô%=T™ºb·ÚÉž…6ÑŒGmz/÷‘ýÝf&sޱV©‡•š™VåßÂräa¼£?â@ñ$ÃCaœz“•€\‡N ¢–°jµîЩ¬¶e2k£’=¬—RSëX_Üwù?ü›^u¼MŸ^Ù]®A­Ê€Ü‹Uö‘qÔ ”Í2•saç\ìåÄÑ:MDÄœ@'âÙ[놭.ú÷ ?jÇë÷æ(Ü2Ax.ŸOξúó6fSml1yfº¥Ž‚Â˳å~Í>Í'êûçøÝ:@w÷Ù¼[kKá°2pýŽšru„pÒ>½ˆ#˜¡™œe >^Lƒì†Žf@fcš °‡¥yMǪfFTuþŽƒ¢ÃëCÄj»,&¬ %¯§°Rë€Ù˜2<ÈÈ·9D. PFÉvùí=  ›wÁDI¨“·üY®Ÿ„sºÁzc§H̱§®ç ”Ò-[Sµþ0bH2²(X†R †´oâE?`O×ã‹ )JÛH¿ì3"rÇ¥UñG¥çÔ`a}*ëÆÞâv/M¿Î §ý‰Ý ÞzødnoHäuûö=þ- óz{dH?ìσqúnoÿÞ¶‹y¡7Û !ÓÊÆ^üÓew5×wEµoR‘÷¨ÈŒÌžñ°”â5UD«âªxzÖz.¦ƒúH‰¥*;« %¶kµ½ vg‹Éch>׋EÝCÁœ´L ³Íä‹ÈÑíj_ â4!›h•ã$+7 ¥}tSUk^JL¢`ÜiX"•µo™á_à‰ °ÜxX,ñÔo4FÀ ƒÍÕ7Qg² ¦˜’ßì‹÷¼k‡hÕ=¢µ;ÇñídÔLM¡BÀS)"‚*B\˜™3[1mî%!ÊŒÖ=ê¦~¹éöéj7¡RžÎŪ¡©dëoV¥s¼MMªW†Ò 26”2‹é ¼&(øl  >¤šŠ³Ê3 «û fËk0D œ?ÜØMJ–4&]ÕÐNj•=äAêÑÅV"À#ØéS°_BÅ&L1ÝÛŽ…:ec÷<^Ž+|.L™ùŸì]=“[9®=ˆHE€"{¢îíÿÿ)›íDÓŠÜŽDMFØàǕԞ¶=³ûªÖ¬š)·tu?ÈK888ð„ì;sRÒµ~e48Þ K*¾»”+s¤ÊÝè’éÎ:“#A½GÅ)Éø†G“.ïkÅž [‹çÍñá!lú=y[=õ`µÝâe£Ã9¾ vŸÍÕ3b†ð^¬Á“ë8ÁÄ»mÍiºã?» þ'×\Ï}HÖ[` ¸³Upú$äÚ~EJ%—íB}¦€*KÀ+ÕâœR™2ÞÒ‰1‰pZðnÞ$Uè†*õ±c§àðß™„€Tx'`ÉY¥Âó¬}=ƒCg(ü *„ÊR‚X+»>`>_˜Í†¼ÙõîÝÝíÛ‘7>ž¤ðîlÅ‚°:<®0gî¦>2!gòùd†ß£¢}[¾ÑÆF6fè-üäë^0à›åÀžŸ[ÊÊ æÜç*F΄+oj€†÷{Uo ʪuŠÙ¶p‰L×[M‰É•s[çOOH’2¡¬¹7ÐI·ä:žÆ…‰[ñÈó Ì艩R'4Δ¢ëîÍ"‘A*=}~R?ÅÒmŒz[§ÍN§ÕÓ–HüÖÃò®¸~¹l{Ö”×¶‘üu„,ú¢ ·,´ \ß]ÌB=1êÒtŠa±¢eñd"5åBÚÆˆ'#:€¤Øûf¦ €‹E:·ðÉ»N2Þýâð–þ„+ù“mNÀŽô{d=½èç|à÷oé‘ØÙ°vòê¿à_í?ÞÆ<éÛüf_nÃia;:¬éœ'žõ“{w¼9\͉,Ã/L4w+áÊ&¢ªnúÇïè×ë‹* ³œÏ¨à°ªå?íæ-süÞ‡–­X“Ƚcöî šoU޾\¯_Ußl¨j!ã'©€=aææ¹¦;îÄ(fͼA ¸º6ScaÅ@R÷\5DJÌÑqYëÏ q”a%GoÌÊ·˜ìM`åPi•Émxò8Rà½'?ê’ úÐÑ}³•Û €|bPæ’QuÔóÓ™p@þïùÙ1 ŒŽànEjùõªÿü× Ègñ<Ÿñ,•¸ ëâXƒ6Uó—//Þ€fÖÁPÐÜÝp‚6‡¯Ì=¡âå÷ù$OŸGòaaªJ"(l›ê›i@ù|_eÒî¾³=Â9g1°¾Ü³õý ¬°n&6 ¸‘¶T)“”ÚŸ^þ’ .uw`$în¦vx\‘Ò dnU2H'¿#žsœ ÌAÅKÐ~èýgã¿Ô2鄺ùùeßžx'²f©OdÍ¿}ƒÀî‡rì áýn÷JÜ Ô6²Æ^f¼gG¡ >Kömf'H(0õqœ®;n(ëãøUª}þòÂbò°ûáPUë®7»‚­i(¨ªjºàBäcBUÛÍ Ô¦ƒXÐ &C@N ë× ‡Jä,rŽ›Ûý“UlG_Æ I€6½ílgn&ŸE›ãNc÷ @tRq‡ ]€;ï¸Ne= Ìj”÷æ³ džSoßa`½ê8žö‡¸kT¯îè/ñ†Ë§Q| .ƲµînüÃnö¸©EÊLJŒª1.|÷ŒT''&×a_íT)ˆV&0cÂ…¼ÿïñ\ß¿¬ÝÀú‡\î‰Pï¶_ð¯ößiAìÅ8k„¯c%À¼3 'Q_>w IDATU{3uL­Ž`˜…Ýӌݘ+D„O¬'¶×KÔªáJøü" ~«S ¡¹uXƒ¹I‘Q‘xÜU¶1_ï*q/=Ém'v€Jˆ=Àà±Ñ]^¯/—}U„Ý\1ôÃØuD¸ –Ô3@´ˆ§€xSë‘wk Ö¦öFQì÷À&z<£YÔ~°þì‡ÅI:;Å¥€xБf7ùP;øÀ–Ô~÷g¹ûÿýOʸo$©Œ+ËY„*sS4p…ËùóŸèrÕH{€ >‘¹œ›¿¸7t²æ®öòûËåUEDDø$T®X3ýª®zy½bPÅP‰ ¨bN§¦K9°7gW `"cG³È»öt”´¸š©©5Oë7Ÿ‘0}Ó>´A}[¸÷8FŽh8zèl…¸Á‹Q‡U–dNèkK¿±…ýðÖ6üø,š¸ÉJˆÃkõô¬2i3r½Æ…‡W JaœQŒƒ¥¼É~øM ½s%ߦ’g@uá… ØÍO©ÀúЉBJm<Åüß<çÑnÖÐ@šÈÚøÖö›Üç`œvÁX¾ºs´ˆ&Çkgá9”ì­|“ÛöüïŽâ©@›;÷¡nƒ0¸^ÜÎí9¿áý¾oÍLÇÛÊ»q8¢Jáìq'…'Å;qq뼞 RyfxRÜàì}$9O7¾³ÔÀؼGJ)Üa—/¶óL6Á`¨&s®¢éáxì57¯Ñ½˜šMI¡Ü xІm¨ ‚qMÚ3†ÿœgtxKù«|íqÀ£™[L?öö±ÛGq«ø4¼zY…¾ÝN©ˆLy@c.êm8Š{»-â:1—€ï°v5zøÇhÈŽ÷‹Ñ®_12]Èš0 U84J47@ÎB»us $þæpC¡›ŠlÄÁÕV=O¤ïÊÓßF+B•ŸoëT¿û?Þ_=«¤²0Éç§§ 4¢&RINr®üt"ù$p¿¼^ü«š;Wµ*a}2ÀLOül¿A›êU¯_¯úr‘OOtaIšYwkæÍ/W•J~b âhe©$õ €u”Ÿ…YzF‡^ª¢ìàªæD€ê›«™6 wˆê|ÎwÝ×´T·xK˜ì¿”(ôòÍúv:3¾ïeŽ©Ÿ%(îaƒ_¥YOi´MId,þzñ!'¤½u¼·± i7øÃLéðþÚXʱߧ¼Ÿ.p%!æñ¹ÛPÐ%PÄí°tŒ#·v;M6ï÷˜$ž˜³›åL¤­O¶Í>ñ¾å\³Û#1óâpëkôaó9Д¨Ä)”ªxÊ#Ü“e>ÒöÈÿlGG1Š`¡gŽ·M˲ U €LV Ì2tåé¢0® °›ÀF·vŒêgØŠ:K܆徘íâæÎ8ûPÐȰu‡‹çšÌ ¡‚$ýÎ_Î1 ‚è^Ë@ËüØè®HÉâÊLKj+zÞအ!¸è£ó#ム£†v!*IL$Þ-ƕ̭י¾û “¯Á ôçÈÚ˜j¾íp¢ÎÜÞÉYƒNÜ'ß?O+{õæ…¹?xÐ2oi¢WkÊoƒ¿¿T©×%¢uz¿Ýœî—ˆXvw‡~½\^Õß:I¦…ç“Qà)c}*˜“E‰J01C¡ q6T¢ T°X fq½›×Á¸¦äZW—‰«ÄCw²üdJî·´ßR±¥Á«K¥DIRVS¬ºÞÌö¨æè@*ù€ƒ95 ×¹®øíý5¶¤‰Ñç ÄÀ3.„D?ÃŒX*²Êac·L@Ë,ýç‡7ùŸißPô #õ0zñ¨ÙÍ.ó·¶wLª_ðÿx£1Ÿþ:O¸3ô—‡ÉµÖû-»&9Ô4nÏt"çôIXÄ[ÃR¨)}½ÊY„Å`þ6lÙJ¹š¸©âÚ¯TID˜•Q˜@h@'ïÁ¢d£:Sôžáâ…Ì‘q»ª#UF%4·7ó7Uu}ó0¤¨°£·4¸²Áȉ £PÓ®}ßÝBè…€9#¸…Á°jÎ|Ž`ò(½ãÌpÏáÆ…ÿ{xþí,Y%ˆQÀ•äÄT0ib.Ï.¦MСM­™?«`ª",—¯—¨X˜ÕSš§úmŽÊbI}wÝ¿ Hÿóxœ×:ü‡A1È€G'+Î@ÁS€àg›Y¦¾@ëm.›ùø­EÆoþ µ‰nŠh¾Ìîuîže&aæV¥Tu(É1BÝ7~õ¨7â¼›&“c%1¦Û_r¬²ÜHB­§gAΈþ`gŸÞ¤J­›µíö [ÀG ~›8¾O|[N&Z^ÊN_Üú?~dòˆÑY¼bîî¹3ÕÈ Ïr>’¤ßu1Z#ã11«Á™7ú«õ\ºoŠÁÌúo´!5›Q{Üd;õ±okää‡oXBfüÖ!ZVà]ÇríRS¨0§0s QÅÈã0´­X‹'=ïœ"?Å ¸vQ gýžh7»Þã)ï}Ó—ºhó½c2Bžä¯ÀIW‡åðîØÍã›ÉN|àã6¯û6>¿uB:ã†[~s!:BQûW>>êÊ…á[Ü keä½9UáHüŽzÍc›Æ!é#8–¶QVÜ!sÀÜ9^•Ó€<:Š'!X@Ñu«ï2¼€œí°>/È0ôÛ16(U7‡ç½\® |‡¹–"À>C˜"åÆyW¼}‹h£ŒÁ|âYLªe\£Ç´c@9Ž- 9ŸÚǵÆïÇ,®Û†9£¸ | ¶6–cfaª±Äæ`2PCÔmŸì«ÜælÖ1Bõ£ ý¨OøaŸóÿEûÞ:ÀßÕÌÖÅÎ;6Ç/ø¿ß¼¸^?ÙVq‚íºË0zïº:õt¢ÃX¤/Œ] ˆTX¸>ò0Í“xc ]bèˆÔ ¸ÍEÚ’µ+*¡ÂºÉg‘ß’Æ<G QÙTaš`fªô,ÏÏÿxVS}ÕëõjÍTÕß_è,òôù)äs„A} Óæ!tÄÕ#È€;C°À»ÙÁˆäŸ|ÞB\ØÞT¿úË¿.×—K”b!f©‡«Z÷ôT àï—§A6Çàê`¡˜ü:ŸŸ$ý¦J\™²bd„Ç]Ã¥j)愊ܩfÎ[”¿óe‘äèÌÁžF¬€€4þL/Ë 4w+=v'ŽuŒ:ìöe•„ÓF!þ7{×Î&G®["²#°#i£nE¾™|ÿä_p½‘7[M´RÔ@ÔdX¬êiä]­ýùƒ™žéz,ˆÇÁuP%2’/·KåÆÍîÆÄí=Taw½™šS=3p¾^ÿýÝÙ“~­švµ®TÑN­Q6» ýp¹ÐÎÔÚGùõ÷OP¹´fwãF×v¡É¦`j"nn5À¼0õûËõä;¡‰êíÛ¯¿ýzû]@ ÖÀÌÜ䮑’Ý„û&ßq·‹bû´nTž¿•ú|à +:(F¦Ý˜×7?RÉ×Ó’sÛ—z:B:´5®@1™˜ÐuF/iˆú’¡A‹fs”`sYmz…ÿ9aÉeZ切)Ái¨Îò‰ Btgô†¢„2'ÅÃHsÎ |îü2Û§Çãl%û¶i2“¸Ç a OhMe«Àµ_" ¢tOUP ¯VÎÌ ¦i`{yMQÌwÎò:=ëÇIe ¤°òn;“61*aX†2V€FöÉä®aÍÎÅZ ÈÐnÎÑÌmæùË™ž-À Ò²•0׋÷ÕÏåa[o#ø¯˜@nÖ®Œ…ß~(²< P%>1ÕÆÕ“±5lŒEˆòPd²ûøN”3n@Äõ~Ûu;omÏôC¤¿Â  QFcZ<:céi k$´J>ß:=÷2FHÄ'PiØ*x`Ö!C`Ap½Q”‡$è@Oh Œì*ñš„-=Q!Ьg£ÁC".× r‹¬é~åµüX<ÐnP¥€­ÂI"“­yùtT ó0+t&k3Äšß¹9®?§‘ƒåÏXÞa yJHØód\…©ÝŸEìÝÙ8€`Lðî)¨Á1Ì >µ—®·›‘ÝETänLfÐjˆ,¹›ª˜ Bâ0JF,G‚§‹o pàï‚£W9F$n;çA}—y˜šø»-Fk0drÖ2]Q# Ä{¤KHÐËâà} ¢Ò0)‹`Dý6v×ÞF½¶=͵1 \pqdÇ~}p#žf¦_ùŸt\ Þž¡U|(KëDÚQ^ر“”19drWˆ{|¸(ÆCVŒÃ”Ü}°áJÔ‡©\ýš ¸.¾nK,dÊz?Ûf[Œð§Ã·g'ý/´7š;Ó_¹ó.¾1yúߟðÿû6õŸj§Cÿ€•ÿª_ê¨åD¶­[q=•¿öŽeV.PWÊïáöÛÒOi¯fÂ^L¨GœP‡Æãå‚ß™ÁèNÖM> Úù˜«Jh×ÖNa›¬=Þ‹Ræ-X² °+µ¡ÖUTäHlÄÆCuI0owXNC¾0zìäLƳ¤Ä©¹`5sO³Òê,D>·$vˆTëNA¬^žD E©úõq ;åè5Êz–ZžØŠæí‚þ:©ÓÖü¼ooôx.ÇøÎ1=Ò®&¢( ]Ng¹‡iwSµOŸ7 ýî´-öâ~µ¡@LZÁùý¹šÜÚùrm­}úür‘›ÊÝþùo×Ëù|~ßéÍ)^hAQ˜´+WnL85ÊMùöljåd(„:±^:ë©z¯̰­Ãü!m¯@êØÙ½GàvÖÂ2•Ø Û<ãËÉsP¯ì«´C€Í ëvÿº)ñXt®,DlÃ"u  EáPÑ–+îÆhØuw÷ÂnçÓb+ÍXÄWÝ"ôÀ\N¼`_Ýžd{âc;ææéö¼ÊdŽÞm|åxqwsË'yåÎ~›ç¯ƒm ;¯k:þ*®/çZÄQ=t#ÎK·!Û‘«Ú–Ïs-ûà›ƒëßûþ§N¦ö9'}žCº½þ̤¸g$¹Ä·›±þO¬áÄØÊa`ö)Ýòw˜¡ÛS€´.ɽ´&1ë'P¨à ±žG>ŠÊ§aÞ·´®ËB4¯–mZDÏUé’¯¶סÜ ¤RÈÜ_ªJ~æNx‰øp'‘³3ª¾hïZkmŠ<ÐnÁŠ\QI.¢iÚQBŠhP¾.òhzëV(ú“osP©'&HÝÇDø8á2i°ÎÙpkÜ#´¤pwMõý849í[H0¤S]™$ˆ^œÏæjùàò°€ž `Y6Ú×öÓ2xh1݉¦é¡gLDX³$\SûíÏ=éÀ1£w·UŽWúöFûðÿlûK¿ôÊÏïl? àŸíG¶Õ‰µ6—_¦;h@Kì…Á‘ßK` ´0°Vå ö Už4Õ)ŽÊuî8ndªt®çv"‘¦w=ŸÏ"v¹ýë_îŸã W¡ÚÂ=¯ÏG±$>,ºkOÛ×0èݼÎ|iÌ[ĸOq{-´Y0Ý€ˆbAuaÑdD ÇÓ®´´žõ`;q«‘½fÌÃéw¨‡9Oêè÷ØÜïm?Ø-86w æ(Ç<´@ÃË6•m~„oëÝ´Ÿò”¨¯ÈR *ò­5U¹þrm­Ñ=Üá,ÏT‰kk'ö8|†+ÉzÔ÷5õ'Æ{úç?>^?~øøá# þó·_ÿãÔ~ÿ/’ÏÂ':¿k×Ë… "òòùE>‹t¹\®P¥ 7:µö®ñ‰z¹‰h¨n£Â¼êoè"SA™s»˜cWbäûÚ÷î(ˆZ8û–€'€e ÆòÙKž¹Wõ·õ‘ìñG5‹0Œ G<¤8Áï3–bú’׺¼žz°{·Ðvnü2xçáê„><nýF¥Ÿè­YgOÕÛw4ßåÃŒäÅ'ØD-Xž÷µógµ` ;V¼&®¤Ø“• ã³úÓO$áUårqcv˜Óô(%W³¬Ès0m|å+cŠ„Ñ8õà-¾DPèèÄ“Ø] M!pÁ„ ä÷OÑ]"ª‰v.¡ü¯¹¸–³}HÈV—ê²ÛÀá4äØ}u8j¥ –®\(ñ8NaEYè(oJQJDç÷ H"î®03 T㹨)ºÙðoÑÎRh„„/„(H C†Úni,±ô ï*ifV…7æ2+¹M¬sÒ&bîŠDÚ»ýŽ6•¾,pWÔ¦ŠTÊtl1§kòOµ'ïû$ÔŒ·ùdäþµ@¦õ ÒaÜ-裺H1Ñ»Xú¾c {º~‡Ü¾>½È3`&Öl £ ¨…P0\èСÚU;Ê¥q (µm‡çYO‡µCû/Öo)#H5†<ÃݺA¦·×á¸"Ë4}akDw‹Ó¸Cò8iè>oŽ>ųâfK€w6/ýµX¿;1@…&u¼uÙäsÁë{m¦+)•„ÖP]/¨ŒA…Ù! É$tœ ”Ôvß‚íè…6ƒpû 6R.¤ŽýíºÕÃ_ˆ­`¬!ÜXJÆ L—q@÷y»Ñÿ/³Ã -P‚há[WÓ;í½á¶›¢ÝH èjÄ€ŠwSP™™Ýææ/7"bª|Îʈr“äj¤ƒ­êöØhŸK©ÅopnmŽ®–¢YéÒÙœ÷Y@®µ™sc.uÉw?9R BŒL3µýr‰ËnïˆÂëbn!`º÷ý÷œOÇãÛ‘á¿æâô\ÜRS„xöÛYó:¾þ×kZZ¿ŸZb¢*GŠY¤$„×ÛÕ³…FGA6Çßv+Ù­5wí{nÝ€¶<Úò¨½¹Q·ãf3`ÍdÎÌ@M5}nd`xD“6¦qž?}‡¥JXk#ùkNBÒm¤LÏ¢¡˜@ ÿÓò¼Öá`Ç@[VyøaÂ;TÕr, qfKRÙòšìÁ“úêÿؾ7P·Ëµ_ÒÐ@>2å´cyšûùÒ&U0:`¢ª;*Ýç¯B$cw0)qsÿ­©è]ð9¯æQÇá¤Êzyw‰[Zºˆ˜«ÙÚî¸õ6_Á<ðéZÍJ®òÓ1–}Øïçóš^§Wˆ²”¡ÃLéÔòR‹"±#ç÷72Í@J²*ȳ¶Õ~ð´"ÓÁ÷u—òV/܆­K¡’£à|>ûÚpÅŒˆ°g%rŠ‹ÖE.ibîŽ[À>†¬:À¦Jý ¨ïklÏU}àƒŠò÷X¿¯·ŸðÏöãÛª,ºÃÑdÙT'&Ô Ý7{5ƒª¡º‘þf® ' š°@ß< ®ðÑ•!t¬VÙH5rÀTzˆÝËå*ÂÀ‹øm®|PcæJ(ºÕi8ŠæüÿWš—ÿ5X‡ˆ¼|‰J÷œÉEQÞ€bf‚õ$£Ù „ ÊÈ]µ!iœ>š­šU à717ÁÍÑbÚѺ¡z@:™ »)J”ר0@uöm÷×'KÅ‚ w¦ÊlM_¨ßl¯\‹ŸÚKÍráÖ'cDi­ÞµÆô©„½$fT™ª¡  ›uQU. Ú¨£ïõÖ$W4n—sS16Ø]¬ÂJ£(ê«íý…)K† ‘—»`@ºê15ÄN¯fÚ=*åªcŠ‹ë'®³Rz‹¾K{›ûå\®ƒQÔ3ßö ö*Z^Ê [XãTáࡃIô ~ûÁT>‚'½¶½!\2£ì¿Ù»v-9r#{ÃÊ ”EÊjŽ·²Vú{™úƒzZk»½¡U«+Öˆ<²²zš£éèÂà)fçoÄóÞQQót Å0cÆ£›P®®Û·A*îX]r8ƒßWçŸ`’ñp^̨ ‰w´bˆ¡ãÅ[´Þ,lWH5uàå.x5ÊzÇfcðúP¯¶.=Ôòµ­ñ%ªyº/N^!†9¬¾åï=xèîð°|ztœ O^ èj`NÇ rÿ§³ãºÓ†µV WÕÕQ<Œ#g«oê~Ýÿ7“e¶û9Ò[è2!—^†âí¹Ž°Úާ†Èxײ!_þ¡jðÇËX>c£8«ù({(ËW­‡òõì‡ü£ü…àÁ¦'Åöz€#M­gø IDATÚlý®PQeiä ´ LæDÆÔJ½€ŒÔAë½âN|1ŸÏ„%Ý‘áY¹Z84_ÿñsÉ¥|.ýòò—?ÿôöË­Ö µ§T¤ ÓÜIgr.ü´D&¨MkÕZ¥n°ïžÙIÙß Bà—f·S=º"¢×L,3££&ªIµ4b–²¡#‚Í{l5ï°Œ;Õ°:›ž‰Ó™vt²;Ÿ %'H#N¨÷“ø@ÿnEЕ3IÛ˜<¢z­U7Í\’Vªœ€KùË•™½þ(i¢w­RånÖ4H…‘Iïßnh¢÷*M¥„z¯Z®”©ä¢ÐÚ+Ýéõõg&B½K• çBæ |~ÁEj­µ©ýu>ðá •Û´y–ëùå×HÞçóɶ¸—L¹Ä k®xèì?Wáež|èdT ªê2Ül‡„`\ jœ@=ì#£Q(g½´©ŽOþº>{¾7x±kèë€Et†Ë€`š0mžz1îV€‰, <wF *@ºYb(º)úqp,1X“£-õžL³ê¡#‚× “ž?–]n‹»4Q¼Cºzꔤ –`kfãªãé 2¡f0œ‰3]· ÷L€ Ò™I‘DŒV‡OÕ¼5ÅÄþ.õ}¸(‚Iò1â„õõ¿ný€Àð¸VNð(êÍ‘ÂsÎ$¡gè× Õ‹¥³áfyýv›òzbÊT2¼ò ½(tˆÎ9|1¡èÜÜfY©Ç¹½ªk…Ÿ”õo Ò-}uQÚí@1-Á,v§ÄœPÁ¯Òjê:7½™í€Ý°Ì·G¥"êº6P&2H¬5ß:ÂAiÛÎP5=ñÛÌÜÒÝPµÅ/¿ßÌ‹YFO:ê½j#$¦ ¿ýRá}ú‰Ë…|îuÊž¡$D'S\œñ¾ØÃ-É#á6¦Ç@µ´Vs3Ì,HLm8W—~°·¬Êe:ª1â’å›h‘¡`Zg°ì)æäÉ\Û¦‹Žv‘Ìßu2=öYíî˜MA#•Æ€â(£\Ì/žáðÙÚ‹èâ¹oS÷ž–²½·–gýz€ïWè,Båyó'çìo)G;ãÇË?§ý>û(?S7~(À?Ê¿«øöv*eg„;redùS"(Û6†a’$Œ€2¥dhV©À½ªˆ(´£0hª=‰˜ w…!f‘ø9a5óÇC×8L ˆ(|‹•ß¶Ú‹þÙš£`xw…SšÔ{•f‡úöÛÁÓÙOÍ,.‰M!µÊ2 vÈPL T¨\ (¡£ ¯M„¤<ŒÜyòChi¢ 2TÆLØ,ÊÏeùtškÇUг}æûË;â¯yUÍØ,*Ú®UêA Wd#:¢ò  *ŽGÅHL*¬\ï•2•|9PdæLb %”™2½”‚Ïך©äâI\µb§I6|e(j«D¤MadH…ÑQØHs©ÞUkU©õ=}Âcd®Žh;¥Àðøhy\“í–¥<#1Z’QöÃ~©0¯ASè{bÊ¢†=¶ËÍót ¾™ïÃÇÂÜ]‰Õ¾È…ˆJ΄0WT¤Eäv;› /n‡Š}Ÿ¡ÝG—Ÿ*¢®#!”YvŽŒ\GSS:TE¢ž4êtykÿ_]ÄX°²ÒŠAjf—éþ]âífËàu¨©Ü)&ÒðX÷Éǽ£(xLGM‡ŸIaY!áK×làMÖØm, ]‡hènâBÌ”™‰ª‚k|‰¤åU#2ÃM k@¯Îô̹WÜšøô‹eY‰(§*JLå|yð*# u2ÚÓ¿Ì]‘WôP …iç`|î,] {yfPÈÂÎêq"’ªÊ±Ël¾ ûéM[_~ä¤-MÂ^âé îîΠFdmþ4S–T”Võ¸Ø×…£óÇaðø¸+"#ö÷oê †ߦ:–-­Æéw€6)™)“fˆhÕZ¸pùTQ:»›e-5%ØY,AIMxဠ‚e1Ϥ#[N¢,(´ŠdîLC:´4"ÐåeT¯t'‘V-n}´†ßdZ¾ ãÊdú¶sûvbÎ06dOÇPÅIÆñ°Ó‘«úÐüœíþ4T'lmO …¥ ˜Ž[0À3‰FÖÎíy‚‡.méôszLSÔÉI±š—½Â¿YÃüw•@lý(ô”ë?¥üžþ¥Óò}Óï½*µÖ*Õ™'ÀQ7mpå®ÚÖcŸ_J)åSa¢·[½ýr«ßªÜåöv“»ùŸËõs)Ÿ®–Ch³º”8 }Z´ÖZï¢@múúúöúË †MÝ\ÎvlXEX^–C¿!œ` ú• ˆŸåúš‡¬ïvw7©¸fiÄ>Üì2MÆ—?½|ùò¥DÞ›»!;·Ú´Õ\GKµ·ÐµýJ|E¿%AÀÚD¡ûº\„ðlø»Nä§aDÕîkmÎw3G•¨]Êá"c›´É em\‹1Qß´‰§…#¡ÖŠÈÞ·Zë³EDcœæ4£ºÛê¿Îˆ´Ø8"•Ê…8£˜°OÅó[äOÇ-· ý>ô=eî…ðï/&F&ÎŒD"ª÷Z«¼}»é]Ò)òýví ØiQö¦„Êýð·1U9ëTˆ/\˜@@5'’¦*ÕÀpˆ)Æï#Ge’Ù3ç0Û1gÚ!jÃj¬6÷ú¢LEÃÝç•}Er˜¬õöf‡™  O{ "À‰e™¢ÖÉ›£Þ»Hfh"+xée§^ŒGNhÔ„ˆ·Uãïœ]DÈ=®{x&Çw’Ï[3¿¢éTÆ3¹0ñ¥ ¡ÞëÛ·ZoUÅ¢Ÿ,m›¤UÛ Lq«–éy <ŒSðì!Ìî*·l"r þe‰QBaÀÖKö+wßS!chšé·Ãjãþji‚¦Î*ÜD¡>‚ySœ‚ÿb¹²±¥ ÆYJ†@É#+xË2=ìœ#JBGPb:|•‘1¦ÃS«ÇÁ®,[ÏrøªtpbÊÛ|Ö¾ {œ ª-&XbÊ‘ƒ¡®¶„uÇ[gû¨Eg˜Çܸÿ|·±í‚“-›xv6tá\(³kõMÍ’UV‹ò–ÑÃðך!ŒéB…K¹0Ú¤~»É]|+ˆV,'…Nø:©Žçï‰ ûô_„ Tî´UšV‚´aO{,KD7ätáèâ¾uó|æðŒi‡GF8³fuäa qö¦Š`øó˜¦PȼOÙ™ÛÔèZST>>:”Xw/IÑœiÓéRTº0Áà3gG/s×~ûª:b|,8¼‹êF˜Dsg‹O%5nJƒ«T®"˜A°Â ÚYHU+ºHƒªR«c91‡aŽ¥¹s6Ÿ««MB“¶UxfQõeÚÑŠ/¸ôÔúÃ25XµJÆbåQH¿¥ s÷@?wfXŸvá$¦K(îî63gäøðb©Ñ 6ü¹pnÇýŠíôwDuÂ2#Ó¦+öÉÏ£dÌç´ñº‹ƒg äÚ õ‡–ççïÙÔŸbX“!¥ÿËwHÔÿšòCþQþUeYÄ'q’!^hÓ·{-™83gÒK‘¬è‹¨Ý4°9ÄWóÙÅ­ªûõbFìDûЉª»]óýb>üs=ü¢°Í´( Mô.Ú0ð´Ø»ƒ¯ £äR˜(óËçrý|-Ÿ^@NaKÕJe”\˜™.¤­^QÐ^`uµœ_åL×B/Ÿ åBDÚ@–ô‹*F"P)…K.ªRÚ¤vוµÌÞp Ù\íA9sÞ£gû÷mugEAG³0–UKO*$P+T€Þ&UªDγõb½W ]˜sA&™sáL&ª2QML¤œD3!ƒðͯ¦›qfi•î6¸ •*ªw©wUQ½5©÷êþØ¥v Mé!4¬ý¿¥‹N{vEÐYn31ÿ ™×cÖq“Ò(îã·ñ¸Ñä¿4re3>í–”­B.oé"½V¨e7xÔŸ®ݵÿhu¸ÎAº…çD£L¸?£Ä=Ôy/ÃY¢ËÞ²7Ç=Dœx*æib…”U`ÅI¯ ¶p&]èùV6R›nºËÁ0e¸Ðéí†f¶†eGL11iò©ÈB"¦B7Õ&ªán]„Åi@¡Ý¿·'Œ§CbÂ"™¦áK[:& xupÄþØ3œYHJ^•„å;äÒ?¯—†+¦¯2ô^àí>c¡yp_EMF¼ùô¦®:ª…»yNRÌêZŸº¿zkþÚAéñ¯ LSåñÛNwj_×dôæÀ´ÔßZúzß~¨HÌ«'Î"3,~æ°¹xõÄz£ %,3–Œ¶P°Ó/‘aõ+‰³­r‰ÑTtH­ªŠ~£\fý*4EC5¥‘Ú ‡€ój 8‰Èÿ³wílrܺ²±''²N$ßÿÿ§ìÌ™ˆhȨn€d÷̬$I'?[»;ÓÝ|4@(çÍ™a=SgQÃÉyb4´h•«‚ùä}ñº]7sê((nõþ§_rÏ»ôPÑCÆq±þ"ªÅˆÚ ¸äýIÒº¹Ñ›×ÚY?ÕJ±S§ÑˆfNWXk­Zµh3“žù÷ ¬CAÑ"zÀ\Á0g‡‚ òÑ\ÂmífÍÜG×ÿ}¹móÜ lú#€^¾ù®œ†üÛκµ`Óf3Í Î'ÖÈ©ûÆ@í’Ó×*Ë <“?KL,Å÷¥/DO?C -io*Xó6t`¹^T®½<—o!vèï®Û4R]‚K î0ùÂÆrºý|£ž^uÙ?r3®uoÚÙ`8›¡8öË®B¶`êa#Õ±WO ±nF¢3óZã4$'¨cyv¿(ÏÚ¦‹ænÌä¦M…l²ëŸñ‡>,iüÙ·#‚†êã·}ÉÓ‡3jÐÃmJã©ûP;¨4¸¾¯xš¨/·ÁÔ[fœÅUóñ­©L/V[}Û¹œdû÷} »Ö »àZ+E ˄޴ôgCÎêT ùE蓤¡%nEÜ”½íø]hHv0Ov›*ˆŠg›kÿDVa9“ÓÖšP÷P9€ Iõš§  mÖìõ€íC–ž3Ò¥Ù_שØsÅ­0vؤc š(½IèÀ7Õ"8ÔŠi 5º7FQQëFÒÆ¦ÛéP½¿AÏ vÝ“d‚#Ó­©?ûhä-–ëô);Öë3*.+¨R£Ù.÷^½Íñ‚Q§:yd`ú ˜ , ÐÛsZ‰nš­„g¬{Nšÿ¾“TD¾4§ëƒ ¿ð]NS[Þ| æÎ)¡X½ ‚¿&ÚS^¯Ä[Ã*ÿ­[Ù¿,§Ópm£§ûXýŒ²rÚÉoøwùÉåâE).n_œøwlFÔab¢ªÃŒŠt³ZƒëK]ª*&¹È ù( Ð6“…+ìTØÕàS™JÈÞèÙ¸íƒuë -äx9P9¡%hìöš}!â !*µªÞDKÄDíª¤_¾|‰EêME#Fź顼ѪñA3k}e‡ý&ŠbìÒ´áé¡Pqùƒ@ ôŠ"g'™Ý p"ÄOð¤¼äÁâë½ÀbQÚÃx’šø¬XoN s|Š‚=x¶åh 1ªlh`†è0,<*iš;¤ÖZo„=ÌVÔ"4iÍMÇ ±jÊa@äømt¸¤ñؼü;h‚ßñ0idØÛ³pd î6^—vp7¸<Ë(`l™W¢!›‰IÞÔûagÏ .Áªù›KƲ$㹜³,iŒ´ˆG-»`´/œ˜XËà9ð´n÷mçÛßÓõV×pG®ñbgóÌ[sŽ”i <³½|¥ ¾LB ^›"_•«gké œµÜóCø&—z¬»l§ö›¯Ï½4]A"0ÈADbžx€œÆø»àsÃò7s¯[ý†IQ$ãý¾3'’º§P:m£…ò¢Qå¥êõÌùÅN º’  ÙÑW ¥kèÌhzq° ecŠæ ˜)kqj«e [‡á^{M¯Ûâñž;².óæäêéÿì,h›©ŠéˆêF'ßÎÈÎÖ­ñña¢«”Xø®zIhGÕ‘¼#z8'SÜü÷—¦ÜVœôï°a÷ÿ|v`„¡c9!¥[øÄŠèá|ì`Ò›MÝ›‘Ãݺ|B›u°“æÙ¤ç$›“*ðôxóì”#x¡¼=NhR‡u pQ@j>l‚¼õ•«ª&·zÆ’ÀÁˇCHŸ]²íOóÛý½é<ågÔ†‹oJÌûñº€B·3ý:3?ú<›â °7 6Ù<ŠeE„‘q°ª kõp-å¼:êƒÓ–{vN¤¹+¤zÝ‹Ä&ü;úá­¼àöú¨<+«/³y}W9ƒ°o+ú±%EnÌÉ“{É&ñk ù[þ]~f9cNRžØá®òŸA°ëMP<´8¬Ózˆî-D]Ö™D½éÀÑi±½wsb˜&–ì´ÝöváMûõšƒ˜'ÈŬY+Šz¿‡YWÒDÂ<@ÝQ³¨ ]+*J¡¨·*7•CAH¡–FË”®K{í†ÌË5`bK¸0’{¤¨rö³5í2§ß#`ßíõݧãÌ+H‚ʳë쵂핹ŽVyÙàM÷Žü§ÖòüËÆ_²¹É¡îŸi#½FWurù Ê3kˆÊ“îþ¯·wÒžíÂPÙØeœ}`Ÿ¯€{(xS%-îf¿%4ZÝykþÅÚã\¬Í%î9÷)ŽÛ莑—,¯ËN›²üDBËuarŽª8÷Oþ©ÞòÍä `1¿§½uáhv(¿Z.ãQ^ý^4M@a…Óáaؘ°Î^rÚ¿("ÈdÝçF®i'ûÔ!‚‡i@ƒ UÁ“$kÔ™é7І!î\ÏÙü+Td=h‰Ýôg0u-w¦6X*Áf#Åù8¾ÌœIã4,^b ¨M÷~ɇ|°ÓìÚï2;NeÝïù"°ywgzS $¤0È©S…W­9ëيÜCÔ[X°€mhê å=¤8*LeÏ"g·°aÿÑ3NÕÍQž¾ó<û yt&³ÒìŃnÜ–®ª‡ÔzÖŽBˆ©à«‹IîæDñ(q¦À`öërÂäLÚ‡énûŸ6õá«K3lÂá_®vxz÷ÛŸ`™ïNgÒ»I>–Þ)Ø µN$~`išç¨ûD¸c,èKö“§»m¹á:¡3V"‹-ßÝÒ·çˆÏö-Eâ¶ùG˜[°½[¾“@Svúá^Ð?Ç­ú›*]nêÿBZùÁÅ~»@ÿ.¿®øÔVªíhLyÈ—C’" †µ8W,øEoÀ6¤Š:¥3L6,ÞÕ˜BmÔ°¨2wàz"ÐÏÂÁÇå¼_¥Ü°õ%uWŽ)€zL©ƒûƒ6Úg­µªD!P ‚ªUÕˆ MŒ¿þú “yµHDÔP­"RTê­ñ¦íÖ¤»ÁœöhµWQh…µ†ª¢_­CaÖ«ä08Åß⑱jÃBÃ$"¶sêÀ\7ÇM9캣-9þÍï·ó"?¥'C4 \@Q1;Ri¦ õ;¤²<$Ø2Cà‘BÍ49D€Z뽈:·*†5[G¬ ÐgtܵŸ¤X$µŽƒÖiN'vÓú´š>íûéÀõTøÞPg5ë} øœ)¸.´Ó\_”®{ìåR\£ˆÏ¨ñAÅ_kή6çgF3Ý1M…65çð€g³ˆŠ%uš«Î‹ýC©îÅ—W2!W ]ÈKxëHF:=Ÿú±o¼Z#§½êÜ’Ëfµ_3³]ÃéÞ¼nÉç *aÖå„9¦x·¦)Úm -®ÃŽ\ˆÓ•«y¯Ê‹Ï/ØÛÞsƒ@H‰Ð2sž¤C¨êÖ-³¬Üæ3NmHJvÉ?y}î¦ù‘þ8\¸Î5QÐÌâ0rŸ‹y6åPnTI9 ù„U@ʦ6ìëyxÎP›Ð’xÇ“×Æ÷¯ƒèžf®ûÍ“:€æïWÓƒ`åJvíwv!’ô,—!Y?Ü %¨šõÈAHsšL¶pxFYI= ·ê̺ž¬U$‰”KâM©YyÜ/î>]Ç=¶Ža$¬×»{,³Ö­µÍJÉæhgLÆ@JÄÄg‹MÚïb¾ ˆY%²E"ªz ÞëÄP’n]²–žGhR¸¢‘`9-[‘ÖÊIÛKvÉ=/™ 2¨¡´Ðzh‰O%¨•†ó¢h€/ívz[§"k0E@ö®Bƒôþ¾Ø÷²¾gøfŽ×ÿ‘5›"·¨£9;WÉ绬%¢sÒŽëJ1`÷+š%Ý©ô™BLw ‚ŒÞž6OËõ¿.ßzðûU¿–ëjýúueâ)¿àßåW—tHÞ§<9=¬·‹ä:nèST¨*HCòƒ‡ ¦[ц,Æ/®â†?§ #“™úˆ¬¨ø…nž–é[Øêµ»å  ÔH¸áÑ›Á¥‚"zˆIß6LôñþÇç5j#Nb£Q Gõ{åPQjkÍmšë ŠŠCŒ*å‹§å‹£®«vC鬵ÎD‚læ_Ía¡rÓ—•å0î.U¯dñS™Â÷Ò워ŸÎذ¶Þ´³uÖ*”SÊÖª›µ<<ï&>sÌšöÌ ãêÁ Ø|DB#{°Ö¶Ç`¬™î¸¦T¤Û¹ÅG¾&¦ÈNj¯'ÑÓôù7ŽI—GÏ?øÙ]¹¾­Æ§O"˜¹¸d¬Ìå|ý÷ê_÷ô¤À<Ç‹Cx7mê\æèL°|oùøÆƒßAŸ7Ô¥çŸËÆäœ‰E)k"ìB‰¾:déE»¨ـۉƒ¹ã½Ó&£ðͺ;ëŒ6P—Õ*<ýïlãPhAó†È4BΆY¬š­‰<&™¯ì_>½“ï0GðÅ”*ØÛª,Ú*à ÄàD€%BÐmYÎ…e{ä)“-Šï¼K!‹seI¤´;¿ÍCÜ/bñöG¸ãÎEêÌUÏ«æµVß‘q0Aª\o«­¬]ÝVNÁÌ@Ð×õ¢ IDATóµ›_?pÓÛm×~çþÆÔ`Þ%»ºâß  PQŠ jGCäG(‡KVApžB™â9ÕO–KqI#ø¨25Oj UÕ¦ýÖg¹ÔÝëÄlÝêÌ/ 8·%ŒÊxH8OD?Ã] 8 7Aª7Ïv!êùk€”œçQ‡Û<ïnÀ÷„ä8¯–¿âк}§G„ÏÙ. ¼fËb:¨¸` ¦ãñœ%)ú^ÀXlöP!0<™qÚçVŒ±˜°Mw ɽKEäò±f˜_¯·ö²(fÕö¼é¯H„÷¥X¥CPÖˆô Àfî¢kQÓ7[øétÓü«uûùo_Î o¾ýæ½âgwãÛË~[€ÿ÷å#ïÁ9Yx¤Sä;n¯]›¾+ÔêZùW0ß};º€Õ! FÄ‚·ÔÓˆ‡P E¾ 3°‚Ãpè¡r;Œ†ŽÈé(Ö£J•Z«™±»fb”Â<ètùA¬?_ˆ 1¢ÙXÃ’ΠëœÂÇmÉ•ò´#D(Ù(âê… ‚‘ß‚ Q‰H9ªñH¡Ø9Xg5¢Š„Û^º`ùIœÙŒèBR mŠTÕ‚µ_våA*I4«ÚÌØ¬ûÐý  *ŠÏãÎfŸï÷¦Mš¹¹R;œ¹~º§éCPÐ:«;l ´›ÎkŒ‚Š:;>ý™”$Ž­sþp)é -›DrE(ßN×5]–òì‘䨪Ájkö·g˜ ê§»Õºµ)® 0`Ö`‰  E6È/AŒ­7i퟿ÿúçKk ÍLC8!ꀰÆi­zhkMŠ¡Vk­u6ºÅFÍ¡ g¹aœ¼,Ù)¾œ;âìù~xL‚¨+ä<õ’Tp:ÍäÀežÜA1?Ÿ€ý8ï3þšPD»9ef:œZÂA z¤hnJ±¦$"–ó©ˆ`¥-´Íû”#Â@°©÷”j7Ö_ïCxItðÐéÁhÓD3Ã.Ÿg{ëK¼:c˜kÜÁ©ëDuaÈó'·kV¬‰âNò¹»fô;ïM\aßNm€0‘×èô:v“¸Ÿó-¤îPÅî…;Ìk­$]ž=Y*ICãAÜQÛ¡89ðl¼¨ AÁÿg$Çqd„E¦–Õ½Ví}Áýÿ×Ükëv¬"¬-œ€¤”™Õ==½³ïÝkU••EQˆ€zdÆ„Àž‚:ø-*ÓÁõ–Pg‚“œ7m€z@îÚA)hµ©«§0©¢‡J/Ó½ªß—Ø$W2r1»”λ \qZ'Âëe™kêí&(°áñÏ‚R†ñB– †£IÖfA\à¼ÁìÕ¤„Z?´ßUÕ¤ ßìýKã W³Rtâ†9̿٬(ëÿ·`ù|Ï ¥%1®8ÄL§D1¯G•Å¥v*ÁLWz1ù& œÆVˆØéE\f¥7i,4 Ý¤}io_ßZk¹!³?Fùz@žƒÄ ठ·á2D)†F×ÑvS>þ…~ïI«v,Û­õ{ +Í wµnˈ¼5)Dk³Ñ#ÐIR[¨Š~wzô0ºÔÖn´”à0¼Ú&À£~(0·D‹Ž-Nj=9†Ç›iB¬7–³o–9K‹¼#OÃc2­$þd#;ý²EÐ ¥’¤ÌŒ¯…”°®š¥’OÄW¶¬ë°‘y¦s16?¶G'd™/ùÃ]:Ï Ìý<44eªÃô®ýÞq4z¨‰©ä]XÐ" ,Äœ¤º-¶L¿k œúP"ã" ºK¹°W| ù+(Êîµ%qîS5"*SZ»"BFpKïG W›Ì‹CÜ휃ºJ>@1®¦“ËD%Ãi>5ìnm,ÓËP†”îBîNé¦H•"$V›ë:ŠôQ$8Õ1·vר šÉ aæ;´!5©Yò19‡¨l­¡R ¬ˆZïŠ<2pÀêJyžŸË–²™Ûñ|a~·éÖ[õòý¦‘8žâŨÿIÇó¼Ý"wŽíÙ¼|K1^õ[qlÑI’±Ð5¶m6ÆjAÒ6öõ:ëõT~× Éí'€Sxż¸k'Sùp7‚ç+Ò¨Ï9Ëw<–Ú®­nŽë¹Z$£ ¡hy‰9ž 3ˆëW¯îçÇÖÕe’ cÆï|Üi ð×Ð.óOc¦|—N?Ì»[ÇM«ÙYPq)¨QèÅ"$ÁtÁlÁ¬-Üz¦³×uÙV†¼âÌ tž¡§0âFIÈÌPí6ލդâ¸ey!E0 ^é oDq W^ ­¯¨"îdV/txT»²AXi Êä AÔBwØŽ€ ^â&mÍùR‡çMË21™‚)Õw"=rôÓ°óÀ.Ù¼XîCØ:%š”› 0Òb¯«¡£ ¸çÚð¤Ïa^J ç8'$_F‚ÆÍ¾öµñÎvkaw»w=`wsÃPdÌ3ûW•µÀª'¸n€d­£¼í̘¥€ èÜî§1lí’sâ-GN¸‚„ñ=§=Ïo쩼sþÿg›.‘A˜9w:Þùy ¤gó² €ÌŒ}×6WIhq/”·ïâ¿õ2'È|z™eHt—§‹]ó,øñ<Œ•°ßÏ%/ìÓöcŽÿhÛflßËþíãÏl§ýëWß(_ü|h¿ðïö+ÚT¼~°¹=o?>õÈ(J^"í½ê`£Ý>¬×îuðÜЋ:úô/±dPÐÖ4akdä=¾Œ_ž¾¼ð?9rþÜÌbfB‘"^ŽRµˆ %F3¨ÖH¶–i½R[2`úÒ¡M°0ò‹N¿ …r ×&µ»Ý[CcIREšxai76o"Ò=%rATÕ`ý0Úað¼»zphkd‚ffôèyð¬éÝl˘>›Ö §÷>ÖßÓXÐõÃлˆ zÇXµ}Cò*—Yt€À`P O÷€¾6{« žÄÈ‹*¥ûäZíÈíÃJgrÀë!å¢X:®%Ý`¶}Bžè2§%ª0y,ù¸öõ«•ç¡+^Ýä'Ú“n7`æ£8™íÏJÆ#¦eÊðJ-X3±áŸIÕ{hC3š}þäÝN3Ó<äÏÌçXˆ(ÂT`öö:%›…Û3 ³@˜ËWYó٠ɫϫx×,”µ‹]ê6Œåüša-¹És³¡J‰”¶ =rs\Ûzƒ/T£rFYÃÔ<_j>ÏJt3¦jø'8J'ƒ‚T›©žƒËÓ (h·4³®‡ÚÝ-”…^nKslÉ ~¤?Ó{cñíjìÝä>C•BuOæ±Np,×j¼€sãذѹu™6rZIâÁ:©$>ÅÖéËXÚMhjçŠ>ö­p”N Ex€MeU<5ãÙF|êæäKÄ,“î»x¯÷…‘G‹HZQ¶gýSr¨)ÞÿÑñÐÙØ»nd»w=èe·À«p˜wq  xÖv¸Îüáï Žð+ÞHýN*q˜ÝÝïý˜ Y*‰ ¥ o” Ô†zÎß9Ì0S¢hžã"Åtù`?mÎsùÄ÷$Iñ9¥ð_@¿€i‡¢Û€d\ lòŠmÿו œV¿è÷¯·`êa3Bo<&p~÷ ¹ùÑ6À;†§ÊíY…JY H;Üy(/æñ °ÿ·´Xaÿ?Ûoü»ý½­ÇJ)»:DÊ‹C!<ÀµšÐC{ï$MÌqç›y0¤^¡ø]q>Á…Üsƒïuœ«M³ß™Ó¸7î˜_Ñå›ðFÞD„Aëh­8Tv€£I+9Ýàî Ó#YaC°ÌrX™H‘jV¹™I릪÷Þ,Ë ²·ÖÚ[k_šÁš´öÖÞßßÛ”&7v:¢ô{—ÊI/ü=F°š/´ -¾™Í ÏDþéélÏg«YççlÏbPN^C8ÀCqÇ·?s°6Or¿“eeàF ½ûš°Ãô@ͤ Í+ºI¥i1݈źF2T)­zÁ ëÝz·®æ‡p]Ð4ØI#L Àd:]pÃüû£í¼y=MsZÏ~¶‡þ xL|ê炨c•z¤é›ØZr/_¹I" cI†l[ý§ÞÌÏ[ô&NO?Àv @2ovù Æõ}ÆÊ=ã›ë5¾×bŠö bêpE(¨ŠVS%h¡,ɪ=Ò*à*ŠWð^ã?ß©§à9`ì‰N,ëÖǪƒBœD§l/üúUЦr|žæ-Fänx•ÚÊ&žúåjz§‡ÃÉ¡•±%a@5À<Õ½SÆ–‚"Z‘{çU½ ÙœV¯ÛO··r%{3‰¿ünl„ºgÌŒn¾œc÷S#“<¶ÄÚg:éõê<{6s¹[ª@M„à­±ˆÔpáœ~ÚRá™@¾çÑèëźƒqÙü°¿Ÿ‰w¯¯å\b?foð˜ÀÅöÜ0Äu\nÛ€P´h«åëˬ;’(Z.ã@ ã qŸî£q¥Óûìu\#u_„øžM܅ᇔ¤7û) )Ås/ÇS§v:s‡f H…6¡Þ…UÌ>úݺjÓÞZcQ¬lÂöÖPѪ¼mooM„¼5{V‹}Yˆ^A ]t»gQ*VÍÄÔL`Žî c"óÀu¢úE¨?lÖ© O E´3l+²mB«&$jj~ì@ïkko H)¢ ŽÞ? Õ8´á]ˆ^‡™ oÍ!¤œ¥9XáÝzÔÌ2(7½Ù`‡²4Uýøè®w{´»‡#ÝçØ0ü°Óz³O"rÒçûÈYcáœêRR‘Êì'µ Ÿ~3>î­*‹0lKUà RI\®^\Ùc>-ap|x¡xT¹EnX8þì5Ò5\4“íÁC²‹ýáñªO+$Í8‹²=…2ƒBX”M-< ¢u­zºuÕƒŽ ­‹\¨JáE}??YÀ….ëå[ãÞžÞÙs -q;€=#T¢ß€ï½L¦Å Ú°çè÷ÙD†þŠª°Q‚Oÿ¼¤ð&4Ý› .”ž‰s]ŠZB„MÓ §u²ê9±ÚŸÓífó?âïf:{O0“ɱ.Î:«pÙ Ó…!£4©¯¤ i¯¤Tce±+ñ|÷¢»×…`'?+=¼SÈ ÆÄCY4uÂÌÙÙÖs$Úÿ}F¿Û <Ø¢šçé¦÷©`*[…´!o_šTòÖZ ë‡3Àÿgæ9g¹±UqÑÚ?Vöãë›°ÜËr-ºæ»˜¹ QZˆ*`í4ôýë»—2&Ðïn¥Evæ3¤zÉ+G¿ó*Û.i>E¶0°?r§ü$Kh?EäÙ;ù9è“sèT—Ì8íúIZhÆ¥÷ífÈxg‘óñ‰×Ee/K˜½h>“ëœÝÁ{eÜÇõ¸D÷EF S1Óܤ½µöµá£0U¦é:SÎa…e1¹×nÌ>ßTb„Ð2ëäo²ÕÖoh íÖ?€®jÝz×öEÛh("´~kï_š¨PØZó’ Rò ØÅŠZ‘~˜UŠÚ¨«wÇ9‚1æâ{ÛØµÜ–ö{Ok…m?â8ÏxTÜ =Œw* Yƒ‰€J¡Ø°ÞŒ50sk­á­7Ó}sÿ0€^…!ÐíFüp7» ä:©MGTÅaݾýÑ퀱ŽU’®LWˆC·^u¹\IËO¬ÃOÛIž ¡ïŸ¸¡»îBÀq °gg9µE>Ü” ¨ïåù˜‡QºÃ$¹9 #Q1d¢ïì*(¬wøx»ßQ¼>µìøp×D=d·`Ó¥<´×q1S6V{£Z@õ¾i˜3±®œ; rf˜‰ñ\î=µë?‰ü{üÖ—\½ÐY8Äre=:i àz(W°ôØ.ñ½Ø¨ªËX¶˜ãJ4G˜ÃB  ç‡3Jø:Ú”ùì<ÝãÐ}~ž”˳áôV ÷FŠï ž1A‘¬upæe´¡€M^«›0¯Ä +õkœäU‹\&Àcl: PwþꞆm³-†7u¥YÒ‰ôœLL'ö, lëA(¢{‚ÔNO0ã2ŸÙv0§ùñêRZ«ÒHÚ[“šøÖ+¡y.ß{"›cN•áì—ÞÿðÄQ9- Ç²š¢Ø·_@ïnl€Ï‰?,¹µ~ïD#ðôÃܹ-‚tÿ «WÄuÈD¿µËš—mÔ;LZ^èÌ'—âd4œgûÕ«4ûÜ™ÞûÑO%ÅŸiËåž1íú‘Lš·ÿç)çÆòIJ}?Úã‡LëºÌ¸çK”d tn^FÙ"„g‚«íô4JI… q.ÀYEÌY ˜W¯ŠAÜÚãpW¿¿ªÙfìž™>•»SûOcàßøw{Ñ^ÕcÛø¹µ«Ï¬€5‘2Úa0 ¥¥¡Ú=4OòÄŠ lðƒûèÖV1³êÌxr.b¹ˆ.¾îtÍÍ7r udº& ½;ÁÖÞþùþÏÞ¿•Þ»joÕ@‰Œ›f*6¨N´0 UW £¶Ý/AP(¨é˜2ôÖXi‡õ£·£y"M´²µfxç›J•ÖZîºQá9aÔ.u¨¨‚Cnm[–Tz<žM÷K¸Âf¤¦á:öˆ÷Nîßg:ù®øä@#nJ¡$ŽŽCpt3ÈW£*IèhRÐIt®ëx{«ÒÚÛ›'úïÿRµ~ï bÀ°ÿý†»uöÿcïêÑäÈqì{™˜VIVUŸ@}ƒ=Âì‘ç3ãÍZ­´F²’°’´°@#2«JÒövïðõOUVFÁàðD’GY@ Õª†V/_.õZ ¬ jZX$S)îÃņæÚ‰¬€ÌÃé¨<\~G,±0¸æÈ°\Ÿìt*í;˜§ïêªVÊ^£ÙŽT[ü`îŠ7KŸÏÓkĨ;yx̃W60m¤Vrîë2\{dï?¶ <ÝÔþþ‡_õ@®ÛÜv }‚*¾ëW£šîñ¡ºç½Ví±ýIF‘ظ˜as·qqSʹ𸎗k8ŒrÍAï?’ mùù {»Rß¾פÅc±6zPЗ1Æü¸“fêéq1sß·ÈÑNqx&;lÔ Oí¡­9z<ŽB=k€¨Çòž¯l;&€Ågâ‰p;eўØ¸¼ Žôh&9+GF¾%j/B ‚ôD`û ±*D0ܶ`:yò¶A‹Yh8ÿ Ö,*x“H~KŽ\ Úgèò*aÍçËë|UÒÁ  „M&ðæ‰í©&Ãmi‘^à—¬U5ÂŒpA3tå,óKÀ¬Þ**4Òçò±ÆÁÑ7Œn4ÂjD`å1ìI@D奞èŒôânFB’X‡6T¯’›¥ä≯ÀIVRƒD•Y/¾ö)/™íïûJ×¥‡A•¾MŒ÷œÀvÏ÷1Ì ÿ „œÿ;3Ê"=¸'{*ýn³ÊÀ1,™„0Û6ðuà¹Gè‹÷'ÜÈ0Í`ÝF†ÁgÎñÅo@°Ü$8óBFlªà³ß—\Ji,k»ÿÂå‡ãH¾£îþNr,ÿ§ÉOüSþÙO÷Év9«˜–(Ü ÙX'†ÄBÁ ¸±Z5˜‡uU«l0)£<£ÉÝ>Šd<.¶‘JN- ‹¹o~²Ã)lqQݪFlº£@J±ççúüìÞŪa8/ôzŸîs0íZPܽÀÀ J_Nµ‹¤5ê|ŠPó™PºÔDŠö Û"®AˆˆÁPz¡›Ò3¨­FhV—à^úY>hm 7‹rpüÜNP[µb h‰¼Ûjïn;ôû@ü[ÞÅ­r¨ƒÛzn‘Ô´æÂlHf D•,Ìáð©Í­×*¥”³È´ÅzopÔu´RÈ-¸ÓÆ­¹gâÙ ×k½~­È êà ÈžëÈ1¯2‚ЄƒÀÅÑè™4=¥oŒÇã¿>Ѓ§¹rìýêÍâ}ÝÒ·Œhj°zà‡y›ÅÒbÜ_Zžõæœw~Ø-sMb©Í2çWÜ€5ˆ kuÊ9þÓý¹“$œÚmº=¤“x°¥vÞÀ\Î¥<(µ›GåÅ¥9´-3‘¦ 5cÕኚƒ’û4B»)¯tµ0Éþ›¯‚—U7Zèô³EåNyòú@‘›à8($€o—#ßz¨áƒã@ÙX<÷”¿‘È]7@«‘tŠØ—XZjw«é`Ès¤1y¿k*n}‡ŠHƒ•K3ƒÖ&’U'ýþÁnàáÁY$ ÿ`zwËÌ‚•ª0h¬ÑÖU ’]-K¹ú&¢÷<úý¾OpD'!k}/›eg“$E 'a¢56ƒ¡µªMу´ê8›Â¿½mý®­yl¥Åú<¼ô·)“DÍ£ÞW³(­”8{¨hS¼Ô‘̲C¿ÛºPÉEMØÔÀ>æzjôáM¹ö[\oŠïíc[ÒΘ¦ÊóVã{ ñv¹»ÐwqFÃ~ÏûÆ(ÍÏZLúô}·ï>øøe{y€údd yj4½˜%FroŽ[Œ!oÃà—/˜I~õÈ×Dÿ/¯ÍEÝÿü§ƒàŸøÿœl´C¼1ÁÆ9¤\F.aé]œ›5+šP,uîÅ÷J×fΜ·ž#Ô¡ˆ6-Ž=fXß 9œ!aG¯Þ²œ$Šíº z‰B$kø#‡{ÁöÏØX—w2µ(ìwnWX™1¤ƒŽlÜTSùü|–òoEŠ5½þëRoFX MK£äÊYJa"Pp«fJJ)ÏÌ”,õk¦—0ƒI¬©µqpB¬@)rþøüë¯öÛ?ÿQµ­õ¦øJx僶÷±H¢×ê®]¡hý†™ÒaY®¨ÖÔnutã°7Õn%³œŠ˜UUf¦NŽbD7Ƀ6Üó8ÝΞñ@Šú¢Ú¼@åb=ç‹@y­(9œ–—Z%ñ\ ºyÊ´ÏŸ?k;?„–VªV*Ìñj­jЛ¡¡~¹–ó¹HÁ ’E²¸f¬Õê×Z¯õ·ü½^+ )qnY¨—j’©fŸ¿Tk¨Î…¾A¼Ä_–r.Lrδf—Ë¥œ¬ö ¨¤Â“À#®=2°i÷qUÀ6†Âo#§K&=ðc'µ8(u2¨ŒE¨]ì¦hƒ@‘€äâ4_ ¢ì8JoÕš+Ä"#‡¶¶-}ŽÏÌqØ{í÷õYhá)ÜrçšöþM/턦6CO±ù–»6|¿É©F^]/¶DFk¦ €Ž$=L;ç$??•r.¥”ðãuCÓÚà8nl G¾â;cì' %bUÆ—ƒ ëØ :È– ]aR˜#šwDM«µ=ƒ7jÛJ„Ú" Á±ÆáÉ–,›a§E,Uƒ@êd~q”÷‹!V1 £^n±a ¿™šJ9•O/åùÃKýZ/µÖ[•\ÜB§¬[[´]À]Ù[W3säÙŠÌÞÓl´b¢÷™‰}¹“iœéh¹¥Ç{Çx˜y9´-Q?uxwÆ<ê¥7EÛØSÖŽIƒÿ 8Ékãð60^M³«ác¹6:ô_7.Då‚m½ïVþÞñ{T–žé˜-Ø«é2¿oãO®#}›¢-ú² IDAT=u㇟ø§ü¸ü˜ýæw´ú )"ý6¹w[½fVKwÊûÈá&ëJé=$… ìaPÔ­¡PíÔ‘^·8ÞÚ íeÕF·­ê@§£Ûf ZEârR eÅP¤”好vþp.E<3Jè®wSTÜXQe©Kµà è(Y4×"¢­"?FM$«#Fö¨ŸT2½Ø©”^èáÇáy<Ë€vH(Ý¿(EŠuõbžÖYÆ é0˜ã~cuã=ŲWb. Z<=I*x Nyy’k¾°šõVñEMµŠHæÕ“ye³Z«yR+U$çÛ t«¦ TCmg5åDˆ°H)E@ÖZkÆÕF²lK¾§%ÛîDߌ,jcîìLÑËË÷Õ§ûb'Ú,°%}up*aLr2§-| ó6ëm€:Ÿ<‰a‹hà ´xTênÁLãé¾Å«¶>æâØÜS¸—/½é¹Ø¹Æ‡R>~AÝ™"Oï›wýòÇ»ÚÍíDjf$( åäSÂÓ_Q[5 ~½~nŸ%ÉËÇóùå¥þúËoÿ­~½Ô/tÔ›,Ka õàøÞõpÂGÀ²5C¤ùÉG÷â;cùPlü3ýF94¶¿p7+ÞRÎÆãQô~ýd“ƒ?ëh}Øb‚ô]:ulOÊ©ìÇ‘¤ØL!;Ñ~&˜GoÝy) úÊÍ$•Î í§š & H˜ûǶ…%k€©vÙ!Bf>ÛRXͼå°ëî@ ô«†e)Íu´nQqjzÂGW’½°äzM›»Í7“3×CöGdt² žÔwk÷îÁ­C¡v@? ÌÊæÙ|{Û¼76ý!òíËtw xåo¨V`œé>ç:Ìô|Œª0löÄWº"¶ÑÇéw’Ž;Ûñkò·ü ›eßÐwœÉé¡LCÕÿ3ùÓ]¾ù €ÊwÈN÷ÞÐã÷qB…í¹ó£~Ï~@ÒÌãv’í³iìC“ˆ¼kâﱓ7žgªÎ;Ííß°'Ê lI 󌯀A­‹{ Ál¤–é Tƒ¸ÿyTÎ:²™ìR!Æ¥’ùütvÃ0OÂGrhG!-€¨ÑÓZm½EW!!bª’P Éb­VS4³>FØ%=J½K‹°6RÝA§€ŸC“ ˆô¶ Ó;1A”µZû]SxýᲫ^8^—¹¢‰…D*jU²°Á+('A²”ÊS@\¬Áj½WV&)¥€Õüt€ÁÔkMG®i ‘źjE½©ÝP«ÖZ_z•Wž¤|,/^tVFm6ÉÛ–÷aµû{uÏÉxñir…c?ãæ¤Â]Å”§'û:|ŒJcÖ§Ïp£†瀀žZg[¤YÏÖ›”ðlxN 1Bòl.%.tûË# ã}ÕlS£u3é¾'iz­–ï§eD9€ÜÆä]\Úh3. ´ï©Ñ‰áûlj ZH–r–R$‡V”"x²8ÈTÀª^êÕÐbɳIR[¾zéá²Ñ{%qZæûâLŒ$ðÈÑl%vï`:xw¿o‘£ òN8f÷WÞàºólá»Ìø †OÒ Ý [÷Š5 ú®#û~½¦ ¯Ã2«ÍS‚ò`*i@;ÿÐ?Õ}KÓí?xÆ~É("âìSSëF(Ò`´ÎÙ± iTZPxP“Ó—¸ÌÎm%nœyt’¤®¦úåÖ¡i³xÑí³×àp,©Â–¶vû3Ž©8H­ûWsÌþEpÞØ Ëp½j¼èˆÙÝ6 !ß«÷"w›†a†TXXë’†µb}ªáüÔ6ªK0P³¨š ]”úh²m¦êØglûóÞÒ1úô†¼gx«>0„ã·‡­mŒ-ÓÍÖ¤ñrŠºtqSk¦×/W7‡ÄîÎf…¾¢ ‹Ô÷)Eú£ áeÜéÁ˜pîÀ}×…¿¡Ø;Y¡ûÎÚñèûcÙÆ÷wYþû‡ËÿŠõkò6õz¥âûÛù €Ê÷ËÜš¿eµÜo4j±®ßùÞ…š´÷Ù “>ÂQ+%hÕëåߨ °^¹Ç`ÿüÚp.iÓ‚è& “?´i·†8¸%t«ÇôœÃ3·`†uߎ£õÚ—,å<:“#m6ƒé–$ÈKtW&ë/@+¤$UÐ@˜+su @ò#s„n ÈRä\årÚµ6ƒöE rvbtØûIÏÑÊ k¨‚Ï%rMÇÈĵ¥ÖºçN/³(7‹Ç k©Í´™¢–"µ—‘ šv¢IQ«U'‡Ü‹ÌˆMÏ+£Åw܉''Ðñn­µ6\¿ÖK­è”ìU5“s)O|y~~yy®U?ÿÇçªU› H¥ËÁo³†h@ÚLk)ßæ4X†"˜`pÙ §µM·ÏêmØc,IMP1êå(sáHþ<\“>BâB ÁT&‡»1h­ò5{³UcqdB„°y–ò€»õôq*Qp¿áIù)™ÎÇœ©ÛªçÏ5n¾¹SVØvOŒš|l«þÖ×5p°´Û·{ßmîÑû¼e“„ÿ-âÞúÅ~˜pN ]öH ¥%Jø¦YDì¤`4#‡—ÍÐÊÚÐìœïùö€jþXnýSÛ·¬cXþVƒñÑžz×6K§cV½ 1„ kW8Ž#b±(z¶X燠|ù›ÅžÅîþÙ¿ÿšvÛÃ+ì{žIÁ=fÅv|Ï{¬úíøÓâuC9/ûžôLþ¤}С|3€¿É«r³nû8½’ÄùWåŽý_€%kÔo–ÜŒ¦bínpnˆø¨a|\ö§)=úðKº7w¨FW–Ÿ„Õšqcï‘– °+ˆ+ Î S¸TáÝ1“LÞ7+dœ£Š, šqƪÄÍŒY‚¸p¦Î:À\ÐM”6ÛI˜¼‹ˆœz©ŠzáJÚ£€&—ÜÈD,,,GA5Uº P&0BE!4Ô°Å¡±ÃŸptsÀ^^.ë+ꀎ™“Hdè엩ݺucb_k“vS¸¹ñYMT•Iª˜;UÐÑ4Œyï×ó—åmÆlÖ, )ų¨»6\®ª j®ÍSÅDdùtï&|<}w:>åéhA}ugvЕWOÿÎânŠäMïr˜”Ñà»Ø¥Ü¾êtiÂ…—=Ô¶›ê…ƒñHÌdj[lj5'pÐ ÷&bî¼(Pþ¦ Ž;³ŠÈÉ3üÛñ Ú-s *A·ýxr‚­Œù&c\¶¢¸iý>jáx»MKmfW¦â\§cëáþOË¿Ž×"~ï¿vs. •—3åpUŒˆtP,ÒéY ‘Å"x˜GêþáÑð1 iKèH0‚åûµ†miù{n);èo祚è±°î\iìKQ{š—.ÏœAÞ?u¹­k›Ç³â¿[*)/£<Ø ˆa]êÿ%Lêwí.¯ØM0w{`'ïž¾¡¸qá-fvLå-2øfº– |Ÿ½M…Øc•ÆÃÆ´±‹}Ó^îlOÛNе[TH¾ô6ÖÒuÞ}q®/voœ2•¹‚ˆžÿí/"ò|:žŽDÐæzQ7=_Ô›™©^T¿æ>a„'uƦ‡Àãcû~7cüûß ó`*ñʺ÷¹xj&Töse:ó‹½å‡]c%þ×åO²Oÿ4ùf“KBÆ ¦x$ºø=mÈ#p¤DCȈ¢ð/ÞÅ,½ÇOüäüè‹Þ½GEHfRª=ŸŽç_žáôòóÍ Á Xˆ`3CU€3Ó¨(ÞIóo úZÈ`3î‹Ô\–Œ”av÷¦–É¥)30èn-1“ÈÌÄF$%«ÝÊU@áÚoa²²B†*LüüÝQ>‰6ç/ ÆÚl‹ù b°sÃ2`… Æ€é°yÜÍßsÈ„ÝVÝÊ2P¸ì©Bhl€˜Ÿ¿h$‘Saƒ‹wœÈ<³ 9u2wz¿Wƒƒ*¹ƒ#e‹‚˜ßžOGAM5r&(<*¸ÞMœ2&T.äqeRjv‰À3d:5†‰Rö ’ÏØ™kô[º3hBc†Íÿ*KqH÷ ¼ë‹´Fú¨]°ÜmXþ*4™¶š-;¹¡„”»LÂ{Òì#ÔãÆÎ·‹÷Öèz×^f}—%þøXŒ#½WâËI„铲æþõ…­›~¹ R”åR=øñ_øÛ_ÿjÍ^^.ÿùïÿ…þ?ýr>_.DÄÜSoóE ,KoLá¾g Qw€¹:ˆ+þÅ;4Î7¤g¦Ÿ­grõMshÖÒä0ÌÇö=.žìÇ{É—õ|S¼¾Bƒ9¸Á›Ù¨P,ã{?p÷ækòð¹3£AMÝÄùŠÛ@IJ¢fTJ€À5Ì­é²]&mäÃÃè„Ô­‹ò`‡ý¿ãq¶ÔV¸™'‹áºX¿»(Ç7-R§-rE׾ܬÄW2TOêÊHx6[òð‘÷²½9ØJ÷úL¨ ìbr­õe·‰ï9˜‹Y‡—0ȧ/Ò×nìhÃ~2ÞºAÈbýúj¿z›€c+jMD- ÷ð[#ŽZ‰0À¤Â48 Å¸¹d3{ÿ!Ï„Ðc§ ox|²%Þ¯–½î­ V^C|<ýJ_2v“,ð|ÜŽÊôÿÍà|u0ÿèŽØEÀ†oð7ù°¤úBwÎÊ_ûFÊïtÚÝÈâ0#A’z[Oú¸ ïøÍGC65e¾ëæp74€ùøIžŸŸõ«¿€ô‹êÈWÉ©vw˜fÌgA¤¿bâ°¯P±Ë× N¾ ú 'À“ÁŽCÈôêçóWUS¿&/q¡§½”¹UÂdâŒÆ¸à2ß1Š7óky Q@ÏO'‚jh ÁÓ³nÏOÏBL´ié ªg£V­7EÚù ñˆ´=V»;58`=·y ŽèHĨ@›ábÌà eUfq‡“™7±æ§ñŽÖÂÎGa¨’¶nÞ]´Eô¯!ÂA)jJ\I˜èÀÞü¬/Ÿ?¿œ9£;Åp×™ãf¢7¹ÓA¦B¥0€Q ,€yt·fž(èæIRhèÓ$ßÍ=ÌÐÍ!`Œº…ƒ·¼Õ­ê ".ìêó nC¦rdzËÑìƒÜ‘Çœ4sáûÞr³¾Þ±i´+a»pÉî._ïéË©¸tÞ™Ln„i¼›«¸ÜîkNOëàjy3sâ+ô«y33WU€Dį ¿ÕH–k"Wüðý³þ Ÿÿþù|5&˜»Dáß•ãÏ!Ãh÷N|ÂYÙWÁì(B•ä»ËØ0iÓ?ºKwØ€g;ˆî!¬<>¼Ï#MhG`Þ·m})\Ùz(ßhGï±~_;ÊÖ¾×Í–çÓ+!«Ênì0ZæL‡»¢ÅMŒ*„˜èÀ¨Do0·„=_wÄL¤t” Ÿ—MßGXA‘€}¢m|2v’ATâ(¡¬Ø"¡Æ8FÇa´3}±3Ø7'+‡¶“&®x]ߥ7\QûqßÏŸ-ëž­¯ðF•ЉÖTŒÝ_W)™ªw\éxpjÌœÐÃv/éðM–AÙÍóW|vïku¦aÇÝûC$ã_â—§3ÂÃëÝüªú…"š5À=Îqk1·¡5í^.f}[#·tôUûm.¹Wåf mK ßT©E†ì^ÖÁ»/æ´™úÎè@¥m¬·ínU^¼» ’or/oÒc™ÌuûÍþ&‹ÜûSÞ¿&oYÐ*s¾W^5¾/ÚUåÝýõ#¯¼µ¯?QöÛ‘ã“ObÍèl6$¬ÀÑM¯Ä•Åâ:[ ´œA°JÃËnYC¢Ò<-l€Bá>ß<ÖvõQ‚ÉG}Ú>‘ÔiD¸÷è=ƒìðÊR•ˆ¹ªw¨S¤<áBBÌ…äÀ"""`\®IÕt˜;7ó2k2OlÂæÅš†ƒ¤fO;š™±ÆÇ®~%mN£Ø£:¨å£¨Kœšb½ñT›SD튨*‘H*ÑA8ò²6O°ƒ«ƒ(«øç€Ó‰áЫk³‹ª~UUUóÌü£x7"Ae8TU¿êùååòUmTBÙIz7ªëŒZôõ£I<i"ðàl§CL; ÆX׫[äwI°w='Ì4!æô! &;=xΡ.Óàwíñù¸c_ÙÖÂ#gÙ;5›‡<±UÂv§$+;a†…N£wŸƒ9ÕVØì3Ÿ‘¥3£ž{â?›ªÍwæ—H!î йŽ.èuÅ ªª—/ àóßÝDD›Š°|9’]§{ Rã!Ž*#á™ ðì‚ù^;jû܆þʉ5\^ìE—ïG·¿9:ë.º=bXÎ}em‡ˆm Õ½›c?MÖü…ï¢Í[¶E8ïúêÂ+†™?ÞeÁ!¿|;ÃÝ×HøIâà¬ýŽ¢ÒØœS¼ÃwbîLS)_kcVOÌvÿµ™ˆç¿€P2ût (ÄëMú¯Ùgo¬~÷ëìÕáÂÂ+“ê2n»Áƒ ”ËãÛÎE<œúK”DV•öÛI¸™ói³ø©3w³A]¹Ùþî‚H!´±›rCx~S8›¾YÈeºìgN½Û·ÌÇÊØQ™<Úí¬©Lp35—Ëö| „à±@TquíŽJ+$壺Y†}ð[»gå©íý•úÌ3Î뾯cïC#Ý>x÷íÍk5ŸÿÞgÿ¹ÂËaÈjy°½¿¶•ßfVx(¯úÄùÍ¿¾%ß àVÙù¢îðû?Nü•_úƒ?o{Ãýôí¡»SèI´ƒ¡qA ÞÌÊZ!°Ñn™Ø£C¹™ôÔ™ÙAwt÷Pb–Â'ÙtY4§Ã{híÖ·@—½l'׃ èö7.lÕPغ3Ñéû@Œ†Ó“èUÃ÷ÏBUžOGhSUŸs¨]ÀQmõ‚€‰IŽr’¨*i–t;Ì€È]œ=VÛ®ª——ËËË‹ªž¿(ר\º(îÚ,5»f Eäˆð,Ø”*ä©3š2€Î£ÂRéxˆr’$ŸDMMÝ[Zò\‰ù€Ä,t`Ž€áž(2Úyܰ¸-ÌQäóŒæ*ÖØY%ºº4²éÈÔ\A»žÑ˜ ¹)>1·Qc°™^+áÉ¢F!– od͹¹xóð>L®2Idó`1s5½¨BA…­+¼Š‰:ÜX¸Š~±Ë‹ºàåååòóWÀÁÌÁäÆd¦:Þºй$%>K}VF‡9:Tm¼'Jé4Ô5ì# ¦€T™ìµ¼ª „çšSÖ*cÃ6iÔùwg¹øE£æ³ˆ¸=B. Qˆ²ù ¤ÜØ•É8öê¶ÂSm,%‚sT¶¶•n™cÛ^¦¬³-ÐûåéËg(i¼mHcÐ)3ÎvFŒÖ¹o0U¥¬I8jäZ„“®F•áJÀå—sVE꘰ƒ©éUÏ¿„Wªüã_~üüß?žŽQ^˜¢ÝôêRÜš:Ì­Mk¿Õ¯W#¬%ØLr GN¾¤Ý•#²̯?´÷]š”KG$RâÈfES÷ûÑ=@D#«}ͬB;]hC§÷í™…O³µƒ!ïäÉïEÞ5t›Tãç¾7d£æfY~¿—Pl—êœ6pº3cÓ›IÑ ¡™w§B\U¥k£Þ\rsUi—WGTÇÕÔØšqa‚û±9%å’b7˜ø pÌœùª‘yÁ»¡!¸<‰!ªP›Ÿgªÿõ}Ó#3¦ß­š›^§ÍÔ /ÀLìÙ-½`Ýæ_wSYN9?n×8Ó˜ÂÝ DfZz:ÎM‹'$!0Æz ¼ š{pf!®½üíäU¬n¥ÀáårþïÿÑó·‹€yýãõõõ5,’–\ŸTˆ,V‹ÔMŸéh:w¼–³WG5«ðpfþ×þ?éé¨úéD¢\Ëåë¹|+V‹W-åÜó6E54¢TOÒjbzU¯^J1É…R3õ úéèÕíꥯ]}$r ’t@ï˜jUpÀn»p2¸˜mÝaÿ쬒hɵ‰éùR@ Õlçðv¹«( 9/ç Ì?ŸüZ¼™VÓ«òI Žá ó¨g1œ^*ËÕ/_˹ï…¬Thp"&Ð ¼úg«¦Y½º5—<’]%v§ˆ÷Y°»=\‹cŠ6gÅÀ>Xw!¸Wàðt»º,eB6¯Zw÷u-´A½´ž«©{9D"=˜ lë~»‚P4)¡bÍ&y>éO×Ât(¯Œ]>¶õ"ºõR_í®‘µu»1Ã=߿ޥýMQzZ÷1´ßÍ!ïw™öàȤP¢B=ˆW³êšˆ€L \yG4/5òšYÜÎNà\^‹ù¯/§òI½nv<@>³l̃t7Ä>: ¯`2ÉÂvßùç4ôà ‡0Z¸×‡ï¿Ì2K“}rÿdîf_-Ûo÷wÒ‘ºØÍLdab÷F&ëÚi›L·B` ̧wÞôw éöºR`Š‚ŽÉq ý31òJï€î?ß× IDATϸ¶¶„™@à¤z– ¯êmøÛx¶Í‘¾,þ¸:H˜¡#„¸Ž›.¥ô¸Ígß•¨Nÿûs:͉¦ÃžK’ºOuƒÈî³T0q€b›Ë ½:qofW–WÚmsÏ)”f\(¶iXïø@XÇŽüx$¡ø”C`L‚'ë¥kŸÑ=Ì;aWdچųå¼—6ãE’aZ•n–^à0i²©ú‘6²šVõ¯çKùz.ÿx=Ÿ/~5T=}Öãß^ôà’™’éoé6ˆ>Çá<]³4,¾í½úŸ·w9?Fφ»%é1q~„Ëõ!åŒ?’îË{¼‹V_ýƒ‹?Šøô—Ò³ƒæÇ«â ðOzDûÁÿtàÞÐ’Üb“0äCÛ‰Ý dßïÚ¤NÝ´îp« › À²Ëå7m=›ß$wG…Á$‰70‰~:?T_‰ï fêÕŠT¸{d½áW/á>¼'ÑpAH*Ù”dÚ}z‚VÜfn½èN€.P"0œ± œ ìR˜DjaÍ¢QÑž–sƒ{õO@u¯†"š3÷`‡{5¯np’E²à@ õd¤¶Êk“Ä@F!ßÉË>¢ìÈ0–«‡5A0árpI(F€­wx&* X•à åê(¥\©Õõꪮʢ¯Q·€¤Pó` ^QŠ—ÐÍ._‹ÕÈû*Iõôã>L4”âžK”‡òLu+‹‘rZÃÓò2&‘´/½fÔ5óp°Wø¥»ãí-;€-Ñ·^&ClÙh¶DÓ´Ô«Ùõ„=Û-‡ÏÝpÏn> à¤ðl×pqÃÛƒMÜ" ²Ë²! Þ ªÝîu·`¾s >d8´ße«i9²»Ê¹Ö^S/˜@B†ÂÒáï7PzÈ1½‚¢‘›×››ÊåâÕ# —ZЃˆ¹‹ŒÑmPLHFŸÃg8iéXh5ž§dfœ¸ 㙣E ¶Íµ~¹×^_¹÷ôYßTsøà7pËœèíõ9¾Ó”tàæ¦¥Om¾î@¯nÐM®ñlA¸ôBtJÍÂÃ#õ=…í`ƒ8Ž|Xì%ñ€¨)ìPÝh´ßé¨e¡‰[pTÀ:z‘#À˜á”(ör<‰òÓwÙì>3Ûñ>êðŒ}óÈ “Í(Ç\õ¸‰Ë…ésÖcw}û-‰y¶DÜå=SzO¸±–}Œ¾ugÓÜÆfi@I¢°MU ‡e• Z§¡nt6^´ô®Ãswšuk‚Õ1Q-<¸yø 4K¢iñ;x„®¢j÷ú¶u˧ý¯]ýÀ`h¾!W ‡÷¥QB%ö < ¯æ• ºjh2nµ€Â#$‹eH ÀBTŸVÉô‘ÔÚ\«¥tú8ºV‡>u móÖ5Gf_®Cû#îŽßQÙÜwëÏö¢ ûÖI­×–o´Ûc&ãÈýBàðfFHVßÒÿôFE’Y%ðÁê}¾üX^zse¾Óa=‰ÌÞL"jîü6îtÕ ³1׎&”kIªP˜‹W0žÊ;Ô}ïO`ɺßn‹˜“Esà`ÅaWå¬Ð.(G‰eŸBÙþ¼ïѰ3xBª}Xñ,™4AêUˆçvm¶‚¬ØøeŸëÛ§ðÛK7Ó´é-]+¿W&c-Êø4{°lƒ$·6Ì-x»[â&‚÷ºÅ÷ù=¿ºË¥vwØÞ=þ¸÷¹.¦äµb€ÇoØb;B3‘ ªªù·—Ï'ûö[‰  ªòòò«d ÉÙϬz¤”Oǘؽ‹mŠó½1æ¾A £~’çìÑŠºõÞ (»c¶»³æ÷§ŸÐ?'üœž­.?þ½é‘®ûl®*À?i¡ÅRþÜÅúaz°s Àps݋ﺔ>‹›C#õ©Ù;“›ì•ºTÍž'Ø.æL²…åt·} q¾þˆv6÷`²–Q5/Ž(‘àt<þñIy0FK¸Y¿k$%Öîæhöœ¨ ”ž®CHShÏ+E)(€”RBsF57G3d¡¨f ¾âõr6󢪟´kY¡9‹ªˆfA&³(q¹šµ¥è³/JP•ãéxúåDUÖPª—j 9BÝ =,¦J¸øÛ÷E·ûþ2€=Á58aäâO Ba¦ˆdOœë,ðìZÍèšÅÌTa©û×1XT›BEÉnWXuG.«1EPÍ·haÀÖ` B”˜ám»¸‡,Ø@5BˆNf‘ xE¹î(bl!šC®ýËðþ,RмÂB‹³59HtcÚ“øçÑX¤¼ŠŒMÙÍðÞÃÑ :í,sïNÈÈçaÍÝ!™–EsO™æ0Tô:ÜS#ãG¢/öþ}¾nä(:uçQᘇ-ÌÑð8½²š§¬'„ï›§7?Õüizü<´'I˜¡Qd( 5œ4Üײ§,œÿq/°5ÏD%N¿|1ÇËË¯î ¤{=_J)²‹ào #·¼Õœ™Æ/s3 ß§sx À›¡ù2áif_x¢j^ÿOÎvk/o|ÔQÛ<¹U¶”W¡H6ûμmV‘i® À£v£On"²{¤~e²HOeG°W¿Ã`†b:†E dPFþœ¾Þ$Ã@Ue¢7g…g³ªk=§ˆ…¹pº¹Oæž®flk·++ ÕwêÛ¿ÍfvÉŒ®Ìw›tŽlðì hÆÀ HTÔØ"DvÕ¡ÆÝùv¤ß’ËÍ0}s8Çâ o°Ñá£êØ“¶£ ú¨ƒÝ#HÓ]æyK>_~êùk{ý4ô\b;Óù¡ZÒ"Æ,,1Îý Ü\Í…‘ßhàê½ ƒNѨ+fЍª %BÀ.ï&%YFZð5›©vš·9ݶtßáÿ“´;ÊéÑ›­K“a¶YÎVJé®àëŸC@ÿkéÿ‚öû,ÉÖ3ú©ÿ?¡MlLÅöÿ§é< )dƒ|ôÆï {ÏìvÜ aÓ¿A·Om:BqPa œ0°®hí²Â‚Dºµ©?zÙĨgŽí§ó¤™C<(Ѩ¾Ãq¼f)H'VóæåRÊ×b/Ū•âB0Q²ò0u …F·ée¥ÃK)v57ßRŒžDõ³–j<(«Jꑈ;ž>}R=*S¯gˆLD^"ÒóPTÕ´ÀU ¿þúòå�¼¼ Ñrõbö¿ì];{$;n='";in$mæl¯#;Û¿oGëû VŠvn$ j2‚€,V«5ûðóõ´ªªIx¨¹P…aýZõ ÀçA³Ô!“¡$^IÐ`ó L˜.dÌ)ZŽ÷…ašˆ\+አщ‹8 EXÌÐ.ͽY,×nÒÅÖÝ»¹š^¡jBEAû©¥6Z°Î­£`rì4)ºÙ²)ÇÂÑ_•”Žîn„»Kæñ.}. œ…%4‹9ƒ;Tló‘‹“Â-$øSèaC¦õ‹„j1Õåí¾#”–žg§œ6Ü»Y‡^HôŠ»‹bçxòùãzzšOø@–Ù»é¿a¸~cŸ¿OæÑ?½WミœÞŠ™&pïšMCCã?Ú±ÏjÒ&Ôÿ€úï‘ð¹#'M÷›U¢o’/-€ïû¥/6M¦]"ioW/:JY€÷Þúþž%ÿáµRD»­b!6Œ£I:ø¥f t)/Ÿ_v‚8’„ÉÔ*[i“OßÑ ‡@"9Óº¡\hT¨8¬C XÙ.íùùÙ€·———¼¨*<zܼ¥I…\š\xè²Bè…­5Lš¸²¶ççç¿þÛ_Úã“vSUí¦W·>5Q¢…î2àå°f½(æ‘+;íL"S°¸õU„?BƒO³œD ¤2ì´ ï Õ¼ad…$Ty.¡{¶P[Xíê¯:s–Œox3¯Ó‡Q(kkF ¥1J˜Ä9mÞ5ëLÁœ|HÏOO¼P æy®{7Zó«Ýi@Æq}–Ø þhÁ°OWœξ‰j³:K–!~]þ ¶¬ßÓ„æ¡ÏtDļÊ{ÝM]àx˜xþAM€˜m=‡öô§ Θöpªì»³ÕxzïúºÄ£ä[î-˜Áð› †ë–z¹Û|ËÀÒ¤B¤µîDõÈÁ²#l IcekM.Àº½™øûýÏËË‹u´Ç§ÖÚóOÏí±=ãùí³Î7îBšßÛ—õ{øQBŒŠŨyeYl.¿%~’u÷5 7Hÿz {ÔúÊ_9ŒŸãÝoïèÎð;çÅíä$K÷„#f Š€“pDÞò)YG}Í®æ¼?Æzü™3ûîñSŽë}¸|"EÚ…QS•NÑîj…²¶‚ã³`£ŒžAAqÐ!C¬@ܬÏaõiýF záð'%>$||°Ç¢;8±`‡‘(FBŠ äª¡âØ‘'ùËys8çâU„í]'Ë`I`°ÍÍ_º¢ÐºH›-tv²¬ˆYÛ7ûVÓMô™XáîÇÚ¾ùâr2Y ,ØX²Ü1ä–ÏùÆY“käÇßþ‘|Ù`øvCúC9ìÙúõã³Ãëp7Þ]ÕUŒ„%U¥4zuÚ@»ÐëЫùUßÔÍ6½öÛOGSÖòó÷Í»Óøûò/“Û#û„ÊÎ.N'{ÈŸo¾ÿRn³‡þõòÑ@~`*ü0€ÿ`¹ÍÙ›òMõ©>Ž]8éŽ@â(¶-êy§@óô9fœïÙ쟻BÃOU+â$©¹q" °÷¼›ùˆò<ž*š@ÈàŸ<÷Úá¬Ó»8-ÎÍßä|¯ÝÚ"•±µËí÷ ¹gÅÂ1ëi¾߃Xs ÊñÍÚòTµµÆJ™— ÎÒ—«¨¹@ôó«üôÔZ“ u¨w‡[Å@s౑”’©³XÑ»înúZŠVä±AUµÖjkŸÄ[SSëÜ܈îí¿ýçÏ?ÿü3&þк?ó)¨,¤& Ïz&Œà¦¨úÛÛ›¾¾x~~~xxjM»›êÛ¯¯¿üãíïÿýË«**Ÿ>=·Ç¢9W5Stõ*Ì­ßÕ5u–Žåýx›¬"…1íþ&Òx¡T±(A<€ê¢$ ^ŠH1}{}H•ÖÚÓ_ž‚¼çåõõõMÛç7USst3à!PÖBªŽaR[Õ{¾ÐÜ£f¦¹Ã4g@˜CVÝõ®ÑU…B©R…“:#ÆnèAìd™cV…•,‡…&³P°9¢ª¤t°ŠY“RÝÃå!5˜À2u4ŽØÐ<àÉÍs,êžÛ”»ÙT|â<Õtæi7 `œº§F E‘xe .´»ª~~mO¬Ò`zUT0ŽI7€RóÊHAa#–Ö²ae‘¶zØW@D>¡àÒ¼eÞp^ª>ïT€(¹a4ë§Í’”˜4œÐJw³îX}ªÌ:: 2߀ 7ï.açSPL. t5Õ¨~tôjǦF¯é#(Öt:Å µöïÿñ7Ыµ*M(•xl~55wUâÒÚ¥y)¢ˆ*8…Çè™]ÉH6¹4)°®É q3Ë¢/g3xCÎ[Ÿˆ†¹MµK“܇—;Ónd„f#Q»‚Izܧ•²¼ZÐVç|ó×µ›Æ…©“næ6åfvUX¥5 ˆÄÎdª‡em±¬ÞóÜä³ï>œÈ\â¨Mjý0÷i´‡ŸZºJ»¡»w¼~~Ý ¶ùÚ0GÁZkl­Q¼›˜L£7ü4—ù¢èîãì¡p'cžŠ’%pFÀãUi×ÕrxQW2¿O‡) @ÍûÍšœÒ7ÇëvĬ/| lÈñð¥Æ~/mbxøHVõKc½—Cƒrn›¦×¤âçOl­5ˆ¾½!¨.‚m¹S.¼olú—…"±èŒ0GEê9Oùƹwd9qw¿¯k¿"ãÝ–øõ[ÞùÇ.Á‰ônÛã?ÿ,@F[àø‡üŠºp\7Ó4ü¬£|î:¾,!–¿¼B~³ø{B3 Ñdá¥ÁÍ¡í±=|zzúôbÝQ³QRøð驉¨˜&µ±0w«ç©_…óÙ«ÊÌá*L=`Å¢„oñˆµšy¨øØáp­5© ‰ÚO°ÔÒ"dÀåí{é:qÈ¡¹ÆIix˜‘Á„ÙA€+Qv÷»c•kÍ,J),ÐQèl 1H„ûÙ’ž$ t‘*Ü.ðn¡ˆ0ÈÆ¡G ðt|Ìôíêèæ™lL!¬Hêp0c‚¾¶-ÿ¬¡èD$ð˜XfUÄ^¸²†Â=íV‰K #é¥É>ñߧ܉D³oW’L¹nü¬Î dž’%Žª?SÅÌk;ÔœU4ó2g+¼TLœÖ3opµ!ùØ38zÄÿçO~Ÿ™¿wÚÞL¶`ãñåLÀ†¹ËnýnIÑó`ÞF`±PwfR«ádOnÙ>¾5ý>t:Plù¬`û¶ÏlecÓÈý>¶Ë2wÍÔ€@+ô…™ù5™Wl {ÙZŠÐœ ¥>SB‡s±1ÝU#çÝœpÜ+Åô~_iø”½›v0—•°:» %íB&ó¼×Ö†¿þSÏ<ØÓn©`11Š €{qH›aêÌ…n0·éßuÞ¼ïåžYÆÆ¡ïÎh¬\„ùDX€ðîÞ´½62°ù<)W8pѤÍ3áκ\;OÁ¶ÙxÏýôÜ?x!†¯QÇÐMøÉ~oŽv·ÖN2š´ÛÊ®,™È*¬îžŽ'Ð f ›­8°Üy™7V1÷3±3A¼9lahq†ŠÌÈ€¸ÅæHÐ|˜uÍ\ÀÈä/øôÓ¼E9ïÿ`Îÿ29é˜Qh» _lQ£ÙòÅP6)‚ê<ï„ãÙ…£ÂùÍ@ÌØÝVeêtyL™¹À $}ñ¹þp“†bè‚{Nîn4“•j»¿z_™„Ó˜ÛŸ`ܯ¼5sûáŠ-ì½L›3aVŒ=báQÉIž¿â‘¥q#5aáùõ“Y^6áäªB;Ðõľ÷âXž¸\ø‚0ÌÏÀô{†Ca3Ú'ÆÇWç>=~¿ì“áfÁúöÊ–LŒ}UŽÄŽE‹Õ”%8Èg¡Äááâä°ÀÉ/z «Î6Zw¼k»4wè¼^)¢ooU£h‚™êÕÝBÃ"jCO6©UÐ\àw(Ï;>°ü\wäËÐñdÕçæ=¶säh¡¶°ñâ¿ñG)ÿ—½k×’#DZ™˜–ä•Ö[oçÿ¿F²F²Š°Š´îŒ|”¤îéÙ9½…ÓG•$q @ŠjyïyQtÙ­þ¿Áéß’Ûe*FöÈ_"ÇjUà>»-&M×On“UaUÅxº”èöáw¶“g`›Á/ªO¼FGß4¹ }x8yÜ/ájD«ª¢íÒ®_¾ücÂz×¢âL¼Añ}¨ ‘\"+PÚQ#îØŽnN ÂYpëkU•*˜ìž÷w8PÔ¸øºæôíDt==SN˜*¥ ¦‚ÝèJ€®î:n­™‘ 0(‹‚fÃ`QVI} §#ŠÀP¡áãBÐM%HïP¨³ª†Šª­5TÙi0'™B ðڃά“-hU!ÒÞÌ~@uvÀ0•F1jkª/DÁ·,Þ€7Úèpµ ;ؼßäùð¥„VæûÐtÿ Qj ªä‰‚mH:`§I&µ¨A C·THmM¶Ü­%‡†Ëº/ÛÕrâƒÊé7–róë:ÇÕqžI'|V2F}?Üz´i µë‹A'RcƒÞ«…³7ï“_Øx¤ö!>Ÿù3ñÄNï¦5Þ]<Ìl¢rsJºX™6Ìè4‰¡OC†,ºæ†ü®æu0£>,W{œ ¢»téàE• ©"Ì ©ˆß¦«Ýô·ÈcTE ¥ªH¤c…{8!vîð9'f§Ä T d¾_ŠàVÛvâé¸Ê!žJ³îkI=ˆØK]ëÝ1½ÀPïBh—˜V"‘Y+ä"_¿¿.ë’Ô Ÿ Ff¦€¯þÄ“+›ÔÖû˜úÄÐ)ž}êlè¹ÕÃà­:ꬹ¶(¸~÷Ç¶ÜæG£b›¨b¦ Ö'l\òú„uQnaÿqÀv7'bVBÒ€¸>²Ї¥ÅÈA¡ûÞí™Çuaj’FºÕb¤™áâY¶b‡ ´”°ùêæÏµ¤ÊUnF²ºd¨€ž©1š‘4à@¿ÀB¿<’)¬N8ÚŽî诵¬åÜ¿Ó@î߈[Ynd>úÈ)‡˜Û÷R‚±L1Q­À XiéKŸ&ÈŒXñPÐAаêÆkéƒ4|ûþµUmUÚ¥©*ªê·ïßú 1ƒF¡ W›w\»Õarøù}çËvž³Tp»"•¬Ãw#‡Åê´’£Ð•[ICC8êOãêï—.ИhaɲùdÜ\½Ä IDAT¼>ä7Æ?—cìü!ÿ>qžØú,O–þÃ!é”›GÞžr¿rìßû|F^rÑ7å|ØmËäñŸ§ëJÛú^C<Ó¬£·W½~¾¾|n_þû¿^>_û—/ýGïß_ñÖÍL€Ö¢îé–Z'ò!hH¦-{ÇÃ0š@z~x(œìF7k/Gä–Îvñ„R𗂉;?Ó»5@ŸI¡À ŠD­#ë6Ù‡õA¨ÖFØÒ ‰vQQA¯Ä3  :>¨Ò€£`‰ÇÀ@TTtЦ†ÚT9¬ è t¥ÛÚ>;X­¿õ—yEƒTm׿ Ÿæ°Íà­¨+tíªÿ¸üÏëç._¿~ýú}1…BñÆp Œ+}z*%„Hìîà0Ïo®EEÄÁñ^òׯõ••$\¤B¼¦qÔ>qå;-CP’¸±édËX~R1iŒ9;Ýúæ=Þ0ÒŽ—\lšÖf0ReR.²Úƒe4#a¬cŠ j+M.‰72Ið4LH v´-ן0Û<æîáÉ3¼#É??þÝ&,)O‚#Yýò}-LºvbgX.Ñ!(ÇŸ¤Épðç'5FÁgYè³l2+d.Èß• Äóùim°*£3¬Ee‚å‹x=Zp³…«úH´Vå~m|G²W½HLøEUÌŠˆz @êˆ Å••ñ5ÕÝL7daê…6Ö(ÂýžñûÈÝÂ?0<ÏSLê›u‚‚o´ ›”L¡/@IGãæçôú/¶zædye:Ã=«ÓÎH—í…e8®·¥Có¾ÌfˆÁ4\’«n€Òvÿ£ÓdŸ,­ªÀºgÖ\9¡ÅpdhÈHx“o[·ÝañÆÔ= cEy!mÅÁv³xвNÕS÷zpìÌ&,wôOls ÐãeæfRw£!ƒñä"6½Ð€Y˜à}~ÙÁŸ—lsþa‡»™YhÆXìè×Ïp¿=ÆÙú}â¼g¯Hºæ{èÄ1©m·Tm†Ë;½s2HÒŽïw/Â&N «*hºMC K„†©¸õÜ“™õ¢R”‚!ñúÃŒì£sBšˆª*`f”aZU$)ÌŽÆ [}ïÁj}Ãù‰$ý¹ÉáÙ¹ÛMSœ9c8™lNÚiÁ},’Ĺ[­‡³ü¦o'åþÑþÃ}ÂïƒÛ»·à_%Ñ·Óð€ÿîòW±è[Öûv÷oéùû^dÏ}òhÚÄ"/·_Úù€GëBÉãŸÁò]äfßx|ÙØžG¸#<öÖÞ:Z!UEõZ´UýôÓ8³ADKzÞ$÷õ(E›Qdi“ðpQU!€ˆÑNa^Üù9oÂAVÜ’ ­¡IX™QD÷ªôõhò0– øfžÜ¨OßI¹el+¡Ë†æ5a2Ñ„ðâ@{_^¤5iÚ0!•œ¦UÔeVeëR›?‚0ü<³A…õx<êE¤éKA¯ÀDyäÉ(YY­]Úõs{y¹â"€ÑˆWôÑ bE¥„Ö•K–„n¤®Iú6{¸›€íalæsEnRϵ%5aã¦è$:°Å9CgrCCrAÝÛ &ú%mâD9.Àæ„9Ü#rh<œ”šŒ†¬Æ¹Za4ócЬhI¬i6Ø-Š*7iVDÅ0iÓ4ì¯l~7o§ß…²çÒ3Oêí×þ¨¤wWWaÆèw.°"·™¼”ýnÚï²s9ú­¢¾z brþ)öoæ‡âª¹’Ä+¦Ô€…Æ4 &lÕÍ%t¤-# í~ñåyØå~M-XŒG줒ýjØ/$§ÿí¾š34#­ ¡星^ïGtM ) ØQ!³ WJ —Ó¹ÁÌÌêÑ{äNÆÞêñd«KÛ4vÏÛÔ{ñdQa?²IfU•dÍ#Ýzå—-ê¶ÁãÅ›Û â„Iu²4O&IÊHWhpC"¹±:ó=z5ïÈ3(]¯PrmWW!ó]FœªòÖ³»r¨rËðõJIÉTñÐgo?p þsô¹jà&²Ö«ãæLn]íßš¿­®\Ó­,ø-ËÄrÔf‹mˆÑKpR z¤€ADD m* ]ˆkoß´kO¤ÏÜ@±Ì‹:…‰#5ô1;î4±?¦ßó˽u§Hà}“*Ot•õð‡ü;dÁKàFO8ËÍžð|©*‡Âz–ûSr{¦fIa=jGó ßŸ±¾h$ûñåiÓÀ„Š˜«>oö퇀¯ZEjS@‹²vTmI•gïØt‹U9éð*ŠrB¸BÑ©–Y½$&RUÚçà¤mHö§E(1 Ãu Q! Áâ|]LØ„ ö7ëÆnf6ˆÑQ ¥‰ã º§€ÚÅÝ›^bXV×+-hÚš¶ h9Ľ6ºVi*R_®© \‰×Õ`jèFZï6ˆÞÛ§¦¨*Šš Qª8ºà.hPqÜ_ìbF£—PìˆÓ°º¶Wëü¶%»˜#Ÿ Ó‹¹ÏËQþê ¢"ÐPT½âw>ík,"}¨È hþvIU÷èx¶a/6KЦ12U:E¶Û¬‘°ƒ`φº«ª! þƈ%>< ‡ V-ÆI&æ± ÖFƒ*¦q$ϘÁ‰¨‰Â»éLäçøu3þ¤8‘Rn“ß²9E¥*\Áò¸÷ ò-9¸Ø>¤)!}G êÖCå(S Šb Hˆ –*Ý › B  jîhÑÄç˯wªD}#þÎøÁRïLw®ƒ[0ýÀ3uM0„Åšh÷…›ÑâÅ܆ƽª?‚¬LÑ ™M€ÛªåkÕÆ¬.ùÛ¹¢åmì7¤vFòÜé”*+ºV/'}Ów8u†jßSu/Ýæ‰Ó™EÁ]!´„£aÞò62`¾ú±°Ûv,¤ °‹©—Ç Û¨=Ý”_мân¶XŸiíñk\3¿ðiÍ‚"RÚžÏì\ê<&Ùsß°#C•Šq†õ8ŸlÃ|’ýP˜eóDŒ¾-¹ Ãiaml>Ë ­€“Ý#ˆŒ¹ê¦AdÓ¸kEŸ¤kydZƒ˜)Ø•YrÉé~Fõ2•€6hoà —#e´m™>ü„Z` g«ÊÑQWÊ;F¢ªÿ§zæIn “`å¨àôBÊæ5Ô†iïÖ{ÿ£÷÷Þ]}²ÃtX¶’­=؇á¬3hïúÞ `>zùÍqê >Ìf”7LÈ#4ÃD+4Ë@*›Ô´'df~ «eÝ ƒ²6¡0ÄHÐÝk-DH…a¨šÉppƒ­6¹/§ ¦}I|‡ÛP!k’>IWsbBîè{$"7U0á¶xÙÇMHm¨¦ÃËÀ m(\¹­B½ÿáÒM£á+XÝc6´C‚ýŘW`>jCUM‡SˆŠ£|Ôîùn‹º ììÓ›-è¬~»š°›ñ!™Œ}=ÅÌui‰Á2“WÎ,Ö:Ÿîˆ:lÁC“5–5õÈúCÙO3›É (Áõõø|º¤ÄU§× ¤! 2š©LXREH›P Õ,?nQçl Ž ÷õ­RŠ(м0rE×-°ç¹R¼ž òþG÷‡‚å Ö„žjGÅôª•&/‹Qâ<ŒL;h‡Q}j¿‘ÅqCú®‰‡™kÏ—b¥íajÀ ¡GÙØ3kxQ€"©Š â'A:‡€Ÿ,Ò:rÀ—5ßP!#.pM*+J¢Í¶þø^Ù,rNÖ³~µ¬ ÔcNË ¨ ,4O)'ÛKcm–µŽ½nìGÜ $.%ìà–;B—çXUR——¸(ÊGeÎæÂ„C¡‘=±oÃ0ˆ^«ÙJ†t¶­3e6Ê…ù½Ò>ùu­i_s¹Ò¸$ËÚ5ߺ‹WtÓŽ‹üÞU=ûj?l¿Áwä‚€©6øµxmùË 1Ñ©û×›ïu—ÕIËbfDÑËÅJAÖöZxŽR-¸62u61c%.±YâšØ‰X€ ë³ùÒ~ûö¦ö¾²6y!‡Ù£ÃLé#®–õÛ ÚGkí‹°}áƒ6­CUùÖ»uógÿõ×&lÍsß­UX…’Fà’.WŒM^ôMüƒß+—… ׯeÖØô>þ½§±?-v™Ûô6`+Å”˜…Ç} p¡s9Mýñ8‹oy~Ä¢èóÒ]Vb\«åyˆMu{2ŸŽçnì~ü×[E¼àÂÖ×8fÀÈxÿz{âFìÝ FŸ<Ï’íy—ŽIèl jÒ'hõ'-gûŸ„=à¾ür€µ¿Ñˆ$ýéæKÇÇ'!‘ÿÓ»~ ¹kPÆG²üi›þâÃqt/§ÊU!=Š|¸Í©†8‚ª ° /ß~‘ªŠÚ ½?ºönm&]U*]dèÒ«wõ·Ý’6(Ô¦YrkQzTc•|ÐXvê£ÁÌð°ˆ ¦ò‡/¬šï„,¡m›-¶ëé‡$A*Ez7 ÷Þm* èPnK hU(mEú 3Í7´Ó‰æ$±¢SŠ3©a1ØT°‡rÀõ¨û0`í=ùZXÙ¾6V¶Ötô® ÇPüÖÒ.* ° %hÂ*¬Ò¦è€5£Ò¤Ð%Çb†ð?=¬=Â1FQ@I£Y˜Ž¸ß²"ª¾»\¢hê&¹1ùóÀX -l\õ€•L%D }8ù܇wíÉaßœ^¯Þ²ÂÎáØÏ à„ºF7dc¹$•Ïgh}$ªG†c D³@ÁRçìãѱc²]:ö±Í/ Nc¿9¯ËÂf€ÿx¹°ŒY¹õ6ÓÖ7-:†è­ë árö;"ÎE-pÀýÂ÷Kû¥£XþÖ‚+-qÍëUX›ÐÁVƒ°p¿úg–FpL1LëÓf!Ö$÷fk ±Ù‘ ^™gÒ{*gÔ9¼¶®wõð6^‚S3ö³¶í¸°¡¹ŽpP{ÖNDèð@º‚"îTøÓS¼‚wŽ4·Ç¸ûmë´†$F²8žõãùv.ˆ1oÍt7uücXïäÆXNºÓÑ“5ÀLñ4ãÉûA~4¼óò[ûQžkµåÀü8&‰¬î®„—À’Âö°¹ù–jaö(S‡æ(tîRi>Q%jSQØÒé3@1aÃ3’Ì Ò÷Ë-8ƒrËñ¾!Ƽú8j?™œ7Ò}ïŸÆÊnÆÿ<ìØô_Ž©ÇÿÏX¿Ð"=§ amà{þŽ: ¾:M´¯ q„i¨ ûøo[÷’€>"2®-`ÖM™n½œ}XŽ©8ÉkòÝèXÞì¥ïÜGâ¯3Ï0ìFë€qZ€—cÚ‡¤` €§v¬ -9 ñ ús]·ÿÿâ­·¦÷ñ/·þÚ/øWû»íÏ$Ù&–”äÝîZæÛí3î¿*Óv)[²ÿÙáþz;vëËÁމ…ï¥+ôywÌãi±ÜWðE¾UhmTyÿþÖöööÞ¿¿‰ Íšóri¥w¬ž6e`á@é ¾TXe÷’HªŒâOaÈ » ¡…˜¡Cäü@×x<®pÒ‰Þ óíuàý{ש¯ßûëï¯ï½ D«WâÖ@¥ `ôÙ#Ý×ÅŠ è¨ М²õ€ŒÞÛ X3íÚQ„Ö^%HšT¨ÃÜûråjך¶‡õÑu¨yç¾Åßþ뛫Ù@ï]ß{×nüÚøN•b:„m°£4Bc5 ·0ZÈ)Âp,àá°ÿ$¸|â÷”IÃó{ EÍ‹[‹ûbˆ?à;]ÎJMÚT£ÄÍ3Ãpg@˜v{t{lR»sÄúÊA-»Îl…mêÜø-Ÿ›Ê*[±Š"âŸW‰Úzïðh!DÒPð˜pWድJT ª‘0=?4"Ç)اöýÙžØ;á[ºÁw]Ì‘¬›±3E’ó{fIÙN [ç*föw2ºƒƒ0º<ðê{iRîCq¦;_n˜Õ]iË#¥ ¯ƒŸˆFù]à"d+Hq¶3ŒBDXL£ç YPÎͫϗ ´— ÀëÌYW³RËÊ~9NžåxóÜâÓ]7åTäÛ5•È1¾xb8uh¼óQšE‘©htn–¯BP\@.G[®Ñ­Vð¶™–¯É¤•g^|ÙŒ\®Y·dÑ©Ž¶gfNÔÕ-Ër¦â·A­–õØ<Ò•Õtóëþã f>§ Ék̨2Hè¹ò•¾‰†/g QmfÆÄÈaO\ö”!\±ÍÜ×|¿z‰° è›ðåEDHJË%׆B­Å Tè4ºúÕrnTÂ( UÖ»IU¥„4ãLeí ˜jˆx{|õW6W€ûˆ}îú~Øìn÷Ñ×õeù(”–%-®(4_ð?Œdâw»Wžz{ELàœænôÓþýUþ Øôgëÿ§5Ã’©ûåÿj¯°{5ÑO–ç,䨷•ÞÂmî\—éó«+]GÀå‚—ÿ•öÄ'¿¶{ΜٱÍÃθÑé::žçVÐf·¡ý½¿½½ýþû«~k/­½4’R ˆä÷A\y'º®o˜±%SS šÿƒHÊ‘Œ”+£ Å´÷î´8 ˆ eÅ®ÌaiЬpzÑîì–³ôGï½?ô­wæ³ÿÖpÒÌG4e^ÃyP Ú@Q÷-Mt"…—«Áu²ªø†nÓ::Þ´÷.•$~ûÇ7‚ð¥IkíÑmØëÿ¼æÍ¹X“úÐVZk Å%µØ_؃ÊK«ÐA©0'ñxþ¶_¹Û»Œé€¡ª D-kx˜zìK„_œ¤çã8‘Õ‰’D0 ukü¬›® sÒ¸³S3Y—æaïÖÕt¨£ø§÷ëTcÄënÓÚÅ–ÒqòYwÐÌÖ[׎4OƒF»ŠètK n­Í”nÀ0ŽÞ=LÈIuâÈGWÁÐã†ìçªÿïé^\Žô^–â8e9,áó®i:>Àé8qõÇ ¸ô6ù­× Ô q¹šnêŠ4‚B/î‚Ñ™z3­|ly5³¯+Ì–PÒ#$r„ÃrÕMRíåÏø¡’cÈ`cøo²Æj]ÞÉ,ÐÓí‰[F""K ™eH:ÏB Ç&ò— æÓªˆ‰‚w–[#}…ñ3zÞî 9€¿J÷?œ~Éã#Ÿ/?²¾_^ó6½¯QÙ=+¶FCBed–¸wšR‘zàT˳í0׳:[–Æ7ã9cÖ‹å$8ÿ÷[hÐi^ÝWæŒÀRÀ$«Èê ÚÄ¢­’ªzbÅ‘wØDÖGF§ ‹ÝïÔlïûfZpOÑ«™¯ÓÉêxYÞŠRìÓØ³D3Úå6Íîc{Žß<>\5§:0Áð\»@*ŠGWЦbRÍ0i€‚S ŠªªEÅ>À—Ñ¡øöµáEèV¨"eë½U4a«PˆÖö­^ÐÚ<ëdñºsjyd˜Á™7¯³°¯}]ôŒ9pmÑo¼ ÜõeD*¸Ê4À5 £KR'6À3+ÀeÒ÷Óºwë”7ÜÏ]žìh׎ò8l˜˜n¯üoËûÀ/øWûW´\“ÂJùSÁXu…§ü.¾C4ô •±îïXžì÷>>k†‹\ÁO~ò„*¶z¹|¬ø% T"‹sêPý½÷×¾õïï¦úúûëëë+Tñ0H¾4 Õ,yuµ}§šs™eáÂN.«]¨^Æ ¯ÄÝæ¡îrIÕ ˜È£‡HÆyYî óޏn£žF˜§~õÞUߦªÝàTCzÅ<¤æª3ˆ °›YÐSßÄ&ZÑ7‹ ¥æ¡›$\ÚÄ@°E]åÑ]nÚ ü÷÷î_ö+þa­5µÈ¥Ô#¬!hH!›X·Dím(½X¨©NDYј¥™ýeærÇÎ×òB¬mÂH¥a¨WˆòÜ¡V¥½Pš´BTèD¦tÕå(²ž³me錄нÍ{ᜇ¦zHõ«,Çö,hÀ™ƒwü¿3 Á}ŠCüˆOÌSÿ›U‚O“[€®Ã„¦5<$›¡‘ÆáD|bEŨs[@¸+Ý£Ûaà å£óû`]Èõ'Ècþp1p˜Ák—Ÿ/×·ï,65–<›ù¬Èv¸µe¾¾`p ­(¶#˘‹›ç¢ã0˜¨ä6èé»|‰JcÁArq«›Ô—8ðçŽb[€ÒÂNÚ”Ê5y¨nžíDýoYK½E°^WGô¸³±¦ž_¹qÚcHÿykçN=8k½^NP`ôq‹J{^ûÛÔtª@ÔrW3¿é܇* ¬ -s´¼c&×ˉzO› ÛJÓír_<&¶ïE\Ì2ê”Ó µ÷$ÇØcÞ&ëtÞgc2]Ž[‡™‰ïìÐ5²¤l_ëþì¹¼Ž&¸ÓhÓhP¸â€o-¡ˆÈ؆=”U`^¬ðh[–°ÊÅH‘%ÔTg<ã6RWhó6<)£íws{¿þwùÀ{@Â)}Örl1^€Eñ2{²€¶§í@UÈ&±"…Ó[ §œ,‡Ùo€èP3Óá¼4º'£6ñôQ§wAeCð0í½U“ÊFц/“@¿|‘*-ÔOÞ" ÏŸ¯U% D·ä?Ÿ¦˜a¹t\ËëU?‹…®F|Š&ü MUwziBZ Ò~k†%ììý\»ÀÑÉc°?k?#p˜¤±,ÎuŒ/¾ñ½}¾‰ÿÌ¢ÿ—´_ð¯ö·Û ˆü‰÷k±l4Z¸ m‚ó%HàF²¬Èq ÿÅñØËmkÒWrÿ"Q #ëôsã8ñbšNH1¨õ'<}t˜Ž·¾!” IDAT×·þúúÚß{ÿÞ{_ž:M/€ ÐÝÅb—®„´2lª s³åZ¶±†·ÖjS3™º?Šñ¿ì]=—#9ŽŒ°HY ¬žµªÎ:óÜóö·ŸwîX7kMÉên+K¤…32)UUÏî¾½Ï×4úUK©L&“dÀínB1̺£ÃÕ6yPb—RÑ@ïîÝ¢ ¯ˆÂÆšÞoúY,gOvåaĈJÀ¡Æ™RHSµ X€§»A¬b×*$eþ6^ÖRÅ<$X­M?MVä’‰µ¥lVÝ¿ïZIb°;0 ][~oëª!Pw³0,P\bÕá"u†ÔV`zcW¿GN,—) ² “ĵˆšRR= »xwË|”åîQÅ\©GëaL]Â0²eQVøX›aDöîìÂYö§OvRÙ ú½­'»8Ÿ)Zl Në~ª+³™;1h %}lÙCR×µ‚!‘wæò§Í1• s™.K”szçéÁϹ×:Þá¤=ÉÓ2‰:Ì †´×¬œ´X£å©¤®›si8 9ÝÐZŠ>[dJsÁLáûÄ"ÌÚ3Áö™%IÐ:²všL$?­9ìŸ6BÊCÄ“¼î{&¾¦`î€ß €Ž(„fé}q¹=OÖØÔÍ0ôÉr9VwŸ#ð¡áçôíæ‚²3ôz­¸y®ºj'üʉ:¹‹ÁdÈd,1±°sžH¡u÷¹ÜòÊ…ô‰>ª‹óGsz¥€Z³bXä$Ë›=™çOÑÛdJ‘^k\V*=Â’{œG0ZDÒN2K.oh…áiŠn]ö8ªOéûþÔ¬ú óD4Ü|îE‘7{çC°R‘(‰\_C}ЋÓ)!9n÷¼ûV lÑywX7p‡gëôfÈÚdLŸæŠåš®Æ<ÑòÁ¢øâ ÿ ßrÓ¶þþïKUNÂó,‹ò¤R¬ÍOÈ”á»Ã¡s¸æ®XÚP!UfFóîì†ár7¶.#›×Kˬ#]C„ëæ‡¢«´/ÈBÙ #63•»-´À†šCüÁ’_·ÚæýþÐþ´=]eÚ]Ã…£ÝÕúóOˆð1TÂá´Zä¡»adFb³¿òõö×4K¯û¼ñÿÝÞïÿTcH{Ò0þéÿlÿ˜ö¤‚þ´LZ djÆ[r™×É0|~¡Ç³=ÓAåã=åäx nïÃõGÙ$ÂÛAçÏ2NÌ|•mZT²¦êÏ»©ú훾}½½Ý=T¿Ý„ॵÖZ¥»éq;"F´Ål7ÕÆL5~Â5­«Äs(RÅ«›@ºÅ}'n=€~ÖôKÍLüÕ!b‚šÚзNhÖ­Ûη/WïNÅåÒVQN7V>¤m0»rê¨òtí¤b†Â‚] “_ µ®èS|{8†ùÝ­›?oñm»4ŠÈ… p•àÒÜÑ`6Z8K‡ê¡ÊoҤɅ¬Òª8Mï À‚*.a«ºâ(Õ6ÃKÇ¥Yw¹EÙÅ„hUZe¾Y£¶ÁæÝ´wL•ÔX‡mò26L¨Ï/Êp*lÅ=È[º!Š`å¼\‡çkw›±þ¸Žö²¯OÓ[6¬(bí°bÈd¹i^²â‹Lrr"Q"ËZñaÂY6(ôì9uƒÐüìüY”ÉÁ1?)ÀxgrìàÑxN)$Dá§{¦/®Ë -wRU“D²%ÈÔœLàImLz,°¹évi?‘ù%êŸk?ø±sãŠg¿²Ç§;éÖ„ð‰UÁ¹M¬=|†ÎÎËY¡¬¯¬Ùï¨xÈì5B»cw p‡ˆ*»Ýß“o»!8Õ(gŽ•?OÛÙ6¸ê];ÓÛ:¶©ÜíL¤ô8˜§^tý$bœsˆ¹F°(‹Y|"D–«¯/b|%jtb«&p‚¤ÑQ¾7IºéQÙ¾š8ÿwÒ§yzÿ–-ÕZõUØQ¦~ òt‹vv ¦Œø sŽá ›úìÀž>j»ã“¹›DÎjÉÛuë0s‡Q"u3¿ˆçâ%÷ÉŒ‘ND æà°—öÝ0¨ß€¹q4ý¦¬žLx¼Q'¤¯áÛæç²ý4um;fµÓv†(`Wp Ø \½o+Ö+.àŒ°}ðñ?p?ÛS¿°wFæÊm ñÔëÅÚ£t¸þ¶.PRbpæ1B$n˜Šd0$Á %ÎôcÒ‰Pd'§›aél%'6‘‹Áe•bDô4J$qŒì>̦DÙô)D.\¹Ü Y?æç˜÷•øP LÈö“ùù$„þaû âY( Îû?¿ÚÚӢتé0ÜZdâ€)y‡³‡¢Ä´CÜlbr¶† åÚ®M^fvÔ·_ÕìvD&84*®5Ç—æ03•®€æs¤ú—×& ¥]y¥»wÅh»¨* ¼;Zwóñƒmâ¯á`>lghÃv¡‘:»@r¥ l{¤R®ø™ n2ëç×H@0߉~8äÇÜõÈäfχù»œÒÿ÷½ßwÀÛ?¾ýt€ÿŸ´gÄgg6þÞö b|ôšæßÓúø*&Ð5“ €uÚ^­UV%ɘí¨XA”± –UÊâ¸]qvè’?ÉöéoDæi"»œ{Êá¹Ù±Šw á¢)ˆÝN%…¨ÒZc¥w?¾·¿ÜÞÞÞ~ÿí÷·¯Ÿ—ëµ½þÓ|mž¡;€Vñ®5CT&;Æ1«¡Š„[Uô© “H!@@ÄõÖ¡‡úwp8ÌTÕà®fÿòϯ„ؽ»~S~SmÂv}i_„GЬ›w×NTo—†Šã›©ªª²ÖáÝtLj¢Ã›0„gŽŒ"쌼2}‰e„Ý U2Ï„³5±àÒk³)h•ÚÝÌiqÂv½ŠˆÆm~ƒ~»©ª”#Ù*¯íåå—kT6àw½©&‡ÜiÝÃfE«M.­µWT¨Ãôû®vh”´9v‚Ó)Øe"€±ÊKkZ+1\ï ˆ´ë¡z;ÔúYVƒÉ–zô ¨Ta%«8L-ÍkBI\Ö=‹<!épÈ Jôšõ¨²“Ãr&ßbÞ=+¶ 7‰Ü0,ÒZËù6{7Õ™d Á Z8„vñøíÖ°¸5w»Ãº¾vmמjg"ÅüóD$E«´ÐÍ%í;,ì)¸w ØMy·]¸Û¹WÀÑ.‚šÕ†Ãˆ— ƒ Ã="ßO( 5×®€M eÏF"ÖWï°áÞÒ<<Û®ÀJ©Î cÑE9ªéµZDK q¤¼Â ª±ç@YÛtx‚´ öFŽC1 B´9ÑÌ5’¾JÈÄhªô]Ý—n®§´réP0­½"Ö¸æRñúúzàøõ·7¸¶Î=[zÏ^RŸw·ÒnenØ8áÝ¿fJ”çÅÔ÷nfñJ{a„în)÷ åp”ØÃ ` q4w0‡8Œ"4‡]Ìt‡5!góîñ€D«!7=C¶µÑEn·ÜÎðB Xsδd“?k´È‰íqNêk»X® ›\öà‰àY⾟óJý쑯ðÓþÙþK[r'Ñß³¼b.’|“-’éü‡UVð׋çA¸AÜP3ǧ+dÈq$TL»1„éŸïv¶#jTLàI€µI¦ªfv‡~W=ìvSUÚPÐjkµY÷Å›+Úh6<<Ʋ? ¢Y¦i1#9I=܆iõ¯ëææ¿þǯúýpUÎ @þù_ÿ|ý¥¡$+«CA˜G’Çír’‘B_¼A‘t(Îáü\š®G`ÓÁ°r´ÊÚëâ¡,uP\UÂýÑÌ¡ TâÒZutÍ<Ÿ4ÌÊèÅ¥å Ä»ÙX÷EéÞ„¼4^Ú ÅÜbÒ4_9FwGq EüfÄŒaøOö®MŽG,², ,i¬îµn½Ùÿÿ+n¼]kº¬kY XEZqÀ̬RkG;·ºo Ñ‘º^ù"‰GR5À"„Jû:7¹¨†(¶¶”âjGÀ¹ð™Õ·cO'+x%ƒ¹ÝËü:¹³j‘¬UCW™Ô¼*h×h‹I»î¿A ÆUS«ÈÀ> =ììUñŒÕ-ò³=’ípe|žóú?xzã[ù¬¢˜*[<Ùž•9míg6DÍÝÝ!NÀ)s`OAx`Â'1<º¿˜¿Ú…PŒDõÅ./ª BEºê¢?h¯ìƒ~w¿‡o¾cË>"éMHWX~E• –l~ÖäöÅŠ.¦bÓ\#¼þrÅ@›™\ ý¾­[L$jWbxí/ÇpÇ»²þ¿†Ö­k°nYQ™ÝJˆVŽàðÆÊ×É ‰œ {#·X!ýêO~tJ[»{Ó‡x_M³ûáéP1ÁÆljõ0 ÷7#ãXNƒŽš)㯢YíÏA¶Yj¢"¡‘ìß¾/|U‘JFìãtžÙ§G¿šÕ™BÝC;ëÑΗ}.5ò÷­¸â9—–0ÕE¦ˆ$“S¦Ò)\3¬’·(«=¬5‘2Š@•ÑK§Mž%ÿ4ª 2#=ä¸d©.“±ÝNBá úܸ”Ýl®6jŸÐKÅóÒ…¢Ò¡M ØÞÝ»G·pj¯>ÀA )†k®Ê¾0*çžö M±öŸ¼Ï‹LQɬ ;cQ¡ïQ’-P@ÈÀÔyš¥VU°Ìó>o­©BœË7H¬²rÏ*õß‚%¿Ž±þito‘ßDæ9]ÑM¢#»B‡»ßèÝqw ÂtÀÌ^~¹Ê'c˜ÿý7Žƒ:DE&´4IŒà šT&´bªÿA÷/uåü ´‘^ݬAáX•¾ÓRÀ¢ZÐiÊ_õrVר'†Jvµ`Z©‰ÔO½ŸÜÎïóë›aàüàó¥ü€Qb±~À?ÇÏÎ 9))ÕEšj¢(£ d—Ç ‹È|ê‡ä’ù{XN»fGU!0UO²Šòt¨Õý•‡_'] * Ý: |ºÉETÔÝ·Ío7ßÞo·7÷;9BD- ÛC‘‘€OØ%ì. íb5™É%—% ‰•áN‰# øtnØb‚ÃßÞÞèƒÖ¦fbÓ®fFÀº†DÆåjFnYžZ†úMFD«×"©Ä–V?}².`Êe1H¤¹ŠÈSêq¿U™‡K€«‹v}pHó² (-%˜Y¹˜|2qá¼#îŽ ¶Íݳ”ŸÍ.Z’ÞýíÍ-Ü¿˜˜½|~±Ï03Qy‘—ºŸ¢~wòS#Bº$ÞBœÀ·onÍ+J Ö¡¨JWí«·ŸÚ‘#¬›ŒSûXîéž.z¢\Vãú³2ú‡½ÜF§êÉŠ@öõ"Ш ÞWÜž5g"ÿÅéŠbV›t•‚ ¯ â¤Õž¤Óÿ¥–[6#¦e'êd“Q49ysßpëþ™m•-,~ûô u¼¤¡PÅ©]—×u Î!ª…®XpÖX¹…ÁUŸ¿E l3¶-|ýåÕº½üò"*6á™{ß0«ªßÝ‹Ó "¯ÿõk"®~Oƒ¬“t³ìõªé÷ÇÈ}¿¾ZÜÉ‘Âi°.×O/v1¿ƒá[–¾É€ Lsr.]Šøp,Þõ óâñßôÛŠóšA®¤IB"Y^Wô8W¢„(@{¦Ò½'wX›ÄdbŒ{wb`¡:™xζ¬\Ž™¼ÏŸšEŒÈ_X¨`ÆîôÍ___­ÙÕìõRIͤh%C;[ô%I$'î¶Ý@WI3[wY-FàÄk“ª$º˜A®Zƒ™% ‚Ek* ˜ÇýGî-Õ²øÈåSìî¾&âyr>g÷X¿9÷œ~N¾œ1ªRÚXyÌZ¨àœòS¬XZ8áq+>í y†‚Ê2Ô˜ˆ´9!-Û€Yý~1Ã}xÌ€@Tb†8<;œ]$HÙÍõNwgD(p§À¼"C1”î¼3î#Ì ‰ÄR'¶Nýó‘xøÌ >T–.©Ž†ihò;¬¯Þ÷}ŒèêwŠ5³š¢˜­Äe®;êÒC@z³¢)–¡}µzjD{þxèWðèÿ›sÿ×QÖ!Ç×=ꎧüCÈÏþàÏøçøÁc‘ö6â1³E¤JCQ ¡ôi¬8uGhK½]?Ê©@d@Q¸ì?Ã]1x_f3k&¿‘-Û Ê©’cui¯fb凕7æž¾l„s{¿ÝþÇ·w/åYµ¤rÂWÎ700 w¢Ñ" ZT:£„¯VRi’“ÔÊÁÈÈ­ îðͱZÈØÅØÕfÁ>v1SàÃq¯KÉMܺƅd”¢É<Á8ÿH²’ˆÉ˜Œ ëLò¤2³à±á>YªKÌX1ëCS°ºlÑN2-2œîJ§Újz1»* úôLE5õ«äæŽkÅÅI{ÚpUµaÒÔ®Fwõî‰c„$ƒq„âì…” +Ƹø½$5€ `m¥}%‚¥¦-Ï`8Á¢j¬Ñ \jpræ8tÅXN@¥¨«°0&E ¢Ð¬ X•–Üëå²ÕÄÞPq¥ÿSŊƒ`È”Ôù’€¬§¦¬%&%:NÝ_ö…"¥á€'«ª0C‹o*²¨ûìÈÓ\ÅÙ›ì‘ÑÓËãèš¶^%OšXyOòœœƒ¤¯ü‚N&àóxˆthyœ³,¿ÍöÖÁÕY@º‡»ûÛ»CdõÏÔÖ‡”·Ë_t¯ßn*"/Ÿ-îܾøíý&îD4 wÎx»×2—.ÚMºnI_ïfÉ>äßà·{0w‡ˆ~Dõ"Ò×íhÐjV€R…|ËO‡o5|’]ù¸)#8¸$—XËD»fuDd‘5Ž'´òµbåHâ?û²”ubrAŽÅ¯Ûýù“ãt:Bö{<йÓGÖs‡èš­§ã%47È@XSŒˆÜ®ZÄÂ'óóšÔ•¦G Hz¤\Ö çf¢â§;¨mÏ­@´S(u}¹W§ ™„Ò4¦AîÄÕ¦º¸RöN¤XªåQÆÀ¢"ÑUÑXÕ7Y‡²—4Là€HϔƃԥÑö»i[å!"µ0òr˜M.†9/WÓ®µ®¦&j›Ïð÷›¤žpŒÐ‚Ðq꘽Öráº×2R—>bU Ïݨ”%¢ô«šIMZA @èSQeÞÏ–9) ûѱ=ÖJÉmµ°ò¨K™-Zy!¹Ÿ°ˆšgì@–ÌÞiõCßõŠœ’ù–dеÝÊŽ‰• $’ý TKŠñA)9 FʃÃL”t™ ³;`¶Š‹’û£Ñ`3| H’±Im˜Äðüº@Cv1\Ö.y =îÕ·Æ9³ö=1ð?Çs&t˜Òúk}ã,\µ"*‹:ÄÛJäÎý´KëKMz™oòxrèÎ|÷Õ=N×ÿ˜è÷{BÙgœìÿë~À?ǵ°È©\ÂzQÍ2àÕáïËkç ƒÓgUv`æÈ½bŸáŠÕ+pV@ˆÁ²Ä¢º=œîþ³¥–.ÖȈ mŠ® AÑrïq{ólû¾½ý¾½½½I7LQÕŒ$1 X:yéŸMø²ëñ‹‰â%` INXyî…™Ûi|ý|Ý7ѵõ"Ûû–<±¬Œ*½ÁhÊD2Ö%£N¹älD²x9—ÙŒàXV–I#‚]¹4PbTµ Or©â>T% }š—rOy£M½ÀíÐ!J“ Íê 5xøß¶·7€áƒœñ—¿þª]Ä2Îí¢ :x»ÅǶmÛÛÛÛëo׫©Ùß~ý9–P €yôÉHê5'«ãTÛëc¹ßãXŒMmKT³A×®Öa­*ÇšÙ%ÖU)®$1‚%þ <`eRðŽ,’áš”LîhÖqµÔšRé–sDTÝx}k1<‹†—€¬Æð ¥¿ÂBc² [©ÙåÈ^u€”5m²GNrgß,ž$|÷80§lKÇ7bˆÜMZœüIËóÄQýÃÿÁzPqQ^Ÿ)Í Ÿ_¬î<艶ãw)“ãî  …Hºï!ÍvìK^»™Y칡Ì.5ˆdÂBü‹‹™JéýÄÜRcžÈj¢j*LŽˆVg)ȾSé¹:Éàï¾}¹ù×ϯD‘¨cÒXÐDê²&ÕV§ S£¡˜¬€0“ºt)C0Vé#¦uö3µ‰>sþÀ‡n$3RÕÃå§ó<³…É!¦-D4&´…d]tc²„Ü]Ú\K/ˆçˆmSk¯óÌF=™á=Š›p¬t³ý­À(챪k`ËM#ÿ°±Ó)cê|WKX$¤J©+Ș@£HÖN#F ·Ç.ÚL$ÿôÜ¥ Lc ìì’üçØe>@üÚÍôA»¨uõæ2 YÐkbŸ^öÇ&"ÀëaèjR)€ÛûCR·Qw¬©»ɦ…ˆ2ñÇ éUŽ.˜Ö+>ä¦N+⸂*è€(@iÂùxq N?^iÇ+ûô˜Íÿ.è‹•xý:ÎQ}Ž&ΩÌún¬8{Ù•oM?Ç2w)¸v%4&4 ÄrÏÄŠRœMÙ%̲#H“µó“‘Ϧ!qák»¢.†&T3iE`ðN(i¡„ÙÐsu<,=Ý·oF±//ÞÀ÷ ò *€&1 ²Z !ë°vtEwFÀ‘Û.Ͱ»:+‡µ{³ºÀÞÕ™9—Ðnó¹giÿ$þ¹O×?ýþ{æ¯Ñ7ÕmóÝÕQr̯ý9Bø7DZµ†R!?àŸãÇŽ6¬É_tÈ¥!OÝáUÊ«.µ ºÂ` ¸j5Â*ÚšÂSä&µ#äÉ(&¢?VÚÔsž&JÓ<C¦ˆAí+O.Kᇤ/r IDAT€DÄí}ûýo·÷’K3T·÷ÝZ/Dë(¹Ñ #J9ÀïaÓp…´ô!TQXAEAG!Ú%+‘V^y§0Ó>™]DÌ´köÆñ`xQéb%Ë=qò½P€ž¢ð^[u/1 %³ N«hM¥*‰è"ÕGÅ{»u-Ä)h: < (4 Zè(|ðv§xĪ1»~z‘®WÂÝᎋÑ#LTôŒ‰‹x¸®Äy¦´›©ýö÷ßwÈ4{Gå=‘,#¾¨>Â'<ýž†ÿe9rdÀʤÐÒÈbËÚ;kïþ`ÿß;OÞ’ÖN[¬Ê´â «Š=êYIOzïÞ=•1¯‡Ý$«²²2ˆ@@'K 0Áªnbö|ë°®vëj*Ù5qg Éà7géb•³ºò˜U}Ò¼°5X5“@]S,E€:5/IéXÀb#8’ùŒ ‰’ÁH¤F»Eó„5HƈJš­¨WY%ÙÅ™#‡+êl«ðo‚#ÍÕ4Ö?IyÈ_Ú<_Ž_þõ‡Í2Ïd‘9o­ô( K:Ηéº÷©ÎÒêF'%Jî§ uÖãûÏŸeʘë'}„oޱ+§ÖXiÞqD4¶K&À k6ñÔ´`0éåE”@ªîç€%‰ÿ€,LFá™+S+*ìåPßøx:.;’oçf1xMËCY€Â ˜bœý¹ ·tö‚Kš0îݪÎrò'Ä‘µæÜ¨Ꭽc‡áV&V¯;>\)k•~Zx¾ÒÀ!a^øá—×3ó˜`ñ̾J+´úˆ!~c…0sWý® ­:-q”\@Ò¸ ŠÍM *1aMÑ-Dd ¸±ó9Üá Ó=6úÐÜ€^Œ]KÃÛÕÐah†T‰;n–Ù<±›Q瘗ýÁ~|¶½¤ýJ`VF(èÚ } Õú.ohú†|ü,ŽÀB3Aå[ßUÕA½þ§¾Ž³m~óaç·üytñüý7ñBŸ«Ü×õþ•ÿuüÉÇDìòòšœ¯Ú²{ ö¦/Ç’‘!À2…þƒžÿûòdDÛâÃj ³~— ÌÎ+-0YÀŒ#æ2béÙ $ À`MTMb2HlAg <ïû×çýçûãù€¨™™]Ró±ÖÄe[‘ËØr›4bƒ“tÃßÝ/å! M$‹aÆŠâ³ÖvB𥄲T:°d–vï 33t¤5W ˆpwéšÜbs˜).‚Üþ[²!cÌ äßœÃÏ7ª\ø¥˜O Þs%é æl¥Ôʸ6ù.Wˆ#kƒ3Úv¼Cñ|ªƒ|»šuÓafŒà»ßßôvÓ°ØUÐí_þ‘ îîï~܃wooovSÓ®é표’Ú-óÞ˜á$·à$ZœVcÁdÕ•1;Á¤Ý‘ZǵËMÍziû!yÇ©€ÅtwÍ#©•f™ÙV&/HN˜t¡ÐŽle¹˜ù…‰B§Ö%È9ØÓbdX妑•¢SU"›uÉÑ)*YeC§zó¡S)Œ&éï–ì(£0PX1Ö(ãÜX ªà¨ R&m}™G6Vø\¤'x(ÇþÝqÎxO«^¦È²6X LÉ(€l0±Ý‰$íj˜YºÊ¶"×Y_§–ÅŸ¥cçÉЮêxÅ+3‰à`¦¸Uh½þ5Il¾ÚNBuõ)µ,f¬¼7lŠˆ:Á'ŸkZ” BF‰˜‚@x<ŸÏa?Þöa‰ S\庯«æU‹Vz°‡ýe‰ BÀœÏƒäæ1£ÈÏDKŽû"¥øÏ­{-} Õþ“¤ôàÄ:¯×ô >"‡ ·Ôžªé¬[öª’µ|»6xáJŠ—¨úC|@¹:§–, w C¨»SW‰ Î-=yö¬&°—¦§uíÊu£¯3S ˜JLªÁG¡>ʸ¢žñ^0âã~O 2 ÚÒ‚X„ŠÍó’Nßë•PÃ+×swˆPfõÛ“[÷ƒ{9Ö3>‘^œ”Ž@ÄÄò‰Bl÷”?ÄH'<<k΋JDfÇ …\í¿þö“¥³°™^tOSMÀµ+úUsíê ÁóYÕÈÿ®šR…l.ZQÒ„9ýÌc–é:7÷ V¢Žº´µ·2¢µ?Fb ±‚Skn ceÎ@Xj¢o{‰Á9@ùVƒK¦Ð`¡®ÇŒ]Ýpv,¯¾«>ðP\í31# ?æR²dö 3ÀL&-uødÑûOgŒtÀŽéåy¹‰^o_,‚e$šnަkÀ@}8¿?MÅ“sN4yå~œŠ’Ú"Ú?ë&´Ô¯Mþxºó±°|X¸µûcY‘‡žê|Ž¡Dö} Y,THÊn$™3æDbs´ð~à~S*›Çé-¿‡þ­Ïø_ü[Žïߨ}Ë÷o÷÷Žß–0ó¯ø¯ãO:ÖCøÍœ——?ÑVÎ+ßZ4ã~œðãøä!¯ F>PÊše8Ql³¬jIøÚúƒ¶’ö3a³«¥/‹ÎH‡=â~þ§?ýñõñüúDsàÓ.¸(‡¤²tÅ£6äµÜ!˜$ϧ›©oa™N¦O‰dâ añ&®â‹pK8_¨œÈî¬J`£»+45»(GÄP•xN¸?¥Ã.ZTquˆ¢yâ`¤oÓLõP,§«Ø[A*ëÓµ¸SÎ óÅdbò@Úw­Ü¬=º@ýõ{ÀŒçF{†‰!âÍÌÔÌ×ðÍoÛ ’¿TîEM¨å”N]–´-1Bè7tÈ%û†š3xe¿1à3]dx0–;¿”äÌ ™fkIüB.štkˆ®«ÃŒFvIU ¯¸jŸ¨;™’ÄÂBdŽh}3ðpS€ØÓ3ì±ËœIF`Ð7gÄ©ÖT¡¢µlÀƒŠVåâ¥Êl¼Ž."µ÷K¥zÆ„ ÃXÃ5” Ø\ެ=f;ÞòÍÞG|lÏðéqŠìË{äÕ×­ˆòÀ৘ʱ„ÄçTPôÛ]UW#“;JPL·9"ªj·ÛÎ_W³ì8˜NQÒßÔÄ.&Õ̆Œ2U7Yüü¢òEŒÞú5ÂAhWS»þpý»üê®þ.€g«]‘ffܵ¸Œ)Ú`cÖ‹.a|ÎIß ¥bDê´#‚TˉÍ-²|7› “¶j­‚WHrá ˜‚ÆòÛ®9¯k*NvÝ‹ìd-ÝYLÑ4fŠõŽÊ‹µ|_T/yrV@©+Ÿ¤DìU|«´Ä·¨/ª–§õŽ®D6³Ùùüäýl‚ý(g@ L͹Àé1c(âv{ËÙ˲)ÎP™öå–Õã6UeÌ8£`9–êtÅ ÌU›R6ª?H!|±›Î‘×<ɪËÂzÿ–»w”"øË«#°×T§4•42¡jsÁŒ¬³¸Ù‘qS€.ÒU/q½ì Tn( úżÃ[Êe³«d;mžÚÎ#ØaSaˆ‰+Á!Œ\iÇâ+ #–¨¹™v˽IXF\hˆ™®Ý‘S+kˆ8OÚ}Î,T|¯òXŸ©hçÛçß&ày«Wñ‹u³«aÙqðë ( xO§¨øð€+\:pQ˜Ýnoöå $@C—<M¥‡\®hX•Í‘óÿüù~5»iéÀ¤©è‚­ÄnœPV"¹dbçéŒ5ZòIRõkÅÏÇ`Wܲ“ϵñâÛf¾y¹0,7ïÃ'f€K°Ÿä"Éÿ½î¦ÂÁï%oÌó{9ã_…¿âøãR_žîÌZ5ÕÔ¯?ß™r|BDÿßK€ÿXÍ÷ÿÃã—çŧ³åhòùóU5ù÷ëÅ=ŽüΤ¤ /{íñöÂÎWY¿ä^ȲN7¼±=êrkoMÖ‡Ô£ž¬ÀÑt÷[1Õ:ÛÀþ¬-x_éí¥úpßJÉê¦#Ð bh°ìó)¢àÝý~¿?þõxÞŸ¯îïžYÁÛí ]Íî&|s颺º2Œt=ë‹™eÝáƒWƒ]Ôðê˜Ò%u¦_å·2ùÐI^"Pâ+){GQúöĹ}cýë]Ucd³¤À¤Ù]IH·êàZ¾\âic“Ôu8Ý1WÞ>¨-DLâ„OÕîBÑUztrÐÑT¶‡¬œ°í@3édH0MÂ!š— ñbf÷= ·G‡ÝìöÅ"ìJS ûOP T»½IÑE;´ 0ÕŒk úÓ#\tUE4Õ··7ˆò«?p÷¯þŒ“+?a‘„«Ã:¤›JØE¯fÖa*v1Ó‘L­cžðÍIÈE€”ä`hÀ öÝQ&ÒúH2Ô#èé$¦–lj˜“T®~¼€ŠHWŒŠÃ´‰?ŸEh${YF¾Ùþ¡zrJú´MøæJ„HŒðw7Õì;mÝvµp/Rf6¤×Ê_gd_SE‡Hè ²Ò Kã%„}8ö(§ §ƒ |Ñ!žŸý*ÁŠ£y#Î4bfм P!uÖt¥÷ù²Š ˆt¡Ëåe IZŒÕ9ŽÁG9|7  ‹}±«™&X@Ĉ˜ Ýn ÆóýIñwÜùŒQŒé5žÎñĈšM zýÛOÕ¯23ó¢ôéî µÐi·ìbö70Ò3/¶GaEÕ&8TL¦j#•ë(K»îAU)'ݸy8Ðwo°«)ÀF3ÈIžÝ†}Q‚·ÑS’N¯Là¸Zõé®Ví‘gH´ØàêÅ€õª+mëå%§~™9åîÊ fþXqܨÏÇÔ¸T§x’z5–½-ƒ½í+ÿ¤Çôü2w5½ˆ4å ¢ª=<¥æ¢h°‹Ù®È_\±e‡ŠùVoIóì†Ï;¬d©6“N9y&„>p…"‘¯t•é€$¸XHƒ5óð´mßÁC†O,e²%XlÔ.vQ¹Úu×ÞЏ]o¦YÝûF÷ÇW`ªè!0h \ÔÌ<±¨ÄtGÖÅö^G]MQòÕL1©Ç$“œíy›X¸óñdeYlD¤ùt¤7ûˆ€k6TŸîD@)ÏØ-¾&c„W33“¬ª½Hœ±•ìǸ·Súº„+‹ø€.й.QÞuÇ+')·f×kVÄs™bÚ¿p½ˆ t8zXãéÛÕîî{4@ˆ®¸þ—½+Vv#G’Y@«ª-i-Ê<ïôÿ!ko¬!­‘,VY¬<£ ÝÍ÷žöævw"..„F|d7€P•Y™M}ªNY7)pÐÃÍýú71È4ždÄUg<]®ož”~Ý,Ò-ååS ñýñòïQÅS§Uwí©ÕÝ;^bÈR2 Ë’ÿp3刵¨f‡ˆªö“³ÝDj.©Ï`¥;I)ÞDé”kLl‚¢Êœ‡™œ¨|“@ß¿d$=áå…÷Pj~S{gí•tRÐtýùŸ¢Ðuåûn~ þ»¡¯à4Jï¿]ÖÏ×Íì¢Uº…ãIù.±ÚO“ï×Cÿà_íÿG[èǰû³ E$Þ8%Zè¬óe–Œ ­Rãõ)ýͪ·>›ï À~ÒÞ¾k!Á/-Uþ—v_ÌðþàýûýöûýöÛÍÿ(ö•tU3·";£Ò¿Ê ȉu6O_˜ïkÇÂÄ'≰qÙ«¶T$À½˜G#1(ÇÖÍ>©vsûçªw]º;²¤t"!³køt>ˆÑTGØöE»<;w´s]á`ŒçkRYçÉ7›Rì …}TŽw¹ÀyDkæ>VÊ#‰jÈäýÚébðÛíö%{æ „âÂòÕ¬h%h à"-uúɱ »æòáÜgÚ‡Çß²S7×ç¿PiOØÀ‹vñjyY*z)ÜlËrŸÀ"¾=uï fåÐ5f”Ó}¸´RÁPeøšKŽäÛ151ÓnR^†D4Eɬnb$pg`PÓcUIt–{d¡ëÕgðæƒ¨ì} \-ö¥»Öë·Ç¼Z‘&RÄþVÔ’µ¤DÌ Â×/Nh¯Š3¤‚é>-Eòu#|-h$Ì,s ‘µZi`q¾ZmG%àÏÛ{FÒË?C çþù³tâóÞùϵ÷æ›K=½á}{þÉË!áÜûìçígGˆŸÆ¿à_í¯m"RˆîN©jš:øé0ñ²žM°Q¦ìB‹%]Ó»ª3y4_ß”—ã«øÄñf¼[#YV©ïZ÷À/#^$°SÈX@ôÛß¿yÐþ¸Ýo¿Ýî·‡?@ÉMÙÚ¹S›•ðˆXZ_¸ïÙµP‰1ÅtÅV¶‹Zz¦w’T%¨xzZ »{Äýëׯÿùõ«¨¡—^ލÝ~û¦-…©D!Y+•<⎾©Ú]û—m3z©\¦£bΓ/kpÀŸÎœ‘@Ç®tu_7&YlŒ£Š¬äsöQ:þÅúXj€Ø*8) h‚¡‹§' ZæÁâö#MG˜•ÒÚ°ƒ™yú,0äd9 bŸØ0á¸ßŸþ¸?ð÷O×+°5½}¸»»sxŠOVYã¹F½it7ˆ©\7µ3Û.is˜p°„.„%ÔÜá]¥û1׳—º A§p'B·œ2E ùèeÛ÷=W%å¼Å¨T’ÃçAqpÕïj[¨ w4îPë΋J“ÔÜ–‹è'Ó† ´š>çx4f‚*ܪ}Úh ÷;ÆéÚ <Ô„ñ7'€Cšämt½–ˆåµ—ß²²Ýeݹ^éeÊœ,á™'Ú#„ý38!}¿Ùu"L¾FQˆ£`šìÕ&îÆ,(ëš ðívKQ®Ó#ïÒ¡ÝäböYPG@ÕLÄwçÓýé’îaªÆ««OS}Ù’]›B °Äš<¨*¶‰™ÈBË= €š™JØh˜à“•”VÅ£Ô´QØd XH3cðîá4çàâÎ(&<\zVñù„Öy<¤ &ùj«c'áË>²Eÿ©t-Ö9NrZ](§Už5öñŒ‘^OzLþŒP@“¼=ê ƒ÷ €%¥N`Eùô,·IR“‰$FTÏ,PkBõLÈH¦=<Ü:+„CÝ]’Š)%ÉŽƒ•ÚóÚàjΤîàq"Ô=Vwwœ,î 󜅟{Váò¾¿.åZ éŒséÆU¤·LÝk,÷ukrVV13S«º.‚Gw w•/ÛÕ:TÓa5ßï¶™¢Á¸Š¡æJv¬%'*ÒÞzžu ˆ½–Wfz7Šr>gÖìD|3€ %³¸UáP£ÀÈ||߆Rt*÷ß®¦j]ÐÕ¡ÈØ¥Øym_¤ö(Î׆£s_ƒƒCõpU~ÉÅÛ܇gÀãò¦`3èiïs$:ª0ëa¢ñp’aÚ#Ä]»Sc: zd„v$Á ˆJ‡u"q[è¾H7­ø²ƒ»ˆÉ>^øíxí‚ÓM®Õƒ»|€æ„8NG¢zîX‰ Ãêòøáëj’ºX«®?]DÁ»rUƒ «Sâ¡pTÑtn¯çqÒÝù„›c\͈ˮö²—ý9ç_iÒ'å/øjY™üðxüÞ|í¿‰ÿoÚ¯øWûëÛ™Ûp´à° ×)G+ ;•m•‘í¿7ˆ3’“a'Öñè­EÞmOñ¿lG¼ñÚ‚K>dÁÔ>àpçív¿ývó ”F]¼ôr'ÞU|bmšÜ?q3η¤õeUåÁ [h·è%·#ôàíˆ<Äü¸ßþxØfh&zµmƒøÃyFè'ÛcTŒÝNVýq|d-"&å3ó§'Ÿ'{’¥áYf6ð ;ã™}ªøHê†C–íGWÌUívjV,”/âtÂÐLƳl‘Uà…ˆRE)¢@¨ªADŠ9é#~¿Ã}3+‰ë…Ø€D'¡±|U*SÍH yl üá¹Ã©ó1±=Ãþ¬©Kt/ò’ZhÍ6ÓÍò˜¨šÕ»IpáîYièŠæ%—Õ€ÍöJiYêy>oC퀪¸ç:DVºD³"ùä‰Uo¼t\ !ʾ õÉÖ5FðévÁ§ëõóf¦AØf`¸K:‚Jæ—™g=U¹úñº“I=I5ÜËñAE[gõTåYï9ngW îÓkÁÙ¥×Os)ð«úãîðmØffÝÄ6ˆ§ÛEÍLT9CÖU.©k…L²œ†H4[æÒÉ/ƒ lj›óù”Ö`òÚR“š„ÀZÝKHEÂi3´ƒ@ 1QÑ‚CÑâ1 ³VAj]Lu»ØÕ¬¾²ƒÈr¡÷­0öݾxg£þ¤ýô•x‹û¿mo#3Ä”‰€¤v1Ô|O)`Û²27$S3–ÛÊÌÔI±™ !PcÔz”ŒÀr4# €’’Ô$Äg¼l"ç¬Ê)·õÁ ½ï“sFlÿ'P‰ãšÑçÒ€ÁJgJtäÒTY”»ÀŸ"¢É¥ó!j73“­ŒÙ ܆m3í™s…ÓuBpò˜ü‡¨æ¿³ñ$¿òA{ÓeÿŽö?ì•·sü¤öÜâB~VBû“þÿjQ[“7cHÑàü¸T‚èÅŒ FÆÀgV¤6Â4et8JaàB~Òª°ðüÐÅÙøLŸà K`(c8è~ÿþøý¿nßþþíöÛ €©]?]³#¢`Šäó¨h'Ñ3ެúóµyËê†Äô#}Õ•1`Áè‡ QÝYƒ‰ÊE¿ˆúˆüIä„~ºê|½V¼´‚ŽÜíGÀýþÃùpLÄÓápàáwmB†¦ÐbŽQYåq°N9áÁäQO¨BS:E”€vytQ º"ËDÏ›N"˜T¢2¯²º|Z«/VZ¸A˜¾ œŠÑÁÁÇã~ÿ~˜mŸÌ.ª»xr&_¥@šÀ’M¤‹‰m8]Cœ|·?îÎ,ñBŒÝô¾hr èÅ„2?ÖõËffb Ki–TïHâ“M5£ßŽxfv@äíå,K[õNA¢‚€c‰‘î`föS[Ñò$Ÿ)vfl–#–Ù™F ا­ò*è»g°!Üý¡–(1 SÙDíól~yðÎâ¾f)]Ôy{':Î8öžsÍ&OÿÝïvÆÕ¤âé:: R¯¹-_–?Ùò÷Vé¿ØêŽî ÓQS¤½ì”k¨V® ˆcnpò˜ IDATGo)LÀÉxÃïQNc¢oÈ»x.W˜YC`¦rm˜pÒB¼Ã5B 6½~ùoö®žKn$G¬LZ­nY,Y#O»Þy7gÝýíû»òf--u[¬Ê´p$«¦¥™wOÚ7†òéµZ¥úb2ɈËe™…˜’]Cò}¶´û"šX*…”ºõ캌¡/›ÃqÓè]L"€#xRYj¸Â°7€Bµx°3éð‘z%mX*ke**is©À„hGtßIžQèçŸâá vªXÅÇ‘€ ¦=±°c‚9S¶ÞÅ¿Gh4è‘24qöënã™ÌŒ[A*;ìH`?“ë˜(½‘ÏYVü ]XsîjØ¢Š`5;`¦Þ<¨4ÜÙc/( 7‡°»5†U‡«u[ Â#k()—‘ÓöÐ+Nqf§*¼‚ ôj™Ë:iMBrü½K:¡€{¸œq–i:P‘_,Þ«²ÝÍâ·ÇÖ1ÞpOŒ ¸ŸxæákAÜŽô–ÛŸ&ÙQÙ—*2/ó2 +ºÓ $ݱÞ7׺J…QÒ²Ò!ìôþ,Öý®B–8ËÄx+'<òy€zæÀ¨ÀɲÛ⃓µ€g²µ› \`©ßT7ƒiÚ¼±PåYd–y ^X7=1Ôîn&',ï1‚“8üv¸ít…ž.&Àî}ÏÇx+,"„¿še«E¸!8Pi3EXN4X1wÒæÖTݘ†xG#nÂÍ¡*ÂÉ$æî ƒ0@—™¤šiì€Í†F i\t¾âj€ƒó¶_†àK}òúæ!Üऎ÷Ù×C›ò>Áž昊ñî…âþ† ¸8V3hsèºå3˜¢âL4¢Q’J4‘È"" È­ˆ·—•ªdA;â(Ç>9.ˆü>þËùþHï©ò_±[¿ñòXôß5ËýêØå+°ÌNn¯ƒ«à‘›ñ†=ü=ÆÏøçøáƒ‚;k?Y†Œb)— åó­d^j£5qßã’Îl9hTN6Qóoi}Åh{ñÁŽ7p\}±Q6F6׿ºéu½n_Öë¿¶mݶM‰À,4É •=ÆÜ£Åk;ÓVñ¬k½GsT‰;à6z3V¢J¨ƒBRóx-$„–'q_Ä¢õe¥*Ë/ÀlHÓõô8;nFçz !Ò; H—˜ºÂÃ)ž îÝ Â$Ä9¤°5âE¿„C˜:ö4½‘YÑ ËÓ,,ò4ó$zÓÕÌ1 •¸ *fÖ|lÑ~ «‘9±Ù¸Ë2‘]ž…+¨ "Ug«p˜©3Ì&Y ¡Â¶ú¢Qi÷p¹<\d²1dE³}1ûñ<ÍxrD¢ aÍ:èµ`0 &¿uG7Uuç†ë¼È2x%•4/âæè~ùe–Yh…+)Ánž°Â¾Cû˜œøý®áÓÛtO9Fˆ Eó­Ÿ"é¬ðœ³èS`}Lᩆs<¶ ±îßc„ ad_M›¢ͽ§5T¶cãês&ñQ1¦‡¢/’I³qÜôecy–ùÝåã/—ˇ÷ó¼ì.ÍèàºÃùm™@%€Ú1´“Ð7 ÍífÞ!"£Ëྪc'iÕ°½Ä@õúe½þëó§þïõó&ÄáQï å3«•!¶”úN°€± ‰“§»oõ‹Ï(¸¾¨k˜´ÁM-hƱBvr/R™)£.:Pb îb Ž88&?úiÙ3 Zz¬ œõ‘N#€=H!Zx¤bç‘ fâìG)(-‘à ëX …½ q8¤×Cß›IDžMì7¥nºñqàOîG‹0«9â6•Ãe’˜Ê CØ?1Pæb¨"Q¬Äóó¨*§’S@«œ¤Œn¸!­›ao|RÏ.GÓŽåYŸùžïì}ˆô [$öœós€J¿ßO{ÁåßW¢¥¢z!Ë<͸™n+ˆÈ" |`æ•.ɽõ|—p9qnëûò 5Ä_A© o¶Ž°N80YO–>ìy*±´Ÿó­ÈÀ?*¸[hû®è,"Re™y ¬‰ ]á'ÇÇh•?¦Šînnޏ<÷9<ßï+Z|<ØßÎŽ·>åD ئ˜ÊÖ¤¡æìÝÌÉ hT¦ \ÁU¤F¬;L +“¡3òÀ»+æÑmá›{šéëf7‹UÌ0»”c ðË `+AYŽÛã…s_'+2@m>ºG‰Ãslß 8 ˜òÚ§*217æHN£mAU£=~.˜13a..< 1ƒÈ›Û¼¹7{ÿá# ¹ª›šr\Jv£gæøx«ŽcÜÿYá×jBß(q¬U~ëA|+Pß©?~üL€Ž;ø¨í¥±U׃ՖWÁž¬÷dárnaû&ë;Œ"EÑmójß?Ï€âQ<׌‡Ì‘{¨˜X›n/z½^¯¿]×/+"råJmºÝ`ª<Ñù3Ö›‚Œž„ûž¨ä³NO.;›Ñ4Ê¿¤ÎP*ÌÅ'¢P^‰ì§°Ì2€ê¶ýãºý£üs~·,Ë…&òaLJƒÂ­ªúºÙ¦®©ËÂó|!sç(Îø©¼îí°†Ô ŠÜvß}_5ëÑL™tÄ$Úì%Ê»¢œ‘?sâ®ñ™{i‚F,R™ï–½¹×³é×jPõ@̓çЀ親×/›¾¬–I—ó$¨®=­8,>¸ž²DwmÆ`”!ðd¿–­­în ódB,Ì‹°µI-e½‡`‰Je* æÔ›'mØc3KI±½7r_²I„tSÙ·(™R²7‡‹Ë»Ex´„%sæîûòÛÅ·ˆàê ²Ê3 P„ifYže~th…3+³¾*mFîN¼+Nç5Óý”ÑàŽÂ¼12ç°ø±ï—%¾k(ÎóÌû¹x¨H—}ê"1ö#æË!^˜³Ç¨`žwØ0xIŽy¦(Q½´!Ô$óEæy¸ùÍ3ܸŠ5W7t'"~¨ PP|‰ÀÂ@…TèB¬"ò¬²®×—Ío¦¯ºª²»ÁÑÁL©¢<äÜø¸ âpñ8UX»ReÀ¢{f„êîIR}œÌßÛzþÙy%ÇD%¦Æ(‰c¿È³XT="°S§±ã”½—è‡6—Pê¯Xžç÷.ò¼dN8ZgOsêÜ¡C‡5ß¾¬×u‹˜X@Q(s»©-:?¼Ï£{WPëjšÃ -|hÝ¡—Ë{2WZ˜%£'ÈêAÐg†eÒK!ÃãháxÏpPe&¢Â^2¹æÆÝ±GSÎ:ìa‘ŸblWÝ;]­ »èºßÌUTU§¡¸2ˆ¥Šˆp¥t].L‹>T!<Á2žä¸N 2 #TÕFØ¥(@Tà ôÐ5nÚ£€=ãA8/ÀÌ}@)pø™äN¹ºNr©"ÂÂ",rG7µŽÀ‘ᣯuôzÜ­ä”p‹ŒÝ°Õésžìã%ãÙ§dûýpÿßǾ=¾RåñŸôò¸oìu ÜMÞ÷å~×+§Ÿo<™òVü‡¬ï:~&À?Ç¿y Ìxô@ì Ë‚# ØNÓÃMÅ®Àˆ4ò4ââêJmHÚø ©üÇûv²ª ºn›^¯×O¿]?ÿöi½^–'‘‰$r¤‰`9¯ß¼…›¼ùA+08“§oµçÀ s—fndÄ2™Iö¸š ˼)ʶà‰äÉ?õOvÝ®×Oë‹råËr™ç9[OKâÜWÓ0€…C„—§…„–çåòþ&k 1èz‘6îG;vä`D÷[OоŒ¬Ãà#j§†n¤²Nla£Šh‘7‡9^¦gl?ñPÜ›ÛD\C" Ú\›¢™·k¨• éM×WÝ^UЇ¤óàJs!PÔ¦ÈSÀ)ºûÈ››§ï¨De,’®6j)qhŲ(8¨™…´cPLÃ:"6H‰µá ª¦‚ÕŽNšd‰é˜ùµE?¥q{à SZ‡õp¦Éêœâ6*•=ë™Ì4‹4£ª¡i^\#K„ÔèÎM“&©¸,Ëåýåò,$’bsª£ë䦀¸£¥æz–ýe?•ùß'Û‡qˆ_,ÅÝ9qœ\Q3õ'ØÑ–à>±vd ˜™ ýÕ¡óîKD±–+‡*NÖ=¸—Ѹ.…ðtùÛß?þý?þ“'±6ˆë¡K,¤N(ŒnØ¥‡‹-_bæ£Z;(ñIUcèwš1r:?-—ËG5µ-}€s„÷X²‚Ï—j~s5åáiÊ2ñLLË»yù²­/ëµnší»Q6`oN9N퇙€¼’J4Šém3"r/Ì{`ùÆÙ·Ô•èáÚz±ˆ EÐÞziÁΞ8p€18/éQ™^k&Ó’RÛ²0§"€ù)ôùü¡4'å‚ÜôS¡Õ4tȹÛ|Y܉šÏ3(´ÅØIÞ…~‘@îÝüæáD –^hÛ—äÞ Å IòG²á…(Ø%É€ÐYäøzž*\Í&Ϋƒ†–²¶Ÿ]Ñz°O±¹êû¤ˆ'Uft0ÙáÛLÍ] “ÜdžÅ›m/ëgõ@l/Ëey7Ë3câÌ.(`SO¸yd4tþ¸°L ÀwW³}>;ðbÇ…Óó¶“ß¹‘‘;!”¯Æùwä†tœ®`go¦`Ig€ˆ¨@Ì…”" :‰RÑ €?Ò§dŒ»u~×þ5ÒcÂÝ…ÿïû NÞ¾Œ¹ƒ äT€öÁ:YÕ«*J™*È •ˆ™ ~Sýråæp¥H,›i@±7áw¸Ý¦Î„î¶©> ¨¼Ì ˆtÇË*ÁG0À-…憴ÿáTsu™Ä%ï=áöFšÚÑÉ ïâ±ý2¸;*£ÿcìFrdÂbÑhu¯Å'ëö,i¿`¿w½ýÉÚY«ù,µ,«,œT‘ï©çf/.nbãb*¡Vë5›d±X2‘y­®„Lƒõßû@~ûɆ»!¹RÄ~¸5Åž³‡ÌôöËöõë×ím3Õàsa*ÂH£2ƒã°Ä‚ ˆÍD\30­@ï p{X²ôð4.D`®F³P¨:ö»*ëú§5©G)VCO~n·ëRÕ¡æj ðº B2óíe±ºhQ5]—HHfÑ:ôKúm)d†]Õå"Ëë‚wÜÜõ]n¢BTºDbLü,B¼£$”¦ö’MNSjbK(š5ÐA^¼ƒ½æÎhbAC¨GúÔsãæ§7OÔ{‰ÒаB$±y%74×Ãî{zAay]3¶Þ¾ooß·“fŸ[ I°i‚d„ðšÈªÃ™`ÌL¡hBçÉ„“ØO39±A­Úö}G³u]o·%4~Ý”X–—EöÛ®?Öœ«SI*DHæ¢Âî0Pâ0€!¦ÂY@ñ±RH^]«ÁÓ÷Õd–EdCŒ\ˆEffÀGÜͪ†Èü,9%ã1°¸™„… h–´Ç p&0©:pe‡)-ŸQn8R‡æn¯Ò €èW BÒ¤Ã×Ððð<Îve  Pu;(r38öCš„aü<¨pALˆ5Z(Ý" ²Tâ*LEú[ÂÑey ¹²êæ )å2H¹«£ªW'²ÛzcëªZV3k}Áìm–­µHfuãQV³H•câáv!•=>r kÆ‘fÇ£#"kÜ[k ƒç{)Y¯@Jz7˜»°œr¤ªˆðÌË‹Üt‘ùÍMïïÊ!^U=ÖJÜÞvå}üÄŽøXø †|Ä©ptØÇb¿GÉ®'?Ì*özß6ÝÕªƒ˜f0u ªó¯õÕérÐç“>¹7/Ðþ#>ÍHð˜'æ‰lÑÒ\™‹R˜È»ë:ú L$2˜ƒ:EAH‹fºÞDzÎ,3û«¨ª5He­JUààrÞa«Žê¨æ qöåwQMö¤¥yhfxçðø€t€WsK€ýû4ñ8&2°1Ö+ãc$ç,è”çtÓG÷™,t›©«áLÝ•¤õé¾êɳz hÉ%Fýbr4 Q«ð–Bƒ¸Dœ3ÌÌ’ªÐdä^Ù«[E¶V?^Úy·ø¨z÷ § L•;7ìé¤)Ѳ"RXš Ë” ìÝÔBŒ˜á€8¡A«G²j£;n q?ÝG{a6¿9õ³ “°dAÜEÌ“AVÈÃ_ººUPó,¨=ÜÓÞéy^.û/?8ȉŸ ½¿÷ì°ˆ4ϳ0׌áyH­– Ô™Ö<'&Xž`f)sR6n¸k‡ûÁù)Š}Ò¢o”è×oTv²M£¹:´ÙM¹ÝnÛ/ÀkèlwºJëˆe ·Ì”Ê4 ÊÔœf‚0 “»›U €dNlp›nÀ4E+åÏÏóGÛĈ¨úß1u·”pšßND=Ç8Ë©QÉ~¼Ï§ìöeŒôÞóhtftèË# y¶ $&Úß諸¿ï(¤¦z8šI^VBMàœkÇý¾qašÈ›[µÈOÜS•÷ âff&À··;Þ¶¯HQŠÛÅüFÅ àöçÏR¢õeMً͵ÏPÕmÛÈ‹|úôùË—O·Ûmÿ¾éû¾mÛýýNÂâÈjúU DÁì4þí£ÁÓ3Þ-½Ó[ÞI­Š5R¥}fU¥"`&€QDÀÝAZa¿l뮪º¾¬²ˆ°3ÅMSúË`TP8¸°…UniH AXh&&IY&u.@ Ρ#]suóàÎx5ƒ=øJÖF¬NDÌ3ˆÇ£ín½…'•·¯[O3ÿoÀ®\˜—ÆÝºÕ3#úq\¯z|ìăµ^ýl>*©ºbàhiñXD…ÁL3óÌ4L˜ aƒñ¾ûw…Ùò²rÈݨY¦Ó!¯pW­®„()‰L[uWÍ¢ùåUù¸5˜×qãžé̛…PDÄ­‰»™Þ",æRlÉaæWÐSß^íB|G(BÁ–Ö׌dÌ{›^âqG[xàÉRÕµæ[ÄVM+ö;ªÝ¨VwÀÒí £ ¡xùúíºÍ‚â¿ÑøµÜøwå1ÿ Þþîãøñ{ðOù` ?³Ñ7|¸š>~é÷$„â×vÄëÀCkÊF)tf.‚BV]Õõ‡~ûåÛ®ª?Ô«E¾G gèÙ-X}xní;#9í|—ÓÉn.ø/IQ#Šäª™ê¤p£Bî,Eµ€*) A3xfy‘ÿ¡ €˜ Qÿv0e†–Àüì2åoá‰hŠ0³ªš»›iU v+Ü`A¦ LÄ1!¶CxØò¸„d· šãzµ)¹Ÿ>~½Ç†¦« 'Ëñ¼Kᇙ^ýQiÈÈÔa-;÷òÿ¦(½AC D %02ÉËDŽñù]’lyÙ©ºD–¼Ó)Z‚#ý5«nÍy‚,ËòºPxO¦îf¦‡G×_¿—ó7>îæ]Ì&ÏÙƒ@;êÙ€rÀäð–X˜d¦µ°ÌD3sÊçôÊ 9A0ÞnýäYZ‚ZPs'3øÃÚMh‘Ã8qs@G¿¨Áã9­~ TÀ$F Àª‰©Ï”ôÔÖ;µ¦Þ,ù°f¯¥¢kîËç;á×¢¿)‘„ø\/0]¤ªÃ‡iЧ‘ÆqKå¶ÞW9"ŸË#tB‘È Š Ÿþó‹È $\ò¢,ºÊ¯ãLþq‡Cf=³u‹¼"d–ΟÅþë«rD"ÓÓ»¨ÿ…6Cê £†ž°Rç^à¦Úím@I)8êrVYË  uB@„V8ÀI«®f‘þ¡&sgs°á<^ʸÎHYÙ³íñçmb4¹Ñ94ȨO]npáô¬N¢¾3Ì ¸P*Ñ5“¦a]žw2Ž6%o9³êÑGê6²…ù9yÝijHmN…±;ìvÝ/m>ËrKØb4 ¬Â~¸Ùž­+í¾¤€ë–dlÊG7ô¦¾tYûßÿöwž ‹,¯+‘¥)OtW³êÄüùÏŸ¾üå¯_>º}º-",lßï_¿~}ûåMU­b»ß·÷ «Ûð;¡Ç¬pæŸS*„Ÿ„t…ƒ–ðcä;^aîT µ;¨ÁÉ]«ë¡wU`‚šN˜8Ù8ïww³fª*"«±0°¼®2‹Ëùð7·:¼…,˜P|X^À3C†CTÍTÓ÷-4̽fw=ÌA…¸B¡FéÈà¡]öõ Ì©!œR‘ÝÁ.ìÍP±K&›ÀpIJGµeŒ=šâ-’@ÃÔÝrÇ2ŠmâR„¿&'ý€Èû4M§n: 3Á§0$M&…˜)ä#ûò ¯P„¦74<ûÊâjÈ|‚VØ»rGÍfÙu7uTµÃU‡¦HjÒ.ËÓ½MðÖÉCRNðeYÖ×uy]rN ‚¼:qàox&;¥V-¸zÖžÀ·ÛÙÚFLñÌTh}]ã ËâŽ0~/Â$ ="mN€OÌÅyŸƒîmTIfɪò˜ý«ØÁùT\q ßúþO~ä1 ñ¨ýÔ‰“ßü½Æ‡ÅSàW™Å$ÀŒÿ“ññâKq÷hß"YÇÜ€ËRù­Z—ü¯Ø“3ù,!8²&À›¨˜^±Ý»ßïûû¾m{ظÊ× Û6¨&öt‚1Ndüî€J.¹¯g _­ÿ‰×Ü$sU”Òÿ¤FIÅá0§M‹Zƒ•íŸ2ÈÁ Ä/*ŒBÙ»X0æ‰Ók„™f‚›é¡~XÛÞ\/â%©Q<ÅöI6q×÷fÀ/EÌhñõnÀkÜ.,ë†ä2E–ZÙ æ÷âÓ™_1Q»Œ4³P4²€ˆÓ¹Ä’2ô<§g^A`ú¬•WD¥?÷!¡‰„“}©5¬¼,ÿaNí1‘»óA!fâzÎxžg%Zrñh‰äùFÏ¡ƒC‹@*(4c‚Ù5³0§ŽÈÙ¼0åÃè …Ç 3‚¦ûd³9Áœ¹¸73ç˜P/fWVÒžîlCÑ=¹ýL\»l% *˜›û5׹䲯=-òk£DÔ5~}źfnÝ)äÅ:3¨‰/¢ Ü/ßÂý8-…<Öþp#ò$XÁ† ‡ªÃ··E–ו¡ãe€«†ãëE£À#5ú Ñ%ºÓ瘿î¹îi¯šw>‚3„’M0\bŠ©ÚžUŒ˜PpŠ€þPënI^(«3ÄÑä š§årZ câu–ýU¼.ô¸s8Bä£ò8†ñ¸ØK¿âC°]ñ…1AÿÅ޲ɑ$×(³QD¡™E݇lvZf#ÉÌl×ÿðzTpÑ IDATÌÌΆF>³;$-ò2M!PE ÎDa‘YÕÓ#ßÞžwýùû”@Ÿf¦»ºº*³2â½/À-'ó~eæd+!) ’‡P–™‡_Ñщ½Ž=­¿%” ä6‚‡eÎ-Ö‰XMðF\ÁõY“šjsUµf^ ËžFzYvNàBO?~‘T–9I”VFÝxá&)ÝÂr‰ã»™©º›j‹špÉ,4A@‹GWZUM”Ê®ªMfã‚óãòíß¿ûî¿»üÍ%Lw1E†ï*æý‡K4Äðùl ðrnúq2ï¶õìU޼œ˜¥Öͺh3m$3o´UF35sƒ¹ŸAo×èý‰î‡gqÏv ¾9¢Tž˜«QA0í,€«Buo.î d|eíêf¸ƒNÁ‡»6! ï£t%ÚäÎ9I•ˆé|ba–*ÞÕÒà“QŒ,£obÌpû §c?0ñá㲡?Úc þ¾/“Ã67_Ur-ÄqžL2‡&Šh‡¹8q‡’(ÛVÃBóÒ"ógª)±ptpcÙO ÿéQz4 çÌ]=ïÈ þ< PfÉ?¸ywk€RD3½!¡–½Ä¢›]Îî(Œjûƒn¿sÑWl¯[Ç+ å6(ýeÇ]Èÿ+æ½?{|M€¿Ž_idü:]šw[”ÝŠ÷Í|¿DñÜ-Fò±ŽQ7ˆy¨ŽÛÍd® àæó†õyÛ>mOëº=¯IOùI¹[ÒGrˆ% ‡Ê4Ÿ|æñÃýp¨=üÀÜZ7:Üá#£ëfˆ>´3 01$y•$2åÈíi?kêÔ•¤f&1À®®æ6Mhhðñ›—yÑ8vÃ\2Ñ+{çM¢¸ß¨/>ÊèÁSxOÚíBLÂÊPîãt³–µIAvÙß;ƒåT±F;þáßÿóéi}ÿ§ËùÂÂÚÔø {EO”ÀÑÜqùÍ›èLK³¦×gtþˆchs€ØùàÜy.N1Ž0¾©>ýøñ㈀´ó²½¬"…¦`œ$¾tÑV&áLíÜ©1–ÇÅ:¬»˜òxo¸ Çd³c÷çžøÚ¡ `Ö”vçJG“F"ÍóŇk“„ydÝ€ œŸã:Qc?8þSröbF?NŒx®æøÀwSSk™’ɾ bqœê"Ñœi[7k™vŽ ^C˜Ð`t€ð:žô áʈ¹€Û7•oÑ ËýªÑà*ªßµÙú¬p€ô·ûÛoß¾{ûöír¾ÄGˆ¶çíß>|xÿaý¬aÃK•qÉ€æâ J¶ûŸ%½?¯(ŠG‰Á,¶fáqÏ_‚íí¾àÍÝÌ 33/—3HX†›ýÕó9a+ÂyÏ›©ªJ”zšš; âæÄÎÖ-7Ó’¢ k¦ªª®ªnQqjª[ôz¨¨'#’& äRñA;÷B\1B„öîH³Çפ‰ûû¦J'Ü5›Çsˆø$î‹•àlMýj^™j¨•XjÆÞÌK$/©‹C‰nRîýÐj(?ʬ3× Ì»Y3¹ÈZð ‡Tð$¯p`ÏêŽð’‰¾>%3Xqñ¬ê™ÑóV a˜7˜¡A±…]* x†Å}àózâY8ò!¨c&Ýg5sÄ&7€d`Öe7úDP ðÐ¥K—hÎD,¼¯»13DÂþ§ÀÌ1Z ‹ð‰…YM¼ð¦Æ:DÂuLÿc,.°>LJ÷v*¯ì‘Mw4€I*GƒY:ñnWpSf飨/x†‚³¯ˆƒô-1‘qa¯ª ¨Ìnö¦Z‰:B>—èÉ.3>£0܈˜k6ŽràöO»Miÿ‡çÀоš3¥K­·¬àµ½Ç× Lap¤Ý³Ô³yLØÝõÝŠq]ÏqªÃÉ®úô´©9}|røªêmÇ\INg‘‘·à‘h¯FŒª³,Ëùñ,KV²ÕŒò†EæãȵBd6f…{ÂjãnÀÖâ~Uº·QÉ[¯jÖÝ›‚ •’+vˆÈ·oß}ÿOߟÏ缪ț´~Ö~üái]á!ê .çñXˆ„?ý¥ã£û"-vN}“ûu¸úõÝ\€+Y÷$®!,šûÒ-¬ª³gŒ«¾ôÍ›7 b'kÎÍ5réÊPÕ«ÚIÂâ+•ám"°¹Eš)9©]=ªœT5<´­ùÛ¿{_ ªÚ°nêk†Ê»-b5ªB T S%9‘œèòx>/B 43uî†ÊVˆ7ugm÷pôaŠÏ%¯aH0@A©"æp ÎaîÄ> €îÆ‹#oœ£“c<ï™pè :P£¯9±9æ gwƒ®ÚÒÄ›[×èE"r"©à 4·¦ŽÂ8°:¡‡!†œEä–å¼l(ÎÄZœ}`X¹æèð] fyÕ«ƒˆ*€ªz3>]¤²ª®¶ž%ÚXºÂp…›": ŸŽëhœxýÛ܇ûE&*A ˜EšêL)oOyc—˜™$:Ýãóµ/oDÙg›ldƒQ7ÈT9ʳQGÚ‹×  f¢èêéntb‘‡7’^oxZ%¨¢§JN "0‚aiƒ™r{·Y·ƒ‚àÊÒßc!¾.¢¬I î¡ÆqŒ­6XǤ7‰a–Í“#2¸Sg"£J\á·¢Ó0™§ñF›P:¢±$µè{1œcE Yr¯ë£<Æk)p•½G¤²äá5²©:4£ÉØË=ï@¼w§Ð Œ”8phYE@Ц"ZàYË`ÝÑWkÌE­‡Ïê`û^ŸÆÄ—Ë¢•¹ÈGzŸDk(;$QR0¥q&<‹x“ôFE¨©M+tW5¿*LÁB•¥²i0:O&ò¨3t ´¬DäîÁ„$T$ çî†ðû•À°TUX¶ÏkÌU.FXÇéÉŒlÆ~?ŸUÂý,}ùPeÎáég6ð€G7o8¨R\ÉÑúxkïÎá'ìA>ÎÓ`RpëÎÕˆ$JšáÐç5n öfVÀQT*ôTI€¨ŒÓ>ò\yt0ʹ—ûÚ»ë,¦˜O@Páß¼9O…ÜPâèøþ»xûîÝ9 ƒÕ(Z5üë¿üþÿño?üñ*DΈJšÓØAK~Jàn…¨xøga‹Òt#°•ÈsLÛX¦QÃçð’O$®¼<,rbqã¸Zvoîyƒ6ÿÝ?ÿŽóÒA¢]¹*mÏ«~Vs?‹,ß,"•ÉÉxA\ŠfQßþQÕ®®ŸU¯ªjjêW·fþë®^ J³Jt(@q¸0Œ £2sekðfi¤_)€Na–JR ` ö2TÐr#v–ÎØ‡GQg£þf(LYÌéVÀ} EpPZ÷ßétÿSL sç¨:Î!u@YI\™˜„'"w¨‹7KINs½nè›ÒO²ª:¹0I…,r®Ë" W7%}[¼å YÎ#0G‡mÊjR`¦ff6¥†¾ËÄæ=v¯å 2ˆt‹<Êå›…*¼®OëóæÍô³ê¦D‘óCò®$gf¡pVƒ¹/)Èém—Ç‹PÌÝÂËÀ¯µl"¨Í¼iz³„ÑÌ̃ìEƒÁø$Áýàý‚Hê™T)åiAù8 öì<ürôû[üåñ½økŒ½!óç_S€ý3Ç×øëøYc„•¯&¯ŒA©½vùÊ›á(÷’ÈŸò±þ… wp\LlNíd7] ¾ª7•@ë(J‰µÜQgÜ,ø¶¼=åIøìƒ“¯ˆ’›4h€¾•ÎX•¸ údz7oât".l‚÷0%u ÉÎ1ͬå.«ð³À5Ï£ä&ÓОFV\`z5U T…¹NŠ•©ƒÃ÷Øz²@À®pÍïZ™€Øé®Ë Ã,ràãè™ýR‰†õ‡Ø ÷50GÎ'Ñâ©)>JÇIÍ˾ 7O4F¼ «æÖÛ*E5F*èî h·0=¢Ê± ¨*F)ÂÿÍÞk9r#ÉH  •Ikz-öZ÷Î’Î:s]²n½ÕxòDZš¶˜i°âŒLT{z´«÷voÏŒ™×ì&Y dddÄÉLE¦é#®_LLѺÙ`zoDª€Lä{cçr¯@®¢ÁbѦ2wäA{ª[mg©õ÷é«,¨;dËÕ²¿Þš€Œ)9@rBÀ€$ªM2§´ŠD£êBi¾!6-A`â3—Ѫy½˜Ü„@®KЋ>Fp¿ñ„uÀ˜±q¼¾-JŒ=+Sy{îïÞŸùÚD©‹o-³©Ð8•ÝN<ÜÝc9ãüé‚uPF–÷?œ£¨¡X´çôŸ4•ÌÄô§M„.F°©œD»IC’<Ð.öb"ЮÖêRO«ê&ÀÿRÉ.m°“j§u±Ó2Ø"1$uG„h&J´gT&áÉѨ:¾eÝ¡¦€tA‡‰Æ‰ª¦'¹>HdºšaT ž­ìt )©‹WòDíÖØN§|^S¸EïZ©C­mæÀ,HjÃdÍöUàšôà ;8\À†Ã<×GTº?¯mç'srY¡Â¡2B§²tNøÚUS’=oP–‚ñØÓÈà΃ÍÉJ‹ÕÔ~Ô>œIããþ喾ĀÆ€™è´ók}Ô„™bâúËõÇ~üé¯?~þùꃗәñp5\>}w}ó5íc›)‚`)E1^š’‚M´X* c0ž3TµäŠ¢…:Õº˜Ùå¤ò@Ö!çòDDø`ú¥åÌIJ*§ÄCåo_î|8ÎV\÷*bi¹çNîNT}ïí~w_TUœÎ@Æöy¥‚nY¨¹í5¹š`T5)°nÖU¾ F¸ÜÍTÀp/™"bV¹ÊÂ\„ÓÐAh©hÄüj­Û'¹ì³k'}Â3w ú¸âÝSå¤ÁP®…¡ÀI 4‡u"†€zûr½»‡³³¥7`V÷P”@I™.o ¨Ð|HPÝ=‚|°” B‚6­–¶qìá̈¾ž»&èb';ÿÇëå|1³~¿Þn÷;&Î/Æðäÿ§xG8CBÉûÓF²ž&÷;Ž‹Í >J½ruu¤s[½‹À„Gz›‘£ð†G‰¢+²òkÁú²íFûYñ9-s|å[g×ßnÿ–ø©–ͺ…ç…ôŸuyÞéïÏœýÿmíë=ÀWc| Qü½v 6¶IùÕ±òC<|µÔ‡‡vÛ!ÖaÀ®ÔE³dŒ 0wPï:Üþ‡\µo)w·®¢Å4€) >©¬uxûõz«ü¬?xûrûåz}ýî» àv‹ûõúã_ÿö·ÿùáó矴ÉåõÕÌÊe§©O°XòS¼0Ó¹XŠ\Éׂ¦š^wwÞç1˜ˆîáE J‡ª¦¢]¯·ÛëËåõÓ«M}ýóëYq¿]cÒèªz6cUÍÈI Ä£$UU:¤«¦¢vŽÁûíšø¯—W@´k„_¯7¿ß1Âßü~÷Ê3ŠØŸ.ÚÓÛÐÍ,k"dR£ßÜn]ÏTªYEÝEv}8¬]ì$Y&o~à÷ð;9\Ô^/–ò‡Î;Ý– [¶³dZ1‡Ç;›v…¦–5Y(D+ M{mü~G£C2ÿÏÊëCÀ´1<÷°Oª@„› pæD@ðYÊÇv¢ãürV;mÆíáñv']½Ó`f/Æ™NK†¬zs÷›e6z‰®N$åÃÌ*\iÝ‹¤†$EìÍ ¢×»Ÿƒßý§}ÿý÷Ò…ÃרÝJ·|IJ“dÜ€\µK{/‰r„?˜ ¬Ã6$ÈR*è‘nØK²%ªß è%w™áišPÂ{œ.ÝTÅó¹m¦Ý°Xت&Ð)}w`ÃA…h¡  `É·?@aû‰ëØ~;ZØ?']»þÎäƒsøêUy÷âW¨â¿ }Ë8¾ñ½À´^[aãñ‡o6®Ê:Oõ)ÿXû`n'›ÃǨ‘ëZ u&ß ®ËwãðøÆ û‹ëì:.Ï7AÄž(ï¡æj’œ(.•£žI˜åŸÂÔiÞ‡Iƒ A¨:=¶Ø£+ÑEÅj%‹ÎV_Ý¢•fÅERw<èá ´‰vQQE ­ý@Ù"Š›`UWʈ&ä šçH7A—ìÿ‰%GuÀZ3Aeóé VúÜ~cš´fÞ;¤‹ZÙ s%• k82Ï Ofhe˜‰Q©†$§€6–®¬}2;Yå¦fÁöšc÷.Û/¦E"%ó8 í*E!’Ü ö¿›yÌ…­däÓ‘4Ì {!hÐc; ÕoDèªhsw˜Îoçþ-[Ö²Ú Ò<Âh*2Ö'¬ÌCxž~¨•‹i ˽LqdÇ ÆâÞŒüzáë¥@€ƒäû0ßBë˜AþŽÉ$á$À‡ºèw@ФÎíöáä„ô²èŒ)Õ-"踘¡ëåÓMd ]=\Õ./**Ú—¬:”Ãc)£#*×'ŽewiJ fp&ÛUÄáMÙ"¦É’¤2•¢†vdMffÙBŽ\?§‹4)Ó‘Ó‚®2­v€YKŠª³°“q0uQhS§O;ªR•žBúðr„HývG dQϹéûXæ Ý0„¯Hë² u”FŽ×_o×kÒfRZ9+2RI< ¬„pýr­5d“ÛDe€S¿LïGVБë|y… ¢þØ«$rJáp’Ж•ÐZ š1„NF¥SJ«o=9œÞo8uFz¦Æ|„íoíw‡›ßªÚû¸=Ñ»eó}ô‹nñßßþ€ÿhÏíÏÀ¿nòþï ¾7Xq…Œ¢‡U=^ƒ¢Ì;Þ±¶DƒN éÐïúæ›7ó+ðülºAH] B‘bòÒl}"f°P?…AÙ tD§…ÀÅ$0¼¶¢„I–ªf[¼)LxðáL÷c0­e­ƒ³ÏzåÁêL“²¤H´%mµ‚‹‚'OkqVÍf0ìž²‚VÚ§›Ý”<—~ø1oðiÆnÂ!¹=¬-¢Âà÷´üW¿*K@Æ g ƒ¤H7±´X@Zíi¿Hƒ½œÍL&ùÜ›*`j¦*)œV¯ªÔÕ“j¿‡‚„Ó";{›0d!îv[{2Q]]µëÆm[g„MCƒ”VšUó@/©N„=øzâ® úŒÈP]E˜ üvá„W)Wžl”¥½0=šÆdðywnï·êUöKÃ…}³ì ¨¼¯ÅÈ8þm†S£ˆôî“÷‘Š>² f4’=¸.‡î>©VÔº‘Aj…©A¬Ø1nfSK&LÆ(Ö†BEL{UÚSDÄ|º‚ 4òË£(«„>‹‡i¨c˜(MÍì|¶¿üå¿êðLjøð˜´ Ù†kOy-9# ÛòöÈ´1[’à@Vo’ã æ ˜–Óf Ø)ûÄd—5:!C¹' ÖÁZ€íÊŽL#'ü¨UO¢`8Ll ‘XÌìBŒ¸¡3k¤¸ªIìÐ*mKAo¹…móðiY^Úþïöz&׺‚V <2¿¤’Çñ–>R& # ’8¡²jhS!YÖZ„5WS-Áˆ,˜Hæ+šéŠfz9ÜKÒÌ&Ð '‘Ž~øáóÏŸÍŒƒþæñpF´³™*ð1BÌÄÌï5ÇÈ@ÄYÈý6Ê]̦$”°S3ž7ù ô\ÄòóÃ#8 eÚ§ºÅÖÛS|Ê}D‘‘ñ HþލÿËÞµ+G’äH‡‘P{¤ê?¸ým?aµÕ†%-) U„ä+‘™E6ggÆîælÍ:„6v±˜ÈH÷Û#€€¨t°M¡ùVJL`ÿ£ŠlªBšl– VÝìúbbÆÁ×××ÛÛÍß=.A¬ `Ö½xòýá`ñx£ADTÕ6³MÑ@Û ¹uSSA7Ÿð½t¼T!•m™ÔY´I IDATGöPÀIrÀGÈZ FäZÊ0¬!&3˜ÄuÇZ=ÏÛZÏ <¼¸*‡“dÄ€%ü¾‚^„Óïâ|ƒa¿\ÄÌÂ¥ÃÝE:uÏü·ÓN'™°J¼Rb"Rn ð.hÏqá’ñ0W|}­E/FøÃÝÉáÿ»ûûýöëM-3iEyµ,8¯€ebQH> t“n¨!Š‹Vo†“±®°c Ÿ’ö.Y÷v*†aª1 qTò4òñbÚÉ1ÛGŸ¯ÝðgçòÏ`¡?ÿ?áëy€†è÷¿gü €Žÿ‡q¼­¶iá#™ÖúñUÜM«.Ĭ˜‰@SùÖïîï7&¥‰¤üæBAŸ9*ЉXèôà“t­qOäã\zãÙÔËrawdfýí !Õ ED7u3uú#üp()½#‚žT)›Úvš„t%ëÄ]‹’(ú/p†Ó=üîœaj¦vÙÌ’VgŠ®Í)Ó»‹’šïJ“ šu0|²Íëò!É{¬>äcŠŽñô„™ê¤Ÿ³6ù‰ì¿Ú§½Îýÿ¶ R£r[Mh„@ºÚf׋e±.L!‰MT´’œ“žz’j²‰l–™‹ê<…j×Ë‹]¾]ÜukØÖÉŠå¸Sʼnò·UcUˆp†lk©~Y~ª‹ƒÉ<R1púô·¿‡:O¡,GЬqu^hçØysgX×`P2‰£é6Ũçżà'œ?žt¿¯}|•¥^ýœKs eú—’õÚVEŽ`V/!"»äÉßQAøŒ¬öˆˆ.8€Ö/’1¥Ô_î€]ÌÒÃ^®À-®Ð†xÐß~uwDv`çÔQ»\Ì^®¶‰8-Ñ‹ò$s-!zÌgÊZnv¹\¾_¯¶¶DòW¥1•Q9«Ñ*b5#ðXª³zòUI)Îô w›(…äëU¶™ɪr`(gD[9ˆå»—? f‚ -™‡+"’£Ú“†,8-8CœiOúëºyçJÕ"ÒT“ãϨóZGw~ìÉA0±ÓûWœÌÐ éÊáÙ“Ìí ÐY2óáåÂò°z ¬˜7S¤ãG/dY˺TåÄŽ‘ORw´Ëœ‚3›S ]Íô~¿½Þ‚ÿdD€4³ë/—¿ýí^ÿõZO9S3Ó.™r-§…-?ÅVûlŸç Ï—Z«¬&ðCÌ<¦$üáþpP"0bǼH{Þ1½ ¡…ÿgÒÁ6¥ìÒQ*è@5èžÎ©‹cRT9Q:s›Ù¦¾`Y„ÊŠRU&-²IzÌû»/%0Ñl’špKè"ªè x{øë»3‘äÏ{ÐwpÈxªçƒCoýo°n($24íço£Ò:§íõËJ`îžcYuÔF–1©1ÀIás™‰¤¿No¦0íƒhª>"!åhêÚ$ Ùÿ¯Ꮇ;î7µÓJX ¦8¨Ú:tÝËy«ÞïHÓò·7¼ª©©ØÅ¤ÛÕ®@i(T9wfÄG×ÀÇᔦ¤aq^d{W¥{N“1×qÚŽ,HV•{Y°´´rêj\;;sï‹þý÷“õ{¾µ›—ß3Ú§~ÿø¯~ñ3þ9þêñÙyý³1ð‹„CÀ•fžqóÛûÍÝ#Míƒ;û »NOõH`w»3[Ä <×Íp6Oçtçžå”'Îê:¤°DcÐ6150¼!Þáîp(-%}õ„üAŠCé•vbP²Ü„$¹iÂÁpú›ûÝ݃L‘=Që*›¨ª6ÁγneÍê“V À£m+ÑKHæçóW²ê{j]«ê’ùÛ†äòùê9Öüam0sMç~y .spŠì¼Ðrä8p•û§ÖÓo^þVê2Òź؋]¾]4ë¬#ˆ€vøÃ1¤‡g›ßµ«6ÕlÝ™û !7éëõêîx;‚ØÇmï\»“úìÎhBÄʈL¥÷å²ãΚ¥ôIþ ÷&BÅmÀP‡—FbzõøÀNׄ†ƒ¯[Pmä,J˜XAȽ«vÞá …]>2±U ©fI*^Ï»|³Y•«<ôSŸýin¡;l¯^­Dö˱Z˜qƒµçÝùÀõ助ná$0ãö¸AÊÉ–.öR”<1"âÐŽ˜‚‘þe‚A„0{…XÒ¡ªªj´#IÈøbx.CÔý”±¬€Kƒ6Õnîn¦¢¦ð ªÀT¤_3¤©Ô\Ó Sû4Å–j³V¿ˆñ¤É¢+Kd‡n‰™Eò ãáþðx@…h¢¢ØBM0‘zN 0²ô±î…{f$‡eÈÔš‚‚ê[ ÊÙÍŽ 2Á¶B³J~ËŽv.£¢’›,be-—¼V­ LätIŠývì}1hYá—= G"ÙE\qï ‡­Þf¯cžb ~rCµÝdÕY,Ó¾bû®öÍvO·JåŒÜ–f4§…l†¦—oWqw„‰!±š…SNjWlUÆLf ÉÖS`Ôbª"Ùêèe.ô¼™¦âQÇ1m"&ÝýövûÇ«}‚ᜄUúi‘27q#Jp&GtÄP4ÔT8ÍìrÕ3s÷Ô0”®ºyÊšI—Â0‚”Ù¤ª¢—o0Ë– öu–RRX?ÀTì3?EE¥i*±Kf»È*ñ90„ûÝO¶Fv“3Öæˆ€&c3‰˜FLSÓ#9fÑ ¢ÅÁ²¹ï†‡E=ÅÀ½šõC¾+=s Y&:ó†ãæ^?#&ÌB›‚IŒàÃ’;Bt‘ͦf¢Qƒ$Ïqu5?ãÝ-¯MHH4pjÐ A׊ÆÛÀO5ÍDP-Ea&î|Äë+€W4˜ÙÕLŠ £Ø˜+}C°jÑ¥2»ûSúl¥•œRÎpSÀ°ÒåL®É÷Gv3‰˜X¿ê&Ò¾sF<\G&.¥ôbÒ6îMF;ö‚÷¼ßÿ©ñ¿î~ïÉÇ¿|üѳþ €Ž¿zì8äÿ›c;Í*Pˆ“¼½ÝýîþH`! 4u²;qÞFÒ} ™X» çjâ­hIÏG*îK V„:{Å©N;#ÄÝß]¿d3’G!墛²E2þUwëÓTdGún!ÃÒ ?âî~{÷Û;݃ RÅÌd«¶ÒãvEipÝŸœâ§3fë×±Õ7Å í¿eÌcŸÕå_ìØÚÓ¼íÛÖ ü\£ ˆò¬\U—ýùè"SH!Yh*UÕì4z1íIB®§ò›¥\IÛLŠ %WEê<˜À̾37’2”qݸžÓöy=¨Õ¥HñC­.ÓQ_–) «U'—œ–Zæ­Øµ-6ï3¨Å$ ‚n϶Ëbe0UWRŒ,R?mϲÿ;Bm€OX§l²æmçõ‘‰ ðÈý~ÓçxŽcŸžáö×+»Ãç>¿Mì@!œWìƒính¸CŃ÷ð89®dÂTìÛw33µqÐ&><¢ g ø“N/uB3:UºOŠ@»TWœ‰´d¦UŽÈž SI¤F®4Ã\FÓeðèKÌ8¼kµ‡W:IÁˆŠê­Ð {´D†7“® L €6ª k*:¢”À€ßQ„y{B­ ®Z…¦¤ÆQi‘üóÕ¥"ªù¬3¦Êx¦~f†Ç¦J«üšpò`ØÚ×Õ,ëͬK§Åž#»q@"l%ÐPÛÄ^,^=Lw@R/G&z\!‚JSÆ áK©km[“ÉÙ¾/S@иð u¡Õ2f gV%£dº$Ikþ‡«@Ü©€}»^_.‡§ü»v )ž[Re ý?3³\—³Ç·‚¤¡æ‰§°jø²¿˜Ú$&ϋȚm`f5õþë?ÿA·‹í-µ‹ü" £¨‹×›•˲Ÿ±.jjv‰”«ífFwO©Ue†|]uïow&‹ïƒ*=@"s| Œ°nÉDÈjˆ­¹’&e¯g%S“n÷¸ˆáÅ“4Rv>Õ[+8Ù•is"JVÁÿî%±ÛD©ÄÔ %Áù ¡žæºNõüadfÕ—Á 3< síÉ4‘º‰î1èï~¸ãbÆlΉ 8ÙC¡·$Ìœ©¾6b1r‡NFƒ€:ÅY¢â;Hm'ˆ©–‡¶¾@PTºŒ»`’#|(F¸;&5è¹<š$#Em•«ÂìÅÇÉz¬˜X÷rž¬¦ü`@·»LÑ¡hü°ë§l ÃDŠV€wÜ-Ï1JÅçxÚwžúÕøQòÚæäÓ_~†Šÿ`|>]ûÚÿ ÆŒ,~À?ǧqò}?~þæõŽõªþfÈúõøu®¿<ÜÚ]!“~{»ùû­¼Rɨì=c9žü] hË÷ÝQì\¡'°f…%U<ÌKÅ×’ÅÆ^öW'ÐÔ7 k)™-÷"–j¢ÒÍ: ª±ªq2å@€#ðPÎ[ ôÀíívÿ×=)1C»&cGvêù¾Z•|ä"™°ç*üf‘°iö e & 9Œc¬yãàA$¸»P(ÛO5ñ §Qõv"¢#C¼O+PÄ㯃€Ù+|ŽìåQp¾•Ë(&Þ.ÒÕ6ÑtȦ§¤€€qHéå‹dƒ%™ª˜Jˆô*÷ `ªv±‹]ãAq8B‰,ˆ{¥úºS Ùm& Ú‹Ì žæiK¦xQ­®β‘ºvÅN»†m.íÕ?¶ò; DJnt€”¹ e¥a;|ýÌ‚SÁóZ*NHÊu^ÍJo 3 ª)•õ#ùO;nÆeO5ü“–U=ôe²ª=Oóik¬§½G¿•´Šìê,HÂd´³%@¢U#„À+¦²n@%,3ÐÁZŸ¢€~»ø æÁV¤]ÑCºJC ‚÷˜÷ZK[-ªcÛ×"_IôÀTeø ëbj—_®ß¯—ï¿\¯/—×Û+Xº[5ž[õºÏ/é~)ÀÍ‚ð‡G"Al3Pá«ûœ©§ xåhúªÖvµ.—33:b‡;EA‡¼ü›½«çvãØ‘UQ7#`"]G¤¢}ÙÿÿløÎfëH—‘¯"»#lôp¨/Kû|ü¼ç¸ƒk‰º&‡==Ý@¡P¥¡]СÍâ°‡f~ ¢Êܹ8 Yh²2S´šXZÍ•š£n÷Ê!‰–°Pä›L3¤Õû k{ˆµ3`ÃÅ¥÷½ˆ4k?!]q^žh;‰Óã¾_?ªy²Z¥º4SynFž8Â|e•"Vñ¤ "H+…FŒä1IFíZ~l)#¿BæðÈ¢q8C¥îŽ”@ôI1<î~}ƒ,A5鸚I ³á¯uf×…EF½øim‡@=ìÅu/ÀwðãºG_ ¼1Å›ÂÌ^‡c*ûY49ÛÙRËÕ»$Û;ÏžéÔe´TwS•Æö÷ñŠ3Ëý~{¹ QgÄÝ’ÑÃ"'²‹6 • næ÷ÌÒUOÔ®v»ù44ÅírEÕúß±·ª–G`º%öÔI‘°ëëÛÕÌ¢‰ªâD4ñþ8v8”ýö—‚ º¡>4ýfsíÅž Ðh(Qµi×]8¦‹åOñÒ1DZKfÂ&0-¥ÜÃJáŒ8 EϽ27·«ˆêD¶#²–ÎlY `ñjèê¢7”®Â9<Ëòì8wà wH¤U[ND—LÅ×I³v LOoHžJ5Æ'â¾WÓ%±’°7Kó @Ší2Ügœ'­ »í”½jú<Í‹ú´Hm\%Š@:H9C2"ª-"gõŽ Ý0ÂÜ íØêIa÷‰¦îé²ÒŒ·öþ,EfL¯]… œÎx4Üîáî·›ñäq7¡ªÕœÆ’äÀ„÷ò?Œ$ì¥NQ§äÆŽr æªÄ.î®6ApÙ/'Ñ@°­òì2,‹Ý]£…«>I–N×ð R©;&þH®ŽˆûšAyt1›©Úб†á¸9<îé~çÛ{•y"ÌÊM1k†{×eæ¨ßÎ~èÛ†+aNˆdwÕTÛjÕËö3ÅŸ+ÄùB,áÌfî§H‰(ÿd=iôp÷4‹"J ÎFlÛ¦ ›VÍb³*W1üuÆkšsÄ|ÄÄÌ@Iú0íÀž…°#ºyYU‰¾Èå¼ýüþ¼½lªê.hw»›1Ãé¡]¹zÒ"Ÿ&bD*Áà2ÌÃoÓìn—÷—ÝÓÓ‚iyUi,O=¢4)É©N@¡P-¢Q:³ @ š´Ak˜€ ˜!$Ó~¬U‘³RÜØµVet­ $ÌIx®Ð?÷hi½cÙ_,°c'Ì/­ `væ‰ê'<Þõ,nï6ºF3=˜rÑ>ÞEÝVÌËdÒ&ÒSxBziFLG“}su@Â=“¢þÆÔM%qaåp;"ƒ°âuÉ÷ÕÆ1w3»Ub`>ýürÆyÓ®˜¹ß-†ùÈ:oméµíT. E(]ß|ˆ2?¤§:qnló±kU&™£ †¥)º…»…0Ï ØÉ“¨j%À‰+ÜÕ¥U’Ϊzûí{FD T•w)öæ·›xŠ0¸C´¹t•Ó¹ä¬ vÆpng0o˜!<…åŽVo+6€¾;³#†ëžxV½¼;ë¶½"]iíõíÆn6A!h"Z‡K"ûŠâÂTç…Ö©*1ܧXXv,çVÌNMáZà`;Èr|>žB‘Ѫß‘3Ììé°{È.UjŠYàòÓ¶‰Êˆë¯ÿ}û-Eþíˆé…5·‡Ý]dÛLÄû   PbSQ@«‰LðFЃ:ã ~|º£fFö½/"TÕ÷4rÀ‡ÝvQ˜DëTAKìÕ›bº0§\Õ¬£‡H•Š\£™«*ªì¿ƒ+–‹õ0 (k.pˆF‰»»[ìÚïâRw lâ@=¨ñÅÀæù~fû/ŽÿKæýÿ/ûÅ_1þãjŒ?8þ˜¬ìkâL?>¾¶Ø¿ò_É5/?=Z;qßLž°Ÿý÷ÿüÄîx$‰­†õ|Jî¡á¡%º>•°•ŠTdS‡+¿ÿy++¼ýzZÒ¥êê%A»éš^^ÔÐŒ8…t3ûðf×ëõöVµ_Ф½Íª¯ò¤îÜQ„«Éj»(0ÀÓ!›• äG/®§Ô­Ü/ã³'8€°ÛMªÊI–3œGKT¢ž”ê 5³ëÛ‡ì¬;¿¼ê®I[~¡· mˆÛ͘ŕöÑ®oé~ìÒµîd§ª¢#F8J«FØ=m“b¸¥>D†5{·*R>ǾÂ7Ïb¹ó{W¡xÉ¢¬ß4VLݾ–Ö>Ö2Ž•¥®%„Ç?«“Uß[u¾Ä#…àÀN¯ É€…sÀînMOi#äMëj7»}¼ÙÛÀå|~ÿË/*Ôí,@éfv½YŒ(ÆëUOJ^·M\ÎÐ=^?\ovKZª¢EfÍfZÀ‡›[ÜÍZ€±ÃÑ9T5¦—iq ·Yª¿ ']6ÂIÈIÑ"%©R¬ÞâÝY ÜÝÜR,"Õ¤ §³„;TÀ€9D²ì€Q»G¸_ï.=5·p3³_C’™Ü¶`õ!‹®ü¸Ã‚Oƒ€Ê ’Vz<Vu6ßb¤~,“ñ (Ýìî pVÖá#“NU!ÃcØÕn^òûô}UTíÖ¬6ào¯¯²|_€Ë_M¤jþ$´]lû*>¨dÇàBʶeÙv5ž)²¢5#sïí|þå?ßÿüŸ·w "†éËfo7¿‡æ´ìf˜yÖóåfIРÝM;S( ªpcáÝ«A£ †K§º©¤"ú„¨à¤&'Iö‡ÿyuàr9«jÖ“s§—ÎËË™ðÛo·„É^³°ŒªÙ Í–ÂæZÄ™v7žœÃjÁò:®Õò°)‚zbuÉæ~Ф—¯ƒ`YÅynú–:9^†ð€¡§ê»hó˜ÐÜç|˜ê¶mg^¯×R­ï*ôTƒ‹‰!ºlçNº¯rŠœ÷sóÀI^ŒP _»]+É ÌŠÀùe£\¤SOj÷ps ³{ èEKBlß™czÜaf;Òá£j4JÓ”BÄ# &Ód땇8÷¢x0ª¯;'3[XçobæÀyÆþ¶‰D覸¦ »™%UáürVÑò[F·]T©î[r\wuÚê‹ò¤i|­RgºeŽ×pÞÔÌ|Äå… øI@ÒéïAÒÞ®°ãüRÉs¢¨÷á×ü:iŒl¯> —óùýûËù|ÑmSQ¼Y@>`~‹7u@_6=‰èFvõäd8ûžh†Fm´~è&#É߈ᖿïFU!á¥Ü9|ŨC²TÁW(GŒÒÓÌi‡­},ò?•Yõ%AªnrôD‰Àt{¸› ?HШMë–5“$Q·%ã–µÕsíž ®÷À`ì´ùµú¼Ì!)ûMÈ€Ó_@*Ñ’{•Ýó]Hh‚rÛZÉk¶?I7¶ (e-òtÃBˆyRr ¥ã×dˆÜ-f°ñüÓy»\~ùù—óOÛ¦g¾¾¾¾þúúÏÿú§WW§‹¨¹©Pú†NáI$[Þ ÷‡ /ž 0@™óQڟ׼¡iœÕ×2©沋Â~9ú^§Û÷Žï©l ÿâ;úgÉó!¶;¼²…‰»}¶xè Ü_“¿bü÷ø‹o-ê? ‘úýñ ¤•È,]AìžF.Ó«¢5 -ÍÏÆ!÷Ú©+Áspœ߃ù Át ”žóÞìQU²a?"³£>ô£™$Å~3Eð ŒD4xP:óÀÔ¯˜ëúa׈%f“©ŽÏ«ÝÃÍRU!ÒÁ@E³ÏÃ%ãK(uñZ‘ñ_Yþ Ð$ñqÿàXL¨ýS¾†’~ñ2Dôúëþ{G£‘ãhØý}5 ÊD ÜÍÌìÆèâÃâ1¢ØÅì*¤t]_ö°Û2 ‚B»XOU•ÀŒua.Ö(]¤S³u–ÐNíEüÓÁ.z2¼S%ET:79]+>Ëo˜"Ið*ºîç7Š?, ùÖ¬¨`Nº#bY‘B‰÷¸ÂáCç_Ç*\¬ H&•Q*ä0 -Ëâ|{Fœg}Üúóï Ñd2´÷Rv€Åy+g﬇w‘à2‰”…ËÖ²=pDIŸ¯´…=­åR¦Š§¨z&¾¨éµÍ5Ÿüü ÖYO_Q²ËÖ{ͳ«ª^^¶ó;U%:0ªìåºiÃvÂE¦£»ð² ì)SLAw"«f6ÌnWt‰a\¶(™üä5x2ô´1AºmÓË‹¾¾ îæÃeH(0£,@’ €€4±20×åQiô»ÁHçÏð i¾ žÄ€0lõÉ( ´ú–KF«{jþ#+¢ÑÝC m™H$N‚Iƒ½\ÕÇqr-‚¥ÏÏ(ûbl"ÞKëVÆÜ»æWÈÏZëS*_Jqv*W5?;¡‹ÁîQØD¸>®ùÈÍ3ÿœOîb›8%3¼ŸØ¯õ9¬®oýíÁõ3ž}‚òûîããƒr(š+BÍþáãÆÀÅáz°¦¤ ðÜsÖÖÍ´©ÃÚ— X!¬]öÛYK ]¦±`yžç6Y„Gj‚™j6”Ýw¶õŽ0D¤ÝÑV¯hMããNA5ïæÊa>€:ª `:Q­æîLç ÚÌé…>ø=¤ó@=[(â`ÁÀOuà}Ä®,Ð]И y1ᘡ§õ¶‡ðåßËã/ÙÜXÖîÙ‹ý Ã{Áàxk¿5Ž1À¡òËôb=ª—øá±õô9ãr-Zâùéc—’_J´m /ÿq¹\.—÷?«íT?K¿H·ˆ\÷|ŽìãßÄüSÆ_(eþN€ÿßÿÊs(Ù%û'ŒãñYaS9z ‰¬t!{„°‚ølhNÊ~Ÿ¥yø‰ÏŠQXy±7Xâq~Oa;DósawvT­OhögžV¤ÔpŸîÃuÐg¶ Z0ÑkQDJ4 Fñ3Ù`o¶Ç€¥½JÆXÓãæn#ã°å*U²ó”ûŸaõ+šƒŠìJmHEÇÇDÍO§âYÅ«þ𻃟JmE<ûTÐÿeïÚµ»‘d„ÐʤÕ-‹Òèÿ?c̵FeÚb¦EÀÊ52{É*ukVÒÑ™ÙÆéÓEV‘¸àùˆŒxöLÞä|>3ï¯?y¿G‹×%ùiO"fäÝÍ’æCSLT´³Ô´ )]äBe—ƒ£èý•vª¨Šen‘‰" Ö¡+{–:® Ö^ᆙ !ä"—JÜõJ°4&šÚÝŽP÷qõ^©ãél£° zKÄîÿó¶pÔÔ^ÔÍ>xe¬j«2#Úw©ùYCCý{ªCË¿’œshÇŽÜŸ؇ü”+®Ö€¹<ÒVcmd k¿I‚]¯ IDATÁ¬½$£Â^ë>¬ìß©ý<úO‡K6ÙçCã4}ø4…øJ=õk^1ƒô^—yº¨óÿ¯†Bö}Š@¡pî³¢ÚåvÕë7Õ,×À¥itÜ3÷d¹ƒ“"IŽ¥j—Ìp†Ù£V i¢ÍqQr0Àp‡hæ®A (¬(Âa¤~º¨èív»ßï·þ‚/<ËqqNE¸÷¡ J—øì¼~¾F¦#Ì!ܲvÑ“Œw$ÓUþ1ƒè`„°Îµ¶ÏV·:•T4FÙ¨Ax@ç‚Æ´À”¬«º f`Ã9P^7 z†º¤M²Ð -²—ÄÄwÌô½ÑÐ%àé|A½=ÑÚAêîú‰ÍuÄH¾wæHEÌ ¾àÈÁÒ,˼e²7€(ˆù4«y8–+â5èËÓy~Ø^×¹]o^JðÒá~Ì™‰©QÄ#…w¬öGM¢ÞÈ”8B޲€/¥±Œðáîs)W7Tž­éYÔài7‘ CÒDqæ'Vy”*r;! &ƒƒcàÍÌÖÚ»– ‚p7LHˆ±„ßýIXH·À‹*…ÝyQ-àz8 ® CÓ%X5´2æÏöÛáýÖ¸[ߺ±íäÙ¶Í•ÈS°ëÈ÷h¨Kj¯ñecuÌ8F¹b¬“©Us} ëwVRà©íùàOŸx© iÍÚ{ÛÖE¾~ŽÕSH¸ò!ò"2¬úªÞ®ªŸ®z‘œx?ÿôãõöãíóͧgÂX-ØÈÆE2·ÐCç¸OœìÃÿoíïÃNw€¿·¿²­§Ì½?õÙ.ˆ+q ¤L—ý8ðÒ‰½ˆÓá(k,!U$[»Îî}çr¹Êh_]´—ü­îûêAN‹žx/vécLgSüRšø°bqñˆx=°S&‚€öÒØð¬n ɽ-Ù;íÌ3œW1*nMPZ¢F‹á˜-Õ•JÔŒÐÓ¾áë_’ÕéDÔœ[Çûœê×8ñåTÿv|s5{é¥× ´S]Ùqv;±¶*vð^Iø¥=m³Ir»ýe($õ×ázI?Ùš¹G5N'»¢ ¿+;ÑP€ÀST{ΉŠ8ÔFpŠÐ¢ATpS½©"X;+"šx¢þVnå«'|˜>Ćû0žHNi°GÉlœ&ö*úšæ#àˆ¶T¾Öà/šg¶ðíË[í®ŒœWâ…I´Ò“–è’¬r¤$aYÃDfONùÍcøpdcÞ5߈h§Oœ ¿Ë&Fæjâɧ\†~R9eÆ`ì\W>ÞÏ °¹öÒL¬D¬ëñNÛcY„ÇBœ(/ò›1Æs¢ƒÇú¹ý \ÂÜüEi\¤A–µ·Ô.Nà 7 ÝõÀ‚æ„jçÝ,‹5lÀÔו.žE§Ã@S¹0±6Ìó6Æ’E¹@T¯W½^¯×…8QÉ^iëÑŠMоøÃtM £}±{¾:1P‚LV#|„t:B¡)£¨EfÒ‰Ð.éÕç(.qj0£m¯/‹ˆ¦€êtÅÃÌrõ¥ìeŠÅN,d²Íy—GȆ؞L ÏI8fɽ¤¼Çñð~“Ük•ôcñQøð°G,QqUñû¼2JfL³»c·Ší¼£ª}š%·;׬KðsNë¯/íÃgô¤ÜîçO~{ëdMþN–n)š gÅ+A$šÃáÁttQ¤ân®Ì¾fþHéÄû’: HBZ…Ä=<÷€Ð¤põœ”@ƒíaUË#‘.hŒáa÷_ßîæ6Öuoæ¤r³:AD2;­à~¸·ìÃ…tPT.îƒ:`f)6–Ë™Ry”cÔô“J\ÃÏ¦×Æpí!n' ûyLÏæ–[!C‡{¤‹Ñ³ŠÉ÷Ég¥ðOc±€,ÏÛ³gÆ79—j9že’ÉW&ÖSføå*>hGõu}Ñsµ‰qÐRêE¡¸^5†û°% ‘-ɱ姟~¼}¾¦òs~YˆDáÉŸEówÒÂøoNú~£ý­•Ãßàïíãö•'òw¹±m•R~ßþ¤ðéÒ¥h9>*…oñ°°aîî³üLç‡;¹05'ËS/r×Ü׳rXs£ŒöÝñãÍb+•&Å÷óŸX{V…Ú~ ÆR%Ac*ŽØÃàTÕ$À!ÞBÂ1ÃH6‰é1ÜØŠF˜¹¥B)À^ØÅÈzæ®×ì?«×DØ@Œ ÀAH¦VЖ5µÕS&UK¶nÆ9¨¼ZR759›]/ŠDúÁÑ|´#{†³—zþO>ðö~ñ4ycÿþÉþíEw9¿GòYÐÜ~µ{盺ª£q7Ë겘Aš¤`îÔ1Í}æ*DGíÿiØå0SôvU1s†„ƒJ ;Ø S €7r†4 „C¯ì̑ݔf }$Ž‹$’äL¬]¢0×mÀ™ád%¼=Äg&´“réŸoÿz»¹û@% ©úùV_,”—A.»¥‘z›Rñ£çqM‘¤è]‘챓ó(˶°À+ØT½cýñª•¦Ó¾_\>©×â3?g„0å¹óá©É¡µNóyméó—Ÿ/]PåGšâôµØ?0ÝG¨gÆoAôì¼}ºI•t€ËCÆp³¸Ï;;D”JÕ›\œ]p–¡¨ÇŸxxTP&o×aCûH©UÑÛ'-É_ó[¯·ÒE€Éì€á.ª"]¤°rx”NuD<"EJ"ÝN\¨P-yÞœ±ñkvhˆ¥Üv$Ÿöý,™¥g.]‚n±ˆ!fxcJp'ݺT…¤°A¦Û<†ÿ´ kÆJ4Èto<Ñ ]ÑŠ5c–‹Ëˆð°á*’Ü„yËIË"=:4¬¼\Žˆàᑟµª§TÛiVÕ¶dÓ%ñï\ÿxQþwß½xÁïD$Ô7ß9@,¼Ü»Ã£§"BX³:© ép}U¡÷ NEV[ Qº`&{ðÒ<ë@£NÍ(Þ¾Drs\å‰*P†.dÄÈòlP<’ÛÀvÜË't„Uñ~ùÕÞîf¥.!Iä&©©‹ÒŠ©DÉQ¤èd“½5úî£üuO½Ó "Ðø.clï壸ò¹òóLQU§8-¹¼ã—õvÔSøe–~´>ËþäGŸHa›ã/Í˦åfÐ4÷€ƒh :±ÊÀ¯ ”&ó£2“˜ŽyÅpw v¹u\?ߨ…w¼Ù ^PZ…'LTùÀN• ÐE x†°šØ#ìÿ€&)a•9SvQ %ÊiäŠOù´` |xFLŠ?RA15`Dgð±I,z$Ô9` ^ ‰:P)Ë<D!LX²¤ÛÀ$Ù&8ŸóO+)³F¥Ò¿YTùä¬îíÔ{ÊÃ.ŸU>¤ÇøÎw×(ÍÀë³ °øê±—ô`²C+)ªAÇ øéçŸTU?ëíz£PR™xû×/îxûõÜõÓ•¢ÊåáO÷ ½xœª€ÿÃÛóÿnïßàïíµý.´Òÿ©ýEþs{~ýœ,K…îæf»›ÙÃâQlD)Ó—NóÕûÅê}Å gš>,(ä±Ýg%-EX·+“ÑcáÄX˜m9Š¥´±Bâ\¾DpD\³:W¥Á*Q@40e6354CºSÒŠ…Œ4 }¹”äŠñõ¿¿Ý} Vy{ .e@|z ĪùD”Àɶ «íÚÇý Öïøm¬DzÝÿDȾãº`Û¥BOí·}`9ð ŠÐpØ#Ï'»´:x|©¹€þI¥‹˜ÛÛ…ÒÅlfNÅÔt¶0ixÊE–ŒáªGUUðG$-6Ñ‹ÞTUùKøÊ´‚1ÂYÅ„À„48(-,èIÚ “¨ü¸/!ý ÐE’v ó€˜Ý4,f$Y7¦ãs»ßÍÝÐ$º¸êU/×Ó0îLÂ2÷± ÊBØíNqæã—ÜÕnÕï\nðvð€,›ôÿ²wíZ®äF2Ò*Ðʤu{,¶¾`ÿÿ+Vkízê¶fÚb¦EÀŠ52*>Z3ÒJZçÜG³I°(™Áý¿ºÿZîÿ.˜wY¬%ÇpÏdÌ»±5o‡nƒ‚@o©$i•$3µ™P“VA ¿ñóê‘iŽMíTžÞ¦1@­»ß"‚®ËÓ²Nâî×+ýz=;°‡nšìPï¡)ÿ¦bj–‘ÆÌ>@`&Ú²¢2ÐLU.og3šúðΈðdµtšŠžýPeqj $£’/K)\ºú-0h¬„›´´¥,?ª|3 ‚2劲¦QDšJƒ…'l¢ƒ1Á· Vå°Éêe‘ANl¿Â``i³YLé"˜©ý(M\¯Î[Es`1Ƭ ×¸Ý CóÁ´¬Â8 ðä”s·(¿J%§¨ãuÛ«êß§ÔâwýÈý4¹ÎÌ- ,͵\¯›F…Ñ#+3¥RiÀ¦h öCï3 °°DIÈ]•©7ÖÉ4–K»é&Ëæ7*Æf0©X˜9-‰Ïp2\è–Ã~Ì`¢ Üig°ÄÉtî"bšTES½Ñož×\N ¦AnžæR`Ú¨€»D÷èÐáAäà´h>S‡‰ww³Ž÷•»l~&"š¨Ã¬É§»5`8oÁ¤]° ızv! sq"ü pÀó¼F¬µdÞ¥z<ƒ€ºÉc¨5Óö.Çüî?°}­ôâqlÏõh§’ÌÔÌοœß/{;›© Ó=^Düæqö.ç©Ìß ÀÏ^û=æ]fGGbó+ø¾çoÛñn.ì÷¡Ÿ‰Ž.˜±ú „¦ÀI8%Ùátw¿¥qHÒ/—î1€Üœ˜Q¦Ô3TD‘®‰™”4¹èÅ›Ñãö¿>Ûîe™@€xÐÝð[Γº2w613!m ¶ûTz¦WRízýŒ`˜ˬÞ0#É©Û!¢#""B…×Út¦Û¶¤†ƒwŠ»û¥biùì[´8ܸãû—ˆ®h\ç»GÉnÉ"Ä®4ʲB [ÎSØzD›ŸVîþ©]æ„,tK`çØÙýè>ÜÒùš<¿ww½z.Dɪä(â±NFÖúi˜êìüøõ#ÜÙ«Ô\›YS;™ûgt! zR$¡£¿ü£ ;›¾¾=TM°YtŸÑé7¯íà hJøGÝÑdDÈ€miL5MªN&MU4eWÐoÓ·–DÚL Æà—£fa7÷tTR³“Ú³“©–òm Ò P­MªìýãFléÂ¥d¦4Á´E „TyU$μH.’È•B+"! ÓÈ:cà™<„eÌž´ŸLŠ,±Ù"B¶„µ«f*fv~{×&rRѯ•…ºcT€ÀÔ&T€ì@VT¬£xœHr–c±ä¹ì#w.y/£ÖíññêZ‰¸Ë>®é4{™gÏü/Sf/Kw‰6¬g7EÈps0ù/¡]cKg×PQlê…œ“#Ð HïÒ^Î)B€vGØH†GÄ(¾z”,!1Mì•·ï8{° )³í·HÇGn°ÃJ§›–†"Á' ;@¢‹ ªê»rõ²Gª@ƒl""âð낸C„ÂŒd${½¥§˜²móFH–[¢« „áY„Ïèq$¡ÄV=UÞ ÄB#æõÞGE½¼ÇÀëßÊur®vë#~3ôéÝûöbVÝÏ“Å=Hp (†ó›½¿¿¿¿_L -ë `çÚòøÍuh´PSkâ_Wi•DËÒ$ÓT¹šH]ú"ƒXùOO/n»mß¿vPÿJ4õ»«ùïÑŽò×’wuÅ~À?ÛS[é´‡šº9,ÔNîIS@ÙB¬~d{zLæ®âðÅjX‚„ŒŠ!÷ÅX€5«û\’7aiÌDOê;<è·ð²oAšÖy³O6åëÀžé1cq¨(FÚrâÀQ¬ÄÂ6%¸i­¤ Ö(g<ÅyIÙép£‰ˆ4Cíþ%n.gÕf:R袢Ôu"*!›ªX´ tì¡° Ý]n`s$;Èk‰Ö,m-ãFÜ\O"ª`Gš4bÆiª[Ö¸zAdùuÛôˆ¬ˆkÞ|IåËÉW,2ÛÝxÀè,ŸM¹aU[Ë6Gå}f¤¿\TØ …½].—÷ëµÜbõdUÆÖ'M™M¼{æ›Ý=¡oÍMCw—&jšå‚%Y S  :CÄÔ´iHÀ=71ÁŒ¬YˆrxŒÐTˆÙ”=êá`˜édÙ…4S€ØVç«]ã`é•Úºï¢pu7” Ý€!‘b¼[é%h”÷wU’gA5Å}E Yµªâd›Ï›¾HZÚ]ÓÙS¥–ÃãpI‘èá]¥ASRu‰4°³òÓüEñ…‚…øUêá¸Ïî(G–Éóçì꾓}<×&/3èYAÒ »›J9œfg@üëZi’¦Ò$&õÕ¯×èao—÷÷³6ó~˜ßüúåqóˆ‹5•&íí\ÆZ#Ê*<é—ÝAš6±—Ëoþñëõãã/çf;ë›òêŸâGÍ65;CÀNÙbI/T{GºjŽ?›^Þ.Ÿ¢Ö䜎֙rš´R…¢¥ñÐà 쇓dºí†À2Ÿ kgJ·µÁ–Šj&gŽOv8BmpÑ"¿ëœÎöLÿ¡ ' ¨mÄã6Ù1k@5`å64§ ± ­#‚HøWáÑ]Ojg3£½ßÿôImýóþÙÝeâKZO¥/D ¿ [ë£n2 ºkJÜÓ/Uœcuñÿ—zÂŽÕ«Ðï¦RÎaX´‹¤“OÜží šÄ "ÂN†Í ©¶:M' 'oiIWMm $}¿CTÓñ[àì bª=€H‘B¿1º»t³âƇ—oó¶5*æÉ& ô¤zr;Ÿ?ÿ'–‘mÀ Dq%s8ó)Ñ@ º§ D턺Tξ¦A‡ß<~óËC;™èômÚP: J¥’ìŽ1€ 0â‡(²69/“8¬šµ9ÉñÛJpЀ׫Ã6aêShÓýë¡å‰«u1g+Mót5›‡‘×*_•ýý1Utk瀙yµu‚ÇÁ)¯ìŠæ¹ÇêÀÃãFï¡'3là $å÷nð¯ÝTRlE!òàâý]?>>0Àçó;€¬Y3; ²°ˆ—7C‡œ@h&$ÇA¯Â¶m²Töiåôfiúä›Ì”±~þýn#P‚‘™Å~zÖÿÎè÷YÛâw[Ò»ö¶=oò^µqø pŽcŽ/~À?Û¿´½.8ùæiz™®°†$D¯4"SÝvK3Ò*ò›ûÍK+kÒý®þZ–ûù,P¬¶}/½A§<îßþªòj}{ÀœÖ+ x¥$:í±ŒÉÄ%Ž*·«5dÄ¢äqDÕ|Î ,;|,f™ÄƲÙ9 ævÄ- d˜š–…l{-Ð ngÛæu–êÈâjˆ\T8ç¦ýjTÇâ)Ï ˆ@’ÁxÀ3ä~¸Âë*Á¿îuÖ¿f,-3ÞSvXOˆ ÔQ 0DG'%ÊBÄp1À#k#Ee=™h¹&°óóúifºALÍ @jÃHʂʡ°v²‹T $¦҅„ÌÌΆ ö%Ÿ×Ä‚Ã* lµÕ ¾!¥†Ê?FÔTÌìózÕr½BŒ°fÚDΟ3l’õQÛ T—™°ø.;ML†ðÓ~ G­'J¼€4sfºš÷:g·‡š\÷]æR9§uÌów™ÊlP[%JCb eª¼÷oÇVcæ~ x¨ëÞ_úÜOÕ7yÛëbÂ}‹n*¦jo—÷?½Ÿ/4Í 4qw÷$nÌúä“(ôó×+d²ˆ!t–€‡{š~¹‡¸{Laziˆ®p‡ßBºÚ)p²Ù¢<¨=[“³Í®dIs±äëC‡Z“äµþ×ÿ…s릛Jk¤ˆªA MÐ ´Áç’‰ÌTÚ€4±N÷imµnG ÒJjº2eæ- I¼ç–tSUd4s›^ß”åÄõ—ØxŠcñ8€î ½Iz˜sƒÌw T%JåîTÈ’6ˆž/¿\ì‡øøtw÷¯|ú¢Æûšº*¢òµwXn ’¸ç’胭Lÿ·íæ^ì¡ç'_>¼÷Ÿ>¾ç÷1£ÛWöž“é#ùT6òè‰o#'¨$`cšP@fdd„V³“š™5‰Ïõ³ªœÏff$oõêw÷Éh!©çLA7Ôyû2Zjh&öv¹¼ÿíßÿˆíëöåË—íë•"jflÎ;R\JNPU©" Jq-PQ­t*ä·vĘö2fŽ'Ð:'IH¾FǭɈjqáz¦ô)‘y­ºFa½Ø2Pž!•Ɇp®<áÛÁôžaôL–ˆ¨]ÆÃ(Dö`¯iñDyIlÃóâàË=ü,fÜì¬D’}áÒÅCQ(Ä.f—·Ïz>ãN¬Éz IDAT¿ózÝ¢…;Žv•ý׿~>_Îo6„sØ„ ׿}ñoîw·“‚¼m ØŒo0œç·«–ð&™0£P}  u¸ˆ&çY§°sŽó›™ÈpDó¸Ûæ'C…gœp¡U‚¢Riô‹ªRa]@¤!8ž”eIm#Ôø×553R”ì6“ ÷ˆ”ljø‚£‹Q E­¨U3•¤øˆt_¨?n¾±ÒáVeu²#//¨öHG:Ée¤Úåír~;«Àï±]¿Ü¾9ÝLÂ%×|vî8QîBɶ˜E3 rcb>³©»žÉaÏCa,ŸŒKqÄž^NᎯ[YÐáß´ˆ‰90šR`PÎ…=ü}C6X¦²#f0S¨@D*w¦Ã› TÕ"¨*À¶yJZÄ ÈA×b@8÷ë¡€gªœbþ«#£˜ºH´Hd"QäÐ쟋³5éxÒÏźÜÓ¡)×–’ÑHÍGA‹AU)ab@à›‡0¥àÑ$š(F›½eoóÿh,à8‘GŽÙbØeAŸÂùN"Uf˜Ïµ¸… R{Zíõƒ‡k’·®â”Œ˜‹ŒƒqšK@`|s¢œB±‰ªšp'‘ú‹LnBZ²‡ R ÷y²$•M³í.P+ò‚—þlÜ÷iü#IÚ?;~%À¿Æ8~â9þÁK’$œ«çÌ~°eõŸäç%Ò¶25‹¤twÞ=¬Ø¡óvìõ«ù¸W‚ôÕw? ëg…i½ìùöÃÁ¯7s½‘@ K°K”QùÔ©Srw i¥*%{u¸ÕtP+г= Rux&—5’I[€|o ÷¨¤¨#¾Œ×³!ñ8ÜǽÜzÐÇJIíNhÉfyÜóöÚ×,}‹J9|´ì›Ö¶ó«;Äý¼deYCçs–@öob´“£»’®£•ðž5ί]Ÿ3RgQ­#q »To&TQÄÂìÍÌÍ¿…ߦvy»lîú.Ñ eèƒb_©*ÝådW¨dÁ¹@Š*=õrùl¦î~Q©€Íó_Œ+Ÿ¬ Ü¢9[@`ª—Ov¾\.ošá—lW3«éð íÐÓ, W…dß"U¤ŠAYeݺqv/ǼœÏLJm2i‡ùœ$™ }Jª#õM©›JmiìD¨!¢‡H‹GZÀ~-Ÿ—TG&ËhŒÖ, Mãéú€ë=ýÚ^ÍJâh¶l1/Ø¥Ls W‰= FsROx1ˆ3,(Ñ ›»ÓßoÛ7w÷ë5SÄA‘Å€¨4œñ Ÿ«¡J„oÛv{¿¹{N<;©}:‹i2íBª_2o¬Š“]>ñÍÑww÷Ôv–“ Ѧ³ÓW†@|sMÚGÜv¸ÄíëF ØCŠj5;¹MQ¯ž¬~ÉR0`ojioèf#Fô±´¯`t™ í1ÃV@€»—âXKgqo¢i'"vR;™@¢Î5z ­z˜sƒë®£°92O™l2&·eˆ&6" @«šµ¨o~½Ýn_·l|M±YTLnH¶ÖÉÃ>W­:t¢Ç8³§MG ˜9òâºÇ‡å;ã§’gù» sA&ºI[pSCJ…øÝ#àïÒ|^T5P¦K½¤®{.¿P(R, 8˜{@T=O‹Dô–5¢‰VõpÒ]gãF¾ÁõtÏYÙ¯d/bÔc\½ã#ù‘ìNdZ=²ÆÌŽ`æÙ•¤H%»ˆª U!Í$íñ–³NcÀÑÅ ” ™çŠ¥\ðr¨–Xâjûu¨O÷Nfàt ä^Ï™I1Èÿq¼kö)Lœ¡.ú÷¥UÄìþ]¸ŽÏ…(¦ŒEÉÇvú;ôwcÚŒ ˆ.¨DI)–@‹èF´ˆæÞ‚£m'?û°©Í‹ñaüc=Dÿÿ_ ð¯ñÇŒ)@øj!û»Çc 96Œó†ˆhþ(AÌÐXªTЇªÞJƒW­² ’;l|ºØŒ™?O™Õ"èÊáãš,€]ðl„K@bi$d'p¦ž-ܘ!´*J–d#[ò0Â+DY$ÞqÍ/Ô÷ÇNüèÕL é¦,ßi~0œ”È(ó·Wçí?ÔF¬ÿ2 Š29x#©K¨|OMG¦ZRƒ>µŸjßÿEÓò1ƒz: ãuG,eæ%–p¬/ƒ¯+¼G:6¿€èÉx'°œ‡.(TÕílv>gY/iÃz~»D£ºq^µ©ö)˜ŒÐO GêÓÃÚ`kùûås!áß<›ë²:—mêZTrB‡˜À«[Þoöˆææþåo_ñþ—¿üùóŸÎ~Ϩt Q!Uµ¨ {’4‘,ì›fÛv¥Îk›ìÖó €ò.‡›óTž‰h~Þ(°'é—©¦“æ }p€Ugà˜‡RFŒcS—̆ˆw’†êМ8£xÖJëŒøÁ;0§ÇiÓ÷“<)b´¢õ±€Û^ê踞ôÃOXÐô×m1Ð@ÐtóŽäʊ̉B´1 ä¤VÕÔ, AÔ­gõ8C›Ëì¾,);¦?[îÍ<L¹´oˆ™é™×ëíúŸWF@Äl2~ÌóEÀ"ƒ ÛtßQFçKšÏ‡ðÉ}+`ŸH}¨9ÎË÷{÷ë#<ÌW1€ìÇÄoÿ‚µ=ôˆß¶ødVÇ{#o\¾Œ‘yK–æä”ø2ÙwâBŠæºŒFˆ;UÅAgÜó÷,w€$¥tj$LÜ÷WåolˆÙ6" ˆpiø-gDÙO-¯ÿ­ Ðñ€í–ŽkdÝ8Aè )éF܃PCP$ŠjU™k`—É‹I’‹²DT±®â Ѳâ™'0Ð<<*È oéŸîEŽrø¥kçõ|d ¹I ê4Q”ÇÏÉøo¿zø%^l"¯Žë÷cK%¡AÏ2ø oÍBå»÷í?°ZƘÝAnòîH[y»&C8fÉÂÌΗ‹dm|¹žÄ̼ÍlSÐtœJ,Ô‡'®Y(®*6÷ ·÷«ûF„TªhTTÌÌÔÔU" î£L×ÃÜÀˆ?ÿå3A/¢éßÐÜ{Ð]Pµ ±ÌRæýš­MRUO D6Ч†M0ÇXèq“ÎTvÄò‡<£€ f^QTíáhEdÙœI÷†®Á¿ûhþ‘ŽbOÄ{ù¸+4 Çæé¤°˜‚ b9 /üKögdÿ˜²”Ç)+£™3´èôÖÊZÄ ó¹óz»Yqögª6Ži–/.oFª»áEt ÈêjfÐá~ÈŠ\DŸËŸÌ `°EfÊiCêwÏØÉ¦`Ú';ŸÍTˆÆÛû-Cÿ,fÊÉÌ€N¿;DQDR¹ »ÀšÙÎȦj~¾_RJuH CE ;ê! 9Ü\séh ÄT$ˆqÅ;Ý ¶H-(­²^“¥?´@‹˜ˆUV÷,ªw¨!ÝѪ×dôDÇÆ<;ë20€Ù-2HÒj&Z Uѱm~{ßüî .™ìeœÝÈ<Æ!¬û$š ‹ÃŒRôêã†L¡Ç¹),šýd»ðGaôc2u,‡5óåx$ü¯OËÅÐS”¾¹QXÖ1Õ‘m¢‰ Ö$°€tðŠæè¢U F­Jeivx‹Uîcc0D '—(·üTrUE‡u¬õ9Ig O¬èϤ,ë=1›dôÁ²L sU=i#[dyyNVt䟷»]?ÝÇb•уny³ÇEL6/+©tûŒ»NÑŠ½G¹õvRÖoŸLÝé-aÞaˆˆïHÒO)ô¡9ŸðÖŠK“HøO®Z[+@ƒ Ù¼ÃûÁºÛͪ É<·Õò&“<¿3ØFž¦Ä´OÒ8‰Ù#,UöªêÌmü׿ è‡X¼àÕ¥‰W BRº\TÀºRyò”Ê䘰,üð¤±@„"¢BñB´ñS`@û³eòï··.åßÇ%þä~Æúùz¾;ÀßÛ_oQJHoÚ¶³ý¹gñq‡äûkÛH°IL ù„N&Dçðµ'“–Ù@Íeë‘’nï_6<ÌlÊõŒAIúÖyšë[=ÇqwßvÂÈKŸwš†` Ç~ï-Îkáî¿eýI8+Oq ÊÌlÓI1xtdÕâ8Msï›®Œ à“±)#—Hl°‹‹.B€h° VÈB‰ë–ØÛãâòÔ™Ïîð<›§ŠéL½cM4ìfYÊÖ{þd×8ñ3<ü¾Íå€L²Sß÷rŽ1b@ô‡[ˆ;R¤g3MŽÙ‹È¿ÑS'‚9ñ¬eÔ•ŠÊ‘§OµÔ³ß,ÎbX‘„£™Ãà˜îsd’_¤BÚ”Þ¡ÊÂßþy5¬yò3'AôÈr̛ב U̬;“Æ.9ß1x/ÆfðZ)"²0r2üô€Õ- ‚ŒDÜÍ”m¶¶vy|w´C‚h|D v}é¡%FèÆEÔo‘J62GÈÆä*燛j[Òæ9¿Ñ `®sìq–Çùø^–ãø¤¼ÉÍEíyÛöyºÇî†]”•ð4§Zøjè•:LH„u¤b ‚2!µeFnØ´ÓËÅìv½Þ0s=é鬗—³ê®Nk“úe°·p7X  ª†{žÖ!E4ù| ªº(Ee" ¨Ã›'kƒPlÐÿš7U8 É?'=rn‡brD š£æv¿ßj³›{ËUÏš× XÉ( QdIû\¢’=xRâpß«Žfö~ß÷÷cMåÛp÷haŸÌd¡‡H¹âœçÉl´Žk²ß'}(=ͯCðá>Œ§o|Ù.'Œtx;…¿Ü|P?µ2´îŠq%Ï[O q¸‰ªÊBI±·æáðæI˜ó™•Á¸Ý=<Ììv¿Ùg› ª*):%‚<&x@î‡=PÝ£§à083¸àÞ`næ jú¼ï<Ë£»F]î¾t§s˜ùöÏV(³‘±¿SžM+uQ]tƒy þ6Îê§ý}œsà»üÿ§})"û´P|3Ú4ÿæ$}ß·èP ¬+3£(惇)ƒèÃò,ˆÎ”Ãaßü½÷Úp ˜Y÷B¢zò]AÉ,)— ³Ûí3»G |r!&MJzƒkwÆ wø.î6†‹À=šaA=©Š ÄÖ|„™¡Ã Êˆ;°ooC‚žTî}RÔ^þh«£ãz½²ÈëåC$Ì3]R’@ ôEU•Q±:‹ 2“Þ„jEd<¸Å­­—ÍE€ÌœÆô¥=­Kl-`37 ˜ÇØXYE+ó‡ ¾!YɨӜÜruÖ!ÓÏ1ÊÓKí5`¤Äëƒ9Ó{~3{'r{n‚4ÖHUL¦j$ÀWO›r?8÷0"+‡)÷p È"hˆRdÉYMQEU´ðæî~ýýêîú!Ürût7÷hæk„9ZŒº?fWYÌLwo8)‰,xŽŠº 2ÃY‰ =iB¼Åù‡ü•KJ STŽYŽLë²§IÉt?€sò¢ y»ÛÎZ‰ˆ 9Ÿ Â-5ÎÙSÖa«Ý?‡<ÉŠJ;$õÝõ§{áAhJØ~œ¹[}æ ³ è bÀA[oœ³ÌÛŒŒu—šÕi–EÚv¡ #`ëIÓJ418=›²Ø±[±©P²ƒig¬m€ç1á©£‹ÒõÁPÞNµ A,4X³pØèB©âáãÈðÌÇfE·}¾ÝÌ.?è姺èIµÊõÿ~;½¨–z„YVeÏqŠ4»µ(DÁ#@`" ]TO‚Â$Ü"a««jt÷5~ûíw~X? /ª—‹®n·;«¤>°.êa¹Ýo×OwÀÏ/ggUoæZ'¦`Ëí´p†”ðfÑÝÛPÿp¹ù½»Ý½f"ÔESÚWfLéë…Þ€ ­šõŸ÷ÛíúÇÕ>¥”åj JU¡æè°†I´K -X%Ú]*îÍ ‚}9«L_cÑãn7nL×Í É‚sÐL¾ú=¦Ö’¤z õuÙRµÖœ!Ñ…~ÜÌ|5U•E“ߨÞ  }Šëõffº¨V±k~з?:fs5¢bÈPÏ꘽m‹öÛ~.–‡ƒ1wQ¢gEåHx æ/¶Àïü¦s†Ö<š!)ª˜Ùí3´„êYïv~9£¹­™ò%ÊØƒT”¸Øb±&`ßD Ëàs Ò‹JÚQ*£Ôyb|ø¥‰.nI.èðÕl5VÀ¢è4dŒ“B§ &±³K¡ç2cv’ž|Û;Je¸©°Áƒl‡e¶`ÛÞËf„ÎÌŒEòÌ\„ÖÜWc•vÀôE3$:b4Cœ<ˆ‡8ÈÜCw»¨dÙOé½ßŸ1;Lj°OcïÈxž²Uúôã¡\ « FÏT~Sr?]TÐÓÿc-*Q¦þA˜·0·ÜBŽ‘xyOl!ɯDãÍ!è# 9®$ɨsÕî@™w‘Õ;ÓrrŒ(>Y²îh¿‡ÌJ¡¨ŠhJȲoiÞdòdbÖBtØùÉ©U£*›G3'…Ä[ˆ„MNEò\ø&-G†öî¤@œ™šžÞN€û\\fœþÐ)síó£÷ûÔ¾YôtÀ9Þý¹ýÈ·žU9zÔ¹+Îõ¸OOêÓt¿rNT‚Ü7Û"f𱶪oHXiÒAIU©«Åà‰$‰™¡Ò»`õhnÞ\¶ôc– *ë‚DH,îUµ;€-›GHM×~Gd¹ìH·¦J ÔÌöüj€$ô$Æß4RwtÈíyø˜¯–ܶ9í†UŸð‡ç1újm?øøØqgp•3Q³Ìþ°-°ÛdÓH†ÙtL`Œp._‚¡¼móFÆÿ|_óÁJïµßà@«GP·~“I‹ôX Þ‚Ëúñç¿þﯯ¯¯ºÐÍn×kòWKj•Ø"D_™êÄ^GW\-œCÏTªxò3wwÐ×ë-:~©*ªHÞ&§ÝiŸÍšK Ã`‡5¿^¯úãY¢J ªÌ¥/ùfÍÌÐRË4„d•6Mh X °EU£›·z85š#$ÁŸ¾Úí~¿}2û|¿ßmLŒ2, yâp DËüÞî±H…JòðKº”ZIJ¦n¢M„Ì\ö@¡ÅôÞÚ,ÒAøž-`—¨ÎF¢; O/zþñ‚p³û} ü+±È©P›zsûtD("dT*2£‡g‡‡ñøúO]õ¡ùáß§÷e÷Z¾Õr3ž¡" Å« ù3¼6m¬o*tV³Ïv]ïúÉÎ/gýAY)PDd-w€¯Ï™wÏsUÚÖÒøjÉùŽô¬T² ±ÐºnKH¦üÈX âm¦ý+ŽÁÃGì;9Ùûè»ÃËi0(À;¤;Á-(Ãñð,sèd¨اtm<^ç¶]¾½ø>ß=øá£ ޶{0×ãmÇô<·_ñ èÝöu³ =øîY‹$ëØž@¼á„4€æ1&’!«ÏêDd˜µÀ¸Ûõj×ë‹¢ž?¬Žæn–,ålvj†­™ÚX£Ÿ®d{õ¦cþbùôߢí£õ¥bàÿj‹ïð÷öŸnñáüª/òpδ:ŽB±}°!ÕPˆOèòX«†ë²§dýATG\øúqo÷ÝÑÍKðaªÕïkë¶Ô€8¬\Y²˜—•lU™‰²ÏŽTÀ…ºà^inÖTÂQÈŒ¶f.¯›,ê©…# ùK»­ë)‰1Ý×2|²Õ:ºÌóð~û´EÒ.¸s€H'>Ì÷¤Ü#éyIËÍòëNæ‘Îù©õ˜ê…oñ‡?¿ðõƒæàv(ˆðé{ÈæØ¿w‚ç_ŠYGZæÇ”=0ÎÃ!“I½Ñ"g•D届…^E OªR•U´û-àýždoÉM•~æpÚÈ9¶Á">ì¨DÏÈ`§ï:ÔM r”.Y†}T™¼Í#Ç›ÚÐ,q—T¦}ìö‘È Û¬)Ï©N ÄF¨û°ÏÜØ4g>ñ4Æ>îušA›KºáØæ¸8ÊߺkË+l{_/”VÀ–æã¨åÌ Ô¡½…sí5½Ùƒüù½dZE¢;ôˆ2ã÷EÈ2øi—o¦Êí~w¿%¸ã|¹¼¾¾þò?¿üúúŠŠ±wíì$92`eÒh©Û"׺õZkíz÷ÛïÜŒ7cµhÚ"`1ÓŠ3YŠÒ×3;ó݆Z-«²ò ñòË <ò†Á͵e–&Õ¥M ãh»Vl:†ƒƒè!žÿL@%¢»;Ù.V Àéó ¢(D&'öሳ“ˆªàÚ'3S)`ŒÈähšV_ÜèîŒáÓ:,”5Š!ZÀFT¨!òGQ9ˆV¹ø Ã'éî~¹ß6Aˆ IDATøëõúÍQ!**'Q±ƒšŠÔŠ„»B=mû„Ê6Ž|Úƒ©ÐTä b¦6¨­ãô¨SÔm!Ô-c\Ý û»…Jg(òô+IÀNªÑƒ¤T;}>?ù"f ÿéÿÇùz¹†L”§OG˜Å+Rz, Úá¤ßÞ¶Qô﬿÷‹Þï5ƒ÷åÍÔ¸/Öjyæ#û€)äVöätICÕ‰ Ͱ"èp÷——­æ'?ùéøtL7 è"-iaO6œ¦H,B$qoA´‘ïš´R@Ð e*µ¦ò0’ŠÙ×¼}`æÓîÞŒØ6ÇâÜéÞœDö¦…ßôZ uI¨šÊ2Ž=„µ¹þW‰ôÂ/Û÷²Â¼5®Fõøf­“ý4³ªSÅptþ̰vyi<¯r/x[>0®Þ Á%ó¬Âޏ…7G²~tŽª!ŠÔ9#^~s _˜ThÉÀu}qy¹¼üzóÓÉÑ*[hQ0Øœ7תÛö¸æß?ïwÌÿ¤rïÜ®Øò¾õû½çÊ{]¿Á6^žðò×”·³ò£Áýþå²!?XþÊä¥ín©%C^YQ@¨€U£ùˆ%ÚÉ“1xÙûg’ð¦ª÷j?}óKþ¹oÃA'ËÎ{¥#ÓÕbæ æ»`àÃ7ÀhR¡fRT¾^IçÍ“¦u€À-â–)—ˆƒh R ÔH‚„ÁPj,JHitnßåŇ{XµD誨rÏW‘¡mÛ¶I@uÙ> FpÒâGÍò¦¼Y×çbºÝžû¦+ï¾¼\Ù†ÔSn6,±tœa×-¢¼J›ÛmÏn"RL!g L£RçÚšœ:Ãÿ"HX *ø†7Ew¶ì U \Ù›³lÆUvÁaÓ(+¯,Fk"í*3Dsž¹FèA’Âe(AÝ'h'ÿmPªkµ ö Eó¡ÖÀ>бTüÓA¾Þ!í#t/è;n³·%æÁðaY¡Øœm€…TyÝÛæš (ñhÉòèš@ª*Ã{¦†ÎÉ/[¥ñòàŽoß<!»½½l8x¸†déZí4f1cønOÇ¿ýýüüü·/ç3F„6ÓúU@ª ¨]±¶ÌŦ!lBʉioº˜Ã/@U¢3š¿üv¡•Œˆ9†TR × -ú«ûÍG¼ŸHžÑ‰ØðCE<-ÛóF·ò™Ÿ=jäW—*FSµœˆ*:÷²…G wÑ[äêÇÙwláP†G™„Ï H5íºÁ€VµJ§C Õì ¦*ÕÐÉFoÁQ*±!ìXh”u½Y¶ ïÒcLÚA¢+º«Èñét<ŸÍ„.~=¿üòõúz½â ¶³Ù)Aø1¦8øHâ&£ öe«g¾+¨;;üœDÇ×Õâ„í/ÄNï‚3Q¾6 =¢™ÕH_ž hffötB †_4Ø“`8LÒCËàSdO›¡€1Y/ªÊaShUQƒÌYY޶õˆhŒÎ±òÈto¿õ…M',V:÷igÞÙÀ›s¿]ÊØ¼Æ#9 C¬«Å¢ _Uk¤vÞ*…y*ºc»Ìª’± {àb\cG·˜é÷ÛÚ”xÊÈü· C®ùþ[r*ï~ôg•OûÄcÙÙ§$Ùã2sؘ¬xRg°UÄXí2[^¤šVuºT5 óæ® ÈXOd>´Û—Øî‚½øW•}ðó(c›~è€ÿ>Q•ßs˜¼+[WßøGùsÊXÀ6ãuÂnû‹Þ+këv}ÝO‡>a[@ÞÞ<ŸÀXÌÊAˆ,ÞGªH.[ÜYª›íPÛÜ6ûöÎúlæ ç¢OÔbZî^syŠL©­e¢©VµƒØÓñôù,ª×Ë…áþê6’p1Y¦¯/׫\ÖÈ2êÕL§ªÌ7cL ’e=?ÅZ±<CµÅWÎÖŽ$¯AÙ{dœƒa›º£”(»ãßv('àú½…óf»2ÐÊÇÄä»R÷Û‹–Ûo åͲ¾@ØkÄ´ÀÁÌ0#dêav€ˆw÷«C(†'¯ßüòê×WG«JÓaÿío9Á̦›‡“!É “/ 6HUö™©ÔÒÍ8œ5ì‚7wŠVAQɘí7¨˜¡‰c!mÍømpz7VOŠ‚òÁdßìá{;™2ÅÝÇ\Ê ãomà)ކ‘5mV,Öïpr•„d}Ä:nSR[¥†lH¡‡Ójb\+Kó}%ß¾åú^û¿®ºÛ›„(±&‹2xÑdFt€”*"P•/?ÿ÷¿þñüÏgûdÀ`„7j‹¨v,…R%©kv¦ï²Øn};‹ß¤ÌdfÌ9"ãŒq˜løé§¯—ËõëOƒ‹È*NO&UÏÇ㈮šŠJüÚ„áî®AÛÑGC4‘9ÂÁ›_Úź¢@)2o‚¡MþõçSœØÎÇ'êA¤Àoî2%‘‡õ›|`2x"’O+ pspÐd¸o$Ù_Ç ô û'Ð P©ªÕ¤ª²û"Ë%¶|Áß–YàvY‘e±+ó*Ñ»M"Ñ<ˆcU=ˆLÀßž¿üüë×ËëååreòÃâõ7dZ'gþÑ@ƒÀo—eðÝÏ;wÌŸNளF–¬„ñGLŽ?"ÙÈÁŒ‹¶eY†c‹ Ùè%1ðü_gScËL“¶D˜-¥žñW­W)ƒfŸ$ºƒâ×ë¼{ žˆ 3KkYQ„¶M :¢3ná7O™ºØX³õ;E_û°SãÒ,ß]V%F*„2¢™Ü¨ˆ¤iLne'@ Ò$…²÷=!÷«ðwYLÖŒéåŠñ"Z†ß2†,Vq§eì-!Ö»  ¿¢<62¡‹ÿZ¦j@Iþh]%ÑBù ªª"äÕ´¢ÙQ;OŸNj5¸"Uµ/#jñÑþ²ŸDòøäóQÞ…¸?üë_=YèðÃþQþ²²ÙÔ7??*åÞ¯“!Z–Ýbswm¾›O=ØÀCR¾ÒG°° ›\ŠŽ4¿Í">”å)3pã%Æüh&-^Ùnûz_Zaw:¿oŒºÍÛÚA$w¯ì“Í^N'½^^.Rtñªdb? :Q IYT)ˆ[ M»¨/ðŽÀ}¾Å`®â]Ã.µBƤ!°ˆšd{(JH–F,ž™§@ÎïC¦"ØbhƒÜ=ãã2wJ-ˆ­öU6ÂþÚ x±±T§;ØF×L—1#›ÊßÃ:kuôÈfóÖÙÙ§"Ì5‘GZµTMX¾Öñ±Ù´fìò¬ŒŽžŒÜšo¡#~TM“EŒm­­ÖÐ+Ù¹ãe´yÜTk ¨Œ£dª ˆ-m7HÞ'"•¨—8‚9Ô‡:‘ÞMÀ-'š7“Ò³<^% ´sõ°h_¢£×«dû[ا.éy’É2jî¥C„I€6X¸×Ö‡lá÷Ýóxw—)lÃñóqÜàø[ó#0ã/zôD¦¢CesÞ¨öéüüüüüüåüù<¼W¢¨  kÌÁ+ WÙhù}€FÖfšp«/K ø| %YWRU¨&-@^^ÍIèçc‚s|{°ƒéÑÔ ‚¸òz¹Ð L ¢ÈˆVSÊÁ´J€Úp¹…7gs9˜VKZ‡ä…v¸÷EøùˆÓI!Ñ#nŽwúëåúÍS®’+ª’A"n¡Ô‘š¤5ZMôNܦ@2*»Eqh«¢UÐ"Zx9–ƒ”{.¼KçÀAøe]JFƒg³–¡b”ß ¼^¢CMáTÌü ?=_Ìp¹z8äÊ´0})«bìe}Ç õvá}³ùÞÏ®QÞ߯ÇVËEëú\6/žq¤›ð×HYÔ2-£L €@ý?ø$ÝRXN¡0°>Ð~)*'3Tk=äÕ¨ ÁA£!Qh©ÂÆð`sô) ˜‹V‡+ü«ÁK4z‹k¸G°cr){ÄÒRsM¹¡“AÊÚvw6ð÷”7®*d ‡Ú ©"ŠÆ-ØId˜Ji¹Ñpíš%C)ä­sâ‘y&›Ÿ[§óλ&{%Kþ?íá2¡áNl¶­eøßÉšùÓËf dÂÑúÄŒp‚IF©"*CÞ¼å&lŽQuC /î(°O¦*ÇÏG9܊ΈH Ò¢RôwÐqÿÁòN°÷ÿoY‡ûò{Þßm×ðòo–÷Æó+û!vß>£¼ ØeP¤*føÈˆ+¢U"Yod­n²SÍט„»\õÓÌ…Ùy¶öGêùÙd·.Q©²†­Bƒ°MÏ+Ad´ÅT.e|²ØAiùëuÈÖáfTì`H¢#H2‚p{^aÈ­Zº°ç‹ƒ$Ùcjü(j’¦Œ@ž†SwtuQ‹ŒJF_O•wئ¥tjµ³Ò%Ü‘êù@™ïÙïŽeº¶L(s  v£[¦tgËÄ„Q‰@9Žhg¤õ’µ,htu„xUSˆ¨T55Qµ¦’&D4™)гõ’õD6'íu"èPoJ¸:Ì+Ї <›N+¤êÊò…ÑÌøÍ£ÁšG30¬[Fo²o¼eÕQ`°Ño^ÊPa –Ù¸ü3ó|˜©€þÙð± Teуóú®È8Roç)·XŽ ùŒ^ጸ`—úͧ"ëœb‘'1*èÔª8˜Š:cH|<\+ÜÄ>ä¨ úþzño~}½^¾9DEͤÚ5ÜožÔP™ŒŽhD™¥KIcS "Z%ãÒ²ªR ‚ô©²9˜k[ë7£f³wñ¦»™ö)BËþÍEÕÌN§£Ó™(ÄñÓé|>__·ˆ[à*y¼P€N¶Ä3ãáBºŽØ¬çŸ…ýîÄñÞ™`»õÌ‹Ql|[sÅš¨»Jš3Ü€ |,ÖMÕë¸ p;Úé³í8ê•¢¸ 'ucÊ_¿¾¸{.âRUUôh–¼€e`¤äïÁ´ ‡ØR2É>î6¯é3›ÛꛦÞÙÀßc ïïpçgáé™)0¦í£»L¿VnF\»cÍ×XœÝûG¼[Ç• lS±ÿcïê™ÜÈ‘ìK«@+³,µ¬¢¬™³V²n½Ù|ë¹î™3Þž5MkÕ3-Ö;#ú`³5š˜»¸BAu7I $òãe¾FLB†t5@ø`¯<âì7·æ–‡•.¡q…·,¹ßoAn2qB´‘÷1! Jw§œDŠšªžF íB"èô ¬ÀLíi‘ª†˜.Ëm¶'S½ºA@u)–R8 ÿ?5>_ýöŸ×¾ÀßÚïjëÁõòø†€z G¿°îöÊšûÓ´ëv;$*3…Cók²;†QcKVìÚ^q0Ñ\ûÖVW×@èv“#ŒÖ_†"ÊñVª)X !¬¬-‘e]Ù6¾„njO USÛJIÑÜf³‡¨8†ÎÊI¤)WS. ¦‡Öu9Êz9DE^‘5K:¡Ë´òa÷Œv§Õ´û½z[³óuŒí™Ñm Þ°Ñ»!*Ýýp—:5MÐíö|4»»–ß]ï¡pÞ”ÅüÄ«5L`*™ƒ 4¢EO;—´¬è!¯È•Énê”Ðb´[ŒØá0ª ÖG¶$>bõ°Dƒl„Ò ûÇ¡MbÅHçMžD›™™Eõh°\ÿ 4­Ð&#Ì+=&Ù²úe¿ÂªOŒ+*v‹lóL[ÊëÛ[÷ö+¨;ÃøEXw¯‡¶šylä. DµÃ$Žm…t>ènצýƒcŠ?Üθ‘´AVG7£"màÎÓÆì™Íá~9Ÿ—ówçOŸ>~üøÑÞŸ×ËF¸Èô§È4€ k¤÷`b¨¹÷_t§R Tfþ¯è„ X‘°Û^(•N"&1S{žÏg}gݘ¬¬!“ê zÒh¤;!‚ áÎFƒÙûY§Ô/aYÅ@`U¯â¦–~¢z´@Oê7ç——“ÏKÌ4Àq­àA¬˜ˆêI)YÂшhŠtß)²+ñØ ª@L5‰X²XD dR¿]3©8G±÷wôiÝÄöˆþ»ù>í]’-¢1H+bïlž[?ËûE‹²ÆõÅ=èÏq{§ƒ A&•Àüvù²yð†õ;ŽPÁÛÅ ßl¾ðK6öÁÉvíDh6`TÈ-d™’³M‘U)£FãÜ™ÿD‹m–[>V ª; ŽQ„¿ 9™©ÉIu‚œEYAºß:åR4 ‘DVÿ&'æxcŠŽB ¨|Eûm–ÀÎý vVVÄÍ!ƒ˜ ÛÒ64Z'Bºï6=A>¸‡JÞz«†ÒÿÏï©w‹–52¼»ÿÚÝ1{´¯™Kz‹¯?ï_gÛݼfV×–…71Ñ`'ôÂ+Ãe¼ÖJÈqÊêuXCNª&„Iƒ™­â2XôÊÒ]í]ÙûU&ðnú±Úòk:_ûù£ÛæÚˆm”_²·Ò[qò×T ¿­}3€¿µcÛò‡r×ÖˆâO‘ÛßJA[‰Êhd%©w‡M°cZ h+Õ¤Z%&Œ:Z;ìg¶NI™îØ ’"RL%B%«dñÖõ[+û¨oêý©šo\v©Ä³cM‡¡¥ã-0‚°¦‘Ú²åƒõ¸âžIxÔD ²çXVÅ uzÜ€J~þô×OzHÀ/ËlÏ'AòŠéI¤¨×I<™Ê 56ôàÙà ó^s§['@–é0ñ¤l‡¦ øn²:$µY;˜J *‘ÞܶJ(…ˆNL×fÆœ{";oj]÷g¯Ì¬ãÇ-’,a]f©5¦jžgáF@"‘ŒHډʞøâd˜e…A!ê*‘“àG°*SkÒÚ´Ž¡3ñF%ÜÇâW$è HÜ®—ëõÂæ¹¯ÕëÍ»".²è6pB4Q)“Ù¬¢·ÙÃ//þüßWÿìrÑ R2PR†6ª•NÈJ›{´vÁ 3WsLšß|-×ixwJ–8jVH*VÝzç¥EGMžÆh%¨'IèÖ‡XTKžRkv™àÒ\ykÎäñ ÔuILÇŠ5†ÏÃW Êê2˜ºjÂÒ€I{µv@W7(¼½g*!  d*ir‰‚Г¡"ZÔÄrÚYw6ÙÛéJ‰0g'üÔÔ’ëîr}D Uu-9“U¸'‘SÛ[3zD… ÌìüdûÛß~øá=YÔa':©ÔNvõ‹ªy„©¦«b›ÆÕªÙ#!¹ï4¦F~Kè~7º°b8™ñꋞ?~úøñ‡Oú~.bÄ €È‚ Rðáûóó?áÉ´ˆ¨±:P™MþòÝÙNÈ««ªR°<Íq£f¦‚¨T•¹|øùÇüéùÇÿúñÿù+‚ ÿ|E‘y^Ì$i_5uÐ ³n΢rŠ•x¦uÉï¾åQ# ~½\/×`¨@g›ŸôüýâÕ‰ð›{E8õšª†Ö‘#nóêÏ?ýŒ,Ša&&f j\ŸöÏáô—‹ß˜È)N°¾1U‹¡‰ ½‘¥ Ù‰¤¯îÕû¼UÀ°¥–Lq_#ièí¶éõ=éD‰ûwæu¢œ2‡œuÀk+eÉÉ9ªA‘à (1Ùw7Jp1Wfßh›Ú]»»w£ÞákŠ–Ùét¦æ9"ŠVçÚ97×KM=̰ê"‡Y’W¯»@úþ“÷>§Gâ`ý¢ë'£Ov'o –NýØû¡N€iÜ|~'¬äͯÿ wσÕo”¹‡V³å»s4˜ŠÙÓrýì(à-PôâXž,g;µµ>÷Óvíš7ÓLØè=•ÿN*æËÓ²Ì7FƒTjÏòJ»Z;sbº;X0´ vûó-\4oë“Û¾ÿªå÷EeŠãõû˜ÃÞ{½ëI^wúPƶ$ ’ ·X=ßCåŠÆ„²‚5‚J)PGè@DS¶éYÙǨ/±V[Ú0=ÇÀ¿‘7‡*&‘*R4pM½MŠÙÓÙ?_ó“ ¢B¬Æ .ÂoÁ[t_Œu¿Ô³fÕZhÈì¯)Xu­“,S iú20pù8½÷ë3PGس¨ÓB4H=™dÝ ^Ã&R¡QHwcwF’Dp 'ÖK¬áúÕ¾æÉ&2½Zy_Ý~9«éE`¨Â†Ä«™P6ö*d¸w6{þ0['CõJWÌn·ðUÀM¨Ììb) —Î)6FüX’™.ù·>œç§Y3Ïvuиóæðà=Øä0TÜËU¼úˆ´dS§29r3¥üžŸ¦÷Wé¤WBf0CP!$Ö8ºˆ(&êäª „STˆ@'5³QÒ_ ¶Ubz}¬J6Hépe}þù§¨’4¥` âN{šÏïU‹dR±(Ѐ'aV:ÃpÜnPø Pé à Æ•Y´ÀfÃÞƒ^Éu†sFÚk¹°ÍQâz¦lq4>(¨vÊÓýd7ªŠeYXi³i‘ÃR\ÅT F#§Ð»–™~ùæ`vØV¬í0Æ·wájÿº .k%Ÿ ¢bfçïÎóÓŒp©ø í–“„0A/;N=}:ÛÉy 4à <ܯ¾œÏ^5âêáÄ-¤3e£N‚“öé.Ò“>*¢u¬ûÅ{ã-xã8Púq/´fG×þ¶_‡®Þܵ¯ªgÄ-«|§P ó2~íœóë·Ò1h‚ôµÕ¢`Ÿ½Õ¯‘;mÚ EýºëÇRÒNºÒ›ç‘±Ý û¿£SFïœqŠšIÿ(ï_[û ûiU’“ @/‚…ÌR–ÙzÜ¥!#~cx.’>RÝ_\ŠY“µ…Ф2yÅwðŸ/<ò}|´ÇÒ;'nçtþÇìÚÚŽ¦¸·~ûlˆ½¾ýÇD{÷m@ÿ¾ÀßÚÿ¥¶;›u¿mºÁ²î…ÕÙ5Ú$é¨ ·p§‡“À$}w­rÒ-ƒƒüWó+Ô+»rüšç=wi–Àf ³åd »›Ih‚jDYB l¾^WUÍL’Þ£ˆ¾[æ3çóYþuõÏîî,Ò‹ýrðm¾šH.7¢'"Þ+C‡»ï%ޤÆZÝ ÂÆáµ-0ÝÅcQ¦ G;-8J€ìåÜC¡¶Y(¯Õ÷uÌrçáÿ”ެ@3—²FTFxwñ¶ƒÀ½GR 0(QåN1ÅðrܽEãæÃ<ŽëçËåó³O‹[ þâÏŸtw_*íûæ®"ÏÓðhѦQÃëJ.*¢Š¢‰|î­$3aŽ%é•$ÈvÚMß!mNëš-œeÉ ÑT¥+ñZ„E½d"JNj&¦eÛy³ˆ&Lh#¬us-~¾ ³%³odµ¤«›»éÚÖ/r]¬aè'÷”H»G–ѨTÒ13¥ÙNß®2N@PŽÄ-Ó#¬þNÕè{c€à¡”À]Mq'…@'Å(¹Œ `€ Ó +‚)vþpþôï?œ¿?ël‡•Ûàî—_¯£#«íq|ißö¹$3-S ,TÑèôà»þGpw0X2Ïïæ%‰»:Ÿ y‹hžeDD†¦TNffŠ,—UcE ˜%nd»æ4Ùl¨÷ŒºËÉ `åiá.ïg3›—e±9‚×çç¿ÿÇßÐ{²ùiÉÊywff'cfù° ^|5¡™Fdaa-„¨-ï3[ÞÍÑàáwÖˆAÆžÓkU!9Næêâ›tkw“¯€kÆTìÙ»ÙNÉíÈ23{²ô°º»ë€IGC&Q (h"LY8äÞ½Èý#´ãuu}!Þr‡_Ñ1ì^°`üY‹Ú;›Ïór>Çç«ß<YcÕˆ YâHø_¼Kª)³“¡€„¾D» N÷ ¯ôp0äd2'U3ËòlE{AùJ%úéî·p„ç¤ãàÈ0,zŽûzsbu—õó«ÚÃoôž&HSºÇ?j²­—I•i•Þd¦}mÇÙ2^Mdo’}ýh•lG‡;¹²¿-™’q`À{qþè‡oħq/^ßíï°u¶/T{hÅšT/ _ƒîQ“Tm‡-Ϭ µówKßk½Ô¥Òãš‹ódfY+«ÒöU·¶á¿úþþ÷Ûá¶7ßøã-ÜWmç¼ã‘oð·ö'7îÓÿîÞzý§·2ˆ†•i'wGšD2@º_^Üä"®€Ã IDAT”l.½4k I,[÷ Ç]`2¥Øt'^å®@ãûLû@wŸåè–SU›H*â“$¦3j2<œ8EÔdYÞø?ì];—Gνˆª¡:Ò8b+Úý"³ÍvÿdE놌4ˆXÝ/@U?HŽ,­ís¼ç¨{ÄG³»žîÅÅåÕÜ *%ä‹„˜JÇîp8{ÊJç¹|®Q,ºê ÐÌ.ç^­À–ezÓîëaçŸîDOmèƒ3Æ6.¿,Øe(ªÇ©¬`BLÊ‹7†zU+¹hF l–Íer"Z’È¡B²-õSk´«N'«.ªÓ<Ï›ÓÑÍ||~¾¼žËAK)z$2Kˆ|`…Áhä"­û‡N‚ƒ4ÑDo„¨f>Le*r(¬æWŽbòîUãÀé¨KK}7%—jöŒcO.Ù€»C» z,<º¬å0’{ǼuÁð’W÷˜WóbgÂá°.Ãõ°±G~gyÕ›«/Jã[['>¼¼!:©£HìŠNOG/´ÂJ-‡â Skq¥U€¢%»‰x¥f ‘|sמí¢Pkgbdƒí\Tz͸SQ-•nÕ½•$Í̆÷‹§ ©Â‘àMÀïG&žÆ\Aà#Ô6ä»·Ò0<‚N^ë¢Ñ@H£4Hd·nîã>)Îö qÝçnn~_¶pñ×XYCÏÎéÙZ;b¼v§þ“Ú>ˆ£Cøƒâ‘D¡®,ÉQ¡(Èð®<×›S=/¡ö°:λüçôùåd“¬½LI¯Sø•éò-O,û~û+¾›öŽ=õ;ÚdÂû·4øÃþÑþûö~0ó¦ºÌÃÖØ¶]öh.ÿml#ÀÈpX! "ßie-ªÑ.ÆJˆ¨ D‘%¤\ÐÜÙ%7ƒêL*ä±WˆôÞ&´ð ®Ë𠰰ΘCŠvc V*(Ž\–' ÝK†¹x~³——Óñ8?—@²N?Mf.§3é¬Ú*HRD°HvÝY·c úP­R^ëöXñ‚놃˜d•yLÝÍßd·´½ Ðáoû5(ÊÝ•.ÕS€ˆÝ}-ŸÁsV£#Æ= 0P¾æ º`u —Ûˆš„)óI I7 Uy| аÞþÖsI¼©^N-§Ÿ,;¯43{3¯^¦2½ÚñÓGuµ+íËåóét9_‚ãç㼪’Uê’*^ùc“ÖëÉ•ÚÅxÀEûŠ»©ë–ˆP(rÑ$è:1‹Ft¯¨éM5ø®•«¦÷‚‹‚‘h‚!ŠÒ›÷Ñ!ֺŷNì-¯âAÜâ᮲éí©‰¶[¨³õø=ÇJa¬y¸; ÛŒñ8qeÆ:PØLNè&†²%¥{ØLŽÕ!ŒÏtæ¾èÂND–ÅK F$ŠjÒé©ÿ6—©h¨%׎ p7{3t@OT–ßYÙô-ÃÖ¬dƒ,†Î>»îïkA}'€RŽó0°ÿw¨×–Ö¤}^2H—iŸ Ð AOS™sùðDîX’] ¡þèÙü†›½)™ àQe¯Ë~}ÊÜ< "x´°3ø½†©ß€ƒ¥š]ÍJ)ÂÐî¶ &8Y)ÀˆÜòˆUIV@‹™å ~^r1sT nI¼‚ŸGÊ=‚•¨†¥B»™;íj+컚H÷îÖ­bU6¢wºoWøæRk¤>®Ø7;wšO ¾zv¡ŒY_p ®© ÅT¹¬‰âc_Ûþ¸ëi@[I$ƒì‘ÓÍ£ÿ6¹õOBÎòØÙBí è†M)Š$^ÝŒ ±ÒÝP]“z–r(¥€µ¬3æbç×ÓåÍ|¤/™Ùét²7³‹Íg¦’!ªhþ›Óà¸=|´¯çåî›?üó¦}¯3¼3ÇfõÃþÑ~Oû†½ü›/ômd³A¤«ã:ÃÌ‚¹þ[Er Å®g¯#Ömüdæé‚xtºæ&ì¸È) ´¯$a’z«®öqœaul¦À@Ÿ¶m³}0M‚|Ý®<ýçôùés9”ùiÒÓqþdÆ2ì-ôK!X(¢JGãhsY¬7€‘=~æúbtEÜ$Ñ6FœH÷©R f"÷˜*ú<Ä™dÿÖðl÷›Ú>¼Æ „¨l,À(½<̃4ëpÎ}›éw•Ÿu0å:©XW¤Ó.º<ñѱ»Ë˜ïM½¸TTI‰Øf!qúrį€(Í>¿|>ΚCC(=9ˆ fÕ¼×(×á*åïVVSØ`ã%hÞñO³ЭÕ‡[gµG+,S+ˆRb‚f ‚Ö5„ÃÉwªÒ™Uz­ìpÎ BÄ9Ê;u_CÀ£1¨b ÙžüpMo™´ !bóáNmyëW¤‘'¶6Ù§‘íËÙí¹ÍÅ*²­{É¡ž=¬´Ûý(°Æ¾Êúü#ñµä‚áã×ÅÙ9Þ@ßYzœˆ' Ø»¹,Єyž>=?Ïÿ1~×?0s³ Ú˜ ¨ÐÒÝw#"·]Øûdˆ!oS9bøH¦ðJÍ/ãxœ>}ü(ºq€«#Ež¡±ÁŒffW—ˆRÉ®rª×ÖЀ(‰Žï®4R6v)ÇÄœ§W#P>L"Ódv´‹½^¬ .bne*E‹Âjn¬ìÁ£(ÙºHB2<å±%fE¡T «9J²@#¤î=+*¶â˜®ƒ }y3IãT ²Õ’7ÁUzbÁ G{ÂÄüoêÙ݇×3 !Tá¡ï B'ˆÄzBC¤ iÔhLñ®?¼³zåÞ¾MyÃyùÊݶT”¼¦ô›Äм\L,ÛãwøHP{`@DÐh•¬ÆTÌͯޙä£ðF»†n¢Ñxz9_/A›dÆÌ ª”GQ Ú¼¦eJð{íßoj5ïú}Õ |ífÿœȘf?àím›™|OÑоû—ï·€±ñßAGˆ5”„:¨W&ÐàW˜S!(ª•$½¨þ]lÍÔÁ½M!Õ] uq˜áÙÚ™„ AVIaE:¡¨X‹D¯¾xf})‡¹ßl€k,@]45÷_þýÙ*èüùùçùx,ó<_ýr:Ûë…æKø~E ) ,uÙçØÜ·»KCd’»LWï1^G—´÷ÙØEžxÒz fÝ–lÌí_ò.¾8ºÛãýѦ¸ÄnG¼v39Fw(`èh?HFuÍKENzÏVÉ¢aÐìhÃã¾·÷0Âå‡GUÉŠBEÀ«ŸÏsþòï—ø13C5=õP‹÷_•\…„Uxe)EÝW £ç#ê/[m, ¿ ÁA"g)KÈröif #/k)ÅëäîªZ´‹¿\.çKíš„Õ *Í5)Ä#/.:^#›€¾Ã˜X#QЬ‘¨,È¥;x1(k¬á®Ý¸Á·“cøÌ_3è¹~ íß oüF”U¶£Ü·“.ôï Àã u듬êbºŽÄ¸ <¾ÃñrüoŸBôü‹õ¶c@üjšU3$—ç<ÿë_?OóQ²cGwÙÕìb¡¶Ïc¯ûnâ KÀ‘UDº(4àâZéÝC¦Ug¥7WÁüÓqþû'ÍrÙÀ2ÓhÍåJàâPˆi.ñ sJ¶Î0¹\Îh°ìZŠä."%rŒÐF«nvq§fѧ2ý4Ï?ÍZF †ÊôtüøLw;}9ð«ÍyžŸ&»Šv97HBi=±¹döïa¸µK4°»ýðêçW»|¹xsƪ̀h—`ØH‘iOá¾Ì-Ùwòvn§ý¼uDZœž}BvÇ{À¡^:¤4 C² kÑ.ýí^)L›eÓ:ƒfqcöÃ?‡dº®”džl§4@P²x…ÓÍl¨ók™Êüñãùõ|úÕì|†ªf-ÅK.Ȫt¬útè|°â|:üÒ(æl?ÀS¨¸'Q Jj¬þðmÀ+ìºÑùO¬2×2ÌxQ’ag%‘ Êïl[½5Ò»ë[: M‚CGQÍ¥Ý6cÛOsЄÈYø žØé,ÆØ8"ŃÏï¶F¯Ca{}YƒÚû“÷ûþþÎþxnƒûÖŒ\›¨]MMQ]’D!ôb‚ÐH{µÓéd—‹yˆw¸_i¯'ó87@’–R¦§#DXYž&€æV@„áñ¸¾;Ëé/×Ö¡S]z{óæöcüí#Ÿ—ôõ–€ðö?ÖƒÀMì® è¦ž0”pz½m¼ß›Å·\d÷[· õu×5¬PI¢¢.a}9+BX/o—q’žÜÕkG¤½½9ìÍ^^/Ÿ=Ù«ùÿ¼òùÏåéXžŽZ^ºN@Ž:¢­×Þ Ÿâô¨mŠ…í[Äe‰ ø#÷Ÿ¸»*7Ç‹28ÒKë0R|ÊåÁ‘Óa¼ ž¹Žšà÷OšÕ< »‘¡:ÄÈ48±ËÅÂûŸõ<¿×¼­œäio^réä®g»ºJwAI¯À›}~99üA SQ9PÈ­‚ŽYmÕÑp<<¢° PÉ$ˆª]5Ê Ã«—5GÁ$€T˜«[¥d[¸Ö¼œ_Ï—óÙ^ tõa4פFb±xG}Ë*ûæn­4N²‰ÂØFnÆs!CŒ?ÞMú}§¥ÍÿF7ÑFq‘åë[ ß¶ù’,’½>nU{0è&´7èÊYoÖÆvv›áµv0dP+ùj–RʇòüŸžŸ?íå‚zH•Ðnñ€} obí –覟õÆI‚MfšæÈdWš`p­CX)¦é)¥<l~Jƒ}(š„U/ÕD] )ãåPLz²%`Nöÿì]=c$7Ž}ˆÈހޤ‰ªí8’&Ûìý{?õ.»ðöh"Û‘ª£‘¢¢&#\²>º[gm'F2©»ŠÅ"Aà=|pfT;œ”‹«ëIª^˜ïïîö·ß ì¤ìIw¼#0ó3ÛɘX2†›Aj8ÒŽ I8 —ÆÔ¦aB‹J¯0o!¯TÅ‹ie}9žàè êµ–Q÷^Ï'õº&[)ºõ« ÄÝ)‰ec v!€ˆ³ ;gŽn ‘px'¡•.pE€>g°ô·_/–â;¥}ã[9™·?ÏíNìÎnŬX$Y†ái˜¦IŸ•ÜMÔO %qgÇѪ«NT™Ù]$ÜQ"È.Þ{„ñ›¢Õ†4w¯F;AŽ$©Þ§À- ÂÎ3¼˜?D~A 9²µk˳X`¦˜cš‹ª½öÀßï­t· â&°Th÷ÊtÉi6Uc !t˜ Xµs«³–²Õ;Ž^·EI¯IÇ–ô€ç6$ ¯þçRÞ»-l/píaGYöê’L´D ÅDøÉõEÝüð|8~™L=Vãñù ªx…ªZQÎ,"2ˆÈÞÔ½ˆ82««US;)|è_‘o= ÑŒœ‹_ý©²æ fYêѾCþó¸ÇF;ÿyðç0Ëï”Vð5ù½w÷;¯³Öw‹l—iQ„Wf-õs:òÍÍ@œ@»¹4Ö‘©•­š“ô^»Ÿý `á93DÂD# Ëéø|œž&3p"Ú1SUØ[‘IQbD×ߦhú ÌZ~}Sê$TrYp¶1Žb¨€B³ºÃŠûL$FíÊÍìqtmIö¢ 3WF2ƒ4ƙȋC˜YLõóÏŸ äj’Ev´G¹ÏT<ÎrÙu³5Z/;WucòZ¢åïGV€ÛD̰ÊDD1§­Åœ™ÐY»ÒyæB/ÜÒAëˆ?NRU¦f­!pP”n2-¼ ˆ–(å>÷=ìÖ¢á¢[OMäL ¦Üê‡!²¹ºæõ✢މˆ½˜Gê¼–ƒëÜ,nŠ„¥iP,þèU“¨µnž bI𢨈¸;w⫝̸[Ê{aàišž¦©¿”XllhûHUë›àÕÔuzöñÖ÷¾÷b¶cÙ ÜT•), Fä“Ç«! 8Ê™:$"Nª.î Ù·•@~²ã¤ÇJvr5õ“ubCQH˜y'Ô\G5ÎÌÙ¬x[&XîÄ ""¸ªšª!‹ìzw%´Ã»³:‹+ù,!‹—¯5e3áôÔE LÒQü¶N¼Ęƒ àžÀFÞ ±¶è|¹ub¢¬X±3RM‹ÓŽç“©½¯jg)qŒ¨J`¶ùÜt~H!ƒ3Á‚Œ¢¹39 3Ãì©(ŠÞÿù_ÿzøûvhŒ2E´¸˜á Ïzx>"Ãí^2›ƒÒ;zØD“§NoA2™œÉÜ @U$p–ؼj¦'dГюî†a¿Ì%pxÑáFPLØË°»—ý0ýòùø<Ùѽ(bòâê‚níPLnnÅG?™¾£ ´Ôáûã8È8P‰8“©£BD(ñýG}TÕIíd??žU¢ä[2StÍa–=Qæ†LUÁ’!.Oχã¯-N²GÂt˜à¬GUud ;6˜ŸBב[s«˜zn"›£­¼3@¤9µÕ…%nMÑ%µÂŠ¡ºSìµÅ\P›s\ 3ÙS&ɤØqƒ,L¦GNå}xñ†RKyí¯Å*ÏMïÏÅ.LjôˆŒ5€ÅQ… €Ú)Æ«´š–ÐNX³™5 H³ö1$èËññç§ÿþßÿû×?oÍ|÷éÓN¦§ÉÍ̉EXÕ(³ÈÉÕÔª ‹ì˜¹Cn/zˆî '@™‘{ià -.;b=™ÿüô`5óŒñã0Þìû=ÝñøÙÐ3kÊAhõü2 ¸Eÿ^¡l‘¨A¨3ÄQg@øYá„Y’W…hÅ­zwÍ Ñ"M˜ ¸3(í”+ÜDϳÍY5´†êsf‘·RK½“™6íŸðVôebgnÉ>À9X0õކ^WÖWàmÂÌòÝå´ˆ´öÙ …hƒç°U«³kÂŒ%VqIéO,+f‡Ãáù€ÿ·¢‘R®ÇÀœ‰²ðŽé†ÆÛÑqÀ`Tça'q ¸&h²—¨ØÙ÷å‘ÏÒ¸€ù¨{} í›ˆ¿³@»ÍNž/¸&N_Cn®yã­YÇj=,ßl‘ó¸8.² ]ORóüÅs-jäJAÇ3Êøº_³¹ÒÆîpó_ ð%6ó>ùNt€å/Wáû€œwÑ9+‹ÏæQ¸âäªfeÛ×;â@½y‡÷ß}Õ˱á¥WN»øëµßÅÁan¦ s‚Á¸æ& ^…*¼¸õó/Ó݇QÄ‹‘ÜH{QiuÏÔ㊰UXWqÄ‹Q]σ¹öÝs jõËF†$´Ô¸5²Ð.Èì-Ëaµ¢73ßë¨ÎÒ‘ŽËöyÝœn°Ôyyð3±Ò?Ð$¢VÛ¨%¦rææd0ó~d/ó ćg•],xFß`(#gþ|ú7 µø—n$Q"tƒÕc§g’,¦£ÀYHdÉäv?t»Xó:€¡0Š")"Î,™8Á#$µoh¸ÂrS¿”˜³»+*4ˆS‚ÜÃíH‰ÜÅðr#Z½ŒÔ®Ç—‚U|-¦åâ=†[ Õ¬:Q3¾Ù\{wo’»)™œ¢zSbŠT…,18Œˆ-dþD ïwÞ\þúœ,Ðâ@Úš~¦“êƒÝîe/ˆÔîS‹jqU}9`/ÃíÀ„ø¹ª™ªŸ@Oæ ƒ3+ene¸•è ×vH¤ "­× ôÅχ£ºd†ûñã½:>ŽÇ烵îo[X²TÞàKMŒo³ ë+ÿÝÀÓÝÉ @œë5qõK×è52¾Ñ &]Õèoô|º. É|í^ïfÅøú™±¸âß,¯3®sLK`˜‘(E³†€TÂr ¹¯ÞR};œøŸ´}QqþSôl°¿é[ß'—#M›%~]ÞÏo¿¹¾Sþr€ÿ’ÿ´.Á$á3ï‘m§·ª^ÄæLS µsL­j¨ž<êìy§@›]•ŠÖ|LíE2–ß,¥ 茎ÞDnl5÷j{φu‚íÅáÍ›Z[`ˆìã ỂˆÄáú¢‹™ˆY¡j>MÓÓã£Þ“ˆÈíÞ•?àQï$ÑÚàøÒ{Ü»‡æÇxŰ^Žyî$ùã´‚$Ñß(Áó*—†SûP¸Ë•‰8AsTÞŠO›Ò|?6„OD²~ê7öµqwÆåš{oÃî·éãhÓ1ìsù­ƒåLAÇœäÙÂa$[-BÈT›z4þ\Œ¤S±H­;´U»8EÍ]"椔Ékp½Ñ<àœ 9ò6gƒÆ½Ôñ¬\[u(T°Ã¨•#ò‰IL™˜Ùú^l¾a>«¹ŠÂã^]ZÜÑ1ø5Ò¿ékrÝûÝ"2«²XŽÞ÷¸1õøá¹Èí6fa+ÀÔòÖƒôê5?oèŽe«®¦ÕñiVfeÐæ‘i½ßçü°i¹¶ò±{Ø9 ­¸ì'µè¢Ü˜3‹Ø„Gý÷xÿãß>ýôÓÝý=‹ ˜«öi à’èž+z\÷oHD\é4ƒ/!6^,Ò(2¬²—ñãØâŸØ˜z0HÚøÝ*¤6õowªŠ “ˆ Ã𓩺%xu+Qöˆä‘‹6æ¶šª)/̲ÙK#–ÁèP¢ì3X“R*(¹xU+wdn‡»†a¤,z8<ªQöài9 ªú©nKq^á50£ iº¥C²¾†/{îLâMDRÏñÚ³]ÌB;¡ ®¬Z½‰×Á‘ëryñ-rµ“V\´²wdßÍi5ö›dë¯ó¹æD•öö7Nt“àz6Ö\T?0wHlá*ý¾ÝX,­f%9*5Â#&¸™· ¦^Ý~+WÑöE¾ò<¨øå–uþ¾arG§gìfù[k;r '].¶¯v—á/ø/ù^9[y¡C{‚ë…Ø×NÜv¸¬â'6:zŽ^07!áLD¬EõEÇÃAÅbâ™%³èYß„¢¯•ßµ‡ní­qåÙ_܃¥Þè…0þP݈Dˆv";xv³VZ&ÎÉä/þøø4ŽŠq”Ä"rTGѰø£iЭѷƫÓDµúÀÎ5Åæn×lÀu ßÂtŸ?»VFs*æú¢”Ü*¢¢=2œˆ¼6µ‘ŽýgÇ|¾:ÖU>00ó_›)I¶Ýšh¹d¶zâ†/ñê©;™|î§ÍÁùçò-˜B#^çï,Kxí·µÅÌëŒÓÕ]¬e’—“¹‘‚nCn±åÚâo+!Œio9žÕà¾:0Db|‚êrÓݤpÅŠd¹ˆ6瞸ՎùàëܣǒXˆ‘{XT3.vDÜ.×6¥K¬fx’nˆ ½+!®r7E€oç“ûêuŠ®HÕ‘h鞟ƒÃ_âL¶cɦæ-cÜV˜Ý¼»ºÀ² yZ6 IDAT|VxgÛ=b ¸c­:@øOˆÞ •”A5“³¬µc°· isø€¨vÂl)]ÇV€õßîà(Û›e>j³ë¶oØ“ŸG¸¿šH†VÉû!«YVú,ƒÜçÏ0¯‰MÌ÷O6.þ;0àúS(ÀéiNÝvÌ*9™2Ò”–¿Z>}LÓ0²ToKnâz­¦ÖÀµHÕ!«õÞôèUc{TSøˆÉj¹~<ºÞxšMDÒÓ”¦)M ¡ÒKÝ0X®¢Yá鬅Aœø”¸¨aê·˜#™©šmE È,î_ YÓɉ J~€ÁPH£u¡1oM„*¨99;€µÞK.P(›EE®¹ hV) cæSò®iéã²ü¼¬¿?_>A$²‰K_Ñû9¼ÑsCã·þì±"Ví';Gº—Ú ï¹"MÌ=k?•Z]Ì_ŽÚñË=Gk”Æoß9:¨8üIC¢F¾-ØÆç¨ŠZoO”U.z~9«¨ba(q¢lËß>Ñ«\Η•ž—e™žæ9%&sò¼kª‚æ8€Mêj*×-¬§¾ËÕÖõòüûŠ«¦)ý´,?/Ëß>"òúûóóç/ëùlÅƨ­¯á7 ¥"ø“ƒÄZ \?cLþWPê·n*ŠÀfžä VÓ´ûÛÛýÖß`>9z€j`Ô¯üS  _ð{Ç tz¨ì™Þ~Œ¨Ù¦ÏÅínºæÌÕl âà}ù†¥i05àÀóS²lò"vÕº±¹›ÅÔÎ_ÏÈJ —­±º±=è/µÝ䛿Œ¡÷Ob„Ú0£†k¾#€îýV\¼Ý¤;äÃWý½ç ÔlþjjÌÜ7gÿ'mc³®ey›p0ÅzQŒæ¸2±¥ÚDc5‘6vÅH\8»Ÿ¼{“oMÚð#ÞèKw;“×z¥_ ¸RhAãíSP6\•”j¤ „½©iGz Ы"Ãb+.R®Å– ­zME˜'T¥ü½"×ÕÌ«òdkéˆÊ@'÷(زX²ÉU%›µlvê­q··M<1D:ù·‘2'à>tž}Š÷¼¸úrÚÇa(Ùá–JØ:ùí©©yUmM‘€¬Ò˜ppdm¬ +:?}œæ™#õÂ?ý €l±TQÆHRä^u"›IÕfRÌ–ÒŒ¨¸’›‡¼«¼¸1æÓž¤B›åÅÆ€NVTDhöüvR5¹ ;Á8›9—š¦”žfT&‘¦)ÍËüÏÿù§];‰§êz³“ŒöÕ>|º±oQ *†È©1D4¼q×7A­.«ˆ`·4²;ÕCÜ„ vˆi6UA¤” )¼ø- f U0 âÔ!CJÉ j¦Þ`,¥Ôƒ–éiZ~^¦yº¼„@äéfËè M—íNãŠPí¸›*ÙT«¯›RJœ<“VM½‰GT…ìÏÐú«’)¬e븷ù†ØÔú¡~£*Ž"ßÑ^·rM»¯¸-›åÓ'çå¶ê!Àr•u]¿ü¾.—å)1Ò„hó²ÀE×™‰\ÖuRJe@x+êK)]õ\Œ‚p"SJ|Jj**ç¹¼x#LÓ¼üüñÓ§_hâË‹<~~þׯ¯ÿ_Ÿ°»‚ƒ¸ÝZÊ(“ƒ‚zuÞz[o f"íê. Ä&ªÏ ü½ì³! óè~ö*ËÐ-œcŒ‘êWû¿éý:îŸô1Ðñî™Y>ôûìæ):ÔÞ¿1,|×,cËãÝ÷nK#ðïÏ3®tpcfí*Ml~:û¶¯„4Üó[°Hÿþµýáƒíîëz8ªAÌÀ8Gû.éŽv7~8Àÿ±ñH¹ý…åØG?Ú¬›Ý¿{›õ5¡d†¸%ÊÑñ£åÚ~Ú²ÿ4›©ˆŠªš— êjÂsÏLjÔqTLJà°„õð›îÛî§/°£W쪿8Q–½!ÁˆkÑZRF±äBmêC'€+˜`¦*f8˜xÌõ²±´ÆRÜõnv ¤Z ùÖ“˜ç*ß÷Ú½ÜjJßbBµþ«Ž¶Wû^³• l:«rÍÉêÚî8¡gXÍ— ­¬¥¹Kl "Í…Ör0´~ ¨ì÷íÓnGçáZ¯ ÌmZwú}‹rFŸ–ñ«Ê¥ûhñ«[5~H^U8,«e6…Àkõ؉˜LÈ;@ ZsÆl¤¤ØD­FÈP¿í&B½©KiÞo|¢ê9ÄÚqÊu-031Sƒ¥˜,¸‹Äã†ó½n˜…A¦î%´7v©pžÿÁþت‹ JĪt)îl)uÌ‹i¹e)àˆé6uÄÌ †°¥I8n²Ù¾.Ñ *“íR¨“_©×`EÕ{ñ˜qH|âeù8=ÍH³xb„õÔ—fÿCú`ß¡^3¿"ê„d‘l)!q#ÃkâiYÒ”ªV¤ºÀ«JÔlÜSæ±1E¶,rôšØT3Ò)ÃC£"r¹œåERLDÌ  öW2yi¶Š#ÔMJÛöa …&¯N^Á52 š ä -¯rpLZ`N¦(XÏË‚P}Îyž‘mùù·ËËËÕR°QpÊÞÆ¥½Ü–"Ôþ¡šn1+S»Ö~Ή‰OÔ'S3PT‰(A‡ß°:Tamï“"Q$ŽIó ÞÈÀÎKJmÊÝ4ãÞ‚¼µÜžä¡±ÛqÌþ«ì¾'O®aÇI²œ¿^ž?¯—•±Ø‡”"#+}˜f|`ÙÎ_V¹êúõ<ÒÉÛÔ%õ v8Ô›ÁvJJæt0ÉšNIÅäEä"j SJó4/ËôÓ,ÐóåüÛ¿~ûòùY¯ÂîüŒª àïѼþOö}0EûŸ›”!¼§MØî¯5rûãï³{Üü –ÛD=>î†ýw8vfÄ£‚»ÎuøñaTfõ0ÌÒHSÚ­2 …ôðlõÖœù¢@R ß~ëç}ÛÃýkøÀ;ÀÚ€!Á 7|À lСLßðànÇp†r˜Ýóã‡üM£lô÷ÿSñÝ\ÖwHñÓÝ¿ Þšf+ÛËœ¢/ik>ÂàF¾âmºé0kMG<ŠHl¾ÿÉåËïÏ篫^ &šL„´œ8%‚Ù%«dµ¢pë§@M¹x= ¶¬ˆƒòÚ.Ôl‚È-ÚÓþ÷Éû?îûQnìXl›v/[R ÀfE`AVü´ `~š1A¯*âÕž©2z'EÒl o?ÛÂ|îû»5FÌAòÔîµz-ªá¥M]ú[µÀK@+ˆaêÛaÝøÖqÐÏëÄÚÂîaVP<€¡šaeCþD•ƒ;¢ €÷öàd5×¾>ªE$•4ÔLÞaáô‰&"P˜Bí³Š¼õúϧm•U) @+©Ê.Ÿ½Br®eŸM‡Ëp ]—©ö…G_wfà9½žŽØx—™±ÈͶð¨É zF@{-Í=–ì5K@­Eç§9¥¤PÍZ t5ËP9‹¯»(Ó”Rš§D—‹È·‹¬@® 0È×TâDD"–¢²‘¸7&²Ìóô!qttƒÕ RÉú¼®¢ŠÀjàà.tmåêo ÆÁ­F&xñ'Ô–ƒwÖØ(] ¡&ݬv9#Â[næÑnT~ò°¬½GEQ8<ïÁðÚ•E0¤VÔ)åΛ•l´ZWd¤”P·âÆ…ó S[qõüæk­n¶ÿ"lB633ƒŠ¦iúõ¿þúÿJ‘PPÆ0ÿ_ö®KnGˆÄŠ€ŠÚޤŽìº'›læÿ'cgw#WEîŽ ˆŠŒ0H‰R©º}}g÷#èG•Eâù@´0µŒZÊ•À e@UÇè|ì¶€Þç ígö†ëRóÂiéüD"\¡QWù‹DUUdü÷¿Ÿ§ÓøáØi„†4ÿÄ8­¸,@³q":°$²{p¬ED¬82<›êEUáŽ3ä `RØ€?pM*އnHÌ|<½èùâœÀ©†RUU°Äì†âœ,–œ¯ªÄrpͪ¦”ƒA„¦i2‡Ì­¦l=ýãùt:ûúͲ?å@ÜÛב¬47÷JåÁ¢ ¸k6©p 7½¨êÓóóÓãx|`~Ž…ÕÉaHÔEKï7A²º°J¤\²eCø£úmq wŠ]Xö|+q©&4#Ï]ÖÈbö—uëÁ¸~k Å‘àë~^3Àµ´Äÿ,ª‘õÛ¾|û4=}~¢ÄE Õ’Óã3(‘¾\0àòz¾ôù@Ä"‰#{SQ\ÑÌUÝ£'.2ΧÓéòíÛIÕHdú©±Ù]Ô  óàmoרÊ\·ÚÀûé7lhNuØy£Ú©±‰˜ÐSÃ`¾ú²{sr-æ€ã9U_ƒg3âU»EÌ<šx0oA1ï „ºDKZEà˹ªJ:¬m ZzCáÕÌ´(}ÿ2ÜšlnbÒ[Ðx¡Û¶‚»yÄ0©ñÝîFƒ5€k ˜WÑ÷ç^Jܬ¶7ãÿ›µÒ)}sh.?uÚš´­eÃüÞÓËŸÕ0h€ÁÉ«jKÕ&+Fĉx“p$×…·ÂUÁýÀ#Ü.èÀ$U‹ O®PÌ lÜ sG†_˜‰81H à"–˜_]¯î¹i&‘*Ù<^uhÌÚÀù}·ßûÁßÕE$jS® uŸ´Ü9+*£áÖ˜»e²X¿km)âc¼azC§^ln¹RP ­ƒ—^MÍPœ<Žã4MLÄ3 3¬®i¡Ü0ªï§Aë¶ÊÌm0g¿JmŸ"»4D~ëËå¢jŽq¢ãÇiú4­þÛ>ÍÙAÖl9/L€'˜9Q­¸æÙìjpP"9ÔÞEáB˜o`’ÁyÈ ÔÌsx1#f€»U’[­ñÎ wÞ(¢,“<Œ”ˆõÕ§˜åøá(„NäÙÕTË[Œ< â´7ÏɰZ* ± "Ä43ùut´;Ïkõu/’zÃ( à ºž™ÈjˆuUÝs@¦½Ž»«î¬õÎ¥²<àb£Ý0€·ëuÞ{ «( W޾êé/_?Ÿžù‘¬×èSÅœ€q³_£Œ3DÊ,¢pqJ‚®j5¾vÈó¬È0ƒªšOÓøôÏçñóÄâç—ó×ßN§ï'Ï.‰™ÙÌZää,Z½ŽÅ,]t»Llùb;7ü²¸@®„Ðê4Ut7„µÛ·ÔbÍ)S0³…åúûÊLÜ.àùmÜé;Ù+;_Ù|b3÷§e¼MïFï~{_¤¼#lVJ¬c[¸‚v^GÀ€Ï®ÿ•zó{ó‚z÷u{’ú_çBûâªQ8ÞY ïF×ý2€ÑŸKï¡Tº ðN³Ð»×Œ³$¯¸“›ëå|Öõ« 7¢ YøæÑ)^@MøLðáoìÅd/Šìbãu:N¾.fs§Î:¥Å 4kIGÄ hkÕ VåΫ’:KÀÒÃfz”È<ô7iCê`Á^ rj!; &>y!³£Vož}lßs¥áýš Ýâ—ùMªel$®® ¯@'+à\z3[1Œ¹Mï^oÅoÓ8W¢tq¦ö¹¼uÖ£8$ î…ÙkttÁÆ©Ùî´(¡Iu¢eŒÓ³ù•UÀÌfî”HUQ¸¶Š)nÅž>=ŒÓ§Ç±avieýxÓÑ‹Š(€‰•àîÙj‰¬«Z„¥U¢òìš•=ûY5*cYD`}=Ÿ_ÔU#•š”82hªÙ“Ô®&ÂÑ&ÝᕳlY5«fˆ°…E8báU^ÍÇqœ>?ž_ø~( „ľ^mÖ¡3´[-Ÿ»Ã¬X”¤ˆEDZlT—G´_ž*Á÷D*qŒ–½q¼Á‘ãs[vÜFEË~‘pm«Æ6D5JŸò, p 6Ë‹ƒ²ŸŠ®—­ÃYùjiö 0“éU¿þö%¾úzyü4ÑG0‡ 1b§‰bÙýj uesCMÀqOZ'<6©»ehöów§iú<ɇ£|<"‰šq:ΧËé|ÖRU’úe&Ú«y æ`©"qÇfÛð•¡ÜÌè•S¡~LQ?èáfÌý¨Pöh4Øk~‡[,£)Íí‚=;ö¡û=ùØQie)î^eM‹ ó>µ-ò÷ÙwFq矎™åŸmÃå×ïåÝ·ö÷S¯â:@«j4Ý{½ö“óËþE)U䎀íÜ9wf«®5ZDæÎÅ,â`V;û!LÐÄÌL‰0ÀÝZZBn÷˜ØM!覷Ã\¼øA-ÚƒÍç³zá‹À¸íZZL«g­UCA(5F‡¬-äÈŇÀ~5Õ³;(1Œ@Å„ZFåä&{­4žVz?Þá4p…Œ&¬<ßÛgiA옦âˆ$XåsU¡âví37¥‡[`yðÜ•º©Ã*ÊÀZ¹l¶±×(õ°hÍ ÿñháò*—oñ@ qiË©têÑÏ·lzå ÙZtDpÐà56ÛŸ²¹l•1í¹`ž9 ýò IDAT؂ɢ:‘ØÅ«©©ÿr¹?å¡UލZvµS䳫»¹gç9p ˜«jj-ºn×ù-ST\¯9[bB“Û+@~›¿nsýyÔí½Ú„Ö7›ë»€h Ò× ŽšÜïýȬ_õ6p?ŠîyÛ äî—UWYiìÀÇãñãD‰ƒ7Z¤G®Ê[6gO÷ŠwõAôÛ3¢†`M•Dxˆ,¶•ùÅr”Çÿyœ>O8VÍ7S/â<ŽDˆ£KÍ@px1?T|~³™a6ˆd0‘ˆÈA„kÁ0ƒ¢Déµ rV#$Š´9ϸ|W}9ë«úÕé@œ¢œ²ØUƒÿ°³»j}10H½„3‚9E)f®¾ÎèþV¾,ÿøç¿b²NßNgU 8&Ž"ákf°ã$_q¨7Kɳ»[4C–#ɹZ.ŽºlQ:q í¶šíä ÛÀsPÑp?>9¯ø&šM[áô˸W"«\›%DÙ2;Ò‚C‰Rä~ÓÅ…ÜAÍÿÄóñµðæ ¼ý´ln¨‹˜ÛÔ^ŽÀ;ª[xHÿeý½,-%FQ5c€Óqãx\*·Å‚ñ8o®µ¡epÖý·1üßQNŠ‘VP`v‡êYÍDxúüüüüLStv­w#ž‚ù\`YŒŽÞ¿h6çŸfn_ÿ,Ü­â\ËÈÇ*k±Ó\ÈQ kvy/(©'×€ÀœL6Ž®‡{|”ýþöÍZ·¬˜ˆÜ= ÝmXXŒ™y¥|PU!S/ŽBîŽÒbàd¡ŒÛͼÙÊÍf½ÝŠˆÛ}zxøåãýýÇÃ~@x­¦Vb±¬V¿ÇËL,B¡§æÁPËã8mLÔÐLç²zŽýޏ20ለqwæÖàñ/hο=}6ºXËà5Tý¶Ô¿õíÔxY,cÂÙ ú…Ú‡î|ü{~ ‹xâ3êTsšS8_z/ÿ‰¨¾‡•®Úç_`? {?™Õ„vÎé»ü¾1]×øk¶éÓ‰©‡Å`nìÆt}Ô½ªõÉÜ£1G)Z 1<µỂQª^ë“QfÀ£“Gè .ݽ¾O'Œ•ŠwÔ ¼åe˜à½ ˆˆ}¥ø„Zy˜¥ª„Y1ÃVç˜,âÞHcNdNn Ìœ9ƒ}«‘éà´Ä'\T‚ÚZ\üìˆ2¡0¤Öá†j$–#êžxfFÄäQ~–«rDlÉšÔoÜ&‰½%D+¼Y¼‰fìò¹0i ^ï5æÊ‚ÜËY(þI¹ ÚTËÇÂî }fýò(|/îcŸ|.‚åKmãd`N}·£):h‰NH¡#£ü¬WUšÜd‘ÁÁ™‘Ì ñ±L2{1Û :YÔ»3› ¢¹›êápP]Ñæf#R §;Y4ë2@U÷Õ£‚˜r¤hRŸ–x¸°›m‰‡ˆF7ÆhIoBn\©år?‹‚n¿VQ<›yÝóR1ü0÷Qq¤d>kV”Ö: ìÅxNí>£39ÿ‚`¢d´»È‹Á+‘í›­œ$Ö¦6Sù ËAÎùv~õ¶#WÉPýqZjAA+æêûG°}³½{wwûãmÌ*_Ñ6hmõ.µæº,¬8³"œÌŠií¿Æáë1uýtàL€óŠD„"Ý6¡z‘\Q`S8w`¦†VÝjú´£€óJ\¢Ñ®ÇZ Yt…õÙUGä•Tâz…è%ã+`2€7oÖ‡ßÊß>â×ÃäžkóÛpr@T–‹ÅÃr,dÊdæ`"Z ‹DuŽZô½öÇ„Zìz¾&+`‰ƒrÌ݆ÚÐ"óH®ø¥Nœ”V^7¡¾Z¦D9F.­ß[cbTwàÒ~É•L@G½pf/jß›Þß?˜³ùöíZ~Ê‚,’m÷ðYÜÄ$y-k1ßôVäUžV/$!Õ†Àr³æLZl÷ëîþ¯þö°{ØéãÁ'£„èÁÞf%ŒZ>ãZãÈãÝ'¸3ÆÙŸÕúŠ:…´ñSÀ¸^“1GÕîñïˆþÌíKs=su4öÜ.ò´×%~Žžz¤:× +cºþ““†2 qò³·~}Kôúw‘¥ûµ'"¿RKò¥và«<ôÜuÿK ò¥+ä} -=eýCu~Ù~7€¿Ó·¢A=â¨FÉ4W¶¤Q"§kWcg»;M­üìh»ÝNfêVZ•&e⨄Zû“ëèBEMoÿ¾æÝìþ(;±Çº;E¢]wöŒõV™5›”êïÌ¡(´%JµM¬7hUèeqͰ ¤—‚ N1Áà‹\ß1žù´<óèÑ©ƒ0¨ô PœÌ‚TûC8,ÚÌ0œˆRÕ‡PNEÀbÖGMŠ9b¤h%o·Æ²ž ’î€È5FV¡×ˆ(µN“gñ·KÔE,µrµ”¸ÚÀ/Ü'ç&J~Õ±Á¸}òŠÍÁOœ*œ+ö“=»Q4_É^â“!ÙôMÊÙ}¥ÆD(nGǤÂÄ`sc%öº¦‡ÕÇYuE" H°:N7˜OУjq/ ‰8·ÙÆ"ëoŒô3YëóϳCÿÕ0â—Ê=š-^S1@”A…8r&)Œ(îz/5Áz%;"Œ!b¬¨Õ°"7ÙlX E6ðŠ°žæÐU©¯Š])0–vŠ:Õ£šzqYo¶Ûí–DÚã¼l½&Ôþç„ÀÕW§dÄ!¨9Š À¡Guµ@²JfÎäNš€ýd½è½×L]‹…ˆ@ž!™<³­”ÑZÐÃ1ÁRsÏL˜Èy ãwÅCb@AÀùaóöÖß><ì<™èÂ<0Â.õK=˜lÌíÈiJÑ…;2ÌâuŸ#õNŽ„äé„ɘ¡ŒÚOž€ÕüÓÅE^ÆUFóì,l[oÄÝSwâ4Sù(×RLæ@a$Å9\‘=}ëžJ¢åP½ JJ L…‹ÿ×ÿÏæ§ûw¿¿û?ܽû÷w·?ÞŠÌ·wwÌÌ‹F>p@Àöª®º´¦ŽÊ "f-8|üøá/÷÷?Øï÷ú¨Sj]ƒÚ¦»¢Eúdùb—s{ÉK5Wiü ßc¼/hTÙíƒ*ˆ§áé2LõœÆs„š³{L@~ |é…‘娮g*ñ8±'óUlàKô꫞ømñ£>Û_á}†þaââ¿…N÷« ¾ooÅwæ_NkèÅ _>ü㛟T³xñ•ƒ@"3wG$ßb2„2E_3ë)4æ€%ÑBN4C @m 4øk&ŸÜÜD„V·Ý£»O{+Î ÎbÖhÀȵk%&²âî!½ÓÀœÉŠ«ª:8ëú4¡e˜ji¬¦þ Zo·9[@)ë- #ÁXò`êL˜«CS¤¼¶|ªÚ i‚…ä ç··èYP^h-jÕ„Ù«Xͨû‚4àŽÒsú]4õs¬¥¥™9ûd†°0hxfUe$Ê€ ;ÎZ]‹Ã&Ç4»¨ÅÇ r.ÈŸfÂ¼Øæf}¸Yïl¯%ö3s&L¬‰iâôWÕÃ~ï¦(¶1÷±û3Õ\ÕýÏ2ì¹ÿv±Ý/ªÇ=&7'¦„ "Ì^wßíu÷¸7¯„YD„Eçê¨êdÅ)zÎå*+Yèýû÷˜ðáO?}üe·¹Éã·ÉÕ»ŸË×"1ùPÑØºœ½«¬„WT}Âz³‘¤ýŠì†âœÑðlâ0´øn·ðþýûŸþòA?«Ð ²'7X ¦hÜ}Œ;Æ™™¸Ö2\¾q·×œd €5ZÈ—Ú+³|OUDš ÅÍÌ‹#3[¸Î´vÔW¥w¨K6`z©ª§˜ü ( âž€;ÚÃÇ=ØÃÃîîßn·Û52 ƒ™‘Y+*Åì(ˆ.n‰½€ ¥ p^‹9ÔìþþáOÿ÷¿÷?ß«*Š«iôM³âUîˆ%C£_}°î6Hn(åx–¨‰2‚‰,Œþ8“P«¾• b´J"ÃàψOËî6g€Hd–_£$ÓãÌߪߤD¬Ø=§J1RÅJT:8,jñKód™Î\½=J #’¸zWœ ÇÚ©øÉÔÝç2õÆÞ„„¥k¾» ‡{6ÊÉmæàˆÙé!Ì9= hâböD¥:„§Ûƒðå¬6•ŒÁ”‰3S"Jõ¥c@yñfpŽ™_|_„fg=­1ZdgP‹ö½Äƒ<5É7,D×l⡆±]Z/vOœ>ׇ®¡‘€åZ×ë¾G€¿Óo¥!¹Âmt¡^qÐïW77â‹OðÆìo•‰˜:£ª~¯ñ²œà© ›ú¹tcÚÇô,¢4jíçNÇë4J‹¦¯Ÿyä}ž)J$y´"p"[F^zUΆz>ös2ªm!¼çêç³%ãöËE†ó´»‘˜ÊÅä~õ†i鼯FÈS;!ž'5L`Õ5DŠíâòF[ò0õ9ÕJ]§ö—ÍT£ª_LÍ»àW”L­ß‘†Ñ[³Ü¸1œ:9^‘ÄnÅÔ„D9לIL°ÄÈÊ$´ XDžÅܤ4»º;hBߊhIXá-ææûÇýA ‰½$u{Å®:õ, ór1<2Zª×èÕÎìzåÑÑ6䙽Хâõz ”/¾£îζe”êYonÖµ$ÁŒ×°š@›¸†×.(>jr½®МkKºx°þ„–žK\Ì&3`»Ýlw»Ùl°ª†ñ3Gû5Ò€¹‘µ ld½CbW=<|¥(ÎÛuœŽ„h¤”õäp¨*Z±ÉŠeÅÈ$‰ äÑ ˜Fd Áá…áûºìa$âLÌB™0ÁjУéÑ `¬EnÖµÑÎ`ú1Š2X´a£Ì,º¹YïÞ¬­˜~VM*+QtŸH&J¢¥Vy àr XëmÀ€rQÈÂyˆ<âkØÁú(1e¦Ú›n¦úÇ}ßÖ # —P•o$Kl.U #ÚSYDµ#‡%ö–^’:È6àß»ÄxÑ´cU~BªÑ1ìvY & ªûû¿êÃ/×7òç··Ûß­ï~¼Ý¼Y¯7›œÅ@ìÊo¶ææêúyÍ&Êîç{5UÕÝn¿ûug“X›Çvžï ”Ìh!&˜†ˆk?Þ8[løH¸|Tÿc?yäLà¨ëƒ.ó.sÂ'^¹Ôæ CËŒ¾¬×™ªl¼ÿŠÔøÐ¥ƒOÒS5c¾M”÷iº¬\›¢KoïÕëcy±gŸðŠÏñï@¯Q˜þÑ(1¾Àßé·Íÿ?—êð¥¯JjXÜ V`ŬŒ\ Ý3EëN¡;îa-WðaÀðLáÐÝ4¼Ìþ”'ëEC¢R#‡Xä£ÞÁ}@¤Q³î0{âg?}÷Igvjkf!§–gÕn:Ü ¥MãÙ©^ΡӓŸ¥/™¿È-—Gl¡ºÍ4š›îFtÊ­zÃ"žàÀO Hì‡ù2ý&çné©Eo/yçÚ0ãn™—ÁgW¬_Jäãk2ÏBÿnV·Ñ»ˆ¹G6$‘š}—˜Ý R/R`7IMá4ü?{WÏ帎c/"Ò ¨º#ËÑ›‰ª^4áþýɶ'Ú³QÛQ»"‘¥€¤([®îwvΞmU®²-‰I|Ü `r›-rg) ƒ¹Û s¨ùñ|º\.69ï¢ül!>?U”{ýÔnïfª?·|àOû¸¾qžŸb°%[=‚fíÄH럫 ^,¢®„[0jUö6GCÚ©DÌ1~‘ñ0r–›¨Ç Ÿ€¹´vÛ¨\UÏKÍ[h CG4õÖt·`êFse­¯Bøá QXŸQåè4¹;xG‡———?_ÆÃ¡@¬s…CIƒôimÍ' ƒ˜i'®ŠÉ…¸„®¢¨¸d6Q¾²»Ë.XÉb ªª¯Ç2êÂæ2k`‘¥R}@/~zU¸#ƒöý"2er‡]UÍuBt´F–È å—ŠY“cŠòËfQš³qF´;¼xDQ/ß›;›ÐR{´s®˜Uº7·Ïñ†>&À;Úm¹Ôp8€¶L¦ˆÀnÑÖ…x%̿² ˜3a'–S!d–‰1 ®Á‰52v(<¸àÌ"B,”WÕ«¹™^írVU‹n[Aß2Ô$…·ïRS®½¼ÆÞ<àcÕlúT;ïôHÏ3¥(§ww°ÍAÖœKµkMLºæÁŒÚß»Â}á:‚v«ëU)ÓøeÇ‘òªäžOn“Ák³ÜxvA“[Æ^!Ó°Œ¯@¼]¢Þ ¸Ûr¼±R—á Xü‰Š×W3Uå ûñåÿ1>"-~»":ø´mõµä>íD†aÿ$'†Ì"u@‰8Äd–’Ñ:Yt„ýË>P»Ú¿—9íxÒ«êérº(ƒ(»gÁlªêªáuÐ&!‘'‘©û¬z5Ÿ`ÄòöÃá°ÿ²'‹m#àP_é&ŸÔ’0À;ÿáð«}›ÜÔ0¹¹ƒ‚uì˜á³‚Å©’Tõk@ŸÃ&U3âõ0pmzÜ&a+w»PÙçhm€ê¼~ *306ºðpq«Mè–ëŒÈåg0É=5×›ƒÐ#Š%Oçv‡\’“ÍÀ\Îe,Ë«•¸ÜÛ.tHK5lçÙ˜‰‚"á)òžDLõj6«UTLM_ýt<~œž_Uÿ8ˆˆdõ`e_Ý&ØÕNêzÖoß¾ÇÓë Ha&½\ Ϩ,–ˆýzi@…eÅôè5QáÔø„¾î€Åç&p.dç~¼†›lª¬™e?àV–‚:ÂWõ~6wÏeQs[±Ýòù×ë‡÷Ò6¹þ†Ô°ZoÓIܺ†%û¯v´¶:xytªÏ°õòÓ_Ľ•ÿ«žé_-KK¶Õãþíÿ–_’;NïÌÝOïÒb?.5j“…¤jzª;{bÎL\ «±äãÑ•Z <›Áá\ª³&Ɖ+‚»wøÞŒ-¤Dÿ¡%õv+’Á›³ ÄՖƳ³àž>Jõà‘FRÏ¿50|o•Þ¤ÎV)[seØ: ÑQÓadŽèñ5à[·gN}KHëÍ×ë‡ÛNÔ{^´aT-é0ÆEó{Û#ëì‰JÄé«I·ö6Øê÷{Oa¨GmäÀÒzêlÙkÎN”àó’PÅ@trûÏÜËmŒêܙ١“ùìîz:«0ó0S†Ì¦Tµ°#Îèð,Iá©&È $3#‘_è¢~RWsU×+H¢ìj¹*»ŸlKcضæ^µÏ=W¿ÁݯsxànGnãauk÷~‹º[Éõ†ÕÑwÛÛŸÍG›ŸúcCÌœ­¼¸"º³È—ý0îåI¸ç"ö‡‰‚´·ç-)ƒ=9íD…«QDúÖ*y~ÛÄ,ߊÉïp³Óù¢W•/‡ñ0>ÿý ƒ Á¢ŽTâ†foŽ·\aŒÀ±£î„w¾Ÿö—óñt>ù«^€@ %KTx«Gº,ƒEöO"OÒvA¢ï}7…LMíêp”{j•Þ[øw5¦š!™º÷d¼¤¯>Èn3µïz(ד¤Ê²y5>¸W3P™Ãåʨac”¨_·.C›P2ÌE 6ôˆö™éëàîzÖӫ2ÙÕô»Çÿüç7Ú1vUW Lž21q$Ár†Eæ9à3ƒC£ø3Ë—dœ¾íýŠ‚® êA.ûÓ PA}ãÏâ7 Œ4SdýDG1"xu3©.oÚ(3!ß¾»½ûÓýëLžødë<åF?±:Š•|¬êôzÓþ°”€x?ÄuÒo9ö:âñWöµ½34Æ*¥ùSÒyÝ?…äüÿpšãyÿv€˯˲‚߈xù¦;å +þE‰òÉ}r­°Ýõ?Á Ùç(ÎÌQ:¢?¨Áëþ<;‹09&³̽%Hµ?°Òâï»üþGíÏf¦Ï†m‹&»¹ksÓ0ƒ!ÙÝJ &=Š~»Åߪ™­Ü>ºæ´[Íþª÷œëSC JŒcu„7̆µl@ÅË:ºúÙKÅìÛ4*{K$«hz¹c#æ,”á×»ï/auz‹®¿(ù@VoÎ61Ûç{ôÍc»à|ãm§½ sË;—%c¡øa¿n¸÷³ºÁ÷IwóM>[ts%ÌÀäˆÈóa|GÉ‚ÄÜMl N#=6„Â&Y¢o§ÍNSÄÑ|iÒ1¢›lÒÎsö(xUÞÑøu?þíYž¤tAó.g©]ÄgprdÂL$"O{‘ãåU͌ΤÄ<Êĉ}RÌ¥a’rÀ IDATNNzA’„3CD'G­þ%"âbƒ~Ÿ L‘žP‚J”Xœ&mzä¤:~ö‡qGAÝ1Å5€ÃL»â‚ÉÓªxž|áó°«}7×HE6arLtv ú‡'0ÇêÉØ²“áIh(™Éõ² ¥tÍ ŸÜ®¥Ÿ=ˆ9+'*Õ7æ»|uB¥{-BiœŠÏ À^#2Lá –z2A¨»×Ã%N±±„g á5Þ}Wò%FÖ6Òu–Èq€*•ìæ¤Qr2I"Yh(®»›ëUO¶jø Y<êHe– 0"pÞ‹x8fnN—ÌlnH±ÙQ¹o¹•í­ÛQÆ5;—£ Óz –Èì¼>xMw ¤d»Ì@HŒjÌç"EãöÇ÷€ï‡Ó\ëO&š¾éy¯?·˜•S…?ëýþ„´§õ`äèþ´ü>L«×?ç³þûäÁ“cÁü{%è$õ¯ßðoùey·ÖÂM¾n«äô¡ÍŽóÅfØÕUMM¼NB#$¦LŒZ6¶Iá¼z#ň¯á×Ù)-©«‘d[ZÝ-õ‘èc§íÊ&Q¢ÂfY¢cùÕbÀ¯©¼uç4{rš %`_¥R˜¼Væ Í-¾êÂÂójß7)°+:^÷þg¯M{ï·oT¦ÞŽi×Ї&Ë?W;¢µw»A©¿Iåøî(|,ÔÛi@@UŽÀ4VxÄ– ø¾s‰o,NJðy a´“Áýù¹ãcßBàAÄ\§Š’[r#_Ôà8ž.Âj^HŒîD¹f·jT›9 ”9ÎÁ´<©êÅ.g=þ8Ù@8g D7ðLYîlÜûÚG‹óÒÙ8Fkõm¥|̔깅å? ×¸‚ÒŠÖ*bÖ¥5d#&§0¯»Ðš9^s&ûS½­Ñ½}»ÄA¸´¿.^ÇýðçËË8Ž ªÓæI"Êpç`–=dƒ%‘€È†%¾¸údp¹mÒ¿ «-lÑãÄ6™Mf³íÿvxþÇŸã#Z[”ÜøñÀëîÇ o0D69gp&D†½Šbòò2sg6 Óì—ïGÄ\%R#ÞÁwŒi÷‡Y¯—Ó÷ãñ|AÌ-êZEš@"δßF@‚^ÕÌôâ—óIÕy'û/ûqéi¯³ùU1%HDéõÉ&I¶I¹òWd´G!@2ᯧËå¤Wå])é ^$fÛ ËÎ(Lf&CžD†½0ƒJ ëB¢ÉËì2nÉÆîL@&gaZ¶ÃÕ¦ ¼¸ ÑZ¯V$¶¢øê ¨¬¢8W‰4UMhË­¥µõï>Æ„™kþá2ÉãׂdÒŒ ¹P¹É­ä»ä$âÉmrL—èË+YJÿç«ÐNÝvÌ"”H#–EÄ̈øÎ,€é¤fV k«ÆÕÉ)!ú1`)JLwQéÕmÀâ®·¬×%¹D©‘•=½W=®¶Ûóãà€‘kT„š«kÝûâíìØzëËïæÏ·) šnqŽø÷]ôà“ãç¥j„{øxA¯aÞr†?wXŽôÎXZ°£Ú`Ÿ–8Ôõ~&²ÙI]?;sþmB¿àßò‹ò&¥ù½Ä†·Þ_\•Øú¡˜Ì'Cô)Éý' $ bb…Ñvë'­NWšß!v÷—ÑÙŸ–¶ýl uåÉ–ãOjÝšê†ûæK`;öuÞ`{]ʃ®†F]ìáÆ|±ú¦/Ÿ\_êJsyÝ+ïõ·'Ÿ×ïm‰uïÀñÃÃΨzM¨êhq2]†µ^D6»dÆIô^S‘QpàÇÊØºÕÛ/îÎCwð^î¼ßöÍ’Fh²sbé‹”×ZhV¸žÑõÄUÕ&À;&Þ‰á°9ʉ{I÷MT Ž"Ž-æðÉÔýrÖÓùr:ëéU9…}¹§-÷¹Dõ!m¯Ñ2Un§—ÿäâúˆðí_7Ïs}-©¯fϓߣ´0ë¼ÑZ$¤§Ø‚‡R*ù2ìÇ?ò4e5µMMD³;`…sqc D¨Š8¸ý‰ .Ÿj#¥mG¥ ³‹¯Õ[E;*TbÙ‡——Ãߟ÷_‡˜hË"‰Fe7SÿBJ+˜D@i'yäIø›«»û do{>gVRΤÑrÉÍ®­ƒ‰Ed°sú ÜÜ {Ž?Ô&óÉ1Àái—Òè>¹Í¦êjjæ:ÙËŸ/ãóa|~6ÀϦdD*Úœ1©Õ$^ŸìøêpCfùö®Í‘·D,E€¢ÑD¥ÉÆQ÷F»Ù ý{ý œÚÙÞìf#E·'‰Œà$‹U’º{Æ;ß®ý5ƒ~RU|âQÙI”=ç=?=¹ªž^Nfªª0å™DöQ„†ª"Y ÎVܳ ´cÙ‹a¢*©–hÙn7GväJŸybÝiÔ ^l40–ju @ï @°ž ézËê ]mâ’ ö¼÷Ç6Ôñ ÷Ègûï†~£…^„o“š4Ð »¾aÙEXÕ²Á@“p‚^wu¯ÝÍ Ü]U5Ãèðr‰ó,BÔ ChÖ>îˆ##üý™§W”M€ p‘9¨x×~—ué†òN[ŸÅ#êµçRåþÁª–åõÈh …•¸Ómv˜ïVPp¿Ç÷ƒ­½èçô­;m뚺x—}¿#Šï—µW´ÄÍøgyŸzÉmZo Ýo7oÛ¾ùújÿ_®ý¾{Ój\žÝ[“íú|(Àíg[XšЋp%6SÏÀ„(\ÉÌaªžd(wños¹†RU°v3ƒªëw÷«Mð«›c?1ôjjÚyðËØCo€þ·©5YawOCàðÙ,4ØaØÝ£ýX¤TY 6R÷ÜUŒæ˜5¸;4k¥7 ãºpºá "–("ׯáUÅ(‚iÁêYIUTžJdHiÍÏŒRºð¨w‚‰‘Â_d%éZÖîèööÜ0- V\²®“- ¾8cÛ_î9}ûö,®°Þ¹­='XߣŒˆm ×eíÌænåîüù3Q*™†Ç.6r^s{¯[ƒ&ô”°‘††2X@iáL+‹qsÿ¶ŠÓèsŒÿ"Þ5`ËV•76"'\ûÒy‰œOÀ]cx"È®Wˆ»šëÅ.gBÍà½àª,‡©6(ìu&Š` ôêçïz:_Nž/ªHŒ³ÀîÖŒ'T¿ºod¯({;ÌU€l÷¼×:Žb˹ÆG|¦¿{•hqVÐÊ—¾Ôõ µ¡ëŸÛCu‚ˆòvÙÝ©"®<Øa…A/mØÌÀÄ&Œ­Ï¼Â°·eà#p€´U¥5Øòòr±ló|üòôEŽ3&®®¡ÒLŠácŸ`€e•Ix ²w|¦šÏ&"ûY3Ÿ.jN;H"&PSˆ¹Þª1¬òë68üO¯õrDžÿòüü×g9„š·’>jÂȨÒuö;ÍŰâÔ׊Èüù¨çsà:X°lt \"ÖìÌnª0pJpÅ·ÿ:}ÉöâWÔõšg³À-0׋ª)%ùÄ""ŸfÓ³)¼À3Ty|þËó¿ÿvü·/Ø®€qb™Dv¢—³šÓD"S“ýL“‚öÕ'ãàZÈ×°ÃóßžÿÏüúßg(¢/Á$€!;v˜s¸5»›!!ÎÀñëQ$`Ì­’w#ov˜B•a®ð`‰˜÷òûg™@4Ç©ðÜ4(š…«òlHì¥ÒÉ~#-[d’#·ž©zuü^2ˆ7ÿð¸ÉÁ+­xUÜ|UÖ*e^>H-ÞXÂ@zeÿç-îa_a&Õ¦ž-‚ƒc‰¸crº †34ÂÎA—~R/õ›¯X)Ã-ûǦÿÀùñÖ3Vþ†Ç_£ñƒ¯í¿Þê‡üÑ~}‹„ÃìH §ôQëÊpS/ea@!.÷š½­­iÄšn;ÄsÜ–v·£2Ä#21ƒµ7¶›F@¯`ô˜ÊTDõÇ¥`Iþð3µÑè¹™ ¬ sM¢Þ FÌ€»[„¤p2W[´÷ýá+¥Î1^¶¹ë%¬”DF•Ö×bû@ ©|mHw— •ï~¤ú½ËyÛVÇh¥¹XWáß- -z¥n2ÜPça¢ïå"ëeØèØÑ^ŸãÒ“çwzç ûPfnÈÀçï4œÁ»Vò—êIë1îî†sV@Uýôr¾¨ŸUU«fÕ–däf§)ÑOÖËMÊ =lá1l/{OÖ! ~¡ÐÏÒÍ«n_ìUþ#,ÞúŸrŸblĬq¬”–@D5WU€ˆXdæ{ª5Â…j÷Y?¾>®$ ‰d'´#‡#»'7"^>² ¾sÛBÉ^ôjöQ÷0óD–•IPjøILqeãŸsT¥)€”˜[­ik0Éþx<ªêE/z9«b‚{q/nd 0‹+ƒúQ[R‘ž.½ ¼¹yqSó¬Âa?BU7.Å–Ø~u$Þ9>ýõy>Y€šFi¢/g7§aŽòT–=¬~˜˜@<æ€rØËa/Ì<Ñþ0_þø]ÕÏ—ó‘Å01&£@ÿžœœô¤–Á‰h"Þ1¦u>çø³›ól—¥é`<Ýœœ~Šmü¥{¿éš†;RàØí=òmð¤W:D‚…%òæ‘Å k(„˜Db¬ü¯îVSf7Í8¿œUu?)Üôv9U›MLE=£†²OÀýj%—áµE̹1ìQá\ù˜±yà_ôåì’V Â*mì¨%…G¾0Ú•+S^-äíîN«=j ŒÄT¬•u—Íøßï }›<ß(i÷_‰÷¼u%glÛâ!)÷1ÆCë«þÚ7ñƒíf‚o²Â5Kz{cï\ÀG.Í øî8Ú×Z¨³½ãë¹ö?àö y¸™å–«ÚÊÕà­&‡M¡öÜÛZPmW°$â0àQ L,~¢ÂªAÈ‹±Õó[³”-êgÏÒÙ„0u.yb5çèæ¯ô´¡˜p‹’b‡ÁkÅÑ!˜^îuË}¬•þqw˜‡Ç¾WkÌù =5€W1äôH`zå Ú"†·*}-ÙÀ°{oP\C‘Å) ¾’ã£Û½Y™ÿ‡Ç6 5¥&÷Îûùó>Y—\’øÚ—¶B^õóÀšŸPDä "¢®îŸÙ2-9¨xåz¢<Сè“<=?ùúÄ»–ÅZûÜJŠ£ð±8Ç6`QAxkdi(öǯ_./çËËɳ[v3£Q¦pyQ(ö™ÜQˆQžç¯ 09ÃTõ¢”¡îçïçjÖd"‘ù ²'bRÕ!vU/8O{þòüÌAjQ 0JÌ8±B1)°̳ªª]EÆÄhÒ±ïÅìê0Ññë“]ýïÎgÁþôrž”\X³V€±¨Ï4EXD„eÁÞ£µˆYÜkÊ«£ÀSøÃˆv"»Z6iëk»¹P „Ê"â˜-ª!9g?¬¯á]:6ž¢~6<Ú§&Hã§ÖÁ#6‚wP°¢ñ¤&&Ïðì•rìX„˜XU½X†37ž¸ÓOŸÈ\‘‰y'$@¶ÓEyâºVà Ãô ²°p¸í±oƒ'ƒeá !`ÃcÊ ²£¨=1" ‚—®Hwø~P µ[a­<ßXÖV†»½*€ã—ã—§/HPUbòâ‚8ŠÃìî_ìbí jP ä¨ÉI˜ÀŸäøõhù·Ë·4;Ôyr01OФּƹ8’! úÉŒ–À üƉiG"B"v¾žÕ*‚òþÓ||~:>=ñA€š¡ùžíüÔ\Dljždf0˧y3шÊAו٠O¬ýöÇï'wÏÆ1DYÌÂËJ¯*IXH{9Hø uqy-..Ë@(æá $æ°¯ «VÂ'ÂךIä7e`VfÚ±@5§å@µÚ)ëÏOLÅ|¼<ÕZV Ž…Ö©GäÒbS«hâB¬ùóÎ1Wˆ,IÌ<2h‚;" ž8ÃàÈÔFY*„%v˜ex÷9jöXÓµ^¶º›ÿ$Z}kxc2vÁÀ6ôžÓ—nˆÌ컄z"Ð&úøöÅ7Œ¹hè},øé]xÝë*ë{ŽÍÒçqCóñ'›Úï{Ù¿Ö¥ù+¼±íÕ>àö/Ó^'hÙìêšBaUk¹á%œ½ݨ^ÐQ]Z\Càb˜¨†o•U?`EÓo¨Xˆ§k">þ–úŸªù˜&‚cÁâ¬âÞ¹ÚkǬŪæuàªéÆÅ–N CE=á…SGNV6•—{W“…© ¡Ä Œ7J$5ueqˆ85Øß¶Pu¯ÚÂòâ´\<yþÐBJÄ›¹¼ÉÇMÉÆÎXß©Ïã”n*Ð­à•šR—ºbñ¨ŒÎ€†¬¦lð«©éå¢%ŽúÃcËlfzU5÷«j6UתJSä„¿_,¶Ñ$ñJ# bøt¨·?1´ÕÙ ë[¨ûß/u®—ÏR˜4ˆ¤-±ÓÀé²z†ê÷ØgЬ½B‘‡{v'ó<óâ)uæüºÔDuî5¼fÙËþ°WUÍUÉì“0ŸW'¼_Ïn& ÇÛñ0?Ÿ°oc›`ù^6šÛ#D3ç¡j÷ùÏóétÒ— ̘E²ÿ<ËAx'û¯Ï¿}šO¿ÿ]_ÎvQw3ê—wÇ<¹NŠ€ +îÉåÛ刨WŸ +³|jcfæ‰dnûU=;íd>î_Ÿåónç—‹¾œPˆ?É^ff™c% ¯Ú ]Q§fEZŒS] ðç;bSç È‹^J"ûã<žÕii}ãj™k301M‘þm ³%ªã·ßÛ’7#)ÁȹÕú·½o¶nž¨å½Ÿ¥u,Æb'ZûNï–â`ª–…jµŒ³5Žˆa»›^ÎªŽ°2¤fÏ;¦)2i0%0À)´`xVžPêµI ¿v£¾&7pî™´©ÍÔ_Ã'0±¥ÿaïjÙäH’ó(³Qd¡i¡n!ëtÈðö¡ÏÿÄËl™ù˜£Õ"ï¡éF¡Î@‰Â "³²ª?f¤ÕíÞú&€4ÓS]•_ŸoDȘí.¹.‘»§É³y†»×Ž_S t-Aïó ®Ïp +›<(¨ë¿ˆèFêÕ"¡ìΈš~µðÏ AŒ¯ˆý^¡{¢ê›5þ]Ñ•'êךÉ÷CÁ¯¦÷óôj¿Ò¯E÷°£Ý²RU+{ã)X½îQ'«aK½h†ÐñðˆE^¢)X)ð :2e±×‡¼5ÐYœë¬"÷>J³éÛÕü™ëÎ-Ж$@B¸žuW˜fý`f4…¹u„›@1°%1+ˆÜ)à«ÄC4n!ö’`ëIs»ÆqYº„¾a}…øQå²Ü/x¢žŸ6ûÈ=>æ½›ÁÜíQOºpxÈK¼7Ã2üå耕l½µKÜó5 ƒUfñìõŒ Þoh-»Ôj}_ > Ÿ¨‚ªH`¶rÁVþ$€*#H•¢9ʤԇÑNo>g­Ö3&kTÃö³/ægÈ3²wœçzmñê«®„ñ4ÿ|eš/"Yg ߸—£»20…ÂÛ´B@l(h…fû+Èà—‹³áwµàÑJjÛ,ñÏ": œ5gÑ‚ô¦íD‘z𪹮÷‹ª] x†us,‹ ý)åSFª`Ó,ØÚ#É·ü;‹OOùx<î’OF ]®­ŽÊ5ñ`ÑIͪY5ËÇ¿ü0m§ý‡÷Ó´ãp¿%œÓñp°ú=Z A˜8¥” VÊ(çŠ\”¬œª™úLD¶ªæª`Ž Hœ’I ®ÈÈRvÛÝ´?í&䬻i:ýõO§|Êx“ÒC°ÿÝûqé¸z ½o8·¿Jª¤ ƒ€³äœÇ£dˆcU"VÂÝrJ#SJ»7Óþí~¿Ÿ:—ˆ@^H\*©*˜UäÈÎðºmOe~“†e¿üUÁje¨€Ã°¥WÍÝg­ŒYÚêÂ39zµzXGÏisÁÜð‹2˜¬¸f @QEæŒüØSä´ ÇãQ5 DD€ˆˆ¡ÂQ@^ ßkd5k AoÀ¥½¹mdîa_žüñWŸQÓ (ðèÎÇlΊá1¢JmnŽÈöƒjk‰lü–`‡y„]Ø 1P˜ï¼¥}µì§eR\ßÜõ’7ºðe÷Oî²óçï.ãýo·Y=²äÃOÇxCõ,"j½Ž)v žü€F¤Ó´ßí÷û´Ýqdãu npb±dTß5röÃ!K¯áOD—¶Y?{qÅœEÍËCÄ$9Ø¡yI/ntïõ‘ñB]Ÿ^]  B³ „8'Žºˆ&ÀZµi;f­uR®pLØì’Ê´üÓ¢.Ú*áÈDfn±žErÀ‘SJ(¢Ú4 ué0HB?\ˤ,äñéÙ«½`¼â´7Ó. (ZY"8 ƒZ¡¸Ø0š'ÚëT€ŠTV)w;Ù1\*¾‡c—/¢:»ôçé/¸ÉM®û2á&w×pqàogR®¾‰õûÍÆùòÁÜñl^ÒåñøÙÒü·H¯ð+ý’ävÝý×z]Ï£}ÇiÔËM…»Æ{G™æŽ6F^—Öj¥èŠ t•€®{›zêrbuI7´èÊçîqœù-ÿÚù~C·âÌpµˆh+B#AÙâ‡fÅQKø±£ Y6/À«AàêE«[šO/ÚtÉICG4ÑòßÒ]ŽëyËèÊ-ˆ®V @ó€02€`a´®²_–ås5}ÝVvï—È„ÚZk)%ý» TOÀ@†ºB/0}WjàúN3ƒ}¦ pdâÄ5!dbàÇO‡¤È…`` •ÚâÄÄÄÑ"iH ,­åRu¤E˜%`Ëum._E/ ü~µ:uÖß³ï ^HW®¹~“vŠ&U” IDAT ºù›º Y¡€Tu/@Ìû7Ó~·O©áºëA¸µô2Ĭé»ió‚IDBdŠˆÕÁ¢B)43¤ò:êÒãEƒ2H@J)ŸõðãããÇÇœQu·rV)¢g?3V@ˆ‰ó9ÌÚ|²(TÜZP‘sVÈ–€ý?½Ýmm¼!RJ°ÀìÓQr¦À‰¡U% Š)1'o‰¬gBQx)‚ª8&âdÃȧ|Ìùô”¥bÿ0íßHo&D­Ùõáxz:I–Sät<þzPµû0oˆ8iUCÔS¤üù¤gqÛ·¨HÎgAQ8’•³¢ 'û9q>g-"Öã®BÔý¶Ó6¥4¥‡)¥"·£¢ó+1ÏŽŠ“WöUKüQdyì½sF"rî¾±ƒke¦V€V}_.8}ÑK>\yùÂV³W,±Öåš½,€¿µ¬@‘KN)Ym6áÂŽ"Úå;E2AŠî^é&h®ªg%1r€¥HY!¹9§š{Ó›–¨žµÛ²Ùg&–Îo­Mà›òû½GŸ2@m¶@.VûCÔ2t°Í(¶aTFï4n`.3°«ÁÏZÏ`5_)IËŸ–ʃ.Žåò \õž¯±Ðß‚þ6y¿_¶ÜßpNßÂhÿ¤Wø‚¾Á‹vçÆqKsùK‘ÄÉ£&>Ö,^VǃKCƒhtéÖñÏ ÛFÒ¢§Óñøé”s†5 ù‰ÌÑ¢]"9{¾,·BMâªy’µ­8y/YñÐdÁ–Ñúåe4ØÊuP ºôp‹).¯]C jQ)™ 3@ä:·³ø%º.›Ó¦{Á¡T‘«BsÚP MÚm1eÉ8qŠŽ~”ª®]ÙÒ5]—ƒ·Ÿµ½åHR"( Ey«FЏs݆iý=ÓgvÜ÷mô8-¼þ­–Þ•›VÐPg+«ëݨ"Ïme<ä;oeIµ[ Èô @‘xlÒccæžÎèkÑœ&Mݼuþâ¼§Uա憓µV@O«¾ h´88Íò!L‘ ÉÊy›z|†Æhv%¦®eqwÿ+Ï‚³ä`¿ßЪˆà„ ]ÊMµZ¬:ftس”Üâîž_|»aæmÚªÂàý0;¡íïðÍ:œ™ù¡ËGô¿5®â1ØîÎZç¯|[¤ƒ½7|9þȉù  ìáŸàNظë^ §dX}MrÉ*J1qH¼¥ãSÉÞ½ÿðÏØ¿Û÷*¾vÌ:HÄŽ'‰µè™WÄ™¬þóÀ„y¿Ÿôü>çüøñQ‹jÑ IÌD¬("¦ß¡È®£Za[ThÑÓÓ‰"%&ÐnšvT‘¢S›¤{¾H1É<1î(8NÄÌ›DýÅápÈŸÿóñû**úý¿|·{“¤(3e@ˆ±ÉdÉLÀvÊ%{'Þ D”¡ ÇLR4‹ø!PÕBùsæMJ)QdäœOÇÃátøœ¿û×?~øãwi?!2§Ãñx<æOG«ne>#É9ŸNd-Ìà43ÞpæÁµyw!Up މû^ÄŽÄfUõÆJ‘UDé!åãéøé”ޤ߿ÝïßíÓvg>J sfBî>;r44(&ÍYÎYŠçŽÒ†öÛÝn»{äÇîW–Ò¸}Kh·Jp N`ãÂHËܽ–襡ÒM½…Ïmøy‘3?¾F2»Yí­´®<‘Øv*&ŠªìÐëåf¯•G•ˆ›·—›«ÈŠœs€s‚YOr‹ÏP2 BVAëv»»O1™£AJ9KÎÏ<À[¨œL¬Ï­‰í“Ô :]†LÒàÌ!“’hkæµ6ìAL†?´K;ÉÀ„‚|Îù3é9[:÷jÕÆâÉÖoèÑG‹ê_ƒDTQ¼F‘ÌéKVµ«û&è] ×†˜›¡Åù/ЪÉðÛ‘Q„A™ƒ9ãhq–ú oÖ ¡6™k¶ëÚ tclm„5®}8×/î»ó/ý¶uyç«bk ETƒøH…¨Jëú{aïëå/1ˆà@-CİCcßÄŒÀþ€ö&^^îJ\WkSY1 ³Â3»át˾ õë@Ãêîw{±]Ö€|5€_é¡»çÒdð|’U@Pe€ævKýZ·jeœ\P…ñêþÞ¸ñ62U½—Åz{¨7ßègý³eøŸm:óG³¥IŽŽ£¥Z¼(0‡ ZònÃS5ÍlD¦Í5­e°k· SvAëÏîºVƵä×­+¯AZµÌ ™·PÌL÷‹oíE¬x±‰3KQéâ´ÐpׯƒœÝÀª=w™Åª½_s$¤±pmÿ^`Võƃ–fîµ'?O×!â÷´ŠgéÛú¹‡CµèA:g6.ÃeÏÑj-µ¿³ À0™H‘'Þ~õr>=É}ix@ É‚2yÙ¼6…L›d$9e­y•[G”,NÖÒ ¬õ”½˜à¼4;Ì3ƒ®®l)@ÙËÈ åÞÚïßí:~:œžNø!=¤´ùo éaJL9ÎÞòG²R" "3íUÌR²±3€j 8=4»±ˆhJizÇÿöïÚÿî-ow¶#ÇcþñxÌ93»”(mâäÎÁ"ˆ`°TQG™)«*E´N>ëØª‹ÃØL­dQ*QãØfDñ†§Ýþ}ÚîSJlN, .ý ´R¸OÈÚYlk¤y„‡dïñ8ÍÄ^¢Áæ÷ñKäà‚VŒÐYq›‹m5Žªëïú0ú‹¥{© ê ,82Š<¾«è“4‹^=Ñc(d×FéVñ…<«3$LJWÛ¢; ± ¤Ä}üËUð‰3š¾¼J%Ð’ž¨Š ÷îbhýºÍ Ú6WZ/¤ámÜ5úLs‚ñAÏN›E7,‰ïeTƒXj¯ðŠn%ˆÿöiF9x—¬5GGZ–"_ˆÑ9Ðed7Êß”_HŠ!òÕÜãW¥Wø•~&-µ¾àÿòU~¥þ×µÖ.®²›-¿E«¬ÄÓå·U¡ÚcAC”ÆÎ€5Ø]¯0‡ËÖŸtõ¢{:½ŽÑWY9ËC¯k^÷޼£ë¨ÔCŠ+µîøS#c…Ô¹œ÷lE³¬Ù’×î)JÆÐ X+ žû»ªX=±xiÀ%¶úEtÕH@¯üÑ©®%¦Ïh%ƒÕÒ#µŸ ×_šñw‘#ª ¢åMžq[ô¡J‡•—6æk5¥Ûªð)†‹ÞÂê¶„×+?Õ&yHu¶ÌçÛ,¾CãðZ¨…ç˜ìz?©Oÿæî(%Ô/,üÅdÇ6Eý¾áÖÕËçÏð•ÏgZmšÛRÌÁÿQ³»ÕgK¶,ïÔI3K´ŠPÒ¢€rJ»í4=ì8¦{72ªÞ54QsñE˜,WŸ;ˈRJÛ´ÛîNÛ“×Ô©"díæ ñp«gõt’UjF@ì‘=µ63ë…l‡Þ°À`#È™ƒhˆÓC"ìÿ½kç’cÇÍ"ÖD`Gšu+ò:’næŸîÐéF–"o¦éhµQQ“ Yitu×{„£3ê™®«HâùÐZÊõúù¯ŸháË¿_8eæ%çw û‰ôVTDtÑÌDÄ”8Cðt`ÅÃhQà HŒ*Ô´”èi” 4\.~>Ÿß_Àµ¹½¼¼|úôùó§—ë™hamzÔ€RŠ2g4“k„‰$” °%E¶ü’¥)TxaZ2/@ƒ¨D˜]¥ j土Oïÿr9ŸÏ×ɬ=€¯3øWW‹×˜è±jØ>UMþÅYrýˆVñ/BÇ:óLmmöv7JP‡MY˜Gúw´™Ðetè‹?ìöMŠ‹ÿ4¿E<ÂÏu„ü2€ÑÏ¢!½x‡4ÖåjèH@vÚý¬TÏÜ'p(¦íL ¯mps——ý^¡îZ’•ÿ± ³{EÝÊí£bKím4wYtx¡œóé|:}=¡HiET¹Š€yn£‚#­7±•C[Çb<}¾ÂñsÕ5'è8ó…¹v¶©ª"ÍF[8!¿ËZYª¼|yQàåúùã|}úòùóíï/Vª*/\îEš°aSU‚Õ‡W ´šÉRU› †…ª$ £r/!3h!‹>oÔ*z·‚ÕÈçóåýå|¹ôIRMU-M¦ B;™¥]£­k²ºtÎlVŽS_QÛÜœøp`Ï|MœXYT¸ÄbìëHæf­³àŒk)î,z¤ŠH;kYxãßôÎÚ7¸a•É]DÞS·Ü TlUKÈq{ñžŽÔ€Q :rt…šJŠ O½!P¢.…Å!ÊâÀÄ0VÐËÎm¼ÝTMÐл¯£ïÙaIn¦FÇ·ð§8\ž™¼Û×êêÃú‹™=nè@gÓÕÇÉ ,MhôR›l°ù!Úôõ¿¼õ;sÝž€°¦o)(“!ÛLöPOÐÝñ›Å°¾îÛ‚Àa=™Ä!(·ôf5ë{N ïåLßO¿ à_ôÇh·pG^šïÃŽïX3ʱm¼®mب{¬h„ªPSeÂ#ëž2ž!Ó&ô¬§a&!Jh†'¸A ¢ž-Èm¶w¯Ì€$yøP×þŠæ±?Üœf¢Ôêv@zx6Ln²B©îS(ƒÐT?€GQñwÀÞvFèøJ#L­.Ê‚Y‡_«ÓhŠ!w.ù}»ÝåÙSžÏöŠ ü*w›–Cñiœ#Ý÷èüÃNUBÞ‚ÛÙÞ!º&ã ù†GÈÿÙÊìݳ&MdÊÙivÀ¨ä=´‹îp s¥J¿eÇÕÇŠãîða·Vh?*½rƒï 8{kÊû>¸òñŸ§ù+d^IG«J7}à,¦«ÅÌ= ÿÎÑ’õ»’, 6Es\îUø‰Ï§|~>eλÁ3: q·rLíh›¿ Q¶êßœˆ™òóùr)ZЍ¢„ œ˜Ý¬ˆ›î‚gãƒOnE$Ž… ЇD»+ô~IÐ@‘_ªUP‘FƒB¥ŠV½ýã¦M¯·üå¾\Þ_.—SÎ9'Pó(g€àuÌËS(XT͆[½VÎgmQ”ª¥ î%—’ÁRäåúòåo/ŸÿûÓ§¿~*¿¡™±Ê`B%$Μ)ÚI£€¶ÛÛ°óâY—áLM@U­* ”„1±4êõ% TÅB§ßÎ>¼ÿûÇü.ÓÜ Ê?}¤¾öÜöË™ÅÑ’DHÄ“â;V%1Fèã…ØM@,¤ÜÓ"~<¶iÀÄX Ô°¾+Ù:(1%Rð»1ªøä”f‚{¤jW$h9âªq¾Rd”X¹ ‚ó^"m>áÌ'´œO0Õ¢’”*'(¬j懖ªÚHª"*ä1 å®Þ«iq3WU­àœKÞ>!j£©â^R­í•%’Ý’"Y×­Êï—_éÁü¶âñ¤¿Ñ¬ø“ñT¬tÿ8”õ‚…óFÚ†? ž½Ï›'j$Vï}@ßÓú;ïh¾d°W£IîÏmÉW´„€´¬ǯ}@߆_ÿw4/ÖGúˆ¦ÿ{Zíæ‹âçfÎ[b(ÜÐáçá„RIü],½~‘Ä©ŽH, €8ŸžO§ç³Çc_›…o¹ÔqUg8¦÷›_8g=ŸÏåV¤ªJ…¨æ j}ÆCeáÜy†”]s7^M €*L“Àñ¤ªR #š÷”Rp/zÊWzA•Ó»ŒSÎÌÌY«Þ¾"ÒEi¡ £nCr[W8…TÈ×k-÷¢W) Ð?ô%ß^þó¿J)ׯח//_þöR®7(h!Û°"ju­¤Qn©÷¬òÇÑÉZÐU£ù u\AÇ07FU@ô®"Rn…Ÿ(3Óó)ŸÎ—»|üýãåÃ{êõÏQR4Á‚rï‚l¬²÷IÞz‡“uˆeJDÞûÇÖÍC%qTrЉ¦ˆísÚíÿô}œ‚@ N*J”À^ÁþÕ¥'ÁjRÈpë¬]ZÍJ…6‘î•ÀƒqÙ^ˆzÍ ÜÜ^F 7–hŸ+)ìçÁãeæÃvw­EñnÍÅ×ðâõÒà€¯©ë&|þî.i­p‰Ü µ7]è+‹G}–¬»]÷M ¶mm`^ÿú&_ð¸ùðÍö¿BDIC1ƒ,×Ñ+HÀÿ§t¬ëìþ~èZíé'm»÷¦”ªÃË÷¶l(†ùÈÛ Ÿ6"­ßì›’Ø»x~‹FRÒw†¾›~ª üËþE?›^eĪ"à@v©y÷M餶MQšh­"U5ú¡Æ×p5QÑõÖ¹z­§Õ4BEÇ—²Y}Žj€óxfž¢²-(—n]á›ìÚxGXÕqÝÊÖ¨ 2lBSRÖ$˜ÊˆZ eÕ(©æÜ0§"w?Ð_/뙤: ë ìÄô¹=ö©ƒ<1¿½vþØ#˜FoáYÔyçŠî} x-˜ÑÔ;3£KˆW\³tði{Ä+B÷@™˜Ÿwr=ħšÏÂ@¿óé- ÓõÆS?Ûòg¡¼ÝRì´ÙM$Ý%EχÑz@´E>ìiuǯâG<ÈaÞP”°NíÞ]7œaû×kYvÒ$PÜßÓvõ7 ŒÛYÖª ”f¡!&DÈ™ÎÏçü.;&åÑÄÙ h,‰@ ¦ÛU !gÂóéòÛY¥Ü¾^qW4è“ ÍN¢•BeN¡UgE:,Ჸ]ýÏ PYaáni)ÂÌD9³õjêµåo/×ÛË %ðBh+Rôü)çœ)sæ…A$ÉâáÇ€&!b(´âúõVDn¥”» K½¾”V-EÊ­ "s6¼Ïé݉KVV1²…Z£U´YC#a‚‚ $²eˆ¨J¹C*´*?Q~—/—Ëé·óùœ/—Ëå/À—’ a¶m^Αw0ˆy!&.Þ‰÷àU/ÈRô'ð±{ð¸ËµFnþ$wäu÷ÀSH(ªÕíÚz¾½¯vJèè}hX¿V(ÑšÞS¸Vµ»'À+–©ØÀ:Ú“„“%3KC~š „¢{Tíf—©PQ›wËÎPêÍ®L‰"5«HŽ^ë+7}|œÞîÄ+Íú­ðRÀ‹±­7ú¦Í‘ÝëUx­‡0R/Hf7|ã”Û¸'¾:¹×Í~%wtæ]³ <ŸñóìœÿK¢]AÃݯ|³zÛY2-"øÆÚœ^Íø=·–;{§ñ[©ƒêö‹øŸÙþeÿ¢ŸI¾•eZŽÊ=„äi%o—49ï@3p:Ï®ÁÄ:'Ï–—ºmq ]9IÃh/E¢i:p­Ígxàhˆ8Žÿ§Ø´×m’%gôô×5§jšeå¸ávèŠlXÿ Ô09¸_Æÿ4¹–åa­üé¬ Ù _°b¯›#c¾º {°ô¸óê·éãðrš{ì|Ý^mššÃsV|œûÈGuØ›úd½ßÕñeWÃØìè5ë—bADG›¶Òüü½Cû!´Øh¿T°Á}mæw?n’ƒ7°dNCÛZ‚å=®9;e£Ã¡³.Âì&1?1eÊOq¡Ç k,!ËMá5~$âû}r òÂÈÈïrþš)1îŇë«—#òÐñtßC"ãÃþœÞ—v< DÕ†§ñNà«ËC’”PbÄsÎD¤ªå®R®ÖÁ•Ù̺~-e)¹J©9ßÁ‹ë’>ïD‘㤰w iår¿]¿^KS,ŠëÍ_ª”[)™óù·ó9[£à¢U‰,aöäyà¡9‰ç6¡DšÜ*év,$ÄÜ[È4H~Χçóå/—ËûËé]>ÿvÎ9ÃbžU{O>X©­­nºZ¦³l0'Íx„¡Í!k8,bhô*[2Y'!@3¤¿L¿×HmެgÁ( 2ØíÂ1›l‹ù—t Œö s÷í'ß2A¼/Aܶnj%L… û”L?¼Û·„ÓÎóþVZÝàÍpñ·ÐŒ(<ÇŠ†¦d˜w|=¸“ŒÝ·»ä!=œï¡ÉMéT«ëü1ë×ËþÿYôËþE˜fA`Ú¦ˆ‰vß’7ç´QFž 9f#nîJ—»ˆ5²ó]˜D$n*u#t—’b…R嫦]ÑÂHÙ>‘J£(öñF‹¯.2¤¬ó)†ù°ÑYXgíʆŪ“DlŽñ&X?·Üh!äŒR<8ܼÀ 5FŠö dbrbv@ÚP üDHà;¨4X >NìÕ§ÛÚÚ$P T–Hш3¤9ÐGäF QÅÊ¥çVt¼³Ô¡÷+1\ñUÝT!R¨‡AÜöPm•é Z‰¯p»Älž'ÑV˜Á#%;fš®¿Lƒa ÌŒY“DE«Od[d^ŽðáqµI(ÍíþzRÜüV{@cG†Þܦ =€šÃº ™;‚·£ŒŸ~@¼£Ý®=õÙÆt%uH|*ŽõŠ¢²ºõnô}¦H °fEs,oZ%s/c=]g"é{¹)@´€iñGf€¼Œ°õÑíPLPÁä ˆ8(Ui’9¥á|¢÷>~øø‹eÿ²ÔMGêÕ°,á°—oál g• 7઀ qf>åüœ9S©Ð*"LPãº:eȔ詜VYmzºŒ×´ÿõV#t5Èêõ+Ç5ÕÞÈÌÚFÁD«–Z@È9çSΧ …Ô"Õ6J“Ò´ÔBUóœµ×©.wj†ʽح¥ÈíV®¥ÜªóXf¢'ÖŠŒ,çl ]f²&ð9`áÖ—!+@è¶K¢¯Dý¥%F ”D¼x h½—R 8ñé|þðûÇ>žžsÎ9Ê>[Z5åÄÛTxAYtþ/{×®ÝÈŽk7"R¨ÈîHžl²ùÿO™¬;;72¹áø(•,¹Ý>3w]cyÙ²Tª"Y,<7kZ|ÁK.*òë ˆ¢lÂ@)t~>‹@­?0ñJÔPe´‘74å•0’W·Õ>…¸hÍÝ1÷tô:ayp­˜ZØÞô1XšùÝ\âSŸ€ Êà d®RýWžKuaiš’¢AJÉ…@Q¨¨²œx¨­Í­Áð:‹6©$Ò9ˆõ•œ—u£Þñ†Nç[C/` “ýý á ˜>‰Ëy$¶w’8X.ê‹nñIÞªo†îO£ºWºË¸o%.¯4¦÷û4özX¦–ç+ IDAT׷ôÛ§2Ñ%¾Ò#cüê¯Ñõ4ã~Ž•ëÔ>ÐùHÚ1Šý™¨¼Ÿ%ðÛõwÖóôÑi¨_–hŸ6@ \ÍÄ¥¢Ìá*ºÛ÷‚ú°—ùÏ6°§?Úã«TJ)Ï—üó_”¾þû§¼‰ j¢r*”Y›,Ó °uc†S êë9ß':•’Å“7Õ&fDùІn*Ûâ×-jñº©(j¬mEUªM9Y_ôÊèNOór‘ÖZ7À÷|ÕõòT`« Äkê†ò6Ý{9œq ùˆœ£Nl#´}KÈ‘M­Êóùü|>ÿ8—§Â¶ôò¡ V’¦f ®ímtt÷ÉÖ L$ÄlF‘•Èkª*V(œL§é‰Ì¾â¤ Bs¾ë6¯²kóÎL™Ž -AÜï‘ß4ÔÚkOf5`µÊ`ePíÏ0BLÉë`×·Å·%æî1ÚTa…Í…ÔYx¨þê^8{¿"¤Ý½Â¢)ÏOWç*Ý£Ýiª²;bmV{ H« @Õ¡j{Ž5Y@–ßw²Hëׯ•ª:¸¢¹°;äbs«©Lâ=R˜û†>$ÆÔŽ¤Ïœ0u “™ØÔZMCGø÷‘‘߆cb 4¥O„mMÑ0Yƒí>ñHxùÓ „ÑW ïCx>2æ âñ›ôðSðmÓß@Œ´oôA`Bqµ cÃ-«Ê›Ô·*›€€L!vjŠ.ªb;ϲn‡3¯l@=`ã;Ûl èþí1ƒ®ºN&äz…æ¡W€83ˆ8±¨`Ó%` WŒhÎ2eÅiªÌ; [­†0$!.…Xs„¿ ? Ñf€.c7«Ëôðþ}7xו8><îªîBwQªŸdw†#a1½eó¶r›c·Ü¤ƒ`ìnFË4vïᬦ‡LÕ•Èr]4ÐøÇ£î‹?É‘ù=׸L@e­‘)[}ŽŽ–fíôÛ4{–ÖRmŸ¢ S"Îi~Í´ó«ûtç.Ly›áíÒ Pár.—ó¥â(Ù[ºÂáX›rŽ f q$Á’Å/?κIý«j•jkªe<5±ç•l–¥9OYš´Éû¤[oÙBLÄLDÌ,‚äÝV5Z #á×_¯œˆ²22qa²ìÖúËzà), ´V§j¹¦*@^rL´2SæË–Ã) mRõ¯Šì¡L“gÁœri¶‚’ÌÇk¯]0Ò¬}QcÍ@7©"ªZJ)¥¼ü¸\.—ËóÅŸëMÌ¥ëÜÏпÐpMîä‹Ý$¶¼h*1¥Êæj!¦Ì ¦Df{¿soº‹q¶_ûa£ðžº[p¦{¬ÃK»áC褪ª.C ð¶›²´ð(&[ÛH(Ü”!B\òÔ  ‘è›™ñ‰)Í¢Üï8];yw²}ò-ûž7L–ù hP<™mBV¦ëøÔ=h—zû倂k ¨1' Ã<ÚB¢åæÍÒʯv“‡Ì;yþ|ŽV•iÇH¦÷4ðSůoßÛUQj»ïßäm1¿÷5¬=³>öEÐåQÚýž:~§ LûvíþП°¥ÿ<}Þ~Œ¾ àoúbR°õAꜲ¹7nY-' /¸!úd“*Õ⢜°G´®ž7¡!ÓHÊÚqÀ9¦ù³Ø{+zd&©ÍÉ ESÈá ¼˜X¨Ž¨Ò|’´Ô8ážöÓ ªÐÄ@“j šàT™3ÉÆÜD¨ ñËÙ+¦!ﱦJVä¿Gn ¸WÂCñs¸u‚-‡/6ß„(ì4‰ðº ûœú]Øcw®,¨²‡ætð)@ǰ¨ùòúþ_v‰.°2y@âÀÇÅä™ýyÓïhß_'ÆÌ|åÅŽýñ­8¡‚A-ÜVò¼ ‰¸ ÏRôÚ MД™ÎÏ—ò|æüèP—Šî?ýžÞÍŒJ\žPJ9Ÿ/—çª"RŠ7rŒ\€ýãí .l—û ö<×JÄM‘Á„j4H ‚›ùRÖ&–Ö€‰p´À±V¼w¤!c«Cßµ&AÙXÌöð{Ö­¨¨U¯¢nøv6«&*ËŸ«È—I¥$X6µJÖ¹<ËiôûÕ9GS[Øo´”oôq$ C”#˜ s)åT8s}4˜C³ä…«ÝÜpj¸¤ótG@C”/ÒŒ¼Oñ=cãaÇõ?‹êµiÝOc)ʉ ä#dOš^ü\š– 5Ì?„{ðœP2qfÊ´ºñ@÷ N›í“&ßÿ%rÈCt¤Â¼s§§ÐÇ—‰ÑÓtçÿ":áì´ûômÓ×ÐŽ»¯·&´¨Ÿ¤½wtSÝTß*4RvGpØŸ€Dñór†îïzÞ€OwºÓ$ U¥ âð/Ò,†7ƒs<¨k)g… `Bb€EÁ›J&J¤ªØh¯.Lj—¥êu¥-ŠkØäqf¤ª+b€^ŸÃMÍÙƒ›¬a * #2oµ7M9öÏÞ xƒ_Ñ«°,É· q'Í“›'âÿc² OM:ý¼Š³XçKœüp þ]:ðkP7Kzˆl?Â>ñYóE#½žÈÎNÝÐZ=‘ýÙ¾ˆ¼cÍïê7¦Þ™ÎŽ’æŠ;¼ÍÒ¤ë[¦Ö‡®Dc´îa {ƒÂü]N٫Ĉ˜ÿ‘Nq€ñ®—çbúhïëC®gË~VzÛèWÁæÙ¤LüòòB‰õMDø%æ-¼5Nw­YD?à£KÜ6@™x:¥(ð¦"[ÊàÄÈT›U+ôøªUHTÀ›ý0s’H£)§ÝfjQk­¯•‰HY¶:×Íþùó•ñ B²–ezyºÄ1ÓèoÝ—v0÷®P ÀMt¨1èò|¹œ õrS›B…Ü©ØP›ÚÁœDD¬[õ¥që—AaM)TÅ«‘+â|3ëalž«ñÎdIÏñ¾ó²w¢ý³"î§>»ÚßajbpHL9CNûÀÊI€¢o}ûYu %öÊXÂ–ÜØĈ. Ö—2Üú5ÌT²éè¡[ÑÕƒ9}†Bðßæ±Uöv0€€ŽZ‡"hUh ·|YÞ+󎽈·%fOÚéV&°K—èóaê_·ñ æê¿å=ôõŒeíÎìÑ…‚(N\x#«µ/$ùY¢‡XÒMâøýÑ<Ûô'¼ÓÕ§ø³ŸUg׺äØÀW"£3Ãñûàäÿ!:\±O–¿º©²Ž¹Àßô…$aجæïÕf·¬¹4å†e ©ˆÈ&fò‰9‘Õ,UL¨L”¶~b"¨3lŒ^•'aQËú®Ÿ½t-Ô¯éISáç¶Ü¤¡<Ú+Áx†ã#Ksˆˆ¼·±4A³bE=è4ÆÀ ¤ë=äf<iRl`€ €ÄÖ¥‰˜V@h݇?œH28š$ï™ Ñ·ýŠ?ŽÀÈq N×Ú}ë@[â¡o­@ÄˆÆ &vC¢(±6VU(µ½Ê`—^m`½¥'b±Ž…,M"ÉDdžÍìòíˆz/Ÿå㇠׽éxè ÿr3ØÕã})T®þÅ¢6¯í±Þ »Z¤wUÇï-“¨H³ûŒ¢MÈòþLûý"óŽw€4·¥K)—§sáp–YÈ* QiE*"Ö´ìÏx$7±­Í™ËåÅë¹ “(ДIª¡€o™ykµ»‰>¸[Fñ6rFi~¸^úŽÁb!5ê†å0¹-Ê*d5½2UQq<ª½¹+ÅÜÀÏLâ@bÊ„S gЩpbj„R΀wc3¸é’ɲ_“A-Ì¢ÄfÃ"Ý…žý›©<]Êó¹<Î449‚WB8¶ ’ÌȯÚåÊÞú•M­ÔpÈøvƒXKÛ$%¦0°ß¿eQ3É×@ÉÊëˆj¾Û÷ü! 1éNê&â^ŽÎL$p.Ž/P‘p÷2fKÖÝ7¹Å•ÑØ^YÉLK‚X?Ðì'Õþ<&Œe6bo´ƒ‹ %󞼡Ö{ëàpš8M('ÁdöXkz,œúc<1Ô¤© Çì ¸KÝB×™³»Üt4YîÇÒTH’´—ß•ÿÐrŸº¶àcäœíu†YÕp7U¼wäyw­,MŽÂwè?kýŠÙ+§ÕŸ¥oø›¾’–çjÚÂm/È ù&…x¡`U¨ª5]äÌÝ"µf°|AƒzÖ•<×kw à°(tŠ$Óî»ëÐ '¦áÏÞk fýÞâ;Ýúõr8V¤D˜:©ãYÊ7kå0@kòa‚cas‰¤MUÄU(‹&»»R¨¢Û÷L:7®–ì,S“ž4¨fLÙŸÖ¦±´1/Yìç앜} ýßù¶PmG\Wlç ¡þž|®.ù28•ùš¶ÌôÅZ×v²¡RÇGQýß»Ô<î U¸LÀ× éZ sDb *èQ3x¢´ën*ÇÂòÓ{!:û|Ž0áCgN¨̽´f—>¦ØGÓÁv³Ù¿¥”s¡LâÏ¿oýÎT ÛÉKB£yþ—:±Ý÷¡6'‚‚N¥<].O?ëkQ©Ð™-`Žt¿ïù6Õƒ´É{^Ùªù/¬s¯·,ÊŒm±¬ö/€s)ÚY$›º ø©t.&"Ìk­Ý¢ËN  &H…—BúƲ ·úK«nŠ&H8ÿxÁ¦¢‚ €‚„Ý{>»å¦«§ç€a™#ÄõMeSuãœËÓååÇùå奜ʨkED‰¡*›ŠÝùÆ™¬ê¬lº¡; §°(æØ/ qŠ$#@š¸7ó_zõP¨Â`è°jˆ”ö¼ôz»ß1³ö kŸ;wQìO¨½»åRÑ@CßX£), ÚD+Ë&€µM*”ˆ²¥þÚw­0X ÛBæakLÝQ6î+Y_÷Ñ7ȦL‚«Ð¦[xÑ$i LYÈÖq½ÖûçM®DîÍé fæ(–p´Å„;~ø ÓØ7R° Ãgrd íÁÆ Òîàxý§¢iœñ–F™O Î~u6Î ™j%(0ãä?hèL‹7ÍäÆ˜ÿþ4àÛJCäæ ëÕ ŸÂtÞ²›ƒÀ SûV·/Qåÿ‹÷šn‹õß§A5XÍ·üM Ýá;Š#¨ŸDÆ%2¤±U”"Š’À:At›—œrØ&íYݽz$Âm$³Y>‚À“ íÚL4jêƒìz÷Îú]iñc¦bÈa"B’pãÞä£c ä¯]¯ (VnBÍ‹Ä6š¸ ¬‚fØ@È8?YWXƬûRЕ>Ôt¬ü;]ï1yµÙưãîÈš¤Ä.ÝÇ*)Ð G½cå}•>Èâ?ê.Ø÷8ø½˜ÌŽ£‰­‰´x8>p³„¯Íà@/~‰¼áOxôZÓƒÌîð8ô†‡KýˆŠ³‹r\…š0¯X::æ6Q0z{N(… ó‰¼lcbSÑÞ±I;RÆãÐÖ;ï72~y9×ú/€ëÿüªo*›X[‹¥¨DJBÕ戴œ‹D*ox˪½NGǘµû³¾Ú{œ` aP‘~þúI‰‡¾™)°Ä@AQ±AßTÈU|" #ãõ竎֑AdÏ—’ûÕfë¬âøÏ|§¢·†a–Xþú »MˆK)¥\.çç‹ãŸÕ·A•©WÀ”]fé&Ò´$¯äËxí|¡x? ”ÙaDp¹lÂ÷ |çɳz;ïaÒå_|ÚlH`D%gß]4Ìä¨y’f«ô݆V€œÁjªº)Ô¼À2÷îG›ÞA³×A`åÿeïÚ™#Éqô‡s˜²À²FkIcmœ5ÿÿ_Üý‚¹¶nÇê„¥¤…3 3«$ÍtïîE¡è®ÊÊ$™|àýèšÜ^“ ¹ZÈPyðˆMs‹f%ýd•7”‚gé7¡ÜŸý”vj§¤C…w‰|V&cêc‘ÜãCÆu¾ôu¼„´-CÉØÆ· ø÷Ø~¸(ûð•?1XÇŸcVýKð3dàûðãàæÐÿ£àÇ9ôÿÿ‡óŽú4>é¢ÝÒŒ:“´š)ÛÐY‘"o»)GysJàP€\k˜.YÑ]-óó·ì»%„ÚÈE»Æ(¨OÖCE›âˆ˜µCQ¨n…¼Â¶&e©VƒÁÒ–²\jU˜fw£Z@­û¾£ 4F!…îûÁáªJ¼ÑÞ‹å#¥Ð¦Ùz+ÇnåCëÚ¸r5ÍŸDå[¢ÿýŽ&PÐFØ*`#WÙÕ5…ÝäÛ Å4Ó$[u±F<¥ mlu&CÛM…µÁ™àPª^}‘62FPD¡‚CÕŒÕÖö1©Š5m„§Ønë æâiu±Ul!º¤00 ¢§ZŸ.-L6¥c÷ZGùGµªMÀlùcÑ9ÎÌ {Ù¡YmŒ¿—n iD¹Ol/d¼šÎöß‘ÂäÌ ª*ÍæÊ¬}Ko†@sÂRUÐ!ؘ7–èêÛó¥¦zr¬K«oÊÑ•T3Ó³¹šðêÕ܃ ´®SÀ*À‘Ÿ¦pIåµF-ù,Å`B´5 1ÀÍìíŸ{4—ø.p.ѧÆ*†£² ½´AßdS·CšGë!J&•í€IÄ»ÙÀðúÀ|ÿc'f`烠ÐCPøöúúÛo¿Ýžoœ°¤âIz–ÁÛ¾ÝókUŸ{ ±ÒÓ•Ì­Weð÷¢ »ìP—Ê €ì¢ ýÏ_ü—ì²c·7aòÄøá–Ì Ã6¦æ oíÖå$‡÷LæžqPRh€ u«}ÅëV½;îÖ®PÚ¨Vx¶XË}¨m‰Ê5=\KHñIñTmäUÓû{ìUºÕ[žf9¼®7º#n{ãˆm¬C$X¥ÄîRse.ôíïP¼üúúëß__^_ÍæÏê™®Ž^CÚ…‰R¶¤ëæô"£ áò¦0WÛ@´‹Ô§úúrûí·_ÿý¾ýc7ê£û¾S!&æB *¤Ö£­”·»!lÅ&¬ Ã9³"Úš™©4bP|kKòB(:p`?BOayc$jûM»º3NDKwB "šjÃŽ@­µ>™c?¬ûþßßwm*oû~ˆùi«/¿¼ÔçJ4&S¡ßï¡ê²¼S`«¨­³sšQ‘q™¢ª"û¾‹*ˆ¸ÚpßPuòíúzOú½ùQ±Ï¬Ê„$´‚"æ6„u¡„P¹ÂDèŽáMk<¼ëMçÎ5m0¡2@øå—=Ò·AÅØtñ@è¡,weuLãQíÉáiK%É9Ù'zÜc¯×õ÷g²8›"zc fö›ýú0O<jîrÕ#ýPèÍ9¬›m„<»-snP‚%ÒËñúJqë†0ÜäÐóùš„¨S{Ôÿû€d˜¦ÆÒL-Å £­Paið?´ôvOèM×Ù“ãŠ{m\ùStFcÜ64Èžãõ?îtû_ð!ÈV»{ —èŽ= û¸Ó×°sÄÏ#½“ý´âÁàÒ8´„Wc§Þ °¦„E‚9K7P8TOd" r‘]öoì!Ý µ¦'ÍÐÞ2ÑVy#ÞÅ)~ŒSU‡™DfNÝ$“ölDÒƒ67ª,UïxþÏé‹—³¶\?íüØ«:72ÖlÛí"8=HãÙxÑÃYl(GÂFÝt=Ä/Êú$Ëå|¬ú‘å=×ÑæG½Èás×~f(`0 >¥/šÞuˆº‘k½=ß^þöZŸoüDzˆtÕËU£óû‰q®êƒ½?ƒÎÂó~“Ó¯±\þG£ÚðI Z§âžJ¿' œ6ïq±üÛrˆ63ÑËÔ QÙªZGbd¢e7¢©T'Qµøí6ˆx'_¢îIãßçî¦ÔÄ!½\pOç{2©ŠG˜ÈõÃð#ÚÀ*ŒûÿipAÆïßÓIR/¿ˆ ~ÆSL?éVö^s?°­ /è/ø!°ÒÆsòÃ÷´LGEw'Ì®Ñ1s„; ¡tÊÈU*EâúF¬$ˆKÒ fM˜)Ø(,h'ú²h ãÑš±ÅÌ›IÄÐÉÛ9Cqß'Q°=òÞ,ísðâÇÈ)«doJPhSÂðmö Ô>x••Q(pX<—eÔ³½*ÙÇ„0(â©Tb& é¸ÔÒQ²ºÿÔ¬#‡†^¨ôð@—o)D_5ß`5ÌQ-ÄÆ(Žxçj¬äb1N¿‡²ÙöŠ"¬Eà Ô|/{è`ŸÌÑëÊ‚hžö!ãÆ*ÇF_úÖ£n[V §§«.¦‘ ß§‰g°Ö.”»ñëÕ´Ý\#k Ì„ëÕ@ì¼Ôì#Aúc"¹¦nòÕôT~Á¾µ×Q#qæ]ïå{pGrö¤ÂÚ„6˜EqÊu·@Ë›Š¤D‘‡t¾‰*kå—¿½Öç:Œ~çgTcw˜Ýmîz¸‰({^åXeZßö¤pµ¿ ¸*žÜ~ %E$ÉxKž'ÙÓêhS¦=s±ç ¬wyéЩÉÒi „çEÎr/ƒ¥È°÷ËÃ\Ð⦅ ©òXÖj­õÙâ½yĤ 4¼])0k…ô®Ò&ÝÓÎCWvwi´ÜùÜħ&0̬P’޲O~ˆ¬r½ïù"ØôÈš0­.çiònè„#0‰°MoDF#†š•M¹,*xÛ{&3Q‰&ïnc“–KvMGi¢°â¶h·Z÷ßẜVMQ×y¥±žf+Ï ¥FxfÁ7ñ‚nFí. Û "©õ"D=™öq7]¬þI5t~Ád*LŸæÞ>¢ LJÉê<z§’?Hÿ „Y°2l¾³­È\–‹‡>]°Šâå"N{,ó¹>ÐXBÎ7~~Ð&ø—Ýýb°b•/ø þ*pú …Ý'ó„¥™ @Î êÇ„QTÏ)jÌP—p:ÞXU¸±$/Ð…fK¢4 „C —]¾©{ÝXÊ.Xµt,¼XKÐE ·É'¦B¦H¦¢Á¦h™Âì $ #­hI¨ª ç"´ñ>Ø:v¡XÙƒN)Ù83p”•wsè¥PM¥zÌÒâTmpFȳ&µ¥ÄŠ Xú:ú0êX•ꮤÝôaÕ $ͲI¹}qÓr+PΧ­.ßúª^HsÈÆ4Ö,ËêCÛÝõØ+L—LC1.1† ú¬.×®j•ãº9–ïWH²KæïK—eÎNÜ×媿IÔ‘À~ÈÑÕ+ Ä. «‹aˆŽäåsßyàcÍ^=³tüjÚ½Žûÿ¼LÆ0uÀx\šð6ßÿòuTëO‘Ài ,,S v1ñG¼è»ÿ„"`K@@·——ç——_j­õb6Ú}žÌ£®ŽYø*“T³K˹ñUWX¨ÖJµ¢DÜoƒ”!Ë+‚Ñ¿Z»IŽÑMÛ„ød,\ÑsGŒó‹ëôß#H#ËÂs fÐ,±B…¸·.;;äó{o×ä—Z§ZÐX‹+ayC­µÞ^ê­ÖÊV¥ \o©@KSÞ|Mg‡ž]Âàr@šŠZå¤QMšÞ¸2s¡}Ä ª4áÂÔ0Ö­Kt3¦ÏêBj*…ýH« IDATX…Ë–Üt ­¨ìÑ‘ÈÒoÆsbYÄ„¹½±ÎK?¦ådTˆÖâéB ºƒØùÍ%t"¹ß¹Mÿ¥]}m“ÎÝñ@ƒîôQX!(ëË„ÇPŸ†Ù{9õ¡Âæ>€^N ËƉÊ=åˬ“]úíOý]•ý ˆ“>ýÓ»x=‰ƒ©³œ1s¬.ýæÇ›å>ä:—ää]ó“¥:·7Âp’fÏÛ¸2Óße3Ƹ¢ ÕOŸ—ï8Öý›ÃHgý|&.yÃhŽ‹¾à/øAp×"äèþïÍc– €Š6ìo»¾)Õ­×îTó›%…õäŠNã1˜i ›„S%»Na  ãš\Ü.¨µ¿Å.+kÙ%Ù7h;K¿ØLÄ´o@f–iSp#æíhc.â&qU!b/d2Rs$¹À f…´™a¡Æéj1Bòm›F¢/P ,s€BÜz6Ž1$³’»¦CêíMïXýbØ TIš0V]¶b×8䜳P¨W (@#"U=¸ÎQæ·[eàù)mJŠa‡wÝ p‡Æ] «ÓEE°I¦ûæb«G¢÷øaóoØdÜ6{6QtËÆ¨ sn%ä¬wã&>â>÷2QT1ñÉ‹œa¤  ‘»K¡ö1Þ÷–HU÷·o*bþÏõv»ÕZÙ êÉü6Àt?bz­Õœèj;m2’fÙpú‘¨E#Wzù¥þ^«ü±«Š³kFï)ÄWØz= çRÆ!.æ 3/“Ncó¡_ÑZOÓx/Ä{]ÉÀã €õh'…˲¥ßá!;u˜lkQ? h çúúúúú÷×××WªUÏ]ÌoàqæÝIçúNÄü‰ôèê£-ÈR²Ñ¢öÑCEÅë'·$ŠôtV%×Ãäﺩ€x:XÉäfñ÷ºª¢¬Ÿ»A,©€ w›W$š—‰"X–/Ù„žˆZ…|ßÄ3ôÆ h*@ôP¤DVÓˆÆnœçqM×ÇÝîúWÃñý]ìãHL™Ûi‘Kl>>¦Ïb$×Pâ@ë9•…yÚ&"6i &ñïäsŸ­š¸üP{'ÓÄ ‹?|dûœÄ5O(Ýý埱;ó0îÐ#¦û3\®¾–aèI'öÕWúìýç`ØçEéŸ Ÿ[åOÝÍ ù€¿à¯Á»Æ¢ ï‹g6~ÎÏ»ì¢Â¨(Æœ¾G¢™µ22Î¥'¢Lšà!û‘Õx`cË&s+ ™¤KGÖ *CEÅB¼<á-1@T,Îé—ƒA±$Þ˜û!Ú4´Èi×óÙ+Oa©¨ITW•noL&/&°n}ݰŒÆ²ÛPO!¨‰Éq¡·E­àRÈÞ<'û°­,¬öi÷ìÜyŸÜó¦ËJîóïŽÇêøT›†žç Ù¤èè–g•4Û§¾ ²_&nM'EqØ#·§‚9¿Ìü"K7éÖ JùÐⲜAºº¨æxS¶(IÃ2ñyBo¾ÌO÷€ènóË=Wgkæ;ç5Ñùr®àÒÓ۟ΜÄ'* ì\°†î|ˆíަÍÃöÍÜD ýP4QUÚøåùöò\é‰Q€]…„SnäOópK¨£5@mðI|šgD…Ê[­·ÛíùfeJäMY] “¡I ;ðF$^‹«Ï9-ìx–L>ÆdééC<ï®ÙÍ3Ó¿*¸²bcÂ[W—ƒûs €ò†—_êËËËËíF\ycŸÀ{ôñ‘0t[=¤ã.zBO4Ë…xcÚx©±,‡°²Lø‹Ij5¢´i¸âSO6¿'Þ€Ã45:¡kCNŽshãlñìjˆ;ïÛÌQf™¨iûÜõ Ê\T‹îegÅÞõÑ=± ×À/j‚yôŸ½œâ)Ý@~'ĉfÂÿì±3ÃuËC¢Ó˜Ä$MÍ&ÏDG¦(˜Ùò oæþ‘ çX®òû¸Oñ»êÈe$„n9×<ø®ÿ‰;ÿ:ÜG£”nxX¦ñÓ]6P¹‹/.½ ƒÏ´e:ñ:x›ïÿk]>„´®Fôµÿ˜úã_£ÌÈGÆI÷g­ÏTážnöKþ‚¿wvÛ•&x8o-¾£ç¶8¦ð~J?•õÆ]ÈŠ=êzß56Š“F€¥¼B¤ÕöUìõÐŒ­<Âvc.ø?ö®œ¹’G°˜²²¶Æ’ÆZsÿÿ¿)YSc)a‰´°Ìã½§:zz"„¨P¿Î‹$H‚¸AD^œŠÀ í>NmÄG ?½vz¹ÄžG§S2!¤n BaQa^üÖö¾  /ÆëE€@~b9oq¥ï(:¢½;ðôîWÇî$O—¯Ì›3*öáU @Q§éýަ¡I-Ó[ÂÃÙÓ¬Rz}œLŒ“˜ ŸôSœÁaOi9ñ×òð)‡Z+B0}Cšø-™ŸçV`ßwvò$xGoá0vË¡¡_âj®8âܸÉÃJ¤zXó,QÙê (¬u(<Ò·«å£M¨¬·CàvÀÒhOšv½l¡úÊ>±Mzl¨V•'åB+óº®ï P¡¡žšH )åìÌVífjwýZÿŸÜÌ5sþ?SŸNN[ìQð{CªÉ·&gã‰æd¥@úPnT(¯xZ±]›Ê"L+¹{δ[“(r)!s¾(Í] ™f'ðB\ÌÄæÞCZU +H,T5Æ52=³ÀÞÄ-KMA~@ŒHïò¤kÊ8ÜËRÝÝ}Ž\˜rLßq¬vM«GEõ*¾€ŸX ÔD¡´÷¼f ¹™½±’ ¸ ®ÙOx;oU“‹À¼"4ŒçÅ0—R¦ gĤ(E^jêpžêH!Ü !p¶ïÍgf®uô HŒ!\]ö ô´e­©_ÙC"«—úÃËîÁG¥îYQ~Ú½Ï*ÿ é¯ccC;CJè²å¿p”®’_WhÍåÒ¹Á/øo ¿gÉÿÌWÎ2cé8G]Tì¿}kR×IϾ@¸Á±v‘íÙÝuOеû%—éÌæFµXTwÑ·:Æ^/Ç#³q•¨ÏÙõ –°§;Ø•D»fáaºöŽ^t¿‰1Úì{â“/!ÝìËZc /Ð1ÑwÁ¶©.[8ž*º½´ ôcÃB//¯ÿüßו €lº.Œ2X»ÉèA?†š,.p…À*Ó‚ cV‘ ¨ÒB\@¤ëJÿ÷Ï—÷·ïoÿú¾múòŒu}()ЛNÏçCȤtq$DYšô.¡ùv¢.^ “@J™EÎË©vÕg¿JÖí»Ô€%¤îaÛ]rDÑËc*â©ó WôLÚÁÂZá¯êi×u}þöòüúº®+ ÚV‹È€n“‹‰e(Ü:óZ’äCâΣÝÓ¾‹p T üLë3*ÜVZ @wJ"‹œèÖ~*@#´‚ˆ@а ó †He,ž"èù\ɜथF¸Í‰n´T;MFFh¨øîÎiÿw²¹*(;‰T “8Quš‘”mzâu]»W¶Sr˜ gæk­M¨„ïÏ!ßZßÌšÞ¿ÙÄgD`ZÝSÝ÷Q^rœUwLúÀÙ­x,ÐämA‹5êlþ{ø‰u~ftÁ°ä-KÓÈh³‚À:?èR‹Kmº=B˜Òª0FCTв0h‹£ ŠÓÌ-}_LE( †šª/0°îØ J„%+ûC“o¹Ïc?CœÉ±F×䣈.½é¾ÑÀaãÎ á³£…„‰íâBZhû@gŽ´©Õ ƒ;?‰ÆH™#e7´!WÀƒ¯œ „€YÙúGæáõ©×ù‡ƒ^5Þšf6¨¯:À_p'ªt=ýKiö=e).œú{?UE« öW: Œ%\@Pc,{ a>bÎ{3Ú&;]&lgÁ¨l"Û¦Û¶izßËÑé7`VâÑÓþÏû!S/Ì}0jbü«[KëŸÜhúr¨åVü°‰4•ª[•m«b%éÕXüvÓxÒ’—õ•I…\‚çÿîðÒ8vt@ üì8¤à9ÂIþº¹im丮 ã,;•XìŠfÌýŒ¾öø¤÷ìúÙþsõ%Ú_gß,ƒù휬¯Çƒ‹N÷–H Ywþxª{€ôØ`‚éhñËur£cw×ä%Å{Çü%ª]Ë#V æ[¸®ìåpžæ2ž;ÖáçÜÚáÜâÊÑKgô xWÏñB´ð(PNAx5±ìÝîpÈK…Œ¯µD:öc<Ý´÷`|$j_QW€WóA„¯RšùP¤ ·ec¨Qøiåu]Wæ§Íè—fŠAGéwXîTfÇy­àQ6à^Š®€^íza¶´ÿ˜jžUããÉoïûÖ1¸«ù ?±žO§˜‚¾]¬?AK‘çÅÕm¼ˆxa65“½\È¥S«B Ì2a®€=ù$Û¯“eª^âÁ˧·¨ÓØK2çwZ8ü~Ów¬¦«SüûíƒÓôŽ»ú¼u ¸Œ+I,>ËSýÐw¯näVŠ+eúß øœƒº’tZ𿍫¹ÿ\I¿ùÇß n÷Jÿ¾,À_ð௾Ó=í€;Ö˜©ªMúkÉ*ÔÂnIPc,TºOuËfG¦Ófs6Ö,ùìU‰`퀉ha¨*ð.V·)èÉm#¯:'æ•&ºMÚŠÂxâíØÉjÇ¿gh´ ½fÖŠž]˜\øvVcÇítƒqcU¤ªZ¢,$M6Â#.>ê2$a¤bLb>k‹Pb¼Ç“§œú4‡)›Žæ LÑ4Cq ¦Ð#Í3Ìï!£N\t­(«)3/˜îAštöá#Ð΀hÒê?,÷†Ë:MƒšoŸÁYÒ š„³©fºR¨ÿÎÐ-® •W)¯î9(úû/ Ç.ô†«ùä±½“°}à5½fvo–}ÿÍ ºÔ*¤UÃ"3é°d·þ÷ót¢õy}ýÇëËËËÊ+Q)æß‘|Aï û Èk™îz^ॶ ª™«Ñ ËÃÀ&]Mr‘bM{쎫»“4ï?£rþ1uþ¬]|ä'$ÿ‰àîæ}\ŒøÉØ7¯äó>ÊÙÿòÎþ *¯±¼>­XؼäI=Þçp óããK EÛ4U-æÂ[Ù"ʆáNÎD‹[ãÝÉ‚B)Z‚°›IÇC$ðƒµ»¢$eˆûBëAÝ¥ß00Ÿôÿ,Ñ׎Ðù›Ä#OU~ËRY)~À´(³ D¡†\K’Ì ™@ª ¨|í·Ï±Ñž†“Z¯þãuþ¤çîÖÐŒäoà“Ï`{¬–Ð S,f_ðŒ&»%ppwl7þ÷&t¾jg‰›àâßuÍmMvÔ+„ŽÎÿÇ„´a¬>€qV$•4¯7ÙéhvʯOAz~Ú¿1úé/‡qàÝÁÆùí/ø þ0<ÈèPƒVHU­t‡ôkÄ/84.0šÜ`ÉÇ)ÐE„È­òšÀ'=±n£¶´ðú´šWáÊ´1IS^È8QíÊ~ýؤ+[› c7þtòžø0/ì!„¦¢Ñpí<žkÃkº ™JÀ°ÄÈd•”Á„ùBª0`!,„Âd%4æŽáA£Ÿn9;Õw¬a²ã~h@–“Ëáë É$kbaë,;"!rt5JD<¶¤î/¾RØ3©1'u€ç+‡J9·X[çüòBÂÕŒjGñ:åãŠwwžÙÍãAú9å«D5p6S˜hê‰îÌ¡w;×ìšœ6=w‡“ÈÎϸÁ¦¤G¶Ñie4é2U𸷉Р?ñÊëú?žÿ9 êgeÞ€SÎv\ì‹\U@¨ªUÈc=ùmÛ¶›©ØÈ,4ªb?Í3îņÐ™í«€0ez?æ¾ ñ¾wŽ•N%>õÝÑêäåT¥5éÒBÔ¡…h!,D½Ä”¯XNj"-$õß9“4‰îCqInÛGa”w…QH;08yOÌZ <;yóÎ3Mn -mÐÞ‰ ï:«ÑOø9è%yìbíÑóÈ–ÓUZìñØxÀ{¼Ðækˆª€4]›z8eNÙ¬žór¨yê•æ\GŠ*ú¡S”/ˆ,lÇ+Ôž×C ¡ZŒ»“t½¤¦óú§Qˆa‚hnÍ#)>"üA¶í(ò&® Ð<‡ËôÌç!©® ?çVó‡aR÷ìðvîÌr >M0¯ž¿jèâùŠô? K¿—ð%Á/Á—w’\¹aÎÓ ¬¦kYjÈ6 ᕾÔÝHA²û+mWE<Ùr?lÞŒ•Ü—­”~#B- Ôn-„…ÖÅøH•º­ëº³ký‹JgšêÎ0’常ÉÌ—J£ÂŠF~é,`b)‚Jy°üèuG¯àá$¸Q0¦5¥ÎŽ>N)ˆZÈÚEMǼ›^—û!g ÈüŒ3…ó¡¯Óv-¦«Íc;ûw€`ŒºáËÙ)…'ã†/¦ZHš  ;É©IÂâ$QÄói.–Y!ª“ü4‚ŽLïÝ“ÖLæ)¾s7ëáÞî-.og^܆ŸŒX ÈɘK)#Ûl3IUž`{½Ësö0ìJïe¿^0b­¡¹mOÐEa£ ”–è$g ¤ßÉqަærßBÔF°žÃfLf’/ÏX\@SZ‰ZŸ˜ˆ"ò†`¹·6„1 þCHÕÕ$@«ê¶½ÿxûþ¯wU0HðZnFÈÏ-G·`ZÀ¾ÎAÇS4A땱çç  ødí³xæÂ3@'A禴þ;¤z–¾ýãïØo]Ÿ{:}»¦‚F:¡,4­dÀ”V Û8– _±P°Ü©˜jÓ)¹w·"ZTQo1:é.Í‹¹'Ñ„œCd©F0jÊã|isåLìº;ÒÐÊÎò3l=ƒ®*šÀ &ëš;0wÉÖª AK÷ýOñƒ8 E!UPÕsؼÖ*xZYjî„q°úLXéŒnçAùÐ$^‹ë»“s8ï‰3wïèôƒ$“Sÿta3í' rÆV<úÐîÁf½Ô©ìÇ£›ý&!ÒDÃ?c©þ+À,vŽÌwØ9Ø‹¨!§3¶gcøñ €„ËV˜º4Þ¼ku›G€úë"0¹œþ¬ô‹¯à/ø@¿˜&4´¡7¬X‘¦Ø<Êìá…Aš‹–ë=\Nˆ‹" EÂUW##ßY‡;LRÖôe¡"}'^dÙà{ h­¢uÜÌzº’È„>ƦW½‡l0…7Ðø”©ˆH¦í)ZUšj¤òšbÁ‹)’x5ƒ&RÅ<ºM„}ŽÃ/¶c˜ SdpõFKÿ¼ÝÎÏ Tœ$5§Wý)*ŒýLs„ûäëWpßg ˆD’îÄ! 9NzeLsblœàÞ¡£ãÕ;ÒoÞ·G8 úý;DÿZ¾à/ø=ð/sëìƒXªj°{Èþ±zöÍ}„øÒ%ÇðtŠ^3øXR>&x*NÕj""´ê&ÛÛû»TEY×u]Ÿ_x!(6m‘­**,3Öègï­Z¨_¤Dy,' '&Œ`ÉMÂn@e8ý‚qéŠÅÑœj>¡³pMÞ¶X›¦¨ ¨6c 4:3ûJÍÄ‘œÝ<|-)…GmÙó³|‹4Öæ~KcÔ&Üê<Ñ yÕ'΄™IJñ9×.ÜñwÈXª5œ;3DÝ®MóÁÉ}.ИPðè){Òî'hÇûIú=“º}]Áᘃsì1Ï,þe·[hUF‡ÇÝ7pú‘˜SKÛnß19œŠ+vPÆ¡Ÿÿ½#47Ôa¼Wi+^{QaòT:‰\t0£PS÷ùô–üúúÄÏßž__ŸŸ¿=³âòòžúÍ Áš›è[ˆžØòÜê¶m?Þ¾¿½½ÿxßþ½IÀŽsëKIôat7í@Gõ|Ñä‰#C\y±‹~RØ-³lpná“A|÷ö(3øl™½\ã*ÎÆíâ…­ ÏÞÃöE¹×ÕÞž¦ßy4öOb£¥·Ð_¾µŒMçNélw¥‰(TÕ©Ú÷{×Ðe9-Ç ßÄóÚÉ΂þFßÒç˜caíÞJ—6 @T•ªžÝ骨Š2HWÍéUë™ Ð*ÒD½–¡%ŒD v˜ØYš¥Ã¿ÑÕ‡A-šÉŽø»ûêB¶nQÒçNMèA÷MßjåÏàTŒ;¢*f¼!ñ iÙß`/÷·f5Çïÿîq‚ 'éwøœwb‡R;4Á_u8Á²¸ñÿÿÙ»z%9rýÁbÊÛ’Öjí̾¿µo°·æY7cÝÕ KI kà_2«ª»%.¢ÝUY,&È$Aüc¹žnK¿WhÎúþ ˆ½ß >àx;i«ß{»²èÛ»[2Çþå´B£ÃRy¸ø8¹©7¸´ž:í~p©F]{? ŸFKÈ•ÇÏÀ+ö,E5¨žúL¯ëno`k½žgÊ™ŸO¬¹©sš4à{Žy:αÓ럟J¹`¹Ü?…êÙIˆ÷¹) Î[~þœŸ¿<çœ],)ò«úœ÷#ÁÄ”pí¾2#ö.û¾ï/¾ì//ûŸû¾ïƒ^,€k ˜‡AÇWCæÑèp«;þ®ÿó`‚¿Üæ~ßó½ý?&›VL»Ð6U·Ù™œê2¶+Žæ‰Ê Î;=0~„›ì¼©yö.Q¯Ó3Zò©ÿá4”YÐ0}Óš†+TÜ€l%N½uN:œÈwzXk»m¢>+˜ L0Π%¶ÍM,‘oÒѰ{x±C'°æh¦¸qV£cdO,ÝW7V`üíý[ ¡o%‰2t{{Ù:V¾ ÝÁëu2ðùënß !ývß*D¶mReà•òp «Å±ó—û‘x} ð¯àgÿ À/W™úµøÜ(DùÀ#æVëÕÿ‹ó¤|jì̦|Möý ¡ è·}ßE ˜ À¾ï´‘… s5&Ü|äŽL &Hýé”™Rc=¥ƒ,,O[Ö#› –ÑxÁE‹ü¦»ìz€˜ž¿ oO䛼üùòò/mhM s)ôµqD@o2Æ(ÊùV:~>Å­îè!{L`qGÐMM V¨i ÜÜ´4²"ÃDe åºBÛ“r˜.q!s¶©VH5ùj"'Vàly®ï÷o;È\¿ªo¹¯RžÒ02Uè8±T[‘¶2þr1rpi&h²ü¨îYÔ%PJÌ€@<×K‚‚rÏ Ôˆq«x¬¢ì©¢´!#£ºòGÒ,Qpâ]ö}/µJá*Ÿ:6«Žè¨Ãök!S…“! ›dG™!áÝçmå”@Ò>Êx/"`ë©k'ŽíÜaÃvÕJ,•‰GTAœ~N„‡S¿)&$´NœÌuß¿Ø;Ó·v$B¨6qA?vÚ˜‡Á‚ô`h1_ e ¾ ÄL,lE;˜x`-¾íû7%"樇 !»KŸGW¡‡‘,~úÛ×üöüù ähS$5³Ç“OÞ¤#êèºÛ9…ªÅ›ùÛˆˆøÐPøxhã}ÿþŸßÿïßÿõÏŠ"çœ9×ÇQ«1ïe÷kÊ1/ÝFš/d) IDAT­ïŸŠLýÕ‰1±œìˆèÚ™¾Mᵂí‹zqiDí"3Û}j»44«ÄOmàƒ2×ÏÐ^ª©çS‰äÆ€]Ü•C˜²ÙWxz~þÇß¾þý·¯¿ýö÷§/ϦLä:°Û¢äì™ië®p¢ÊèÛªV•]vý¶ƒÈòPDQP_À fÂׯ_ÿë_ÿÎacËnøÐt!lK}ÒG1FTöm¯`UQ÷™o´=¤qó1ÖQÍŸâüWé’ F9¢aÔ®Cœn sQ~îN¦ì‰Ö” ªºÛ¥€7ÒO$¦ÿMÄ9ó§œsvù3Ñ%bj8õ>œ-»¢Š"Ìœ?e$’}ß÷}5Å7Ë¡züAàü9ó'ÃÁH.gËFо[Bx;(y.ÞØ–ºkŒQ!î^axÈ}mû<µ»H)Î A$ˆÚ˜<,ÜÄwaå¡T‡  r€I´¦d«Ï«‹ö¬Ï%Þkc!êOt\ZRRÛ)sbJÀAL´ŸÓkŽg‘³zt’~¥(';¯÷™_M]Z§£³O åöôr¯ôŽ&¢í├÷J‚lP$pal‚ÂÈ¢ðaÆa‹×òì"³G5Œˆ€ú›ú«V®o>h®P?C¹£«¬P£=°ò‘î—V·l8…eÛ†]8¶*O¬—<ˆÓUKú°ÀzÐ#tVLû¯†ýÓW :AuýêÓ © æ{¸ÔN:+•y#æLLl¾Ðªj6Þ4´ÔZGwÄŸMz*ä’j©’d×hòþ2Hkõv…aF,޹(ÔÞ¡ûÀ6’­(*·í·8ÓºÄMY=´AT°-ijmß­÷•;~Di3±m“„»f X:×ô9?–Ÿà9ܬ“~ÏÈÐdxŒ>ï<† ò-¦Gƒã© ƒô tîÇß ¾oo¯‚GÍÎ'ãÅÂælЬ"‰¾^Qyæ:ýwø¬wãÍan‹teïSVëÅûžùYškiîŒæð91—Uv3üûÌÏQ‡×HÜ[þ<4A·[óP…·ÁjT¦pîÙûP`ÚÄdBàø"$Þ(gs}:.³7<üÜ›ž/õps¿=Ì; žÂev!]eDèà–Ç rñÂø~„Ñ3ü¢ç{Û_–é½›g±‚]Y ñ–.G¦ÏÒOP÷×ãiA´úc¿oɇžÖot³«Å—ï_w Q¿›?h„Š®¸ èú­u(ú!¤›XßN ë{@yç_Âèú×Àë=Õ™,ý€?à°8jh~×xúëÓG&¬¦Üuz®@=üªBTû¦}?Ö‡ÖÜ!Æ·]LJà­ËXÐSÒó'ÊO™rA‹È¡¢j9¹:Í–:ç]ªÎ­›“¢ªŸ­³£ýÄ㡯h!šK2žÛâ²D©2Èyñ+?ÆÉ9VM Œ"ªJ“ºÑ§\0e­¬º4 êì3PÝ^–Óñ¯GÝFëû¤ŠúéºÅÁœŽs)‚"âÄ;ÌSÕq.ìKÅŸ²Ä+£ú׬F21i7Ë¢(W¾Í"Î!‰!séý¸’éÞ%÷²Mé‚Gé~„jüYÆ)T BÚS¿× î,zÔ½f[cœÙ¥›ô-0Š1N_qëyà ¦˜ 6û*m\n ¯¼Kú6B¸~Œ})¯u¯©ŽêªÝæê–Š7k¸à¼u‚ûçJ¦½~¨j€ð,Áéü¦#Óõîñ뮺Òjcô¥Y—«Æ¡× W"¯9äUÖ•>qΙ2“û!³w7Š©*^†xV‡õ_Ý÷_Áè!ß‹NÃõþÒ:ÔÑ43¦Å©4+—ð¸ \Ö¯¥Z‹:$c–ƒ?XúãæB²c”jÄ©621mÄ›Ýñ¤£W‘UÕ£w“®KNÁgGªÔĦŞwŠ6T‡ëò<ÇH7 =V7¢‡²<ü@h”°i}³N$ uR˜JÍ0i˜:ëtk<©P~0,¶ÒƒÁkzí®]߀êM®TIÜ %… ¼f„,ðØÙìï!ýŽ A\?àø~°ÚŒ3i¾Øê•Q4âÕ˜•&aj“=š‡`)=,¦eÙ§ùÖäüJï[Õð$æÝŒs¨šnr‹‰¶D4»L3wÙbfÿ¢Òú¢ ‘JÇÝR¡TóׂW_ôÆ2«'ÔZЧ.¨I3ÇÀÚQyÛ³Õ(wYrcý(ž¹aâðnáÚAóΚs ‘ ·”ËW —ÝfQ ¹M!*õ…#D_HG”£l&Xã*!/E_ŸöEÏõòx¥1ôï‡õlIo^~B2Ÿ¥ßIŒ®[‘Dw ³ßZkÙ•¹u¸¯Ëm}N£§{¢Ô54ƒ=‘®áâALùËs~Ê<ìÜïƒZ!òL ã{Õ7ªN(¾ÞÐ×id*šz³èrÚ S–A`~«ô ¸+AŽNæe >zË{W7uݶ¼KPųo$zˆsΟ³|®~­PÙë$á„¢bôyV8¾‚ë=wB#NÝûtÁù&÷==ø€ÞÚéå@DòŽfçáG€+¹8La¤ˆ¬Þ2@Ä[ yefÀòí©åh*”ZŠ9¿¢‡é¡*éRj ÕÑž,¢Ó$wc[ÐÓ+âãOü'„+"?¸{¬Ž]›DYÓ3OžzDý˯þp³6^¿¦\o«tÖ^´|]aó×À»òÓ`í·Øk܃å õ>Œmgé‡üß(Üý'5pÏ݆CE=ï pê(¸rpõj®B8Û‹&NJ›ï¼×kr‘°J‰FÉûsÈ%ñµ«¹¤j§ø×zÁÑcð—žÁFTtÞ½ÂÒÅÆp¢Z½Àª¢F›\ÖšŠ#™`¦¶\!–î«TæXÕÆå¬! aS¶ÃÛ×ç8i£o,¯{ˇW‹Úìofîo|uÚQ‡[8znoA)ÇÜ¿H}íQ*P"ÃëPîYxÎf²ö^kÌ› ‘f9Z¦n•¾.OÏÈ ¢õÞööœ¾5#I©¹Oíga+¦jy‹T7 À4Dçú:Á9¿«AŠ@²9ç¯_žž¾<ÑöC8­ 7Š«RTE$ðF0ÝI®ïj¿ižü™)\1^'yxþê R÷z*J•sªè‡¶²:)˜q£¸¦¦S6­Óʸ"ÇRF* Þ3å§œŸræ–2­®ÀÈ¯Ì ÿÛGᤈ°çÒQQ§[ÓâÒ×,¶y&iÕãH!©f1l…N¡F?Â2ßÎжlÜèwÖ¹C°#xôбâg„Är@ÏÁÒîàÊælp(P\Q®ºO£o|µ'w%PW\Óú³à)œÌxè|ÜŒ%”æÖm ŠuÿñÐÝå!&"ŽºÖ݉ ·(Îëů³[u±ÇEÆ«®Ãð£C«Ÿ …NJüþZ1¸‰U'¾ùº–~Ç~½U¢ø¾#\¸i<àA¡Õq±@‡àËß-¨ðóàœ:)îÕNíJG!X:–lq‘¬Eí¤îJ𵜀­ÿT}+åÚ,ín3!±Ohwk¬²Ÿ ¢?zS= &˜Ðå_®CV£<Š˜ÙÎ~îå" 3sy¾ëÈ.æI x²5)ªÉWfæc92OÕÕ­ª‡çiïdz¸©0|¤EKsÐNWU­„fT„´¥X@L ZsÉâÏXén¬>óE0ö”1‡ºgaÔ »zw Ýwin{Ç6'þ†ÌŒÜ³˜m]YQZ<--¡“~ës'+WêqÄþ7a`cÒÀÅZŠx€žŸžŸ¾~}þü\-‡zRj=§™Ñª<ºp &J‹Œ°DOˆ*¨­Óê–¢7XÀó=í½œµûö }¦ß³Éër㬖È €˜iÎ;ï›V«LgC}…3êB V÷Øå§§çœsΙ¶>euUd¿–)çÀ³aièa‰8RIQˆVùiêþNÍR÷q…¹b‘á»}wÞjn%Çæoha¨×åÛd$òÊaPè¡*ÚŠ"ôVêÙòêõÏ¡—ië]l(ÌODýïUPa›=NGç—ž0¯öd=qo—_ “ºdø¸òk8­ëYçRžû íŸ3–î×P±zЛ¿;ÜHó“eà& êr?QÙªÁÒ ¤úCþ€ Ü”ézÓEÊ­ð 5ªío˜%4ꬦr¦–– 8úî 'Î刪¸Ýf2µÝfbì¾ ؈ˆ­8pëJÇó޽˶ÖIèÞº5¹cYÅJõšLN Íqóoëݯ9#Ñàü(Tƒ=*ÉûEÕµ{ºU‘8TÂ`2èãë0Rbé‡c¨Y’Ææ Ã%í^§ÙiÝÕ¸ ¹Ï`JIÎ…ÁeàÓR £P|46¸¤ ¦ìé‚“xð‰_Â8غO¼ñ¤·üçþá}2ð My]¿y—‡”­°¢»rÔßG¶Õ(Äz‹¶wÉQ.LÿoóqCõp¦>çüü%» 4®µ3o¼_{ëBÿçÍÄʶI$Ë5L ("îl2tç,f™íôe ™–³½¦EGÇ je»N^£ÆĬ#j7—è\s« t¤1¬jÊMñt͘.NÊdšÔ6~þœ³½8[tŒw^gr¹,`.maKTOÑ_)À[¥—).À%睊œLîô8*§®[ŸïÈÀKÝn× ‹˜µ`®l¼42½š‘CäýüC¨DË…FKš,}ÜÍh"îÐê¦ ­D‘Ȉ{¡È=áÝ<À/ÈÍ ŸŸÀuýö4¾wªÆvW ÊïÂo@]&óá¦?Oz6Ô»èü%Ÿsº@(7™¼Ðhäû‘„©? b¤ï>0¹½*_Wúë~¤|Àpî“g|ï=œOó®sQ³Q“)Ýoóç¹U€*4 tRˆv6É`åú6Bm!P‘€ˆh¥Å/@ñý$×RAÅ 77¶öòùŒ¶Ù½ÅÛk‡…Y,žGàIcè¦[Eˆý2r XTP¯N¶ÓËK †ýÓjPÉ ¢ ÀPˆND~vÎd«ßùwtш[+µèãÔ™éDNéÉ`þ¢W¿y޽КT/£_l!Um1ôð6ùUveÜeI{êßù©ŽázÝß“_k‡þ§¬§3ÉÍž¼sÕ&ƇµŸf7õûgì­$®×Õ¡Q€˜ò§ìþÏWÔ¬]½¢e7¦ë>oWÕfZÆðBËУîªéÆLÿvyÇžL{™]LÕF<Ïñ­¥%§7Þ^Ť vëÑ%ÕëÇLÙ³lµ²‡÷xlDŸ2Ê´16 AäÙ7°á×6¥x‘rl©ÈïxžÒÎx+,ÆÄVðZn[U4^ã¿Àí¾ ôñŸvjðÒ÷ä-0ú+Í@¾£õ€=IlÎ;”¨— °RHuû–ýÚ:û‡Ü Z®ó6qöšDæϨ>Á±MoVý0>æ3>£,—º+‹:½ý®4ýïÒ;? zùá¼ åôåõÒoE¾ üÿšØÞÆíÐ÷S³RM¯ oìþ¼ž1)mëöú:À¿üJ ŒÿGÐh÷4‘ݤ‡fM[HÞ¤.9s"¤(‹ªˆ¢A^N0rV»óÀ5b¸÷orN«Ï•ó7Pþlm© ±9fÏÇ)µIsyÔ:+"©Ìô½Ë©¢‘O~ o^7„ b½°7Æ^öœ›6Ñç¹PNaš(£ué”ÜKða Ê”›M\¡¦«Ì,#UQgí ¸¨²°8]ü¦3I-UŒ¢W ìre“›´)mPîCÑUîj ¤kÓNC%Óæ„ÙSï¶Ó­%YÎp–h›xè¨;´†vsÚ_Ú$ˆn2Ê·Ý÷¸9቟??ýú5yffä×ÏÕê+!èÙ‰ubqª8W@‰µˆ•6öÏ%I¨X´#1y;cÙ)qfoVyßÿÜóF”3w¤s‚ .UVU„öJuÓ)5jFÌ I"Ê\ ²Ô~÷ÁØ‚»kTE £Zñl~~^¬aÄÞIë‹÷ÂSð"A¿ueGíŒ4u+J¥þ”o.¡o>Ô^aN¶Fõzò¬E Â9‡…åéqc‘Ξ9´µy#l±¶Õ²x₯ç-ÐÖÍó–g»1…2>ÚNWÒ±Bpˆ—â/èl p6h¯«å çÀô:GJáH·Á¨µ“IªÌEô6õûò±¹¥^èòª‚0ÎmÜ D¥vSUlãŽTÊOSÈ¥Ô¶ø¡õhMjz„"Þ㨡 ¯ŠiÕ6$±K¨®ß¶ÓÂÌàóNþ45DWm:͇ŽètÍû*œ·BgH(ß1ÿû®0{#T+ÃüAKzX¿ÛÉ~\ÍÚd0Nå+ œNCïF¿u몛Óм‰k½GM1{š.K®pÆÆl±UõPÙE¾ Š2ÀÑÆ%‚L%|G¤Ùžþ]rMÎ"K½TRÃíx°È*À¡žo EåЪäVÞ ÚŒÂÎqæ=‚‚Ú“ounÁÈÒüë;‡±{'»ó²ë’:^·a:SA‰Ø¡›.ßJ¾jN9ÜÒÔ>¸u-”kŠ(2ו^Ù8ŒªÓ2 vY§Ž_I¿Ïм‡ ³©;0 ¦ 9\öºêV²,sNž¯\µ0èP‹²C„üBœsåãk!3wÒJç²±‰æŒäð¤\ ?«"‡Z:MõÄr6¦DH–Ò|Ÿï_%Ùz¤MNч=»Ð>1&mý¥‹oÀ´c‚N½kQ@çÏ¢ý=µ]°Z @'¢œß^ßrvËg/{W†¢S×fBë›ôi˜«&1À}šâø‰!ŠâæbÑZ±äÇqÿÖS‡»&…Ö…v‹îÙÁîK óÍuI wCòë"8¸==„¬ÏfGÃÄ[˜éØ]}#)’}0§j›h!ªÐ8ƒèéjÈnÒåöýØÛ’ÛÍ;‰ÐCÕïYÞnÓâéø+ùØø˜Ê@5¸¿j(ÆÝw&ÿïõ€äú[îø ëÌ~À´¤»üÇøKÓ}_u§Sn–XÜ; {h¸ k"pZï ¤~wq­OtézÅ6FçhËD$‡ëã÷}ß¿ Ú˜_ÈÕx—TáÈ®ŠR¥ü¡ãájͯu æ`èÏŸž@Mtd.Öî¬æ(ˆ1O37žÇ‡"j4q‚ÉÉ¤Ø š`9€*ã=Ç|ùL—n±£dX¼U\'šâjº®Øºå³(Í8¿R§îíï ý*nlvÍYåG’gè½íSu¥ ð¦í0kŸ²f-ÈhBšzøÜ¾žoŽÈŠ.¥™›°MÅ4îéÜ#ÈT`4T©™ŠÔ¬âݰTÇ,õˆ®à(€œéõS~}Í™3Ü.æþí»© Ë8‡â=àú~JÄ!óx8Üé¥f¿¥îŠšºã€1srUÎåŒå÷?QWr— úRH¡nOž1ÈÍóÙwÑCõPº‹jJLÆbÖ%¥r ­Ø—û,R3AñîšUï1¨¸>—T¹üù<,–kSxŸôú ¸I›¹öÕ-_£k&Oð í÷ìbg/îÖt±ð+0A^ÑÓþ§v·ÕÝ3À8À æ°$"Þ–lÁ#BWc•:ªM)§{zد"óe ±—ÇóAÜá®­…'}YÍúÓØBïcx€1ÑО®ŠAÖšÏñ^ëoÄZÓÖS[[0/§eR“~«ž£o£ ìžq­c¿c`r{Ñ¡/uÒ×lîâdá¯ÞÞ>½Ñ‹aE÷¤ßwpd#Ã=HŠRD äÕÎSÑ X-¢ âf¾˜'67–Ínº“ñã˜xoK =2½hXv”1˜|ýn0Zß”¹Ò÷ÊÀ*ßsÀ)Üg˜ bzÉù§WG€ œŸÆí©ÔDur§Àô@fa‘¨Zò¿‡îÈ3㣹¶€ÁÙµû šyS§ °¯îÑé—;Ó¦bäëýî~!*8DL‘°sù—–mîçÒAñvýÔÚ>áÂYÀ·Æ3¤_B÷ú\6>®;N·n®šïí¹¦+¹½R¿CtØFýz×IÝg1¸>o³j¹ÛðÚ¼éÏSk¬ ü•ùx^§Ýÿ;se?N|é·C,ž¹ë¬Ð?=}bÐÿàúgÒ$÷ÜXRLñÌÀ`nGø-p“cΓjP¤â“†&:ëÿ(½ËÚÁƒ¹u§LdËnüRlàªZ5í]/Ú¢I ÷äÏþª8Ô¤&äØiÏœ…3Äd íVs…;t-,B¯_åºñšŠ^ÚYSös&c÷×wЬk|ŽÞ$o°%ÀcÃRiOR Üd3Ö®aœ …)U_ ÁTËåérW¯å_€ÛÜžÔ jæ .à¨?ïÊÃÈ÷VÕd³"ì~÷&ÐFHŒ­‹¸õÔÞlúéùc/—Öhò,E”‰±¨³¥¬på }V&ijTjí™>^¯DH³®µWUvpU›Ä%Ššì~Èãûx‘²¢ÚCX,«rà]£rCs^b&Ÿ»\W˜úç©-£F¹ŠD­]Lœ3çלÊ\#=‚ºsS£®j‹÷ÝEª]Uñ ƒô ¢÷‡¢8‡ãz·úñ9zÐúϧ3Ó²àa‚º];âͳéþ ‰Ña…º ”,:k”ð”¿JlÛ€ªYiª”F¥d’Ý”®E¼¾å2ª®4v­níZ‰}ªþ«!c…5‘ìÿÚrÌ€˜¤¢5ˆˆY@ÈÄK SǺ^ÖQk 7RwIJ AÄÏ],ÓFv—ZLY,¶ÌÄEÑGÚ @Ð-„Æ.´“µßë‘ÊCQwsÂ`=6Î…•†§¬t•|ß—Òá?U("û¥ùt•Ó-g"á†1žíÖïÒ [€íT ¡&0èF6amñ˜—6¸fñàB\mìÅX© À¥c`‚AÖ¶.ÚÄr„>\–sÎ/9fbI‚wCÏPgnÁödÃHÆã›ª ìÇþõ¯_¿üíë¾Ëëk=!Ïw³º‰?ešì3]º²' Öj °Ãjº^Y)_ ]×ûTbîÝÒ/€¦Õ3;üCå-lÒoþ”sδy›f:Qº;­gÜM…š¸#öÚeÝ[=€¹ðâzÑÀh&PtÓõzuT€N[C¥©bÑÝÚu^ó;ÿŽû9“ι)Ë ³ºV›¥ÚFåù#Ъ§cb2›ÿª6k Â?tÇT &q*ÃO§f­V”öøT>?^ Ò¸y,ýA ö&nÁkÒSÃVT“¸µþjBì5ž›ô^A5ð™±¹~Å~<ýñEß÷Q…ÄÎÀ„ >àúN ¢ ièÆ¶Úk€”\(‘o¶a52Ý/s7ù¤¶ªvÿ/£4Óió Ö€©ßͭΖ[9 ‡H ·ØQš‘2ŽÏðã;È$(GÅõPUHë¾—x¶Þ6pž(Âì‹Ï*hwR¢± þâ;$XSÉÛF.×ç[amÕp½»OÛÏ7h‰w]>Qˆ¾9ÊXUh—-ygõ~hèC5÷SºÕQƒy~'V,G“1oÄÔ¦+Â=âÚ‡µÎYìäÄÕê„[^aêBýO¬–“˜3ÏÀïmŸ·Þî° $G¬„ 9tßw=D¼çüšß>½~þ—Ï_ÿöÄ´T´°ÁÂÜ ˜f ?K¸4óI¡"‡îßå›Rb7.ÈÀ—o_lǶ@ÉŽ}ßûò[~Éû7A‘·—72ß@ aÿ¨-ïÓºáÄ€ÈQ§n@c=˜­fݯ+‚ºuã\¸ Yŵ ?’¶áÙ.]D†6tµØjO@!f`?vÓDÇpû./߈‰u#BƒÚ ¹˜dà­åD”ÅŸµì;ª…€CàÄ9çüúJ)䨣ùÔøÀ2¢šM7Ñ+Ë)4±Ž¥i—ÖÅväþÊæe`žÉf cÅs}"Ñ ˆÝ¶E¬¤„XÜ*Ò{)nÍ]Èd±Ht{˜+6Y¸xR÷étû¥FÖ¯…yÍäº0=ç¹ÊÆÚ)loè[Ú xÄÉ'ýE¬—\¡”îý[3@Ú26µº™úŒ1æv¶£c*rC±Øõ¤1ý¢Â'8§†ÿ¬Òl)³ÚÁØì®C땘×4¶¾#]ý±P¬éô÷øçã*Ó Çýùøƒ~,ñx¶“¡£vó;…†Ÿü?¢Þ¶´.XE$yÉÝm*EzÑ¥±˜}fUÙ´p¾­róLž’D0Û´ç1H¨.•ý’=ñ@ý¯÷4”1ó%Œ±‰ÇXûð*ä4Ç. ˆÐ8ÎUä6æµ*½µZT^j€¸× æ³D4m{Š*ö{ßgî°ãH4S+¸7/a– ÐÔ—ßÙtyÕL$žíAEµ²×j!>(A Ê`¡³ù1 Óã’ÝÞ‚ vGq÷œuÌ®aTÿ…³S”W,Ϻƒ;ÑõôþŸ¼E7€÷ñÙOGR÷¼ù@MÑ5Ç[|:^%¢Ñóý9Ú1HHÏ{G‡?§Ë"”æÌÏëoA¸½¹Ònœ=„SíÑï¿©üÀ¿èÃt§´Af¼™âº;ñäæÉœ^Õ²(S·ºÐpv=½Ë…òàÀÏm¡@÷^ê[kî;ë—áGuˆÒ‚q¥lŒÄq;G7,?¯˜À±xâe÷S5Ë&ðMLAE WIŒqGM{~—؈º®± é*c‹pâ¼ÍP÷6oI¼¿’J–^G¿§\òL}ÜS"ÜÇoì%ÄÈ»{ Â*2®wx–0p¦©J3/ A`àsÙ)n“;³‹Ý:ØRNöÀQ`àC+{ƒxœÍz©÷–pqŠ~­›yibì1ð¬Ö‘ã$¸Ñ¨+äSð±¡ßx¾Ð¿¨f±ÏýHÀ\Ivæxà’ƒú쩞âÍÒ¯Jï}s‘Mà¥>þVk­\È+u:Ÿæ„–÷ÍáìkçšÑºˆ~ûóùë_ŸŸŸU„¢…t[_6ÐB\xa0-ÄV Œm¤Sûެd´5ôM‡¾Ý|¹²cze€üìu’v”´¿ŒãyÇ‘¸&~œœAä××u4¶Å¸P]¸2ñó^xݯÎ{,{ˆðNôí@a^ˆÀŦFhDE„¸Ú ÙüÌm„™ä^‚ÕÇÐ=Ù Âa›¸ÃÙgº¸Y;â; wõÝÁt¯¬$ÚftA·:ߟNzgÓ¢æè¿ åî'áÄ~‡Í<¿¢íîã`¬c¡)˜üSŒr·ïplÂ]Bü¯;lÎwR´Ô>r¿³ÍßéŒÅ %ø˜TG ©c`|Ö~ˆ.;09 N—Sº®tÍê]f¥lãùtþƒt¦ê/Ñå?™n$ߥFSÁ/ ð/ú‰äžcn~ñ#¶3E5dSÙd}ÕUD7 U§Àœ2óøÝ'»ŒÈÆ ðrƒncàvˆ±/ &(ð*PÍþŠž…XãAà%ÀòT q ª¬Ã¢2À'c.)g?Ø¥• è;IüÖ\›˜ë¿Hú³FlóÚ°ªq{Cã^wÁ£ox…ÐŽº ðN¦Ùõ#a]WU׌젻}ª°ÜŠ¢ð G¶aTfžJÃ<4Ne4”¡f¢ÃIÃÓîúqn¶Tvh‡§­ó°¹]ev2¼Ló{èa ¢ NJR•iº$§/™WtïÒÁÓµôëãè\Põ4qô¾«€©ˆ†Æ‡²QÚ­:~¦Ÿó¨d “eÿg¨•êãc­O.¦Û©|“k<ÄbÄ‘–3ŸsoDôåÏççÿy~~~®µr­keü‰—o/²I-•0˜ºn€®6À /†”³R!?Àß&•]DÄg‰ïr éˆl@$) 3ê‰+=p‡XD 396à!Ý3Çw|ˆ˜°"/P@6‘ìl¡Á´¥tò‚B3¡ôFJèÈkáôì£js­\ì;õÖ-Ð@…=«"E¦É®¿¦¸{»°­Ýx¹ b~àÅTDæ®ÌcS»&[V wü‘McBabb :ö&O®ão©€Æüöõýâ¤ËÆi‰{çÿIGõ­šgoÜÏ©«¸zcòÏ‹ëªÕÐ[ü­øŒ ÐÀK\\p}ðýœô/æ½§k9K Bõ-ÈÉéÔÜO¥‹Äà¿ð/z?½Ô¡w±‡¤ã ¼t0f>Š²Êª²Ê¦²i5%k¿2ÒS ":gì‘„¡”‡†»Ã¤1о«i×,™* Q}¨h”ìþT.#n®t·]vhšMÆhºn "ìÁÀ`®h"Kå¦n:n ¹;Å=s1Æ85.†ñ~Öë sî•ùOsê>ñ ³ ,â°F÷3ºÚÒõäú˜Ò]Ç/6£+REÀœÎ²¹ó9ŽÊ=Qj„€ˆ‚´+ø‹H³Œ£+¥LíÌ"k:êNÅÔêX©¥Ë(}þ˜b;$ŸlS:Íñ¡×Ÿ|oË:ß­èüâ.)i¦,¾z:uF'ý›Îwœ‰º~Í`^¢à?íp9.©j ‡Z«Ä„Â"+0×MùûJ~ꢇ&I< ûmCÖLÃ"«<{þúõëúýúϧ'­ÛZk}^ž¿ýóÚ„je@šŠ $žWá~ÔP^8€mùgK¦ Á‚œÓ›ÛÙf?ÊüÝ0jŸ‚wºUŸ¥`L"_­OÎ;ôm1×úPy¡´ÀMD…PðBp¿-Ï'í yݦ 覢ÂÊÚˆ|]ÑÁÛ®™:w6ÆÄ¢¶{Ä Ù ²JÚuGw¼î™bè7Vâðq{û©¯ôV5x}nç´^¬¨ƒj‚ûLé.² k-7 A7+Ž5lÉCeïùç;ÙÃOó¹ýrûXí²<œþä¶Mµû|ùCå¢÷ Æ ôÉ«øÃô¹à÷ƒ ©³7QNAà ÒŠ…ÓÕïÈ<ðû°gØ_G{Áå¶Îë_ž~àÿÏtóÑ[>óÕç‡ÍÃJÛª¯^Ò°˜xv²ÝŽ3Ið˜UÔ=*ùì5í$x(´‰9`sÒÊ̺­k62»€xÝV¿AÉ; ZEPÆ"hŒ‚ú@²0o"€¶³ÜÅo³«à ãª$U Ôâ÷N¼q:/c@¬C_?×T,µU´s;C&ÝÿEbwK+÷òк™ŸÝ7ŸÕ’Y¹à"žô500 ¹EUa† ``·îNý‡ÐyÆæ°Ÿù”~|߀„)ø| r)öho?†~§æÆ'\ÛµWS™™l©³õ"þNh’Mw÷N›î¡CßVœ',ûÎd§î›²ôÜÖy(G· óÂï îDvs9îçÍÎ~þ€¸{¥ÜGÿ|ð˜rxu|zGÞnß0ÿþ`O¦¹x ~¹wGÍwý€ÿnº;øÐi¬TL—;5èç·=ÇLµµ@KÝÖu±%…pàþX "*ëºþù ›‚  « ó,s¶dOÃ7Øb=l0ìŠW¡‚º©¤Y¬çœRËÔÊKÜïëj9QëÓˆðøû“lºŠÔZù± T*W "GUdxa …4åM¤qe0h}]‰˜®„•Àr¥˜‡¢Ë7|‹[‡¸ÏáÍë° bÕüµº-Ñ X¹—hn Z¹@ÚŠMáu5­Ì©q•ÍŒ ²Ú*쾂šzOaZw¡í¢×½”nÏ&e°g±§žÝwk¢¹†^)²R«ˆ‡†îc8ý÷…fÔA=»-P]_×\*^ت;2 SÝt«Š©x̾$ @XîŽ|Ô…4Ö5§÷–¦DŽu_7(8¹_4º#i:åënÓ W]¯}:ýŠy[§­”7Qxå ·»¬~ó}$¶1[ªu½F|/ÚHr$Ÿ …´Ñ‰n°¨ ÏOŠxïk¯gX}ôÓ6îј7Saà •Ž«ˆ•çßùñßÄBë&"+ xé1Ìp»‡³ÆñY¼H-í‘4ä{*™ïúB¼0¢%`vG°mWþ4÷D€¡|¡ÔŠ=_–õè—á[´wÿ{ãj=ÿ¤…›ÿw°Ë*L®qÃñ(ÜA]£u\c^^_ÓÌHsƒcºúöTÏ*~[ë8€¦½<_ÎÛ‰²£ÄDÍ,hAeªÌ¼0 ïê–ëáà‹¨¯·ñD§¢ÅnQ«¦ï0•œ¼Êú*ßþùòò}ýöíÛË˪*uA­µ>Df,^P¨>>=ýþôøû㺊ʪ°õFØ–àÚÇAu^žYn{Ý-eš£éè¸Ûm5n¹øÞŸêbFØÌQí"&±¥ꛋ¡h†ßS-9= Gn4íªê‚¬—šì¢Ëˆl,rá3÷°õ´›ÆÓW 1ÓÓBŽ~KôíF²™SÒ4Òi™‡«±¹(Ûòi“²:wèô±`«\Svu§¼nÈÇ Ã«oÖÉ ÁDì/ºkÊèÙ»zöFrý""ŠÚ©'»‹v6Üèþv“m6v´Ý‘ˆHd„ À°ªd[n{nïyŒgFm•$’Å"‰¯ÀŒº•Ú•RêúÌá07Ê|Ýý÷+´î¯ÎuƒÚá]¹?åÞ±­<7:‘aDx­Ýèïküâ]Ïñ®-ô–‡B¿¸œ~™n‹ÛvñG¿Ô“4ùay•­öû}y€¿èSH¼,«jÚfÇc h94kH–kn°¢+¶¹5°ÍV3¦«s}É»õ¬òw$yÏ$“Ví– Õ8“(RЧÓã‰9g½¶´Rf#7ç*–’– £v ( ÊM¨ùIlZöÛtÞf·vÇwžT`D{ÁÖ(`˜R¡ÚÀ™â4HÁÌ$‰ÎÀš²§"‚j™£ÔÍWÕ9…ìß`8êí©¾¦„yqŽ-ûn³mûDJ…vÌ&÷³¨ÍšM&¥×éJ¸¿­l‘uhªÌAr1o@3fʨç\ÛCÔ”÷©×lUÐŽ%¼ ‹Þ¶q~ ÷ï;¨b$Ÿ#`ÜÒ²JVMûxòuIº9ÜšÊ1tãU ·7-#Õ>ŠFËáÔÂׇ"¢Á Àµ¬Û+Gž÷ÈœÒéœN'zHËtšòcF7c/“ôÀfÜÄñl IDATk¡ƒ¹Ý]›­­ú6%UŠhÎR5_òÓ¿žrΧ„”3ió%‚"Ÿ¾©\O.?/ZLis;ç"€ª"[©¤nÈŸgEwƒ³îþE´ûnc×^© Xz\€x—ºû Ã%¬VAe)ÒÒ2UeE¦À¾@:oÒŽii u…]Á¯¬"*¤8 uÏ‘TÍU´ˆÖ]ó~¾­eÛ ®Öng—:v˜J¡—¬‚`øîn.Æ„çŽgtèþÝ€ÎÐ}¡là#;ð{èYgZø‘Ú–Ö,‚×0'»Ü—ï\Æþsm@Ñܸ¹}7ˆ Èh•ÕHÞ ,uZóçôî)L|ÓXº{=¸éõúL4;äíÛOboÞð·ì#]TØ@þ2xq?ì”{h ët‹wÐö»ItßÐë'òüÏ¢[#~“…ùãé`8¾¢Ä޾à/úkiÇ,¤ŠhŠ*±Á$¤B‹R¤—NG;F©‡Z£j+®;êýôü³‡d)|L<¦@la9R$'æ…‚¤\òOmeBbJË&±ôK#ô(Ú5 l“âµñOw纕çšÚÐÙ2 iBíEñCí·/¾D>s¬ÿò^#4he`ªà)‚ d5Ư¦ Õ;SqkÎÝõfç7^"c0&`µÔN´zÝ–Œ›Ü”è@¶ZFùß™ö `…TÂŽá5„¡Ýÿ„ÿõÖ¡‚hF‹ Þ™óÉ P'a~~/×Ò†$<,Øh‚Úåþ:З¹ýœÀT_j‡¡]ÏÛ˜9ÇHã/xœ6༠µÚHãûðŒV8=Ðéñ”¾%Ž@Ë>2VT™ªËÜëIòˆÊæoÛn¿ YÝ8³OAŠ ¨VÉ’­Àï锸[Jœˆ R T„Î?p¾f#­š«P?$È¥¦Š– °hÉÍmÿ«¤,ì™ûÈèòm5áwõÙVAú\‡'ت ˜éÖò8ÚE@d¦Ûð>s¹eW&¼¦›ÕΛ„jKÊe|‡ÑsôâZD¯*W•«jQD‡rô©wj«\MÑUKê¢fÑ UJ‘ù2´a×-Dç¥D‚ÀË1-ÑŸä¾JúöÚ/šÚONê°áâŸÈ29JâçÔ“¨ˆ F®¬ÑÓzåþç‰]õÒvà@ØS(úzv„nX¹F¿Ö¡l˜Fu¶Ãy›µ†CÏm½išp¼[ÿhI½o»}Û$x í³ßËôžcL>íì{y&–O»˜ŸÁßW§ÅÅñnôfÓèÎæàè-¦eZu 7õ¨¿©ýVh·d¹¸wU%º‘yÞ[â·F{ñ+äÅA®8‡ÃÙg`D0 ™8E ªª®ëæ÷Új¿]ÙØMš¡«­4ޱù,Y®†Ê~<¥o-m˜hGu6º"r"ùþŸß•'?!E´ g┤Èv/¢Íû$U¼†3Gøë“{м•÷À‚R^'ùn0¥¹»Åpº.¶XI¨t¯]uºV•VŽ+бYÉ?8×̦ðò0U!¨Š*ª° dˆÀ‘ØW†up\æÒ9,›Eç››‰ªÖeK½–˜Ò)Ïù*rdÕÑÛ™¯îvoö…úÎÊÒ"Vêܼ«»»O½uxí¶q*4‚°l¨¥)ußV4r(«Š"V@t±ÄµÌOꎛv%¦Ýp_8 Lûõ²{Wƒ·ä}#;¿ñíï1"-KW?Л™êF @^PS~}þ…(èN[ø×]ô~頻ªÇ˜ W³²•O×'ï¢éæ™ô!•=½©MâWuà/ø‹>Ÿæ65-WVEpEâ8’¼ŠÖRĦ¼²L ávöÎ’· Жɖ+ª-¿÷¸YhÉùªD@ TSJ)=°Õ"È9gÍ%ÙJRlš[Ï#C‘‘rËT÷ê©@¥-`Ve¸RÂçÆqS!PRX0ZÖ½¸5®:dz•÷Íù`"¯IÀÄÛÏáEY Â84dãBÄÓi àØä‰vîÖöǼñv×[InúÜ*Àm*¤a®ÜÜŽÛCøhRþ¹;ɉHI¢›¾G÷Îè‚iÝfYo VÚ2ü¥Í·ícé•&_SÛhÓu”>ð G>ü°Î?†/…[Sÿb`ºM¯H¨&ÿšêȨ"|;µ©ÀI(q̹°•ó9³.¹§>ûºÆ~ßk/¨¦Â©‹6d ŒèêÀWH•\TŠJª‰|]nGá¯îZwZ·«U,·Ezàóãùû÷Óóó˪–,}½A¹mÕ8“‰õ«OxØ?inž–BÒEÒjsÂÏ­à§÷RC27Ç®Žsx=ý1nÕfÒ‰–bš¸™¦-§Ce§$ó'®|`PôÜ7Èíé½ÕG°tk~ª©;š÷Êð§:Wì˯~À™ðoüjµœbŒós@›ÎÍŒåµøw+‘ý4Ùl¯öï·á^m~‡}÷cõ+ñÐPÿ 4j+ :RƒÝ.?øþ§ð2 ø†&ü¥ÑçÐá‚>pW2D„ÀÀÅì§Æ\·röQc €a ˆ|‘]ÚDÎPs÷µ aø“ÆÅZôùª9gŠÄBš’TM)OùÇŠ|yÊ¢¢`Ê”RŠ<‘É“#ƒ!~¯&ÌAúS½µ. ‡‰®\¤4FÈ&[eˆµÓÁïÇ»5÷ˆ ^­,¤Ø€èŽyô7»}óëõ^ÛGCùä¤É½I_×ÓÓŒ7óc·&ú/öڌӇ`˜ã=î+ UKRÎ*(þ ?40.gVȼMŸa}¥»¼-î6c¤‰%ÿ|HüÜl÷Õ5­z»vË NÙ€‡H˜åB+h(!{ d¿*6ï ¬ÈG‹*©Ì%f+Y±¶>Jœþ6¢£S ý¤#±¥ê<[‚eã#)‰ÅJ_(Gb0TªE@èæ(};SL™þƒžäŸOZòårIQ%Æ­ìqxƒiò—Hú+¯ÓpC‰ôáÝÒá(äÆÃ³Þl1]3á€!s…Ôž]¼õxôFÔ÷]´.FKò WŠ€Ó~%QQ¢rAb>x@Š6· ·ÒîÕ˜o(RbJ)Ï—Ëóó?á ÏÈ%g)9¥„À šaËÏ6óúµÜÎËÉxH[䵇(ôfLþvó,ö{ss‰ñÁ¸Úh– Û·gíIîKŸ33~51ïîì#mÔq °ŸYÂq½:oÏÛ^[gUû`Üî7Ìòæ•­¡Ç}Ðq·Lºq¶—SaÜE/–i>¢#ØB£·7õÙ¦{ɧü4ÚW<úXnq;¯Õ]t[þ·š_௱ôúÙÛÿ†óÞúÀ£™­ñµy{õA7™¶·ºŒn*A äŽ+`¨Z4‹ Næ“"¨VÛS¤"q:ÿ~¹dùg˜¨( D3 sÅnéD?9"%tçhSFjÿ¼ÿO‘P{* “ïµÊТÝZÚȱ¥²¨9’*ž/™Âåô˜SL§SúïüýùòýÏŸþóµ“4IqX»ÿ‡ÀDÔ0Ϭ.s™À®êWB€k¡+f›0Ý©ºôÇÚâŽz!€ˆ%!aCÔ831@€ø±¶dHˆ=^Š”BÂ4+@KÀ6:ˆ¹M†IÜrfNÇlƒ¦[Ðܺ8ks©§“õŽ øØUò“c²qýÉÑr ¶¬Ýp Ã>-Š*¢`b™Ý™Ö@Q*ÍÁÈÄD`NèìSЫÈôàOË»KÙl·[ Ål% H¬j€^0ÌÉÏá´ÞÀvrP0¸@çóÑkö¶µg«¾ òÐCjû,ìñaÍéºË×ŒßætêÊó±´Ö.¨NUYEᾜú½÷%´ò]•þÖjwus€”!2S;[0ÀöªZyã’²u¨E¥äçÏYšA„£BU¤¨V9?þí÷ÿúíû÷ïé7¿† c%¸Å²ëQ0ŸçÜZÐù8„¨¢^:óçsDѹj–,VÕYE‹æŸÕ×ÔÒÃû+rQ‹`m)z•|Ezd sàÀxÄß(òô$¿ÿ½åÇB¦BˆÐQ=Ÿ’h—ö©GEBéJ•Å1볉&cžgLã¨¹í¤·ü\ZJ')¢×œ‹Â’«QæÈ¢b‘†š³Aœð@ª*½ ª¢@ RÀRÄÖ<õš¨™ÉùªP+~Ë(’f¤ÓŒs$óUJ(ˆ(EÊ`UÑœóóÏgµôÚ+‚¥Esɦ£ÚäËî{!XÝ g ´0àôÀ)%âÔÕòÆÎ( _òåGf)Qd;„繇á‘ Þ ¢ƒ5Ù¡šRŠH„)šóåôˆ”ýÆçÇSþ-ç‹-zÚ²”¥”Nÿq:?žSJù’ÿxzÊOÏ*™8¥”8&[l/iMã5;àTøÿ—½+×®$DZù,ðY)O*³­ns¼™ß¯¡¼+SVe[",-Œ€KD¼'åVÝÓG8'SR,Ü‚ – `!æ™1P¨Ï™M`V“LHŠØÑe¶^ü÷¤ß8ðè`~ÖsÌŽ—h¤Ä²©¨4Æ œå¢_ñÞs˜@>IGLpÓâ7 z§tvU¾ð¸)ê>,m‰ŠÝóÁë9’ý66C0TêÎÅ[:å²R(µ¾ˆÈn.â É=U˜"Ï´©;é yy?m¿“,sÒš‰s?uÀÄǾUèçÀG¬ú“éǼÛE £¥ÙÔu¨«ÔÅסê=‹ßd›pm ,P†¹àîÖ–o¼wYÉ ê Uäåµ\*3•O`®RëöHU´©là ;w»Pm£Áp‡étð4h²ƒF'óÑtîB÷1€l|5'[jXoU¤ƒ µ1æo9¿Ð›-»Óx´&ô÷û]ç\¦Ô°ÊãU™ÝkßÞBïÒ™àžmR–óò¤•Ë´ÑhŒŠyޱz’ÌÎ^˜?ù>ÒÉ··ý›€ÒÅúʉ)èH»‚f¡!ýbº{§^Èç×OÊLp°~Ïëø>Þ±Þœwô²Ë½°áRÌ K· †í`/S&b&fÎĉץÈø©a<ý,ԜϕC§wHᛪ«®h_¬—Õz lZ5¤,fVÕ§öT>•Ïÿó¹n"›hSâR@å"©Õ¶(Û¯km®­”Kßz·> FC³³D0Ñý±A¹†ˆÂä‚MMŒã†Ç‰QlV¬©;›ÔWÕ&²yÃÊÃ5ê2Ô.!1©¨(šs¥š¹·ŠÀ ó‚îãÈD¢d‘Z®*@„Pþa'Fën?7]E”éþàúÈP)vxÓá›èg´­¢Ø´IõÚJÐ׊fI†|x©C‘‹±þª@JzýÎçv0ÿÍP¿›s'VóAÇ.- ¾7|ä\Ó"B/CÖ™‡þÕ2q` Â ˆ'Ü׳‚/̹tq l¨=ö•†ž7€4±‰G*\lrJŸ–ÎÀ˜;cÇœÒ7œºÂÌÃuKúÛï÷xÆîj¹7.oK¿Àý´7¿”Þ®U Ôÿš(Åxç¨ÿ\ƒj§ÓSéçrÿJô!Ð:]‹ïáná! ž£Sê!ï$¸%p½¸ HtSOã™A–FfƒAIYAÔŶ%±í(jÒÀIu£•5?¶ÜìfC­J™TƒÏ~Õç?ž òS(—òé±¼TÕZõµÖWlÝ¢ özbeíz‡÷aòËRï‘‚ߘºŒKˆð0‹öÎdîÖLÃà9ª"X2 ½ DS—pv{7X§)o¤ë’Óáú®ôùõ4—.;IBÚà"Ð7íŠ<¡[H7³T(µ]/×?\ ÝÉù&KÒC‚‚¬LD¹l9€pS›˜ßüŸÈ¬»ÞǘN~¾,ö7ï‹v 4ˆŠéÊÌâÞIÞžæÅ UQ_#~;ÑõZ83qálëEüt  ±%;´Z€Í¢Ì…¯|-dàÛm<‰àI㬿·eàŽþ\ÉÝP÷Zø<œ¹£ûrér+v¢·‡“=+ªÿ%hÍé÷Ý }t¼õçHË+ç©1oo) 5-œä÷•ð]¦ˆ1ú€?è—ÑzNŸÜma7HdV4Ed3 "2œnj!OÄÔÑ­C»È–9­º´½á3úDïMQk}þZËEkªt¡RÊãõQª¨È‹nR˜%£ÀÓWz‰3ÞïþvÑÑ>y\1ì´#ÉæÍÿ̱Ûcg '3ËäÚ‘V@Ðæažbƒ»£þ“³ßÇó] ³Þï“aìJ€v¤…]ðòßT6Säê¸CÝggOl¶‹ËÐìÜ’˜€bŸŒ&øS‹QV›´ßOÜbÍÔ/.bçxiîŠûÁþÌÓj¯Añ*”ùÊ"ýŽñ 1ÿ/#OÔÉbÓ’€F=_È2-;«·+Z~ìké×ðá–EŒÒ4o×AS…(´)DLÙ ÀÄ™(C7c­ET?«¾£.* ÛæÂNÖ\_¥›œ SvùðÀ&öÅž€æn®ý–`0‹|a*¥p!\À…¾|þüüŠ uÓLJ+6• ² O!|Mr`¢n^–¨r¶zÚ—0“ Å=âçÎÐeâÚÃt›d’¿Éüê ÏÊ›hˆX¶Õ¨H#“@ê ^®ª…ÂKÓ;!då €%[¨e@Á™„”Á² %Õæ>#¥J,M¯Û~E-âï ã@‡YéI×›ËÀØÔÒ s„ZÜ(1ÚV#ÑøúëvÖÕpjÈÞeäA”˜3„€WÀÓ)]))¤$dˆRÉ@f·*ÄU¡REE•›K_ÞBqŠXY{¦ylœ">–ÍþÿÚäÍH!Ÿè(ºø9°×(¦i¬i´ÌÓÝûó²©6eæ6'–®Ìm‘‰Ê<˜,"FšåkHuùB…¹”R !3^}¢2îCË»NDZìóÈÈI´€nö#ñgÉu3íw­Ÿxæ|ƒôû¯On—Þéý#ÞaNú?ðÏ÷X©{tÊDí>£ž]üw¡øƒ~ q ˜œ‘ig¸¡’àë) ‘ÅÞ€š%¹-Å2ë(¡iˆ²îá†4ø§u‰²×†ù±Û níÊ+òÖL™XEtS­j‰‘ÊåZJyzzB.²ý.µºÄ¢Vo…®å ¸àP¨¥Æ:h5±´uôNÖw޹C¢§Q‹O?{»AŒºú|¨L¥­HR·‡5©ë×UúÕå™ÐÁÈx«?h⨠ÌO[‡x©·÷tN ƒ1'Oˆây3²%Ò¦ó(_l—Ř3Ê…é”ٸ[$`ãð²£Q‘jˆÓ4¹…د–JÇLX¶+¶X¤ót·êiʉ‹Ëh¯ŠSÅÇîöPÃ1,Ó©—)>Î ”A~z(¿ýí¯ú_òüÇË—ÿýòòÇ—ZëßÿûïØÜ£ž— Qf$r(òp|×’ã['A#íg€ÒnrT ä¹çrª^z_28%Vßë_”-%žkNÃÒµ©¶gCJ?>\Aˆ€}„Që‹n& )¨Ø^'j}µ¦BTÊõ²›¬M‹Œ§Ç§RŠaže`PÎXÉï²®ˆªnuð6C‚D”ÃhžÕM5Òò!B²—BírJºÏ9t»fM,[U hf"ª›ƒÍ*Èf‘΄D” ]ˆ,:UyÝêâ®9~34YÁ( ðÓ:"Zzì÷;ÔuÓdØ ÿ1ˆ.»âaÛlÐ ºI8ô]Ø&ê[íš †Š9~&1=>x0¹ÂD— •D›‰(3ˆüPŒÿ¦#wòž q=4‡ç‚ í{Ð/ãÀܥ=Fç¼×ó‰ó#fÆ;ôÓŠ]Ðx¿Œöª'ia®¾ ï=úü~Sð|ªþ Ú¥FûSèCþ _F‰1Bqô–œš¹ÞÐJs‚(ÓÔ&521¨2A²¯õpÞ3Æ‘{‹ S¤½™B+Ÿû÷Œ¯k;µs6î°‘"R.¤¥‹u=mOúªœŸåµZƒE…›i#h×ÜYÀ"‹Ê‰Ù¶«Ïõ„¯ÒƒñÇk Ùq>ú¶º1¶¾©—3£‚;±^çjÒ¨|isdxÒ{èÍ£•`üÄ»vpÓžè\ÿÉ[Ԏ͸#ã®á¯0õ÷ø¥±É™o?ŸFc$UU`qz€NGïÖFëÛ§Ô|Ú- Ë»h–ê7§+mú%Ý~ï,o­…‰1çØæ'·:˜lûð*ûGG±}ó1ÉdpÍfqû,àY)\<ºÂIÒ†t` §çÕ3}½ná8†ëœ:æ%꼬Nß`ê >jY0¡fê-"PB­Ïºip!¨ëûd“òZd÷xTUÄÌt5éuíÞÍѰ7;éá i#ÍL¹º AA?†d0'¢ÌæP'­`“¢úåù %æK-\èœ —¤"ƒ´ì²t<–"â:…"Õ¬ÓU¥Öj 2s¦Â\.…˜ž~{²PwýeŽ“âÛ˜òüÕPüõB†/°n®O›ŠmÝDz2°0ƒwx¼3{±€Ê.)ݤ¸á̦}6ÛøʀǫP€P qfÎàDÏ™¨–Zk=¥|V–M=’ÿë É+b(8:rºÅ™¹ËÀ¶Ó1iM©”ÿ.®* IDATt›:=ïÂÏÅþÙjݪ)•Øu.0ø– œIÜá\‘`@h*åñS¹>]ŸùR(GòáÍãjEÁ-¼·t„Iº Æ4£=£~™ðùsiÙ+Þ'þ¿è€SÕËÛÀÛô3бÊn©§çü¿‘)øCþ _EgRÓ¤R$Ð+1_`lZ·êJ„TJó½+ˆKÍ,ÙÅà8˜ ,þ‰ô{‡_q]—êF$š˜žM„†’ùñÓ£ÖZ/ôüå  PASA<‘`°22dPä|WÃq“\i¾«ýÇùF”æ® ™…û8ÐpS<}o5Åù†I„ÐõÖwQ(:Bªâ7­,*ï”9eqÂÜß‘-£åçìÒLCñ0IyÍ-3š]ÈÄØô°èäà: ¹ß\éwÐŽ¼õu¤›ÍÌ€[¶ßï UD¦† Åw¶Í3y_×xnz#ÒÓò,ý¾1‹ºëì<š»¾4W脯é›ýéü‰ñ¾‡&$0P£œîžW®×ëµXÜ]ª¢P$eà\­Í:õØ·Àšáê]SÂqt}¶n¥ŠWµ.0ígÈlÎZ„ LÊ%¨¡BÍXj¶XN¸~züíé‰ÿö—ß´êó×ç—¯/õ¥>}®µª¨¼Ö:—ŽÒÛFØY §@\ñ$xz(B׫ÂC+‡T_rQ ÔìiZ¡*h¨///d’áP½p1±l•S}éìâñÛ ka ¦ªb`¥º)%D Où+ebfd*¹Ð…K)%S‰0Ú@äÒÚ¤GúFKÚŠ†£èÊ>¢Än Ÿ­ú3°èU{ /3T/óç°*ÅöÕþ°õRÕKÞ%P&&ú»¶’÷µ“å,‹ø?OÿÝúèß8 ðý,:q«ƒÁ½œ¾¿XÒ U€¢Lu#TKAÂÊB̘bÈêÆF¡²5™~ûI³àgÖ²ó’©ÕÖ¿!•Ùi  /„. bsòäL¸<=ÕZ¥¾è&òŠÈ² ¨&œî\ˆ"Dìs3Ü.Fàq9úÛéïtò¨Y´R)Vú~*‡áh»_(­ÂÕÛg­,ÜÌ]â. u2g*wE‹3¦yžŒ!‡Ë‘ïIdî¶¾C»ãÇ@Ízo½°h|@î<¦ªMÇõýMë¨ö t;\Ùui!r÷ÅN{Þë®ò€ægžâ,êmøÀ;øŸwK¿;j>`-k‚Ðé ÀIØ´üâ¾µ>ž·ÂË1P}¦uGJµ”ò‰ùBœÏÐ&Kh î¬r—xÃ,9°‡H3™È­C5¦E„®¥èäX\Æà˪YÛï~=ØžI×ãÍÞ&“* Ý´nòøð$E©P)ååë 2ñ×—š+¾.Â;%îil0ÇȾò‹€’ ŠRˆˆ¨dÕpj¨}J‰þ½k×r$DZ) ”UÕ–²¿`Çoÿßšõf¬Î´ºËa‰´°’ eVÖ£·Îž„Q)d0øÀ.Î…2gΗË|*BØ/Ø2?—&ž5 qñ‡0 ‹ßNžv¾Jõù}NŒLŲL[9¥LœÌã dð)ò¨ª.>Óu윫ãÅ$¡ñ[ ƒ„ÎdØŽ Lu‰»Ò–A8‚€æ ØYµYÑWº¾ZrZ&T7’'¸œÚE€ŽÔHÚ”dp”¨ôJ(d9¨S×6ÉêBĶ.È=jÖŽÝ2-E¶‘i‘(±¯ñD46íD HWšÑ"Ð0ê=/ÁP¢b} ?6(ƒ¥ÕàÞ3<ž„ìöwN(Ì—O… •ÂåDlÌ”¦žÅS¼´’%½Ó6‘*°Ô‡÷¬Ÿ/»ÿö½}xpA4GÁ¡ø›ä‡Ûàí“á…÷ûeÛô`ßÄ?½@·aN W v¦ùŸ$ë»{eÔÿ9?ð¯!ßÀ“ü±ym¾UÐ[@y)"×=U-JöcÎQ—{ü÷L¨ä Ö´I 7ªÈ¬·Š‘Á¤ µ<ƪθkn0ùfÜ)‘xwí]N°¦cK’83d¨ËUª6”LèÄO¿=qò4¡ÜZ‘P f¹]Ÿ_ž¡ ˆ´Š>,;T9ÃB¹ ‹$o—;!:3WOVöxÁmæmæñõ ýòd3¼lLÒ±3IÿPÔnÕ¡É2W“@ýtG»úÞKŒ0cØÞÜc¦ëÝcTw[µ•ÛÝ;¯vÁ'ènh‚}½’¥©C’Qâ˵= €€vtØÄsa8HGæ˜ÊÁ³îdðã'“y´¨¶®>rD£Qbm¢Í1†ªçÔ4”7Ú´PbÈav1fuÇ JXëCŽòcM·‰ûvtt¸oÕëx_M›G3Lµù(ða̰ù*IÓîÇÿó.¯„ÿõ‚eβžËpl¹g¶âéÍRDŸê„‘Ëñ<ýNvwð <¶¿Œe± âõ-â×,…‚3*Ê'â‚Ëoçò©HÒEÓI„2òâ3^cûW³ õÔwÞ¹DÒTU@\Ø©XbẌÁ5«µ«y^-0g’i.¬^m,Äk}lI±<å´MKê»þÏ¿ÿʼnéD—§Ëåééúé^BVj½^kýëúRkýRk­µ úÕ†sñ€aq˱½Pe¥x¦¨¢ h*«±ŒÍ=ÈÚµ¶*xå&|bʤ‰­öŒC‹\¸€ÒÓS¶ØKwhx}šsñJÂ*+þÇ(Òž¬œ)ûIÔ¡­ÊMK™)ÁúGÉ’$ûÑÇñçsÛKà©2ä6JØt›œ €„Ìn†°Ä €'ÁD€ú¥r«õ?\2Õh”3Õ¦”Éì€Õ¿] )™ãô„P”Lh*M‘Àæm ›è­šeЦ²ºsž@60,`Z¨…/*RoЬÔP Õ®Ð"Ý &Õ&ڀĔ… ”YhUl¬‚eÛ u<¶/ ·Õe}誱ÓITlA;*“ ÜY´ ºÔjk«š-çBÚ,·A&JaÃR!uæËï…˧RJá•OÅÞ£Ü*ç kÕ———úWÕ/"W[STªåô6x¸¦qͱN!1mü‚Wìgãô´»¦XÎX5?¢Íª¿Üh¥í$è²Ç®Á1sT1_ÿK³KKŸ°Sd±kŒkv,è-ŠÞgÀÚ˜t¬?ý.]ÜéÔ»—èþ7εYÓ¦Œa)„¼jÈxÍ^ê2oõºƒöèÜÿ[$ô¨8”ÝTËÛ‡ó£@u¤yµÁæÚ¥ÿßãêŸô½¡f3>ð‡ü|ÙÑwiYÄ.^Òƒ»( *He[š «ŠÌÊ®¦Î:‹Èöô-w…dÇSÿN÷Ð"Aƒå(µ©4è*Ý£n(™Êù\IJ­¸©™ü¶L©ZÑ"ÝÃnùBKŽŸm½Åå_¾Öåjo‚,z'3ºlyl¸C97Y>èÞ¼ÏáÇ¡ÅÜuc=#—Wpgü¦8uÞ6Ï~Ó)¸ ßDûí7â䞯C»ˆ¥Ú° ä¶KÜçÁ0d%¬~»D"›e¸9õïÐïáíÜ…Gou£}{Ãòý.‰ù3)‡u§ß4@?lwá R1Ýó¾BduS[ۜĄí‘êìÝ1ÕÀγÇC!ˆZ65º‹ÑMŸwzd,gYuJû3ô6Λ•,¡_üwXž.O–úËòŽ”ìõÏg)¥|ªõ·ËÓ­Ö*Rkmz}y‘›V#‡€K!*ÚD¢öǰ8øœ€.zƒt=/û5-;UGcÔ¢çrbâbZÊ@Gmz)ç°c2e0eï-1•RØ"{QΉ/‹eÀÉ.2pRʺÖ[©µV tŸµ‘hæØ~­ 䥹Õ_kü©‘Ĉ@Q³}) 7±üjã–s~År¾)š UîBÖgb"‰nÄ=ç¢#ʰGæŠB*²0{URiã씟Jݪ @ÔY ƒÔ‰³ qÉ"åĪ"Rón’€ÛÐGÁ`¬…—»Ã»i›ÜŽä®G»V?Ž~¡¦O›)È+¯nöXï},iµH)ŸÏÔTo"ÍLÒª–8­ 2#“Åÿ_Î¥”BL\ ºJš ha8SÌ}È÷ùiÆs*Ê(›ïtá£NªÇB0„¿~òêƒBuÃw‹.fÇ~÷)ñDïkâÝ?ø>ù޶<¬˜u+ØU‰_äÑ+¸“wóïO´þž3yžß}õ Éj¹Ÿ|àù™3óÕ5G€r"QTQ3¦Ž¤¬”Ùôk¯¦Ã]¡4Ìç<Ð[¤QrsÆâÊ®K+!-|¡mö&Ò$µ•Zk)ç2 f$Q9•Ëç‹zºWÒV¥)FÅËnŽ_ÝX ×ý%¼±g1C€¥ô‘†F›Œä#øÚÈ4ãþ‚QÐw›kîÝŽö­Ÿ¬›ƒ°d ƒs„©˜*ó üðý8¦ †š¹ã®œ+Ú³Ç }j‡´¥4^Góvî£Wew"î­»£k°ìvMßöO;ÞÞg¿õQµXÍÕ|þÎþ­±ç¡oGiÚìýé#ßÞ¬ÃE ”¹/ÿk¤™d~'äÕ•Þèù:Á6} ⛬†”:Fç1 i\Ñ‹ÏÑÿQávôÔB1¹Ð‘MãXt õåf×^‡‹ƒ¹$æ"èç¨a‹òÏÿ®µ>ÿùòüŸçë_×k­×ká'!$Õ(⪀Uaó¸þþûˆØQK†œ eð©”ÌÄSèM¤Õë—:´<;;Ê©Àðs­«´9h»:²uÊõË—ji¨cpÂ#á=ŸÛ·dm§]ü34†Gu9”î„(˜l Ì™¸JmR›ŠÆ>’x5K‰O’uÛylRŸ‹9mÿ{xÍ/*¯€õ7äÈ>9ÕPµ”0¼@gAÛ×–Ö²‰Wçc‹€bØX|PD›•·¹Òl˜ÝuÈb-1z’»3·Ö»t [Œ¨ëâÚ,³EÑH­iœ.Ê@)åÜÎè@ƒJ!èª ps –Txõt0¬2‚ÓFtþ%aœÒ‹ƒN `Рv>¥7Eö ËÝk·_(«‘n¢_ó´Ë–ó¼þ*~Ô fÛ'D–L9r)¥ ±6T4AcOg%솑×mš:ì+ÊÒˆ³,™ ´J5â´?ã ¢ªâ}¬7 UJŠ”õ<5sLÕhÏ@;õD¿qñ$и_œMÀ–.Ž ‹w€Š6¢rá,h'@iz)£>>_>E‚qX - ‰‘jÅË_×ú%’„YÚsË.Ñg—7 ß÷|-oB$îŬÉÓ£77–ÕÈ÷÷Nk°ï>ZúDۮ÷ᖿK¾·oÏOäqðk²˜~؋ݡß)«ÉX|õ‹Jhe_Ç—þÀò}²!‹nÈ´“Ì™îr uånOËc1 aÚToUš” =³²S@œ™©û^˜Ttg}ßï|¸YɆ'¯ì~aoàÔµt•¢E—SF›Ö[ebάE¥I•¨ÀHƒq{çn˜fòž½Ú4Ašcàåà?ºlùÿfoñ‡S>Ü 6Ìì·³jO·m[½‹™9‡:à$ŽîfÉå-¿tÿwðÇC tA>:KúîãïˆÃTuP=DÇ•ûaáíiÀ£jÔ6šÅ ™é„¡:/sˆ69@}óô4Hø¯ž7‚AyôÛ7_.¼åÏ¡á]§üþD|øãõÅ܃Ïé{ÜS&—oÎm1ê)»cÛæ*ùMÈP -PsµN¯ð$a3€óp¸ÿ„Ï01δ¾J"Z€îö™C}wçX™1iÄ]¾ƒ½¼¾¬ähQ¶”21qµÂ­Í—%^;òëÈÄ?öñ¶3xC­‚®!ÌQƒÇƒl)<±‘ÿëß0aTEšÒ@™¨Ðïÿõ»•P²ZP“c…dº²ê˜ÏÌ9Jïš«P#¼Ó“ áÚp…±µ7Í–ÏçBˆìÐ35©ÂÚÄ"®-°…ò\£JÂæˆÎQ,7ê//‘A^¦f5h*MyózÍNA1?h›íK X»i$#Xšhááàæ «£ …ØàUF÷m“¤ÔysÇÁ?²‘?q9Q9yn6™v)+¹£òT|Š(ÐDlKΑ/Å=]. âüd]ªâîzCm*µzí¢a9¨ù7džÕÐ83XTT=8=L‰MOÀ°2Od°2å(ë@¶ €›–\fÐ'¢— Nôôt!rF½tÕör©€NV(EÂõJ™(³Zõ\ë´*BËÔåaß~øPRDNŠ×6ø¿Ã–ÓP;9A¿ÞÏypùÏ~g×¾¦1ké‡Ük£ªý˜[nõ[Å–°•¾ß‡Ð÷ùaÿ:4]¿}—¥À óÛ;¼•uõÈw‰n؉[é¢XÃÛŽÅ-´‰Y«v0D«4©Rqb4-I@`6'  褢26Þ]ïÚ~ÉêȦ › z¹«c4Òí ˆp]ÌóQÕ^©‘ZÙ ¦r+…¹6UWUfÏž¦F3Ó§}(ìêÝ<ÔúÉPJdóËá@…teãiÃËØGµíd ßͧv\×xö¢Z»mH$ÓD2ï¯Ú £z„«†„¤j8¼¬_93f&uÌð±ÕŒÙ¡åéî6{û@w84§hË5Þ¶}ȵº7îë”ÔÁûýY,áCX óît¬wëHºþèíï³yc7«·E}wv"`13p@°llÓÏMËܳžá&:Ö]»›SSÝ×fùpºàDœ£äLF©áÃmð°P‡‚À6ޱ^=šck² P ¸ÅÄ”‰¤I½ gæÄ ëÒ‚ê;–[vaƒ¸#ÐX °9Œ¨d†V ¥Œ:Æ+i)ÅððYÙë[1OÆŒ§Ï[è>ÐdQ›Å!Œ¡xY£’E›ÅPí ¸gØ^‚4&.™`Ž_OŒiÆPÈÿ²wõ\nì8ö""Šü²v8yþÁþÿl_¶ÙÍL$"Ý ²XR©[m?Ï›=kŸ¶ZÍ*~“ø¸\_P+`ª%4¤#Mî§zh$@R‡XÒµÛ“­YibëJŠÇµ˜+qšlÊÓ{|›ƒÛý46oŠbÂ- ®uZwÀï‘Mè’}Þm"qþ XSˆÄSõ,‚¢¥|z)EŒ€TE¶÷[ëF†Ú¦ÝßÀ` U±¥o¼ü«J3]‹D% ŠkŒ½ÖfCspþí<{´]îNL;쟱P&ørÕ$"мˆ³žØ,2P꡵´×‹iV@42}K9ÉjÝ4ÁºjLµ7åúkX³Ë?ëëë¥Öж¢µãA˜Ím€ 2m¿÷EÓ[ËõbÝÛ‡·Ú|Ô+åmZQÐ ã·P‚´ûÕ.Së÷\5ßjáO¡ÃëñyÖG<ìò}  ñH[ôX*žt|aÝýú¨ÿáôDΑ_ð/zƒÖUÏ£/Ÿ~Ñ{©À²)r%¯&IØÉ+y­L`*‘,¤ÄšiR.Æ?0ç7ÿIZÅ 1Îø~÷'Õ8P–&¨=I9$µfvug±ãÇrÉŠ5f{½¢^«sÆJ•î&È);Ã\´ó†} Z›`4‹Ü…ß –S(NC×0§¬Åîgh•™ÖDI] šé8jåvÇj¿ñ’Ý¿p~ìw_odÙ0¨ƒ±xGüºñ·I{øÍ§l—SD¶ê»ÄÁA¡RQÀªleý%a1s±yEC-†ÍE[NÀ!>jì›jÎËd—Ÿ®£¼JGt+ý>ãâø&sp½Êd—V¯ݹ+Œ±#O /ÖhX7£À-e ~· 2 Œ(}1úRôóG wÇ\èJB¢[:¼o>G Ã7 ŸÇyÄ6ÿås½k­V§9H..›—MZÌRDʘ‰¯‰ÈX§2ì·qƒyd,zòˆ"A²¯X3Ö2“'+þëo_<`¸fÝ^’ðrþ ÂÁl´VÙÌf SR*º† Ÿ¥þãR›±I6ÓƒYW]z·4O¶ï`²â¾£A06ƒŽ|o‹C?ÓÓóùî<¸¥öp¦}T7üÄÛ;J;ÀçÞüC¯¦Ô÷Þ€=oø}øç÷>8JGÅå æðù×/Êð=¥á²Ð/øýAt¸£–ü8Î*Híj «§¸­›4ñzR•©zÚ¸e %l"*×S¾/Õs»•gS5xßQfϼºŽÖÉ )%KÑ¢ª°±úåï / zE)H‚™ªÑŒª.;@ÚRÏë?)NÎØ[‡Ùþõ!‰nîOŠeæqjè!{TLà¶ÄöNä3—”tï 2þ°çµŠÍUFí£öÉJÎoÈnÓ^¾Aï {}x?Öš¯¯Ñd}3¸mèe°ü\×Þ[Ò Ÿ’'ß%.ža>ú³×î2ï6l§³8*1‡tå“bPõo§ôd\¨“á0¿·@AïÛ´:nÄYaè6bïš­i¿¤7zƒû\ò$MÛãNÿµ¶ŠáU‘ é,#m´3ÎHªŽ]nw{üÌx©êµ½º,$Ýè.ÁÍjÃïÿïÑ0Ѭ.&iV©3î¾'‡ë{*£œJù­”Sx[« Α6ls¼\*„hâ⊑hvé k­ž§fjv_EDl‚fµ‘AmNQÞÒX“Ø@1\Ã|ê<2Ó¶ ’^^_‘TD4‡ Ýu""Y Š&ªÔ¹w}dr§k³¶á}”2Óÿ!•»õÏýÇU~Pª#ä1W K\Šaå>:j6ÏŠ@W˜&0©µ @“g·.¡§È.ýªn  ÷ÕibIá¬H*’íЭÒ JC)'èš)*'”+k`Ö–srÖÃaŸïDÝÒyŠl®P L“ºDm­F\ÑÐPP…Hæ±Á=±–ª–¢åTÔ•2 *®\0HBQ¥ÈjÍ6Øêk­—Z­EEs N.>ìâ f÷u~oaðïÝÇW‰ÜÉ$ö@ƒògÐ;×ßc:>WÿÏÐN»:é{zôä ü½þH/óG‘Øxˆô!sõŸ(ÿ‘è‹ÿGÄùã9úÞƒcEU)0ÒÏ›À²Ä\“¨G] P“^¤:Ó¹ÙîÌ­”ÅÙ2‚Fccõx¡B"€ø’–ý¢’ømoÈ" § €Ô­#ÍHa/Ó¶d„H3dª¢E›*ÿæb°Z5ÍÀ§³'Û08[Ð!I™aÍ$RtDùt.¥ˆ¾ºNÚZ­µÊâð¦Y°@á€7þ™ÜEòn'j—#~L&nì¹Ûä)ÃÁx!Tˆ(?e³…â@\ÄÜ%Š<g{føO«È IDATúÃT=Nƒ&osÓ<]ÄHìx~™r ç7ö.h÷€±Â_Jp¨*·HÌ‘!äÀØvb Yzß6ÀÑUxØëäÇPÓ?™æ÷è&¯öú¯‹¡=±*-ò¨Èh}¼è–‹Öԛͻ®˜yÌ\«ª+–>)|x»ûœ<§§±:Ëlo^»;À‡EqiͶ׸p«;i$ß uL®¹Ã¡3à 4»“ÝÒ)Yõ>Ëø`[í¼² „Õ1ɪâñiê•èa¸‹’޹HkS]U¡šGÌ!÷oo†+ ›¹U¦§…fŠ9) EËËoŸ†‡ÿiÖ{x[8‡’nÛÎØ ð”4Àn#Âg¤)F¸læR%dÖÊ ™æ‡ô’µ›³ Ãæg‘ÑÔwV¼Û/ýŒ5d x¤ýŽ/ùâ²Ñ?ÔK½à‚„æÐC4×UUA^D$ô֋L¸U‹œö‡_ —Mj€Ð`V+ÙÌ®5&¨œ5«dÙ"T 4+’ˆ dÏÎ’u |WÍíu›ÐÚdCŠÎ¸+>µ|zqÓŸ3HŸë8TUT¨‚‚wÐìŽ,Sð¨ìaŒK7Rë¹^&$7)3V£§ÜÍž]\Nj®Áüýëׯÿó-ôD"õjz*fÔ,áì“g¢áÙÙ¡+(=‰'qþöõÛßþú¥¶:j§f‰d¶i¨öA=,ÌÂtñØóÀ©ˆ;Ÿ³£$ÔIpz½¼ÖK-%dNÉZ²Bq9\ãÕª…ÑÕ;BÏ<´WàrRœ|`K,0?7_"¦šhVƒU’Í$ëËoåœKµúíë·¯¿ÿàóËùË_?~y ^*€Ê 'W.¨Ÿi®“,%„:PJý½«_¿ù…^D´“IíÈ_,nºý=é‘Àû‘-ÍÄÙbrk3ŸpÀ"`2ôÁH8ž"íah_Ù~„Ý:‰©oš8b5ÍQ ná¿€0³ûý¤iUüpSqâ¶ ûs 3ʽŸÓÆ Þ=uü6î¿ä],úëí6ñ2&²¦ g ý£¤ðä}«'{ƒißÏÇ>ŒÿhæÆ .8Š=øPˆ¼iûe[£Ànf{ ¾g?»ù푈;ä‰q¿Ïï·ðŸ»®ÿ²ÿ¢¤'< &Ö]Á›À¤Àê6s´Æ; ¦Yew@L<‘´Ÿ¥~Wð¡Ö°Á ”-i|@Ÿ»…f\ÙwV¾ˆÙ(Oâ®=9V/Í.çb̓uÖ@vµÝ)u;T;káv€¯}8ÂsîhÝå¶?O)ÊèNÇý6‘ -òÝuº¼g•¬kÝ%‹½½ê¶Õ;MðÞ-7¬ÐÇ~D]´FÌK÷¤†ø‘z/.Owp³áï…՛ǓáŠMÎÙÓþIBU÷šÌCÝæ˜Ü‰9¿oTÐwißG£›Ú9 ÜWùàDx¨™­´±Åëus/Î.Lù\€u!p¶“ûG°uü íÓžÞ?Ëúíªré1ô2µ’Àî1¯\úõ‡mþ)˜x.í«TX76Ò ’fO¤›ŽÏUr⾆"¬»;ñm/c­§@¾Äµ¢‹!2J—"âáŽ; zhi î1¢4€f”¬6£É]ˆµ^j¥•^ÜeÀZKÁ»‡;I¨ð°F×ÙÀ ?Í^rÄŽ–`C’nE#fÆ8Oö|0ˆÝÉ t1Ẫ4oÊN40Óš{A6±DM"y¸y¯«Ëu+—í^Ñ•(?EbÿÏ4ÌÆØàÛJ¹ ÝÐ0ä[ ÷Т Úi¨È¨lvë¿Ô—’ë0ÊÎÆ5#œi˹E#‹ñ’ÒbRV—tw96¸Û‰@aÕ+Mf—š ¿•,QT!yÈ’¥dÕ“HBA)ô^Š šÑª5"K¤ËOuý@·Õ¦—Üz^ISŇÀíÎ},†<g„_ÄþVÝ!¤î®+KPwb_H;mA°ï€u»Æ÷9ÿŸu¶gòÁYýøù·/£Û‹æ£+ûO¥CàÒB ý£½Š?ÿÙ4;ñS'ò;†ê—ü‹~"m–£Aw{q‘4&äUÇUw†McRqXܵ&,Í̦Ã_ΠèÌ3^ž†ºt«o7d˜¿âD&'Í0È îb@Dznš$ŒŸ •$*TüçZqùÆ&{š<ÖýÈÌžÜ"ŒÆøyVC¬Ï‘ ¥w¿Nx3» Üd•v‡%·†nÔ7‰Âv!fj¨ñä87NµèM…ë4a±.îš!Š4¦[Ís‡L‘(VŽi¶íFÚ>@G—a‚²¤ Y(Ü0ÖÃÊ´r¿²©Ø÷´fçJá ´Ér7¼ÅÛÄ} ê¶ç®ȪãxÇxÔz3ýn8‚=î‡â– уÄL×ÄaiЩ;ßzíŒì:Dk¯G›ù;,ìÔ¶YÙœW¾i®à္ êÎÛ2GÏv# !É-?ælœANXp­C¶ñò誷Ùû’´t€3Í%+êIà:¬Ù E;ú/¡‘¥bØé†ÖA¡~‘B$;°–h6 -Š$Ûjvß×\J',þ°/MŸvGÜtEs^”,È8>{ ¢À4²U#J–Ð[vX#»)Ä ¥aû•-Bx ä¶í;*\IÉ9n1ÚÓ‚ ÿ ÷U€ˆXâ¢JT«¯×WtÖ«…e&)2>§Ïå$µ(RqD®ï —ÞØD)~ºÌ¶À8ÎR`«‘Të.všNhqѼ¬±6³Nthvx-öÔ½΀T®@øEƒÀïZ’J…Â=·/s«Ù! Sd` Œñþ°Ï(061Ù<c* kPWÁÁüã±,ðpƒD ýc9«²ïí¥nÀ/n¨Y=*› ŠŠçµvx¶%(€‰({½ÔK½¼ÖúªẔ*4tU?<"«!¶£;ndØÌвÑs?޲C¥%)¼ß·sÏ!åSEåã³ëìFÓ-cœÓ²Á§u´c¹¨ëŸn…ƒGwÅcúM¹%ãciöÎ÷m0i6x_éól«þú¬u:å¾ûmOÇZú‡ºûwèžõß#ÿI÷%ý!ú%ÿ¢ìéc3™fѬ—\5]%Ò&ª_ÃÒÝÔè9*.“Ž3KaµL9/¦H {Ûß[Ê&ƒ2GnLÛTï%Pm®×Õl U;,™ßèaÓp¾Fñò©°½X¦ƒÍœÑ4Ö0çâÞU¿-rïÒÅ)~;ä€OQnŽÄ\0‘bQdXK6uÅ{'#]$ç^ÒÚi P­³fŒªm÷½Ð =…MXø®ƒ^TÔ†_ܬÂðÄu×÷20û:ÖÎÿ¼+á“«=€X§þI¸oM8.µ¯kPTv~{lŠZ¤M3”°[uÇs«nJÕ•íàÀ½¿=¤‡Òﺈ¦’‡GPbüI «|³¦ÑQh·ž`2»h˜&ˆ‰óð$Z[•,ú¿ì]»’与=ˆØ2-°­½kÍõöÿÿhÛ›±Š°R´°””UÕ3]s÷ÑˆŽ®|(%’¢H<Ì­dá‡Ú¿­«1Òs–r| m&%¦"¬e =›g|A8E›ÇD¬Œhš—ÎX¥±KÕÆ`°‘c®fõrÄ^ëh„ Ú@€çZ¡:tÛ¯¢º }v“'û–>;Ïï°Sß:j'ò²®ˆ èÖÔÑñô0r3¼¶FÄ–%KÅíGo­á±Ÿ¢ž×8(’l1NRíà˜.ôýîøCÊ…<¦i@¨tÇZ%þ€ ´»­A’">‡î4XÖbŸö4|M3'ù»0…¼fž­­Ä‰·k1P@Õ·Q“!‚PmäÌ2Üá1üf¾¡=‚#âuɯª×5`óWbB«^|x™E«—g"Å›Bž"]{‡BµwiÓ%Ôný$ðùU%ˆv¨b]&<\kO<ö8©̢͹Gù*[(/n$Mq_DêÕ®K³!{ÉÂu¡“§÷%ÿÀõm–ݽ¯ö²\'á¯øK€Óÿ‘av¢S¬û û¿×\ðIù„~ös®òCò ÿ’¯‘)a)ý”ˆ™„ ‡PíTa•-¸l¶–›ùÙ´ö„Z¨²Bx@êJ¥`"›×ÀÜstª3¬×.ÉT‰§fŸEæ`Ë-Ü\@z´Ö´?©wÏ,}eÜäéB1¦Ê[{êüpD¨¶¾ˆ>º•‘&”­¶©~…ûÎFs^q E²ô{×ÿR£º/a2l‡æ±Z¸…i±ºR(Ø6Q~°ë$œÊ.ë­4]¬¼“Ü÷¨}Fjte„ó1Ò©5Ðï&#ÁTR”Z¾Üóõ†{¶ØÚýÍ„†7wßÜ#ôò.ŸçÀ Û÷ÙäZï_bàP:•Êþ0kºVêœ~û}èûf,ËW&.pÇ&"Š’«l|éòF6 ÓwãlV–f€‹7ÃtŽˆ€Ý£—÷;sé= b§# pT(ˆåöÉ]­ÇŸ,)Öw ÜC¥´h«9ÜÑ£;ÓlàÆ\bèv‚¢x¹pˆ=†æHgªh{2s#òu¸†ËX´>©¦N2Ä ‚(J€'öÞYUh%¥ûñ`Ñ7âN…ünÏ$ö6yDÑä?0"(笶(›jþ;´ÑlùÍÊê ¸çÑcmgÓ0ª-GÐCEz †þó?ÿÙ¾µßþñ*·gÿþÔ¨$‹œïÓƒºnJ“ŽÕuŠÀœŠQ牊@™[±0*A!Cåèý©bŽzÐÍÞ·ÞÎó:…^Ûdð ˆQ:DEEŽožé «oìh–{#±ž&‡¡Y¾: [º5ιzø¦7}ÿ6Æäí÷¾=«¦t "1™Ù¾zöÚÎN Ï5Põk)àU»ˆ”Ð( Ô"O ˜'Ãѵ Jê{®Û²,úÁPÏ£íCA«ŒÔlÃK—é\,ôú£xÚó¯®_,¾ܾ#¦Î2ãï°x7¶³êúóªH…[Á°Èç]Êͽ^_-Çõß Ý>„ü×䓾Wö¯@ľÝ0•Þ ûiòg¼ë?ˆäØ_ø—|‰x=“5ñµØöSíVÖ²u€q}l ê¥¹RÖ" Öš˜ƒ1,¬v „I]\ n/6̈Oj°›ÕÖª#xh\X¹·Þ:«ÑŸ.ú†+ÎÙû˜V£¼óÄ¡ ýbWy³|°tÐäæ¡B+]­0«`ÝTÀ<ðš+Œ)ÏÌB½LWOkëM“8ÁŠÑö]´0FÒ¢œ°GPÙ™ K°‚åóŽé’ýœÌ¨]Ý>ĈŸnÖ¶¥¥ÉéV]=ÝDBçºÁ'ÉîQwÔ‡®awÜ…+N³FRpÏgFÔç Ù}Aøœ8eè]Sâ“èÝ<"]õf àBDá ,HXLhs¤M7NŠyFð¸¨Ã:•#žJ@%ãË`‘‚ÿá™iX |š#ÝÙ}°nŸÆÃÅ5ÜLêöZ¦7LRù"~8(¦§%Æ9ßõ) ÊL‘¯"C@Õøæ©陚Qq¶2à®X%÷C²Ÿ™› ÚYʯiÂæ8]c¢ÞÓ}kÃpö©VÝ5'‡ÙÈÌh¥hè×`ºÊ8| -`èªÒ4úň¬K U¼’Ú’%“Î:gë^mæ‹ãií àûïo\»}‹Ì…øA©1ƒH”¸ÀP(Qa (a’TÛÌÙÛŸl@ù)Šøã›0¿®Í%çŽ~´¨l p@»ô?z?C‘¨ýüùQ‹»£Ù »Š­íT¬À•¥`¨¨àP…x‚Çä¯ÅŒ,’墭;5`a‰ŒƒLÅ7ÓCÔLš¶J΂f”{fÐS©µ¤X9n°Õ_(pêiõ2`a$Šr!Ô¨KoôÑ z0`(¢bf11Ø0pÏEëI´ÏvÖq ò†•>RŠÇ;ÖU›sJ:€"”BšÎ’„ó'SnU©Ý  DÇáþg\3Vο¿_iEœȧ…¶?ZþN\üE¢f@ X^ÖN£ÊÕv3~þYù ìAtO…ý/•_ø—|™ÄN/*íÚÔPÁzP¯´66?"l“Å·­ µ”"2+açÍÞ²Ýa,FYVœ†ãjvCŠAv7Ñ€Fm?v%fÞ¿­ë5¿P‰Ue ‹40d¤ß³Iÿõ‡z¡J­6®LÕ';û´ªœLj4 ÙšÓðíFM4+Fž0vì°yèÙþT ý{óµF}õûíÑP ÏNó!­²Fkt:Djs´3ò’·[0#÷~Ÿí³R½<¦Ñk¼âüzHöÞ¿[5Ú†R+˃w/;÷dIUsN³H;%,ç}b”ÄPñ§e-GÜzƯr°»­Ÿ@ÕgTõBͲQÆ Àñl¯þ À¡ð¢P« B«kÃJÆ2@ ÜÀjs ê¼êx©v!•8ç³qð¦eØ^2ôÍWbå{{a.£ý×ñ:™÷²9ù‚®{mójHÖÁ¯x"³ÚpÙ›÷@’A(!¹èâþ”\–äË»ÿ}òâ~ ¤­RŽœoþ$Ô|Ö?+ŸôRÿˆ\ÙËÇ_éÜWM‚_ø—ülÙUóyWÒ‹.Ÿ ¾{Ù6&Æ}Lø:Â[bíìqRp%M¹X™ùfé†ËóÛz:•Ä<Σœq'•zÕß[11½ˆ@ePGeª QŒî]¬÷˜Ç±ø,Ÿ«÷1¤±ß½°Û]G7_&ÚlJÌ©¶)è…jÕtâ*Û°oWWß)¥-Ó§›lþ·KïŽ>½+ewí±l,SBÜêÍñ¾·Øòœ2TbÀçM1½VÃÿLç-â2ÜY?¡\JÑo£kY§îóµX€ò¢x é^õUßÀÆ3y9ðc3ïÔwa`«f±ò îq»yýBjš·a‚UÚD6â\jùz:ÃzM”òZ³‹ûŒáM“û}þUÆAj¼=—bÞÍ‘ò„ ðTTBñ,7 p¨ˆXí;*à[à%nƒN‰*s1oÄ›Å7:CI ÊCºûsæ2ªäÁˆµñ:±í<û°˜jEÊÄ‚îyÂÕk~À”¶¨ê1r *¬j†d@F·ð5iÌ3£O¹õCÑJ×g¢!Èž®@t°;^h$Y-P쎪ԣˆ:g[û_,Ó=@•yv[²¡êu0fW-b¹gì!yâªR%ç­¸¤ŠC¹o8Ù™Àiðס†R ôg×7КUq„—>ö8:4sm•;¡ï<Óá©à ÌÃÊ6'×1v§âMÄ{…K2¥s% ÑôE„ïwkÐÔ¹÷pzwY@Í´~á…4ü>©GÒœòñGÌy;¾£0 3DL§œäFì‰×îN˜A‚±ëîX>–lÇ.aÀ–¤H¤É•d€k#6j_г™Ÿg÷NjȆ˜Nƒgî /™;ÖHÄHA-¬Ã,YËI+:Ö(] ¦22Q u‹M=AË,z@¬ÜαeÄÒŠŽÿ}FRÃÙ˜, EÉPÒŸ^£UUg5c9ÀP[š<4þAT‰v¾ØF‰6röyi=IrŠ/y… …µT±Žç¥ Æ@í¿¨0?À¢¨2¢„gï]ûø…¹ú´V¨•Aörß•`yÅ ‡é+€«_ˆwÕ|×O•ã¢406]Ž fÀ‚¢‹û¥Q™!kq;´)13WâJòlû©#s$›ßÃæÊœfHvb¢^cü 9”-P¢ úÛwè½£BÌ]lS¢6y&JE½Y58Àbµñ1h¦ªÌ„C¹ÚjFÜ ù¯TTÌÕë6;¯˜bº— nû0"Öƒø@ï½?{ÿ£Ã2ÿ¸ÐrÑìí½µ¢9¶göV’ÉÆ1òÎY ,vþúÛoÿáfqµ¹Q`Ñn¡F4@ûŽŽƒ;HŽnÏ2„•A·àÚèáln­2·oúó p6¯a¿Q€¼6˜™6xV)„Œ9V°'p,ÿóv®­ê@Çz<#±Ýo–{b`Ÿ™–Ý€HPðFXUÖF`aêŸÒŽi¥ô˜ðqXkãÈŸF+Ópmßø œÅ”–ôƅi³?‰ùâ„ Íp Á)àâ¤^îMOG2rNŠ€ sÍûþ§JQÙibR½H7Ë»§W¬OÎ 2?(¶êêBœÓ¨ÉŸ;ÉH/á‡'¹9`LÒ'«¦Ä/ð/ù™2íHW¼–»™ˆØ¬õáC#ók\ÌSìʮنG,*1‰·Çû*¯yÙ ™ä®Y3£Î˜_Ý’ÝÈ‘§¨_"ƒH Ó )ŒC™µµÖû7:¬Ü% 8eìÑ©=Ƶß-[ú±QS°)`•U3°î[õÜæ¥À¹Û›6£õ\@cm=·onÛÕ\Üâg'SÑ0@#BƒF$ªµ^а2Õ8—£ß8ÉL«;]i!ÏUL8ØÖ—;qЈÄN=T=eW^m¥é†+@îU‹ƒù|h4< F(½Š=xa€—·W³í_`Ïí–äíuT¹ˆ‹ã*÷®`ÀëK›ÂZØÙÈ#õWïPh–¡½½½¿Kk*!½¢ËB²zý† Æè§oÍíc° D••L“ž@‹²ØuKp8Í‹NÍÆ´Cú¡úì"¢‡F]¤PSd´l8D´íþßÈÒµ;õY%êµ"˜Æq¦L¶?³!ŒšTÈi«½ÇnØLk‘àŽ=Z›ƒãkfÞ‡‡í)µ$lCþíÅ¿a×›¼cÑ™Sj­r{+Ñz ­P¸54†“VL£åpã6xÉ(»@¦p["Aë;gÈ®¶…Õ¾R9[Іùœ³øJLÞ¼¥¡rJLPTÕöÛlLè×kÒ´ìg5wNh¯]³nú® C…ê ŽÕCP­¸ƒØéˆL0 W(N 1€0nkó2v°@±(ÅsªríznèTœ'“‡^x鲚b+DáßUPeçâ@DÅjF¨(¸Bl ÝŠ­HÁAÛÿ“ãS‘¶Ô”mè÷¿Ù»vöHn\{NDvvä½ÑLvïÿÿ'n´£È»‘ Q#Ü૪ZÒØ3cÂg˲ºªšd³‰×ÁŸGm¹ˆéÓ¹øtÖqR{ÓQ5!õtÍ,Ç£ûZw޼ò~¿Of«ã/’+Tc“Km뀲ä÷ÎúoÞõgåOfwÿ¬|ØûųmócdzvlâúéÊO’ïä89@ÎäääNP·—trÔ »n&€)}vüÌÉ`‡\©A€ôÔ!sIÃf‚rI‚•( (½¥zFUÃG3 ŠþvÿòPìÛöFÞ€Þá0²6^:H]TÆŠ¾;d䤭“Œ¦¨Ò²ÑLHÁÃúXŸ£ÿžÐŠ(ë2„.Mï.Ï<œ‚uÕîcaø)á f +aê²I@m9¥ÆG]£©B®ªaŽù†9[ÃkŽ£ x¾¸š–}b¾±?Èçy¾@`ÊO Ƙç×Ï+Åÿ¼nþ%¹}±\g¿ªÒë—Xî $®v¬8²) ï·™ìËž4$_Ãjhñ IDATö1Qoèz¥Û§¿T÷¦]3ç,޲Ôr'—dFݲ…ŽDK(mm£6¶óöä0O{ôÁÔÌ졪º=6THZ§àÒRú–lþhÔP ¨E)"^=aI‡æ£¡u4Ö– ¬)‰ç…~ƒd™­­Œš’4ƒîvÓª€H‚@Êÿ–6‘á붃¢§) p°Æ£q¦>º¿qoëÒ¹ÁüÀ!'˜=—ç  ½T5(+´š™ªz«XC…•†: °4Õúúö-‡“ÈÚV<šxÄãñBCLÓSG¡×«ZßÓWد7ÆÜn§Ÿ†–¬m¾4§@ÓÃcçyµ$’Ö]©²Pë‹;V6ÀDf[j#¥ÆV÷ó½/á áÒÃÞÜ(·$p‹¢30(nnK/]ˆÞ’Iœ’ÃÕIZq8 üS»ú¤4¼ß¶$¼[3­6Ÿ?øÁ‰e³Á#þ¼2HÆj§i)&uɹéQÿ Ìœþê¨Sèéß·ýÍg¡ÀÃ5X/£9õcÈ!p¡Ë v~éOÈ[®ðx'˜Ú‡³ªoÉ[Þïw‰MM ~°ü…®/[Êšþ–XãOøS~¤Ínk_ìÞ<ã=‰£iRÿNÕˆTõ&t÷N¼ cVMì›ß(„Ú’Ê»`Z€¥g홫6(!¶ÄAÜ2‰IH™ggÞÐ@ôþ¥²·ÔGµ"f0ñ ¾`7UóöR§ðy€Ö)œÿî:%9øÀ]bS†sHx³ª&Ré¥È„b¡<9,“•Ï9e±Êýï—Úó»ôM*ŠKÊTàiÖð0§üªH0¯úOËäÁ^¤ W‘´úÀС.ÞXÿS‚ÇÅû‘èn3ÙòHM/ǓҊ¡‡õÿ¸8r<ïÒbn^«Ìã¼ÍKÚ 84+í @>¯ÖÜy™ž>ödnÏ\ƒãuÿ&@ûô–`rØç‡í Z¹äÇÒyc·ïõJ ΜA•g»2Í=ºÌºÛ¼cnÿ(er x‘á§Y^—$ Õ%ô.¦€éÞÙŒW©¦#=SdÍ_r;€ã³ÏÚ?';\æÓô‰)ŠÒ˜è,úØLc̶›îjÌ H@²½ƒó ÚÒ¾f‘ÈmëØâŸäTƒjÌ…Ígç¤Õñ¶‰Og{x§Ò÷ÖጡoÂÞ¼ªãB+lßìÍÌŸV¤ôDëRGÙõØð„Ã;nÚ˜U‹R°9Ì©½ÒƒkµU1¤öcÎÑ·75Hã›o±9Z;]ÕLwëL„ÀíHã‘bT60¡Ï…oEk€8'\ï¼ÕZj‹AÁReÛ·åTÖ ÕŒ¦(9ª »§ÔÃ©Š§ÿJD׫h”¥“¢Â‚Rbö9 ¹G9јF;.6£z j7Ë o"” Ó5U<.þçB*‘Æ&‡Y³¥nSÓ¶ë•âèV®ûÛÎhÛ6ÅOOžÒ¢³Ö×µ¬'®ñêíÉÏätj¿#ö®‚”1µï}ø›26Ò÷úusÛE—ó‡Žñ/—“-øVrû#a—<|:ÀŸò³¤. Wùs`´­ï* vŽ>ŽJ% ¤ ÖAt½ÓÓ{iàµ"ŠLoDF퓚Dr‘á “æð´ÏÏŒIÄÔíàðÓ0‚,’EåQ¤”m#Ðݘ(-ñ8ÊH*Ñ£à³Lª}Z0ìeùüQCwr2ZÕLv{† !ÃxšÂîù†€g<ˆ6Öî°¥¤æ¤ Þƒ³öÿÊA?ÕpmH‘isj7H,åÆ"£>¹¯5̵iñ®9)¨îIë|ã '§05} Ö“jE|8sÒìCþr¹®”k7Οå&­º~ Y­µ™]Æ ˜¬îîÖž¿‹Hò4¼‹Sï–À[›^aS£&ÐÖ´Á˜¯-{6Ûwvü¥Íå¿ð~ãC€þœæs¤8òœZi ™¹ÅfVÀ1ë}LS ìôSNL†C–‹Ü¯j3‹3JÐÀŽtÞu{l'†³ô-K=bUhIõEÙ5n9­Øá˜-Øw''PrËÜÖõµ 5D¤¦»¾¾¾nÿÝZß`2‰d`§B% v€›‚HTù©M4Çîf o—|(»·Ö}3wõwliãÞØk8iÉ¡4Fçžn¬»ÛÓŽ÷’Y²”RJ)ŒÍP3Ó­¥ô§Os,æp0dÞ‡ç-8û~'‰$­Á¼ ½?ÓøW&­›öB|)ØöãÊi i5Û[»Ý„èX” k7fãÜõ“Ùioç¯RMŒ|ìÞ¼Òí)©Dqûy8Cé½xÑAFSôíâ u´cÝÀÛ븪j1ZßRY@":Õ™¯är£8Å·“]±…JU“´Õ lÉÔT¬D_¥fiHd€AC©‡EÆA‹äØÜ,M{ÃGu F/À«ã˜Ò¿Ë‰9…dó!0Øþžûg÷éPa|5txÆwÊS—QŽ¿0¢¯xw*‘gÖ·ýá–Ñø1gdžÉßÜMæõïK¹ÄA,”èÏöOòéÊO”¦ÌKš£rùžR'i ì·YU I¢»Ûšq|Ðã¾eW´¨íò®©á»æ¬i´T¤êÈ¥„"¤99Ü¥ÜÕ‚¡Xv˜™W2K6‡I.EÊ&Å›îŠ,Îߨ§hSׄiË;F÷²Ò…þ7¶á,'‹×}Ñt‡d-UœÀlJ/L7&w éƒëƒ!X1{G«ìß²P“`>ÓŽbµq9AÝѬ&ˆSƒB)¥ÜïE„¤8}.ö ~U@ÒúF–ÀИ<æÔÌü~½îÊq«åÐÃäëìêÐVi x`Ó[E˱‡ô)|Tþ8vh1ûÓ.Þ{˜>Ç^.{O5½éäV ì¶¥UÍñöOÝ®¦soAD9ÄÄQ„ŠŸ6^¹!jj\ñÏh ÆÖÆó½uúê‘^ûê·[b’R L7lÛ¦›Ÿ{½uH5ñjo4%‰Z… Ö #+ Ð)È(ýÇŽ§°‰ Ѹ,ˆ¯ó^Ò¹NÛäe{y}ݾ½|{ùýÕT‹Èý~ÿòEJ)QÛέ´>®DBÉÅé ´Ú‚öŒ5:¤šfõ´0ç˜éõ'¬žoT¶\eOB¶pÁd×ôZÊRX²ÐRUmCõñ[ ÏüülϨ꟠V›‚›þÆñÞžöo‹i»€‰í†Ý¼Úbî`Í.žV‹§#eiƒ$ "Sœ— Œ3möê›×z|¬™’"¶‘¥o&(Hõ>φ€¡öòŠrä?ÙÝÅ)$$þÇÙøæ@ÊÒ©Bƒ©7_x¸­Ä·ßu\¾-ݱ¹˜ˆ]œ*Áæíú£nÏÓuûµ¸ßQð&È1MªvœLá–’y3ð÷—§ õz^œ~ù5>p|q?àOùi⩼¢ó¯~üpRn.TÕfʈÁhN*‹,’ »zD³öVõ¡–k‹´uUÝìü8Ö;$’B´Y» Ì›”,¤Dýïòà¿­W¹Ée_ƒ>T N Yn,Y6ˆí›í ^ ¨Œ—kÃS!«ñŒ}ª«êšXLþ­yVMÔ UQ‹Þú[Ê LÄàä }¥ YÒ óÁ5õº”síëtå2á:^‹ü꾓sáÚn¥ÂRJùǽˆØæþÞÞfL¶Qq–à÷OÕF–VyYÝóÌmÕªŽÏ{RQ ‰£bÍåY+ìwTDØþô—õrŠž €M>è“ËÒª‹‡gE  ¯Êx‘ÇÒ¯u „³Ä%áôoU0×Nï#‹%׉ Ñ®³ž¸ë£¹Ô "Nu½“¯<ÿEhò£§¯žd†]ÐË󨂂I`¨£¶9¢Ô‚Kr¦Aö'á3=ŽFìbÜ^wÓ‡nºI‘"Ì”$ÜÕØr˜¥d5ošŠzŒÓ¯¯[z¶ÁÛœo¥­zR=ð–U#\8=Ö^Êí±½lÛ·}û÷¿ÿùòò àËowÞÊ×Rîÿ¸ØÔâGÕÃÌÄ ¬RÜqªq¨ŒbûÃñxÿòõÞÂd1V¯MÐm¹nРżæÔG¤åhõ0Xµbæm‘üÐ8Á"äÖÂ7-1–ÀªHÐ]зQÂVœGh[¼Ì€$›mºëæ}¡çVU(ú’B;[]«$’0K)âeÛ$¢86M,Íž#o¸zm”¤ÛŽÒ‰æda* ‰ak ÈÉPPL–z£ Éd’3Nð,ì4ú>%A›UDQ€Ïk7Ÿ—˜% 3ƒ³ƒ™ö°—ÿnÛÃtW$ƒ·"Y‰\dßP¡®Í ä^\;‘•$L¡Òˆ„ Yè6@„V»Íq¢q0“¿’Æ&8Î’ÚqÞ÷K?Ç»´ðë ³:h™«ƒ^{Bû™\(m v|p—Éö;ݵç´ÌyØÂ/vƒåÙGèrý¢'lþ€Ë÷|µ¿^.X]ÒÇå—ùÀÀ§ü)?KÞÙÃGƒzØÍkŠÕ 2ï)\M>°GÖi’ôN ¨Þô.е¸ñ`ÏÆ™ìmW8G)‰­‰¡…HÀ¨Sì0¯Ð£g D©–ˆŠ0=ÃÖ/+R3šJ=WÙ†iV1üw"MªbFÑ,)e¿öpD2 ƒ]'YüÓ²BïÒÄ‹ƒ¹:u[Íͯ5Z?¯&LJÎàå÷P…â0ßÀƒ;9U+åøçRJÛÕvnq“7%j&¥ÍÇ)' ô1sAã8=ŽÒqæÏTx¿? #ïú,èÃj”ÌîñðtwzÊ/ý¶ll÷ÓØÆòt3eÙrváÇõÃûí¼CÓ㧬Z"Îd€gC°y­T!|Ú>˜S˜@f3çrv ÚJÆx›nz× íÈ{ ?Ê¿&63Ð1ÉY‚ºÕ“À𔕿´)(¶“6æ6-pCÚ¤e›wjÉ`f"Q*I¢ðÆo¢P©²QA»Ž¼»µ”f. èIÒæAIdÛuûÏË·ß¿}û×·o¿Äv½ýŠ*0X¯c¿yø+L…_4©õáåëZIËÑì´}ó Bd·vµÝ¶‡¾S*XaPúÙèñ¿ ­±VÑF«fÌQ2 SÝýôöbæH_·Zh6Ý0¶¥TX2zˆ-B"“‡¼¬ úWËE— p5Ø\¹?”éÌÆÇÕAn±›ÑE6:‚¹”[ïE·ÇKFÂ2Ñ Þ gG‡€ùÔäVèÇÔt=o}æ© ÙF‚8x8s W´OXh üˆM5 ï†©q<("ÎM%R2qófZ"/öSÓ4OR$ø/ØØ–¨{¯-Ä3¯£ô°Z HaÚ˜``f•^ÝHø¬{û6MáÍoŸŽ=EòÆN¾ô´q&¦ÏkÝ;ÏB%‡Húéö·\à3´õzc‡\«£Ü6vžãÏu†ßñ~?å ¹Eÿ4x:•]~ü÷Fü|™Œ¤g&×Úas}§4Öõã½÷¾NwÑp¡Óß±Æw®?€dA…V ýl5Sæ"¨ÆÌb¼yÆt+RÝøcdqm×ÍÉYR´šˆ#ÝLÔ€½©‰Ü8OAF`Zá>…¦Î›YŠè®ÛfÛ¶Ù¾ÁÀÌ/÷/å·òõÿ¾Þÿç.¥”"÷R^ÿóòí÷×mw¨[KÝ4Xò³±dÙÿ³wõL’ä¸õÁb–¶5³VÏZrõÿ…äÉ»iK3VV“d ÁÌêÞÞ½Ñ)bÕˆ‹½žª¬L’Éàá ‰A8é^5*?ëBÐËô=»…u(z$="§@{àBfí 3«o­4ô‹¾p±ÑȲ 'Ù>øÀîA¦*= R2†>Hì¥XˆfÙ‹^¬@Á78Ô LvJăœnP¸ÖÊÛn`=Õ¹$ÉÉêf82£¸Í»øŽþ²lŒÕfóRy>W^O®Žl$æ_©µÄÂPï?Öx‹Z6` nË]æl§Û9jÏÀ ¤X=PS`T|°Xá–Î|X…^™ïKÙœ_ÇTÃÚkûþò½ýlÏ_žk­ €]Õ9ü|…ʈ¢¯ 2:Æ0›d žË8®$F¨Ä­µÙs}¦ƒZ»×k:¨ÿñ³ýã¿þóû—Ê$…uXrjëŠ×ÖZãx±ßŠìUl ˆˆJP&øhi¥Tq‡ž½èá<·w±^ÏZNÀö*õ„R~™~{ º»XEÄi²Vx¢¯í¥¹1¼›z„øà>ÉÂ|³Žh;(Ê¿oǬº‘9ƒò ÈÒ&MDè ç¯Ïÿøú½þ¬­‡rPü‰ÚóV0…žÞ  -Äà—/€2‘…Å™ÁVªEmmÚ^?ÀZi8Ê[D”ƒîhtlµ¾™«ŸÔ $·sj룉›M½Ô§i‘îìܘ™Ÿ»à«²FΨ—.ÒÖÌŒ§'&¸½6i§ZùVé ªPÈÐzU^›¿Ï n{”Î1÷ó´£)´Þj; ÷\¨áŶ¹¼#RÔq‹ mÄÅÓ·"ó0íÀØR‹yÍ'¨í«âë"†Ë&¹p9í| ®{YÄã¢o|¤ÙFF@utc\> VgѪ@£¶ÆöcÇ6RI`6"ÎÎRx)¢WÃ{`ËXša}…ÍŠ‡kn×ù]3s×S·¨•bN --"‚&p€ Ë9WU!`"+ç¶B]&ÎA©°GŸ­‰‘Ûxnï:×Oç ¶ƒ0`Jæ²Wè¸Þ,˘ö¿~·~gÈÙ÷û'žú!¹Þcï#ŸàOù‹«WðÏTÏNÈDÌÔ^‰ÁtœJÎD-œ´oØàI2cTÔþ…áNÚ©gØÕ®^¤ÖXaFT¥Z«Aû¢Ë7xÚŠ¡U©Ên+ Aóæ*5‚y¹ˆèE66ÝënBéûdu¬!H?a,燕ƒN}ó›Èu"åvýóªPÚi6fò¢;™E[À¶5À)«û}kùd«.ûçÜòk¹ Ô…så*­ÔhŸe7t Qǃ2Í*Wàî_fE tPKdQÄš|M› ˆ4i­µ¦ª ÐA(a "¿Ä¹`wqlâ±A»ß!ÉsCð¹ØÒÅ‘ªJWhÓ®žLø` 1*uëroÒDé(l›©•nÎäÅwåÎJJ !ÚÛ¯L,Eh Þ£HgNó‰@±!ä;:S£ßGÅÄ$L,M˜Ñz /ðäsY €ËΪ?“†cÜŸÛyk·ý§ÄŒWA[ö{/±cW8àBYxìîcxiw›¡|°Œ”Ó8b a–=¸Æx‘ñ;aT) ºÙ™Ù©XP©â¨«öÈåkMp.¼<­ ÙA¯™d¶„2Ь¢ì¶äÍDº ”‡ù¦”ªí"=F̱S Nù÷n"Óèô8µâÈ¿¯öJ)JãOË;Ûâ xÄ—±ÿD±«Ù?!²t$¡´t;8ÇÝhn=#5’â¡ÊÆAž‹Ÿ›q»µ:ý£uI®c¢Ã5ÃUÛyé Û¹o¼†Xד¥²Þ% ‚±}nŸ^›z ýÕÑ ×c[çtýË^PW™Y­x‡_õ2âòfZÇ‹<š!yä2xO> àOù§äÍ]“ÙS<Ï›è²%C ¹JG­7mæv@×=ÃP`¤H¤¹…™®é7¿¯=¨€`¦×RȽškjI„ÛÀ\g[é¨@ªð‘Âmp:·Àž¿Zê)@G}ª•†h‡ö¢#vÃ]ƒ_5- ¤PpØ”ã”âáÆXNm&EØT€¸¶&áðŸ0¤™ÇK_}7CÈ@>kí<ò½ü¨d¨¸Á#î#²&b¾½ª ÈϦ¯ß[SéÂê­¶×(pá[­_êóoßž¾>3nð %,„ã4NÁ©B½-ºº¨1*˜ÀÉÒ{æ %Xâ¨(1•Œ+8&z-àÊ–K<¼PñÜ‘­Gø|ý:ÜGäÜÓ!3õ/=h9‚[»©éZTº+Ý–—Õ¿6ï±å÷~Ôr¶"g“ã·ÀìÔš‹éwŽÆœ>ÿ`§¹ÃÔâ:Ô+^Z÷Wà`ÂÛoÐ4à"™=Å ˆ¸ñ€PTVË>1žådº´Öî?›D–8+ž”­ß¼'it_äZwï7Coˆt˜t°t©# Ú!Ú!­µ×ÖZ“"ÂÁ¶¤Zk/?îß¾¾Ô§Ê–"hSšcÞ¨ÊXSU (à¾Æ“¦ÁŒpÏfoC!¾ lvßyP«}.õV385g,Eîh//n)‘oÎ^îh:™Û©Ö”ÿ>þ¿\F˜Õ–Þ:Èö¿AÌ*3ÈÖ¹ˆé&•™Íɉ† ðÜU"C]Ö{ æÞ(ÊÆ§¡®*C¦ãWá¦YjÉRãRŨv(`¯:o0aq{žÁž›­BšU;|Éè#ËÐ,¯½FÓì* !w³6ÙÜeš:«¨`ä#òΖJݪ]¬0¡›Lö••>ꘟ{wf]F¨ &È55ÆŽ4X|x pÊå=,§»ù{Lé/µµ¡¼¯wüùVÛ‚ ¼kÅÒÒl“6öiÊÿ…Ĭh£H” E!FuΛzUOgjä2äàùH3°~ß¼D@( ©v˜íº{ú«!Ò•¡ ÿ¹ÖÊ7f°YæIõC6ƒX¢Q¢2¡?©´Ö[!€kuÒŸ1Bxöô0´›00³i-rˆ—m˜Ìm£•@)Ì­á©‚"²W¿„P mšÖç€j‰Ü¯;ÛoŽû ÓL®³Ly‹{¼MÃÓnIePŸêóóóÓS½ÿx჈ùù©Ö/OO_ŸŸ¿~{ú­jŸ¡éüO›ä:ƒÿ(bv„Ùfó[éV(%ŸèD1ÄÎk2tƹò àH‡ã;FÅüý»@ºþÝ~}L6XqÑ0þšDz˜¥t/QT0ØýNÔ‚ÜtŒÂlÈN@þé §Tó5Æ0ço)’º]õŒÓ'¹ïv+Ú¿S}>t,÷óÃdéLØt&òËd¶Êæ Àƒ‡ÍåbyãÝ“¹ÝÞyž íêiä:ˆÈË+yëw'’©ŠEňÚó8;]£Ë—;«Í–7Ki÷vÿy¿ß_TÕuÊ.m€ºÿxyiO–ìš:iÙµÒù”ÜaÉ&†EFv¿GÐë ªC%@˜ ÇuŠ ‹°ˆ§ñRú[C+‰qq;DU;p£­‚”“)—ÒIf¤epŒÏOob‹ÊÌ4›u°©ÓÚE¥I.\oÀÁöê™ +§´H¦~n{¶(>`8ËšŒùl®Ôë8íéÜNîRµ9u{W?pB€ÖUU*ìE𺡧j ¹ˆrj%ÇSŒhž¥S'`Ÿð¨çyJœMp„ Üã´<S –o@·lé çÒÒ˜Š:q±½ÑþZY´MDùÌÍòhnÍݽ…-î¬ù4€?åˆL¤í$9¥AØs£z 81IÐ'q¥QM!ô¡UrF= Å—w>ifô—qnË2Û`@¼.£4m¯…—z¬µÞ*3áØ CÿyVì¬[_y¼¡©2ÜÑì¸!ð­òWè½ÊkCoª*‡zh´Y‰~Ðy° 빑(5L ~±ˆÖAV->G»+ôœNGõ`TÅÊ<€+@8‚!îƒóÞ¿|}ºŸÃa‡XF‰.IWŒ€âƒ-‘i“"îÚªµ~ûöíÛïßž¾>ã .ìa]Á†ÒE^jÜ8[Mož2‰@‰ØVò§ˆRJž—[‡ra5u2óÁd­"ªK&š‚ ØX!ÞfðLø>} (Dëq™ïN"°¬9kF †îåsÒ u«@®LgGß!orO¯ô/A‘”~ßuuÇV!ŽÝ±Ø"~1ùù¡ä˜ÿ¤þ?X¿&µù!P!Ÿð§üïÉeÎÓ9{ÚTéP骯­½6íJ…ŒÎ!junº2]àOú¥„Q„DW"eõ#yoä µÖúÅ­_Û4Õof&\?G1 åRK€Œ)øqŨíÇ]¤¶òÒ:ªZö‚å‰XãGû“l6/Š‹tP áBÒ·]³Í)¥¡€)òdÖZU´[¡Z…ZF Õ¹kÇñÀ*¼>OíæÁ‚=™yèQˆìºÄ†œˆ‚»6´ÿ·ß©rýí¹~©Ó¼6“ÃMYÕ0q°ªiIÞg?94é`Kâ©¿Ó”#´o—•êIºªÂÉ“˜y­h´oÛœo`äÿ¤ìÔyæ‚I’0Í Á %&¾d/yR8ò †éU`áwnh±ô~­È°~/ â4f.—/‰­`^’©îµ©`<iÒ¥â)Ú¥v4॰ÓÛLWSÊé0xÚ"ÅèyÐ.2 #…é«]Dn$+¬U0A‡º OZsz­×£Iûp(¶^$ë—ò·¡`ó_UAf‰©JG{ÕÖÚýG3&ÌV@…ÀíG»ÿ¸·ß{ãmô–¯ÌÿØh‡ ^êx$Œ¡™EŸ‰å0æç6Óú]=³7¦Ö»ÓÁÒ•aÉ¡ t‘váÊ <Õól öšl è P+ú Üù•Ì¿¼%~&  «¼ªŠxå§2Þ ¸ØŸªÀ ÜŒŠYÑK4 ²ôhògˆuºwWwÉLý×4›2qtfÑâù>ŒjždƒQz€Yó:­ß„‡RñÂ5®1Ž’À–ðlRÉÚ«{€Q€ƒù`”Kا™ fmUÓE†X`îd„jHn¸`߄ƶîR½ÆíµIîûüÃE9iA|ZÊY8ô”×'Û*#KÖíÂÄ’€ŒD*P|»:·Ò›öTÌçÎAÁ…ZÒöt³“á¹0{J?ß‘ø 65(‰­ôÙ[«16Øâ° )c“Ì=9ð>ÕH fµ9ôBÍpl6¼“_%‘ îxúUÊaöÿrÉ{þßVéÀToÔ55ACí\ÐúŒþ”_/Wµz¼QîÌÿ!Àr;{pŽôÿaïÚÙËqìAD*•7’+›¬÷ÿÿŠl6êrÔ]‘ˆÈd„ ¼W²§{fº’-~U²-]]>.x(¡ õ”Ã,»‹ÓîP0 ö˜Ã•.yx!a6´¡aXxòf)ˆ|-GYå,õ†N^n–Ú–†÷æ|Ðné¿%ùz»¾þ׫¼ˆ£€/DL  Un­­§Ðt>oâony\³ù}úà7V÷ËõNƒÊR Aîjfª²û:ÈÓò/Wõ™ÆóO-4‡?WÁºOväìxr`…+9eŽ?&*œ”Ñ@1÷I€–«àãŠsŽ ðfÜÞÏué´͆/ó ¶t¦û‡Ž³Í Œ­´÷fïö8ž”¹§`XÍÝVîà µ‡§\¥‚¤~µ®úÞZä}M0µgÇõË“«A9ý]Vζ sq"Yذ|®îáqªœ I‰N×B6 žOfW²aÚzSÕÖZÓf¦|aTRw ³ ´ûÛÛÛõë뫈H%Ûð:Ž Ä]A3ñø.OÁÜ3ä/wiQƒ8Vi[Sön¨¢Á!Ü ´ß÷¢áJL+ƒWN˜gp%ªÌ_®˜ÌSÀî“Ôû¸¨]l„ïS«ÁÈL[צӦB{‡ÃL¶Žì Ü0cùzÜÅ¿3жÜQ0Ód7íÓ'¦Ž¾qµ¤©MÊkõM¸4š{˘ä²=J÷¯¦öKeÃaâhuÒrÚD‚ìK˜‡¶>p‹‘lù Ó ªû®nBâT¡J~$‰Hó¢ÍèB\SJ´L€‡Ú(Lf[;ÁÓT]¶S;÷p›‡ÇíÂUw§OÛþ3BÕÌöùàR7¸¨_0_‹¬™ŒáKW×Õƒ«14½J êíbâHäUéYÙZçSÍs—ò1j£Áè@…\·—YZÀ À"—²á°‹ÈwmG’Š3Kso€gŸÙþÚ=õ÷ycJ5ÕÖ¦F„Ñœ4%†ãÎÞHÃY™ Ý ÂÑìlÜo³¢8s»†Ä²Ðæ?°ä µ6 G Ñ*û_[²×Oö½cù©ÿ,ÿé–Ù ðò0Ý7û[Æ ÎdÀ3[„¹wdüǘˆ¦·ìæ­â‡Êèݵ¤iÐ¥v¢8ìßdé„ÃtaÌœ:ÆjoÌ г¨ÌÝóÐý¥#5áO2)•™‰ "ÒXˆïqxÓ“(µÕ?Än‡ÿ“WŒ˜‹ê X3xz!FE ÇVþ΀*áVI„ä*\Y«2¬ÐO¥ FW§—;O}FxzÛ|î±9+,D¦Üifi€TrŽ™ÏÊ`ffA\ˆX0ÐÞÍZµÈœ<’ yˆ| onY¬èèl˜=¶y‡­ç$ù| 1QS + Jà„§ö¦f¨a>gúPæý×]`zxÖP‰~òµçoíIç2%¹hæI$ [ÅùlãÆÌº| Ä Ö° ¶[3üæÑ;øñÈü3ç÷Yûý¨_ù;φL½aÁV[~E:4[8Í.éÉ|È­¢éÜóKOß5”*ÛPO'”™ª™yš¥nDKî´aD„ËZžº´Þ'á ›˜BíÑø31í›#“¯©©õ-˫촅t!殨pþ{kl÷fª0À¥¤eƒ®òÍí’B| Ö)àîš™‡l vgo{ßÙži- ZG‰³ú©ëQy?‰œ€ÊëõÅnÚ hEPŒIáÐJlè#­+Jy°; ç×õHÉ0Çèšç1.àôRæöK‚þlE|²ð³išU(=Y6@¦fÑ +©§…­ÖP00ÃÅ%õžâH‡VG¡Š”J‡ ( @})ðé=Þ0ÐQͲ{äKøŸ¬TfKœ-Ù7(Õ¦fÚ¬gW¡•ŒzÕ©~½Èx7ð)8³1` »ßhÚDP?Ú}Óæe JWðg.`Ô”vª4mgICùaJè:P, 6ÇÃ’^;ßä}R’úC Gd \›ç©¾¢#÷dó™ÐŒ0,x4¶ž§AL˜H­Ê‘­ájT(ÓPÏúÎh ‡yYÖ5“H­¹á7…½F#Óµª‹Ñ›¾ëhú2÷¬ƒC­0†j‡uSÉñq'ð£OèŒÂ8•ñÀÏòﻟîXv<;þþr|jø¨ë“Mè¯+éµÀ'GÔmо c7¬"BÑT Ù²¡Žwò¼ÇÛh0´5 ü` T!pŒtšµ+ȱ g°™!÷¸Ã#«BÒ¡ray¹ŠÈëíõõo¿„¸oémªÀçm+½¦Ð€jL!4çéò"¸Ü„!Ì|}¹é°[Wëh­éP°0°;uC¶N¿ÃrzhÀ ZææmͺÞ+Ë%‰¬ÑP BR ©|»]åEˆÀ òíû¯DX»1A{ÆDDÉÿÑOº7çÈ» â¤\¬POðkÃZSœ¡Y¸e€Q½¢FÄõëß¾~ýÛëíz‹¾{X£ZpBºú®œtÙTÉÏŒ›Èà Ìt0²B=ç GÒN* žú'öRtOzñRŒ¯‘mUÆÒÑòÂ’'f+Jeœ©êûÝìpç| ë¸¢§ž<êæ–T%çæ~°ËX˜#:Ü#;NmÕ†·Ÿ6–Ÿ±»Ñºg%!*‘Þ™Š€ %<™~-j"ñ&—ìæ)ð–Jðp€—P Sƒ#.¶2|ªôN²¥® ÝZ³ö½á½ÁóÙ’é»àË Ì>¢< „Ô­TË×7— hÆÖ6Çr ˆn¸"»ßîíí{såFâТx‡¶æúÏoT) cëãR$v-(ÓtM§PlyÍ Ñûž#GÒL¦{ƒ•£¬¦Öìí··ÿùß_ß~ãÂjŒnR€Âf*  úöûýïÿøõú"·—_PT»Y?ðyk³ÑÞ‹¼L#aµg ! mxb'¢™C~s-2"†!¾Ï\àêÐè_¡W\Y»šÁ݇ôn/7¼\#—¯‡º|\™I“/ ñ/ÎÍK¡¹D;–¯²?ĦÍ"ú›;Án/7ª$QxúRÛ"ðqpH.vŒ¨–V¿ðDÙ|âÌo§ÝݬµÉ l>¦i -º#ù—(µ_Oë*±#T™ÈÍaýéq¶µ÷¦Ýl@{sRh¡ ë†â–!pßìI’W²›ÏwW”+ðE$5 ÄúZ3}ÿU»Q2€a£ÍÐß8˜u¥íIÒN€kºî¯$L\¹5ÕÞl¨š¢2u娤‘ok¡›ÛÔPvw_ã€%gÔY8ƦNµÝY$’ =™/Aı3; ƒ¡½êNË 5žû÷M^ÕìqÌä‚ß¡3| „žOÂ05Ü ÁК¡;†Ÿ¦¹8Û³Êl;€XæÏB„kyåóvý¢uÌŠs Åo÷ï°|šŸùÑlïªj+;=XÄçÀõŠeMÃ@k-§bŒZíYv÷Ø·ñÑEn_„DØT+s×&§µ78aÄ’Ý´CÀ ìYÎë4¹&läɨ˜ màÖ(ÅkyöúXlÿ1ÛðTØ8J2Ÿ”­®ëÏïòg´&—ÙÌ'íjÿàŸåG pLÓM†á¤Š9LàÃ\‰vvKüP,LÑq÷‡ÝþvÖrõƒÞhæ‚—Q%®Dú{•øúãͨ§©…nv M¡™Æ!‹NHr%½ÙSWø*2®×û­}o­«ukï( û¹xtåÝÖÚÍ:öÜ¿ërÅ_¡Ê¨ÂU¨“µ²ËjƒÀŒÊTY„l4.©ß‚#Á’ú½å{BŸi©Í&¥¹ÝUP©›CŸ9“!1_¢ýòr»½ˆ\¯×/²º øôÇäé˜ÐÊÁ˜ª¶Bº•ÀNû“Ï”ÇC«§D´¾ áÒ´³B¹[{W„™¹’[ZØÚ_äJH¸›hŸ½³CO›bÀ™.íO–ÇYç×jÛ?­!œuóº)dERŸ¸©…å»ÌËÒg°×haXCaLÇqý“ ‹?/˜zà©‹OËS#¹vµÞ–¡€*q”#®õÈ'ï·›>C¦äíc e~íŠn b=Dg*áFˆíu&ÙÊrSRêlåØë‚é¸Ó VÎfŽ,7m£²eˆi1”€û»éP©""lhjíûýÛïo÷ß¿©Û ‰äâ=`À…ŠU#j­µ$RfT%©fž‰ôį;æ.0…°ük3H=_Ö¤5“–Ôez¢:Mjxww3*ÔÎòžuk­¡³)×P¸:´²Ww€£ï†µ¬”ºHE_ Ó•Ê•QœП~ZâF´iu{¤5Dôø§zÄ>‘ž1çû íƒóØþÓ¸ôïi Ózg˜þ.súÃ|djh­¡Ã"¸ÔØHß:£‚]‚/´”yß6ɨ8$J±*ulƸ½{²Â+†Ä5ÿ]X+n_X.Ì…`6“0¯þQY;@ÔRÖm9SÎ8Øç)sÒçÐs7ýØõäO¾M[ÇëÊ4ä2µ.”é¬|ƒ"s»É´2”d˜2RÖ±¦èiëpÝ;m 9³UCuLǧZBJ™bQ´;ãÀãÆ%Ím»ñ4_ü|oÎK¢ò#;6{m•:g̤Úà‚vžà 2=F„¶™`ñ¨•‰k# Ã.ÐvŠR%a/Ã\Xó?;tÿ³_þéƳ׿œ vrSѯÿ^9Þã‘…Áú©ÿ,?°ðyRîÖk5,`‰ïfP36Õž©ÿüåôõíÍ<íÇ÷Ó¨fCµ»»’o_D®7–ŒK9Ò9â1/Kx’@¡ì:°ÇÞ€3^Èc¥´‚º Öڽݤµ6š mÄG›cm§%œ"p 9Úº$p:ÔQV@*‰Ü¸ÂÏ?¨Ší”ñ5õŠ)††™¶óýи! ÏÉYB^WF¿Æ,2åT„_þû—×ׯ_¿¾Š¤/ÁrZG¸ÜÕ˜FmT…Kk‘t#!ËËB}ÂTtSË~>)Dû!x¼´N Ã0…R W[up›M ¬Ûiê~0o?{¶#ÿ_:2Rñ8¿=oEi=8C„Ck½kÄÏÀÈò€È(©•¦CûG>´¦ð4›ÿÁãætöšŸÏi¾¿ñ´ZJ<Û²ý Äj±njf¡+se©BÄ[Þ×0ÏÛÛ*3­×1f—‰QµÅ˜ÀºÁ.ûW³j€ú·¨‚ÁjºÒ¼!Ú‚| fž—6ÕË=.‹1ôÌW" ð|”Ô°’¨f©Ô:š~»ßßî¿}ûû?~½oˆC=ðUC…ظ‘ͺ¶{k÷ÖTEX ãëPRØRù³Ù€…=áPl¶˜ewvUzºÖ³ÚºdNÔíõ"TÈæ‹#St0 \lmM½½ý~çJ&Fœ›‰á¸ÁQŽN»êÛm’ÍR%rHEÝ0Ÿ]Õ#ÆFpøy9î;ØÜ”-y®›=§õÊõÙnÞÍL¿ýfnÚÖn ¹‚3$ ÊÌ$/‚*Þ çà¥moj~*uåtY$IÇ€§P_2jÏØÛooooßÞî÷8ú=˜ * ^[ÝÚ!²›°áóp$LÚùáMʹ᜶¯lÔ8†UÎvmZJ%>Þ»Ö-¶qðHl5&À†í±¾ÐÂåâ¨oM tÕQ<Ûú3ˆzµ9?µ®7ŸŒtÖî‰B0]¸¹Ò ðÌ^ÖZèÞüÇâXú¾óiRÔŽÒYˆ¹*ªÐfOwWÈž2ã U>ÖNë4÷hví Üá™™ˆ˜YD*9W nhüÜv÷‡Ëf¨XeBBðh¢ýÁåÓXŒÿlÉ…öO¶ÃŸy€–¿¨èa¾?n×çµnN2a–G#쬓S;‰‡Ó(Ò¾/¥úq;Ùåì…Ô½³È‹›bbsºGù›|ûì]»–+·ŽÝˆHE@EÝŽ¤“ÝÙÙüÿÜÉ&s+:}¢""‘&ø(IÝmßu½f-Ïá²Û–T’ÅñØØ˜6pØÅ+¾f¨jÄJ "y9o{)ïâ5 ÍTA…fNšzˆmaípãÑß©"3’×\b":g!vªU¢êÔVpw““¦PÎT“À`…Z3T(¼Î E>§w£0 ë×”Èy¿à<=ñD B‘v‘Ë?¾_Ïò"Ž-,ªžDì îêöfêì Çp[¶}¤?f×ü™f O –÷†A?|Ø$”Ô»Y)&'å$ÈDÆâãhö†Q‡b÷ËÜïL‹òó§ ãñË>L†µúáS'ú¼…½øù1é€%êˆ~ô¸SÝÀ Ÿœy ºKþGä€zl§ß܆۞´'RíƒTÕá‘q§À4tI›}¶ŽëØqÎ[™Æ+G‰È‘®~¹fµÙ óB°tà=êá©G ®u­®sÕJ¹©•¢Õ«z˜ä嵌ª§,:OÁÇZݼ YCÔøwìâ“>ë][Gq{¸¯AaZKÙËõº_¯ûþ~Õ &X§˜¹—“p&cr$áÛõ*¿l¿ýö+21PÌp,wí8‘tzדgûȳ–VÁA€Q£Ãñi­éÚõ§£Ž›%§ÑjjÙÝv\J± Á ý…ê5Éç•4)\N¨Qp&f§M›@³Í>PËFD÷)Ó˜ËÄ|ˆ‰nZ¦q4}û©ó‹(X¯†ÝbPn:•jåÇÕ£¾^YJKA&&l¯gvÜ“"rvÞëã WuP.OuOÖ?¨ÝÔ!ßäFðev}g!ÎìØTa¢ƒChlv;hS’´þÁ}œ†t 0a,ÔÖK/Ã0¦€0vðµ¥y£‡<´{ÛÕ¿ÄÕ@PS”6ÇÕïÞ#·:Oï7t <–Äx?(Àã°î¯ #ÞÖtëCç V Hª`4܈€û/牑 >–slËÅÍÝFp¾ÕÞéeOñäu?£Äá‡ÈôìýêvrŽÁ)©d±nšR`Ú«j%Œq~/ýüý7ÚŒ ,]òëáóý[´E:=wÑ?þ4€¶¿¬Ý…‰ÖÖ/'h#D|/”]FÐ÷Áí4çŠuââɦ»n¿ä¨†‚§ò4g YÜ%'"¼öR(… °®{Aýú=£ŒšMªC˜Gg6§ËS@'‘í,¯{Q+»j3i @3¹Ž“²(NÂA1EO0QD^[ÍÇÖ¾].—í— '·0mwç÷+`ò"ÛeÛ^Ïåv•ƔÌ Î èBè•»´ U€ìˆì“:@´‡e¬Ä|>‰¼Èv¹\.yÝÜÔ·j¥³aãITÏ­.̱ËSîÿT˜zñÃä®à[ŒM5òΡ}wíçÍÆ¿³?2dŸ°"•Ì64wúª¶Î[ÜÖßìhµ1–qÿiwé ¦CCKy®O„XzvÀâì7ê1œ¡9Ufòx_(|áֽ֔㣷m mã)(ðöf<±µ~†û¦q§Ôm—>/Qg²K˜§-~q Já;ñv€êˆCõ¹Príÿ! ´Žµ·ò^ÐLM­ö«ÕxTµÔžËš!„(.Mˆ3ÌPñ¨ iÔ-Qn"ZŸ£›€á/*„­ËrŠš>(^ ^¹Xy/×ëþöö¶¿öid4UÇÿ÷iôGªlТåºïÛ÷·oÿ¸HM^Þ€¨0ÔÍBëÖkÇÓùÔ©µëá¯Æ ãiL[¥CÑ{”û–Šy~fÓ1gœYáôþ³‘hÈ™à["â Ï?4ÝÅä7u/ƒ­W­³I(±8#ã¼€™3yâtòíä «»ŸÝ|´d¤þÏ‚¿Åø f÷Ÿüòx2<ë}‘*ŒýªÅt7OOÕªªjæùÆ(e’#ºOªsìSóâÎS8KsŸƒŒšÁy"H¬ É`ŠÇôÛý&¯²·¢ réÞ(¦I»£cÌJàëm;Ñw,o&ȉK6ô„emà|X„%ê°Þ–™üŠÃý³cÆ;¢ æf˜¯"vêˆxϪà“]SLÞ¡çúÂ8xpÜïìnÃ+aBÔÌšX§ãoI¸ðsê‘Ü$ÍßÛoá*ºŸŠÃ>8ÜÓ-Îì~cµ¨^J厡èÚž3†V`rº0m_îµLÃn¤ó¬ ³™b‡#¤DäÄ"¸çU¡/’›î–Ƨ‹áøãßßžOüÐ5Ø JÆœ!/²í[)^÷¸ÔÈH›‡”£Ô^&á‘”$4cc‚‚dcá ‹l"¯çó뀠ª+Rq»¤¥È^®›ˆŒ3íTOŒL « ]îz,3™8(C’³¿@“‡L5õÄ-92“lr~9o—M^E6–,{)êytÄœÙròX¿F¬w¬Ã)ÛÖ.kw DÕP|²¥ÄG{ "}>žjŽS0‹P’ûø9³›úžó3dŽ^^‘œHO¶ðg÷£û¿Ökr|e®ÚÇÖ/° ±ŸåÊwÀHr¡+=Tb@ƒ™Íô¼Yl]A:`4>Xù½ ËDbåu¤X/6Þ6Y Ý,/©Vƒ3½GÔEã`fÖñœaýÎP‰V…Íýâ¹^†jõy %’Ê%kL6E£HŽ5!;Ùï°~ëT꙽~©Vuë7ëÇù²ÿw‘ovo4§! ± ·¢¥è-*Ë”ZDÄXÐák°jÚ`žóYµü(û{Ùßw3ȉµj:ªž IDATÔ4Θï¾?Í6 ƒƒW1šÏL³~üó±Œâ9¿w9-Y ºØÜ3JœÜYˆÀ™KU4U0¬P.%3“#LÜlÃ^oGëEìPæønJ,'¢L^WÖ¨+úº#ÒOëÚö|„iWßßÛ%#') „qfrôæôRÅò îxøÔ¬å‚a”`†²§{Ü߯¥$8ý$eabtzD "£ز€iÂPûÀŽÏ+:0S]‘¤U9˜áÌd"Ì—_Îe¤¹µá°:Û¹õ…wŠ ¨ËŠ9™˜‰÷þÍ|²à[Ûô|¬/f?ãKû¤°ÿè][=ª¾—5Åà[Æá¼!*ºÏâq˜ŸeèÜ6zÑ4¶ˆgp6£¢Gw‰ß½ïľ¶ìÞ¥rõ]¯ž[¿ðUw·—}´IšöÝÁy[º«_8Ú²Evb›qÅ1ÀG‘ѳ9”[ºøaÐamÆñénø‡²WúÖð7·ŸY¿wmÎlûiÿla{¸O›KŠ(;ÁØÍ¤; ¡gn(݉¦kaôv4!ž‰iíÁ·>Hi"N&/"'–WÙ^79I©fµ;€Ó±’!"(Ä}K{Ø-z—`‰¨Áüø: `+fD™å$òz–RDÕÉ„9Á(cZ¿ áíAª©$¥noœcS4;¾KD„2©ê5_Ѱ—R¾À8CNldrbNÐ[¹œÏhJ‰7\3PÀD%’”2!QG&«Ç@Ìå;É*gÑjnàYÓbÖiJ˜^D¶íüz–³È¶3Ÿæ$dj¦¨¬¤^ë¹”û¥Âžä´Ø„@Gð(-ç娦-G­mÕ«üÀiývGõÜ’ꔉêOP _7Ò£ÒÒqCzì‡ÛK¶üj‡ï ˜ÅBì~ï4ÿÛûüà¼>lÿOÜa·öÜ)ò8£ øþÙþÏÚQs¥žS6f-7c¯À ©¥ ÿòmž ·&0’×uÙD^daf$ ¨Þ 'n_`Ùä¦m6_4"^ë;xÈ»i/½)? D˜@ "²½žK)Zϸ]Õ‘ÞÖõ]·ÖîÂ’÷Ð)8¶<Ò”‰NÀÌŠGÎÌ@F ¬·L—ËöíÛå|ÞºR ×Ì’aeŒ=lËÊ%—°óA¡vøVÚ`5e@kH½3o—íò_Ï¯Û òVÅùZC¿,7§±ÖÒý©S3ˆˆ^j÷†ŒpZÄ|Ã|-ëÒøàË/·Šv8›ËlµÜ=)k¶U D=`òÁí?¬_ôõ0z zïÚhy—«GŽ2‡ÕÙt˜¡ŒHú"öî•™VXSEæ¡FöŽÌp²õ¸â´ µÄžAXx×G rÂà?x„ó1ƒ'¡–õ‘`KòtÔDLMK)E«1¨;Ÿ/h ïÀЗ›ª×èòº¸+àMƽ ɼj7€¢þð¤J÷ræò£Ðڱ⠾”›ª3ަ©RO™sˆfêî¶aýÂÔ”‰†ž‰)“GA‹âíºÿë_¿—÷ëþ¾—RY›Š Ÿ#‹pzT¹Q—QnVnº¿_Ëu+²‰lÝѯ "û ÔõDÿ™6¢ÙËš(I©»"Ñ=ƒŬE3qb>‰ÂЊU8èTÒâ°j±ÚŸX¿n'^Ÿ yq2 œ‘Ý@‰Á±ºÌÔœq~NHOÛª ÷ÿ·ñ‘FbÊ Z»´ZA+†™¿`)aÔ-W4Öä¦i·(Eô¦Ø ÔqLž<ãR-¼—‚ÌÌÄ\(Êx®o·'ä$}/è¨u7Bªõ™«©“Z™™UÕb™L„(3ŸÜlîµ)|ÕÁüì¸øŠM ãt¤z%E¤^éŠÖ9îÖàÈkõ ôÁ¼¹»F±EÿýŸGl×á)]‘äþÄz Ì€þRëð–êÝ.`zôÎv ~öÖ]½Ú ážcËVrá:–\læË(ï±*35z˜šv´¿já ûW<¿nð‡$Ï=9èÁ^]n8·Q«zW’zíçÈêZ—"¸‘söÎ1R‰zHŸ´/u’%è}ÈRùÓþèêèsòÓþO·ÿøjûS:ð}[ô˜?|»µ7þ©øÓ¡AªL?+¡$X5çØ$Omª…ŸJö.5˜H ¦ûþ~½¾ïåG)·Â™´…Êèé’®‹ø•{Ò©õ«¸;ašI9v¨8 gº\.—o—¨öæ-³_‹äDHð£*QsO6l·bUUÙš®Åè¬s ²ûmì.åVJUÉŒL²m—o¿ÊéMw*¥-lL™œÀCzF– ïH<Â0_üÄD8½Æ0ˆUÛ¿¿y)yÎtÞD~¹|ûçÆ ”!/tùEøú®Ûy»Týýôºÿ/{×®åHŽc/,R +s,åþÁ˜ûÿ_°cíŒÕ)««-–H k`0BʬGç9ëNŸl• ƒ÷¸ÊYÞÞÞ®7²r¢xåÖ¢*RÑ”¯#‚×t¨i{o †óY.o—óËùŸÿýO®|~=_^„*ššƒ‡b'\ÉÓŸp=cºœÓ°1ÀÌ‹vxTa”¬+[5«M»ÉPT/¤áhɆŠÐ¢dL.½v³…‚νÌpE‡!’]eýÔ®ínÖÛ,r3àÞX7vðJ-œ¾á¨jdz3ˆdîBö£:/\Yai“ßDµ²åšMî–?}G«!¤âLÈ|XšYÐ"𱄖FÄ\“þ±ø²y™n”,*ZÇ)Ì,äyb²üé”B ®_Ð0cÔgKh{–V&(äκÙ')±Á\:dnRk ß8{ƸH X7x®rËåãû˜¤–oÝØóîËÍÜ€ƒ¼ŠaàÚšµƒ3КRG$‚gV ’¦(±T`ˆ»„hî…´y üî„Y^ˆÐ{sí°AcBö‚°ð‰AY¨|dðZxãÜû¶F&ü\SÈ÷¬§­78ÚBe@¥F¡¸voíÞÿóÇÿüï¿ÞßßÍ3ZW&G>Á$8{¡]7ð ¨J…¹‚*¡Ê¹šÚ_í¿›*¿ý×›TgÌQTQµ $§N϶éå„éÙ|v_¡æ?q[;nÚÇ(±&&άªs ýÿe³“}[@a©¸œ%€wªÝôÛ ®‚×F%WÊꃚèå €À ½Y3.çsÆgª“x1Ì+¬"ƙϯgé&'¡Ê¹ „ÏpvpN6xY—’¸–*l½8¿ÈÛÛå|9ËI¨<+uŒ*YÝYš•–™ˆêLñ¬`ÝZר›Mò~}çÊ$± Áû ‹µýó¦Ý.—7U㹂½TL‰È—Ö†ô”Ã=>±††i¡Y³Š*`9gXuò, ®ßZø¬#´'8ÿT*M×Ô>¢Õש¯h&fSõÙÓLêÀí¯öþçõvk­UaŒ˜\ÚUûüÓuÒ>š¾c BV,ÏÑ0m-L[é,ؘü ‚u[³…Su÷4‡^á‘bΗžBKŸ}ŸžL=Ç7vc¯Ïåe ’owQkÁÕ÷þ˜»sƩӹFÇj<{3û|kÃe8ï`ó¶0ðØF6¿Q£ç1L[-(™²g%ÅI`SÃaN ó rgämž‚Ž˜+ÉPpž=Ü.=7«Üútd¾÷”bD?Ï/ðà/˜ò(µûª­Ío“€Oæ}»éD uNÚsõƒk¶Ñømÿ–/ 7ò–È*enº{†kR§ZoÚÃñ”ÈàðC17*¤vØ™ÜãlÇ— EøÄ"g/ùË+çÚùI¸RdN)™Xª³PrMn‰xÑi‰EàÇæY_#ÀˆK;„eæxf²Ëf^ƒãÃq_X<“t:A9ßX£Øƒ¸:•˜ÜæQtå:ÑÛår9“T„*P B$ WÈÉyÓ¢\˜ 3µF±³û™ÏW=HÌ`wÕ{‚QãW–&@Îr~=Ëë…OBáªW€m¨v¤óâpÎ×x~2Zé#É¢Á@õ€ ùD‚ƒw9[ìø•¹Ï‘ÏSA>¿¬€tÕÎL°‘ “?¾ ™k¢ ¾Îƒ· iinäoÜδŸìõ%Žq›ir{¾kà ÐÉ-ª‰¨P!®@"2–'µLω‡õ‹ƒ qȾ¾¹8j9í~0‰ l0H¹@§ÙG„½mÁ¤í„¼£|zù ÐykÅ0«•€Ùå,ò" ¼áÍ+º¡›"f¨Š*ì‰gu˜TXWx}§™7v`Ì"B¿ÞIkÃÌiÃ}éæ³H¹ãÍŒƒ.Í•ÜmçVT¸ ÀªGAÃÔn×ëí›—ó WUáSÆ{,¼U[Yÿ%HÚ×o7b>_ßÝ^2ýVøbìÍ×üèøèŸÈg£¤Ë‹­±5îwëÀöZgy9qrÅÄ®Ù"à… ZS´0wr€wse.’T£TÃs0€œ*?L¡ÚÁ%Ï¿¬¾ƒ­L¿Æ˜ò%`Å‹¬&`IËégGþ71Ãqhé™ ªò¯ ñþ7ê›|þ‘5É<Í 6ÔLó§%p&{²ëÂ0ÂÂôYP»'-WS}‘êrIÕ:†®¨`°• Hûpo$Ž7ë°í–¼ú^ñãô撼¶ñ~Œs(Ù•Jgly.·Öæ÷¿Åá‡æ¿TGõGAÀ¯•¯ºêwÏÃ_ËmÕ|1>—û­ïüª<ÞY¡]‡d}b<“ßðoù"Yfç³9¸7íÔa­{ =Óá&%þ}”E‚Q{Û{î‡ÌR‘%ЉÎ/òööÆ'ÎÊ €+¥âaœ™ƒ‰ÔؽÎê,š1†ÎóÄT\f¬×޵ï¨1OCÅC¨¬Ã‹=˜™* ;o§¦BÖÁªŒ½O4ê²ÃÃK\ˆ*Su³ÖT›¼ÈåUää*©¢DT¡u´ä|‘«àòziÍ6ae°¡©šE‘zÄp1 ÆPUmÖÑHaw¨{Àðù,—Ëù,Ï.f„ÖÁCÓ+OXâÉ,b/Ó|âËX O­çCßÏÀ8x=*i3x¦oÂl˜kçkÖ+'Éþzñÿû6¶${òÕáq_ÄÕ-Z°®­‹¨¶í'R€¡¨‚á»uâùž@„Vƒ‹í4Z]öË‹ÂÏW–Ñ~èèD> :8ðá® ,£¦ëÍ u91WºªO/º1Þ0–šfú–6µêrt-cÖu(4H"‘È-œ½!ú‰š9ÙxgntàmÁW ÞQ›?‰Å»ëóÊN¾‰³4 ][ ì…/¯ ƒvзf­éP3i3ÏçÇl4fÏêD¬s<ÖVĈj½Øhò'Ðð¬q‚Þ>’kÇ÷.ŵƫZÀ˶™¦v¿Åaoجµ1ÉÝj÷ÖníýÏÛõÛÕIàG”ÀÄKT^º§ù—«…a°¦·?Û•o—רÁË•½Û¼Eƒy*¬üz~¯äÙ\z¼„¹9°*fhªH Q…T2 Èù<@‡) #‘R&UÝ´ƒºb¨ÇFnVº…{hKtIJå dÛyÙrª1Žué*"hÜݸ€@´(†c˜AM*€còV@¡lK-p@ zWëîId@ƒå±u”ŸSRÙ6ަmf¨^ÌÍ´ð €EžÂ²°dýn­ý(ë››Ãî3¹•­é½<6ñ· È­ÏÏ…ô¸.r™Ç|ý w¡û×Yëk•ï’–32åÓë†S;/ÄŸ­_Ú_iáäÉE~Òâ=Èoø·üMÙ¹KwÅ|ŽìëÜËe'b.Í)¯äËÕËñy÷"g ¹>G®\„:jÓá\Õ#Œ°Ì‚69ݽåŠB…1tf¬qÒ`ÔͰL5¼Ü.´°É:@TéÌÔ*Y¡æZ¸™bÍÍw‹ dŒ(¹áæ.¢!â`¥vUm0“Þ^åü*\ ½1ˆ$à;&Xo0³ui-À8n@Y] Da$.äå Ì f Š+W’ÊÌB'º¼\Îgá¡/‘j6‚ŸIXvä±ÓV¾³æX·%¨ b… œœpG‰›r½ÜMÓ´~#ØS™½6ÈϳÙbfÛÈùvÄ•‰À•¬’z¬®êIóV‚Ï b/Æ *óBÿŽfÊS-†…Ö»<àÀ˜óÂ:Õa €"›uV„ùA–„k‚ÂxK˜ä“]QDN^ÔÊ‚ÌøÞ–ºÖ6ÿwCw±Ç{ ^‹†Z¹~÷úÓµLä Ü®\âÀþWùàúÚÅsl“…ÄáŸÑa N´Ç–Ÿ k­½ÿñN/ry•´a'Rn‘oIÕÌ”¨a¨IT»œ-eu–BÇ‘%Û±šØd¼‚‹rg]MÁðyÆak[¦·e}›ÂS‰mPÊ#mÔ>.^Ù‹É«®×o×[k¦fDæQ Jì(:ÉbqsQnÄ7S #ˆšZ»^o•˜H^DÀTÈ–2B åÁópß \æ,_ßû‡wd?žký¤mbøõ†¹'‹MµräØ!¦âÅ’üoGã%£×|þ |ƒ1;r(—\éÅ=¤p–u¨©˜ØáÞ cp íz¹¬L}nt^ÄyÍx–'2tŠa,8ß`É]‡ÐM»©gP/ì!  BÎrgpÓæ‘J“·cyèx”&ÛCÓXy¹«¯p7¢GGÃЙ|!k&±ûÉi…ts Ë$uˆùbbuj·‡ÆlC·m*1ÕΗ˜%³3ôìÍÁ3¶Â÷"NUÆt¸“XWîÚ³­øçMœ8‚ÁìüqÙ pÊGÄÿ>¼È×¢«æ©LÏ>Žih¾Rv>§/hìÉÓ+ÏZÿ{Ö/~À¿å+$\Y›dØ”‡©ûdŽ— 9r<­sà{…ÉtKy@wËjuïuèÅKGÃPyºÝÜÔPš„õ¸ þ¤$fc¦ü%g-”'Ì»p‚´S´Ü:5-àN­GúßÜÅ¢æîmó<'`Fey¹Mý#¬š•û·ªìÛ]3ˆ¹Æ1£ cSÌðš.ÆÂ,Ì—WšyÜghœ¶@–¨3¡ªqW‹Œ…¦Ú`^Läw”‘HD,uÆz±ˆ0ŸDXHBTÉëyò˜ýÔ^¹WR?p¢?mÒ¶Ä9GþrÔë!Í@âœyÛ^슋·ÆD 6¾[3S@@ð"1¤\8àDSDþÌÁTÔº)6[ËP 38làÇnmÝst—È[æ ¢ša#í°ëí 3ÓIXü»y t®³¦M»zE»›vXGS‡ 0ðI¦o :2]3q´ç“ Gµmßu/ÒGZ¬á˜û‰x,¯eÃ8>&ì“âW;-$œk òìÈŸº#ænfhMÿõï÷óÛÛåpå~€* £¹ÑÞ¼”—õÖîÎmHâ†Ç„W‰îdù¢Œƒ’-ið #Ã@ÍTµ›T‚ïNJJ™%hÏ“œAþŒq›•oÇŠ•Ìlj]‰÷˜ ²{£Ê á“P¥ÖÚí¯ö~½yÖ+½7 EMkê¤ qCš§ûÉ»’ÎÐ9{ûÐîÖ´½÷88Îv¡@ªìΑ ‹³(Œ„¹%®Ëyš.º›ó£Ý_ì¶—ÇÁm4BÃÜ(b­)ÉI"'9ÌŠ»WTPÑ(ösÛú¹}‚a®§ÆÆB$€nž§€"†Ý%f·Ý{;k¶3Åk[Átû£±ó¡ë“õ`€bˆÂÄÔsŸÅE·Õ…mÌG¾³ŒýÇ ©ê€…ÅçÅB±Q¨tiwm­íøb‘¦É/7%Sþ(í¬¸)+ôí[¯ÿöÇ$&ÓÞÜ…§%ŸGè†u%Bd'¾æ8¬‰  çõÕ?·_±-×g¹D`ÀLÕÜêåÙƒ‰3.~ÝŒxn¬dÞ%0þSvà÷®ñcàá/ÊcdÖÖíܵw[ħŠÍt»×…]ñ(ŸŒÌw8/û6W·Ôz~N‘ûPœ~]ÖwñÛ –;ÔÏ-šßðoùj1Ý-êP€ŸÚÀ :P@¹ª‚©šœX»ç¦((2Ýý~¨#½ø‹ ·»ŠG¼x²¨`yŽŸ»Â &OIÓÔäJ:B›äl…g%Þôžfgæ‚$8ØC]l(ZÓšÅ6‚”òì„v˜p>‹§ŠÝjHän™H l‚ •¹U"'l{ÌàÕ2x4-šTb†œˆ*ôn6´µ«'‹jÕ‘LEX—¨¤j½5VNü¦€zD"²d†0@*Q„IDøÄÄÄ'æ-JŠÒmž¡†îH°”Þ ,¾†¼ûáú?ö®Í­ÇD¤"@Qy"ÕDÛÙÌÿÏ6œh¿É:k)j;a€¼¼·¤¶«íÞ`Ç Ê²÷ÁËppr„÷^ŽÀˆÞç!PÜo£hLûÝhò“ã×¶Oµ¢a=Œ_PTì¤èJbžÐ’ÇÇqó!…•i1­¢Ãwõl}€‰{–õ‚—Ї'¦šú.ÚÊQt"âÂéþ¨p»;)Šä÷Kl”LBlÐîËlr4²cNõ^[·íØég·ÌȉÄÚ6Jíœ ^Žýÿ6çþ zöýN¸ ö®p ®žA’BÍÜšÛ/åJrsUýí×ë?þ©Ö€Â2î^ˆS0M+^‰œƒc‚†È %†¥QN1kîfö–‚·<#]S àQ ܆}®9˜?ÜõÉ{sj½i?„©õMclSøJTo¿ßî¿_o׫7s3s—`|Ö(–w´tr\j‹^/€P@oP7ÜAå~«L'vH:-Üñ€Bk%þ”a…Mc~V|éôÍvöWË¥…âô¨hå-ÄÂ-½QÕ‡ ÿÓvÌ”AÎÌDóKÓ°ÛJ Ï\w÷cp­Õ6eµÄÀ+%uçÃ%À!C²+g£s,×ým“4@6¥×,ïÏÍB³¹U;¬â *ðæª*'ÆÊôpƒófGŒÃ÷¾¿ÎãƒðÃûŒ˜ÅÀšnfëÞ½³'sxTÍSÜkæ:-KMt5‡ÆããÛWÝÇv`ÜÄ?¾y']:äiG­íÏâœ>l¶‡ýÀ6mÏdþºF˜¼ÂvÓŸÝð¶ß}ã —©üÑï³ö!îc>D¿»¶¡_tľÖ~àŸí»Ú{ÁBÇXõ|oN½Ÿx‰³1“uáæ^ •˜H]WÛt;Á“¥óp-qh.²¸H’µ(èðîr9‰°$¤«é'Ív2³‘Ø’¬%ψZöÔØÒH¦¡ÕÌ͉È)+á†4k ô‘Áå\E«rUë©ÜæKn±„L¦êÐʾp3GhÈ4dÜÉ",Ì"Ä5P%¡€ª0\Ø”5Ÿ:GØÆZx©ÖGl¨6—2¤üå$ÄœAà‘HQ!¤|0Ó/x(3ÂWï0ðøÐ×q3ž²—¡»¶s ¸» ÐÄÀi¿ÆmïÃò˜üÓ¡~xsøtç@õîæ>ëÖ¡Þé̸‡-™ºÃ/⺬èÝclÓl¹0‹ ³og%LOƒ£23ÏÄÚK9[÷'núhfÄ— ‰°œ˜˜Îpô¡ñ'1‰EE+¬S¯r×iïö¼2¸‹ÄÃ#æ9lH10(­ŒÐDÜÚ;Þ¥-›£ãøâP½Ã=J‘1›èlôøµgÌÄ›… rÞp%:1jê†ÿþ×ÿ¼þòz~}½¼¾&+8(ÌèfÄçÊ"†&öfžº8ŠFÚ™º9˜jBkó¡ˆóÂáÝô®fîªÚ î1 áë\¡h€'¶—a3&.󃉿oÓ¯Î@ ^ z6àÍMõþûõ~»Þ¾ÜToÞ"3èDeø ·><@ûx(0sˆ”¢¦á&ï IDATÔýó™n"tÊÂãQ3×GÚ?uŠ„”Í5¹¾èX<þ1 üG-íÜI6¡2ŽÝ)ß “A ùå¥0%-f ÕÅòG8.@¼5ÛÊØ<0˜iOgØÏ‘¾w†ÝR^‘™`0Ž…}Ô+È^-àUôaÞC´¾;ðƒV¢ZfR¸:šû›¡¹wH(–ÁÌ. Yþnªª"ìl).ýŽ´OÛ™ÉHIöþ*¨;¼_FUg¤«:á²™#i¹€;Ûô‡ï`ÐǬEñ‹uÛ@ú7z¾©-Ž»?úR_8@ɼ‰¼Ü>Ø}$QO<ñ®ß¾ÝÅH[ƒ|Ù?¨ÍXý$÷¥€ {Øû¿neñÅ?^Fbó}d ¿öäôenž·»E¶ßá¯å¢GûÑ™ÆGôûnäoè÷ãí'þÏk¾ìïÿ~KÚÒB*{fÔ.\»0þ¹@[€4Ôšs%ô%3ÍÓÁ¡-û‚Á8IýÆIšÙÇå%9HHDˆªV QΜ9KŽ)ïl”Q»¥œpÚyóôD¤£T£|ºP#'…tGkÙá.Ÿtâ&ºD”>–×àÓ¶à’¹Dò!UÎ*óPªR"×ÕrŠ˜›{sÔç™`ææˆ%kŸŒ½ÄÝ­)W­²»œÈµ| ˜*KT°HùŒN“mm„˜¬ãØ%“ó`#Ð>A9FdÄ€4¤Âv£2z8›Q_ølcópok5©íùq[i“aý„ ‘è+ËÜv ‚ëð’xHOmŒ¾n«Í;NŸ¼µˆ3›[œ>LG æ]h/&Ó,ANÌ"TÙa(L:;[U8g|¤Ãu 0×±U:ÐùÞÔöfÚœOШËÓž^Ó ùŽøOßç)hà‡Qg+௮>>©˜[X,9Õ1Om¿¢¥uÕ ß}+ÀUô6Ì"CŽªJ°Ê팢Öüöë¿_ÿõÏ×_®|’×K˜GœµjfÕ«.èMÝìv¿£%Ò ØŠ1±¸¦¶m´àPÞ¤©ê홉§åÒvÆÚÛ$âå‘Ú#3tÄ”‰$5“À­Ù]õöYoê!¿ ÎúÏxÀou¨ž\|äÏnTdVð_¶p%°±g‰ݬdÍódCäø÷ û=t¼~­ù¢çµ/Ye– ˜¥b(çcÒƒHÙ'*‘„âkå˜Qq€ãPè>W§õN‡Þ•e5Ab` aäò>¤Û[XÓ³£€áë¼Û¶X@Q c5šMã(Ú0(c¾¶(^¾@bJhHKVòKd8“¡²îò%Õê εµÝÀû‹ß˜Q¨Ó3ŒÈ‘•´­>EyKQ1z¿0¡V˜÷é+|מ÷áCDøMHå°]næÏÛKi½ÝRMlXè{|ùϰÛ{Ïš¿ûè‰÷íí/Ë8OF(Ž˜b×>p`úŸkþäC˜óGÙùÛŸF¿c]ÝþÕ+=¦®|´ë~ þqNÿŸí¯™z½„Õ}òðï ©.<* !¶€H4Šÿ”KyÛÜ‘|º[wB,µ3”7WÛ Ö<Àö殦ÃWøÁÇÞâ-ê.ɤñ¢Ò|‰ÈSíŠðu§>‡â |Âßåïô"r¾ðÙ"pGÞ@•ñB‚ù9‹Öº##01Þ h™g1Øõ Ïê¦]B%”]šW5SÈ'G)Rq§Ö¢`£+ƒºÝÜ|T -t– _^Îç¿]¸ªV™a S½{Åë…ϯr9gµFT ƒ+Pˆ* €NÈI¸0@Ö°0d¹Ã,*Fz`æ "†=¢j €C1›PÁ''ŠœdŠÜ`ah(.eÏ„ÕxâpðÏ]‹B Ú‘jÉ}ã!‡1ÇY~p)ó#•¬Àp& žÕ¥@àjðfˆ\ÜIDCÈ3¶ãŒ˜uÃnãH·ÈƯ.á4±ˆÑ™ª¼ÌÕtè[”³v¤tZ –Fp„³2EÒÅ£Áèöƒ[}+x9C3ÀC‘ •¨@^Hä•ÏboãJ]ívS':ÜAÕ­†¾†%Í\à'§'"E\1¢jqIÓûŽô&d¸`®¨L|2dr{ÄÀ=½6ÞÌÀ\*%ÁuŒ`‰¥ì+½Ð–k˜¬E.4iÅ˧ hßzÐtPÓM“%~¢8£ ¹ÁPá͸°þ~½þúÛß__ñrÓjc4¤JpTQf¹ÔôŒ˜ÝÝÜš‚Ùƒy/„¾C‚¼üéD—`¦£ó rN¹Ù)\”жt”dìOãܶ÷ãdÛãX›“©¼\prr@¿èõz»^ïúYU+^ΗqæeÞl[!§ÛØ/(D Gíbs·â\*轟n\é&"/Â"IßeŸÛ°™æ6ˆÐ€„§èê<]ÂH<¢Ì¾µûïPN ÷Y0ù³ÎYA$ «æ’b·¶U¢Þšëº[sofÝá¸Þn\Y„¤Ê ?2±ÁÜ* ùtRSÁ=å :Bá,d¨rm©V=]¶4ü†½QGü¹{úŽKB`vh `ɬ;‡õqQmD`‚{ꂚ7˜©Tf‚V¢FL™,êÅÐ+ˆJÖ\À E—t¦±Rp…ÉY.g‘O‘† +„ê fÇ9Ü}dS'‡VˆŒݶî]6·É$K¿ˆQ#‹Œ¦Uì·à\ÜiÆùl@¤|‘ç(@í=zï*æ=_0£¦…‹Û–láþDZ¹ôó·l„³o'Õùðù†y²“¢dJ×672wPmTgƶáYîjÛ£LÃ|XHÅ(«I/sïá¦îˆª&'"·¦[MËå>¼Ú ¸·™f ©ÕÔê|p²`^Äd Œ¾È,=S@àb”Ô¶%~›p…ùû÷æù|̳ß5ÚÐïa#‘äêàBJ”·Ðcµ‘äh¦¦úù¦_îö7e’a˜.¹ÐÄñÈx¡ QÀÍs!J€ ;ç— pÜ \ÙºyË@ͨ³´uŽ sì²²êú>&"&©>‡åü"€íÍTýv×û½«šéû# ´Šúë±ç5 y3ÀP¤t×»Þnwù¤¨YÒÜ*s`B÷œÑ ÌÝ‘ô;Ü+ÈoØv‹gí{BRn£YVÑ‚­ƒË0“Ó™ èæ«ÛÔy®,´Ò¶ Å·:^P…$—–µ`9”o÷ÂÀÊÚ3ùbZºsÃó“»[.t&š:픬Kì‚À›EŽOœÕš¹%“…±ePô€kmîT){`ÞÚ¼“¾ý˜Ç…FžËpª¦ t]ÌŠ üd`…ÛǨÅìx]Wרî¡Ã Ø”-õ2G³²Ý›€Ów·ãw½}Ï߯ûèÜÇÙ°Ç%ø0|6C—_~öwïÓã··gëæ'úýëÛ»UõñrÃûÏø¨\ò§›%Gàÿ‹Œhß=ªïáG¯Ê~–ýeÏî'þÙþ¸Ñøû«Ñó9V6Òïl‚Ð2´'(1CC»‹š“€¹>zìŽûÕ?êg"çÛ¨L pR„«ˆÈù,(PS¼éí³ë—«5¼þ×+ \,T[¼RÈDe§ŒPƒ½«þfcÊ„C Ë¢?II€B¨ÌÍù9‘7¡J\^ÍL?«Þï(ÌUÙŠ%8›;;¨šš*:p2>Ÿg}¸ÁÍF¾%WFÅùÌçËY^Π½Òå[ÓÆ%À#öÌ̦×ëí·ëõz½«*U‹cĢР.@^D^äüú*/ÉøÕærbªü¿ì]½š;Ž=ˆHE ¢ñDí}‚}ÿpÞÀ›íFWЦ;* *2ÂXÔO·Ûc_GÆw?ßnµTªb±Hààà`mS¬° 6c NR †Çã©–-¹V€¶ÅŸðà‘ U¸BúDD àŽ[æ¿]LZþ6(¹KÄ(>úgÖôI®äPÇAt€«iWTv¡y¶¸yf8ZP”;`RPQ¨—h ;"§a€«•꺡Ì`C•˜†6DM/ÌÔ]Rðdƒc8ÓZk ˜-NjÆ–LlEL€ê‹zÒÃVràƒé—/q5.À0¥Ì$cÉ9|P.ñx|v®R«Ãš 8noâ3‡dm÷âù%éÌÕ"5çÇ@͸’tx„¶ýû*_¿2Óáü¬ú[´$œOÎ`à ÒRpY°>1*5m NŸ¶|ÃLž”Õߺ}^Æò»‹7aÿ<ìðe0©b0†’AºÊÛv½\¶ËåúzUQÛ•ï—ÇQKKóÇ9—<¤Ê› U±ëÛ¦]Ú—:s¥ÖZc²Ñ”̺Oøðe,xžÍšS£ã¸™—¦[5棭ѼõkJ ÿI$ì vÅ`ÎIJˆ€°ErÆ«‚…fòÍ<;­™†™)téR¸–Þ`8—$_·q<¤óÌ,ö&ú=ÞãêÊ~O£L×]qb:Ô —øùáÑ^ÆÑQ!åÁ6S[5K‡|. 3ÛMä*=žtïc@!\ÛMž´«ìt. Ýyï#o‡4Ö›åMÑ;@ªO„,VWuð7ÕȵŸü²’åÐååg…E,Ô0c¹<{{pÙå‰~Äj¿„ô{—û]ìózú]Ëlù6 §Ð¿ìò{¼é!bàã×ßmtóÿóç åûßÜÄü¬!Ù¯¶eÂ=Ò˜Á±õþ…ø®åÕÏ9iOíOüÇV»ó•è᯿úŒ_ oÂ1±u³&ÌÁ[ÌX~&F mL²1WbOAT?‚7‘Ü/o;ËúÉmx=Óx`ÿ¾ Wj­ÏgÙE.×Ëå²½Jcþúõ+}ùúÒHÞ¬°FÕ¢®&ƒöÜeµ[ÌfÐažž6€Pðröb'ÎQšœZ1WVh«™‰ÈvÙèbnÔÉÔÍ«AÜ“2ÝèÙŠw:ï±€¸F*1¢*rfÛRMg,}œn®¶:C©÷´(ÞæÁ­çÖZkðBñ’ @5ùŠÆ‘¼Z£Ç#*À<(Sè)‹•­\߉,U͆iüטOIGëÖv•¢ªÁLë ê:=¬s;±vdàÔëûS¸=Î ÇÎ4Ýèg¶L?÷Ì9ƒG^ÿ݆7'Ói¶Jj$diB)éµÊVMªD»]·ìé­€ˆl¯›lWÛ[4ˆ2±ãB7¾W ÐE‡Ù®¢¢»¡6KD)Îß‹>jÔŠi×ímƒ*Y×кsÙš1RNÈõP>P÷ËbpF"&³bb}ÇJä¶èn"××m{½noWÝÍ\¼`êéÜôÃt£8Ux¦ó½Rµç¦PnªM‘yÂízùJއž˜ˆò)7{ð&CÙŽV‚ëDÜ%x§Ýe€¿k7SÕb ?±×!s*1´æ³â^«ÂT Jõ+Š+ö» D5t‡°ØUwU5×Ú¸y)V°ca‰bÑ[ ¸“V¦ö®iäyìÇa‰Ï>.Ó®#e5f6’|éªi»ŠÈ¶m7Úñì_1IÑel·mî¤.Ð3Má ãÑ$)}î‘M†nnQbpÅ‚à#»*9 l/…¾úÔ‰žLÒd|Å@P H7ÙM¼cÙ‡ëÙ{‘Ñ“w|ô¦{[›Bßÿiý¥às%'Û³çóöÛòÏ?oåÇ—ˆ,Á,<<~æÌ¡ÓŸ¹??`a,ð§í xž¯[Û§?þyûÿ±Ÿ¶å1ÞÉÍŸ\îÎ_Y¢lëæ¹¦éÁùÑRâæÇçî¶yÇ猩àiÎòB¡Éy“Ý.×­µvùßË·oß.— €ó?^Ú—sk/òz•Á­«è0KŪQ%«)Ýéì5(‘÷‰5éykÜZc:ÿó… ˆ´@äRЕع©ðyW­•ìC£4ë* ››½Wçžšøà˜ŠµÖš‰é0óx5÷qÙobæUÐ^’*ÑUÒ4c68¥s{ÝDæÊUDzþç]‘S¥é|>¿|yñÒ_óþAâe8ˆ£iŸŸø úåûr¦ù‘Âî·Ò¡÷jšÅÍ µ‰ ³Âp‘*ì¥T”Å3·'ƒÞÃçËW¦¯Î $Í`]­‹—qýŠÊT<Å‘êœ “Uä#Žuh/ZÝšÄ0ˉ‹õqË“ç‹h(éß}c 8°’þ½»‰}>ár ºÅÍ2¡_—$gÆ-³¿ž7»Ù÷²¬ÏLÅ}ýxaZ¨Á5uˆªKÙm7˜ÂÌÓ2[WU‘M6Q9Ÿf + ã¼Xthw2b3Öu÷!b¯¹ Ø0×Xj®Çƒ8åívˆjòj+.Gñ>CB|·`Çâ02(íª»*¢"""*¡åkŽÊ=æ",Î2:?V´Ž©ê™RšO¬„\È’ím£×뵂\™¾ªO0¢56O#]›•»ŒïÁÇÖUë³üÌ9„4¦“•Z¹ÒAu§È)ä‰e"'YkæfÍç ´›ï2L!›,6Ìû|ùÁ•+»­Û³Œ®×™+…êUý䉘<œŸ¥üŸ9©ç±dÑ9®ìyR˜*aÀÔ®o¢)ÇF‘1Nþ€_̆Bg˜jWhkç5=«·aµË@©±¾ÇTRnf#Þ¯¤\ئ>6Esxëó\Çï h¨å>PaˆØPïnõ—j }Âb›xží<žu¾_Pÿ3³åß·¿/ú5_”n÷ñßL~–àõ×9«s‘åÌ-ØyLk4êd“÷¾ñwg†ÄÖ‰eŸ]“¿cï>à?vgï-ÝŸ^ÒGþk‰æÞïÇÐäìE3žîì"ÇA¾éßh·JrFÍBÐbË\RŽƒ¼²QØ{ê %°Š\ì‚+äUDD6ÑÁ\É:ä*RÄ·R馦6L-â%)ÊâêµCÆEPYªàÊtò!kÚÿ‡‰‰©_ÀÑÖ’*ËÛfáÊ¢z}Ý`àQáP¬L,Øe£Ž­ºˆ3ÈñAÖÝÚ.v‰€ƒ1Ôv’WÀ†¡Cüdkך´Só|U>Ÿ9pƒy½Â`Ýó†3˜ÿÐü˜æ]ˆá¯O¸ì):ÿšãcˆmuhAõ÷‚ b®j…ŒpéÊ•×ô&Ubbí˜uó¨Pw9[C!ìyÛreðGI»†6~ñÚÀÎ-ÀŽ¥^¾{òÓ^´ˆ¨ërOr[!G°™X›æ!´'É×'èŽ/Ń…¼ã÷¶ÉuÛDD÷£’‚Ê­¸=~$]ɛĤÛÃOϤH8gÙˆö mØ.te&¦Ð«ïª%bà›m"ˆŠ÷ð†ÍúòT§"`/C½#ÓmöíÈFÒ2«jÓ”ŒIµ2Ò.³Üf:©9ñ¾Á¦ hgUcÛCu7SÑ]Ýl§ €Šì¡=OŠ|D#t`lƒŽàbxÊ—+yÕLð Üï÷Õ€’ÝŸò’ý# Ð@>NÕ »˜ˆuK 0ªp½ÿ“§¦‰À‚R!Ž2éj]ÍF>àeÅüŒÊü!$²W¼ƒw=OÒ•s;©)×Ù> 6ò–Ñ/æœf êÍä@¨±Âx‡*62¿^ÛŸ²çëÝíPeñ|>ˆ~hÇ”‹óGgø‘}–(‘«ëÝûæ¸sç~Æ)úë‘§ÖÌ÷öcyÚÜŸ-r+{âù}ýQtàÍncúmösl€°Ïƒ2KÈŸ·?ð{Ï~f†½»ÖLÔ7r¹™£õ€Çs0´+WV›ü¥ð9tÖð)k¯¸8 íYeµnZˆ½pWñŠ®²™ˆÈPÈÆä¼ÙÂmHÏ5Ý)·ðPëšÍ¢ÐZc8m‚#l»Ð‰^þñ‚._Q)ä—ÚÙ;9ºÉëÕ 8¿ ªí±ƒ2‘¨6þúëâ L‰6¬D€ñP E×¢ªÒ¢‰»&] ¦]½c§š¢•A .»€Áß¶‹‰hW®Náý M^·™ÍC!œà pç?37éªr•ÎmDÍ)“‡ñwóÁÁHçÝypwsù+Ž×ßµû¾¸aQuIÈÙ“lÞ»Š+ÓM{C›bKÓÓu•ï—V2ðÿì]½š#9Ž X¤,PÖìXUûwÞ=ÿ>ÁÎXwgdu—%ÀiÅ™™’jþznQߌZÊd2ù Q?úÀÞPSÀ\²Ä;Ñ“ÏáR” P¸ÌÖ ×4\‰ôï³}æÊªÏQDFfO1°'€}> :DjºÖæ -”쿸&Ë}~ÈL¡)šHðTJ_1©…µF2𫽢DvŸ!r–ß;m Ì¢_Ççzêz3û*ûoÌ}c™€øä0í8aÂ!} €„ÊÔÜ|Àº/:³m#5tîÓ#-f]7tú D@9~þBÿiM¾²?V=CF>CBñOâc ¼)ȪX0iÙç]”I‹î4…Š4¨Ì:àâZ›ä•?«EóÍm¿¨ü/TMþ _åEûõy±E&ó{Œ¤oko|µ]$ùFøµßÜoZÄÀ–£þmíp~öfþÚið¿ä§ërÛ¦_øÀ¿B3üdþ„ü¯â|[{U4ã{ûÝíyôÊ· ÒaE¢€­œ Óîvý0v6ïéˆàîíÔ¢GøY0i]¼j«0óÛûùç_n_®¤^q­+I,Ô28©6…8ït¿ZA;©±µ…M!Л¢…2 '9ŸÎï8aHW!˜x0FÉÄZZQ.•MET[ˆKŽ > 6¬uçÝ44s“*àÅZk§&UÙÝî m*â$n×p<hÕ¦­µæw²ûùoïŽ'¹š€V9ÿмûåê­ATE¡EÝM«ÉÃ1ÔÚô|:CUOÒÌÍ[#¢Ü”žªˆ53ãÇåÂÌxL]S¨VqÀïÞ´µ·³¶æ€ —ªo­É)¿”Ψ~¹ªÚ"‘ÃMyM4"¬Ÿ%é€Kˆå "ÌRöO€°¹G ÍÎ N ¥âo‘ p»¸ÝMO:…‰f¡ÎˆŒˆ¢Â{dNr¡=j«Ç& ‰#¶F× µÂíN3ÁÛgïíöafös¿´Ö´¥êÌÁSžT½™L!w’Àp'ÑÓ@frjׯàCv#qýz OL‹®\PŽpbõº±ÞÄ©b"ÐSž÷€5v¿ÝaÕÚ©MK4ºqXàN˜Ü¢\'DQ]µEÈ:Øif“¢&¢…iBÎþ£ ¢€s`˰ÀÍDU)Ëä‹‚¹øÖ–“ÈmFD’òTK,N1s€“9Ü÷úHA}'–ÒÏr¼âFTÜiUP6ï?¾Û= œ2ñ1v‡ 0.³Ûízµ¿ÿïÙ]­’H̪oM€70©§A —S{¯bŒFƒ!²œsõ~egÓÖ´Å2$èz„ü »°»,Äu ,m¯ò•:Ê›Ý`Ý**ÜÝìÃìît¿\.¿ü×Ïè”*ñå“HA/€aÄ*ÉZ_ Ä6µfHc¾fŬ²Ëøã"x;7Äiþõrù¢ooïÚP©JºF9ӱ͑ŒÃרp‚ˆ›Á©¡( 9烆â¹½¼w±Çþp ÝZTÌ/vèl iºmS.h'h9Ï †ï’5®íë5Ä„Í-ÎMmìÞÞÞ£?ÿçO?ýó§üóAko1'½jP—£þÆF"xlšJàÞÙ*#h±…{8 e¾e>–Šï{.Ld]r˜™ûív³Û—kŽö ª¨6 ÚÝTq/sÆT¨dpÂî~ùriÖZkÚ¤ýÐ"ÑÉïI¶Š_Iî“9ù3ô86ˆC[ÙÅqêÉeÖ…Z%©"Ϭ‚–BñØi'ÈzÀ£OÁ>sOöàøu—vï©ÌÀÍŠon?g,œ¢”ÆT2 4aÿF‚¸‚ì«=»‘벫#y…WÝ|VIûõö2Z÷Y;ôm¾åd¼rw¾¤ÝF,½‡TrûU@QÄ‚Ì!âîÚ«[›`äêÆ$_&qìô0{"d³åãL{µý¶µR®>“lŸ×¾Ÿ»wzˆUâ³ÿÙýða¼~·Àœ¿ž ¼zL1èwø{û£mÏã€j¤å$‹Â p©"A÷놑D/ádí&ó²œöÖÒÊ®¢.‡Õ »_%;3[˜M÷H™#†Pà‘ ;œæ®*0ÔHÊ[ä:—¬!>wX—ªñ¯­bVG$û0+¤Å†Ô8Ž|ËâyÒ sRO-£à7ƒHjkMÃQ‚͈óí  *Òä†aFÆ`¸÷­Jûñ]#…8ƒýQÄÙM*¤¢ÕÆîè´î陨o<¯Hk­Ò;šŠ^¯Wô*ÑÖ  S©-„¯ƒv…¡ªªÎsÉ„7yœ¼_ ú2ÉöZ üùZÛSîHÝÖþ›‘…cA”¼Â*˜¦Ï‚²û9'—/l«`Ðs›&(ÈllÀî. Ð×%Ð(M”Pá®?Y°ÁHÖß¼uêip¬_”åý>µ‚Xs9PÃ×!·`’3â°€ÙSÌÕ¤ñX2%²ø€B½†úÈ*ŸÏð+vÈ|Î…±Ø›8ûAA¨¹DÄD¼â°´¤ vÝAö\À‚ `³!Ô.^˜à`§wJ¡èP't¡×„Ááv³ë×ÛùzC¬Ym€#SˆÁáÞs¶hU@¼2ªy_;T[Ù9÷rÉ\»ÓÇ~º¾Â“bšºKCÝ£”¯Æÿ•¥ËùyˆÉsÀœp·Ë—ËåËÅ̤ê[UT‘ö¦îþ|YÝãÏŸEÌŸãýóÛºë˜TÀ¨áÑy?£¸Rg¬ðñ*pÔðŠ$­@ÇŸÚ‘$½£u}‡kmR<V`õáz$ÅøØ­i¤÷‹'ôAIZµ´Ú$‚M¢¸ïäÈ$m‚(²G)ƒZ²½_Ùý)<,²º*%Í9¤°¶i²«;+<Æ_”Ô\€’æîYš/Nü2ÝÑhê¡cÏÍ6ˆþª:Ú ÷°gÄ;zÝ8:“ñ»(æ4‰Ü¥|Ñ­Í‘1j$•c«,¢eïN?þT Ü˜8ÄMÖgì2¹²Ûó½úó³—õüÙ¶q¬míïõ÷í7ýÊoÉþ¢œÏÿÓöjP?Ùî¢ùúó½ýkÛwø{{jÏ 5”3^z0ÓyHª êv8|«Ñ ]º9iÁghs]<ÉíÔX±¼…‡.N“ëÀ5ëýŠ eW‰¢­%à™Ö X–#©Ô:rÑ@÷ÊŠé2«h°™ Zgx)ªÈ‚ ÷Anfä:é ]…!¤*ÊÚZkz ãÒͼ; Z£ä TÛûßßßÞßA^?®v»µªÚÐZ$qANªE®_ofF3Ǭ ¯~å÷z·Ëår»š¥¦¨ƒÑV‰ò"f&€WÅ`ÖÔ-*U[kÒZ;µpE$‚Kªd&tíÒ±¶àõŸkYio\Ή1 ´ÍŠ/“ju š:äÁ¼r²wŸ6±³(V‰¨¨BóhKzög‚l‹J-þ·ƒ]2ÒlZÞs޺ϻ<ãAjçba/ô=úT2y)ŽX8ã9°=$¶Ã9èSA]yLK.¢œ½ A$‰ÒݳZ« 5ŒmjEžÂ¡•™•*@¨—=~!F€3ª±†s{€ŒyIz¿Å0 E$|Eö,,4­sYÕ¼MfGn;¡ÆeÔt¤“šX1»£B‡zu%R/j’—Ö†Ò¼óöõzùrðoÿñö±›­§©©—¦TxW¸g¤eY¢s3sss3»3©73rÿèÁG¼æ™ýUv¾ß Êî´È-3…À»›ÇþÕžÌÌ莂֚¨Dò3ÐbçöcLPøM<ùtŸIm2ÛI8Ù:…ˆ’BxÈDƒ·þ˜òR‚X}<Ä~'ÊñØ6ïw•ÎöÎÀYb D×{ª½*ȹ\ÈIcް)»ç'¢|}kMfF´gÎywë\K‹|fÚ˜‹hà3[æS§\·õV%²`«>Ì5Cââ1±<žE&ÜW„ݑ}½Æä+Jº¦R@H¤þBô!_ÔȰ8»°‹³µTޤ¡ëtwCºf£`Úä¾÷¢JfW¹x0žB| e}hº¯õ"pºu㬜*³Øä ÷O§|xâÝV²¤ðØãȬ¥÷‹Í’ DLËjl)?ë]V}yaÙ}oª=¾k|>—ÿBý½ýõí»ü½ý¾¶º8|.‹­‹ B@E 7ÞÍÖ°TMÍ­)àL‚´°8 ‘$¹]~ÑIŠõ<ÝŽ_df:€ÁYL2Yy Õ¶¨6e0Õ‹k' Ì!ÅAL>誻ú±ƒ^!aU‹B¤Ñ¥ Z³€ˆ ]çyÛé3u“ãvã–µõþþŽߤª¶¨Ù«Q RôÎëð y7¦ ‘¶“à„tA‹hÐN¢ŠvÖ¦ T %ª€"¯ö<*†5m@À "Nxgd÷h'°6§ÇèÙÇMŠàD-âƒ(~¨H;7Ñõ*ïÅ.l̽}95WþXÛçt=džãß ÓÊ‚Ñüò’A€ÜDn*)E:¼:Ž¢ÜÈŸJï:·.IÓtQ­f]".²n‹¬"»™> ÓD™ª<›pØ ™÷¢§VS¤OØul?\Zöᆆ³86cº¾3ëÏ“‰·ëO"9D…Fw´&UÀ ï@Š ¯Z™¸l¼Ço>[{OxüÅÆðLƒ¿Ãº£ï$fKªH1¡•Þ=êK ”ÅsþRŒ÷T½òA@#O;æö,ߪv÷ Aª€î×/7)¿ðôH‹Œm€¶VUÝ,±÷’ºPZ[úÓö1"ýœ 4ª }‹6rdOMZŒµ˜3ûïÏCzü\67AÀœŠài>`v½ÞܲUms5#ïÞZ{†%‹ŠÉî³KùèXÿ&þ o!ôÞ܇›{;»]Þï+I”-Â%ãà:¡ö蟳Awth—E"Õ*[Ñ€y²GH¢ÄTm>ø<õ2éÐ"RUO‰01<Ö:d¼G’Žº¢Í½ˆÕ%ŽÈ9ùw@mŒÉd"HxéH² ¤µLW.‚ÁPu…€c3›âgºE+f@aîü“ «Ws»ÝŒæì“‡¹Rêœ uKÞÞ_|¡MàÞN9±u²ŠÇ]D \ÞqÐúžQñš@±0C»‡xÐ rP)g×[Ìe»WæÎά紗Í+P“«¬»™yœKxÞ o½÷x}›½kWÏBÊ2ö^¿#2½‘Úc›!þÿÎõÝ/ÈÿaïÚµInì…A  Õ-‹Õ–$k$S–dîZúµý}‰v½õvƓפÕÝ‹Ö"2’¬ê—úÌÑž­0úQ•LfÆÀ½¸øÞ`ù¯ÐV¤ý‹¨õ‹l/k«Å«gükµWøµýÍBþ@VÚ´®6²»€Ê3*­P~ÆH´›™©›š9Üôj HtŒ.‚së¦aŸ!4Â=ÈÙ•ˆbÞÁRu Ä…i&Õq×.éЖ©»Ï@ž¿x¿{ßf^ì2ža4Ž;ÿ‘LŠ ^²'ž¶Ë<¢f–BV‹½ØrwX$@7¸p¥\|ë»v3‚Æ£nÖZ†æ Cuy¢ùd ú õª]ÍøŸ Þ¾2§¶3„º{ ÇÃú4¨f©³{o-¼ß’;W‰!°æz>ÿò3—Ÿ©þÃOoÇÓé§ß¿{÷»ŸäÈQN'0‘9Ô\og&’7B‡Ø0Ýæ¸wG!ëîÍìævSw§JCû'˜O ˜Å)÷z†°9+xM‡mÔ¶y¸:yè5wÓËÇëõÃù|>{7aMltN’œ{„2¼ßñRÞ¿ÊÈ~Æ-NK}[_~sUÕ›£Ff Ýñ2Æ€y"Š32¶óûØÉ ínÔ!C®)eœ¢·;¸¸g…XÛ)žk\(T¨Jòœx3½™šj‹ÚÌt€} ?˜9o–T¥ÎEWI*Óy©ÙžÁâ…ÊKÄ$"g,¼_ ns. ³æªÂi¬äpÃH¹// ‚Æc¨g”Ðr#5"°å 5©aéšÎÐÛÜ·wy­;£;o„ê1K—[}i‚”ôr5RåošŠÜ…–ØÆ·µûuò|wÌñÏÅ’¶öMŒâïoþÿpä"°ÛaŸ aܵ±_ UŽö¯ŸøWißIÞ¹o¯ðkûêÖaì<å[ǼÛ8s÷w€(]²àºis>Š[IJñù¡6ém”š¼š9FùÇ gÜÒ»….àh[­Ña+ë’G¡”AÙ|‚äqÑ<·(`œ2àÊAë2àúéjè°J<\sb‚¯qÙÂ5œÏç¼É¹L/ÍP‚ΧÞMõ¦ÜIäd §Â\Õ+4D#k,n\Nù¨ªÜo†›+Œª3È"fV³0.‡?Þo‡9NG‘€‘;®…‰å(1@#3©p¤P¦þŠ„lG·œDN"r # ¦ÃwÐÚ|³ÁÄzœ%ß×vb³D%ƒúÞ`“ÄK  Ÿ¡Ù˜ƒ¹8xã_+¶œ¾meè&JÓ¢>Œ»ÍT5à‘1ñÒX)œ[¯È @ŸicK»Ó¦&º7ØãŸ>´ÖÆ”ƒbÛE›÷kÓx7b‚ ‰A:íV—9ލ²ÜbXð„®(¡v6†ÁŒSœ8 ï†mûs€ípïýFj%|3'6œŸZ|ûT²»7ÊŸYÛ2–¥ŒÜÑŽaE2 ÜÏ7-vìTGãí›r‚yƒÞÜÔ®íCÿþgàþ.ôôÛ§§ßýôÇ?ýñ/þóéÝ©;¡;º£:©µõínYÍ J"±…Œî8$¥|ë®5ót²îÚ*døìjì°fìœdûf—zýp¾|TïFEÀË´—YžË$æo¥‡€G¾ßÍ}¾Uü;LU¯¯òFE$#Š”o=ö›ÿüú}¦£yR<¾ß>_üŠ(Vn¦î§b!šlê2pwÚMþeé1‘…ü§p‘wX‚üŒæÖÜof™†C[â}Äga¡¯;Iׄ!"0¶ñ؈¼Fæª1 •ù@œÕ€—¤Ñ³ž#BÉÀ/ 0£ùvŽ«ZsT(Á›Ž<<Ẕ+ß;lñÖÀ05¡êTŒ«"¾`[€Ä1¨½cÏ'ža÷x÷¨µ\Ÿ—JØ¿F>ÏV(8{l vŒ»6sS ™¼n`¹_Y»þyXˆ²w?\¾}ßìႇ›ço3d‡™\†¾yDo{M[}¡}M¯ŽyññÜ윱¼×öCÛ«üÚ¾µ {´¶ËÞ ãü`bšª’C Í<É̉+Âapƒ93”&xeò&cápXva ÍaFSï©•ED$DtÑ*zLf±¾4BËÂE¡ê[AÂÊB²»¬Mhú²±"ËH5 H¡Ái3Çâ~zz5 OQ+)äjJÀܤ™÷§ã aÀ+¹0ÜÑ Î¡ægÍ©[ uºY‡Tb°5 ^%è‡ë{ Iå0@rÌnQ†Ôþ3Ë£S_ʳ”­v E‡Þ” àw @,oOÇ7Ga TÙ抎¬{9ÏéìËm/ÿþ²mwVÑ#zïé‡vRÍòž¼b`,-)Ðy7<˜ˆýþçIŽÜ°fÖܺGJçF‰Œw÷¬¹Úy*/ZwÏpçñ§÷»]e@XÓà}^d÷ÙQaF}¦-1‚ê ²žóÿ>µo!~›#shoH³»JȰ;¹•Q»¸ÌÀÐXãQ—§Oüf¢Ý¼fµ=ѳ‘0‚`ù?ú}W*”˜„‚CKm,í Gê/oªrÓ"¤Ýݦó,áýû3£DJ¿œ~s¤Ê ’ÊzÓËå¢zýåçó壢§ƒ!oNÌÂ…­B°·9šcxÚ pTO'³òXï~õ+žmw¥žf.)…«Ÿ<Þ7µ‘“ƒà>‹ÉikTõz9_.o&•‰E„ êFu.ïé$z9‹0O-ñÄ­¿Ý°îr¿*¹Âˆpƒª]>^ŽoþVvŸq«úgùÅè+„nŸCW>‡ZûÁ¢¡¹q*‡Ýœgp‡€±+N°ÔÀè›”YŽ}(±9¨€C¬¡‚‰,X2”  ÃúÈ>5‰  RÎTóÜ 6œ3äböŠ;*Q%Ev…éHO-åÎäõZ¼Žô*#¸AÍUÍoª7ßèú¾R6 âñ}W3¥þ–ƒfqöÝ”\Ś˃&Vtcvšo\¶T—)ˆ‰õ1î¶—í³ùgD”æ /“ £U˜&Ü=¨@#‚nó<»aý÷ˆÈÛRPÚæ¡FIå3`[ïûhÜ XkÄ”ÝØœÞ¡×öumÆ“F+›ÊÙ3í1maÏ7ˉ:¢'ïånÑÌp\³KÍͤåm(Åv\ƒ#¢Y·«ø™kÄ[­Ùˆ1ÉòÁqÛøÉVˆÏƒÍIN‡;Âéhâ‹}¾Ôò¾Ó)Îϲl®Ó{,ŒBîîÍ£ø_SÛè7X¯Ÿl[H×2¹w6œý·z•@ÆEŸŽ—·ûgé/Ò°_ø‚¯å¯®ûþ2(––‹¢gˆddèwø—;yÙ¾æò—¿sÞÿj¼éÏœ5cËã»{õ›üßÖ²‹¾ÃþÖÎ}¥Iü_ksVï8RPÂQ„”u¢x†ªßÜoJˆ:%n"Ãa5l&¸Á™AT¡7 LÕ+˜À6U–Kì¦B ïPÕ0j­[s ã*‘¥)…ÐÐ…É› qä{žÙÖ3¶í#Šú„ª ·ˆÊ[ô@ÔÅ]n†îÌ‚CV‘ÃàÝ;ã ¦ª–©G˜?Õh»Qªá“«ÈS}"ýxÖ㑪°0 seïgÜLЫÌ¢î,rz{ŒGV½¨*öfh€W¶›ØÜ¸3*Ñ[>¡à§Hâ­œgvÃù|=¿?‹Èù½*õHUä°°Dõ‚î;ÉéøöxúÍIŽÂ¨„¦aþ21³€¥læˆ7¯ûاTå@Ë@ñ½±5ÞÌqe IÚ¡;qa³͈EÜ2ƒ7µ’5@ݦ´UCÔvÞ )^3µNŒ·æ¤ 0WBtÚ<›Îa$z3ÉÒÖ®LXÄ€¦ÁÌÁ æåéß)ü“ì°4×|:é—¾†û–ÝùXш¼0>;[×éØ[c„'ÖrŒ|èrlG²:ЕÁ&t€0;]-ž¢ðDN²R×Ò¢ºmþùzÁF¸7sg\i–Ö3u¨q‰;ˆ³¦wöUCTÀŽ }öF!ª±ÔaSÞ2ñ1ŒŽÁ1©ŒþðÛwf®7CdÔqL·°;5Snêªÿõß?SýÛ_ÿí¯üï,o±ä rà%Á;3iÍÜoNÄÅ¥Ü=¼kÆ€UùC¶„QÂìµÑQ+Û™ M®x¬-ƒà öAí¦ÞCÖÌoªê×ËU?^á‰2ÑŒnqàN™69< «íÆ•AR…µs|ñWU¹ŒÚr3¤(%¥¿™ªÀ®W5UB˜À¬ˆ›NÀK›Ò£¡&aPBÖÐLøë¿I„·—Z·°gJÇØȨMøÀPxÚDªÄm%âb°ªûpM3"Lì3’ov–úÿÕfÖ%E2¿£>ª*´;ºdeµDt;¸@;àD`K¥yòô IDATý_ö®žÉ‘Ç>X¤,@V×XÒX{î™gíš÷—×ÚqϺo¼.Y[m °DZX “©RU÷ÌMoìÅ£CÑ¥L&“Iâx"¡ØÌšsTSKï‡.ØäE§É^ˆº´a"ÀKøO]¿\õzYuX©&#€{T®3g46/3‘kº’ [7rw0³îèfÆRª$]v> ÆFžJ•A¾¥eNv4<ÕáT„@ÚœÃMBeî²~ 8ò µæ @ ÃÈ÷ÇàPd û¸/fD3[ =d¯ ,õ•ódÌñÀÞq_¸ÅÖæ`Œí‰†Ë8æsÙûôM`}ŸF1î~½K`tK!ßßÜ|;Ñöújûò“ûmé®·ï"”µ+1aÜ‚ñú›ÚŠm‡×?Ó®àõ}¾ƒ¼”/xÐÃDzŒ‘·([ûýpúѹßþȽÎ_-Ï8î¡0ÆíÛÿÊ+3`´ß:Û&d>µ|ó#üÑöíáÌZ\81;yÜ¥5µƒŠ›é01«¤:Ð!ŸdÛ´zðH¨ˆoÝ©‡Q›˜A®*TÁQuƒ£kÔ)…îzU9hœ‘ÀÐd^2"êæ!ñù½§Cdõ€¢.+F€7-ì”ê„máÞ Wåk j\ù®žä6†”‹;å/R}+`c±Jt7·„‰˜ˆfi “°ØU©™~Ѹ3vs¸ŽŒSµëõú÷ëåå…=HÀM 3y• £‡ Æ”( ©Ì‚ã'·v<©z;ZWå@Js 7„Y>‰|ÄT'p™¤u¶<è,¯ë;_ ]EŸ­­ï¥ ‰P˜›*Eš+ »ÕW1ÜÙŠQÑ™qîÍ ¼Ìù4ø:ò°! £‰õ™qÔ}<ŽA࡜Á«IG¦‘7(ÖðWfÁº•eÜo ßîë¶½ ¾ú´2‡XøuÖfRb ç9T#³ð2Ÿ¦]§ WኰHÈ£­xO¾ß@'`°´d‚oî¶›w³!o íhÒ[¬›÷pRPDfZ†â½Ã*s'rÜöìXŠef_ g —Q:˜6çUænÞb¡0ïkvpЏziÃèøé¯SU5ûËÿåü§ófQô_pn®-‰\@…¸Ž§µO öªíJÄŠO ²Ž|fœÐ^5ò ¢ØžÃÌÕojêúåbÙ +(â¹ D©ì‡VcÜàdÜRñ^÷üÕ¿³áòç«$’®Íí¦ÇhÁÐØiy~S((Îõ–KˆÉÏ@&Læ›+$zc}Z£ˆsBv ¸ªQ óJ÷ðImð ÅTj6%°.,|¬™*aÆqŒ’yµsÝèãŠ|RL$[æªm£ÓnÙ-fÃÏ-Ù{8®Â5‰t<P°ŽcuÝK<Üëî\C)·ŒâùžëÃRn¤Q MààÝ™S, [føHcÙÎDû)±tpSžÛD:ÙF=±ðGÇygW°×0&<ÂQ™Y½Çoç¨Üã›Èg¡ò°+¾p·ƒlFÑëOmQ+|»å¾óúƒ€^_ݽ¿ŠYrCþ8÷Vûƒ¢¾¿/Ðg0^¥Ý‹O¿ßVF¦aè/®‚ïÝè×ÿí´][YîÛ£IÍ)+¢zy¹øU‡v¥r…upÅñé$Odzˆ5ö½^?Ø0Oý–zã´±ÉðéHTùt:Ò!•qê@\ôvQu½©5ã ª,0¿¹™Rd8øN °V»…¹FmÈ2PˆmèµÞ Ý-dTFN Ö gþpËêPˆÜÉfI¨«"öéÅïk4äF%ÀKlÕbÍ J-*gQåÄr€‹ëAÔÌ›‹ÃÔÀd†ˆÀÏ…_ËqmÓ{¶I‹½£»ç@3!9·F±›5s‡5 r¾\./W½^àJ)èÄ(LÛ)æIƳßóÙ_÷‘¯Èoû쀠éõrýB"ÞØ¡œÎãO5x·÷Áðvëû¸Þ¯nÀÁôë@_¤8 d!ÃÇY¤SqÅÊVÄe$Î ÏwîèYßÂ’æ”öâ°'|äS¡D WÖ¢ˆ"ÕäR=«ãNW: {kœãÅä—±ANf]G\6ßmÞP¨móüÚ7bŒ ¶ËL6–b]ð-»Ïy–7çƒá ª‹ ÐAÄÚ´¸<Ü…w#½ûÞXm6s™;¬DŽÃ6H@˜ŒžOÇ€[Ö)yy¸f@@Ä £™=#í㘇B ÇAÑÆl •LøŒ`)nnUÆ€âqQqí•©B`è¢XgVÕŸÿçgT2ÇŸÿë?Ï:£fÚˆì²ùuˆˆ˜êÈW½R¶öȪÀ¸Ñà™™ž‘™g0[Æ» p÷›Zƒ7õ–àp#ªª¾\ô‹&a„ѺØ4½ñ$¬Yg6Ã’Ù¾-gj\`›œvÐçš^_®—ã ªœjCíÚ_‡e¶åI $lY°jA¿ù@>°2ýmÃ2`*ò qj³¨T5 ¹¹Ç#ßAÅ|)(@– ~rdß] ¡ìCà´ýgÅcù61ÕQÅ8ÅíFN8úzÃŒ×5a²ŽƒÕØmtƒ#h2ÉÍ®ÄD:”8¼K÷ƒLÛc†S§±›5ˆK€:&-~ú2p#ê·3úàãŒAóŠ-À=Ç¥¾Ç+c@i¬Éy¨©Í¾~mÆá7Šk`ê÷³Çñ@pxNÀe˜ k¨V œ5Žè¾®ö£î×Ýt”ó}Wð ›ï÷jŠ4½§|ÿS›wx÷Ô«÷wÌ÷ÀoÒnVlÿ­þ»×ö€?Ú®- ªíÙÉ´ºÙÊx vSo°›[ ™_:UA§_~ý|½^>«Òá³09š‰£"rþá|<<Açíè…¨rÀªµY3tõÆ (ªúåj¦çÂ6åîN±çù©R¨Ô&›Œ€In qðç_¦q•­Ä€ÓQP˜I´s§&’¹^ž"Œ%F 3‘ŸC g@x#`Xepá¡;J¬ j¦7 5çæañ‡ê£5xwa¡$>Et1„ €"‡¨‚ÊÖœ TÕ³:nl¤±»Ìs ›ƒ­(,…Â"Ô«èËÕÜÜ _ôø$a‡NF"LMãN ÍO<´D¦wÃ(Ãa¿´$cŒÔÝGàÌ9Gnã> ¢…™ÌªpU%6w‰aÏäÕ¥mž©ÕÚ½aßäô¬$¼‰ÓÎäJxà* „Œ«*rÏ+Lëe†Õâæ‹Kñb^ïŒ|.ѤyœBäîm3R7£­?ÜY#bóà£Í)ÝÌx¦t`&âLèe7-`7í¥‰y°øïzá ñü؇@QÖ#Ÿ3³zº¯˜¶ÁàîfÍìæ™CÉŽZºouh¼2æ`:{ëú«h1‚áèÆc’IÈìÀ$˜T¦JYÿ¯8ºQ%ªrQÕ¿þ„æ| ã“0 *¡GB~~#Æ»ÒÚcÊ…Ä.¶¹±3 ³(§"[e/ê;{—u73§ææææ‘œÙáÍÌ\ÍÝAÃ'å9à bè™qÍ0T °%OÏiäŸó«Ú£¶²–g7)g}~³ËË…*˜ID¤°¼Ü=¸ßܦ±xgûÆÊI´›ukog[ bÍ7o®0êàæúð§;1pˆdÂ̓3uX7s˜[$WóòÑÖÿ×Ã]ÆÛw íʼnH˜syÏhævê­ þ:ñâ«J€Þ°hd(8<°ñôáN¾n‰gdaÿ®µÓÒÍaDÀd^ÜlŽ%…23%º:Ì–î Ëê[”¢évx…s¦2ó[àÃFU3ÞòÌ;<‹€’U2}Ü6Fn·ºîý<ùÎã¹;'ÒÒ‹ÙG)+ÓœX¾€‰-ú%Äýø,ßÄ~§}oÐø-€üÁ(½Û^%EíÎõ¹¢×÷ò»cÐßG¾þhK˜í÷þvß¾~ãîÇê´]ãG€÷ð®â2À¼©™²»vÀM˜TîÞU[$™7gB !"€3¡Ú,ŒUª" ±/éM±“æ—¿ëõùùúrÉì8B V'¸B É“œOGªœñŸæÔT=L(¡rSij.3Á -IiØ‘)W踟žÀçC>ñm`,z5J€¦v¨8Ç…#℞Îo‹=µÃ5½¾\™`<Š0L›ÛMÝ,‹9‹p:ˆI*›»ëÕõb7g!9ˆ<ÉñxN5ȪH›YR¶cŒèc*cŒ&9E? Œ šôæƒSêd„Ía7À!´(7âê›…ô-KÛîp»3Eȶ;âΰ­¡'¹1NZ™«jaà:z5¾ˆ9—v?ÌŸ‡T.mØcýX³¨©„Ì#…!˜¼]ë4ø Ø¡Ä\ôrIòèH °0£Fq 1í lÞíÄèwï6c=T†i‚‰ä ¹ÒjBqø/RÁ13¥Wë“âoí>ߟ\* ÀLò)UtÅÐ VC¤F÷Ñ,ðˆš:@pëÄÅ0BúðM¢lÞAãñsÈ”zqzV‹Í²d$Ö­¹s'+éóeÐÖÀãv½}YÒ·2x³LjöwÌÀ¬Á¸ !fb>05ýå×_~üßÏO§óœåéÈL(bÝÑÀ•¬'Êõæ6Ñoƒµëz³,^zæ¸.7sBrHpÐôGôЕ1oš¯‰M0¬š.Țƈ%ËØ@ÒaÄ’ÕòÇÅÆo:8¡Î¾Êò#(¹¶wL9¬æú¬ª× ."Ç' Å Úü¨j·[|ö{Y†ú^å×&¯ð,îàþö®^Mr×D¤" ¢GUŽönätÓ}?²ÁŽîÝhª"OGDEFØ %UW÷üܱ¯÷~ͯ¿šiµJ¢(Šp0å”Ï.hCK"n0 ] ZŸôÝûeïýÂÝoãl#‹!ª$µj&TÓFÍhv°`Ÿ´ñó îfîYå}I ¿ŒÒb0•|uéÜ—rfÿtSk¶=7€ÁDlÝ æ®:QŸÖÅ\{†g^R";«pù£;XÖc{«Êí^zÞhï)Köêô¤ð$™RM*W%kñølv¼GérQY·ì'dÚîa‡ˆ,”1ðóø»˜×8YÙaÈÞGmª»–ÝšÁ7µÏ=Â_Ñ:áeÜê-„ó{´ë»{7ÿÿK·/íâ¬Wüç¶wø½½Úö¶ËþÉ›Œ#€/pašì §Ëog½EJ©¥’seª@'.L ‰ÈQDžŽ"‚…ø&ÖT›qwT ÝÍÔ#nIPm¼¡ S3Tq ÝМò$²ðét:NTá7A‡Ý” ¼ KZ’XhnÞR3·´,ÞàÂ;ëß:ÄMT‰§²ÌUàn"Gª£NI}`…Â`Mµ…Ž´¡ 4cxƒª^ž¯´0*1±‚ôYUÕ€¡ŸdT ¤2`׋ž?žõY¯Ï–± ˜¼ pº;ó!ýêî"¾ÇT(¤)©°Tœþvâ UÕ›êAÌ]fæ,ü˦–É¡r/=3§xî<±7çÙW\'SúaÆQEC ƒt–åˆù“»L§wÐkQ&zc+â·ÚOà s/á\)R¿µ{4]>W\iHìØ¨!ÝHÞ0sϰ/†+ŠazŸšÆÍ3ÎólÁI¤‘xˆ¹„¦k\'{QÐCÝœ'¾OöÚ@FÞ¡d¢z:„*!ü¥`f¦1J÷üÚö·Ì-–;rGƒuÛ„¢^ÆRÒrâ¾Y—úZ™ÝyU‘Ф„5àRÛLü ásÌö]#`-Œ1h„‰wy7rÆÂDäîÖLÕ½æÎÿr ëéMÃÁ`°ªÿúÛ¯r½éÿñøáˆJ\HoŠî(©k¸EY&âÂWº¾ÍÝHŽxÇ.3ØûÜy”MбrkîËI•0]HÓ›¢€œ=„¾2¬ÃùEߢ1|¾éÍð;¶7î¡ñüÀR‹`åÝÆÂÜaÕb¾)o›•Û½ŒÊ‰ÝŽÈģΓdŦ¼¶¾é›50ñô¦ö×õ»cY˜¨M<…I†  Âf wÖõéÀ’DÖÀÔ­4à°)@µÖó=ø²OÊ«­Áœ1–ÓmkZT!¢g 7Í屿K…g0ò‘L¡pá}Dî<(0„·;Ð à=MÊÄLNY—1¦ÐˆÞžÓ¼¯K"˜ˆjˆ5:7ݼîÇ$†Î±%™Ü¦ÌX5pMîÆk-(]»r:&?£^3(™A„1ò¼—»çÍýµÕƒ-s4î¹v„WlwÉ¢3âS^5Šøiá{ùÍÞÞvf޶ƒ¹íðíÞþžÎéË®€ðx“_Þõ—Ã>ûgœñÿaû·YBßà÷ö¸ÍõfM­¹ûó@–P˜šS¹r)Ipùp”›ª*ž]»R#¯N•ŽÂ‡EäID"Ì‹„b“µ‹‡YF*•@Ì0¯lMQ˜‰Ìá7»~ºœÏ—Ëå*"\(Äý£Ÿ,t<ˆˆŽÇÓñHDÞÔšÓ-( & W¦EFf‘!À“Â0ÐÎéÊ¢ÖómÍ‹¡ Õ¨„¤hC­ªï"OBAÒ+H ­tq hÓ¬ªBì¼J ‡ÛbëÍõæ1ÀT]peTòæ—ßÏ—ËÙݧÓé¿~:ýp:<‰D¨›¤-²(ã¤,€xVì a ‡_Ù¢,ðÓA¾^Õšê½~º„fOPĽ¹"Ðï±R÷¤ÍïÕ°i7aÊç|àÍ´zmõ^ëiæ¯9žòKÅ8¿º9û~êî6ÏõOõ-Ö>ûšœ âʼˆT¶…¸¹…@TåÍþ}Ø\;°ú½#6Oe„X|ÈAõñ3]Ïn¦qCù+ñ«‹~ðfcˆ'ÍD\ˆ†‚×:¤Óü*È¢Ë/îšœa"&®l®™›YnÌŽÕ×Ú‹O¬”ÅqÀ–ˆpC@©>"sŸ;$?íÅÃ(ß–L°f’ RÈô‹¦TX„æ’6Ü›¡Qä‰ qJF‰È•¢9,K*Ì Ó¬ënÖ7E¨mƒ©’ˆ1RU}ÖÈÞT»üòËåúûõãÿúÏŸÆ?øøÃá\0Á*ç·j‰Àƒª]Û6'EÄU6#*¸Ü=ñÆ 4lS^¢ŒÊÕáM­ Ô(³lIo§è>:ÚæÙý ì-ÛÅæ´äεîÔÔMÑ 8P…o\ »Cñžî®&uz)ïdó_®Q ä~ ,Ew„ðÑ ÐÁ…³¤ΆL %ŠÂ­%DœÝ E'o“lDñÉsGÃ#49Ãyö=Á›€`Z5Cw®Ä KÀ¿%Ó¼iÆúýØLŸì†ÅIT Á*ˆ…‚‚}e:MŽïC+ÉE‡ pK=dŒqØà©AKAatGÍ` QÎ…n¶A°:›‰îÓ…š±¤7Fb}&öbé[/tu’±Ø5„°n['âg1ÏàeˆÐ øîªè†a?Ûþà|Gû»µB<=ýÿmçæþ?¿‘õöîkû2ƒþÛÛ(z¼ùû`*ëÎeè¯<ë9x¶Ái4 OrøáÄO2MW.ð…A3ëŒfÂ$ÂL¸º©9ð‰O?"Â$Z˜ ¡2*,lvƒ«9H¡zK n8~µóåz>_UÕ(7óæRq|’Óéôãß~â ‹*…áÆÎxò„\qU ¯Œ·¯[ kRY CXÃ[a’0Ïýãå¦ìÊ É¡E☲*K%ÔPÜu4óî—a9_ŸUÕ´¹_YHQUu'7obz9ˆè-Ìh ì( 3òîÚ.èþñª—ç 3ÑrškW²îÌéâªìÝ+Îa'®À¨'‡™HßÌM#÷u]oïÂñŸ>Ì…¼á|>‡8×Té§J¨‘«ïYÙÐÉ£!ÏfnhHö‚Ñ=Gg# X¤*hÓœN€hø¥kËÄ$<;¢„[7Íé'ÊÍ,$ú¢XÄ>ÜÐRk@F…6uS"RU¿„ ò‰5LcŒÝô0Ošk£h¸‚"t8žÐ5QÛ¼5*ÁÝ[xºÖ¼‚×ÛUÕ­)ƒ„…ôwWu‰3Wyæ2ÂB1CÒßv6Î2<ëùQ%.b›ëE%)È•­E ;UÓÑÓe¦\‘‰g–E òÊÖàîìñJkæx1bsx+s%»9š»C¢'9ÿë¬W=ŸÏd¡(¿ì®´È>¿fëÖòü}»GÊX”.¤üš­:s››8rLr0ËúÔ‡KVGÞQ ‚wn¡5|²s÷³êa[/Á‚$2=´dó®E©¹‹'Fs5võm/޲¦¥mBÜwÚµ0²+qUR¶ÜDºà)7uÎ؉ÚEÞ=ч ÅçD«Hìú®ÿ IDAT&íš…Î(eND3OOC V<+™ÍY׌µé:á ¡‡£Óù_ûŸ§ÓING€´!$¦# F°(mƒO4×½ðö¾ b2Ä¥/Hõ22JÜ‚‰]Èšƒ4j EO½¹ª^?]ÃW9Ò”¥¶æÔ¥ÍçëmgèLÐ*<éX¥b0½»aÐb¡´ÙÎƒÔ jªza¢2wÛeWîhÛ«I]^G@„ ¨È®h-Ñæ #'ºÍIÎî"²dx%gE(>tËž#·CždǸF"Dä$ÖÜݶ¤\¡\gB§ÞÞìþ–¤0¢ºa½£¯z>†1©ª‡㦰öÞ'*›ß‹ÓZpâˆú¡¬þ‰¥,Ö8fÁPØ×Þ’§ÔìÏ–Bì›O j›÷Aø'Ø–Q<(Nc©3‹ÀæÓå¦xü_k$òn‘VŠÔ[ÅJ,h›ÄìuÐ6èñ#gåáů»=¦PÙºLÍ÷ËH'ŽwOÁí·Ù¡þê/ߣ}þ%ó—hÄîÂC5b‘ûmïÑ6!ºû2øBÛz¿£½;Àïmßúø$‹bÖ C¼ÊÀì@ƒu¥.©Ü`-á¬ünxÎnT 1óáp8~8Š0qe–UŒ*P *à­ÌW¦BBŒJÚÔôYÏ—ëõ“êÍA Nng ¹*WbJ0'…s³ ]Ce„pN^B’»u¢YF‹Ä;µÁã‡X9‰jƒìšÆ]$þ­F†… °Wøïì0íË âɈœ4ä‘eQŒ8÷@tE¿e-±EùÊ£H­ãév©dmg º€ËI[cR­v¡ LøŽ¡ßÂEZá]¥zêêBÕáùìL¢¡«Ô¤e×D#SP ÜÜ¥ˆBqÂY[û·sûÔ¢°33Ó±¤îWµ³IïrÂhJñ}}gdÉH¥‹C—c*E5<Œ v58&¯L€”ƒž*¬ïÓ“/ äþr{gEä,MNÕJë–·Þ—{ø!rŒ2Ù…â*;{rà‡›E¤’!œLÚs 옵ÒÛ©ù¤3éJ¾dqw$8º ÍOa6¯RÀÂ@é‘ÀVxÀ9_IH,Ø9FáÈõÜuÿg$RN@§uJ§Îyöæl]Y=È›x¬*|ª£n-¢ Ëd;gì÷-åÐ@ÕnHjjÈ2ãཇ˜V‡wy§C¼²Ae>쎛,ësËïQ–ÏIÀüïŸ~ÿ‡?~ùòåóg ŠÖF3ïÔ5e³‰‘J¥Þ êføŠ¢«- fì¬UPÕÍí:™#3{â©€¤–@½›ýj—oûÕΟ€ÚâLÁøõ±Mç Éeö_á`èó=@8o¾þŽ|½{» <9÷’i/‚æfv¡ŸqÊ¢YOXlÖe¼X.î§ßŒ¢mLôpFL¯…" Ñ ÛÙ!Å}¨hÊ,þ¿I¢mK Ð.(©öNQ3ï±nØU”#-„³ 8Q6D704Þ$)åÏŒP¿˜ä¬ý;Vðá­Â{ó›ù­µãQÎÏÛ_9«ŒÅ2KÚ͇êëÍŽÊ‘î sЗ6ò}ð 2@Wþ5¯­¼Ë™î1àÚÚæZCÍ1£ß<.B¿‚%Æv'"“4J²+cßJ#D–Ïà‘*E³É3·ÄĻ͎O»ÀëXhnŸˆ »ãQ€(àÖAà]ˆµoÎÄ»6xßÅâYí7ºnÿ‰6_ÛIõÿcw¼÷/Ø6N·¶à|±½ƒïý,¶$ïÿ{w¯Ûlã~ìø‡=Ùš½Éd¸Ü.š^á@ëÝQ%8̤)£‚  ¡Uyb;IÀNðÆk¿^‹µªVÙN¢R¢´K”/°›é€“°ë~5š9;9Ü‹*Cž„±‹7ÕÏÚÚIÓὯ£Ð¨6œ Ðì¹”9umW“%€ž‚kª¨î®ZÝ»j©hÕ¬Ý'Ü ¢é"ªQTt€Rm¸R­úDZÉDê½4©h¢Ð'Öw·oM[“/ç/¨YÔ´ImîéRé´qyl‹’ã0Ÿi™Ø &¨ðq'’¼ç*"Ú”&z9iÓæƒR=bAçP¯ht €ÿÕûÄÜu÷ôçANû«-ÂÄ“¢Éì›ÝzQï®`Ü5E¤€EuxÒ™õrYiÃØ‘>(‰áA ÊŸÖ«‰ÈžD”)’bB:^o‘¨KäuL„¸C¼ªd¿â…kâ<„°›Ïþ·ªIØ }uD¢gز|¾xÖ³í€|²ÐË@ßSæ–ç‡îìâÈ\U K>{o¯ù«ÅgTž5ð¸e%IqÆ«Rò稯 f{¨[Y•Ñï®~¼ÐÐ~¸út¢ï3D," „ŒÆÑ,Ánºà NvÒ™5«5k”Y)çÏH˜05¼Oª›vÀ†ñÏúÃ}ùÏÿø½ê×vn¼“Ýœ2ý³äPÄ‹p­ ¤ª†v¼Ö¡Ef=û¯/èŒä0uÈ7·ëÅ6†-‡äì VfP÷‘=‰îçóg—7ÉH(<}2x7o-‚¨îÞÅnôÎóúSG`¼w¨8²òÖKßN=£P²aAŸ—w$°©| f ŒHòÖì0›™±Z>‰wêp/tRof7óvÊ)(â$’‚z&&  ¨âÉV5;„†ó>»shï†ú˜}2eór½‹1§î@4Äç5'˜´¦yž™·:°8 ìü‡"¼!¯ó~ Lб]òüŸ«?:ìw±å/^†¤^5²±òg²[Ö‡÷踧¹É&ÙáÞŽ~~É$_ ‚I´NÑ;2  ‘Ú r—d|¶Øwʾî9žÛY™äooýHKäõ ¿þ }G>÷;…Uò°`oóÏLúÿwöwÕ¾àíó1cüñL÷§Ù3>„<òþ¡ÉHvM{|÷x’ûÜ¥—y;Ò„ÿÂöýÆø‡½2Y_XA£ªˆ£)éÑÕÃÄCÙ%°ßèÎ'Š.:`b­¶hÓÙZkÚ`N3á@«4b9\­ ˜6 í|ÀoðîÞá„S£á-`É*r’¦Òjnâ&þ@åž„›ðÚŒ ²Sh²Ðjæ'uÊ}ôèü‰ØPïÛTd v®å>Iݱ ¤ªÐUp0œáE‘Ún±‰‡/}AÐéfîºÛùÜ>µö»&«‰b§Ý²ÐëNå";'íOôx”yÔ‘'V¸™èI!"E¥¨ ,<›¤ˆž´i(] UIóÔÊAØpƒ½ É?ÂSÏ3ôZ|ŠiI4 žµÊ¬ó-ªUý¦2)‚¼y”ã¦3°ˆ|Ò=b3£ §Kš7*5DéDu)ÔÇ) Âíš}ùù„¢¸B0Ô‹ÍØgôè$Ý7χtÂ$ïb=…GÓÇ]|K0(|Q‚ûÎ&L­1} |°Ýk 9ÉaÎÌCé,ŽEuPŸÞ‡‰=ÅÀsŒöã=k­W$6p×q÷Ñæiöž›ë„%c9/&+· ꩉ"1Çî7÷î-y}‚B2²+骴w@‹*ÔªX.¢£b8((Ä€öËåòóõëôº´Š1çOÀàNåpâ6{ÕHËèrß+¤ñ¡ð2ÜÝÜÍ܉‘¦Xdi0³ËåÚ‚M›î¢V¡ç·mQúèÑ[ë7ìÞ”,[Õ¶žùó½[9òÝ&&?Ÿù­hÈ•]¯—ö©µr€s5ÉÔ‰,öÊç"q̧-©Òjá@èZí‰Îů¡û6w";ì4DåÏŸâ`‹ÜD, è ^]k'“á/³•¸º°Óº°Ú¼‡ Xg8¥ù‰º0_ñ»]`ÿ{#Ò;ÞqÎΑɳF>nånVyT&¼"9¸’Å ½O<棳;`y†®ç½%ø<xg“gqÐ"2=$2ž>¶½]‚Càm¨?/)–™y9ÎçyÚ!¹ë=yØÛ7»#•ìd<RÞÙØ^ÚmÆÉ·4·{¬‡c;àƒ¯ø8ÊúnÆõŸ'{ùÝòîèïfkx]ñ»Ù]õÄzi˜ú(ÚÿØ&qý{“Ì8t°þj{*®úû忚½˜›?àöÞfĨCÛY¤ê¸Þ î‘Æ7íÆB™AWµ7/€§6D %E¡UÚ©M^t&×ꌶÁffR¡-T¦A€œ]md®é¼ `7ˆ:DëÄJV£I·ËÆŒág FlœÙºíÌ.Tˆ3ý¿V"u½2ðœêÁLº†â ï h:ÇŠB‡‘“ª.W×–ý<¤D¤¡.0ü|áÍ1hâŸ{‹›™¿9ݤ¨žŽÀF"j]`à+ˆ+±sÈH6ö¬ÀôîZTŠ´SFŒÁ¯”à Þ4Î>Ìž>ÔÒ|7cê¼ý^T1ÉùQ¥ qá nÝi·ÙA† ¦F«Â+lŠ \ãœ9ƃȖZ"UÛïÎZ”€Võ“«Pãt÷Q (A@ „t€>D‹G5]Ê6÷h…%ÑOuzQQUÈ`.¤³õ€½oY{ü_ªˆÌrÃÇ]ž:½YH,@(uïöTÈ—£7‘…ä E ÏÒ1T%¦y¦Ì½ÓyL±Ãk-¢Ü4´q•Ùã3¼žH¾ªŠD})œ}Ž^‘T1E@Üù ýÒ_Q°pÈÅÓ/ñ½rR¨kU)ÚbÙðE[(¡.ÛI­ó§?ûöõÛ×O_QÑ>5X|Q¹*6 ´ë -Ð_žôz©†’n7b¸™‘h¥EqµÝ<ÚƒKàÚÍìÛ·oß¾]Ý­ÕÆ ‘D;H¥½W&æö!¬Dp÷õ#àìe&Y6_4¿ë>O_"%ƒÉù¢ ö¢*n¤Û/—Ë¥ÏÖZÓÚ¼»Èñz}æÞ€Owc6³%`F¨Vsˆ†„uQŸƒ¬˜?ìF #:ɛ߲ §éT‚TÍÈ6ÕätË2Z‚ÃSÛ9#sf_¢AD® ‘£!ÀöÊ1| cïŽèh9ȇc™Áhû‡v°!ÖÐÑ`{ G ,`@ùEšH´‰gð#:3%bà딋ä,ë:¶”ÐoÛ±Eóå¼*Âcb&ok¾Càuø=c?cûÜò2ã´é}g`e®ª²‚¹MP…wé¹ÜbCíÁp΋;{¢^?ƒ•÷9wÜ¿ºN=öX-Ô:Ñ™{ûçÙØ.á{?{ðgÆ«_f}³ ǬŸÞÔ?¶9zÓëX'yzÂ?¢ß;{™úÿ°{{à,Í:CïÔâ"`6u…zßÜÕ,åEѦ0º\uw­-X|"*U›6Ô”k6'»Û¯f×köZè£DŽü§E»ùHîJ`P]!øö®^½‘äHFZU°²` ××ÒwÖéÌ{ ™òôlòäÝ3ìÜÊZyCXCZÈ´Pe…ŒÌê€äpVºo¾ÙrÝÕÕÕ™‘Ý `z§ÖÈeþ[`PP‹@"7¦ÈÚuySÖÄxU#ÅZàf3`²Ñ¢WÀÈÞ'.ήËcÏùiŒ7ïî½!óˆÖ2|‚›cÐA;Õ#jêì*Ä)ÄR›VH _â©;‚­ºé.ÛL¦n¤ûÌs3ºôaÒEªòjN´%ÔžÚN®+Â`o/Ü;»ŸÈýkþ#æ5N0çs m¢p’“ÐÁtºgl&[Ae¼†,4ÂnñöR—¸y2Ú@×ÞP“8ª%­b×r‚*Ù ¾Æ“U z77s³ !*(ZUTÒŒ„Œ'¯Vu·<Î !¼ŸŸ} |°j½¢ÌEnCm`MÝê PŠ0¹koâLò—ãX!š Ý–rS¤]×¢pFíóOFÀ ­&XE$zÚ±%_ Y (ïq)hâ ƒÖAR:‘«¿ŠÉ› Lªä†ONzG8¯øÈvÙÞ…³°¸àö|þë/?ÿøóc«zü᨟ZkÍ;Ñs#R mí%NéƒhÑ\®ŒŠx!:¼Ó®FwtJ45 çj =´fvy6»œÕƒ"^ïZƒA# °‘N.À\û•°ŒM¬D<¤ƒŠ°Î0ñC”îfÄ6¾=ÁM ‚"n@<4®†iSl‹û½ì²Ž9¿ž(z¬Ì(\Òi1ª×]* Òj^wiﬗ¸—+¤¨ô>ZôújYË1Þ ˜RV?¡î$½‡ˆÃÒȺ8\ADT!U£v&’â‰$@ç¯ñ´ØÝK)4('.@™,ë9'Û/¦ ß¼ÁnÊr§Ï×h]Iº ÕF‘xwúZ‚œ{ÿîN_ÿòÖ74×C÷· ãý·RVŠñí$ýˆèF)¾2B dÈkŸ;Ç€oý…ó¿fW"ŠŽt@gÁÅøxåý><îT5–ƒ¾™©eo_ÎZ˜T’®Ë·IÒú8Øtæîê³÷‡óöãb좎¯ ¯R>ˆÿÿ6ãµ``[ùUQLjÓÀæ·_Ku K÷ûøÆ±Ycßàõ±Åv·hnçwM÷igh’Ta¿ÚéØ@®î&Ýišï? UO­¡:]<¨¸òòËÏ846ÕÖD›…k-† zG«íÒ/Ÿÿöd/&ŸÿöäP}8q~¶§³ñjRUáJE˜OTuà±Jk'Õ÷ ,E_ 8‹mÛ3ͳœºSAÂaû¨¢ïô"ØÝÑV©­ ÈDµ:"¤ÍÀµ€-& éÈ'©Ñ*/fÇ‹¶Ö Î/çËÓ¯¦pGiÇOzz8¡ÀÌ¢¢,ô*W1óM¢H‹x}¤fX«9´Ï5`H…ÓÊÖÝìËE ¦¢an Tdã/U[Õè;JdxB.‘AÙdŒ ±“(´æ d2lsB¶›…L›5'2ýo ÑhÃ`AGn U!އ“Iv•p;Aø°èõMÁíQ¡M}@@‘6èÑ *» !d~ŽL¼uÁ€‰º¹ªMe×8x÷ÎÖšªø¬Ö«À‹ ”ÝÜ~%ºÓùÔ­5 b›†§ŸDsW‚ó.¦UUàU1܇£ˆ ²@àQ´%u`<4¤u €3HY#Çb²Þ¾b­pïÚ¤ŠªfÃ|&„ôAëÎÀD ÇOÁÛ\ÜÈ¢h-â^ç¢yÝ Òd ,‘ªÍR—`Ð;//fÏ·tÕ¢ÈIBÀ"2‘4 g‡ˆ£¨n±ßåE!â­"Zß¡l]Ðé@;àtjíÐìböll­[CJwVHÕ•v+@§„12B–Öç<ã&Ù‹›Žölÿó—?cøþø'ôJ <ã ¤Št°n@;fºÞØÝ¤å…RƒY$ÀRtН*ýÖ)p¿âòb—/{¾„2³õM"º¨m €Ôƒ(&¿ (¦!ƒ¼\,%ìL ÈŠ´Ç¢pF~ë¡äßÒÕ©Í Qää#Zp™¿Hê9»@áÿ¤z¥Á¼ÃÍhÎî@;=œÎ/gë–ŠVäŒS×xÜ K5øbÝ"ÒHx7½Çƒöbèîu O¥¶èûÕlæ.ÒZÊO´ÁÖÄ\œ&/@7Èü[DjSm…¸Î=Á¨hu:öÅbqäcä rh­5-b/B<%›E\jMb"-’<Èå^С.EºI’®”iGÕcÞY¬˜–3Muww³Î´Ëȱ-…fWÑs'fÆÁ(š0÷ñébŠŽªÙÞýØz;­ryÞÁÃâ—®é}N櫨‘ÒfÍ$åEâ0œhpè2NVŽé±anŽB„eZ÷VO5³x$´OÇóåBw‘5e_xËYÛçF¹¯Éª,žØ7C°¨¹-•ù$df:ÛÇ+ÊáR²E‹NC…®eˆƒoæ¯ËÉlrê˜ÀxýZ,u@HhQ £Š×ÔI€$r›âÃöÅËaîËoµC{ÇB{«9æîÝä^å$ö«µ!bÿ+yqˆärlO_v_*¹Ÿû¥âˆ›Ä?ÜýÞ]=:LJ­‰ÿ¡±“G)ßøï]ñW1Œu|O€ÿ]Çf÷Z«lû÷DQòÙŸ\ÐàkµTÅ¿BœNI Ñ >„EΦ ‰TºánSg›¤‡,MF- . l…M6V®PÚÍ)ʱ2Á  “êAT]1†TÐA•ÐN‹‚IŸÀ]d†ì!óOhî™%úê0±@q<àÃÛfóæïŒIS3¾Ùàp@Æ÷vµTèéLà*ÃA “C_œPÔ»M‰»µA$/±¸hUÚ‰¨xO²¥‘‚dI”íAª–?&ÿy¶8†È3fO#9å¸M-`=°j°a“™÷øzO™atQi ·Ä^[©3übè¤Éç_>ÿü¿?|Ô*¨ ;¯£nµ—u&—Ø…0c÷ pêaND4Æ/8vÐÈC«¯»œ÷õ&[AÙÇZÛ€£,WkÄlcäʸhU—ú3y¶Ùy‹e¿% °¸L¾€bÃ;-P [òA ˜Ó¯<öÉôI‹Ú[€ì~0- 4VŽŠzu…ºY®ÕY‘2eÀc¤4µˆMl {ت k4ª˜9ƒÈ­»”ôeµQ`Zª°å®)Mæ^4ˆ¶¢^‡_ÍÍx¥š6TW [wmOwÌŸHˆx‰N/ë¬Í…íÂzqe{Ùñ}¹írŸèÔXVÀéî úÀf‰ÁÀŠƒÏ{?®ãº8òÇï Ð7C³/w·¥%PêD`¥@’µQ€¥jœ/Ênß™kœûú&CÏÚk¿†ñ„ØdE+‡Î•¼ªe3È+PæF±ÿ ™'¸ñ&šêÜ‚"Òs¡3ïþ>}/ûÕÛX諹èŠ`¼•ÇÜóq> ì`øo÷¡×?qÜÀ×Y¡x÷A{—ÀFÑè•ñÚ¹²¼5i(øÐøµ É¿íø†àæ{ü¯>öÛÊMìºùNf²6Šâˆr&Œý à̇bT"ƒ+’­qæ\Bëv13'~híSkG ´ZktÖ%ì!p¾þÕ ‚ªVH«‚ª:„ôªõLB|,‡ê4N¶¬ò®›úí­ðê­ñêλlÐ7S&“ê9&±j,µÄøXÑH, “ ÅyD”B鮓(µõo afþbOŸŸÎOO$?O§ÇÿøñôÐDšv·@ª ¼¶àÐÒ=°øpˆ¢›_ ŒF_õ`ТЖpΑ„|:jEk§ã±"EÏÐA)ß©] IDATg»šÉ0_PYd£Ô7ì:»±/(àµÊmü‰x×<<"`R@[¥Wø‹³›@y5{I%!zd€NƒZkÉÅ­@;c©ç’+²`¡šÅZËÒ€Š FTâÞ³ükf¢…V!UÒ.´N†u³=ØÀá¾§ÐïŸÀW9·¡8̨gl ÚÃáNX7Z]#Öe.íõÊ«Ÿ¶½Á$žôÚ+(nôÕ×mžœ)4ËÌ7w–“º@åBÿ–@WtFìØJÖ¢K‚W÷Îtã¦÷»`mÌ¢Xmœ¿¹be8ê„€0%Á»É4okM£-sEÅ xzz"à}Â/ãB‹D{y&ßtLösZw.C€¢ÚÍfÃÌô§Ÿ~’Šßÿ÷µƒ¶‡# [P L èfw΄„sªïfé$t§5 fÙS±ID´¨]ÍC>êùMÂM2M”$ùÏ Tëu|#´º_LûMuîB¡è¸zP !мÝÜs€j—ðãdzç À" Ö/vtm PË'ÔØýÞöˆ’žÚÙ¥"0CQ(*ŽG^Í ÛÕÍ-ºvE›bšÅ£°kƒ?½\¤ÃíjölöráÕ|àôpD4«QQ”ÙHkGK QѪ‘¶c{üÝI¿Ÿ|¢„™]¾\Ì @;(´Iö~ï_‹¼l3¡ŠšÂ&MŠ*6„Bþ6}ev#{gÔ¼@™41‚‘5ƒN=³Nc‚YvDx+`É™_ F¾>6Dä Å}³³2œU÷’BQ˜~Ø\ß3>K¿±"¼×p†¼§Ä5lZÏ–QAKîÆRæ´Á“U!`vJx5% 3aKDƒ%YM Ø.Dá QÁJ¥ ZÖûÚÔ¯Œ÷¯ËŠ£nŽàf|mª›q?ÏoÏÌÒ¿]Qþµ×¿> ï'ÆÿÇ[ÇûŒ h¼OÚ¿û:Å÷øßeÈþëµlš«'Õ\Ñ.â)¥Ë|^úD 2@„¡÷Hº»_}JÓŒçKuÑCkÇ¿ž=*¦((¢Àœgs5X†Çã§Óã¡yÇÓ—³õôçôV¶Ï'pL%¢²õ…¿iJÙMCøŽnºÅ6RJÔVÉÚpŸé¨ŒJÁ힦&áW=Ⱥœ´D>½Æ^ѾhWšI©rz8=þøøŸ¿{„èÄÃ# ªjãßžÿ"g¹XÎOß\äA¬*UP®S>ˆ`ÕôE×uÕç5€\¢î~çóèuüü®àI96Ï~ƒ¨»£t|t\Áó鎛À„Á™ëY˜ W³!(X¦ÕcüX¢g»õ»\æO?ζ~åcÏŸà ¬šÌå'À<—^èýz½¿z<˯`Ò¨ó*$g!b†ª5—SØwsðÚ:åuêõOìƒêy ç˜ðx³Ðñ²Áºn ó€à=ÂçGï—Ú¾¾Íhö{=Èd þ—ÕýÞ#®9ZotñŸ¬Fg¢¬É:ú` Î,Þž‘¿H›çÒÏGƒÿ3áß·%¸îÀÍÍý#þý·wV ¦ÒJôè¥EêRST"-×H <é—SŒÒÁ4¿Ð+l·mÓu³u·3à…\¿‹ƒfx g FUâ¾7–2ú-ÀžPèÑ­Qã|ã¨Öí)á kà®ÂÕ¡pJ…á8þtCÚèÓ«Mýçæ¡  1·¡„L ó ”rÍQ„IíÀµŽ˜ ìÐ ,‘t¹=`ö-* €5ã†mEË E%¶µÃ«Óqc¼˜g±ŽîÇ—8\†ëêø4 0³œåüx †°n¨©¹‡w7 Ä$I1©juP ™ô°³õ7÷ãô¾’¨âvg"«ºýp½^¯ß=¯úxf^`Þ¤€ óÂö¹o弚<‡½A“‚sÞs uè]€](¬z´&ü›y¥N?FÃRPÆDÃë ç X€VBÝbz3óbèù¸X¾uŬÄq8lÅàn»«v b€ ¼—¸…ûÏ eÀÌ 61Y`:„RMvòvÎ3”ùAß±þ°më5§7q˜W3X.‚®®Õ°«šYu*„êú|]ÈÇåá|~”?ÿÏŸ±DvÖû4RUÝR$»ó"´ð0ù=&üXn?)Í0*A*Ì\«Y:Q¦¼’G,×<+iu&WìæVWÝ]­CFqP;`Ϭ¾‘¤úy8á4#àd1‚ç †kO°†«9e,̸B_xÆ ¾ g÷+Àbˆˆ<ˆˆð‹™\FèÞ“€ÓéØén¤WÍͦØB5 Gû±²P‹PjÔ¼E)éÍ'ùOC­vÜâw¢ßåÕ7ï·W†?m”S& ò+ÆÀã½ÞùùeF^E¿¿eøh4þyûUº‹ÿ€×mª4{õR~åyÛè+ìDEc.2*¼_¦ˆÐ8¢L4x5Ô8‡WDPËLÍÍÜSÁÖÔA¸x2{<*7ò,ryz’O"9c{Ö«*I‚oÖý]i:n.'·6$ Žm'2ß±!LU¾¡ÿ<ïNSñÌ\4¥Ø ó¼åèÐiHl$ÂÐÙY4‘’Uƒ›7F–À±œbkd©ªêª/[JÅœ˜ Ìvó¥™>à¦Pî) [u}ÑëõªÏ«ïª¦¶{_æ‰0°ØÜÁžˆœˆ™é$Î$ ZFÜÈAÌKKQº]Xº¬2¹m’¥Åy{F·n\‘nÒ®ó©aZ³h:—çm»«¥F`bVM5ØÎÐõÝÌ+£½¹@¦©©Wð‡%_³™tœ*ÈÒÞÐ^:oG ;W­!b#WRrk˜ª)=üZÍ¢€Ó)ÎeKNÊael dŒUÄÏ#nþr;°âé›9}¾}U^ˆ Ka. 7Ý¡„ ð‰D„ŠDy­nª®¾Ã«ƒˆJO6µ^ CryzÓà+NOd…îF"[7§pCðýDÉaé쥆4 ÈþMöa9>³Â|Âù,—¸iŠôBN™pãr0á;[!þLf7«CrZ%O}ž¼…há(ßAòm]¯×íü¸]/(iÃũ‰Ð&øR °7J4ÝšE F '¦ç°ÝGj`oá ¬ñDø\`L*5±¼D‚”ɰt^ô›“¡ÃRùÏØÛT‹Mâ7æfUÃÞ–™%Ä® {±þ\w¦úa©u׎X%0ÄŽ£j–hy8ÒÅï`˜Ußù´ÆšÖË/c}ÐÅúôøÔÇlgTÔOß<éɰ)×sUM&”›E¤Wr3Á"×é@C¦¸š«+¶Øg½‚вƒàŸ¿ÿôTŸä,Âg¨º®êjëÛö|u3Š¥£…ÃMŽUçŒèc+·u~ëšî¤ªj""I>j“…a´I™ì …Â$/&gà[Zš÷݋┻nL»ôüA¾ØzºÄG ÆO9‹, +Ø–ˆ !KßûõF»Ižß:_@r¢®™k¸³ü9X!·7ëvâVN½r3šqø»¯qåÈPëçW„#qÌ¢ùÊoüÁ›OâØû•qö¿ ûý‰í'cžïȑдŽŸÝHzæºÐ€ÓàüÖÚï û½k71ððÿ‡öFfÞo^žuù¢dî8T„|¥œNÞ\u*¤‰mowT òXT3¥«gqZðs@±¾(ܳ`/ŽYÄ£VPÍõEåi½>«6ÆöñÛYp®˜€€L=ÏCޛՇz°4 ?§´ßíÍè7.}ì=6äýBÀŠÎN 7 zUÆb”|KÏN6`1¯îTÌ] 8ôE×mÛžWÛ•O]*©™W²¨#bIOÈ*x’'Dx‡¤ëõúWÝ4êZ™f*Ä)DOOOYõÚ£¯®nö¢\ˆ c›Yuf‘]âð-c¥^¨‘Cì×A–¯¦ú×ûm‡ù0¦7càqéZ°!¾£¾ñz¿šÎ[±›WwS7ßž7ÛÍUÍÒ~™ \ä@ž–û³ˆ;¥¼*uÙ(½Ãð3l00»Fí"ð$£uÇõû‰ ®ª•ât^È û‰¢¦d0V3×Ãcx‰ï2 Óˆs†cmÌܘy"aÒ©ÝíÙö¥Ç$.a[!T¦@Åp0GìރÀ+pâC|Œþàd:©…õqöñ®¸Ñȼ†cóQ mÛÕÑ<&LJ; sAï*¬l!â—‡³ÈY˜\ysµÝÑ L¼H†µÔ?FÈ8¸;·0Ú…µôä¤ +ÌVÃÍ{dÒúŸt©Xøn€éÎ×ëõÓßþ€ =ý×w8uu7~«jtO²Œ~5cêÚîÁÙ¦ÂQóÛ=±Ä=×­ºé%†hÆ#Q8UöœË}ãLÝΩ%žç_(Ô¬ ð]­™«Â]D.g…E“€<$—иQnÍÈÚàV^˜ ÅFÕuSÝU§w’œ/ÐÉ>ùZ(ÆqZèpU%û¤J….g&‚û¹€ ù‹ê¦fn¦´POz²0¥Å}7¬Ïâ‘E¤™W :½U×ÝÔ\7UÝ\u}f¯zýþó§¿‘tpm`‡Uè³Î,€:€êæ7ëíÈÉúb‘´ J Öº{ʉuã»û®Þxö¼EKá«0÷ÎÄÄ"v·!°Á°GÁ‰†DÈt)G£`åy?×ù/€­¯cˆy^M¶RÈN¢33$²TÕ¥‹Qc”û¸¹>‹]ù>6›BØäu ’SÂ,'æÂê=rhÇœ³,ý´3SÏn[Oà1æ{z·L·›±q…€œQÍKîê^µùÓ}eÐúïn¿äè@¯•{_JêWny^ýmµœ í+r¿j{ïÖ|õÀMáÀ(þ€×ívŸ÷œq îÇÔTC 'Ijý—‰8¦¬†*àE?$·, °dÄ‹†Éäl[˜ QTep:¯Ò‘uæ^r§“Èãùòx¶ ÝMÍ|Ú¼opã'÷ÉŒUŽpx”%Ž_¸÷çIÚT×èöâ¹Óp*'!ÁOöDêhqo©& žW8 K„m$Z ÙáæÞý <ô#éK 9‹1sv±3““°a›n뺮kðŸE»ªšíÊ…µ¸ˆpýü$LÎÆ oR†3'øér>ó$"PÝiœã‡ÅHƶàòuí6F¿/_üý7„.ÛŸÈVMŸWÛ=|~9Àá˜ÌõU¬N`Ǧ+‚*¸GÔ†ãûûÖÑÈŽYQš‚à³zúh1æÚ4Dà¸Á 1u&‘ι*Ëèi‰dÆ»GÆþ "@ò°çW¿²Ý}Ü»¾euerJ¹ÄÔÓ(°ôÝñ €6È)äõ‚ª»ÌnZ¹sËÝ’`GuôX¬Ò/Í"Ø di­šVLQ…»lå³2sv{±L-ôÝð'r&¢ž»ç…EHNL'fâÏzÕgÝ^VT`aKÂKº¼ÄBgîQ€‡†ôðIÑ)ç…¨ÁŠwÕ/ŸïV4­Æ785DÔ¤øë'Ÿ/gz¸\Êà,¿t÷f^'Âÿ4çàœ£D¡o"“Q©ÂÄÜ«é®j×…j‘icS!,äêˆ0x±¬Ë â—Û;“,ÿ2TÍbÝðÜh.ßȇoŸ.ýïß?ûb†„Ñ †«.÷çøx›Ì¾™[æ[¤º>¯Oõp">¼XýàÏã>þ?ɪ{¯L6_EX D˜X¤DŸÙTyaWý¼ûõz5U7G5㨅1oìpoކÕM«±³ PHNâîTÍë?Ø»v6Ç‘#aUÑʤս)Kòöþ‚Ìóî§ïZ'YCZÓm!ÓbÁJ™‚ýØÑw§ÛÕmY=(…¬|DFÒ)=$»£øùo?ƒŸ¹ª›ÈAµkZ“‘ôÆ•(ª‚­ôN tHL½œ XAÌò8’¨/†û8Ö–ÍGûF€•»ïëfå6K`(¥«™gÓXgþxzàþ2ïŸæ÷GÛJÛgêë“-ù•Õf÷PY‰¾ë³íiוí}§7lÑH°™-*ìäõÚt–¦#ŸŠ¼@^ùvضÃâawê>>˜yÔdv›Ðvh|¶gí~ý99Ö?š±\™oxªþøÇ¯Ù—ÿñ?ý¾[*˜¨ŠßFHùMãw4Õo½ú¿›øWPþoÆ•:œåGoìA¼^/Ë‹•—Üyüát:Ÿ=\Vz‹ÚïRbgu-rÚvá”~±×%÷_‹Á=¨t†››±`€‹ùp¡H·Ý$.ÿb¯vþóçóY»²ëIÄÌ®föjfýHÕ*¨8 AR ¦@HDÛ½Ã]¤Sžîº µÙ7€r'HÌÍÓƒßnཎµˆesà›ÂÊ _g‘jØXz@= 6|±Àê1Âáe9èF£ªh8®§Ó³žÿ|Ögegeʉ†yÇ©Ÿ"ÉQ¾.—ËõúõbˆÓé¬JŠÕ"hîöz½Œ{•\„zÙ«©á×Wó›"â<œüË™Ćâ7ßÄa•kÏkŒH¶[w îì~H³ìî<1ꀠ:*wk8Ÿ]†±ý ¤Wqo•—{µårÉbWFDûýÕG$h¶‚¥µ€‚þP¥Þ6fÝœKÐ`K¾F¶ȚΔ_%:$I¶Æ¼-kå)\éö ë&MìeÉzFÑ} aæÝ%ÀU¤—Ò£-F@ŸNZ•Î>#¯|^Pôéf^¡îá÷ Hª¹dµ9kÈ;„ÿþ9÷(bÄu±,Y •Ï„tF^ŒÄfÆUåê¾l˜ˆ2D¢HÝUyÔsª°ÆLL°‹tfÅÉä 'JÔÈ’loºÔ!7C?2ªF„›v²!V@Tºøp!¢üYÀÕÐè7(6°¨«œÏç3EsòÙìlV¬ g‡tÅArqŒ²„±Â›J›u]€G)$’ø7ï|ŠfSªH8”kÄp—í'¾˜ýõ?ÿët’j{>èQOöb˲à!#yPNèTétÇ2ÂW°«®‘Ëž·dí†tâpbˬ"@¨ò/× há8—GÌåq7³Õu˜á.»X˜ú$¾"Ì0@…ªjK¶ù£>‰4o ˆ®ÇCRvöb¨T?j6:oÞudˆhÃ=‰¬×ˆa§óYõGñâ& iµØ°Ku ÀäšW*  â¼1Vã¬0=âüLÑ“™Ù×ëåz¹üírùr¹üýËõåz=>Ÿb u§ÐàÃa(Ê€Isƒ»™©ª(ÑD(|&iË @°SUᎈð@øuµØDºÙÁ¬±Ô€»ê³pˆ†›‡ß€½šÝ ) Åì‹á©+0‰Ç#¡Ö2IY¨ ¬Î'U=äƒp¢rL1"ySÖ!+ž"ÝI@zѤçftq[^®fæ7OR‰X‘,k쪪rÒyG[Ää7n;3ߦ»·šÿ¢gVä­ €«ÄñêBºHLÓÅE$iîC!“EŸÅw÷+ó5ß‘}¢^„çYœ~+Ðp>¨ÝÂ,U¸W²ã€Ü¬SÚ™V'J’|r·©bõª(hŸ fÉ1Ìöœ iAÊe!"0àðRBšŒÜ¥ñ&€Ï´õÞ¯žÝR|ý>Ö{É”¹g¦•kÁJ4̃u(q‡°­é2m9”˜ ‰ú`–¾! ýeàôVØØÆN)ïmp¾î/’I$aáE†·u<Ž]¾þžÎL*‡GÀÉîdÉ NA¤*^6 •‹˜¢z©”þ6RÛÏùÍäÛûÜLMð£?_ý0ô}Dq?ŒÏ>ß_C¾Ï¥³}ÿe]ÌÛÏÿÙ¤¿7D<ÐvË~7ðãŸ+ƆùXÀõu13¿Y5ðp Êì|ß»éLˆ›Yù©IöA¤º 6 º€1 ͘>ëXøšîQ¢—g'Y¸ùHÄ©K€„6yX´»ºn .\ëå‘jZ PA™Kwe·ëö¦çËÆè"ÏøVR‚‘ÐÖÝ[üVÕíî#æ?ÝÊã©âêˆX½Êz‘-  ì¢bfUŒœQ¥ëÐî¦/•©e=(…¶À„{!¢<€aa/Ë—Ÿ¾\.¶UÕ#!8HFûé´ÜùºªO‚À ¾z™µAûIU©zz>Sôôtd—¹±ñn÷÷†lxW þ?3‹$(Þ–|–Ûú7ó-ûÒóþT`l¯v}Y®/%ò¶zYªN^gÙ7d¾K™Ë}¯Ÿ?^Ýî'¹ÖøÀJýþ…ˆb8!ûæì>·C®@C„ÛM0 á6âOO'=0ñêq3Ot@›ð "ÌU€é ³äÍAÃGcýcÿl3öðZ±Séd•x„ ÷q ŽÇ­“¸»DNÙŠä÷JÎöÊ­j4÷ØáMÞÌOÙDà¤RIì$Þ!;c„Dd¿Uë¯dÌÿö€ÇãIõˆ.¾ºtÑ'=Åù´†Ì õ©ºЛÂnéçeŒe?C@¤[ã‚ÉJÀ¦úƒÉƒJ ‘‘—ß˶蓂" K¦öòZ¢meJì ØÍÜ©,ÕÉÎX'¨uø¬Á!FZh^¯Ëñ;ÿ=(1ÌGD¸¼t ¾zÆÀ÷W¼Õ[o¥ fö†ey¹Úërùr½\.×4¶PÒ»ÄÛ•YëØn†@0‘ÃI`Ö»E­í5c‰Õµ«Gª dõVæ›104©Ä+]b¤-IAµ\ïŒçL àkÉU h&Oöp‰ Á&A†ÞK¿\HfÁƒf~ÓëÁ¡¾à„pÈCƒBßøëŸÛÞG›“$Šv~Ënç ¬ÀX½b¶µÔÑ+ü«0Ø?9ù¶ÅÏ ï¸'Š~oø’²ä#Šlò°ÝCúþ Û)¶Gó¡Ç¿—²ømt#‚-U¬»RÇû#ü+Æû[÷Yýÿ~|ËÌ>o½º¿¡ñ¯Á*£hÓ¤!ÿÜý°hw~[ãøßz´ TÃmƒÏ¬!ÒDpF wFøˆRŠ4ÛM~«ˆ»Ã=c§Άڒ)wõÉÕAš°‰4$AËæÂ éS®ÀÌlY •™,Ð)3ƒÛ Èèñ¡0H¦$®°“’ÔÓAD,¢éƒô1ýrç 6Bˆ-º¹© Ì>ب4mú¤ óÐN»-l¹bEd< H‡`*xYÑF9$Ýt¸©’­å…ºd£‘u€|:Nª< FØ«ÙËÕ–%«îRý~¡GŸTº$éè14<‹%à ‚Õnˆ"5 Ÿç¿ü¨O*Õƒ˜ÛL" $cm/Ö $q‘·^õè†äÙ[XJ:ao€a¹ÇËY"˪²kòT‡›ß"nÃsEU °ü]!ëÝ¡ç²xÊÚÃáÞqùäsL˜î}LD0á²5”îÑ}Ŭ×.N\"×¼ˆáF‘0+ ëVBñ°qzÖ£U5ÝåJ®ós'i'ùƯy{Ƈ3r”k,靯½Ï<½Á½—Ì–æ «3\ IDAT+;焳#`ÆláQáåLJUÿB§BÙ¡=)n&t¥”H¢˜ó†J Àds|›§­Ë–H*’pbF9ÕrP< V×y9êÔcÒ½ ‡/7AF˜»'ö|0[$vÞÛ¢?ï÷TÊ™œ :7»^/ÇË—‹ªê3ÑNëu'…P‘ÓÓ‘*Xáže·W33i‚ƒP’\0e‡"s;EâRl~ÌÖï !{§¬^JÜARH÷LÈ<Àd‰-1 é¹ÖÈnX}R},Á©POg9èõÅ‘êSÞ©¡ÕäúzMžgvQa69ûˆŸþû'}Òóé|þá("Þ Í|ˆ+³:Ën Øð‚ëo#ƒò¤ DBã³Äº\¯öu¹^¯ö²„Vh—£$³Š^ÍÉeNW ¼šM¤ÑF¨G‘ ô°›Ùͱ BR»:,å…|±1nâAYÝÖ´Á™ýä1TG˜í‚Ê6sT3™•«Ü7“@8"0"“ü\ºð0;8HG ÓÖ èŒ4WmVq“’c$“EDxji÷œ#)Òm6Ì×[Äɇè÷W¸£±7ïFö `rWdÚ‘R“¨”bܧ°úœÒé·$¢eà À€ß<,ºd^Ýw€ãŸÑÁ·„ÖY€™©ÙÏi­°¤¶"qäÔÕwðÎÕ©+Û ß ñýÀäßXd¸›òPýó£ïÌJFýs®Ÿ÷ß÷x{ÿ­Æ÷FÔï|‰=•À„W€¨îïþƒßû“ÿ€ÿŒGàV$ñ²rDÜf1x›T4¿ÉÿÀ:¹^Ó@Œ(%RLK‰¯¦[Ë@©TkRûw­åúŽæcsâ3>/QºH/Þ¬)ê˜A „"ÑN9¨$]jC6b1h2› }¸ô`g4©49#éOÊÒñcÞˆÄÏìj–à»¶X/bXݪnãîa¯‘@&OLIQ ¨j ™)ÓK/O™­OµPš$üX© Â^.×—ëõ«Ù«%ý3–Æ•]Ï]U„g±"“â3=íÀðXÃÃ"zz>ýÇ’£æÝó[ÈÈÎL/‰ÈYÅZB‹+ô%Ý[>”w÷¯áá²3˜Y¿ü ÖçÃëËBzÒSëÈìÕ–—‹™atáp/ﻞ,&wÞÐã>5¬» ž‰ù¼¯>§ùÁXÝ!Ò"píÕA˜¹Ò­ìÙˆ~×âNÔ¨öâè.üä6›Î©€eràñ‡3(•¨*•fF¡Dsÿ®Ï€J–±ÁY%2ÎDH²Cu Œ]%¼ù¶¹VÀ5Ýô‰:+dSTu<É®ÚÀÛNé& £çˆù"ˆˆ§yQDE¥+Vc«û&‡Ä¹Í§]=–ª"Eö°óHU _5%µ¤GÅ]½V¢›#{+ã-!T%à2ù°«Pmk%›6™‰°wÅZŽ92`eÒhIkõ¬·æþ¿wÞy'yZkHK=V3­8ȪbO·V«ÓîÍÓS>½§ž&»X¬ªÌˆüÕ?ÿãó˧_¾¿ªÄT.¦]½o+ÿ‡vS`x’´ù`0ìbzI’<Èà#ü%޵’‡3ƒ.)¦+m:U*%„]Ù/ó»¼³Îs$Ež%I:¢ 4HË`Dä1œˆAß=iDI\U“®øyãˆ¥Žžc¡]}x–vx¢‘½ÙÛë}{½kG5vOðq¬NRk`zÏVW-S3òÛí~ûéóý~ç`Ò¦¤ÁºðpŽ(Ûð¼hcG•ÅÔb¤7,8àP ˆòƽµ©Ìàþl¤[Û€w•á1ÄŒÚEsa‘» ½Ç±¨Õ¬´žÏ¼ùNFJ:'ÖÝTºè*+ïDÄý„²l]¦w„&u¢WšMÒÃý‘3EÍ(îÇAZJ5,"±ó%¹Ž·[€¾ß·6L¾Å?‘­â8íâô‡@‰B熵J>Uä~K{ÎW3‚)îL:0·ô‘ò϶ Éq«=}ƒ<øü•e¿ëÕ£ÍJNïGŸ$âÐ KÎòÕ%:»ç™ïîà¿0þõ”æ÷¿:Z¨ÚîG{|ðÏ'¾îþƒü?æÀ_—îùÕéÿ_ÇoB•åÍŸÀ{øvÇŸ ðzÕî·¥¼HZ@üQµawÑï °ÃD®\©ý “ ø@B1\µôW*À&¶Hµg9`ÛM%B%âÒª¹ÀÀlÛÃd¹!M2ÜŽA»œSQôR°,шÈ|í\l.a§4Ñ¡eÜšµkTü›MàÃuE²Í83ðÂC¤1=õ‡ýK¸û}óEn•åDcˆ¨€]äj²9"|yBŠÀz!$LD¨If¿’í…"zä ¤UÜ_ýóÙv Fñ!Óᘰöðï_Ž¥Â]QÐàáÚT.r}¹~úÛ'5»¿º¾¤nÙ™*<#D„§Çj.á"ì%öe<o ;Žh†G¾©G¼ÆÉ$I¢¡Äo—ý´ý7‰÷×ûv»ÝîÛýõÎÇÙˆømÄuêá‘,¬ì—¢ÎÇÉüB Ìñ¶]em®3<Žó_«SŠ™=·Ù¾U …ü.%B;*Uˆøpu§ØP¿$ñžD¦ä@0žW|›Äp¥Æˆb!‹mëqœ¤ãy¡x»áVì›Aö,A¢E]͆RrnÀHÇÀÂ Ž¸:'{Si¢ƒbñ$„hN+ Ä"îr—.ŸÈësÔ2f>^LÛ^“üŒ…HWëb1UtÓå_j¥×µˆýyV9‹ºÄPë”+´iVµ¢‰™—þðû« űX.e"Êså(úà`zŸGú¢µÄ~.%•?‰üá>}ÿrýþÅ.¢"Ú!*úAÊ j6¸‚©`9Á­¿`§?Hí«D\óJªœÓ“ùŒ ŸÒõ#—ˆc¦¿7ªm´¥8¢¯Þ‡AÈ"rÌÊ~9Cº) ÝÌT»¡!íš0äN­4€ýÛ§msw/òð¨F¥¹»¿n~Qië™ax¸v.ª¹») Mýö‹|àˆµNÜ_·Û?n?þôãvßd_ö›ð ÷­é´nŠuIù‰Hë`F‰å“3°2R€éÏØ+°M@•,I'bzÍ)R»ˆªŠ”¤b‡@uD0óõl~ÖõœÅù6eó/$ÐP¬ééO=ûÕóç]=fQIZVmñˆžÎpÒźø$ÇÚ ZÕL±ž¡ÂIOG}^p> B—ºG-‚é»[']â ‚ò ZÎ|@ËÒ³k{vcÎÒìÔ£¼½Ó€Þ9…½v¬É_p÷m£¿zõ¦tYD.AÜ#Н±|÷/(<ÃÏy›¢<O/»¹¬Zïy|tüc¿®÷}Õfò-Žš¡=íàï5Ö÷^JßߨhGQ¯Æü7YÿÎÌêsüçßS&ã‡ÿôÿ3þƒ]é\ÕïÒâÇ£ØWµt8¦)RM |À'\GIÕøˆb–ªËêL«·ÅÞ×E“U˜õø®˜Žyh qÎȾbéb×»šDCÀW×€}qÿg©h=í븮l"CÙCºò’,kÁ>÷È®~çíð¼1¯šñL`Ê9P??Š“ê_œ¦Ü—·U©Up£ÝHS) CbÈ_õ"Ìv׀ȠBä&Æ ?à_üvóÿúï¸y èÅ–‚t„Àh|0‘è(£´¾Ð’Â-XÖ,Òž³—¿¼¼|ÿ õAú»±ÈÂŽ¦¨ðÃ}åÍà ;Fð­·Jž¶9ð¯:Þ²&0CÕ@0xON¸; vfãì»ßÞУí‡k‰>ý¡¼½ûÏãù#òÿ)ÐÅ™ãÇ‹zDöt¡Ê(rÒJ•®@èî T*£jÙ¨?\fŠ])Ò\wš¸o®®ƒ‘¥ŠÝ™L2k=5CBÐøQóõHÆéÒ2ÉeYþÐLÐUSõ—{Ãhï¯6Ësâ‘Ͳ92b ‚9­2Ô&ÆÂÖ(˜ÜCÉ‚XGø€»c»†Àzy5›‰uµ®f¦`½äß´Îg LPµÊÓˆ¤X7E…¡¦®rMVgôMÊ mâUDkˆ=Uˆ¾3÷щ£rõ%N@} ÅÜýöÛýo·¿ûWZaþóE؆ î›û¿ñéÊcÚe'b2óÀƒË¬(ÊÌ‚ÜqZ6wÀju ¬Îö~ÿ¦trp¿³k´Debß&2»ã¨$cŠ]€.bB"œîwdnÓWeÀ$‰íõî$ðúR@ äu°«›JL‚ÁɬMh3 ²‹tbÕ3ɰz€Úª »ˆåÒ€v­IÛ¥J]1B§F¯´ šj36ÄË)7ˆY ÿ뎄,Y5íP™Ð ø`Òœ®9ß/FÓ¥©2±ÖÍ›Œé@jDKAî;µ5·]„v¨ÈêLÉG.bR!OáïD ‰ëÎ}H±k–¢xåœfÆá÷Çšª­ Ö@ÕYå3–dÚ¾}ò‘^e¾¥qQŒâ³a¯½ý„"”í“è Hšpg(̃]¤’VÓí™ÅöTûø'ã?ÓMú›Ço:“ýþ/p¹<,:p†ÊÌõ_‚¯¢®ßëÞõùuôÎØÏ„5E{týòÝêÿ·2þL€ÿøC«bZuÁÄ0M ƒ@p¦pøP̈á2µú´žkcIúUT'˜L€Á0,&³ÕìàsÁ @ºÊÅä’MÅ¡veâ™Ñ¹ûõ맗맗+ºðáÂ4˜š\,eBêè ˇ@÷*u›H+‹ú-1¶ê_MÆ ©éE®//y:°C,Å8޲ˆf©Ê |xù¤žº“‘ŒMÂDçêë]†ˆHW,5"K/AU“Jr'NéÎJ|º(0u{õíÕï›þévûÙ ÐËõú}¢ eˆëî·Û-©ÑÛ«ß_`GBÓu¯hªµë‹}w•‹rGDÇr°ØÓ0‘§Áno¸îÈûÛ út¢ÉÀ?w[íéÇÉ1è]–Q5ýfR”PIlÛ—ÍýÎá;§P{ùšç1Vi§¦Íæ™Ü~ s|²¾xCµú:K?N•`µ¶‡Ó†Éuôã/b‘ìW-€{‰¡œì8QSØÅÌ ª/¹š©|gvM:t^ºÀ¶m÷$9ÂÌ<¶b"E`µƒ.,Àê“ÿpTМcIIáÐT˳” ‘Š¥_ß&"¹«¾¶[(Wt[ýA¤Ïq²ð[u(äIHj€«àÓËõåjÒT;®vÍÓ~ùþºwýi/~@>Š1Òó%”=JîžÃ!&:€‹ ikµ§5uÀ,"LEºh/îF¶#I©ž™Byò@›æ9'Ч5AWΉ´òºm¯·bJí0Ë2"D&¶ûí¾¹»sº‰‰vK‘¤Ôáã,BæÄY-OsöyÆ Ö3)G‘h§½|ýþ§geáo„;Å.š]eõ傈Ûm“‹ØwfÃT-æ*Øí19•fă>â–+Àù̬&jjÀÄ ! úp™¦3Rf|Ñï ¨¼ú£ í=¸s\³AMÓ—œkå´.éH¤€Yæ“€ÊÃq^0RÍkVõ$Ê',ŠE¨œ¾S]C…@ÖfÁþ€Àˆ.!’éµI‚ýE³Į̂‘üjC(ÆVdœj•?G[´áÉèaÍ–k@VšI¸˜@SCPÌtñ,RHLÅò ÎÏÚë}•О‚ù''¼}ÏÅ)ú>V§ I‡Ž÷Èñèr07:•uRY 97õùøïS‚ ¶/÷ûæÙ!íØ°´kŒõr*=P¬k²?±Ÿžoœrà@Q ñ&ý…)ùëÆ7 ÿòk3*yïB~0~c\W÷ƒ´ðÛÿ¶„ü×|Y>ÿC–Ä,Vè`ŸÁß#úÏø>*¾ÍJLrcR«i’ˆÒ(–\—=lœžÚý(Õ)¤r‡€Aº8†Ç´+¡óðÆ$—ž? ª¢M~c«$«žÄæ#¶‡ûp»ªýÅìºL\cŠu±«½|g73wH4µ‹Iƒª¤·p¶l¡i†ƒYeÇÚ,8K÷Ë'¥9)ÖÀ&!j_ºDWK®TSÉ+ö¶±-멉îe¯#è|Aw¦¢5±šÐdÃJhmðÌìz5»˜ªøÃQ{U© I‰@¸» ýþóƒ÷/~¿m–ú%>Â0Õ¤ù¥8gjÉfö‹‹ò{6šV™Ü »”ñ Ùry}ùTïëÚ—°Ê¹xNe—cd®žÂeD) “¼€MôÍòš¡^öcůçW—Å“”.“?·Ï7Ýî?o¾‘ãä=ëÏcý£ýþœýþâÆyN’sð9[^¿Ûs`žsàƒz-˜/ž:E Û›ú’g,êØ[ÛÌekŠÅ 3{¹šˆ1‰tèGa€ãIùùWí¢M´KaPû1 M‹ŸVšmÎ<óOØ®`É2 ]M ]Í$ëB‘`&„r1SÑ‹¡i,É@éÀXÉØÿ²wíZ’Éõ†•YV¬ê±€±veqÖ”¥o×,=Êb•5Ý",dZ!#"Tu9\q%-󜩞~ H$2^7î-ÀŒÑ4ê´¸@JbÌ!“L×ù?þö…Df¡³p%¾0_8Ù7GW¯D2nw'$¿qMq8í07ßT_ïëý~]uSk>×d?ÖÈôžø"™R,cJK ?ïœÃT!v¶hSh#Ø‚ˆt´j0vì@< ÔwF ÑC^º€Œ€H*˜:`ìI }joØS ™$R8¯Ï+3~ÙaÝ„dOÒ9 oêpÛR˜+ÑE¼VÍü]3@’ù8V\Ï) >²AÐô mâD<œÑÈÑc§Ÿûêaªòx€HÁ~`¡½$‹ø/dvÒŒ Bio° ®ž Ft.P(‰âÞMæ»aÇ#VNì@÷Ó“9ý¾¿í×òPçÜô7ƒ™ÓSûÁß<ÇO–ôA;Þ‹ŒýøŸ2~CÌ÷?ŠZ? ±ßÇœ¿9 eÿhjÊ7ôôÓ§ŒüoúÇþ_~Jæì¯ÏN²?}ýæùý?ÀÿŠã;wI…?/Á¥îT2ÚK€-ÁP¸û› ³#x½ËŒB|aA3{]­©7U]ie×»]ˆK¨:9¤ŠPXĨª5e&ëàëlzO”Wsu¬›ñÝðùß™gy™u3®d€TæJÓË$ŸQµHT놩]D®"×D6R¤Õ735ÏÀrAeo–¢zÊl´s3Ûw—Jéá:’È'Z4Á(®j¦›¡€œõõŽºÒr]âݡڊW½¯wµ¡`Q™*ÖW•ÊZfRi™™ÄaÚÜàØ”+¬ 5H3Ö7…Cõî ë}½ýüãýuE‡».Ÿ–寋\% ¿fŠæ¾™~Õ›­Ù6‰5wÏãp)m¸Ô\Åšéææ¬Núj$2OËíë-ü›ºS!"òæ\°]F¢á´¾cš:zhGk›G­`t!îá©÷±n Ã,`äp%0ì¾Þn®º¾ÞõMÍݤ2 ©)•ôi£Ã°³fq~$ñŸ|àÄy–j¢ÀÁñ@5ûÚ¼e PãB(âT'‰91¹°n† ©¬¤k3kʰhÊ¥âWÒ§'0še<°ûß™5`N†B<Ú(òb‡kne@9›!`íÁ7 oS€äH;xÀI &U˜‰ »™¹s¥–eš'b(!àÄæeþòo_–¿,òi™^–e^æ@d¾ùýí¾~]³P SS€Qx®dÜ}Ó›®³LVÀ×v7÷eY¦‰Oæ•ÃíÛO™ÝG;ëÑ&ì)09¿5–½Ùxœj0ö{ž*=…@{lôJ„²ŠìMÝÇÿÓ;n¿á6¿O"œ  gàpœ¶½'¡xŒO‰îwcØÌ:È;£Ÿf¢g üîàçÛϳGGeõ¡øðÚ¾|ë=þWª§ü0Ëpx_îâlŸ™,¿}çSã#RTßóú×èÈZ þ €ÿeǯ-îS~èSu¬<.Ðàψ ¥h3"’&É÷PÈ+¡ B¢àT(19TF!ëÆ`ƒ£iœ|ÄÈhÀ³aqSè‚ 97M-d ‘ `úü×eþ4/ù¼, ÉÌžè‚ÌÊEŸNSÕ´A¹„[(–Ñ…åBd”üjªºî.w¿¯÷Ûí¶~½¡!9WŽÊ­°¼E ¹pêúŒŒ’up9³ºBãÞ2Ë;)æ¬Lzè-aB²'xpnPl¥zB¨ „1SP|Å9 ³\Àý\ëÏ÷Hú>ÄN}ü¬ÕÕoèˆÖß½ñ/ä÷ı¼Ì+°®â›Œ!ÆÌI‚®XNp÷žžÄ9.áxËoœŒ%‘N¥Ý(—¬6¦bPbµ–±¶Ýœ îVˆˆàðâèy]ˆŒcp-|P·:¾ëCUûþ k˜½$ýôð |ò7‹“#$ß¿ËÙzø¬´¿)xŒõsÄ!O‘áûø<ìt2§æ—s:ïeüCEÅß¿.ú;ï­Td»wlöwð!Ñ=: ;ìôüþÆað÷¼~×è{âÏø?ú¾a=îa3ªÃƒ+´L ª^ÝšQKö¢½I÷#Œ: =¤¯¹Úfº®E×Ü}'vö°an›ëªúºª*Wž¦i¾‘ÀMÍ}3°Xs4—J"Ä55@®@¸íRaîokбÒAéD•Üa¦qÕ;2ÖÜ3ïDÖ#H8ŒÖàíìj®– Õ‰aÑX` Äl%º°B¦YòJVÎûBÞ&–ŠYdy™ ¢?ý|o0Õ(ÖO"ûG„mÝ£ÓEà¾|Z¬©nno«°0Á q£{\&ÀÕ'‰MïÔÃûít3ÅýëúãO·ht”e™¯r{r¦Éòʾ뻾K^æá Ñ_÷¸WÓS¢÷Ñoþ.yÏÜ0 {œ@`@•|I IDATÖq_W]Wm£é´äU=¯y µ Ÿêv§sOH–ÓÉUü*a¥™§Œ‡ÓÇ"âû¼ž?†€²Û½Âóc6\Ç-ƒà"ó$ÂŒºDä9¿±p…ªÞßÔ7ÕMUm}½Ñ3?ïNsÈ JÓê~-¿6,Êtƒ7  34:ý"†ñQç„[3k†©¡JBHIèa‡2Øã:Þçü },±áì'¶«•2†ÏRy¾ÎóK„¾,"³ˆðÉAlGT–¹0ŠœYP 5óÖ@IûÌ{øú4K\‰/"Wq€.âžÈÔLáÜRçÉ|˜Þb!Æ °›3‡3S9Q8·Ÿ×ÿ”Ÿ?¹É§y)ˆ^koÙž*•Õù d— á°‘n®ºú¦¡bJ{vèÔ-²ozÏ>uÇžëÙ;ÐO)$¼)Qñ‰!€uCsM¤n©xSuÆQe‰ØrhÌèfRY®òùåó< Ï/“0Ë4 á¾íÑ£ï ‰*q•é*ÑF~,g8ò"\Ⱥc‹HÚTªx3U[ïk0) ÛfÞ4ñ4:ƒ6„pIh"æJÂL5E’½¹…\PäŽ*2èqTP‡;íH/H`@wTNy­BŠæqsÔrÇãÊV\b<,ÕVÀý™HØóv÷zéJ˜S¨lBÇ\…UŠËñæîù‹ÄóP>”!MdzSnfMGMâJ‡ì€ïæài£,1;A<áfØû-‹ |´^[¾á‰rp$z¢K£»Á¸ò®àE nQ ?ÕÓÆVL m0ÚüØ¥öàÊÂ(híw'ÏãJŸFb¹Ë‘«ÃnwýªÇ¬ò~b{TüÞ€žGz7}ÿï¯Â ãÓOoÎÌóåxîÿ)*Aùß—ÁýCŒsäÁQ>,¿ô±¾3ž<ŸØ‰ŸãÉJ¦ûaqûÿtüÿǹüûTý!TøˆQ€lŠB®N€7Gó]$C ÕVXÃÑVùhtX3SÓMÍ,;ÙÆfÈ€ŽÚºs1k¬oº¾®÷¯ê "2¿Ì‰©¤îPõ®¶)wŸªLÌöº@sï Oo‚šÐÚÄ3˜HÂ÷[3©|Ôç:çscb‡“;™AT@á·°3ܤ†Ò=¼yHnÒØŸ±”)ªß|ø—ƒøˆf'Ø `Qa¹ˆLr—I «©¹Riæ]ÂlLHPœ+XX7 ß @(!£»êz»Ý¤î-[ææœ(QÖ¸pý=«šQÙÐ×ûz›ô*þ2yv,Ûh FÐ(`øÍ;T2ÿCu–¬Ÿº›ŽEàú¨EçÃõ8F£Ãºyûoö®žË#IFXU°2Û"i²$OÔÿ·Ö»µvÏÐËO?Œ÷6;>à<ç™de¦G4B†5Â¥Ïa,ãnbópæpKEVëy<øs‡>Få·ˆöÈ„lfC‚3‹8`؇í>ž. `ï_2ýŠ8ÔrP*¥'e°áÍôƒŠ :¼™W ‰ÛëÊ“\ärþtá/´uýõ®×_¯·ëP›±§Ñç Y‰| Õ¿ ãã96;aäo†iY ºÉþœ)l»Í“>c±#g¹Ý̬™4~4‘&"lKCy¦d1x‰ÒásdGëó):€`IiI-d Bžá€'ÂìèʃFåÜ<+Ðê›vÎöùÑ$Oª0R4 ‡gMoOÇ (N \ vßõ±‡Ý\È>mÇžrh¤iRĺ»™½Þ´þÂ:TÓ5Ê{VQ9©ž”Htçð gú5mT_ß( s8±«s¥Ÿð¹€öÃ=o9še1²dÀK£Yj8e"€@|`4è-ìîr’’u%+€ˆ€½ÞPt9ëåÇËårY.g]©žÕlŽˆx¬Ñ}9_6tztXs¢ÄÊ”ê•DÇ«ªTR8Þu¦ßcxH fa«™‡’`wŠ iÞ#ñ·¹žÍVF VH£µ a…h×Áeé…D"EÝQÅ}øÀ(Sùið3‰ê´8°zîÀs)ûY¨ˆ,žÖÃL–ˆ_÷”þz›©KÕLŽss_©Úð·h)l.›ß•^µ€çEY(¤wWoaL~PLYã=œ2äú§*ÇxL uÔòÇ‘µ ’Qƒ"S»Å7gǽllûÛ—îA¾OvõK]úGKÝ~§ö—üçj%ã½ hÄ\óÿiå߸@ó÷h4Q¦w<Â[H’ÊÛC ÕJ=%8J°ÅÝUõüqQÕ¸»VÝ£ƒ` ÁKDÃÈÝYè²,çåüáŒÌš†“•L5[æN4U­âqcK »kã@-æ·¨Bè æñpµý€c–sHPp{D'ECˆTg—ábŠ–¶È*”&7 ð )ð ;Q…©££#fU6>2F6;Õ¡Iˆ7“hŽFœ$î‘ðc:ê-Š»_]H!V†Çõõw£êðîÜLÄßÝ@`*ôŒØ§¹·ÝLß«€Iì<\=¯ '¥âÒåÚÚ´&:P&<îéKË Ò–Çˆ°»›Y¤Yß7*²£ ƒ³ÖŸÄï§xéÌD—ƒ;—.Ùvªô"ºOèÝ´<$¡•›Ûöxù! 5›?tçãgä,2Ðzþ¨-âùî´°‘Ã%­^ÉÒPx qCï@¸Ä¡Oˆ¦Ž-Eà}£I€(½ "}FUöôæœÑÅàs=N'ç¡•Y:2~áÝ ¨HDì•¢¡Hï."’›p¯$!év±"‡fðsÛ?¶·ë®ÌlN9Ìü²¿;t¾Äi|¢ŽtŽœ\å<€0<ÊÎnÑBU¡`Êø ‡ÛjªrV½\.˧³~TUJ!`RzÞžBïnMÐ,rB¨ÐïbÍÌ¢è”ðh @ªðD”³63³,€‹3ìõv½ÞìnJ²€•8iž¢ #%îÕXsYü¶‰›­ÚBÓά ‡+ÅïŽ.luν»Z¦ˆ™PùãyÇT‘' ¬ªèžšRsãN5bzM#·,R35ª¨á ¬)™Î\ÇPæL'{Í8Úm5ô‘r’uº‹DPU ¬…ˆH”<_}®¤( 83¼ž*}ïxT »€^fÐs` €>« `(¬É!ŽvdÇý]ö?Ø|EsO°ÍeÜ7FÆÑ%D ^}T‘ƒfF!D¸EþcË} ïßæNìp•™‡ØâmÂr™7¿#`ó—Þõº7Üfg.º·'„í¹}sdá÷\yØÿ í) ü}ÕoŸ±ü­—_+²øïi9À–Öï—Âo›Ž*4·Qb? çnZx ¶Y³;[É#i~ꦠV•â V*Er¾€03]T¦Å™u8¼…xs÷°æÞ|©]Î˲l÷*UTÔõŽh4U.Õn¼^CU‡åñ.HhßåwóÔÁr3s–Ô$HïÞ-„ÉEœ¨@P†„SõÌTHCòÖW¡®ð3·W‹k¬ÞUH…¢ŠVŒÛ†š‘Ž« dç êpc´Š`Spß žã^\ÛŠTúݲj)Ê*™»\€v‰Õ®w{x³^ÛdxH©ôZWAÝ£þdÂ)r9Eu9_T˜bU™ >E0Mßæ[”'O×:qnqðq`.•Øj#mWxJDÈtÌÌ1ÔÓò€c@ ÍGEÍÁ'Œð€‚rRFD²ªŽhç=¼=½_îPˆü²ÊÑŽ…x;œ5ÇX{ß4KöxûS{ƒížfXI 5‡+iûÆåãg*…ð"ZvÕ®¬׫›­·ëòñ‚ŠõÅn×›ª†!i“ln]¢*¦ZU§Ùó λÙuÂ2£¾=&kÂvÝVðn¡ÊŠÁ0o£Bl´¬ì kГdzS({™–üX’5R½–ž’_ý€eŸõŸF‡>2N¥ó#¨’ZÌ•¥šN˨D6ŸxBçÃgV9…U«0€æÞ÷üYŠÖ&´á‘u\›ûqçÉØGAêë2“aÍЈ*Ö\+"èPiá̲@Ó”S‹ÎƒÙÚ#é 9pZp¾œ?ÿòù—Ï?Œpd‡ÕeáI—eI•/O³~èQÕïî-f›ôˆh‘™XJo•¡ÅÅ™ZU¸ŽQƒ‘_–GjÛ–k–@AŒíH‘§–Ú·â´1 õlJ÷hYâÛ×E—çËO—ó§E*Ý =BÍ#„¤ÄHé·ðîè°ŽQ‘HU.äIÖ:èv·õ%ðbË‹^?¬z"*Ìl]×eYÎÎVõçŸU½®v»Ý®¿^o· \$ãR`–Œw޵P©*¬úÃ?oã¦K Z9PÍé¥ËñÝ™9d¤çÖU<\B0e¢2ç™{ÂQE9¹¨D×¼·ùÛs^ ç9<€êÒ§G«tÿRZöªB¹C²‡áæ}1û>½÷]71¾ðóÿ ö¯s°|{½· ±b«_ioƒ¿»}u¿pPß'ý&qòÇ#ã/øOßž7³Cã‚ÈȎǽdON“L¡ã)}ºe®è¼€V“ ½`–øä(VD1»ˆÙU«ÄûÇ[¸³q»íî¾î.ã=Ü}aô°LdTagò÷B2«Ó"û3ÚŒPçé2°Ê.]ô¢›ÙŽÂ]¼Ñï—”Ÿa ÜÀÝý£ E¤’j2j­B/`FOàΩ3L”‡8j kæþ)È,VUªš™ZuHž6Oå×ÓKDŽ^íÈu"Z4ÑS1.Ð-؉>å 1!¢Ej4´™©i`†”uJ—°À0à™þ˜=™eFóU"úîÝ—¿ù×÷¿~ÿ^.¦Õ²¨^DT™ÝÀ‘§H糋 hôH¹ÚQž*ŠæéÀ$y˯ýHÅ‰äˆæ¼(šêÏÅk$½¹ƒ…hF ïŒJ•–Ð.¢fZPæC˰bIüa%0ŠlŠìF!‚QÕTÐ(T¬¢a&UÁ èážn|ˆàÚHK+uì™ a÷„Íoßnû_¶mÛÝÝTRJ‚ÈÅÆÛ!€ˆNéP‰)h÷jϯÁá™(^g*êtI;·?sL±c«œ0rˆÀ3úm¹v]F{¦¡‡¯AΑ´…àÎǦ̓ ÝÈ"ADËþ?B¶YPLÓï^-áwG‡ÙÈŒŒß›#W„1³å‹åá/LK¤ÇS9H„|F,å$à§yHPÄ—&pÔcÉaDœÛ®“Iцv”CB§WpZ¼yf„>:9 àUPw‚´èÌ@e¯¿}CòWbàÓ¥?,ªe8W±4_Ü'vOΛìP <ÂèÁ\¨˜“œƒ‚1“„üÞß}Êí¾êÕÀ< ^:ð€Mý²Ú/ \ÿÄ™â/âÿ¼ý è=!§ æìøYµ_Lüceåâ§šƒ?: ôóšü#ÚÉ6#¨L‡Ð;‡]P­ :âîûÀ.*z1ÓÌB ã{Õ2LÀTšÒ}Ñ©f骷¼YÌéîZRfF€Ñysg^ˆxÞ¶ëºîÎH‰)&™V«Øb×ëõ÷¿ûÊݣžïÛ¶E¸„ËE%Izeœ×™ìP"i‡›íèpBÔLl.ðááòh„ÁPà'BQ]F­`šÍ¶PµeY5E¶zÈeø…²…T• T-&ŠØDÄLL•¤-¡gXÕ³‹¡‡™¥» ›‡ÐR5—`‡û ]ÍŒL¶œ%-ÖÏž7ßr³Æ”D&̼N{cV…Û}÷®¶,W³/ß¾]Ÿ¤K“Ô\nÑCšŒÊsW‡¸¬!=vzQTÑ‚p ‚u29!j€yh’k5»¨TÉãÉH:VÌr0aH)œ“Z@l¹±…Võâc…(Í[ðåæU.¦Óí9ÛÁQLL`Ž€†äø½ÞÁg!·Hz §à ãͰ°M3bj¸€MÒë%N—O©9C|.{’ªã˓ٛeýb]žLU0!qw†ÇJš-×ëýúáÃß=Âw÷ýÅeT°%‚컪Q0ÄDª°ƒ ¤šTBÁU¤([ 33Dxƒ©y0åd¬_\Ý÷¬×™­‰\õ«Ðj·}G‡Vô»ïž·›_×ëûßüûËíù›mÙ03 ùúÅ"–݆¤{ª ˰ó rñ(ßÏÃs9 ¡êª-´b}²´¹Ö«03é5>ð1dOƒz€F â8M’qw¾BÖ0ëÿ,Ѓ/úxªJÍ›-FºÐH)µä£Ö #4gGêZšLËŽ¹ ªs˜‰] Iz¼`y³ˆËæAÆ»õÝÛwï®ÿô¥\Ôªh]ÁÀ=Ì4Ëà9¹t–(Ã=‡NzR·Ñ’M°Î;ÂNî®ß=œZíkÿzÙŸÿüü§¯ÿä~[ß,¶(~‡\4%Ä=åç ªExoÈ­ð¸;DW3\4‹­ì%:Ùb¿Ñýæwæ@äÖª½1TÕ*©dP0Œë›ÕÝÐŒ–‹F ͘$ïœÎ…9*&[øî{„é ½ùøð»û=Hì/ûw¿Ûjš`“Ün²§#UF&1 óÐ'O‚¯Âltz*–MH³h“O"ô"¨L¸G&ºîûž .\ÌÉRt¹§àÖä¶df*8bÃl1æì%‘ù5NN~Fñ*£Z ÎˆFR}PD3PÕï!YôðÑ©DÊwÉ·ÎÔŸÛó ¨ ƒ«ñ<a$©#/üXyù ì Ñ©í¤,""Ãÿ8R>g T²O(O€§½ò¸óŸ$\ú|Øí«mâ€$ü°¢ò)àG]2{úÇ ñýbvªåpÇ_k2”Ø_÷^‰Vœ… DÿŸîî‘ )çŸþTŽ‚Ùù1ž»pJ.¿‚|²Rˆ‡ÝãqIù^^l~Ì qlà§1r@Zéü#QÖ¿˜øíïlWsl“§–Þ?gbäQ8§e…‚ž9ÔdíÖ‰Ž;2:¯ÚASQJhÕ Ô ɽsxK¢ºf‚YGitàš y|I].ጱ™d!AÁõWW·—Û·™O©æBã%P$=€µ’˜ƒ¯•›MS)že^€Ú—,M•c=ä·í2e,]QB&òe84H…Ô׺‚¹&–€”*Rä qi™2ŒPšnU“ð„6D$æ\¢¢¦¦æ©»“W[´#ºiêÜäÞ,@š¬¨Ù"×õjO«=-I¦h Ò ƒÐŠùÍz$§S…ƒK)Mƒ¹)ÌEöý¾-Ahê¥õì-Ój%ÒR©E‘ÌÆ@Š0¥ £1Ú!»•øLÑ¢"Ð*Ña“}úÊqCf»¦XWÂŒO?‘•I-ð[L⢊@QÏ"‰€: lâÄ(ìäá;‹\|h‰=Dƒ’æ-ÄK ˆ=™Ñ¢C Ë›ÕÌÐÃwßo›¿ìß}óï»-‹U]ž®V]ä¶¿ÀïáÝs¨xL¼nNG’ÁÈhð\YТ¬Ãr‰-¢»"‰:*BV -ØÞnW³ÝC?ÆõWW{J«Õªl¸½lûË8æþËû_ÿþwÿþÕ¿}efÿõŸÿñ‡?üqÛ6«ª*V5ºD'fMæêcw³‘¢qBÄÄxVÊY:“w!€ÀªIµq4oͤͩzL:Ã$¼ÞkÇÏ”94Oø™õá}•¹íÓ't¢‡“è!»˜ Çê*áwæ¢RÔ”lᩨ<_Ö8‘t$‡0ÆìÛ¶?ÿy{ûÏ_&ÛóÜŠ™¬Wˆ ƒá·FDø}·¶ìûmº y&Qe]Ö\ ¢ÑïmX»­åzÜ&0ªýóËÏÉí’‡¤Ö|'jéë—r€!RK¼ª"Ó4cż€ŠÜé”1Äñä ‡Êw*D‘hdóhN†$QrŒ´5ç{æJÛ¶mÛîq§U &8™”q*С™8&²»ß<}˜[¨Ð p—hhÆÿјÒq,»%TX£EÑ"Ú4³Q™‘½3q0jø)q>‚ÉñÞ_=mÀÒI œ^E‚BK’©LMx¢Ã}¿^×ÇËší9¼ÃCÁ<ÅEëy¥•*¢‚ÎGª±`]l_,Üé|], IDAT¶€*8øý4×°ñ\0QžðzÈ•ù2dÃÆšÎñݹ»ÍögW#RWìõ¸ Y§W+'ÝØ÷É»ùž³_’}^'ÎÆ…I© “ˆpŒ_ÉãÒéSŽdî‡"jVõH]ÐjyžSéAq@µŽŠº\t5‘‹ZÍm:Àe@â§f˜ß}ÄfC©1†žK=þ“šuLfDþÈP¸ä.E‰“|?Ík>Åû¿nãôó~íOV]ûµ¿yK??îîOÕþÿjçõ=wˆd»5F-*BÁp˜4°9Éh‘5)=H#skÀÁ–±Ç”jüþ´yT†L/"ª1Æy?8E’yÍÉAÊM¥Út¤P­*›m ­K®Ã`ê”p°Ž3äè…ÄQ• PS,ƨt`ŠªÖÈR 28)Br•E&J!¨¢Â€&$è*¬2œ9EUF0/ÏͪêEõ¢CT£ sÐ#šK3miÿ{lµ zs© C/†'ØËÒ(*iŠ;Q‚ãÉÞC›#š«¨Ùº~qµu•‹i+{èG© ÐÎj¾ã£‘Ä5º—‘†$ä®BÀyãŠCz´GI'FxUp‘ýeÀBé ƒÍ³à<*¹û¶ÝnûÍïžU>"}DTÓc£Š K’ÁŠœÃõ¡„äq8Wy°"Mz±Ú8¯¤–8Stºt»ˆŠm„Üó±hâf ø”Üäk£Jv$ÝôÖ€º«)»£¨\äz_×§EªjU\¯RtûvÛþûÙ lY¯O (Zl/”{2“Ão¤ŸØtFóð beú£&g~µ%OxÒ QŸ| )[•¨é€²˜w>ÿÅÅx½^µÚ¶mÛ7Ï~w©ÿÃÞµkIräÖ +"- ­nZUc‰Þ =y¢,™’,Yúý?McÑdµ¤5Y{¬¬Š° ˆÈ¬îYíp—¢tvFŸššî|ĸ¸àó×oÏoÞ¼ùúíۯ߽yû.\*òpþæï¿¥B×ËfæTq:L5–É®V£Çp4\T]ÍÜyjË CÊ8E=kÎD‘ êÁæ]¼™ûðx +y§Ï©»à1=š3¸#'GKhZ@Ýüø¿d!,BÍQÈÍÑL›§1üß"Ä´ê¬]Ý‚šÈ“̉û¨ „‰­ÂOOÉ˺~Åãàs:z:˜’O¥zêMh–¤vŠÌ‘ X:D˜V¢+Á®ª¶}üøôôAU³n|0dƒÛqH °ä ¡{*Ì…@É·¨EÄðëó% /`(L•N|BLi€ÕWonMÝŽÙ%ŽN”™ïB÷ÖÀq6Y±H7ùŸ))ŽcªLÍhPîcz½N…'af¡U˜ˆq°©mÒy@0šªZ¸‰8¼äîó %qe&¶qèGõïõq]ÅÜõ擾Žcîù‹àÒ=ZÚ—á]ÔplæHL ¡T 5ôäSŽðÚ¢áÓš^æ<"÷2xŒÌã%d Ì~œ­ÁÌRX“KÕNžQØ<¾l¡ìÅáÆÍ„Œ>Xà³îQ®;>=¬^×1k3#UHJR…\˜@:¼~ÞÌT¯-»]I3`8‚¹¤§™»ŸU ƒ¨ÐO×|ü h§­HÁ¤¬P(ƒùÈÊæf¤’Ùá.¿²ÿñCàÏb¶“ÇìŃÜ]áÿ%q÷×n‡±y¹ÿwÚèÕW«ý ÚÈÇ<¨ÄýùíwüWÝ<öñyεط˜@•R]#2o+e¾®  ÞÈœ¢ð}þejNœî¶°røÐ™Ê1àçb7´)Ce虹äaÈÁ€udò`@¹dümXƒ=®tyV@ý¦b¢8örwf qXØ 5m\!.ç#…ɉ*ÁÓ¸ôîTÍÐÕÀ LÐöYúؽ§’­Wbxœ PM:P3ÿ9³|q¬µÀ²8UªCÄ™ Ñ»8e­1ÂA\v%¡`¤Ç+D½cYO‘`é3ó>t_{Ö~ æ¨\b8 ÄL$L"L‘7„«G~rXÃúèÇ-ǹÌZ)A—".gél¤w˜‰ö¤aŠMÅ©` q3MË8ºÙÜÐÂ^`¸^¯—íçíz¹ê'S5tg•Âfãй"¤½ãFñ¸©ê–D ÅêñfQ<³ï ª…¿Ÿé~ÛÍ!3n„ÆÇ4l·€)L:ÌÆ½ ãÎÐÔnúI›»ªJ•ÓWëùñ$,Þpýù²mW\®ú°Räáõ!9 Ò®×m›— ?½ãPÏ£™7IµvOKÃ+_æÈU€x}€wµª°®gys~£×ëÇí¢ÍN§óz~K‹¸ûù¼¾ûæÝ›woßþݪpÌý¤Û¶©:U‘ê 3/Ž’LÐ-÷NðZóHi6w'KÐëF§™GÚg3ï°Âä4sùBVÝÜ¥§O&“ÛÞ' =¶7î˜Õoñ¹Ã™ÅØ+Ê7^$j£$+pÖn5SÑH~Ž[0ø„ô 3W‹éj€3-nÍy1a¡NÚ|ûiC}z÷Í7«"˜ÖÉw·ÀiT˜+™ÃÔ¯ÕŸ¯ª—Èß¶‹^5À­tÁ‰þ/ƒÓá3h3ÉfS.ž0Ó vÝY"%þLË*£A'™¥æ 0!bwópiQ‰æìánd´ˆd˜qPL¹‚ϯˆ–=¼›Â ˆÈzZõ“Æ/à#Bg Aô-p?˜>¬ü¼à„ž YPÚµ·mäúàíj¨‰²sFoš©Cv‹úϬ ¨³8°@˜ØªQkÐO®—«>Gণβ”œ3Y}Þ´dáíŽ Ä?ÒBò0orTk–š¤ÊL4kWšÙH‡„#y°ÃiB„_b®#ßø0"Xd]×Ç“Èn®ÍõÅÄëãz>Ÿ/Wß¶MDt¸¯Ã›ëÍׇSŽM–‡¸êP¶»™uwµ¬» s€·œö¡ea¯‹!Ÿh‘·ïÞ}ûOÿø¯ÿþ~Ó÷ïßÿðý½ÿCÃÏç³,²>ÈéaåX`;ûÏï~øþ‡žœDÖ¡EDXŸ/Ì IS1Ex„Ù<@ùÞ SÑ´ÐúàR*\Ì}bé©N\ÎZw‘× ›n^=ÌÍ1›î[ŽòpÄçJwp5Ÿ‘¢BìÓÏ5ÓÊ“ñ"\à7÷ëÅzÎZZ ’TÌ©Šˆˆ‹ºl?_·Ÿ¶mÛÎÌ ZbzES4¸*ÍØ›]·Ëö‡ÛO›ªêíbÍíjŽQTÁuw# «:F¤ˆÎÙS†›à%üe ûbÀÝ—ûçÈ.òœ˜†i~0ën!µ<Êúx ÿ  Ûr­‹5‰賬TŸ>S€ÀÎ\54Ð •¬3¢^H*“ˆ<ž¸Ž±®@’¼YËòuH½¹ïüp×±K@¦wªI׿¸©ÞÀW¥HrX†Á}Ö‹ ÿH¿ /à‘tsTpÉš” ×QèXe$DzmœJ\ÙdY™Þ À*r>ŸÎ§5ÆÝZ¤jF;¥ý@€CͲ`¤ª¶Vt3C”½kÀÐí·ê(ƒþFðæNnD\Æ ñE?çK•ýŽc‘Èîyà¿EÀ÷åm_€À; üaË!–ýY²4}îËÿã6Ð/ƒqçÏŒÝ/j_2Ž_èYø’'yEÔúÂö;þëo¯’ØŽ)7 ³Î¼×ŒE€½—-ý­ŒOÖŒïNÁYšÀÈÏÁ÷©–Ûú¼`üáËÝQ,o”ì5SÅåY¯?o—Ën,LU¸ZC€(]hÖ$ˆÐá‘4@"ò<ì-1Uc0U›¢š{ª= ô–]HTÃ*R”»Ù*¯ç3ˆå_þ퟿ýöп{ÿý{&Ú>~  b\Ÿ¯júô´½ÿáiûéºå\E*™»þô*N’çëéQHN@(©!¬Y+SaZB 8#‘Å~Üà!¾=iÔá.ðšt÷]#¤‚¦å½‡1sî2Ñ9çûüU ü+ó¸=¸#wÕtdƒqw I”Ê\Õ‚±¼‹ ¢´Cc¹ ÓIR݇ŬêMU}³ëeûÃÇM?ñBú¼yÐb; °›£©CíæÛÇíÇÛU5f]¬& úba„zí»7/Då Õ\¿8|y‡C^…XñÆJ‡Uçýù¸Hq‡£›WöfÞ*Nr>Ÿ£˜< Љ °Ã#ûƒæ¦á4o=4 ´R÷`˜wß+²´/²€6oj™Ú^(¢µÚœ %§zº£ SŠçÅÄ`BóˆŸ!²0Ð  q€›[Ùi zÓ/ŒüŽ” êð5.d)Œ‘ÎܹßfwC áƒ!>~šƒáÞÌoæî(ƼðIH1w†…H®™ko 8š¹;*‘ôë“Ü>7Ñ™äDYe€wCsTò©ÑU±Z»5 ñ>S˜Ý%—w“í¾ç™kå1{›žJGȹ¤c5áú<‰Þë£Äw.ê¼`[©˜è®f™=¼!ÑD9 Ô®'š~Š£.£µƒÉ1„6¨ØúÕ w!âʦäíj€såðõ !uF F²ˆðŒôBâ˜ð€Ç¨éMAÄa¨PPÉêoHCOÑIáhަæÄîäéˆALZgŒÙ‚ÏÀ•/dÅcÒL^·×”é_Ú^¤½¸Tn÷‡M´J7/1ð¯Ó~c¼?ÛØFö¾Í¥ç6ÂB¿Iû“8h,ÿã5æ.üg€ößð_{;n/\WÁßÃüÒ¬1CÍ Ä3S(ô„r‹ßa+”QÁ/òÉCC·$‚j,ÁÑ8.kÌLB†/÷”ýI;¬È%òEÕ/ÏúñÇ—ízÕ‹,áà̪';ì&à¿Ù»~7ÙqÜXˆÈŽE3uovíùÿümdg^G¾‹ÜŠÞL$ j**Õš7ïí÷nÝÚ æWO«%’" T¡ ª—Èb4gæëïG©RkÁ9¦¹3 kÏÔNâU{ІPÕ¦&—¤¨öǧ7È¢´ V4`OakD›‚°.éUšÂNñl(f>xA•Îýב¿ °3zLìÅ–±D„}1?zIá!(ˆÊÅìÅÄ ]bGÖ¡å:Ž%\€öÑ ñH|dx0"вÀ®]ëîæ;0‘¶ˆ¡z‡ÏÅXJ±©¤AžõÚñ«P„î¾½­áÎGx$m³“¤`¹ê' ‹4 gìýT©åÅÀÊ—¤Fkʉ}s¾­ÌN›åÄÔØcÒ‡„5åž¾“x<ǼŒ+µ1O˜ºìˆ°‹T{†{¼TgdÝC ¹èb†×k¸/¶lÛ¶†›In`hWÇÌ@Í]TÕš>ïkŠ|àp/4;* 0ÂwH‡?Âv@T/Iš$~þË Àýí~{]ìE–W»šÆŽ¤¯÷ÿĶÞãuÝ¡MíeñwAi¸½.öçà‰?kWQ5îˆMí=b Dè’ʺڪzS%Eòä”ÜS W¾INÅ¡ž•œ@ÿdMþ\/¹ƒ¬ž¯¹ÒÒÛkôâ#Û僇ÉóÜ_â’Úõ’âd>B[I¾ç•H‡vMYx'OI$3³.5€Åìþ…‚»1xÿÛ¯ÿmº™ú»ÇÃ%cú÷¿ß³°…÷/÷û—mûâîk!´Ue­”ð"´îSº³Õ8d¶à©:ãóNT¦›üyË;Õª?ì#%Wù¦PâaL•²‹ Ödù“Ý~Z–W³ËtkÀ€3d Òs&™×eâü ãùSZµ?—@‚ƒ.ÁüK`çºù}½»osHÚsi+Ý€"Áævý`É ÀuÝ8îöIÆùÞñû Èoòx?aæu]|~E-ß<ç– =g•™9Jå×ßÕò¹WüâçßlÕÏ/ð;¯Ê§WäøÿøŸôøáÖ>„gœˆAã´HH¨$âqR)D)õ๹IY´¢ãfF¿¬n¦µ§ßªàD ÒV HŸò†DÑJŠåü”¹iòÜvD¬þîáÎáDÏ7FUÛ²ÞÜFKSìÁ K²”…€Àæ–ŽUPe<3…‹´IO_=‚DE.¢jY^kòœ=gƒ>w“8U½²©6÷yž”­žŒÍº}žÏ5ǃ”XËÌ.$¹]d$Ô`ÒÍ^`›ÛbèV‘ä½l ]dÑëëõº\Í–2OÁ@4Ø,u>/É·eƒQB`3í]HWÚKvpyx5» à–3@é†ëÄ”ãSA§‹vÄ‚ú)©÷á(½Ü‰㨪8Ú›87PûÌPÅiŒFÎ…D2„íÅ®/W»œÜq²ÏwP’E£V;èìU=ÿ;w`ŠÏÞÉw˜Òz¾ùýËæèh>­§#>Š×aUԯɪ`Õê ¡ rQMÄ/mÞdVnPŽˆpÇTÐᵃ/T¬¾u>Q¹CŸ¦¬^^ÂþªY€ fôSv ¢þî…Ew•„èA6øcN™¬Ø³Úè‚‘¥+ÅùWJ$”ÛÓ;¼¡¢ÏÒ*)~¸Ï­Èqé5bž£h˜ö ¿·íÑ_Ÿ·Ï”ÿ'Lk ãÍ÷ó2>jLÖ">àáþðx¸^4 àGd¹å¤çùJ=Îì¼6Λ8êíO ëªjñì[RÂ76gˆÈžªœ‚‹ƒ¼ï¡/× ]‚…%ÁÃü°ç &’lØšô&S&LO†h€ÄETM--hSnËu¹Ýnf†¿3**]¬ ©îaŠ ®ÄÅ̬L†›a©‘#Ò$ ¤6 ]ÌnÚÔÝ·w€Ý¥ëöæ¿þǯ÷ûÝÝLòH á6Á®•;$E$‚ªD<õðÈ=‚n©e-¢|8#ðàúæÀfj¶Ø¡®Œi’Íâ)èÐEûµ ƒ;¼¢¦MåbÚ$•Õ¢QÏõ#Ã1 MâÖÅŒfa})Ÿg.b]=B j„¿oät›Øîë}Ü}GR‚MºLßr>צÐä–‹»ÿ¿’H`)É»¯ëÛÊGxvà"±OËŸ\,Ú3 ’¦tµ}[™ÝhB€( €3 IR`šÉWÒŒõxïÁé-_9£=˜Éçü”ÃÝJ€6‰<}‚ƃ>èNj·€ØÅЃr™…6O²Ö“‘o+¹VaÀ'ªœOœîQÀ€FØ’™ óîd`GðPJG¼C”×¥(ÍffY`Ñ “«å`”fX%¦¢eCPw¯{ï‚M¥€>mÕwÛÞ`†lîë \ào«½Ø²\U%`åj[éh¹g#›]¡G]Iqñfå°â£ºêyâýñãü–oBÁÙçÓÖÿ${kßçè†_ IDATEOsÍóÛ3á)Ï¿ìø ÿÔ6&ÏsDI¤>‘Âò<ó Î!çW#œ~ûÜDõžˆÄuNÄÀ€T„ÕÄ´ÛI<µX®ÅÚΧýÍC>¥©Îíÿ›]É3]è·%²fz‹_s¤¿÷ŽO‘r üàÿ“Çÿ‚ŸL©bŸÛܦ“»C–B,H¯Oª‡VðÌÓìœÜZ=å´)Ñã:E¥GUìdÊBæC×ÕÔ–Kt—íh4èYƒZYÜàö¶®_¶íÝUCQ%#†ZÉuœñÅÁiÝk2<@’8D"DŒ¥¢Q ™T=‘ç<4Aéø)ëÉsF|%È!úœž2¨˜êŽÙÐEi)ܺtlŠ‹™9Ï€ÄóŸ—= ¡8´…Pë6dpD<ŠoŸ-†¦’E¿¢b]­‹ŠNB»¨@ÖÁ©¤ $™UÊIz´^óþlé K:¬kêÐÄN‹Ùì’?Gdûÿ°wõ\rãH2Ò"heÒê–Å’µãiÿñÞ?:É\KUÖ¶,fZ¬8#’ÝúivîÞ»}g¦_W—H32##Hx¨4‡Jš÷‰ÿ7Yf °"6›©(þò€¨±Y1‹‘^#*L5’œ!—ôèzÕ,‰Ø¤@u@2¼‘½Ó›£å~}÷=7°pGÔp—Ns¨Ž ‘x‰•¹‚ÁnßQ< *uN5õ^Åëv²C—+i!a3To±¹»›w´EŠm/[*´çA”'¶ÍÆN™&ˆÃw4rÏÖÉþàP7ï{ø½ ×Õƒ¾b´Ê¦U2KzÃh¡L°e]ŸÍ,~ãúµÉâq™¡µQª B:5×›J¡N®E8K”TÏJ»X’WZãîîñÅ錆£Ý÷"eÝYB©qhzµ4Kó^tm-ƒ 2õFG“ލtÝÞˆ–Ó”œ#ÜÍ3¶© ’/gÆaˆK×bcºšk–èG¡R&hÒ d(Ìòvñ~²RÕ¾ú\ûÓë°ß|‰¼ ª¿×ŒüíÏsxzƒþ:hßú;¿ÿfÑs„——]÷#|'pM ºßC›ýßú8‘gü€ÿãÇåEò&µÖ/VbRâŒWГÿ‡ kÒ„:‰«E ›RtRgoÄ 0Q›F¾Žp¼ôV-K4ªÌPe­¸Ýn~ûà/®"ÜfÁ¤]ªIOx}ÜÿµÝ_Q9:š„`Ô@s”¥OÛxc ƒ"@Ì>dOÒe/S L&Éì•í&8ÀõhCè";|Ú©§¤,#X<ºƒÒ¦é*A†wcú2‹dÅX´¨LÛ@yîVÜU%€N•ŠÀ¡Ã‰d«Æh‚˜©šŠŠVŽ^îDò´EÌlYÌÓÙ®‡¸Tåt=ú/à\éJT÷êf+èœ9A¦Þa‹ç%Cÿè|ò>¬+œtw%îmC V?P踙®w”"Rš3\Ðg&u¤¶4Æî™2”ñ‚P1-b ›ÕÔ–¥wOå"JV=.-sÈx¾¢[Út»F€2žœÖA¯Í½Ÿäj4$ð8ŒâXƒ1¢¥Dú‚JAˆkÕìH?àU@JOO˜Ùj©Ðå6+&ÑÙL ö9¿½["ÂÝñé²’»Í1‰Q`fˆ e8ç#ô¨ÕyºŸ¹óïH-h$¤Œ P‰í_Ÿ}»oíñrg 3}¿Þ€]@š¸†G&X1oÐ@H,E³Õ ƒ7Žêã© ”¡Ÿeæ-åÒf£²Tœ$¨z$›&•*8æZÉ© ¢‚ïËÚI!e™ÈÜ€ 1±“N'Eõ£g7 °w7Û=ÜÄž à0(ï Û±÷ éÛ&»#ÉóÃP-*îîQÊÉÜýþòx|Ù²r ¾“õ )jf+€@,XúzŽSÎŽ~x BÍ–§u{<|óÇËæáÛæñ%Hb™DkVÞº¸N†ãZ“öVK‰$ð¦ýãRA¾²z¹9¶±.†}(@xº!Ö”'˜5 k"g;=ÂÀ i .½ßÁ ©WŒ„UDÛ¬­æŠ.í&0µhTÞÑ:Õ]'Uµ!{q GÅ,=cÑe¨€ì–¼"RTfÕ<ùó”H‰ I›@²Ig“ÜÛ“j Þzq5©J—0È+PEC—R®Ñ±Ù¸¶@§Ág}O!>i>h$¢B"³3‹À@af݉–.Lv#œ&½j¹;÷ ‹A€òÊ4%úJ’-X5j°w½wbŸ#“×pþÐîþÑ`œ¨W÷Ú“€d /mêtèü»ë5<Hå²K¯^þ¶™é;ý‹ÓMÓ•êüÛc™Þ\õ«]j#Ï‚Dw‚HÉ€°:«ƒ°b¶èòlËÍn[m¶Mxˆ)¢3*ˆÍ«La™õödÃÈ]ô7 ´3>9"Áÿõú/|ÊTˆPX_:Œ¾!ТTÊTšy~_Ð"ªèNIdÍàhDée`NßB¹95?çŸ\R>¿ɮʼnoÁÅŸ¾?øXàRþ#ã›÷Ï_'”#Æ>)÷¿<£o3Fÿ·ãµ—Òw®âG÷þ#bù'¤ë!XÔÅC#;yxùIðjdÒýt'’L©Rõ$Ø ØD²OG~T'¥r}^·wÛ½Ý{’{êtƒý¤5#©b‰ÕT%-"ÝÉÒ,bfRN¡ëD}û`GMÆãx<ò€˜äÌúOéƒO~BÑf2–ô…´ÀÔK$gº6FëDßÄÃÊÎÙÄXd¨Ý¦ ’K³ewE‹í§&€–ì1h Ia!Ò6[_ìážØþÐj¤:w+Iáß´Ø=‘dÎF¯ßž~WRƒÁJìp8+¼°;.F9”]Ùç¢EÔf fðT`³b}lqéY€ºï÷Þ¯›k“º)nï‡gŒÂ†|ó¦~}qHô»˜™Êú4bÙ†5E 0@bBi@5Q'`gÛ3àå!P™D&X1½`ÕTÅÅÂQ`«ZA´Ðb*\Ö†G¥ìñª"–IeÖX#Zo…µ§…•±g»»ÈS‘b"¸ýmÅ„û]¶ÃûcêYÓc &ziÌ î‰üÒé*cÄ@÷‡ÌôVo–žÛ1cX»éè·g¹½ÿÏŸäÓç;Ã?ÿóÓív{Dp<¾¸oäˆ3Þø»: Ê’†Lü²=bÓ nb¦±’îÖŒ:öÏ%JFaO´µ…Úp(A÷ÿV8BZ$´“x…LP*¾õ.ì,ÉBÆýNˆÖá'HËþÒ£VŸKQ¡S j¼l¬Ñµ|3¸®@Czí²Ò÷ˆðtÒ’bE£ºïi÷zT0 Ã)êéÑ=©GøîÍ}óWÇO‹LýôÌE¥0‰Í„eþ-ï¨@D}{Ø$PÃx¾—§u}w‹çåþؤܷ—{JÜG̓–˜z ê‘k»ŠÜàôþnt!_ýÔCž*£š$•ƒ\ŒT[Sµó,žR­0W£—£"²‰W¢RkPM lQ@µH@±{Ѫ*Ã]AaY> ž’LçÊ×p¨w¤'Óa,ºÛ6ÑKÞ¢".E´iRŠ’TÜs. B¥o›JÔà.H!I. ÚÝÏ' h2êAQžóEãvj%W˨ƚeÀžuÕ±,˜¦êÕØð ŠèÙ¥œÿ›2^á•ë1-e¤ÞH’i³?[м³‡D!¡Y|?T.ØwP\‰—#‘øíq67EDÔ"ØdÒz©êd<•Ë+û ·¶óKÞPC“Cs Åè(}˜ýñxøý¾=œd@,9Ö2Î¥£ÛèõÖƒ`òŽó»÷àŽÑ•¢²,ºÞz#¯–NÆÖ¢¶ØÑÍn¦ë“Ø"¦0Óe±aÁˆT$ÍÓ€ä¡Ù†x……òÓ¯¯€¨˜Ä†»&nO7u+€ÙÊHáÙwwºÓ™}s¾ xú)þôæøÉÚñ¿\øýA„ü,þ“þÔßüÚ¸²ÇÿŒsû Ûù}üÁªø¿óìþå/üÿn|ÌðÝñZÀ ýMBÑ¢˜† z»4@Œb4g2¢ñLT·!áx<Õäb !•Š@Dg[WˆH‘ÅÌ ¬ˆ¥k…ä NHRk|”üƒ“ÙÒà1*XSš‚6_žŽ·Þ{;oÊÞ 4xȹ L³läs0=‡’ð®R$Z çLÎXQ3YŸW{2™Ááßäí¶®ËQñ/”=ÜiPUôÚx¥¶ÓJÚ¨xÿÛMÍL‘ÎÑHjDÅ5élÞÞÁ›75ÊbÔÂ^ÊÈM»£¹$ BÛhF]ßßzœo/ô±ëçâ7å$@$÷/EPѺ/NBÜ·-*XÝ“¼C&IN„^£ ßÙ•‹ÁtZD‹RRiè2—Lö‘]ä¹4]Gi‡ëÑ€ )¦¤ožW½,,êT6wGZLU ï5°‡ ¬ˆ™0Ìf×”;Úùxyؓٳ ºVp¯¸hÂ.í“ÅóTF“<úÜÁßåç³íHæVP4¤Å‹(Ôžìv[o·Û²˜ŽƒArq-°ÕP,ý´L•@”¸Ä®çÔC¤p&'óàÀ~£#€5=#"ª¦€˜™¨á²ZÈáÞ€qPóŪjf¨°&ØÁ¶ƒ6¢òÐGß69ù@hr1zxQT‘"£%QtJŒø}ð·«ßÑ ó,Ÿ‰|A¤²ÄQÃmëi·Dt¹äQ8ËÑü|¤íž„ @£“ ûÏþõëý~øîÑ4eÿø¥‘lüÝ}ZÇTšè$`‡ ½¥f„"ȵ{»­·Ÿn¹ËŠp„¸?²¿–Ž\¢²½ÚíÇÛú’APƒPÎ9vbˆŠ[ž}œë÷_ÞŒaî R8± Ù\ùj…V¸i4ìoðæŒ­ª*™ÌT‡ý& ý;éß½~ž§–øøë¥ãS àD%Wºoþòiz5(üR–üýñt¯ç¸R ²ùqüòÛ?¢_¿<§«ôýoÿ;Œ§vŸoÊï_©? àÿ‡ãc}`/*l©‰@Ú3À,*TÊ ‰¥=Hþsws )…©2–dY_e³@«lª8\«Žˆ…üæaNõFw¼ïdè"¢ªu¦ÏçÓ_Æ¤ÏÆ!ß-—pnb#X†ÞÀ}÷ÞŒ}pü(£;Q€Ÿc¤Ô”jÃD_¡ùCçR#ç ù}[¼kÖAf˶\QQKGšÉj¦ª¦&fì Ìô<™5*"ƒÎ4*k53SÅq]æ)ë°ôèŒQÅ]JŸ?Ûó¼VEƒ‰kr·•ðÙ€×bdàô&GJªª)hîÎÊÜ]%ÕY*HŘi1¹^j‹,„üp?N¤©Þ#¦¢UßJÇjuvKÏZGl/ ´é4LˆëЖ¡2ЈEP`Uu1YTÊÔítD£VJ5SCr¯›è\/´ÐßU²W¢fA{LÓòé{Ÿ);‘2þá3ˆHQÝŸŒú>ŒNTQ9!©ËXì|â. Œ Á @*dêP˜Î Z'ª\òYéÍdЧ1ì93'(enw®Ž Fÿ¥¨îî·G*tQSsÉÿ“Ýñù]Ï5ð3ÿnbã:ç@òûÁ¶Ÿnëë¶ý°®«Y#2­·ÁsqA´Ø^l}µD‡HvƒÕ‰‡N1`t¥s4ç{ø±œÉ+Óðz0ÆbÑå1=yY U &5ؙ׌NGE¤ûh.ñ‹÷cAÉ/¾“ükã·Ó¿þcã¿{Ùfõûñ øß„ÿîãÜ­þ ×êÏøŸ|œÈÉ7}õâ€h>äOUŽô~X T$Êd¨&_‹9É@Ôó‰{Îïáè‹N¥¥Œ_ ÄXð$* Ê…f†R†z zˆ ¢D4úûƒG$íÙªq˜m¤Ï³Lªe ™e'©c» wS[$²Šì›Žù ÑÀDKTÕ$n ¡¢…˜r¦`X·´†P3ÂC&P3—^I*±"b®µÁ•cÞM0.ç`[ÔÌÖCÐVÛV3{YuÑh"©¬ss)W‘=%ä1 u‘s)@4?Uò™ÙgS|Ö{A°1d該®¡7-6ÌZzhcp4˜@ãíØ÷ì~¾_’VUAU-’›Å>™½ŒàÀ¢Ã01F¨&ÁðýÍo»»£s\½BË뜮àù»š©H¢jT“É?´ ›{K ·°¹5™p9ß‘É.+b€¡Ó(þî¨Ì>ÊIèä¾ašÿd…ͽÃ3gè”5 `2@BhU‘jÕ*«™»3D¸£G¬¦/†jŸÿr³ªŸ?}ÞßüáþõËݳ©q\½1z¨@Mï½IvîQ ‹"w¾!Ÿ{·Ô§ë2"Õ¿ìw¿ýô €¿‡—\“”Eö·û„ä%ÚT+îþÐ<;ÕO?¬?~úôéÇu}1€hZ:Wݪ htìo„EÄAo¡ã]›MœÜÆ DWaRµˆI‰jørÿ¨ DmPFI4˜ÝP¨TQS+ff²Èþó=ç´ ê2Iõ(ÐL¸ ðˆýÍý}ö$*5=·ÑûÏ÷]v‘ªV§o­„Œð4“ËWiBVu}5[ ËxDÉ`çé#`fÛ¶½¬öb–¯| ¸Fs:°Œ[†ªš¤M®nWŽT(‹Ž§E$™/y©|@¾ð¤XTËØ8ºc5S{‡y¾Žð²ˆÎ$fgä-BBªpR»ú„šÒ¡:3# |ZEÍÖÛ^L@íÍS[ÁrÃQ†âXâI·‡-#Ÿl}µ[ÕmµÇî÷{šJ‚N*Ý!\†¬C U"H°#q,j9oŸêç>ðïÐÛäéÊ T @xTÕ‘`Õi!0ÖÔàá¹4WèIãO‘6”`êÇðH À﾿¹ˆ¨`‘´ ;‹ë<£\]›o^YÁÎOx²¦€,ºÝnŸ?^_ÓŒVñØþÕ9ThQYdÍ ÃIh€-X&…¾¨"¡Ðá·6(ž ï§mÈX…¸¼y‹ŸT4òêrbçtJùmR]bðTˆJT@ø¥ö!yÀTàÔBkïü«ã—ÿ‚㘗$þ¿|¼ÿCã;Õïߣôýmøv|Pïÿò:ÿÑñgüÏ>~µ!R†§Kò¦@8¢3ò­ –3r=%pLãT˜èÐÆô$à>)÷r÷ƒ§/¡(Ós¸3júD]ŸÍ^6ì,ØJRUíþ~׌Il„ÀÌÖ×ͪÜïã,¤vqeF†Îæœà³ÆþöÊ`¸kBÒ0SGK4{p/ѧVp°,‡® $e8dª bAÏ ~u…ÓŒd6²/Þµ~Ó“ËõI«¨Š.ÆJ5d»‹Ê! Stä—A6‡nG„ñáÓ`à‚b8„rseáE8'4@‘(ª]¤œå½ ei(MQ íÒñ^Ëfnu*ÖoÍy¤dZõð¬-¥Ê¦Àƒ’xÎŒÊâç‘yBïá-ŸæjIÓ¢T$ý5M¹4±Ís?;ž‘¢Yâ^LïYÛ’¡Í£ôÕÉe#¦áV>Ùb¾ìª%¢Qæáø+kŸ·`óAˆ…üH"î Ñiì~OIä¶šïîï?Üÿþ¯ÿfëj/†jZe{5tDõ¶ÚaßmäÆŠ±‰/ûa¦&5sN–{bYé6„ø³ ™(ã‡z¿ÿK’T‰ ÷‡ï¦²¿íR âh`Krþ knf·ÖÛ¶Ý~XÍÔ Ø\êPßi…TQ3µ%¼…Kr¹á=[6C-z=¡ùÒ¢Ð)™F앹Q;DÞï`âu5]£Mªn·UDU“왓ºh@´3 Ð=-¾üðhÌ>—,45÷="î»»7,]WÛ^×õuÓ*¬ˆ6\ÓÀùºåä,HòsŒGŽˆÆ8Ri’÷Ê~¼ÝÌ63rئÀÃßé‡{Ë nöB,f•öp€Aw+éÁMLoû´ÈöjŸ~¼}Ù¶Û|¹ßïþîÝÙ) TaGºX?EL('Ãu¯5ýxÇ=.Ù æÊ:O>R˜x¬˜™l¯ëíu]_W-ÀžØ;€ža!i¶­Øk Ël† ¿9@Íô#ÐB{8ào; ·Œ\Ê%¦“GÜw?¸ïFÏj 6¬{ÒCQr½Óœi+žfK@†ö6 à¼Pçö•{ÏH0†-––‘èÁÀ ‹Lp“‚•4vh‘ôŸ×ªVÔª²Áë :[½³½’«Ì 9ˆ¨-ffÃö¹f'ÚµE‡¥hΑÊ`E´Õ´$ÙJQ<l¯†@>xiÖˆ_\S]R$ÄØ‘G¹}zêóŸGLBÖ³_ÚÓÖe""“ç%8âØ£Wö„½Åóqž>~¨U@„„veœUb£ øû²wõÜm$ËõVÔ¨j"b£fϵ¿Àþç¶#Û‘´‘½Ñ‘ÀhêFèŽÊAu %í‡Þ¾À>;爇„H`¦§§»>/çÓét:Ÿx…̺é®8¯iæWƒëû8áo7e\>pnQËq{~~1³\FظŸý§ÿþ´_v€"j&VõŸ?¼,ëü&? IDAT².†A@l­áM%%דû‹&Zê~~å‹Ìü6gïÉÒ²OC¦|ÕÌ,À.q v&²]áÑ"a(Šž2‰z(:üžãûs™ßŒ.÷Ûß·‚LJǧ÷ HüÏüͳðJ1 %ßüOðw|ô<þJ€¿ûø“ÊYßx›o¾û;5Žo2⇠ú@­ ßÁ¢‡‡§cªW²…ÑT£aÀ"Ð…·Že‘¤¼ê AŽ¢W},Ï,uÖÑtÏ=¨Á“!1ÜÞ£>—v©L¡56G 3Ѻ¥Xet¨Jj‡HSqŒ¦îŽ‘´F”±®LuÊmˆ X0ÜÏi¨“— 0Í C˜³„xE„»K•ìˉÜEÉÄ@f̤ê¾ HŽ(Œ›EÅŠEÏD×ìi[·4¦^ëîÑm]ϤªI5«²šÚqQ7§Ÿ?ŸhµóçýNo®j[jf[Ã/ÿõé D#C#Í`!‹ÙöòœÚÈ ,·ƒá q àÞ°ÍëÊN‚hE$T«ˆê*™,˙ѥ2V/ª,´49¬PKÜq™BâsÚXKšQi–ôô~ö@‹d—±XLå0oÜÝÀ ô`Z ª˜ik­’¥ o,ÏßB¢èŒ>Öa‡“7¨kÆ2 h©È +Ý£1ûè7Æ&ÞU™ ê7ÑïÆPU †ØUCu»†7úä3Î_NôËî¾+B«,Oº—‘"²˜¸À›‡Ó!€ª¹¨-ÕÌlÝ–Íï|fÄ•ìˆÀù²ï—;Ùx:e +­D!EQ€®MÀ2]+o ±1DÐÒªTK°I0ذïÜ/DQ;ˆ=)*²¿ºÙ2.¤L=!¨VÚ¶lG[벘hBd‰ð!WVuJÍw°E, Ge§_c¿øé|Âî^ªDÓóÅ# Õš·C«fͤF\iO‹uˆêz\–Å"Ö/ÿs]Y^ãüy?_vSûåçÓóß¶——g«6òÙoÌ›xuuß÷sºµp˜¾V‰>Zîl!j‹©-Æk@Ä[ðtÊò»‹èz\ì¸.Ç%Z°Ó[är‡*~u§®& CÏUãtr¸&ºAmYŒ¤UcDRÍ*´Û:ç^æ•qM ÷¡ëfO†ž|¿œÃl9èºX\¯P33±bˆe­/§Å>}üèû~vú…ˆ¥°½¥@ºThâ~%Öë( Rƒm>"ìÐB-‚§Å`tOHvt  MÌ_÷—zùðã‡ç/Û¶j»“ž²X ÷Ï~ö320oЪ#JU-‚†Óéì—¿úùrVÑåi÷—ãÂk,OëöÃ’ÒÖvýJØx¾ìûë¨I™jRå­ê²,« ª:¯át…Ü0PZDLY´ =áï% ™Ï~‹m¥”-í…SÂp vƒÑfö«f•"IÍŒÍHbÇ-íí$”ôꀘšô@…7*ÔçÒ”ÁÛâ@ëª*fYDUÐè]Íh€l®0o´ª1p.*5  2™2~uk†¤Š¨É•P]ÔäàüÌýuG,¢UÅL†¯“ËÁv\ÇVU…=Uä«*:<"a h4Sw²ÞhLÐ*ÉFVú€­¡ÀžnnJ1(Te,ª¹s–>‡ÜF5íÔ T3ï©Z‡VÅaR™Ñ8À-"5±áË“áFËGÚ14Îô „Šj+3´Ø_Ïl¡Õ¤äM;Úr\íiÍ+=ý|úôñÓ~9Ÿ/î¾ëà˶®ëËó‡gÍ^vÇÌE;²ØØ}Ï…ïiO0N· ³ã}?8Q6cæ’–Ú˜* Æ$G PÌÔœ<¢J4MÇÇÓÏ®sÒ£BÊ€þ<Ⱦy<Ö1çÛÈÃÿ~íïÛƒæË»ã]³=Ó¦ÖYì_É„¿q޿Ε¢q)€JU¤¦÷û†ÅüFæ—ùïëŸõ«GŽ¡Þ”Jî׋7”xè¤rŒ°gVÀ9Ü¡ËÌ n§ù•ñÌŠÐãì à=í¿Ü/)Zàw øZ²S¾&/¯±ÏbÙ£ñuÿêX)þJ€ÿïtá[ÿ0‹ôãSÞðní0ä¾ %]7}Fi<·O‰z“d|wÎ!ÜMVçÛÔRejȤ¦š”K´ž"¸¹><\OGXßT^o—’¿ðp.7ý'¤DÇXhDQ$¶°±{ªˆ¯¶°êò’5•@ŒÎ1Ær3×›ñÜWûl54J(£IUEQ3x#DUTaƒû¾m€ŒÂ}ßÓf&ª¯OÆÁb €¬¢0;XtO«'¬ :í°š™V ÈÂ:]í Í/‡=—6ÎÈ=4ý“AO‰H¤Këh2$'ùöcúЦ‡‡ $qïc&p´îrÖ3.‘Ä|ª™4wF´4sZuóíÐ*ÃIe²’PÊ=×ñ~±°ÎŒ7“ü”?‘yb³†Z”}’6ë$»‚óÇG–K2'á1’I ø5ß?©UóÅÊ $‡ìóŒ]¢M™ˆˆœ¶¨‚éʨN""£ê¢BÃÌÖL܈ ;Ͼ;ÃÔ2¿Í-¶ÌV„[š¤,–´ ”‘ji9¨VÈA’šO„uD(©±¦ŽéA4•ueH²gæøGؓ耨 ²<™ÌÍÌAMi«V©"}ê¸ `¦ZÁ«>p#i"0³Ù„â‹(`ÆtŸ^– Àã`R%ZøÕ:ÿ×Èd,ÑóÑ$aPµ!V,Ö‚¤´Ð2½Í0ˆháîŸ>íPaf˺¨¨»ã ¿ž£‘ ¨,i¬"šþŸ9¢RU»[JÊÉm¶©8`/¬È3}äiÊ TÑ*»(;ìÊÓi—*jW—ªÞwtnOÊmc§ätqo©wÓì5%ß$owFo€€ÙtШ™§Èì¡•˜H“û g¡Lf“-Z¼¼<xÙžÿ¶më¢jªØÑ"‡NE¥ÊV”¤TÓêl64ù®ç×ýF¬˜NôŠC|üÏþÇ%‡É;ÙC«F ;˜—YÃídˆ…Þ1 ÉÈV±ª¢£¢7L\ïšÂ’Wg*hFCÈH€S¶Í[˜@ÖES pÔãòŠ¢Snˆ$¢õÍíÕ±,ÁoÛ@q™J©q{Ün3g¼ÁŒþÙ¡5îÀaq-Â[Ì[ èôóå<Ìü®ˆ«R *V áX4ò†3CAj¡¬Y.ø©ýž6h×@óH÷¸ÒäV[l$TÓ¶ 3I¹I=æVR&­à±$Y ]Þ¬ì}@ÌÆÉ=³»IQ¾;ìɶ¶nÛæ—ð4W¤fø=TÊ$›Ù}êñô;ævP–n’Ñ…¹Á2ÑRÕô`è8ŸØýâA€™²ŠTˆª-j‹˜=„j@îû-¸ý7ãpÏsœußTnï1K¼™g¼£fçŸ%P\¦§HS)”¢RŽ-SQm–$BC8b_œÂÇWÛµ¿}üQ᥷OÖ(ð'õ¹îÇ÷ðñö›ïi°ê»oå‹—ße‰øå/çÙ|{pÞÝÕßÅ?vM_v™k}ãø+þp<ÞxùÚ‹·ƒ÷ °¼•À¨žB¿§‚ó¥hoHÙ¸½Nò„Üs`¼1Êè'u_•9ò"½ídZuD‡¾E°qÐ#F›£ª½ew.Ô®“›?Ú,É(ðÍ@Œö/@F{P@L -FÖÊ*T ªz Ù4"í+¨#T"¡*pXIå—­[x#ºdp뇇ƒN© ™éÁTÌË«W^ξûÇÿø· ¬™â.ÈX_¤*š'¼“€zÄff§÷*¶š™=­¨úÐé½SžäÆÎe¿())©l¡Aï*ÅÑdd„³¤ªSØ HN(él±&½-2| °,ýÍjâ¶¼ÊMw÷}ßS9•¥Q„S7£(Éô­{õ»e¶àÝB>;×yáèDfÎa)ˆÇ=ø6©ûíÏDZ‰ ô¶y¤\gBñ¨·ÁÔCŸw§êà:vô«$ømÉ™Æ^´ZÌè– ZC“ÐÁFw?¿z\C)Õ ©ºª®Ç éfv:èŽ ÈfÀ”Ù]^*³%™WC‡Ú›`KªX1•Á:‹ž5¶¼p1Óm[’}< ù¤ƒ£ØARßǤ&0dŒ2d¤=÷©Å+ €¨6„àNÇAÑáî‹éò´Šûéä'œ€´˜r¶çg-*5ýk“Þìî ¿œ?â“TúsAo~:íAÏ’Ár´uÛì`.xY71ÑÚ0<ÜÝH$¢›™š~9£àÇù PÝ~XìiEçé3ðšŸîÑES×@ PBÄT4-`µÅV3ž‡ÉÂÙ †ëוö0dlõ~0© îịe¬¯Ò"XÌR˜G²~ÞQO§Ï¾“Ñ௎*·§8i2S Kå1EmÛ™£ßíå“©ˆÄAÑß~ø°mÛº®zP¶d<Îų¬ŠV)’Lô‹ï»»‡_éL=gîÍ™* =þ5ù „,GÛŽ›·!¯á×ðF;ÄÖãâWÃsÇɳÕÀOVŽj¥Ù$¹ÜÔ¹’@TuR)b”غ "ÊhNò06HËEïQE4SªHQ¢åÒB„@T³zˆû£B}¤y£ +÷=6¦Œ‚B™µ¿ªªbUehLŽ[†4“ËË%ˆPƃŠèÿ²wõjŽ92`eÒÊê–Å^ëΓÞÿ)NÖ®'Òši‹€ÅL+βXìé‘´ÚÝ3tÊo>‰Ýd³²ª²ø D ¦*=âs”¤ý¿c×J Ã̈ùˆË— â~óË×[ šYÞ ˆ®ö"Û „¤ðᨳá}e-T,D8\Ö é4&͘T¯Ê·²< ŒÝP·ƒÜ¢˜LäKejönä±”àÅACÈ"æOþ#—뵊ÛÃ12 *µ^ö—MtïmšMõBÆØ™5Šd™c4„»_Fôw¯&‘|H çÍìÅìÅÌ>OÑ=zÎû½~ü>|¿Šw%‰ì ²IMŽ!Æç;kªY%½¼FQö •=Ø5kæ (£PéŠÂƒä<1ðwóï~Ì ý‘±2¿ûëo§ð¯äÃh ­óÉøÍ@îÛðï7ÆÁµÒoýŸe Vþf±óðqG>¦IžÌñÝ?ž¦¾Ñ'SbMõ×R ¿~}'þWügß[z+fÈu[­2  bøÊÎFLŠèâ{ˆòÅ È‚m¦vC'íÃ3B|öT(ÊFË.i-PÀã÷›{^°É›¤dñÎj’âCBºªDPU€Î˜0Ýç³O!ÁÉûÉo³JVCæ!\ióÈÙ :övhB€HJf©‘b!Ã+2¿îc=´Mqwø=d¨{ÜœÄÕyF¯¸|]7,"ޏ´{š£ tÑžO‚)ŒâõÌHšnÇðê\-¬õ¦½àyy³dêl±îÐî” pÜŸ FY_ö(ÅÔRn7«”R<)1Kyé W3WIv*Úƒ’Ú§Ë tASgUü SMT1Y$6îX8`‚ýáHí^‚~øM[‹³'æs®TøÃ Ë:áúÄz¶Š¡ºQö`»å"˜Ü{#‘tS;«-æØuÁî\N&8é(Rô•¤åÑBº¡E¤«twÞ31¿t'ZÂ8MDy§©¹›ÝŽL¾¥ê߯cw©¾¹ôqvä*݇Zi)š’È‚¦Öq6±{{=— ¬}³õ®ë(;§Ë¬ò–芭•0Æ´—’²ë3giE»¸@»°‹OÝá[Yûõ»sP`ÚQÛ ]c‚÷•;H¹©W³WËiLjëû•€t¼%_ôÝä´di§VWªˆvpˆt5Óí¼Í<œŽ[Å j/f¦‰x±“À$^¶¸‡»¯þÆ5j}ÂNºm’¨é<€1¦j‡@Ø—¹–eÓ²sµ*-¢1M5´ÛõîñîbnÈîƒTÒ†Tº q{…™‰]}Àï?g{'G–@.‹o?F–òö$`ÞB ë‰ÐCv5?áái !¢ÒÈá1CzòútÞ³¨›Â]ÓsfWµ«š¡™œwÜnÉÍë·¯7w·.19áqƒ/J¸y\®WkêÂ6 »»Ï[VPe†Íƒ%lvMÝ]›HWí059%›Àvu/ Sâ›®ÂÜ*éFêœ'wy€¨!{ѵûdðÂ4Ò±X5щrÏè®h!) F½öô©PP=)1¸™Y²s-Š‚&ÕC(ø®J•Fµk tèm\³¤qex%³N‚Á„hSàd•…Ð/—«ÇÊ« p~Ýb÷krgìÃï®f>|ë¦"f›kLš‡3ûÃÉ”&–ñ•…ïRP£¾§¹Pc& ½âà!õØ´°iY–oEÉV@èÚˆ ¬èPOz~Ýn?X„ ƒ“>\ìA¡Ÿ_•/c<ðA‚‡ÅcÚÉÜrÁL&GZtñ®˜á©]´@ÒUO!e=’~mIm9 ûŽ´öeYÙ1«yᤞ‹»‡-?—1pþ’;Œë7iUÊ…()©Ü=©2BºÚ)Eš‘-îÖPÔýÚ+áO3ù³üñbçÿÙÐ÷¨÷øòït½ýï©>ÿÞèw3™eÖ=oÀ\Ñ/€åôìõÑ:¶Ø È)-•þt¾ýV¯òoÄÀ¿küÿÉLJø·„EäË)?  Ð€KÅ‹OëUw‚Ì…›š«kâÃÂ&€#ù> Þîï¢ÊkOZDMÄÝ=Ü¿øíê1\º–¾RW3¸ûþñBL’Hvâ•v2­Lú«Y8n\}ž9¹{èi)sfdÎpN uAyˆè3òiƒò€ µ•ú„s9œˆˆj ¿ózs¿ÃRy&IRÎ0ÛºT:Ï&rRUÁÜRw4Y±Î¯›©_»ßÜýnQä(äû•)Ð’=f4éb¦r2éÆÁ´ÈL8nêÒPùxg«ø,@ÌE<Ö ©›‡ÊÁW¼—Õ¢Dc…ÁuéÚA5”À ¿#ÝŽ¬eY2™¢4épL X¦véUd#Ô̲*‹!v&”ôaˆ?îAÏȸú@ö±·¢”Ⱥe4h$ÓI¨å€îßûáë1£&Ãê!õ¾Z¥8¢ŒQ³aÊ儨`졵 ‹é¥ŠJu§¿“÷à½Üý\ åÞ½;€¸G ˆØÛ[êdiÍ6á 3H“dAGv—EM¦\9À³e.bªJP“.‚Ô˜µm3Ó½Åw/KÝâcŠ­xG5Ë#ATNj¦ëÆ * žÓ¤Š t;™w=¿XfdX5F\ßÝïžÕœ½ÇA;"”-„Á^êÇÒ`̳œ‚ë×›O7èù‡óßþûí§ñÓõËå~¶Ûåbfªª¦lqùòKµ»K%Mò\¶Ó“n/v6““ʤtµ“Š„½Øy3@üvõðì’µSIv¡ÁR@ûéR¼ôÈÆ¿óöº_ÏvZøÌâ\¨ ŽÔºUVjoyá+± vñ“‰nî—‹›…m‘ÉíºmLšpSƒé[“Ëûjt¦È´"´™õðbŠˆA4I³“^OŠ–çìH×Ê¡0‰âDô‘,•ÉQÔÁH)ïÄ«ìdEœ–ç3âzóËõòóÏ¿üòËõËÕ߃þÕƒa'5Ûøšf FÌo[ ·“…€)B¶d꺒eO"æUê¦fª€€A†¦Š)VÝûõÉîØÇO‡¯j¡³œo}ÜEM×e ¹C[W]w‡n¦ÎÇ#}ƒ`O‚ð¹‚ð†GêtBÞ7š•³'Ö<.ʪ~°ûû ÿæa}®‰éñÃO¬çÕ;÷ÿ~ð­–0ج]- ´.ªÍµá&¢½x¼‘lm–T¦dl–óL…OèZº©n(04«ýîâàíÝo_¯×2r¢0[ËúðóÛ¬‰»`‚{ÝÐST‘ ­JDD ™T›-{cÍf1¿:ÍÜÕºhWëj={±÷‰å2á'ÎE)Ê>Àù¸_WR˜MÑJ¸›]­¬ûåïÒ. žWSͺ1±Í½¢xêRÃg˜¨h !ë mBšÓ#€¶WûñÇ¿`W#âÒª—Rº¼©É)-L­}­Ð¥¯¾ÜAÁ›c„4ùé¿~ʆáp+³ÇdáC› ©ÎRsõ¤>€6D33;og3“-ðv]”üQ-Ü"ʽíbBú¾ý+´3é|}¸ub*Òº#‚/œÕÄLìdo›ùç솸¼.XcP9\vìL^ÙºZ;L-áÖ‰!i]m{5éH¡/ÔS¨9ª§Ô9ÃýöÕ¯_n—¿_~ùûår¹\ß½’/j Cv "îÅ¢g›¡éÕ#«ÄÖu{ÁÙP*ì—ƒ”«¬Úà“릂¬Õ')ªf¾OøYÐÛé–2­ É^ÁvÈ"—nÀ îÌžäJ£Å³…cp².øá€hÔ$Ö*ƒí¢);‡þ[Æ*Š™•o†Áf™çÒ΀š¹é_ýv¹x/úøÈÐ2É“¡1Z\ßyýr½|¹%“ÅvÆùí|Þ¶èæ7‡ˆ4-! Düæ1a'áfY”Õü~wËJ#é’Óì ‰ªŠÈÈHV¥ª°ŠBz@ÒÚGd6êŒEXX³íuÛÞ²ÐUPè )>÷öøÏŸþkyÒùe¡Ê¬xû°s Ø“±îAøÝi\鎠Hv@4÷{˜Gf}õIuVP($@:½dú §x¿A;-5¸;tN(¶‚•ÑÛ¶m¶KeÜ•ªH×JU]DÉ9ÇŠ•ûn=æ uRqWÞÈ œW»Ûò¬ËªŸ½{´˜Ÿ7Ë-°*9-_>­ÙÀDWw$p8ì0 7³h¡U"ýîâ…„¨#¤áÖö@^‹€À1ç`¥BtÒÌfBè³V –)G/Ša :<FP0Au^&5 ¢u:ÏKWú¤õ€@Q³ÀRI¢ŠÎËú²®ëlû~SÒ‡›E6|B'YæÞŠL'µ»û=¤p™*µ*‰f3ÿ9¿¨J7ç—éÁèuŒ÷p4Ä©C¾*N•é8k2lâô¼íË®5¬Gl·[4ÃA- ˆTg˜‡Ý=x@̃Íí>¿#PY’=8S¤ô“ˆÐõœ áÑ‘{›Î‡ŠLBQ™{(±H÷‰ÜÊûÝÝñÞÀùˆa–gå  Ò{¼['‹½g¶Ï7è/JÒ<ßÐsí– ºÃœÍ—·¾µÃ¨±÷ïbàÜäb÷±XæŸ;Þaï¼ôñÑqR9Y}ðœ>ÂÂüø¨ˆþ7ý~ÿoN!ý^ëÛ4o 24øJøÈŽw0á=þý>ÔÔô£ç~ÿ ‡Ñøÿ8¾S¡ðøÿƒ‰²‡G‘LÃúx ¯#¼k{ú¼t&‰û&µþnÈ pðÝBö'QH9Ÿ¦®yx N)Ek‘ýr§Ÿd­^EJ¯\ºÞï¦ñÖbÎK=˜:Ãè7ÅKˆK47ÕPÍâîöf™«ÔYµ ä!£—T<#G:=Ž ·.m"*@ZkÞáú(ªêYç…tšHW X•€@s{Ëss„«Ìó²Ì‡ã0{¨ºšL‡%ñì h†ˆTó&ÑKP Ùä "»@:NÇÎ1w$D9SCTœ T£ogþò …^ƒÔC+U£v‡#f#{EöÛeÖ«ãšHuDßú³ªTeÒ¢ Á3ú}ÈI„£P|À½#ç|=ËÜÑ»òýúOÚèR&÷Lõõ4ÑÜKÙOô›‘€ ®6V…á ñÃÏêON”:ÒÇÈDÐB U݃ÒÍ=Ì#,¤*ª"Šä{ÜÍš/˪¥ˆ7äöE`‘è®$ê ÊäÈDiq4¦Ð7'Ö<½»{²Žq7KU}ÒõeQ9³¼™ýã…³ :®Öhc0;ŸÐïòYt‡"[+w®­„N@lÛÍv‹‰VÁR…âO‘v¾CmEè$"‚Ã-»©U‘ Yšè¬:+„xZWÀÞf{Ó=[” %dD=û^6gz@óÔ„“T™”gyIH´m{ÝÑœÓù9àw˜»M ¦ñhðŒÚ!­¹” ¼&çk<Ýñ?Gê\ ’G‡‡wàÕÜ ÅmÆ"ÝÄkþ,jO¦Os˜ÝÞl{µ½uKÞ1ç8 ÇõëKVŒ"¬Ë1†ÜÀ2ëúéó?~Y?­|Jãœ~ª.Ž˜Øš6în¶m·_o¿|½Ù«Ý¶Í^“—¤§÷•ø=¬ö°,á„›Vˆh V ŠÖœ¡:M%”ÓŽùaŠ€h1ŒK•,^%ÛðõH.å{+4Ëz+Ø"*´q;²oœóg¶:w ÎÂQ"Ñg¸1²6Æ!Ñza…Ià>{ õìÇ£ ÄÔ ⎮;Šô¼‹…*²Bþp¶çw>ÈP?\êíÕ=b\Õù×öå<ßócyyõá»aƒs”>TNýSÇ¿ ÿè÷ñòÇÈýp™/þבøøƒúj`PríÌ üoàï¾ÿßðçñ÷ß“¢/¦ ²Ó¥}æ*ÏðC iCÊ(¿…T¦“-Jv”}ø¸6ì±cˆÓ:0zª¢ƒ’ˆ ²23?ÝÓÎ'§¼ä>³É›w§(PEt^8Ñv»ý¶™™½Úhߩжp‘&% áÍ$F¦ýŠÀû šÙÀ¸‡T²¨y,c®¤;¥³êü¬Ÿ>}Ž{ÚR蘗]?š¹”fR”€#1¼Kƒöföf‰áçu]XÍcÝÒ`€óI=œï†ðh)í´(2¿Pë ÀÌv³íõ«™-˼÷0Ë“¢Á[|*²oÛí¶½ŒÖ^oª³v`´èIïóè3fZZw|~ŠÀqŒv2W°a,i— jÈuè‹jwãÌ™·t‰ˆLîM2ª6e¤¼%bE–yFÃío¿¡£z$Ýw¥ ‹ˆh*â¢ð¨s„œpD;·¾÷òPï”B¿C®®EÒ&z¿ÄžÜ&‰šI[²"Z'Ô#Ü ð@j·ð°LÛÀÍU€¤Ÿk†êY¡ZE*yÈÞ¶hæŠÊL¡ˆÌ"Œn¯7„©Ò 11»õæI“.“RÍÓqÔh–ʃ\ø=oŠx·/¥@¼„ }ËGxLêxTj ›Eqp]×/YUÙ¢"•L÷ÈD1#\d"›$S˜náqÊï‘0xé›Å­·²»ðfR±¼è˜ÚúçЂUEu¶f·¯·Û¶³@§¹ŸäápgÁªêáѰ™ÙÛÎÂùef¯†EÕõy±§}ÿz‹Ý¼Ðg]ë:?Ï2k/gHó°–ÀÒl· û*}T Lñê(Ù6ót0¶ì±qû1ߎK¸úÇ3-Ü[øxŒŠOþÏî¬Â£gN²JŠß€pÆý=ÑÃéRTV †ªFæ·¤â¬?¬@3yQ’Ÿ$ßòmÿ0í—0ZOÙXbô°$"I½n¹´Šœô|=‰.‚ݬA|ler× íôèÄ”2äz·<Ë(¾p>>-â4–ÅIöëÎÊUU*)‰ ]TdÖä,P•µ…,o™þÒ\JÀ`Ýу…ºjRUíÅttFÑEÏçó•@‹Ë—‹ª¢»µmÈ®V‘}ΛL‡"ž5[FÉ_ðÔO6n^ƒÚa»{ ˜Ý2>®”t%¯o´ÓÞÍÖ|V^ph ñUŒ6ûÇÇ®Ñ T‚Yì -b1¿âŠæzR.ÂE×uÕuS½¡ ÑâÖÌá@®Ý{µ£y›Tˆ#´ƒ´¬I†ïƒ°>éùãy;Ÿ·«íæÍ­Å€<ŒẼ4ƒÝ.×çß¾\~¿Ü®W³¸|¹xÚn•ÁéH#¢ØÍƒR…]uäd_ E×ó“ªÊ¸«ÖŒ€»!À2ÚëB°pLŸ,ïécY•¹Åa^óýìx@8#ÿ8„Šøl&Eò|‘Ô t <8:óÁ»hÖ‘‰Í±µÌsuV çû¦äoD´pwÍy¥c›=Ô¤¥ H¯–d†¿ÙPMw¢’Eh4g½ÏÄL°ÍÌ’fŸ°! ÐÄ{Øn–²Í²'‘e¢TD¯vs7¸¡ŠªÀw‚UD°}Øô¤ë“†Ûõh¥½Ûþ¸—‚‘:fuõ8Ä!é†2g&²˜+wihòGÖ0RÉi…¨>Ì‘ÊQæOȘÂGuMµËJÕJ{5ËB^›XcÑ8.‘eebôÿÁáPDÈ ’g¾Ô‘ÃÏ~ÌÃ㤻‡XiÕû°ðïíâÐ=ûª×w„BSëkJ@³K¤é}F ³v<ؿô¾ÏM' =|áÁXGiÒ}¡=\B<~¦‡«Ä¸“3Žïÿôÿo›vòÍ/ߣð89¾™ý~óëÿÍÈ@ãÿpüL€Ž÷cœÑà‘øC©€=¦YèW3ýÎ8¾“¡À12.+©ƒÝäáh0Gâ ÇÑÜœî èžÊ®ÄkjZF†Ët,ꂘjóÏxÙ«ú”¿BH%À7¢_1Q¬ç§-º#yRG ?t_JÜÑ;©ÃÓû'ÚðiTU.*‹¢Fún⢤TJ̺¡šïaÍ4ªÃ Sh’$FVª*1<“XOëzZ£c}º¼\/¬ðW#!‹®O‚žLó,Ÿ@ÓFL^nƒW–E™¼ð ]OøA jÒŸsßLQÌB¯åØýüaƒ‚U¥À=ÚóÊôA%|Ïæ­£M–rŠUô‰‚[Dê¬ïvxw´ÁÜÊ û¾ÚãóȜ佑ßç}–Ðf´tÏwßQŠ26õãŦi,Ñ-âá(˜| EÓE9kŸé~Š0<üPd“‚Ð0ÕØÑ$׋*g¾àÓÓên¶G43ssà TÔ« ‡ í}Ô䵊äÑÝB"Ò0) Û1¶ÓÌù½NE÷ªHë;Ô†íW33êy“U ¦]ìõj-´€§*#IC× ]ª²n<üü·ýÛÇ_?ËI¹èårùû¿ÿÛ—ç¿ÛËÍšËBUIQ.¤@[vxüÌämUKrñôNÕÉ€#ô0,މ&(îÍ$Ebn0X ¢ÛÓpˆ 3{1ß}NOIÑšèîÝÒ0“5tÖ#HDú] ö’ŒÙlZ"ãÈB©’¤zdrÒãv»Ú.²ˆ®º”ÜTÝ\Ã,á¸Á@ ¡êYÇölnà PÄ^.ªª§UU)dL6ò†ÃÆ6A8<{@ÕEY“pލÂÔFÊNQ.¦ˆæ²¨ÃÆÔ"U’?zÑ‘àiâ¿Ø»z&9’ãúžUÕVf[»´z`eíÉ’hQúÒß”'Y4IZ Y",ÝY˜±°ku¦ÕÕVÊȪžÞ½OwÇ“"Ä+D €Áì §;ë#3ß±ù­A„:ÏwÝŽÈVä(PöšÎ. ãT°»×kØE˜Ýã=€n—zÝ!)¾p(킚Ž2DÀr&6c¤~UžÒØC > „œ³ƒl§£AŠ{'…BŽ U±<.óW}\˜Y8¤Tõ”ðg‹Í®ßÞnŸíúíu}^½u!†̪Ãm{ÉHT±í–O)…m£ElÆ=¡"˃Î*áÞÊHvõòÖRúZàéþçå„éžý–û o;™¿/š‰„§,sþ/‚ûÁ]³;œ$7Öè:êØ…ôèäÉq‘˜$‹)+"I YÑa´£zÒ;ÀIq,`Éåšý¡û.¨.ªæ§‰¨?Ηˇ /{±ÛlúìÛ7 ØíÅF(JÀÌc}6U‹&—Ëòôôáë¿ùZUÍâãÇ?~ú¯ëÇ?]¯·«=¯¨H£l}PT,—vÄææ’°©©[ÑÃ?{º™|ZâoÑ¿HO[†4âHk{Ï»&pC´p7ß<¯8y4 y°iz¥¾Ý£;78Ž4?¯æ˜„î.è v!` $bŸU°¹ï`ëÏŽ9û<§ë€’¥îFE‡^LLľv…³AËüˆS½þ cö$=BôÙûW}5ÒÏÇJ2>ÛGÀKì. 3úB?«ü¦»›5 —ýªÒßã²3}s?8ÙùKæÁ§[r?þ?_Ö”úìŸxkÊÿÍ­ý%þkç%/€Ý{v‰´¬z°äQ²:i½žûcéÁ(WÛ‹%;‘M¼Ý’SyžçÇY¹K±x-E Ýt~÷Îx†ä`ª ÝO-©êùü¸»²_S”0`E¯° Ý"[Á ú9#"Õ•#2¼ •‹Ñ¼êÊÜk“p\k&¦sM3É …ZE¦¤ †¬ uVƒEÀZÀ »7’W\zûTIyP˜ TU甥5óXíö|Õ¸ÈDŠ¢Šl£¿Ç‘œâd-Ž/uÜÑFêoº¿~d¿ u 6óÖIÚ*$• 2”@læn ™çtI­8ü3û T€ªª+Ãé R‘Ö;ªT¡ÔnsˆrÈE¾/ñnÔ"½„2^ÉdT÷>LÄ} ÝAJ O¢Ý“ÛäýŠ—ÑT˜ Ž!…©U–ÄšV"Ü6âÅX#Ï¢°{| ¾XT¢ˆªÎ„­Ï¾¶Ô +{pb¨(gi¦Üå.9\F}gçá÷'˜KƒHuPIF ß“<çÑ‚ªhqU¥vb-Zo¦²Ú 0õ¨K¢ pVh}þʃlž«¬Âq½*—|¹µXº°")d¢Xé€4·4è®"± à–Í»æ ×uq¨*&UÂoöb·çU e¸Œv\ýD©‚ ˜ÙË-ÌX‘îÍ«™ÎŠ}E IH¾¡óK3†b” E Zd?͇xR„k ÀZ€°0WCRKò»ÃÝS§»¹ð˜¸îIdØBšEt•…¢5+€ØƒÔ~/AP&õ¶šûßÅ‹õ¬#"ƒÍÚšÓì–2÷ÃOy÷Òa IDATÜ×ö¹Ãþ¥röY®“J—ÿuOÆ:8¥û¥Åº[®T·Ïöé›ëÇo>™™TjURX‡¯ÌPv$!´ç*póÍhÅ<ëü¨ó¯f‘ o©u4®µRU´…PŒ¦gÕ€ûpì‚i|©hz>2žWãœaœÿØÑ­BF%Ðz"!Õ´ýUÚÒoæ.ÇÚœ IÝ‚… as©´Si¦£`nLÉ/ „7ˆxBXûçÃÍ#$ù …$9Q(Þ\N‚ô 4ƒèòèú¸PUgŤp·Dlõõ’Ṉ̃°,ËåòᢠÀì¶^¯ö²Úóuýtõ=ž¾þð·ÿÛ§§ *ÍÌ^V¬Р€Þ¾tP&)‘’vï¤ÕB¤ß\ÍbGÇDHqt•ÍpwK• " Ç’ ·ŽŽØRaÂXr>2 s73¬’ÓðËÜ/„á¹HåMÓFKæ&^#j\ ‰¹Y md`xNä”Rö!šXûIíx¥ƒ¦tî¥GßIóμâ ÷1,ýc…9öÀq¦bþx{"Ù?Yö¤AÅÝq¿ÎWô½çügÇhgÞý”q°œø“Ìïš½±Lû_gå÷\ÆÏ~ß)©ÿ˜±*ÉÏ3~I€¯ÆAʆªî¯l­û.r_gz†ðª´˜[Eùc î•Øóô8þ‡¶Ùúb·Õ̳.˲,óãn¾åŠD=¥ãöˆ XH/¢ˆd “â垇" ½Tœ¤â´PêJÅq[­—~]´¶zd_·&>J`c²È’(I,<ËTX@6¬áÞ’¹ÊD•ææÆ‰ç¯‰,BH„……ïnÕP…S‡¨±ìºÖ7÷ØV7€J¡ œ“¨ÆÓƒfæ›'øMDPFÐÄÁ®/×ÐY‹°¾>Ãf-6{žà¡òBòŽ ?6ÔG€ÙÀÏ~‡·8KDª.äXVÂÌÒF2¶ð–¾—*“°vÕÓØÂGuUI‘^°¸­pã¬ÔIæÇLÙñ–UR|(»¬Ø1úÄ«ƒ­à½ óíÑóô/÷Ù0)»½¾·7Íkï€eÐ Ä+Q ì @w½Ñ¸9\“ï ÕU‡¿Hx3A&X"ãÅHºûîaðJ}yPÆNV#Ì„%¼eýªSa)”I˜¿ ¥ÞYÖ@¼±'ó°PÔÐÊH72A4º›f‘(æË¼,šødPt)£C[¹'D1RÙ~¸D'™“‡wåÙýï´íq"ªdß'Ý΢ˆb÷ ‰‡ï°´-iN@Ueê-„‡‹Ñ@(ͽE* Çæóå©g¿Hh·±‰Ç¶YlfÍH¡P)±eh!Ù¼x6T”ª¶*ôˆ„xd"JQÛ;̽K¨Â²0D³0·Ø]«² ­E¸[ë}xM£ï êÎÐC°0ÅÃ#û3)ô#2#¢™“ÉTœ%KDe2lã0l/¥³[?ñXs{hÇ„B¥¨Æ~¸¹àxº¼/tÍð!¼Ÿci/_ˆÑ`/•DX,ÓÐnvý¼¦pýíóíOÿñéúùº¾Üø.ÞLh(²¶[~¦VÍÀƒ0Ùò½úÖà›awdQ>}uyº\.Ë’ØlRÍ=}ß0f–šk¥Wr¢d–ÞéY[üÎñËÝ’ …—P¸³ó‡“–pO”0سßÝ=:G’p>ù½aÄø}P'2ªXbLZ,Ù9¼o¶¥«u©ä¢z,þ–Í Ð ßU°Å¶ˆÑµÕÖæ©»µ<šoa[èn±%•Å;cÅ6ó(¼|¸\–'ÀíÅþøïÿù¯ÿòo¶Xå~óõ?ýó?~ø»'©¼^¯×ë••Òk‹;dVx³wðÿ…GêÕy¥8¢Q …¤ÜMÑ‘zÅŽpÍÂáPÕ ç.¼ŸKÁf0ún]ÔŠ"VÜ#ša3#¹C¯*i±#Ì|ðfIÏʵ·#ñö{?½»MG‚²çv "¢"Ra bJtÿá·£{αÎÛwíwpÐ<ú\G»OóŽ*¯Œ<{ˆœ)Nç'•™AffX뛫v÷,“à„x½¿9—|ßø¹Ð±‘%ÑúæËþÇë£Ê;/âCûâðsã½2Ü:~ô匿Ñ78ÞûÊg­ò×ïÍýùÆ/ ð_éx¿>S€­ÿÑ÷Ð#(c¤Átf´ YäÜb!Ü?ž³QÆtxÄç;pUÍCA6dÂLªè<«RUuÒµ°v%‰pIÌ.€‹©§µ{*<Ò]&0šohˆ™½8¡•¨ƒÄ[±<,Gƒ,¢¥*+¤Ž0à›ãv]ŸÍ¬{AI§ e]@2S¸x6!ñoàæs›³‘èðç•ar†;Í-%"¼…½˜5c1¨öbóðmÖ±žJ¡Tº«$¿±7X*¡Ä’þ(Í×ôR®¢LaÓ¦™4™Q¢‘Ô$åi›½M˜Ü¿A"×Ùï}ye§U³P¦®o܃+-yò5Q(¬Q‡Áà;¢vxP˜ “àºÎj:È{\TU)¢dÞª²y‘sx„åˆyüà}HÀS'b?ŒÌc÷¿t®PM‚ë€Í3v³"±»0^‘£à(‘®N=_nŸèÍ;ÔvRÕ#ígÃÍòDÓÂÌûžÖÑÝÖT­Ãè¸,zça¼[8$£+½„‚RÅ $Tä¢ `Ñù2/È{^!’rlÒÕ•ÑQ»R`…’ÉXÛýXJ⻛ܛW¨ŸUìð\½­)(åئ¶ÞÖ‚¨–©¯Š²âHDЇYª áú¼Úç[4Ótyœ3¶­9ö¦ÑÌÁLü8Iêð è2S–äñzC´@3Ðz(¿Ú0GÍjJ[SjØ6³Z ÜÌÞÌ’sA©Ä®¶¯ÞˈL­ìbo.`ŒÃëZäù¾%˜|‡”è®°Ùj/"5XŽªÁ€£µö8Wôn”[³¨ýÚ¤ ÁJÃÃ`o¦N/}ÆXå›wû tÒØC¢_n«ekËÃÓ7îÓ7×?]?ßÖëz½^ÍŽY/Yß:¢Õ›k¢B’¾[x‹ä·G ´òò¸\çùW³ÎÚÁ9fQ$s3©Z’$)Ð*q@$K¼m?ö¤ô½3ÝØà< »e$møxÑ2Wì}3tãWóÑm>O‡·“¥Ïn0†Íx±køXHp`9~ÈÝ#êùêÓËÈ@ sCfA»³`Yf³E_ÖOWÿøézý¼²£9@ÖtXEßü€>!‚UXøñzýôÍÇÛ·×ßÿî÷øÃG€†ËW—å«Ëå×UÿÍÞµkIŽÙ@+‚VU[™ciÖêž/X}ºÆÓZÚö$«I«³,DX¬fVUÏC{fwç ~f1IâqëóåÓøöe3ÓðXòá̰wOÂ"¾?Baxv6 cV”¤ˆÑ-ܶ³`4rªÄM3B*9õ)àzÆä%P˜*qe7ôpŽpw2‡t¬uÐ"Lg{ž ƒ÷›ª™®A?Ο’£‡_Ý ®¼ Š üˆÀw´Î7¦â9èUjsÿ,޳ýû wfN~곜öþ0Ù¾ÿVáü¦‡…ýN¼)óæ÷ÍôuúúmüàÏ™ÿTqêÿv;~¹pöv|3EþŸäÀÿ;ÇoÔDþ¹ãx?ùbüFà_<Í»Eæ×ýÀü®ûÌ>)!x8’µèçK8ixÞcovÀx~Fà8ìî/-ÍŠ#·pÔä¢dpº%…é‚ôm:Oç.{be%X¾‡ªy¾È"Ä‚AÛ¾}þûg ƒ = @ҲȜ‰£H™¦ÃnIDŠâ2#Á~‡½ÊWÓØ.É!—ëUž/"áÐÀXw `hF·7ÕÛnꪾߴµˆåIH$^ùäÌ:‡”ŽuuS3g‘õr%3áÂÞ½ÝÜ´©®UÚ×­µÄ‚@ÕˆDUQ@LèÔ^´ÝZ £Dèò|•E$\;²ã+q»í6ÜÝÒKâdJС²ÊÇçOÛÖöÛ®ÛF?ý°> WÒÞš–lœžMrO­$ªŠ“ã們=Ï»tªjEü‘]YwOHjq¯ BôÕfÞÙ¢9Ú$•8oîˆþc Muwwb¹>¯TýëÌQ`—gYŸ/s²9ÖBü)«31ÿ Ý©æõÛiH{ +(Y>w Àd¼BRE¢áv¢¹º…ÊW‚·ÃÇ«9¥ó @ÄÛ׽ݚ£ÊÑÊ–…©ƒEäiEe¢É)íFY„ªû@€äW•BûTž.ö÷ÍWÖ#ðk4~#-<{ãè‚u˜’W*ì#…sUuÛ6ëÆ•åIÖUDV••ìÐÀü¯"×ï®ëe S5SH¡ò””Åö>Á؈9ú0ïôj™›ØBª,LÀ†Øn®E­›ºg‘­›îæûMU58ð²^d]ÑÕº§1¦åÒG¨äæ»î ¦*´˜©b@2-ʦQ– ¢CŽ ã‘¯Bä4g¿ºrØ OypèKCM’­TA…tß_ÔÕÌ]»zO5iT¨©Ã‚çj*E.®×çuoíó×­½4}R5Ň‹ˆèm£°UJ¸l7WŸüD€ž9U7®³<E‡ÃvÝ·­eE  ³åËë§YK¾¼ð˜¤‘6Îhd!Oæ _Í"G"°ƒ¨0,ð A>Ⱥ"7 P ˜iH7(`¦Û翵¯û¶mÛÞô¦ªéMÍPkWµÇrUôi,t¢Ã»îÍ¹Š„Ú Ï—º~÷a]¯W® ‡ ó˜ Än¦ª¡biÙô°@áÜwBÛ¬fPž¾è;`ÈìñLîúÏ—Êæ°®~ä+Ë"ñB }'#b/wÚƒR˜j Ö£,Üws"æjÌ<òªœ)èÄú¢Ö Ý€u.Ja ‹ˆ€„§·‹¤š:ˆW±…U5ÆVU…‰‰ñÛÁ¹›ê¦¦Ãd …úâ\HuשLky–°uýÛ}ðã_ܶ­ÝÔÚu×ëõûëz½¢C™ðß7Å€«ik ÐBf+- Y1‰Í33Br½\AhÛ–t-s…±sº¾9‚­íh"öýÅšú~Û±¾!œ©²êîêÞÕ†£+_ÖˇËåY¬5pE”rË­âjŸÏ½ìm9†i*¡œÿ[‘“jÌá`øcDä§ÉZ”¼ŠúÉ=[ñÄFÆ`ífG7=|†§K6 C¼  ?º+ù:ÎŽî/…Âü¦þÏÛýœ>?w¼£UvºÏÒ›:ã·öí¬8Çð$›Œ¸‡)†Ÿ¢ô&íóù[b:^ßæ;%õïŒüçR™ë‰!‹ ¯¤"ø P`Ü󂤕'yHÚéìr•©–òxÁô®¢ý¦cýP®½÷÷Êø_lM|³“üêyqü‘ÿ»ß*DEÀ“®-˜påL/¦¶ ½[Rão—ªìŸ¥Äû_sA‰S©¹»é‹Ef%«¬O+/¢ÍÕrݦJøÏ¹å϶cFZ‘ëÒI€Á–”îJÝA$S¡7N¤¦_ ³Ω¶jU×›¢UÕ¦ÛÞö·ãì Òƒ2ÅcŸ2 ݃‡³›T‘€Ý-Âm¤‚êƒÄ.Ò"^D<‹bÀÆ5M,Þ"IOÜòð2—rDßDlž´ón…Ê1Ü`ü€sί°%Üì#%}x©Æá] '„ý: d–Г êu»Æã Pñæ€&°¨#eáã¯5}lR0ß]»Ù\·¹D0À˜«ëöe×Ãøò¥éM÷[„û¸~ýøéãúa`Z›š©Úé1Â~¸ŠR$nм:ŒÝ0°·= ΑD!)˜™¼[@²Ç<¡ª¾h"Ì$" B·sTS™o ·ÆŽYÙdªžÒwA0‰ur@ÜvëàÂWÓ \à*(A9Žì1„Óù*nT„  _$‹ÎÊÈ›¸nþ™Ås€‘Îgo“‹YµÿÆé ˜qö— |B—á™]‡qTìæ¯S €°§jéÏÝJ¨vMý”_yD±ìWüwyLՒ߸õù»i8ÿNŽÇ¡ý#þ7>r­|M)‘§t-•îÌÞ½–^ÐËõó[ÜhjºÍM;s„øh:»ÞZkMiáëóõú§+UÙn;nDŠ0Æ ‘[ÌàE¤urÕÔåO&!a&äpÊ뛜a(ì7SUï­U’Mˆ¿ð"ÄÄ‹$O¯Dà “F¨¦ª·¦jè®m‡yª•ÕÌH ßõtØHgðn\ֈͨBXBÛ–YWF}èrß…éÇﯲ^ÖçU»Rem;Ë“È*1†ÖÍm·#µyE˜ÖDRIVAay¶ý%]vù°š£ííó—mætaI°€?øÏG›¾Ç5ŇZžçžYhN6‚G%%«Î#3³_ 9â(x÷ ÁJUÌë¢IÅlÆ0m¦¨Dº¡óƒ.¡„¥‡Wæ w™ÆÓFŸ0]w;Q “݈ à }/ë~Y%cÜ_„ˆº#Œšf¡#žuÌŠ xz±ÂÍÜ­—ë"—§4ŠWl¶%%Û‡ºÚæ{{1=|Û÷ík37^Ò –™ä³EÍßN¼+õužˆ ‡©3;QºIhÛôïÜÕlªòÄ20‘ˆHa@Õö›ê‹z7D„G³!6¢_ ÜÍ ËÃèNTÜÑ×'™|åB8%ÂÐý›¡Ñ€p¨j#ÀDÐáÔ¤ ˜N–{jÿÞsF0HËlž„ÆÞœíò|ÃLÉÔ»íÍÕLXlø=~¤XÝ»éKóBT³OÀÌN ¢œü%2UC'àU0j‡SQô/¨úÖöË.<í”<¬÷7 ²a°NChnŽ— “…Y”Rn˜^™ó5~¨Òχ0‹ýn5Þ&aÁ§òiûǶÝö-<Û'hœsY0Fx®z8`[W"cUm_÷ XEP©mÛÞ´íMUáñò7˜ðX×÷+"äÂ~^:Tð8l$jô|úËÊWœÄ! [µP(LgµÊÂ" ¿m&ßÛ/4ë5瞘{æ´¨<ÿ}ܳ)LÁBt7‚pî‰bLúÐî·ýñ6ïG}— ÌvMîy§QeêúÀ¥wÜk| Eˆ…*;ÌÜT-P¸²HŒi¶þ‚ê#b¢ÔŒógÁ¨2Š â´sëñrF‡Ÿ£??9·¶m†ûÀ¶mvXÔ•ÖëõÓþù‡?ÿp¹^X·ýÖtßõ¦`8|¸ªâ…°0/N Ä¸æYä½®I&pèq3Ÿ¾ÿâv¸›ÌÕµ›¾è®šÍä'‘UäI¨@»ûÈ›±Pnë#¹§ÈvŒǵfö›ì5*é ·íÖ¾ücÿü¥ù€:!ÊÖÞs>xT5ÍL’Êa vÓ³²ÿÐ7{­´2ðð‰É^¹@æ LJ̳—®y²0@*àÁV,h;ÿdïÚ•9ŽíI« V&¬Yóz”þÿ#.eI²ˆ¶ˆ±:Óê*ë\#«º3;Ë¥DFÜm¹;‹Á`zäã<ÆÛ% H‹ÁCõǬÓíâ§J ÜÐ~h~ü¬)ÿôžß?0Q>ϸ¿??ÇI_}|Œà³pѯ=ë·Æg€êòþ‹ï}óŸPÐÿoñäÇ·;ó¾û#þïƒ÷uòGM?ÞvzÂlÿ~E¡þé„´>/K’í Œôißr£“=¢#‹²á׋Ù»þåUU¼ …FUEÇ" “Xev½^µBVx#Û’ˆkˆDãDtU Ö/”>«Z€b]«úºD£?VYÝ/®U¼Z|1»šVEq¯“2DÐÉ-ÏÝàƒajVUª¢BE¢Nsdöö„–ÔŠLõã¤#³_»šVÁæh&[Æ2CsÍ|S¹½ÜŒ††©\:@Úì-uŒ¸#£¤f;Z éébÑB÷RíU v_¼ §e3 UoŠèòóÿþlUÕÜ ü<Î_Ï ð¡JÂ$7F }vû›~¡sÖå+’ØÝókGmüD&[#[0 ¥$i¥rÄ—}/«À[xºïªÜ.ˆªzRøfW€ŠjijÓØ2nÖ<å“XMZ$H{|«ŠªF-¼ÿóïDwäIRAªŠ "‘`í¼†ª)7Â6² @”1¢il‹5^2³’ ØàÎð\½Åêôz1\5ŠDŠÈè¹f@v3ÆËd d+¡¼Î&‰ç× $ý/înIÈ[­€±ËM« Ùû¿ÿºúêÚ ¸µj`È”¨‘,OìXq"{ ™.jöÞ'.WÀ²“ÌC88«I¢dO(Ax˜]R²kØl DÔl—0è“&ÐɹˆA>#Ûn „ªF¸¯î>Ö—ç=ç´;ªfU!™üd€-b¶U™-YI‰‘#ÏߨU<’3&<‰¸zøºø½.ùÞMuöf™r}¢Þ98Øã&5 „•UP]ª¢NZc.Ùò•à`§0æ1‘¬–è¡Þ`B/ˆ7÷$¢0"ÊÄÅI*·‡w—H÷rØ,‹XM£/÷uhû¯Õ—åþð -m¥1˜{ÎîxF"Ç Ó[¡#÷ë‘_S1U« 7D›<…ªrÁ$Wm †ZÅ."‰S@&Obø(zĪç4S2)Í<òôø¬!•tû|$¥˜ÎùÇþc;ˆéÔ?mˆs<5ÙTjªaë‰<‰'Yî¤:«HŒ|‰A±N\æAßå¨[q@i´bS‡qW©ª]Æ„l  4ŸE&b%¢ 1ïK4$9oãOÿóÓ_ÿöÓOû«©±9Ý×å¾üº QÇêP‡G‡ln›F“Ñz½ÌvYrǧr|µ;î¿ÜSò Zd'°Ãgƒ&¡õj_Ì.€mxŒç ŒÒ¹ßR¢C‹Y*ÝÍ®Óï'å-ÔWÔWtÜKÄݾ>–E[ë ¡¤°b -‚A©a/·Û—á~4ȳO²Ï³ ]5c-ÙgàÞ8ý¦¶Åh±vÅ„z?F¼g¶ç“½ƒ…qM<*>ó¿Ów$Ííò¼ÉV¯Ž¢ÜüúrÕ—›µªz‘!N‹Ì7ÞŸ†U΢òi{}à!Þ3 ùã{Iò nUQã,DyLK lî!îŒ-XQËë-#M²Ã ©–æÉ"p³ÛË/ffZBĆ"qÎêF陌éÎQŸcVL €"›_5 mr–Çâ«/¿úúæËcõÕÏ çÑ9Q`WCfŒožˆ5v"Ý>Ç--‚j‰²Ž®ˆÅßèîN¨‡«¡úúXÝ}qgDfÂèˆlA«jöŸSþ´Hôä6 :O'`K¿“‘²…•›y½(±ÄOZUµ@»˜U“®)§¼ÜW_ßÜÌP4s©¢<Ø¿ºÿ1b6²1å‘Mcš ©è‘‰± °TÖ™øÕ±ÕœÊÔ$¸‘îøbZU€dT²}HÓeß@f¿9KGÌÔÂÓ6µÊƒ±…] ÀºÆr_R*6îÛ*Up…Uƒ‘ª–Æd<š~¹£ bòâ$)ôãâ=ÈÞc${Ø´Ô¬2€ ‹¯¶(œ# IDAT»(*ì(äœ tw ÜÈ:2˜ 7c™M$)º'S)ÀCÑ£ó1ô9ÂÐâJu@À±ÁÔn ¡0À«g@Œ›i”ÈiI„·A £šЂ¥Ã*QÄß|Ù›C—ÔåûõÓUÜ1%ûÌR;DÅ.vµ”0„&%$"RjU¢ ͈ª¨W¢èìž)úNÊ-r>"ÑùÔaÃ'1áäôcdº‡ÜÔ( ˆi¹¿ÔØØ(íàCN°ñL СUb6ÆU$ûÃR¡e‚DGß©¤É¶¢xjï¥XtH RµŒ«=Ì–{ îñ‘‰eùDÁ‘<@úé/ÍÆ@°U|óHÂÑ,ý¤k·©¢ùòXýá¾.t7QÌê¤ÕI9ìà–Ÿ^Š ˆ êîÑAR‹$jÛè=®<–·%¹Hî¾®nóÍ£Ê-:_e|¸±ùñØë1„§49ä>Dˆ½X6uU’l¨uy[î¿Üï¿ÜÝÝ. &c"|C’w²$áó B‹¬° ÙÉšÂWs—É9?à÷ûÇ’G«ÈŠÞ¹E5rà};…Ôt ÁÈyEXˆž~ì€LË®÷àˆ9'‰`dÉáÑ"žãOÆÑJ9ÿýéØé33ÈœKhÿÙ??ïý½c€iNÓªDØZÆ^"Oƒ¦”ˆ¢é"b{85m`œ®õꢃM›¢z§½ Ò¢ O F¼9I˜ÀÌnv…`Øôí½”Œü¶ÌŸóST/’Åc¡šÕ}֮ˢ1•®Ý]+[„{lŽ&è°/,~7¤Ÿ H¾¾¼šš¬Ej5¹»‡¨=´}žßª¯/·õ¶‚ˆ[üm¹½ÝÌFÄI0Çv:Þ`2áÄH+†s:é‘ mšÒDœÏ˜=ÏØ<Å¥¥&\SE§zœmE£ÎLç²§q1©ª«G“œN€ìùŠúæÜhÛõj¡¦"ÐPË,=z€éçáÀ¤V\CØEОٚTßSŸÔµ¯p¢ –HøêR­ˆT%âYFà"5•ÐÑÝïÿZ¬ª{ ‚å}SiŽ‚TåÑÁ ÌÀTEqL£^Dв,§ƒà Ñ-ƒØŸÉ¡{˜^`¦ZOSƒAå"VÔªh1nˆˆõ¾®¿úºŽâ}¶A’ê9xw7¨™èŽ´EDİhºš Ásï"6²¦ÊŠÈ »‹zqŒ7%*%бIfþZMÇ•d׈à7i~2º£Ð*‘²_m(®®n|-êÕßÜ7&š×‹ûë_®‰ÿ”¢RTSb§»4!R$v¦H¾Žf{ÂV¼[°Ñ7O¼ÃàÇf7 ¸áþëˆ×—›™±ÂªˆB«¡Ó7 {®)£ËMË!Rt,<ú …zõqü/xßjHÄ «(~Rð-bè28ë04‹Ñ‚ â6‹^¤{Sƒ¯mPÄÑ2Õ*TÔéÏ Sémg䬥ÒN2¤AªÞL_ov»ž” [©U´ÀªD7¢©kY³ˆ Iµ<É<ê ±†R!c6»toÕ~ÒÉ«=ÐO§¿ñaˆ 3wõº÷‹ÎÈç>±åG®õœÞ|nH¸¿ÔüâXñû²½?s|°­& S€=ËFG܃e #üìï²_à?ºóö~ÖVÿ2àïOu âßþŸu’$À?ÆûÈÃRE¡Q¨]üõõp,c9XŽÇØKJ#Ÿ™2<°º 8ì7nf ˺Z¢gkú:"ЙâºéqbqS©¢‘› Ë—ŽHßöÜa[„Àвf•È $Y¶À\ý’™*AÖˆ*ÚÆ™‡*QôVÝÜ[zc&œ‰’VÃy^EótzŒNŸYSÞQ?nŒæäÊf×vÕŠäåþý±¨è({WIz°½˜ˆ ÓߜȸÞ<Üïÿp»š˜e¦‘°LSˆT1S6ƒ/£õ±®žW¡Eb#K¦¯¯¯ çºúòX´ ^, ºì*àê<óH÷ÌpOgÒ|b™”ž¶›TŒ=(Ò$c¿1[°‰¨¢I¶Îò—@¬ÙxHv´FókdwJx´ˆ-رâ±?³‹’†dqz{I§E¸›€ÒÕ{Žêls¥”>M8=ήDÑYsð4&p×!WU4ĆòÖÚØ¶°=!‘²)°w»ßýáæ¢ì`ôÂ-#)tÀiÄÒ€Ø0sO†!^Ò ažñ.0BõVú“ù§Q¡YÓÉ|R]7Ý”ëY³³+[´ .Tf»f>ÂÌüðô·KèÀŸ÷ïÝ=èáÇÎë¶•6@L÷¡1Ã37”á'*ï@ÂæÓó3ksYo²¤ ƒ—H³AUu»FJôKÉò©R:|šÍSµHÁÅ<ÀòiêÄÔ§aÅôîÈLO<ûÉ)“özm¹®y¬PõÔGDéø´íMÿôõvýã]‚ŽL³ÃH¨@§ØûÃÞmOaüð#Ìa¡_€ÑE$é*A0_¾Yu÷ŸC¡g+ÔÙ‡WÕ¯·Ûw·Û¦ ó1="œÊ™y®§r»{™¬ŠÀ>"=–üyÅŠ%.¥:æ9¿ù”4Æ‹s[#4ÎïN,Ëë—[0φX^Jˆ‡ëêÕ$»n‡³#^Ë‚çe ؃BHg,°Éº\½;JÙÎ:Wv  '@{4/N¸N.9^;/HÀî“™ñ­¶u¬úKþ¸Ueh^ÆEy–N!ü°ûýnûÃ{˜…‡Š|©=õä3i4;"ë)>ÝÇ&á8"GQdPÀ¦BúpÛw3O¨Ùˆ~˜í–îe®o×ÛÆl&…SK€œ”&—´q~Â…JJ0F -¼ÆŠyªÄ0ÂÌö÷ÇãÃì€SÊéqhB¨r{Sí**î®f>"4M &ð íÏœîù€¶—V3çÏðüÙ_UõXÞ5ß–qkZ¯V?æÙ®¬ž—œ‰=ùAñéÏÑ~¶Ÿåom³j /¯üäñù­_Ê‚åùÅÏ9ðÿ™mÑyÎí·fx?ÿ­ßÈ~ÿæí[1üÿÈÖž$²¿[¾ý’Oÿžÿ?ݾ1ÀGuíp˜úÓdÌ;‚©?ÙÄ÷éÚuõ‚‘\êI2ܧæjKnGèNUšÇ€§æM§ˆ$-‡ WÝ2žˆŽ$é ¿¿' ôBJ¡£“GzÏ»3#JÁL´cÕËŽ(GJS/ô¦Èò\–FnCn!8âv•ìg¢¬݆¥è%#®¨àƳ¾KØa2ÖòÐV3!ª‹<,4‹áhÐ åëf?üpw3Â6 øíßé…-a…m‹mûrW³½u–K_ga“VÜÿò­%ÓE™êÍ‘H¼ ç×2\ƒµNcT‹/²ËwžÂY.¥±²ÜÌ÷4¹í¼½`8¬A:íª¡RyiJ•žS*¨Õðv$¹±<·ïHf˘¾ {µ3&þTon ˆ§¼HªHë¶© ñÉ "˜™Eî8g¨TØ ;–+XR~ü¢úE™#¹§ÉÐ϶³$1³v¸p¤åŒz£4³ÃÔKrÛý¾¤kR;êRWÈÆy–#OHiô*T”ïs “/M‰jÏâ5$Š˜‡Åa6 Ÿ›|6cósä¡èô1ÍÂ=Ô„ZÑ?qÕ*:°°Iã"‡ Ç'Ñ(iâã‰Êl±}Yg[t_³#ìÃR;ð黼œÀðI@!Mw€¼Åî¡]uð¡ c†eèo‡Úp4"åv.TbO$±Fk¶&¸‡î¡Ñýyy‰|ĪóŸŒw®œê ¢ù\qH¼ q ¸NAƒ~ÙJQÌ ÃÊdKdSH[èÐÌÍ•z÷Øí°œ©ó‚s0“(>åš)!6ü\; ˆ |¶ª<9/E7^ÿ Û¦ùíø4œ]Ór/FøDnã\³ˆˆ¤³þ$ÄL`j4[ù§F^ct2^ËL¬…5/¾ìSL†(å/©ÂÖËQל†_J*Θ@c¶Õ¸ayþúRÌUçàÖnu—×Q²ŽŒá˜[¡ Vš[‡ˆ™EGBÏ2DfÎDÈÉFNÞD'œÙÔ/Ba¸ÙûÝv3{„"ØŒLØI¥nª €=êØ#ÒV-†} ³ˆá1Ôá±ØãÝÈʯˆøÄîn‡Ç„vêÛUß4ëåiÏu=£4ä 1ÑñaOýgʃåYÍ̤I«½Û÷¹ÿÛŸ¿ÿþ/?š™ˆj×ýýŽ–Ê‘êëÛU/ܾ\ÍLU-k%Í+ÖÊ>áÒ×¶‚¯ºŸB¯×pn}êùP¼žùúH|þVnãüÚ²¿Þ–¬I®Ösç§Îß³ü¬KýdûüúÞË U=üÅÄöÑëu¼9ÿ€íùk^¦gtý·mÏ•ñ¿æþœO~y‹ßð™¿ãö³ß_9oîá÷øÅökw÷Óœõkx_Øp‚ÁÈÔô•†áçêx>?³R,eÃ#ÒĽ°R³RNž×—õé$+RL¦Ó³b?á˜^áæ ?<<‡ÅtŠ\ß®ú¶U°rÚ$Nøn&„uú0ÄÞùøûý¾Ã‚ô•2ʼn€ åU>ÔÝB&¶-®tºJ š~Q`s3¡¤ï®_”1áCåëw~x¸åz/$ER¤ «zGŸn•°QÙµ'UõÂÐ-½1·Ûíz»úðý}Ɇ¶°1<ûÃÌîÓU4A’JÑ.Öeÿx8*”ß¾\WwKL ™?>iº2 (uàú¶©HL$†«Ê퟾þóøz¿ß1ÍŽÝÌï½KWûx¸ªÑ$ûêI0®´¢aHù•È@g¶ZRU•Xw¿üŸÏá’ö<ÚÓŠhD®tJùÖ$!‚RÕk$YµÌŸ¼£2.jlÂÃômC/εíöxß1‘ ‰™ —Àá±›uJOò!Ø!B$–Ž éŠ†Ã-Eï÷û÷;P LU½Ý¾ª”¨ÒÃŒô{dÇõ›ª°ÑFH3iˆ#¤‹õˆƒ ÙA0ü¾&"ѧ¢By 壉ě^þ¢›JWŸû0´¨€ø—amůӘB.ômˆJ%¨¥¡Uf›…d6ßâööU·k6Tïû÷=íŸ\É-ãBŸ@“‹ˆâ¬ljÄîfÃV™À÷”ƜÙãÝR7l3Ê_*` €D @#»±‹êýOÿò¯xÜm7^4Ft³; Uå9éQЛ*`NšéŸyÄôÄ d(ˆôÚÌøH,÷hS‚Î-º¨*…˜@Z¹®ÛUûÜ÷tÁÀÖxUU‘²,‡\7½ÿuw„·HêíÃtÛ¿^¤¸ŽGp‚HßÑѲ[O¡øø‡­F–r–xoöÀO_ŸÇ)VWÃcÍç %Œ„jcVJßà@|"î»]?ôöÝJiHO ³a€£«\À}ìfnÇªé €ŠUî ƒÏ£¢*ƒ³½4yZåÀñ„™Ôr–™dF?ºéí‹Þn·Ûo·Û†öî§>¼§åÞ¾‡O—.ªŠþbå­@_²í‰ ÇE<îÙi¯Ìgƒy¡X E|ÕNdêý–9íJ2ž~0E˜”ÌðY³bŘ“lU^Ò·/Òª( žI„ eoéÏ mÁÄ)4Ù B¦·[º"#1ã%'@·|äÏ‘4ðÓ®YLÌì_ÙÜ>M¤²Þ!J@ÉZb8:Ð`3 ¢ªÚ©o „*õ ¯_¶Ç  vÚ1!—||Ô†Ic¼]±;\öǦWíŠî¾]±ü¥ mØðýà yh ÓEm˜eÁHe»m·?ÞTE:؉á*â1ws×)P Ž>ˆ%Uè ºB/ôjö¢o·Í>vŸînû‡Åá"ÊÎôúʺ^¨"·Mo·Ûí¶%TÇÜ~¸ß3IÖ6'äÔ+)R÷œìŸÜ’ü̺9•eÅJ‡>·X™8‚I銈¢l´Å¨Ÿ ÂSöÂ+ Ïý°TNæX&®Y¾? 3[â´HõÓXóÏi~ÙP½Ê3¬XäßyÞB”åg¿Ù3–B©œæ +-{©Î¿$ó'IøYEðÈÏä+œyék“h°É'ânìW²®¬x™Ÿ!} ÄžÌÕ_l œ®HQ' …ýªk]"õ÷|ñ'¯rÕ¯¦ñµ›Ÿ5Â0ååR­V†úÞoïÃþü“üä!\û¯þâEü¦@ãá ç¡Ï÷Ÿ—ñ÷ø÷ Ÿ,×j~.~ç¡ÙÑêKo¥Šå^9Nþi$¿²A&€[&ë&¥¡òo!=³ŸDðfíå¹þÔ™–a.Bé]ñ¬ œÜT6ÄL_Šð‘-ŸlžÉ4V¡P(ÐÂc{'±‹øá:%:x¡Š 3fpøÿþCî_»°“"’²®Ö7žtÇ”¨•Fë,¿^ÉpGW6hSôB6 ÀDz2v f˜[Œ Þ WQMf/ÄtFUÙc¦ cm·ëÕÜý8%7‰ƒ>¡½jÛrA´Ôˆ”* ˆ«}gqøý~wG nÈ;ujK4þÚŒßùœ/þJš;Oh¼”«³Qܤˆ²—$uN<ûüXÍ«¨A%X>®ìÐN«¢OÔá1Í>€8<’؇¯¥Ï⸅¸H Aa„°[µn& ;3„»ŽÆëýþ‡ ŠDPL·)¼Göc¹$϶7Ͷ­–]ÑNiÜÉØp*‡£“Pé*—°¤Î¡i>—ðÓðº…æ…·³/ÏÓdâi:º®{Þ`i_/ÞÚéòŸì]»–$¹q½aeE¤5³Vµ<ÑÔHÿo‰–Ž¬í´¶ÚÊ+ëʈ@VuÏ’")®ŽŽ¸0æÌôdWå @<î£-¹8‚Nb„'õzTG7Ï„'ªpÕÅE„Ž«•¯‹€äÝEm±i…EBBd«£Èì¸F Èu`Š´†“àŒÔ¶IÉw®ž LxÀo±1³¯ Y›ôDÕ2FdýO h4U´ Y‘aV=Dº¢)莛©‘Õ„"q´k¢e·S‡VV,•³" ˆ8Qäç&XWë"RàÏ–¡’x‚>âðkX2;¾î÷s­Bc=o2-" * LÆ\¾t€,jè§ÿK­d ¾Ž|¸¦átwÀ»€m[bDÄêLþű¢½Œ$&h5±¯…Œ´’ž«X–³ìå¤ËSÿ,Ïc-KlÁ¬a™Ùfz3ÀÙÕ»uÅ-é!ð<ýøÅß÷#ûFQQ¨v IØ6ræL´0#ˆU7‘ úó®y>¹^ xóªúŸdº³,²Òx¬™‰‘&0CkÉ„¸P-'Y4Qé¡`̯f19©Z±JÏè„Háh2k’2¸Žpb¸öÄn@ MOÁ˜Û0ȳd‰1`ÖÐ_©§—#=Ò€úBÑ#ÝËx¦È-uÒ ®Iy²ãj–… Õɸa»Áš¥£x1wpwž‘VLZ Žp÷#ü8=";Õ=e]ØwÝ~z³û}{»—ØòÁðˆT4äÙ`,‚ 1¿¶M3zID…à† öcwçqxœî“@˜,Æ,ºv” fz.6•›¾ Ç0Ò?¡æóë’­€¢ ¿f8¯­áõ[×£ù”b(^ÈØ×O²©s–Mõß­\œ¹œÛ_Éí×ÑÄ%·"³ÀDÌËü²@q%럾âÙBÑšÝ/]è<Ý×ïúsý#®¯ÿ<ä‡c~ëNæ%ýaè¯ê»?‡¼\ÄÓDƒ?üùú+uÿþŽ]ì¿"ïý;ŽöùŸògõß4~O€ÿǯMHb96(Ãs{žÒ‘ö1¦:ðy~¬¥ö2;b·áa¤¼M‚HËPÞ4A9šE‡»{ffÒ¥˜Z)»šV·ßló;FdFZ‹YÃ*˜]+d`([`eºcòó+-O«„¤ó^ˆ*v+gZò/ÿö¯(­`.T«òZ¡v)/ðí5i9è<‰†l¦‡J¦z˽!suxíp?]hV¾&ÍîšØLVök”êû»ì~¸vݶÍ6µ›&´übfZ7a'œ]µËÛO÷øƒKWÿpQ‰P:v4Õ¾ÂTâŠø_Þ(‘Le¯BrErµ‡=áÅ¨è¶ ¹]Xew2‚z!_V¿ .&gi´nfðŒ½Ø¨{xìÌij—ræûû;E$†3ŒÆÜ¶«` ÅDŒàI¸˜)°»û»MÞþù­0o­XÙ< Ãnj§™Ùô½ÙuÚÄWÜ/’‘èeÓ M„:‡Y-ŠT§{)pg$¡:½î,.Ô]œŒÏR…N¯'¦”U=®y*™§eRpް몪Òte¿ûÎf›š‰Þ,›c P Z²j(u1œåk"ëáŽTNŠ.C¶fÚU:Ð2W1àgDx @hëÉàP÷ #UgòçŠ ˜úá1ÂO¡‡Öª²Œ¾ID¤(‘‰z¯· £Šy#œðÓ ö²µ-Óf›  :fþ¢{ö‚² :i7½713SMÙ?횆½¦î:à"Øß7õý±ÃôUÓ{½Qª¼xÁد)“ü4ϵ…‚€,¢ò ¢üO/•øÅÙfÞ÷þ!1yÇf›˜©ªšFLKÜûÃcÏÈÖPÀ4ud5䥪„¹–f%"H°…T!Jì}]xV‚ˆ`¸m**ÝÐ'!nf|ÿ8üüÙ8á¿ìþð?î‡vÓÎ $§·M¤å2Eñ“˜îÀþ÷²ºÉÕûÛ]25•.…ˆÉv´ˆp<¼¦w¯*W˜ÍîÝÚ"3CZ 1&\kj«°›tý'|&ŸH“ÏÉL AÑt9ƒC †–æÀM¥©.aÿpw½ ì®3ФŸi™V)+†RšP|P´IHXóõ“†QaJƒu•-°†d=¢ô±€pîûqW’ß^ïàKÉìGµðO'ÓþôÿþOƺ±¿'Àÿ¨ã‡‰x•‹˜@$YIZj$™tŸ¥àÇ ¯"åB£áõ­åê¡Å•2• _,© MSª®™›ýÏØ?v? -6£yº ¨âfh*ÞLÄGœî#½s3÷t!ƒÄòz™„lÊA†€%"{SuÖ" ûi¢7½‘9ÿ »(T‘„#¦:#µd³·3©•¨ÏȪ͈0-9\ဟ°º¸g„su5Õ¾«% ë&˜áŽh(è}ÃîÎâÑ•óDzêjvã­Ô¹¤ çÅ„„7O½Aõqÿf ÜÄcCÓÕÞ¿ö ¬~>¾¬µ²ž?ðŒ\_bµBñìj= ´‹¯ ž#Dà‰Ã_?µ¤Ú›“j'”}Rµo¥OëÙž"ƒ˜ôÃ9iJéV2AáÚTw³ÄzR¬¡*Áf×YŠèÐ#õÕÌLMÑïy½~&Œˆ©6ÂOj¥vÑ.Ö!7hOð¡‚)ÖF Ò jAÒqº‡ˆ(D‰àÔlÙiÆj|F2×ÓxŽ|mäÓOV,#57_¥R²õ!ŠVÚžŠôl¼æ,‘(zP»¥¹“”íð‡¿?ŽãÃÌo¢j¦fÅ @TËz”¹nÍ£VXWŒÈÖ¨´{]]®Ò3$Ý’³,!¬<Ažä¹e ID”B~Ò#Žß’¼@Êp6ˆˆ}ߤ ?<Š7˜ }㥠IDATF$W eç”0»©-QâÀìF?%5¥ûdÄšÓ«©¤ rúÙ”) ©L„r,Ïsm0ëf·’  Sµ“z¸ÂVG9M\ößLæüšP™”AMó'®!¤¦3Ígb_ sX¿Ò?ùµŸåLÔ âá`HÇÛOw|3³›*€&¹2PÏn0Åó"‰=Šs›M¢ùBžÏçDè$›HF~ì¤Ë€ú‡ïÿäH#q q@>Ägʪóøp®9"MBx:ÔÒƒ]IE±ÒÒGÙt!<<5D¶×F\Ë÷|µãÚucÕºòdŸWš8 ¤Ã\‹˜xµÁ–ýDŒÈŒâuÈœ“ )Û9\ÎyX–hä ?]‡çZš\o‰îw|7Ðg0·éœ'#RÊ"ªË½èÐRò/WšÜcÖ‰K‰\"Mkð™õ‹àï&wˆš‰™JºIÒÒ ZK© H¿@Pb<Üyx`75µ¡€ bðøðýÃ÷ÓÁDœG× µ«[Ûñöý¾}߬«–«ójÄ8?Aûv©Ê-”ÐÈÞlN¥jìÂcÒGüüïïûñþØ÷__üä L`*15uFÌ̾ÝMÍ:<Ü`õPººhÙrø<žµòO©Ãž>:×Ó_(ã'aí:BS4Ž©ayåà :%1u‰v½L²!yž륯éS¡òéYK:hQß˸—˜ˆ××õe6UHY¥Ùú¶käqñ 3ž+pz¯üŸ"ÙûKŸsÁàsÅø-Oéo|I?©?ü÷#74~}#pMßàÿ÷ão™Ñ ¯ìAi€–yYy'p àâ’¥¦hý rÕÛ¸öøW¾(¨Óª´Çj& †ãÀþqøãðÚULÅgÀé#bP5`f ¢"Ãpþ‹»ûýmƒh´Ë}µ°ZÈD4ÕI4‰™ Bn9¯‚AÈE<`0Òö#ýQö—çRmA\R“énB–å†tSUäšÚR!¹©ÜTÚ&ÊûÇá‡C`–0“¾iW œðÃØf¹“Ãc¬; hw?õþ}3«–¯uM%°7L„‡»Ó™â–¢¢²`ƒvÅäCIæÓ‹bS¥£™„U+Ù«Ñ &t*{å?”«7pZžÙ¯ŠF‡ë~ÆeК>(Ÿ29A[ÄPÈ‘äOiyÚ’)…¼…ð#©æ1‘€b„™©Z†AzÓt“ŽÉ ë„Ò\ 9ÁL¤šwóÜ¿™mwùföÝ8Ç &¤ëÖ€ ì$­‹m¶¥3ïML5Æ'Ž€t•Níô~•Õ‹d "âŽzá‘QAB–èZ½„WEÿ¥Œ½|_òê¹kèëaœ•›(;$ûü’ùü î<b{HÔ}?ü±‡¿?Ü܉ÑäÈsßžä,¦%]3ã{žÄˆ˜x‘…Hêó& еRÊ¥™3ûÓv«c0déóí‡ÛûŽt»¹>*?ö¦ÒýEì‡á‘ùêUÌ›Õ[Ù¡ADÙCBŒ”iÁ›îMM4kµCojݲ¥]°´­'Ü~Ýõ ª& fòôºsóÖšûy¤N(HÀ©]Êâ´TµÅ´xðµÄ±¢2”½<0\=Â@MviRw‚‡[ÕìèjÑY_ÊDJŒÃ+FèhpBeÌKž) ]¦Uì1;À8$ Z"ºˆ.ã©Ä¬&â,yP0Ÿí(­’`9sØ•o»«^„Óbr™¬É"s:§fKJáp=Xi4˜¸7²˜=ãb { V^ÒÇü‘óñù.øÀ‘<¦iJew¸*ÎÞ/ ­ú.qš»3¸>­³±0aϽŒ­(.ÉQL.¢ 6‘-;E¥ ¢\wщ”ðòò¢U×çuä¯Pü Á`‡CUˆ’A¦Î4:NÓl3YLTt‘Ëj¾'‘ž ,a†{¢JYÔTQ$<în«ð4p ˆUq3øTk[Rób ¾ù)í‚ÃlY ¶¹ò%☩•ã¢(ßy&ãã3æDGI~KÒfæ€$2‰i+R‘ÙS3Ë´‡_omdÀ.ðáòšù@i¥sòÿÏ A&+;i=ÆYUëp?.SP ÔY {øü¹þµÎ#¦Œ9¼Þš=›ˆa4Ø]M·›#±a\Eór\·+RÍÖ‹ÙªEQELõYdQ+³q  )üEögÄ‚ðZe}2[ÕžV­*!¹b=»·›KeZå »7:âB³El±y±DÌL ¶î«]·Ç È‘”ÔÃ’tÊ3è….–>ꌼkL-†)2çÎè =ɇL÷ÑûÖ!?î7œËé9¨é‰Ã€Šîn.éi„*¶…רÚÍ·›{stQw‘ŒO'2Vj°|ï_yvP•Ó€:I­gÞÏ{I°_,D´›ÿýËëº^¬" iÞq}óם׿é³` dì°.&ª*pPKÜoÆÙ“*€r÷{™ˆ4º_ñM, Ï2XK\ ²±Éq–¡œÌåWíþé“T{LØÃtÓ¡j’h"Õò'mê±vWuÎFŸVqQ­LSz 10êÂG`§{ø›û¢an׳½œWhtšL "'¾}\&sÆÊñx£fÚ¶F„udêVcE0b‡7ßÞÂ,s°EZ ×¢qxF+Ãoð[\ÿq½^[»¶í͹,ˆŽh>ïxz@CbP²Ù)ˆ4¡üååe5Ó"èêèO}woéº ay:sûè5Û˜Ð:c›sûÖÜ™9íÃÄD5x15S»<Ûú¼šŽÊ)dʃ«´$«w öS1^l²%%!ú^|¿qîw‡÷” yP“ ¤ŸM5 …¼]œGNОv 3|®dLÀàMZ“à]aëÖz7ù³$ ÊÃ?\µÿõ1šÙÉøÎß?Z3þîÿø3gøGí¯ÏÚ\MŸÑ/>q’ÿ0Fÿ_½ãOüÿdjè#'šÑËÏ?>öðÝÛ›g€ ”‘{‹†.†¢RÄÝ¥xI²½9t@ÑîŸ>·Ö>ž§Ù+;-$î"ànÂ\Ÿù±xç‰*ÊØì“A#ºf‡×Ýýæ›»Ùæí…{@Ò’Ôn =&;BL#ât)ÎLJP47’d[ÈIÍ€Ó÷P‡WHß÷›·¯í•¸¼™û岚@”Ýó±"¢V@km»ùßþã?Û·¶ÝÆ& ÙI1³èîHb×b¶@¸æÒO.†.xy²Ÿ~~ù·_~±EldYD}0üæ‘I——{ZuÑ``—(DHmL² ½ÃMÚ¾½þýõµ5÷¡A†3ÀpÁ=¤Bª¬Oëåéb‹Ü­ešzĶE½ïÝ:žHªNîÑI&Æ(:ŒÇä¼³0®È#z‘O¥Écd'SúþrU9â,¾Ì2éÝdÜ5eÂà¤@§lø|ÇËbbà_?~¥ç-ßûãnƒþ«t°Ù“`ý­±³²ðû çÐÐþð=&0þgèr?Á†îx, ~xñС¿ósã—÷*M¼Ûs|°QHP«hºÓWI_謒B"9BÍÝ›GwvD¸ª¡Óèž^8éiv’’ tŠ»F…öHQM~¢qª8ÂIssñØH%[ÐE#}V‹ˆiÎ5¨ÑDºš‘EId`Fˆ#ƦÀêE«©HR'Ì`Õl–°ÃÔ U ho¦æÙÖg3³ "V uúÛæ{ª\V­‚bqðŒWÅdþd aì‘!™…p€Â´“ÒE¸XÀÐE´š™n-Ü=àÍ}vkþRTiR‘2ÒScóÐQ…§þuî2ÓÔa\t‘´ÃÍÏ©pË.ÇðtI+¯Ô"ªî~¢œ¢¤!ˆ"£[ur]:XÇ’ÓªùX½~Ûd1«‚%­‰EJ&Ájtg÷­§ .$ƒX%ë&1@oZ²UlîLT!#Ý¡êã Ru5{ùù§—Ë‹‡·åú··MRa*±ðôP¤f˜ Kêå`j¾2$féÞÖ5Ï"ZŪ*FÎódSϦY0ŒAÈœF”GMÔã+ò–„§ tPsL̓Æàúq½µÄó[óë­Eœ€C¾û(0>ÞòÝï£38{}ëŽæ||ŒÍuupªõð”>f'ýa':pm G\žŒ¼¬»Û¢Ü@º¯ƒ¢bªjj,á;^^.×Îë· .[iÖ‰Æøå¯ÿSpGðˆ‡ŠÄb¶®—Ë‹l5dZRJ'†¨QAxDtr:¥Š=_—ªÃ@h~ÏtÔ[ÍL­JöXW;;6³èFAD7KÎËÄ¿Ü#¤Ék»µvóÖ|øº'qýëÅŽ€V‘bJ‡@`Þém»v*åÊëñ¢EÝéÍ#"‚8‰JÎ(ïJ<¯ sC@U*˧õÙì*c­fGÚ÷ð<`JA C«úÍ·kªHÔL.(éV=6ÏáÈØiujq³ˆYÛè¡!l*$Ùà ^¿|Õ*S´’ÄÕL¥B;†f2¿O¦ùÝþP0biÜɤ¯ãÑ7Îè£\xVƒT—±„ïÒJ ªÕƒi`¡'žGD7‘é¹qL2`^‚ÉIVöÉ–¯*%çÿ~=¤‡£ò„Á"ÚUŸðÃÙÎЂ¯_6vÈ?6-XŸíòl¶¤Ý@‘HZ4:¾¾¾þýËWo±mžÂZ-ê xò_ì]=“ÜHr}i¡`eš¡Œu+‹ü’,ýlÅY’'ÒÛµ¦a±ÇB¦…*ëÉȳäîíénW#8n|ÕWf¾Ò^ Y’íe[Lfl­©-æ/‹±î0Øéá¾y2óA˜ÙÇ>¾üi™Ÿçh?ýqÖÔTPT#‚ˆ·ÛöúãÍ÷óMh½’,ô@uÐMTKêOFUÒÓÙ±áÝjÇît`¥?ÒŸ÷þŸG-—xùÛ‹þM-™Àßܳ bx<ŠÃézjA7?2„gÜ›±\yRç§WBÄ9<®äï$¯¿ðݰíVþ}00þÚ‰aøÿ/b¿‡´_øû´ýu1õïŸ)¢?Jû£ ‰¿ØÞ¥[Nû„oËôL¸fí4iM0µ«át¹ãdž6¹*¾"Øw{Iñàûáx Ñ2*†3+™øže; Baf¸‡˜b˜Ü_×ûªÅ ³G ‚ªbj2š–%¥>Öû5|G†:lˆFU´{ë…û}sw+Т¾­Q¡R¤opK7qI/Sl)E­˜º†[%é»÷ÜéYgKóµSÒ‰¿@$Ý2#ä¾Ó$f›e´\› ¥EçË2Ï6Ùz¿Å}ó·´e™mì™jÖ…š}sÖî„5ÂÃQÏ“›lÆ€E°Þo·ûŠ ›lÑŽ°M>²oô·••¦´É¢‡0³eY03*ÕÐà›ë±’°ElšX×5Z@>™qu¿Ý|[}»» –ÕÔ¨oªfèjsR„ ˜¢t‘ö¿¼°æÐ´³™ü«b€ ÆF¯ º ²6w" f‘uiíî5ùUÐLN²ºˆ˜b° `ƒo±m«¿ù‘d<†žÙô4OýËG[L!Qñ?ÿýÐmõíyÕe–" ç6ÊöîÎÁÉ&3›ƒÐÛª£èh.„@ŠI¦ì »–†˜Åü“¬QiW®I‘t½yJ"û›o«Mó¼|0-ˆÊ›ß@˜M¬\ï.ƒAž&k 20îŽh›SRcÿ €@Dàᬻ³º,ìå‡åÓŸ¡„ûŠJÐýöã—ÛÝY!føøéã'™ÌßÒË9yf6„ ŒH!üd}ãë-ÉÉ_|óäOÛ¡|e: ÁÕ:ÉôÁ duºËe÷1ØÏœ”#c®™úúÞ¡òùÍgqNýÆ/Gœ\n*€Ç5ƒå ,åzŠGø×kØ|üûxžÃ»cΛ:®G5“² Ê~½¾Á`–ÄϾw~úf¾¿ÿïVe/ÔŸÝEú_~gN@Wlù|7ôýn°yÆ¿òÎÚû¯’ŒÃϳ¿Ð~Àîâös¿ÿýÈöÏ ð?x;¥~säÒ€‘Dõ”êìó%šf}IpG^»Ü¹EîŸúÄ'EÝ#³msbP+Æ`0¼"*lžT "‡)îôûÚóÛk¬çg=ÍZ0@Š ¨o¬Ì¬æ,&§j¯ÃxNBœâ%gÓ¤øöiš &ÊëZè.`*RRZFµÃ&¡CÆ98uSXÝÑ ªAa£uC#9ó5$’~ (GàZ§h@:»ÖîÒ, =yÑý¡)»ÕÛc2=r/M0Ñïµ^ {ú6÷}*û•f"â\;†î«Y0¤¡Í [Ù|“‡›BÒ&Óó<µ“Ítá°Ñ2ewgDôî­Û} fH8ë³É èëm]7î.§_kQ¶7wáÛ—=Öû•ëÛšUhIKi¸UGe•쀀øÎŒßúŽcx·n÷~YAÒu·P† ÅBÛÁ²ÎÑKOŒê Xx„>äjˆƒ«4³ÉôP¥ª‘±DJ"gü¯Ê#KÍó ÌZHF¹R$:4™o(jŽ©4OŒÅyûY óJ†{=˜™¡¾ŒYP)aeÎÎã›m†æQ¡£RÍF‘"&Æ4ªš+ €;ÕIøŽ©$ϰwé’‘Ýàà[Ц£L FçpB½†‡{x:‹Κ`IUEj¶½¼|LμÖØÕȨs1@–×ù‹mî‡=U…Wøê’.SÁ®âcµï e [@$õ ƒÈI‘Ê÷™ƒÀe™¸èõù}{쯠¸óÕ§ûwEò!Y{ÿÇû JNG\ÎO~±g$ùØ»?~ñ$žu–’RŠ<#ØHõ†!"Rž=z•똅 †ÏÞ(CzJC sjŠt¬Ý#)¹*€¡§f ½ªœÎÂèŠ\yª"MÞi’W»â†jª(ıžö¤ó Š~Ü=û xõ^ï%نϟ?O/˧—Y¥F…–׬^ÆIhDeâJÒ.(ëyÜÉâÈ“á«bg“LG¾gz\M¼ë ’)Ó÷}ÙÍ•+*¤bj`J=Ct°h`ÓgU´Á´²‹tŠj‰;¶É …òxß‘dÊá7wOLrªcVDUT)½xWÂ9·4®;·¯ëíõv[7#DEÍÏõî ºyìÁ”H5v‚ø?yIRRˆ4‡‹$‹¸·!¥ò©)Š&yãß’­óþê°úm-Z7èþ6þ¹ B>fˆ{_VžvLIKng˜_€2IËøÎ9~÷ö»Ô9/ûà7‹¿þæ±Ïmößо‹gþ;ô‘ÿkûÛË“íÄíUðkûgüÔ.ÅáoÊÄÄÐyDß´Ÿ~o7Dj€4ËT¢`TDMKæU¯£pÒÙ£âËh@F2yn_o~÷€'Ö7$XÙ%” Ê"éùᾺûº9Ž’”M– :hˆƒÆ¬!-OÊhÔ ѵåPÃmÁM-™;V‰8p;}ž"`MpQ@"Y¦—Ö%Á>Ú­¡€¬0«AÔ«‡Ó lš–yI'X²¬DËĺ[O{_GË“ß72Ú<ÂÌæi²ic]ož¹Ø<)èž(jEìi:h`ô2©©é˜ŽV®P2¼"!¬6ÌV$°mQ™~ªìDMœzT^€y½ ðè<,Y‹<ŽŒ¾¤9m;žs§Žw€ƒq€àíÀ6ô”¶Ž sVÓÒuÂuÐÈjõ—Aôê=’÷˜ vh12éµ) IDAT¦Š ¹ÅÖVì5¤=’=O(:ÛËâo~ûê€s44P*t¸8uwü”7 Ô¢"ÐA¢va¶4C <ì—î$Y» ÉLÜȺ_`r'x,¿:@¡‘2RÃÁÂÂ!0›•£œáñÝÜu1ƒ(Ø“e ÂÙè‰~}ú «v(LÀ@›Ò)Dwg ´ˆFk‘dKíZeÚ±» Hß²”»£¡¹§²qK:7T4jÀ±ÝýöuK¯·ˆä¢ŸÂ]Õ€%t4q•¨ˆ*ºÑ-!S>ѰnŽ¢:AMçv”OŠrd«Hûq0Üy»ÝpÔCDÅT²PÖIesßÜ·X7_·Íß\söHÅrÑT~fzÒ‰¯` í kÉg2MÓ-1å (d RHfÖõÇ™®Ü¹õÜë/¼ûåÜßÌVù ç¹~Îõ>½Dš¼²Ñºr@=.ð8î‘ÚÈèd¾Eÿ’ p¬ƒß!ÑB«¢1wÂïd0Úÿ0\þy}§¼}ÿã›[íù„~ó¸o÷Ç^r`@OÌwź?â›?m|]ÆÂ7òäŸyÐùâ£Év\?ð$þwü×WjôuB1îùÞΟ\‹Û”©š½…ß:7ž ’Ú‘*£è¡¢D0zøëJOmH> Lmúà){xר=Z¸;ŠÚ t÷=à°ex:Ü{ŠjJð7jéc½ @;¡bUÑb`¿¦lµy CÉy!#†S`F#n3í[R˜9–°ÍÜ&‚{ ª¥RØÀц¢ôUaÓçÛëh%•¢ÏuEgö£çþ–Â0­÷¼ÑÑ(îé·„ŽäÆF܉ UU‡J*kƒc¶·é«Hu­’¹AIlÕµzŠ!£ NU¢™Ò½ØâDW ©g½?m½Ö>ì¯ÐEô°¬œÚÈ«8¨OX8i]iËY§ :•‘º¢5ÒÊ"@²9€û÷hl!è`h©2zG šü|ñlj´¥Ê˜ Zj?îß~ýýh&˜¸(Rj«ªTm¢YÒxÜïi£Eâ…l«,:vÁtÉöxQ4"‰%–©61t†'¬Õ‡ÊgœBed‘:¹â‰ç—Hnj ¤ÚpÚÒŒx(ëæ¯V±û¢9S¢Žhm‚EÏòø‡»v9ÑûÑÍËñðŠ"ZUŠÝÑà1–’VC`5/d&diC^ð–±ðˆ#ZMͼãŒä¨Ä5GvR@rm=ÜÕÔ­™ŠÚb¬sÉ*Ð*¾ˆ$adø~©A±A‘H©ê"èÊ%’í@úyŠY*ö¡ Õï¢Åê¾ù¶¹Óƒ{8 ¢ºˆeeJEßV©ª‹ÁÝ£QܨÓ%å²Óü(ê-r“0 ½è!ífP­¢„'©X[láÞp–9®Í@c®Â‡½è…å‹£Îu|x‡ä£å{0Fðü³ó@Z.[Æ×½ž§ŒŽ¸ñþa¨Tâ´q˜ˆ $ïã¸H`g*œ± ‚("Ò`u„ã¤S‹zñdËC$o‡GX§–‹ËŒn“<%’?eÑì'Ê.ß=#2ÎÖô¯ªj Cä<2¥E#{Ø”—›ÁôåR:8iêÑ#@íB‚-¼p“puõçc“’òøŒ=<Â÷a¬Lk=¢‡ä߸å£Üá; õ£ö)Ph”ÜŽùÕ£sò¥ÞBŠx£‚h nX_#eðS=·HºSÙ· ÂÁÜnÎüá}ŒNpHÍ0ÕÛývÜÓ« Ib¯i5çlô–ªª7³E4;TÈ¥>¹6U¬JŠœùîë‹o_¶çËê>ZŸª Ÿ9tž½²RSÃY“‰€Ã½–’]Nì°:LÔp¥`t@‚[5àÔÚ¼|áóâı»JžWŸ?ù~V3ã¢ä˜Ìgà½ýÇ›{®€'ÁјÔnôiß# @U9ð›4ž‘ôhäGgø¶š™¯>ÿïø/8.kÓXWøöíï  ZT#ZhA¶Lež‰³Ä‘½ÌÊ„_Nd¯ˆ‚^²¾«×*@ZÕ*îŸï¨b5;ÁRnjFPŠÜpã§áTd‹I•í pè3‹dLðѺI #ªÚ$*ƒy†ªÝ½;c÷4ÃDuú0ͺòq=r f^%¥w„QÒTÜé;#<:lÁpPØI…Ep÷W_·ÍÝN†‡ºjìnfÏë˶­«oÿñ_ÿi‹)°np÷_ÿûW«’¿·a–2°@‡™)‹0 N¸»¿úóùâU4u¼ †¢ªfj©ªß˜ª®E‰Á* ¤;F)û4vF@Ñ Âátêi]XŽÇA>kä˜ö€0(V†µV¤˜ê …g§W*xWXÞ +J˜Yt²‰e€E“hGݘXÄÌ´êúe}Î ITT“ïíðdoÙªöøån6”{'RÔF ¥.zûtƒàþù>5¦p¤fš:«.Waîy„""2ÂqÄ`ÄsG©ëD×F•@Õ¡ 5ËRÒÁm5A>AC†¹ˆ‹ÆXšui)©EGvp60E¡!h>€ë>÷a©­&YtQ@ÍûÍŠ YTÌdQìáÍÙ|Náy2X…Ü]€´ð‘ÅDMÚ¤*¬…Âw5oøO& ³„ÏäÁ—AºÖàÓCà÷›1ˆ)"E¤Zvò‹¤S—£Ù`y0"U zDŸU¶i«f‹E¥õ€ª-95€"R5ÑfOehôNJn)”¤b‹Y…-¦¨T* A˜äBgh`ŒÊ ¨vniÍâ5‹Šµ>H4hèmõzƒ§Ÿm.˜ïF6,C†–ì1EOøwNâËOG¸985²ÜÉPØ,oÀëu„ª×ãþ 5?3óc=E¢YY«ÊCBù¨ÖÆáôžÕCNœJ¥· I4Ó%Ë…Cõ@ëÀäUÔT¤f㌠:q„™f…FF1K‚©·Ï¢úª5¢¨A°À>ßs¢¥u9;­!ÑÎ(`I…e()@¶7ñaT ·XôÁ{ªÞcÛÖçÿX´àù²zÐwz„‡Çn*‰µ’Dà[Å“Gð|õç뜫´ˆRÇšPÞÞc¡½B‚ÇèH…gÍTP¦9S0£†âá9d*©uܤãf8Ž••”*w³ÇçûãóÍEP‡UÇÖÜÝéiq÷0UPÉ*bwP´ªŠª¦À€Û—m^³äô:,o¿Þy3ƹdgééâù•ͼ—Ç÷:þöÂ×½ªrh¸X_µñÙÃ[ö gU5_0wç¡uú¾˜•)qv‚pôB_¯g~žÄyQòöñÛ?†.Žš;ðÕA~îàÐ2c™åÛB?ïÇ<Åž}Ë÷¾~ο21¦|p¸ïV`Öø;þ˳–Æwïüà¬ã /q~œ¥“¾˜Êœµ;9'ÐSö`8|&™G Û‹k¯j YÔn† [ ²@AQm¢¶¤üc$ ÓLnõ1Ö¶¤BÍëÒ¢ˆjÖUw’Zy¶¬ð6ɤØIUiî¢"Þ!]µF`Ø]לŠsiªšÛXwKmwº{¸“Ô2ìÈ`§VÅ'ˆ)@ß6õõeeƒŠ$qTw †ûç›™¡ª¿º¿®ë¶¡CÓªG ØÝcÛ’£«&Z$h’ØB# Rì'‘„ ±91­í“ZÜÐ#Ü$Ëä ?èMyÞá¨h=±x9›‘Ø{²Ä³†ÐÏÁ(ªÉO£1͘ÈÛ…45,e†1ä,‡ÎD#1Ó!!@M³ƒ»•é%«GÊ}>'y;$¤ªï]2ɨ ßý³Ýnf¢hŒ÷Õ_ S5S©"&¦ÊŽç—U=¾L Ïûý!6EÉ{2®åñéž*J²¹ï)†ÇÓ2ü¢0içè@Mt%ÜÙ©{Ì»>y¤r…êÔÜîÁJM³"{’ ÒaeŠcåæT²ÆîÞèÍ}÷ÎûM ±±2£Ì m½zñ’â®%õxÄLU$Ò6"væM<Ô¼€ˆl˜45Sµ 4ú±³þ<\Έ>|°€PQEZÞ-ˆ}4£¢êcQ] Uè Ǫe½oð&Ú#2·/™ì«öÀbR‘)4 lçÞ#û~WO;Єv¨˜}²ÇÍLÕ–D«sÂP¬âm¢¾EDͪ9mó=bhÄÐÕcRCD ¤(‘RÆŠÑ}Ýèß#Àá1+Ð’z ’Ñù`ÁÑ5o>ŒIâÀ^¾ ¦ÓUX‹æâ¨©ƒM"‘(ú‘•!,ÓÒü\áóõÛS³×ñÃp¶d«ùñ±\·¿¢ Hö¶ÌLi4õ´ˆÅ¬ª™K%‘X›½%"‚ª`‚Á—º]þ?ñ0ÝV ´@Áb$åÕ½gRTT[¤ó™étŠ–^b%S j2¤FÊ4 —ú޲Èc-!órš¸kJ+ U!ƒ¿=Ÿöê™À“ð±»ïÁ¢ŠJ­ †'zßļcÝ}{õç¶¹3Šhëõ·ƒÕŸKa³~eáD6Âïø§ÐŤhÚwY-rÊð§QL ôY¾&„OÅi±E³‰Àôžr$c]íÙÖFU»ÿ2ö_t?ˆÊHVMú€ÈbZå¹ñ¹nÏçöûïÏßžOwß:±z?¼âÆÄÈò1=†‹ô¬ú‚rw­Æé}PF¶l§°Åx!eN®üb³ïã]•áë™;fS èyK®öIHQù7ÀÉe\èÄÙÈ N†BGš-¿ÿåŸïÏ]òÊ<ÊâG‚?þV Ñ%J ë×\Ý|õ®3.÷Ïdt3/ü!<ö›'5k¿ß;Ð[ÙïŸ?Ì?˜ýæ…ÁôþºíùRyü™ãIÎ?3ûýpJŒëý;þ«÷óõÏvàxø²½guæÑùX›.å^¹ü!\õi2΀ˆ¢l Ú§›e «»RØ(JÑi‹b‹¹{ì  ûëÆ¹™árp©vÏ4fy:Á °0ס„h` £Dú[‘<ÛáJzvÝœ¡aâcÚᙥ̯Ì_Vod É, =VOü@¬Þ“í/kzðZ5½ÝMEÜ€™Ý?Ûí³¡ƒ¾»7ªˆ}6ûtð Ñ8ðÏÐÛí~¿=Dä|÷¬ 5²A.“‚R "v3Ãí Ý“›DuQFs4 ÿÇÞ•+9’#Ù÷$€’;¥Ì–È–vµùÿ¿ØGjRªL)Ü¥$_ÁAæQ½s™ÍÎØ@(ËÊ$ƒŒàÇ;:P2׈á™=|éfMdØaàœt©X.ÄÇÄ[ Ï×$*ž›t´J}WZuÐy¼ü1Õ¸ˆßpÌðé׋JG‚K¾æ¡d”ò-< ˜N1\q®S_U_T„˜žF 1LN‚sˆ°bÝ1âúë5ÉÞrâÂȉœè{¤XºífowLHóH@DĈHÍÏ(ï|_`z‘€ô0X̪ß|g•®)'¹™ß}S0{hƒ2Dÿs»ÝÞn !:8ÕIw—‡SKάxÌ“V8‚J±žgÑ‘dMˆÃSqÃF˜ßõ¢r»šYt“²ÛÈ´šÏÂYªqUvyšá ]Tô¢YJ£@8=á;c{³û si¼¾ž¯×«ª¦pƒí@DŒðQ¹tMƒn˜ÙívûýÏ¿ý–Ï&]ˆì<:©›fGAÉ&År‘­žû@ê*'Úù˜6‘rSÓ‚“°Szpó¶a¸ï3}7{7;NQ²7 ½_hˆ”ç™pB³$”þg8¡Ê¶¤©°€ín¶GxÄá´””æ.zJûØL«s ‹7 ÔÂáW^ØŽÛÛv»m÷·{xê+!òs¹ºLqät€Ž@‹Yü¾›™gKÜÛ±™åjˆÚŒ20Çòÿi†|JÏÖ7 @ü“‹!03ÀÍí¤‹a•R¼ƒ‰\Ù©Z–½¾ j"å¸uïßâ6< Ç>C_Îç_®ú"µÛ°”ªà‰EÜíˆævßìöcÛÞ Ô³ x£è¬õ vÆžüˆE¢^t¬rFK!†‘!¹ÜéáÇ–ê»aˆ4Æa†—h!)ާããEùò¸1Ÿ~÷HÏ"å¯êM9mq섾ÏŒX ŽÈ³tAþòÉ-šÄ,+T¸ >✠ÌQkºéú ¤ÕXÓ+;Nð˜.6àÃ⬠ÐÝì‡e×v` žÊGTÏ ª™a@Ï‚ÀÝí°ŽØlóݵ+ûq¿ürñ(u ›îH¥Hš\E!'¤äL ¹‡°‹¾æðJzƒ¸ù$µ‹”*U>Aí`»¤÷fxXyçQUôå HŒ$ð?]®¿þׯB¹ý¸Ýìï›Y€$;Ͷí펓C•ðÂ%©êåeC Ün·ìÅ™™m&`Ê{žá€ÜßîÛÛÀw73ÉÆ²Hy½ÐWýõ¿ÿ¾Ùöné_š¹J–©mï0-//ÃÍÆ”&ÑÝ-[([±:»" DD†thLä/‹É”z0’îv³RúuUË‚‹¼]Y+;µkBtb†Ã¥|AŠƒ‡®ð;& Á@ì)»å6H´dì¶XR‘$óÔ¾Ì6Û dˆœÏgU¥h„Rb§"|ѳßmûÎwÃ̦›cjü¸*Dè »'–X»ÊIÙ|ßàÇÍ´‰mwsx %‹‹c?a¨ŠÆcÅn`ÂŒG©ŽÇ ÚÀ/ª>…ûØR‹Øa°DsºæŽâ‡*Lõc³ù ø 0%s²ñ;#ýϼԶªíÄS©hBº J]^\‚aØaoV·©÷´Æy7Ûz¾Hâi¥‚¼,øˆë¯×óëõ|>»],¶ûpŸˆOcp7ájy|º§]S6 èÔœ‹ƒÒÄÝ} vضû¥Ÿ}O!:bº\„˜’jjzÒŠö(YƒÂ¼_ÒÁ³fçÓ'0·ímÛÌ|øýÍžŠ5ç³^NZiÃÈJTö‹œ@ÌÌ Õ3D,@sÛì·ßowwPØ °ÚEž•Ê[š[žדÇä¶9fXàfærÀ>¸m*}82=/ €¨ZÚxàÒK«×GµRG½ Fµ|Ÿ0q$¬9¯T¨XTà-¶O&>Dž#Q’ÁÒôOA‚ÉKLèC¸@L“N°ún"©z{ߤP3¸¼ª ;Ÿ2WQYP}«1pÛo%Tþ ‚HÌðÈ<'õ.Ò…'åIs¯$m’þvÖŒÐÌÍ|÷BÁ¶Ã©8-ÄGÞÈãîl›Kë~‘>|7ó%¼4psÇÈs6S}]–BÓÚ‰$ ›_¢nt‰NCøt9©O*à‡P3Ušø©>*9£ž,…2QóÁb ǾTÁ{·ð`Àˆܳ|+R³÷S7lÝúŒCè¶€«œ¯¯—óEU… ‹vÚf·Ûvûóí÷·;õ—‹^5SÜ03[ÙìÉ‹ª¤@ôIív»Ýî·ûýönÞˆ.BA£p7tAÃvÈûµT>Üw ¤è Hªó݇LÑPÀµ î¾™Ý"‚'½¼žõåbnçW ½:0Ü#Rb°j ó©•=Ûc˜x*8~¡ëmá•”VˇL<„ÇVç?òa„‡ÛDìÈ"/Â…ô“œO87 )ÁµÝäÎÂU;¦Åsµ:‰ÚŸÇòrTñžŠ¦ÞOò¥\XõôâìàK1ápyTUþ–´³TòI©â‹V¡ùó?Ï) 0žç“Œ§oþå|?f@ÛR·þ¸à~ñþûLJ\ô©O†õþì~ñùZðË¡¾üxá—ªèçÏÿ\îù×O€ÿ3þx|?Ÿ$–Ä1¨ãÐõ­¢L•±X°U`me_ŒtdË(­í=,å,Føtë ÇŠàf‰2ÚÞo>"öÄòX¢‰*<‰wǬ´?Í@‘n«*h`X­/‹yå]Ø-S+4‘lµ%n€=|PàÞR¸Ö|Ï(H;¥ÀŽ$I&y8•žÓÝцIèù—«ª‚°Ý<£d}P""Y?I:’.‰ï¤PNÊFéò(ùWÜœNÕ›2·çìê$™¤°|0K˜ TÄ`f*Š©£¸gÛ“©ÈÏÔÃ\×?ÕgŽ %ugxú)$ 1+L’1 IDATC½ê°–RLäÌlÔýÈ “m˜Î"ÃcFE´Q~†)L¢]//Ê“j&*KJ‡Bq:QÆe¦Â“È"ðÄ+çz«‹S­•â=F§½mnžnÀÅ—$°§°Maìùünc›@¤œuE”B Ó»>i"/U’é¨ÁŠfÝR/úh8I„cÀGF‡îžþ^ Ì£õtpø™iõüøÏ§ÐjÆcK“°œ¯f1"+5+7@9{7¢1!ÙÒ)"¤ø³œKä™\ÓO@²&H·­œq±&a&ü/(>3`îönön~ 9)NÁΠùŸ¨Ö}Rßå ãñÑ·‘|F"+×>àînÿËÞk9ŽäȀŔȪ:KÚ?Xóþÿ v¼[k$kTK™Vœ$IUWÏôÜÎí»½Y¾~ÕÝ*V‘L’™@ D1-x¶ŒÀS€'Ed`¤„D¸wÊ) &Èê~ûûúóßo÷‡“¡'µ7‹„HÄnÜLXO*ÅŽ'Ä€óPrù~¶(6»£ïnRî@p8“¤-*~Û{O€1‹*·62ŸM˜6Žò3Ÿüå;E…ì]\B‡r6T''ö¸gö»Sþ¥¢@$øXÅ+"8¿"Ÿjž<‹Ôˆš”ò“¥âšÂÐ"çÛi³G뀫ë¨ñÀP´öŽždËÇ’ªlÐ&Ù\ 3Jdµ¶ÖYÅvuDºg—t2Z;œ‘‹£@jÏ™a“„RºØƒëê·‡_:ÂýþŒ5ý›àðœg)ŸŒgÇlÄýÁ6?˾jÌ7âðèUsµøÎ;z¸³_qA93ŽDJÀr-²&Õ*?3êµûúá·_VÒÞÍ.g{¿èyëÅe øÓÙ‹ •­àÉIà“áÎÎ(çÁÉÍ‘)â€ã”(Û´ÌÎÔ9ËÏÔt8™30!À)9kZçî<{’ cËQ‘|S1±Ò×J÷¦œuB?û«ô‰ÿœ/ò<ÖPÊxI—ˆêk(: E8?<æ9Ç쥑©æ Ô&®‡=ýûô†oóʲ(f¨6§µ¯g…p{m9>dŒí·N²êžã¢Éºôõ~_×uõHwœ ¢§ŠM¡U”àpîp†xôŒ©õ¯È¼&ç‹eõG\|¸?.ͤÀËZ†R.#q§U€“¹È) •Àm„N—ÚÈÄ Q Ø¥ÌÑÁð»»."'3»èIØ}-ñ[\ÞÏv>ë¢éµ Mi–"=È€ïdv=sî**KÉéI„ðz¹Þy §,n‹ÙÉÎg³f[•^Eƒ=‚N˜Yö(ÚɰÀG¬¢“)pü ÏtH¦§4)ŸÞìÁFÇNB’¦[šdï5øôŒŠöµs ƒ¡ãÓR LNêY³Ít}/ÿ¢W?Œä.n¬èôÐKtw¸,!C±åaD`Hé¯0²?3±[8ATõ$©Í+jÙšîÌME l¤xLA²èT‰€Ê“ù¨Ä(¿‡›ºeÓ`¦Œ|ÈDyU¡'5m&’ Z[i °Ö¨Ì—+UÇB 4ÐBR»{:P‡*àÃÓ*O›–²&V‘fvÒ,© Pn[ôìüßÀøóL§%¸-Ä/ vÖ»ÁAúœÍ½³pƒâý‚‘½Å¬©¥Òx©ªD”= "ÿ !’1˜óÉ´SO–•Ûª@LE‘ÍÀ‚ 4Yh'USwvD¸¯ë­Sš\/6˜‰”oj=rà9Ïà0CŠcǤ$°TKÛvÍÞÃ?î\ïþpx¸+ PS»¼_Ò_T¥zL‚€¨%rѹ>=Ì.Ù&Áuõ¿ý×O?ý|ã€4S54­|jÆV¡I•÷" Æ¢âé1)ÐyÖ pÔ[GÝâ—Pøøù!ˆ8,»B`|ÚmÛvmq(w¹@¸teIQ4!œM}=S¦TÃZ÷Ûül|º?üþá¥ãX‹‘“ªŽ¯²Üo™ûhk6¹-²•|Ì(*Û·9J©‡E;<Õû0/æ±Ã[Øê…È$è,"Sb¿uºÿG§Ôã›Ë*D £f1t‰íñ8dÂÛùíKäçøðß/èåÕŒ¯ÓÂl+ gÆËmúrÛgì ŒþÃ¶× ü'd¼äÉÿ1Û¿~üïíÇ·£vßw7n3P F§HœÃHÙIŠ`|ÿí•ý+ ²§áGh{³ëåz½^¥©—F.¤AE¤©Jß(v>[ÒPc«ÉtàqÇ‚s;£‰4ãþpüýÏ¿JSk`¯6¼Ìh˜Œ×ðPúX]wÿ‰¦¬“oLE®èt)Á'iU¢j "ÖPÑH QK¦«wgRx¨™jjAîèôðÛí@›œqwëÃï·{Ê__«BždÚÇ ‚Ëå¬*rRi´A0ÏpÞèúz¿ùcä¿Ù»v%É‘é"(”ªZbÎìþ¿vâIw#ÝŒ´¤4Y‰N‚dVwÏNïÞÃîlÂÚʪ³òO<î2‘(ÂD.‚‚`‹Õ]©’°‹uÛŸªæú¡¼9sGð$ÀÛœ®Q²H5Âöæéä0`qâGì³8†ý^ùCçªñ‘­ångNoül8#1©ô/.wðTÀ½œÈ< æÍÝÔ=@¹­G`®$ÌtÞÊÝQ‰ ˆ„9c~l:ñš..šCa4ÐQ@Û…ªy‚ùY¡è°ˆ…'ägeŒBƒ¶aýS.†ðîÈﱪ4ø‚î³>C¼ûiÁœÞi¯©lÝdbaIk;ì‰fÞÜ5Ùb’b§ÖΔUø×œðű¨¼˜uæÚB‰ýçv¥›èó|$;P08O‚À‘E§f¾ꮇys f¯øNåšÄH‚Å2 x1\©pne 4ÑòÆÁOÆÍVS;lýe 7•EÒÝ —Á£ï¡^{ÆÑ^GöŸîº?·àx÷ÃáN“Ìo²ÌBÔYŒÌÐ"Å–;t`Êe’(0QõPÖÃF…¸v•ÐÜ.€â™uDè¥JcÈ®¥ÎjŒ$ᘈah~vZ¾k­˜ƒÓ½ ½ !Þ[·»[O×– ¬OY‰¬ó=?›_§Rr"®8¨Gzvxƒã[D‰`7ܼ©£„†Ø:8Â&rµGt¦ÁÍ|Ô”)B|ˆÎtMˆœxW~,bÞªf©»ˆ)êI wj×ÊäJvçTy­ ƒ«‚¤ ‡O'À*Æ-’xçYÇóQ%©ÌJD•È5 XŒÀ¨l6n´£"aŒ ÍwÕÝ5üÛó˜ê²üîD‚jô³•Û/ý6Ý/á‚“ä)Èò‹—Ñ-@èC ˆ›Ü&ÿµ1îFgr»‡à¼=¾ÌóûE@9íÍý#5Þ¬UäP`V€QfH¦x7© hÐ]·ß¶í·]w5 …¯k€»½^i§“Ó Ž”(¤²ÔTMýò–Q^blЉ½@‰Dü ˆöpæŸjf\ÅeÜœWqàBÿ„i¾´¢ª–Œ 1©Ôc}F¸ÆÉ’ ݽç¥p£Çáž4 œ+£n¬-ŽLåé¥4ã<:R<âŒ%!L’ës~’ý"=àÏÁ‡ºÝ¾`´ÿ£)ßlÿàØüéÿ?o7y™ó‘ß-Žç^QÞQ÷{®°‘"óá†ä»Þn¾ 7ä–VQÄ\­¹5—)êWg™…ý ídÅÙÍ;kQ¤'`MlðèÌ]j(l d΀ªïª»šéòX0{OñCˆŽ4Ù`Yãи~!Ç`Kêéœ§Þ à8É€â³ Š™ëaÞ¡ì2 ‰WHUõc`€²$éáÍB¶4n_mêVU®„"~ØþT}ê¾kˆ ÌïY˜ÅlùÛªª2‹¼ /"p(™€,êmL×m°}hP‹¹K3o„‰C×gïjªf*o3Ï ©â‡sºŽ£óP_ Då[a ÐøŠ*îœ}¦nŸR~^]¯+1Ì÷4M¹ù‰pëc-ùÅ^cgÔÏÕÊDayÄ]HBUIÎ2HxÓ$!s¤M0‘På`5'JYspê913abvXO) "g™„+áp HÏkÌHÙI 2ºâ ²^ ‡šQ¨(»…6IöŠ!e‰Äl²†À#A EB&Xu®)ôTaɺ[³óÍ‘ffž8å%G¹µ8ÿp®ð0 aH´q¦\ò°âŒ+œŒOé&+•O»[·ÙçìO@KÚP¾ ÂÓL›ÃΚö8a¬9©íþ9ǽ¥¢§ä Àð"br´°GªÂݼ™º»UYÞE˜ö ‰~îû¾Y{Èa®ê$ÉÜÝ\Aaàš9§*&€ç £ššdûS·mßÖ=èºÐ!3‰,ò&×ún†æ¨ W‰ ˜u0‹Lb`ëPÝÖ]wU³ÀŽ, 1sYN>Qyž‰/Œ=RyˆÝ dÄà`÷DËù§tE^üÒ—“üá'ö戞x‚¼ãÊ;¡2¹y‡…‹â@ÊŒÊEø¥ûêê\œ¯šrDÔ N(ðæÔÉê½ç£ã‰~:ßâ2™ÌжmŽnz¸6Õƒ©G­A‰¸UÔs†/˜F_Ñ£>áýqÂäFAqX.Шü'1¢D¿RÔ{§ÃáQ M šœ9«§ß›ÂyKz^Öib®Šå 3.Ö‘ 4‡©£cðÆ½Œd,3Ëû12º û¶«0NŒËûåô¾Âέ­ è5i‘A¥Lì¶ÌšR9vFÐ1ÞׯåƒSxY–å]DBæÛöúÔÇ®ªB3gü¨›C†ûj¨£”×<ìÞ O¹{pÌH¡Õã ¢ žÜªpöS×0Zfà“TÈ# d „ìVšv£|@‡Wa¸ÅÑí–>XÇVu÷L üåñ@0¢¨êþÔÍ2DÇ_õ>_÷w¯&öÃY»ž­ŽßïÆËÂ>ðË›}§sïå¿ßXØIÿmJ‚o>~ì»î0py¤# À¯ ˜ï¿õ?ѾÆÏžŸðGÜIú‘ýƒ¾ûuè‡Ýà?à?Ûkë™ÜØÇ|û“O÷§ÚçÀÛ§–wjry(¿ÇmQR)0k‡›¢À'Á2 ¹²µUÍ,Oÿ,ŠeîfÚmw˜º…‚Báõ×Õ–y‘E›[sunŠF~éÓõöb¨È$y0ÎÝà|±ò7xä[PÀ5¯@=lÿP8¤0Ï$,¡K¼?÷uݶçƇ/ï•ežõ ¨2'°á4¶}C‡ŽŽxCy›™€†H…á„K3D=Âëóí¹eéiÈìL,•P™ˆ‰£®É= 5YßTùP€­Ûü&ÁO뺫:¨0Š  îìæÄQ9†Î —išì»G# äyæøË_™Ü0p‰Ÿ¯ÃB0Eá›÷{U4Y7¡ ¿aÀ¨ÃÈ…‚ ( ¶Ã>àí,²".ÄE éM ÆÄ¨ZâõžªªÄ,RÉŠªŸ€EA"p ©]Ò!4Ÿ~#Õ,O H—u¹ñ¸ŒûÈ_Õ0F &0‘§ž™°ð~¹°õ,õ\¥7nä„UR¥¨è-"Â9¶IST‘’ä×Ô¢Þ¤ïž8®NÉnˆø‹ê,¶ØÚ.ÕÛ¿ ¢Ž¥ÈÁørZQpãZ°ÍÅ£¡ÉäÃ2¾zHy˜ vÓÁÿÄØë¢ßf¸bžE*£»µÅUõû×Y?júx<æwánÁS •PØz:ÆÕ‚»í¾=ÕEÇöÜ×u[ŸšG>Ë#ЗÌìÏXèð-hÜ võýðýC·]µ…EÄZ”Îú09îæP’Îñ¯#ƒ}('áòU½Âq›¯oìÖï@ýúé7PbCÑ釄¡|݉ÉàHl@ñ{ãÿê£Î^~mÛBw&Ø'2ðÏJ’i<_„õ9"KÀˆGtP3;Ĥ™¤^ª$Á6wJR[3†P1PüÄ”21U("IeÞ UütÅ ¬ÈULL(~Wbš˜™<±éÍjRp¸£éååö±§’Öanv¸&§Sœ¹ > = (kœˆæAgkê•¥€ªø ÈÈž§ØÒ8á;yaðü}¯ äÊ=æ æbæÛËBN 8½0±#õó«uwT^©àO:ñy&â ¦ÁÕxóu[7U–/Ëãñ`x…R•Ç$³I ¶Àðà¡2ÝU»äî±ÒB§*ïèܯ½F,lŽnªºíûö¡/.¸›9’/­d…‘F×3ʆà-/qªpCÖÌÍaª\CR"ÚBQhz¹FÅ×УÔÅß(qãeÕ" ¼·[ÊngFÐ'¨ªb= C&’7AeýàŸ;¬íÚœˆ¾µá³£v-˜áÒ|:¢ü&;òǽžò?­Òë û» Êßùø«£ÄüV—ìåÁë[þ÷7ûî©ÿ¿ß~gšoWÒ¶?àÿ©v³ØþÐDý sä}@Qâ^0‚î̤ªÛ¯ëþËϪʅF‡ îz(¹ó$DÌ%ñ*~z÷¨ kÙ³J œDA(!mâºïûs3sÁê hþi¡ }ÚUÑAÁƒÚLÍç7X€©B<Ñò>°æû¶¯¿îƒ X²4œw?\Æ>t0j{b¾¸ÕE]ˆPÖM*3‹ªÚS `2=œ™—ù}v°*v¸šÒdôÓc~_ú¸þºZáÛn€r…ŠZ7?ÔšûDq›É$˜ÁùkfÛ°ÆdžçyæÊ"âÀ¼ob0w )ÚÐk‘÷EXÖmõŸŸëúÛ&ó2¿Ë—™~z0 o³®»[À\å-ÊŸÈ»«êúT´˜˜ o»†to¶7 ›9öÝeÒ˜¸©‚‚Ïl«¨ÞÓ£†jÈXòYg ±Ê?sôÁ±vn„Ì)µ`óÒËœ1Zï¡a uwZDn:`Ö"?y‘ež()¯+S%t¨™;´ÛcZæ·™'N’ÌÊòÆ öç­ÛsûùCc©ê˜´¹~è¶o˜*O2/ m®,³øáz(À4±>mSÌØò¾P3É$z8ï&ªìg (¶ïY»PwKœ°, ÕŽò¹Ê|]ìm[·=pï\Yx1𽤒0Ô ï†f†û-€í Ê< €ýC×IeR1'ý0abªB•P¡f›îÚ}]Ws<æE–yÔËHŒ¼™Íoâ ¼MÄ…_lÞÓ¨¹‹Å *B×]nç¢ê®æ?ÿò7¨‹³,_fo_]?Tÿãoz¨5´‡ˆ/o>¿Ï\•Ã9ÇáQ‰À^x{në¶í¿­t² IDATÛ‡ªº«ê¡h"™y“Ç—‡LBˆ à‚„ü[ˆdV,…hbÀÕ°në¿ÿ²nÁ´T%,#RЖ1¡ ‡1r×ð´x¦Å° _äºwzªWø?Ù»v-Çq${ÃiEÐÊjK*kÇ›ýÿXsª½]«I+•#,Ö]#ŠÊÊœš©í^§§™EQÆã>ÆW œ¦Ê»h nv>ÛÃćTrï-vl¼ÙœÍRÞ•çH dÍ@€dÞ‰FÁ1é”ªÇ |~>Ží@ûö™¡Ù´?ôº@ëöõý*´¤’je"l†ÙÕTØÄß\!fFb¬QãœÁü•)Ò¶Ý6s€:I'ÊÖP„éÅlˆö§ïîl€‡Àt(÷¶€ÉmPI/…oDVÐ@ðÎ\Yé ~T`…×PH”ÞIî|ŠÊ^ 8ìŠJ‹¬ŠŽzJÊ>]:bî¸Tõ¸÷æ4>ÏHèt:æHËk² àNf³=”Õ^ša~eΊ¨)®®Ð€h²¬ƒ k$ý Nþw¸Mhd„»i¿,×ërýëòŲýˆâ2iÜ=jl¯;öeAÖˆšÜ.l¯+ ûÛ¾Ý6LЋvíºIqýÍ¿}ûõÿõÝÝԼŀˆ ƒÔg/’I)¬ "™„¯Û· JÆß–ý¶‰¨Îôpôr‘Ù€…7}ß_·íͳ(¯ÀõëW,Ëeù²ˆËo·5‚z3Q…¬pq:Ú ’‚2ÐàèK7Î׈(ÚÐ ·µßS€îÁ`¢ÀR¥0 ;Aìî=׃=½.fjÿy]ÒŸ%?8×muÇdìX…”\mÆÒ-yðLfèÓ4¥U T×ì0OÚÅÀÏNÔcu:çNOZzc1ìRjl(Oë両æ#Êy›qfZbÙ†fÛ³'öñö@£ªå7*4àŒ¨Ôtê.¢°ÓhÂ’*¡h…>*÷+Ïœ°<ÏÇŸ›Çc›Çrþž\õßõÀûÎßïÇêÓÓÇÿ$ûùTßÿ_ŠÉç¹ð“`ñWüçΓ2œè*#Õh­aÁ°f]²ÝTFHÑësònWÙàÊâe !@XÝ÷m];yR'áb×_L&˜™^Ýß|s‰p¿@™¬ç$2ŒéÑÙƒ1!,É036±Ê€Û‘T¨¬%g¥V¡O\¸v\BÀ¨ˆ4}­p€tÈ~›%j SB¦C&5sÀ4=kk¸w°Y°ØB°-M­ÛÃ6°FL¶dÔ^Ô^ •Ö,j,uéipé@Túh¡“^^.:)èÙŒM›Ê»»û°‚&˜-E ¢Ò}I1”Ng5Àݽ!îá·-£aQ±ÙØ<È®âûýÊÒ†ôé«ïË_},‘$A³¢£šK M²˜ ŸT„ßÒŸ³¿ ’¶õ‡^QcO{ YÃÃà öl:ÊdG‘½9ˆm±(0¤°SסÑž;'xå·åÒ¹Ä5œ ^£knW”LFr '#SY€˜¶˜ªÙ²D÷w‘üK o‡çÇT)ã\6FgÜÔÈg54²r‹­.ÒjXôƒÎZ{#pºÕfe”îMÄ,€n¯u°¿®ëº> i2I6ø;‚ ÓÓsÕ$/Ì""Š¢T&Ã+Ÿtσ8Nà ¬;@ËÙ*œd¿mŠX!WÀLìÅ®¼`Â:­Q‰ŠýæÀ¦“ûÍì-@&B;Ë|ªˆ¨Ù¬ 2…ÐîäݽÔ,¹ãËb¢$Nyν»ì~×ȉ¯–Þ*Ä÷qDûèñò¨7õœ½ä¤ßu-Þ§µ?5Qþ£As:¢Ó¤å‘ôìtm@ Œã<~ †•oúžÓÍóÈð±q"˜èûžNRE¢šT¦Áª ôટ¢h‡ãŽ¡/ÀcßýËÍÍZ Z*ÜöääÞ-ÑB‘2Èât€ÁŸôA2Xà®ÏÔÆi–#{L9¢‡þaCLIŸ€§>j‹(ª™5tovçºÁاÅÿ´«sí n‚å|h¢§î¨ ŒæÀQ*=±‚?=îßÜ!¿\`"örY¾\ì‹]~¹˜ ÜÒôû·ÿ^ýõÛzÛÌÔ°ÈÔ72¢v;(ªj&×/Ëõr…jºBfö.]0â»ã•¼À?.³qbÓÕ9êÜo¾®« X=ùÃRºÌ˜(‚{ÍÄM­d*âNz¸Ó^=3[SQ³ýuww3ÓS³$®‹(k€‡VB?84ÃÊéÞÁ퉺:„*Y=¹N ]•Œx|>™„D§ÁCÌìrY®Ë…÷-Użp÷‡˜ôÑ-kEøYfö„OLzð?üñµñoŽw«OƒcuÍDô˜'§[m'‚þýÙq:›¿K÷§{àÄø?ÝÉþJ€ÿ´ã»xåzm1¦8QÅÒôs÷zÜ}ËpÁ€A>jB‚æÉû픿 þÈpß·•Õ3•i„>G }YjèL†)‹td•Ùl’t XVF«E¢ÔRåÑm×í¶'$Ï9TR¼5t²–ɧÂiŒ¡Òi™¬ ñR6Hº03Ò¬CbßÝï †5apAu¾ïD÷cšÐèY|wÞéÁe"ó>g³­ë7h™¬ïŒ 4\.ð)¡SUµÉ’°Dw¿í^À»»{¤‡4\EÍLg»ooáálYÇ5›`³¢ˆÍ¶aßÖmÕP˜¡(H4?Üçc|½ÕTFé«vDQí$-Q0†èZ¶}ØCÎaÿND;TK$oùtz®ªhoOPJPÃqMÑ™Žº†ä”»^/á¾;âm_o»{èMWÛ¯_¿êD›àå$Æ(¸\—4áBGàÄþæþæ)S¼½ntOΞYNúÝ#<;À»oyÔ˜€¢öå‚ñð7 ãœÑn‚-†¢Ô)âù¢ìç¬Ó˜Žk÷Ø&¯©]BÙÆS)*«"³i™¹ûvsÛÙ›0ªúœýÊU^Ðy•(Ãs('1™“ †xITp]Sa5ª«ª}Yd65ÃËyc´õrù;¹ª™½\m¹š&(Íj»š©‡W‰Ø<&ÃñÉy:èó¯ç1Âùi§Œ0î¾M*³é$bbÍ–v‘ÝYÃ=¡AЍÛCóñpa©üm[Ý}{õuÛý¶ù[\Ìd¶Ë‹ÉÃß9õ=‡'=pïÃ)¼äØâD>fÎ(9«ìwNÔó!øÝpÎ'Ñ´ç}fœp>ù}Mù©q ÇïŸoyþá©±à¯øO;øîÿŒ xé‡ mV³áZÐ ¬Šò!ÊJ¶s0häÁªJw_qE’¦4î.¡:…¾\l‹‰h) ËHøOÉßI$¥,y˜%SµÙ0IÒuFp šv#“E#ù`Ë„Ž-IÇÑN‹=CI‰ž'QXƒ@7ècè¤$™žn+ t'™ÅR“ðîâäàØ¤uT舥Ãchê°Ææb•X¬+O6ò¼3¢oã7˜QfS$[F ìÅü¶o·={éЛHG´œî€?&@š- båÃv2*z·_ “hÃ^Ãï¡ÐèíEºn{1·äXÖ³qz.¶T.®€ˆªŠC£[>_ºT ˜|×,ÛŸ!-›Ff1eRI:_H ^‘¼ÝJ‹õuÕÉÌ"±yoÐIÖuÇmÇo"“š™ÍBÒÃ#¥˜*ãû¶G S*…E#=“}ótVA¹¸»Î sJ94aÅŽ=!ߢf³Šþ±%¤ Û–6Ìé©üÈíáÄ(èÊ´‰X“I;tSÍÓ¶:al:wXÁi‡z”Žèí}{?¿ é=Uœ<‘`ó__wFÎC $p£§æ~õÕ½Ææ&û›ïñ ¼‡×$ì²HtÙ˜M’‘Ÿ}Zârˆ˜.i-Õyƒ¨L¼¼¤ÕĤ¨Š à´8º w <µ‡ƒ É 713S[KW•¡rÿ†fÙMŽë5ö.VLšU¼óÉêuŒ2ˆÔ;rß >ÿóñ/ ¿J0š:ÏììçeÞ@w÷-M'ÑYÅ ÞF‡³YšÊáá6™>ü`$Èô Tz:3u›"%©£ý{œÅ4hE·¬;Œ>-­Ç•>~Î|U0rÈ£…{´ûFfÞwùü)½hà“ Qßùñ …¢Z/­¦Ä :§ñûxwÔaà@=°K'ÉFeTz¥ßw+ŠBVø[x"Ëårýúõú·¿/¿\d–”½Ì6iÜ™¸35Í0¹ßöí¶»G4„ªúÑ"y\¡‡q=уŒO"«–î¨jV®2Û’Hû¬ÝJ˜гwJµ¾ëÙì›;jÊ(ˆ:¶pT fÚÜ«*`JX>Ž-€Ã4¡£¢ú©î¢Y=ºƒâ§ê‰ãPàCòèðÎO–®¯&El2G‡ª!Ó»¼ ™ŒýÑa=7;æÇ»¾ïÇ©o–NHHÖkÆšð(>åÀÀèotN)œlGÒñÄuŽvò-¿óÑŽÆé<ÿüž>Š ðƒÅç§³ôSùõ_ ð_ã£qLeéô§3Ò5Ø5QQs‡bæÓ@—8þ_ö®ÍmÙžŠEUŒì‰$G;YÏd7»ÿ?ºv¶™ŒÜ±*"  ¨îöìÎë»Á –e‰A ç!@79X¥(h” «z5³«Šx[1r€k™, íK•N_L*Ë)j—”¨UÑ‹IQw—¬Lub¹ˆª!Þ=ýðôOR53púê/.›ó$n{ÇAI:4ìIíô]î3½È§o××`Ì‹[Oä˜IN4Ò=•xØ`¯p“n Á`ˆ7ª@Kïj†¾zYÍMª‚»øÞã”§îÒÙŒ˜"œ$$©hê±rsnáÖ}h§ fð0Iî_‹h½gøwÝ2Fl"!Ü/]÷R+›>N·ëíúqò—5YEHÊï»gU»'– %Aî9çI\Q”“%iê[ïžñ ¿§eXE£¨2bWVHÁÐúèùFF˜"¢*¨ê᱃TÇÅ’¢I(ªÉE!C„"u­ÉåÅ;F¾h*l` é ÏhI7ÕÌèÜ#vº/i)©ªRÍ*ôb™"Fp}^fâë?çåyVÓ®:jW²ÅêL£¤ÂéÞ!Õ–5…ï†]3ª¥iÕ#¨™$ÁR¤ ¡{g¡§”´ŠHI¦€à)¡EÓû\(y3Æ=Ú;æV RÈ-6x ®xv\¿-‚øú¯ùó¿æu^×gç_fGÍD*Xà/>Ï뼺§vR—õ¤ýêb~áB{Ð)§K¹6¬-ô">Mhý`’aw÷Xeu{öYÕ̺møA;F®î‰Ñ(Ì~/jë̺W—Lýî&R#¼¡ZŠnè)£`4~Erü®ý1þèÊïTú™ÿú&ú=’×÷¦œÅ±>5Ä7 ç×C |Wx“â–Ñj¸ƒ{ÓóæyW¯Ÿ>ðÞÆ!Ø‚U˜N_Í‚~¢!-²Á­‰EŠçåWdÓ¹"U•2a ò1:µÞy%º‡ ØÜ)²ƒJ©‚JÖ‡ìì"CiBÞŸ}F"23obs¢Ú©tlå£pyžøÞ¶í®Gö=í»ã³ß–ìxie8úÝY±ýÅÕ¨@t’è(³Æ‡w«TU Í4¬¤¼e¶nô-èdòá**$ÖuÅŽpçÑ‚Íd!KRÁ¹>/Ë·e]z‰Š`ìr<˯#÷É +‡W`t£ &òG‹j5‚XlѸ¢¢B@ݲQ¯¨ zroŽ nvÓÉÌìó—Ïhóh4x€×€^ž€A tp4Dñ¤¿8[ÌGü3šùrð±[wõ…h—=O”õ.ÈfÿNH˜YZj´%bò©þyîÎ7ý¬ãð½µÐ·>2¥àÞG}õžï•lηHÎoûåqÄ~C7•@pW©ï}®Úþ ­_ô¯9ð/_Ú1~ו¼ýÏNâ÷¿à¿ègý8»fIæÑÈFFDsZÍ Äºø;óñ“xe;Ç-Ø¢·‹E´šM“}0³ÉL£!¸º“{`§›UmG`æ~MÅÿh‘æ·¨-®?\žD²±¹f#V’F؇77Ad`*‰=©*È JøvFº‡~\a8ßn×ëuq7§g&:ZÜVƒbX#vô“ µI‹JÕë%ÁnwjÖR­I¸E21|ºN½\܈ä‰`ú8Ù³‹‘ŒHd¸BÀzDs©f;R~Z'Ä·¾›®/ΆŽc/@ë½Aî ÈFgDÐ7Ï8Þ*Ì,líÃÕ¾ù**å1È>ès݇p—õ¶ŸFIÜà]ß8µ[µ9¾Ète?-ËÓÐÃ/·f¨ü°Íöý=詊*VGDD _ÝtŠkžÜ[°õN… ã_Ø4]?š$Oz±\v°…ÕŽVŠ–ÁÊëŸ+j*XšÃ_–•€˜]?ÝnOO ™ŸÝWF„oI±–uBR¶ŒþÚ1‡ùíÛ›P‹=´ G9U´šUCéJà`Ä΄ˆ°Ú‹ãG¼KmgHRÓ f<;ïzÑ;`ý¯¢(ˆtô”‰R‹’ßX^\þ9¯Î¯Ë âó—yþ:sïÌd¶˜¿-把`¸ûúâ  «y#0ôŸ^¯©ÿt>çû sz«àhðÍ{‡£@ léu9´æIqcê~•‡^–»C˜yŽ™jI÷ª]V'KGḋØ&_=´X´ðFßèÑz½#Ž+OLéùŽœ}:$±|j]“öqo~\¢ïäÀ¿udóöÕ+ýÏŽnTÄ ”¿å½«ë±`ðØOþ›ñ*ç[¢!‹wÊÀ`B(Ñ–‘kÁÝb‡¬-R¤'ky©Ý+¤;µtdž.Ú4wo­wUQ¯®ES;bc•šõÄ!‚ØèYàS!³"v¸ŠÃ[WwË©#»ë{•AnÅéž W¾ˆôce>9Ðøåë:ÏËâ„èÓívýaR³@7'Ë»éÍ£…M6}4»ñ‚õÛ:/Ë:¯¾.±1È(ƒRûálÀ^°G4®«÷âNNNÎ?ðÇŒIž‚ð;P©€ ¬Š©ÙE%+ÈîäFðŒ•½×õÆxœCŽì{ë¦Dä/ÚAPŠÜ±Äÿ/c ÝþÃxµÙIt8Ã}Çþƒ~ÁcÑðסŸßÉÆ¿ÓþÅŸÖþý/7þßš«ÿÿeÇ›%Ó#¶<×=Hî $X"Š"Rî^…Ègi„þæçá<èò˜ëò¼²…U³&“Aµ‹ UÃî`–§Ùbñu~^-=“ Ø[йþìþâZ-5¾¹?ûêî¢jmBªzsßœ{HQw¸º‰ƒáزƒ:ÀB€ïqÒWzÉÔÄ[Ú_û©?¨¶î‰¾6¹ÐªH¹¨zªJjê¬R®)G‘ª’Y‡H ÏæŒEƒ5Š@DÌL –»u´U/ˆ=zŸª¸™±iÚfcÜLlTCQ‰pçú쾺¬~½h0¬ár1­l ·®“,ÖB;DÈ$*ZhÑSßiÏ{Üu,2ZïÇÏëìW²!× ¥BEt§g›”Ð!¡U»¡k{KÁL/ßþ" ™§ÊLè€tï9öÀE®6™]m²c5 ®èt¦ÍMºY—V4[+îKêÖH6Z‹ª13K³Ð\0±‡;#Ùã{°ÍìúOŸ~zúé~¾Þnó¼Æ<¯Ï‹AÁtMMÈ£û*åD•×AR„çˆbÚcSÑîå-È.eÇ–­ZI1öÑŽ ÐØ›0‘4ÕâÞ0äßÇ9¸'Þ]º#w륫P4ªhdI›¡T¡æçÅÝ×çÕ¦ óóš}©†j¾Áç²¢ÀÃÅ„£@ŲìEò­ÇiBþzÆÖÞOùSIÑ€û ¤¤—²;«WXš©*ŠÊE×ì–($sof¸W!Ãêz³Ünx£]¬Ѳw‡oWv~*`QoðÆtâ¾ S¿n?¯ùP~¡O1è¸ù:(Ö^¯Î Š­óKm``³ßÀ%Î A˜ÏÇšLNñ«Ð|Lû¹—TÛC)#_M?ˆ¼<ŽÕuê¼õ.ö›\ß/’ìÞkj 9¡6îóŸëïZm,Eñh÷åüÛ2Oóç_tçüuž—ÅT§¦ÛÓO·O·éƒ%½–@l®P^x»]Ÿ~|J¤R¬-–y]ž÷;Eèél/GÎ6ùÈ2ýø%e,x@‹ ÂT¥š•"r´F!§g”}Z8yE¬^õ*6„”#\O?Þ|‹÷ç…[H…Š‚ MÏ"‘ýv]æÅ7ww´¾É‘L_¥¡omø77ý”ß;Ƨýÿ5ÆÛ=%´»@ppÿêÝüΧ‘ ’aAxJÚ>Œà*bÙéîëËâÏŽ)¼™i•“ov¡Å_Vo®Õ,h{†ȼ¬¦´*ì¸SÏcÀ7’nY‹àžÖ¦tw½H˜*‚-˜€ä·ëµïDŽèv&0(&(’[yÅ-)%YUÂ;¡1ñfqZsßWxFÛD0@zx6Ly1©Ô*Z&Pq+S±Y¯,Ë¢ÉmRP:y¤ý‹J/ß²-z±€a¦=±¾ˆªI5î`QÂg÷ežµfŠ&TÈÅ´"VEó”,æÑÓ`Z&ªT33_Ý_Üפ\R\·Ù®Ìx3‘HM µÄ®áû|ì™fE¤)K ÆcÃÕ4 ygœ‚ªž…=69Nj¢™™nØ–”çÐlæ\dR$½ÁTX4"T(6,,H·3!ˆ¢Hvh©j—ôŽòªBªØE²äG„ÔnA¨Êív{úùç§Ÿÿ×>Lîÿdžh.&E¤ˆ’ž¤=¬Tì¡€@ÙÕ^ú¼¡ u¿@’)k9ÖÒ#Êb·U2­+#2 …îžòìj]æ9œv…ªBVf<îCHE‡¨Ù ÒI8óÒjÈÄ$ïÀü–¹[Eƒö5mêmÍ‚HT™å°£lì]Þ;£…ßfÒRT‹ŒêFyˆ§]¾~X© JŒnüá¹rs{Üó…;ö:Âú«ƒÅ‡¼‚ïñhPµy”o„TGÑCûÎÇK°‡ñ 2 ÄCÙèpÎûü!x@NÁfÑ(mc©ÙqA`²÷gPËúŠ@Ñè0ØŠUUýFu­Xˆ¼1n÷ ÈucO Hwå—å½yäÀÛ6Þ}Xo#pJ`ªìHòý=x`e £ (Cï‡]QBûT‘oÏWŽ)÷±¸S&Yæð<œááß%òó&§ÜtDJ8:Øíh 3 IDATàŸãª×5n¾­ß×ß°ËÓ²|03ãKb†‚ë³` Brî¼>û–…†=ÜÁ(Ôb{'™Vg]xö¨ûý Ð*踚 MòÑ¿†:@ѤÈj²Ã,½gÑA£Š×qA]"Bˆéj\΋˜iA†**2ˆÙ !·- î–ò#ÆdD»G ž>NnfËÙªh•°S‚ÏÌÔd8ET%”ÍݹºûÜeW¹Oå»YaQ&ú5ÁêíkÆGññÏoŒ×)àq:¾É~gòÕ±—uÚãA~ û÷Žwhê:YÖ¿t'ckbFÁßzûÿcâ¯$À¯ñ…=úØ7F>†¿á]´êÄÅᤦy;€HJwWL† 0É3¦ìÛA豫`HUpC‡©]yEàò骢ªßÈuźîŠVî¾m¾ÁQÀ"RÕ¼!›ŸÞ€`’sR^5Ñ¡q‚V‹SF,ØÜŸ7w(h„V• 9›‰*ÍV5IÎ] š&$2©5/7ØbѨªËÓÂN¿yº7ÑìóÏŸý9µ+ÜTí$*Tƒ ;2Uˆ(,„Òá7Ç‹C¡'^7ÿüç_Ü [@ôòÃåòýÅo~½~v÷íæË‚ËÓbföÁTÔoê~Û~ùßknÄR`ËbfË“ñ"H³¥DvÕ“ ˆ´mÐ*뺅óÓߣÂì’7Ü›oÏëú¼ñVMNÆF¾±E«¸Ó³'3\b@;Ä*۬ I€:ðƼCª(4šƒ³eÛ©*ªÕGåE@”:DŸ ÀœÌûî;Pˆ³“:1ÀRŒ-(ô^E5|ußÜL¬ˆËCD,ÛŒötV¾33 É‰BãlÌêH¨Ð“HÚ_ a€žpXM ¿¹-öñã§ÿÏÿ¸|ü¤Ë9<Ö5®Wß®n‹]žÎÁ Ã&؈´Þ iˆ9Û‰ãòóÎOØvâ½Õd*´38ùl#)Ôª"w½ÍôLb£¨èIÍΩÒé=†“g'Ò¬õÐu‘¬|Y…‡ˆ8ç·† YàqoŽ;™ ¥˜˜±¨G(D?,ÓæD@tÀ–àžl~G ¾iâÝG™_(0ìöur¸R3z¨ª ¼EôdÑÃÃ/U¬ˆfYMHé»hP‰¦¦"22a«f'C™þÌœqÛm0Mr–g¸b0áó»×V¨ÇÀ)@ÔL `Çt~Ny°)(艄IÏÀ…{ShöQdtL‘JKu:UÞ“9ÜÆ{Œ7ºûËvÍÒÃxD=èèùð2R£K Õæ¨ådN™j½Øû‡¼ïs³/öø)÷TE¢]q—ÇÐÇÜÈeZ¯¥>S‹tÊ1xáXF$Øt} tÀ†ƒˆ¨¢Ñàálˆ›{P«D1ˆpŸQSŽËù2Î_' ÛŠjÑ<®ÛŠ-Ò¢\ª¢ŒšÛü/óÜ-ÒÙÌØ‚"AF µ ¢EÎ+)€èÐÚ©\^$ö;*j6÷›¿Š¨‡ˆ9³O8%²"æ5{ZÎÎv!)¬°]ÝÖÍS“L:Ù8™¶UuÚ÷5\q/4 Ì}ïÅŸ«Îè–ØÍ;ælÜã}÷9½ö*W~1ÄÞ¤kÊ^šy,å$©$Ï- a£<´™m€=|7ùíy¼LàÃoðåð߷Ǿd_°—wjì¯â½P°ŸÕq¶¿ãQu¼üW•­ßÙÉ}çåïáÛò~•íørè¬XŸ¢7?y=K%øÌìEHÕ!…©¹ÔŠ“Fõx)Jñ&BQ(´Êå¼àd Ü=’nª“f‰"Ñá/¸o>Ä!@F† `Ã?Z†‘ šy£ åFÔ}°<ç-Ð2  QÔ*Y /–û"ȱêÞ•Š ¼MRÖ_WvdÊF«8?‡J¶H4F„· àð›ÇÍÏv6³óbèØž}Ý\ HÀ³ äãŸþëOy»øÁPUO*E¤Á#š)¢UM̓L  ž~¶£h!€UÑŒ29úH¹-§­qÜl{vƒïL`ºG£–”lÙ[ID’x«Œ…­Œ>ð½/ØÙ’å°¤ßï`ùˆ€eT»£=`Xùu{3Ér%Îà衞>öæ÷!¥•;kÊFɤ@ Ì#xsé¦*¶ÈòtVKuÚùPUPmt´@qGaUEb¸qr<>î nõ|ùáã÷?~ºüpÑ“HûGöè0$`| […’ ¬æ,ô1Ʀ{¨šéÈæ™ý^ÌÔwFº÷ø’ƒº db¬"*z21·ïûÄfk’߬RÇ>Zvã‡L>‡’ ݨ¶ðÁˆÈ?î0à׎ñ•Ò21á+_¬ß¿MÏF›»'è|p rbF#Ü1šlDÉl v2ö$äxº‰AðtÊî»þûiáž¡N¥"6¦üU ââôs,‚ÙÊh3L™JçHbDÍEæÜ?v,â±û¥±÷9ÆE(ð~#ñÝK;Ž#.À4ûy<ÕãÆÇè{÷#з§òú4ÞKºä8=öÓ€ˆ™7adÖ‚E/S°Ñ`¹Ñ ô–ìîŠ*Þ¨éšV¨‚ˆ¬˜Äp×#îîAnO–g”DÓŒæ1¤n§¸òˆ.‘¦M)‚Åýúu¿“ö‰;Èy¿âòP9"îà¯ñïÁøüRt¾LJ$‘{¿WØác™ýö9]Ta¼÷¼þvöà&ÌɦûDŸ¸Œ‘ýºG:l§ Ð àÛóúÓÏ¿\¯×5b»Ño\7·e¹=ûú|õ€÷¦ïzÞçÜFux;wê1„Ùk Rt:£Š½b w0Ëlj2ÈcÕ‘Ú-¢(¶@›øˆQ¤­BT³%UV,ÌÐ……ˆ¸ýB?\µª¢Ž"Qvƒ/— ªªˆ‘© I±.QÝ7&"n´;Ùùé|9/ðeóçMʰ߻>¯tf…Z¥Ý3Þ¡à8¾Cw¿1åÕ­}g‰qéGb(¥½{?Œ=R=”_ÆÖðvÈø ù§¾þít.ûIâ‘ßô·Ä?{¼=æWVü7É9¿pJãžÿÞ;ñ÷$Àÿ¬ãÕÌœ”HØ0C ¬ªHj*Êh\Ü› éÿ6ß~Ü–h_ЀVH ¾¤±ÁƒlN¸\.I‹RUžMZ¶ Ùbj'°J†õ~‹³žv¨ª0´ ¢ÁÌѪb2*‹€h”FÙƒs•T耹æFØt¿`¤3½ÅQš£!Ù¿`˜šÔTóJ£O-3«ºt` òL)!""(BÂ]žÎ—ùh—‹ÜÒ‘@ÙÜ7÷ˆå; Ï$%~½rˆQ!™c4 4:<<ÜÃ<’κ¾Œ.žT $»ýÙxiT@>X:Ä^¾»Ø®«»¯/«üE¢Ñ̲ë®U¢ƒÙ;*~ßСÆûRž½¬‘dÌ(£èÛ…ê’Ê=HÒíì>ÍöïcäÎlÅovDÙ‰cR‹çLWUºyc´ v …TMhVÉÅ É\j8 .BHZ’áîpô)L%ê–ý†¹OW;_.ŸþíÇOÿúIŸ.->ÿå§ŸþüÓºnZŪț4ÖêêaÑ@&‡Vð¼ðÑ… Œ[°3aÕãçevT†©c FwQ«îÂ3dº@?4Þóç‚ùST4–¢ Cìm?1Ö…éU–]‹löv&¹:[^IÕÆ±ŒqÿÄ×>çÒ}d‚s2<þýõ1à¡û T(ÑÍ“½|OuƒŠ© Ï2³ìNO££ í+rÂæú¤ *tƒhˆßÁä@BâÀŸ1‡Ü™õ$ðŠç9¡}G‹š'¾§¼Ù½¤ò^¢XFAó+¹çaWxçWãS:“sHïT¢¨ôà+á¬ý8_=üïžäü‡µýY¾|'¼ËÚ]I=äTÓßë²÷‚P„7•pC‰å”=*U@ÕÂ,t¢’eSF-!¢* FôÐjÞžygPt茯ÛPÍaÒ¡ À½Š 0:o"0 Dsö7F‹ˆ”®(’··*ç¤î7jÏ—Ê&ܘŒ‡éR'JYˆ!{9A ˆ\±Çýoƒ†.ÇäaÀ¤eÇåéÜß5®ãmEÁÒnåá)/íLûlÇø;öjU´À|¾†#™ª¹ÓO®uaŠ[ç5|s__üòâçKtrw£qd³wÕýCå÷›ÒG‰ ©"çÉ ÊÙKj‘ÌBóNF…‚ìp‚ 7½%ý™œlYÏ«šJ~(°bÒ©¶X2£ hð÷º{Œì—=T$Ê”*ÈðïæÑðß×ÿQUÉhnçˆ3¼M½¹‘­Ó›Y™Û  RâûÕ?÷hG÷4+"†ÃͱðòI¬…8ÿî>M÷K¦ ¦ò{– À•Ì”T[aŽâ²VGu4Õ¦LdBÌM7‚RÊå<ìûýCX«îè† ® "‹ )€ÔNÅÔùßÍÚB;¼»ª«9šHº£šˆx®l"Kø x*p!ƒé®Á©»þiYo60Zƒ/qŠtêÊÂÖ ±h¬GG(Àª«BU£§€°ºÈuÈɬ¹ì "4\dAeª ‡7SWÊ ¯ó²m,¢Þ$Ý€fþðÐt>¹p6úè0¨eÜfîV½ùHb+ˆ‰-v>7ëœwêP?žje9¸K\`ôá(,4Xpáš«ÜÅ UP`Žßê Ä\n­a‘%”̶«FIÁÑ`T¦àÜ‚©Ê"¯~ýå?þòó_þ*Zâ¸Ý¶ÏŸ¿|þõ¦»ÊË«¼ˆ°˜iÈÉâ;G;.Ô ²úQ¸0ê-wÊOäÏÚÜv 62#ÍêhÈb0H«da ·݇ýìýã<Ú-ÁÛpâéI—œ"í#¶ÎZ¥Y4xŠ7ïQñøÅGÐó ë>2Û#Ðçñžrn¿g¾Ïô²ØÊD$@ƒ7µÝ£ƒ×Ìÿ¥ŽÆ›°;sòf Zs´à©Lç®ÚÆù›à78`ÂfßÃÖCµ{w¦ù—)<ǗͬÀä×à.¾¤æ(Yó„<æ[žŒ<àýÿ‚´#ÛAr¸û,Iÿn=Úçõ2÷P0ŽÿÞ©‚™Èüñ.Hšw1_(ÀAC­zºoïLk:,R©d’J¨Ì0mDQ=1A²…Ìp:#$”Ýî±ÆPèTâÂÑ|®tÞcþSàÃU¬¹“¡y&¢¢Â‡J¿§ÔÓ÷±ìäE$Ÿ3šN›ˆÆÓá÷\Œù)«}r‘§\wJ¡æýIAó¡cnON`Ú'_ô©y>ˆ»…íÂÃ{fb̳ºXˆŠ0Y@PóíM¹NÞ\wÕÍÕLÛxðvãM5…”ì^)œÁnö7מßùÓé%HµTX]J•tekfš›¨ÂuPÓJx#"÷Ê 0ÁF×쬞TÅ­mº»í«U¬Ô¶t`ƒîêݹ0¸³ÁÈ‘E…šMõ¸²ÕA£ïÙ]ŠGN~8Jtloº½­ëWÝš¢E?ª÷‘ýÆ8‚3oÙ’*<àªÓܰY´Àh(]‘@è°bLß—Äs¸Y>z×»×g9ysww÷ùgžÆ(A<úgÈÝ÷ŸÒ‡'ü_7ò7HNÿ„ãGü/1Þ¯ÄO×f¸Ðæ0S.pW T¼07¢ˆ› SøCt’ê›NÓÚÓæ‡°ÒÉÞqR `Íu·Åë‚åŠX{¬VÜ‘¤f¯_uÕm0™¹Trˆ,‚ÊÂÂAÁ˜IwâJNË‹\?-$ŒfÔ Œa&Xƒ»k3k¾½­Ù¹HT•¢Z‹‚0`"OBwÛªwX³õ«›îÀMm7ž®€wl¦º'—[XäBNeº(€mÛ>ÿççÛíÆêJ^1¼Uܵ9šno+ ˜ØNQO–ÝÀ’Ì%·ÈÆ¡Év6ºÈR—ë‹P¥”}î›î@%‡gAãB^IUÍÔ£K3X.tYQUëâP U$ÜÐy(í¦ €YGdD™ÇÞÕg –ŠÐ»F°’Üe@þÜŒøÈ~w½NšÁ0¬ÆÉP…BÄË•."Û†¦ªf‹”CuvôarC‡F®2ú†;¶¶ Ø|7ÕÍÌ Êò‰¨²—Ñà@›ooz{[^–Ÿùå—ÿëòo¯\ Àúf·ÛíËßoú¦q•Ї ‹î7ïÙ`,ƒ¨cÏî¾GÀiÇäÙ4ò‘,ÍR @¥Ã ¸Ã»ªûýù´Ú>¤µ¯¶&Ë·„ Àްm›©z¼#(ÞG¹²fÌ*ÒíþðcSÏRtšI$gnöÁþ}:< :PˆGÙœ* “6…ÃÍ´@ Œ„Ë}‹Žé3Ss*†î)Œ'B÷áÕbzNá!Y7º[3K2Âü€¨„eM°¢Yt2øñ,'ŒNÁ"ì±<ò;ÃOõ2œ¦÷H}çGäu‰‹y²]9Wwèür¬ZŒÆ§e´DêïÒ¡»"ðÃß,Å.âLÅüáPãb€ÂÖ-‡šq#j„Â’ýº™ª£kHI#ïj[tƒV|˜„ŽBá®i¾àÁ©Ae™Ó¨”Æü×4§ØŒŠ£*ž‰¢j½UûéÁ˜¡ƒ–õ¼ÎO=–É”mç!òîƒ? x‰æqúüO(Ê"5MÄ“ã"ZÉ9™¸¦‡ÛñØÑî£ÌñœSrH6N¼`¦jáflðuSÛ}ýz»¾È², ¨úú¦Ð"‚„zµƒÍŒ¯ß0W ý‚uD àÛÎ8¡SAþަ›“LLL\‰.Ä‘‚)×€îF$5Ë ÇÁ *ˆtƒ/çÕ·ÅZ‡C-¶c 5“ªé›Z3.ŽÒ·QÉy”A1ÅÛ-\#‹†Úp%Àõ,(øRi– oº~õí¶Þþ~[¿êºiJ9b£Äì§}PÇѱøñ«cü>ªÐa8P-/NÙw¯‡§øñ£dz]¦‡›ýqéà/Œûu/¸Üüô¥ÂŒ†?^~ÿÕwϽäY^;¶™û÷þ7²èÿ“ãGücÜ ªR8šÊF4C_¼¤ `Yy‹`P­¦¯@"7 :ýª:hƒ‡¸\™>‘ª¢Q"ÍGè{Ph®Ñ=¢žØˆ;ÔLMCI•¯/DÌRÅKØúÇŸˆ 4J^Ö=$4^FМ^ÅlïÀu” ä"ZÈ ¾ÕÞÞVUýùÏ?#çŸ#¥Îînr¾*ÛnªÊx¹r7s¨m w¸pjº’dÕ ªÞmÝ”+[‡0ÉEd—µ»ï¦WÄjž0™è*ÀË|aº3›ÔíM½ ó‹$+µ0UfÛÕlð€š•DEÄÀî0wróîÞ]aß@ì=%¾3ž¹§Ãqpnk7¸3ù-ÏJQÁ»ì÷~?:vMvÒî(PwàÌïŽêî *×—ÅXtý²~]—OÂ&bo÷'1ñv»iœ~M ’%Su4§.LÙ˜#F÷hÆk»»­k܋̯?½.¯?Ín[ÛoÛ—Ûª›&—’`M‘Ô}Q Â…eÎÐ%¼QxÄ©Óí®tŒhÁ=÷û@jNµóð@šŸúvs–¶`wÇäÓž/qfbÌôû¹£Q*Ç‘w¤þ÷!ÿ‰Oî§Å>Ò?€ú‘Îxš!ulø†',Ï&½çã;è}Š®ÎLe~§ô„I˜`ÌäTð-IY äJFÌLÖœ.,ÂP]ñ‰™/„a¼¤i¶oNX›FË7`>š ›¡21IÒ mVsç…Ã-Ñ[Ý5ÀÜL;Ô8Q­L}òËŒ˜&è4Fûúx½s$ãVIbO¤|LŒòÈ®£R÷<Ø›ÅÄÝe¿A;Ÿž§Aö’äÍl(<˜övÜá1 nTH\®ˆ´Ü]ÍÝÖ Ø6•ËJ…½Á̼«(ØÊ'ªÓÚ7Ì“ïA¹=Î#—ß9íáWKð ápašxAÌh!tg¤åŠS -Žè’ œÛŠÅd† =†Zq9 Uàî#íŠn(b*)6æÊòrE‡¨ë›¢º0ÅB;©éܽå½ó©mP`®àJÞL¿Âºê×MwÿòÛ¦1•UPÉîf¹Êqrò‰Ç"øp­9×êNHи»Æ«C8HYNPFgàâ”.äß®©>ŒsÊ<¹‚œîÕ'tȧ#,$ü¸Ï½ŸŠö}QñG¨ƒ+˜yñ½‡"ÎÃBÓÔ9¥54³SÜPŒÁÖ§‰Kt!€½ûm½ñWŠÎ\É_® /a%åÝcùÐæ¶+:´mr+5o¾…T¶² t7oP Rªê¦0£ÊnjÝEHwׯ75ÕMeY^?]ã4,ù*š…§Ŧ®æÖ” )W&œÌ €‰\®Ÿ{ Yƒ›®º¡CwU]ѡ̲ë6d{ÑÖÅ®.Û"rÄš9< Ÿ`Á&¢ÛæÍ7S\fÅI©׫¼ˆ«®k(~ÕÌY„Šzý„‘ÑUȋȋ3*qÃÖLU·m]ü*Ÿ¦ X’WþÛo·íM“:+Ì’4*#ænJˆB%=`3¡QQlãògK¤- ;Ù)·¹»1ÃÏ/ޏ‡Î(ãŒGÈ“fAÜBf·ìg …œ‰µ©ÂÉí*¯"⦷Ûm{S¹b)b»›™™QLp…G)›©RPæRú•çiD‚á;bMg œ˜¸‚_µuy}•ë+‹ À¶uýüëßn¿ÞÔL^Dª,»h‚Â…4K   sði œ!³ß󳜽+:@ÙR ~2i7Fö{HA…β¾ˆW< L.á÷Ž¢= .Ömd©¼âÈâ¤bëÆ©_’ÝwggÇH•r\œàüq=ñðÓù0§læqL5ëÆ€S…t3â@e™Õ ƒs3ëŒ:³_Dq•GjÊ9›#pË÷žÂ¬!AÏŸAîµ»xO~:*ç1ùŨnXùÕ¢:×xÆÑg%Çüþ¡\ ¨‘¼+ãž=Šoï_æÁü¶6øù8O¼_‘Mðå.ñ¦Éƒ=“ÖÈèIô\[¼€F@öÄ¡-ÑØ'éÝÈ%_†¤‘ôyý d­D6vîÝ@xË;–‰‡±Ç3 ª|­"¢5BwÝM*£A@ìalF 1©¯ÂŒÿ ëÛ ê^•—…PB¿ÃDäähŽæÖ5€iÃ?Ø»z.É‘ae–Ðê‹5–Æ›õdÞo¿pcÝ®5EKÕ«’Î@&‹Õ³£}û¤{’Òè×]ÅæG’LBÍÌ’äÞŸ¦ìQÔˆ#?<<×ýêöHuÿpŒJâ„w8‰ïÝ÷Œ~yŸ±˜G¿âÞˆ;¤ôûÚ~pý{7øñgÜ·Ùl‰m0AŽ˜Ñ¡$$JçfÀ‚ÔŒˆ €D6‰æOs´Ã"G4€à“¢*jÏ»»ëÌÁξE‚qP~ÜüÕù Û”kNÎ $Uê6wèR@ŠTÚפ'@O‚Þ¢™•R•”¸9ÞÂÝPB÷ÿßà͵õ¨Y•R§ýÒ¢Á"ÂÝ6“}Τì>šãæÞl~ÖéY§gÅ&Ë‹™¹­a/¶¼Øz³€dG•ýª£ì=½zz¹{ŒãŠ<,†À‚öðˆŽ‡‡½xAv«€ÈïIJ‡uègßÇ1LýÃ<‡÷ƒïÜÆÓqônŽe#ÇŸ½Š‡~äÞýªþH¶Ø¿¼)·ÞÇÏïùcèíŸ8þÿk4Q‡÷£¼~£^mm)Rº¬,螮ـêÞÍRÅTä¡vmJ<†µÈ#悞í.1 Ê`eÔl¦ k0³õºÚj™óD ZØjÙK‹‚ðä6CÂÝnáͼ¹7“ôC¡hfîfŽý%N…afV-Ì–DÝXDjæ²÷x´Ð)" 횆eš9O3USÄb¹\‚am$â6õI”¬ IDATǦ(¸\—‘[‘¿U²@ŸTª˜[Ü ªÓùyb;ùr]ýfvs[)/ Yš)RoV­õΡˆ°ôæR]qÜÀ“H¥ª¨RN`„#ìæfFU@(Dɞ̇›˜¹ÁT™jÑۃݽ(¦lÇD‚]ópއÅòàX3n$!E³Ñš·@1TJ:µ}Ãa¶=S÷0Fƒ8³7¬Üíq'A ¿$}µwWÕ”™¡¤'ª©Á˜Íœ¥jæÒ}3­ó9Ÿ~QÂÝš-¾ÊÐu’¤9mð- ™(T(«xYn€ªž?Ÿ§ô3ûöë÷˯—Ërñ[è¤Í8V Ì,ùui,™ü1VÜãGÊßnt·!I2‚´Øí–‡_ºj™}­a樯<à^“1<ΑɃ–qÄu P÷Ž£¦¡É˜Hù™T×x‡pÕ[  \Á˜ñöÔñèlo öaDŠÓâ.Ý }šÃÜü¾Š¡ñ.Ë”´Â*,Bçsö+N%Þœ™ž·ß±÷ÂH$®™¡@%›6ÇvW“úŽSÑå¾v–õ[ŸfD,¾þì À¡–ó3»z;Ûò@†ÞÓçØ(ø/*•Õ÷êßñnTö¦:xß~‹Þ×@W¶ä8!hNïIBäEÏ€Nª5F`¥nbÍÂ'*N½Ú/ÃP){-G[]Ù §¶zG8Ø«ˆÃšÛ-[øÀú¢J “­â]•àûDý×£cD÷mÞÌW_Q„ÒíÕ"Í]àaÇ­+Ê&œ”/Âåû©È›{7DÑ÷عIÄH®‰§ÞEÛÃáâÍÍ#šçz[ˆÑª !Hžµc¦YW…lÉɬ É Ù£Ín¡X_ŸÞã…ß©L3úxÍ}÷{…Qß"›ùH.DsÖQËd u´Jú„J_`›ÇÖÇnGªÚ­ƒM½zbÓ¨Ž=iº(«h.¢|RÆ›£„µ½Î-¡Oa•\ál o-Tuþtþúåoñ?ß.ëuùöëårY£ÐZ/²$ö%‹ØÕÚrŠî|£¥¿z¬^U>œó¾½ÃåcC𧎇“ <&lfÞpÏ@"ñôø8~3þEÊ€ÿ´ø½²±êø» ɇ¯†Wþû˜ÊïwìùSÇá`=ò{ ‘Ià.Ÿxp& ª§{¸T‰jØÜH!“NϳEæ—D„¤Dow/'†P'ÌmyYÍMN<Ÿ¿ÎŸÎ¬D™£àæ \±^WìSZp½w ™m37[¯‹·PQž”E´R³a¯ê”"+«Ù‹ÚuÍZ¬hU=“ëuu³éyþúåóô4`f‹Ùìþ3[_<ÍrÒIäóó¤U.—Ëz]̈¹N–e]WÓªÓ3¤¨ÝlRªŠG ÂÌ£™>kêàÙjË˪'õqüœ,­ ®×ÕN&Utê„/=Éù/Ÿ/´ùùr¹¶Ðçife0ôó”`¶ÙÍõyžZØ‹an æçp[-6èD}š¥R²oö)<àÍ´rž4ÚÜÓ×ßà/f7‹ŠžEö¦Är¢T./–̽Ì%êIT‰mêw*oYCr¤Ý÷HÿÄì4HF_´XÚš[Žðâ ":ŸööÎ0È7ª"•" ›{šIËà„‚ð-«h2ºC&Ûõi"a7cUQ>Íß/!ôÄóóœ}°íf ÂnfÍ—ë"EX)'Aå×/Ÿ½EÜÌÜ}³ý„ø¤€k9)…écÙͤàë/_ççI'•t—‰h~¹\–¿™¹I%*õiÖ!<ë7‹,‘MT<u\y [C÷·· i.À+啹Œè’¼îÍH†Cé¢YÑ6òÞ zý õIzWxžˆTt('×{d¬$¼wq-Ьw^Ýï5:mr°÷WþѹÏöRØÑyµ':÷-wj/Z{Å—>ÎL¡ªzóžÓ !Ý\íd*zþ|f9¯×åÛoß×ë‚[LÍ6ßBQ›6p¹\úiIyD4}J=Û¶íèÖ¼¢2½;:áÑzŒ1nkO{¼6(åpÛ“ô±Ïçö„¢P3·Ðï×ÁÏ:ºhéºmÈβ‰ìàUç¤ûöL{­ƒ|° ¾šÀJVHˆÝ,õrY²#H8²8¶LF.}/¥;Ä!I?Ì+PÞÿm÷Ìw eëûâÀ-§Ï2‘S^ÝAoî€ÞL«¤* ¦AFUU-'—B=À"óÓ<}šD;èÆ‚Ëo—háfzÒóól« ©UÎç ‰›-koò €…:©ˆú(âëbn°Nˆ’:k¨_—Q”¯y¯ï9¨{eï}V»’Ó>s’¡÷y.½œ¡O÷šØ ãžË-`¥Qµo½šTÌê-pKÝ`§jDx Ù€êÙÕ²Ë4(R ¨?]bÇyûAÆÎ.•¹tt¨¨&{‘„á=àæÞ«LQƒu´ $G ¸{ô2ý¨¬û ß§,!§BÒ´8‚û 2ëáI„I‹Ã ­”")ínn¤ R·Ï¤õé€fs´0ß ëØs (¶¹‡E =uÑ>@PèfÙ‹4ÛD{HïŒq’¬ï{Y *©w¾Ïs˜--LÏ:•þxŸÏó^¤“ŽTáÄÏ_¾žÿòU?͸ںÚÿï÷u1â$¬¸o@vvÌݾ8 Ñéåìícºúœ kžko_%÷2ï;.¼gÎѸíM­vø¬?áÇ¥eßÑî| ¬ç½Ð&އCŸêû²¾‰k÷£W€Ý&ƒ’EPãv¿‰,dìð>™€n:ói÷wÖ@ß—òu7GûÕɪðýôCðþ$oÿƒPëß‹‡þt6õO]c³ÿd€ÿMw'rì2t×'Gꃤ^'١ʆ?èƒÁ‰J{±½ÐW«H¥žˆ"=KæŽ)½£'Õ'57DóA£ÀŒÑì—¿þU…LWÛ ¬ÁÓô$¢J¡žz+‘0›æóüá‰(´æöbv‹hΤC¥VM½“Ø”#9 Ä»Â^uã=7XGØ4`]ߺ’c/’ Û¡¥ pùx;"ÅŽßo@ÉdFn¤)²Ò5ñfd bLç/Ÿ¿ÿúmY—󪪪'Qb¤Š«‡GÊÿ.n0€+0­©ÔDÖkŠ| ¨BÒ<¾_.ß~û¾.F•éiÒ'•áZyç9 *2bOJm6ð´›Å~õû @A~÷‘±‰ˆ„ #özûö7ë!Ÿêƒkûhü+ M r ù`ƒ½:ëƒýÿÌðŽÜ=žã– ·tÊ…’Ë‚‰¨*“Á*Z5ä~αu½ýü°õ ï¬ï~öž{E@‘ýë赡ÙBÿó?Âàw?×¥Û¯ø8íGêøß5ƿ𸟷ۼï¸x™÷è÷ñ”úÒ™ìÇ‹tú×jO1ꓹÿ×c¨ÿðç‡  ß™‘ŽDÂI‰‘œ MÐŒ T†»UA0¶T'Ó€æî–f®C ÁùI݂ͣˆa²˜"üF@¥ªôX7³–U3-äÈ%ÝS‰>|*#TszOÒÓš­# òÀÊépQŒ2“¶À3yûfðð3÷áÇõ"“™+?_¿—>~ö˜³ úÞ®9ždmaX¦)3ûÞÑß_`Þ}xö·Of¼¿ý뵑‰þ#ö¸ë,vs6HÁ§”è!âû+ð`„ȈœGOLÖãæÑ‹uÉ“²vúI¶»¯ß\n™Ór*c"•Ð÷’!UD›/W»\.ËÕ¢•¨êQô»ƒ0±ð/è`0¸¬{ª©½gÈù‡Ç·Ÿ®­3\â~¨?š«zŒ~ߥýŽÕ{}äÑ—~8Þ0íÇvƒŽgþÇÆ01ÿŸÆà—áï.,{ö&ý†{s Á†¸£·êkÈæQäa¹±c݃ٿ%¤ˆžTªŒ•Ò EPÉ*,"5qOÈv¬ØÀJUýüå Ü—ëšyTVÁÞÆ6›773[­ÍÑ(¢I› ÒDÂÌV.5Óš\ó`„kUž(’¼WŇ(Z†°mŠi™¼+UD«x8nÀRÈjÛ 0„§P@·Ð@8=Bªª*•¦tE2¹!ËÕüv‰†h.d –eA’éª3$;±§…¸ àÑÂÜ2 pþ4¥|_´ðF{±u½¸Y¤ží‰Reú4¡ŠTq¸Yغ€"ÕU„U x‹Ør>'íªHõî`íò0¾ t˨8»g ´Ö³ GÒi@ù?ö®]KnÉÞ°€´"h©ÚbÊš]K½ÿÿ;²vÚRÒê*‹+Ö€3³JR÷Ù³gfFIU™|xÄãÆ½‘ò%:6r÷{jО¾ðú`õÆ–V%‡}5·¶é†fCiþeáõu%W-pw$ ”#Z´!ð›ÐQß’GV!G‰—; ÕI¢&–^_o_ÿñõöm1àú2]?_¯×™XX0¾6Š©}'67Ü3r|¤õ*€±Ûû²ÅGëÊ#­ê¥×£ó…†³1ˆÔæ$÷9QCjìUyáɾ³¥ ˇŸ­žêÛøñµÙðó;íëveˆc±zÛ¿ÓžúÀä r+Fº1™âE¬ºdb"iéA67À‹1ºœÛTÓÜXgúÃ:y%nO›‰™££ülð`vÀÆù®±×Ãg¾¬Ø{¶ŽÆÀ u$ðýîmEv;gà $¸sd®¼Bò~B 9f­çÏë,’HO@ïªÔï5Ç+vÔݙã±Až(x¼ª©¸ˆ ›:£‚þM Ì s¸«j"€… ÙA„M]ÕUQL2á"¸g¨9C‘9(ͱ¾é².Ü ­í‰‘ÜL½ô ”|Hío9ÆW„ è˜DêŠ÷ñkw•Ï~îù÷ý+ñ™@ñ£'ûK9Âm4 ÈÚy¥Ú¬$¦~‘=¡w6ÿ /$ô¬9@Ö¦á“ÉóPQ²·Çà¹ë Î1œ¾¿ôê«SÿY÷£û؉ío?çy\µM0ÝA4ßY‹?@¶>Ÿï7jÅ/ìfÞ‹ŸŸ\ñݵùÔN±*:æÇ><ü²[DL iü•Ÿ<íÇ7ó¸ÌþS¹Ä9Àÿâí~N§Ž‚¦‡¯Wï²Ä^#——8`Þ¬ž'K¨)¼—x¡jâ(mÒ@kÐL‘]S•FÇÕa?C8ÌÌׂaš"Qc^¡¶z"¸#ƒ"ÔÍQR¸V’Ë`Ù¸iqdÌ™Câ Gèíð‚æID„_f+b,b@ ÍMU=Ø/31Áªs“S2"°8kXhD­jˆw*#.XCÓ¢Uø8"œ/¤ëB™YD ÑQT¤œyÅŠb¶ f‘K+aâ …z`L˜.“›_æVWá›®¯*âºAË¥Qb„&ª_—oHÔà.™(K¤¸UÕ±“OmÅe&Cö–ÿoÃxpŒ<¤ QæWr§!|€¢{oµ3 Ö[ÏoôjŸ!JGÈÙ Ô0¾°½þ2_¯Óúö_·¿ÿ÷íMETdšXÂ:¥‹¬—EðF×ÔLâv!ÉDÒz¸Ý€H¤uÓeÕÛïêó'ùò·ë—/_¦_®œ^T_u][½xï?&h"*în(¼“­#qLýw2ܱg¨`­¸Õ?sˆpæ&¨`aÂ’ÖÏÏ{h,æ$C¡µÓ¿û¬+™Üÿœ~h;|°xŽü†‡Üžü‡%÷öÁ–Ì¢Z fr¡õM™È? 2³8É^îa…qmÂEV\ü”Þ¤¦®Üí{ršÈ–×–I>”Ú­ý˜­óíyÂö\søøñÀ³ç|oçõ|•íÊ®Ã?qªfÓF z„/¡Š@QÙŠz1Sdîžb7SÇ-«HÏ^¼³6˜ùtÿß4A?vz¸¡Ð C‰ ‚عL—Í\UI7D`Ôû*¼_#iR1o@6¡ìB;À¶F¢&BH™­õ£ ›­ªº©š³PÀæ•Ð(ˆ8“¢Ž(ÃaêAzçÔiœrG;Úà?|ÐÎX÷=u| fð˜ùmÞo‡-ì¾w5—vÅ!Bfƒ`U?Ê?ðZßo^íÄ£þäý?=.s\â.úã òQðâ;óè1>;¶ÔÂÃnÑ­ÀÌP™Úvæ­+ŠàÞÔ¼[l¨"0šFŽ¥^2ÔTôE¹Yçb0"&‘ù“€`4'Ü£ÚY„¥…èЊ1zÁf±¿LÌÄ,Z€MUõëmYÕµÂÜÔÚ¦ì{˜µË¹·<öJ½Ÿ¤§y{.Á ý-0`w5çép³‡vòýŽ@ðpÔ­ÃÝ(i–R¾sp›ÂÙ)õ‡Úàý"ì€}^툡 ¡Æw=äï7{ç,ýÿÕþr€ÿåÛ{5 Ç ¡£Øl‡œ€jœØÀNñTsóçí³ÍÉX1›@I‡›{Q…Ì×àÖ7Ïì¸8'b&É¢P*, !y™E&$ð…‘ÈLˆn‚{]Ã8@ðF$¦ÌBˆ»¹éZ\³z…n®›¢¸›9Awk«éí¶çV(XmÖl‹Lp_o·•H„µØ×oß "ΰÌ즊[1΀˾q‚W³Šõ÷5øŸA™D„žŠ02¢BlY•³ú…ÍÁâ^AŸh–Y„„YEõUu5õb¤Ö/Ä&…¬ÎÑKdÎ`P+ÛÖ¢f¶¼.ËrÓW–Il²)MTî”y¹~n<Ûf¾®ªo¶®·[Д?PºÿN-Ä—áõÇVT0Û‹÷ú˜i*Æ››Õž±ÄQRz6ÀF~}+¬~ŠÆ]„ZÊÍÝ6Uu$L/óç/¿Þ¾Ý–ÜËtš!™0“–\ ]d~™§‘ýA àBËÛzû}¹ýv[ßÀõzýüŸ¿~þÏóËÔ¦ŒÚòº,몛ÀfŽDZrŒ"ôe‚&’ Ê=ÿPm 鑥ѥÃ*à"X7Cw WîxݱX*8cá!»éjÝXyœñ„ÃC¹ûygi>9°_¨å@†Cãht} >V?ÚÃtúÔ+¾¬J™ˆ™ ÂDÝÀÖxJ &à`ÓÑbâE£›ì02$ r·ã‰¼ÅÔm÷~ÛšøgÃä?å7\µ?Ôu‡ß{*c‹ÿÜ¡öŸŸ¹Ak‘¸Á\Û°lXmƒmŽM›¢qâFsZ£W‡“í(Ê ‚¾ûhoS¥'ÃpÇû=qú¦Á­mÙtB¤j ’oÐ* Ô D”¥)|fæd–YJ,¡®›šÃ6ÝÑì´iÓ?‰‰0O“Ÿѵ˜‹¸jÈÙºìòÝVÍŠSóÉ `T³j1‘Ì;iß YÃ>­´§6šËÑãwüÜ}wãÓ¤wN¾¨zXg¸Wé>Éßóœ·w¾¹ó9¬ï°1ÐnìãyGÃwöo¦cM:í]¸K^Åv°OvsH ë]ƒ]07x¼l±È¦ŦžÀ¬’Ùv†9 © Á¦@'YYÑ«„™.Œ.fè´a)V\20'#bNHÌ–sFqTGGYÇH­¤Ù—e¹ÝÖeÕ «ˆ7ëCÇ]F£aJ}Hݽ]BC6iíp´ÞímjÃÝñ(çs¤Ðq²£•žs¡?4~8ɳAœõ>zܘa}w JŸõ"‡¥c2úxíî|VC<«#D~FCþY;uìwÛŸ`ÿéö—üïÞ(„ |3Ó&„ƒDpò „ ßSF=Ž…ØÒˆ¥YLô={0¹Y1®G&ªÙ Ÿê×BU‚ˆXĪ›¹¾-^¾ªŠlɘY/Ι´¸©ê¦¶¹m<7òI@ЭÑa†3énVÀÁxÑ D=hf‹©‚Qóƒ!L^`Μ¢¨õ2áÀ«9àäPõõ¶¬añ ›mótÂøÉ[ 8hEU0“pÛ“8K5+¢¯‹Ó7õ_®„¸O’ OœÉ³Üt¡L×—‰„)‹UƒµT@™æOs“'-FŽP+8šeöOnńҹkk€úhz™o·Eá(JDHÀÆ¡ŠÑ 0Ñž?Üm>à™sϦîNXØ;S1zJg'õÁ5([`Šqj‡ÕFªÄ-«ø:ÜC£!:°x;F†Ù7µjœy]Vÿ䀑Hy9™zDÐÍÌ ½¶J]b‘ »›™ëªëëM_U²ˆˆL³njEBuÕFÛËYè"ÌBBâkµ¯ÿ£Bâ›c3NMNfbž®Âà°Í(ƒ/‡'ïWDdâ04eñåµ4!Ó°iPP±S6É3'x2ÎWD‘*1epê¬HÂE$Âäî’A,óË : ¥´¿‘¹¯¯z[n"óõoB™9“ª{Y(_t³-EDˆ’ @UùÌ"ÌÓ$ëúj+–ˆp«¡¢ë<¯oŠb ˜©ªƒ Af’ŽˆR#ÉðjºyÈ­ d•±ÅV»[Ž)QÛ_{sœ­‡}† 2{¼Óq@Ûåö-­'¬BÀÕômY׫ª4½\§ùºþöíÛo7˜ÓuÂ á —yúô¿ì]=—#GŽ X™´ZÓ²HY§³$y·–tÞýÝûgé·²DZê¶ °*ËŠ3YUüèÖÌÞ»§Í7¯_›,ÖG&Hu«ަ$”¬ª†–LÉ%®Óäá¿ýõòù· 9Ûéû~øñ§Ïß}ovÊé”$ùë䜫z<š™‘÷‡ ‘ºP Ahk°)k*&-må0ç#Êm~¼BÑó½ý#Q¬mÔ”®ˆ/é«äÅŽhý`%v |L®ß~óâö¸{Ûš9¹í¶y—]ÜÙ»è÷nö|A8-;öŠ@!ÁÔI•lÖ ‰Ðw™WµŒ»ÅÐ L‚4©ÐJ‘Fût¼¹ÎŒ‹tÍȼ¤ eÀKlÓû|«gþ)ß—ûîѹud]Ƈ±-"<† ܽÞ«Ç¿nŒ;QÝöPsTE…‘vð8¸§ ^ÕîÖgAMM`kÏ\¸Ùqný»z2~£Úâ.dß.“%€‘)e–ivH8 ÀIUP$Þ˜"«0­1–!ŽÞUÈ~ Í=HÀ‹ *ü ‹Êp3µª™H Ë(žç8â‚°j=›Ú˜²™»¡ ®ìßxƒ&?Ü#>°öC.èS¢F[éÊž¨ <À{zðf{W·ëGÖÅ"7×@[žD ÏSpïNà”•W˜G¸/n¤••€ý^xz:#-<ˆF òŽ 6ãñ¦u›0ªTT$D±8Ñ6m,D mðJ! ìîYw²3EQ-·—7b“)‡ì!(Šâ@&“¢AhíæA‹`A”Þ¹úd²6PL]„‚ðvˆôgr‹¤ûäê‘Ùv—¤Àô›)eŸW .ˆºßñ)ë,Z> ºòa>>ÿ;{2­ZJ»Ó[˜™, Ñˆ%´BYß|$Á¦ö¢ ©×@ aõNuëñ‚œÞ®—Ë„U‘ƒ¼¾MЉŸÌ1G´ÐjöÉä`6ÓÝ£eõ.SµRÄ`â“£ù5¦h<}ûd’ZR¦ÓäÁðFÎΙÑ\«Âæ)èŠE•™¨lÑ¥žÊʵ+ǬÝ9=C»z[Yà´Üºàë(›û¾ô¸;á‚äÝ œ WçùÕ§Wÿñ/?áî¿øtù|õ×ÉýüýL{u;š}2ÉĵI¦FŸÃÃ9óòzõ†ËåâöétþöüÃüðÓ_~¶—S"Rz#"ÑŸ -)ò‰ÌÅÒ+÷Å,Dë*¾õö;ÒÉ‚– |$ïqÐÂï®3²XoCÇMº¦Ï®;÷æ­èúÛP<žËx$ÒÜcu:ï« Ïô6ØíoG4;@oä+“NŠ¢y§(ç…ô 0 ÎFs÷ª¦ÂÁdNÒit›•ÒóºXÖŽ>ÝÎHÑ5®N.»¹?œž?t,Æ"¹ D׸ö´ÛzÁ2,ðM»²ûÛ÷Þ§?·áåáÜï ’1Â݈`¦˜ Ð*ÑDTÔ•ÙæG2¬Šˆ„Jr²>›í®jŠ­ãGòÂïÐ*Ç%ÅûìgjS3Kʱª°Š,$à ]̈àØUÄœy¶¡.ߢËe~€£AÚ1Û 1;°Q°„GôiÝŽ\à š‰Œ zá0ž}ߨýø Pûiãg·yÜÏÝÓ_-­î0ÇqWÒé(qìlyÍ tŽ\ìçÕúT?.©}}ií¶˜ÇYp³üÒZ6zÂxËv"ï!mOç×Ðw{¾Æ»uMãC ­¶.Ð é „î³œ‡Ô¨ÜAPCËh€"-ºr|’”sûÀ¾•: %ˆå`Z°õÁ^†Á‘ …¤Ïô7O7,yÚlˆoô 3Ðà1%YlÈ=ˆ;NÁ¸µ{½Lܬ^‚²Uß¼c%ÙÏöéX—fVPÝÉ KmßI"}åøC#¾:<úß>}åcY鯽VC:û—î*ïÊpžÕ ÿãŸ(hþÀÃ<ÿŠó«ÿ÷œ-÷µ|²ñ†ƒ9lGfe%’ª×c°˜E‹˜„ †Ã$áf];,Šl™°GT±£JN™:ÎÎ1'ƒèÑß<6¸{Æ—ËÅöËå—´T2º1K•émŠæL±CÓcÊŠÍÌ|¦T9OÑâòÛ…îòrÌOd˜*¢QK&³°mQUÍ93Iè‹$%5;C#…Oš{¸\'W@ªã {9áàÑüüog½ÊˆNO8®ˆr|š|ò4±ÙÔ*/GŠœ^Ì–à.Rq½^½1;kØ)µLO@Ù<èÈŽŽ’˜…ŸËéx47¿üúùò?Wbff§oŽb¨ªEa¼^§‹G :°ÈéÅœq¹üv¹^§ë€5ØËñ|<ÏGU%þæÓëõ FfDÒ;ÏD7²åéÒ!Ã`vø h"‰Zl\Ü1i‘”ÝÌx§‹™Ó¨ï²i&*­•zÍRŒÆ*™ÇŒ.xzáUÑ"ÔE¬çøá»³ÉêÿÝâòë%~÷‹6Ó¾?¯ßŠ@IQQa"E½…ÿîS0ZøLo¸ü:]^3UÍ^ì§Ÿ~üù¿~¶OjŸ,–P¨V\.—˯¿ùï“U!ôx0©-ƒjq ±ÀÈDŠÁˆÞF”%™³Íè·wA×à0}—U‰K€ŠÊ‹ À‘ÇagJÂ3P_C`Å3µ‰mè^b¡7j^†y U³›zþ¿@ö>ÏÞpì¢Ää ÀÙ§WvŸZ‚™¸7Èä²2^ÒÕËôʸe0B ôN9]1ÒgÆì.bJ6a%€(ž:URU«Jéiö#À… uNv´ÂÁÈÊù¥7Pq}”-+²;gìþžïnPÙ^aV%.”ûdÔÝæ#n$£}½ëyKœÞNj 1íF»lè0޳K3Q?hMP¨© ,é%÷§\T%¼™ãH¼í³Üë9&£»ìH«v4Ö8jwòËîgæåFK¨>¿Rë%-{w4L¯5-ŠzQ9į>?™Ï׫gÿBᲘªâJ0‹bŠ*z{jM‚hÑ ¬ H¼Nš-¦E@Åâ+pbªz°œØîaHu¦ªPIü%±@‘…; i»¼.= RU´ç·±VÔ ‹®Ùï¬íLŸ¡›;€âÖk—õïÔÝX<©ÿÒƒÁÒiºAèBTÑLÝ/\߯£Û@ SrŸŒ-ûGܲL¶ó¹Åêä¶û}O¢bH‹GAv»À~'ZQžÇï_n“#Mk²JIÕwt¼¬€ªJB|f–L³ô ùîig<éA¥€ Èð%,)ô‹¢öN%½i(à3ýõêoÎÆ\Ù)to‰q§pc.ô9èA­ €HAÊ™—ë\ç¾½ÅÕcê²pt¬óÚ•¢s9çþ´ÙôѪƒ­W¿'û:ñîu“¤éÑm¯_o6úÄ­2Äÿ:³!ŒcG m¾îV5P°³_ùHw3æ##ã+Uß+díém²½×Ë͕ݢ·wG¾OðîIÿ}J®3²#ÇûÞ‡<=™Äž¼ƒ ä½ñÅñ˺w?~ñ"ïGc|W¼| ß?aüÿf¼“ÞÙäÛœvmf°g!-ã_¶äX~ •uÕ=ƒäÊúûo묤B]ƒ´ TTŒ "> ˆÁÄ”Ñc­¢Uô YC"UM´"Y¾±›™XF &!fæÓÅ`3wOý:³ì’ZÍÝcŽ!´£šj,K¡UQ!’:7’¹,_ÈÙÃ=ƒ|ˆÙi8RÓt寀ͱ¸²ƒ£@E¤‹'C¬FKWL³rŒÄÑÀÆâh>MIØÖÓùŒ$°°«§4hxåTNf‹Yodñ 8¾µZ,G¸»3fçY’"k¤QR•¸j,ƒÞÜL|Öädªê…lÂTJPE÷Ù‡Ê ¹0{D{ ³Ó–žt¹šÓê²§³‚]iˆ!­ót4Eo!>ÀþîÍ0gkvbMWn´îóos4s`S | >óú6}ûïg=èét:w>ÿö½7ðwõ+ªbµ³‘ œÝÛä-ò“»;¯SãñôbçïÎÇoÏör´®1#Þº<¼òÑÛÓ¿¼å,kÀ›A=ÖÃò1Û,¸¥¬t ªˆVˆˆ ÑÈY@ )ŠL°s$ ï\Ì…¨²A-¢ ÝK¤äàóß×I³É»?é8ã`£y+èNqïžôA ÊlXÎE¥†¶ì|&‚ìâ+¤ªT#DQDë(׿‰Kàú6åþëL:÷™°zDM`öMa°/öÞLï?eØn<ÎÛ‡útŒtîxLÛx\ûëqÖ•~Ê‹–Ž‰Ê—ÇñžàÄ6rÙZI³Â>ÿW%›,,7¬â>1¼ì~¾7z»¥ßá› UUQ‚8ɽ*Eûê:¨Áз3EÀÖ"ÞuÑiˆ¢Ð:ï:³˜°€EÀãŠLv;ÌÎmÑ<æ`$#‰"ûž¸»Óg’e‰Oå]éõ½7@ƒDQÉöÑÛ¬ì¡e”J?¬7óÁõä Ñ®ð"°V»ßñ“ß·²›ÑWDO_0F ÜßCEOæü¨ zg =ó¿·såã$ýêÄß6þ!“½_ñüþÿ¹Æ†Eå{b‰Kon$e o,ÅÞ0aL7ð®òª@‹LÙd«hÊìJ5A6)!ªƒƒ 3k,Xýæt|9f {Á…á2C«˜)jÖʪµ*–BG­Ÿ„Ï´†Ox[Uއ“ÕÐbþæ` Ú1€£UµjxÌŽzTd—é£joôÊÆëâA'ŠØA¥ ZXU]oHsÄVîü_ö®^Íq$G¬LY­®±¤¶v¼îµö¼yõ½7Ø1Ï+YSe°”iÅȤ¨Ÿ®íÙ¹¹o¿›Q%U‘™d&@ pqi"fVEÙÃRÅñ¯æY‹ûúú³U]^–ãË1ƒâZ ‚ç– ÐÃI6ˆŠÕ<¡C&QÓ$è ® «#¨lœÞB«±†ƒªËét|Y¾þíë_ÿúõx:-Ç£VËc5«ÜÏ·†ò¦£ `‹hµÖ@½ê¶Žº¬]‚FTÕzM2G€Šzöˆ fÝrj;¸ÊEÖ¾ö€óc¢â¦ÅÔf7 Ÿ¸×)yJýÚÎnûãƒwñÄd‹c+û+»w3 û­oèwKŒb{%¼!yRÌ7÷èžÍ¦Þ‚ì6ãóªm­­ÛÀ˜Éö˜‡5^LH¼Ûƒ3Õúiw¬òùz~Çóš$h‹¡<ƒà3Z×*b#ÇN4 „‘*"(œÏè^=¿¿)¸/¿âá!µ×ýiÝßA× ¢¡ª•5zjT¡Ì5¢H´LnÓ[HÛd­\9lѨ"`Ũ8(’]„‘BA%"Ñï*ör´—Eªz¸¯¾®çÌ ŠÎ±N–Lôñ¶8ÿÖFCæ~²Aªa¦Û|M~¬\Ç*’à sëÌëu~÷‡/3*‘?’øZ®âŒ+ý#»sÐ?ÆÀ}Cœk‘<_ƒäî÷M´޹ReöGµÏ¨yI8>Ç_Ë€·l¾jéálD3ÖA‰ QDDôxOàÅÏZ²„~à(©ŠªŠŒå)Š'Ó*'—¶@fK ÜC¨<„TÅ&Oß“$é ùÒtxÄð¥8]UU˶L€ s+.ÝÃn¬îƸß,O ïnŸ``ÞÐb·{2n£6HJ“)Íõäà0Ôÿ†Þl31ð÷™\1¹*<25â4™Éõ?üŠ9þ÷Çökì×£ßß?‚ûûÚŸøgÌŽ”ƒ¡¢(jUYÝ‘+b"¢#†YÍqKݹõHïEZ©"×@fF¯!ÁèSªRBC)¢°U2ôà…~¡4G1ªˆTDƒ4h!:<ÈÆè‘ Æ¥š©xðü¶ tœß|hSUðÕ}€×ó+/‘ŠÇÎört÷Tî¥Ó²¼Ÿ 4ž~8¡ÀÃÏíÌæ@êOpÍþ:¤2%‚£!Z¨(0¤Ò*¢Â›äuYTOùŒ¦.Ô³jYŽ Ñé4¤H#Ñ^¸ê§ãñådfü÷ßÿÎ~¡¼­fž­¡²*ø|P¿¸„-’wÍf&PtxøÙWqµÅ–åx:}‘*ìôÕýÝÏë/+ä,Õ®Þð-̹.£©/Y‘9Löl”5ØtWÍ­]¥@JÆ$îcܧ|¶ï±ä"hí®«¿°ªQD«²x4ðî¾¾Áæ®öI]N§¯EQ`ŸŽþ~v÷õ—õ¯8‡çóL»2‚ãËñôùtúËiyY¾þ×O_¾~6³ °#¹èð ;=<«yqhܳ¡D’ñ„Yê}%ê~âAÕ윾$ï°¢Œ`Ö(%šþžtW€Mk-ØiÕ‚1<ž<Ó¾+â}†w³¼ÌA¦s¯ùP+†"ÐGç‚,ö €í.и.Û¬áÝ|/BD3B¶8æØ‘7þ6íÏm\7è+¸gjôÔMþŤ ê. ö¡í²U{üAµ˜w‹*€2ß9 ®KM†ºã# |c×¼ãþ¯ÑÃßÝ‚‘|‘¢’l‘OÑñà0ûDFУeKŒ6Ô2b"(Š”2ÝÆ*Õ§óeW‡ Én¦³†(µý.žåè [Fûäü¶žßÏž„²®dxߊ˜”,¦kj×`åž±UöiíÝ=b°Qÿ¯òÌv×uã•|ž‚`H£Aànû›hØ÷®;È™¢Áç[M!¾#ÞÛî9òñ±|çáËu3þú­8æÞ>ØB¯ß·ÿîûw* þwìOü§€ \2*?Úöl϶˜BÄ$g²nÛo •-F:ˆP}Ƙ{:â¡EÙÁˆüèTQP ¢#ŽÔ3 x ; 4®o>ÚùÈ` ?¨ªI]ýâæÂßýüvvg0,ªbË‘ýìîç7X#!D¨ R2¼ü!í D#Ã¥ ¸ ¥4…fFS9¾,‹Éhqö³@Ô#ríl¼I,x o±þÁŒ¬«UØa²ô…R UDÔJÁá8,Upæ+Ù=& MŠh5”<æˆæÙ6CGç^³ƒ‘8N¾z¼½Òà ¶Ð*ÇÓI T…”¸™L>˜™?Ó?Sw_ßΘ™è¼ºV¤¨HÌœêÜØîNÿbÓ] _EôNçÄÖ­3å²}Ö5Å7¢Û ßÈ>"·Vg £3ýlM2Xx,šÔîÓ¨°Å>ÿøYª­ï‹¯þª¯¨‚óë5ÙRD4S¯‚N«Ëç¿|9ýx:NÇÅNŸO¶oÖñNTáë»û…ÁɧÈôà >Þ€9ôÚ‚U‚œÔî!§$ýŠœ(¹e•MŠHÅVJ°GÈhóHR;¢Le‡&rã.ï‘ÿšÉ›G»>õÇœ/¥[®óζø†ì~>ì»Aéï@ÊwÏå@WλH tÈ¥ £MÔFUCŠ™¼ÆÃó}ë}½·²«î†„䕆útŸÚ}”ä×îý˜ÐÃ5Þ12Š2sŒ?íMÁÈp€1ƒ}óEM ‚ q m»eÞpœÛ=$K!xõ­¹í´÷7ǰï.Âýý3ßôÝ’•+MG©ˆg@ïâQ̂脉ªé² ß³eWI¡£XHx…ŠJÉQ!ZjäÛÑ‘‡³]MäЉڋšÙñeÁÁP°þâëêëê{Ñ!Œ¤ËÉÙg;«ë4*3PˆlS7Fl2æ·9áëÝÍØÌ7-·™#vZ2Ž@QM$.¢¢gž¹u$þçp¸%yH츓¿UÜ“D6ýFDvÅÈß 'gñÜFŠõ£q¸ëÃ{BD6.ÚÞ³# Ϋ/îŸn1 v'/!¢);ʆó%¸ÒW׃ššü°˜Š‰io³¦£È•gKd+ r¨ˆV L)å]½‚²} (ƒM½8xƒgQqU¨À-ÔjR ‚xTTÞúØõ->µßêIî‡.n^Ï@ÀýZ¦Âgm1RÇȼwúlÉëóFÚDóûcøNÓññ w[~ ÿîKîC/hxì¼þôD¾+îŽÿ;HWpûÿA-…õçܾå•uŽ6 ÓØÇãsÄÜ©-R´_€"5å°Q:Së¼8D¥ŠU€Ù}}]ƒ·Õõ0ÄôÝ} L"ðî¢L^+¯®UýÝ×7çŵªÔ³sš£ eúÍt6ç„*vÀ¤êZ^Ãäør\^t©Ù¥f‰E@:vÀ«»_ •f‚jÑCÿÉÞÕs9’ÜÈ€UI  Õ½)kWÖê¼ûÙ÷S4žÎ–5ÝVVeZq2«ŠlöìhõNï¤Û|oßÎ ÉúÈOPq~=w4"8{V|…•–go¨/&ELúÒE£YÆ%l² ûuÞgTÂÌÔ@¥»÷¼¯ _É_¤ªdö4D¼†»«&¹ hƨY Hr(£ry›¼þ¤ö“Ù‹E„Wú»ÕÔ3•T "RPÄNÆÕAÙˆŸèeŸ“kŠ;uMçV#d.1ÐH¤~¬jD¢RI»:’›Í˜ð…¶@Q•,Zû¥2µŒ}rbNæ-¼†»Xµ|<_ÓUL°³]5‰Æë/×úê€×2Þ¨ÁWÏÕ’ úå§³©ŠJ0è½£PÙÅÒ+}Yæ·Ù# "EíIåL&ß8ÏÞ¬â›öÁ N) 4"kwøÑ€²;–}Õ˜uû1ÙßN¥‹Õµ*&÷ TxJ›TnáȈ‹áºÇE~0S»Ã!ùêÙ7»ýH-ßã•?x¿;ü{lÌî˜"“®U”,@ Vx‰žI‘?)¢b‘žÙÁÞݵšu•Súü·ñéóöON¸JG‘üQ¸¿ì¡ÇÛýGãÏy¹ s¶ˆªÒš%ORŠ™e4AÌÍÝQ7¼aÉU²FŒÒfY‚8¤‚¤÷í}G»#Øn¿†Ó#PÁLU{Š û<ÉÒ™¬!Ea&hÌ9cSÌ?kJ y ^F³¨x†"8¢bv}=_®W1½½ùíÛíË—¯y¦ô§ëWS6ö²•H‘íÏêÄÈamòðFÈ ù§_'Žë=c {Ç»æ‘Þuøñk>¦LÖJOÜè§N{¼ýþA>i;4ý¡ * –J—½¾ÀÝ«mÜZÆAú¿ÄpQ6cç{—è¡0‡n‘ˆFaÏg +z¸»¿ ‹Êh½˜‰0-«ºÌó-¹x¿þü'; T{h&×¥‹¨SPáAï§£=3-šAÀ(Dß"š\¬Ê¨®“Ñ ºWxDdp% IaüTˆ"Y2ÔT“Òd6/7×P ©gÅà=¶Ž§`ßSs¨sì‰Ëx0öt+‚Á€ ì‘⬠IDAT‹öiyîsö)ñáv?к|ç ?YW7è$ñ{c”Ï~6vÎ?Úoµ?àÿ—M¶“l'–hpACXÃßлßoËë‘&Á= iSé„` ¥¢Q©éìë>.v|OLU͘_Â-%Úõ6µ—„©uãJ1-05QÓ"zRWKDÂá¢f‰UV]!v2S›ß-àIDôüz¶×,P©Á,-¡îî¾°—³žì/¾,ßæÙ—xÄb=eé%1·5"<•¥‘/Þ@°{¿ýi;Zâ¨Á"¦¢±†SZ¿Ú~ÓÍÞ®†}z?¾Âó7'+E{>dÛs3:fÛ蛑= w0®ÌÍœ)ú0!†@"Ób%+¢WF 3œÍìår½\CÀ¯·Û—/Ëm–IEÔJ—€Öô¦¸u@Œ™×}ðÑEwƒxnÐßYé›r·T÷Ëíñî1Ð$2›}x‰[Ä„{AfŽU F‘ËÔYÅw£püë“ç| ­ýìÎ+iI»/ûèûÜéÏ0^yìÑFß?Ô7~ÞÆھ؜+Ýc9 •ƌ᪠PÔ€(ƒ%[ƒ‚ôl-̧.œ)+ÚÓŽ0Â4kÖÒ‹œ=ög²KhËØðk'ñ¢:kÌN-&%|åòî·ÅÝ#*ç7¿Å€…êÐ/I³TµÒOÉNã’–ä½ú˜›†ptÁ¡Ç¦ƒlá±c¿ÛFŠÐCfû½š°6Á,ö0ß> ÇÉy˜HŸå±ÿ›±ÿÒù¿À¿ƒü¿DÿŒ<öqÊðë~¯·LG·†U€þ6ß¾Þ|¾E¥¿Íh03Qcq@Ì,k‰«iâZ£jö8677%íødxr%örÑbrËû=Ö 6œ- ¥ðB…³ê©3«öˆaBæÜîÇs©j9R£K$Vþéçùöß˲Ìv>£!RÞæiâ__®fv»Í·›{¸©ÉùbjRôò|YÌÌ€,òng ÀcΈ€T•óÛíVÉ´®Iõ$fv~½˜ZzD^C‹^^.3Lб.Má+¿þí¯™Õ•¿þ|½þt½^¯örÎr¯éAY±åmIÿ$&T 6Ðø N +úbÜ1*ï&ø´÷†@U"訌µK^Üί¦E‚ŠêöböbçÊåÝÝÝWwwÛýŠLA\Kõ¼²d}b³I¤K© Ù¡†TÿDvˆ®Yf *D~×^c¬[–]1¶È³Ì—Ù ÄÌÖ¸}[˜çeÆMðëõõb/vy OZHÃìîo·^gµ¨œ$÷Þ|;-j/9Ù™¸œ,–yþ¯/_nßnóÛâ6iä£OŠ)Ó}‰"v¶óë™ÍÙ³@ÅôÂð¨¢]ö©7¾ô)Øê²êÝ|h{ð“¤" …VæîT…ÈÐé[Þç!½]d”4µ“òr6»œs¾Íó -®—‹g¡éêÖ6CÈ}DúΘHë¿Òéð³óãºÎöÀ•ÕôÒÇ¢Ás&Ã[=Ëú¨ðضÈìñÓCÞuï&-‚Ôl«Ï‹Û|Sûõü"rÒ Í|(T¨ê¯×«©dàò?þó/d¸/Ýûš@ÂÃ¥ÊRo.¢¬1/K¦ëbR+¢§.$Bf8žQàÄ òûN}· HTÜÞs¯Ñ…]ŸR#-.vé/¾ÕqØÈ^ùq âØœS uB´½ˆýqd {Ð<²´D$@Šê$Z€bcL7HûnVÔw>¹b«^ÑÅùt+(µS6îc€ϤÃß7ï7€Q˜@¦C'åƒÊÀd’AX§×`e·8l&€þxÇN»k‡8AÛtC·šs Çy{ãsçåîD¾K#ú®¯ûá![ÍîØž׿Û鿝þ§»{ ã§‡ö¯ïÿÑ~G› Ê®=+#SD:©(ÌÌΦ¥O¬ôëзuåfåBå“xm°s>µˆLbj@ÔjÌî¾z‚^”""'Á¨ÞŬ!NPDž¯éì™hŠg’ÙV ’ÊùëÍݬh`èÉLMm;™¸jD5Û$X'M›~¼ajdõX=‰ÐÝÐL6Q ³>SfÞ+ÆlÅ´‰™M.§Ë…®á«ûêR…Çoí@&*‚¡Ey"&‰ ª°Ã‰„Lj*VÒ W=¥ÄWÄ ï¨¸7*0$ÈéˆhÉ.! ¢Æål2éE°hð5ÜI.:i‚„y°Ùɬ0ºÒ†ôLÈÖe„²€ç˜ãÿ“*"êÆ•%špÚFs˜tº6‘äOöÄ@…ѱ…©û?<üd⪠DÔ„m¥Å ©Öœ㼩F©½ U¨Ð`樗)giuQÃÔ¨ÿ áLé5$Ø5>°¨ÁØ }Ä“·ØÛ¤¨IF„[î6ÿ¶¹%Ò4q„ÍS['z™îF×És“îw·ÏЙ z— vlÛ{å7VÀ3¸¦ŸóG£§ßo×ìùñöìQŸâѵÖ$ÇÇßÊ@6†ÙöÄzøuÜœùÍa <ï«7Sè<õ÷´.®y>·>NO:hxé@åfz¨@Ét-=S‘p/ì$XÈIh B0™¤l.è]綾Q¤îæÖA(ÑoÑ€)ðàÑícÀò‚T3ꣵq(>´À¾«$¡ Ï5¸ýõ+Ê‚ w¿Íó¹ÅÅ.׫øjÑBTP„.i™u¡]+’Œ ¯‘zÎd¤j£BP ìÄ]iè¶TWÑcïíüTïÒÐ%­îVÇç†êÇEÔEª[3åÆýs6˜ØaÞñoù¢F‚†˜™³<{T*“'•†;E¤Ã‡û6òEûÍ5w/|¿›qºÓEc×QcÔÒ…$­Ê†ºÏIïRA©jáï><<Çýz”0Xu<Ïq]›…P·œ£Q¤šCÿ[ÄpŸÊ“5ò|x>߸8âxˆ|h}ì·o÷É3hFf¥Ïj£ñH>j™@Zõ¾Lãìã]= :çØû5Fì èÁ»ýví÷Nç¿’ýG»o¬ˆ?à—öùr’£¥2šn±ºÁhô|;ÙåÅ2ù?ì]=ƒä8n}ˆHE@E3U_táÙ™ÿ†3gþ«væp7[G×íTT@$2z@Jªî™ .ðî2èOIER"<<< 0ZxH1§‰ 0f°®>ªTXªJÉ÷ñŒ÷÷÷‹»;· t¡ѪöõLÀW:BI'­1(†á)}w£Eª2D£ß<5ŠÝ#šëÕ¬*ªœ¾œO9¿}=™Ùíz³ª&©ìòM@°ª,HâJƒ‹ð—o7®áIB¶ÅÄT‹¼ýí¯îÌø,[Dg¬n¡8Ù(D‘­d4FdÃM­Š&›n¥»DÇûû{tøêl03ûzЪþ3C*‘>ݪ´§?°P#8³WP0(Š=¹êîF{¿^¢¹vóË"Z`¦fööŤ¦N>d¡™¨‹Vq'€è`Zlñ¥±ÖÊPiwp/½õç }˜S”Ú‘Ì©ȦNòŽnädJWp ktàò¿ÿHí´›ûO¿üãÍOø›š½™Å©žuù»¨èb°’ª~MÍ3Ô¾¯þÓ/?Ek¤RRªE)²5eÙ&휘˜× =Â(Ï›í09ÎÕSãñ_¬"Sàê>ÂCP2¥%ï ×ÇÊ®¹ä³6˜U=±ÓWc0𣇝ÁÍ<@-¹!QöÏyÂcÿ?‚Ý>ÛÓ‚»Í=‚óóòî·Yßhx;`Þ8pÀ¶ 4A@ÒCZ”žÌ °@T„ª%n·Oxû¢¨‚¦ù À)Å ãŽý7iJs!¡/Ä6^å·%L,v^}9é¢ÉË¢ZG4`0Òddño>ð¶ÖbÛÐû€ £V@ÔLm‘–VS.0Ø4–0à 7xDBBAˆ*ÂWF˜ ª(GDšŒððhŒN­6ü“4m[¸Ûíry÷Û%ÖÈ­Ìð¶Ø°óÒqo;¦Ì’0UH²V&˜Š ±úÍUQ/Ãý« qdyŒª™[ˆíª‹Jˆ)‹ùê—+G%^3û‹½ÏRÅruˆÈ©Ybö·ë%€Œ¨« D2>B«R©7¿t¿\/·_o²d\E¥dYתÓ eGŠ|F£lµû¦ƒá-¸Ò=DQÓ`fº˜¨3·;½‡Ô ÑïOàð4²ìª( ¨mŠ£Ø7Íã‹ost#8í­#£ª’T·JÍüð£s+Yr)­Ûa=eMtxÏ–o)6p%×a0sÊHç̶afC Å´ ¦Æ[&¢ßc²š7fÒ8ƒÑ†êЕÁ0W Z0»vpTrÁfÄi°3  ìó|ªç‹VrÞ¿z2JZEªÀ eñàFèû„–fìH<ܯƒ5:ÿ#‡RL/½AÏ8º=Åûÿö»“‰ƒ›ÌãчïÛÅîBF÷íÙå{ý—!70,Ú¤– wî‡Ò ú¹Ýßå“Ù Ì:À¯ì¹Ü ï-õã| šAKݱ²u{ðHÈüÈÖÙ–^ìÞoò`ᾃÅó‘ÕKô¡ 0é”"O_LYsNݽ@*NbÑbPE!`Ë­’ëtXU'â }x­ D¸I”kUp–òÚ"0/³^s³ª gP+àé¤XÎÝ É—`¥^/¾ˆTE -Ѝ-Ðã} 40ü_ÿí_4+¨'‹;k;¬«o!0-ð›GswFÄä9)™(tô¯8HFs€Á-ü $2÷‘còjð÷?òù°c6{þÐÆÃ˜ì¤ýü-]%iðL‡AF‚FEL7:O‹ØÉìdÇ·qåÑ©x–³Ú´l¿îïgv‹ê¿Þ ž:™1Æq­ç,€O¿ëè~¢‘4Š2}àl%‚z(å58X9äìÄ2†êÍ…²ÏvE&×°¥f¤HUpmü¯ÿùïT¤·ÅTEDeÑQÞ9=ðÆA^«*À)äA²KlŒÎ,£xq÷ô›G~àaÌš0&÷¹úa7x€5±UFœÓøúð× ÏŸB‚曦nØŸh×Htxn‡ÇŽH„}ë’<„ s-ô ,¶Á1…HŸ·^ø^&ðgøÐdîþ˜¬›Îè€@ëXìA _ÝýËLÝ’äæ¹[üС1  ´# úÑÁ•aæ$R« Õì3³ªCŒ'æÂSÅê¼ÒWԓʈlŒp¯@ÕS£˜¤{U¥¸Vay¯Ã'ï`ãûû;ÞßIº{Vý KÖþ1QóLj›gž“Íkf*’î‘©Ùbª ‘h‹  šä•! ÂNg3áÉÜýr»h# S:jE›ÎØ §Ç%fçªb’Ù¤oý»»¼wÜRéº CDTÏU6⢪*2³QÊðphQ7·j¶X&KCNyŒÌÌìËùr½X—Z‰²¨©\ü×Ð=nßn©¿ýööv6“*¬ÌŽF©8=]¾y–Æ•ì vŪDÊøJ¦Ô ¥M»ô€àÊü6éÎ(ŠT‡ÞÛ¸v"¯»UÖ2 Öñ¹ EÔ‚ UTT V§sY2zD7($“‹ ²;±›×ÅôR4S¤TU¥:ª ƒ ÁU6ä˜#å&å¸ɜ܂6»!wl;Ÿbõ°0rf¦®O ¦Ï))ÄE3l¡³l0ŽÁÃì×ÌÒ„ðÁR ÐIõÔç´ ñÝÇ~>fE%Qóéô½3³M›øÁ ~¸»`&ƒíc›tüâùœ" #xu0swGw¦óŽÞ¦ì@.¿û¬Ù¥=æ6ÆöÉžôééÆ<¿ÓöÚ¸Þg°ÿ\u¤Gý Àðð7àæÉ”?œîÝ…È ΧóJÊìe„ EUTeUeƒTµÑ UΚ+°²ˆUK-kÕ”?è*ç/–r÷0•4[ÙC ôrWÒÀfän+Û;m’ý³éFÑNOÉèÎÉhØ-‰q«ÒŸ,1ÞqE…$ù<¼©ŠÇb¦2ˆg=ýjµ4 ¹D -ÈbÛfÜŽ:G(³˜V Oˆ•ÚàÍ3B«ÔtÈ3q ê¬Z¤Q0’~çœ _xV™ìw &!¤±?˜ç£ ÅP7}¦å¤aOå˜xFéwíM£ª/¸£»ÊñsãÝ·[úl/`æÃ‰EŽ$ðfA߬ÝÙÃ_Ÿt¡/b¿Þ`Þ/,‚¢xžw3äé”;s'˜Ëþë¼Úî¿ç6ëÛ‰v;p˜´£S—ƒ’A‰ ä@ÿ;B¹ÅúsNYÿ¶¨Uøõ†èôæ¸éш æƒ]‚U‚šâCR‘˜¤¯:Š“1•™…epM·^´#½bNÏÞæ]“‚‹&Q³ ãx`|©1“¨V…AÕDºh.ÿb…}11˜‰V w”¬Èª¸¹ë¬x<úÅè‘RmœE’ÂÁjÑ=WœOY×[þg™‹y ‹Á“¼B‹®Ê±°êáùyÜ´·=ÿ‡]Ä‚T“©˜(*Þ¿º7føÕŸÚÁ’Ù&¯]œç¿>.úmÏ,r˜ŠýÐ;dŒ€0 ó»ÛŸ*Š¿jOY6ßiƒt±à¨]¶(,•óbÔè€PŠ( B‰Æ”¢ ! ¤óæï D`‹° T.WŸœ1x«‚ªÑ =+íe÷ð•d wD;ŽÛÏëíö{›ª°4·Ç[;ï–<áq?€á”›ÎK#e¦”tVºW9A~9¤ôÛ Þsì±½D"Žð6œ7ckºG>ý󲟿H[Äo%ÿÑÛÁP‰þ§ü»i/s½^®¢’ÎØHýöhŠà lêpHšI.ffhtÙ­g†;8_ÇŽ©/“™c²’«¼Æeت©i­ƒ™¹{\ô÷G ©&ùjªÐŬ‹ÆCŒŠám¾-38lµ³|QëÀÞ«g[$H†ûôÅ>}=I[T«Øù|úzJþÔåêþ+¼9®ŽâÿÇÞµ+IŽ+ד@+“ÖÌZÕ²²îÿÿ‰dm•5=VeZXç ðQ]=•!ÝXDlï4›Å"ÈÇÉsîÁØîP“i¹ª™è¢RM J¢ÂÌl‘»Óã¦RòYFݲ»Ó=ûA€‚Ž6êÙ ÷»ß¿ßÜE“RXêÄAµðpoûPáµ]U4 ‡A\Ö‹þ@ùÅ$%‹¹~»¦Ù¡ƒT)´u[¶UMM:¬Y¤¥‰©ˆšVE‡/\׋;ͨE¤&­î‘éaÒ†%ŠrË®Ôð9„r;yúB礢àH‚àÆ¸˜Û¢PTŠ“¢º((i¶ŠêàbôæÃìD‘*m·#‡V*!°Tìãô/Z8 @¨høƒñp6 ˆUK#Eæ·E3”°óCúñï;í¦Áݾg#("Eu&–·‹ŒyZ’Ú6%[FÒ¿‡ŽÍŠˆBÅÇ}709ŠñÂ*ÙÇâÕáy¼Ìr¯ÑBÇ8:Þ ”}…ˆû¸–%ðDwÌñৈØH”ò“ý”Óc¿>s>ÂSžùt&AĹc´áœH~iùõ½«_¨ ¤³Q>¡Ÿ=߯Éûý¼}â*_%o÷éNöLï«TÈ<ÇØhª\¾˜™¢Á׫¿&E<{DibEÓŠ `†hf6•kqå?[ë¯=b+ Þ¿Òîx,Þ`M¢Š©í›åãÔö##¾‘;šñöeã17_plt‚*b¦bf¦ ð"hšŽ&{æ¢S±bÞ R+áúxQ Óº÷r)û"¼E ¢O<ü/z¿ûÀM³ƒç9Ÿ¤@vÞ‡ l\30Vbʌ奲žbȰ•¤í8PÄÒžh½6á†a<—_ÿ0ÊùwûË-èoøÿ[“iÞý|VÌ`ïX<âø©H¿±Q3Ç[ö¨’¿»‡‹š­¬"¾Ø IDATfE¥¨%B»Ì€ÉÆ)˜eŸHýðQ`ÕRhî>ëš’ðÓ[˜Ùe½xP¿ûÍïþðp‡ÈÅ :Öªf**Œî|ŠDÇe²yVѤåqIë‡=UµÆúökáñ4OÐì€5¤÷+UeË_t¢‘-Ð# &2Ó $_¿Ž2,Äê SNÞiûb~÷Ôâ³fH=•FF0èÁh7Sµu5S2¼¹_ï÷õë›BR96cí"‹Ù¢ª&i‚á'SŽ¿S™‰e©–<œoÿþoig©ˆÿd æÌF:i®HÍ{Ãáe˜EøÍ>«+fmm4µQïj²ˆ,&lîAzlË].pëÆ,*0Ë-9•Œ8ªE<ù'Ù{DK ËÈÂXyÆ `‡\œr+©8f«m\ð“—§ÿ®)#ç¾^ÊÈÍj)Ååëúöövy»H‚×÷›‹ Àª’pw¤¬}ÌÉ’—.vÉ`ÐÎDüñ>O·{\µæ1ýV€©àŒΖ¨úæwmþÛiçù 5¨ŸæçÎpŒq»Hêo‹`£ñ¨à åíYª*"b€1SÀ`I"‰©s[€äÝ÷4T &ZELÍLÕÐB‹:±¥"#¼6ä*†D€ª¹{~5:´¿VGúûnž~\‡?^D°UwK&Çöï/T9E7äWF3†¨&A¦èÅòâÈ“·µ CžC ý¼iL¨ Óñeþ÷Vì3âàé%; Ë6UeôÆ/]ÿ_°½~½~Ûþ-þ»ý·ZùáùYû8šÏ Æé‚tX‘¨h<ÒMSeýÝîßn÷N335[îžþRa Q³B¸däP3³UÜïùe $Ž8;ý>„j’ÿYÿXÃ)&»á~»#¸;fz{Ü£9S•Å´ Š¨Ù Ë*#J:Ð …BÄR<!ñˆÛ·[4h•xEí‹]ÞÞ._Ö€éÿu½¿ß|±KQº§x[ø€ûý†ÿTdŒß€­ت j@[dz›ƒçYÉïjööÿkÓĉ@…}µõbŒ1•XDªY×½à#°Øº^¸Ï4Éû·Ûýý6Ìh¢¨AO²n¤¢ÏÛÛ›ÙeýbÞœp†ûÃï¹Ò¡(î.&VeµKæ­ Ñxùc•ª‰U"´ î@ ‚4«â¿_¯×?¯·ïüóÏ+ u­vùº¢3»}î éJe‰W&¦Zæ¯en"ø¼ìKўʊ*f>Y ‹ëìB #ãèÑœÖÍ"ª‚x .vG¹€@C.Ìd,€˜•„Ç›Ü?uð%ЧÈJBÞS”5aº8pÛ;p4k6½Ês",½–|!6NrE `òÇ#¿1uA÷ñ3qnQ$^SF¸ŸøÌGgå3îy­˜ßËáqmŽÁÈáXϹßßÈ GÐ`&@ä8w$ö¹rÔâÊ;K˜§TMæ'T( 6[U+¢qíºþq¥òPHvE#$™1¦f¶VåÅ¢½1üúíê·{Ö’0²n6Tm‡¼>¢'#´èÖ«Üü÷ôXc°ÙïTLzx.ŽDoÕd­úÅHÞ¾ÝýÛ Z-==˜™\Ù<†Vßœm:B™ d°"#Nº º)E áÍu–åg=§˜­f"@°ÍÚt‘MRUªÜA݇`läêˆAÙ2Ž­2:¹Z)°ÅP‡?0{º$CzV: vªš™þaëÛ àÏë  Ò#užS¹Ç¿;QKÏ?Ú 0J ÐÜŒ"mH[m¼Üÿ|Šûë\ 6ge—aë#t‚ÂŒéÏþ™üUó#ƒcênaÛ¯˜‹¶L¬í¾$Á;s¯’KYd¨¥iøÍkЄ«Åí(“"è>è©@g0UÜׯ« â‘Eõˆvów¿¿»;£:TMµj(À©ª:t†`Ñ«{<½Šz‹ëݑҒmw§gäí¼èeߔ繶{\ŸûZRÎÊÚì$œ×jXмzÌøþ¦'@>F8;:µ WxQÁV¢rPw“.±qÙÈHðP2ºŠÄèÀžÎ°ûÝ7\žTÛ åhÀ0M £¶®æb£D+Ï$ c¦•‚ÜomìkÃæØí£l£óŸßÌcܷϘ='§™rj§=¿Ôøê•`Î19iÌÇ |8ÿ3ç³{Øan§Ã™€ãá£>ð˜à9dg€ÿÕÛ¤ÊÜßÂFgDxÊÿ°¨‚Å ª ÜÝP6zwÅ舌„µ‡F‹A`LËÔàí-øÒZD«PÍ#¤(l¼ÝG&öírqw[äb«§1ÊÌN3šCÄ ÑSìŽVAÒïÎ…R3›LÈ0+¢Õ2ƒ1fbG´¸¹°Ó¿{*LX%z„6$ø B«Üœ\Ýꪆ ©I¼¬èÄ#)¦ÇÂÊ©€™VÓ^áy2ç¤( -êÍs7Ž–ùÆBÄ2˺Deñáùo„œÛÆÀ@Óè®@„“H9{i!Má`fà5;-‚ÐïUÃä) „aD„m±ØÌ@ëûÍïîî—¯«Ô‰|kaU¢+ ux¦ÐU¶­k¿Ï\— kz1ߢÂä§ôyaávø¥‡6/¾Ù02óŸû ÝU4 Gd–q¼HkòÐ8œ•ši,JZ4z ¯¬Biް[Ä„»§¯²moòL{hÀwûqK8QŽG’ƒY~XåŒ,ôõ ZÓzîÝœ¤ûï ¨V©çì /Üà_kélû ð„šƒàiÃÛ¾ú°—žß‹ý}ÛÅ/s23º‡ï:²d‹l*—s˜_‡‰ã¸aç©Ï¼_?­ý;¤ŽÀèOô<Æ™è?IŒ|þÇ´_ dOsîÉøè^!ºHØìOzè˜\8Íy’2ÂV ‹ 3 ´\VæuQ4ž“õD ¢ WÔÝ="KrDuýjÀåˆ;=CoÔI…¼úä¾7oy‡AmˆŒ£¡8Â*?MØŒ"i «F-1„ë¢ûÇ»ã¡èဩàX€B% C 4¬r°w”Ö0¦ z‹¡ËD6—‰±‹Òáó(e‰õW?Î'Ï?æèaMÌ if€V®¨Ds´HÍ?M!ƒïîÑœ’~u§ ÉÆ5T¸èŠ ”tËŸ(2@³¬†÷»Çýv€ IY1‹'¿å‡° ŸŒÎÿ@›¾mž…‚·_eX®[‰ÖxµŽko9üœD(¢`lg ‡Ž­dè9bîË‘ÿ ÕQDRŸ%ƒ´ÁTÿûí÷2ç1Ú˜ãžÄþ—ëÿFã‡_åoø_½ÿ@eát8?mQU² "K&ª‚WoÔ÷»WH[Ô›ƒ@Ow7ø'{W®%GŽ$Í% %÷”È‘²ZêÑvþÿ/VZ±+%’RºKH6‚ˆÈ£Hv¿Ùºd±ª"ã@àðÃÜL©lavaó\(ÍTaAX‹¬ìl%U@øæî.§‹ª˜h´HO[«ˆåjn´Ô‹mp ·oWØÑ<6g ‡@D¡!°š!@1áÅj„g w.ß}xA),qûꩬ8!’,Á(°“Ø'³³™Ú/î·÷/ÎpT;2;Ÿµêõæ,‹¡P9Iæ±o7—€É¸¸b^Im5í ‡‹™æv."³Jˆ\̤¤ é0H97¿f—Bõ$hÕë×w‚Á•—#Øüꎞ<œ„€[¸{t\>›É.3ÓzªtŠª`s³º; îÀxûÇ›}²·ö&â— ®ßüý nîØ '§dò«Í‡MŸ_f‰l܃߽Œ¢£Yä(]c™¬S #C‹Þi•Cø ãY‘B©Ó[˜ê|+Õ¶È{‡(‚Db™P *êÕ5Ãü…^¶$ÁòpºÓNÎ,‡«ç+Q¨3ЦoÒ6SˆÚGžvõŠ`$Ö†®Xt°3¸E4²'jT!+ÿp„Jº…ÔÙ}àé<¼ð ýA;úÀäãë4b^4®¯ýc òGÎO?:³’éKÀ¤ý¼ûxÄc æ™-÷MÊâH-¥ðóÞ> =µüØ¢J0âòÓ ï \ý:&Ý¿é¢óÉmzºÀÑÍæþãL‰B‹JÕ‹MšwŽDV‘jV5"„”TÌ΢_O;>)mQEOv1“ ¸¶0D](ïó v ¨˜ó8Nî†Ócl…+}¢E“4(çf@®Šê”€þöÛÿ渆{ÌnKлij,gKOÂ[ až@¤«¦Åòi.Ó›z ƒŒ§ân²—¶ÙŸ=¸¼ß5=ËÝè’¥€•ëU2™å-WˆêH…ôl–yESK´Wcᛢ©bXäÈ tV·ŠJIAà{Gew§bg˜#™.䋉ðQz €¨0øEQ [Éþ¡Û?ú!/Þeÿò®30!¸« I?KÃ#¼Š»{ˆVÁçÁ­5PÅ« ÆZ$XQ`"PA÷ØÈžq%H7$ŽO4ƒM’ì˜eÔ¢F cKeЏn~ûæï_o«³ìãöu;ΦÌ:¾Ð•ÿn{y°`_až[¿CPN/}ÎìéÖ ÷ Ž›õ‹vˆ ÀÁŽÆõ]·¯WPÈ ©¦Œ¨ª‰Â8>HGèð¦ÇÕ3]ÁŸ\ÃÿŸ|Óã*ýn;À‰Æ”FìˆÆ,ûd tjA´ »*p†äíŸÿÃé(²¹ƒ12/ÃkI¼è$Z€"¢({D'r Õä·F€Üõ …z¡oWw`ó‘|è‘‹â&†ŠØhÕQŒ‘÷@²1J˜7ÐëñD“Ö(ð˜Ã£…8Ð":csZd”*aŸð¼2L¤tªÀ7ˆŸ €&T­ð&jÚ]€äñ²jAð!rÈ™gÕèàÑ¡1«Z’¢ix8ãOC„ßnÍ€ˆt Ú† Aã­¸UMïŠüXAް“©IPçvó (*AE ‰Xšx fg)Ñ4·‘ªÜ®Øè!üL;õW;_èÛíæï-Ø(]ˆw|‘ÅrŒƒ]î3“ã?Žk&$¯-ú)¨K¤œùÒa) B(Ví(o h”]Tk–ƈvCµ€íÀŠ”ù̆`¨( Qe9ØÒ… bAÑèD 6r ß<¦„¢‡WdÊQPØÌ:\·Ç1C¥Dº”'Œ®Œ#ØÛ¨A˜IWÅà9›çÌ?“Ökvj€™~ìòߟæ³1¾ÚÑæX/¦ó‡€Íʇ!3C 3¥ósI¿»›9úÀïxô©§úÖï9ów®8â‡K|d‚Œ‡Ò—‡eÿá£GÑŽbxÕvÞšNÂ’•m!Þ±zF^äuþ˜#Z :‘Ú-j™½Ô¦PˆZj›'J$pœà2}àÿHúòU©`>à|¦á) ‚=M)O¢odK9G;°"RT“ÂCÁæR5²¡8à³2ƒ RíIPÞÊD27*qÝ¿¹;¯_¯·ÆëiSe¬5k$÷¼5€Ÿˆ‡òÃ5yïã‡3¼r ÇâðâˆãÞ!ó„鯽€(%‹äPÓ‘+dîï}?Áý-© [Æ+;ÁúžGa€*ÜEŒ³È–HHÏ™Š}Ué -ú"‰ÿB;¾Ï» 韮ñîËxrþíÿ¹ÛˆÛ1’hY…"Eäd*”¿Ÿ€Ù'h}ï·›}çª)qDÓÜä’€!‰Ž h’-F½S6²J`ò[´€¤–VàdfEP„󿙍TØYU¬Š©I‰¹õHƒÞÉæA2"ÜIq>_´$ÈÇ P×`@tND¤µ‹åš›kw‡ûM®~óh⑹© îî_ýz}¿ÝîH å‰L‘'Aô›{ø7GQ©S˜še$ï_Þóx6¢`h Øh'ãöåýýý=‚¦¢fV UôóõMŠdƒ·@…ŽP:¤êØTS¾0³_~}³³¹ûoÿ‡÷wºð6 ÐÀhG$¢hÁûæ˜JñÑBš©ŠUcÊ àtÝUªZÃÀ?Î4Í5¦÷;ííù‹ür¨¹:4¢#5 }¯™Dˆ‚Ðhi ¦c »ã÷4j ìV±TQ0ÚH½JªÊ¡âh‚“•#¥l°}¯-È‚ÒÇÂÈt²· $ŠBÜš­¤ôÈädĤ A²Ã t$°S¦ë+˜Ü@sïä,®a ´w‡6Ò1Íàs”a™•Ë€XÎd[‡<[é¯Û÷\ßcË2œ«ù‘;›c2œß½¹y¯œ‰Ê|ðלÂ!÷'!ýXÔ:î'©‹g&´=Ì19oöRÏCWÍJûc§Øë#VƶJMù½P•ºâl¢³A =K|ÓAµˆGÚÚû!ûÿ2ûš³ã4&BlŽÆ(’NŠ4¹£…èû‡Ú½ßõ«ùÙ, Ña#sXóePrˆ`(íU ©•TÆÄ¬cqsºo-Ô ûdv2ÑTÜœ •ÈXÝ$'`:¥OmX)ÇÍîO&Gn% Tr [¾æ˜æ’~ˆ+¹¿Çö_ìd#žZ ©@­²ROüNì|"ÓÑå] ‡y¬X[¿#È!—²“X’ke'îvèQ%;r#C =éS7Ë¢ÃFÜ|Ð'hî-TÖ%z"Ò­³Þo¦”¦•àŽ¶#:¥R[ Ó IYb Úu·SÇ<ŠÁÎR*8ÃÌULÁ »Ìí“~°øUÙiTÔ—9Zúêßi¼Í75lMŒù^Ò¶Ú£HÐëö³Þïj¯Êwœ ——öı/[v¯à’ÇÏøÚŒ;úÀø½•V?ÑöÑ~gô}ô¨=f…ÛáÀÓ?j}šqƒnžq ‘• >(oíÙçÙÃó{.Eèáß'’ EsA‹Î$‰`æ1bf:…Œh ©êZð†ä§4Q„½ÑL Líòé À7aCtGÞ̹·¦óíË(IÐ6öÎí™a¦lѧÃ<|ÈE©E„Z‹èa'“jv¦}6ß 0³h¢ð 1¬ìâ^&Ÿ¶òºVøô‘"wm b‹LKD› g$±ZwrÁ -þà)A7‡Í LÈO™ºgÌû¸bP ÔX²ykti«Ãû”nʸ6©!IÚt13øÆhHÞp¬|lQô=‘w'ƒ¡?"}’# üaŽ?·»åX1´ËNÙˆ).õóIàÙ3óöf-L¥OÇc¿ÅݹôŽÔ=tòç±3:áU$$±µª €U÷l"h¼˜>‰þMžÊ,D/‚ "‚:vÒžLŸ ’¾‘Õ×UÒã›”ÃûÃ6ö§×÷t ú+4òþ6å…(÷q@?«ìŽ·É” Y?Kœ—aNÅ‹$ÓñÅPg^…²Xa¾ ª ¥Fæo³$J¤¥ì8&£Êß5°¯“ïðS*Ó‡öß–FûÅŸ§ñé[ùÛþ“·D÷àTóaå—É¡Q#?lp [,¯q½~![ Í eªˆ¨ÜüÖxãmpSµ„tú²íF.1S€äüùír¹ Ã7¿~sßÀR²ZHø7Óª¬DUI"h3³³@™ˆb(SÉ6)*…FhU9 75­""Ω¸Ø€ñßì];›ã¸r='U1êÞH=‘Ùÿÿ8³7G#EÛ±*•ƒ(J£žÝY_Û÷ú[óP«IxÕãÔ9 `»nfî úíë·AÅ‘ùäÔ7ªXE­E˜Y¸eR"œ‹" _NB°òôrRQµ‹¹Ys­º¾®'ýâ²} »: •:ؼÀó@%%mr ­Dª2ÓÈë‰U¢y*-;Ÿah(܃„NUtÑ4ø,àÍ(ª„ŠªHô8¿_~ýöíüÛ%š«*e8íú¢ƒ´9b{¿Øû@²vàk•·úâÍ¡PDP§‰ÐB+T…1”„EÙqú% ¡`žm;a#ö1ýa4´Ï©¸›òuæI’9lä1"ÏrpÏcÈÐFJÃ" §™Ù‡Å«E* Þôx%Jd*`Æ’Óy ¸ÂšG@U} Ž  Ïa!PÄhùŒY;75¡Íc‘A¨[ÁÂè –Ê::d²ËTÑE9ic½9š%åra’¬DÅ`‡¹âL›LÄÿŒ7ù@#™îСñÇã¯3ëW§cþäÖ½ÝßY±ß›¡·/L |Š-ñðÕß±ÒÆ7ï`DÜ]äi;F?Ý>™ÜÞ?7i:¤|’Žº=ã}w~…¸y¿ù¤;iÜèλΕ~(´äÞqKœŽxÁ(‡ÉÌç÷X(É Dó|ÇRÉ @ÑÃÌâê#åØVز“ìxe0¯n›Ô‘Ecu'bƒä1äNÙ¡õÄD[ð÷ÙŸqneÃ5/vÊ€ð“C%zãLLõQbnª«š[7¤áò~AD‚·3>•#»òÒO)¶T (”JŸ{ÚHOu hú"ïÐîPMÇitþ&îy£Ý£ÖöÁšÕLÁO ˜c?Ü=å'… ¤’‹$­îð«uŸ{¥0ùŠÙ¡«žVUQïŽ+¢…}x´@¥VuD2<ØÄè•ø­3ÇŽ9ƒ|è¡õCïŸ>Y¶çQ0G‡—g—}Øï²Ïo8 ˜·²ý-eØq¸%à¹ÃZøÕõªvµÄ„‚BUÔHñBæÃu’Gæ9#3™™WUz²(g‚¢¹'4=™A>2ü4$Ĥ2 ¬™ÌÌQ%"Ñ>߯Û¬Hø¬ÍSè~ ÛÃfxüøájùë(àz!! u ë¾u×;ÉðÓŸ—]mnÎíþxpŠóUt³’ð ± 0O·j׸¤áðŠÈ€;´êþH¹%¢P¸δóqRýTˆó§Ûg‡Ýq|ÿ˜WüôŒûçï©ÖÿïµÀ!5Ä59ÀÿßÛÌø›e ×ÂJ‰HÇ…hˆžqÜõ IDATþGØù¼¾žÖ—75;ýõò¾  šüFªH€÷0»D‹êi_ÞU’ëÞȰmÛ¤BõDR…ƒŠŠUU«ž»«ŠŠ"UF²`d†˜Ù?mŽF@AÅ{BÑE©”ÓI+¹Üø«³WÉbïݥȹoæ–äÌú‹ÿò+Ї£¾žða›{t‹*¨‘¾_\ã—Tê",C…ÄÝì:°CREÕUYă »„ òÄ3טW¯æ¨Ê*ªš‡£*DÔݶß.ÛföaëIÞÞ¾èªy™ZèBÕuÝ?4‹N]ôôªë«ê«zóóûv>Ÿ½C×Sê6©Š(UU*½…4?·°Í€PIÝ*Éèåf.VGa6€‹]"±• A¥á,}á-?1äFvaÌ»3ì–;þÌÓ <zÞ’)° ÁôCóê:úsÈ‘fy­wßÌäjÖœM'O—õ{ a¢©…ð6ꚨ‡>Ñeĸ/‰šŠfÐèž…ñ™âcq DƃËà)Á@“Ø+)ÔEpúÈ=gvZzFF&-V™1ÖÀá½Ýç?åV=õiüá§C~¢=º\Ÿ|á³{Oß éQîsÙæìú$9ýXµú£ö7yþ?q‘#ºáÉE>¹âçÙøØ*ÌËÎ áãĘ·¾bÿd$úD›ÖË_ÇØ Y‡¬Hê÷¥q!ˆ¸Z4Øöa ÂD°eÉ=©êƒ.ËH“ªê×Eщ¬*5Œ·ŒÍcÆš?x+ÓÆþÕ|úýmìøçûK½1ÀSG-áJe¥¨ˆˆm‡ tDzöƒA‘8Bùþ30”~9KòU!¼Û>Xgo #è£RñhêÝ­ëé=NÿdÊÛÞnúT!·h÷&R\d—ÍYÌÌ@Þm"ì\P|.¡B óLßÚæWÄÕ¼C0–r2ÖéŠôqß=ÌEIò'Úô™õó¯üøš£ˆtΙ'µ{·Ë¾Öf8ƒûÁ=4Õ+ÌÌØœ©*4 "*bI¬»ú¤Õ«g]Õ;dÕ;q¦Ò•ld)á €Er³WQº'=ä¾j¤HÃÞíûvÍ?ý÷á?ÛžŽþ.8¼uGTáAZ鹿½ûÀ#T²×È7É,’ꎑ°QKL¹%¨aׯ,ܵÁnó‹û«ý_µøï%ðgÛgýÿïèZÕ{ÄÕí}3Û’.•˜`Oï!pP!ÌœÕÛÛ›Tõq%ºù5Â/À*ú²rÑÓJ4¹t³KÞU±ôˆ"~5lp@UãÞ"¦1ÐÝgJÊ“Ý?qV×U¼ 2Å´ã£[Î79ˆx+UE¸¨.‚BU=ýrRUÀ½•S˜ð'ÅÚ-T¸¾NnÊPgmÝIÑJã°SE9¸ÑåY­Äñ¦¨Úó3ÄŸßí71à €dE†v°»f2u§ËÊûrÓ}•CaéQkýa_LvÃk` )Ìr0Q1˜@P<"ÎïgYœò/zšáêJ ™Š]@ÁæÑÄ›{wÌx“$,š@aô°«ŸÏçäXÙÞ·óù’ñîuUm8Ÿ/vH•–Ñ+’àÔ÷©Ë5Ã3§:ŸëaŒ2u‚ÜÅÇߊÃ_SU˜C!™xŠ…f–¶M¢þ¼G¢'æí²Ã­3ý›'é­g·ýíî5=dÊ,:nRF\Å½Ý ˆ$ —¤F›g$b‘w)Îj¦6ŽÇŸsfn°å. Œ$ø¯ö³­‡&“_=ܼÔ¿Š€"Q #è"ÌX~‚ßÊpN¯'}Q]WMR¦N!(üöõìÉñ؃…Ìüac¶ ©²¾èéuõÿþoÿáÍñ~A•È(~¸P.vù¸X3V¾}y%«lï{7ßl”Èv0½‘T•ÌY7çä¯óe<ÜØ¹#‘N*ˆÁ²Q+ù¢Bh}MòºjÒJéõä â™,‹ýbÑ⪤u°™Êæ$¹”·óf„bíâWÈ^˜õØ»¶{\Ã[Ê/ÏÊœ$¢èˆ€u‹ÎÀ\ÀûF¸}XîŬðæ¬TBU¢Ùù·³™]>.Ru}=鋲Í‘¼/UX  @î”Üa'SÞÃãGxØÕ@B©…ú"(ÀÃ`Yeê}8î±Smõ1Lì~·ar€Ÿ»Ô‘j‚p„pšÚ,DI:GG‘'öÛü”]Vw‡âé³Ä-¼ÅCµ(M¨i,ΔFav`8BCÊÑ=¢C—y#ioÃn„mU´ I°!yËïÞ qÌTû-“³c #¢Ý›%á6yó~Ó¼L³tù`^ÿݵâû(ø±¦‡ãÿp»³¨„ÇÎü©öy%Ü'ç‡ö4OðGõáõFNòCžd^þ¶à±›V±ßç;xx–ÉŽ‰'#5ê“Ùfh‘x šÁ ju³ ‹o‘RyÞ¡¢¬2lI’•êêy÷JÑÂÍ£™¹° ¶¨TC% ¤ÐªŠøéfá{9刻?à È=³dýð¢ù£7ëåÀþ•Fp÷@ ÐËá.1jüÆøw³˜Ï¿÷ÄÜ£;Ïßa¢:üpSÙAÝ’…‘ƒ·²MWk®GÏ,¨æ!XÄ? È‚—BYDUSÄ8áëB œ‹ ãêfvù°Ù ­ŠE†[ ¡9.ŒQÿ옊ÇånšÅÝÒ{¶Œ~zm>Îc?DÍŸ8û ù›dìxwÿsÔX©*¬ÝÑÝÌ.¿ÅÉV| ¨.ô+„á ¢C¯·zì’?Åz\ÞÍÌ/ÛÞÍ#¶Ë±wíZŽ$¹õŠ Ъ‹\K+kz¿@òôÝú}A“VW[ Xa]ˆH&ÉêîšÇž³šÓ0fŠÍd&™¸÷úæZ`/¦jQu´Ñ©þ.ƒÚà€¼Ý¿o¯j)`†,ë}¨]ÿ8&üxpt<ÆÀ ÛîÞ»ë ÇCe+‹øèãûöOû¾ÍÑxË˜Žš¬‡ã’:~÷úã[ô~üöïĽ?íCö3þ ÙC†£]0ÖpwíPÓÏazç0Š¡Í)â« ×¢é”XUCc–Æ2ºG‚ š ÇÅŽffH,¥¦f/×ËuYì@rÐÓQì¿þsy»^}¤±z\Hÿì—/ç_ÎçóY_,zøÆhMÐ!ªf¦f‘™q'€`S_] UØàÈj1«êîÑÈž ]ªè€~:3¥­fR«ËA4£ìLh AE8T“íô’í² ;š¢E…{ªÉûDŒ—/wÚAP4ùä@‹)"ü+}uv|¾üï–Ü'`‹£Z&Ž ¬E\—ÅÝð·ëçϪ_çóù|>¡Š¿-‘ø6x,bÕ†B•@‹ªŽâU³n(Í$é_]”ZS#*Ç¢E´€¨5Fåét´ÃQë‚Æâ-ÐÔ»Ûì¼}@oúÀE±G%Ð[/\#Š #ù]EQ¼k`0•Tò´#,-;Ip£¾]N&'[&†„$dÙ5çM¥x¦»CL Dr¢Ò Ðt©g¯Ý˜s=™9Å#iVvØV“ªÚ-ÄÍw" ÛmJWæö͇– ÁˆI©²õgÇø(ÁÆ.Ë>ã_îz8Oyoÿĵµ¹á½ÄºáBûß}w‡>Û“´a㩜Ü÷GÜŸí;8ÆD|¤ ñ;6t³oŸ<»;þýÐ ‰[@w“¸%Pî|ßýÏ»{FÒÉNXÜ­˜ %{$ób¬T;Lª*U´"\Mz€ª"0• Åð+Avd0âòeñ+|uBÝ}©W"LMŠ -ðªvÌ è`JÎÈí—lØlÁ~<Þ„m|÷®Ž’KDžB"¢…t§Ù ÑEë‚üØùÞ^L8ñäį’ø'1DïGCÐ †÷‘ÀD÷冈b’!k„*EOU‚Aw0¢¥¨!ô`öz<¾˜TÕb–‰Ð*Ç3³å²,}¡»¯"ò"ÒäürÚn;oÒ}èšõ¢•Êáý^Ó?wźŸÔÏOü‡‰Šßa2s»#5<и`lÙóÓÑÎÿv>½ª‰\>_–Ë%ùﳪWÂnUD }«¯ hÔ^-ké‡ÇÞÉ$÷æË›_ß²fhˆ¢A…Šh•¥g%ø=óáNSw+Gïn¶Çt7lü±Àø=ãË™~{ ð½š«犄[ ï†Ûß¾áœãëümUŸEÑß·ûÕxæ­ch`Ѝèóͺ-Ý»-챎j·ÓqÓŽ¾Û0:?í7ÙÏø/bw;C¤ó1É~Ü3Åžs/Ð RÕ$B ©zÞ²ð4¾Ò×Å̬ÊÈ㮈ÉZ Rpz9y„»_;á‹ØÑä ZMЪv´Œr3ÌÈÚ磊¼©½Èé‹™™;¯‹ûÑ©ÛpÊÞ†-?5™³\à1ÔM>ç×_ô¸]‚Ûvó¥ÝÝ}¥tÊï‚ßµ²ãp ³E³QH€ãëé×|úÛé¤=þûí"ëêÝ="^Ü«Ú:&µ”I)WÈõí $mÊ8¿ˆ¨àòæËâ¾Ð¾;¥š&ç32+äßE>3Ÿ›ÓAq‡Ïß²7>½”Ý‘ï΃GHsÏ}{>[aÇØñî¥-[+Íìƒ{É{«ñýSÑ$®ëê;ƒnZ»6›ÉDótŸî–£ß„§ÿ´wígü´ä¡ .oî_GjJŸœÿf*SeTµiPŸ½C„Àîî±€™“ÞÉpzìY½¼-êk¤ä}ö6ý,DÍK o~lðF_³¥‰Â¹{ 3ûôéÓ§|:žÏË—…íX†¬ð_k.÷ÎN´Qq—¼ zQ5M¤êéhf'k±¤T¯àd&Ë•%;.tâÛ‚¡è˜>ÙØ?Šj‹Õš%¬È‰¾:W$ØëÕ!©+l”>‰²Ž¦R!j¦Cü’YF+õlGCÁò†K1Qýô÷sFeþ5û©=WvF\Ñi&ör:ÅÎÇãëqyóx!1;€ËeA¿,_.DcDø›{]rlx-¦yÓªªšT¸ù ¶%Ü©Ùp+×­ÂÌdèhî—R`HU‘ ªö`ÇÄÜ!’Ì3€êŽi¶\r{Üï+1ÞÝÇe<&vJ)¦³u·½°CJÖa*žwõ„ozØŠ˜w0Ù#‘h’LTÚÃG`ÀÔÊL¢ZwÓê™HÈna§ûšørƒ"ˆ2j™§B]°ñÙHú ¢í1Jf|+ †pÓÞ‹²n-OÙx9nÁVéšžflÇe«LÙÝÈ ¶§0жjšZøûiÜâç1…bW{2Îà 3CôôÜ·÷>E»µÍcëNÊ«ŒôÁXù °"ÝàGÛÜ¢ò^}ô>W[~¸¦üö\Åý{ì_.`ÿÿUlç„i6úf¹M°ƒ«E%§0 €UKM©°b¨`¶øÓ—¯W=ˆ /ÓÿJ•?BªXµ¼è&‰+£S*"E£1Ü¥êéõ˜íXláK +}«»˜ÙëÑ^ŽZð9ûŠ×ÑH/¢3Y‹¥*›Ç¨ÿ ©Ð:;‚<˜Tµ—„¬•+A B¦U™¨Þ›£y4!èIO5 €A¸8ò_R¯‚Bªn­ô@šHO¥ˆæîD $œ¤ Á.*°£EËNΠŠÔ“™HEJZ€`6ó•™¹ ¢™ÜMЃ 6Eó åÓ¶tÖ³Ѯ˗e”àZTH´ª0³Rs¼Hd¼×áNôȬœ8ª ™*¨j4&« îZ…L_G½RhˆFˆh öAÃÔ’aÕ¦)ÿˆÜé£ö²hqóõg¯Ô”M9¾ üödHégìê9¢Ž‘y¡GÈÁæ´‰ A‡GÒ ¢‘Ñ (8Cô‘ßÁ½;XÅ X©¡7XQn Z= ±ÑBˆPCQžJ£‰Yç¬àÖ-Ó?²Ý.µýþˆñÏÛjïž(OÛcú…à µ½F+‡«¤÷îÑŸæ ìŠHå>’|çÏÂNó)ö9…oÕÝ=œíþÿdj~#úý Ýüc™_ÿGžÍ7¿9Ëš=­‚jÏ9£+|¥ŠHU… À# ð\áÍŽmž¿BA4‡"¦034²áôÅ=õTUL,úǼžÔÝ׈±xð.atþì$ :¢„þêZEÒâ2é¬ LŽ}#áÍ£qDÂ{Õ·ïOni Áõ€¸…Ló“e– g¦{õm‹çß?вs &M£ª¢ŠTÔ´ZôÜ”¯òWØA{MB¤ŒÓ™ˆQóE¦@„;[ÈÁP²Tr!•*6þlæOMŠÀ€1'ò ½/Dßi#ÿÞô«¿]2Ýwå£w÷úvé÷?øûmá±ÜÆqûäŽ)*Ò5jÔLNç#ðg÷ÔG\Þ–åÍ/-ìpBqI±^ª´Ü8bq‚ÁXÿúât÷hX¾ø5LðP‚ˆfX̓»¾‹ÿÉ™zÞlŸjäSáî°N-«ïoU™âŸ—å<-H›÷#<_ -ë̤ÄLvÌžƒ>”ŸnÏò‡ÒÜ´‘{rV±|k=|!ÌOjj {®÷–dÉ¿%}—œVRå¡$/”éz¾··vRØÿì_´þÿ¥l_ç²QŠd10©¹ÎNåž,mÚV=)°£™ ª¢G’”‡¨o¬¼¼]5Û×ððŒÖÔÌ ú5‚+£9Ûÿ±wõLŽÜÈ23âE´ªhÍÈ"×Ò=kõÿ­“uq–v¬»³–´4cu•E´UgÐÜ™ÑHÚˆqïÚ]Šd7èPU™U U"­Ÿ"în“O%Kö! Ÿôõt Ò·eÝ ká7s kf¡D™#-U¼¹TIµ÷ì—‡ 1Jk´ðLÅ€YÏÚô-ö2†é2¹›ßŽ8‚½žg&’yDD "n½¶GJÈA¥2S7ãΨdY+¯ò ¬"Âsý¬æÞÕ˜£9ªL‰»R¨‘ÊF×—ktøÎ‘9-U¤dMo¡PCšSî·ÕtªíÆ„ÓÍÌ-ÂS‡6HžBU¨Rª\ÇÖâ-nš–-™QdeÜ,f¨du šEš{Ä4]í qC„Ъ—Ø ¼kpÝDsÔVr$áy”}éÑ„ð†ˆÈHÀ¶j”tè²{”ž 7È*³4GrÈ¥ödŸ,]v÷ÞBo–'f$ÌëL½=£ìQ<7EaÇ^¼¸4€Òg‡Røw~\ú?¨É;Ò=sFÙè˜óÚ€"ìgv]¡¿ˆyàÛQÝãÝ6ËVÿ\â?Ù"×áée¥Üôdàõ:ß0U—Ghˆÿ‘ëØšw¿Ä&ýζÅÕ_3¦Þ2î¿©8 Hn`7,$Õ¶úOl/qD£6ÆhÿwÓåÝûãʹûh¹~`F„gC(‹æ× ®€Tc­–:@&¡f]%;gÇÀ ™ÖŒ”h.xP{ɤ÷€®Ï“·¬Îˆ@! qK$ÊQä•LÝÈoP”¾Sk 3è0ðîÁlŽ*"î¡|q4÷ÁGÝßîÆv—ùß z_”èÞo~m½ßõ¨ýõ$_Öÿ]†TP“E¥rôt°/«ìGƒ^û¯®Ú÷Û÷_'Ó‡ Î}êJ›;óâú<=ýãI+ŽÇL ;>¨Ô&ûò÷/¿üíçéWûë/?“rU¥¤c³4Ͷ„§3 ¿9ªFdUÞ8”™Ù„ÜoÝ4$}cSºiA„·ƒpïweðb|„Ýàv'ííûôúèÆ‹Ë>Ü@êîvfþø$ÞKÙÌ÷Ýën¼yÜûma{Ä»PLrëA%û$ˆõ—Ýcù‰»]ï^òÿóö_ø?­97XXx´•˜#kWêÚµè°\ gÚl„jªj žrnøõ›Å<` }ÐþÍ,•t¹õ=(ÑØ=«î~<ºÝÕ#‹Ë|ñæú¨"+†–¬-ÖLªz’€Ïæ3T©ÇÂ¥ˆ5ï@7³±†ÈâêK$JÜåÝ%s‰¾”Ñ9¼¹6ºg±,“J?ˆ’vÌá€ÎÀÍ#Ë–Št %+T;€9P³¢»­\7³„°0Z´D˜ûÕB QE•fbÍc¿Øû ûŒÏ?|î~N€(Ç“Ö\@Y ö2=ýó2=_'©Ä*ʳž”•ú €HëuMn¦7^ºb„T‰v3„¢GEíE³£02!vv3†’ð IDATÓÞ€DÛêÍn7—¥Os 2¼vqç /ñæyüCê¾2Ù×1oN;v­¾K¤O²Z‚³~Ý—H$9MnCe±sçåfihîŠHG¥G¸+{>¼…¡¹W¤¿o{=ìû rí,MV Ä̼ ÿ¸(åÐìÎTÕ4w’ ³±‰Ï.U(D¡‰†˜‡ÐxÁÄÊN8èÏÓårÁ¯8:ëŸN'¦Û-xÔLVÉŽËAmžRÚQ…’'¾üëËåשgüWf‰f¿™ˆ€<Ïr½æ@Y o~zTUpOW±!™ØQÇS¥YøìRJD\.W{žÜU>ÿå¬Gkq5KÌ-šK=Ozðÿüã9¡ÎÓãÑ ¦çÎ"Vdý0Zˆh\Ÿ•zP9h/F0»²P«ôA8/?þpŽÉSQA\ÝÐzÄÀ*?ÿ¨Ÿ~üiz±§¯_//&<O~s{žÜ\ˆ§/_TU„zTÑz’ 4×ÓÙÜÂÂ&{úçÓ×§¯~ƒx:ª Y¤Têñx|TT‰æñ þ<Ùd¬ÐÜÿÒ˜&¤R‹TQÖÌl=&/nv}6{™¢%'ݬL¬ÔƒàQ¯ÏFøQEç³—‘N2ŽA,ÅF¼sfÌ=MÈ)=Ol°†JkÖiiqªŠ8 ¬‰$ 3ŽŠð9:èô’ÑC«ƒ±ùIééL1K4ÇAU4«/4U‘:OlOÚRÒ³›M@OÞš]=Ìœ"Z•=7©7$ö"" ðJOàjÃÌ)a%Dƒã ¨uBžU18ð“Þz8f «€¾=Ꙝ=®ÑÇ ÀÌá†yX–Ý©¬<ó<鮽½A¾»|®:Ë×:)²HOLæ.¸qØն!)“豦²#—nÛ›ùòüu¬oùnglδ۱3qc|#‚ÀÊý“׎øH€ìJ›.×7FähŒåR•-š>ºH f 7=ÚA ëÏÏ"^‹ìD”—>Ç’G³ÄJÐíå£0Ülš|6©ÔÇ“2GrxpŒsGéH œ€È ¯f×bv,ù„ ÎçS´ˆ8b†ßâz™“ªb©J8HFøìJB ù»áHå3é÷aU …td7×®>ZP¡!™ß(!>{/ñŒÙ#TIÑŠkh‘…p2!¿#Ɖ¢ö<Æí³:nֽߞ,Sö–žA@Iiv„£@Pé6w‚KDŠ$y, ·éÍö¼¡D³°‡›÷$¦^>ó×kÏ:©8©êC¯¹ýÓOç~ûfѪªŠ€™O6™Y„VFók3–ÓQ)Ef1jk0‹tÏ¢¤Â\Öé`O­ægVïìæõ&Œóú´¹wÛg;çó®xx} wc&¯í7„÷‰%[zô.*-΢:Ó̾üí‹}½^>íÅŸô«ªÚÍùû/?ÿõçi2­ê-<`4 L9ÿq`ÒÈ#à³ÝE£"UôXUP×3ØŒôeßÍ ",DW/H™—ÛiøøÃgö«SnóûxÚ?mÿ#vظdÒ¿ù ŸÚ?øobÑ…#þ-Ì#6Á*Rˆo†™í{ÕArQUR¨]‰ðpG)¬ÔzÒ®¶9«¨ž.õÀÌA‘h&Ó“E aìý È"Ze®nQS+FÛ›ª—ËÏ—/§“à-XET£Åʱ#z:¢ Ø,E;¢¥$/$}ŽìŒÑ©OÊå¬_ÂVfS Gh8¡’JvŠÉ!¢¦( °B:BݱHl£”Õ˜O Â{¤Lt´¡îèÎ"#56Þ|¯pF Y4TуDælÇfÞ UN_b”H%(ÚYδ¥`@ªª,'Tñp¾š¾«èÓùr¾üðÓç§3tG DwkÈ󿟽ÅàÏ;°@dôCJ94o!ÅQF)šåüñ¾ùž3Í]ôDð‹žúɱÚßÖhÕjÔ‘ö“¼PdýañŒÇç“ :5 eö”!P µÈjet÷*ŽûF—wVö?Љrï‘Sþ㦈rHV•»´ù˜@H¥sŒC´ŒÁ4GžôI€šê¨±K:OGäU nE>Ñ’®™f¦ý÷9W&”DLnvžö#¸í SFkGÑ 3bõ¸‘ÿž\Üï`r ãX uؽnŽÂ'²Æ¿ÝnSâ-óö;í>}ô ßíºÛoèð÷ñTñΠÜ0𣳾?ØK¿ŸœïZ–Ö¿ÍØ=Rqo-)Ž·~=ó*…rH|·PåàÛ­.æÑÄÌm(¢….𑦔?<§P¢*«œ¿^;Y„j‡~¸œ…Ìþ|¥m£be Ã`c0sZM“sÉ®ÔsÅ& ¤'€¼ñ9ûèî[`³0ÁBPY¨¢®jaY }ç¼GóßÁD¶;÷x›-œ·7O=)å#¨{ôà3'H¤ *„3¤˜=`ÃSp•l¢‹Œ-Ü-ÂuQ}ÒÓ“ŠªT:‚MŽ€yd£žhÍ¢Qî;YxÝ}°·$ü}Ùü÷±}ò6µü{ûô¦>Ÿoïói¿fÔn8n ï1ÀY;Vëü†Yòà?Œ÷?øoaû7ž§¶™g/>a¶ð‰laÍ»Üî7F­ÌÏEÖW¿¾¬æ>s„´£b–¿ºxæõé¸gÉgòÀáûÎB¨ˆÑ#zx€èî;›r´Ž›×îbÄèé¦CŠÙ¤ÄºùFoá=Th[ÜN5Øøü2E2”2o`0#¾-éVáòH} ŒÇ GÎ=oÄÑYFeþ€9&ÀgaÞ|„dž¢·¼9<,j Ñž®üø.þÐ÷fGÁ§·ÎÀ1øŠÇÜ> fP ?uDîÑïãÙŽÏ~üBs}8ö"z÷Ù÷ÀÀ§NÒݯ¿÷Éý~`Ÿza˜êx‡Øà R²cç!+¤OjºOŠPUÖ,á€haé£ÛÈl²…Ú!UÙÀVM¿-©è@‹èîUÁéî7€"Iùò-A‚"ü(ì÷ž•‚)R=&áˆ+É1 º”ðÔ›pøâª$±ˆˆÄfèó×Ñ|Ýo‚æ·ï(÷æÇÀÀfŸ5#‚,!Ø£Z·µÂÎß#ƒ’õ!ø±æ¹/³RTµ‡/Œ¨àB@¥UðÐ`ÍЀ°hîæÎJö dP•*×W 4÷-“Ÿm53sK}À!ZnÌá‡ïá£ï2šúÜ"¤sŒ¾çBÃAÍúwK×GàV„-F>³¸¾¬þz%eÕuÈŒ:Y{}^ó"Ù¢ˆT%6« Â÷`kn¯#A ÀH»Q3â¡úò£¯©ÈLƸÛr[)'÷»Ûh‰ðÍìÏÙæ|ù›#¡ùÀ.¯Þñ¿ãó2:J” oŸ5ß0xðÞ¸?Óîï?=Å»¤»Ã”þÿMŒ•ƒ#há›»Ïe®ÏúûÑ[ðJ{Ç¢¨2úù4‹îh‘" © t^ôôtŠÑâÙžSÑ*7?U©­dDDÀ·ˆžt±F£µÕÜ´*…²ž_ͶÕ*ÑE*c!¨ªžÈ8ÈÄX†.¡¨Ô:5Aíá[‚a#Å=T…6·X¨_ôVÊI)’=Y²pØõÕÝ-[çÈ=>éÐðƒÍBÊ = •DQE•“….rƒ+eðTÊ ÑšòÚ*•ªzR% À¼#¶ìUàB9=AD¹(œ ³ÁoöÂ1w_a[äa2êÁ4®iE{ÀõŽ8#ÓIO@¾q)=Z\׫½¦Ü("•ú¤`>)A¨HÊ¥ÆL e´Œ¿{–Z ¦Œ Ä;îmä)HÐèÁ™r/¤Šuin}Ö sôñNͶñá>b+Ä{­Ër“wV3 3ó›ºØÞolW{ú–Š oná³ÿþðö ì'gé÷öë²×>»è·õp¿÷èwxŸ“g=*îþF~Ï!0àÃý=2{mÞ%ˆ -ùžÁìŠ6 Ö¼Ù(Hè¢,0ºdÍ‚hX×€½Úúj¾ETf¨‘‹H ’R%`&'3ßǽÚV@Öé gD3¤!沿,ÙŠã0et,P˜‘¹lºnªÄ¢,ÀB.n)8„*ã»;¸æ7¯9Óh¬W‡ E‚‡GdȤ #ÑOÌ߈ýž÷ú‚¼® qc¤hÇÜpÅuP“ µæ—ŠYêáÚdï“5Øp)t)©Ø€":ùE¥* f¾þמÿý̺d3·-¼¿©®¼G,*çÚ®µ»ï&åp½7?ÞŽ|À&ÎüñE+„#˜™öÔ½Ú$4“üO‰r=š…Y$ˆ-€™9 £BÎAÁå§Z`óHyÅï6vL¹m‚Rå¤zyÒ,ŽË Ë[£êç=”ó¸ÉÙÒvüWÌÐÍ|„ îÅ÷1Ÿr§s—ü`³!ţނ@ e¿ª»;åLƒü8ÙgÆîÜ¡½ôø1Yã¡bù Œ?²›üíìŽ+ž‹íô35ŠãÍýÿß¶ý¥‘"°{LŸ,r;lá%2+ uˆù®ÆÔOf¸ÅÀoÎL¤¤6rf¾®Àx{³òÊÌ""KGRË6óî©Ì|9«ªÚ+¼= èYUU=‡_]$©ÚˆLõ'ˆd›œ¬Z€*Cs¯2ÀRA>ÎX6E£°Ž@úIÂx*ÊE¢ùÚ†w…樚¬xš÷ЊhN* @JHfÍ!aIs+™n=¶§h @`}í €”B©$¶E 2ƒÀj×5‡Óžûzi~y:ëÓI9kxÏTgÕTã\’Bwº‡Û¯–zܧz⢺¨øfØ=¢ùd< U²‘2’Y… =aŠT‰¯Fûèë¯×—U*ÙT1Æ,ˆ¬a«êáæq5SóÑ«¶œ0 ¤êˆGŸô©ZîL~wÄh0áRG“½€£*Ûq·åìkàHzß 1|K¡\ãž ç©£åÑvD+@ÂÌT=DXÈFV!•-›y¥eº>ò,&ÕÄÀ~“2¤¼fˆG |y²p]*¹u2ÆÈÈ|ƒ÷Ýtf[ïn(“¶ yçêýuHà@æñà±;â7ŠR;ëí÷dãÅ,ÿý56/*ÀM¼÷¤r·;?óî`íà¬ÜóÆ7óÛEGüåñ~>¶,™Õ1Ãç­YkGŒöÚ¨|¾®(6†ªsÅš§¾üx‘\^º3ãG™Ô˜­È½€¡C³;_A¸ûænŽˆp÷Ÿ>s¡TñÍÙÅ<Á@ó}àòÍ‹ U(ZI+ï3ZãI§ß‘ hˆÍ£ÑÛI ’UDÂV»…¥ÆËûîð¾Íèà]¥ï|iÌnºÝAMÚè‘€ƒý€ [¯‘ÙæÖTدŽÜ%™-ÖÊéIÙ›e‰¯UUEÍÍuLåaß\D¥•R•öbëËõ_ÿzþÏÿü‡d¶_P=‚*:<ÕÇ|R¿Ç1¯Ñ÷Gæ¶ËOSµ3&™¤Žb'EÍö{ E 0ª¡F‚t;2ŽFæ4ÙEªjMÖkEÁ`G\ø•æ§F¨ÉeAg#ZÄ…—¯¿úÕÑUMMaÈí„KöxD2o]O!ÇjZEÔ¬ªo|&Ñ‰ÐÆH:™¤ÐH‘ØüÐt+Ð®ÄÆÅüAóGi{opüÉ-§²«”þ—Û¶Y tMKb_Cyõ>›Qv x9Üõ›ã{›†Š Úù;}&©çgÃ0-lŒìßP·ÅwnO¼­¿a1Þƒª›‘e«,¸ÕoÇ$D Gd´Úßùûöä”误¯#>ˆ$5ä8¨ÕÐéY_©j늒Ñ+À+£…7~ýúÕÌdwq”;BÕFÎ@.ù¢Ü[€pD _¶~n#ÏaWe]Ï~èØ#h*W@«R=®‚ ÜƾaÆ~8ß<^IDç “­: = {æBoàöœ÷ ‹Ä•¨¨j¦Ù­[úEHç¾C4.—ÈïÈO÷ «ÃëÞáWú»†ˆÄ?»º¸»ç_σXXDŠ*€RdðF0‡x08#ö#£øÐ5ýþPÕåÕ~Üe÷,¦¢ØÏŠ’éŠ”±ªZo _DY"¤…¸øÕq…GD )ð 8yZ×à Èzû~ùr²¸2"%0‰«°…,f,@÷ 8¤Ó¥[~¸Æ<¤¾ ò°ŽcèÛŒö8¶¿ß…ÛùÀ¸[X<þþÃàl»Üïþ{í~O{ik’…¢Ò’}Àå~Ç’Þ…d³æ ÈõÛä}~°*$>y‘r3ì3ØÄ¿à?K‹¡¤¬…½tDÏ-?´¨d,pJ€pIi²Gpdù_ÞÏî®ëé%¥kÙâüæ }w23„PÕu]“'™î~¾8zœžO/§¢¹»Ÿ/[‰"#ú%bjl@‹pÌ»àÿé\40¸…TM^EÁ ¸†Ñ« F\ŒLGSFݦ$Ŧ(¦ÃÛ9ñoþâk¿’×@¿AsµˆÕ›Ho6Y,…"‚O·J«\ŠF¤øD:§:ÈÆ"ñÕ@›<@€MµFsÿøŸ_µ"’áY.Îp¿üó À¯¡IujY<7‚¹¶ïçïnP¬0³hîáÑ™,L€°7´ ;QÅL¥¬¢ŽÁg†!çà"!ª O+ìÙÖm«¢Ý3© ("MI\.gå5¤@‹JÊ–gÞ½Ÿ8úŸ#%s؇ÓhD0…C÷yyPŠÏKNÃñ¨ë`9hcþ¤6uŠZ @;)3›A†£dþÖÀ3˜k`ƒ_Ãß=®¾_Iu¿¸T³Õ!b£˜#ò4AYÇÜuŸ5“ÒiV'§dÁ¡@À- ít†t höü·­‡?l8í†;Sisøñ¹³÷ûÛÖP ê÷Å ¾ÓûÝ<åôívt”jß×ÝM®L74ôCAîþŸJðö¨O2šyéÉ€H@ô—Tç·3†‘=„U¢„™i"Xhf j(É®ŸP æ¡EþvÙò±Hþù ȶ IDAT›yB0 Ð@:ô‘–{zÉÑb8º Ëá;aïmæŸwñ£»ôN#J ›Ì‚a©Š:Øc»¿ƒ;kx÷IŸ¶>¯ËŲúdì“õŠ#‰º…~ót>UÍ (&Õ´HÒ„x£1È3[”-Ì 0(ÙBDI'r  š«­9 /¶št4¦!òz~µç“TB®ÈOIç-‚ffO6èħӊª9k—·sæ$™ïšÀ/ŽE‰ˆ[Nö´¢ˆ»›Yô˜J£uˆÃdªd.:n|-7c37,¨‚¨£¶<Í>­ˆ+Ø"ÂQ4EŒÙ ›Øoò$5jEªžH¹…KµŠ°k´Ðª®®W½éŒŒÑ@1È[€çÝW€Æ›GƒY0­Ìæ—÷Aç‚dñY²O,íø1õ:Úh‹åbDCtgCÊ †ÀÄÉ+¶¨ªe Ÿƒ)T!ÐŰ`}^±ùYe:€Ôˆä$˜I$Ê$öŒ~Üp¶ ‡nê±^kü²…Ø¿µ_Ê£{6k#6q¼Q6g¦>2Þâ6_ãZ™9¿e'±Áíúáï'=äà nêÜ}ÓácÈÝ5›ÇÈ!Ÿ®UÒ9OÃ1™ù>êô§‚t¤ìpB0”fµ~lXç4å½IÄò|÷úΔŸ””Ñrêó½¾M÷VwW4ž˜9ˆí=ÁÝ5ÇsMDHH¹éxÌcuȃíXÍMSt—ˆë–ÜèpTk¡BôÌÑahÐ;ÓØüç-=ÙC’oçæ‰ðJožû[ STöȯíôŸnñí”DùqóÎÁ[ðmw²Ü~ݿ޹Fî¿æ];D%òivçð¿ÿzëw%æŸ6ù+ü§hJÌL,âê7ÝŒ”çEMÍ•Ëa¦m ûIt°9€ k]̪jU©p@Ẩ™¡ ³£ñ+="¤p÷ @ú•(bÉðP¿rR8z$ÿ­šÙé4ª†ä¸/‚‚7냢ì1Þõ$þ™üf†Áð«ÚfŠ»xs¬²J…R Jº†»ìÜ$­"fºè믯—Œ›=™<Ç0àE$´ÈÝvˆ—d*¹'ÆÔ>Ì’žüî˜Ø§!Puœµuzn”;¥ÏwæYE_^^ü}ê-Ѥ9QE•—//f¢Õ¢ÑÛ,‘ë”k€IÑîô÷sV_«ŠVQYv ¨î‘>ž¹ãùdC´‰ìI–ÄQëé鄪«óõ|Ñu Üìï,™î@Qí" RÁY€5eZÃßzÕ!¸K/&ã‚};ÌÍ>üÏ Ø›á}Ÿ´ý˜Ù6PH™Ø<1)!‹eryBÄCE!J"%eÂz³ÇG„©H!»‚¡i¹ì:Û#_ý‘é*ûÿÜ'½§÷»¨ýU~Ôñòé9µ+[A¨‚ŸâÚï“ü°}ûQ±»„ûН”dÐÍrÚõa¸Ð=œÆtd¬í0õ»^=î®£í’ ùcÚ‹ƒgø7¿TšJ7¿ëØËä½Ë¨â}{4WŽ×|#çº$Z•ã®Èsà€(tê¥ —†cš¡‚tðnŸ¸‹Œ·¸Š®5pz‹¥¼YÍ i"}hŠ+Ù˜›·ªø"PMŠ/Èe …wf«l†lÉãFU sw)Q /ýÈ–S…Qrß“ÈÝIfTé°«å "éfœLõa©šé(ŠØjª&¢‰vÁä'[ŸV÷¸8Û`j°jò¤ŒìÕ¤7ÜÏwdQËC-å6ÝŸß»IŠJ-æñ¯î¿³„€(G=ðÇ,»hzV€ŠR†Þ/wá Añ°\†‘$ML$ÔwÁïÍ=ŽÕcßõö³„Žàì¸F?™”ž"vý›…Dr ŒmÞÔ}nùûrõÛ£RN8™PX‹ÇQþ¬ý1¡^Èö—ügiÔwy¥_S ëóŠ2ÄèQh#*êÕ¤[Ë«¿¾Œ–N§[‚M¢ˆ¦õ^TŠ«jrW¨™¼¬–ŽY*E#¯ÒãEž©h‰ƒrô€(ˆFo`Oöòå‹=ŸÌTë.€ŠâRÁðfR©U$·„‘û”‰,ÉŒh ´âÿØ»v69r°’ee©Ïê^ëÌûÿ?å¬Q[+YXEZqÀ|ÔCÝZiwn÷Óšª¬d2“ ˆ öz~9ƒ¼|sŒ°/¯ç—3$Á÷@ôð‹ƒ Óñ¢ªv–“`¸:ƒÁЦ痳™eÄ=ú…SMœµìuñÑISLv[Þ€45v)âS> †`dÑT4)´„ñõï_é‘Pm¶Ö8¿œßÞÞÞþû5‡ŠÒƒª&¦hÙ¿Jٽ±§$`gSœ*|šª„4CS4Õf¢²'ƒáy[^_ÿ뀻ŸßÎéß¡¦!`K¸´5l8{â N¬-yrÃzìêÉLtUâeʬþ@îp}VìÀ Ù–¡¿­¤Q˜n93ZÅT$ƒ$‹ %¬d²“¼¤óªˆˆNx {KœDx3z͸ !Ⱦ/c×­ mHÚRÿ«ÐèqÛ arn°ç-å{‡©Ž¹ÚÅeåÞeúEy¶¹ŽÃe1ß‹OÐaVÛu2YnÌ—•”ôdÉu?O#ºñ³¸§½Ç?§=ú 'Ó|²e«%^„ WþÜMü{%$—´§t;Ìe ߢí«÷«÷®R'_qú”œ>ðçD¨ ä$œÙ7Hwîð¦Çö«Ÿˆ“K+05䵔âZÐM8!}ûº´´ ²I˜‰©@±¡Ð¤ò€'¤…èUèk"„´E˜@á@•‚ìïânW·.ÚÔ³‚WBJ@²ÖÂIðÞæÉ™ëDøX9¨J•lÖš½pyøjÊkÖ¥_2Þ*¹sQä@PTEgth•ÔT ö «NÄ’W”ÃeUçBàýòî×ðfºé5ó“Íò¾–:|FÔ›0åî>¬·â‰¼=“õ„¬é¬ý¢~$÷«k¢–.È|t¶ÇÎÖã÷…Ûßé€íUZe\Ö£3Å—CDET–I{^vQ>nés}îH·“u‚eÒ‘ºcVË;Ìé³ÉÓ—ýaèm{L©ñQ O’>PÇÞ¡¾¸©Ú¸^Â:úÔ{ÔMWl:Pk¿˜×mF7ò8P¾Ã~ŸöI=Ðû+yrþÇzo¹ÍÄùÔ ;ù8ð{­‚ÏÈÃÿ)aðŸ¿àÿ™¹…Ñ¢zºv*¢Ú?ÈTîÞT/éɈ‡”åòþýÝ/®¢fgƒSºS H•U€Ø ªfM«øtx¿$ü+€,¢©¹z¤‡ @Zrc’ t ál¯ç··×—³˜Í¾ð“·“q’Û:ã¶–lõÎc¦J!b¢bfo§7d_%S¿FnÒVuM€A÷îzšå{–á ³ÐÉ`\ƒ`Hœq®VÆmÃêJMßhó5_«@T6£Vÿ 7S…“â²›Ìþ…&H`_ìõÅ^¿˜˜q0Ú53fME›¸‡6‘ÁÌP­–B~u•jæœf A+šåRÔD"سÐwv´¢6ÈIÎ_LOân`‡C¥#¶m} '•n¨,@ϼ;VêÄ™;ªq³pâŒäÖÅØ¥²Zü’~W,˼m ÎÊA@\¡^¢WÏ'à4]©up¿µ(»;k@òçÑ ÜÖ–Üœ~ ÚšmØ4Ë,¥’»¯,Pj$j„Uên‘ö‘5vtÊiæn1Ä¿f9:ååñ§Æ¾Mí¾™ËA¦wZ¶rÒä¯|6è¾7F÷VË'§þ„±%©Ñ»F>ïW*LÆû"azÑé?µ7”pÆLøé/vÝ9!äÌLê~“©ÿwoÙÏ<µ]~r–)ÖÍ"žüCIž€“„¨10&Ò+H´S*hÀ)ý5 ÆJ,ꉗ.À‚Yýþx/²QüÈÏè`s?»ž,z2j\šcAô0™\“\í²µÖ€D…ö´ú£,À0šÞ…KöÂÉŠQ›s»˜laÍ»”ºŠ?ÛõMùËþ·•£é ™¹ uD²* z¼—eÓîU6p4}}©&kÜQObjèЦª–ö%3-jTóz ¢¸Ê"‹^Þߥ)èñþíýòí"MÌLEqŠrKò¬NŒŠñ€6Ó³½¾˜½˜ªdÀ’+,§´ ÌîÑUf¥¢<¯ B”‹Òifoo¯›¥â#Î9™lu›]+:‘€MLNPU{9ÛÉâêÊ"Ö%&Ÿ\f¯å›r¾šß•4YÙ% …ö Ãu\úNu–ÒLH³i‡RÑ0ój v»@.Ð&ûÛÿTc¤†2¼*ˆ&­Ê„vxD–tòdžçIÕLšAE1 Æ1"FÀUšsÀ¯îÙýb}I{µ/gv`"û;õï 5GîI ê.éìÓUN) r‰©Î¹°‘$íe•hKCTØ}2q4;¦ù4Q²¼àòo×ÌÃlµ"Ó×-Þõa ϧöT?Ñs K:^5ðÈ =€ˆ®dE¡'Nîåj4}ÜÖÇÜ òÙÏ0a5„³rMYVø6ðÑ>ôéwÀãD$?’‰²ºèzùþ=9Áá˜ÍŸs²fz:„¯ŽPS!É\É«¿_¹¸‡ûì@8"ÍâL ‚Ý÷*W±H5°d'™t¸IH¿T%d`ú® ªuÍî˜ÀàH¶ÿ®þNZét7g‰òÀˬ¿eð.’Ä-~ ËW Ç|ŽQT´ÜsÜÌ$Ü}Õ1"]4‹ií—qMõ1]S+Px΄vÞo$ï Þ‘Õþ('jì‚ô¿(7.ÕçC¼O ÇM6ï7ñç'ÿiÀ»u{…··ìñ‰A“îîV*lì »Õû½ûy*Ohñ¸ñŸ«Î<ßS'÷“ýÁܤ¿¶fdõDÕˆžÒâö:‰júzëÞɺ†—-±$oÎì¹²«æ;€–e&Ú6Ä ˆÚ)€™ãº ”9€’.ˆkÄ5bÅÀŽ€ 2_¨9ôl¬P)Ú"öE×z Ù%ˆ¢ù„ÆÂ¨h!áœù ©â Í"Ûb¥9Éz¬Ù_€¥•’Ì; „Ì%q|@!«’Ñ‘FÄ€tÀ#:´¹7}=NPÑ Ï;¡ hÖñ+Êpê!ȫȾ«÷»¿’g¸ùGãÎÃÇt°³˜ê{ì?¯“­é“"T'6¸•‘¬Þð‹Ô²Ü†ØÉó*4ƒOx¿ëÁ$äØBw›`lÃÁ“ÄrdçK m^cngÙ'bSVùÍ.F…¨2–Ù:¸^Òƒ2;Μû¿ëûʇ‡ïdnªSï•ådÛÐ €c{óØžŸ]jøOÈg‚7×ùèq?<ͯoFŸñÿÊûýÿ$ºÉ†üåÿ§ƒÑáW÷o—Ë·÷÷oΫãÅ ªÍ`¡òj TŠc—´i,$ÜŠ·æ³Õ­_À%‹!5R…”èª#@¸Gv<E¢CÜÍÞt‘÷NÿæÚ j¥š`‘`ŒÔ/*&b–õQ2‹©V“_ÝhªjÆp[/fØ8h/‰³ü»c€ïßÞ/ÿêîïß.~y{}95„5Å Pdõcpeìt¢Š©bðry÷ï†œŒ 4„]c™~šÌú–‡Xò”1i.É^Ê@ÀѳڧJˈþ5À  "&'±“ÏÊ´,ÓêT8¤ê–YÓLÐò¿’ÿ”åbf¯g³“¡‡ MÚ³¤÷k†&: {¸{\Y-›¢™ÐÔšHËì/âòݾþñ•‘ `Rùž$«g)š‘EÕ« ð>»r†FKkAtÏ%®àhù¯Adâ.Æ–bT^_"ír¤rÉZ¤¬]ƒo·$)œ™kJa_تÁ=àùf0…•åº(Ù"{­Õ€eåImš„Ì8f|m·BÒáßø€µ¦vAbY°sž§÷[•‹k£ÎI8ü;ãÓê!¢øfüá >»#.ÌþÀŸ–Ç–Î/†½glO&ü‘øè{‚ÊX5‚îÍÄ$ ,`ßN¤ùBIì€ßi s^1xs¹Ä\cËö}@-ï6u01#´éÄ»¸RÜ“¼›”æÄ$ŸˆlNÓ¼žC,`º‘¦SýTY€IQdãÌYð.vMÈ4g¨u ˆ¦ÆPΪcëlh¤ì2ªà¶,j Žò§Ð±ºÍº¨¯ŸôWçZÀþ€A4µ=mäm6‹úúÇ胷l¦Šì!7än¸Uœ¢" [±G@á 6ÿú¿__¿œÍ€÷ˆNwg„,Ⱦ œJ8:ŠB5 •7A×L'1Û5œËËY"ìâ}wŽÔö鑈{ Yîµ2ï}àçJC]·mÙ rÖy& ÷àÏ{×O=¨;e û·=Öcʘëb–È"À«;õ,PU5Ó&ÞwïäÍK:ÛìÞëy«‹6_tzAUÝî·3<»äJ[¹Ëz®O{¿{R4Ž…3å•LÒv-£ïD×3K™‹ùíqà6³Ÿß–4rùàdžö3ßx»ú¹%߯Ì3+ÆWÖ“?'¨o£äñ;Vò‹[Þ‡òÃÁ×;ñ¬ŽüåÿûÉcKÓ¬D/`dsEbÀNªÍ¤‰võTª#bQm’(±˜à‹Z&P‰ðD1À`b†ù&{¸»‡òì]=“$·ŽLD\ÙЖöY=²Þótÿÿ_œwÞíXÚ±°š´ò ¬ªîž™•´ ݽ™žéú`U±H H„‰P{DU¿9ÃSâØÎ;-jED”·¯×o_]íEÍNYVT”>‡ U­Š"}›IõÌ7D*ô$V5ª‚Ч8w¢Ñ$ ÎŽh°/¦UÙR|YÍ8ò>“Ð( ظEeÓôËOcVˆÆh® ŸÄ ¦ëâLV¥Èóz›ÙvK‘VQ©Ê´š:´º›šE úÊ-#´L«8óO‰¯¿¾¦¼Jd¼z5;(ÑÍp>0ÐÃ̬ D ŸîwÆ>Å`z£LnÜà X19‰ž šAeÈ|swhÍ(,(ÁwŽ:œ¤ÕUäÔªÑĈ(ªé„7•:•ZŠ(€®1R£ïls²Ëp4ú¬±¯îKlXüýùx²Oo<%»Ž+ÙÞE'PfmÞ–à„4‹6ê?ONû&²¹ª»%mN-f^nþ öþÞý§ýÁíçóÌùôï+!XtÓ ¬ïJJîŽ3ãfÇօϽ Í÷X>žõ7¶ç{<™Rå{¿]Ø»—þwiŠ$¹o‘Åldãº7¤F·ó+ÛHÝV]0ÊÓÐÈûËÞzÞ.Çݾ܎·ïúîñ¯í6+8ëß †m—Õ}Ðñ§ÉJ„ð>~·QzÑDç 2¢ˆ‡B^Æw(ªèI¥ OÄ £;@lÁÑ‘„¦¶ª‚ç óMLµ¼(¢C×jtUª†ÄÌàÎ{*&¬<8Øå¸bÊ?h³—ìÏ|hqþrf ¡ ص»X÷y¥ÒÙarÍ`[M¾Ü# ®¤šCÒ¼»§*惨¼ò:±òÌSÔ£­–ˆbºüíE·Nñ‹wÛ~h}` ?Zÿ>ðóíïθ½G«-ïwœãvĺcVÁgÞç µÿùÏÍ(sÂÝ¥ä|ÚÁÃREªH…–3uÜg Éî Ë«œXÌøPTw—vߓޥïýìeÜÂÛz ôÞ£±ýn¿Ãœ3‚¹Çüi~l1Y\;Ú•âáëûöÒð.–ýãî9¡~¼ø}GÐÖ±}ŒÂÿ ü‡¶ÿˆßR6éG¶¿ˆòþ¿×ÞOŸËß·h£ìd0\_áW÷p«â©PÅØÙ¬ž1 µœ t',j¬³˜™¾:Fh–ç%<œ&Á"~C´+ªø›{ Ó-ŒÕ_þõ³7F³óùr¹œ r2R<è-Ð"3š`ŒÈe5EÖ¢)*Uv1Wœ¥ít‚—CÒc,iÞÆ5™™T¸ùY ô~-Yb€á öGÐÛëÕ„TuÁË—3zDŸ^úOf'³ŸÌìrþÇ™ þëoðoþÚ^±_HVlʲ“EØó³1«àBT%½¦´Ä E!NF=©ôÀMü5Á²Y7¨+ÿæj’aÛþk¤hô·×Qo¹öböó…7wF ¾Æ53«1TÊ2´-´HȽ¨½üóH¼faâ[ø›_¿]Á0S©É”iCe¼-B«e Á‚S"µ—'£yZcûª­#w c„&êA²#;2”‘È!!»¨×‰n̈tIí´9*¤($²ú.G~²š™ž$HY»h IDAT´½PÈD†“çøÕ£…ÌTµƒÝÇÚŒm€IwÈIPÕïAinfZ5“0ñ›K «Š¤”G¢{°Eܺ›³qq‚ÍœJƒ™Ë†›ŒA Qå~W8áýIþ)ïñ“ó~&’ùK¶o‡õÿ´%˜1l2®®¦ ¦‚WÁF_ö*}8w ú'ñÏyüuÆôôvpÁ.OÚ³#,¾mõtº¾ foweŠ‘EN£PôbÓ~ß·ë$º^¾MË™lr8õ2³›ªE£G¦QhQ­[]ßc9â»Ud™ìóØOœñ ô¥’oùî¡gzBnˆB1œŠˆ¢Úæ‹I¿_àÚŒüdÀó–Ç÷aÝ^ò£ZAL75:U$ðîÕ,Ã.IÿªŽ” ‡ã&¥‹™Bw –Üépw €÷ÐÃzlÒņ¾—d±:h"g3Õˆ)KYÁ€+`Õ™º/Uå$ZM*LU«¤Û©Zhlñ_ÿý¨bõ’õB•áP¶WÙ…vRý¤¹R „•j9¨2æF(*,]ˆ*$®o”E³C¤Z‹AD*j@ 1ÿ>¡Œ™¿6 %øÁ§ã½Ë‘–;?mµùVn>ó6²†˜Èa'`´g;ͥ!°e½ªh”ØXúœ ŸMvob~Σ—®&p_ÒïÎ FðšM6,tÖ @¢o„BUµêU^Ñu ]¨©‡Hx´Œ§}¿v‰A“Ѩ`9SÑ©&Þ¹\&‚ z=x'¢’\òžm¤Õåt‘êwØå¬}½¿s3þINòv`¢ZslÄ’ø¢q™ô±ïÅÓ&k‹Ýsãw÷{V„Õb/»uxÂ3n^K”£`@ªÆ¦%ŸU°CèFSÌBbƒž}üM~îÄÄŸeF<ßC¶÷î#g|GËT=]Ÿ7öc¿rÞ±hÇ¿»ö$ðüÈk—'ÆÌöæòoøÿ{[Z=ÃÐé#N• YRxZ48r½p-’J!„ŽQßÜLIf̳Vµ“Š€-´€UX§a€žÔS#Zxðë·W’r3³ó¬‰ZõëëWw÷7¡±Ì8Õð3ó T Kd”IYÄ@XëQòTByò2¯6'ÐÊŒÀðœ ÞZ¯“##ˆè<¨bň!ŠŒúî!ÉF33;_Òñ[D‹,Xޏí’{Mj◢䚢+Âys´Ón+0ÊMehÙP1 ûÉ<{¿ …;'ùøoÁƒlæMžXÏ,¹ï:Ô{ßìŒéOÚý6Œž†Žâ‰€Û´›¶\Ö‡öY_9åüù8Ôexbƒ¶Ýé,u<ÁÜ9¶¼_`&¬K)ùÁû¾Qì Ò -ˆP»E¥4¨€lÔÓ˜ó#%¢I6”)R(éHwɽ‡†é4àÓ5 â„óêgjÆÃ(:Žb¸¢2á”B-¢§¡¡™[G‡·0S€öhìBÁ3ÃsG99vᬛ\ô*í3ï'V@ÊÎ'$à˜JÓ >ô¸Ð5Mn±ÙwƒhC²€þd„E™½:¶±Ëq‡?0¿ÌkÜÊé ?6î°­wÃÞë w?ñðùé?¸~Ï¢}G“d›ZИ…ö«ÃìñÑ\ØGQ†@‹(›ÙެÒWÂÂ{Œw¿ÁZdlÙŸåø|ÜöË~’‘‡öAHð~êyØfRßó;ü°¦«{´¡b÷xê‰þÅmäÏïÌÃÏÈÞ¡sú›úðÆôØ·ýlÈýíÿ›46Šýæ~‹¸9ë“%EI¤GIQ«@6F ,ß0&Â*&Ja:$$@J…ý¤¦*'¹ØE*Øà7ÿå?vRD._LŠ^ýÕ¿]ýÛëׯ_ýze 3ÄÔô$¸1Î *€)Çq+Ð"1|`&?£E½(èô—ïËiè”_–bYÌP«X5 Mü×CǬ@ÉÐ ´¨œ'°I4’ÁNô$R.Ù+ûÉì|Nª6‹'9LfâjPT ¶R.h#GËìK5¡úè¹BS‰jäP ²æÐåår¾œí¤ íkÕ—//VU‹D£¿¹_ýúöêáì¼–+fvùbf¿°j®Ul.œ_ÿçêo¯îŽûr¹œÍTPÍ/@œ W‡Eãõz•ŠgC´ˆrõÙÌÌP!otºðõt—Ë€y¿•£v9QGH»P«¹å._Ò’(~6;OrÓ&’»Ù<ÀgÕ@— õÞt»:7\õ¢R‡¾t¸E´!L3rhe"p'$A5¤w¿WƼ(ªËmÒ9øŸ²™}ßÓ_âxoäžmxhïÜ9yúÍw÷‹w¿Çž?ÂþQí‡P=˜ |PúþÓ¥^¸ð˜“w>¼ûÕü_𶻇N_3«8›©ÈhÁЀ+Ä¡p÷ælqþÇEÏf*ËEL-“è IôªJ4Z³Wwë!E× -Üýz½ú·W©KüJ¤h\_gDÙH‚’*Ýb¢ ¤+%šc‡$—(¢UÆúš>UÓí%UËŽßèˆF F ØèožaÕ£ŸeU ‚*ª†Â+É›'¿­S(ÄH»š;ÄÇ·S%¨ÑBšj v½Ëù‰~Ìö!¢:Ì Y¢,у7D‘H5‘¤ˆ‰j5)P§ß^ÊéC€æ*DTMåüår®ß^ÑáôøFÞâÜ_PÀ ·ðýF4¨EдD"r[DlâßBLÑC Z'¢C ÌTEõ¤RÄqE›Õ8Z ÚZqײ›ÚeÜücÍÆ8Ü¡9«lˆŒ_Xìëv°CÛá`oè—ªVGš“ÿ?@*Ûò¼Öò EZ¨ ­2Ëb$Á¼qª}þ I 4X4mÄÍÑvùG ¢…$îÓràGÐì!w”}»={þg]׺æ?qÉXµg§¶S?·2Cñ¹_¾Å@b3wÖù»8äGføèïB´ÿºöÒ‘vúȯ^$éØàÈÏ|G{ØpC‰žƒ Òñ%’ ´[¨‰"#z0·ßÆ@&3s”´ý_ö®˜=r[×T¤*`ªÝWÙén—üÿòªÌTñVª!«s ’fÆÞµw7yÉû‚"ñŽÇEI$pp0¾6Dæ6Säúˆ¦á-2Ë5ETSæjOsi _‰ `c·â™[nãÝÎÿ7¶O»¹Sú#{ߨ¿øïjuÔ ´  vŠç§g)Ê"Èî †ŠJÁéÓÉ4ëàq€ª†@oˆNñÐrŸìdbÂF8.>ª¶ü ´XWdG%oŒ­Î¢†õB«KXUS“©ðÌ,J’Ôm‚W¨lb ²]Èà OVJÖnemƒ+Û•'ÇÉ ¼‹\ÍÅ›ûºj¯j‚¨P@E½ú`޵äG´ˆzÈT¢›h$^rWY¨*’ò!#W*ƒ¤g﨣ž{Î( ¥è:Ò2y³0Èä³Ç@±¾¬—p^Ý]’þd&dÂ9­Š-†ªR!'õÕ˜š}6[,…"£C Î§»ûU€U–TI… ¸ˆT5³,M—H«€¾<:Dˆ•T1@`ZSrÍÚòì~åѸ»>(¹'¥GÑŽR2š¦¼öß=øºÉf’ÑGÛ¡' `«·Lêàt#‚£)Gš ØÅÆç-¶ªãÑL55¥GWX: ¤’ËìôLáF GdUR'3×RÆ"( P{™†©3÷2Ø•£7UPùÎêý†?@à¤#v€{>ühs®^™ÚŸc7è÷Ö^χáfô͘®ù¼ôýxÇjÌ|îSoŸùÿž]ö¶Éûý€7<Â;¯NnMÉàÝÒ˜¯ÆŽóó°¼Õ¯lˆ‹© 7‡1iJ`4³íÇ¡nÉÝ“<Û/J£ãÑ¡ s^¤2RQ"²iß|jFM]Š:E¤˜ÔÌYÔô„ 7ª^Üy¹œïÏ‘½‘“ÚA¢1‡ôëo¿{×èÍG/¨àiŠTCZD:”%‹j³I²J á{•?‚3L  †±ˆ- ŽuT°grwÄ3} DíÄ^Î::±ßC:àÕ1’á9åš}é¥ GAiU ‰Ñ p»crÄQ£9á°2†åîÆ¿i³¯/<‚ïˆ_F5.dÿ9üþÝ=Üy{®þ6œ¬åþßËÊB¯_ž`Qajq ö›ÖJ©sÆòÐ\jÃÛå !"ª›dtŸ$Ñý…Ýš”Ý'*ÿ¼½H±þQãšv’Ž×ñÒ““0²}N@&e]·ï÷íWãÔÓ1«Bní[Þ{Šbî“Ïsùz믒Ÿ7Á»|éú;ñA$|¸„ïC¡?ž±¥Înrøï»ì‡œ˜ûÂû/þÛ]­W¹ÃIU32$Û“¢! :„Ö‚§OO3¾ž.ŒJ¥)á/ëúÇj§õ·_{~~öq]¤$ÃêÙ ¡ót:ÉÔ·`cÞ‚áIå•ḽÍ]+l1QËgl¶¶.Ùì´“]m`QgJ\èˆÛµF ($»näÄd?zøÕ=0[DÊð¤P j’¸xX :A¢¨TÊböɤлgV§Y @µFJñª®BÈ&M±oÚÜùÏ]µÎ9lDv‰ôÆDµF$ºœÃcG¸G@ÓTÔ˜3Ð"®d‹§Ï§h¢U†Ð#ºd†{8[ÔÃMLªÌþR¶ ®¸©ARÉ™é´,!‹ÐÅL €4úæK4ú'qyñõeõõ†¬CÖG:g ”''ª¹g>ÏÛ eLáNtdÛÞ/ûÞm Ó׉á€çÈG˜éZ 2ËL(5L}ÉMnú>¡UQ!-#ÀÏžå—3¯.úpÊ•>š×—‰å †z*6ˆb 5å`«¤ Îúwç<2G8i¿Æ» ï3 ó§p ¶<¤ÓŽ1Ž]·êNúѸ;ÁîžÞ´NÁí66þJ0å'ezÿ‚lñM§_|¿uÀëî}¸Oú^cyœ¶QÜ;@åÌ¿¸™—›^Üc¹ëó©˜YÄñž•_eŒÓ†n!-Á®0ÔgIs™Ö’îuB£‘Ç“ … ¨º!¥6Þ˜áÜ·0(ƒR" ·Ò¦‘ã¬4©A3©y&wT …† µ3°¢yãΜM U´ª‰Ä¢¶ˆfÐ6w½ ˜æ-Ì,óº¸õÑ78Ø yH£Â€THPÈÒ{Îè”*Ñ#P0WÅ P†ºøÈP „ÊèZ8reÂæŽU(&ŸYµ fラt%¸u;ã^’·lpý۶ѪS”ñÇ,ëuÒˆ<†#wÚñåxç¸w\úKù樷{Têx⢠"èVÔó%¨§Ž¤v  ÙÚ¡£‚  $ûí0/FÐd[›£|œù›OrÙËjsð·d%gð7ûË ÍŒmå€Áˆ©wE‡”餡tß.‘Ž·°W)Ö㯉.Ûî‚w8¼ ßÜïÂþ²|}ƒnjdÞ×ÿJ»³6—ñH;ÿóì=Ô“ÝþÀÿ_¬ƒÝãJÿâ;¡%•T­"¢Åå寄@RB°3XNC‹pkœ/—è`‹óù BU5[LTÐfƸ¸g'!VH%¯‘zÂRŪE o¡ÍÜgCœÎì»k«  hYˆ’¢S™ÒRXEuTÍN3ÛáŒp [ e2-JQ’ ×ES ˜~œ€7Ê—Õ«ökU¬ê/¿<›‰}2…^^.çËÊ«CĪȢZ,š % ¶ˆ¢ÒC«ŠÌus¾êC6€xPfòh¡2¼©ÔìRˆ'=ébaŽ [Ì*Rø÷ßW÷k0³çç§ççgûŸç“Ùùeå5ü긺_Í¢ˆ_yyY}õ¦RáLíéÓSDLš7//«;¥"ƒáî)¾Âyʱ}²ÔÍ–ÕxøxW÷,Ev__\DŸž,î’K²ùIPldªÔu½e5ç éwUd…›U´­?ÞP9¦MEƒsMœ§ Þm0dBñìM ÍÌôØbÛwwé2Õ³ýêšnz0cƒ’m J©•*8åÀÃ,@© Íj‚Ì~Lðž°v Ã$ï–;oï'ooÞ?b»ù¸EïÉ7”˜ß{®ãI>D„ûš½ch_ÛûŠ}GÐz€½ƒÏsó¬¾fºyoû׸ë€/„ÃËÌ–mG/7<ó©˜ÍÌ#¹éV5VÝ7/¾“â´{2óîZ*èö‡ÇîÛqЇœ3g}êžwšÀ)qçFÈÀލ!M²\%t^d1­K L1•\a ŠÇy¼M£¾ÜÄaŸ?ŸRHB‘­L Pv ¯ùC¶ßË6€ôI|•¹ *D’<¥3V6‚t-à"ÏM‡0©À€ížåã=2‚=, ÀwH ¬¹ GtÍ¢Tå²E[H(6™«ýÝy~tuønšeÚúœk×fòÕA}¿‚~y˜<Ôñ`ºÿ:n€Ðô"kh¤ã«•€ 0b¸ãìéZ¤,¶0e 7VNªC "C0e„b"k»¼¿ÜÇ·sž_ (æ‡s)÷À“<³uˆèèÏ5“ú›Zg?¨‘çÙndfÑÜwí÷˜|ûî¾ò‹7ðí­V ”ûGažâ.„Ÿße¹ïlþBg˜þoa·<ùÃø­;5’ÁׯÛ7yäÂð?ÖîÒ¿¢Â¦\=ûÑ'v[¶j¨&-ØÈNwzœOŸNO§$‘d­ŠEžõ—À6q>û5üË ÂN4[x©0cäAUFfÏ‚€;~u\aj¹\§TµT‘%%F6þ˜ØƒØhÔÑ#0›4 Ó¹d=·â¨XÉZCšH5SS5°Ý'Ùf`*­ŠêRĪšÙ¯ÿùÅTÍ$£ú²^žŸ,eKð+†èrèeÕŠÌ÷¹@ õìá1râ …*Þ(p4aUP FvKÎ&:ÑèΈ!¢Z²ŒY†oZT‹{bÝÞœîÑ ÂWgD±äóbºèéÓÉqܳTIªØ¢ëzqgd£$Žl¿™=}>Ù§';Y¶_b 6dç 2×"<颲¨©±Œçóyýcõ— ;¤Èó~UUˆ¡z„dtŒ´jæNíô$U×óùü¿g´ª ZåôÙT-š»ûúÇ*uôd€¬ö$@DÄhÕ DR¸ )°jZÍªŠŠVµE *U¥Š;Ï/—Ëe½ä\¹¼¬f¤ˆ_ͽ¤VQ3­jj¨H%"–µU¦šJ!©ž-”ùÑ*RG†Á;î×p÷L ¡U)zZä¹* ¤JN÷ø/{WÏåHŽ##,R «ë,µyÞÍ?¸ÿïÝþ‚-YSe °’´°ÈüTUÝ=³ïÝîç½µ¤L1™IªU¿¾ÛõÍn¿ß’ä@U©tÅQU„Ziï·ËË™¢¯0³%ìíï¸[´òûå"§ï¾ºÛÍ./goæofR!'=_.¢¹¾Þ¢Eƈ%û`bɾ:–ýÁú©ÂÛÜðÊØQ'è¬EÃ¥‹õQškð'ÀaŒ:MN+Ö”ä‚h0wªj‹67cÊ«ŒÍʃ°s'r´“K×·Osª@È5PeìÖ™} #“èDóÛ¢ )° ÎÈîÊ_¡9‹DGæ}a–>J.ExR©D{ >˜–>áF„Œ€TN#æ šëÇÇk×A£èþ­]«ûõt†å:ÐvÎ_‰æ]©³™ÒÖx´}ôuóµd† M`ã:ê r;îY¹t‡ŠÓóŠv/Ÿ ´¨zÛꌽ²âiÛ8rÄŽ„2ʳÿt#¼ýɰå‰bÜ󆡵éL-÷¶3Ó€©ãßCN?Ã1}F_Ÿ¶tÖ`ÊøeÊhÆïØ’wEìú0yó§6!%Zž*<ÝYsÚN$s˜ûw kfÍrŒIˆIÚ•QÖÄ] ÁH*²™YÆlA) =I„ûbX©T¨še–5b(²@N—ñ£-Ñ“£À)Us’Z3{¿b þ—Äï×0»Þn)Y æ pyI±Éñ¬<Ë™®±˜¹åê§•*ª'ApH}¤Eje5°¥†DÖwv¿ûZ× a Rá9FÍ’‰/°NؼÛYþ » Ò+GAZÄæ™¬Ë2Hu.>ü@O²2öŸs RÖkOÀh"ì;Û°lWÇõÏ“¶ýüáâc&/ÜÒ]»×pypwÇùÜRο÷Aà»oÊáûûÆ3£kÉñ-—Š;u<‘ÿBð_m´'·ÀT–f1½hîÉkbúNuê'7×v ²ê9*`J%U؉zVövõ¦çîHÖo êííª ˆ†HÛ%ÓAY)'QQªª0ºšÝFÍPŽ(¨7g£œ††ÇF]#T–YÐNªßy7e2 IDATÔR…˜EóüéA¼máÝ…=¢’Þ|“Œ(H¥¡ð"S ènXÌý*U|ñÛ»YþPŒA3CèY¥ÆõÍÝ‚KhÖ{LD±ȨžäaKM”!¶ áJÜ%Š ˆ$øZq Ã2l)yBáØâÜ/vrŒhdŒ¢—Exâo¿ýŠ aÍ}1¬‚ ÚÚÞo¯¿_£…žHÑs" ’*5–Aõëͤ ÌÝÌb ×ËYQhFVT=2+f¥$QzïOÖJÎ̱È` 󾆘‘Þ½‹c¦Ãjfaçe¥IÕéÃÑ=ôdp.óÍiÕå ï`ì4Sv&ϰuâ°¨OfæpAˆŸ ‚mîà·± Ìšå+»Ÿ<ØCBï‡è$?ß{~Y«/qÜbÖ býÖ~?ŠÝÂ^æz¿^᳠׺tôÈ|RRVVýƒŽwDuL.ý¦týÅîpן8¾¸sMŽvyÂï%ñ –ùÇÛØmÿÜ쇽Ü9|u}ÿ#Ú§óì‰üc'íO2±¿l9ÀÿÍ?x}øÎ¤Ìm¼âæÑ—ˆîFêâQUª@¡Þ<«¿¢ÁÃ$¡¸"hŽ*"@GdÓùñßßUU…èa‹›…ùÌõUꉛW–2˜$UåüMUÏrVV‰ff7!`©†‚¡›Bxx¬XéÊgNRq¾#´%E‘!€9ÁÀ9w‡oˆ<Àæ’@x*ED‹1³º{ Ç8+K¥ªHfTâ=nõæ‹› ("€¦ÈDw›Ê0÷[{F„®Þ¯¹³ŠVE¥#°D,vÍ$áܱ€¨…CD‡êÙAÅÜ¥ºGÀž"Ã0Õêá´"WP¢ùõ–Žº±êfg*dT6v»*ç0»Þl 5Gƒž.——ïzõ¨"\*YÀëë«dv¸·ROª"(Ìð©y>cÂÂ@ÉDÁÈ ¾sP ÓQäV¼Š™²TV.ÿ³»»D&ÜîÔeç3¿››ë‹ã;ìD£o® 3òÌ1eÒgMCjK=ZÑÒî;1˜ƒí—‘«JL=sïNP¾E!BòOž-Má‡cTñ“r²ë9â,š{ú.Ui ®{ ÃÀG2ØâÇ$ùMŠêIû©÷k×èèn}½íîNÿØ@çþÌÉ,Íÿ "úôa¦Ìøçý¼so±ëòàýÏ“ ñó_jÈ=gò“þùûžÎÚç2­¦©/5A#N?0_v.ð§v|ŸÄç‹Æ:KSHâð­@x”©cyìïÓç &¨L×Ê€ê  îú¦=6£Ö’ª­5øúiÁ®ð<ðÙ<ôj•¸[—©yÕ±?|Üßà )ǯþÈú¼â;?‹p|ÖFÆõÆèÞÚ¶ç‰pé‰ÑËÇÚiÿŸÛ ÚÏ ó¾רÃofûhh_øúËþ7jëüïn nfî©Õ ³k½P•T6Æ;x¢´ÈœSoP7{¿¢B ª‚‚¨¨pü‡êÑdTBT*©—t½­‹¾£ˆH¥žõòM© À‚™ ÑÉ’ŒU"e£ùî•KBì :VzKÏÚ7ïôfàÁòf7šÿ–þÌ,ë¬ôð°Ãm®o}ãÝ\˜AÚä0‡GZH©²rVWW–ý::iøÆdcúšPGd"Ñc7ŠƒêŒ¨sMOÖ`À<'(éE ™aÀóØh3´»Ã¼£c¥xyŸáßô€÷C´ð -m•Y*%êxl?kLp}à>¶"÷.îÊwEâYÉXÙuf×î!‰õ¸á ûª²v xÿ‚«|ÿKZë{“ÎÒ&XO²s´rw/Ûë]{¬ÀüuÛ…~†ãÀbOš]/¤ô•I+éÙ–UQoþÅæýx4Fre™~#Yù|ó¤‘LÐ(SSÝ[²ú-C£ÃŽuý‰(A×€ôåEs‰ÜÌU.#ž—ÝÐJVÑJTQ„И•ÕM©¹-d6—*Ñsûð(":Ÿ×KFxç âQðïáþö‰(Å3#uÑ»øäãyæmÝâÀûNè©íˆQ Ë äNI¾'õ†~§bpŸI1³ûìåÃ5ní¯å±í¥Y4ÖùhòÎé9w¤äóìÕ|Ö¿Q³"FÒVr*UÕ–¬½§Û’2¼úä`ºÊ°‘r3bR«<º¢Ô_)¸‘,ØÖÄtÞ0l›lÛSF$ >óß¶PçîúöÞïQ3âî& b㼺N äúˆzÜÝ‹_ŒâÆ@¹õñé3óÉ¢úÑÖóA—„tJl›‚ì­š?Ïn;"RIûñö—üoÒF¹ÔîÑÜÞÍ[ÄbÞœUÐÍ—àíš9¨çoª*æ&–¦æÑ"ušU³,êZvžyÇ3‹ET 5(*ª¬© 0i½ÝéE“UVg2Z˜…½]Í2ZHRy5CÄp*V™Çu® O!ͬnÏÃmq,B*ñM™g2*­S Ec•“ŽXA% o×›/ŽWö~EžôûºZ™ͳ⮻©¨œUU±Å¤€Âá{¤LL²5Lé ¬ªBÌÌ+Ð!Ì|cA%ˆ××W["܈UÈš(p3P¤Š/#]rJûÑõÛå{ZZ3`&E8™} {3ï!ª¡g•*ÖL‹°Š.àz}å÷ï½0yàKØÛív}E!2ý¦ÊE 'JU©´Å¼ÁÌ“ (¬”Ï ˆýÞ0ãȇk¼yTþIchÄ[röŸÆ ܤ ØòÞ«xfR ÷vÿÊ *Ûulè4‡ÇŽÜÁˆLI•1蜥ƒÁ<6š£…#XB(‚ÌñéBèIýj· ¶zbÚåY$9éˆü¤ÒŸ‰pß·ìÿ Ì-Œ°{?¦–ìp«îÎ}÷o@Bž\Ð^âClüŸ64^‹Ì,ÝñÉÓHÝUÎÂ&6úKôp÷>¹£wœŒyôîÎ~rÞ<õÇ‘+¯x´4 5Û˔֋´ï“xbƒ›¹ýújBâÝå$,Ð,åtˆ43àN!M"ŒœˆRŠ®Ã{ĤWȶV׋ªYö<"¼¹eúgx4C%_4ó‡õ¬¤œÏ–Q½@ ÿt·ÀbÚßB†*.ЦìÝX •q % у,î(Œ*q õ]ï~ïÏãG¬Ïœ·çñÕæóø…¤Ìø‡‡¯>ð'íì]»v+9®ÝˆHE@EvGò‰nØÿÿ=ÙÍÆŠŽa€õÐÃs{îZݫؒJªb±HØØ¶ßñâÆ`þ"ðSvùšnÚ6>;Äm[r”¼-Çd„[ž‹ÄTÇ,òƒ*Ñ]2[Ä›S “7ÖL;úÙ2ä%Äa@ÍÌ!âìe ®ÓVËz\%Y¦ºÍXý·¤Æë[¯Û¶ŒTÏG¿q¨.÷îÇRªd—øðÈpxŽ’í—Ãx}Ú¯€û§÷åéq§}`œ ýÒ6}ÕŸ»KéÿÏZÞiP·íÿœº¾…O¹Ç E ‡Ç® à¿Mc3„ãîÕÕQˆN,@a¨¸žT&ñfÞHDà šaµ 1Q%k.‹ë¬áUuTñòÛ‹L74†°!ù$Ru ¯&Wh¥Â¦ª:Ó‰,ì¥ËÛåòóõ_ÿþ·«M/Bu ûÃÍ d¬]¶šu´¹ND4©ƒ:ÔçÔ?dÑ•„Y‰25øuQ ÃQSN<eO[‘+!rY=2=äºÀòîX„EÄ+AÚ>EH§éª•VB#Q æêF6Š•Ñ|Zñmwv_ÙSFkNB#*ž²Ì! È“L“ûYß.pÌ€uè<ÏïÞŒˆd"· ]`¦ða.®ïU…czžÜaÝSª0¼(:«uÎ:i’tœ ß‘a혀ÎGë÷ -W¼ù@¯wºv&?¾Àïo²”_å!2­™škƒAŽä8ù­D¯÷pÏaµÌwýY7߬e´`çZ‚TUâÌ ØaÞÖ̩ã¾ÖÍ¢2ˆ  DA©LCËYp%u|;úI·c_sBnÞŒJ›-IŸÙÀ·¿¥ƒów˜¾~Õó½ó~·­wö*õ¯µáQñœ¿ÒÌÂwºíê6ý xG“ŸŒÆýùêµo;ëM¢á4&†L¹È†õkÁ3w€zgH!Ý1 €*sW­$=CX½AÝóãMš§ÝÎê™HÏ;¬¹¶±„«Á™#M …9˜ O&ÄT…*8xì=R Òz³UÍá6h3¼ÃYÓ P«jîNÀp˜9F5éuo\ÍàuÀÆÛ1IeŒ[L­ã“ÜÛÏkuƒÍ}4«wÈá±(¨ƒ_ˆüÛ¬ß/µÍ<é${4Ú1¹Œ³û‚f…¯_ˆ¶Ýã¾›èÚa@õævÐV–Œbϧˆ,‹Á®à“ÌuÆruw¹ùÞ¹‹íìdz9ﲉ°èd«ICÑ=màaO"ªX# V"¼²wç ½êòÍÓÜOµ;ç£d]mö0Žt! Xþ…6žéÁ ¼¶ñ8¾$ÌÑ¡}ç¯Ú ¨\ç™ö_Èßó÷*&|Q²þcÿ]ZB㮦ó›šêùù,ÏÄ‘'ð¦a½¨’5gIE\*áùLA +@3 A»˜ªZs®‚JÌbͼe)+ †›u ªº(TYN®Ý½Ù¬ôzy5@š ÀšêÛ<¿]ô]ú!r~ž¸Œ4’‘ž±0!¹dd«˜‰ 5€uÓPz¤ZèFîGëCfSæ<5O—¦wuw,ªÁnü9Gþ§›#ÆFNḆš«OÃÍ;¹‹©ÎjºDÕeBwƒ3[.êêR‰jtxs´ÀìÝÐ4äaø åÄ€Û Aï2.BÂÑ-'™ž&9±'³7FiJæÕÛëåçEßÕGu{m°ˆLÏ“ˆ„o™EàÈܧ•Ḽ]tÖÈ­Ièõuænê fæ$F ¸E¸^.ªª¶8&—*Và ʪÛ®¾R§|®!;rš±ÚëX» mÐäÆûÏ6Ë@— óæ3|ÚSé¸pÌ×_m˜ªÁi@+I€‡ƒÚª…7×@¸¨²h€pÝøœ ³ ˜uH78y'T®ÎøâY¡ä”TϽX-à¶•$½³á¡º’è€ú¹¤8†UÔv’k¼¼ñ²î•ïá6A¤ô‰Å¡¸Y˜ýtÿæ’ûVÖOïu8#Öîݬß4ä Üß©CþÅÆëŸýgýAð'jÖ˜¥>¢Ðï ô/5?ü£O{òHY¡ë+þµ6.[¼:ÓÆáÌY†z_+«8Àæ†HdíRKªä– ,“çßKe_à ɦFX†£²’8LÔ'ó>¦aQàÝP0’E9ÏߟÈøsó–nµ]‡UöŒ½T4GŠINûQµ›7T†ÂTeúMd2[D&±æº˜š—¸[vxThàûÝf7Ôwàò½Ç´[­¸6ãmyîÕƒœŒòHù4c+³O-Ë@€€0¶Òq¸Ëæ-ɽ“ÛAÖ¬ ë®moó™Ç†Ct;s¸ÚqoÜ?~µÞöžÞÒá¦èعA{ Ûøêºö¿m°f„ 3½ÍÖeÛ>è1øhWމ±K›1D+ë˜r¬@ž*ßXkytGM®öÇöçõã½²ãÃý!ŒèƒŒðèJ¿˜MÊw¸N~­=Z e°Èб‡5ÿ–TçuáÚhgÖÞ6Ýþ:÷°Ó6oÁ²+pëøïÕ~VµEÏ8ËIX‚(¥®‚G%RrUÄ÷¨,Q³f‰‚šªš. 0*ÎÄR ÚÕj®ªÖ ÐÈîlU3 áG\É+éâ¦zyc” \)ò«¹7°Lg™„ND…j€ É5\Öúfü3#h+i‡wõ>Q&¹N³6°ÉT {&A7P”‡a†Q8–ÝÌT4MÂD„ jë¢RaMBEssUs3*0€‡ªEq >­æ VYtbBs7G8ñª ÍCuóU“è†ÂÞÌ p‹ ÀᙤSVúÑ÷H†äRizž²ÈÓ¢Äg %°Uu~›#Å—5[:b™ ä9K.Eܯ5%Âùizýß?.o3€ßüøñ?¿Ë‰¼eÙIsGs' ¹50\‹„w'ŸÈ¨±¤ƒ4k0äœ\Û*¯â‰rÎÑ1#4nµjºû)V øM9VB{sX¿ ù'ñ]¢$;š+ŽÛï¥ô üòÚ½iv DΗðxØ?Á¬hNäàf’@N~•,œxeŠØÈõAcc ¯¶}‚AÑVH; À›ª?·íÐiÇÈíH{Žþ^cùóøóuŸ2€GJX¹ç™¹íXÜ@I%ùêûÇàï¶Í•}ÛÜuz=°ŠqTÉîä€ý/µ‡Ÿ´ü|pÞ׸+gÎÖò„±ÚêN)κZcÞðj2ŒÒq7ƒØÜ4Sf>)b"À+F6 ·Æ€é»¢€:s]óÿÍPS=zc@òB/ïʕМ†¨uƒû4 à^ †!×¶u– ¦°¥Fì‹1"7TiW0»Y¤lêÍ­Ž@OÕ]=–dE˨eZõÆ™Üè)WOÕÆ8æÚ?Ç-F1žÇíå¸öqíì"L |gÞ8Ï×@Öï.É*wöŠO=Øùft/ßïGïÛ^,¬[S<¾Ý0†grNør¯“W6êv–Í@À ¾ßiw›Ž#X4¸egœgþÞ„]xãïW¥†ï´Gûçp[Ù¼Ðé}þÆsçÿÛÃßñçî«4VÓËu‹Dz i_mißj{øçœGí—!ÔÇ#Vö›Ï·zqU¾#·ßþªÙ3®•dÕ³¿:¬â¿ü½ùØÛÀ¡+”èO+ üáx8¯±Æ5żÝíRt*c͘ث2H*OÂÓË$OÌ'1ÇgÈ0k®ïjm†ƒOåd’ðZS€æ·WÍÝÕTß^™Ù_^⪮ó%R‡t<ÿö2¿©5צ!¹Æö§rkêªxž¸9T3³˜Î牟„˜¹òü~ /"Uä]ý0aIvH%Ö¯Œç³uŸ_õ2Ï(˜¦ô0Ôâ¨Qáðî È“¬yzÇ€;Â,ÌòÄò,è¸ü|Õ÷Ùª¯—Ÿº¦¶6€*|ñÒ |"&xe+J1 ¨`&f2€ÍÔ Ö„ê¾v!CµˆYˆ8ÊßE¶•Œe Œ8Jáxyyñ(hpåp×ÜMQÉžß5ÙwjèðæºXäd:?ŸÓýû$R9ǰÆ;¼ùëÏ?.o³7›žÏ?~yù1¹êe1ªxy9«šžÐùY¦ó‹La‡¯oÓ$2ë¬Ä¿Ý2M:zÊÅÀ;C<ƒ°•ý4ÊY}J|¢¨]j.™BóÕ­3Öìýà´U‘“Љ¹™c¸ƒÂå”I¡c¦ÝÐŽ5d‡ È13`-’™±ÀÜGr5rÝ-”c•LëÍÑɪ E“ÖÞ ë¶‹ú»k¡ÍŸàP³œÃcߦJ@ú©§BÉ<ï€ÛšþlTsñÙmv„/{}÷èúÐöõM­¾³cÈ0cbx*HíËQ s"?€Gƒ1X=ý{á3ߢͯúÎCYqoK½º/6oe]òv¶á­Z“ܳVÃo {ÀÖ÷;ÂáMË辨B\)Íw_¸mùŒèæÃƒ/‹¶38]­²ä`"pœ@kzÖ@@¡±ELˆàH7»rvv×Ûì3Gø"ŒËm}î‘vaÜ$ ê (3ÉI(€E>â~¹s xWD(Ⱦœ´DÍÝE¦³¹1Ūßôlƒ!* “¹{3ëAM 9ÌZ’ÎÖŒƒ2ÝÜÝpbaV@ÛìÍç®XŒ™&0K¥©2º¨¾©w‘.˜U­;‹È““¾«.¥æÑ!¤³*Ø%7뎬2º¹›Æƒ³£u+šÖ•›ePE°´¬Á—Ü5 ÆÚW˜Ë*²Y•êàt̾íæÏ¸ø‘Ï,äEsdgonÈ8í>î÷PÖx×¢nß^ö•ˆ4"]iÍ»ìÛê϶-aóÈ9Fx»‹Ø(È›œX>Ý5¥h\>… Q‚zhl1ûS•¹ÄÇÐwõOO¢ufXê'>äTÛê~{w¸dI€ÁÐ÷ àR²‚4°Vâeƒy7#æBÔÆb/Q@ž¡–ÁÛ¦ˆ¢÷a¡’w£’Õ1½­9 ³®ÄÃ䯷cÓÏ€ö¹Q3¥hÎÐü¾Ee9Ìý£ ~MY÷Éݼ§}”Ó˜ ×Ú(Cc¿GAÍ8Öé]ÏÆ5¼2yOùµ.<&RÞõn$jÏÆ¦Á˜¨ë&_v½/=;µÜC¿ëö²ûE< »þ@Ùj~$=¯Ï5Ö],À–¿Õõ*èÅõêŽ4±A œý ƒsîr¡t–¿’üO;´Pß±æ“ 67]ÜÜ©’s…w{U £‘NÄõL‹95÷ŬÝ4Ô¦F¨Ì'&o¢æ½xs0dŠz?–Â1Œ«É'É%»ŒÒ?À…Õ©%³ÚšGšš+2=O0讋2TÆÍ.óE*;@§l<'îT‰œäÄV ¨‚8EšÖÍÿÃÞµ³¹•ãØs¢KE€"»#•£í‰zþÿ?ØlÂÝhJQÛ‘€Hd„ @ò>¤*»<3Aïg¶JºO^^888¸‡{_ÿ¼šÝTõËßþøã¿^@üóþ‰pÕËùs×_±›Dsª¦ïMaÔPu3ƒ²H2¥çDƶZï±Yÿ¢‚ŒÌkê„ç±¢ ®ûfìæÅ(ôžÕŒ²NVpCÔÕ¾—«¯Ó|®ûXãëxh}¦] ˆ0ÀFDò&ÇY7Gô Þ¶T\ï6Iiµ$ÒçÊ4#\;ª×ÐÞR áCmíÉ7ű~¸½¿ûÓ‡²ïÒ¬—3r öÒeQ}h¨î4Ÿºï¿ùÿñvT;ƨ·ÿ¾é?¹ªÃõÌþgUOáY>zkÑY‹å”Ø|wÅbßAÂwœŽyD'¡¬‡“í.K>µwïy{ÝûQ“êhž²ñüx "P ‘3*v— ^ÀêtQ2Í_/]N\ =`Íð¤yÎÀ½‚Z£¨6\¿Þº!^çÛ3=´e½­ü7…ˆXåVLr(Ê“¥Ï€Wäê¡Eôœ‚ˆÂFñmø¼ÌŒunOÿ¡®¦lï|¬OiêsªF‡.6ƒd€Z)|Ùw–k·yn[ó‡ÚÎß½W¤ÇaêŒJEï\ÊwZ_æPL9Ƈéb¼g?x½q¦ÝÇçSã@5½l^zÅ>œ®Í¹1VX– ¬vð¯–} p®ty¼ÅåÔyLQ ‘LŠ!`1ü%aÆr-uÚXELò ø˜DùȤ{଱í”Ãñ¦•ðs“{¾Ã>þÀ¸Î.]D>ÎôÁ{ì·Úì§~08ñcúñ3Ò»íÑÖúñöÏâ»/Ôó{ݯùù(„*µy…¹"iÙ~9ÀÙ6ó¾ø·074è'Õ³rQ¿Çëë+ ¡zÑeÕ(ÂêfŒo·«¹v*tžŠž/ç<ÅIÎá©q5ÒvŠsq9©ªúÝÖÅh!²ÈDµhÁÂ˧K¯—KÚýf_¯VÓý9‰œ„E¼!ª÷òŇwp½ˆª# IDATD瘣8ùc…JàáZÝn;SZZD2N‹È†öIE(U=I¢Æ-ÌkÐ ÕHš‹\.ª'e‘I¹‰ê~W3ö:r"˜Ê[7,¡J–;v¯!)b‰LW87i„è®,@–A¥ËÓog†¾0K×E²“¹ûÝÌ,,ã;¹1ºT?éËo/YúØÝ£"*„¹EV—uO6€ÄJ¾üþÇå·3 3 _^þ~ù¬hxýzË5×r73¡ ¼Á«nn©Âjæ½f_1Ô¾¦ª*Ïäíaî‚ Y¦D[ÖF,15ŸÒ€ßM€t™ÂQ‘të¡.+ê]ç,¶;.!ï¯>9ŽÃ—)×#¡)ª¹–ëMr i‚Sºµ"AY:ËK¶ú"0Ó• Dl¸ ²ÉîÜ’>z€Ëƒ@ô¬$¾±ð?[$§!;Päã÷k“ñL§a1&^{íëñF80ó£öç\ ï©Å>ýåÆËš^½êø€IóÖ¨|jo=»ÈiÎC±Œ±³Ù1lá %z&Þî ºínd¤–̈ÙÏ™=ßi|ÒmŒùõröfкGîÞÃKŒ1,¹ 6:s³=U¬Œ2K"›ÃG²µ«‡«¡KUÙbrS+&Er 7ŒÐH i8”õŠîN$A´ ì]T=<ªz‹,|B™$cŠPN ¾¹WØÝðÕᮢZŒ'ŠŠ&É9©:U>ËIxbTD™BР殾š¢9F‰µµÒþ)_NC"žÖÂõÇÞ³A¾Á;¶Ÿ)‡C¬ßLíèMñÃ[sÌe=\Ï›ƒY6ÆyÖrÄÀƒÖžaÖ)8^oÌ ËÐàpÑ;nÎù‘Oº}SówÙ}ñ.ë ;À€o®"ÊEЮ¾P(„¿ïUxsmŠ®îAé÷°š¥1<Š\7¶xe ‘ÌAè@î’e®û–Ìõt3K÷{I2örä9>oï-›ýGf®cÛÆ“ÿ­€–"—³˜m{ÆeeýjÏÛqµùÑÞúåÿµÛD¼6 º²\.Ÿè·ov½^EUK_&¥Ð•Ú4€›ÝºÏ\D›¢~w.Ô¢&¦Aᥧ5²• βB¼ ªßRK)Ó®H,:]êù¬Ÿ¯õfÁOª =ðøux¿ãæþšŸtߨBPž¢’ù x¨áJÖ”ÎÊóûÃuðÍ ˜iH´OÂ"¸›§îÚ§„ÂeU`™‘äÞ x‚,`‘þúÕÑ›³¿=‰¼ã?«XÈl²fêß÷œÒ!O>¦îŸšü·øÈZs¼šÍÙeX£Vû˜ ÛÃÆ8ÌÞ¿öQöÍóÅÓÉAv+à¾ýr€ÿ’íÏì…çŠPBOd‘¬A„Èy–u~—äjŠj°(˜õo< öÍPU‡ß¾Ý2³WΕµÆ¤G,f@DD »ÇËog3Z T“€0Kùùó%Ìb03ýî)m檪çóår%ª;dÔÚµ‡˜Ú`JÅ´OªÕo-üÞ»A3a¦ §}äù˜!êÍîFZ.·æž}"‹H9–±R ³R4¿Þ5Ì,"Îå H4÷{\¿Z¸ƒ”)«•y솔ßanHéz¼vÀ¤Ò$dÎBAÖgwˆþ7˜…–[dÃJ‘NɃGoUq·¨Šæ^áî¨Y„Ùíz3sÃ"ù˜T(eãJªŠF»Û?þû,›D $U$IànžpZx8¡Âx˽ê˜ñw±yÇþH ‘vC›Þòˆu48‹÷ûxSv²mVñÒMCÏ”§…}áÙ{Pï¹xæó™~–Öó6@º¦Þï(Ùž“…4{z´9ÞT ÁhX0¥£Æná·&"zhت@¯Û\Ëx}¶½ô¡Ö»ô|x|½o÷ÆÊp] q¨æQÃárÄ'6a¢ñß1¬ò/¶ž¾Ø€e Ñó3 = ¸·;M¸^¤c¾vRÃÖ޾Í1f»»¡éìöØW´Uлü· ;™2Gð¶óvÖÕOufúám¤¨Ä;Wà ;ÞçÚ>8f¹éLhŒ’Yî1vâ$VÙ˹å«‚²I…ð ½ä‹ãÿsŠiÝ$L²¶| ,Yù|V7Eª'fÞowÆ<™†D~¥H®ÂaÕ¯Õ ¢ŸÏúù¢…ª w§Eõ[ƒR# ÝCÄ”¢z–¹ÄbÞÜÜI‘Å-Â#¸`-º6;7½ßŠôjzµ9š  7<æƒ.%pxtC(9U?f¦pY‡r|B^X#ó3ÕekÄoécLÎÀþhAßÀqÖïd·Gèè›3˜ÜAC不»%›}gQÙ`FëðÍ^8úÀxð~ç‡TýÝ:ÉSõcÛ'9hó¼Ùl°»[幪œ$;­Ìû`_ß¼‡‰qS} !(52•zÝš”Qˆ!Fq‘L£ƒBŠp! bˆbkÿHÿÞš²ëÉÞ*‡ÓˆZº51~±¹_Íûìý÷XûÃßWÿn;Dh~Ù9¢¨ë}MÆÙ[…¸y¿½ÍiÆ£'‚m'9ÎïöÛ/ø¯ÖR”o7×b•âèÀópi²6ƒYZÿR¨Ò?˜¨š–z¸0êµj=A?©ª2×½ÖŒET"æQñáÑ%Câws@‹P‹ÜìõõõõŸÿû àòùüòûúù¬'M^W»˜Y@Þø#@¦9…GUEõÔ¦êrà¨U³dX˜st€YƒSJROTÕÁ‹îj°F­Ô¿{Üê‘D»ÃÌì›y ."Dfÿ XÝáQà íJ) ÑE3ï 5 D§UºœBfè,IzƒëeEàŒ^òÊÝ¥ jDµlÚìÓAˆÈÊ1±´7§zkßÞþ#fÁ¸ˆñ@ëüíQÑÖSõm˜šþl“홟\ÓpcMÿ~’»xÁ­Gß[U9ÝhüH¼úxM@òcÓn½õtúÇ>‰îCë–¶Áçi5Hâ@•—Ïýt¾ºÝn†oôÚq¦œÛÑ:ר&T$%¡ÂÕßeÉ’ gSB(oÀÑÄà¨ÌùÓGý$kîMdñ)¬šÕÀÝPT8 ° É!Êqဂnaõªæ‰S{ó| ¹»Ý»Š^òDÆ=¹)±­?¯1³KbÓ½ Çµ8JùÙçC¼`—Þ€A3i…+´wÄ1½ßµ}“'lÞ1–6&ïq&x"Ýðœ\¶¶SM²8óðÜ£\}8ÂÕ㫽¼w}7mµÚæ»° Ü©O9%B$`׋4Nîa r‹H‘ÄÊ#à&FOÊÜà¥+lÉÒ¥ƒd¡ŠJÃÍÃ#ü1Ã4½â.RX ]YæQD Ñä g¥ô,0 ºØŸFäfëáæ Y1óü±}U粌1®öÙB6GE¾HáÈ‘~˜{³ ăñß°€æq‹áÃÜ}·ýó~¿›üVóÇ8¾ãO’$Þ9Ù/ø¯×äáOo9õP ¯îÕQíD,F…ß Í£ˆßCO$ ' D•,Š«î×Nmâ))À’n*¦ž$s P2Μ٤5¤€i©#ú:½-®n¯¯·ÛWCàËï_¾üþ÷—//"òì]½š#9ŽŒ°È´YUcImmŸµý÷þÖ¬wkäUY,1-œ2$UWOïÌÝ·ó-ž)•If2I@`Ro· Ù3;/ÀÜU€c -”‰8¨yˆÛ¨iœ~¸ƒÒÍ£äÿT’’³U¢‘Ð:™»ïg3 †—·³™ª2u¬…™™¡¼Y¼%¼.Ym« £ÑÉâÕ8)R=&ñŒ\d±VƒËÈ%ëÕ­˜n@ÊEàNt"–ûÆB"zg°¹VÕÕª€Ù5 /ï7c¨vÞi¡€p¢ UZÅg·03»\/á¡B=(EÐ)§dfY£{ê'pEBèïæ7s„ɤ¨ŠäÀ#5HÖ¸†}QªcVÇŽò´ß&æ¶xÇr¬­Aô2äS¨Û†"áÞÂçÊ% |½äv;Ý. ³G•eí~óNG Ë2'å[6't ‹Ë /#½kDOÕK>= Ê%àÝ °PªôúºyÙ4İTëÉ¢,õ¼7É>²O~´•ÇG3Úw¶óñûaÑHúèÞû]ba²ûà¡x›÷CKÓ?¸\Ÿß¸çÀgAšéË…¾çýæQ¹yqœe5äÊ¢ÀgTÏ —&fЗêëw?c¢Ã°K÷î?wãׇµýzoÐ,UHç]ÞHîR¬„˜#mS©¢¯zúz:O‡†óår®¿á-Ë:džÅF8{;grÖ­}’-´Ó¿¨ˆéU|2#ŠÃF:†( ¨ÄÐ' p`Ô«Ÿ$Hb‘"Ü: '>8u9wƒ5;ÿóÜYIôõh4·~‚Ï0»¤'ï­gѧá¯Ew°ÿ.b•cçZdïfÁÌÑ@×wŠôXçâµ->ðCÛ¾.ý¥Þ-Cï÷iîÆG¡´áQo½çŽóŽOË1-Ƹ8HAÀƒ²­@Ñu±ï›÷ØÁÍ(>y—ö_÷h,V[gs+¸»Ã£)½§Ëm/((L g‘†Z:³cV!”ÐIY• “¬ÌÝu)£ðˆ ©S¨S*†U¤3¼iLá„TxÛΜ'á‰í¸÷™Û`ôúŸ#Œ ©±ß=8ñ?ç_}Üþ4åî?ÙRþjÞïwÚïÍ3°°{<¼>9áà³öìyŠØÐ%깎…:ÉA5nà¹67¨Î@®wR„•*ª“úÍ¢ÁnnÞ\ªô"IUuR›XÌÍSP¬˜Oj)R‹û)Þº¿— ¶5‘f—*]rjN¶B+¿7o¸ÌON ¯ïw]}éç~Þ–b·@£¿ÿRí÷ÈÛ¼Äa¤.víÚÒt^œ²žS6SÿçœÜï·þ’ú<æÕò:Ô!<’<ý£ ‡ÕûÐs=)8É%=\’ç_2¦+õEÇÃéË)@™1ŸÝ >n»ŒˆÀÎoÉi†uÆ3{ÒÍq‰€ÏLÁ3Ý‘Nðld ²H=ÚØ6hTƒfxƒ6WU›TªX14q¸ÌÄÕ¯kxîfhDI$н!¼Ó¸´Ðçž`œçLFw÷êÀ΂)ëBùømâæ¸ÿ¦?Ó@€.p5ÇJÚ¼/röÐrr2Q5Ü¿ ›„Õ"hSg¥ôÿÐëyÜ“ÄÓ}ÿ}HIG¿Ú÷^ßç½è:. ™=åÉ‘ ÿ|Ìɾ;ÑS‡d†Ïó‘öŒÄìVºMÇ,”)~_ç·‹èõ,—ËÛ•æÈò0e³y% 1½áá¹åCä,R|„½ôoÓØEÂ1·[Ø»eɲŠÎ=Í/hÎny<ßåR¢°—ÚªŒFAh-îsHD̺ñ0€]í©ƒgx²ÊÒsê:'"pó>w3«‚df¡Ë”`°QÆ–U1Ò3Š”[ž5‡A~ CÙ¼à³SD&¥¨*sšYxœÏçNy ñCÙùèô6Œû»kÜ+Šë‡û¶8ÊÜÊç< 'æÓ¬G¨Åz]Ñ ª!2À„¤ÐÇ*ªªœÔz»dfþzZ 6Ç2 3-9œÛÈÇ$ £xЫ÷Y´f3¢xš?ÜÏ­§·ûí"e™¡yÓÇØ¶9áމ ä夂 æáž->Ø1ŠÔáU,Ñ¢Gî å}ÂUQvËfùg„çX¤J_ʲÜqªJWÏîã~W®i@ßݼCU1w]ßÝdê`Ô®ÑÞaKMïÙ¢P_õøËI9Ê‹šãp:ý·êåë—ëÛõr¹\Ïgé?}ˆƒOÙ—Ó!i’öeŠR•EbF„o46;½3±ÖN¦°ng,Æ+£ÅØÔÄÌx¹Á*ú¢z=ØÛ%¿b!Ue¿õ%(‹xóx·«]¨*nan (”¥´ÇÝÍs8 Ú+8=€+a–Yè9ѲL†d±]Ÿ*¬Ð©ß¹þ/3Ô )Ä™5&Í×P`>ž…/ í_fÔÊMç­'展oÝ£†á øîZûɃž³Ó¿ЧfO6–-ƒ×cvÌ2ð8&E9i4Gæ]ïrex/ˆ9¼A 81II+w)‹ˆ/ñÓåsÚ ó£®¢¹5`F©ü¬ª* çóÕÌN_¾èküúë?ЬGèºÄÃxsó$ÙÕâ—7;½N¯Ço_¿ ÙÕÌn†€NbèKJ¦’Eëï…„£êñõx:U•ÓßNÑÜÞí|¾Æ-"·#x†„¤s&‚‚!ÓÕl)þ‘ÓÃŽ#d€©¿þ13< È’@]b¦s¤41°È.Œz1Ÿ"òÙ0Ìù¢ûHù€Éo³¸ 鈞í=9)U°åÛ?÷#Êöœ[žåy'ïÊìë¦l‡¾¹Ïû#r¹Ãf;ù ¿`íÕæþ­Výr{öww°è7?Ùtx1!ñÇ­÷tþYˇ« F`þüoÛîfG€Â(WÌ0÷(П •̤AxßP-¼9 zEçl•„ð¦|»Æ-!"R÷ðÖß©S"ˆzP º`fÑÂ<½;WU}=_úrüòõËéëߣYt •ÈÝwc!xb 8ºîÚŒ”_’IBâúfý|µ N0 HMöm¨»³˜]XUQÁî§ Mcͤš€ßLB©²ÔDzw³·k¸y¸äyÒ7žÁ¡'=ŽªR‰ož§"E&$<‹¥*)§ÐÚ+Š‘’ =Â¥2¹OR™»"Ìíò~QoÎÊÃËAgeLL§B+YÍ€”Z¿hZ:QDGj@¡ˆèAUˆûM¦¨ªJ¥NzÍA3q‹a7lc8ýßнõÚ’ë3vDè!¢᜻ÜÌz¯òWªáÜX²ŸZOÁâ  d‘ž®èåîǽrcÌ‘^·ÔœLAÇÆóÈ1Fì&tt˜(5´;¤’¢Ru…Ä zZH…¤;¦’SÀ·Të»ÐQIÚ~òÐ"‚óç9½=Y÷'ÚãE),Ý\Žá3×(±¡e“ÌŸžÆ“3ß-ŸuñS,`œàþìg½=1âá«]Á9íË5ÊÀ ×£žý‰½M8 ÔQ‡æmŽÝ>ºS{×÷þŠãWãÄe5‰V§áÏÁÆX~ÒÕ°Ø9«|.gå t¤ñ‰G/—8¡ÈITÇ‚Lz³¸…¤ ^{(‡oWmî73I/½Ž|!o¯(1‘0{pÑçŠ]m˜¥ãWýVí_‘tÀÀ<hkZGra2`5w)ìœ,OkÉß •Õá)¢§jÜÜçXÈãZE*‘eE1‡gùI7¸e5#öl?hY¶Àýá’%¸Ã±ÍÞ¼£[ç}¹úÏi«þºîºº™Ø?ŽéuÙyôþGq6BR¯±R'IÞD8œ=‰I&`7¸Ûq[‹;–qg°Âôjçýö!ŽùЋ`Áúõ§M"úr'©¸Þõ`õdã ŒlóÌ®º…ß,RvzÂìQ„«H3”þr¥¬æñE9IêGô‡Þ/´å.ØKPéÚæƸ'¥T|¿­Dô±ƒü¼ôÁ¿ÒþhúãúÿNݵ§Þï¶=Øù÷ÅAÿ/Úà¿F˸ˆ Rª^qéÚfZ‰ª2Ij 0n¸˜P0¦ˆk=!ÇÃÍcº»»G ¿yxxsúzÔI©LßìæÞlÛ$ƒÜ‡ƒ¾/‡ÜTº¿y,£»-áãÈ‚\hŸÃs‘ÊÐ@ŠG3o¡%ë99¥*àkm!$Œ^ãðr”Jªê¤R.¯ YÏX†‚TnªšF¹{À-šûÕìf(¨ªöR"<Þíün È$™óÙÍ#šƒèx¦ªTFnf­G"5KoWfx8!e!¼ŠNKz¤£…™ ú¿ì];›ä8Ž XdZ€¬ª±2׺õfÿÿ¿oÏš*kº­,‘VœRR>ª«{_³7ßÐè®|IE‘"P…@‹bˆ{Ùá-4Lº'_îýËup¼{ ¨½Øår13$Ò›©ÔD‚@㲘Ðxs鄈V 1«·º·põF‘£‡cÿa‹crg\vË©KgU05´fJá\%“X•TóZŒÍ%1«’yì„ܹ%é6Ϭ[R0c™ìóvcðÍPf—³êrdÒŽREó=Îå-CŠÝa»¤Á©ŽH‡™¥ÛÈjÎðgð%Ò|éˆ5 8‹ wåç§›âÑØ<}Ƹ‹—ækòo°ð jm‡¾i·ãþ•‚ÃT¨Ô­ vYѪC¢V E5l Ѓª:íæcÀl¿·ï1Až¸¾7WWçíO™(–ÞM¶Ã‡íîÃÝ=¢ÄOñŽ­ÝÙ@( ˆ2sÿâFhýÎïÅmdýéÁ÷~»`#6•¢¤¤Ÿ9­mnlÀ l?0i˜¦3\âÆ“ÈÀÍöýƒñDdý!Œ0n'Š ýeµ}â l±¥,\\UßíͯÿKà=:¤ &ü2SX~#ZæÑŠ*²æ65cãÙO÷øåÖ8”ô0 IDATghat„ÐZF = ÉLàNtòt£ˆŽè™ÓË2ï(ð W)«–eR?0p¿ËÅìÅÎËUbõÃ9ó&ô`|>†}@r7‘ˆEØÐNy(•Ôï¦Yä ´6}à­úÏ¿£±žìãgÀpêŽ?ag0´*ªœ[^Ãë*Àïþ®P9XS¨r¿®‡ljàIÌèãÖ7Ì¥½ ½¤y¶ Àvûö7>#¤‡4[Íz•Ú"ÊY°#ÿ;¦‘cÎ7Æê gÐÃg|a\£LE«.—¿AR0UÍlYDª?":Ñs+Ìј½“™–Pf^O¹YF>]ˆçîpÂÃïÇù¦"×q¥UÁØ”‘ñ¦Ï⼿[{¸(>›Nòyçý#ø÷oß 7ûãã•ε5c"ŸWNý¾ö§üiÛÖ+C™quÅ,‘ßÉžH°i´0TQEx[ìçÓÏÀ(&Ä•ÁH-B-j¶˜½˜žL€·/W­+‡Ãt';íÕ–ËÅfC»ïĒܰ·}å¦}Wz@ÊQ˜AN*Æ¥êùêï_Èô@(°"‰uß0‘ª*ªUE­1´Mv¾gF… h´ -@AâÌiÚÉ¢ „3VÇJVA‘‘à ²zPE©9™©¢ÃWO¯8ajM:¨hŽòNÏÒ¦†÷ë4Fk€@£½.¶¨a‰æÛJÃà{öH¯V¡YQ&çªÀÌ<\ºè´“´* FóhT Ҽфo¿½puº{s¯N½¥ÅÁ :jLçöpË;I©›M͘ý "³Ý¾ц1¡Gvc= ¤õ‘11ƈn{¹Ô‰Ót‹Ág ˆ¬Ö£VE…(гŠTtÂŒ: Eƒª;BòèH+;™˜ZBƒ.UñÄHgáÊ©–ü°“¤9ÿ¨<ÜÚûãݵ4…>•ý5÷÷¦a',™Ð>ó™Ë{ ’‘R|:óð‹j'´C$Q¦C:úõ¸~G{öñ3Ã"îoÜ|ÿÛaêþ¤KR”-h‚Áaøt=´­ÄØ}´°‘UʘUL0’3ƒc‰ô‡}ðÆNÕ&º ~0 }KÒr…/¡7ZGTÌ«fŠ>äê´ùœm<§S3¼3«H’шK¦ÊR³”.X±RåúþæáÌxkß‹7 á,O ÊcöwnɪìÛOî¬vF4³ˆTÙÐ*jÊ•Ñ<:„!mÐ"$©òEªh²oDM-áî.ÃóÈqwÒªzR{]–cã[}CÇ{zA{Hb^Ò7á-F°-¦zl…“¶: ;™>ðÍ4=ÀøÛíà±Ü¤ûŽhòçBä‘íFøùdÿUU'«Ï€¦f‚(#RÏ)Èmní¸ªÛá’p°Ž;¿Ø‘ŠhéXnÞ ÀSã‰9Å󥊞D+’/½÷Š3p#3µ@@Aê„3bÖûQª¤ÊùŲ¦RLN’ «¢2«µ§Ì ¹T¶¾Ž—„Ù™nWÙ}é¸À\3¦a°g””Y£;»ô»@¿[ãóMÿ.Ìö¿ÌÞO‡aŽŽqŸÃ[‡Çì_åýâOøÓŠ"É-Eìå,þ%aSD4 '“ª¦îŽ`XS]–³™±…»¿½]”¼·óù"'¥»_ýýôÆ5¢ ªh¬Î®0+*"Ž®ÀU0[~ºüü׋œL«Ù‹I5t\û=sfÇ 0ßÇ\2ú@÷ž7Îøn fFbñ³7úW÷æ²ÎE°ª fürée# ¢« E«z„¯þþ~EV1St‰õšÉ.ÞÂ^lYÎjf*"ŠSˆ‹_Ñ(+±zæûÛ•Ò!9)G.¨è‰Ó’r죌™‚Õ3ùí£Îp^ÎËÿ\䤔sÄlˆ7J•Åìüzà«ZµÜ¤RÂz îW[ ª"'3;)€_ÿþk‚*Iœ“™‰ôö1 J«˜Šˆ¥Š²ˆW$8BeÖ)Ijë²°•üc嵨§èa2“£|ðÏEÄ5&±¿·ˆ9Ê#ÉVuã>´¸k0nüpsœ„û·§® 2Ü“Qð 9iæ“ s¿:FaØ„5ÆôÕdËv›½î™Ÿ'›6‰¡tmƒ‰ÜãgH26éÎ2XåÓ3ÙŸžz1û²õáÇÃá[{Ï”WóDíø®BÀ\GáhU3 V@ ˆ:vÌ+y¨2:R~6;+Ö|wûÈ¿=~z8Ž2ÉŸ.ÇQÝó¼o|†önšÅ7”ÚÄ¿Q8ê¦JÆõ¤ÊVØ“s mw0w;þöᙾó³KØÿ& ŒåÝJQÝÍvŸ3íyÔ ùÉÜúa%é„bXÏcG|U-ª ÿž,¥.<ˆ€*by:µªý¤vRQ½¾/á~ýrõ/üÕqéÇÎxÜ ·]ÈÌ"0V­H¬2 (Yɓמ高;^2nk²FÄVYfˆ£äØ&ÉìˆÆèP$bD­¡j—ËyùiIHóüz¾œÏ¶X¬áî‡ÄB•‰Ñ},Ú»¿áä[øø0€Û£qXw†ŽtþýÙC´Zg6ARš¹-}ߢWlÚ£Ÿ"Ð!fvÒó«-¯gwG ´@ƒ E(Õ¬€£ðò÷·ÇaíÛ2öð¥íꈑ¹ Hu±QKŒ™ž3i&­à@h«;™q´ýy¬*#Л´hZƒ(ð îÃY^϶Øß^mÿA¦¶u\özÎñåFü­ŠÜü÷Cm»›*%ͼý˜¼ùBŽáa01‰âÇŽÉ·fé¿¶ýDÞÇ>Üs‘~öH ›² ŽCu?l#zûï¼?àÿoíé„èÐ*ïÑVM\NÞœ]ЈÀI3:«EÈ`ó,0˜T^¿:ƒ(¸ÌÌ \Õ¼)WÒÁ•„sQ²ø°T±×ey=ÿü×ËòzÑ* &3žì ¹ß; ÄÎ |lÆ!°ZE{]–5#”w­ãÔÃ2ãM Û¾)¥Iá=‚ŒF÷w¬A¼y¬ÁF[,53¢¹À´ø¸#y’5Ë,© !¾×wVéæYØ`4’ÓN˜ø<Ø dsvb¨ÊÀ’žÿ¡#à´ ¢ãí·7ZÍLÑÃ×`#D"0Y,YÓ¾Vüò÷_ò ‰Õ››ÇêüÂXÝS8§#w­šá_Ý×T\‹¤þ÷àBƈ©ªDVµMN,çsÚë@Œ¤âaôhcEÐ6 h¢·‡aó½GJÜðc;¢ >h¦ÎjK€ ¼V™d¿¬`¼=ˆ*:-\"-póœŸS­Ê ÎG^ôváZ¦+\ E¢ +€,áôA›)ЇÓIzLrpœäà· Ï|û» «Y)‰9—n³íÅãÌýí#i*‚‘h£UbõQ/gúÀø¤Ý]šl.å&Y{xþŸýþÙTÜýÛÖ•g7åÙ÷>i£"CJ^É,ïLæPTU­ Û€‰þ‚p§bȘKÆsÀõ1¿qÀû#¬è·ºHPB 7¡­}Y˜‡Ý>,Ã,AöŠQ†Ñ„µ“KÍV@ ˜$d†öAúuÆæ©ÊL€×:¢zãð';¿˜T53É9IA˜ˆ€±'‰Ñ³ŽFdvö³¥òZÑÛøçGkûÇA•›5ÿtÛÖäñâ? AYƒí!àþŸkO½_àóøÀb¼³rÝ„ºýéÿAZ y* ÚÄ«èI @Ëq V€«’ 4¾ýú–ž$¤jšøè¸~¹ŽtÞ«3èkDPK°($²Ö ¼!ù´Œ `/g[ìr¹Ø«%°ÜÑ}hÞpB7QOûÎÙ1· "‘Ö$0³ó«±ÜÙ#rÏáê‘8jœ†H ÿê1H€¤[˜Sû1 )X5œp>Ÿ!¤»;]E,M=ÒWGZ53ƒfmÞáĦ“¬Eìdfæî±ŽjÉÉNI­ˆŽh„_ƒ’4<³áº¸»YÆnU pR®|¯j'EÝý‹³Ó«G3l”*¶Ø_^ÿ2²¯6øê×,öÛmH=/ÍP ‚ ±#èÝO0óª$ü«¿ÿöƯNg¬”*(¤ö#J´ ¸Öªz‡U°Nz³çW'Ž·Ýh©3MW›r\ §v$nö™›EöI\q.Ú c§œÞ²R‘üöq44ÌR=Z5å»nl»¹`‡@;XnÅfe-Ó¤V(ÄEX(‘ªjZ4‘RœsD†¿×fêïmºõð¨N™ÞÑðŸïÁ÷{ÊÆ¿xŠW<ž÷iøLìߌ’mJS©h U´N§bþÌbQ]¢p€Úª»÷¾ùÛщ]óÞ»yõÝÖˆnÞ೟èã™¶q¤±ûµv›ÎÇ‘á4ÿ{WÏ%9Ž#™ «ª-åX·ÞìÿÿgÞY]iMµ%ÀJÒ )*•9]½ovß»}Kc¦R­OФ€@ `þ<ºEP÷_ÝÏ~@TýôWÏû=ÚnÑJKUíù‘ì# ÏáÎÅÑí•uÒOçT?Òw±ï3e`BJšYÞd}—5ÄK¿£Óµéö1à@à{gr–åÛ @?·ð$Û¬œ¯ZÁÓÀí3«=ù‰öyîïaùvÍᨣ›ZÜe½ÛÊâL®¢Y‘0wjQÍÄ6÷ ª+LïFF¢ë·+¿µ:˯ߖV½š0#7ðN2-ËjoŠ%|m †%><‚[>–P¹í<óäºæÑ7 éù/­Û¶šjüS‹w s'D†|n% UuÛnò&r¡å}¡DšnŸ›!j³õçÏóbëùÍ?ÇwnάÔ$b¼ÀjÔIØÓ [ràÝCFœ2K&„ޱjÜiûÔåM®F¥›{1˜}„0Ðm»ýPºBe¬Ë²ü׺¾/ta$ÝZ'ë<€¾úWÇôÓ%³éHT¢ #›‹È"fîÐ0ÿ½ø¬fŸWÀw;3²ô@bˆ\ïp³Hµ%PÔFRUd"jµà¨©9\õ¦ ‚ç7›ˆˆ˜Hu3- SvI@‚ß¡¥g7™%3›êÝôÞ‰¸Ql‰E­ÉŒ‰0ghÆÈËr‡“bV `s[¯kD9Ü4öYe•7f¯f’¹“’S¡ískY45|¼àuûñaŃ1%yAŠdiqÀÌØVLïîÙè"" x_áZ¨ÖQ!|Ä-5;wºÙµeâógA‰‘SÛ­qjþbG îátPgà€ê–z~5Ü”0ò®¸W³bœœr,§Q;Å?ɇ‡±ßˆGˆ ˜»‘K³™J/ê@ '¢ßb5äîòÃAdž€Â¨¡_2¢'¯/eGM&¥I5u91 “‰ºÿÕ†~ÿÓL/T¶Ó׺}7(ˆÌ=7 5Ñš e»Øã‡áx$4Þ|íÙãÔ‰‘Ô–9?ñ¾NÖþxh“çÿ´ýšA±›¼øëÓ¶×%±¸÷ýfÓskq74mŸ&ÑtºÌ8ábŸ ÓjEép·¢9Šuoqžz¸ ÏSðö1Ù/tÌ86ˆLDÛ§,rá…"_£Wîå*†ŽV³ ^ jj­ˆŠ®ïËíí¦·­³©»»;¿tN‡¤Ó¨æ&é'1ýÝ`Ћ!¾Ñk$К¹ Ñ5mEéø–<_Ñàìø|>gŠ2¬ß®Qš(ƾSŸƒl€ô·c¯À¬é1w*~Wöútà& ¶Úá~’CÏì 8àbØTBO׸ýü¯ùÔv)Ž 'Ç%uE5/¬?n·OY–¿¯œ ¸ºnbÕén!o‘ˆ‰»êÐ-*ªÍ¸øÉœzœË±ÿ1N˜¶†{¤Ð¸‹ÈoùJ æÖ%1®Ø÷†(B¦”€J\Ü«#iÄT…ˆ¯Wª[¸VZŒ3[q@™¨=H×é¹^ÄÉ$" B|èÛö¹Á!‹,ï$±a^U½¡@„—ea‘ˆmµ±ÊšžVˆâ_ßÃR3§ –L^u3‹’Îfúý¾7)c¹Qó0û–Ìr¿Ý=j&GæØú&ëÛÚêCf‹\ÓrùÝUÓM‰d]WYJÌZ–…Y….7ÕÝe¢g&x3² G±<#i«àå|ˆ÷—NH°â(ðÒJ Åãhuáš¡éÀþ¹¿úûؾ¢ŽØ¯Õ¨žb9rpTu"#èíF‰™™ê¨ I¨ÍèÔ ²î½¨y§ƒ’â08 ÌT[.´dö0|ï*&ªj€$FJäæèõK‘%¦bL4l+Þõî`ïmˆÐ*öŠD-E3ôDƒ€úKÝðõóSˆêÖ¸µ_#Øàf‰@&.nÅÙ•21\‹‘s„mÙÀðôˆ(Ò¡GñÙ£N{šÃ˜ánxõèÇ´¼ÎËNK³æ»#ŠæˆÆK ¬:RÌM²iûÜã}]˺>Yʼ_còµr—£“ýa:®AqfovC°QÈ™/ͦA 8E”€¹îåtÑŽotzÀóéŠ8“:t£ÈŽ´Ÿ § €wzžc¼²2¹+@wz;ý3•´4QÔ-'Døkv2ÉÂSmšö¥‰Æ1³å†S†¼‰aõŠåM×iƒÕ€)Ñ ƒ ¸1˜¬z âEÛ‡ÙdÔÀŠí7W½q‘P\7•·…/¢å‹hVÜ[]Hh,­ ÜMX,A2Ó¼BD~ÿýïr]‚CAA­¦jáߪ:%RR8ˆeývU5ÙÄUµ0zàÇoðÁ q€:ûf^Õ#ÉÇèoª—¡îÅ„»‡è¡ÞxÚžý1Õg>¶üHMoø új?GöÎÆîp‡S&NCѲ%_æ¨?ô;}WU ÖÏõ·+2üïM²£4B1‡£Y<%Fµˆtë®{iM[@3y‡f(ÑžcRFO7ï—3Lúª°ƒYŠG⺠ºÝîø­¸™J&ÜU2›Y œa9V†ð!82Š)˜°}|¢š ï²¾¯ÐVÀüîÇ4YB:¦•©¹YìÞÃ$Qg+ÙQ¢lNa8¾©ä±E¼Z‡ívµ[3VÕ>Ö€Qµ¾¶[ìO"äý»0hµ'°~ŒV¿§í?÷j´Ô!ûÑ‚<߃ÆÓýS’£FÎÛÐÐ>¡–õÑh]qv¦â<öO/Hn|qšGæøÌ‡+½jû¿y¿Ï—»öË=úý Ñž¡Ó§ÈZ?{5J{瀷쥇僦߇›lM>þÛ"ÀÿFmxm)…TDœ@DœI ‘¥*éŽà‹¬ïÐÌVn1,Ô|û¼yÊL‰)»dßn7oJ3QËÇT7/¶ðê}„ÑEÖ÷E+fÅ›âÑ‹Iõç˜Rlßq®‡8›;g"0Ãù"r­Aù6O¼O÷a5'„ _Ù ;ÇÒ=²e˜3·e„ÜF±²ÔX¬]è˜7s¦â0'ÓVmC5uɨâ~HnX>åÝœòÉE®ß–°äâµr‚ÌT.p«¬“˜—Fù– KÆöi^B¨¾}Þ<²p‹»¥éÁ‚Œ~nÊŸÎáonS¦¨0ŒÌœ.´gd¥3©å! З07Ù†ã>ðå¸î¯iœÏJćÆÿkúy„MøÑ‰ŽÇÑÔ!’{Ø+'j–‡¦÷ºê³`NÝ/lpö&æ/0p¬B‹©Š$w7:ÁÓSíí©ªþ3mÊ ~ÆÎzRgûá(œnxºÝ÷@GdgtCÇ"üëÆà Î™²Î0o— wkœ°yG8ÕÉÞ}0PžÝ{{48¿ºóóAÔ3êq>äõÅN½7n4üÕ—ppwûŸŸåÙÎý…X¿ÐîåDxâ`<зó•.žj9xœ|‚†¯lïÏTwU³~Ô!²zà†žrÂÖCY„—UÙÕ%FËàLå^Á`,´è݃ÕIÙA^ßÁ‰ nÅ6U«Qó„9øÄšóèvÆÊcë4õ ²²u_š»è ´˜šz˜lœÈ]#‡å0A.LYV‚RQÁoBB" j•äçFQ1xÿÍÈʹÇT}Ò ®¥7zý§I§ˆ=÷D$«ÏŒPGK·ÆY\àõ%æÖOµ‚ÈϳéeRÁBUÛÄSÁ‰£ÞB.Ä‹{&Jðâ bfQ÷5ó(@Ýí$¢Æ^i@Àˆ³Ÿt¶lcåÙ“ á š÷ÜžZäÕàÂÄ’I qX«, ªÆ¡Š’ȳD©ËHéBJ`bÉ0@.-y\2µÉØ?$CÎ ©+qÔiMuý9'5 {ýö¯-¼£…ÄÞiŽçÏ!„ùòüOB¾çù³ÿ>§Ï·îSÆF¶?ÅhôÃþqÿ‡"œôô§~þù,þÊ$üëÛO¿pûm…ÖZÉ¿žVögígëØàŸö˜wAäÌÅo÷› B2‡ƒìŠGR / ‘âw£wÃn?pû±q"«ÐmÛ~„oÌ”A pbOª…7U Âq²¾Ër]å}åÌ·íæÅ­¹;—‰¦¿‘˜ù0‡ùÙàûìßl‚œl a6~w«Æ|²Å“È£XðˆÆÕ¬º³âHðrójš£,*DˆxIAÍv¯îw ÝéÐém…3jø1sC…«{ˆr»˜83džȋŒç0«Ì0ËÌNlnÑìë7’EDd…cIÝØ¬07®’ßÿv]ÞW/ö߀}|Xq|Þ>þðëo×®oáæL”) \ÁÁ"ÒX°d(¢£‘ȪæLŽ »›¹¹ª»©ß …—w»¤­ÁMÇ…š¨éq ò‹¯cˆÁô¸Ò`ŘÞ5Ôm@£ðÆi™Ò”¾S¤½9 §Œ¢Ðž!À'C* l¦þïX?Dz¨zäeµL•pÚàÈÚ—ãÝEç:Y=»ëm¼‰dêøw+4NÖþJ ÊžŒ{N5\f2¤*99œûƇowë„ð"%§›Ýh=»pOgi¶æã^|×Ù¾PcÚ·ªîn­À€û]ƽF¦}…5[“œÕ¯| _ðÁfZ#z›­ONG¿lÏ=¶É!|Œ/|aáëpßtÜ O8TŽM@y?ç#?ýá¼n?MœÃ%q‰  æ ·]zh¥#h±},Ñ=·‚2×£ú:€Äû=µÛ°ý§sDW(³Èº¼-ËÛ¶Òo€&zQÑÈ‘,Q‚#ø1ù,"lP¡åï¹^¯z÷ÛçM?·(Ÿ>x¹Úü|ë}Ýà†¸Vø÷/Èv„ºw4í(™ÃÍô®Ì½.(l ;_ƒ2˜YÞabr£ w_‘‹PPg ÖýÈøv·KUP¥„ò Šþ¢j]çˆî÷}lð>÷÷`ÝñMåF”µJHŽ‚œê”®îÿ è}è¹§·Ò®›úòØŽn0ÁîÎQÁ.•¬aÇ &y• q&/¶W¨fü{WÏ%7Žk/"R Èv¤šh'óûÿÿb²·ÑtgvT@Td„ RRuUÛž³{|†‰Ëj•Š?\\™¶ *ÌÐêð"AÆèÔÀ)Fݹ}C˜æöK>G†3³s÷²&¼³Ç¸§Gýh$Ç´ŠÊa,ÌêüE“oBæ ÖT¸¤;„ f¢ÈDU3#h›ˆ[*ú12ÏÎåÖOŸ÷¨Ã4WÅ{“zž¦o"–ñçÃm¶ƒißø à@Ïçü•-ž½u¼mpaOm°Ýð÷µoÁÿÓ¿‹ IDAT…VÒ¿ó–8à·ã¶C»ÏÁîÙÈþ1€ºVf‘9‰^Õš¡i¤5²›Û-£©‰8¸U(xû°¢Ùõªƒcóic$Ï q0ƒ–MH_~ÿYe½\¶O«0ÀST¡lôöàx˜óàQ{xXœT»žþUë €j$‚BÑyØ¢†Î¨ìšBk  & ‚:NtXõ°g¹1sˈ_tpU 2/RÉ{ÍMì5%”QŽÀN®Œ…á–žN® ÐÝ›qLШš`êLݲlHn oÖMQI•òþ‘‹@¤£B\ÉÜÃrófp¶ F”=˜–¹PdØ©öÓú0Yš¥à6UÎfïÄL‘#³¦e¤É"(ð›fò‚™V0Âmxs…R*÷¤±¯–;e.Pw4'/¬‹S5Tᙈ.wìLþ Ü€ðÂc ?,° š=Ψ!Ôù𹻩 ‹Èê05˜é51hæ*$$ 3‹ðÂT„sGƒY82V¶0K,]pe_iq"ö> ùŸTH-vØSç„nªªû>ËVùÁ³|·~ÇøûJ}§ŒŒ×ÀóàÀ(¾õ<5Ï˘2±Ã`hÑOYÄ·m[ÅšùM­:ðDP‰™¼‰¯.ý· wDžpfrœ¶á#qäpاŸ˜ÆãÚHvðˆd‰s{’€;¼™7£ºÊ""#!['sˆ¹ ˆÁX€§ë*òAdæ À(a¢B6s²‚ûŽÏv3b¦¨Yhɳí!ÚŒOPÚ{–‰ßË÷Hwï6[9ßAp¬Æ' ¦ñ•wâ1}ñ©­~Ä»Þ;²Æax'^¿ïÿ#íØã·¾¥ÿ‘öÌçqwC\üÑÚlÿÀ?K;0¯õKÍ×O+)yOhŽ›†1£æ\U•¬9`ÞÜÌPùòë&"²H$vÒ¨{s5M´XU-ݤÞT›¯+äã¶]¶m[åÃÀMg4 ݟë.üèðÆMŒØE?¹2¬Åè HØîÞ Q’«Yc®€[*d A%.v2¢`Cd•¬PÚÌoª_õõ‹Æ9î"k%æDV6¨©«<^”;¬ù¶ŠÍ8Œ:®â(P4MÊsÐ / Êq-S›Tâ*Þðj/¶k`Ÿ´,dÍõåÅܽ™ÁU‹ÈÇ5‚QÃ!Æ%fo®×Wm@wa’Ud”zJø314ôк†žT™Ý¨ Wz#7lÄ\ãÂéUšÚ@çÓ\zHqF’,W]„=& ¿1‡0‚W1;0ÀF³à™&4²†z°‹¬#ÉêõË‹~±„u:¢Ô´sÀP$e;Iž‘|ÐA)?êðЕèfNk4G¡HDwJÏÑAù9TðNCŠÆè°bEaØGîÏ‘ÿ¶ ·Øxì݇ìžâg¡NCÁ)·ˆ7O¤v„w&‚ã@e!ˆ/Áñ×S-žÛ~ìù°£GÃíâÀžö¤evZЇÞ>ÀÔfØ÷¶?£Ðüøw3îcö?žP[§•Aš¸Wß&!ðèWq¤+ëÍ:9EZúø¡eÝ5FÓð9Ó1Jmó“°]rÇ ´È¨°GñíiŠDÊ¥}}1Ç1`á†Ê¥ÉÚÔ‡)¸~¤µ¬èðkž®ã¸µä8D˜™d]íâh¸~y]_¯ÞìõåE›»#ªaëøÉwÄJ†§“·Œí?(!  ¸ Æ´fXH>C°°;³^5ßÅ"ëÇU>/BÃbt ûMÕ¡j#ÔŸˆÀ„ A2CßÉîÇõÆß£Ó4o¦ ‘°0H°Ü#vÿöSŒé˜"ñøû–WºÒO:|kž]ŽÇ§›ƒ‰ˆ¤ÍäÕL"rùtÙ¶Ýõú¹"ífU-º*Í}D:’dÞO™€Ãx}‡Ïãj·-Ç;œ[2ø´!EnÖ2‚š˜èÊQ®IMQ2•a’E¸ÂŠË‚m[/«0nâ.,\‰¢VHÏzóT™)T(F1 ŠŠœ#.×=j#éîÉx:!{Ó–¾¯ó0g8š7ef{xßl4^u~‘ “¨‘‚ xxŸ™W?ÜB¬½WXn´ÓÚQoOømòÍ}ë†8uÞÅÿÖv_~´£AKsã>}IhJàÞüüó4wß°,i\Å‹+\›¢É‘pí¨9ìÕBUíŒYd]Ww {ºŸÈ ööª×¨!á´|”Ë/ëzYI¢¬%ÿ-¬ßéäŒå\ÝÑGhðaTGS€(ëbŽ„ÖLTL©4Y›!‹U†HSkN7ç¢æ™5ìÐëN7 4äLÕ¹Fp@ L# 8t s÷næ9 ®ƒHÓÊ…}ô˜¶[„¾  íõrAl ÔÃÔ¡æüUèMý–å‹¢.Ì%•ŒpÞrea÷›!¸ÖQ]cXcá3Çë×|”)[wˆÃaÝü¦f™´ƒª»*ãz53½©Þ̦$§\xŽa†‹9Èt;9s˜v˜ÌIìŒ>#puÀòÞ‡6öP´<“(ýRu(“:Ž×ƒó_wƒ®m]/ÿÚ^UõJÖœ³Š/!Ü/ݨù^2gþ\„dƒ»“Ó(Ïø¤‡C³dÀ»i#)’FþC§åÐŽ¸©MýTggë–e?ÇÝG’ÞΙO»ÊòùŽ?ü¿¿ýcÿL-&aæ‘K•©j¬*sg"ª"ë wkæªC;J¹þÛÿÿ&×MD˜`7SõëUõëUov?£QòU.ÖÏÿ÷ùòëgarXÐà>—Ñ)Œ³,ÃÃv­õá&}÷dH Œk !ê{d… !`t »5p×àÞÔ©u0\3ƒ¨šCõU¯à……eý(²$€Ä YXdE™«ªßLMUî²8ªÐ"<ŒXk–¡È•§NŸ­Ãnæ5 ³'í¸T’¬ËGT³°jhMîQ–9܆…ó0E'ó«›¡ ¶uÝÖ5ÿ«ªwO? ÌÀyw®¬--"4˜çñ£êQ/Ñd1`£¢f†0¿U½9 ug¬JæíNèÚ“€·\'ä?y°‡7ƒ ìÙaîHí L|²9i"ŽS·8IC8ÉÄ¡;t5ñüic—UX!d½\ÄT¿¾r5P²Ëˆ [WÓ€`Þš%?r‘¡H–K-”l|„ÕE9(—7¥qûû@޹‚¢˜ÐnÙD¡ƒf‰b9³ég{ãZ™æÄË »ö3bõ™äÜq ðÀxøo©nÇ<7Xƒ7 Bªð*´çû‰ÔÁdÝQÇîØk¸Eêx:œ$jèÈ0þÓd´`8¾­ 3uþâ¸þ®þcJÌ4. ÌݧgÔ¯avÅYMðóÓžzÓb°Çò¶2ãu<:™éÔ ºAK~,xÆöpÄzÎÙ§N\’êiwF¹Ü'î  ìÓ{"¨ ‡wãB‰ƒÁ&Ö=ÂO3ëî —Ë…*¼AÛ+ËŸ½Pe½ê8hÕnªjnjYó Þ}’{£ƒVFôéx~„ÿñÌ4sþe)¼-L T™Y0‘Ëe‹²«šéÕ@ð–°"ªgßý-Í<; ! ·»©Æá €¢ˆÀXûBºG|3x†ùøìóíØÜqQ¥õ[Òúeì~ò|qåü­g Üõt¨ñØ2‰í_G‚¨C¢º âõˆ ÜI@NT™ THkâfÚ$ä25ó!/qÌÖ £'ìIŒ5 ýlö4eTHóÄ’ò Gk™7Çîƒ%×8NŒ†M"ĬL‘õÃÆ „‰‚]ƉLÉJ âUF‡IžÜÙ¨2*qáýûã¡AhûcûD¾y;wš„A:¬ø´i¼†ýõ¬¾ùxâ÷5h$x‚fî‡í[Ýß9·þz#øp‚¾GGÿoµÓÜt ÀL°2Úãžû£ù+Ú?ðÏÕF7De—íãŠmUýb:²ì3“~U½)Q¦CtÀD6¹Ù«»7Ó/úÛ¿ùýåó/¿èMÑÝ [¯"B—_?_þõËå²zó×/ªÍÐÜ}œÝ»0|);5èpß3¾uÀÐËþœWpwa #Éo0u®fØ9+:@©sШ©Æ^Ó¨Xî°®l`í €¦îTÔ;¡D\A…Ôô?ì]»²#Gr=¡ˆª¶2aͥВÖ⥷²´¦~{-™\z+‹h‹w¬Î´Pe¥ŒÌê€;q¨Ç+&b€‹º»ºù8yŽ7÷››©Å]ûqÈ$x¡«y_Ù€@$|"L„¸²A¼º›³©êÆáY²ôWÛØÒÊpô™½Ûü¶x ®»'ä›â ôθÁº‰ †êÝ­)Uœ ä͉#í£4‘€ƒl|‹ß÷`-Ê]*>"·Œ(GíP)H¬µd¢Œ+› ÆBºyËk­I£N«­¥žáP 4ÊÌz&á­“Tæ·!¸âšX„ÎzµÛ¬oWúˆ(àÕ¹@kÖKïG)±-Ô²ìØ²ØÌãfòËœ¬ÈÎ H¹;^lÀrÄ–¿2ÖZÑò;¢]:ƨ[ø‘WÙm×Û¼x FzhOزOÞÍàQlŸä½Öv4¡#±ÏãÔÜa>^Ÿ´éw³•ílo”l(Üϱ•¾¸“ƒÊÑø¹Û}Ò¾þ;VÚV=­ÑŠ1ȆmM›õÉ+Œ½š–ýî‚ÇŽÚ|à±×üÎ}¡m¤(Øþ`·•æžòZk‡¾´±}8`ñýÒGè®éŠ Þ…„Y>P(µä5wg2kDp[”§ñSë ‡ˆx%ªDXàÝfsoÂÂŽœXH:öƒqltVÄTZ#>"vf\È'Ò‰FDıÜî ­šÈ‹~°ÿ¸2š­Þ£¤¨#t it¬7SUý8Gö˜+§"qß?µgmçýƶeñPߥ~× kÎv«¡Ýû½ë³æ½üþEÆgĪU¤c£²E𢧹B&¾üóEN"E¬“J,ÑÜ]L“ˆ€ØÞL?ªÞHU¡°,*¡gc„Ñc Ìæî|= ²ŒÊj}¬¼ÁÝBß0+ÌŽAßæ;Âáu5´aÒ€›uf7°ˆ\ÎçËw'ƒàIn©³å~M[çi°y5?D¨0¢*¨ïl6]ôϽ߯iù”9|àw}¤ßêK~ _ô;éúíýéoÞÖˆÕú—Ç@Û§ýöÿnüöOÏÆèÿHû¦·ñ;¶¯½Î‡ã¿ V}ýµ¾Ê[OšŒÊ`'tÏ;(äyÏßÎ/§××WU›ß–ë¢r#t‰»ÿòŸ‹ê/(ÓérM„*¨úu¾.¿Îjúן~!™•Ï/òÿ\N—ËùE~ü÷¿x7½¹6MS)}Žc0yÍYµ²sw½Ö°Þ~ Å÷› (#3Ñ@]39F š•E|y›µ¹¾i@¿¸ÂÜÝÁ5ÃóÌ9[ê7jipb‰šX‰ˆ6“5ß–ùmA¤¶L¹sºÄî¶! ÝÕTMíf\™+Ó$Ìdæ‹Î¸9ˆ¨’»[wtÕ[¤[*ab.N•åE.—W!&Fu[~]®óUTRé¤P@²Ñ%ê~ñ®NÂYK&xV‰§h0ÁüƒŽÑk'y.lÍT]?ª7 §: 3ªt}[Âþ^šz°ÈÔS÷Ò:ð8£9ºR¶tøÀ;tuáÆÐ¦ÁåO‡ça¦ùmAÀÌ-ÂI/ÛCfd§óDª~ÕŸ½YÖN{²©²Íf‡»!Ò'¡}U‰*[³åíêíB¯~E÷Ÿþã¯óuɢ븉²›{wëQ É EŠŒ¤žPÒH•T@›[WTA:QXdTå<U„47 ¼_<†2ïô ÍÙ³u6yv£G…^(ÛŽ@ƒõ°ºFÁTËÀþ–>­Lˆè@RzqeT²¬×FÄœÙZ·7]s¿îËŠßù:ÇÌB!9WŽŽ ÁU8"‹†;98ÒóQ2ªá’-gYY*<ÒÈÓýˆJJ¨¶Ù[ŒÍUílGêQÁÄYNÿ˜ÉÙ¹lmwö–G."Yž@÷;çîÉ)ö­§ ñî/»×ë˜'¨9 ¬ƒüæÁ¥æä@¥TßI¬,L­´ÛØ%)6êàý-wÀá䀌À ²â쬦¤åÝíæ¾æE ¨L‘[Íý‰eÚ"3ÀcïÔ€3rF5 "ŠnÐÍ;%@è>´ám]@ƵÈL®7dñ-©@ ÊÇ'~Ë06MžH^D>ÈÙt~‘ÓYÝìúËu~Kæ/À"žk}UBFpìÛÜ;É©Êù""gªpUOŒjpWR0Ë‹ë[ªRS%™X£ø“E¹sÄ6TË`]Í’¬Zbµä‰¨²CþåzýûÏóÛ‚f\‰ˆö$ê9;†JÍ|¤Y2Û<öëAN±Î¦ƒîãMèñÄà ñ§þ›qcp¸ˆ±<š˜nȳªÝåñõä±û{èÃÓÊ­Ð7<²*ž$à‰ùT wJ4Ñéåt>Ÿpg‚\ Ť \%î…š{e"`Iõå;FX nkJJUçeQUwPS½·ÍÀ#w®VFòkD d\ðHæ3ºYeD3ƒ;ô–ûÃ¥’šZ“åMIØha!í¸|~ü·ÿüz>Ÿ¬¹‹Ëm‘BÄl•ÊÖu~›çËùT/Q'a#mÊÖWºGÄgRòÔÔÍ0SådˆùÑôñUx[…£Ö~¨ŸÕZ)WKħ<9B c­¸ èùîÅJAÖ¾4Á×¥#àÌŒ€>qd¤bjõÛËtl‚O-*,ÖzšlïDÅf²€‚MÅi¤÷Á½ÝÒ.ˆ³Ã¬×Çë_v²m4ü…Gd‹LÞçù=½‹ØÞ%º¾ ÑýxR÷µÁýñõrøÒ“Ë|כر|ì®ö ð?LËœa–ŠîGH Xžˆ&!a7ûÛOC¬>žE¡Q˥͛ÂCÚ"B•Ï/² ÕÐéE.—Ëù»Sð={qÜ}²‹>1y¾q;b>v!æ\Ô–õ(ÌÍl·¿Z‡PV´zwƒ’ÀÅqs‡©@€©ª5çBDYdîÜÓnH£ =4"I àfŠAÇmF…y""aâ& ö›†r’Hhô â_¢ìÜ©ÒéÃÉ–ähaZMFÄÞ !zÉ,ù *…yÀ•©W¶•>@!ªû©2¤"G—ÇGb©*“Û²¨-æÍA¸²a”` ®Ù×/ŽvdóîV-F)ú‘ñì3-| zZ*Û.˜}¶¾ÊÄNÐfÖAMæ¹õÂ$!F¢u™ÞŒ< v×l1ã¶¶Vç®öâðEƒ]6=»5¦r/‘únû,sL ǀ̳m†â&}%-i {Û›¶îÚ“Ø<.‰cF$£›Ó ¯8<Š,P LĶ1‡M…ðÅçE§•*5o|·läPÜu‘‡äjyãèz.e\<\š%›÷Χ<2–ã •h÷ÍÏÄûïÓ~#L«?[7 ÐÉÈ¿Íø && ²„yípS½éIΙP>?@Qiï-²¸ÆÄYBI;Ù•]x{pëj™yÛÉ9v¼8Èäáý:à͇6Œ`ìl°áÉx'‚ Ž"Kl€o`B‰AZù¢Îuœ#¾åwû¥ƒ¢ìLÀ+Ñ"ÜA'aßèɃ±æ˜‡¼OB Ì@lÃ—Ë 2™A¤®èLnîÉž¨7Ws]9ðFuClgÔ9鋿ÀBí3¨F¡Yhj?w‹Ø0¯Sûñ¡<¶æÓ1zwôçq´ø¹‹Ô¬`õ]Ûî•éõSON1ß$‘°ùó1Î Á«‹zw¸“5EKQaáÊ„äR†ƒAVY—P{5&÷ìJaDô€T˜³š¡0*¤ø`Ôh÷ã[ Éoæ ¨6&MtS…jF¬çÛ p:‰¨5·?LÕ"×NÞDL°‰˜ Ì=d¼›5gW#f‘Óå‡ËÛ<Ï‹Þ44x—eÁõgý("œfÉÂm!¬7_`TY&a&ª|ѦÞLX.ßåådÍIuyS¸& é?jäÍçê7£ !!fޱ1G½ñ-Ò&ì“›[$÷Ô,y#‰™Ô‚xŽ;íÙùÀ1 B¶’ãè"¾³I3_×3J“PÕÐçˆþ=¸Ç8à^ã,+!NûÆ[æé¥™B`‘óËùúrž¯ úlÍ„ Ä´Š4ï¨æv¾5¢Ùñž#~c€iL<éÍßCSÇ»wÙSÓ«îqØ”<þô»7hjcF=SR¨ï8ÛÜ*R÷縛ؚö@PW׈>06™ë=>y×3þΚÙ"nñqßݽíÃs;~`=Ó;ñ1×ý)òÇóë<:a:?Ú|OT£¾`±zn².Œ(ÛƒÆibg€±Æhø$묌JŠÑ9Ûœ¾ïŠÌÝϺ»›:Ü ¡ÃK Ð6vèrÃaÝOîÖ-à¾ùkeäî"[»|‡èsá@®>ªÑ:–5«l(â¢WÎ/ç××W9 ÕWeò»¹ª.ó<¿-Þ@ËG•JT…9#hgæ_¯L  ®04·¢h Zb¦ëÇyùu0­‰ú¸*!ˆ!X(TåÇ’ëe¿5ƒ‹·à5LIä á?¢‡qÊïJÉlÁ»ÝÃý¤ÁúYýÖ÷Ûãl‰K œBX³Iëç±dÝý1—³¼9`L"Sè;P@Zb%'æ³àüAôäÍL#è ë°'ÈéS¤ üð§ïQ8 :šÔË›Ïosl £Œ<3ŠÛÕFÔ×™c á2R1× ó’3‘+qÞ=eŠ#Dþ"\áMý–3ÛÜ%ÎöõÈßáêAókÄ#€yÔçw·bŽ:È÷ß_ ²0…«Õ#ó²äYÖÖᾌäpM™j8þÿmÚ˜á´Ù²(ØóNåFÊ%Y|ââBÚFŒ»;WÉ´ àͬÇ"®6·f\fáøMó–{À¼µi"ñ (@ž»!| IDATx‰D h,J ‘IH$žWB!ô„*3£P@̨ð_ì]»’#IŽt—"(”ºF*¶t«íþÿW\Kw+M—4Õ‰N"$«{vnÆvlmÂÚº^If228¸…Äõ­š@æl®ºÁ™´lZ©È•é×Ê'Î #)ƒÇâæÆ!º†ßÜ®–yü’:IÁñöþ–T4s‹Å‘NUµG÷©Ò51qÔØÀ›!¿ßëb÷͈U8=S÷õ§4eï’NOuŒÈª¤±«}œ2'­r,1Ì‘­‰Âë†B»œÏªg•ÑDnžô­-Es›@ ÇþCÌ\HíëŽÈ*/ %æä2$)lD6Ær?ŸµdòËŠ¸·ØuŸäUJ¶ l̪JÃña2Ȥ$5(á™8àjo¤dÅi*î°!‚S^®,e…l@vÖýo»ÔÇvÛSF²E¤TûÇéˆíþm716z1w@IãöËrý瘩Ý̘> b§fÂqï¨㣠ýíã{ï¸a‹ÛJòpð.ŽEu†]Ri,`l…'¦ zùÞ@á+³ÉÊŸ)-ÙVIªó°4*‡Üû¯q_ž”Éîé‚ 'ñdÈúˆ°¡TÍ“´”ÑoÙ+IäWd£Š«çÐa?Z½Û)¾ÎÊ!Œ÷mN7À“(¡?ÏŸ/¯/ €ÒàK°ãU©gE'š˜;›\>—Tž¹GÀüíýš!.›Ä‰UèÛ-#ÃÒV1³[0”˶qðÞ¤Mƒ³‹|b·ÖâÀ+iD2o#ÂAY»½÷Ì¡4÷ÉÖ ðjÒ»n^õ’,9{(_77ËZ_Ѝв«F‘FD5€©Úæq`]l_ïYMÅ!u¨`‹ H¡ûBÖÊš.àÝn›AiÈÑõô *žleÔO¡Thƒ*Óm;«ÚMÌÄÜ,R_ aï_+ÎÉBßÉxýt&Eá kÞº˜™w—lµú¬  I¦~v›ÿÑ«nÀH2Ýüëç"a8f®x‡”£<€žlÅr$Ù½ Ûüp¬Úª’ÆÃw0Úæ íÆCôóÿïX¶ÃÛWòyþnÜŸdÃ;ž¾Ë<›ß ‹aáµreM²à-©c¶.ÕÛô‡:8ér›âÑ/ûr¿wgÜF…¯{Ã"ÛQKÊx ,æŽj2Y`Á‚T#¥ò7Ä!‰ÙÒ|ÂIlF2ä¤*`g¾áfH-¦4V²^aÆ¢‰B´è–ü>æ½{æ‰íêW«TÜ?0[zªCÚÖ†G|pK×0¸Oô—?ÊÄÎ#b—åYÏîób²m ø™[Ó“¢óòé5qáµ`žq 3Ïj ƒ]UƒºÌzø.b¸‡¥ ~&#ƒmMÐÍáá7ÇâàY:Ö¼¡Ï&Oñ8 µ83ÿ‹D˜/Ž%*¦¥HËå%1ïÀˆ˜Ü=ÕMžÅ½OrøëÈÅ™5ùSioNø‰¾+Ü8P^e·wÇÏ[µÛ¬·Ü>w–e\T¹¼èåóår¹èË9~ñ[RUô7®vs»ùõݾ¾}5³z^o~àUSп“D‰LwÀÐòOòùoŠQëƒRZ˜‚ ®C³k4~ùüÙ4q¸8ð÷×WÕo ³\„HµNFV2O¶â¬rïÅ|ä4'5€4 •ç° ¸î¦}ãF!ñ‘¨µp7ªúgì—ù^epµ¨´‚•£X9ÕÏiM÷<…ßiÜã&ÛïywÄÞà~DA?wòþîð|ýþ°û@ú8!ÿjŒ] ÃãýûÇGOßq¢ýYþ €ÿãFÛѽF ‘‘Žá1*H3»G*­yyB®' D²q´q5™I…}»¸ÆÙåUÔMY¤ÝcöƒøC¼íW *Æ8D‘¶8 ]®ÍrrJá!ë̤ 櫬Ìô/«»É÷ã«ÊzmÙ,¢âáÂÖœjÔ"à:€X3ÞA›Ð&Úa êx»¾a »¹ÖÝr©êéuE(«\*K>Ë.æs’‚[åtÏ‹u;—¬µÆ¥£,Ç\•-ª1Òv£Á°Ìi³ю¬¹©x‚ÇjœÚ̉áù3Éý—ß7ô8H$|œîÍßO;[V•rÀI¨ð|Vy}ÑóË]²Ç2ûtÁ="ܾMÒG’wÒÖ-n߬:/Ó² èÚ!'U%»øu8¦Üq™¼™ –kPÐvå;³šaél뺡EžLWÒ2h9t˜ÄæXÇýÙ÷ÏÀLw'Btix³£5 tЮ҈.TžÏŠ{¿FÆÕ®ožš·¨f×쪅Ó%['r¿>˜ÇòîPˆT‚5QFÏþyKøÍ" Öˆ[ ÂÃ5™—>b8ýÊ)µý #²8‘nID¨IÌ!D` ÔSõd!<Íó éûzS6XùY ÞÃÁŽM>w=©ìyž3 böôÉÕ°‡Ìê­&ëŒýþtþû].—ËùE¥ÁºTTÖvó«ÛùÙÌíÝÞ®†›H¡ÊKÄk®Õ:‘8Ö§ÄÍq ?©tÿúÏ ¼‘)}é« ä ÂÛÏ?°ÁÄ€/ÿû#$|7“2´g¢‚´ÓE¯ïî7GÀÌ'xÄi0ˆ²ü!€Ôr AØÚæI£œW åd𺅵”‰&ææ.Ï€æ7DcU‹ü(úýcÇþ†®Øúq”ý÷û­$Žß°ó¿º =ÜÎñ£ýå·‹?¬eø·Ž ïßA!ÃøWügòXXÿ8~Õ㻽»¡U[Ð5ƒ+,é »,¥|뀄do ©Öç"¾¸/!J À»‡Ã3@O\b´W“ý ñ(ŽõkƖŃÁ8¼ åj°Ê-<\-Aãv·›%©TAÍìÈp7øbX-’Þ–=~ÄìáÀ-ÊŒ|œýõõ¬úòê%+Eû±áæÏ¶iBE¢…w îìzùtÆÀõýj)þÜKü&Oå ªB ®z†YJv‘ГTï=W›øLÓ-‘>PäÆï=…Jº»p¡}CŠ}„ªÂ¢CÌñÅp3=Ÿ+qpgo2ûÄ@QÈê6Íý‡Åê‡MƾÌ+~¡î2<µZUç®ÄÔÙüˆl¼!éY­ ´t¸—p3ûžüÏ6¾¾¼’ ÌbÕdª[3ÉÌ©#½ÕAí-o¬i©;ª˜é_©Çõqœ˜PÖØïZÙÅIéÇTÓ95½Ò-Œ,0SÀ­q÷ *g×P¥ÝÂÌ|h €·w„ Ò±‹Iç;eB#ë½ëÂýICÚ'ŸJpàºc½q»”àá5¼K„_Œ"mÅ»ÿئ´yOÒP¾èÿ;Æ>Âý?ö®œ7²iF ee–¥ö¤¶v¼Ùÿÿ/Æú°žÊjµõ2­"­üŒ$ßQUjiºwÁbh¤:ÞÁÇ#ȈÛöÃÓ¼¥¤ˆžDfÍ*ˆg%+†úZ%®®G]²ù7ZE4xÃÙ#b˜ÄR„…ZS?7 !˜P€])åÉâË$uã ¯xtÓßZ`áâà©BjÆTa몠3¾ùÇ…·!CIJ÷c‡¦Ýå))c«:dàÖÌ“Að²ˆ(µŽz‚R%•›<§DŠ#B·\„ˆŠÀ¨b€ŸpïnÍèÝRí/ïè°TFf CÊ´×KöØèyDzo˜¸mkØr8ú¾îžP™ûÚî=Þ¬[»$âmÏÏî?´÷MÝ›ÂÅÃG>ÒæâLÝ·ÓL£QÌB=Éó—óËËËË×—ó—g)ðfÑ=:g–èa—·åÿ{æfÉ÷ëa)då&­}`v | ÂðîB8† âp€·L/¼”¯,ë”NøÚ¥â€¢CN‚ t¢Æ¾Ç¼Íûm#zåaÆ‚X€,gk.ã1]ÖÕÑzÚªdFÿ·“¥Ôܸ~ìÅf2ëËmÑÇí4¿Iß‘„¬Þ¯ƒCë}ÎO%EÞiw…];ŒÑ›ëñ_t#×N(seØo9[î¯á,âSíè‡VÈ5´ñë¾ç¯µyþÏ^GŸŸ}ûŸþñ¸CpÜÿ ü`k¿Àøßi?Ñ¿¶Í°ëŽsàø€ï_C¾%ÿ'¢PZf^£ )iÓKú(âšx@eNBÑ\B03ësï,´6·=‚UôÞθA4íã[yŸñ n†ûöøçýþ`‘Ú‡èwöcÉqÞ,EÿP ¬yt(ÔàÑÀ*è.%PTÎÊ £p²Ì`vI !lðÔa i¢Úš_–e1CŠêinÊÓ³}7ƒƒÐ“ꉃObfÑC„|R i'g°0Ù¶SèÂz  ®¶\A<@ôpX,n~µh©ÝG©âe‰Žp‚º Ñ.¨jÓ]b=ëóÓ™§„–yxØÕ@h¥Ù$Å÷±<êYUuè'-fút6e1ñ~‰†ËbÒ V@0뜳*Õ'ü›„@‡JM¸T%†PÊ66’–¬’ºb†F‘_z^ìÈñŽ*ë2ÇÒ~<õ‘N`=[t¢…÷ÐÓ9¤ ºtxp1‹|@M¼ŠE‹×¿êI¯ø ÈXúIôÞÈmHMr‹›-Ùƒƒ,«¬Ø-qWp`¸P-+Jª8ªzƒ­,,[–5ç)}ý¨ÕNëmÈwßvÕîhD£œ„pRÏ¢ªÂBÔIÔܱ¼].Ë’¦n—ë«™ƒ:,Ë*rõ‹’$·¤x‚ q‚×i_,—Üò­Rc¤bú¾iVù¥rTìH‰Â,©³O#ͲJ N¬Á ôÈ ¼Ô{¾³›9r˜³9]’GmËK¯kÖ¶ 'c·>:¾yÜøvw€›UñØFn31®tV=yÖ'}þ¢ç/jo—ç“ê‰,@„TžU5·t™¼…¹™M8ŒJ4ÐŽe „J¥h¤ý|u4hk6CT’\v±»Í™¼«)]óZ›¢ ìOt}©´–’{*;9ó˜Å¡‹v–ßîò¤Ã+0Ëb‡ÈVìЕIŸa¦(.)‹ ÷^=+2Ì }z‰æªÏƒc<gs»NÍ›*æ> ÃÝrú“Š ”ä)×ä’³Ô%,®®á€¦ßëI…¥zVe> ÜâÃ’ä/ÂYCNˆÌ±›Ûåm²@ƒh€¯¤‰þ%“÷>{O€Y$¼ ð}¦¥k—[öÞVá3ÃZ˜ ÔtÊR1øvÜ;˜Ä alÕãBxÝ èî×媎º_TY®»Bªœ¿<«ª^Þ–åòjf—Åì»-o—äq\Ù+õ¤(**"'ª(O2hÏÒ0®EÙ9bá²*I4 ›¼•ÍEr”i$çXe¬£¶ÂWº`ìP'ñîæÖ@B„RÏH2´ðhf¾$·ŸñZ5« Ìcñ„w Ž€ä’`rÊRÆ*(¹RŽ`“ˆè¾ s‹|¤8óéUÏÛê¸VEaÍ|j¢ÑœzòÙuélß À§íÑ3IÀ'üÊš1¯]½Æ¸ÂrãZr­ŒûóCÈÊUÌÉaæ+=Òç†;ƒ¶Ž¸pbm2D² Á+¾¿åc?ÜEfØ1bäeÌÇB†Sa}rªß­øõyê»ýkñï×oŸï-ÇPîì#Ž9[ùÐܬ þþë4Ù½ŽQrÿúm†„çdŠäÛà=‡”3$U7oG€"ìƒKf»Ò÷‚<‹lkÞ|ë£ÛƒöÉï޼¿‹˜I¹´ïëˆ]¡S•=<œlLjh£H1k’øgŸ±ƒA™N )Ude‰À2Q!eòèÂY©Hê‘*ø5¼¹7Gó‘ŸO!™êî’·ƒXK‹”çˆåû$½ôpi’•2&Í“u“UÁ²[¿{x!Í8úIDˆ~ d•Á§…ðU0¸ˆ'UUt"€ÁFþ¶HH°j\}ôR#ŠØ­'òÍž¾w¾9“ ‡l|”ŽP”u¿¡0îàï Ò(Âb‘쨽6Ü×yÏ/÷•ð¨ÂæØbË›éÙ²~[*CЯÈçŽ2’Æ(ØÊÛJnýéÔàŒtŠáÅÑÕKš\À­P!Ä2Ü–Ò¾$›Q6ƒ‰á†ä’­`ž@¡VAÖ†G¢Êå,ú¤g³å»][ÞìRÍ¿9ˆ(ao.-œ K¤ÍÀbJ®—¿»÷÷Ö£w˜>ðn¯e„k_ ›ì°^E€ì@ñÛ¥`ãŸ!º¾;í.€’E ¦©ÝÉöÓAn´”nYÿ»ûü~É”3ÄÁug…tR •*ÔLü’‚/)Ÿ–øá‘€Òü¹v!…ÞÝýÛB¸”\´Óäap …‰žU$@ø–¶-³îã“ñâlg‡ðî ã¶­“F‹2:§k &™Q÷¦ÒÚ¶Ä‹oÏýhŽMäp ¥ŠVmß xvo!š~™UX)b%Ð=ÓÄ‘¥enQÅA°'ÕnÝ¥ÀKÊ= ’¡·æ¶&£²¹÷äüÅäÍNÊǤfD„¢)Ñîaf©Î§UYEkàÓ¼›ö¶,ýÕ®áÍ´jfoTUkŠEô¸˜¥³Í“f±%Ëœ°B»®ªRTªBT›»[´”yÆò6ª‚çnºˆ(‰hY-è—e 3ÕT"=`-ì»-oöúvñëø±Š"Ò/`pØšL(]â¾H ñðÃÖ¢ˆkiøÉ}¨.MËx…¼î=®u}.“.%¦ÑÌÌÉÀ“3¸³H‘-çî.R… æÙí»]tQÓ”S¦p_ ÐY m«k• »Â»hÆtƒYû>B³9 ™4ELƒk²tÿûuã™ÓPî ¥Û d™tnopA ªœŠ[«DwOZ¸Ä 8¤Óª™…PùûÓWþKð†hþÇ¿—×7³·‹]“|8|„Hº "Ÿ¬=.H;·6Åù|“Ä‹‘ä™·vcH2ܰíçãs)âmd°ïßß]LJ©²÷ÇõÜù¨#±)ì÷¦Øücç\Å£¸ÅçÅ£\ŽkÝtF¢'°–,)ò<Â.ˆ>x˜"‚ q„Û™.J®`ÏÇJ0’±é’=rñ¹U=n÷~Ù¦^¾)€S¿ß+ˆã4‚H%“œ<à>è=çW§Ìõ>úr{QûlÉÜ¢deqÏîèB!‰!J}W`¡ªœ kðª 8Oª©×Þ˜ê¶\ô ‘Y ܹ©jžÙ6 £0D¥©âê~5³ ð¬ð™÷Mj²š5ƒÏ êà-Cs¿o Yå\‹­¦¿Ž©‚EßãöŽs°¶Ä™ßS~ôåÁÞc¹Ù¾}?<æãò‚uº&çâñGã>ÎJRååëó¿~ûýåŸ/ `¶/_¾-—ËåõÛ²\^/‹EwÑ“¢A2bÞ2G®WÚÕâª!$Ÿ£xÆe¼E4K8)µ™ŒÖƒ1E¶)eÀiJEhîaâ©[³o]»˜¹ñŸZ%_sÅ¢ a3t権Ûä]ê”o@ÆËLª¯ëa”áñÁÐ!ºK­&RÅÃcýéz5UÛÇ“}ènÁÇC8`÷C–)D¼B{Ëv·²¾<²êø`ÌÛ6Â×èŒãÿà@ë5ê7üGÚ>ý‹›ÎÿEÌöª½söû1M`Ÿ\ùD®é þv€ÿW[:™º™°S¶aRqÈŽ :á>ƒ‚#ý9#âë2ú`¬­Ä³Ñ?Ó~"iŒ´#æšžð+©Då»Êb×à°°½;«°\Y‚¸&’hJàVª*EbûîÑ )lPä¬<‰ˆfI•>³‡Ã`‹#Ÿ Uô¤Fðo¡Œ”uOÉ wsGJzHY㻘 “YŸ<0qxb³Ñ)¢L9«'µð4x3؈j£¹Ôáá€BœDEøÃ€õÜš ÐTõ@¤DÐÕýæ.Y¼ºo}u>Ç æe IDAT§Ì}‚d’—,Ù•–mQpGÏAkv oñ[«}ÓsN¼Ëý8œûtfK‰d‰…ñCæ12TG“hæ—輦Ëç.%•.+õlùq.e=«Ç¤Í$9/,Õ& 2Öž’û71 qþg`fžÅ$ÿJM0‚T:eÃ-#“«WÿúÛïcöÉø‚·ˆ®¤¨Úk…-fîaqY,Üô˽Ù"¸Ó~z¸ï·L>7_a:óëýú—wÀÓò/?¹Zq«Lîè}n¼ßûëÒß²³ÿxìá1bÜ|µmïŽ[æëÇËà‡»ö¶ :ÿÊza Y+¬ÐJ—±†§³:TÓ¼ e•…ì` $ê„4¯NXçK$C„7ú:7L`ÚXûé~—zýö®žÉ‘Ç>X¤,@VõX*ïÎÛÿÿ/f¬Ýµ¶dí´%Àiá €Lf–T]Ý3³{11ŒèŠj•¤d2ù<<0RZïˆÇ¢ˆÎpLàQY)Æc ဥ>Ÿ/¦°gŽñ6\àe÷ü&dèÌš šÖìíí¦záryåŸ.‘šË½b®,/"'qÞ4ÛÄ‚JvèÆ[¦Ù·1ȱV4ׯpÀÌé¤T%×ó­pëæ}”7/#s“8Î âÏÂë¦ar¢˜}óQÌŠ\þØk3:ð <ñÍ·|X½|i{Û÷«/C·Ÿ4©ÂŒ×××Ëa 5Jσ²C½¾ýóí—¿ÿrûªÖܧë¿ ÀÝÝݲ5n_•åöVñZ_ƒ b:a€v–$€{CSÁ³À€9ŸEÜṎ½™v£Æ Ýf¦§(f4‘ó\3²(*˜•ñJž;F0®`‚• 9(D+0KQ4·îçy’9bëK&y›ÖÅ¿â+Ó‰ˆ?”Ì=,pÞ )ã¸É9Œæ˜—@άÄÀOÚ{ÚóøÃ7ƒÀŸh}ð¶Æ,Ë>î/ú.5e¾üdJ?] þàM›ûpñ³Ûn»Õä o90~[)ûö ÿ~ˆ{ 1ö¥€ÿÀº6l¶]†ÙºÊ:¢жYâ £a››r†9ä´¥#8÷ïr®,˜-ïâ?Û ¨Ó8·4¤Dhts‡Á(1 Й3 #e9ˉìjÎ""ç31óIB0FoW3÷»¡gx ˆd9¡Jtb©„Ât7æâT @ènæ#M(-lrâBnŠœ_†h³¹Þ£&¤ƒ€†›½½Ý‚°p¥×Ë+§M xÒr Æz]Áˆv! ¾¼ªêæÖp9)€Ÿÿñ8ÀåEÎ?]._^Eèoÿû7mjªñ'Ü3jðnTÅpXĘ•"‹8&шâîqP¢b_"š3þÀÛ^}˜6ްàUÕïN<ßVvÙâ¿¢àsÏo@†e}ºv}~hñ^çñ¿P£¥°ÒÌP¢ #r>ê—.œIÛp׺åÎ`|uÚÑLéúÍ2|Vë³SÿÝëñŒ¬gB:ƒÏápÎP"ÜïšÖs%>1U:€ÎQ>hÊUPXN„Î/¯¯¯¦ÿsVso°»Ý~½]¿êívµæÒÂdè>ö!¢Mnl9!¾ùÚ?Z‡pÄ #Д› GÚ!a$.F¶ïÂMÇ\‚Zš¿n]™—#˜æ*cC|×áÍÎÚzz –K;iëTØ6Þo»¬Ÿ›t‹m$Ì»œåü"f91U0€J\I*™³DUª €QÝPÙ p³Èé9{@X±$qLø0 =ŸaØe0#G¯¥Œ²3‰‘Jš»·ŒÉ :1¿Ÿ˜KdB:@påã¡ìã–aX¬XïK‡ã—ÂÔ!§(ßJ”ÝæÍÜ•¨B^Îtbié$%Jeu®0fb4bf>±ps5DlÖÈ¡°M\ #Z Ð*‹8š©¹7õ\Lžp7‰Û¹ƒY²¹dÞùàhSyGÛ¼Ý,ï¥:TfîúÆ#Zæ³–«rƒÕÏá4|·s–åçjiôõPðéÃúè:Wfaaº¼B »yJ{6Ó¯úö¯·_þþË¿þù@¾\D^QRVÚïjæf‘…03URU;;ƒR,ª‘'×fTÍ Œ:Û]Q@¼9…4‹§/†P‰Àu_˜S±ûµÝfžê®u„xxLæˆ*çü$çƒ+ãdc²‹¹ÙÝ2|L¤;’ë(m=9iY*kUfá›:±•¬Ï47Ïá|Ü|+ÇÎw>ÊŽ¼kÓbý¼ÝøÎò!GŽÆ'’V:÷B{{øwm}üÜM{{ßoûÚw^€¶€?jÇní²÷í¡‹ì°ÆåYüfÏEÚOîoLÈC§þÀʶÑ/y*-`±·æ ‡½ã€~ç×§ò2YL¸ ½·î¾{ŽÿxÞ/´B/*L¤Iš½–iE†O˸LjÃBåˉ&&®8‹h#²›™«jjn‘߀~Ç{ŽDè^§÷Óþp‚s]”£ °ûß³÷çïϵ/ºÿ ¼:Êþß¶Ç ƒžÜô_ø¿ß~Èõññ ´mA.Vfd YqLv冯ǹ’®¯×úÜ’9øùâXô[±Ž§Ã°OœNöðe2„wbû-È!…(ê|ìGt†vý®z‡uÀ în?GMUƒƒN,LN!“€š ®ªcCeb¼¤˜¤™iƒwp¡À»ëí¦PÀ½C.Â,TØ2Ãöz½©7§ÉËEDä,¸{Ú¡zEaªˆHÇC¤%nfÍ­©6Ó8J‚p*àa¢Êr: nrkôëÍU_+‡þ³7·jªš–‘ÃÝÕÌ›y¦?ѶÍ,<“„"3šš^ÏP~~^ísó`'N ¥Í4L¯©‡é\ò¹sÚ4\ì¨hTÀ\ qDÍηHw‘%¡D=íæÞa§m‹AÖçQ·^m3Ç=â,áò€Ì‘¬5?3§óýÐdøww$Ï}›u2óIÅ5Œ+ŒBlÓÍŒ4C”¼ŠÊ+‚|RÀ•*Éi#w?Á˜c¬¼Âï–u&»¡9 ¸2Ó²¾Ž„Lú‰Osc2KÀÛ0´Iô1zsL²=ÜIÆ–˜òfÃìóÁ1`!NÎ14Õ8"óûAN›¾‚ =-Ô\óz3®>Ë‹yø† "“†Mf XósÖ)w»+©óIŒ´çrM‡ˆ7çB‘쇒Æ7;YgÂö^ ,~Ò­œÏ¼ŸÁw€&ïîp eù>DÌo³ç7Ódx£Ž˜‡– PBƒ]Xîªnf`PŠÿa½ƒ¸÷\’v@¿ÙÏ!J?º%‚œa›j7MAt·»K¥( Å`%å2¤ ºÞnîMQØ›I%¥L6 Þ®5ó¦êb/#Æ  w6˜€o‘*¹Z‚c‰@ˆjDÿȺ§ÿ±nñk`#kðH Í €ö aéO)œ›è†·Ãú³úÏû–]ÎÍÃw|ΘHxsäšÎ‚Lû/¥ä!›§o|bbFd“0HÕ¯oooo×Ûõ€…^ëÅ×»zw½«œÎÚl²¬§ç'ø\gªa3SÍ\úÝ=Q ‰6÷ôŽït°Íà£pîX„HÍPœ·Z…°8)Ö‘)ã¹b 1A„]E»ú]U%féf¹Gø×=ýTÁhl!\¼ n.:Úž҂ȇí(ßóaÊÏÎ/–߃8£WG6ªé›É ˰~x‰g-<›D€½ƒ ßn;èÌØÕ)Øb¹Ÿn¶ÕI~nû?t¾~ÇÛ Äö¾cýC;áƒö» ßï½îÌwøc0÷_øOÙ;SsòµXϋ屘,¾±>†¢Oä?; °F{èF U&S¢Ê\ …„€G²àÍ´óõú¼ŠÞÜÇ9g=(aªª£öÌ6¤ã߬NaDìÃù»³fa¶ðG$ ;üÐñ¤ÉÏ´ñuE +¢ŒÐDüÞ·6ª[áÑOœŸ1 ë.CSÆ&ÄŸ)¶9>›«o׫ô±<‚Œ?8+ƒ(rº"¼05¥û|(Ë×M <”oÞv;Ö Ý†ž‘‘yï W íœ,+ûu¦­€D$D8UŠ’¿ÁʤJ ‘J?«zq ã©f€qø.üî{æ¡5ÓoTÞ°ØÚøayËoaÆ:hÔ磴YEsno“Ç•ŒŸÂzb²ün·Ÿ’\þ\ˆ+q%Š©ÒA2ÜKQ"(n9¤é[TͱEœÌÇîtK/Uá°ó° ÅÐ<渄/dÔyŽ<nì#C´}²D×ĆQ»‰+RÊññ…Ö“!|,Û¼š›93æÈê¿ÓfÞ ª$•QI@ _o0Sk`R»ÃÜ ¹›uâºõÁܸãÈBÈò•¤¬»²‘£@N®¬±ÊP £’(øQÐHáIóàÁZ¨juƒÜÃåGÕÌ Š'o}! ÍáþØaÝ÷rV‡6áÓ8âhLJÅcVØá¥ÙöÐwùÍXzÑ@(‘ŽD4ó‡á¦zûªúU˜ãüåòZIïª!ÒQ@Toª†"Α$C¹˜uÂH Ó¦èðª$¡ÙGˆ>W¶»`Úò|¿WSK?fR©}2žÖuÍ\ Y!)‡ p§ÊÞá~X£ŽÔ€»«2ãîÖ@w•ÆF6‹V:`¾òåB¡¿8¹ï†]…w}ÊÇJ"b‚l¬ûÇñ‰¶G¿#,9h5O,Ø]¿>ÑʸֵãÆ5*£oùÞ¿¹ý±§Æ¼Ê2˜ŸM¼ß·ÿfÌ÷£'ø˜þ½þF;OÛy.¿Ýòv¾Û™ôl5ê[vc8 „lvЦtš\£ÙÆ ‘Ø ×ñY Ž£ŽÑÐw~öƒ6“g\k)ùðùG´ëÓ°ð0+ˆîçXXꈛîðâè  ¹¼œoÿV%¼¬èÁØÙ†ºŠsƒÞ”ªs8\#!²N€É ‘ó‹Dµ$Ïx …4(Ü€+ŸäÜPVÜÔŒ _~: óõ«êíêDvW5—bR_­Âï2Í"‚J—Ÿ.$•¬Uøÿ±wílŽäºõ "+MßHíÈŸ#ûÿÿ ‡ÎZÑöD¢"#8È¢¤êÙ½c_?–ßî|­n©ÄbñÇÁ9æ¦ ˜\$N}oj ÞTwG7b‘M®ß„¢ø³)œw¼¿]å"A¢ª‘Â¥‹\ß.ñÔt÷ÿøøøø÷Û'ß»Ñ&t—ÐYJfTßA0#æékF>$ÿw+6žÚ “M+däæÈÝí{ÌS¿ývS½s%ª"rNJewSó)ùQ*1jŠGÃ<‚9ØL‰¸²íæ=¦7¥x Ö\w³žÍ¬ua€ê»Ã!"Ö U$n$Ò§•x‹È:[³`Ù5DŠ>ªÃƒefå™”T:Â!#Ñ$}ÀÃQü³Õ³ò^Ì"ºžáŒ\)ë.îy¼p`JH­j0/^_‹u®²æpK¡YÔȪBá7RµÛwÕ¦á=&¼°e‰æÌÑ hÖX#€ƒ%.ð䑊/ ².‰Ü{æÛ’¾º¸¯j ôáo‡ÏÿØ?ýñkÏô)k;Ž`¬\˜ˆøÓëP@ÐÏnö¬B*ÎÅsjQ‡~ðYþÊÿÕþ-–Ç/RGúâòKóç—Ö‘$1@ÄFÓ-Ê$ºpn©©–œ\ÁYq4>¢-­5ѥ죎Î=R˜ n`Fl¿µé03Uæ ¬gÇ °‚AJ @Ѻg¾=™×³H$÷®QÁèÃX¯IØŒ‚u·ffæÍÁÎ…Ž¨ E”ͼù(Ó—Á2@˜‰²‡6"´Gz9ðGžEa|óX‰\Èvx„Ej"óçs8€Ì<êÀe®:(*Qàó8·¾>‘˜„9 FþK[Ž\Ô©fdRç)Æ{¹ˆ\.r‘¨÷Ѧú]õ~‹ƒØ7G7*ìÝ´é$\‘ÆÑˆàÎRILˆ8£ÒÝgº{t.ƒkgÝž#¸8㇉À?jÓۚɃ9a"b[B눘Y6XSof͈À"ÌŒÊ!é[wõп,B•ò8NøÆicdò>ƒ'“++«(+iΚ™A9œG ùZZ–—ïx?Qˆ‰Yø©6Xµ_8´Ö$çÄ8ÄH&<¾ÿi3|l ÀêO·Aƾþ.¹N—Ñp÷Çsá'Ûé;ÿžù¿¥ÃÐÿ þü´LµàÏ÷¥ýåÿƒÛ,±ø=_ð¼lìwé±Ð~¢o–þ‡{×Ú‰9;m„ԀŧŸë20X¶ÂgZe–^ŒN¤z’D¨ã#}ÚÖàó¨ndYá JöëÍdãÐ)©ˆÃÌ\šÙ®a4G-qô‰C(x®¤›óæF)I" ÖÕ=I†Žz Ã×› Ø0W–Ôê`¢M8¢×ÈÄ”°ÐF©Ø €5¿}W.jÝ ¡sh3h*6¹ªîA+D¡¢äȡ͹B¾‰tÜîàü3óÑsìúÌÖ$ØxDîP´%ý;ßOHG7_ÐLѤµá £Vrrá0w³¦Ôç/ ý¡ ®D…¹ äÍ‘¤bp J*oîãYå‘Û¡YK •5ò@-…7˜ s—J ‘-†d™šÐÍx°0E8séû‘¿úS&æ´HLØê:k;óëu^0ræYOî ¦ê¨Ìt×<ò3‘ë#Û‘WZbÏvB¤÷Å6°X S ùÇÌŒ¾XŠ-£èe:ö”Wž³$n·›»Šˆ»•ÑŠkHÄÁ¸æHkSÎá™×¢áS}åú.7úÌö¥TŒ((Œn6ö»@0Ì*.CÈ*/V/Îï@UÏZ¤˜®E€2ÂÙF(Ÿ5÷Ý}RaÀ¿ tÅsæb¨^ ;ÃÙËÐ ÁIŒˆÝƒç9¯Å,É}5ò&D\8swQCþ’9É(d|w<Áн+äý¥¢n|:áÊ•‚åδ©îŠŽ ]H˜6 Ô+{.d‹Í¹*ƒ˜ SeªJÿ?ϸašgwNX·öLŠ°Æ’¼Ã:DX˜¸ ØÇûúxvÔBaÆ@UFa4]÷U –&ºfzÙ^~Ö¶Îå¤MkIõ‡7<}ÏÜãɼÅü4rqsC‹YÄ$"òM®o""pSÅý¦·ÏÛý3áÍÚ®j€ïƒBybŒ«ì°Ì";ª»ëîâc¤Ž'–s¤öï+’ÿA6ìñÖ옉¥¼q‘ŒHtÃĻ;P‰œ… ›0ƒ* C?ª"Â…¬™~Þhg‘1V°€<0[Sv6 ޾XÇã×jJ•©ÒõrõifMm÷$+¹‰Y܆ƒís\‡n‚MWö÷½—#R‰Õû¥2à‘â+Cë}ûð½ßc þ t|„AÄ8¿šðàFÐ?é™ùýSd`ål}ü‚ök¯:îúëàïWŸr€&äv9« x¨?N¡ý—ü«­{î <þŸØžAŒXöŠ_Öå§PEzö@‚@j1ÈÚIœGN˜€f `cو߸5Š#ÙÔ™‹i‹¤É5€a‘Gº Ó i%.†t‘Jºû Ô"CœµÐû}xržŽw7P欛ƒ/(‹ž„¡s…TfTÐNÞÝvõ¦æìºÚôùáj¦ tЗl$›Pe©5Ãháð‹’q¥;tfû„ö¦Ïðð„01fêciƒÅ”Ò_êÃÝ-YÛ…Ž`Ää¨êìH© ® ¶5<Ò6"Î`‡êPÜÍVÀÚ*D…'nô(Sy¹ˆnÖ»‘1jet¿σ h®ÍÜ])ÀN2TŠÙ%oJ”pzSŒ›A£Ud‰â,T4s>ýþ‘FD¢¦ãªã©|}8žÄÖFãtKóÓ?r™à‘寴|æØä)Èù?ùüæcaÃKËg]Êßq\– ´jÈÃ4ÓæÞÜb ¨,’À<×0ÇÓ,àN³·„´•°FÖ’‡ @"‘*gP,£ƒ{î ¶ÔÚ#9n=üj*³ž(¿7ÂN+MT„ÒÐqá‡óð¥áÜ Í]]Õ“ÊTAq%föÝCø0,t$ú¢ÝŒð̬Ö¸!SE ¡çîV2Õã EŒÝIçü¬ŒÊm€ÚÅóÎ÷D褃rÕ®ÊÉyÎn-ý,Ow8¼ßåŸå:6$$Φb™«¶ IDAT~Åó¼JÒ¥5Åï+ WÈ&×7¹¾]Æ)Éj÷Ûçíãã®ªÞ ÔÚ(&RÂ(€ êe1©@^X›õe4Ù!œ›µîù8âs3ïX\ ç»;ªZŽMc{/cÈ2Ìçë’Ϭ©›ïÃ[§+&R‚l 65÷Ï»7½¸\/ÿJ•þÑîÁšáh°Q®ÿÀ6ü´ñŽÂÜ@pªty»ZwÛ]õ‰rÅœggJÌÖ#¼p€Ùã‹ìgݤ©î<µ™&¨.C=Ãèë=>Ä__Ìî¶“MpEõ¯ÍÍúf\¾/£#Ÿ#ƒþ—x¿8'úuíÜþéö—üÿ NéuÓ)#ÃöGÀ¿ ­;]{ ¹¾Ä‰¿nχgŒ&úÐYí ÞX« éÐ wÐÂÁ{ò½„ FÊÌ‹…x’0y¤wx3 ÁÜãÆ@Û†óÃÝnÍlEÅýÍ|‡6 EM"’Ê|!b¦ïª;¼uf8*@ø¸}p!D™Ÿˆ|K+ðþ©¶µ8mÊ æ(a©¢0ßaáÀƒ³|«¹¹¹éí®€s%¹\ßÿåŸÕ»ªª5§BzÄúX&>XknSQ&qÑô¬&§%ÒÖ†K¢’0¤ª¦)6r@Qˆ­)‚´#vþ9güñüXðÉÄn(áU‡ô‡S4€®ô4ï}–§qä/§[°C¥iTèò~FÔw33ïÿüž¨¹Ûõþy ûÆ`\@•µÃ-Ô§ðM$ÜÙÄÖëüÖc’ÿÑ~¦Ã;"â%Ù˜ÚÈÄ9ç™cü¸•p Ô=`‚O‡ æÓÒÿ"ÒqÒžïˆi†~oGâ4ž¢&ÿH62~¨ôЗ4ωÙán¦h~½Êûû;QXU}ĤÇ\OaI8QçˆîW®ØÔ¤ÃXŠîÆK_2Õ“Yª¤Í+A. *;.'I dëÇ/äĦ±‰õñ Ä£|Ôúbò=é|Í  ‚úÕ¤ž-à—Ý@!=Eè°¸«ZŸ©283k¢›Ã¯¯ÀŠî=]Ü×ðÁs›9©ØØ†§1ïHÄ1eE·ˆ\." Ök†îæ®fÚÌÛ(r®Ä•Q •´bÆ@y)æ€)bWXæVŸ/Ý›é§ê]\ÿ“½k×v$GŽ‘@+²¬¾kñ®¥YkôéÒè$o½%­¹m1ÓbÁJ T¡HÞžîѬÎÎ9ã>É"€PùˆŒÀyHõ²•èC·Ñœ°BI=ÉÍ«O””<¸“<¥ZF”æ“ ìßê†bò(vÐÊÃ÷W­á¸m?ÙÁÛ¾ØúÜ}l°RN¢_ty[–EµJ„Û/v»\/ÿ¸]>®yœJp‚¨èo«ûjèõ5"@ô癑”H6w37sSKæ$È܃qó܉  Åϼ£Ù÷ßg,CK€‚ÁUÐ_¿;çk ¥“$AÀVÇê(aÜ/æ.õü^)UPè7³»û¨$;‹dW0Χ…óÔ|ôBǽ«|½·w»¿š­Ö»ˆœC-òâBcIDIþ#ü;›£X<7íVúòß'xŒÜg_ßðê:ÏmëÿL¹ü ¼Ï¡ùaÈqìÎ7ÚÄܰñB÷±½Ð[ü'·ow¸Çкü»¥µ€ =¶Ôsaðw´?à?ÛÜ~ @ÿ›®¿µ;è!òöÁ¯~ÐÛ‹æ(`U¥ºšÝ?`‹ÚRÄK˜\D6"m1 hEIª¢% ª9&až ÃµŠž4ªx„µ<¤à÷®X˜™a9„PÓùÄWX沨€dFÈ="b¨"'E…PX4õK÷‘o3¹Âîæw73ûjÉu!å–ÄZh{f±O|úE±Âï!Õ(²‘ÀËpÂÝÌâ¾:…½@Q:q2%¼">GÁ9 L»·‡ó¹KSÆvÌ‹§n!PÊVŽôTóƒáZo+¨š ’ž¶ôlœ«»jTx>–ºJŸt‰þÊp;OpûjRˆ ­Âª(Î=ür¹èI•DC¬î-:&*m&#'IQJ%O’±‚$»úÍ1ÔT¡¤b¼%¼Á£…;oÃT Ü QCP9¿-á~³dkd¼K¿Êý¯ü}ÈØ§Eè· ¥ø«—ye"r{rp"í?àýnAÉCö>µøäço¶í(à“iüÿ÷‡;ðèÿ®íðLû3üoOäE‹²â_½[v.è×9ˆ¹æ>ðÜäEöé“öÙk&Ø-Š©¢ªnwÏ:½ˆtê²—ésçPu R|àw+3Ø,•¨®ASÄÇ æ«[õ Ûû\’¨² Iìén±&kEC«P5ÜR_è"Ã2n@X×ìq3Á=¼yÜÇÓ‹…—Û…«J#ZÏ3S†SDO½b8«™ÝÌá¿}\Í;—uNo+½õ”oÐÜîf¶ÃŒiÉŸnbVôÈzÅfOQòÍÁP¬Ù+Ž{OöFß )Â5æ$ís›íÂ=TX€ukÊÑhî…ÌRÏ‚™Ò#ÚüP$%ƒÜ„ª?IYMrQokHAW½Za·ëír»üýr½\ì«iÊ'V¡Aož (Í=TÖ<¡‚£ë;Â"š9¢PhJ·ô1(“óÈ€…£5Šp¥§óðÕ}”¤Ú½ƒcƒYê0„ ÷8unº8wÍ‘ÖëS±WvŒbÆJVŒE5‚/Ýæ~6ar›|zÎz—©$±|á²h€æ¹õœd¦¹ Rs©¤eH„t ‹¿'7äåy¾:^¡Çç|û£é/¬tI²Öq2€¬:hºÆ[çñïswlÏÉQ)ˆDy$µ^ õFááŒîË™0ï»Ä;¬zŸ»_ch¦¦pOWâ ªËÛ™ªN›Žˆ,ÇÍYŒ\ô$mÐ}àœœm¨ÞüùŽDL#¸Dß@!ª(…$ybç§mè À ¶†ÝM©ªTEå»uÀE¸4¢NsÖ·!;ãw!^ƒé¢ t8šwMrN—*±<@>þQ6îk¸,"'°,ág3»yø:&©j5± ‡þgm~øæ„¼|f Ѱ§Çÿïox2xÌÑ=ܼÐBÜ]N¢Ù•*avûåzùûåz3ÛÖU¡Py’ÞÑ‚C+P%ÃŽ%”“gsMÚÝñUTYé-›ö°{F4^X&c~ž•9Ðî6OŸôϹeÇ”Ò÷þñQS…nØ*¤T‰w»}\o74è».ª,Àšw2Æ=€õ 2Û|Ý·õÖoˆª¾ÿÛ{þÇî«Ùê"쵌 ŒO,ºòÍ_çz@?°èm»rŽØ¥¡_x_[ÌoKÔïÿø¾v8?· lÓ×°ÖÜ '¨!Qìu)Í7Ú#y¡Ûáó·ýà¥ÿ9mò_¿àål?.ƒgŸæÉûýnÄè|kþt€ÿhíóÛ<ûÀŸ¶ß…ðã“>$y§ï>t¾Ñb«‹˜¯Ö°‰‘2`'aU«6¸6‘kž• Û…¤_d Š U’]ÓQ –Ö/=(oˆ7WªPDë!6»[¬¡Pu÷|TÛÑ\©ºœµJ¬ê8A«ˆ€_T¨‰EÔd·Äê°¡*ÑüüvFæV sGÀN<«zlÆMÄ©?WTE3‰]‰4×…z»\F‡GC \®G¯zÝ„p!ŠM_·Ûdý'ÆÝä¼ï}¸t,¹—–«lv×aí}ëÞµ ±'ê‹`¥Ã¶Öû[DUõmQÕ¡f,ÞÀÞ÷ dÈØ&Söò0 Fë8ÉTy±o²íùÃiÄÎdz¡«‚o .4øê¬ÔšjÌ»WÉ-Ÿ)»âd th§´uoD:­Uâ(Á¼³ ˜†Èôx =¯•ãé¬À=¡@uá‰V-¹»72·=iÙžÂ^Ÿ·)Du´JîÇÓëC{êPûzØ÷.©$98Ò¸™}Ü®7Û8žY% ¸å$0ë•ä)¡ÜæÁ÷#edë£ñ€˜™©jWóš‡ŸÏÆÆ#ùŸç–ãÚ-ó¦ŒpÌÑÉ|¥Ñ@@Nèƒøê\‘$…y£bY–å/ïçå¼Õ¨ûÝQ©*T‘š ©I>>×Ù3[cžµ|IZ#L€Æ@.|âmHb%dÏ[ö[C)ˆü¯ˆ”¡hYáZè%–$ î/‹HѾràD¢à%‹ 8zãD ¼Å>¨L¢Š£@‚¸;ZDl¹²‡õ€:—-‘CŽÛÚ LvX‚(К¥â…éx E•<ÉûßÞþég)bnmªy²ñ‡ž´'˜ž UÑ=ô2i³ =YŠBi ;‘J¶ðÕxÒ\#ɇpûj|aîEϺ pù¸\okà9i‚´¡ÒÜͼV77@´ªžzQIB„°&ÿüîM£*k$©·JÈÍá’è¡Ú㹨Å\èp®@¥tmÞœJ‚¸b£[ƒÅÔV·'­Ä´5žs/óÊžF£ˆ  t‰i°PŠxì(÷¼Ž)Ÿ»ñÇKïMéáÀnü¶d 6xq…ª¼- Ü,n»^ «e>Uå$¬Ds[A!V;®Í°vº&CÈ8ˆ|¬”ì ›4÷pUfÕø¦’%BkÖ’hªG|b Ïs«LAÞØ>°§ñ±«Äî×Û5……¤R¿¤û D„Ùµy ¾èYVG¥~9{!!Xqý0¬°_®ÿËÞµ+G’ëØ‹, H«ÕVi¬µæÿÿbÇ»kdÚ*À*Ò™̪’Z=Óqcw£-©I&“<ô¢\!›ˆpn,¨€švgÚW–ŽNMŸr,ïYn­ä\™*ýöûïúíU¯zÉU¾ËqòÐ{¼ô#0¾PXŠN3ºÅÖ‹¹ûùH7‹'8ŽnšÜ+ÚÇ”‘«5îHÕŽOàC·Òƒç㉳?VÚÄë\  d»p`÷À=ð ,ß©¾kîëhÊ@¼ä5|àΣ1š±2åßñ•Žûý„ü ›z,¿1àcÿoÙúÊñú8Ü£¦¿"Àÿåc,ô'dßnß—Ÿ Ÿ8øß[K?²H>êqÑíÆVhA~¸cf¸ˆA Yj<˜EÛ(= Î_E·Ö( š´=šqeÜܚᨕD$JÉG†»ûÕ“›·’Áô[¶Ï•P2ˆÁ>ÊUSwÛ¾œA@3ªD…LD 3NèBqDq*¤Š7×oªj¨bsˆ+ã´¹©©)ªCˆ*žNå«Yó(%ÂÞ\Õ<ø·Êã £Ëp[Òã;t5'úÈØA*¯z5@Öy²Y.Ö‰3 ç¶SJŽ0Lžrã¡jà ,F#›ÑW»ñÄAš×qóÆTˆ dÛôrÑ·‹^”áhÐo@UÁU½‘Å9T‰‹D™F¿îÕ¡xàªw]¨0\6WàÁ¬ïöøõý ̃âŽú¯˜£Ë<dê:õ°vhŽUÇvƒa6·%4ãÁíS`éÑA¿ûåý[£²*ΩzðÁírs‰Åñv{®bUˆÈóóv~azýKïcÕ71Ÿ`QÜŽeÒúf wêव|Œ,­­ÇêfñLL”jÎäc_¿ŸfNéì:£„9ž”éÐ Hz3æAç›8—øé¾Ôõ–˜Ò” RÍPQŸ˜E¶¯Ûù¼mOîÍGÉ3ŒSe™º¾ÓËNŽr_¥¥·4 ª˜«î  r%b¢A›ìï’L~ ‡nfê±ýVbæØlƒ^Ñ÷¾9–ß(›gøÖguÓá/ —lQÞ™I™ÉÁÂDÂú‰"ä‡)äœÁ(S^…­ …gö°Jûq@Èûˆ’Ç2{cï¼þcb£† ÿMa@}¯å&'‰b ¨¹¾¼¾¼¼$õ`Ub!áÊ€H‡ªæ¬Hÿ¸ÕÈ×Ý›šs4– f j®ÍÙ|û"\a1mãS•©¼{¿Ö³•÷ìâ·e\,±ÍQ~,ì…©)W‚°œÄ`•®¸üõjͽƒNô|zöwè›éÛů`{:Ë×DbÌöêh¸wÏÕúu¦×àUæ6ç¡ÅLª…‰˜XÉ9ˆµ÷¤ùßQnPÍ·ÂóÇîŸæäÜ §ãk)%•N¡iLÞ·íðgå'»ƒÜÍ{´æacw§Û;]ÚŸJ\p†y‰ávG‚€þù;N‚åcÿ¤‰dU>ÛÊaOûeÿ’Ÿ!ëNç·ïxë¶ßaïJ^ãÙùs 1SZ3N»»¢KðÌ œîþò6wÃõt–Ípõ¼l7롆•˜¾L°æ Uá¯l7½¨¢ÃÍÝ\ ÎÛ-:I”S`lQàž ‘T »^ÔŒ+(ÊÇwâb¦Ê—o¯AeÉ•å·`橤ÍSIMû<ÍT«©–à½Äæì®þ꯸3Á¸2ד_‹5#""ˆ•)ë?AXmmÂÂ"Y–ØãªUþЩ’f01—K ²F©pÞAÕ¦Â>¬;*'ïžñº²×HbH‹‰åDð D’Þ¶U›!`crª$Ì"$"\¡êJñ‰ÑL›q#°ü׿þïe´.OçíiCa5µ¦î¦M‡E‚9mþÂÀç<\ýû‡Üƒ5¡õº?“±ãcJª¡ Ïvû¸;ßé…C§Ì‰]˜g|iöÐ6‡½6¤ØˆšwpÝpR  Ê¸­>qǾTášFÏaˆqõ²ßÜi ‰e“óóóöt¦:œëQLòŠïHN¹Àå޾ɀMròŽÃ‰=|=ÉŽ>u¶©IGÜÕÏ29œÊ«Ç׃¶Ç«îw‘0û‘<Ôj’®Íàæ#r¼¯ëcvoý³stêÖÅÐÙšqÙ| J²mÏÏÏÛ×g‘-öƒ³S–žFg&KƒÌ`÷¼øÞ²1`Q)mÌÆD$ÐZ­‡ÀDFL,Â'±ææ/æ•ó‰"«ÞÍ®î €ÏdË`‡Ž´ô˜\¿,¶:€žóܺGä-½o»ûÑ<‚½d`r’@—älßà>ê S%nÂÄœpl=<07ÜUá>$E^ÖyÓ?W­üãÏô;ó»{ –±Ö€¬ÛLh®úú矾üù¢oDí7b¢‘ÇAÚј›#ÈŒ¡"Ïd†ÅMÐ `o®Õo*•6HvÄÓÌÁ§èwûê:;Pàpê7¬à‡Ûµî0 7kfÍüêzU"ÀÍšX3mª—‹6~’¸8Uy~~æJ/]^þõ¢ßÔ.@DÎ_ÏrÞpJ@Táõ‰ðe6Ë[S&‘ TX‹oh%˜åÜ€®Sƒs%BÚ™‡;;ä.=Ò—1yï*¢ah˜´¾S¦ë|”á(#h؇ðïØ¸KîvÁÏ}çvN­˜nlàý÷£õÖhëß6 ?EîGõÇ·­_ð/ù§rŸçpX…¹zªïŽÛ ÍÝëâ?&馑–  rÈ@B…¹*×è§q@"UxyhHA…b‰œ9B¦4}›q”"œÓD¨²›ðPY<|Õkææ¡ÂÊI^»†ç9Ò‰‰ Áëàn(ì07ºùóUX!‰êÈ(öô‰U u‡ˆÂÝ Ä\ˆ(@J‚©^´]ÅL„í­Íðæ¯M·F•£’E©ÖêpÐ)J‚°^-Š*«gÌ–/<í’À¾³)=ÒÅÓj­ùD¹Ò…poðæJj™þ`Ósì‰Ðiñ"¼‡˜•ïµ|s¦˜3ƒ| 3 ЧÑ™½xo5”U• ñ<›Éå¯}»hq鎥”«u'· ø¼ Ë«ªÚÈÍ"wCÌ=ž_|wÜ>aýÆ}ýÉú¹'»ƒ*ñé$È&Ü YCT‚ñ†‘°MÃ9o;ìyY_·r´½d@¯R°4]>vEÏÔDÇmîÓøb`)ÑÝܸpçd oÔG¸“Ä »£ÑΨG‡”¬°ÙÍîn?ó kø(_ì–peO¤ƒw3gŽ$ëŠð—Q‰4àÃÍM9rª½«,ì›gŸßÊ¡³`;ë°˜¥Î¾ cë]Ú²ò r½Ÿ "Ç$±ïÅ»…©2³D+2¹†Å«5³|ÇT$ðÁúõDÍð¸;Ðaz¾Ã0»ÑÈ‹¹-ÇE¼`È“È&Á“ŸþJ93ˆˆ+óÀgÄõ`+Ñ3Gw§PÁ1Ón2Õ,ž®‹t4ìpqæ"F¡(bÇã¼Øþ1â¡å÷ÜKïHüH>»QÉvÉ`mý•2Pi76…ïÏ–Û˽a^±-£³‹ÖtD]73ò«©š«¾¾¾ê·‹u‹ŒèLéâp½š™òÛäcÃRMtéühŽÅ+Ña™éÕ´‰šÂýêéBÅ·G™Ÿ 1KïðŽZÑ ã>’þºïNœ\…QMÑÌK Uc«'Ž7ƒ+¬oþñß/zѳlT™Eè‹Ð‰Ý£Ê—OÆ `nw>2îöÕ˜Š§á˜k>\r Â\Ô…Ñ+.oipÄ(,̹çÀa%Ð4k´È$›i>Á?2pÉI_vlüУO˃o< ™xûغÝ$Ñ¼ÓÆãõ÷î ûòâøe"•þÈáûqø—üKþ‘äÖ¾ ý@PA`î€ó#jÄß·/k¡öFÎMg1ƒ»£¤›àFœ+ïûøw€L 8ε©77‡6=Ùà´jêW#bP¦ñRÀ›»Z32šª$OB'B76À_. H1t1r´¡2VȉE&Õ0¼™öÔáP¹»áòvÉ^ <žWÏZD*SeÙð{ýÒF73Õ«ë›^Þ^Ñ@"ç ZÉš1„&yƒð_pA‡eeÅ%®èSiJÌalm¼uïnž©,@UÖ«²»5ã*4滟…˜Ü gŒ%?9ÌÙø} IDATh«nߊú2‹QgjÄ„¡ê^A®ªæW·®¸`ûº‰ðù‹l›ó ýáÍõjÛÓù¹Bd£;@L\ÙÌ.ʼn¶§3‰ˆº4UµÄÝww¦¥%ô“d¶2pDiÓ÷ж‹Ü=ÁœÜ÷|xwknW53ïT4<N7ÛHy>N|¤œLyÈ1»ü>êüMÿï2µ¸dí" ‹ÜZ#„ËàÝv˜ÃÍå3žé©)t!êæ` ¹OV¤ˆ¼ŒÃ ngUAõdïc´…f«Û>=V 5&p™Ëj÷*Þ2Š4X»õ›—ŽUÓ3 sÔ2âE)sÏ…é«-Íííz‘6ö°n:[×u[˜ëð¤ÌG@„ºgÄåe³Rë{«i>ÖÌj?‚Â( W”lI3ÌUÌ^ÍÜL­™‡ \D{-·9’}6spÄ] #L¹Ù[Zš‘Ü¡h°fÖÞ$.XÅþšm úñ,°ÇB掶 F˜ÐË3 ï0à»;u8¾/Çô¦rsËÃDøXàVnÒ–è@;+sŽ@ª«)ÑE/¯—·‹µ¹]äô rlsø£Èü¾¢ã§îN±åˆ1‘ ÅF­æj¦"Ì‘)@a»òºv0Ü;ˆ&¯Æûns72}ÿ%Ò@,'cˆìÐߌL³lòeC–âðk³^ôõMUÕ; .'¢M8* 6†+‚!eÏ_v“ãŽ; Øù†QÙº3¦*rb@©ÞSó†»ùðçJpuû­(o<"1õûÍ'¤…Ö[¸å¼;<~B¼e¹…GoMë÷ë†c‰û/WÞ«rDü \î4­CŸÿVütŽàýW×é¿þþ³ä¡ËûWø—ü/’CjÜÐ]|Yxw[¤/–ó)qÜîuÁ@ØGškÁ‚þê>Yµ ©l ÌL\) oZÛ«Ú†ÒãÄÛ¬ƒÉÐÜÕÌ]ªqÙÒý|qN:h¤•ƒ„À•·/‚@SŸ7Ó«¢;u""f M%A¿€ªD\®5L³0•%ò"‹SÇzH~Ý„… z%"øõ¢:¬¹T…ˆÝMU©2häwg·´ ÌÉ‚™áùÎ3Ëf´:Õû!(Êy†ú0±g ÒÊ\. X7žU {ÃÒa€ž‹1¢Ði×uGÉÌatx‡;FÌdL´2¢Ü(ƒO" ‰½Ÿ9ª´yF1ª+èDîÊÏ_ŸÏÿ)¿ÿö¬ªvUoQüÓ¹hdv¶~áBØ t%7¼ú+CÂ7#û˜ítVŸ•ð†ÜŠçãXv?˜Ü!Æ2os5]Žr8MŽ €†6ìÄ]IµºHøÇƈ³’ðƒ³<¼ø.¸³~-Q¸{‡íÖé¿v{ÿÌíd·JÀÉÜU/*ˆ”N8ìê‰ òžµ[Ãþó£ñ.!µ‡jÅhñ÷8ÜØØ’BKÎgJ G!rÆLnwóF·š†^#Zô i >xêÙ³0pÐzYÿ´w&?F(Ž_'ç!罕hâ&*bp6EA\€ O3w®Ç,_:‚a÷Óµ,ÿïoÝ-º-êl¨Ýpë,k]…ÿ‡½«gr#ɱV&- ,õX¤¬]oÿÿ¿Xys–Hkº­¬Ê´põA²¥îÕ]ÌEœ2bFR7‹•••xÀCl)ÍtqUUu]d—/—¡[ækѼá3SnÝd$ –ö9¾‹Ð/p00ÛpÿfˆïȪŒpn4ؾNx¸ë[Ž‘9†ôZK2—ÇP§üÎþñ)áë·ýüb ¶ÿp‚ÆC }lÎDžíá»à…:PÜ•UB§Âè°ÙM¯:ßLÕ*FUb/õÆV45£'¡›Æ¨‚»Çýö‰9j¹ùbªâ_̺ddV K'©FMŠ~7÷î€~KÃglnX¤ ÝŠI12wtq·ë<³ª ‡< º3èöz»~Ÿ¿ÿ×·yVÔDÂ|’ð‡S£¾Ú^Ø:ÿvï-¼‘k`lۚƇ­¹ð‰Œš€nÛRFhÂÊ>÷dÚ¾jOåG½`ËÓ²&hÚCßÕO1bë_×ýo#Ý·—ò«è7ÁÝãb‰[îŽï]â‰'ËõعFwï5|½òøØ¶…ºcÏ·÷ºÿøƒ}û4F}ßþ¹+‹–gîi»l¿ðïökíé„ޣر€ý‘|FþʆôÎ⺗;à ,×ûË`"y¹C¨@sm:7“c’ *‹€ªx¨ #+Á¤h1·¿®Éë—ËDõ+:¼ùõzÅ0h¼¹-âÆçË…> U¸Úµ™ÍîÍ(pELéP*˜ê´j\(uD¹BuøT' u–xÌë÷«šQásapbW®,ÿ”iÒ«ˆ¾)âo¦MÑ€ªs‡Îªo³9dý2Qeo;+%Óqeíq¶S#?¼ŽÄ ËÀï­ƒ8äBs8âæ.ÀZTÁÝCŠ–Çç}Å1»|üÿ¡… •”²db«b F8ÖCkXo¡&0Õª¦õ&|™ÎÓtžÜôúýz{›õíê͈ù¼|½üq†ã_ÿøóDÌl½a.³š³púÖž?eÿ¤=@åÝ¿3Ôóðs¢L?.@S† îVpú±ˆEa¸>U7ô‘$L!ÎÄ^6\ÁX­yÁ³yØžÜuk³¨va##fuw¡;6¬°§lôzjZØ(n6¿ÞDHX¨À:ÔTUáYÚ]©E ç×8؇ˆ8-O"cž·£ÙäÖJí4ì$s£^KP•9 Qû„#ÈêmHc±»Ã6ÕèÕ'ÿÞ>ÛAïdZ«»mÞÅð>õÜÞfÙ{¦Ç!ÞÑ÷6Ðî7•Ò¿!ÖÀ;³-Ëj¬3(tÚ‡×Èaݸ°ïJºÂ’Ïëx–8°}àgõXZÛÒ˽aHå‘«©»qŠ€D&‰@¡uW$âÐÍGX½Ö\ÈGvâfÓFEP>% r«âÅÌÁÎÚaZs43p”IÛoÂÛ[ ÛݺqŒ€[Lo"5f[Œ8.+¬ÑÃÀÉ¥Wù”€ Üéô ѯ÷Ú}@÷†d¾ŽÉPƒî€¹Ý¬¹«fJ91 [3mŽbÜ¢fanD:fòý­ÝÆV±C/`ƒqÙ¾°5'UU’I<*?nm˧x½;܆ư˜å‡OÆ–µ‰ýêb  id„,Ê`0/9OèD"ç›_oÀì‡QaÛÞ;~;{®@5º¨7¸šªXsJ@êDþ8¼:Ö÷#û8Ê{pÉÞìfYö\@$R€îç3Ÿ_døëÝÕ¡)„Kà–ýSbäID^&Th”ìá:ÎS^okwXhG²BÑOÉúNæp‡¶`<Á'ÖW¼ò#žÔB?êçùÝŸ÷Íö»ÇúÓ•·œBiÀˆæ8‹ŽNö¼Óÿ`ãÃimzñ3öçÐö€züûáNàÌÝxˆ*ºÐ~¾äþï¢ß÷Š’¢ÊíüÓ[€ÿa¶ýÀÖý{Úóç}×Üüõz¿ïôaìs£?ë}2>íxß„žDTàHíÍqðo;qüý†÷ëLØ¡ [#*q…†â€Y»½Zo”Üž#ue·:w A@nJT :£™›SÉÌ=@øÀ©„H/Pà‹ëëízýæªr’ót± ƒK¥³°9iso h`Äð¨!­ÐlF'™.—Ëùå|‹ º]¦"o¦Qa²gf•Î7WEª3Wb‹z ‰,5÷Ë4‘œ©ðímÖYÑqþr¶nç—³ˆ`Ü Fá¿\.ÓËMÕLR%tŸÎ—óËdæÞ”*}¿^¿ýûß(<¿~‹D6W½v&%`vùâÖOB£Î¤œÎg&\• ϸj£´>¿œýzUáF•B]Ƈ­†Ý*aÔa5ù{ï†ñÑmâ­NBÜ ÌïP(ºYƒˆ˜úu1¼)B¸2WŽóŒ{ÊTæœëÛù@LÜaËÀêÄѯèa U¶•ñÀù‹Z”*­Ì•¨°õT¾¥ HÉJ­Öaæ\iqàz½ê›LçÉšMÓY͵U²EíêLd-…mœeš€Âç ¨4¿êôr‘Å" µ-÷‰CQ6Ò±î÷™Õ«dØpÀ82™§µ‚ñ EasçnNÞN¦]iÁÇÝ ‚–‰´¥Š›œ„Û¬X‡ÛKD¸W˜gÊÞ YoØp@1À5aÇ~>4( A7€3Ь³!j¨—(@Â|µº,µ²õœ  n%:™3õÅEU¬Ýn¯Š"ô³ˆ þ¥j(1‰ˆd+ýµ•<  òP—åB ¶ð¿UާÜ0 áàÝ-™ñô˪"C;ÿFØ@fp4ãæD‘é ɉ…·,鹺ÅxÏŠ¯9€ƒ³ˆ­ãFLRàݳâZ°rqï´Ío‘£ÇËM'65ÃËødƒîÎP޲´9—à>äÀò­uxS™XÍ! )Ñ#öµ92Ð#AAàPõ èˆüÓ[RØ^×T¼‹TB6®€SÆxȉ…L÷·›ª‰Èåë×é…›_g˜Qe¯D•¥Â»S ¨ää1÷ˆ…fuU5Ea>° ¸¹q™IV8&ŽLBjJ…™TWÇÖâÒ@!ão€Ã›ÑIö¶QŽlšƒH*“7ŸçÙ›kTi-°!¥F…“U­sÍ¥ç¦@”AŒ?×ý 䳎¹{F¿ï2;ÖäôpЦ/𘼰@ñ®tJìX8@a&¨ª6%@¢‚ ©ÎÔMD¤ @hª @:‰€ê4D…Å5u `Áè0ÕD„·®ô —‹É$½"uÍØ¢äz`Aíy‹€£„•7PHvoQñ¦žñƼòA¡Ñ`‘¾‹tõD•¹‚N" 04袥½#x¡)ƒå”‰çç/g}½Z³€d\9ì ü@„…î¶™¯‡‚Eͤ1TW:¿Lª6¿9`¾XÇ P%pŒûßÛØ;vþö„8¶PŽÜžÂBÛ<í¶þ±Ñ`eûž­ ñߎßæ/îÛž$ J‡»Å+ ·&Ú†+èHRoŒN²J“l=X;ÓÇA˜® ó–>Ü÷i ô.êjçßaõ+ÊwýãÃæÇÇ6-ÀðÛ¯¿{[ƒg€ÞÇîkŸõýFûíþÿÐîX¸¿¹1ýŒ&øÈTÞG­”ôû™ jsTŠºèäæÓ7uU]ôúçõúçw˜€/ç'˰[Hh09º(¨Dt4Ck5] ÍçW%fîûЦ‹£3Ó‰øâîÊ"áJpX¸Àš“)·Mbt­“D*ámÈð9‡›*pCQM½9àõ‚°O¨Eä嬋^þ8‹TA%&€˜‹Y‡ªzÖ4vcŠÃÚÜš¹ª›Q¡‰Ïç—I&ùöçUUÍÜú86*qaÅŠs8°;–öTz´{:òè:°î™Sáj ¨`JiYon»¬Ñwgµg©ÀmÂôõ8Ù·¨ TˆÝµQÔ%Ê@S3[GFйycílzÀSºÓLgUR]tAªhQoPU{•(ef6›™¡2t…¯ƒ±æaWd|oÿPUìƒ.6»m´ý²zÏQó^Ûß~MŸ ä“"=÷yŒ—­í.:àØ2.žûâ>l+‚Âá‰üá'yïQ[…‰¨°7ó¨òÕ·q"DÎÿx( »dÜhœâi"—Ñó£)ck0íN[è."ë±Ñ.laã&áP+ņTƒ ÅCœÆUéâx?²6Ÿ…Gáo`õ QØm»²V÷©tÛ|û±WoëÑs¦• @Ñthwss; ôëñ.xW û€€BI´í_Y¿?s¶KúxKñÏ’ýàBÖýfKF 3\€ý^̈&€Â)BU“Öiq ,ôñ©2@æàÿfïÚ¹ãæqèEENN•låìOØnÿÿ¿Ø*ž*v%ÜJd…-@RÒŒœ8ßÉ㜜 °“±FâK$•ÌEA‡2 Pn³² ’`fN"hǪsu§±ˆ7ýà°¶SnÃ>X•ø©s@@€‰µ^::~Àýtí5æÓ9Úý|ø›ót7ö{Sá=~XöªiœÄûx¼Ýc,r‘ë¿®åcžÌn\P‹±ußœ›ùj»wÍíƒvíïºuf[-f®Ã3&š•èµ…úõ­waoò:ËkR¶^û8 ôO¢Z²{%Óæ9Š/rÄ®Õ;>BD%SÝ …ôíˆîZIW4ƒD%½W1 Çe§K€œ~PˆJ6¸:ØKCý<9™¯öðN6û>÷¶ÙÀß>Ñ~¸´<3àNõ«ÛÓå·…4ò×þCEh|ö+å é»6 yö“^: ±ô肯¤¥¹ˆ¯nÕÌÌ^–ååv{±åùÙ^£”|1š$t7xU‚ácO!zDP4 ͺºð¤$€˜;^-6™¢"YÑ`¯f¯fÉŠ½¨^U’X²RG ¢$¨Žf¬( ^P7±ÊM?)È´*~h~+ŸŸŸ»¾.‚ê”rõæn4‡eAsV/‹®"¢%•ãÞ]ìV_V¹H)EUùb^Ý^ÍC0I úéé“&¿-¯b«É&¦I½‰$²õxÝÁúÝO÷L?ÛÿuZ V(W’¡ÙLf^IŠ6E&Ыü=˜P¶V0ï2Ú6ÃÎÓ/,€ˆdÕHs$É"šm’޲s³®‡“Õ J(CH"Yœn’õ•fY¼º\I|À‚žWÚS­zføx ñMŒI/ʈåœß!vÑ»6¥CsÜádCÔ¦êšÇÈÁÆÛ{9S1[ÍšWïJ‘öÒ¡qHÐX!oíd¦ïÞL½µlAó;Œ¨0]²JÖHñõèFÿº ›4*"'ˆÇ39èï›ÌÕxŒLL˜.¶Z)[¸u&êüŠ)›%gÞ'K¢:ÑàmàÙüŒrXî÷«+†÷¦Î½Ò¹ATÄ t–µpeY‹›YŽ<ÃQÂg¬AÌ4ŠPñó.¼P·ÛnN—ãù³Ûé»Ý§ñ çκ¼¬n¯ff¥+‹>ƒ»[£¸k–¥B¸(òô]Ñ«²ç˜^J‡U/Õ™D+eˆJéóÌgÔI«$É•N³•‡f)ZØP`Ä` ­§ˆ±˜ùû7x$þ4x‚‡#ufCÄý ¦{VÂÕâ(oïN{»õÛéPÛҷܾ;·¯^NCNB[¨>==]ÿU¼þ›æör[>/·—›6•,f†Öáf¾ñE÷!êNS'8$àÞȵp%k¹zd(ˆU„SðíM.wŒ‡¸µ¸nÖ¯3ɶPOÇ%¹@”$P UÝáNT¦¹0 ET?JÁÕhb=í\s[êè‡&ðâ”'3"½È“¦€¶ öñŒ›?5Ãâ= î¬Gd4«)_ëõ?“ÓN9vÞ‰ƒMø#dPf |urß–ï>ÁwÒ6”ÅÛò>ÿè_ƒ{Ëšxÿð-3Vsßhý>ȹ¢|Œ#=Ž'^ðç’)2<»¨HÄW+Ymùr³»½,¡Íx%Sa…­&UTf¢ª;­†ñCC/ÃËUZ-åã“&!B¯nÕÁeYL²¢Q³Jº–,HaX²Âiձܨ“lÀÅκÔ(IzoQÉ‭î$«#S.RrQÀè\Í",E/*I Ô¬yEÔVÐV®®^ÝÐÌV¨¹*20½t ,6¿€dJ+e”¼•!–K)ªVzu4¨¨e—ÕàÄ…€¦¾™éŽæ”r¯LÆu·Ë{£dÐU#"§jV4›‹°ÍP (HȧñðPΦ©ÌŽY4²Y¿ãIãtŒTÕA—C‘Æê㹫ctR¯$¡Iýb¨E[Ì/ÎJ4•Ä`ë2°xaC ÎXQ T#Í\"ì6J¿ÕÊŽéá-Ó÷ÌT°ƒ [²«tÐýT§æÔÆÚ.9ð ]Séµ_[÷ ôìp5cܬûÐ*½Kº7ߢ¸>€þ$|ïp_Çܰm!q|ñ­æhâ Í‚ «Ž³0®j÷4IÂ$nÙžßÅùéð†ŒO"èÖÿv[wyÜY¿Cœí*ÔãÂôp²C“¾©Ëǿ4 ‚NTF¹£°ŽJ+ƲÙF½–ûñqg|NÙþÃ=F`R©†’Á\P{¼B%ë6«m4j4’Iц1°»gO‹H‚]ÞØÌ¶«l4Ú¨43Ðp¹vƒA”™H:+4‘µ@  ž;ç¶ŽÇ*`í\ùôæÌ¢Ž"èøÕ$zQ[n·/¶¼<“àÕ6 ‘¬’U.Z2Ì]øè¨Ú†7*KÏÿî%t›Ì§Rä±c$׌ ÷7?¥œÝóé°î{ýæ[sxƒH–hêô¶àn!†+$æI–"ÖÈÆâ"Š'½Táï…^ .wÖ† ¼»mW9ºwÀg{¦×8® ÷«ÓÍh—¢HÌf\ž„mrÊíûnÇ`ÈØ[šÏ…úµŽëÃm“@7:è´êýümî‰'Íá«q¡^Š´îÀ’HÄŠ‡gâ¹í¿ŸI "i °1ƒ™¤nïâÕï”7p"óï»ËlçðÉ5¾ Iú§2šj>.ù^lâÝJø¼0Jmÿ9ø¯²O}â¿ œú×þ£dS8ÚÙ’’ýN÷«Ûv/ÇFÎtÑŒŠ¿2>íu;‡šÝI>ÁDd”\F²î‹™Ùóÿ>Ûbör3º¯dCɰÆÒJg+™¼æh°Õ"ÑÈè4s§­Šlþå¹+IªYÁ™L·dýdJDryz*lÖ+Ä,73 ³óÓ§O ý”,¥”ò¡hV£¡š¹ÔÖ͸5ïÝ©ŒjIåZʇRаºÑPa+Ÿÿ÷ÙW.·å?ÿýf”ùIÌŒ°J7 u¢’¢¨f+—ÅBÙBrwñ ÷b«CÌV³WóF¹è§×§O¢WÇ"€dY ˆÀÄFÂÏNÿÜfsê±`ÿµe¼¨zŸbö¸.ûòH* šÕ.E²c54xöù„SÔ›M5LÜE†ËªZ !dã–Ô¹ð²hg4žcí.4¢‚«ù Œ=.§—q«D…U3º…ûÀi±ê²h~긻ӫ±º|ë`x'ùCÀ,‡àoèãU:ø€¡ +gÖ±$šXpç̰_D|=UáDÛˆØãÊNE8öî`FL^öS|H‹€¶›»Ð³°EyíȆ¢Š@‹¨ºÛfSÍÄ-oéÐùÈ—Ûb†û…´SVv];vaç}fwÞ3‹Ü=ídp¶¿ì>¿íÝN¥|B è tö$ÃM[}H4Ø|Ü–h=B‘硎¨ußð´¨ÙFdn,wG¥¶kœ%lþ<œcy× ïr}ä]ªV.@#éÉIQñKœ\Þ1á ^¹æsçIÄî¡H½¨HlzHÐŒ`ò—ka5«Ÿo/æÕDÄGæs·¬²h.š$JvYëD¾LÛ¦Šá~êo}‹µ«ðhBÑ/ÝݘˆÍ5³ÅÏï–ñ?SÄÇÞ¯zì¬oám;º‡Q°ÝÙ× "TguØÌ^Í–ÅWƒh)%z'€øjV»/ÝÝEƒ ˆŠsD‡½ÒµžQTJÑ’Õƒú[ö†¥p߃2Éÿç%G”ì^S\Ʋב"Ž•¨[î\i‘xN_–›™­|(Ÿüoß IDATS¬"Éê$³b8¹Øzf¦ÇÜî£ô†9 Ó-ËÆÉ!ÒSHTȪ"ܨjÞÞº€CfÄw¨¨rrªœ6»ïMí0˜?KýîÚ—ÓW‹¦ŸË£côç·Ãì'?î·ÛGùkÿé™´ ú­2[r/=5Ø1ëšœ…ZІ=Ü©ÈÁàÔÁüa¯öüü¼|YH³³—Û²«¢YUUséá»,›Õä`ãnÁv¨21Båúz¨“æ´ÀQQ>ºì, $-¨ ʬæFV÷F^•€³Ò¢ª´\KÏÚ¦‰ðic¾ÒVsÒRàœ­4)—'ÉD«îf¶˜™±âÓ—«_  ’Íf´e±Ê2 ⮀U:äȸ4eÌEÌ=8¬‰ê¥~eeñÍâªf.Étí ºÀÐŒOL¬NÜÌ)ˆ¤©i¨Œ€?¡ÁZ%Ö¬– k·Ð§º­“£Ÿ]BÛ>Ët;¬¿6,(D'Kä–d’Gµ$aTa …K†·€Ð›­Î°{E5jŽ-€{'‘PP].ª*ÈZT‚oAüÖÕQé;Æ oNg\Ðrö“ch„í‚Gý` dY¾až>§ÂÀ¤ÚžÅ=ýM|Ò#«ÇУ±vÇœùØ«0’;_WòCÏ'í{| `FËzM§6šš‰ 1Q$ˆ@Š”¬’À@:81íÆ£Mx\qÕÁÁtè`ò]ì‚=ë…oLˆtäEèô:Ï0×¾_ 9 €‰6avHTEÚ2¦·hhíç¯B„ëÃ|ꄺY¼Cw©ôŠ•Kƒ^p˜ÁqcVNÛ‡CÖ  µX¶ J*fvsséåß¼û:³4٠ܹ{Ou³uyé aÚÉ®t$rw®¿¡Ó¾ªÁ9‡m#Ìž¦A¤xÛ'7WØý°~W~Óƒlñ¾Í[Úϱõ éÔÄŠ<˜8œšËp\E’OWôK¯j~DÕ´aÕ…E5M5ï;ɵ§±u †f)ÅJÑ’ÅVÔ%˜ÕÀñÛ†â ü(l~;°¢ksRªÊ¡C¬n«‘f¯Ëm1 ÜòE䢚7­fó÷½õÐÝ-±sÜoÁíhŒ»;£J¹V Pu9Ë6nèi4_Ò1Rsºwi‡}åHñÕ‡lúä’9Ÿ³€œÜµ]¾'ày´€¿òôŠœuî P}p[þdyï³þµòXñ¿ð"ó…?)^²mÚççý¯—Öî-xS¯;“Fo>-z¶ÐkB·~¿ümø$Ûà¨ÚD’R;ög&¦D"B@¼9"& ‡ƒ¯ßëOGx×óTÛå¼!^,çðôvɸ…Å•”Hõµ“–§.áÞÝ5œ·k¡A”….™‰·pHlD ö1˜™H!þSíƒö;eÄœ#?e;_jãƒ$,a=§È³3öP¦etõüŸûcc?ùEœ¢^‚ûǘ±Ç|4´þPa˜rmz,!4g¢Šó‡žUJ'Ž–Ñ®Ýu³ÖŸc¬´1ˆ¯úwow¾èùd"†:¾¯ßg£wgpõ,tMæH%zˆ'XõA¦Ÿ£q8Fˆg¬õ»rˆüïMÝk虎"O¬ ¸-ºŽÇy/´ˆªšîáu'Q_Œ«i$|‘Aû¸8{fôÉãIÈÙbï€qzTGtªm=iŸ.yã&Ü ÛØ¸@4xq© .!@˜š Ŷ@u4÷M»ÿn˜R:Lôr»]~»¥3<8§ýH ø=$,¿íÓaĶôÇ’ˆèÉ€#ó߈À}Þæ7iÜFõ/ñ’×´ãï·§¯ fŽoٹမ){È´°jþgU«nfžïûaïâp¤÷Ù{‚ͽ…f5î~ýªœieI¯{:B Ïíj&^ÚÒmî»Aä­œ ç¤p—23‡w¦:9 NÀÝq¢|Q3B(gQQQUŠr»NGv¾‹ïUññ¿L´´ðÂÎ?á6AÃç6>“< _ÅϨÁWòögÎk¬[ôKJœH: mYP~ÒüZ—{38ïàçû7ðµÕë[þ6[ÕËc-$ü5å“&<¹ýÿ¥ÿ³•u5Ë6à˜n¿R>Ùj~h¹Y¦uoTj {~H¯fÕÜýöýv»\.—Ëízó»u× E„<)€¨n5T€Âhꛣ¥oÓ–üà‰(JBŠXͰ„¥‰¤÷ø$Q%†Æ@\ïГˉúñ¡Ê³~Dõ¨aÐY4A°‘ÉTXä1e9QN4³ P@¯ã|%Â=9·ÒùF‘ÂoÿvfUõh&o€WÓ¢LB4OQuøƒá’’~s‡„»Ý½§í©nÙªùÝÍeú`)€y ')|Øó2ïvqN+]‹…fRå(`j$;-e#Q33- ¶ÃŽJ`$XzcÊén7ŸAJ£‚ù4«¡Dй¡§.há1A†é¼E’Bå÷ÉU“H°ž¨ Ýæªš84lÈpN)\>Ê9œ,V#¹·ìú£ïwqOaùóÓã-NévWœŠ—±ó‚iSèÒ˜ŒKî"³|ñEýAÇzÌoÛüÉsѓѢCí ÛÑjv˜_šðºálHsFF èªàbòZïÝØÙÅ2Åqоáì®´ú—™ã0.‡Žë|KŸ…΃ˆ4S:=H ϺÁO)'>¼÷³ù‹µg9~X/1%Ëý{¾Dê±:0¦ð±NÂ6.Ië# #„¡?¡dúV"ó¬ôR¥+cëDòY¦ {`Í¡ª¤M²âic`ϘÏIVÅÜ¥7HZ!3éN§{ ‰(Š,NãÂ~H™%`›RUÌÜ;¡íÙÎg8ýår±ïW3‹jŽJìj† Á[huk’Ø&‘Õj—™NèqCI 4¢û«‡j±}&w…“üsQûaYÿ´„»¯€¹)÷_üU­zñÕ²‰×žØ«kЫ««~ãrÚP }ƒ1÷4ïöô­Ú;²Ô>¶æ{7°BÀˆ»_¿“åæ5>¾êl ØDzxHnêû¦ú˜vD¿–¸ãYúlwPÒÒÑakÜR# »gJ61ܰe2 ¢ç‰”žª=Í%#–ÛQ;úD0›j<–Í* á¼1ÒV;]Ÿð`söðçßQI=FÅÑû7ŠÇGpPÚõóÔÝŽ}òTº7=³–wý×KûÑü÷]~Ám»ÃAþÚ—ά_W€ß‰Poðº§ÿ_õÿß³¼[A§¿}üºaDUÅtvM†¡¹=í÷‚ÄÞ®¤_«§ìžŠÅÈ÷¡%#²#šß)Ý/$ÌÛnÕƒ…îŽ 'U¡¹y5*z»^.ÿ}¹\/·ï×°’Ñ*EÛ“zæøÝÌL;D¤Á¨!œìùZŽ@AÏÖ ±{d$dˆ‚Ž ¬: õð<ôr¹Ùõ?METoª,Ô¯gÄ5Ì®¢‚F¿‡W¨…}·0\¿_S=©~!O*,‚›‹‰#—ÿ¹ˆ(O&ÉG­_¡ªªg(’v^¯ñMå۟ΙWY6aQ­…ÝÌk&‡¨R¿(©Qq­¸^o"ÔBê‡,Ñ3ϱ›Þ rBà73÷ÀHˆZ–‘”¶ ¤å E!µéßH6àô¦Q-§Ÿ ±ÛoIJD'4¥;ç=_¨À;Ë!­ù pÍ"ÑÒú-S:j…11,xÜá©èÁ®wÛÀb8q®/(z"Jý¢ìw‹jVƒF=ëÇ×óÇYN+äÞõ¤zOq 2qY=@k—"ûÓ{CÆ×ÓA· ÃüAV {r»»ß œ±?yZ7…˜Ñ°½ùýÀQ¥WA¸¼e¢ë‰m3Rñ4b¹Iœ:Á, ,ž¤>eÚ³¦û·Ë—³ Ýé$Ëš;†§7[§•ðp AFypÇž7ïŽÌœÛqéƒ4HN¶' "XwN¨."ã;Ö‡.ëÅGe*gmx‚†²·ûjškÑàãñÐsùnBNÌ=*ª{…q„ÀQFöÔé’jáØ3ÇK6gž,>roFÇJ.5Ù èÖ·ê^\Np¸Áϧ¯‘ÀÄɉZ =Ñ i°êÖµœ©aw¢ 6»ÙÝp‰¼Ñ×ëž_o×[fÿ“RD<Ù%¾_°Ûåö[æqÏ~öŽÙi‘Iåº{§†õæDZÄ=.€Céƒæ×D&ñ^Ò.Ë­k¿Œ`ObLéÀÁ¨á­Ó®kQ†Ë%û;ÇèÄòÆ~¬ !0›ç<Ùá`ç÷’ê^a#ÇxÀ¹Áj$'³ZD@ʆ[®©4~R´DÀ À$c Õ7c'šÂ°\,ý"ŠxA4·ñ ¿ÞüùO¼Tׯç³æBCs§ÜÛˆ†­Àæ^ŒI’‘ˆ÷δ_#àÞà ±îÉÌ\G!ªåY?n߯Týøªîñíl¸ývù¯ú«ŽP)3)‰EÛÏ‘nD.bÆ0¾(-й-ø|L^´QãøBÜηvøtO3>%¹öÇ ð¨ýöeoõ5Ÿæ‰cá·å}çÕ`Œ•óì|IÖ°[F£<ƾ7A|o¨^”WMþ—øŸ±ì®¶Gêûº_}Ñ'u;þ4€²]Rñ q»yu…pCRbjo¸]®—ËõrùËårÉí…ªÈô„)e)+³(9Ê!L‘@@¢gÁz2r’UxëÄâÖ9½ÚKD6D…ýná®E;Ûg!òL­Õ2Y± Þ}…ª=’N©P ~r¡¢Õán(•¢R˜ìI,ôf_¿¥·ÛªðnVSxu¼º€Þ±ØTQž1l`‘á` T` '…ðNõéÙïôÚ#´«"+‚·«m}X±Mθ`nÄÌ£‹V§ôÎ^}gÆ~¨á(ۣNj.Sëa´ʰ /—„· hìéˆ)r §£F*-I?æããÌ“¨0€¨¼YÄCH]‡ô O“ðÔYº¬±À§'íPá‚yúµ†Ž1¯Ñ㘗mÏègšO¡!ò¿)=äé%ÿ¹¹žÀï\h…ËB^$‚|Ú_±;}rý÷ÃOK&Ò¤‹Ï-PÝ«®€–o}é ÷î@ÛwPcZp=tçrèhÕ£ }ŸòGí÷ç쉫Bït¤cg¼ÈÞÝ8ïz õ–©NÄ ™±Ã/SQݬ#vœÈâ•ê˜3貦žÓñRö1ôc[X¼ÍcN±éFr› ´H1§"Bš£y@R“^ 5†ýÔ;0¸yºg]û]ð]kÜÊ'@9Gßj&f›f/&UX·ê8¦zÀ}P+qÆñ†wKËÔÈ®èœ ÕÑ …™O Q-ŠŒž ™Š.§ŒÊLîÃí¸J™ìØTкJÀŸ`:ú.ú,¥O1tÁHOMæ—üKSõ}X‰×X‰§²×ûxÁþòn÷ëÇå‰rb.]ê7=SŠxu»ÙíwÃ&¡äIÒ·cnv·cùœQ€ª·›%E•œ(<Ÿ¿ª°èÆ=ÌL^áÑ<ª%â+‘ƶ…# œ„ùÅ[è Oª°»¡¨”‚ *|‹^“g”ÒTðaüQ‡ÐDVqó“óeëΤHq–ÜЇs "ªÛ]Ó‹¶;39ÉŠÜ#¡_ûrL'^–¹Ïî lÁ”0ÒûQÝcœð[ú'©Eè¨n8çQÇÎ6dñ]ÚÕS2‡w ípšmœÓ¸J½÷ÐÝmDv î«nœÂG,ÿŽý|,¯LÇÅÐm?›‡Š7*‹ÅÇŠéž—Q·®Kë£Øßõæ¬úA™ÔzqœŸÓ8’jK b8¨Iœ›®êÝQP˜èV´¶·Ðãe„v<ä–ÛæÏôþì¬RçµîzÑÚ¥‰Ç Ñ[Žäâ%Äk޾Ï.‹å}£ºu;x¡/‰a2gr{†¹’-}w¤ìq¹ùþ~ù°RI‡.§gx JÒ#§¾< QݪxuiÔŽU>èùÞÑ¡ ähp¸,<@Ù}»*‚²á03-¦"•b,ÊQ#Zp[:¸!cg|èQa©ðè4¹*ju$Œšõ<á¸É‰x‚~QD ¯.i£¬îÕgúðÔEWVCzå›ÿ/{W¬åFŽk/"R hœµ_ôÂ÷þÿ+vÉ,EÛŽ ˆDFØ ‹%©ÛíñxvÏðÌi÷¨KUE‹p/.F9hì›æ^õ÷‡òöèŸô7~ÿf»[üŸ¾Ã÷]÷Á¢ˆjõ£-”pÄ:à\0IT©…5È(Xu˜ÅË}Ω3‚D8—ùy®$¤×íH%;1å–ÁÌ H FÞˆ‘Yk^¢,JϹdí ¡€#è6Ô:DY 677 ÿår1sëà ¸J†w›Ïm…ã¹Y? ïs³/ñÓ%“Â=·`ïúyÑ)2ñO,ˆgëÇÿâéAŒ Kùó‰dεÝé”ÖºGý|=øÐ¾Ãí~š÷ûný,¼%aø“Ú³±¤Xí0Èðƒíoø—keÿ…¿º°ªÊ·±œ¾ƒïd'äþá@OŠ 1¢nÈoª_¾\þù¢©wøÍÌfë034ƒS&©–%ð<¼‚`ãˆ[ª¥VþL¢%~ÿÍ’ž*í<Ûáö8ØÂºknÍb&Ð ÎBòÛ ì_¦¦aÚZãs34É ¹ÁUA,Uä7áÛÍ¢úBê?…@q%G^“5Ó›ÈÉ ZÍ< }vdf!"‡Ãéì/dJ,ˆbf”4&…/NAÆï»°Ûö‡ó$ð”DîÑ‚†GÄtŠª¿ð ¬G‰£€¾£þmËø?ÓžÞF‘o9¢|¹,ž7¶ÞÁÏ„R9¶†PBvC ƒÍo®7•&Ü€› ÜØÐàU¦޵¢Þ“N(Ì¥áLþ;e Ä»TU·¯WSE·äf[ºY\IN¬0QÛFDå™”ŽwPÜ›‚¢Þa–;Â>àuY.¾±ã¯3Îê1¤ßү״<ïÈ$¿}Ũƭ%þƒÁÈ|%f®i$< Íî¯æ°;ˆÉÓ—›xfN?stsã+)Z™Ä¸„¸CòÂ8ËSóÄæéYGÜ6×v )™ü¬Á¨TED<^ 빯xóËv±ý_ùt>‹°ÈÌÃ"ƒÆlúfçžÞÊ{/¼ßvhËABË0t~-\ÁuYïlvkÑXJéÿïtÕàÿÐñœ”ß{I"[“V¹§o}ñ àù¬Ýy¿ïû½}{:ªË‡‡¨ÀÎþÛþµÚÓ7gÁ~ ú#ç,öü°yc‹ùzhn³Ä\|¨¦¥bU»ÙöU¯—ëvÝôõJ<¬™Šä€šAÖéxX7é„rF%.lÀ¸¹6Xs¿à[(G5×UÝœ›ª“†Ê£É9(‘Ä,•À’• ÜIÍÝ ÍµBÎ’Ddà…pù²¡›7l›ÆÉ½¹ÝŒOL5KQ¥(Ô WÒÄÌÍŒÁYÆ3†«¹‘;rKãJprbBÔ~y9Ÿ©²;¬+UVUPÔì!Οäs;«)3ï%KšÛͼ9µ-ˆUReßBïq<ÎbAÝ3Ç,þÐ`aqî{û=.Àu›YâãOÓHÏ=cgc†ð±Åh¸pBLdt$³„ëÛ²jŽ Ñˆ±&T6üex|Éþù Oˆx¿£ä_áu…ÿ;»…32úãíèýþG]Èo¶ã†ýô øFÞØCÿŒö·ü‹´†±öŒµŸ}GÏÛ$c§[2‡ž]@àH^€ ¹¡bª¦¯×ë«n›n¯ªjWUi6uPs\Än ‚…høDîsLêomÓKs˜¹»&ä[À`s‚›u†›‡ÎÊ’ƒÕ¡ ›Œ W§ÔŒ®›žU¹2³pÝþ#D@sÜÔn†föâÚLˆY9I7ÌÝôFÁµÎHèÀ¸FâŸ-‘ D žÊ\ÉÜ™HGuJX;žÑIIËDînf€{wmF…ÀÄ\Ù%†Ÿa l3MüøS!¨/.˜k°Ù¡ÖÌ»{â€+“È(wAc¨=th¨’WfhjSÝÁ%ï,·‡‘'þLÓ²P¶Hï·€ ¨‚O)GC5à1ÔJî4aIª¹)òPf"·A¥Pyښϛ3ýaî-}Üó"kÆ ·ñ0*ƒ'nOV•ˆô36ŒóLwLxß“NGé݃<,Éø™}ß{Š» üqx\„†fìAüŽcqw÷Ãû¸´7Y¹a!¡ÂÖ”4QæÊ\™ iã _ænMU¯ÖÝB™‰¾!–²â IDAT*~f–ª"mªªþû%¾§â"±´Rj`ZeÜ]]oj! Ðpvž¾a\×Éœ|bX }]h>ÚÞµ×ïÂÃŒ}›Ô©Ç1s˜™äDùˆ=£it"9‘Væn)&Ý4zânù€÷;Í#céËoÍ`"¸7·›ª  ÒaEž7?q|øgÁRœ– ¶œ×còê—* ¦ÏŸÿ_DP¡_u«›¾^­@DœIÎgä“ȧ3vsr¥ðTµÙNæÛW5•Øa±ø8±³6CaÜ4àÌÉùC pIYÊeßðZ}ä·ÚýÃyNO´-–ã3ÒWùY­ðạ²2]ƒp¶¡zõf{ =ûÝçÿ]P°Š˺?fÖŸã×~\ëYûÛþEÛ;ñj:?iúzðÆý ËN;zLeäzul¯WU¿^¯—ËeÛ6S3sÖ s¡‚¿™UPe9ÉÎÝr†“õàCºÀ÷w2–]ó4û@b®ig,˱ ð¡¬ÂuLË4 ôn_:àn=P×›¹ùÀ<¾|¹lÄÄÄ")žÄ•äµJbr}½fe&"c+ãˆ{ók»ªª›šƒ+ ª„"€°Ù2.kMè¦ál[K•0Ð]oq· ¢R7'‚ÞŒÑ \ÀÌ$Bç³Üœ¾ê^pŽP o€Eb_·¥ÉLÞó´<æc'¢Êa&†c¯77³j¦Jr -SCèrÍÓTŠà$~óp¨ÑuŽ…M¼þs¤gþž[w T‡ˆ PNUX€Ô™ZD ’¡LÁ»ctCW‰x S`A”Aô`uÎxÁqo¸cà-ÀÄò^zLO¥é ¹¯yçõË¡¸·KÜ#ÒÏàÝ­Áݬ±ªjÆ?„*=ƒÆi—üÄ×lý`ìßÓeÜ#e‘;—ÍÒwÚûÞrúÏ~@ ,c¤áYS¸19‹HTô>óË'‘ 7×®éщ„‰Nò1 cßg”ú²»O“ Óϯ Eœ†Y‚Õ‘U1Þˆ€gÞTêW—©7s4!ýÏ>,ò”]ïÜvû2ïçW¢¯;ëîQäy±ÀÌ;Qü%BÝU&âD¬A/ÊèUa"æÀ]­™P Äàî"9@ʪYe*#k·Šg7³у%æŽf!¤¬Ìäʨ{0¢D}K>LBdJ»w3p©ƒGå0 žK¬ÆÖÀ> •°çÕ÷aÁÃP˜‰%«¦ ˆüæÛv½š¡U€… ­s¦nÉf‡ã䬛5UU´©gF,c'E )Á7„áýò]-eNòž¢q×¾aãÞ¥Z”Á€˜g¤ÉëYɤË?ã×})ÇÊ\yö‰*¤23ó¦ÖÁ`®ŒJæJ•1éæí‰÷›ÝßKgÏç NïQ9óNvKU- Ó#xæE{®^SߢL‡íàÝ©Äû!$¢Ê"/Ÿÿçÿ^~ ¦úzÕMÑür½êM¿üþEU/¯&¦‚—OgkŽo9óBbŠÁ˜qøÃŒ¨%1“) h­©6ˆoû©7B:¨1ts"=¶e¬ÞqƒÜ~Dtwõ¾»…É0ât?ÏïÍÆÓÜ›‡,(Ïþ¡öà>Ȫ‘”þ¯oÇÝú¾ñaSüÞØw>tüÞùÛþeÚ’²õ_̇øîVB>Ä™¢®:°‚ëïÛöª—Ëåòår½^¢Ü"WÈIˆYD¸’u÷›zUãaCZ“…²õa­v“~6‚»Yw8¶¯jÍ݈yQX¡BaÁSåÌIkîQŽØwªÞTÛ£ÂÈÚ°C´„x‰”é…+©aÓ+. y9 ×Ït"wö®Þ ·xáÉ:pSrh«¿|z‰ZGpWÓí릪pà 9äD\Ùnd7róÈhr7tÁÉæBJ,Õ˜ØjÎ#¨#]qŠ4?q‡W÷êtª",¬°@Õ|-Œ2ÍèýgœuÝÙÇ‘…îXIác¬ÝÞÂûõd’WAVkŒbhËŒï#`Л"H’ùΊÅb`Á=ºûM*ñ‰E„…bJWœt‰y‚Èt ®lÔT‰ K!ªÃ¾û7{W¬-7Žc/"ª"@‘í¨ž³Îìö3öww³žl6êîl;ò«ÈÏ‘€¨È¤¨ªznÏ´ûÌ™™fàó\¥’DŠ"Ü‹‹0ÑÕg¦Ðxj–Ìͬåèý¾J§Îlø»~F(f{Ó¶ªÛ–I†¼pÐ%OxõŠGï÷æ°™•}ÏŠÄÑ^œ~E¸Ÿté?¯ðæ¶`- ¿ÿáéüVÖ•Á†tƈ˜˜A'ðÂmëj†ê´«ð¶ýB#Î`_OaL›ž@ݽŸ^–Åa"ös~Îù1Ù$ø}K3sÌ+!s¾{4Á±qñÆØo°öæš5îy¶Ñljž=änÿÌøp(aÎGä(3N c!&VR ½È€V´2³ÎœÒ…óf„ÃëlŽ”jŸÛ˜7ëUÿuá\ZXNŽ^H–puÜ R´P†Tƛ鈈Æ~½˜6„}dÜ­Ál 3tòû`SÞ /ˆnj Z5”øDhkdRa®š©ÃRy6*6YæÃP8uš¡p8í7Rá{óû¼_"À‹§´ê^ 'a&4\^tû¼ýø??êUõ‹Ú5Êÿ2o&Â(ä;UWsî<´¡¨ÂY… äW¿¼<ó"¸{¸ÜXHÊA˜®AZG@ª¦Ó 4 ÷ H!ÇÖ[˜#ž#Ö8îÛ±BUswË4žM×U¯.' ¤,üôõ“ˆNÜ©À0w*²P3Ý6«¶¾YEDV WGñ}-°j¦Ï/ÏrYŽíå‚…3—pìÁ {óàZ¯Et1|†Á"Þûôîééiu°ªa/Ø*ø‚Ã;û%=´h²0bï ß%"U’žzÕ`¹«ªç·ëúF€ãkL‹yÞêÖì8?;93HÑ”5E´©^:1Â[Q«“ D²\Ô#YiYÏoÏÃŽ¾DýdÎÊ™è<É´!¸E0˜–ÃÄìp \5D2áÕüêÞŒŠð"!j¢ž¸îCOüÞmˆ‚a‚î}7\i€™E(G‰Ì)®‹®5oŸÍ=Fo˜‡ÍQ{–f‹jÉîȲÉTH·tNPB&]ì‰ržHÒ›Å:v‚ß j‡Šïø°&Kz:ÉDè4ò6UòÄÝJ¸Lµ.a‚¬gáõÈ*‰p@á{u">ŸÏÛ¦º]./ €APíoð´׳¨¹F!å|‹È©V оQá\¬ ‚ÃêÍP¸‹‰c·áˆ0(ÐáÞÄÌ©bN¼eÔÉ Å4?Kwnš#•¢ Å›¨‘EŸš|´ Œïæ MjCƒ:mÜàêªæªÑ*QŽC†uÖžðÁ`§ÈDPµÞƒÌãÍâ¥z k½ð9¯q‚ á¨ºn¿ð"²Š¿=‹“Se•£>ϼ›XzÁ^8¨t < ¬-×BLÐ o¦ŠÕÊJ'ñºiuÖµæŸ~ýåüô_Däò²¹ZPf¼é…ˆ +Ô⢠É"Nl 12 Æ\ö &©æ % ëô¬sv¿õ¨%žÑæNFˆÒî‚?¨ÓÒ^kã|ÍG05Ÿ Ẻcõn¦a„— OL„刈œDD@à¤ê€Wxu7%pb4‡jz€òG?hnÕÓ-ün°ñJT˜v6Ý`ÕM5!åÀô \õ¨@nꘃ¡áº×!cßLŒ¡Ÿ<& Æ=m',äQ¡Þ’‡ETy›{Øfj|.ÁiH¼ÆÐê ”=Œâ@7 ‰xIEÈTæ$OùSè‘—2z˜´2'Gþýà~¦;{Ŷm¾[¯†üîéÿÖ \#cqÿ’æs~sTcö¶ˆVÃÓ©Ïy…røæOø_¾z®Î£ö5Œæ÷7wÝ£n®õù\J”ô"Cpت³eÐZ‘‹ìùÝ*üÄVmû²=?oÛó³ªYXQ!aÑÄnQ·Ó‘›û ´Íª‡€³- ?¦2ò¼¬”oy‹}ÜI 2•ý•ö4e>¬³ ‘ˆ[8Cæ5RÓp-XeEnÎ'á“ÐBÂÌ…­š›i3oFA;¬®_T75l1""Ö“Ùª;™õŠí‘Å'Zˆ*±wO¦0-޽êö…ÌU¿hTY Ôë8¼ôhÁ=LHÊœœátÕ£5G0“L•ÏwgõŒD£é©ÿfÈ8 ‹BQ\1ÀéPg%"N~¦; WF^XNw,’FMÛÒl±>M+ï»cë½p¤æy'h0,Æßr»wLÚÈsž¯|Û†™1Bò^󔣅yƒoÚäñÎý¸ãBŸÙBOõ+‘8bÀE+öñ¿»…þAŸ$ól·þ"¢Y@±´x0ÛƒÀfŠÑ–U´n€‘û\s‚ï 뜇m8lµ¨µ3?÷¯© öwJì˜PôªA³_whhQ2l3òQNïøöƒï쟡‹˜úÕöŠ^–â¢céÈ”8ÍU¾ò«~´0ÃüÄ64L­MñOna‡^³QÀÂ9K;ðfná­MÏËP²‚7@ÈB^c#ɲØÛÕãƒ0mÏ åAFåàWà À¢(àÚR²§¾— yƒšƒÔÎo×óÛUX@tÙôòr‘Uôêî08»Qc.ÐŒÈ{€T_vÓ<ÃÐ>-؉mîåëtÿs$©Rïëaé£ü˜Ûo@Uûq!{µ™Œr"Zż-xÔÒ¡©%§ÈxP¼¶Ïç÷î!Pà8.‹0MÜ…ÔJ,@/°>Ãò_yS¿`–ƒÃ¶Ïs8ÐÌLC«ƒ‰¼zðμáçŸVÕóÓÓDzž Ì…ø­Xuu¢ŸUõùùÙ¯&ÌOïÖŒkxª²Êð~…ûf¶Ð|‡¯ö™©Ûd=¼ýð†ÙÙõ¹`ø«íoaÆþÞö¶/ÖSW¾R\úŸ²ýÃïh÷®Ì7ŒúŸð¿C3`ÚWr&ËC>á·¶i=¾ÿ9Dzö:,PÀ€û½æ„w •ê¬"~þüüéÿžSêYU·ÍàÆZ:¸à®Â᱃`v¡¢+f•y™0¥…ûü HÐÏ06È× SOâß1Í)*¿ MºPØ2+LᘽèÖžÃ!—…ùDÿñŸÙ9òĬzгqu9ÉeS&Í žƒ§k)š ØUQ0¯Y¢ªÑôÅn½ÕþÃudæ!ÔPuQW×MÝÔ«¡ˆªZ¢jzUx*3õøŸþ>Þ”îKÎÆ8uÛ¬Óù< ÌÂ!Pá´Haž vÊF9yâÚîÞžKÆ€-ìÕz5£¬~ç² TóšcËXE‚N]a § OÀÈÔÇŽé99€uI$ë©·8 ¡8¢" Wô •gÆæ! È4ììP˜¤n=øÝÂ?¡ûHGÒãáø[#b˜€#ÊÐ ŸÞ2Y$vïu¡^ÀñkøÍjCÀ‹î¿Ö‚=Aé'âã³lód™íxøøȧfZéÕÕ. ß¶íi“µÊ¹’_ÙNÊá* ´¾•õ,¡ÝnhL÷m&ò3Ú_ØÝ[PF{_‡÷[bˆ!æÔ”H4 ˜óX'oãèÑ/°ÎO6â ‘¾ÞA¾ò}FÙ×ûJ5*6ç˨P¥«ÂGänæß½n‡"ÕóW}…`Œ23 ô—}!s·êÞ@Ëá‡6Ÿ‡ˆöîâÞ„àSÊl—¡"1 ͽ8UX"‡ƒë¿ËúLžÈ¿¨¹T³Ù;.êÕÉ…;›só«k53Epвj¨êîVSá  F œ®º©Š¬ë»óùéi}¯º©þï_Ôôòr¸Å‹éÅ@ÂK×Sh66Ä@M¹t-Œ}¸`-,õôˆ©a˜Þžý!Üïw}’àÕδð ù“eg3PÕF²nǰTc ƒ’°†BÄAÇf2ƒÌjGPÁY"í®¹(M#?ÒöÏq:‘€x ‡D©q½ ø”ïEп]Ù䬿V#ÈLÀùÍY„x]õñÂúEUÕ¯¶¾¡X:꼤õ0]–¸?ÞÝ-wûÙáØy{VÿБP3€,¦x7q Ï‹¯3‡{ü8¢ü ?9Â1‡_7Ü ›ýë·×zü üéÿÛµ¯a¾gžÀï×Üv,+½\ž*I¢¬ã:LÓ’Ú haãÓ¯¿üå¯?ýüÓ/ªŠÆp ߌ,4è.öxï¤ãz<­Imæó˜GùŠPQŠ=w”ÞéÿE]¿%°}3ªi‚°»`‘aµ0wäÁš{…UpUmî•>ýú,!׳€O’ìÌB¨®nV9 ÐÁ[ÄT2KÍ*à~Ù6WÓP]¸Uç:ÉT}hîWSÓtf@(puU ½_»Ú¥©^ÝkØ|wÃ^=ØAK÷ÏZ·{³ðÚ »?ë›§üÂ>tñ¼lÄÚ)½J*åIÓDÎŽè¾¹O½¦L‹òËæUÍÜ«fBrb+àÅh8o¹ÏõâÀ‡>ôc°«AFÖUÒ±à…ïî˜ÙV Qæ)õ)1+ÌêtgvËi0C:÷#PF‚ÜãgÈw6ï¨#•!›É`ó40‘îJwçGŒi¼vÀT\v6ÄÃU› VÝ´žÅ4×´zåÐÈ8hÓ(Üø¤-̯„â7UÓ ¡ pÄš‹XƒK¡ó;¨=yƒ’B¡Í“®ß0ùövx»ë}…!tk•T÷çÊTày±TÍ_ ³Â¯æÝ xb†g®`×âr}=cªÁÛœÙa¼(Fë¾AÚå¤ekæ  GX²òÇAþA$qï”õ².æÄYŽž¾}wÂã“àÞG ²E¸9*àfµC÷cXû…Ó²½€#9e¬Ì-j­³#sÅCûWzp-@om©j~… ÁÀ¼X‡“Cæ*ª”S”ÎbgA.‚ÕÚÌ̯Ûµ‚C²˜Ï²Šdmv’7òá‡÷ï?|\/Û§ÿgïúùܸ‘ì«`TÕÑ(#Ýfò~ö‹.\):o$2²ˆjƒ* ÑMÎŒfäõÝÏkDÙDh ^ýyï?ýÃPÊõú•˱Hî)èUÕÉóçŒÊ¾¡5´=¢v=ä;çJX"rЈ wàØÓ{{×0ׯ'28´6žŸ”ùm[÷TÌeöhøü(³§†R B&mX"’qî Y­²¢Oà|¾€„8“±èMË­@£ÀÁ% "µÁKfª:É84“‡F ™?΀ÁÔš‰—!äÎÝ@ lPuj4…ÁæÕ1;×€ÔÇ™ú½>´Ø˜ØLÕóÌ´ªÔ¥)P°d l|S‘…3[íâ^`­*8"©d¦,j … 1|ÿáM™eíç}M-´ùc·>›í97¬‡% E xm –4ÖÞê•›ÍweÞýmý•ïÊ—²Í‰`z.öþñß ýþÁ´Ïÿ1û¶gß·<þÀöGÝ&L€­|ö?ÖæÈÞÒÿÑÍçÓØÎˆ3@΂ë=d‚ ¢K åk)¥|þõËù×sùzµ m«=êÕy—ÇXi!fº£~ÇþbBKëÆ¡fÜȨÆÆæPË‹YLwMgóan´N0Œ•^¸’U“H.fb@}úõ‹0-‹ˆˆ<ÉñIDÊâ¤Í¦„YDž v+åꤣjMô8³BO‹Ø²h-XdÊ·„UšTJ4LNêw]¡M‰H„‘ .3Xj±îc" *™àÂTȈ:¢™•õ[{á~6®GŽ…»TAëµg˜¨,â647C"k#gÝz64b×Fî•¶b̘Dm0ÇDF(­3Ùñ¾P93pI$šÌ¾fÞh!ì¬óÈ(nCsÉdD_¹n.KŽxï"âGɃ˜Ü98T÷ªûÕ¼y j#üëí=+Ò;m:SêþA ~§þý ­3:)¶Y¸3úÝcjª·RŠ‚yT™ÂU¢Æ(gÆNåh7;ƒµ^€®ä<¸ Œ·(ñ%ˆCCk$ŠoŠS™ÓÖ" jœ©¬Ý#½Ú4gÙü ¿ÍáÎðkN]@ °ÛåIÆDúJh¦¦6cÅþÜîÌÜ—|‚wµs‰yDMî²E´HGn…s ÚŒM£Ò53²jŒù›FÚ§Åõ‹ÿè DÅ“WýSŽ‚q€{æÜƒžÁä>\ßW’[W†#X2@£d±÷Þ< ’˜ `€ôkukP0e•ÆZa·R´ šˆœŽ§ÓO‹ˆM+ì¦ËéxüpúéoO?K¹-—ogv©äXX´i©fæŽQ×DMÄ™)1Òл–ïÞÓº}ú"’ ´Í‚¦ùæ=­Û|¥Oßì§»Û Ç¨¯  …j̤šfî% ƒ23´ªvAÕ§à‚jšMD`-¥x9ª¹\Mô~ZÚ”‚:ußâZH¢!«–…2q'˜}hážR(2 |ñ¯y  GbÅÆÍ¾oÕ”ÍPÕ E21AŸÄJ)pT 0Zhd8»„òtŒpºj «ïQ° ÒΊIÈ[‹ñe×d-ñãSƇņ7#Z ^wÊün^1fÖ¼m»…?üí+¹÷³Ò÷[ßzðï¯1µ÷Æ~÷CùG¢ß}—çà-íG=/zrßxý¿ðŸ¼í™Þ¾z‡„ß³m…òØÖýG)r){’s´ÜPªÁ@¤.ñ*™¬JùüéËù|>ÿz¾~½Ä–j€)2S2˜ÙGYm÷j.Uc@]•†Kwß~86"àþ1ó ëq†ÑJU²^¯åCW M™Ep-ΨÁÍ(/’Í£¸Lq÷:—œZ ß02‰Sr¤a!×5 nm†zv_ð߈ˆ€5ÕL Àă3Õ›¹GƒAè…gA4Þk 6`î©ïÝ’V˜º]¡#*˜ˆ3ÁÌ®¸®«4qÄlƒRdû¼àPÁ4yf;<ˆÑÇÒ?èÙý›{[< ’ÕLƒ‚2³O˜ˆg&&4—E1vg *>:Æ”GMZLP˜>€ý“ ¢HGœ.Ù¤nW%ÏÛä5ÿ9.”×£mŠžY«ýô©xÝm!Ó•—Œd:T`‰ßFïÞk6=˜Ð.Û=ÁÁê°pKnXDw=ëïXUS.0ödÚfÈàÌòdËmAƒ-%î”"H2I4–A ïYÈ€¡u3ló7"°Q·ÿRð4ᙈÊã˜ø¾´$Êw¾?0 IžÖÑc‹˜«ºÂPíæ~ßöž;Vb$¿Ï‹ÑÇMiĻӗ‰œÜ®¯ü)ß1pp(ȳlj„¹*²o2âwד,€fšh×=šÞàæ5{±¦ÂÂy†j3ÀzF4¬næb…,ô·Ö$ö¦È¡ëNÙwN:9e\HÌ9uɪŠÐÏ>ýí$Ô\¦µ‘E„úVq¹z519õH#a?ÁD…:?p‰x/Ú¦¶únÌ]òˆ/Ú¡Ö~ïÏ}<Å}`_^Û¾<‹~·KšAš¬ûobØù@’™™‚篎üC&"1çwT×fñ% ç¢MûN¾Åd=Ìü}Nýô°ªR Ë"ÄLy\Ä Û9†´Á`D±0âû­ã@—ÈGtn.î l\šºØ¸zâ˜?[*$£€… /®«DL„jZÕu¤9Áµ3ðU=ç<퟈lë\Ø6ùzF|Ïþö¸Ý{PAúbZâSzåBÓ^ÅO›¶™…Wsý6ZÏ@ÓÉ­ùžãÐÉ;Þþ½mÑï;®òoîûþò¯Lø_øÏßÐ^q:ï&1ðsù+0Ïþµ&V%ZSA¡:ëFáîQJà3»\/×Ëõÿóß—^Ï_/œ‚ª0Ç!ÝlêѰu+ÜR¹lÊâ^ðè]r*Bâ}]2nÜW™õyv¼>™Öß#ä{SYðb IDATË;õÑrbF·™ép<æunAsªº•ËUÕT2/5•æøP–¤QŽI޹… 7†ˆ:•H ½Mø |@ç(.N¾¥fGƒP»þS\Ì–ÿEôLâPBîx ELÍóÏÕIJ"àìüŸÝ­î¬°»Ó—3ø§'J±Ç¯F²Ü Ú6ˆa#Ó0¯Î .Y\mX«XÕ ï‚ÌD‚Œ£„†ˆ#4Q«Oˆb]Z”NÚP½/÷¸0>¬VesJXx‹ƒ);âõ¼&Ä:·ºÕÔñÖM­q8ußçP†¶ézîfjÐiTGbºçEs‹ªêÎûýí`kÈNO‡¾îŒ»Kn¥ §ê1èfˆ·¡çßîõÆœlÂO U9A› )Ur®WÎtüpDããU˵\Ët[iÔP ‡×·ÍmhëAøï‰F$8Òþ[OÔwèÑŒv¬*w¡ð_ ÁИ ;ô»ñµد÷†5Ó5FõHAdEV=i3Þ×¥þkvÃ#N×þšÜwf03jª ›Ô½¾áx®jÌ8“&AƒtÚy«†ü(gÄ/à!²¤£Ä’o2Ý9 "ráåR \a®ÈêÛZ•n(å‚Ì” ˆA]‡ µ@A]C~²Ž(wäŸDüñãé—¿ÿòËß–'¾|»\;»nÍét¢ kV®åüõ|¹^A8}XNǓȑÇVp"BÎ2CKÜ>»©ó8‰*ÞMŸÌ»"?Ï9h¾ÏiÒÛð´Æöè˜3Dxy:º§²×©÷´yž0Î*Q¨µ•þÐÒ›žÙ‘¦G/­G=vM5\~‘eYŽOÂê’^å~™R×ût笃›Ýhš˜ Ï׬г¬kR©Q\-™‰ˆ‰Cù©œ–_È*GÉ€RÁ¬*3{)53e"fm° ³=pãUBïmsþðè'¤†`Ø~p÷khëþ°èY~k†öܱ—ÒÛË€¿§Àmî@WuÞo²4uîÝn`oÿWxm±:ñ¾¸ú£Ûèózï8m;5WZݵ¿ðt{Û¹ól›âýŠ  ¤nO¡SF©çÊVÓ¬l ‚B—ãâ¤MTµÜÊ—O_>þüùó—ëo¤òá$"åFøvS! ¯!ñ×qÆOÏg§¡Ÿ1­˜rèt³ÓQG­:&=У  ±¦n#¢ûÅ÷Ï𘟳ЋOšÉ"¨¦¦Ú ¤HlÕÐPT)³0‰]LíªÅËkåÀ€©+7†k÷0ÔA¥ØÔá´V"ΖÛÀ6QÝDÌœi9ª]¯\Š©«¥(…Àb DNø!~:¤#û N¬Pj®4J:=ŸØ‚Ã3­y›qglm}¦ìžÖ¦žÏ<6¸8 ¼XË¨Ž±ÐË"Â<ЯӇÜ ­h-ÖŒÀq›$Ü?LœY© |ÖÖ¸£âþs)00ž=-Âr*E©†yÏÉ{Φ¥÷\-±‡°8^ë0Äà ”gi5ˆ©6’&–à¡•ÔsþÇÈçôK§µ0¹áº¹²¶ô?{ÁÀ´3lŽ¢ùõËè÷¾ü Ý* ÿ—™^ôø&  œòÓˆtü òaq×ûÏ„«fÉB4è@òDô›ðA®ß®ÀdˆDPh‹Š´QMû ;/0çÅMѶPâ•ØFÜîhÐh÷±û ŠËÒî¨P/òöýaE÷-ø– ¨ƒ_3èþ "€#EŸX›2±%xŘÝpGØ•ÃOgAÓ0’S¡žéƒðÉNes¹<))„[¸§0™E&®(Ô|‡auJ4ƒ5-*Ô 7¡¬ÈìeÒÃg¤0¶¾!õezw\0rY>,Ëi9}ü("t$–ªŽå81Š–òõR¾TEÂòa¡¨—îi™œÙ“Ƶ)+î»ãù ‰˜†4fa‰WÆsΊ7ãëÐ?XB½Àä¹ï¥±¬HÆwx(³ëÿ9ƒÝ%¿˜sÖ+1 ±q©NN(“$)Vb©õ+;‰ó9£cíÞòiu?8e°°<­`³H/çD%3 dº*ë4s¯}°Q4[ãÏÀwÙìU1^ ÿ_¿ªz9OÃ#H|ú/ ƒG„3•oår½Š˜+º+ÀœÅrA‚¶‘”Á #™< eß6îw3êg£ßç¶5Já(÷ƒÄæ5ófô»vxÓŒ¦¡qÅ×á>aŸbƒÝª~m,&8þfï¿­ Ãô¾Kó)þí÷ĺ»ë¾ù2~ë¼þCñØ^¶u“º3¹¯ÕÏ^·ÿÚî^Ã7”™‘}w”j…dA+ VRSCVʃµB™%S)¥|-ç/çOŸ¿\Ï—óo‘å„ÌåV´Z(ª5€™‰ÔB °‡…E«–j¨º©¢1àë}tZ‘´Šs ê`¹Œ§Î±šk¶¢»u$ ¢HŒw[ǽ­éÿ¬æ§é(‰”?B‹Ô% KÓR =üÈ Ë"ü³•¢db¢ð£×`pMËHWåZôŸgf"gÑjåVBM7gw Ëññ”r-ª†¢ÅŠiV­Ü<afbáL X5‰›žú$”²c§qææ ¨=c°1H‡!K×€µ¯b$y¹–‚Š&è%Ö ÏàpÚhŒƒ)ùqEæ C¨D¢LYXÄŠÌÈ @ÙýçÌ”‰!Z•x]!Þ;m¬É~Èk<‰ëÉMÄ8°dB+Âl7 “±©ÁnJ‡ÅªéM-øÌb­˜y·´覈¼‹1+·BÍ´ÑG2¤Yù_ì]»–9®Œ°È²€¶$¯uÿÿgVÖεÔe­ÆjÂ*Ò™̪ji^×¹3P`'y;é²¥à2G ¼·yQ$1Rîq•Rź…†§*ys¿¹¡Ia»€¢ÒÍJ¢73W8ÐNO¯y¡àÐwi·öòYUõË—/¬¼~ooß›ÌE"|ÿzEÐ!¢Ú³ÖZSQ©lÖ@ᤸSFð0Aê*ÜY‰ ¸OîÂëcŸë Ý–W8<‹H›Ÿë,ùåþø xòRõ\çÞá“ßÒÅX1„¹ö7xýŒ/Ÿõõ³J¤èC:f °Ö2ÏOQýôê¥á×fÝ¤ŠŠÀ½µ&Ul˜Ý€‹˜¼íÁY6sxC„êxk-ÀYUä*åBƒ¿ª¦ÍÌ]@ZÏÄ€÷ä²÷‘H™EZ ‡ÐŒ"Õö0ÝéþÅö& ˆ`ÀÌ|‚½Ý¨m4¸I•ƦªÍ\*ô[»¾›èE  —‹°àåõõíû‰÷›¿7QÀÜ •I‡Q½MԞŒ ¦~Îq_ö¬“Ù?Ò釅8ÌÙY;¼¯¯ûæýz~ÇÖa³‹YÉ¿çcܺu5ˆ-p:€›äï³Æ{G÷ÂWŒ o}^3"v‘c³èw“eµz|8Lì\ƒÂ¢Æ:þ£í)öZŽÏÍåx­Ùë\ÇÞyõÉίìo}ì|íø#’Œ÷žyó>!–ªÕýcü“þÿßÖn#PÐ?*¨øí1øé©t˜³%YyÉ¢ó¾Gë`ïhïï×ëõ_ÿúöíß_ß~ykÖ^>¿J•¥BáûÎiBš½¨T^Çûô=žÍü’]ݾ' ZØÎ‚ 6ÍÒœ=¡7€²ÐÑû6@3ÿÀäìíd´ŽS£Ä{–2Q‡1Œ&>“è(Ž!RÝcÀaÃ’E S;>¨wª’&E\”¨# <6Ýœh=«1cÛ%“´Õw8üæ¬ôXWè…L çÕ…8ºÖ]SXfñV†ÄùÅéý `Þá‘Dr³a¶J¼P£ôÓzÇAKã÷랻۠T8Ì:¬ܬ7ïN‚ˆRUäBŠÈŠ7àŸp¤›z0r-‰Žçʱ²SÓy²ÕÜçÐ/ÒZ3·¨ ÷`ãI‚kžr¹Ôz¦C£mÈž¢[s‡ÊôÄ>äZ™•Ç Ÿ]Иô™Y›oI¡ cëìëð•>|É6ŒÇ²½ïƒÌ1“usé}^äüòy£“ÀÜÔšŽo3¸¨ªR£ŽÝ<ó&Ь!‚Sn¤€¢âvƒ\hC¥ßY½Ûº;uHdíÃ|Œ¤¯iK. ÷©ÿääú:o°üÈB0 ö0S£‡É*øH§wu=á͉ÜᣙsÜlm G:NiVÖ]ضZó—§8Z;ÝŸå¤uÏS(""rQ&¤3jλÉJÞ a":ÎQN{îáÿ“k¼gªÓÚhL‚½OIÏÐ'¥sÞÂ("fÝÃÑÁVEÜöl7³àó¯:cqÙÙƒ˜/Q£<ÆíýýúëÕº}©/úùUZó·ï×÷÷fÝd ÅFúB8Ì,´jŽuü>r-(ðÞBÞÉÜán~F› @ú†¡X­€Qæ| ß=oo|~¢0æQÆqмè¨ÿ½{cS±Of‹köÖ0À ­ÐšµÐ‡é[…úó0¸q@.lQÝ„šqBÒ§ýñ0)4ÒºöTµ°éýªªò“FñöQб6ßÓ8,zÇyUç;¸M´G‡mµ4Ã%g‡÷Ön™|N9®AèÆ¤UˆŒrVÑÒ q Ì‹µÞ̽ hÙîrĶ–Þº¶ƒÏ)Ôžù7O}žg/ÎÙ}üý¼6œÛ¸¦Ù-çúâ¾ùðDµ{kœjí‡%ü1vú˜;?De?ÅÚœÇí¼õ¶íç_Û>rh_û¨g?ß3ÿÅ-OøüOûm_>}` œ•´ž±ç g(/tûÍÖÞ¯ooßþ÷íýííúöfݵŠ~z Z0‘.(”u—nÍÃB>±“ Xä7NÕXHJ,3¾ÄBN9Ìäm:¶k’ðÔ‚ßj5w &¶±ztƒ¨Šº¥k"óxoÖÕ$1lªÊÐZXY#C¬X`Ý2usFEÖ* XIÕTÈô¹WfRsóïƦ¦æEETÄnÍ»·nzYŒÙs÷3n2þ[!·(¹ì‡ô1«š×ž;ö:AC#ˆf¾2 ˜Š¤•¶('H-Ž;@À‚ÂjÛx¥å‹Êj8 ÑѼ¹µÔù¬” Tõ哈R/JAÔ'Ïl†‹OxÿSešä¦:îïáô>>œ´"¨M¦v®`Å—úbýÅÕ'|>“Ù‡²¹ãߣ‡&Á„\¤¹…Öè“~~ÏÄ)à'•×ï~ýÞÞß[¹(ÀÖÍÍêEõE¥Jû~Õª­»ßZknÝA•@g`O`ص»T‘ó饄Ó4„"œÞ¾aqjä³zÜ=æ—žÜäd9²»ÏÃO‹ŸÅ1?0Raú˜1AÍ M9¨1³¬È´6Öl¢€¢zóV]F;<Õ:$¨‰·é@ŠX7ô$}Œ˜ÌUAÓOTU½ˆTœiÓ¤Oá#ðõl”rCb[fO^Å4xV σݜÝx#·ÖгӛëgµbÒ·ØTì|€P‘TI–Gï !’ìj`šëeÒ&·ßýýÛrò×ù¶ûèhëݱK4=˜Ð?ä¬ý.6XǑ֞ÓÚV©‹ò äÿ[è¼7x}Ò6sÍ ©¤/"Fó’>­W˜1$d¦0Í:Y¡å4H”‡äøtìË ³ Ø-òcðˆÔpE&`3'l[‰”" ‘7s’”ñÑÿžÍ<ÔópŒˆ¬.f⊭{ëÖú$‹ ¥Àͯÿ¹¾]ߥ@/ú¢úª*ªÞým´xY™h UÍ;×­ x‡Ip»ÏÛzÄÅ|¼Ò'ÉvHNZõ$ò˜£ø“ÈÁ\÷rOÿ±v0ê?%¼[Á(Ð ½ˆ¦÷‹†ˆn8«Ê,³ˆUÞŠÈ TñKÓ ß;óÙf # ÷‘JQ‰8{d ,‚ôÐq BUÊ%‚õž5`ÇCSF˜8Hæf$lºNùyƒËqù3­]fLjE½dªþFØwEµÌkèlô(ƒo¥IeUA.- ¹ÈëçWU}·všµÕó~ôÎ+ò %ƒ€Ÿ×ÄŸÍû'ÏÅ]ÔòYKß.‚YÛôœáਟzfŽ~Ü™ãÔ‡ýóÇv¹< M÷Lò O\gAÄV´RU¤BU_>ë,Ó¸°ÐŠ<%Öž-Nã\}4;/G0è~‘µa~Cëlî:Ü«#$Ræ£è•`cxqqb7Ö,6 ™Tf—ñÞŠ#˜ªVB'‡ç‡kên%Ò‹»—D²€XZ¨ÈFŠ€"…DbÏâPI•þêò£Ï{àlëîé!Ø&¦ç%^æ.½LJ*Ÿ˜ ®žPPŒ"*ªB ³’@\ÙI½ƒSz ¶µÖ1E‚…Ö½tÝ¥¬ª¨ û€ÀëfÜrB2üt Ä·VöpH ô‡ºuž³Ð=RNãVè‘§|gê¯.YÄYÜÍözÞ;€¢¯-;öqËóŸñ'É N¯Þ%‘2T€D!ª’„ÃÚ¥uC¡±#O”W嶺^}>=Ög+ýæ#_é–DÙt §¶€Æ²õ˜qàe®N §‹ÐlÕ G¸jÖûI¡E°é *¤ÐÜÍÝå"ªŠBëŠ!íÖ¾ýòöõ—oRù?_¾°ðõÓ ‹Àß½µÖÜlˆ©¨E¤­7>mÝrZ¨rfF_˜š(œÎÀÐQÏ)ðË»mCÀô‚¤Èþd;Maä|8‡ÔãcRÉ ¡( àÖn8p¹Ö1õ«bš˜Q‚UDÜ»c„ŠH˜™OCXñyÆCŸ~˜Á%x(_T•*ዞFCö_#ôV`8pI©ÌPø³r.‡ÝoÇXå («i…C¥/D¼¼vÌÉÖ¾Ó«³ ÅL$B¡#U¥òÍane ² ¥¡HnÈg‘ˆû—´ä#•l¦øôÒvÔŸ;Š›²X³?q™ñ¿ž~üH?éüü>—<ÒÂ?Ó®[Töÿeïê¹Éqd„EÊdM%µuçíÿÿ{ÖíX-Y[m‰°Ä´p@f¦¤êêž¹{·ï®ùúÍÔGVŠd2I |âÖî}à‡ëŸƒ.ÿCNò‹CøÿFûåÿÿhÉÂ}Q é¿§-Û{ÊÖJ9êñ"D•Öš}3Ak·vùãr}¿Ý.—Ë—vk¬<O”`dI ·žlÞ6€³Æ£Š; "k°%ã Dm±ºuk&ŠK+‚üIª>\×1¨H¼Øw_gkpFÉöߨ ;÷8Æ)R&mtgUnYÑY7Áªï€Ö¨çdÖ! N¯ƒPÝÍá=¨dQïn» ŒUQ_ÐÐÐᎬÍტÆì…Û ‹¸G÷Ù¿.}Õˆ}}Ž'ܘšx*wà…-®£ôc>¡mjÖ~žÃ倧eo±2À=8–¨oLÕ(úªª*”Ú Ü}ëÍfl¹ 7xû6ú;<›Í¹XÌFæÑÈ"B¿•”WqaœšÅœ"Å‘ñAóL]&«sD¤ƒî)‘‡—Á/ØÚñeüû¸í/[F†Í–!#´aNøàæƒ3ýY¹Ð;Óe„ çJ´hÁÊá|ˆ/.™ÐxîÀtïF„<>Ú×Ð¥&‚†°HD¹æ,DäÁ°¬Ñå•­âc¯™ ›^•A.ɸ[‡ð£§Êó.3Ž]¦Ö×ÜÆ'ëó¥Ýé‰8m‚%s0¼_+gÆ„­û*¤´ÅïRme‡rÉúõð^žvïWã%æ{ïT¼•Ø ¨U£Ê3‚"¾ÙBÒ «¸Aå(Ìξ-`#êͶꆻ¯? êìŒHg©š¸EÒ¹µ¶Ðàæ†¶À CE/w¶\~ªª±Ç‘ME¿P UDĺ]ßÛår¹]¯8ô §·,îÖZKÁ¤B[üÈÙ[›%ú"!QªÈ¾ð6ÆÇÖ2“Æíáîn´ –PÀêâb/ 2ÈÒy– ÐÄ·Ïx\ó'ÛcÁfÄÜe7"¿—’ÅTä@ Ro €A¥Ö›‹ …¸»¡Pjúá/`x”BJbÕaÜV·JM¸€Kä}àAQ‰.ÉO‰ô‡™‘1aÄÉÈ[ëoÅÎ,/r;ö˜ßäÅ Ô€qCœ .áÀÝ› ÈÒ»Sˆ"R?î‡ïÇyúI ­î<ዟ¾øüïÝàöz¼š'À#FùI·6švOnpÆz^Nÿ¯ ñ'í—ü«ý…¶|ð56Ò‘I"¢Ta%DX·Ûûír·v¹üýï_ÛûõòÇ%S=u8€ÝÛjxmD­lêò“TH9óþ¸üã‚Äç‹ùˆù!¸Ÿ½(— ”büÑÔ3àO{¿/^ï'´â¯Lô¿Tûåÿ?jq‡xÙ8¼ïÙ6a¾ˆJ%‚nèÞZ³[»\._ÿñíz‹<= 3© Ë–Ì3©0lPs`±ãéD€Â­ÌÛ¶iØ.«þþóз›3܈⩆ژQ¶öcçøÖ+ÛŸâß™ünN=ɇ QÝ3hÏUåbã‹{‰ž].‡ukìr:°!ÎoØb ¿´Ý[k†1 Š—}?§£Fy!fQÙð~û AV€+ÖÓI0z´ñ8[ÓX'„«àâ‹¥.kÒA3zWŠ”]k²má6‹Xíáñ\…eÿ£d9õ¬a‚8@V òóñMQ¡5ª<˜›£XóŒt¡>-n)ÍFÚØ]mÚ…D礊ÔvcNóÂwkf–u •æûÈóâXÐîm8…ÚðŠý±KÓ‡ù°í_èÁéÚ¾áR¸[H …;ûIK†-OŠë›‘Æä¿2tGOÍÆ!—ÝŸlm‹ÑátùÌ P„š;:´±›‘2ˆAßà;b#:l_cO7™’¨ÜügÇèøt_ˆI˜Ÿn,£|ñ mé»>‡?¾(ÛyÌ{G=ÒY7?0ª8ÂqëSyäŒõ'2n€ñXçbwlÖç €÷ƒ¡ðÇL!æC£¨Yn¬ˆÄ»™;–æž1R)@ÐA1jüfN…"ÀšÖ¸E8çÄP ­8\àF'ÜIâ»yÏ*µÓh‹yÀlQ_ÆþVÝ*οéßþýKÎ yþýxþýü·;ߎzP„öáøuT<’è*̺x7 á«ÈšAÖlIgÀì}LaNuvcz€…p“?&Šbñm˜÷ÙÅ}<ÚÊæœ(äÏ›>»[+2<5RXU"\½˜u¸Ã*´HTXšuh R/ðAh",ÕÁ†AÛœƒ\0. ù7MÁ‹ÍÖ"ªr€„UÒAìð{0Ëé †FM¸Ík°óËÃæð4Üs“:Àæ(eìn0ºªZÜÝÜî`kcTb€4ˆÕ¢¿×&%5üµÂ»cÉmÍÀÔÞeô|‚›~Ò†]·¾oGÚJܵ¬ãû€õýé®Í¥ûýñ=ÿ*{>Q³mý°×÷zd~Ü|¿—ÿ…yÿÕvíÑþ þi±ø>ºþg‡õy=f^X}»öÏ<|ûpÿ•*³…„{|­â x>ðSÓÁ{X]C )àU$%&©›UX5%1ïvùãëår¹^.—ÿ¼\®¤žGlèÓÌ=ÊêÎ-w ·'ý¢ÎÚ 0‡-áº,ã¼öŒ£I%Ó›Šê([çÝAÅ L4¶ÖM¼v|è À׺…Û­­€`†bŠÂ’öÌMjÈ Zͺ¦UU­Á»µ¨åë@…V!&`5!RÁJ ÛÈî-ôXl1ÞàÝYn@ØŽÞ¾YkítHøÑäÎ֛ݣ¦ql¯”T5À­]߯í[ Iy × jf\XoB(¤ÕU~zé#?ÅóàyYšnàA*Ž9Ïi ±EÌšY›6¥A&Šë…ßåÎ_=®Ì”`=¦¿‡U^”«g‡·aR@(6žIÝŸÎi5*ÛÍàÞ„ÀQUÅ:¢R´[»´Šˆ •ýʪ€HeëàË—óù|>ª¶÷Üϧ“TÕ·ãéí¤ªˆ™5k_¿~õÞàrüýt>Ÿ™~WPâì Æmw¿¾_oï·Ô•<èêìÞÍ&,¦ê¶IJ WEþÉ8cWË>@ Ž×¼‚ƒ(š‚x!SK–u®‘|ÁŠØWܦÿ ‹G³ãEÎ:€Ñç€øÝÚ7x3ëÍáZɃ ÃírÙäëzk· ¤Òá$yÐóÕ£ÞÞ¯íÖr¼%ØX'=¼c Bb*ô ªr|£ˆˆh3óeäùS¢šº%=?|àQ¸¸´([ÝBVÚÓôb<Á¹¤ëú­/à|#­Þ*õ@=œÆ~B)‘U¤¼{ŒoGíjŽÖš/æf·n­5U²‘lzR=žNZåüvæâ¬ÒÞ›½Åe ˜RóËÍÙ׃Q‘Q­ÇQ P´º»a‘d#SXãˆG P™ÌtkŽd“1ãøÛ—°Í^¯,c‹†1–_É/‡¾éÖŒæþÓú­Ï" ¯¬ïþA…°µ@q <ÆB ̤üÚwwïƒÝó#Up˦»/>î³xo>ûfÌC›˜ËãÏW¿Ó¦RÅÓ¸æe±MÈ |¶çç°] ?r§õšÜè~E€µŸiÁÅxßÊ&²ytž›rÈ ·vóëõzùz¹]/×ÞnïowA ë'Ñ3¼­‰%Ë(ͷÛvµh²<¾k¼h1†ùÞN4<åˆ=˜HéúŽ”³qxê§o1vböõ·°DúÊ C‰tƱÜ#9ê<4PAJ'ãÊp“²8¦džLƒØšÛøâ¡Ž5T4̺·{”µi=J…9ƒp8,]“T¦€ÖA¸8J³{Îá¦ñ‹Á‹ù¾m”züÝv®’ñˆÔµvè§(ÓLJŒ¾=51 ÷2ÂÔª•4ìÖb³ˆ„( ´g½ï2b¤” ¾<¦w´ßæÅƒÆHõñoÁó[À‡ÿïÇ`5.ó3ƒ< øtÞ¶šÏaø$gD¼cWitH¯ŒÒJÛ1|§ù0’òâ½Ýxß’Ž<4E÷Ô80¨±]¬fÙì¾ÚÍi|3ïlë 6s?ÍÄc:šÿiûÛñ­ ¸DE‹èxžþ_ì]»–$9n½°È²À²tÖšÕìèÿ=¥•ÕUÖìXEXIZW#2³_gW;ZÎéê|DF ‰ \sY1ƒÈ³Êq›§¬OIÒ20•M×ÍgÆðóœZ5®{GŒÀ%t½[ÃQ–&‰Ý[÷Cin U¢ÇÌ1 áMX„ J£PÙã4shq‰BmZ›ÍFi`·aýÖÚ“?iÑ>Â9qÏqzÍèÞr‹¨TdŠÇô¨õÜ‹ò4Erƒö î’›ú×w„‡-Xªÿye$…Å]ðÜ@«›¡S˜°Á-°€y—:U†¡@GTÂèaA[)j0ñ8æHPh¯å@¼ †•ku~Ú®’ÑNÓ°ò*;fEH@s C”øv+xæ#a5À>z“†i* UP›Lôu˜þéÕnÍMx qÚ|'^U|Íå]W©¶I¬º†i³8Ý‘‡7tÓ¶íϰ?L3åæÇŒŒ*`ad€)ÏøØGáà*ƒô‡“K…{™ß^´}ˆ®¹¾ÿ¥åÊ÷JÉDoVÜ KwØ™‡ƒ€8çù¥É0OUå‰=Þþúåãí½ßºmøFÞÚ&i¦¸½éQ!µCŽ" ÷ÜÎ|IÿW™öÎ(Å­ò€/…˜°)šk¦å}sq»cIìì-ÚN›‡-Swüêøv¾Â* ÙG×o;Žpâé‹Jm›™:ŒP#T:oÒ |³µy5ÛI¦H­¡Hr°ßÌÜå;¡UðÒðÒ´zÜow..ú´Œ¨Â›ô[dÂ*r”vx"÷ëïbÎoè…‡Zãf'Lú7šzë=µá<ì'Yne.=¦–+Lºˆ£.¹¸»ðˆ:3¿ì-'ÏÛ…€«ì ’àÓ6ÁN:{Ü =ój¯{—ã}|TF²…©ÎÀ~Žy2Å`*=øœá•˜;?… x±´ó+wZÉ®¼&‡ï×X¿›™ŠïÑ‹|¶ÂÑxÛ¾\z÷åR«ÑårBÑWø1Ib«¿Ãx–çp2Rø‹²#Ì»ö]®¼›!–sl}îÖ«¼¡Ê-¯[‰Ê.¢’ùÌd•Њ,-î HÝÛ]O3öœ0LÒt'?ãòȬ+ÿ™$êæsÞ€Ft›ÚÜo´ ˜a“2ØMLª@D©X¥­b3LºùT‹ƒ,é¨è½÷ßß»»ý_< ´J™Êe ðê}Cç¯ÕfúW¼{ƒÑ}'É _‹Àúåý½mvÛžVÞ{ìô˜×z™sd_¶ëÚ4õ\ ž,ƒ¥a«ÊÔÈl—‚îgËHfVCÉÇM”¾Nnn¥ZLc›’9¡‘ Ìà‹>Ò|´OQÁV€Ð Ü)–‰G€aVU ¼ªü«iRÔ¦ÓNu‰áE°]š¾ÒøŠ*­5mj½ßäýoYN&ð*bp§øb"^u"‰ÜN¬bÕÈu¸7Jæú¼î—Í(SŸŽ†í·ùÁWðZNóë“êÙ*³÷Ëâ?õ}Óð­AŠ£¾…©ÿÏåÊHDn,†C(@ Í/,ÊhfÕÑ»½ÿÞ¿|ùòëþúöß_øÑ¬Ã^›×î³áfobyÜÿö FâìÛÈM·ÏöïãýCbL®z¶¯0Iï1 WŒ¼F’Ò7Ø`JÛe“ŽCc'@å—ͽDF÷îÆ%9“Æi˜”OéìÀÃIì 7uª6ÑÂÒ_༜L%/Αk(`VµÅnà„flÍ+k “€ÑÛÙ‘Ÿ¾ó«/;ɽ'—×a>4éí»Ûš¢¦å´åµÓín3e'–€Pl‹£E}H¥BŠAÚj—ÐŒªËÌHºÝ¾ÕZÔ„˜¢{g%ÐkÇÝœïÁ h`Ëã1)6¬‘ Ï7o‰:UXYv7I%!Ü>\ âµ™«Ó VîWx¶Õêö÷8ô”DÑÙJb[y¶Óò‰ðÙ²G<îPóÁ5Äœ%á€Ücª 9·ú1‹bç¹Äø"·jê{*´¸5Ëסç~’)ıΠ‘üdzìè·ºì™è}¶_æF94·90ÓÃåh=ô~/>g=›'ÞCýÈ«^öp$ p@ÄÜãgúlݼRvt¿ Ö]EŸºŽ›¥2سˆL°¨‹B©Þ”Låe…^PtÙwŒhœö¤ŸsI*Ì%yŽ•áÜ££uù‘\šõsíøcÈ×1ðL:ÛóÑø2ðÏ5ü]äÊ÷‰Ûçi$à¥A,XO#šª«2ý÷þöÛÇûûÛÛýúå×/ïooÖT=IÅ9Щÿ= ©&æ»cW9Ùÿ­Æ¡øæ?,ßï½S.2=\žå¹ ožÄóüȽ½0t˜hÚò;>š©7rílëìÍŽ~O@‘Ù Âc)IèbIE¿@E×TåEDU«´ª@k~æ*~ Šh!*ðÒ^=ƒZ¥÷ˆ5t'‡1KA!Ã:h‹]K´éCc¶yFžH¨8ÛQ|tWjãn4LA=ÔâÃxñèÒŽ~½ÎA)Ag—°;ˆTh%ª§ãj›*ÌCOãCA¹:¹eÚ†dh€.˜qÜÍÜS'øR#ÄsS¿€cÃ!{ß÷ù]²a9ŽgÃR=—š5n­XâÆÀ`:±äj鉳€˜ÜZ`”¸‰ã΋oËá>{,ww±(&V0<ž#÷o~¾_M ¨ D”]ñŠÊ<Ê)%(Âl8úoÑÔUø:– „,‡¶©féá¤ÄZ œÆù„0qRÄñ…Å]´Óð’¸îú½cÄ‘HÜ w¯jÂèù½Éi®ÉÏú·ì]»4€Ù®›¬©«V:Þã¹öŸÆòXxûç6MKrjx¬9»°šW²ÅŒLÝÙyµeVkÏæ™ ² 1œÛWlÿ`Þêцm]8°ñ-:Å’é¾i6U¥[l^D­¢êî\¨ ‡öÚeÓxÞ•ü胞ø@«È¢¢ðXå<§Žcæ0o+m02ê¾Ùé©.'œw³HŽ9ÉenÈ!°¥i;Ð|öú{cY4ð´YûŽ9ò«\-"ÔßÂX#5|ì*›c™[;·Ôè†àE‡‘ â !KÛŠäÆ-ç‘U³ úPLÒ=¥Ã6iýÆ1\ñ–õŒãÀ`ÓäEZùE# ŠR’%iâÙ†îÈ6'*ÕjÓ\±É6 Õ³|5@:úë|m/í—?ý"EP]ëP{_é­6­ »e½7E“"qöÁºrMõ ÷>#‰ ÈìT"‡ûšww!>ý9àùŒŒýìÔ—«¬eö°¿ütS~N¾~­E˜WCÕUîpy¸·ÿÄ1OäÊw‰Ñt*+dßì÷ ½Beá: ½÷þöþñþÛ›KÿxÓ¾oÃó:H­ 'zYÊýäÞÍó‘(k“Ó†­ávòÎ åÙä¬Iò\AΩ¼6¸®æw—-8Ñï© W1•C,Œñ‚•>ÁWhY†±2÷“cViEæ8{H¬nÀÝœ\§zQ‘®/êÑ’ÝL†¹¶ç©â).ûè™,°ILÃ0+ÚFÝù±§k»Œà+P„C»t)Ž-c¤’‰šœÉ]h•¤ÿÙÈyBŤñéç¾_­‹Nçfêß,&S-ϯ‹½àSâäCʦN\- ì`£¢6:øp/·ôKX(Ü©éé \¦­&wŸ®6a´×)¨ê–˜€¿á;yü4(Ä 0UÅ6 èÒZ™Þ½s×=úú_mM3?ô‚‚ÇÙÈ<û!|`ÎvJmÄÛmOúv}ïþj2Í¢tg ˜tDØLô;¬[_N6·\¶âá›ú¼Cš~#;F™$¨j‰œJx†"Ò»Lc‡lHõ¡$úõÚîÈJº©·ž^PÍ˨àóðÒ·õËû‹Šôõ|ô©ˆ¨ž”[‡õ5oÒÒç(i™JªÈÊdRxÖ¥èIq7±@3‡ð6=Ô³kæZOËš/)æ~³ÃY͸&°žÄÜúrá¬lI¬1…R @G&Ÿ'lP½<{ÓÎ.€¢‰ŠG‘¨×¡)—3Ç+üyða˜@õX5@â6y±´e~ÕX†ÙÍlÐFpÚ‹\ Æœïî¶ï9¹K =½SÜô;ã×ýr7‹vèršQϸ9S޽À&´ÒhJôµy}4fOhQÛ µ€Çæh&“‹LïU%‹-ùCíÛDçhó'›Ð}þ¹uÅíG¼¨c/pÕfïToÊP“/G"½˜±´imX­Uº@¡ôÇž†É>:úùñçÿ³ª¢@†@µ5•"ü0#9Á‚ð?_Œ³Ï¬‹ù­ú"æý”ÐaL¤œI? ò6yb[9™ägu:ÉÜþ:9ëÿ½eŸubþŸÂÀÿHùÀŸò}2aÅ”Ig[¾©€”ª “Ú@ïýíýííËÛÇûûûo¿¿Û´×Æ!R#I)sŸÝëëÆÚxN;mÿuÔåÊ÷­³˜!3Ll}Ì3knZâÚ»H¹~ôõÝá´ÎrÑö"àÊ@-r¤,Ú`V!PH“Lœë.‘&jƒ¨9•wx6äÑT U ØÍ8Ø­K}ÑÖšÔÆaô,¾^{vÂFÚ§E¤ªÖå4†;‡#-oP„i6[d ä{Òú? æq_OáRß÷~ÉbWÊ-AÙñçQ<‰^:h¨û±œ·Ã¢ðÚHÉUczÆîovXÜç~oíüb¯KdI7Òͦ">oCÇ ª§ql$¯;;³yöîý3+ÑQvyäßÔb5SR$Ê-0s¨'äe”u®£NX©}ýîIˆ*"·!ÛðVM$u“o«°óÑöˆ¢'¸W’ä^ÎÉ´%Œå>þ3ª¦9þ9–µ· tÎtÕG»Ö£B8S+µù(ÁBþÎp>ÉqK.Ðw‘ÀÓ“{ üuáößN~žÙ_À¢§$kç*òœô§ÿ>¼‰§µWvkàc@(*°â…@ý ŸÛªÇ£jóe0“&¶zþó¥ÕÙÒy%q 2Õv&Œ!¢–#™=rã CmšÓ;Ìm>m¬>?ȉ­€¨'çç€Jó€j‘&E1D!V¤Íqœ ž¿͈bM›ˆÊKÓdDÐ ­êN¼n¤‘Œ=aDaœ óÈß²¾ÕFL% Ù³MË‘Êé«ÀÀáÒ¼ü*ïÂÿï ê“ Qî:æ™OïêbU7+ŸÏe€¬†}„i#RÚ{]ƒBõ?ÒÜWô™C¡¦×Wm.Ä&Ù…cc'npá) æ,Ó|ÜVõ]'Œ ÀiÓ^ÑT`UutóU‹†áCªN\²A@< *H»˜Žfd£IyUTt²Aå`ƒàÏD´a¯k­ mZñ„G}B_Ä„(€¯5üNÓÆóÒ¹¥`[–‹jR3â°õŸœé»ä‡ î?ý“?ˆ|'&_tÅíwøvlð÷5à_P>ð§\äò¤w(²I,÷G%ÑPѼR¥³.ÉþûûÇ—÷·¿þúñþñþ·Þoï*ÚZmQò'Ò6ZóÌ¢Üü–’‰}¾ã¡‹'þ‰îåæÀã›c!ÈMóÁ^»q§×ÁÇò¬ØU½•cöÜÔc·,"óΣ\pV—‡Ð2¢Jhcé=s¿+&!^'}‚^¿´ªTÑ‚æ‰4 2Éaáè€Э÷ÞÙ»TÅ¿Aª´pfî6~ë7Òºí¥59­å´…=N/:6ÌfSY™ÎwbÓùì¶ÿ'&ÏA¯Dq»D€ºó‡v½õ®CÀ«ËêŸ$@. ÛY¡Êà’œÚ•³kS·Ä›ÅÀÖór°£qr|•`$‡\‚tŠy”5Ø~x?··÷ÿÃÞµk9vëØ½#RXÙdmGžìþÿ_Œ£¹7²*r;*"a€/IU]=¶çáe®å¶J:66“I.ˆet×óˆ5=Û<î.¼W †ñ‘ýš¡¹n=ìR¸7á6®`îì[{ê欱sçx;Á·tLpÖ¥´‘¹ÊswuÅeØH£#LR2ê­€ÙHx dºæmµV­/?|ùñ§X×ëõZ²˜”úµ~¹È_~¨Z_oªMk­ÚC*„òÂrLí&Qä|á/Ð)Ák*†–3L ïULl¡)ob­â†Qtgh)ò 8æ¨Ï2ÄõRŸN‰ ÀL½Ãã5ðXV‹™z<3ËERI1ÓHÐ(Ê,þ,uøÓ„‚/<¹ÍëÅfâÁÃ+.!Gæ^f´êæ+Ftô¹‘Ým휄Ø_šzV^\€ m A¡¡Á$ø /kרFB kJ…Y½½¾þvýå?¯?þû?´^"ñáõzÕ¦µ¾½üôÅqO'?3KɱRpq‡›S]l”©“R Tk«ÖŒJ‚6Z™Ò‰ðÝqÌ‡Ž˜›0·¦Ø%©·ñƒë! Î±ÐRu$™ü‹³Œ7¯¾û©$ ݶâ†fÌÇ&û}Ö¹iúü&îÞÄ;ƒ°# A:k„(9êO= ò§²‹ Œy~Z ÎŒß3ÒøÍ$žŸWE›–T ¨­Jæ |¡Wà$QOè'‡üW ¼Ê.LÛz êJUúmzY€Á^k-YàKyùñ‡úó·ÒM`mÁÌò¨Ñ|AuSÊEŠÈë×·àSDÐt„\ˆKØåa âi|Ýa÷»Àœ0;³€:ЫýHÀEéÕÿ>èò°€}Á?=Òµéi4¨oCKÍ϶ÿØüûÚ\8÷|EÃúÅáÜðˆùçÜJ˺:9K\X»"ñXVB<ÝÈ¡WS(¥°Y½¬Ld–‚j­²™sš=Kj`Ìo¿½ÕZë­–K‘‚ׯµ~­µj½Uë`cÁË»’3-½çQô©r 5÷¡cä¹Ù­vŒ+£¨#{Œ¼í£Kî|DätA„Ñ2ÜiŒ¤…‘¬iÛGßžåÒ›ìÊâÎå³û³fu% ´sí;67óLᵿ®ìŒwðð·’ ôJÌóáÎÝûo=ÌðÑ}Ξ¸ÿüÖ6lªïQöüOWýÆJÔçûSüdÅG"Æ<Õ5§.£æÐaüÀ—Ëœ¢ ÒUfØ“¾Ù¿÷(ëí ¯&›¡²Hò[Wxdò}4-Ýȉ۽÷´€q&ÖÿDëj3ÔÙÕÓ£‡îClÓì0ÆõóùÖøu÷ó4Óz)fþX@ËÝÕ» ‰&HÔº‹ž(¤Ò‡Ô6ASICŒÌDá®W$¸åqì*€º•î2Y0ÐkÕæQØVAdCWÁ‹¤ G„‰Ô MgíZ›.¤8Á¹W’ã µÙD G¢˜X6ÓZj®ÒŒ› ûœë£Wé¦Üª®àÀ°¬â“®l8þh÷§Fö›-Ñ1/ò)ПicøÞ¡Å}Øžq7ð‰ël Ô{É>×~Ç«úo·íݼÇø¸ýmÿÅÚ3Ýâã–NÀé Eòàz­Ú,L ž©oõ—]_¯×·__¯×·×¯¯èfîæ½xjh˜(µQ°Î™áågÍxïN!4=rjÚ,É8EΓß[Ô‡29pãSŽ#î.#W2ÒT¹Nš¬Kyìm|0¤ãÍ„kwä-yO^ín+º2"2YwæÂCçïO꘡Œ¨¡RJJv=‰&…0cµ,³Kqc¯\ŠCÅèžs µÒìVk³Z+ù·Â,µºÕZk­è(Y`± ¥>/Öw7Ú:Ò¾®m3œ˜3Å”-Ñ,÷œ1h·r ÕW¾ùð‰ùþÝKz"*u¸âC»B¼ôˆò"–:Oâ9]ܪm›HwÔƒxM%£]¦gOÕ=­9<æŸÐmT÷I´Ì>’ý. m ‡.¢ÝªÉ#(?hu³«Û±L»C-p=,EF–»=Ú<{ÉkÊðÞ?‘é½ ~ð™Òǭ߈Œ+Äÿ%43aÒ°è}9ŸÅE¢“Màh]TXËXm RŠø|¿—fH‹g}R†É;™¸Ágª±B¯JJ2wµÍAsIºnœ†%ÿ‡'%Þ~_߆VÚaÝìÇôµ i99‹½ñX»8¯ã+úѶÜчuw…zg¯ö F:PÂ(?•Rh+å‚iõòÕ ‡Ð†ÂÄ#†v‰±:¿œä¡¶eÓ©u “8ªÈšE!?çÎ$‘ÁCŽK܉¬Õ3ª*3æß ‘ÎÍmß9óÕÅûÚ몭°©ûòNW…&~rð j$ÍŽˆíƒê?}KC±Lk—sæ~cÕûOk¸m-ž©Ø «n^²Ãa…Ñ™¡ÔÉUæÆÉ±Xã«gú®oÅ÷Ö{KÓ4Ñê9eO+zr7Üg¥co£d™L(LdÞ„Æ©è[X¿XѰv@ ÷í¤JLYÝe›ž«tSa™õTTšÿÙŽÑ[9";@!”uÁ8­äè¶¹Õ ¼ô‘™5Ýs_…‚0ĆO}¦íF#…‘Üx«Ò Åkj¦ |qosflE#âZšªW¾¥ÀÙÂiÚŸj4CW¢è0ö>XWBöêÊht´ØÞ—ø,#óÅñÂ(>Ú.|dZ¾1죄8;Œ”l Aƒ$¯,eh°îQ-Z²” E€ß€[55þäEJ)Ȱ®µZÄ_@\žhÙ°3ÐLóT”„ ÅPoE¾òc¹kúˆÒ?<½Ÿù¸=æW_SWÍ„»_Çç¶sÏ,õÌÆS a´®ÈÒ϶ƒãaÏsbŠ…HUíŒçL£ÖôÞrÙ±Z£~üà˜+w1#„Ô¹_oÓdÌöá‚Ìmï³ +ÅkPµ’k­,b gHQ×3™ß“áÒ™ÛË?νg dV`PS¢Ä)nxÝÍ ÖËzK¡†ù¹@Ï¢‹žÐ YäRªgh7 z?mªÛ¹²R¸øæ¥–I†ÜÔM\+w"@£P1íóFÁg³S± ãíшšVç³ØöÓàÉ[7EÐM÷2 Rƒ˜ªIé¡¿G“GxûK•ˆ/»)T’|(ŠˆµÀ9î±>x% HÂ…”ÂúpÃ&æb<_\ÀOSÍ|„Ä’Vƒ«òõ:çHâÙBŸìñÓ¡µ¹kçXÓéºWlii¤Q5ñà‘9%ìAç—„ -¹" ™û|èèáfýŽñ©­×pÙ1nÓfYšÛx ù–Þ™0ŽL ÎЩã, ƪ6¬ý,µM*8¼“É,ÊE`Åui3c£5SUäAé[^®}RÅÜËG™üÀdlˆTCîâ¦)ê™!à”êOH k V¨Çк»[Ñ B’isvÑ-hQ^(â¥éˆ4¨$• f?ÿ/ö®]K’Ç^XdY`ZÝkUÂþÿOŒÚš‘Õ™V—¬¬ ZɈʬ–´Òœ#ñè´ª²2"È âqqažrç/ª{$<™-j/³?‹*9ã}2,"¡%y¦ÐépÕq;÷œFÌcคÆegIuþä9d1–÷cÑá{k½Ûc•¾¾î‘Ó¬io ‡q¿Úc}jð`í9ÍEžžwb^‡FGù_Ðà!¬™$ŒËà%ŸyŒÂ J/Æ‘^ƒ©(9UX¹òÙæ19 I·VTír)Ä•¹²"2ç'çù¨r`ÉêØÍªàʃ¾!ó>>JÐ|¬j¸òV…*s¯Ñ¥X’žV\×ÀÈ5ë¸mrý¾ÁÀ•Û¥½~z¥J^§áI$êÝpNÙ)gdUŠj±‡Ëü“c €xÕø• p†bwK¢ï³i )®( ¨uØ»1l`ƒ!)ÜÖ‘€}M·yë>3Añ:Xt;h(5¡;&ã$¹ÚuH=½ÓTñò§Á°²ÒØö„È¥æ·:³æ[°ñK@}÷ÂÆR'œ¹ïÛ¡zÓÒ½ÅL=âããì½jûì\ÎWn§ï/d *3Q2µ: ´…Nж¿4EZ¿;?çm 0"Ϭ%À2Ã= —GÉk&…ØìónÕ¼A\&hZ>dŒÝ=Ä4äé“¶Ì =Ìîî­€íÐ`¾®™ äsNTÎùˆö¸…×ÎQ9$¤„ž—ø¾¦—ÆÜ¨0;űí*³‰YG«°ÂXÖdT†sH鮌zò_ÖÚìŠ]¼/%°–dË9-û‡ÀBOàbm\‘à£Hrª:;+¤È=¶*W¦ä 7UÏy!efr¹‹ˆ ƒí¦(ÊwåëÎå»®«VFe/›ä_™ rÊÉ9‘¹Ç.€Sû„4‹•˜ôò¶„ G¥ð%diÆ$Ÿ6;×¼ÎÊuF „ΈwV~¶6—WL§û³f¾×\³‹klX¿˜ÖoÚJ¸û””¾Gãé0Oòê¤eÙ˜S‘1UØž®`3½A¬ÃÀš#>Ý9šH©ØÕJCO¾ŒÌ¾`äTù‚gû1´k@ÆjTÓîjÎþ»c;е¹¸Ü)ï+ÓL©³»'dLŒöPŒÙAþynëš:]à‰÷j}Šç@=ïà¬MµÂÿ÷nßÚ\Tö»là_ƒ9ÿÿß~ûÌýmÿÛó£çd™œþTƒšØóÄno""×~ÝÞDdãBø|±{@•œ¼ÄúÍ<•âXÂn–”ž­µ)° ´ŸÀÃïÇîùAÂ…ªÕ¨¡D0®·åàÿØMj ¨žù†Êå q ‹›ŒO34ýÜÚ*ˆŽtÕÃcnãaÐÀ"»áÝ5³Ý »Ú."&¿ÜÌ•`~±ìê æµ4âAÃ…_``çûUEÄÊ °èöËv½^··›uC£öéÒ. Ø5…îþZB㳩Ù(݇،@Å‘‹fH‚G‚¸x]GAJ*R^o @«2±—梃š²V‰«Rõ=¶YÉ#+²©r„Aò›ég쯬x1Õ¬ÅÎxÞádHÏÈ›MtâèkŸhøèøzPYº?…ÈÌ2_:êm¬=Ð^CâC]îÐ⨹•Û3ß”¯Õ®\Hm—àïÅ…u…ó¸Òú€GÆš.Ÿ8‚crïÒtÁc|ûý÷S?ýSDC5§@ÛAbàÙÑÔ|Öž-À–`×ê6ñŽÃ?¥våÑÙDZxÇüË»1%&ŽZáØÑ¼9\’Љã€K´to™s>GŠeòBµ¦°Õ\æ¥"˼ùãƒä¼S{fMLèIkoã¨È­5j•àбL6UVM™Rb© ß¾|`fèQUÛo¬2r†'E¡ªb»ÖzäÓ:‡vLD1¶i«?öA˽9~³0Šl”€v^=SÛ¡™»¡PvÜD²Än›£¢^P‡ á*ó*ßÄÏ›ù…,Y$SP05„[ˆ@¬»´ºœJ‡ã¥z²fx7+D•œvïùÂ#øÙ¼&bQ ‡_‹ÇíQ xHëAHF+ÏÔ op²žµâ7Žpby¶AQ=– ³°GM9Ç/2d¾ó CŽå†‚[Ó×:Ìõý44 Å€,\r(Êf©1ºN +bµ}!n×=;TÆ“Gvú¹K»k«‘\déY£B æL%ŠÌ †––!@‡s³ÎXîòêä~d3îòΰT€©¯òò¡ÇüâˆÞ‡mtøù%G]ñ¨Àü—ÿ¬¶tý‡6ð;ÇôܘÿíÑðžcJž·¿ à¿j{¬3x¼ Z%Tn/ÍÝ®²«ˆl·í?ý$o‚ŽËçWfÒݳ¼šÝí°=…ÌÖp.¨€^Ú—ÏÔ.¯Û÷Û“ÎË¡eeÆùeZT z/מ·'_XL7×Åg w\ááåO$ûÓ[ã0­x5FÑQ¯ŠQZë0r´º…ŠILÖ½†-´(*SÖ—N/dÆDÑŸÌþ2r"F¥,‘ 3©ŒÊ¢/ °¨ºreböðA.PØý¸wH¨Go¼,WB‡ìâÛœKTDówŽJì©¡37•Ýð;¤j¶<‡É¡ fÁ²Êœ6f…ú`c5èQ2£…Y§„"˜•3Ý #vᎡUä¸iIÄ€x gxwëÑ^޽OÝ77>™Aï Çô€»Š*yT«…=Y”*/L׀׫3¬± ûDæs!Ù™<C#Ýÿvûºm¢Q}š@°»Ê„‚>ÛM!ØÑj;.1;3ô7š9âʨĎ“ÔÎ7o\ PV»½^^#ˆéóLÖvRKpf‰z]”1=ÅÂûXÀĉ* ]u{ÛDdÛUtÓMLÅõ~ÛÍX©²¬ $ „(q¡PJ®ÿ= ÞX4‚äAÊûÊL$w¹Ùn( fÜ…+·O_ ÛqÛäÛmC{m¯ü¿_.üÂ(_š‰]¿_¹BÄÚ§æÞ^1±® c¨cÛ#ÏÓ°]>·öÒ˜Ùv½}ß®?½Þ6ìÊ• &÷X½ ‡÷2SÑD&0@ÚÍ÷)Hó茕IL„±bG0|µ.ÿ÷åBNyôX¡òSE)î'…e9 ÙÅv¥Â¯´O-·ÁñP6'(€\Á;8ÍøiæaÑ?“‚ r\3jÙBᆮ¾Ѱ¬ð€3 (Wžx4Oß%P…Ý ÃÕ²+vG&7Uc¦Œœ‰£+Õ(R˜¸8’Âç¸ëõ›^¯W®Ü¸Q¥×ÿù‚âòüT%°o¼´ñ®×«‰Q…¼m"zù|AgƒÒB&jë{§q7Ö®QüùÓ+¨¿y=çQË ìäjæ’ˆÉ]sª±8?œ¾c$Î:Þv žoµ`i¥:]-êÞçÐMs; IDAT÷ÆájÒ[x𭤨;»¶~dZ.޹Ob-:¡û¬TŸþÓ¬>X å|¹søâóÃëê›Ôtú8¢éq°· úñ×¥-Ÿ7}ðkX¢§âC¤LÀá@ÞžÔ桃½ó=ÂT‘rÉQ?ëc™ýþ«6Ïó¤B±?kÀÄºÆ Š³†ëu“í¶½Éí—íúývý×õv½‰Jã¸=}á3!ꃜrˆuÛ/£I‡x×ðïñW¡4Uô¤ "~ó¢3¸ñ×61ôÉžme”xzù9êk±?ÏΕãHgG]¤¤å – ±ÝY1é£K³Ž/_¾`!òq9›Ç©1Ãt¹!jvWìl/ªû…+P¸µÆ­ÉÝðmS½ÊÜ€šµ®šúŸu[—R¬;ƒT†~Ão+M.L f†k…[^T±µËë'±»æ¡©@£Êün±-ŽòñV§[#Dç`æ,Ç5-Åë¼Ï¡ÒûX§ÚÏsxr˜¬‹1þï5/€qÌÎÍåšßôê,ñá"Ê‘ °™ LwŽHì 0œÞþ Â,¬6Õ×äcK¥A Ð-ªG›ÎÍÓš [×õ˜ù  Ì ÉžÄìõ¹d4æE³€NvHo ÍxQhÝ\†öô"‘ZeÝuÖ±éG]ç™d8—ª:6Ã!eÔA’F´¬Äñ6¯]ßÀÂŽõ¢-ìÍxÝã0€3\Y×'nÖ±2ßU†Ì}QèŒeøq[Ðò#Žg3#%¿a7Ý‹":<:8Ü 6ÂaëK#È&©îxpKôÎLâlÀ*¢w1˜z•ÝÈF …šÇéc .Ildǰg;IÑY¡ˆâá¦pƒÍ«™uÕêöXì*®Ä•î‰cÎ7Ø>].wP•viÄ•¯ÿüöõë×í¶ÁÀá# Ö˜¸Y Â* 4tm9ŸÚÍ*tWSÙD¶›åy h–äy#Á ¼dñüóZÅÇò“wòs®˜…¤}Î; Y?ÿfïÚµäÈqì…E¦¦ÕZ«ôÿ_£²¦ÛªL«KVV’Ö@2"£JÚ>½{v4M£žŒH¾‰ \¥¸èo¼0±É®ZµmH?4ÑÓO͵àªðõ¬@Í6q[†[ ÃÃÐ)ÀáŸÃÈÕÃã° ;* jRL—GÁ;‹[cšÖ»m«lqÿ*…taðíöfœg$0%¶|‡×ë ”JDTk…¢\ÈR'Rœ„“‚´Üײn[Ã\d’XÝa^Ó®³OJ|Áȳ±ýÏ5Í2)ŸºçTí?Bf_9l„q&Ø‘ëW*½SŸmdVH }€?¯ÿëàÓëù¯¸ÿ–e¨K?\(´|3,ðõQÉ\˜¥C»Ô­ÞnÛÛ¯÷?·í{­ïwmÊžgÏÙGv²[ì ^?ã‰*óŒ~y±na¬V³¯ £kŸ–™µ§K8–ƒÔ·“/g«Â䜸!{åCâ߫ͺ~ø@÷›ê×N¼ç©©4"”Žþ興âóÊ7möK¹ÒÅL°ª­ÖG©hîÈ:ñI&»¸­¹1E4ôhMÅ‚fŠR¶lIU;ʵàr-¹p©©U¡ K)å…28ÎdúoO9ØÁ+ª#Ë£ JRÊ€M ^¬uIÐàWZ­"hZ›pfSÁ”‘*%³aNm®CÎçj‰I³\0F~\<õ ëü}ôR§ÆQ¬Ï\.Ýýhº›óW)Ð4&/ rv÷4J¸iý$83e€Œv¡è°´I¹”¨a‹“(A•µ ÁµCB ‘NT, B29xÖš˜¡1™Å3ÇÚÏŠ˜Ç!{ˆµ oƒHF:}ÿc@ÛKœÌ\c?)G z ™^|è\Æãf.î Qåpçj¦‡½}CȰb`çiÒy*´;uNR»Ô€)",‡øOFÐ[èÓ™}¼¸/à´»2Yú®¼ƒ}Yù#Ø7Ó”,-Ö·5,; «—ÈQ•°a%X£ð­7&k yõÕ*qéjæùAõt½Õ “zSpyÎÙ8½Íé1”dè@IЭ¢«R%É–*dþöÝÖETVœD3åØªOáòʹîñ©ð úH¡=Å/œ}Ÿ¡ÁÿgÅ;ù·p­õð³ù7ñ޽oåc®þ¯ €ÿ)V>˜ûr±‹Ÿ-Xˆi¬Íˆ‡8eA$úûû¶½ß·ûýþ¶Ýn7»ÈË…`iÏô°î½l1¾öýõ¶*T×$~+;BeÞÐÉa6hÅ ÷x‘¨v*=Z^xxÊê›ÊÓÿŽå‰Ó5Ø—§¨§X‚…ήgl´Fo¼ìÕÀÿPhE…W1+´)Z•Z=RN†Ç€ñJ&4Ëä8–¥‰B¥9Ô‘®Ò„KÓâ¹7´<Ôc°TUŒUeî<†Ù2—\8ƒé÷MhKM´ø-™µÖzY´‰@g–&@!*TJŽÎ"œøBåZj­~»›·"™´‚é”iÂB»Ø‡ŸdUÑñdÙXµ†i'²Û½¼—[d—OºéPvj‡¶ELhcµÙìSÔ¡ph,Ký°—“A‚çVYÖ˜#)•AR›ž_ÊMTY ¬DSI€ÍžØlÅ]uÅœ‘ð ] =ª ô:ßì ¶>CÂ(²Ž—ÄŒÀOO­vàvNºQX—z†.Æ”™*œ!€4@«eЙÛÙDOg.V>C¿‡ÆFÀg×ë?øW)S Ûkƒ>P†øæO•R 0«ÖZoo·Ûí¶ÝëýÏÛÛ·ûû ŠRJÉdÑ,‡3OFc0ѯÃO|¬‰é4Ó»ëâì:쨮äV³ha.êÅ€æòÊÉЬgÄŠŽ–¢K+GNJhpð+‹9 îŠÕu Î`wãxÇ;wë 1¦ëõJu»ë€÷]JFù­p¾–R¤«*¤‰'̰ÞåRB¸Ä¤¤¢Ô mE{UKGÁº¥Éý~¯M_­ï]èòby5¤‰<*+.¢m²C[ÅC•F%5sºP·°“&jë´ÇnNoÐ tl[­ØÄ8]ð!U*ˆ(ø1˜ô¬ð[ê˜C|ùŠ^=´ã¢Ý¿ÕÄý}¸ï9+}½\ÃjºC¿‹b[ãªÎs¯„L¦‰U£Ë≠eäùVAàL%d‚^Í|ÿ^1Ö*YÞ"ñ£jœpepfÓÙVƒ3ï¾ P톦°Óã¹,Ç2M­½˜¾²Ãè§èD…Š4ÏM% ©ócˆ3SZã“Go;,‚šõ æp¸4O&bY±ÊTr¹LγQ6B»dKÁ'Ý}M1Ç&Ïêd!ú˜W¶˜K³ï>¡LÚôZ¸¾×o¯¯·ÝÐT[½¿ßR¾|-×R®™Âïª()viE#c6%µƒtû^k­h i½ãö”+×ÄÙR³ÜcôÝ£SW |Œth£ÆL®Ú¢£Âq™©)ûØ äägï,ˆHU=̵U~¢WAçÌô©²ÿX@h$"ÊKµÝäÂæwþ‘Âd-=ªu7¿[ïÂÁCJQƒô¶¹ºJ«¥±>ªdšm¶· •iš§<˜} C†fáÌ#š!ïU/UؤC›p¡¯_¯Ú¯4)óŒã ­CnJ@cÊŠ´Í iŽÞ鰷Ξ·²„fÜÛlCbœDðFœ…šEùâ1àÿ¢ µØG{#vc_î¦ÏËSG~¦0áÏBÄ¿¹|ÔÁOŽÿÍò€ûÉúµÊÏr!$˜´.‹'€ˆ®_Š*¨‘ŠJ­·?·oß^ß^ßj­ò¨ò¨Pð‚ÓÌõÅTn´[Ü!³ÄïãÐÇ8F÷ ÑÓb¾ ìÌ7—lø„˜·~îRR4â#d{Àäôéy… xpl1›iN•C**ù‘7™ÛK_Bn¬Bq¼Õ‡Ðr3˜¡~=4D… HÌ*¿•R uÕ‡Pc!‚ªš>[ÚjÏd2/ÐqP…6­µâ!\èVëö½Þ~¿mßï0ï5¢R RkÕZTk£JÊ*åRŒgEÉС/è1š 1… ðœÆ‘š’[ E¥[L/T³—f‹Y Î…2 Yb(üY:̬ÊêÿÐíé±ÎCS³+2‡Y-^h 4¹v¾%Jg¤Šn–®±£u6bM&( F3gˆL»±YÑMÖâáCéŸL$²kHä²&…h~äh3Qf},¬­g˜wæ‹-ÓŽ£•kùPËáãAÑ£ë™(ö…Äu_4pbtqÒ …ùÚ÷š(8Âù’kCÔ^î6êéÿ]‡¥1R4Gc<kUÍ×d”xÎH96‘¿›9 e¦Äœœ22«äê¡è—I×n®_Æ{êeŒöìqƒ˜2QgNZ8m°ÏÄÇGúÎ6îWeEšªc lú:_!ìVÎ,iÞé8kkfð9[$„˜/GËËRŒƒwJÐÑþUA4’íÔ” е÷Šm®Nµ&¯[½½Ýø¥UNtÿýööz{ývCSέ\Ì nöm襮F¼ô'®„Ç‹RtÈ÷*µš shlÐÕîÆ‡Waè—£~. .%ïFwÒLc‹“Ì(ÉYÖkίºg°tÊVا,³·å€3y$ù;Ì#ý¨ü˱³? lÿ³Ëq=]kWN25ŽòkàÌ ÿ”ÏÊ\& °ØËÙ•¿Úô¾Õí~¿ý~{{}{ýýUZ.Trá+(™C:Œ ‹5¨È QÅ S’#eæn%‹ÃKžÃ'G:áý› À~mÐ*®|Åq¡Jª)ÔãäˆEØÍ_Ž‘í¾dU:è!P@®*õ{ÝÞ7”©0_+åRÐ!I¨y#M8¦**e³ˆæÐ°d-hâ!j@¾xÀ'°6iVëvßÌ” ]˜Q.åÂÌÅêÛ͹»ž?—¿ÏÆrŒð ö]m‡×N€sÂ]‚c©:™/óÑ45âµU„P”5»aŽ1`VZ?7³Bð€<€¾™J†:%&;÷"M ÊÝ (*ªÅˆ¢™Àät8ncQÙGyÄé,PªÝ‚”!®,#§=rK*(‘®Ü¿u¸í/aÀßÝZ&¹õµÞú£L±Óàˆ¸šÍ_¡ÂA/·æ”I»ÉËØNácfä^ïÑ@_<ù'”ŒCíZA‘ÁæªÇ»¾4c]`gxfJÉ,6(‹æ½ ްP ñä lY&ÚD»éeØCÛØîª çL%ÝÚÊôÝ–”Z¯à޵¤<<_2!£d²YÓ$A¶:Ýï{=<Õ¶ÏÈ'Ü…óËl†1er)µW$P.¥0@U”²DÄl3Ùþ½qrXÌ BtSÃE}š´þîiÛm„ŽÓи ˆ¥)¾ßE*TDÛöÇ­Xøèò[¡NÌŒÌ"µÖ  \E*C7Î¥|)N÷[†Ñ¡ª[%³Š«jSUPb¾¨*š ¼œ™?XâÃO§ï+êáû¹LöÄy>*¡¬·dõú¹½rÇÁ©ê ö¡YmßîµÚd¨Óé³îN~º ³|*úqG&?^\ó$’®Èì>&©‰ |añKY¥ =ÀJšPrñW6ACu)‚É5G˜clªÀø½\ $žV cR´ ¿­Øœ‰,ð;r‘¦¦B‡äýÆ[÷@ˆkN¥iq¯u¦ äPò¶y•ùè%pÎY××Ëúç1qS¶±ß…:KRþoö®žYŽ[ÇTm9x3eþÿ¿ÆR¦<I  aüèî{e­ývkõ̲Gs{ºÙl6 âãð C‘Šƒ«Þ+)½÷¿·\Þg¿ûÏ¿xôî'˪€½ã¥ýaù5 `Å”Bãó߬„Ëøçr\¬;è¦\è¨ÏŠŽÇóñ¼×Çã~ÿv|¿×çSEèÓo¿­L©ß…2t»Q‚Gþ²ØÀ[ƒ'èÎØD˜Ôó MšÞ¾u&ìeÕÛæ°8Ë‘8òõöĈuØq,ÊP§kÅbƒÆY:g1¿ß)æG0‘F|µUV¦›å•)|C)…n¨(”T2—$–Sê«o}AHL™pƒj¡%KA„ÒœŠûýP}©YœÙ‘x*Ò*Zµ=™|3T¶c)M9¦Ž UÛŸÄ]‘ÉG%ÅS2’…Ô7—–7æVñ°³I‘‰˜0*ä€Ûî!Ü`œ´ÛÉ5ÖcUÊ{(ß?ôè_Ú¾*oy†Étް©xzX–(–6nl½3,:l{¼`™³1 ­Fh”ÁBg„Û™ùf; ÀãÛ­º“ª]lÒvý‰<ðn4l´ð½9à‚ÑþœÏïñí¦ZLé,(Î. ÅUèÇwŠ^½Žëœº`&ˆeŸq®]  ,/Wbsð¡IøØªµY­GÉÐÝy¬|¨'1Òe" ìè•ic+–tx[.%2š)Üs<òZ§ ±æ„™þbfv€©nç`ÝÊAÈÑOër:D.Ír]˜ ccKZ¬Žu‰`01ß`TF¹a…dŸ.æD›9]­1#OTëpAG™¹yJ?f&B)\¸ô@cdÒV-.J Ú,Yo£q8GÆë|÷Ñ¥¹1ÛĽ¯dêüèn€EÚUi(R„—ªðšÔgõP•*œ ݬ©¨Ï§›]T¡Ð›H¯ãíp&²ãš* TEÄ3'‹GÀX n‰­Ã»oë .Ï×Á?Gþ6t‡%ü'S¾~tÒ*lnÓms¸›óTÃß:JŸ×[v³Ýà"ˆ/$ÕvwðwqxV. F fâR¦õjó€Ä½tQµ„ç çš+7[×*7­P)@¤ô¼qh@çˆÜœùÔ–"¤ÊdÒ2ú4ft‰ÜÓÌÜ- âBÀŠºtúÒc À˜#39Í~àõ5íxC3!÷S0ïïêb$]«iS(YH9ÀUéå{NÎï¸Fø§ØûËöÄûÆô‡õž‹µ-ì,ÙöÝú&]ôäÏ”¡%ü/[^—0”Ë#•ÿø1èü_TþæŽÒÓ'Ž+îÉ¿ne3¼ŽåýÞü+í_!?9h6[O¯`Z’ÙYŽ€Òi22ÎiBy+¥@k­¯Zë_ïŸÿýþxX…å­(Œr‚4Ñ—©\¤MǦ¬éqÌ §ÔñáyÝ·_¥][Œ”¹„>gä² ¨?B!,_lTC kr=ß”M:Rmí*öpÍnÕˆ=·´ì1Cl]sÚU5R NŒì\2vÚ˜ 1J XnXGv ‰4æLŽf$ã¹AaDþ@‚&’¦±³Î¢ŠL”Mµƒ˜Ð L, ©Ò…S1t(ˆÑOë© Ô—hÃãUŠÃ6ÃI¤IitV4eæDPh«Dlf'"CœFô[ 4£ $œÙTøÂÌ™¤+7( ¡+Pff®/Ed*FC$°l –NvzL–yŒ ÁY¿I\Qà:¥ÉÓ°Çšíj ¦Ñú:É™½»ÕÖС¬—uêv‘]þ€&”¹0¿ebB¹áíSÑÁ¿’ÜÖ¦28ÆÀ”íImªJR¿×ú¬ÕN#.ŸJùôƉѕœªK ±'=¢ÎÓ%ã†" ^~€ÄEÿKD<ÉŒ+v‰<¦—#““jE¢È7Ó ¢±Q¤H· ÆÖ«…õ;•‹Ž B[“ŒÅÍ·A  L€,;.…ØoÐ>ñÛS‡òÀ×l¤ z$ÒzQø q,sÓÎZÔM(K³¼-€;—lŽ[7þRDCþ°Qϵ*/-7ÂAJÛïc·d<&’JƒµÊ“¢s¤«vÔZÇS&X¾ÊÆvôØØzàÖéÁú]lB @&³¥Ù³éÄAÃÈoÙXåAáz#@͵ƶq‹h¿µ"ù¢SP˜–€7S¹1%²àp•j2ªBŒ-IT´Vdgë¡d Í [08­1#öf`bO,?¸ÙÀÛŠFðF³?N(¥X‡£P-‚­/¥[1?#<¬Ô¦èŽî&Bý^Ÿ”IXõÛ2—L ¶Ám.÷õM4á»W¸€"Ï“ç«ViЋ$üy¶Q_;Tµ¾DèVL>ûe],5ýQ¿û:$!hÈ­Ÿ}u 3Ç>«0œ‰¨«K¶ƒíym-{A³.”ò~í±2Z¯Eg:†—¥oÝ•öáU4%ÆÅAЃùÝê ŒmûŒvÝö}L`?0(l7¤]¿ŒÞ÷ʦ'-^¼)´œr˜„4>þlP»÷? þN{X–»-ÑÁ0”~ðUIï|þ\ùs€·ÿyù©—ÿa«ìéŒç™›€¾± PÎÅM¸W­¢Zë_ïõÛóó—/_¾ÞëóóÚžÏL€ˆŸ4ЛW“ó#‹~±~1¦º:ÇlEÙ¢d!»£j¥¨è1'Æø+æsàùÄ*!&ïôû®jºÑ¬|F#g/xÑcïÔ|ì#³»ÆdŽ÷N¡€¢Ò”!®õ¡ æÎ-™qåÐ, C…¢”T“P.Úüãö¾H ™‘Àê$«Ö&èaꇒ"ZÑ$œ‹ÃXQ<Êb:X‘éÁ@¾-sù(`Áç¬'ßè¾=l¸j˜k$ÿvÒÅù0DÓQ¤ûSEtk“ù¦½¿ lÙ·úž¿ÛÎ%9 ¦Ï­‘ Û­T˜ ³¦êQãP¥ “Š#$lv‹t#ûTå¥"DÓ¢/ÒW ÕS$óÀdw¡Iž<ž$pþ¡âïZ¯©k®ó‰™žO¿~Ôºö Ž?tBéGÛÉw'ž’·A5ô¢%ǯvÑ5«¤-ð f]‘Âd$ãõ‹üR?WFø"9F§ëÁiö'öåÄ!µ(Þ¶ˆUÙÁΤ´DNTµ™½§¶Í Ne`OæUÜöâJ5†s›ŸM!PPîà '£ÃÙw=Œ‡ r,|´‡R ËT±è=‰˜‰)ƒCv™@:/fË2+O¾ìP^Q`èb6Žš›R`oÑ:Òɼx#û0 IDATQÜrP—ÿ»j™¦¹+ªÜW%Ï¿(mVÐ@ìn-é4W…íù7Þ]À18” ™K–úR"ËÝÀÚ¤¶ú¬µ~çRˆ›V"$g™®`$Kåê JHfÂ¥j4–C‡Ux~Ÿ™ûu¸Dg£G2g?գǻҵôó|}#,ÆúA‹ÖKÝ‹±l¼ðõ1»L²G>×éBt?Ø5§Ÿh:¾]&%ƒ´å*s¨¥Ý©?-6ŽÀC.ýIcˆ&uá\̵c¸4ᦄ.œx˜ë(·îKwéte‡–ÙÑÌi¨Ævåq«ƒ¨^«éó‹ñ¶8ãBy1[ºÁ/n½Ä ð˜Ðöÿ‰äø —6›-A×ʧº´·}%]$³g¢þ`  åò¿»è%Pèúî±daûôøÐz“¿¸þ«ÊaÜÕ³eÔÛì½EÓèSÿu àÿOår¤¿7ÿtY™¹ŽTlŸ‰Ù´…YšÔZŸZŸÏZåþõþøv|»C¥Ü 2˜™rálÈCó8•b˜Áæê:% 9¶äê÷iE›B°ä:FdcH½ió&:jB±ä–E–àQ£ Ž»`æ}u˜¾‡³#zØÀt%>(m:Päe!&ÏÓí¥+Tƒù.Íô‡ªµÒ€ü5©Mõ%ÒªJ­rÎ÷(̶kÚ)'´‰Ea\Nª¯*MÑ 7KðD–’ÿÇ„GSí×FXz¥ 8Là\Ó³ÖgB¡¾€IG±°T‚뻹àF”,g)›rìß™´)ç€zÆ’}r`8óøE»¾ ëùxÿ»6;ŽÅˆ†zgºmŽŸ‹s†waÆOÇç.öŒ,ì «³ ¡0——i¦2®¡xšš "Ý•Z«­6Õ&Úª¾D pÞ€Ê(…ºø&ðÄ”|RW£ÿí‡M柳ì껸=ÐÀ„š˜éyìݵ“õ×­NÕN”= ˆŽiÒW½WW ØÌ9…ê[Ò… Ž¡ðü:Ö=öì‹ëéMO@ÁÊãµ¾D/âæøÄù€£É„ß)°ÆÀŽœÄÒ.à vÀ²=©šÙ›M‹ãoÈâQûk|ëkXÞw±A}Ä3Míd d¯6YöŸ$57Õì@AdÌÎbM.(ƒ¹¸Æß žÁqµOäeÛíÁŸµFTÝBPPÒT:™ƒ‰!¡Vß;}Ÿ/~¢á<5ÇAØVC–@"€éÒ Æ5‡E( ™Ï‹» !!%&#@B}ÙëÌBbÎl À[m–ü¦ý¯g±²„dHªªkŽYÃÜvLëÝwÂ/Ð O?H+ôtïíÈx^"1GÃ!¯×&™§{åØÛ{…—DÎ&|t¡¬ãÌ4Æ Îtß§.×6°"\þi~™6ðh·´ê:ÇêåÙÜy±ºÄ‚<¡@1ªw³ßããÒÁ]jg@R>ýVm-ˆEÎÞS6ªtÈcÔ-ÿø/],–¤póz» cŽ˜~³r¥C,;½‚ÁJuõÍͲÏ;­ ·Ñôâ£|Û)°XûKìĵRtHtæjb¹‚‡o袜;óï+ïkñóhE¿V/ÿÊÁ¾–˹üNY;pdç à_­œ$4A†“ÁtD’01òäÄ{~¯_¾þñ¼ßk•ÏŸ¯ß«4áÂå“E']Í\öިx,B–é´†il>9 æéwhÊÌË«xJ˜ÑØâ‚dY˜9r$.sÖ0[ؽæÈ÷°}ò¾8 KFÖÅŒFûøsý2Õx ;§—=&âädÓWRPòÙ=ô ³~Óâ9&pæÚ´$*™Ë —’ öÉÌÅá… Vñ"@9¡æH 2ô âúí¦Î`©nòb"ÙÒ™—3Q߈}©6E¯Òi5DE…: kZnΊ({Â0·~"R&ƒÖ3PÝwD3°-¼¡}.[ÇWrã­¬î „5—o‰.¯Ê…¿y„'ÖúƒIhj`Gª@JÌΤ IJ€A¬S(â nv žœé ­—Ôb !-è.Ô‰U¥á퀘ˆQÞÍ'#ð{ñ¨á#p¢ª ªŽpŽ©œ}±:>€mû.'ÕF3 €nH;šáì@F ¼Ùt˜Itâ\;“a׬blp¡Ò¦¥Å—\8ïx3´Öã.üjó‰,³8šC[#ã¾G]óχ¾:8a&4À (sVc뇭5û·ÊÿAqw¸òôDv`;"û¢°)kñáD€þcÿrå$Q(Ž¡1 µi­µ¢>¿Õ/_>þýûÞõ%ÒÄØSßÊ–&übH B”Ìœ €´±’13rmÉa9\Á‹ãXH:Îì.F£¼Âõ2æ¦ @Ä ÷ÒºHÑ…8z¹Ñܦ0ÉúIÿ7{W¯%ÍmcïÈŽÀ‰,G£Gðû¿ÁF–"+óL$)j"êb„ ¬êžO»öú¬Ö+ž£OÓÝõÃb‘ îÅß K΋Kùb]]ž}u&úXo¬¢ ÂLe0Hn4§G\›AG"OOàìƒX…À[e»Ik­5¶Ö×#ÙzçM½ó/0ðõãœóZx¢öS‘bX²‘6¹Ìhaz姨9~›¯Pq‰MT´ö=€ØÂ óÏ«|mO·cq_æÙž¬{ÿéÿú4NF(7榨~øéGÉüÞÎxNÇP³Ó«Tƒꙟåà|üÈ÷~£¿!4’]ÙÊm^vâ%ë¢]ÚÀi9Ä š¢UúC—tíùøí€0êlÒמ1ðŽgæÜ˜ß@°RnâÝ=y[iíz `7Þ^ºt~êËëž q_cãç»°èÿv>l^'?Z˜RAìz¨ÖÁ4=>ßßZkM*z÷ìn•¬jC&_¼Îæ+A œÆÝb¬” †ªs2ЙŽaúh¤#ƒž~tíÚ»¹"Á9ÍwÞv¤TÙæ²%7ª§a´)žÞü³ßP…§TpE(¸n‚Ó^pÛÿêöåöÏ_^ô:s/åﯩg2`ηÔúò­+¸»ZHF+|% ¢ý€ÿ}›îš'(2žËDxc“vÿåÞ{ï¿ôŸï?}Ü??û½ãÐ÷ïÞ{M~eúéT ‘}W€ÍŠ)ßšh¡3¬î+Í÷÷4¡,vÿUý®é¾xæZ—Æí*þŸ\a g– >Aìß\K9ý;ušqÞƒǔ3c¹aìW¢„”× |¢«jtÅ­µœxlˆPµ¢!Ñä­UÈMš4VéÏFSqªl© 4iµÉÑ\÷êÞÕÔ •ý0¤^5G¾k÷XÒÆzb*Òû6º vu#/LÕ(hÈb³³Ùdo]3ó˜I1¡‡¶J¹ÑëôŠðb“´e °ùÅ­a[nÌ!+ƒUÙľÙ|µË„²½>Iw5](bC'ß¶ èÛyñ ˆ,ôK¨ó>RA‘v£T¡Ã„Ýj#U$L@:×ÅÔkfaNðð)-P²I!nr퀑‰”„qÜÕV›9ld¢…i H{¤ËzR Õ#QM•Á¯oÑÀÚΣdŒ.õŇ._ËEJøÍO*¬Ï>²<)+”: «HÀ‘Fõ²-~BËÀWÆý1w˜ßÀ]d7³]üs¥ÚíË ê$æ–2–M„Ti·&7ñ:›§$m¼ŠPÎ^&‘|™éáÉ–·&•z8 h¬£éÖ‹é)óÅð̤¸U’dÀ0¥âÇŠ” üØŒ3$ÊŒ;Lf‹PK |zç«#Ïö"$ÐÍ}§[ÏQ¶ï‰Iž–ö ýö¿ž¥@¸Ÿî}`âݬ)xÿÎ#<¹ózîÞÜ­ôÃ@á¡‘ÒŽžÇ.ˆVå”P®ˆ—º-qyXáS(î"¾ä¬"*fçiHWÿ ÅðjPýËCu(†‰UX[&…:·Y×Àu¼Ò=žÎš’çÚ©×~òßhÛ1ñãü˼ƒ-“?é, Êæ> ¢š+*5ãuy¡õ€pfÉ:¯“íñ¯,-±¼H¸}kye„šÇ>ÏÌñGFD³Àµ‡ö,ÜåwÞ5ºx2[”_üÔ™8 ³øñ6š[nBäPå•zç¥ hQ9ÄC‡„dÖ´m8ž¯ö¿Õ¾j÷ÿ§M‚U°Ð/žgòK߇l¶ýïü»m_7ÿíkxÎ*»­±Uýø¸üôãýçûç/]]ܤ‘LµwëˆôfÆJ·©ª™ª±¡Iç~ÙdW £nðI´®#+°ÊI®•tû Ùì»,À-·]íLž¦ .QAÀ*ä€áâ—ypeˆ}ÕsÍ>¼×±uÞ8^,C4‡Ø¦å›%µÛÁà0Øà!d$ Z©loű§“azÎçè9ÖSºL'àI»káùË_0v„Ü(í€ë ¤âQcèâ´—²,ðÓu¨Ë:Ü7£•ôû¹¶ÜF4Ìáø&ìO’Øïs‡éš-¤T¯ô敜7§˜°+¦4®{ž{³K‰öC“~ÆÀ—åœÌÑn‘|zp`¤]2昮³÷s/PkäFד¿OdqO |kÂʆ†ÌÌŨ°aËÃn;X_j˜ã7Üks@Ÿœc>íöÐ鹓ojùØ€šu5{˜ª®(›“7Ø\§9Ú>ø»dÝ;‹8$»rš°Ñ‡° †ãR²·'#L×}ЪrŒZ}(6“õ?Øæ¼¦Ë~Gàúÿ`3½È½îÀiãñÃwe,y@ýÿ›µ® ŽU-ƒ÷W³ EÏí·  yˆæå¹v<Ÿ‡IÊÓnè÷¹é°=ø2¼šGb†wkUäFV!¢° Ûá ƒ¤Gø¹™W ¢74 *Za–¾PP!º#­2Ÿ©! ¹-ÛByOè÷i4ýz7jd{ÒÁûoÛñÏ*ÅÔéÀZavW(F0ù×.^ºaÿí›wšãྀœoPN)KÏ€§fN>bŸHÛû‰ÍßÎôÌ•ìŠéÏÉ4Î>8^œš° ‹ˆ¯Á/ÎG{ÿöK_*䙜ê[xƒÙYâ‹zf3×ñõ"4§+Äg™¡Þr“…=Â…Ø3öÅN|þbŸåÞnýý»ööþ}kÄ@ÄîeÇq§Ë:~Ú )µ‰{]_ó˜pòèžÛè‡ÚaÄÂÀO½zÑbDM_º±T í0Uµ‡1 Zk­¥¶zàÞ»ÆPODQ¤Uâ&j*7i•(ò½½ Ùoˆ«ê~’ÚpWõ<7oßµ÷?Ï*öè~G·åêa’{•š½¿55â0;z :ÁB=ŒtÀܵ´ÆƒöžˆÈì¦Ö‹ ³BnbÃìá\¸â—OZkX)Ò<,Š4J“#'àõc1³¬½Zëó,žÜë²&Sgά׮ €z#oÕßl˜×¦×ñ³¡Ï“3©c÷>ÐUqï8Œ@+à­½7ykß²:`P²ºÀáùNÂÕßν |Þ»°«iÓwyC*Q%õó×3^{ƤPÁV]±Œ×)•¨ „²£Ï¬vB`zknX8rL 3½XYtÊiV³fôk¡8ÅgÊ5SV4&]§o7 £É•eàÃiz„Ý"íZa9ð̹1¶8QÔËGÃë— …A³ó)ÈðE‚^óÐŽŒLŽ<ì]¡­JdN¾¹3ê”×íʯG…Ù¡A—°»uí(ìî÷ÏÏ_?U  ™¹‹©Yó@>ÖZ£×vy[žDj†¸×‰RbnX(hlaÆ7•*~Ÿ¹°HññQOM’õÄçÈï+·.LÓ| vh·mäû ¦iÏŸ÷^øíYÇ_9ñ€};ÏvàWx/¤ž¤Q+C<ŒÓ—Á"¥> À4…Á×#9]™ èjÐðaiî*eª÷Ñ~Oµ‡ôÇ}õbhÖÉ0eàUCé«ß3YÆ¡À´u›'1ÒôÌš07úØNeÖòí^MB1`zWM~Ü}¹§ÓGÜ?M”âÑó^9±g–誎3 ²Ò÷Põ|øî÷”¯5”‡:³'Ä÷ëÏÑýà~x–„—xx¦ÍN[#Š Îßd!2Ë£œkW' 1€§ÿ;fî´À«4Jm±Ê6zN„½÷U3E¡öö§÷·F{4ÕÞVÀùúªÀ’z>ÇOêq}0L…$ýÕiËBSÚH8¥=m‚v³Þûg猪kþHUÄ€¡¾ùÀÎm[pæÂ6¯¿,.¡!Ar© CÁ,E¦°ìºuJÌcµë®f4p×zïRE« 5°Á“”˜#5¢ÔVvWû ^˜*i> ™šç[Tz\…#Ìa“†ÚåP À…˜£ø‚Ò:ù´Í!å%²/¿—’”tþ«_ǹ|Ñ|,²Ë׬?¯Õ‰J{¢ŸAÒKê.Ô )ó÷‹Ø‹“ä ðï¶MßGg¸¸œDT±¯„'"::@3ÁÑÓ¤@þUív|ê½÷_ûÇÇýão ¿v{¸äm„f¦PNRPwñ†§|åá `Ñl{¡j ßôdÞçùø§w9XNÚŠ¬%ú…ņ‚¢+ѹÏêu¡üY씫áŸçV®¡Ì•Î k9-ü€ÍøÌ}ÚÑÝêë$ýíC·.›R¨>Û[ª¡þ'{×®$É­c,f[`[’×òöÿ?áz»ÖJ–´–ª¬;²Š°*ia $˜•ÕÝ3RÄ•"†ÓÓ]•É$“/<2Ö(?› êFZ+Ì¿´Qk* SQk­æp0ó3o,»œÚnDíó€‰yÂåpÅ´³ÓÐ@ŠËœV˜¨mT™¨2w€ ×­AÄf„ýbà4UÔRnf£òr²Fû>´vi:ަÕy-åéÒðÉEÃ×70cÒîªwS]«¨ÖÖjûé§ŸH-G± sT"½}¹B§D@”öøñÊMc7Ñ¡ÇËRæ–¼1Ñsù!ø>_ïñÈt¢ÌIx`Ú¯£Ç!—a½¦«Ù™ jxOÈ£Õeíã¬Ê6‡ÜL‰:`¤m;˺_æ—¾sRz€L]†4s–:£uþcE xø(&CžÕ[æ[b€,$Þî@!}'NmÅðŒÂ(6¦ (DƒÜ&Ò`0¶ÆîB›'NãnXýϘŠOd ûf¬ß¯ºXrtmGü-–þDI3ÔÈ-¾xÜFžÔTò>³ŠzºüÎ/Õª%wA§”×f/ýdWl_ ÄuÀXòBsßÈA¹C‚]+JÑçó´|ˆ‰¶kÔlèž!oY๤Í|íËáÒE ÉyšQó3­‡-Q:ò=¾™SOì׆¯6ÐÆÒ•šB¯mã·Zh8(ÁŒ¹ÐÎ(ͬWÓRùP¾ý ëJèô=Ø:sk9Ö`ô4íê #½"³0|x¸<™búÞŸØ ¾G”ÒÐy:þ(ÏñGý ÏLŽ»V:ìZLr8¢')õöød>v˜w`H®?YZû¬å?W¾+Àýp|c.l{Ÿ­ÿÙròƒ¦ØÊ Ñ=-›Í³ÀÉ. 0®YÝÀÄ(T+7‘ÖÚõv»\n·/×öGCÇõËõvkÎùÙU•ª3¹®Qy[ä<Ïê'dbQ0ebIz€m„jq¡ @ ÿ†b±ñJh5ó[`º¶Ò5沈lÚ8b¼$÷îLûM&äÜ_|¯£ì4ÈÜyܘµr ¢¥*"®úe›9áYÚ͵ê$ÎmVuu‘w0[Š)ÅL)®€¢£*ÈUE/ÿ¾^pÁM›4æ××Z+3 ¹7RIäRiôùéï–²W:ƒ »è^ ®NÕhm`æúúöözÓ™¼Á æ «4ŠIEf%;‰à¢Ú ež‹ö’Fj¼À9p4Þ£5Ö?ž³"Õ¤µx,«éÓ=ï_EšBö…îZ[»ÕúÊ­Ý=k”‘~k¹+vç*g3cW¢Úš Ú® jD–h”7žèb u6†eÊEÄ+ú0/œÇ:®­©:ùŒNÁi\¦þì£h²uˆA’ÌýîFØÕT¯¸8Xù_» Tó&z’¥ÊZë9¾.kþˆÎŽ©È¸ÆäbêŠ ªúèË"5S²QòP&›3(Ž~:޶NLj*ÂÃ?†BšH £ÛðŽ0öÐ`“豪  …Zã¥>×ãún™–¿&¥qÖÆ¼ 3‘îr»Ëí"æÿú ½p} £Õ®bà”®zú · 0׬ÅÐдúhý'q’Î@-©£]² tÈn|q?-Zál·L@&pð} sÚ÷G=Äý *:¡ˆvö™Ÿ\šcëtAE! ¶Àþ¾>èpÇiÃè(O—LÚÓ4&÷‡Á?ë2¥ùTK'£Ñļ[äöiò^Aæß¦¿œèÀïn¬_þu{É7”ï ð?ª(ä.¾nˆë@ëíŠ nañ“Dä9u¹ëõK»üvùù~n·@wiMÅÃ5«b!Î`ð¯rÌ·”Õ…»ш ËÛQ‘ÖI„9¼àÜWÀ–ÜaÙ$ú>U «¤›½b˽¡SYûå6Âõ“ôÜ/ø·Ø¼óæ ÓàSÚ*o\ ";Wj¢ƒèÉÔ'„7j î„l¢È–.Žª*¤* 7oÿ½ìžX¥¢‚ëO/Ôî ãn7ŒcÚdÜ]Tµ¡Õ23[âáo„IŠlv™ÔG‰ˆeÅ™Gý¸Lª½ÖZx¥& ö€ü™c°xF7LÄ’ÿ´ÓT|b§ X>Ϧ³GæZtòÖL‘QíJ¹lŸîí™FºnÙ!;d'íμ]·°^wÀHÈvE°³ìh¢×›h·DeM@¼.l5&b’gÐa.h]xéiVnÓhàp3µ›­‚D-k>Ãù éduÂe¥82T,ÿD²îÚq\(3?^¸¡ SÄÁ$z¡Óue7…˜’šä ÏB±)‘(hŠuÇw“Zt¯vydHx£_G£ýÜí–È"ó3H=¾€åzÝÝå;Eöz13ÇäRš"&|k_ZnÀ6Ó©6ÖíW'Q/`vÊ(,(²€€¦+]¹À€”D“îÜöq²Uâ:"un„¨÷N±d↙Ïéj­Ãù"ÒØ§fI¼S^Ê\kq%ÜF<ã+0´O–‘z(Nèä6ç¬zÖœ 9O*#-T¢<«Ì»1‚beÝ›ìÈ ©?p1¦Î>sr/ž Í×KÏV•{M]-wÐ&Å>… Ý'‰äϪŠ’÷‡8˜lz„Br€Û©vªäòdvLÌz¾`Ìêñ»Ez¡Ù°’žíûÄüetÜܶ-Š–™c;æ$ff¶cffffff'ff昙bffŒËÌx+ßÚkŸu_Ûí¼wßsÕšm©45%1z½«ª,êß„xøSšò· ²S›¾Q´G™\@)`=hCžÕú¨7 LœñYùè{±ÏlY‚N½G=b:I˜ J#×W‘u: ‡uò\»ö"ŽwyÏÔzd½;ut!2g¬è§WÌÒ@ñB´ðËO$¶¾ik=%þëÊ \ ßl^›n©XWU͵8>U´ž‹Ëì‡ñzkΓ¢Ð…Yl­ç?J9wºÃ?y¯|ØH¥4ý‘ÖÉó@¹fc«)±Ž`¾iß}>:vjÓ-mù½¼¥èù)X$•[µJæJŽ‹Æ½'´æTÛ×…ˆƒsó|KfÚ% õ<ÓeÏÅðÁnõyÛ‹s®‡Èá1>Ò‡p¬çõ…Œauö¨úúSo§s²Ãm xìê\¾ˆQØŸÏBR2¶Òû¸E¦Ã.Îò«.WTd¯³½4¬²±õÝ·æ0®mF±4—t³«§XÉ«'QÎj6j¤¹ª‰ú«îع«ýaö½ÒÉÅÞ*¿¬6Î\‡KW4®áµÑ~‹ë-iòX-é´6¶UfgÚ¬ÛEç*DíMíšãæËiÇÆ|šPºLûTÁŸ½†ƒÈ“¹É¡La(ÖÁÙë"Üö¢í¬¶úeËjã'âïSºiX”£ÈÀ&©v©57X›øéAy ‹òÌêrøÚΑ¬¾•—ã|8V'„Ôñ€ ÷°•~âSÁ¾[NÛNÙgð„ߪ0´è“Úž5aöÁ sˆ7MtO¿õ®»üm–L»òœ¯B·„ÆÓdã,Þ“™|tÄËqÅÕb@¡º³XÛÀÒ1ËÝ–wyI½ºrwD%œüVMz8|Ã]äÞH5õk ¾³›¾ÆGÕ•¯gˆ°ë;mô'*eAü¢,™U—÷G~*Ÿœ iË õêækè±üL‡ªëO ÎÂûÅè ]ªˆÎ™ÌE–äÃhwa5K#ÖüÎ7“9(Qy䪕HKÉIþ±·Ž€ùRê3 ›¶ù¯±ß7`ŠVÜÇ»÷>>ÆiXðË%%z~*ÒŠã«Þñå¸zC ½§½,*ÿ™ÐÖPu6°[ês®,‚•ŽíTûêðçVô“ª~ Û>Ù™k°þdbDdN•Í·yš˜’ÿ«ütº©á3iÅÍ𪹮³²‚ú¹ NÔQ¡-i!¿ `7uõvQIÚIÉZï¿„ªkç\áÙôó©¦C˜ÜxW-Ä'ÂH£«òÄ”Èo¤²‹BFe=˜¶8,\n¶âYͽ&FªJ‹ÓeUThÆÃ%,‹Çò¼ÓXdwkÓš¦ K%* úEW‡½ø€æ©âð™ìƒeÌ^èvÜ2™Aapç™/0““Cc0AðëÉ`ÃÕ­fß§V"¡ME°yo ž:í(°BV‹Ên™fiB×Ëv3ºÐÈQØ&¯õ’~¡á¾GWq ß.ó&]°.,ÊÅžä+±*õÁ«Ä@# ü³< 朱äqëôT3•ß-½B–Ø~¹ä˜?1{8Ã<ªòàp™pŽ$0 ®P^Ò§–þ3²³1n¢¢u,›"8œWºæCŽdLyÀ&ÔÃ;eß?^®ÃТµ\²d'«×Öï·r¬Ýbªe‹, wÕç{<çóñúw ʼ„¼éÝ^-îZlQ ëÌí¡BÕxÝ*ûnfZVIÌ鬥|ÕŠlPH88ÁàÍí¯”¡±7“<Í«ù¶¥í,/[?>,®ç8Âwi›…&«ñªý ¿´4ªEZ¸–⊡‚mf!”«}˜ÌƒˆFI´D ",ȯ°*ùj~p¯Øî±Í 0ÙiVkÀß´´ÚþZ¼VÝ -=W™ÑæuäȘó™`èùýå{\[vÒá휻ü¼6Cù„[4Fƒü%Z챺2q5é8ûX´ßÚ:Ý: ¼æti¿²ýË5*Vƒkœm5óÒ’dÉÝæ*ùˆN8ákØ`÷³é©8‰Ø<~±ËÛܤÜe†8ý¢ãYq²ÍnÕŒ{fø±}h#„ /Ö:¬8ðî¯ïƒà«ÐúñH¿E#D6{(=y¿N\±÷<•WÈ¢ûR©›Íå U;E>[ÞÛ5"§o„ãþ<†s2‰’Æ#…²Ó7õ,M )´Ø·7ÓøNä±iy1„ãÒØ–ÙØÉ(sD4ËC\‰”?´rÞ™ÂK'ûgéÜ Ð’åõKý 7V%ºÁ'~,WžûY 5—»KÞ7Í5å®tS(Ž  7”œþ¼I¢‘…>¸Ìˆ7*£>©Ûzù©"Í1Zfa~ÊÆOÿ˱ŒÊ²GÈóÜ:dñã½Ekü9&‹ÝŸN´-|øhggXzãßF)¤€Å U—ù°å<‘¿—ŽFܺï ²Z;‡»çq6oîÞÇf¦í»%Ì÷"?Ã<Œ¨Î½¬eV}™ßSš—Ô:Pì*~ohZ4 ¥*çž²ØÔPSÉAQ¥Ü쫨œÖ)ÂnMÅÚ™úáö›Páû—èœ0•±Ä„[‹I¤SxfÃXð^x¦ üþÁáiG›¢íöµ£áPyÜ6¤·Lޱ‚¥î±_Ò¾ý ÝØ˜ãò€qc¨H–=ÅÅ‚2>¦&¹žÃ½ Ÿ À¼¸Ðë¢î1 =æcLÔƒ’‚>Þ\­Ù¬4¹,í«3ÕWÇî[_¯O/R¶èV÷ž‡T.¢š4ýþж٠+õƒ°¾²®\ÒqÖ³*hŽÊÀ‘gèQä@`þd•ÍM3ï÷ó-ÏüÊPPï•&WV ‘¿Ñ“RGx……¯pJ_¨à šŸ4‚tz+TÊOWOåG-ã\تMÔi­BSMqTJÕI‰ÛPü¨9çyŒFRyÓ8¢qGZñÁ÷ø4$MËy°ëaN]í¼ô»Ýß³gjo­Øì圿µ£ÚyÌØØeÆ0€)/º@˜E4œÏÊ/~²QÚŸ‚h‰åÕ{˜8•aU™° #ÊL?ÂmäÍôqˆßi¿^þ¤j1Ða\œ”ÉPjÎ8¸býDM¾ñ?åÙkñÏø gúg/\¶.Ø3%äHå‹0EÌ”PÞ/óÞœE¤Íа…ØHq=ïkâžÂ9ƒ¬îieœw*õ`C¦¾(ݾà1.Áu»m£¡ÖÛEåˆ4¤@r`›ÎŽœñPüEAyð-!D€Ì½X(E­¸ ‰ jÓqÍÐpV=×4zÞÀŸŸe¿ýÅgðûHš¼}\­ý0 v©9ÌPØvvå8vq× »~IïFÃ>%¹a—é ëô+ü{¶6ßNUÁÕ _Jܵ¸QòÀ’flo›[v àK: ç‹°·~O‰·qä7®WBÙÎÃì‹d÷7}­Â€h3Ì"¶p}©­v¢Í®§–]MÝmMÖ/ ·»Ã£3ÇÙ¢Mî?ÁÆé•¸–ެR÷]LÉ?fÖa“(Lù¿½ó±5ÁCõoÏK/W(˜Â“gOúšWÅÅ.Þ€!ºñL×P²ÀäÔ•r‘<‡5ÑUÚÌ }Bç|ÍL»s~{âù¹B›Ú­9ÿ'*1‰†Ò&ÒXΣÃ)YçUÞ†Y†J#5Ý9Ž×ñ5¿›?—f8¼è-°'/ëÛôh©Æ‹\–­VÓ;8´‹[¿oÈÝyÉ«xŸÇåÒÍÆš-ÐÍAc­ûíuçqÀ <§!Æ]É;—’†Ï~¯i%]9ÙçW›7mæ}ö‡X öÜÖ·3@ZRG4j„p®`k—.ÝÒ~Jµ^·ïÇ}e¢`˜†¿œ 9ª`©y)_$5n„”¿’ßÔÞø†kyˆz ›yAä0iýS•°./º0?+T¿UO¾ÈÙ*JSÉu:‡KúlVÂÈA+LQP¦r WÓæÐ/OÔe2fpN÷­s™jøkAã¥VŽK5V8!Ó^Érj˜¯‹2ûƒE’޾W56ÌèbŒº~Úcã’”ÉüãÊ2mµ8p†—aùÁ$q6lJ§ß~§= ›¡bÎTª³’—€9ú Öí;úPï›Bb8Ò›VšM+,•zϵÅ{• ûyÉ’±úŠóC©!ˆ€3lcœ-h[û㑈\ûÝ 5·äWÆïyXø{aI(!H‰Ñ ~ô¸)FÍÆæd™´ôÈv®Ñ†³T+?bû,sâï¿ÞÊiiAK‚›Ä\B–éøiƒÅŠ?ÏŸíßh;×;AA쫎ÆÊHdJó† Ž© ?ŽmMe^å|<~%}j=Íâ áøèê©?%÷DòDøš“žšNÓ}ò¸`í£ýLÖü¹K¿·woxX‘gÓÅ’ì=WIº„C?…Pá-c•§’Î:„KÛuæÀ–&9ý7ZÓD™ÚÞ›Lž«¬g™FÈ$ŒŽ­—fÇ ´Ü‹¥Ë€w?}0%­ÀZ±(û”… »•ÞÏQGT'ÕNF{"F¸8úœc~ŬIŠ“ :6Üï_ÉïûJŠ2òS*ÉX™aóÔ{ …eÍâ°ÖÐé|PŽ‚ã•Z×—áç°jf$†Í /“lµËÄÉ<;m?Â!-óãÓÛ˜óTè?Ÿ#LŒ};sU#©Ýœè’!¯s0ž´N_n  ³]fÃ6õQcI‡$ ZòOÈDzûöÍ]„ÕÛ@Ž(ô»\†ÙЋ£[åü$iXK1Þ×ÎV†šÆ^$<â#è|†ŸÅ#FÔþ­£FŠ‚ç¤ØçßJ§$ª™²DŸ¯²Ï³½j;-áíï;ç)űV3¨x«µ ÌŠÃí½¿]¢Õ rLÒ…‰†@°å|Û‘^EkšâT±äqä }Ÿ¢yä XToųÊó‰p6Aê9.H ¬ÜŸhvÓÌ[$²3 ¬?ꙃ®ÌË&B³l½#)¢ PfÀ0-&"ß+Ê:¢`.M1-×'ŠÉ Å Î{n 4c¼l×Á“-"5•n޳-ÀO% ¤Õ6¾~t6Jë,ƒÜŒÂA÷(©ü\à :žVuVgI¯^K_ü¡DL¾”f«2\*‚%„Ž-•š Õ´í“Ð:½= ýæ‘®i±Œ¦¨·Cªš”Ö[ºMn>ó¦%ê¯Aº;ã_Bª™¹žì–h([hp¯õãuÝ­·Q›ðW-Î%ÊÞÔoí•~\·ðŒÌ~´Ì¼ééV7ü¬f®h¤è›"˜å!Å#ø3‹ø8þÚòVNóT^%F·ã5côSŸ?@-@¡)I¹Ä7¶ßMŸòñìÛÙq2qkŠHjʹ‚­o¯3w*vѽzw ®oÓxpZ={î‚|»Uê÷‚¢š »¶NòõB«×þgônç¦R ~Çì…0dHT~£„íŃãÒú5—Rž$Π/ë .œR™¥Æz“}­n<>²¨,Ãi ˆªÖs(Fh„}R’±£,°å8pYOP4mÛÏ÷**8ˆÐe¨J%‹˜‡Öð_cL~1¨D}Ð+Áûó)2€‘ÏÖgòÁ!Vg¬ª¥v2N:<”¤·VI@i’-|W@Ø~€s¶ãÝ @Ȱ#µE›¶åù”Ïo<–’~ûLÈ„ ²6UAHµŒ›"2#4UUQ·@ÍHn( 2Ù'ê'ºÞáíîIdòúUeLhZDÙ*U–ŽjóªD¾I]6N†@F?Ä·À5„Pm’Vl„¯´zXc·žÇ¾ŽqÝ 6ÿÙš-ÀNì·aò»ðÔ ›ß¸çzsH°Î^Î~ZÁZJÍ6¤ÄOøvF0QRÏêØzØÌ@´J\Õ”û/Á:”ëØrð,Èê-Œii%(½5ß>-¹”•qúT6ÆЄ°Ždá'üøøŒ4¿˜6hM{ú€£›Úó¹ì…*0¾ÁZ/vÉ?ô¿9JŸsO­¢S®l¤䈾ë TÞ¹ìúô°ƒ¹éþÎ䪂¬àïÙžõ!¸±þh“»¸•Çöw6Ž™œ›Y8¹ú>x„³ñ2õë§Ùog‡zç[ñ­Ò{Ç.x‡¶êQ’GVU6Das,ŸØ4™ÿ™‡ÛM¼âe…Aƒë9ÙU+DºQ|É«—ƒ;›6ú˜„¾#·¶ ¾Š¯ÆÚw v©e¨´ð$ÂüÞ2Ñ”ç:R0Ä‘ÕAÜÐØ’jêcÊ3ùÖ­Ò®æÛòC“{cïl ±IÀɹŸeô=‰*ÓœfÔðòÁ ²m¬á²R×BËCNö>¡÷þgŸT# 8Ƽ{NˆûòãߥÚâîû2ré •;U,Oáø }ÎÊÒ‡¢?~ã].oû¶[£‹ÈÄ`4òK’Ç¥ÖTêÉe¥ÊQѾçÛ;бU›n‹>…®-Jå-‹¯³gÄýG~÷BõIw½("'Ú—&¬ i5Âø]OÉå‚„ž.Î\Q-L#™B}øݪ÷"X}Ùt¶àntbLM5 êXJ©¯u Ù7xt·È_ðÂ|›šÅ'È 49{4;ÅùwÏ—{ïÛ¦ ye|[û]רÚJ¬ÌôŸ^zZ´*ï¿qÃŽGÁÅTòÚ¸.g*kôðQ+ÊܧÅu¬³´¹Kúißñ¨Öö|ˆe)ÝÓ< Òr^Ö±0ŒHrs]½V|÷ê¨%c'M¯œÃ«C?Âh*Z‹««tƒ5úJÏý»Â2ÊŽo?;bÅæò)KÚc*f××u½øÔ„ˆÓ±P¶§‰‹MØ™bèaqÃV½czOtî”#µ«(0zܲáÕÅGÙ1$J•óGÎ+—Õš|˜—Æ!¤š˜Žðž¥%Es 8ŠSpÍtI³>KßéšËêl[®ÉD'Μüaå9Æp/úÛÒ" Œ$m¿)B8K7=ëšnBÖ¹ökcÃÔêGBƪ—½Š_S„ëi'¢9«!”š 2ñjàE{BDœ8y»9&R=¼·‰û·mõ*|3ÎK?ÊP5VqqŽ…Ñƒ/MÚ_9=P§ñä¡÷±å­ðQžÁ:bòµF¼Gˆ‚Özâ)O[OoKòÉáíùîô4§z©ùt¨"ëý. øä‰õ>™µËHž¯H³6þùtõÂ'caæ%›¸tÁ+|ÄwÓY¬·3Cûâ|z’AçPè¤F­ü=LU 9 G‘Z³²¤Ôœ’$‡ƒežG€ 0 §F„ÒžÐúÒòéŒ5<½íÔ§Åe ƒ9Æ LÚð€š2—Z¤2èÚÜl’-¯¶--³';ÎÜ(÷§1f53 " m~Lé‡êø\P° Ý€Óx³UyŸdšp?€R‘®z_s|•¹Vµ¹íðž,S¹ô†T+~€›‹¾çekcRîÔ‚\èY–5 Öö„P=>9lÍ·ñO?¸ '†:¥ÉÜÍXšœ`šÁ‰túçÇ~O¥Ñ^œD­=WST•jFË»gõ ewU•LŸ&d#‚œ¼ò»!¸/tª •;êþìã?¸„ßPÍ‚yÈ*Z+EßÊŒoý—šŒMí FÛ È1í¶GXù¹p, ®­üï•K®k Þ#ÕQ9¦v»×M ûøV”ž´Ü+1cµÇQ–ûG¡£$G¦ÜDˆ¯Ý§µõMP;âyÒ8ùùhQ¦ °3«Èé …QÆ©ÉÜf·•Ú À‡º{¾Ûöb1q™®F„=h@¿EowÆsÔõN¢ühïðýyßôc‰Î…Ç ”œwý3NDz@"z0+{Ž…ÐyÞò•ƒéi—ÄûºŽÇæzg/<Õ°~XÁ—iÉ#Ó÷F•?'. ~E¸)á>›Gæ›Tk–`¸vpZKôBÖæ¾Ç*ätº\pª¿Øðå3±õSƒ+B”LŽ}œÆÝ¼gx/ÎÚlîB>Ô \©À/jÚ»Š®å_¤Ù´d<#±Q#ÿýY–åJ ذŸËŸ‡ûBs²‚4­®ìß_*¹Z0ñ ›è‡÷†ôòŠdo꜋ƒ4³À‹v.óx-û.*xeäσ<.RbV{ÖÝ?É–Ã:þümÍä(ˆçcÿÇKzíÏù'ðGuXB”3:nöiHì”ËJ÷•\ø—›—{X¡ÇJÎK?ú~­[ÈÛ„~èļžý°Ä»-¸Æ°Š6.þ¤c@'j¶µç l«SÆö[;º’ìü¼ë Û(Áúû‰ P&™¾Ì§éB*÷ƒ))Û§Ðû‰|èègÅí³"uÁú°£´'׎{npw6˜¶ƒ'MMÎnb÷ભdÕÞú÷m§4l½û{é™e£Õ´–rÐk37U0^o>ýcGÎŒŸFPìjʼnä°|½©¼«œÌÙüÖ?Ø=aøC»<aé­W2g{ŽA¾ÅsÐy4Úå•rÖãð$µÔAKñá®Ð3¡þŽ«Pà/—‹ÓâJéPüìÍæ§c”h y‘Ó[úŠƒë˜»²aÔåÞc+ãéÑÛúp‡­âwÑÅZYIµØøè7ªéyÓqí_:§@MGŒ+‚á‰æE!æç–VCFgS&ÚZ”ò$qi}ÃfM*'4Õ!ŽSº3Gôy%âÚµù¶(—-‘Á]ªu»|Ä;3œÇûÜñtDÜåÇ–­îÊhHÃÀR4ØtÚ­€Ë>ë¹Ï¿¿Su¶;z{õìÎò¡EÕ4cëñC¶6sÇ ¿*gûy¼ð€ºZCiŠ(Ƀ®ÀÏýy«NßöÌ^¿vß·+Ÿ‡LvíTfÉ´X¯;8÷ùæÛ˜ÈÍß2ÆPkv³L5ÿŒ´-6#¤{}˾Äñz iô%pr;÷TØ\¶UÇ{œrÜ{÷œÛ÷ûò£ª1]l.á‹y˼孢»„/˜”‚£O Üg ö†(Kü™nè¢ô_ tÑ‚é%ÊJ9J#Pú¾åKééì©¡VbyAhÕºÎÌÃeKp,“m<4çÎl(þÌyä;)jóŠÝX­al3¢ñð!äNòüšà\§ØmüÂÕ\{]‡Q˜Òwõ˜=ð¹?˜ru 2hT>ûS–ÿnå@»$«¾¾ôëHÖ¼;-TÈ'+SÉ0ûZæ8}ˆèü»ô²ÔÞ`©Ë…☗!û“‹áˆ4[vU9 4zð#¤:2¯\^µ+”‚ê3rBpá[ì"Œ}C™yÀ‘.f qº§ß^›¶*Qá”diæ9ö¹áA|×L‰N¾Oâ q+桹ĺ˵ƒÙ)@¢NÅŒÔz„–ÇõÙ"ö³È€bà.d“£[´§:ê~$MD–ï#L/.gJ@ßÎÈ,á‘Í.gÎY?êâ0ü’o •þùˆ1V˜GŠ‹Ÿ+`ôÙ=À⌘™áÍýëÒ·Õ’CfQ‹/nÛµìCÈã×\èj¼wì²#Æèû)|k³A¿böèÇÈÇDÅÄŒƒ«…Ëá«Ù)xƒÜ½•2þ¡¸ñ&1SEÍ’ô·õË Ñ+Ó9îd_AÆÕï°+¼ÜY]•Õážtvk+Úo0ÈÂ[ðÑ=œ¶‘\’½Á é<ÕÙ®| ³±¹´¿= ¥=ì}¾ø9­åQ-ÿw¶w•íô,ÃQu™½ö1Oà¼ÀZº`Hx‹±’O> ¢’ÌîÉû„d…ùkCövE û?K/ ­Ò»þ”A?32R„t ùü¨>ÈuÛĆ•ý:È•¢Ý_yHXÅψ¢¢3Ϥ½ló¥º:œìä;Ói¥R[pA0/ñ.9„›(‚ƒïc`„fyHJ£1Àb³hЧ&søG2!©ß¨÷­UåÅöW¹»í!ôS È»ƒ¥÷~­×SʹÓ1˜5.Ù3ò½lŒù[ù4ï:¤œ•‚ƒ þ4¸þLø¶a«ÊÃîI?Ÿ7Ï÷SM+ {½Ú )S˜ÍüÝ=Ä–09¹VƒŒ—Ê2IPL:6¢>Zøx…l½ï‡ðƒ‹†Cßt;›«›o h~–©$fõf´Ðrí6”•¼àܼªƒöÙø´‡ú<¹Ã1k»[cüfqâq—I¹üÑG+`þöລ,c!ZÑŠôï#M†uc,%á–ßÑêÀ(%Ð×MùÿH“:Q…Y–5.jfj%¹ùì) ½ÇÅþ…3Ð4@ôÁ£?»à6ª©¬‰’þñ¿KýKJTãVç뵺ßÞE.£g2œgD|æ ¶Ô ÁY„ûì©‚Þ\­í-U뽿=y/~*7ØE™C,1¨è…ÓEî‘k¤,T¨0<÷æ) äÛȬ¢^nÔÛÕãÂtp±ò|ØFs……W”:m,Žï0oº¸±‘¯Ç —„:¾¤¢×,´¢µvf›xe'uàp`U(ÈÛyõLÄ¿ïF7ùma(«O&j:yªFÁÌ|F –§Æ’T”O1"¯bL£T _Ý™Œ!|w"Y†jƒñ&ˆ~»#܈õ GS¢$M`sq#J[+ëJ¼¾×l@Ê­.vøríe9ýð4_À¸oð:Y9ôþØñ\·°†Œ6mSWʃ¶æ}B‚†p&B:Œ$Æ-–Â[3Õ_ÕáØØ¾ç4j-޼¸DÜ "oýj.R6YÏÏ%Ûô½Kì =¦xÊÂÒïo%pÃ}­+õjkµsšK<±«M˜FD”æ¿í?4A®N•-‡[6ÊÜa3ßMÊ?A0Žì q ÑÕè¾U$ehÊo¾!¾<„œÊ³Ö_Ô>ëhÏ”¤¸¹9Š_MÏFüm y¨ ïš3*½V·Yo¿†l|Å)¬¯ÏG„+QAÎ {I”űÇe#¤^6„™#ÀLTÓ¶‹¿<GièÛ;Sˆ&!Õ åé(^§_pÖ&"þPñÜ*¹ëðÑ×I-("Nÿø=0†BÜrh>†¬¯Ö#ê_“‰ì„^`ÆÊðT´È‡üCc(LK``—µ!o?p‘vð^ªæ&æÑÃ…ͧh†÷JÇݹÃä¹…ky…`©¶}6( Æ–ÆéÛÎ7ÏKÝ{;ýP}é=ly"ˆµÇµF<߈˜:淋3t/v{Ç›D†˜|flJÅsfKÍMˆú™%µ 9éüúCù%3@‘pÞÃ8µ`à–¿?Y_ÇZŒšê³úJ¬Ì°« ñ1i(Ó9GLç3¶ëoÿi¼isˆ6àCŸ)éM—F͹.æÏ(Õäfrb²°7p•7JÜGføËèÈò‰Ý-#¬œãòœKƒ½×âÕ¡¤èW‰}2ó?ŠþPw.4hŽl´Ú£¥(XÎ ¥z“‡ôz]Ú“)§/w¯‡­‹š²"Ì£vv›Ìþ¦iGèìî‰4„?JÚ"ÝSf î·I½ü~^ü¬;H(BU¬ó¿ªh ®6¸9r~µ…Ðøƒ"Ë›Ni ‰¬Ê»?) ªä¹µÃ'¬=hUáösj%é°‘ÝæXù aë TÌ ·<òð-• ¼ Å‹iý¥³oÉÞPA@ ¨©0ªà‹ÂË ×\+°\ö$U%›Ø ÿžlëÆpu6Å’WÕGåoK¾Ýº[ÕGî^O»|ðõŒ7/wÞïžÝLqÙ-á’Ý] §žï®Ý9`—aiG*ò~PPZU~FËÂÚLWp…$‰ˆ¼¨‡%vé+ã³öb§¿t;~øV[û“ù[ Ù¨ØåO÷j_7v-ݼ4& 2`}ŸD0?`ÓP]”²ŸÒ¤Yµß ÙxÕ4âRôH×øƒ—¨QêʹËë0^ÿ¢ÏM;SOR”„þ¸W„OA‹.TÍ–­ºZ•'&Ö;­Ãï“QPìïï7vhÓ-=”'*Îb¬¾ÆŠW.Ýïmžïðõ>žcèUG_E…ǃ"®¬ËÃ!1PM×û]nsØ …=•P†s !ñ¡¹ÉK:_NùÉ=½|fÈT¨4;µËK:Ž¿f&bd,fô$rÖì<ëøèÌ–€Ã+\Êr|Á`Åâ?XüLü9ÑÝ'õô+0ö™¢cô^‹ÛüfGò›*Æ?Á"|òs§°Er´-Y@ᦠv|æédÌD ž( L´åK]ˆ>FPÖ¢êX€A˜hÐ^ñ &Ü6Œ ›H&®§UÞ”Œ3"{‹žõ2ÌœJæ{Ó™Ê\l«.½J"©Âd‰‘–¨tŽ ˆåœÄ ªÿ8Öæº®€`†²ÈÈôW=;5澤€F¸ì–=þ¶ïÅGJ`õšzˆåÚùöbHˆ^ýØîýÔ(¸¾³tï6fRØüÀO£ÜÓb”#@§/²B?aHªw×\•-÷„Ç&;§Èªá Ïj6e'2¹š ÓuCŒm‘’áÜ›3¤øä‹¹ëÛyCØÑµ¥®µ…IýÓü2”Jü¡CŽêùú¥ù¦þt”è5ç,‰ê ,ûÖO—û¹·žW—¼NÂÇò,Éh@q}(óìÅßèßw«h=Ÿd¤O6S´…B®ø8’#›Oä¸Ý‰ÓM•^m€°ýÔòà4¢XŒê_ÑÝ Ê®:§¸. eøYið-¡ë¼%sÏŒíýpé„Vîqiƒð…¨û¿ë b0¢¯9»exï£C¦«§ÆáÀ}3c@LøüCkëÙt3*.ÚdOyƒ£ÚWÂE×îì‡K>¾ª’“ ÎQÁß™ä7xâò')èߊ*aêéÚV3­›ç ÅAÞÖ*ÓãýÇ9g§Àµ4L[a(d$Ve[. ܯ(ùH­jy<’Î…&†|,ìýaí7¶•¼ðuàøü¹¸-wþçÞ™#žË/øßôÁß· ^·–¢ƒm>Bê`îÀ ‡V%ËQó Pœ==ª—.R@=ýýÆÛ£Ú³þ—ð@ÏÏMàŒ¬{óÇ' ŠÃJw§³) ¶b’“£Ýå¬ãÉz¶8«ºo˜h0øólðŒŸÖ÷×8<ã^*>’þ±åà͉¤9Cãe© ÿ:ds-0¨jEóàß Ï³¹:öT‰ëÓòvùDºí=çgð©ž=ãgàß`Kh[”ÁÑœî_ËËXâlãq•È w4­ÞèËg“Ä ÈHD kÊüñ¡îÊm×ç?Ð…GÜðGß}i²Xþªjn ÅtJ©@¹¿¯r=g ¡=^–pN5 †Œvý\3cXŠSљ޿͖dCÈtsh88{‘¤Rˆbh;ŸÁ#³»"lïŒúë|zD¼Å%ÊàZ$lò‰U¿~E»-J<~jV«ö•CÓh2ö9xE% „æW°¾=ñ8Hö»ˆtxRW5vUbé¤ÑåEƒá)­¶b¼Ñ{ámÜð«fŒ/±Û[ÈÆç ?$^ÇÜ>èÞÞ}Ú^pmH©…óHÛåŒÜ¨Ñ椫Œ¾¦ }/0¦RZœ÷ª.Í@æ’Q›"ç&Œ'€?¶Õý5>¼÷•~àÈÚD.H~&1”‚€Ï„-:þ'zúâübÍ™íÇÈf#õˆñZæ´j>ílÆÛGµ††šUíÐg ÖYËÎ%qîòòâJôöpuÈÃå;Áí¸©„´N>gZT0\8§PÇ­›Uhý_åÁö—ìU•Ô@ôÞ‡ Ö€¯6¨¼3йž´Ö‡>Ÿü•¦âïÍ_(qBºVt¥|ûÌÏ9zxm³ªMDI°ûÁf+½>W«Ëñ³¯2hwhB ÊÍê\­’N?UHá&U–Ç+&jÃöü¦”a‡Sƒ‘Aåoó…u®4åà[þvœd§— Q(ØS'u; !»<çR‘@öÕ™Žè(ÐQIt)Η5»ð¹Íÿª|Ò.û.O®ž|–/ò[…¦ z-œ'\Cçºþšvœ/–R_¦‘þ|2±þL)) ]@)ˆd&×sÄÖM˲£}½…¶5%7þ½rˆ~u5¤Yø3§,|%¼EvD\”1N„æe©‘2*¬°0KÉáˆZ a9–võ2æòhÃbõ÷·†œ ~£Úg yjÖŸ?~˜žîó8•ïS¤ýÏ9à¯K»,øNãÃmª^PMÛ¨H(v”„%iÝÝ7][[ÝN“þâáeÖIàM½˜&Vï¼áÃQZ¢—ã_êb|Ì8SÙ"‰bÞ¯›Þب¯%¢|[ì¥/{9Q¢%J0¾oÙ s§<ŽîLí§a7)‹…J«ÓžKÛùF›ß³gnƒµK%÷T¦Çü_‡+tr)Mýë^Z„Ó±Ù6«ù£ó…ÅZ6ìhÒ~‰šKGœˆ@9¾}»½&âYË´µuÕòJ½jÁ¿ñgMÚÐSãƒË#)(üF@”Wèû³êÍŠÛÊNý ¾$0‘€eU¶— Ìü0r:s«víªwú|®l®j#Ls¥®[º9’n¨TnšÙ½ÿeañÓa‘PU¥¹ëŽ ìúoð9Ér¼¶ ÂÜaÔÏqDL°³4B—t–ÈšWö6 %žI¿J‚ì¢öEgpްÜy³P©cdúšÉßööfS7» N„*¿x˜`;K -J Û”˜`\;\nš«ÕŽØíÇ%§I¤Ð· ±¿báÅi‰/_n8kÎH{}-Ÿ´~ØÚ¸`I’5ݵ£(k¥=)ˆ'þНJoøÅa¸’…ý>ÖÂâ<$Î̲ì°!uñ°Pè¡ñø+]ûÛ­àÕ;7¤ª A¼d T¥ÿõ³J(µ·Š3yvPòñÄŒ¿jjYnOÏë°¯$ Vÿ43ÎÛ„“"ú7ó„Þ>6Ú·»$ïhÎt€© «¬ †dãÛbʘåÓí·–µ,„y8~£-òö>×ÍYz¼àc?«ãâÔ;;$$Ó¿iÈÀ(|r<õ{ob³ë™ÝGügµ”Q[#/ðÐб# •. :`‡7/Kçõ*M¶„B R‰df‡¶_ä»úýá÷¦)¨}mäíeÒ§Gz»¾fæ³Ü¥µþ€£ ª­Ž·-IN¬ÉŽèмÃ3Öü¨YL*ìÅ…ßh›Ÿçû’ãŽþl†¯U»gÒÃÓ 1œÆÑý56µÎ˜œk"cvsGeq¾…ÞúÏO¿?Å+kÐxM$ìhSó B¿a±ÞJÿQYˆû‡[©cÎRøE†ø»S»ëy¬ªÃ,z„¥ j ÆðûÜ*‹Ÿñ¢†u´ŸoW£‰SGcÀît}^\2M¨ŸÅËuOÎ=É{±–ÿüÄï|P+K ñ¶j_ÏÅ¡c_±ÝºØòíÜð}Ú¿› ÙϬLõ,,XNSÖa†B?øXób_8•@çd#öP×B˜©}1ÞKÌ–Y]AŠ¿Ê­æE]œ²®K³þvxöåì=9n™†Ó^§"©`jÊ¡oH ±Ö%OUgwÿê™*O&fÜ%«„ð “P)˜,ä(Ú+UgHP9‹Ð×$§l/ºú}AµäWòxŒõÀÎ_^¬Ô#¶þÕ(2ÇéŠmméážc‡¯¶(éí\˜œNß=ƒ;ŽA¸Î‰Q•^üŽGüÐÜÁý5‚ÜÒYJÛ‰tºä‚Õ”ýÆçí“A_ÀÌ•'­±J7Ó8oP2elʲQú½žê£ÆÚR1òPÂx[ËtцWÉùÖ7€ Qz:0ÜËëFþ}M[25E.–àñ>ô<Ê·Ç6e€‚t,¸£j˜N;'£Ñ ÜÔñù"ç4¬¡y<µ"E¯iÿøÕ Aƒ¹û>.üEª—áÚèÝŸŒZwΊYìeç¢L=[¶]øÍÅÖÆŸ“9ÛŠ‰üÅŽ:©„ÏidP‘Â?‡n%ÑÃâ?ËUaxÅù¹«G‹KÚÙ-9Ë< «ÇI™ºÖü™í…Ÿ¦~ŸÈÔå5<íŸÿÐQ&RÎxߥŒæ±uáå<=/Ô†—3ãöo”­Jþ˜gƒ¦ ‡±}C†á­ i\ü•ŸD·2×2WÒ`?©ô¡Zpc4E²R]2ˆÀá]-ç—Ibg …öü ÏòÁÜøÜã¼ } !ŽF©bÜI­•¯ÀâOºÖ§oÌQb m)¨Ü{†r†õÌ™ƒ…OêE#1 î÷‹j¡\UMNB„xN\îœN ·GR½˜VbÈ{çD³É¬pƒÇ ñ2ƒ”c@Áƒ‰/Ô.ùUßb«;r¶ÞP#zl×”]íÏÿI¿*’qÄKgÉW¡¯ XDáçɸW{L"¡E(™ê¥—¶¦êêC5½‘Mâ$x穾`a½½NñZ×ëMªÄx`Ð gvw¡Zátð5¼:÷[㳊Á#„ÌeÂe}0•ª¤ÓŠ Oæ%æþæÓ¡>·EeÃuˆTˆË{IkËÚ´g~®é¯Rþ X"TylnW²20¯~;µa±º+3\ì(Ê*Òu`2Qlü(”„RKjÛžØ4$¿0¸y+ ‚Ò,zÂҫдu —) ¬XDœ&6î°îðÃîÍsuV5Kƒ¾•ë¹.NÍh“ÏŒ6’ ¿]Ö|Í­ónû‚ÃÞ·ßMUÂð«pý'—€ÑOìÙM»nóºÞ(|â]6ÉÁrØò<ÈÙ/:Z×Lpæ`'Ö½½§Õ[+ÙgKV|ÑÝs•HGKßA":=NQØ—Ÿ#0•ÄœÂ4ÆÔƺt™¦þ§dŠÖäB¯©|‚ë«PÛV½·¯õç'¾N÷écz¿_b…@?øËœM]½@Ù~0ÈByhe9î_Ÿ¡’8´š2».Öª›í¶lŸ¼ØèWÐ6«(±V!¦žU­]U¡×|¥úóàÈy¡`· ¿ÿàðæÀ¿Ê²Ù³ãª3 Óph?[./žÓê *ħn Çw‰±¶Ÿö”í„åzr&bææŒ+´P7/óË÷  ,­…œæú© =Œ:UßsÝëAÞz pºt™ÅrlmôR)hHƒ£ê`c × ÎVPñc›<,‹ö‚+IR’.'i†åÆÒ((µ…‹eƒ|/G÷–Ó{œÓl¼âl¢¨(5ðÓöS§&öŽœD<œÈ¡T (âӇׯÑÅÙÎ߸p´­ùYµGiît yJ“Køwá¸ÊwøÅþx1{›>iæ]ê‡z,t]é_^0й“Vˆe4a¦—ÉïË„:) Ypúå,þû²¥Æ#Þ©º,:Êt}d£ ýS8ç„TµÁäó$"¡¹U‘낳‹»`ÿ=¼÷Tñ?@„ÇKGUb ±ú0°OMa`œ4C]É넦!Ú¶Ñy~ÙPa‡é¢{ߣÃÛ9gLÂùXV_Tidfõ<+À#ª=Y9ôèØgÛ©jHCÚO#ñ§2Þ%Bw÷OMåÖ Lƒ~ä>™ÓgÙõmÏFVÌ}Yf g}v”å‡Xr^]Àýä™Bž»kû’4ý$1?š¯¬R“ªmOïŒ&9",Xg;]&z*§„Blmá3ÇŒ¸¢¬Â;§;~0–±ûÑì6 n{Ê`/¯Pů"{ø}øÍ.ÖqÆ -iž øKØ+ëá\fÚ=ç!¬H8º/€ÅuCyùzÿšìÕu“Ò|•Ìg‚¯xÎÓE÷ Q^™©¸Õü äoÜÁ`“² ÒÁá÷ƒ"mYúáW)F?k\Ü×|~ó^yºJøNÄ ¦0WZE^}žº®¹ñ˳lˆŽè4ÂÒxWR]1ôÊ¢Žðë ¨c ,Œâ',o²c‘œ^÷|Írg2…{š€í£»(Y³Inr‘•â³ÿyÜòmÃ+ˆ›†ÇNèVÐ0ƒ$}ñ*ÚByæ¹ä¾:ÛÖìñ¯³½,`‡ÄÁ`BS)4¿ ^cð£‰*r6›œ˜§µ¸8 ¿Z'Äv-ÓfÎ’>}c]¨ ˆqQÃNO\&òÓp=ÙÊ©rid*!û#„ûRö í|mlc’íM:á<˜Uñçñc’ìüLðZ\±¬û¢õý:Kµ–Z1ùôxïëãÕ®³UmÇ·i»”A" ¯ûž.e¬M´ !€‚&Æh@hgheöHíK 5ߨ„à,4Äy[ÓDüæn1;$Fþ³Pã&Ì;%Ç¿Éki°Õó‰ÁÏÑàŽéň»,<ˆtt:訸ª =´leNA¶®ºx¢ŒÇ‘ÏÏ œŒ¯ëÇVÂÔMMó0@ÿ•Xŧ$yœîŸfÔ.ÁÏ•!`ó°H¶4CQª¥F>žà‘, Àï1ù I¸ÿêöEÅ€ÿW¨±œƒ5®ëĶüœ±ÒÅ&RD¶—ô†xdB%Úm±àËoÁ.I+DáQ AÖ"Ì“%ã–HKvZª¢w¨ O~ÚJ\~eV¡ða9Ò¸j½H‘^ÿÚ¡ßúšƒ’5@ƒ¤nêLi;ÿ“†O/³u59þ;ØFùJÎàBqKcx˼yuo‹ Géô¬g«Ñ¥“!ˆwŸŠ˜D8Çû¤tW²pw¾usk/÷ŠÏÿr¸„„•·ÊŒ•“sÉ:Ï£Pæ*:7°IëÌgèv%uö·V /ä«=€Y…ðÈó´Ÿþ&À:œÛuטŸÝÙ6á2F5˜Ý¨ÒFÁ¤„) }&ìrA‚ŠÛ§®ýIî"•a†ñÇϸ™üÅ<^Åæ“„ šµp™8Œ~[W´ãã/Àyã½Û!f±ÆyÁÝÃg¼+–CL‚PôÍO4tþñ9‚6à“$G\š|G¿å6\‹±§þ`i/­0¬§í†írè.¶ø†ÑÆFè“Nç—ýo%8 |ÿ ;LБ›‰øKêág`K8V‘:ù ù¥GÆ  J*Òã8Û¥e]:Ê3Øù™[Á–Uî ÊÛ½9ן£Nh0·ÛGÙÏŽS˜8¾tß°Ûª+¢ ºb¹t³|hI$Û¶º0Êq€Q r¾Š{íH hâkXão£žj΀ÿ­b7ä¯%+¦BAîÍé¦g~òçݶ¡ª³þ]¢i®ì{ê6"²Šß 'jE·y7 }&‰íá Z$Dd…«õ¶x—ÈÀëâFõ„¡ê,NÈ)ßþG˜¼¬üxÐX$ qaEŒ ´ úQªúi& #Ô†&¥Þ¶áìÅ5œ€Oý Ÿ>°UËÔuþ¯'pÏfñ8®G ÎЪRfþþÒ»‚&-Ó4Ù‘Æ6»®?–WÐHRÕùû{ef½Ë\Ö¶l?=J–í]œÿ†—u*N¿@‚uÚú2 ÿ 5Ë7‹óIJl _}ÿ~™ y¢8&‡èDg?s¬Ô§ëmå «qH•§|›Å™¬M²ß$щºøî)Çæf‘±‰§im¢émeQeãN盄ÎÍ´÷ãc^g©ø0·‰dŽ^ÆF»ŽˆðžØJL)yYþÈËËKµ^WÓG#ª‹ à Ú3·ÂÍô«¨p~»-»ÖI©‡uhþÈs™­_ƒÃ?ûw_¼åÖ¶šç•nô#kY*üþÔÖ{¯]{ïRy1¡¿Y>¨]é\V?@Ô¿vÚ¥´…l±’ÛùIù—ÏŸ1ZŸ¶D/24ñ^¦Ï6¡¡“ÊJïæ&4<±±pû~3 YÑÅæ>Cóì6ŒMo3Ÿ¡&lY&ŠésÔ={ájЮ{Mn½%Èä3~LM?¹¾LºÊÒ”–¯*}žÁ“C|þì°æ¿RÜÀ[“·!ËÙúhÜÒ»àpü5´ÌN-‰i”1TÄå¦×íí^k8{jïe^g3[(™@(Éúüúîé×Â3nÛþaå÷è+·¾µÙ¾_Àèú`«¦·@ÃÃ8lÐL£À† ]«³Êî×ÚÒè(¼$uêMNŒ¾Ýùb“ã…˜AåÜI)ìÍ¿ûTrò rJlßÑ?Z\/`e©&N0.îÝhO){»Oï¢éeF´÷‡oª¼ÔÜèÞy«¿Gf=ßÛÞÍ|©æÈâ}êîÁ3R:¬M`lê*[À~9¼Ë9¨a À&vòÔD" ù;p$¬¶ìC«Ç'{˜|z¿6ä"¤}«ø]‰ë vÜX…=ù냦P2…™ÑÙö BsÃÐò¼‡µˆ‡vŒŠW…ðÐßW7µ/‰gø3iÕP¼#Ýä¸Ñ¤Kb…¬IMAtVŸ9’F>Í©§uË çºÚx¿=æ¿^?è2dì*{ ’°ûTÀjÆ”ón2~­.>¼`üÌŒ?bDH¸”Pz³Ü¾Ö>c]$2ϸHôS[ŠlÒ¨óîûaíŽ óæ…FÒá­!âØ¶N]l,tiÿ2¿M­·/Y Ï:^6ã½½WKw7ÖDÿ…Úfç–È̦Q‰±v>׉9\©´ÇŽô¡Qvl5ag''!xw=F@Á¦7w¦ðÍûã)ÅVüê»ù@½ÇCóÃé €À3Ýèäè‰gPo-‹ëjQÕ{€ƒ ¯ŒsVüàëvhëîj–?už¹Ô„Èån'&²¹™î 4á•ô]ⱓý}ììùroùŸÏ`¸u”í²Ph‚Ö¨¹eYeS¦=¡€˜jc¸ø°ÉÝ]¬GîÑü611ñrú Ä~Ò#š¨óöìÕúÑypFV.ݨ$ã¾üm àãô.!;ÜåáæEþ\ôäyÆäQ±q[Åz]³ò,ºÙåóÕçœgºü·ïèa±>õ§\§\³‡µ³»wµ4r'¦§ô1,1dÞKæÝÔÉdÉŒþ„žvÂÙ7Ëe˜>NYÜÉÚïÕu¦¼U Žž“ËÛ ÝÏ}ÊNR_z8Rj±ÜÓ/Eƒánã%?IȤ™’=ùçÄL-{-t f5 Š.cj=¢Ó=4Y#®ú³[G4¡0[Ž|œv2…:1:ŽórÀ¬r1†kfõøÈkõ¬•c4Y5RéÆ{ÝQke*…ÀÔÕ3Õ$C€½ÈE†ÜF·74òD,DݨWöb ¦@/†uHýÊz³¬°Ì¨Úa ¨¡[ÇŽàÆôÿ6LD£¾Ðc›é~õ0OÕá*×fQ'¯¡Ìv¤©màN•øH¢ó°æë襫4Õpµœ, ¨ÞZ^,)R¨Ìe²°³r•3£M›5Ý¢÷á }ÁÒC÷دÍ<š¡ŽÇ¾Sš’¡ž Uyr†r›ž!QÒ÷ºe]ì|Oü¬ø¥qíË Ò¼µy{v]"uKöx•‰Ö – }­îøä¦ªù»€ö qxÁÙÖbÉ.2ÿ[¦¬‡×h³±¥-tnÁà_ ’ƒs{£QQmnóN–çŠMýÒíÚφôñïƒg„Éã–¬ˆ:ìðïÖ—R0õIŸu !¿˜åµ±‘Ê›HOkRÄE=¬±OË~bu»áÍð^ŒU‰ÖöWE¡ñ¡Ä*à•˜Êdú5Õòúå%¬n¶%—êUU.ÞŽNÕMÛf7“¾îÛ§‡jW ¾ï¹ð`ôÉS¸1=„§ ß à4Ò8)¼µ9>‰¤ˆ­3Ar¤€g1«(Ö'Ú1`yjr$°b.Úõ[ªaÐÍmö+ªkØmzeÔ÷YŒ5Ê2‹3؇£˜YNð¢Â®$…Ã*€ÚÃÇ-d·€x>,30œ÷E+SÚO$ç) !¬¤Ø¯H3m•U4ËêíóðQ;×,ðTÕm…˧Zš¿ôSâ“Êhž£î«H}¹¸Ú1/g¶Ô:VïÔß»•¯ÛYeÐ'8¥é øÔÏAnî]¤\õ;ö-Œªç²Ã3rì‹×•£{Æê<—5T†ÞŸj!;1¾vÃÅòQÊ•›2f/ß4/ÜU†é†‚?¬¹ø¸ ~ÙBXÙG ?½8W?àx¼{BÈš=GÍ×Sûü†¾Ôصñù}r5ùzk,—ÄD@¤/á`aÚçÔÐûž›Z@âO<£¥4êÍÍ®ö,G…X™aÒ‚}o¤z+`Æ0|™„§ŒOž˜VÍvÆP3äxþƒ Ñ\=û;ˆ+\ò„Ó£*ÇÙl–ôµÇì”Ñ#-èk*“&vµÀ¿ÛçlhÅì»×~Ï6¶cœºêòù°# Æ¡MÓlITH‰øð˜‰Ë£Ç»Ö¶mòUüEº·S'ú¢FDºý£Ú?òÜÃÑÑmI&RØæÂ€(Y®\(øtµ%¶èøÐg†¿Çg´wŸ–4L^ŠÏ¡ˆYpÈšg\|ÈÀIW¡æò/hûÜôÚtv¤e8S yjWÓçã óC´TcûÇ÷ø !³c rI.½ÿ–æX=×ÇímÚ Ž«Þ>x#Ü.¨@=³f4_dá²ê ë¬}Œl”idÒ÷B¢ѧ{áÿÂ:£ð?„»\阅Y÷µ‡/¸`Ouïqÿü?‡„tùUXÑ·Wѯ'S.•…a3dãQ6Xñ¥iÉþãÍC®-™JgwêúzInÊÇû+®[¬"¿K’-š=(iÒVõ¢IýtàQÓ·w2.Ü’„™×žÖîèÙ:?Ïð­U>‹ší¸«ÌÊvOÈËÍ‹áì¯Jø¼P“ù@oU0)ýðW ý"&$2 ±»¿Vk1ùò0àà9 ¾ý/–túßð¾¿&,”Ž·àß_Ðð çuñ¶Í+,^N³EÔÂá$t3kœvb®kç,Ñ=stÛÁsëºÑ쨒 ¶µÎ‰y¥pr¾3gëmf]Iæøj]âü¨ªËuéG¥‹íÜ7 ô’©Õ³K¼d®÷â d>]IBB¢‹÷χÃ$L·ë]9¾ÐÐ×]ß¿à,χºÝ ›$—›öÍ“ §%6+·Uç’Å(ÄKGíGs˜¯Š@ì` )N>üÒï„xü6ßçtû[˜õÚé¥\·Þ}ZcÛw¸âÔC;|õèüW3Ö“—l3"ª·Ç¨!€“e‡ƒ^¾Bùõ+H]È;ÇÓD'_óº…"ôLO+.žt\žô0; \é«~7¼ €ó+G»qæ„ÎÇÍ<²Sš·4Œé°ø*ÔüžßäºýÜÝ)>àÏðgßÇçî‹iñÕBÂNßp¸ý³d3®ëu-½Î]Û®^œY_îªyÚ4÷i˜ö?êõo`øéTïÍõ‘£zx?>Ç¿rèAôŸµñßWÕ>è¬T,yÃîSvéWé¸ D,a¦ShÆ&W»Ç4ËÒOºÞ,Ö`€ñPŸ“ùR`áÓˆ{Ñ'¿q¶òÃu7ºšpâ[„dÖ¸b=OTµ•¶eÍ& ¢ ãEÛ1'·Ï a´g®í¦soQEUÕwÍ—gNý`wŽòËFÍJÕ=w øvßn“¡µ¥%V$#걎«àÿ[;¹Ð‡pkK'ẙU­]ÄüY©~ž:I?ó÷ÂImBb›zóø»Žúûjx[èÑvÍ?Ïíï<»¿6ïOåÐÑEÓ¿ß6¶=¶ÄŽõío¤ŒùËû˜º¥W_ÂX,ô7óœûøÃÏ\ÐM^Ia;¾ŒL¤ý^^¯»u»½ƒh’_Ž»1DâÞ^Þw.†<Þ+‡™üÖy|w7N?îž ¼­Û°6Ó>TpæÊýAÄßÙŽTñ¾ëðöôøÚ]aòT«FO¯7j·G_aèð$º'K§×éáru.(,ëÇ5r}Þ>µÅêÙy9µ1ÁU²õ–, ¤shœÃ³ªo›p kŠ`ηѸ {í—ºž›4,2j¥dÚ]Tm”ŠÁ¦XÈòbcˆêbñññºæÏv¶ß®ZCÑǸ8´ué.övËՈ܈VÒÐSˆ™FÜ®í¬Nº|lê-”£ÏùÍv÷±L­Lpcî¶CWn*–øtµ €¾$0ò>§Þ»€Ü,µˆ±Å{"µ aCˆŠø±íºØö¿—ª¶¯—ÝøçÑnוÇÐk|»NnQw‘ë»÷^Û~8ÓJÊœÉQ«>.ÞR3 ’:íùFˆèËK ¾ÈùÇûkó‘Wuœ!}—ÏUÑðùÅ>>==–C?B‡o>œý<wß ¸ƒ/ [ºC3L¿œ‰]®'˜}{ø!üÁŸâ¸çýa„ÈOTgW÷Úþ*º÷´uñqýà…ÊÁ“-[.ÒåN«ØÁ¹¾ÑgHXý~˜òƒ$Ùy­ºÑ¡*¾Í˜c,Oãµ"Âáèòú†Xõ„=Ùö†oøüp|s²Ã^­;²³ßý~ßüñüþ÷ïÜ¡BuåÍP߯Õ{þ1ôèùIiÇØVAùWt· ïb•À}1óÚêÅ];+žrÒ·÷\+úÕèÉZ·©ó=k;gp~)„ÖØ$qÂQ¯Ë§î="¢º”ÞÚ’Ww1tiéc†NœìÀMþÅ,øœZ²¶J¾:¾Ã¯¶ÍZ•ª~(ú40ú Ný:ÚÚÜ]ãôûI4XÕ˜&ê[[¶~¯kwWïô«2Kc1އ¹m§§§eÞéfMΕýÇÆÇð[;¶5=m0cé˹݈‹”‘b7àòE³›oT€wtbìã¡î‘o£ëïœîñz»º9>9U¿Ç×,‘OQn3r.ødï4šùöt-eŒ±év?Ul’¿¿@Æþ’¢?j{t5Š>­y³Uw:˜¾-r4xIñ댡BøI³®·g¿eÐC[â~‰ÂIzTÓ8‡N”‡=ÛŽ‚­îÓUý”‡=ˆî}?)Ù73÷)§3:ãÝE;?!C hìñ›K«^óxÈ<8€ÀÑË«]³Òµ]Gß‹¯‘–¥ú|^˜,U°Øº$2£v¨Àø¿$Ý/XšØü“n–‰óÌ¿õ%°ò·¾ÿ©ã*åìo¥ÄþSÕu«ZÈõo1ÿSŒÿ›Áç+os:˜!; xô{Éÿ,M:íêtÜ…M®|x1«˜_Ì(_Í-þ.¶o…®?Ït?öM„€Øa…‡´ØœÞo¬¹]øùòÅMZìò½y¤{-tm8£ûH<ˈügV©Š˜‚˜×?®©g›-m~8‹ìŽÏ‡aÿÚçEˆõϾ{)ñû/ÛYu\§Õ£]áù|&+%%Åu“|–­/åzQÿfcpË8=;;k ̬{™˜bÿQ‰áÂuìv0f+í| º´º¾SöêúÚ-q-TÆ!é¿ÇÛj™>\ŸžÐ”y¾Ü…d rUo¾z+M¬±ã6“Í|[³­,Ys2v»Éz\ØHßà[÷v¿9ˆò&^XZ¬Š™WŇ]VåbÙJ'gÄæúº²^ÊØ{0»ÝÖú«÷Í0¯‰ ¢ ÃÉ+ú,ûÐcéĤ=ÚßV;¨*’‡—¬fON-­TB®kæšìë6ȧëô6@a%ÿ;£eãŠKt%Ÿi4Íyw3‘©°CÇ·28a£ºVúìu_õNSð¡‡ÝEÞÎUÕQv*ð$êû¦),õ乃U[QèE©ÖòÞ8ÜZ_ôíÝ5È žÉ]°ŽV½Êr(-ðøŸV=7=Û&7O°¹y¢ßý þ°¥ŸÑESÓ»xÜ5W/ýZ¬®´ò¨¢ã±j½ù¾86’vvN¿ô´ɧ*òÓF3éÓ­öûúõõWN’Þ8Ðï_ï4Ú]qÍt½4«åüÞV›’ŸyâØW°@q ¯­l¬Šñø©¦©ozL:óêUsª"K”ßtø]XŠ ìûöU8£@seS.çskÔò²b§o,ø<-ÕÝvYV®úÖ·{.VN¾7ïŒ]¨Êò˜é»Ä,:u¹žÓ¦Xn;Ò¯~ûèf°ç’v ŒnúMÛæ5›æµ¹cãóÒ:¾3ú½d¾NÌ¿ÚÌøRú¢aÃõ1v~Þ‰Cåû*1P¼SN•‰7.  ¥ Ñ[U'6GEìŸjt•­}]¾æ¸ù»“Ùnä®ÉØMSSs5­ÙørMÂoÒûI‘ÿ‰õ¿ðq—±ô·Àõ,Û»™·®/6°ÆDæ0Àéoz/ç,¦EßÑc?¼šþö¦¬ÓïãSuí­AÿÚFMþŒþ9~ÈË 0c@)r*G¯b`þø¹F²‰Æ¢s –ìïöȹ ÇTÝ™3ç_@¾6˜”™ØDO#%ä–…Ý x¬ëFÖ®4 –‹ËL£!õxL}×nšëx‡®eÁîå©*C4v®2Ư1> µ ¤¢v—S3CS°Áž1~PôP·]B/«çy†Åð¹¬ø”3WSç¥Ê…Ð]D: hï“:n3•— ;pSYON4 þI‡G” 0XÕŒ/§¢syØ,=ê#h‡è·0@Z±œÄÜåí¸[l;ôm/Ú=9"J?«ÂÑi†PÎõÎSN z|}C(·[¸¿­ˆî±—þûtZ®9ˆîrqAwâ:§Ÿ…q÷ÀJÁ}!kç³b¯E7ÙCóo^èl(@^VvϳMœ{d»Užï×T%«É¨AÌÃ…jÕéñ  UürŠVÞܹ-µþ´r"‹Øú |'ã6&hÿvbQ!uIyqñjÅþDüûô´íÌ/(ó ƒÏ&ç‰Ý*Z¾!ÁÛå2‘Z™¸Ð²›ÿ}‰®èÌV÷ÜBjœ  ©^79u in[¹»n+Äi^×îÙjFG9æñDK† P:<_l]æ©oRó©@àYŽezA!Ÿno 0ò˜;牵¡½lNåv>ž£Å²¢Óƒ†åø3ËÙÓåQì³ÄMXŽ x(Y»ã†'q §v*>@Ñ”÷ˆeK±ŽNY®~Ñ©ZsXÈö—ªX7hòw/ÞÕ¼>TÆ@±Çu]"ÙÃÛŸJ…PS™þä§Ÿùÿ5;ò‰&Ùÿ"ùv¾3±ÿ•€¡ÝZ+úFuºô*XÀôòKùþÂrAOî¨ûÙÅKû¡G•MÀ!hÒôUÄ'1Wöæ'76(ê„„in`†ÿq:¢¿¥ô&®n2}èL€Üº`Ò¥ÌÓÅýÅ hÙ`úJ„ÓÆC;33 ¤¡f¯ì÷ÂÝA¿Y}CFyùØ[y£‰Û]¯|Fé´õÂ{‚ô'zåt¯âã«uUv@Bs[ãÃ)›“ sñ~dî•=åz3ÆnOž‰ö,~â7S·¶²2¶ô51½¿ùf˜—ÈܨV­‰Ô~ÈH=pOµ«>8ª«•QƒXòÔi°ŒbÀPíÖvËÍùþ0ÿ@C)c›ïp¤RÜÏ? iH)HHn&¹‘5‰ :ÿöˆ9HØHÀT4Ô$ò˜øŽ­¶a@ee:‰(µØj0ºÂ^!5¿ÒÌE÷ÏM/Ðü\à[8°‰¼c`zž“Z*2‚ðoI5áÓ$_„ωù‘ÆUDVt¦‹ë}p§ÏŠ\ñ;–-‹<…Aên¢˜sÍ€fS<ʼn·E×¢­ÌPƸ;Ù¬S:8$—ÅÔ7?·ìŠäĤWtL|Ì! øÎÁ批À„ÏJ®Õ%Ae?ª5K\ÌÛ¬©8´4v•nÚ%³{Ça Ä} Nå—ŽÛ]E ªF÷Í´ «ícÊlþDСDó1ÈÊÿ :ÿuü+ª£Lr #µV¸ÿyؽZnlKéÓ¤Áú‡±îCÞ®-ÏôåM¸ï,Ò7n¸—šþAˆŒMpßk&q{Æ¿,¸&176vœë€ÂøÃ)L/ù&6ÂßKyœ·@ÑÙ÷?fè‹7˦=¼¨òزjù©kDØÞ\h3/Ò!êm¬¢ýSºSˆvŽS±:Å4£ ÄFÔ>jK¾}°æô¤~RS/£²”&?ì7![éDýÌáÿK½OqhOÆ>§å±ÎëAÜæoGr2 .ìY•†Wó^éìØó­ê<Ê£UV{Ào©Âã×®ðÓ¯ÈÚ*«^:±˜ö‘Ý(j,¶rù[D 9½xiµûtBˆÝE ÀL–•óÀ ¡±<'}%‰ëOá1êfðo^ZéH2α!ÿfæ‘s TÏÁ#çS«HåßÑÿ;çÈ/3Cü\Þ§ô2õ/Wîgšc´Éÿh†—¾wKÖóË_õmõÿºŽÛ MeƒîÉu}>¬”••ÕJ…CY>@:ñùˆ,1­,âɶišñìãÆñY[[´¿ŠW‹cAhº ÷=ä@´wç{¨¦:|Î>¾N-`C ¶‚ôJç1k®çŠùûÜ™’mÓ+&x*’Zði-žÒj1Yú™//7&8ƒÝ"âR-^F¹¹¢l±Š’+{R€ϰæ7•l3q„©ú e¹™Âd¡Ãá™îÂûIr;& Fm0èù+D|Ú‡¹/,­­¥o„]LG¥Þëóï4Ú€‚‘¤çgU#ˆ2ÍÀM>ößclÞHÅç-§¨a ¦­€âRfÀ`•oáÿÝóBÞŽŒrq»îRVÿ±¢®­*æ?0ðkìøâ…Ž­Œóæ“þ7ÿÒå`æÆõ `ù¯„_ë4Ð7ù}_íæS£ŽJü3àSƒlªŒë¡‘É? Tð—*',|ƒ›‹] î*™?(`1Ä\«;“+²8]dÊ|ldý‡² —ŽZÛÙª­Ú1Û¾×µŸj*ê ¸Ðâlæ­*4:,uˆ4ƒ¹Xs":]©Ü$_æûã6†qû!«sL™‹m¿ƒªÊëIÇ)C‰Û›çÆPU¿>€éï´ý,쑯Ú< é—ð^Ñé¤üEWÝ9cìZc+9q*c§ Ö™FO©%g{Ð*Ë…ö¬6ôK8m£òÂU3E} ~=Ñ Äx8ÉÚ‡BjÍ«7•fÄØ"+YÔ€£À©2)yÈ· À‰5(%‘±ö¯­E¨ó $q?Ýÿ{þQ)ÿx$ºf×Å& ÞÄ•9¿mj®7ÞÅû´X´8k{ß ªÌEj¸vÍùg÷*u+,p~gmƒÒ HñLœ Pí´Í6RVÆœ‚3{úI÷K×*€¸jb #U®æ_±Ÿ¬‚çF퇴N×ÓrÒAaÀ ¯âw&Ï Ùç_DzÄ€cƾxð†ì¯•ås¥ž§‰J§ó ,/ô‰ð\ n^L·¥Yµ²ÙÐÀ»LSžM¹T*’Z_ÑIÀI·5–¹!žþ‘igjãv“›®…½GØõß+ê’Ó +oí!ù4ÿ¬òã;†YÊ:ÀƒHO­+Wæpô'+Ò], GϳS«pÕßù«uÝ5±Lõ̫ٜ_ ¸9ík™£Y#ä¤Egç;œgéxÆßÒAT“¾mù£Ý//-×]–“’ÑÄÚÊ¢YôfU†Ñ…Æ_ã$~£òpy’¸we q£ÜZ×ò¤àêÄŸºúåúª€Ž¹mÙñ#˜>çx zêŒÕTí š§¡(ˆª}Fæ;4 74ÿÐ¥GãŠú@&|.ýô¾ýð›p}®dFÔ"Å´ÀÅarTRrÍ뼺[!c?ýe´0S7€8 ˆÑþµòߌÖÈw6öo+Kûià1ÏÔMÕBç·Å…ë²ãp@Æslà?ýàLjý?IÚ¿5â? —‰™\WœN‡¾æ½R•ý÷SY©ª•ªÊ»4f“d—ï¼Û^Šy\Äð.èîól[xã×¥T€éFrCZ÷ˆVÆÙB=½éazèQ}»ÎfT ?¼ žsÙ6É=ÃÄA?ÈrpÕé&8jƒ‹°Ò-™Zɺî|9ó§Î‹®ý•™î(Úm@m\°WñÑHÏ\”¤ã¬okï¡ã¬tâ8ÉãNEžÙ,[yVKhÄá”íZ[#·OÇz) ³#šñ€µÉëxÒü˲ümü š!£ÃËÅü7S€ L€¿æÿù´í9Ç {iz`üáò½Ý­¢ Ñ6Ý«xŸ¸¸Âª¤ìµôðƒóB5{ˆÆ+^ÿ‰™\Áì˜TqÓh¥Ôª…U66u#”›¦^ßîd®+îY%]þé=»*¨ªºÞL_¼ªi¥¼5Ù…p®[V¦beƒ›ˆ§¾kqQícÀh^™¥“Ò `¨‰=<Ͼ¶–Ý·Õ âf¦¬5} °¯€H·RgBpuéšÔ\L4DzÞK;emof¾d<ôhü€ƒ“:)ã4ñȶvÔÌhá0~¸Vœ¹YnP8Z-rñ VƒE#J‹Þq%y÷La¨$íZJu.aOÅ?³-,ôpàæ÷G‡ &-{̵’raÝŒîrÛ“’¸NÖˆžWè§Ù;Y_•’Ò”»‹,ãìûI„Q¶gÃ~[ Ú3Í`„ËÂŒjJðÎÙŒÆ19#ðï-%CJâ|”àXж öÿ1”+šÄ6§?8¾à,˜Ÿãc†Œ²€žlÍÓŽÑ-EViì\xfv(€à¡¿Y¼kæf,˜Ö×ÒÙqt{Í5r&ëžX_xùLüéû=­ì.޴鈜xd¶Öƒ»Æ2Ò{¥áò¯‡1Áp#´9íÿÃ3¶)…Ð.„˜dü—üÆômsëYò¬ô£ýhÐÃö©éE+4{…:å61 i‰ˆ¸ê˜‡¸¨¼"CA¸v%l¥9 (ÔùË™D Sk†ì]ÎÒ˜¹‘Ù‚Å2^ {›|å”ÎôÆcºÏOm9Ë »:UVÉ2ÏõåÎL0 ·À *Þ`9,>œ¹¶oØ6ï~ðsó É¤2&LëWäÿ€ÍkV»!hÚÚ©!ç!mé?Â@šº˜,ÿgnõXÐp1³®è¹Š%sÀ `¢CZ¥fµjí¦µ¢ëU¥¼xÊJª/ÜåvЬ5RGÿf-[\6˜#[œpè·T³,„{jß°f)›¥#ªã‘XûÊì“-)mÒ¨iÁ®–¹àÓ¹©£g'W|’Å®ÑdñLŒîÝð|h,±ëBwYÉfÛïûŠÙ¥Y©z åx¢›|?!:CÊ›õë?Íäù9ª¢»ì]ƒÖù iò÷Mç z £ÄûSéªSˆ†Se=Ÿ¼… ²nÚ%×xZàŽç¹n’ëÓs¿Žo'î\ü3bѳæKï* €¡®ÒóЕ¸®µs£R-/é7÷¡ÕK·IÕþEfQYC=‡fÙ‹m³n¥m½59QÆœE·“ÑýEï‡"@ßst¶ë=lö—3ŽC%‚×ùY[^·f³‡ [ZGZ""=ÞÓÎͤ%+¹ŸÏÝ(þ­t[ºc®J´prÀÆ/Y7”(• ~¶~ç]ÙÂMûwžï×~uŽnYV,ì%Õ¦ær­•Ðá{«4¬¸M»ÝpîCr]‚q©5~X8qm¯Ôuû¸æˆËãkÍÂ…-ðäå¦*t‘k @Ïæd•F}b¢ºNLÔÖÍðPëµÌòò£¨É'S3 7QE!ÈQ†®ož/žª„WUœ¾p¹/ñ•W+½|@”škii¬:^èw*Ì\œòÊé 1Cç%ƒËBxݰâÖÖ6l‡¤± k •»ÄVMñº¸)Å S>9ÂËP‹·ÀOç[ÁIµÿ!T`wñÑ]üƒŠÛû!@Rù'êB²ëM«—«Ÿ_Ρ‡L6‡Àyè‰D[¯»¼ÔæÍò6ÑûŸÏ/à•ç]?…Æ™&Áçñ÷;ˆ§&Ì8bt‰ÿü?Ï—KiZàëã|ÕV@¿—~"åú÷öhîIÀ/k ø~ÜÞ„ŠÌ€/ ñ€÷¿ÿWÎ]Y¤í¡<žÅ‚(£N Üé3¿B,E0n¢L²°À4¾¸9?ÊA¥®òA SàüüŠïÖÿwç¶ô‚‚{pOp'¸CÜÝÝ5Ð8„à\CpwmœÁÝ¥!¸5NL“}Î>û|sç›ûÇgæN?{?á]ï’ZµªêWUkõjE|‚~D ÔD÷ a¡[ƒ·$*¸D *7N3z…%éàÑIŠÄN‘Ž¡ÂÅÌÅÑIU”x¶Cx>Nóäíã±È«¤êzH§˜Äû ‡FœF´u¼·¨Ê­8¼8Ä£´EIxú‰÷ǯDmQ¼\oÚg®.Ä0•Ç;ê²Ñ:<ðãN"3Ga<±5F­AáÄéÌ3ÏKñz*|Il!lE[yf-š¯±[› ?„8o…ÄšËc(-)5lÑÅKªO(AmÀÑeARRæœõ âñŽqj`\w7nÜr;íì!ó@N`.Y`*é“Àç1=ôso<*q}èG2,C…$JÇÉ7ý¼6ß;ÖÎÁ!BÇAc¸i:.ÜDÖ”ãZ§™ÚŒÜC ™€he­Ð'‘äbACž½´þ½–¥DùÅ/cÕµòcîÖc²*Ï >ïŸ0Ú‡9ß”m|ÄçLþ¹7aQ¯4ü%¯Â ñxBô3¾¥{EãFNŽ!s*2(ß K}7aN(ÙÝá:ˆ‡ìËiXŒº¬ðH:uúadݱâ®í;kþ¶3¿Öì²Ö_Ô; ¬ð¸¬¾xgl´‘PýÚaL_ª/6‡€4zŒ‘aÔ“rûzÌ„Rúºg­;ñÈ¢ÛP)r.PV0K+ä ë«¼@ꄲú½áöaW µM—¨OžF*tÓQ¾üQu”°Wºw Êžn+¹Ñ³G¯_xå-d¨ÏB/q1§ØÕa’¾.Œ'~÷àÁ+[®ð¡í]Ëuœ5ˇþ5±‚»½ßnרzî«Ï £JjÊiQ#|ßÃþ¼=ùfÛi y3%%wýaÀ™% åW°8žà@ 0¬“ÖÜaÍ1÷nÏôõ]ž˜3Dåá#'’ÿäI•$É’–ÒÇ6îDêY3þĽäÏÐ5åŒ+^ý]ÿÏ‹×üßßWZ±]>l‡Ó¥Ò—¡e޽¶É?=yÍ©°ÅdšÑd˜IDZ¯,»cv“qÆÐæ˜þE;ÖßEäÅ NÃ#›{šqÜ:KUfÌQé°Fžmª]ð2ÞÍõúmk0Uô8GÚÉäm¯2ÁÏ6GÉKño8'¯Cކºë.¾7|•ï¸euêxßïv £3e½8%€Û"Jç“ôíJFà(Έ*¸4jú9˜~ÐiQó·WÇWˆÔÑ›û#΀µ*ñ±›¨“†y«&ß÷žòÒ-QŽqC¤‚D]+šŸÅ÷úRê-Gä¥ÁÝÅ®œú7Sn ‰yÎJš0Áû«b- f³v*¥!BX·”ˆäÖØ‚}r`9ù–e‚••®1°…ù4ŸÍS—ØW`ž…•’Uï§^jw>úXçÇ]ŸX‰²¤©™úÞþ›4g©-SÂHŽŽºªòµIB³â‘Ux ³kо+4T)˜RFuÉè'4ÚÒÿ&uü|,?ÓÈi.¦æ÷ùRH–‘?ûáÝ™›¶X¯¿xÝ¢×Æ[k¦ä.#3e¤°œ­·ÎÄIÖƒk8uÑC·ìŸÇŒi¢>«$w‰êc7„Ï—q/÷_®y™ ­‰5eÅ™f®V exWa$ùTYŒ !̘éZyªÌ»‡Rßùàê«`Ì’•ñ¹®®F«è¸¶m'jàÞUJihÖu@3OÛP¯¬Tæ²!ƒ‘ƒçbdÃåa¥ïí¥(">èˆvÛxòI[ÔGž7¬²”^žTF–”Y¯X’dk ©jƒCœHÌJÔâ\uD–¥›"Wà¤ô4ë@¨–/´IEŠ–»/íð­rð Ü/IiMúÓ^Ì/ÍÉǬô\ÚÍù®°Ò›P KåE®ÎÇÍh€9ìʼn¨69”@Dú–ê6«÷ìuáý¦ŽçôÙQƒYKêædêpmlÍq3Ë¡±D¶Žjº¤#Ë}0ï+ÔÞÒQÒ&û—MÇ€œÏu3æé·”lZ‰1,çyøU+·ôµË^e·ô³ ÞÉå>–ò·b‚÷Û|Õú€;ÃScãÞ—ˆNˆ3 ïïû‡3¬¡Øº¼³úÇïUgªÙcqk‡èÛ8튘6& Ù´¢Ê£âÑô^Ÿ´M@ð”aR='L©áÂ(p:À‹)é³ ¹>ű‡Æ&>ͬ³J”ŒÂ„üÇëÁ<‡ÇSªhÜs/ÛÇ·&[Çâ¶ÞÕ2»v±T¥ŸG{ܪ•v=ö‹î·© ‚GNQ5—TtÃIá'÷2¨N Âð]O^bÅ7Uù(¹Me±§¶j,^žiåœ%»±ÈE$’äZqܤ¼!35j¿Ü¤â°rÆ{Ÿ(8Zh®áèèEŸT-"¹±x¢¾KQ¤Ü \Äm>4¡Xà»¶î¹ÍêØ ê1÷l9¢åk0>ZcC±ú±é2Â^0`ÓU%¨›Rß,âæŠØoˆØ»Ua&9$¦„ef„5š&„™ŽJV 3ÕŽdáÄîÍ[áìaíagÀ/hDxÍ÷yÍ“ÀZîˆØΪ(’Ž`-)2 `ÕG{°…Mt`ÕF¼æ‰rE×E]Ϊ“DaÕ°}ÌÂV`*RzôÔ_œW%Ÿ+¿€UÛ9„Ñä«öÂÅ6€RË™KÀKnèñö«yÍÙj­"^ø)qʵ»~ê˜-…8çIÉT& q»xÒÜ‹”çj'×Õ½pùn˯ç9ÐæØñ°ñ^zP+»i·u–s3ʽÌXedz/þ0­ñO%Öo ¦1Ê b`ú¸Ù +Là–-†5fS²c%ÍàßZ蓘=È…´_!¿ûºŒë<2qìè‘ÞÛt02é»KUÉRœ«Q®ÆªPÊ `Ó)RÊ3ÿI9¯§‘þÃ¥íM2Ö%fNlaû{Ÿ˜iÊ€Ý[…¯eJ)ˆ „±ÂÆ8+ºjJa¬ˆ9¯â†µõšoš³.Áø/,€ „- le2aÕºkjaÕÒÏ«8`Õz¼æ76M°Y}`8¹P^õ1bafІZè¶M8vrhaÕú½æw6M¨X¡°jt¿§D9è`Üít}ê~™ò¨ªèôø½îN×ÌŸ”…ê÷Ç{U³‡_y¡¸‰Ø›0TÑm*‡³£è›°ˆš¸›1«®þ;qt¿ÇäöçÎìÙyÊú Å ó|fÅáþ6lÅqz¾«ÛòM ÚêW…Cç| {Š'“”þL§.ÃS|Ó÷“}ä³);Q§^ÿŽ‹­F²;WW­ 6÷Á6òz:þ¦BGDÆBÓHûŒPT¼ÐÖà#†"'z¤(Êßúú½¢Õ3)ŒöÙ*!+u1îÙoͶÐÍ7!ÔEcó#ÑÍÚ—$ï@¿¹ù¦ù&šR 8z÷.£1óý¨ ïõ²«³oî©}aÿ4"ÿ¬„DǤkz_íAÄ6.¸ý£ÆæòǾ[µ¥ù±–ÔÈþ¾šªË<·Ò¨ËÔ0ÿúq(rŸÅá·°I;ž ÆU¥sE{TK!ºÑjuSÃÃó ȇ=²àmƒ+ñ®zÑmNJÇ5SÂóéM`•ã§ ‡L­ÊÝ%Û ºœŽ¢ÊeÉŸQUb HRšçùíÉí2û€m9¦RÕ¹˜‘¹{°ZQurô1@¶-é!tz£Ý¹ß¹£üVR°}îªÍwâ; iÖG}¡iç £h–òýª †ª‹­ ³Rkv*¯kiš‡!9“ªMÉ·ÙêÜL=þÂõia ÑqDRí•8ç4‡lbŠa½¨÷ùÓ-ÃHþ#—›HNz5dͪ™oƒû9ª‘(DG)35Ÿ“Òþ¤Ë’Ç7y8„,úÂÏ…3™-ªñ€ìhFËâã¦çTçÜvÝÖú¤ŽéåWRFvéµF B .Ær‰à,qúß(µƒБ®µ÷»-RÁQl Ìéˆú|Ó„åßn¡5]’&p·I5øšM[¼£Je­™÷}be“UD’¥‚jc8ò—Ó äq™ï_Ilš•1Þ“«íWÌE5˜:dWíÌ똦ΔãIæ]¶¸æ×WMN eMÉ‚˜C¹çòÍokþÈ ™²³ÌË•ÝWZtvFèÝyJ•š+ gŽÏGŽtvÙÈü¶*‰z%_ËÚàÀÏæ+4j®ì›jM€úyâÙ™ü¢:½å>àeMPsv´Ü9ðÎøÑ¶[öÀÈgƒ|rØæÅhÒüi1Ié»}£•Ùƒä‡ÝÛ|€5Í% Äð½¯ûÊLAªŒ7g%Ü\z~Ú³‚\à4xÅ"*²ì÷Û:k=ÛtåTŸ0YE!gI«„…Ãe>ñì°i®÷¨&S@¸¢ "ISÞ,gåì]WÄò1[Okdîi BÏ(Z-–5ðè=Úqãh-L~à~Š8¸Uå½Å-Spüý¾lÛODÄI¡5ƒ1mv„áÂ`{ãWÔ—ó‘ïÕVeîEç•Ùu\×w7žEh=4‚”‹lÉ÷Ú)ä¾·ýùòç5­’³åà#³24%›Æ±×ålæ´{«™"%E² ß1]Ës!ãoCö#ÕGÙ¿ø>Wˆt™/­jr±ïÓîÚëÒÜ,öøó]¢+Ê€Ö"Ï%bßÌдô&¨ËPÄ`jŸÑEùpâ 7ŠÖâ•=¶ oæû†È=(“£×¬¼$õr"â!Ù÷Ûžï·œôµöÇÇHHFímÇÞ»BMˆT™×v÷v¾‚õí.ãžMýÐì+ƒ£€Ÿü‹UNø –µn´¼¡TëF`²½€ÎdD‹žÌ£ÇZ§¢€j§ð€x§×<(à·>"íÙŠFíðãÎFÛFk!¿w÷²·à-n­$ÝDÚÓZŽMËÛ徃¥s‹k†[ö ¢k!ÉÌ5ð&¶šEF{GŒø4/ÉQÓÑP™J=÷Ñ)uN¶ŽËA#* 4m¯¹FÄ®`Ë@)÷b|‘N´'“ŒºÜlð‹&0‹^Q§0rk‘êHC&¤4İ1ú'Ás—.·•.‰Êî9Šá-ÞHˆT?%üãuÐNKh›ì.È»¤¬¹BpŒç*•œþøãÑŽæëãÌL?eÿòËè‰9D汃딉á½bª\(ê‚>Ó`&‚ATMk(¯ft°tU¨d¶ÖKý]Æ0^,Ò8gÕŠ–B® ©{ÂCÝkmÁDMŽÝ´&Ã]»ß}hID™Ü¡…·W 2j¶z²l^L”¤ñ…öQ6Feï}Ðy’±ÚB"¸crvýém²§tXù»¨n½ØâëYt×4•ŸWXŽŽÙ–YæzÚQõ >èdž~ヲtž?ÒÛç>¶…x«BÈêÛ15õÞQF¥ù*¹7L»J«ŽMà%™óöµˆØõ¢„(õÐ=T)šžW]¦:lV_š0ðUà–R,)—ˆ=T¹›Ò«ØREûÍôº…ÁnÏæ†³vªL2‘!^‘G½¬÷šVh ™Á†aÖ´™Óñ3¨ëy±Y叿±ÉÌ—Zݱ å4Ó¨|_-¦Ró<Á…Ÿä´jì},ÇóW(NØ`_º!Ó+ê°£àÅ5vÕ{~K÷yG”c$°*ÝЕyCeÏÕ;O%g¿DVáÀ…·XÂp똪5‡Ê–2‡ÊÁ؈ü5 ñóöÁVŸÉÊͪ‡cÝæ«Q¨Ð3¾Zœ§´u™œãd!ƒ‘è†_û|ë!|Ù ·¬ ›”Ù}ø1,3è„i­€Eǃ¾¶–ƒ¾Û*(½|z¢´ô¼©bu}zÆ %ÙQìëúøÍJfåôÄ7ÁUßv>°sEÌM%XÙ°×@W»ãy(xòM·{…+ÐaØž;ÎI¼˜s9aþv˜ïl^úäÛ~x`y¯=E\9‚x1árý³ù’aMÈüþÉ·’nƒ3+N9‹´Ÿ‡"©Ï5¤ˆ™Ì 9…§L¬¨}é›l`„âÿE(=‹_ö³0¶7žðM0Îm¿Nß©òBCHÎ5_PŽuÿkÚ _-¸ӪPÆøõjR)ö«$qÅð—ßÀXjâ؃õæÎÙ/u)s! k o]´Ë¶*Hµ+ä dÝÀOCÊ5öȖ‚ö Á€gsojRŽ«ŽpW)õÉè†ø¬øFL¦p²*š¿Z|KUpŸW. ’Ó”=»u K°ÒW>½Ï²Þœ²¼8OÈ’+ñºŠ©Š7 ½ßz7äô9Fý™ODÏ#ßdaU@šõ¬ÇÙFGPÌ…è…äo÷S† Œaé¢×Çm÷ò!ÌÝ;ÌCÀ«R@WƒúÀ"U(Ôd~–QZë,޾Ä"»Hy;VAå‡Cµ¿ªâ5‹tL¤°ã¦¸Óõq¶Õ«­38ñ*#ʧƒQ#¼ mZ?Z<¥à&p›9 ùj2³Š‘옘Àb%à(¾îÀd v`ÞžQÇ.ìLBƒÔ§l{ƒðùí^I£¾ÄÆu´Ïé6U¡´k)"ßàŒaªP– 6¥tnqbYUÃ5t2•¨«Je Õ"ƒ4smAgVgöƒQ Ä­“M}JD!¿¼,†ír¼ÅJß̬¬qoÏ0ªÌ[ÅÈ Ï­Ÿ‘Úfñ|é—ÿHu*«6ëõ•dhò Ížÿ–)Ƭ^(çˆc’Y}Ä*Ÿa2¬š½²Ì/oiœþªÆœ(ؽ늚c4Qµ’7¦ëêE¬[â!š¿=0¢t‹ø|)ªM`º@Ôbxµ&0÷ \è¿RÍè¡DúÉ7õåøšçj·ÇåÌ\iÞÇt ýJLÙ‰oGÚrbuË@]sLð«>B÷ ÐçÀŠù¶§s[¬*>f$µ€ô&™I!A'ÙÇÅ:CÊŽg”tÐ¥`àmYWvH(cªÀ´´Š¸€Ö¾{=ó ¢ñ!Í÷uYúQ‡áIOÎôe$0Ÿ ªMûphMÂrûB¢tS2¾³Óø²dæˆMÞ†…‹hVyì·Óm‚Â2Ò{™ÈÉc~˜ŸV)^äLC.¥6[CÚ”fC§®æÞØHÓØâTCÈbP¿h§-F‚ÔZ…ì~V ^è®·ºðõEv)Ó·»°ðcˆ™-2½„–\´¿X1Âðg8*:ÏT ý œ½¤ã¡øÅ 6O;EÜ7D´<¨عœv »O´ÂŒjõeØE-?H;Äš¯žŠÙlïf9%Ò ( J:_×€Y{$Ú€) êSu„05ìq6µö>³Ó͘;åh»šdíýJ§º1{iÊ ø™æòùwàQÏ!\ÜB,Üa œÇËZIQ—“ÊU’ÚiT“¾®Ïku\šp]&ã(zìc{bß^; Ê&XðLÜp³ÐÙjðR2«ðpÄà—ÍaÆŽKxÄ×Å1í«…Õká!«—¾HM:0ƒ2tè&@=ÑøëF6É óP"Ì ðqYÇ·VŽÜ·›è“Þó…üavÀ|>Šš#LÓµ^'M´^ú"6%ÂõÚ†„œh¬iÂŒ'fí¹f÷\ ^¡ùBÌ0¡à¡t°Ós­<ó…‘aG—ù†cÔW #Òžö ­NšC>Ë( ²îÆO,š“¬ååÂyú–úí¿Ö`&»Ž,Ž>d·>sœtVÚöôÁ=æZí7[5$vyŸü©5ð¨×^<î9vݾîÊÔ’[”|Ï´Š¹*3õèwµAg¼Ðç#òά¡CDJxÉfã1Lc=î¥Y³¥ šz¤%¡@‡A{¹8ÔØi|û©@W%ËÎd¨á19“Ž G"‹¡yG0uÌ ª’XŸ3ÅA– þ’!õ Τ‘Ú—¥I+AõÙ¾ל\ãÛkBçôDØ£× ‡ðU+ʲt~Bàcj%MO…äµ³¬rŘy»&t½´«\Uµ üí¦…ÿP6¸òy£ÝwÑÛW?«†pÛÉ—Ua=˜S—˜zØß^¿pŽ‚5^ì0w|Ä⬣w±)Ë¢Zk}k6à=ô Cæ×‚5nSܾZ¬ªÅC_Æø×Ú¾ò%m’ R4ö¨éQ”¾6wÆK`M²oïÙ¦¡Ò¯øjÑÿ:}£Je ž_z Æ’œ{ÐDæ•oÒ‡xÖ±»lðVÜöÁ{q?ïÏ´ÓÔ\+¿ž˜ä~ôsGÍ’§€Ú&©ûlæg;秸ËñYç,Jþ±®þ»$mj¼ïüËT‚ï–Ù/¼¥é]ù ËÍ7£ž6Êj¸ß•ÿR¿MpÊùFtŽù@A;ö ¸½UõN÷øƒsw´©Š¡^skQŸë#¾¾!¾&ƒ„—Ì8®—AðKZÞ€> ³æ*oá1[úý ¦ ¿¤'´8aJ~ëT â¦ÄÿÁxxˆbñ:l(pÿñ]ï†2áÆÏË’ÙÍâÆ ½¶^õ`% ’-V~{¯Wç1ç•pt4tv2~­ ;sv‡ìJ(b2^ÈLœ²b€òV¾LáÃùµó´®I‘m“aKöû­ŽŠc§ã-¦fÅ Vñ`áÉe–#t/C­C¦¡E/˜ô—×|šÀ4d&©T6æ²ýË{—á@òrÓ^‡ì>')BòžÞ¯2bv`tS à‹Õà£éHÂÌÀ6U ñý}ùW½[r«ÉUæÒ·Vß©.‡ôÌ©7!¿—Y/!olÚ*ÑúS©ý\#˨ Mõ76GXñÂfÅüñ½Ë•É/z¾>OÏ` x··æ6 .:¾Ý˜ll¸ÐÝDݯÊÄáÿµ1X‹E.óšäW®H¾… áïݰÝéz±äëÿúÙ¬¹ïÄ5±¸ŸLn•q÷¿œÜëù°Õ8.ÇèŒj€ð6iqGœ¤Kß`ÏÉ#™P4g׫׺à–ã0_6¿aé¸õ¹Y顟97âÁY=.5›È² ãïo:Œàï+‰¬Â§;^½=ÏŒ¾¾ìŠÎ?°‡6&†¾¡ÇZÑ[îq‘5ÖùÁóœ”Âh€•*À“œs¼4%bÍßOòÀ‘´Ëî<ºø­,.é‡-jV“¹q¿´ÂrôDØ;V1~ì4µøË޼0ÌÓ¿\þ†ÿ5‡dÀùïñ4tQ-éf=Qº3ºëÆ7&±õ$Ãçã–£!ª•…*òþ=ê¨ï;Æ,/H\¿M†|‰t+¶#ÅNé8*·àì3>>Es’§…‰¸Ì¹fœo‘Z³ÙÛýôrå½ mš1$÷ _Í.ä-aP¾y~§ë°•+»ëÇέ­ý¥_PFìY‡¦]ó³áÏãhXåélx·ÂØÎI®‚wØo†¤Ð›1ž¦òÌ;JŽ7¶üdG¾«{a³á…eõ¶èí^}äìÿõ½·ŠíE̦Į£3z›Àù29„=vJyuq)ÓšáX¹9U ŽP$lcuÔep)qÿmý–¾5VS³!¹.KÁNi1f戋í€ÎÉX¨eDš+=²<–_vD^áD3VMA1ìQÓºE@R1×â·òÒЗï¼'±É!'vtƒÆôo¿Á ð¤[Þ[E9Ã[Â7x&,8§gH¯oÆ1 3²ƒ)K§ Å•;†•´9Ù¸²·¨\.þ8·Í&‘é=.þÁQx%¢CúÉzs®®dc}xûo £C+BxÏXÛCäÉmK÷ÈŽêÀ½.í¡d³œÁþ½\.E1õÞ¤çé>2FÝîÓS8×õ¦.Jýäq“ï!_/¯ leLPÛ ÍEm:¹ëÁÚ¬µ¥‘ó<µväš,îÑKñ›1iì¬Al×Jd&.a ’ÊO`Ág­yq’éõ£Ž‡xí±À¡¿öU$ö«ÈìÊ/,_gÉ礭Ò|;õ~ÞDµ0×|?ô€2·ùvh’_)Báã¼gpÿg9õûµ¼ä|¨ëÖlu®ä-„SQÄñô `¡™1ß‚ ÙËVø&˜ÈgÒÐÜÃ÷ÖÏy$‘UÎŒ0ͪÐ%ã¹ûTBè/Í/CWVßû±žËìc7À-}^£\B&/Fž§„·×²úØœó*ŒHU©#'óÎy±ÆÂÞ¬¢éolÑc%íу¿ýR‡ cÎ×k¢†“õ¬"ç«Å˜iCVϬ¤§¨³l~–vBö ÁsÏ¡_-ðò(†HfãœÅ›žÓ Mê‡kïU½X±¬d¾pœ"úŠÕçY^•?ÌäH½_4é=°ÓîP¯9,¦t™§q¦øt©ãÑÏ÷a¢(soµÅUkÅSî;MÄ´sÌ^X‚ÜçëÞD³/è†À¦•=à;Ž2`+©V˜ÜY_ØØOr †ƒšÖÓŽ4gWÕ^f¾°“â7ab| ¥­Vsèm™í>oµîM8{)›ä';IÕ#ÖS*ª›‹Še¶ó<Ú÷³Y™DV(\-¶ða³(Æ‚lÒ=^-DøðÞyû ;Aè‚WÜš„vØ-âÎëÆ‹' ÂEã×Ê…TI®¡´6ÎwXéÌ=²@³hFÄê’¢—.ÖDÔ´§P¼ ê+kDij óß· =A¯¯ý¿–Nf•†&›JÃ;%B[øI¢¸ò[$·¤->Ø=h…2ª¡ÙáäÈ?¾æ¾ÞÓwöR-'í¿dÕº§º“÷w¾ALÖk‚Ê®wºuDô%ÔÊlôƪö3->‹á·ÉLY´iÙ1ZMÎ{‘ål×ì2) ØBÄ`ðU6armÖu#Ï5ƒÐ0ƒð«ú´Æ$²ÂWýNç½WP•lª_°rÉð6Ìð†½þH¸¬ë˜Á- ¨À¡¨ðYEÁ‘_ñYÿ©ËÝSk¸FMÖí™i†IˆƒåÌ·Æ™Óßâ·J©Zdã¿Ó´¦Òø/™¢‚ §pâÏ5÷[~,€QDÅÊw[¨ sk³­g ö áF6ˆPV¤Ѩ4zyî½èïÊæìPDs½ìr] ¡7×È‚£&H·óÂÖÅXõ¯PjeD¯Pór©0;,¯šúý1…÷–ûæñ†«Œî1 cð¬1…—zd½’¾bÏ¥*µ”e/ØR Ëü¨¯°…·W°´ó±WpÎ[4¶ó£{!w„æg·íû!²9V={æÍ¬FÉñ‚mÔ­GãE‹×±ä‰ œQÍW‹ô×KË&é“ÏÛ·e“zíÉÂåX®u(j)È(XÖ¾›/Ä[ ØËh u'Ã$ºbØ0_Qõ1¤øÕÂçõR¿‰Oç$B»˜lÒÑØá›°#l¹€k$˜ýB©í¡ð@a•´–®0_`µ”´'dÕ9‰i±¥¹«ÙÚJ={í V:º»/,èËì<4Ë„z~MÏ¢ÓðeÁKEî•ïT«ðç,a„$’“Xú–;‡úÚÛÝü°ð=Å`· ÝX‹*ØM="z؃,p}åX [X@ü¤ü6­šC4K-¡C4mÍÎFÕšÒƒ£ªRcD-ÝP…‰GfOÅ' LßX£øê°”!éëHØCêR‘€bPÍL2ãLRzs §=¯¥—=›sž­q)b•˜e©·½†3-•¶œœkµ %rì÷rC9Ý•@ívã_ÏeФKSr•Lê}ŸYǧìøà\øCKqÈüØ:E(´ b€Î<÷yxòœûC¤èsñ½ï“–Eï÷¾ - óÊS®ª# ñߗþF¡¡8›Ÿ®pŸ¯w.q¯‡E¿\Ц1¬¹ª ˜Qrµ¤r[óF™Ý‚I÷!W˜Ò—v2 ^ÕÂÂZNý(ƒ"ó…›áÕ½*@·;CÙy"«pÔ‚–0v…WÕ(Œ³<–VB‡òM–ÝB 5ßR3W©­¥=;€Ùímn½µ*Dg‚Î4|[ž“óaWˆh»Á–&r¡K˜°¢º*Ö³e-Y…½v,Y+IáÁ¨/iBUløé|Œ3f`}ÜW‹§4ƒ‰O÷ Þ,X6iĸ!½Çãs)Y Lˆ:íÂŽžk1h Ãijöˆ¢ATÿÈÄ!×|a{¸@ОTߦІt\µÅXéhZÌe²IåCö’a(Z’ÚÌ%'®ÁÚí7 ×ß­´öÚ‘ÛôŸ"ËkÛ€œœ;lÒ}ƒ. Õº·Â…é“>QãÆÎ-qQ5"Éd¶÷{Þö…k·GÔ£½3ûj%[vhþ³¢¯+ ­ÖÁÅQ› Á«ÁÞàÄ+G¿˜ ¡KÏvœd…ú‘N¼M í×cLÀ-¼¨»è_å´¹°_q¨rá_¨•|˜C|Àwœ²41¸EY(èCŠ¢¾îȬO¾?w¼g½çјݘV;ߘ9~‹9Ò_Ï;ã3ô²ª¯el*Ý}Py,¸Ãøvþ|— ,ˆQª.+¼Öôcgª¬—LÐyQ™ÌR m–(O•µ‹Jt|àSIœ7?6 4hWoùTú#$Q×G¹O‘´æ¾µVoy~ç rC5TŠ‘Ò™ò{Á¬¤[[X#ª2‹¯É&¡GtKtî@ÄìÔæ­ï)ëÇí Ûä›h%šÒ7ÂcXà4Jõ[`KÌrQûì>ØÜÊ¡Ÿç/KÕ]¾Õç·ÑzÜëeTœ=éód¹¯Ü2­ÇŒ—j‹ØO¦:eãðô÷¡Ê~¡:ìÑŠ¥Ü»P1­dÃòd©ÙÈw48FKeï:Ë ¢êWV%@Ny§k,¾«È3D³«óH•G¤Y³ïè™´œ)¾lè]ÉÔ6Ø]ÉtPœ*LR8:$?`ù[gr¦Õ´Œîf ùimúàzf¦WMÎzGîf‘°±uðÄþ¸J«ýEÝÁãŸëD9!ò©ý4ƒ$Áo;î‹)Ð2‡."æLµ«³"6YT犚| Ì…z´ÛD7¦Ìqì5;tË’mÄ 4 -†uŒÜŠö®‰±¾£×@ÿ¶O}"ü³nÛ(,U÷ðá1Pç•ñÓ½òk*ppˆå›G,¡,D]ë½’v¬þ¯¿W¾Mô#­à×ÿJÐ`„Îd½füdVßûˆòøpÝQÒvÝÈ´m>³K†m¾BýGÞvuÞšúå’ƒß? ¿HÕÍœþ`S˜¯ÝõMì¥ñkþNx€öÏGÈÙ:"îõkâöaò¬OàÓÓø§3àά­~Ð+þwuºåIIÏŸJçíùÞ]¤?ÄA¡PD)ø§‹åß>4æ#>½{câ¿ñàâç×ñ…øé1åçÊÊÌÉ ÿ©ùEö˜Ójk„pmð©Ÿ@Õ÷@a\¿»°8û»lÿ‡)ªçÇÊGo÷´°—ßU°ÂbÄ\æÜÃ$ƒ–Ý)&ú£uoõÙi`-pýLÌï8îÄŒ?#Ã(Tµùz6ÄáµW¸I:~~÷n ôîãµ×Ì£W@@tˆ 7³’Šê*ÀYíŠPfΡû×#ãÑ–ß©j“Ä(“jÑs~K>‚Íiu+\«%úY]ãC•Ûo怔­K¼$Û_º7ä}~rn{¿’¥êhõ’¤z\߸âX*üó kSFR©Š¦ÄJï1™Z,Ùw(úuìuÎX.ªòÀµº6?F9'Â&Â7ÄxÔGàã€[Ë{Ÿ–ûØðÝ£Ù´ã¡Éû<´Ý7ÇI¤?I‡˜Ô»¦ÈÛp óÎu,ëiEÌ« ÕkSØÍ•OèaZyfðÊ}a¶XÀã ÿ àãõPdølhjìÀéÁäqŽJkìBþè®xwo‘ŸÝEâ!pLÒN¶WÑœåZAëeŠØ÷" ÷kZOd¡Ê6Îq‰Ÿé+¢{\oußò¥¾5[En˜×ÎÏd[€ƒÃ1›_ —©=é°<‡-)èÑ¿íìC½ßîûÏ[ユᇿ]a€•a=áT„˜uS6*]VªkóØfÂJ;W˜^=”-bÄÏœE­Ù†µ'I¤:×Ì /rÐC!ËÔ¢&¬=± ‹—+×ë7eíe퇇 <èYÈjkΘQÖØîá H| ÔfÂM}1ª¹[ŠÊrýÅâZí «ù¯çø[“¦_}¼ Po_˜ÇÛFq–ÜaÐÅ%­a…•÷E Â¿Eê÷ó|ÇÑs¸¿¬\Ò€T²*çvêÀÙm'ØNÖmþßüoO±Ïf ÍqÍ!y­‰-×·ìÀínGf9j‘Yïg0ýëö\g `úÌ‚³ºÐ_+mk•´ßoAݧü•Þ‰ß Í`?ºJ\"Üïíõ‹ãàÞC‰n…ù— “ñ¨FÃ*ËÂ@¡ÍËa;Õ\2, ‰læ¡É“£ô“Eç›?vhrCz"á.ô‘ÕKB‚ÎsÝ9Û¡#qTcsUI»G«Óý‹‹j”C>q#î@'mk¢:”­3M£&¦s§˜dÔ´¿œ/Ïhð̹—æˆ>òæ%ìPäÖÿ Pc…ƒËûÚxæØ²=à ¹¾nÒ-¿í?³qíˆëÝŸ‹?\ǵûî=-s‹úèAD—ïf*ñ[§õSÀÏ'[ÖÉ>±r¿ÿôAóª÷šÁè±r1ÍZÁÊʪn”éÝÙJuýÓkj]VŽìn=.q'nö¸q3 Nh:,Ÿ^þÎÀm ¾ø]Ù¡‡7!h€ƒKñp¿¿r ɾÚÙy‡ ;ç=Äähúh–WV.‰Æ™SÇÅå_W·¼vZ G¹l P¬,Õù…²M@ £›Þ™ãïÙǡdzFÛž›Û½ó©©ŸÛ»ƒÚÚB§‡³‘™™…BÞÌãQªö4x]Ù[𪬮¯É ¾€¾¯^Õ‰GxÆ´rwÆ\'îpoìÑÍý! ;àü¯ÜÆï- ûñÜ¿ãøaçꔵZ¶7rή9븛ê>BîntÑWS±½ùý®ñ€DO“Á™H«x€e¯ÞÍ}$­fÝljW®ŠudÔÜ\(eC‡~5,ëaãz26Ã"8¸GPP9ôÝ;ìÇ‹ˆÙ‹ªÂÚZèÎÎN˜èÄÐc€ÏKê%ºù˜a ”ºnéÏÎÌr{TûñxÊ&û²ç³°ýãweL?U¼jnhx=õËØDg8>_öæSs{¾ô‘þ8ªä¤ß—àØrЧ—Ï À÷cËOí;y0W .óüôXý‰áüÉŽy…ê™{ß¶- ÿ˜XO_ß Ó£ZAr¬Z”?_1 -,dðûÝè ¿~ºÐî» fi"½ÎaGÙŸ^u͇œ=­(ÿPT|jÔäx2çóà'B‰×nou³‰O?w<.t?[Z«þSOaÃq“ò¯ìë k§øáÑ ýBQüöÚü§yõI‚ñƒÚ¦yQÿÌ˜Ø>ÞÆÓåõpHI`ècúȧä?“aWÆ`~Thx«_ZÌ·æÒ"°‚æGÏzgßE¶Ah‚‰tÎÝá!IĦ*îü¤0|éØADì±ÕzøgIÍÁàôžÀlljˆ+¬çõl²=<ÏsgbB¿¶Úèi8Ÿ %Dw ¶£lÆWŸ{ΩÞ}ò˜soÃøLÖó)qDøå.wM™ )l$šÇ»µö6–Â1.û<½9qÅEå5ââv}XÅÛÀþìÆÎëÓ…,Çá™Ù9Eáê—¡Z!­nØÔ]0NùË ÏqûÒJñ¸¢‘ù#Y6K î5J†Æ}=¥©Z•ÉYw÷Ë‹‹ÍÄ/í@3ì'8·åZˆçýx <ä¿ìÃèþµÒÔ3l¹¿äªÑ÷/<~z$';ù#;fíOòálßù/©¿þKêáÿ%Mkÿ’¦ÿScöÚ¡Nª¥ËÇWc¾ÒV(¸ÔïÂq^u·:ûU6,ªƒ`nßË«€Ó[¦¿Þåì)¯Ú¬øTû7ßoÁ, d ë•D0o7„j5=Ý‚Ð"©$TÜÒ£$þ8D«r,Þ*žËíUj0 (ìPù«v¢DTíðáñ73'©YDÉ9]Δ Q/À#ó¬ÓÞI#‚D0 K¡UªTjΧ’u’L6vÉÏëZ :æŸÛë@šw’Ö.I: $¤E¤Ý€¸¼k0 n–õ•}Û8]q hwè2•—µž@¯cäæQæÍX¢V= Ÿ„÷;BY>|êÝ7¥;•oôŒOiýÞ ³@ËF6b`(ͱAªR¤¥6ô3þupÖ18Öä-6ç‡ùv³Ä³Ú³éÙòvVL˜Ðn§[|Æ^ ³¯ÐzP^ëõW ¹þ—RK3†AÍ5e×QGÕ ¥¿|Zq|àï¡·m×—[y­Y ]¸ãò.O@ú!JvÜRÜÓ”EpÌÏ(ÓãÝ.,8†šu{Kß5ü•vÙsW_IÔ…xvò@Ìüò ´"ó=¼Cñ¯9ò24™üÊ¢ªÝ qì±òÝË2Híù6ñjû@öT=ýݦ¬­4ÿÂzhÊ»æ?*¬Tž÷i>~Ó3Û>û´ú*ÖVÀŒ#çˆî„}ÑëÝBºi%—$à u Þ°³×ÂÌüèv^ÙØØ°­ß5;::š›a`j¢€°´r=úpqž­ïƒ Sq‹žãèê2k:{­´#g†BŒÝáÁ•`Îó㣰 ”ŽG0ÔÊ»½µ‰µ©«R“ʼn…c ¦ØáUž0-¶ÊX§k$­„§¶õÊ>féÉž—µÞY¦€uœ/U˪·Ý»„±3øPˆ mÜW}l *wÎrÜŠH³…þÛ|¼ò·ãSŒ¾Ó¤€-\ØßÅàð¨˜o¥Lߣa&4§WÇRÅÒú»íõC´×š;¡q±wteŽè`:Nº›M-£›Îwø¸#Gá[ËkÔÐQö’(ÌNÿüýïW*Ø—<Åë0{¾ùtI±­é“QjfD¦ Œù&r¿L3ÀlÿU ³ßìz†éÙ¹l¹ $ë&ÈŸ>+%L)‰BYNKRĉúñwOLJ&¸^<濆éÇe¤ +C@hÍË¿À¼yª_o+¿Âµ+@e½Ì ÆäsŒ4¶Êº>~j˜Kº’ß©ñ§½à&å>uÀ÷>i¾\4‰EÞ×9¼×š¶8Ø ŒOþž»Üx0—ÃY¥ÀäKÆ"ëôŠq÷ÙTÓû®vŠÍ“†òy*ð­²f^ouZu,MQåüJ "¶Õ’.ôŒR¦oóñµ7‹$³4ä6RNWD·°V´ˆê¤ºß)æK9¼()毤®ŒÒà¾e½ ãìYã,7È0(•êÁœíçt-9†œ˜Z ÒPu7‘ A+ÌÏà÷*Ș³Z ÓfO*Õ;iÍÃzqVÔ7¯9”{µý»a¿{.~ÛÍWË¸Ž£{ûò7×·ª¼8š³Ë*¶nãÉ3ÑVàhæw»÷óÒSgÑá*=ì«öÎf LÙ˜*MÛ[Öw5R{j}Ô2SÖ%ã;¤(J•è³®ž‚›XI„Ò5m¹ò}þI ÔmÆÕÏéQ’{ói'ð*0¦|^Ó<ó’xa!>—2öÄÁE»~ú‹uùÁ·*°£n/gl {–Êò¯O³'WoлYG#2€T$ãa½$¯}ÁXÞgÅ©†žõñ_ŽÞž&6oÓ:ÿ©J¡ÂpÆÔÿ©OÇX{ÿı¤P*èøêž/†¦²£iÓŠÌÃyŠ|¬üýªÿè7èè?ú nH&J–“› oCe,Ôy€Eáo0YGÿõ–øRYéi»ö³ÑxkÜ¿õÞ\eaÞÊÝéòÿLHÛVEác–ßÀqv~ü/¥.ò…ìÍQ+ 8VÆÕ˜òL2¾ì­éƒ²'èx5žYW€yóŸ³+ÂÐðy/M²ª±5˜1ìÇ’‚ñÀi½±Ëî×cÓaMÒ¢`þ!ù2ÓœážJôÚîÚS7 rfT£` Ì`TÛwìùoÆ–I4ÂÓ¥Gó™Jt0 à¬3mËïšwõE[Pñ.´J$xdkåBßý¢6ŽÜŒÀB_ìJ·8r²Ox æËU1@ˆ ~ŠTgÿóç½hÉxÔÜÙkâÞècÊ«0+ÕKP w*o»tmÿa“öÀÔQû„!>MÒ›Øç1f§ÏÇïç“æ-f›HQv­ó2ü,Ïb].Û@ï¹Õ)Amï÷šé_h ÿ°è…“‰è‹— ç–^2ê?çY«—{ý›êg{Ubž"ü+NÌBí º/²L³”tÆð(<ì6?&Òñ°Ï4q4GÀ„)ÛA˜ÔÇ æI\ŒLÏŽ¾sÎ4_O¬Â@qûx; fì‡d•¡¸%‘jMÓBq^ØÜq:m>U'+]è——•„ãÏÖÞƒÃø œ¾Zo(=«¥«ì}ɦ“CGz ¦­ CðwS…sÑLðviÊ•ÿè’Øy¬€ BÙR·ÓÂ=ÓÞy܇à¤HÕiŸÄlãËò Ý.L.‚Y>û 5ÿTPQBø d#ó)'LÈñÂë1 µ±½q't.enÓÀµ„±•#˜(i‹§Á—î€á÷þ (½'Âçpÿ;Ƥù[ù—®–Dþ;²õo4Òå“„ÅÆ‡™7CQCüÌ¥•Ù¿ýÌ{ÇŽvm6)· úï–7€mx8Þ*!ÖA}BëN³iIQÛk° ªù»ÔߨÜóÃåëé¨\Äÿ Ƚ)džwü÷,/Æ­ ”³ýš ´ÿ‡z ¶CµHANô‘ZUî3žäT‡¬v­D©2¬–0®ëå†#µÌyF,´V¿˜oQ%ã _V¹Ê­,Q½`Mò…”4b°6‡f ¦5 ödtΞZ¦Fh°&x5• \U1Ã@Îþ 5©€@Ó‹îŸÕ²a×{#өƒþWºêÏ{Ú}IøÑS¯óOÊŠTÐ'†™å¯ß…k¥AËÛŸs¨ªM‘—fU§-úôG ‹•.T˜-xÇߨÃE³4Qqûꢞƒï^LHÐ} ¶iv;,{õµ¾Õ]´¬…Œ{Ÿ—iåÙ ë@Z›S¿ÙÞeëLÔº”·T¯kµš©zX®roµgP:Ûù®ì öFV²¹(f99Yk£\Ió·¼0)­¥°{å—êʸ' ôwõbŠ¡=«+ÏÛ!ç'ËNC™6Œ "etìgýÑ)2¸iÿùŘs}[¹ÐÔ°ÿóG "9ŠfëÞ«f®ªŽÖövO±KY»uå·^ÁZ¤Åì^R·0?Ú2G‘Ã@«‡Ñ»+ž° !¥ôÄ\e˜“I©ðÇÉüÑ=˜JMÏÁ²ZD67›Ø;XŽu„ªãŸÕ•\IÓLµxbï…âÅ®+аÀ›7ÒÁŸ€‹8(†»hÑ•ýs7¤Õؘ%0A¢w™7ÿƒŸsj†GøÍúÊUgpiÀ)è]tÇÉrIE«›kîZÀ]þ L$S‚„¿IS*J¥ð‰½‹ òÙ•¹_¢`þû,@CÊNlSñ˜m `œD¥6Ƥ-ýîÈMhÜÿœgÍä4Ð #8íÜ‚¨¢›nAú—è#lcEÍdøÙ+6—K+¦KT×Ò09lïwóV Ù…ñš¶ÀI~¿íjï÷ mPçßÚ÷~ÙS̲çTÖƒ<>yùþå&bì¼¶Qü¿zô»u=ïñ£>F½¸sçË/˜œ8cRî~­H±?D2RÃ*q-ôš32Š"ø"“¼ã‰ÉÍ]Ç¥|Îó¦˜8’?÷F­ål8Sd!ÍV×ö¯Ö«?pf_ˆÑaÁŸ“7FòìW|NµjÉdÞ¶ùûR§¨öçUøë5M ´Þ݉¯ÜöQ‡\0þø¤Ýú~DÞ(x\’ `þ½ßÒPíðI6œfŒ6C9áÿƒjA#ÄóÝÿåòR‘áäÿ+ :Y0ø'ÎL^Ÿ/­4€¶q©ßi3Õ=É8¦:&xÿ›«ŽdPïÈôxØÈP¿Àò9Üî¸aÛò_nÙ!zÙëmÔ–Ë¿Å3Ô ‹>ýU¹”û6ª=Oiðæÿ™*‰ù S{Åñ D8ÕûO:û|7DmÙjì£ÔÉòÚÍ Ï´þ®±þŽÉ,ø‘ÅR°„‡H©ts†ÏÊ®ØI»õ²+Ùɰ“ãå•„àÏ ö–)Xƒ71Q/ ¸Éš Ž›ìȭ̼,Bú+Wƒö~ä2ØdÄsÌ@qXZ}šeTu’•mJî¶CI­qœ’xëÃzy–~ì˜ßæ8P¯‚uFPDø*_•[V#™ZÔíÑ•L%ÿ {]¯!C#º¹È™Øá>”@ŸÔ‹·¬žj Ãæ4§cÞÿ‚±)µwúwÁ´ÓÑ”F¦L›Ùrû+…Ëö¬ÜË9‹>p \áçÞF½íd¯x ¹—J·a8&²Wñ&Âc¸çÃù‡·ê–¾€8 Íl‹ª¹¥ÖÖ¸_Û0M¹zwhý~NŠïP»oÞMÖ•r¥6^®X× ,ŸPÞ…¦b > ü–¹±®Ø¿ß;‰÷üz‡—½Sµ  NóÌáE{,§ÙVí‰Á'çš8zcš…í¸$qñbRg2ºÆ(…b+&Xˆ'}R:¿æTrð-¥0ÖJ£¨Ø“uû³tD‚IØ›Uë°ö¥¡üö¼ÜËg}Ù¢ëƒ/Çìø>ÑÏYߩ˜ç$:‡MC4¡±›c‰ÊÒViõ”ê¸íÏ9?{ùÙ “ BìËÎýf‡ªÜÏjÿû à?­ÿÿaŒ‘ÚPò/­ ²ëX‚üO'Ï£Ñà/'Oár%;+« nÓþÿ ædÞï™Ý@¾„9ûóë–($¥ÔJқɕ ÿ;³è¯[×0Ô@?VŒ;Z3I}täŠN»>œyi(B6`'5ú¹}®•Ç>‰)ÆÂl[KÎÉ™/Å9B‡Âd¥OjK¿ÿ‘uc—ñ«¨³œ·×KÓ)É}t¤w5«1ø£HÎp.Pw¾èsÏ—¯1Ñ{´Ñ˜ •^¨Ý×11öQE½Ü´ÔyjMüÃNº±\òžvŸ¯1‚¢•ÆA!I‚+Ãôá½›yN/¥å‘l>¼h‰ÏE,ù=Â5;–\ej‘EmØOòsåhZ‹^ùnßMAGª élP_VK*–ù«.¾ÞBð8jý gÛ¥¼C~†Ç0–ˆÿ\•-™rfM39˜ÆLÕ2¦çifM:†F…èýÖëÀc2I›½e”´ô^°ôÙ¢ÎõE§’EeÿHÊÿøÂ»(÷™Ò¡uNþÕ_iÉ1qk]½ iN†×ÖðQÌ&)çQ‡eŠŒ;Ø01$vNêya+èø_>âPu YÆÍþWݵ¹Í¼9r\r:GÁ¥.Ã×Íø×&tÅß…dc«Ü£°ÍÁÁ®Æý î çöo-»Þßš¶ÕáL¤º¦m=¡åtçÿó6ÀÚ2E áib߇>XÈHÎð¿&SÍÚ¡AÉ Öþµ©í/†Vׂ f¬¦ÿtOVäTÃìlk3¨åÕ0á)Ÿ³!‰T^^-‘LH³¼¾[Æ„ °e…)„™TE¦¤Wf¸!<±t Ì¶)Òø\N‰Å´‹¿A¬déÛ¼Ó0¯®:MÞ•n™2² ©1—zly#âõÛ"L6³€U k¤¶ùúÎÉç/Z”[&¦Î1Á&yŒš|1”Òé"Ìòªnà ߺÓ-V'géa™<sÄ´a”ßâªöàÉ~­G]š·ú+90_C&Ÿ¥q “#OT(ÈÌ«Í;D›ä”Em{_Y¤² ],}4"bbJ÷+þ»kÖa|3Õª(8“†ŒV ÁĬgoÌö»‹ƒ2¸ØžûxjúAˆ½íÔ#8œ§fv^H§«b÷Î Ú›œ%QsÕ”O²fˆ`Z/Ò ¼`âh‡T=¡’A½ÑÇ?y߇¥´÷hÓˆ³Löç“Zñ'ê¢/mN›Ïìaž h‚î›dlJ´v56Ùqn+IŸ0>·y˜3î8ëFø¼'{ÐáGÄDQöP,‹td7ÝðUõ mT¨.6YÇä—¡Ëäm-¦G_é’‡ž³á´Çnú[×B»Õ¬¼Z«cLÝtHZŠÛ œÊ 0 `ºæ Åú©5©A„V¦hëÇÃVOYÿrå«Z¢âüÂéß~‰¯rj®TH.êÍy¼Ôm$^}çýO¢ƒøO¢#g¯~Ú‹Y&Ôˆ7¿èÉ1<ˆdÌsÙn¦q„¡^ú­Ã»XäE(¸à˜ú®Í®\«=ÿ/4Œ=‚aM å?±&£â ®ê.7u<| €ú§Ë„ã˜ä?éÄÓÞû2¸!jhÜ’Ñ©>ª»£]»ðWx|õ·WhXŠÊÏ·Ž]}ž0Åúøô›œHkI´wQáXÊ ¿†« ÿgfƒG‘k5yMà‰ÏWd8&iíRéÆŠ„Z ‹3R¹iYÿ+á!¬ÌÙC¯Û€vxK ‹¹šöaEDês­`p}JJ°+ÈÆ,î¼â˜/´Ìýj^´±dNò…œ¬&Óän!Å¢ñ\×88i~SXáÂ+Õf ³ï+Ê´”s•¥XU“p`j[v3IÕ³O6Ãko4·~CòiÎa@9ñ0E4+ æ#"å»óµ`‡H/[Ë:)íŸ+²Ú}oç!ÔT_àšÑ¢¸ Y–5‘ÞJ¦Ë(ªžúùÕ7š“Ïã¡G£„àìN=®f–²BUñû,ÂÞÙg¤¬YûAH«x·c»µØ:~™7[Å¢F95&|M­G´¨­Á=ãélˆr×j-4âDÕܾ3O®^¥ŠáùDZ1Õ9ZWW)ƒ_= þâ|J°É(¨ 2×ÕuUû0óæ^›xoTV‡MaD&¦™Ûå=1÷58µƒ[ün€TÇÕ „E²Àº_½£å%ÅDFlÇ«gœbÏcf{•í">±JE°´,¢yâN ‘L·Å€E[PÑÙ¢ªÍPåØÞö)‹!d5çÆ³5„„éèf¡sñúBfl·¿xÉdd„®™¡ž®ÚÏåE÷Ê3ÙF—¹¼œ&†²ªìkæZùµ¹äbª"éÿGÁêþ(X| <ß[Öš÷W©¨¢ÓAh6…©ÅÃn2ËÓnà­Æ‹¥ÚdoºâýÜãLšíÿ‘Räel’#`’ à2ð ˜Ñ”7û§ÿ¿uQÕ"âñ^N^¡°0xIðO?SP ä×ô½ÌøS~¤-æ–†h¯ÒyçhM>AÇ-Ýùš-}ègïO¯6B9ÃGRæƒíÑ"û[Âú©á§]´¨»ß-¡{ª# uy-ûf,µ²HWY¹«#C¸°Å3†ÑÆø"Gþ²´//£Å0lHç­ÀÖ¡Á5R ¼ÜO‰ÅNŒ£ñ‡œÐÁÝ ²$¦¨¦G®R¶sC‚ºÉ…Ԛܜ }²±Rh¤pµOÊœŒž'6Ã=QD«êÖô=j9ˆ™Có«·úD7¿·Ê^ÖlLró-ü’tNmù"@80;ڇ_mŠÏ[¡=¨ü­ÚÍ"È¢Ú3HïÝvÏ|æ›Ú;„3ò8:gµP4ýÈV³eðeï‘k+»Ñù¦¨í8‚V\ƒÑÖµFWy0•-®Ùã¬êZH7ø oî•«7Á%ãŒe^/~ ,fzxÕÚ[žiŸ ôAñû¦kPüB¢Øö íŽý”Ó)  ¼ü~[Ûûòrü€`¢f×-H˜›äl-7>¿ýÏ.Xökš˜ÆT2ŽO(Ü–C]uØÎ‚kh½Ý~Ú™§ÃZßE*Ùùé\‘q¼¿Ð+ý ½ô«c¾:§cR½?âõkŒ¥ÔfÌ6{Úó,pŠ‡Ø›&ÑÿמW0q#‘™Nµì¬g¾t³y¾[%îËú£Ü‹i ý²M¬ìtYÎãJz‚É_š˜xÚ ²íйµt3‚)÷wMµQÉvÀ¬ÜVS±Ú1/㾉ø1ÿ“:DHnÍ$ƒÞGü—Øó¢€{û¿Lÿ¿ bDÍ›k™ C{-&þÂ?޳ütÆ/öuY03ÖYÓ=QÏ06È¡³z˜ú›g—ñ½ã_Þ,<·Ø¤Þ`àpá¿8ð›Ä¤lÄT-*zJÕWt+øæ"*VÖ• _i+ãÀ66ƒE  KLÌ l,‰›Û_¤0ðJzy÷MAðgmÄåWõnn@ A÷•ÿälÅ„ª¶\vJÉ#—€(y;(ÅÌî¾PŒKQÿ ñ“:ÝÀí“T«Že·‡¼_ ‘ž´NhF ½¡Ÿ9&Og‹ArÊE¶üXæùU-¬, ¶™Ù~©O¾ÿ8ÂãêÀš!%dÔbÖ (S÷ŽR}þ¥ºQ/M(ɺe`PY_Õƒh@¢“dÙD‡Z|aîÝ6"îI¾ÖvŒk—©*Wë¢Þ.<ôzMÕâ—YWûó—I6„MˆL—ÒŠ“ç¯5nÕlÚ¼´ ÿ" «D¿}>mù0‡¡3CwãÃMüæ) BçÑ0‘´nÅ R{é+Ñ@ëÍ#×ì¤Þér?ŒXLxâÐOŒÒŠæÏy¶G­wc‘ûÛ§+ÜVþ×ß(ÒL¬ªâ%‡•»¿ÈƒS0–l`r.%ɼ¨zï ^}0–K\¸d5³ þA/=ûR t¡Ìº³‡ Ý;Žndv2®ïÄ6}²¢Uš¨%±Má⚦ÝHG‡.þ³Åf³Õ• gæG%Q`D0Ì-€/ˆ×·Pe0–6w#0wo¥Àž oˆœ­ÿ|—ÿrÙ/wê ¹óëFø_¹¶ã§]ötj©à¿µå)AoúÏ ¡ÇWôOU!ï8Î2ÇÁo•±¦®2ëÄxâK4·9ÞÇÊ÷Í/¥x^ØxQÑ_:¾ÌTúE:-5ò)£±eH‘Ú‹÷ýå*ëaK¶p„zêÂsä°‰ó?ÑUß!H°{ŒM%|@ßä 2›‡ä¬ÞW_­X ¹„çÌå~Ù*˜ µ<@£IÜΑ¶‡³]©IJ.ù4]èíšË#† O”ŽdZŽEðµ.ŒíGét.Z›„iOný«.Ó>¤Ž¼¶¶õ—ØÐk!ÞÙTá gu¸6/Æ(Ì7t¦ßŒjwؤ®ŠÏ­soQçñØŸU»û£ÙvÚ•µƒ šã£v™‰çì€dÇG¼1<܉¹g+¼Uͦ-¡Ÿ,»wž é®.Út«Vèô+”-"òv¶õÔJ6w¾Õ"éN [6ºÚýqú‡lLF¿[}°ú\²‘2œíÔöWZ¾ïÇÙ©µ4C˜¿W¥šò¬è —sáÙŽµêú9i­»²öÅ8µ0v—y³®4›uF™ø3RH (ã†õ…ÁC‡ŽÅH†ÚêÔÖí0äí׳~RºJæ­Ü­1%\ÌÝ¥-JÖI;Do¯äIŠGGvÑÛw½êRý϶/&ŸÁÏÒ,!bÁ| ñ‹Ú3å¤'¿g«¹VäýB,.ù±ð'H_~^MüªÆ\®¿Rã E/àÜ´ïHpþòg:Ç UÄb€ÿéyýŸuÆ +íÿÓkýÇ«ä˜-&‡ó¾¶5ÿ–V®Î~»þÒ“òoðÎ_ÅæMþ?„AŠ‹`þ_›Nš~€CÆ£Ïb¶TO'š\r†Óô{œÌšIÄ,l^Ê·I³Ë2v º‡l+2…ü¬3&×îãYø •9b¥” £•{Šxœlì¡&'¯“ÿýë~ŽŒ,˜¯ìO³ÿ´½‚Sˆ§)§ùzàк !LJï‹!WÀé³z×r†Ò}õ‚”˜ùg©Ö‚ùzmë| ß»_è¤]éôšÕÓýU·Ò©Öbù C†]×ûàÃè§ÓJál¬ÞG<šq°ØB¼¾µ½2Þ½/ YFV;&íl&a4ýe.Q\“UÏ)kXƒï9ªnß_qΧ3Ǧ¾ÕªìèÏ´ØìóüQÓ¾µº*¥Ã6NäåoÁ¯rc-c~Øjíc£#ÿlƒ×amU·­­·ÐÆ4÷$µÏ³¯tmˆÚ®1dußÈ“ˆÂÀâS{n;#ßV&ÇÅê”áömL%DҿگɑzŸ2ý¶×úÜòRÛl²Ï.Ú¾;SľYÔ XCïkèhŠ©v³‡—ì ä Ÿ¬‡J5kZ„7 å/5æÚ¸m]ßnÌ¿NJsЏ'ÉP,1ò=q¾iþª°hÜwЈ|l™„ EgÈbÚ¥P¨Ê|ýg7w“gõZÍŸe‡”Í–Çíö‡ô–<ó[vn%ìÜæhňoÔú„É_ß)5qm*PÝË;Åx“¾$¿·å“Àv¿=£“I3þ+?G6ãDWc‹Àók ˜ŽDzRåÙɃÐï ÎBn0„û¯7ïaNœù?ÓéIS—+ðpÿ·@Ÿ¾ÊGŸŠLÙ˜RÄ´–Š7LòP;]4Áç 6¯Œpt€óR|Ƈ·ÏYíôÍr†s ÂP[æ‚÷ÐÑô300qæ_iyöê§pi”^¢ŒPè ½•ÖU.×½\ηQ¼XêdbÓØ6x—Ú¿òïéÜÝÓ¹‰ž•jT,,Ã[Ù¯ÉÔ’‡³”C$ò3¶6šðãÝ~12Ô=í3)³,•¤=äêÁve,Y9,#^¸Øº´®¯©Uò fv£þ}j”-2&#w:ðAB$éknzt.šG&.©£©±çðP© ”ùl«% EtS-—}jˆ7”ÝIõ™`”ôZʉÄL™Üžc[1¦‰þ=¥Cˆ4‰N`T/Þ²}êB—üoêqz ‡/DŒU­Ý‘ B¶V`‚«ót€Ø÷ÔÔ”8škÌif®¨#ï1¿GIâf7Mb¶yÇCšÌ†Ó¤í ¤ó±g] §¼Á?äÝBáÅñZ U\ŽsÊK-ÖPYœ(oe…Ó™Ayå•¡{[UÙt3\qöÞOVsCTé>›]®ÈhYyà7s[ŸzÑ~Éù¤MêmóÆ3£¸²‰Ô­ßÅH-C3egYô°&¾ B|õÅUÍä›×˜¹´Ý´’ÿºMœžåõ=ÿ¯öÕ¤¼68–æ!ÜÆ®%ÜhÆx‰·ÏGCÕዸê}˜õopûÂÙìySJÈø¾9&·–U&O¢Ó{¡ä6Ï`±ÑùÁœcóiô”ôáÔúÑ'Â`ADÅåû”@$VÊ×#*™@þ÷«ì¼ç«|ul±>‡È–ÿuôÏïéèŸý@}%uÉ^óçuüª&VÝ¿)‡ùB `!)¾ò aóB­ Öþ•–\Ú ‹}:Ö/¯¸Óßüê]µä!]h“žJ‰´~óE3—…jOz‚2’ÙúêmKö)Þ»,ÎuŽÅÅ ¾ÞZ:”%ë þÒÙ›n‘é&èZ¥U2lÿì06Lü ¹4%ys5iø²&¨½¬óé(~i9â^b_€¹‹’µñÔÞɘcÚ1ˆƒI䥦z¯ Ècì«‘,§¤[žaþá»ÒÙW…Y‚$åÌ-S>Õ›£‘ÖÆ‰|’gìM~XãsÑü–¬ jžÎ•@äKz†{rVu¸x„íjz‡…jî‰Y²y)CdáÌÄ…ö‚5uAöš}B(m+ª>iWªb-JýºåuYV¹eHÝ<†À[Þ·ÜÌXXn¶ÓÍÐ ?Ýϧ+QyY¥|=òn4—¥Jµr|ÚÏ=’F:„âX œ¯Þ&¬zÇj¨'•~i‹½!+Í™¶ J¡¿|½ôÙmëy¬±¨T×¶ÆÊÌ6˜pÁpy‰#öJ&Üiùúµ¨¨ddõÈÉ“o\’HÅaºùsž}èïí­óׇå=ý‡²„üÀ>Y6Çß6Ì/È3öW+ãNnS1¸ÐàËq³€ œb.Ÿöëõ-sæhs“¡8 ¡1zÝw< <ŧ©Â¹¦»éÒ-J¼¦uo0ÿsľ0Â]ïÚ!…ëªûÖ¤ôW‚¼ùÊ•naL:Æ‘´&3àÖÄó <Ú;’»V1rï—ñålÞÔî³Kìæ ¢MÐÇ8e{ÃÓ½Á«eþf>WªéuçY读ö2€Txÿ:¦.°èAœÈÎ$}v±Çþúϧ¨õ§Ã€xÿ7= ¸eZ»aÒ;®G£ÊG&L–ú[y\#Û¡"À´•L2àÃÞSrù cíöêæÉ’vE_ºÒé®!Í»¾ÈI™Éh#™¯8ÛRÌFw;SChUžn¦uLÿ:›3܃ýº¶»ßãûŸ¸¬)Ø"AˆßþLÔM†›¶€g -Ô"²a‡"IÆ'Ï`HŸ`Ó¯ÒIƒ¾erÐêãº0?+ „õ¦¯úåV] Ĉ7RX†<Ñ};•èÆ¤j¼¯a˜ût4)ˆ¤H@¡2-Ð)#×kìÔf³·áäI˜ô®ï—ýBÓÅdü×Ñts’úµ%Z3î)VŽ ]6äþ!'}-¯þ& î­÷,0Òg.33.¹ê±+…6ÐJ¡EÜthæ5ÂÍ®Y21iú•ñ›W}\d¹ú3±¿¾æútrö¢” aâÝ9“Bõó3 |Û>7îà^KDïmÅ,‰‹xÍ"XÄÑÁí%“ñåÍü#S›IÚEy;; ü'ÚÄPq„‰xÞ$þ³Øô¿½9þD;©Ïy¶ Ê4®Lˆ¡”¶!)o6€â¢¢åš,ž~~÷××»‰¯gFúˆÚ­‚pgÍ@˜ýB–çþ.²†µâ’4bÙÓ— YùGd£¶>^¹ Ò9ÜkRÀ}ïÿ§á>h¢ÁúïÀhHDÑu»êÑxô?µæÞ±ãIkx=>&»A†¢†H'áༀå§3`Ñš_µá_jã÷tÕë30Xq4俾¦G"¢•w ^—k©Ç{róþK[ÌÀ ‹¨íÂpÿåpŠ04ƒ¦õ„»Èßþ 7_h=˜wD7—„8)ŒŸ!>£ý#Ô"ˆ½_Gþ‘Þ %;YáÖT]Pü!UÚ­^¾)´²›˜ƒSîÍœc9~ly‚ñÝ‚ÇÏýãJÈóê¼ Ž4 )&ÓX$fŸÝ›ÇÛv•‹B~»­Ý×Ý%xâsÏâød@†²ëÆz¤x/5“—k«™ç¹FŽžs­²¢̼,FŸå¼ÔRêûº§76kÇç7,¢ *:]âà„œL ¤”þò›f>Vq$¨±à·-R­ï³Ûœ0Ç¿"È×9² ÚT²¥ÿ$6)YÌâWýAqµÈS&ðO׿b  à¨IUù‰Œbc¤åµ­ø¸Þd)²\m÷®NŸžºÔë^M,ƒ@þ¦nQ#°t47{m•|Ÿ."€ $ô¬*5Ë>=Ä|¹ÿýôǸÀÓýt ö|=ë îiQ—.u@ŸG„ûJt}##H¨Ã~?½2]h…<œïhØÔÒ‚fôuñ·Ù=lö|º=x1Ç€_Í›kÒoØ´·-ÏÝe@Ïõ ý±b±ÂãÕùþ×kGè’Þ|ZeßBV™<ÀböG®¿Oèñ –ׇ~ÆS°æÚ)d£Pk7 À/…¤›å¾c¦cS-õˆ_X9>®¬¬·€³ÂÃùÂzún\ñ ²ƒîTŸ¦{µÛxewúò°«;-S¢oe±Ç ° èèè ¿}ÿîQtûö¶½qÎÐéjKÐEnñ·ÙãÝÍŠ}(qÛœ˜ì$¬™içÒbÏcîh6´Lîx» looyXü6 M(<¨š€ƒ3ÖqÜÝïÇò½ûx^3‚§rÚßô.Âî! g}–²ÀÄRZ LO_w‡TKúß]«ˆ~ì ì8‡›´'6m¯ƒ÷Á·i¡á˜¸#2Ô?âøa++hwéžU·ÑÖs÷ieQcüîã/üër…½ò‘© n×¾¶÷ÏáàÊkש¡¢bâ¿ç5D££Ð1O7DÏÏVˆ~P¨Ï2>¬ÃÈÊŒÁ&ƒãîßœnÃÕɲÁ-Ýb:ìCv§ güB:@“ãBt—ÂÝÌ(›ÄË{J(,Ý7ØÁˆ$O\„üK‘”Ö\v°áŒ…´•.&5ì¶kh3¿‚þÜQÖºøt™œqš? þçÒ.)Éw$G˜pÿþpŸvÀ…èȵow¬?=R|W!aôF”ô¤ÖdçzQô~äwÄúú)O=þÆßMáVa½[Àþ?³—‚;↋yâÁ3cKsL ï-¾?POVNî-íOª®2TzâÊq†Ïs¥1gž¿öÆÃÏ#öW—•Rwæýn,â9ˆl&p‹üY OÐsíý¼»Õ @K 2^áÍU:ÄÒ£åøâÑGýÃn³±’p¢jk‰!¯¼§Ùjj'œõ6žV"Œ­îýDjwËî,ÜeŸ³þ!1ÕóØïÙ¬X^6úÒ,"=¤·$k¯ˆk[Õô ,ækÍA þÄ„3÷ÌKP¸¼ Q¸!Ï,©ÓäWþ{NŽŽ‹‹Tv£K “VFŸ/[?¿z¿\›t Ø)7{ËjœvØÍÅ%Í}5/—Ü9µF™èØçõ }„¦ß£5ÈjaòøâͲ Ë—-m;sa†ŒØfÄT"—Y1‹·r|­¬Rö¥ˆÎ7ýé¶þ†‚É~BλÈIkñœ‹ÚG-_—óû±àV^øØÆ`€Ý«-Céã¡ð¤êÇ9r:Ã왚†ÉìkƒÜÚõg"*Ìíøt¯t«½|ã®ëWŒ— wj(øgM:fÉã+—Nœ ¥FÕà=ᇟµ¥\0amh”È*ÔlA”R¤F7[#÷e·`ÂVÒ\([ÍͳU|ÅÄé¦cÚoÁÊÌy ­ÖçÙBDøèqé‡á‰Þ*ù½<°B²`†ì~ÝÑP¾ÿejV¶ýê¢ñŒwæn¦qR?Ù}èøXôÞºg„ªX¿Ñ»,¶Û}:!ÕÚ±š%—œ£9{„Óþ‰¿òcù%)Ñ»_s¦êÊládn9ÅcÙϪÐôûóœ> \j»…xaH‰[’¶G 4Ó[Ñ®ræï:]‡–¬Ã{¦Ê$ÌÞϻ߹w SºT"2æEøM6û2Œ,æqÍbª–S}¶!ÓûÁäŽ5Ý€`„°,¦êón@HaÈ1ê ˆÈÿå²§¦§âu|Ãöõ‡µÇ^Cæ;yOÏ×7Na g„ Vûº[øi;™âåmgL`Lœ ‘qëÄ͸S!“–LdG9¿†ÒHŒY+†2Ò>kÅ= Åâ6àð@Ínè•Q¥î·®[ õø'-2HZƒÇ7ÿ~†ù±Ã³ÂOIoÚ/æsÐn~ ½dQ›wSREöŸÚ/¬å.aÑTEI´Ðè¯h"Ûd£N ÎÓL+óÿZ«ÐÿRã#=gõ’G°#%:-B¼n]æ´D/®,žœ —„&[ *¶ â'Ú©/Æ”­²tB¨IýÏp?ÑÚ¢¼Ï”fÄPÊÏýX¦(Sî×ù:·¡¡g^‘!—Mµ~Ê$ jôiK—ä<µ [ߌ<Œß­ÆDçà{¿ˆ¬ºÂ•dä‰ÞhjõÁã0§c®u6 ÂMQÃé¬ 2¾BSt7êÚuÆ ©?4±7úy·EÜg&¢dQŸ°®å€†ádÖJÚC”£Ä2ã r¿ÓE'àZKçAHoÜDÙ“‘êfõN²Æ‡†;t¤Ÿ=ʉ1ç\ .0¾æšKt|'¸™`(«?5Qw©ë¸Á‡%TS¼|Ń1g›òØë¤”îïǼÉW¬¤Rn/Ï"§í¸m§JU T²î+»qE½! ñÞûð|$ž“¼°N…”}ýר ]ª–´WfAraèÚ(’-ú¤QõŒ4eð´•p ðV´€-Dèú‚Rñ7œ¤Q"1;üаÀvJÅA·ˆlŠˆçѲe3¦÷¼5ðJï5k­vœ¯Öïføf#´¡—°îGö §¦b©×DÅÏmbôVˆpÅÔÂÏå„Õü±v,l,~èŠÚôëñÈ„YÇbæk½Ý&_Š¡õsSônÀŠ÷åÇé?¯Ÿ•“øó¿Lþ6A&ÿó¼üÄý.¡éTú"…—½_ 7vÇö¥ÑTF´aÔîK¥ù‡®j6«Dr1‘Yß‚ Ñ0è¾x/¾óe—¹ô?dì`yŸd÷º›H}O-ô]\7‹‘týº嚢Úü¢žÿCŒË4¼‰›cNÝ>èJ¿uæðª¿ò7ÇP=S•0ìq“C?Ã"/‡)iHúk §iŽƂ_x=cTRM»f¯!i«Ià¥HÎå˜Ä¡ïN¹"d üc ÙJ¼~0Ä@4Ö(‘¬²ëbßßÿ‹ FûqkÕ­'Åy¬ËKUzÒ­ÙW¬PÅýÍHê…P ˜6H:ÍŸ(Á‰Åãk½ÿÃú9ÙЈôàrûœYå\.Ò@ϰL)ü‘´éÜLW""„_Ôñ#楑 PSÙ&s+ö&_åUx 2=y ÃÇ–ì6,DýPê[ÅUVÃg/×ÌqùFÀóû¾È‚½g\ØÝ^«ß·ßzÏßÚdðø’ô(°‡>ܶc @‡,•1&¿‚o'O-pB£S)­é¹P|Õ 6"ùü =µ‹SŽÍ5>¿®é¾™ÍÇ/1ö]®HSLE+‘¨ [&\_ôo¾ (ˬÔ$û}LošSDz¾GçuñÒKã=6…£Þå5“k›ága3½½Õ )¯—- ÄzGÞ]Ìw†‘Å¥Ë (1>ßôjI6XÖX¾ûjF#Œ„~Úöˆ}ec¾cçÑ É¡e'ù†h¯öë´®x.ñ yÒË[ì$à (s«—ø—’úF^¥…½óBÞhBØ:B›¿S]îÝ*‘ïݪu”—ißÝjáEUêf(}À?®ï.ý#Uƒ.ê¤$C¨N’L¥â9€Å8Ó'¬Ô'ýAo¢ƒ™Y#ŠN˜k¸sÛC ¸ÐÚŸ3”Ö,_T½>µhÉü”Çq~+^ÌàŽVwuùèÞl|»ÌZmèñ]Ðܱ3(fˆcìUã·Wÿ~ÞeÂçc—¼Åƒg‘‘á¹`(±‘ÌØë×ô·+ àO³6#ѳ8ç+u½ÂF  “BIÎmŽ7¶P[ùʾ;]V­¨4Ýí¤äú’/ÓyÛ…OÚGɉÓ7è`ˆQMÓ|{ð:0ÂÌ1ÔTT­‚7v)ë×Ü ŸyC¹[J è§Y°Î­âžÿÁÌÚ>a^JYÅV³éqËßÓ•?ÖÄ=è¢í˜7ð…12º­z’r‘ÉÄäHæäû˜²z7Æåè¯^û®²ŸÆæ®è'.œ7Ù?‡úø›<Õøìrdõ§FA¬)¬Æ¡¹>2ÉSZ‹ã¡§ÉasVþ™œXݱÆ!¯+ðþPvsò­ƒÏyñÄë«K¦ÙŸ>°!ްNÏ­¢,žÚÜÚyO=‘VII…W§U22Œ ‡h;ä û¡@1àèýÒ.¢}¯ÖäË0]—2}Ëcqxèçö7ø\뼺8@Rö¦YµZ¼x|Ÿ5u@Zíx·ê‚{/ø…ÜÌÀîöÜQîuÂØ‘{«?)i$ÀX ÝÖ¨SòÆu gæL)±ûÁ@$÷÷ ýh”ü골ƒÍQn¾‡Í#ÎQ>ÃÈ„›éóköÊ£þT¢Àô oñXž @yuœ èQ`þ~Q!¶[ZXõøSWGT V’ÌeØjõɕƙ«ÚÅ¥áw+ÞªO0¾3^ó±øÕã ž[ù1ÞíÀÛG mŒ˜šð˜YYï¡Ü¥˜Üª•êEêNŒÛó#¿£GCŒ¯>mÁQú}I•‰Ja¹Ê·tÙSH{G…xíÖtîT¡aoîûí 't^skv4ãíŸÓ~Þ_}°ý™E ÁÇŒðø(fG¾ï³dj¼j¶O¾SÐÅYnåP ¶~ƒJÜŠUÌ^Ï›,¶»®qv¦v¢‹¹‰Ä+ð쮞ü”þ–²§ëLâÀê¾nEeìj²Y¼ß´kçÍg|ë'ð‰3·¿ª7ÆWèkî.Üò…ÉówÞ€CÞ÷«ÙÙxH~Yõ¡ÆŠ­='z’7c»´ðÞtx?{~óQº>] RA:âmÃÖQNNQ9ûCg.Ú_ÞP¤ú ®ªu4ú+rxu´¤/UùuŒ°}¾$¯gÝý|äÇÛ˜O«ÂHvÚº^²]à/â‡9ítÇ®|=}eŸÜÚó@I.dúÞ—~Å*öK$Ñt¿Õ–© o¯×!¿PÁóÇãÖ)×þ6_÷4^[£‚÷"æÂëþÓVQ‡¬]›-MŒžf?ñ,SÉN<Ñ^ôo…oc ÙoWÈTøÛ1§6¢a5¤+U±>¬¹ÊXCòû‘ŽªKM݋ȰJQfí½Ç/”Y YQ¢ð}’#YàHfFx õÂkØ´.+°'o~^n•îpÈæˆ_ è»rÆNf66hžßñ Û}opËçòÙþüRîŸÆ£UˆÃúiFp\gTI|˜ԛÁû±£#ÿWÜOO¯#¡Ðôís­#à$Þáyúãhéè*c‚þéå&õl ÞÔaÖøxZ(þpÕ ¸ŸB•bI°«˜ÓÀ°\sÇ-NÞ³^·Ì9ñ–19v63<Š" R"J‡ Šˆ€J·HI+H·Hw ‚ ˆ€„tÒÝ5¤ˆ0tÏ Ý14 ñ»}žÇ'>ñÝû}÷qü޽çð¼c­u¯u®ó<¯kͽF7ŽL(ÝŒ ˆOzN‹½ÆŽuN+“¤Q;âìº=m™ ø5.'+R‡ƒø¯º'Z¾©Öœ%§é;â™ËÚ`„Þ°Š}qdiåÞbs¥¯û2™9¿Í‰O<Ü·òáËçÁ$¤ F_Î@÷~ z3„÷ÁAt³ÛîSZ6žxÙ±Ïõ‰Ó+nâîLz/j›±ÒÚó£Üf#ñüh´PRœ”fÕ­°¤Ù0¹±F°®[Åç É ¿Êp Iáq>ÃÄ«îd‚šÐQ’P‘Ÿ8퀢NíÅâ¡ØÇ›;Í6'‡â [ÞÍ]ku4£|ô Ä „¡öݰ®Q×ÞúŒ¦X{íšòÒØ³fA©ÞÅͰ®†@<ÐWÎñÚ%·y–Y$„~\Çz1å0jñšŠx¡w^¥woj) Ue>Þpz9¹›'É?Þ_Îï/ ´¹ÃXÒìóÜ&æÍ&-.¼³©ÚkV7ØNcÚEjAeì=ÐëX OìÍq§÷å—bõ„„… †WjЉyûm,Þû¤™ØÛÅÍ-çô26©.ã8:¹Bï¼_Í=aÕp*Mè†Vêò£àë(é!Œk8¸5†%5˜ûm@Kóô&2åpF}¸¿”,¬žlÿ³òõä zohùiÌg*~¯À½è~öñ·ȱõI>”cƒì‹5óo#¼;Ÿ±Ñ棑þˆoøg¿ÓÄžxwí.m‡âëN^¢Ô+Cîúœý&Ãóm‰áÞÐVL.T_©– @ mÃÖœ,Îx)¼h͸Ö„9=²ŽÎ½GÕ׺/t™þ‘¥ÕÕÔBÅŸ¥ƒg71›6'xj•ö¾ecc3å˜e,†ÓÊc¶g¾OíÔ_Ÿb3<¡{…D§@O˜´×è·~fØSÓ‡DÙTÿî[ž]ÃzV‹á]Þu®»ñËbN®Ò;¶Uð±Á™£QM°ÍR<vÃûê4— 7˜ûb¸- =|¼¾oÈÅd0.}s!áPhËýåóÇ%‡ÏëÇ<ÌWº£ãûÛú—&è½O\ììç»'àpm‘ž¹Í­)eŠ2]p„{„±wqFB‘Æ>÷Ì ‰é-Ýïâï/í¿Ìy|01}º»Ÿ¬X–½†ð>²QQÉ?9¶ÝŒî"¬ÛçêÿÙO4ì¬Øˆ\:™kY?yE$>,îÿ®þ`—Ç&Û™íí¹¹ù©kžG¶Œ7Ý6“éØÝj]2vd;Qäv8³r¥Ò;Ò eop`-ƒøY† C^½n~ƒÎIÝ~Ю­'â Ûƥ㵷stié‘ãOËSÔN·ûOº»…âœ5_ª&nœgIŸº(Uebz¯T;µ^.jwl³³üe…ÔÈKïíµ¹³óüxye¬ö¨mâIïíqÚ€Þß–J%ì-¯ÜöŸi^ÚL]¿eüP;ˆi+>YcýzÕÊŠì"v×]%6V:ŽZÇ…L똾˕b“Š€.žù¼²\ôµ¸k?ßTxj /.ŽÇßçÏ’#|JÏÍíèŸÉ>@Ä‹«†††®ìÖœôŽºÙÅ:3l£Oæçk/ƒ¢Îq,<V% oiiÙîØ½U—š Í•OÌ£G‚½]6W`ý3ɵ ûÃñÄ;—OSjÀëã\P”WÃÄš³«=ê~oÂN÷xFÕWK5Jý·Y­f£¡ôËd€Ø$t¯¡€ÖàÕ¸œêªžfîo·íz{i7hÖë&ž:8ìf&7¤³¤®ËΚ!L³“vŽtÓIo—ç¹b°yÉÙK67Ïo… ÷l2ôB¡(zërzo¾žŽ StænÇB·áš"ýÉ’aºva “ºfù˜X¼›©9'ˆbñ EzS1âk:Ú«ÉÉÉôwS»½O÷‰wy“Š®`Veï}Éä>™žžŽMZIN]9ð·É/«@ÂÖ¸»¯-Î*L4)¦”;µ=ÇüBÂ#fõ³h¸C(–ò?û™˜5g4IÏß/q’êÇœ¼ÚHžï~ÌÁƒ¹ÿ)aëÙæó}Î*‹Äu›Ç˜¾]N€À÷æÁDÞ<æ:}`ŒÆÉæ‡-»¶ïµž­(}ýhk®Ã–ÁëìG.·¹Õ)Œæ¯)ŽöÖ`8õ %%‘ÃüŸÊ×Äl}ÿ‰³çì‚KUuuò”ùb½žXc¦h3ùãÎT;êݯ¸t?NDñ)šMn¢0{éûh#××ñhÞÀiÏž²ììwÌ>9avÌ—Áž9»„w,Ê_úü{ñŸ ëþ8ýrs?¦žcèlw}ÇOfž¨5sˆÐ¶óCÀoöxèŽ]NHR–Ö£? yBÆ®„ +”Rc3Y­Ü®6ج¨†&é¦`Ocã<™اãT‹Þú¶V Vï9M$U:•œ,5ˆF£Ë­Nª©ÄSDt¹ƒw‹%VålÕôÂ÷?¢­o0g(} 2)LÄôK\v+ÑšDk æ©nƒ0ÛL˜Ùx£œ‚¾%ÁsNlJµ¦oÐAÕ D Û±*_5¿!ß×»õÙ½Euò,¡‹ªí—ü9ƒá1Œ\ú­ÜzãO‰êS‡ÀT<äRßÿÜnÚ;Ù3àtÝö!ãé¬hƒEØ_Y·yUñåvŠÔb FÏWt3×7uÁßúPVíÖüÝ«T=em®…㔘…Ú¢@_¾mäuG˜põítâø[•Ï™ø¨0"|ÏÐ}~tÊÁFòXßmnbj¤–',ØÊAаªäŸ­ïÌ J ÔÑhØS8Z&€Nå©O4i°˜úæºeXÿNÎT‘'oX¢,é4÷ºÂúÚ±º!Y£=t|Yš¨ùLˆ™3/?ë«bFäöjèGÿlÄŸR™"þ5àÒÿ¯ÜZ¿ìþÈ)/iéÀ—íiªxà•[2‘Íß¡ƒÆï$ëRÀH¶©ŒO?æt0k:FW»[ ¡!¨…†D5½Â§šwô\­†f¢ÊKçP6 @èCK]©Ú£k{p]Á¯‰I•SÆ@ú'Lww/¥‡õ•´±Z˜t˜¸éÂqñ¹ÅÜ›æ«ÝׇŽ#4ôúlL"%e:è*óYÙ_ØQß!XÉNŸ E†„~uÉûD…7k˜ÀëÇäv–È“äq<Í¢…¹p¦äÆ›áG)Í*  ~â6ãõ) ÏtXƺä¾zkÑk…ìÕïjo84Íû–ÓÃj—lNóëºIêëâ—ðãã…Ük'ÎG¦ìA’‘q‡£ |Z°ºeðóTâBV—A«Ê»w?®†gÿéÚPí O¡Z—ÞWòºWMn¨Ûö^0Ä»ns7~X| ºÛ|©A^|ɵvÓR¹¦>WöæV§°•‡ŽM5’[9°`×ñU“QϽ´¥0£xØ¡ ɧ£±à›bb!2Ž@¼¡»qEçn®KÞ-½FXÊ—Q~ LîÆhÔ‘ »]æÎU¡¶fŽTggõ¬ë–ç˜Óéuè<ð¢8R}©lCNÐøÊpu4SOô½ý&ô¾Rç•2)ñ1n½×ö<Й±HmH^T&4Ø&h 3ë§YIbAUë‡$V½Üšì'½É¤žm·þ¨ß£b<ø¥±ìp¼Ð{¯IΕ¸nF™‰òP˜¿çM7׆¾Ã#«#ù› 8Ï" ʲó|/äŽú„ÎÀ»gÅÆOî37S K­>‹$ „œÜbÚ³©è.|{;D͘FYr:+ÚW·ëÇ}îKÚÉî¸O~ôE Þ/#J,¾87c¾JX[ŸQ“1õzèíî}xIÕ°àZO Bv˜ž¿W¢¸¨¿^Úý¬ßbÚµ§.Õ$~ƒL\y2¥æ6ZRµœ}ÒibóëèÃ+‘›Oú·]h™+ç„êM>×;zÌ;tì{JíÝSq×åXGkï·)hÓ×j÷¬Ô‡š»/ë°»/tæšFBŸY4»-ZiÀ-¬ÆVX-»{Ú•h]LÕþî’nà‘( /üÔÛ`=>¾^SÒä¡"÷+ÑŸ«Ð=ÚŸï0-ÚݼiBdår‡¡ÍNoø³[XíP¾ŽC'qÿxEK. Ê[€ZM!ßek8Rþ&Å|=äÍ»Çì¥6áFVÆèˆeV!‚Ê{Èò§´\ù(¥°g]ROÓ¸{¼šw3j ãÙÒúXŒCt«_G‰—M¬:|àBcËKǶ8*rÜüþi”þ ”ž±H?Îo¬‚€­\u¸Ìß7¤™a¢Ì7P™È‹ÝŽ ‚ÖË7xfô›²Wqnj9ÝQ‰Œ²ÖÐ2?Bðc8'½¸ZÃÖlC[é­ÚO?cJ„Ó¦Gþà'ÙàêO’ñ)u“J; nJŽ)Óßüd®a]vk?àäªý;2„ÑäĦ€[Yû¥-ËYkçl¿.^ÿ ­.ÊÓ¹7Xì%€$ºgpV[燗R?ÏlÏ"ÅÚ¯nÝÃPYðTˆd¼ƒD}^:< âgý×à ØÌê{UFk÷¨šiƒ¹¾”8GF@ UsëÕ°R‹Ž|‹ò% «>÷Îk«±‘õ:ÌgÞÇ ¸µãBZ\{…Ñz'µn¿7¨yhoÐüZ­õ@Aâ-ðl¡ƒ›Jt»ËÒ{nE¥I°ÝÃ5ísK0BìºÍçÉ€Žº*›%Ï´b@kœxí|¡½ö– ›ÛòP×ýX´^IÂô;bfŠ‚sM‚$©Mc‚Ð6ë '7êt…TUÂŒ^ö…-»L†‰C…½Ê.Nïbáto$ü¶2Lè•ÇØÝZzehûÈäÄ6ÊÓËFOdè_݇_Ô¹'o Û¸TÎ9kÙ¢@DòMß›Ë;nkÔ>üô¤¯-©y¤ÀÊR±%>LRQ¦ï&G¢‹­„Oºè†¦º¬VÖÏë],´­ùZVšp06Êu@€í«Ï4_½nØ‹–¤Ø¾¼W'{×,¹™²æff#ûVÆíü[¦÷ÛifôLqB^e‹‚y´"Ø5„ï:€ÉŸû¾ Ð ½Žì¡épª)ãæ¤—³C8iR…Ó ;ÅßáJ¡MÒRì—^±Œ7Q£°š ¶áù,xÙqµÜ–êXEÐÜ\‘ëíØ ŽÝ¾Umí”û &€àÓ•5zÒ«ë½Ya6¬£±Tû̹f¥Ì Ƥô8ßÁvòB`™‰käÜÝ6¬âÓ㬷‰‘W¿X+N܉Àjàü%A¬>h4;ŒnIáê­üˆ°“-_Ÿ÷o5pTð~·#?õŸœE Æk1üËhúÂiŸ4a¯—iZÆGU„S-ðÁ×(Tk¨+õ¼÷'Øù¶‹sâ]wÄmÍÓÜêE”cl™¦½:¸]±ÚVE¸ßÒøUÏ Ú1åRU_£;öÎëg¹é õ—Z¢OŸ‘úÒX|þz{6×uf¦‚wež°•ç« ]OÎí:€žq ÄûÁOr¤ó6ó{5Òí—øÄƒä¼›7B¼Ï*Àšç{²ß= í~û'ÄL‚çÿa”Ž»ïPÿU«zgþ3)ÖóϨ~æFòBÿ$¦!==EÂíS.÷W0¤–cX^=vÏJBä'j•˜”õpfŸ~nô6á7×ðK[•Àbë_dÝ(‰‘²úï‡ÿQíãà´²Å×~Ѫ°ìÑéß¾ ð»y¨Öú^‚|„ŸÒ¶v´S\iPÅpú›˜nô%aÄô±— œÌˆ–á«>€-rdVÕ™®¼s^ÛD½´€¬{_ýtx­Øæ\s¶š޲~õL5ÕýuÝû‹ÞºŒ¦Læl¸ì~·©@1`QÔmO&Fýˆf0žÑ¯çŽ®>å0¡»ú×§DÂk°ÍC×ÕNUVÜîäQàt¢é¯M¬Ù»­,Õ}4X'“¶RìkâÆš@9À“Ú²ŸþDØfTá‘*íoø‡ü…@~üe´™9ÀxTÅ9H"dRϯú‹4ÎM¹¨ÿHÉÎ]e­éhäÛ„#ÏÛ¾ça††Õ†eµz‰V6p±y@­éw4ÄÞXøö»¶#ü®™ÔË$-ù‡ÿ)H½ G[âI¼8À1ø_¥.t*\ºŒ¿bçìôm‹,ùB9LÃç5ÉŽPß\f+¾vICD£oQu €ÖCä§ø¯ãq7éOžB6£É‘E<âc:—¬ŒÁúæÎ¸èôÓY¨Æ¥Õî‚wÓØ›m¯“vÏŒËÔs¥ -foõPÀݹãs1nûЙuNú©ø&eñÔÜ"É[7ƒ»ÖÚ¾^ÎÿvIpDyw]þPÁ‘þ4Âäû.5H<4hù=Ç ĵͨŠ`Ù0ŠÔk¿_ßv3orwß9ž·sGƒ%ÎQ¶™Váq¯£í2ÑûÌk­d¼+’w ÒÇéçfn_ó1¨Óšþ2£Ÿ¡Nå_Ëx£™õCóm¡qvàáѼ™ $¡™–jòi†ý· lé½—o5*à’9°Iænïá~bÛ`×8÷_¤â$Rù9}%ä‘㩜Öþ*øÀ¬û›³OßàÛ~DòWuImC·‰ý"u´¹-VEúeÑ: ½©pC}MFêš7õÏòÈÏÛÌÊ5þŸ²öZÕî{s/GH_ôÆü“Ð)ÇœûúÅ þ-üJŠóLCÍ[)ÂÍ/‹-6W©S)³ æ7ó®Gdd4Æ«Ñ×»,™ä awÉÛn~I¬PÙUt#î~¦!à½pkðbʧ€dØ%¯œD^e*áµ\Ùfrþö¹~ïæ–ïºç®Œ¸¨T7Þ›747MwÔ6—جî`3õ[½IÐú<ÛT§nË©pxdW’¨âGrdUG*„:¾û gG3‹ßñÛâxšØËɨO<ñ–Š~7·ý;šeS~€NwÀ¨èeZÃùCŠ@€9„C±/àÑÆyúæ'¥ †ì«Zð_)ï¥q ;¯åïÙxÝ¿ç<;tÐø’…\Ž¡ÑiBüWrWþŸJ‰„ Ž™]Žþ6åìQÙ^öÍHZfyîÆJ¬j$܇‡y‹\–/i¢”Þ‰®lùÕxà0˜žY­ÛUÙL"Ö&f¶dìðgvbã£K^z)Íy^^i{qù…D’¡žÙ­ˆ§ š2ŒòâÞ;J¤^éVÿ^DžÔOÞôx¾óÝ^RΪ)Rè· @¾Ú‘âý¤D˜g7ÙDþšºxvÑ?š¯Js{pTí®açèSå6¿?ÜUàØh’+ãcÒ¯®£kÍ¡Í÷|Zº²¾2``dÒÃŤñ錨€ÁKºQ½1cMõªà©¿¯cêw§(*ލû¸Yã( Ô"²gù¸Ì[uÏÖ~ ìÈrÕ:ѽ•Ç—û&{Ò·{¤ñ¯›êލ¿(às=®i˜fWú@‚¨†HÅ|þ¼wç‹ýBflüïþ¡=ŠXVÕæ·øª•àÂpÿÿÎ…Â=Ë5¡µUøCá”>S€ÿJžÃŽ"§©¸ycèô¢Ý¾ÿ,p*ê>ÜÀ& iêö~3º2Š@7 #³É@ óÊü,g¼I\{f“›Ç/›™[æ•(WÙ7Æc®Lak=°Û†®÷JëÛD’tð“i'Röó7]èxœ&zŠ—¦ÞÜÒ—+®~Îy˜ë³Mý·pÃíŸT=ؼs9%ÿ¦fÕ+@”õ›iùlù,^Wþtò,¹»\¥ÀžÑ#}µ@Ú§É÷mجØ/àwóÙƒ‰¹áfømÍÁAc÷šŠ()fØ+LÆ¿yÆ_Ýu˜¯å3Z¸Ý½·,_!Þ…Ý ÄŸìýà îâ¸óÓÔ䯩ÌÒÎYü >tˆU©¼‹ËöøÐÕÆ$ø·íÚ=ƒ—‡y6¸¿ØÁ÷ ïL±½Qfh—á[*¼MðE‹“ÀæèµHªËK›´7£eEr¶m/ûJK³eÌúc¨C¶Üסçb ð @?h&:éü½7sÅ&†øU‘“¾\µâ›öý[ºà¨KðïÃ|È·ý‰âoy‘PˆZ[Î/à¤!‚é7›²C0ëµ¼Èúê19œÒNynÀQÍ›¶žNue׎¦gdïËy^û=ýEi²ú; á´¿£ööE¹†¿œýûa²Yäïéïß]Ãm{pžî§s¿zñŸ¦Õë’r‰¡ eVöE¡®¾g³%4ck“ot}Æá¤ÏÀ̽«Ï'œlE7Qs‘”ÌIOå÷}/л8b¥™òHP _óˆb$Š[åÆþõ iБ5A+öÔŽË(lQåÞ^ç¸ 8¬­bîŒûq÷LòcTRÎè“N?‰©Ñ{C]Ì=?V1Ú° ÖYÖ¾'F¢Ì /ß<"Ô" ¾·÷>énè“,¦½W/Ä80Y8™½/À}FŒ*7®¶&GØSkÜÏk ò !Ë5ýˆíoX¼õ¨ütKæ¢PýaçͽÎÀ¿„µ¬dÈNߘoˆW—" Ú ;%ÊjÁ?‡_>K躗û^ƒgJÊ#ëíõ+¥*­åø½ò ½è(BÍ ïy÷”‚ÊÛ g½Žäú fpèy?ä‹eËÚûü¿ax wWÕ±šrÉúe5/×°¼ŠÌòí^I‡‹2Œ,’¨`¨…Ë"«z¼suÿféåòÞ`ÿ_˜Äû7À{—®¥ý=Þ_ÇéžÉe´¼çSTYL®[Õ?~væhY‘~ƒ–³Ê'‘ø'© 6ÔG[ñ°ÐöK´!Ð’6ðãYˆl4cNóëµ{hs›Äå‘ãd{—ˆg¨ñhÎ=ìS%Qc :è2¦ù”ù)Ö k;vå þ5õ?c_€}¸‚äåôÊVù 2öXn9‚7]ïSÛÊšò)=.Z£ï˜ˆƒˆ/I(½þÜ¢_ð¿<Ìk{S[•‰ Ä9nU ™é/­¸1Ë-¹£}‘irhå«d[s|Ëî1Ó±JäË«j[z³7n‰G;°qþ@-´Ga¤»Ÿ{¨kMánÿÇy|Ÿ/&ìyþ—èM£ R…b9ï‘h_Zw t©ÃÜ3ê6öÈÎjGè˜@oÑðóÔø= •-ŠƒÆŸsÎ¨Ò c è|¨ñ5©%°³ ¯ºš²Nµìjyâý¦p%p•ó Nùú¯YOàÙž þ7lýO‹mo®Î¼eõA¨  CúYÙQþ3¿ÙÍŒ d½na[²\#>W~û•î¿ÉܨWœ€;ò»š4þŠ-uòOý‰Df{ÔÁ?%ÒÛc8ˆçÿË(­q‡\°ñæ%ì¿9þYd¿/™PbÏ vÔÁ³wÿÆL îxp”þº~Á<¦¦W€y3™ñ‹Ÿ ±}òÒÐáñúÉX‘½Z˜9ƒ‹úm&"åÛt×2(Z9dÍ©z¿=~mgÎ÷­3põŸ¦RYrb9,þŠÍ—¥§ÒÙ|zf„x=¸¿–FÔïÇà=Ÿå–|nÂF¨+Rߥ»ˆ Ï6…A.üá40Ѝvà„èLLµv ‘æÛ›…¼KÆ«S\úÏÞá‚qP]°Á(²]÷æQ‚ýÉ쟨üËŒ–ß ØÙöQ0CÌ9à.þÍ䑋˲"€µOÍc4þe>`FÞê IÁV‹Ò‚Â4Ý…{^ºÞaYݪ€ûOIw1äúj´[Ý^—Ïï¹Ï¾X‡ ¿}áLy9EyÿÒìÒÒáLè:_ý7iQÒj´O²+ýiÇÆ¾ÕAý?°ãîURIÀ ^«·Îª{»T4²Ñ ³$ªüVÌGnx4gżÚu/ N›Õ¸Í‹ÆÕæ[Y‹Ú!»PNÎÌAË ß$£ sŽÆ,/O6hzVˆzß÷œk´µ”†ìÝ¢£lÓ`hî®ã ß>|R)þ0©M€<æîÅç®ES]J­ŒÓ£–9gq¹éwƒžrÄØã™HCéÍy>õ îš6A*3Ã[Tû­>ób©wbÓPCSA’ÁVº5Êš^½wS¸ÐIp醿ÙÂxW×Ýuyæ¯)cÏÎ{É®¢¾ZÀ“[x.ÕÊßß=Ç‹»O/ÄêU¤îˆ{Úy£%ÖîÎåüZÌrÔZ^cªqé§ÞßgL¤Üm¸;—º:µ™È%LÍL7œÅ‚3‹¤«ûB{ÃÕö4]“QKrµG½jà˜¨Ž‡õ"<.ðìõû! 0 ùæÅ ‡kF›ÅÜŒw¯Èòö9ž/pƒðÚè]d¬ï[ZÀ*ÀSmWGŸ:ãÐ-±¯{~Cbbôñ¤ë¨‘kÎZPŠˆbŒ²:É}M+ž˜¬"Ï×c!QPpà"h1 JÜ#yLg¦Â¿òÖtõ';Õc7æ5ˆ¼×Ó™ˆã*wi bMB·Ú¦?»…îX¼[ÿeì÷oÈØ¹³õŸY˜x¾ÓïÇ”ãw zõ[â\HûŸ–Á™¥þqÇ¿÷3/n‚£KíýhdÏ¿ø»‡~uõqhf»ÒÙ÷_£Å¹ÙžP¤¶[™·î³­ r“‡bÀÝC”seœì´Q댦Vo~«S•LÂê6VV Ye·ß#Š'Á|áðÃ8ÙEg$™õKžjÝh¤ÓsXö7u êúëQ%/½z”çzÉà¥6Þ7ä}MJÏGÿfq¿X;ÒXÛÅ·F2DÑ;§`E¹Öf›|ÆO½Ü–ònV:ú‡nµð0]m"5ƒóã œÿuEôùýû#Ê×N%7ô…¬§ Oø©K¥ ši§õk sZõ¬ùËK>Ó½UFv…ßÝj5˜MçH’a_Mcdà9_ ñoµõÿ5CYéú:Îrܽ`Ú}«[ v˜r:J=D½9–ì¥ñï‚O~«ó‚]À™þþ% K°À2ÓÃA"@á‡G­!ó©ÖŠÎØ7Ý›'Õë”ü¬ŠF¯{fœk8o–Ê‘›Ø}™Lª»–ŠT|9^uG S?­á Ê\ÖÎX8¼Ò¿©^"º àÿç¹á_¾Z$; We±t8CŒ*‰µ'êÖŸ=âú+J–¤ |Jºà•Kähø7—þ~"ûŸýÄ4àÿð…#øñá²f…¨ÍOz%Ú\è ñŸ¾ØñdâtoîâíM/réó¿@ìèOèjÒ¯ø‹¿IÁ“pļ`ºÓ,òo¼e mÈbâ^{ §ý»}ç•V°3Û„{¦Ò»²T~6iýëW¯Ä»c“¿\½Õ3#4{Œt¬C F*2ÉFÆØ¼‘K_+ZÂ$„zo^‹Éï›JÒ¤˜a_·ãVj6ÑO²>ê\¼í!ZD,ˆ681h a –mÁ¦pµ™î؆êj3a)šU$.¤ÏX­›Ó×…•:Ã>=âêŒ>öj˜hFaî–s;­s‡:CÖ•˜m/èÚ°Ÿ~‘¶B¬$3f{·NîíUŒWÁ־ܲˆ³É^ðÅì`p^©re·¹eµ pFÓ®#&&ÊhÜ݃n닾p˜ hæ 3Œ%uËS{ 'w“T"¼[­–°@ ¬Ïtþ+0‹&—¼I/RN¼²µÐ9Èù)Ьªºz“_MS ƒCÀíêƒÁ¹5óò54ékLÓ T¢»ƒ÷”?+@8z+NN_¿ê†Ãá¯#f÷‡ê¬Ç*µr¼ö=2ÆÂr?z{°[‹ôUŽŽT`^ÕJÁ¼i½§TO·fqN|TY·O¬ éYí¦t¦+-’(†ðÈ xÒÙe6€Û¾Òú™ »ÓxbÞ×êìZ«F\±Z_GUòd³Šíw¡N¨½®Ñ]›½-ßO§`ÿRu|²7?ïU>FJÒ»ç1ίgÝ|Üv99¡GtNý^ñã×ÅÇ&¿ ЊÓTš·!àž ·Ü¤ÄÅ“½Ðó{ÎzmzÜ{è°@>÷Æ+×M+­*ÒLÖwÜ>¿2݈ÛÛ°8°C!re¹u`wwt{D]üÞƒº•€³EË Õ™¬$kÂ<Ûâ‘uÔÑY .Ø$ÜkSÂrH/‡W?BêïBêA=ÁñÎà­ˆäL/¹V5T7 &úäK dÅËÜ¥Äw¬¥Ä˨· ¬q{Ýë¶›ëš\ŠäÝûªHë666nå‹]ÅÅ ~6h›íѸdàYùµ¬ ­•§4hUbžŠrü@Â×å·?ç›)Ò‚™RÑðB?ú‚@œ(«ˆF)ƒ{ðJ‰xÜž-\hO¶ ƒÂfök@[Ì–“ãwßÖôtËÕš£BË‘¶˜MZ©Ê.à÷–ùÏ sÛÚÚvÝtP†Pz(&B{]×lËu‰K¦þìŵñŒZ\p‹ŒÃµ1×F߯C?ÞX—¬¿™Šå½‡ûÛž‚>±û§Ýåë6›LV®ÝV”û0é¾Ê ¤¨ ´Úe[ÃÄïþëýÏ_ú±a¦§íóÁk"¨µÛ£—•>±^îyj®u/Û©g¬˜â<‡ÕpŸ ¥ïqyÒ’íøöž%úÎG&üVx›øGª9ç¯òÏÈ÷7$„8·žôš7ˆ‹?ÿ°ÏÇ<¶Gl±Ä‡:±ÞCÂPãÖQ GHÈB=ºKîZ¯Ww$½:|­×çn8ïºÛæ•›§5H.ñwªz2eQ»Ò—h”®›!‚´-_˜9 óŠ´zE9³UR †XŸ€Ýß2U ~+‰¹¨*Pp‘½ž ’GK´ ¹ÇjX`´¶\ Ð-H§Ódcu@V@.W|O¼Áé‹FÔ´&šââ“ãJ¦ dvzÛI à½äÒŒùÎ1mÔAÔÄ®ª‚‰c5v>EÑ5ãu?÷\Ù5­z_÷ïÚùrmÊDÇ®øO•µ’59—=‰Œ²ãgFŒ<¯îÔT¼’;íCŠÀSúßïe1‹t-¥ß“¤ü¡¸BÑFÁó4j¥sµLj%Å*¶¶cÞæ›µ¬ÖñðóÄŒ•4™åMóȦÝ4NEÍJmèð"súñ`/'Òêyߦîâµ]O¸p€Ëãg(ÓúI”QiõIÊ”ã™LôáÃZ½o‡MŽlýë¨L|3oˬû‹IkÖ†îÞáQ=|æå§ÊRîÜ4n?™‰­„Pky+Ô—™Ï,väæ!ñâ’¯ëW‡áš  !ÑÚê•èüUåz2-œòuŽô4Ó&ñ7ßã]•E½«§«Ië¿=¥m‚¾¨k×éOkd¦8áÍØ¼žÙ´®YeáY«I)’kO¯¥s‹U4,™ÕxZÙËz$ÒV¿:iº¡ÒzÍñÖ©§rô6Íÿ²Ðã+".wxxOŠëË«WÔºÍÖG‚6íÊ…WÞмf'òßo_~þ>y(âëÔÇö*»ÐwÛvv ©rðòÍ'Ë·Ïm.jØä¨? sâ¤Uhm!ܹò^Yfì9i&œ«lª{yÍsùaãÕ"’‘󖸚 ]ç*Ι`ëœâ†¾¼{¨ûÞy8[s>m»„zù6×G¯—Ÿ+–w,AJlf?úhÛÕŽ˜©9ØðyJ, 51èþR½(âçæ.Ln×[0TåD’$5=4—óMÍu/TlHÑqʼnƒÇ_ãÒQÃa»Ûþ½¶…ƒì½ Mo'ìa¬bmâZ¬*¬ìUëóÖçÆ/”¹.ûˆœ'€‘Øâo´5æ7rnéÓÑÇ`ËôJQèµXEN ÆÏØ©)‡Ìì±_9½×êàkð½òænÛ—gxßÉZß‹ôW¯ &\!±Æ)‹–¬'…Ý_¹¿Bû °Öñ„A—÷/oL24J½ ÅBá!Oy7.NbMòn\߸¼!ýN$'ÐÈZWPÇzDÝùõõËVmKš%aõÄ’<×Ðå©j¡ÎÒG7c;÷n2‡ê¿zÖUЧ6Â>2ù)_–a—·²¦Šk8XT4I~nVecU…S׃ÐEp#ÉÇ4q¾G𢠎µ /–Þ>Û†Ð$º‘؇i3!yzQûèÂþƒ ½Foå£gòql•«>ß>Þ¹±-\!SmäôñT{ÂÖà¶}Ó9–‚6OpŽ}|žµÄ{yň<ÅÏéçJ³B5"Wv.s0ço›&‡ž¾¶ùRu®òÑëÓÂEÊ㊾BXF5g«™ú¶Ü÷-•J»Ž¹—C.®Ö±äÜ™âil>„ Ô•VØiIï:t#Ä­Ô´£ ²¿4HK­ï‘'4s|lÀWs›êÕ½»ÐËVS$(óJÊ^oÔûÒØK'½÷ÅKÃ÷,8Á¸1¤8и›xS%ЉšÉ†±<œÑ|_H¨ÕtNa(¦häHÕ.´k7 ùîœâUâ t7;<˜ÂËÿnuòü8N-µ ñ†î¤î¤ð¤g#ú1ˆþ¼ðyŠý Ï& '@ôxÂX‚ <ºótç„5´ã¿‡,å—Ͼ鋎Ǘac¨ž$¹Ûƒêïœó5°Øq´å;9ßpL¹eÃhRÏÇç„p<)âS =§‡C‡]+HäAërnwC~R«1¢Q¹±òUæ+ÒF°Ïú¹‰øÛô©ã¤Yoµ{ †¯2ND< 7< ý¸à›Q2ݬ5è]&W"²J=ëÎñ<~æM¬S$µdÑ©äîh©%|yÉkl˜Û£#¾#8äjmMšé Åh«… ö½/«{Ì‘O"yÐͬ·Õ¤t×»_s§ A>J²ÿ5žweÄú¦3¯ÖHj½}þ’ëV§‚ÜN#aÕt †4^W¶y”Ñ7÷Ž›  Ý4â“3·Ê(kŠ,¶=ò öÏ«åU+[o»v¯¾ž‹iúÜ9[6~mmX ÒX¹ád¢•`¢¯ó¡÷œFB^¡µ×lA¾s¢ó°±šïJ9tj•‹õ՞űܼûʵ,<½Oæ­5®­Û®Õë…˜ÒÕ˜“LVÃýByF^ …[ãn$Fì;æv)2Ft/?™YY5ºì>Ÿ®¦›³¶¹XRª›‰š±dCΫX#çç—¹‡‰æOÙ’áÚì×Lé?’«Ö˜Œ@ªÚÖhL:_†Š¶ÎÝù¾îÿ~ô\À¼ó%½ÍÓ¶],¡n_‡¬>´Ô†VöÝ(!°ÎÑ•¤v¤C²Dö³Ãnt*”ý[­÷©¨cŽ#½ul¿ð2µyþÄ«¯þàv‡“ö¯"ÃɪjíÉÜÖíDesÔZqìE"ß÷•ë uL½»T[MXTªEò ܼu©—»3(¼kº¯îA@£z‘B9F9Um¤G:>«B^W9¸Ñ#¾Y8ð×&Â/‰W¯š÷:™ÐðÉwÛ)ß»è”@–áX|èSTÞàÁ©èú8Úð®DÀTÌýwÚÈ[g§¸9¹À‘ ¾oõ ðþ±Y¯í h!¿­.ÍÓµf5–apü}IàˆÖ;ÙÅârBÙQvçu5è:Ó—ýëè®ÒÈ)1È¥¿]‰«ôJA’,[¢@”czëû"L%÷î÷s•d˜‡„»·´4³ˆúh¢*˜/n5í1ÓžJŒ®m¥hR'RfâÜË¿5½%zÈO.0‘ºo :iáU£l9¹LMd =˜‹šSŽÒû¾/±apÞOOÖ£èÍÇ–µãàê~9±çýr~þ¨&BÖ£À¹dÞã x ŸT^"áA¯“ƒƒÝ¶„ÁIRÄG¥7ðSZoÍ=žx(¢,“Ý17Ó|‚Z‹s ýœ£:ßÄ®æ~¢gaÄ<ö¸‹9Üìõ^بœãžä3¡{F+°½pVn'Ðõ‚b6“µ5«áÓñ‰ ¼jYj5ÇÓͶ z‘µøÂ¶d²0;ˆ‡ÛRÝé zÖ¤RìH.X)Ü•©z§#zy&3ßisg8ty]WÛãòòËŽÎAºZ¾ôƒe‡(×°ùȹ^Ïr¶ör‡6ÿó§,UqšïK[éõgKÕL°Ê[σΛ]AŒߪ9Ý[±IìMè²EG›k„ÖyŸ¶E›W{<=õØŸB!{è¾^Ô4컯H o€(;Hq:ÉNSHÓµ§a¬æ›X˜OG^É|OòëSÆêÝ;9@.¬³ ꮡd²×OçæÑÞÕÏ:æüû§ü'XÒôD²ú½› „ÜøìmǵK¬O ]UÝ7jWâLlÆÔž¯H«Ó,°¯YÞLühT:°xVJΈç§åˆL}vPŠ*™E®Ðë± 6ŸP§ëæÖ)Ùxå…&¿ÞnÞ+ª¶?áò@pôHªÒb¯Ÿ v¥¡ß×¾?ÿúÌàQÜcð¬Vš„K®ù0×.pBlôýf|PO´ÁÔ„\¿§ä<&ÒnyñŒ¸¡V­}r²7Ÿ|ºéï}´³¤|¬f«¸,¿Öpì¦}Z4¿°|ÝÞ·» ûQ1Mhîa¥n×Ü’{e÷ÐEp/gâèÊšOé²ÎËe†DoTÑé0Œzw³_*} ?sAbK™-ˆÎ’ è½ U¼;5M¼÷*›mÆ^=àÁ¾ü*ôø™Ê`frÏË9êѹ×û¼/²I¤‚étuÕ*ufG[¥ ™frÝL!-.B…ùˆÍü1QmúX½|UL€áa¥Ñx"ÀP x¨q¹f°Þæx4j}WÅeOó >×uø?£¡˜¡«àÙÎv'ZåéJ²Nvv)QblÓß×€ËJí4ü÷Ò7¡éJ2:lºÀ,cCãís4cªiª~Øûç݇+éJËJ:Ìé›…<… ï=Ý»»EîUÚ9þž¡+xAȱ! µ‹[–„î$®ª×0˜]ëthΙ¬²A¯ì»K°Ø^n* â-à+§Þ>cZŒFwÏ­Ì-¨{×jÓ Ó:ïﯴ57xx:8ld³£‰“!Xõ¯;\ŠTðâCí¢Ñ}îI„IÀe›oHæk…AZÌûØÙNWæ†è”X ŽÛN+&Ös½'tæ6ì³uO²s[úç—¼Ý\¶Æ=žÒŽ¿áÚÖËêß™géÅ|·?EjæÄŸºTïnl5Àsr‡ÝwçXvÁËÝ<äè¹9­tº¹•ÊBöú %óåäúÛxg oÕ\\@@IÅF>d_áá!¤ˆ‡ ç…šVÆ,f ¹WÏ=Ëç#‘‚:Ï]ïÓ4ª ‹E"u*-n8ƒ®_Ú[öS2Ï®Gï,9tŽ{nn(1—7¸=…ttäâíNíZ¤ÓEæÔçœ(e+ʼ×ᛩäâ n¨wužc¾Ùær†¼P„3ZÈ=Wp¨¤t>Íóú6›N_ˆ7)üç)ÂDѺ27·%cõ±fœ¥\;gîdzúÓÀã56ÔòTƒgÿûVïÉd:"âe°ÌñØÌ!iÄB]Ⱦq¯©Ž¢‡ä¹äÛàRUµLñŠùÍë#Di{sÔHàqˆà¡t;êè9ª»ë”?à\X‚¶9Û¾¤¿¨tªüpß 3R‰ý´fN”–Ž=i â”uTE`Ÿ1úÜö½4As$f‡;ÛŽ‡KèÓåœÂœž tÝ“¹Íno×ç2´É!mñs/$³WÍ­r½œáÓm‡ãÌLºÀ¼œ Á¦­‹‚ó(‚¦‡ßXÍÛa[þ$ ãB[`Ð¥…™BvÏòSÈpáàÖ ÈÑñéÆL®÷~s›žÈÝòçËš¹G([—ÚE÷ X{T ý6jq ?yáDaêw¨L!PÁ eÈëcHSÄ”'nËnWu<"x™Í6¬ä>¨‰×°~£$“?–M¬f~z$e[XÈFê?¶ÌÜyÄñçÒÝyîÝ…C©y@Ì‹(Mÿ-¨óí99¹b!Yôryf½îPûáž×q(»7ØÝ娔û©±ë¨P•wò’ßÇ0¿Òúv\ÄÉ(ìjeÌö×€»¼íšÙOî’bª\C&è<Ÿ‚ O&rOG½vg¦EDØtY.ž™q*8Y¶ø¨¯¼@Š0¡ÈNÚ9tŸ»Ðû&ÏIW-„õé ÛàÉ”«k¶pbE*ÝÚºþÔ¶Ôû`³2ßÍiÓû´ÖewGpød©YÄ3'h¥¼(Dç%&é?/Êœ¾·»>äùTF訯ü9±»“]±«››ÛËîʆX&{HM1³×MM̳/gŸ0×$yïI›8 g€9Bìk9ÓóØðÊ›3R³ëFP~À(:ÍËÝNOêÊ®fö&ö@°˜zëNb©1Ë Tó˜½ìý1Ç©ßwbxU±4H.¸ÞØ«N·û.fŸ¯÷3››Ï^pÅÏlòÝÇ8=Àûì«yí.tý€ù¥rP@HË‹)åüÅÑ@L‹<4~@c1ÿKÉâ`€Âá×1{Œ16®­å{¥ >ru !ÒHŠiCj퀶`/Ày×u;m‘¤“\ªèmɪ1—[_þµµ 4q©á½ûIgǧ¿Ôd[°Ÿu—Ýæþþ¢^ì1æpßõôc„Ú ¹SY ±Š szHÛç²ë ÐSNÃ=0ýà” sz‹ÙŠèñ×öÇè£Õõ†b+ºá=@íÌ“ìÓo{Ä稌λåŠâJ¢íT˜V’¨Ä¹æƒGô–Þ÷YLŸ«p ›«fºœ ßÇŠû>8D½›CMv?ßF®éÛ$ZÛЯƅÚd¶4¿-,wXq1«³D7ä-h²ëžÚ(/¸jv÷±i%›æwª n²ÿÍ#¢žX‹eÁ[†ô“üËø{TàÈÁÃó&8+ñA%Ø FŠÛHÌ¿—6[>öß_þú+t çš4 b/ž;öƒQYKW—LBœ¡¦¯vC¬ â\h6†¾ÆüˆZÄ9‹yé òDº§¸óAQ çq9œ_Žó{ägÑËMx ºç_×Uœë:Ô[c"ß.Y›“½Ï¢åNPG±cÁM‹?­ 9#Z¿ë a[¤‡Ñp¡O¢ «Ñ“‡j·€vº¸I¡&;æêµùé³qÈùžô&R}s™çb^FÙuÿ4ª¿ e÷ 윧¿.R•¨Ì¼Ýgìa,ü™)°b4æ@– XVH2r¹¼ÇÍ“+`^·G sbði"FòÄÀÙ:9tºæAF©CEåz¤Ñ;fîA-ÍV[FfBæ„d¾¿ÊqßÞ VZ†Âx¢ûËTÝ‘ `šÛY•ÅÆ52Ùe'ë0°ÍD­'ƒÀòda/ЮøJܸÞiéêºÕáœ`5º±<ìÖc3QW‡^B®A*sãëÑKÂsÀßc$é°JïztõÁ*oPxx_CÙKýL>ë~ä€vµ»g[†e%8÷u\B≨g6_ñƒ5í‰Jf(„%]ÎÆUÞmÅJE›¯–ô˜šcoQ¯S*‰~RX:ö0f] -¯À¢+‰÷^¨©t@-çʬÌeo›¨w×ò.Ðk;ô®|ºÞ ‰OŽºN¦»¤«qLj,_ɬüíÓÿrn÷EgÛÅ|û¸“>Yȼ¥W³¹In‚•áb¢Šˆïž¿éÖeJ¨%ŸöÌA*?cP6¾¾Nú 5að›¾'}ʼk.'ø|7‚Ø¿ydÑŠÈ-̹MnR‰6Š¢«Y+uC–'&HHK/é$µ# Âþ,P'¾5g+‘Áñ)ú2þ¸îgÞhÁ,ŽÊU8]òâ– Û,éc±ÅòÊÊøòD%²¨î…¤hD¥{Â ÄøfãÄW”!‡ÔÖQ5RzÐóAz¤jéJ©[RtŽìæ(‰Ì÷Y™jgòŠ#±5¬¸>¯(fiïžeÎÑ$ç6Êù aÇ|{Þ§yjeY"Þín&½YVÍó¥ dšòA6(Þ\0ôê÷Èy­gw÷þÜå1 eT=3ó6 Äþ{ Wù0$«zaA¼ÑB“Þ·ð4Å~ì$EhýÄ¡ØfyLà\P¾¯4Ö¥”TËT!L’Kf3Q_Ä+3fnðˆYÀ.¼FT& 亚䅗M܆]ÓãSDê ³‘¹ —j!Œ©ö Çnq¦­!ááö/Ž!ëÞGKR¢”ËÐ'_×>$'BTYÓrŸÏ¨dhÙ2_ºPŽ=(Úe3øLÉXåÝé´:0e»HO=öã•b»&€‰¨$©ü㌗€"Ï ];æL'æ¥Vå?G?ërè±_ÊÁ¢âuŠt× ¼´I<í,ù9MœEÛ`ì5i3¨£§ƒ"ë7À ÃÓ PçJÖ&à~>Þ³«¬0ÄދÉjþu"Ð3{n¦˜¸3¶ð‹H–ì}(´Ö5X¬‰ºØ²~ýý&aéxœ+(àÊæ¤f€÷åJÛ­þ;šßXŸx¦›Ê/Ÿ^·^˜œÍ|V6QSD±îW>ùð§+ušÊí Y|æékFuÏqÝK/ÆønLålќʣ•¬§€ŠVRØ…+"‰@¥kñ!ë#7ó@qÞEãY99óú0D<Þ±b2e)©áµöHÜ©|ó4;î²ágŠƒœx+ »ÃãüøaJHä(¬dotýúA§£GùW¶J®¾Ó ÅÐ¦ÐøD ®þ®lŒ íšïºMt š²rÇDÚƒÁ6:¤ s/ eükeÌ.²;¯ìzZŒ%Õ©%‹ x×´>á ¦qaE¬ Ì-ÓáÕÚ˜°×²îúÏ[°_K{" Æó9XŠRq—s~SWŠ]”s žYÉ"[MkÁÔª—6òB‰/T-Då«íÙ@¯Á°„?Ö>ˆ…ױȷöúZ@¬¸Y•ˆy½tºF¿‘ûáñ´=éä×±—¤û¨‡¼ÆáÏ2Ѓ‚ŠŒgÊ>¬†8 æ[|€Ò„`ûøÐQ¿q²ìî¬É;§.±%â©Ðé Vf\iº]lUÛ/õÙ€—®ò ï£KKÞr[?ñö,ÐO¤I¸ì}ô¸÷#i –ýM,_´?¯P ™‰"_Ë­õ/RŸ›ˆMßÛÑYœª•½åŠ5 å=§½ÎòõTÿ—ñgäXG*>ödñ'!.xsþ¢“Hpê­XW0(ïOày؉ÀÒ7ÿêgq¦iM튟Mc™Àëu9d °aƒ¤ðð‡öØ÷ïO17qPÝÒ©Ã|[Õ–÷}0²\½#×h‚K·²¶;Xþ „FÔŸÿ½=0íP'vãEßlæ?€¬<‹œ¿ÆûvéOñyvõŸÀü‚ýÈæO ¼ íxÞð3À)Ý ÂE«!aAÈq‚/¾þ¡ûnxÎÃ=Šˆ€–²R1hõkª7 ’!—†¤úwkk¸ßRzæ—_˜E‚z¨-l¹M ø+Ôˆ}1³bPöîÚJ±„úÔqïªå5Ý¢í úà.Õ"aª•&¶ >u!ò…îäÌHˆ–€Qή}ænvZWU30«òÀë·>~.ù„Z…—Wk$ô¶ÈŒ”AM»„ _wr½´G•zn—Ûû8n.yÐk¡­ðÈ?uX©Täûe®Y~t—`ÙÐ0Nƒk_ï6•ûÌïdÌ—w¸+Kƨg$Br_¸€žMpKɈ8ie”îEç_¬ŸOpÌ·y2¼ŽÓ‰"ED÷x<¨±îݽTŽ}4* U|XíûîYˆ 2XúøJž$8/¨Ô !ÑÑ:&æ“òšFqø—ÄÀwr{^Žä6Ì9ˆ•@Qüa5zôY½©¿h«9˜ïþljɅû-ß)Æ©Ù?ºÜአ1Ê¥s ˜Àr«ç3aq¹ü¾W…˜Y3!6G™ ¶ tF@ˆá ¦´švj€%¿ïàË6,î€Ö„¤½ƒ¦ïߣ»J^B.lÒ­üA(‹6t›¤³TЦAïõiï¢_ Œ½ËeÕrþ—¨þ;%@骨•#¬Vî+JKSjUO¬ÝùÁèálˆÌwÿÕïµJVó^ Ó¹F‚U0znPé©Ïšµ–ïïe/# !D@p4ùº”¯iàê4ý×5š„#ÎwQÌöàíK@PóòÍ_Hû!æêóÿ‰³ m§ À›tÚø¯L;)xQIàqÓN+•6ä°_y§TþTaô]P=ñŠvQQŒ³‚Ä®é¬KÉZ¡Á\§O‚sµŠ¿v[ÜZm›ø£½õŠèàØ:WTd,ƹÂ<ò²'—½È¨±Cí>ýÜQZ$ÄBˆ7¹ ÆLrKÁ.x—<+DÔ]ÙÜâÃ4¿}¹F§íù¡‚ÊŽ߯ ¸œX*Í‘ÃViTgæTc~Lw½áâ÷ëT´ZZ9âØX µh§僞#“†8ÞE½´G¯¦{mŒ©Yв¬ñ׊šï3uÅÑx&±u)UñÌ7Uà4xÛØåê0•…Fš- ©è׿ô"Fi»ddª!ÕuŸ?«!y‹ùFÔz}WŽÂ”¶‰ëö2dïCmÎÝ<›×ð:„Ÿ2]}i´ÔÑõ«Ó¥™'¢aĪ6úÉàÁ1 £®ùtÍ‹ð(Þ»àίÓ+]œUÅtÍS*®Ðræ~Ïï¤arH:šqlŸ¦€…Há“ :ð9»ŒÇ€¢löÞÉ79Ã9tDöx¦‡Ð¨ržåŸÝ™,ipÃ@fÃ%õ !çDUCžaFÆÚõT|w9¥Æ°w#.%“1Ï!Çvªùâ‘û«–uT Gn†¶•Rnå´×TX÷[Œµ×胓£>‰áÇs•.Oo7ýBcéxnŠ V‘ý>¨dö`ÐbðŸÆóL¬þ4˜óí=R lè§V7À:þ¢ÕžÅêgZ=¬6ì©xÞ‡rd}¯#7ý†¨ø³V'ÖW£§l{ k©&@/fdüLˆ¥¦æ5~ÕâMép bÓ˜éyðDèEïõ?“š<à”dÚTÎo„‹ ¬v7á¦ü«Ñ@æ§ 8kOjpcCJìQláÖ¬ íÏ8ñ•ž!Ü¿šáQg_±šŒKÄø¦™ÂèIDLåý`³R±áBŽ´–Â¥ —±×ðO”hX ^¼EwÉy‘^þÏ–‘›|n®Ü^ ’¯&Šž¾_‹Ë¹ö €º' ÿlh!†ÊC1+ŠËT»«_Øùãóá=:[B=D¸ÒÐVÎÐz@Ø4%€§0Ú!’&ÀÎôؾék¢Ç€+äþ6t²l])üÙzú°{ÒÏin;d@;ÁÈê‹0ÛMcN4ºÎt)7ìóc‡4¡§"Ùf€i. ,‰5´é6aÑZù\ã`Š©žŠMÍeB¤æ;+h2Ós®Õ<ïZU}HÄW¿}Û?EšPÉ'—ÿ=5I‹ä¯x‹rµG‘7[ßsŠÉLK{ŸGV”<<#™÷’˜Œ æÕM"ÃÏî¬C[æ£(qPÌ«5kwO'Ö;^•ì7N¨aÌ39-c¹¿NôáÚÿ¨ýcf/ðÌbýK#ɇó= RÂcÃØœØ“&»Â‚Œ5ךë‰3‘ýÉXT,10œ79°¿ºPT¯5¸ÔdIMð ¸eL.¢â:T„9g:¶À íêý¾¤øâòãpTÁo „6Ís ñ±v¾Pi/\}´M¬[RÇ?tæÀ# •î¶9¶…Ź[iX7Û\ÆÖª~û.€‰þïœñ¬Žu®gaú6gUâÄ=§ËÁ!ù„ˆø‡xüL¥ÜÁ&h%(@†8Ùv[ìÉÕQÖ:P±Õ¤pš'é+ßÞ|´À â­Åù‘t3ç•–õŒÓ•É–ñ°ÿAw÷HÅ]Ê~…²>ä$ÏàmZµóO¨X«4©;ÒX¿i'¤½…/;;+ý Zó¨°W£½½Š%×™Ð8¦ža!jü¡ˆ{jÞG‚Ö/3‘ô‹C·”áárÏ— ùÿy0"+~ãúÞ_Á¨áw΂=Èñ–9óÆ?EÚ?ÁèÅKó¿F‡s>×1üçûúwþ;Á±XÍé¿À@qilÈÈ£´äÐÿH3×Ì$9Ñþ…±äÐ¥±0G‡´FsHG¾ëã MÛ5sQè ½ŠE?ê:Tf›¸ºBµ¿+Cº?µPRÇæú¤YèÍa7[cÿó)Œzz Ç|xpß‘iSËf§økkYüªû9c~[oÓû¥'Ì`bü&:ýûÓM\ E&À“]LÑÂeTSzíÝÄ>ú’t Â6)†‡ËáíˆøâèæʆšRÛ5qèiÜöáÝ  ›CÖ÷†$©r4œXW:òÊãV¨uËv¿=Káë£ËJ~¾_ƒy•]*Áù©»ý“­‰q.dÕÙUY i"¸"ÊFMmŒüX“!L•è´;¿9}ˆ³½JB>S+"ôЯýž¬SàÿFT0±ö[T€°úkT ç,*˜,YÝdž!ö—5Ÿú[ëý¯G€1[ØÁùþ _{É/ÜOryMåjøT£yy'7†ÌÇøœ29ýI<óÖUwkMîÃp±M¡µÁ§šø”'šZ?üEê `Í•þ Õ2oÔ€Ø@×€+€½70løý‡£Û×Ïb±vLˆw1ã°³…Ës¢M‹×¨«˜ðÆ\þ€PC«Ý&Š?@r ²R)‘$ è-r©¡x,àÓCg÷Õ^¼D¯D_R®—A-óy^ƒÇÈ8ÔK#¦›®ÄÖ@ª¸àz¶™!•š—A·Llµ€(ÿ…_<šðc^XSâ¥\94Hò…BB,ë·†0¢Æ)zûå°øj%µÒB ܇†í=:Nû’)<·§uW†€pr¾åP1Ýy~N~^îÁ{Ke“c1:ÞÛ×Åg)CC%ãœuîÆÛhšôßþ ü ¶ÿ{‘€ö3@‚Ýÿ °“a"•Ãåš3¤¡^®åW¯êC`Q‹!þߊ6ÿ ௚àS‚X†&—û}s”qñõw‰ÊzÊH?“Õuu>ŽOyð:üˆŠÐ:¥ÇK˜¾rÙäX.ÎhB;ãLæk™Ã²Bv!À}ƒKo‘«D&€éÕYiªî?w†¶íQÂЧ`2m÷7ƒ×G3¹ž¼¯ÖO˜åÁ ÃdxäãÈ&æÐ²ÆÕ9B‹£rêï}v ã¯vô¤“ÛÔ’~Ñß!‡»š†×ºýX›ðnbC¿EÝ5Ìî;3Ò·ÁÄ]£(rœOAM‰ëO¡wLï„ÓNP¿þ-î\+DÞÓжݰf~R ºCè0ÝYŠóÆ\•èôƒ²×0OZ±^0͵8†µW‡Òoƒ"íÁV‡ðy°‡°Vun×äEwŸ÷ür½ñ/õåuú ÚÊ= øÆAÄzÛòø¬–c€]À~$@üžüqJü§áú» Å2½Èåääïz¶bµfÍòûŠ•ãQ¹§ªyê>wÍð Ö¨ñ² |Ï­‚ÑW~Ç´Øát8 jy 9·iØýC’ú•+Ø'ïOÒÞÂ$m %\ÿê^bæf]ð0ÊøäèFoñÝñÎEg^“Šó óüæƒs1'7¾6Ð1'êù¦Ùä‘ýå{,F6yÇYu©@¤€—ÑúऻìÊ‚œ©BTq^^.)6¨ mþ2ÿi¢õbÒVË阿ß(óƒ.¿q1å™6 Ö‰©9Õ`[^Æâ<ý`!ðçè!$,Å^hƒf*Ãv|`?myd ×QÆŽå‚gû™:ZZ-ŽGËIaâíGÛ­ã ²ÍîÆ¼)磑’AF¡—V·äx"%¡¥Öß;éŽ]ÚôsØ259â3ÂÍPˆ漡Åu×£ƒƒ: ´“ç;8ð²ïúÙx;ùëÒºF“HŽ?yÏØ¶¼âz©ëa¥6zzpí‰5qMw”/98p#6,,hKoƒîhÙ Á¾w~7<Ï»B¿ÕØY§¤Ö/ÅP*å2ÄÁdøäöYB-™˜íªœèòÿyö¡"òäEŒ:UmŸ-‚¢º¿/‚.õÑš£1hzaéXØRS_ƒ<ËuxUêé²âà¼õG¬ˆ<©YÙ"ˆýýœqæX%Ó– ÷¹þ€˜Ñ;8¢ö ’7~Ybxgœ+ˆ÷?…ÐrŽÞ >ºŒyÑÇ¿?Í©/:WÙ˜ ÷ºq^Ó`&f~«ž~ÐSæZK¨‘¢úVî[­÷ì'Å€;ŠË µèó­‰Sü`lDxå€K¥¿+xéJ°‰'W‰j–£ ˜—èLiÿ"îdHÂãeÄKŸÀß\<ó.ž'¥%¸ÈßGüƒ¦rŸ8¿õÁ3åp™¾÷¼ô»Í·1¯ÒQNþ nG›3,a’áFŠôútGE%æý"/GÉ»ÏrlÛy?X`±ÉOb—g  jƒy[øîªß;›u¢ÀØÛ´ê.ãMœ,w”‘æsžÂ æ½ñ}úî3uu’¥YºgÏmó•«:xŠ-›ïýêÞÓ8œÑ ul[(ýY&ˆ)ÂûFÇQ•ded<÷à\Â.±ëdŒÏå0AaªX¡Ç¹ß3 ‰þ?žû…çŠZ½*qïãªå§?Ïä%"jÜ!²8¤OÚßuñ¢‘dˆÿÈÉï¹µDNR%a’üF:å8Õ`cÀóqžöpZDØœúõþXÀöñåÜ…Ä‹›}·"¯©ôtÜ£âjœÂ‡­lr9dh(ƒ³ÄÓì¤éTÉŒkùo¸¢ß…^§hèNr®ÎwΜZ„S "!¿¤F¾>³lK¦A¦ðÜû$'”#W!Ë®ŒÑ~®Ï.[ù‘"Q,bŽpù„IóþžzÃ$w…Þ–QÕ¥Í|~¦Ùý£n?Ëï|ó)‰¦éÎ\§Z È·|vÆ×¹4¦ ,ƒJ#|4¶úbVnññ­¥Ü0w·táÅxŠÔ¥Ûž«‰÷ZjòºK/2 @á,g œ³µx´š#eÒÿod>KÐåóYnøÔr²û+€ÒÂv×RTt,rPÄQ‡±ghhèY8±~‰Å0‡`Ïʼx%Ïò8CAp9Ž Â½õx›8dãCÙÏÍW7_ƒÉÊI)ô|3Å‹ïF^îÊÅþ„ZæékÎ?©ÛœÿÕße#é’?GG;2à¼k"5irFžß¸x%ÛßùãÌîî·¨5Ȥ´»Qt¾M›Cëé‡ñŠLoÓ¯Ô‘3Á•'Ž\êR•XínëB Âå¨ß*™X¡Cˆ£摼 ×J²Àv<žó Ç•ä¤éA ?Ž4ÃÎ÷ûzÄ­iÔDíq?¶(°ÙØqïíScz3ÿÄý“—ÒTÿMÀ¾R÷p´¡h’»U…µð@TyAc‚@K$îyêž,q¿ä@]zXx# TRª!›¦ßߟŒÛ <Öuº¯ ~ ¡¬ @â¾ÿ!×ûlÅí!¯ÊÂfÁ[·Œ,çœ+?~LÁœ7ᔩqô;ËèRP#,Š£Ô:ε,Á°•\ Q¬=ˆçÅß1 i@òŒÙò"EçŒìxãIåäaÛ›`žÂ³´ðŸ€?ÁXjLRøÙYjw‘G„×þJƒ÷ ½?gam5SikõìsÎÑ—±há<ÉÒ‰wVxâ‚Íi/øuo¸ÈÞøP¹QÖh&H8Özšõm¶¿nñÊõg«?Ø/>kôq+ãYdK[“ófæë¼þvìñÌ—Ú)ÙÕœ|c¿êÊŸMprð? {»­œ7‹‘OàF,o|pu¹q4H`µ0}]Ü«¸@„ñ… ¸Ö)xÙÐcüî£+):s1Koû²\óä?RKL´ŽÕ¨ÿÕAfeàmQ|b°UùâÚÝs¿äS`Ÿ=rº?%;§~t.lÈný&øˆ|¾±Ê¿dˆ¦q2ûÕb&ô¦1Óm§Ì_Qø" î9Ig7ÖT*k<&U#ŒV³¥Á»CSºm•?of¸h¯UW+~“S6˳ÙûÍÄ)mk{êG7݃.6Ф?± —û‚Ý?,ºþc|ë¾®âTþ?Ä‚EXýƒðH„…ðÃy`}¸~ãw~÷nzœmÉ…uŸnG}}9Y "IÎxc¶6øÌÓ¾VâÇ ëÏtJË D«î—«Ú6æû˜ ¸šFkŸFç,®§ªžH]vmkO^OØìÔ ½$\ýmQLÿè<@°|vËBÓœRÉzñüÊÒU;¼Ñ}H#Äýïir`égdØA”âS&d`Åô¯ØžþA¡&ÒnrÄúü¾¹†=N_Ëý$M·;ÅÌjËÇZÓ[ßÄ„3§t³ A’«¶i¿Ÿº9³ûÂe?±6†ÿffCDE“±öæ½óI^;ƒ0!®¥èäò„=B}xŽ&ø–“(òV@u} g0|[`÷×œŠ‚5Q<&§WñÆiüºê! ùÒ±­ò^®÷ýÜtájcç2=ß¶ß4©Aþç%¨ÿ 6Bõ¯`óo6À€MÓ ý#Óãž¿p©ètNìê=Ýšbvü_\¬0±ø‡üpìò=(¡… @‡Õ4•;ýÀy'ù@/0ut4Åøî~òR^>ÙÊÃÏ\f˜µŠ¬H~áSÙãÀs>”ÚP2N³ó›‹w»¯Þ{ÖÉØ–cüx¿–Ï„eŸþ9wPµÞÇœ].3ÌÊ÷¡ž1N·®®Ø²"‰¾qÙ¤¹•h„ä§ÒѹéOå ÒLÈ»=‘2…mËEê¸6~@¤°\VéTo¼Ö“xkÝŸðò% …§ÐßNä›Áitø\àìØË’·¡|nþ&+éG¬Î–‰Zåõ²&ìä ì!š äbŠáXv9ô04ð £5ÓæX–éæ E€}÷Ûú{’vâ?_ùŽð3$ Ã|`¢hÒJpEã&fͱÃC²WHÈ—ŒZ³z&ìà,˜¹"Î}ønÀÿh¾‰†‚fè4Vòeš£qeýVjK[—ÙƒG ÛÞùta'Èüþ;Ü2{TSèÚ%@˜+†°@,!åðù0æ¸AÓIÞ˜ËÂÎ øÝwýž0©‰GžYœÊ_²~qj¹'=´Þs gÄHÙrq ”´ÿR?‚ˆ!þäÆî –ŸËfNÊÆ{‹m˜ˆÄáS€×öÉ.ðÓx½‘R%c¤Â‡ßVÌœ5zÊúîAMÕ¶p™Åš¬I>§_¥Š%îË£9¹‘9d^`óDúïÖ̺/ºû¤Þÿ·™¿ýY@§my]¢†\÷ì>çãz™ž‚ýp%‘Âç3 TUs?îî7#ÐI8 í?…AÞá–‰OQŒ­\Û•îyépCm^1Jbt¬Eÿ טp3µ’’w½¾VSá!èýKLWOÿRÑÄšìÆïbŠ8Þ-ôvw· «mh'·`Ùù´êÞôts|H&\{ØÉÎ?i³Ñ£p8Ñ‚pŠNûåÛ?M¤æðYþ,÷·ÎH¢”¢V…ðc1È;¦Xn»²wÀ,¾”Z·ûÆ9!™·§WmE˜~×¾j¨™^%wúÁˆ”{ žn|— ˆMFòâ²D3 “."G¼Mê9“¥w°j0‘u±züÇ¥Oþ)þÚñEf 3zÁ5I–h±ÔŒ˜¸H{p>Þ‚~?‰•šLécn¢s×y5mi{Ô%Ý^BEfÇ^oÇû|ÃL?¹pH…ÿ&ã#dÁo&¦Éãó|¢÷°÷åÏ6ö¿öÉÂ\ÿûÅßá+ ßvß™Ùh£Îk‹ ózÙ‹â,žÔQKn›ñZJW Ì‹±Îwô ‡™ªÑßì0/¼ŠX6fÑÀüùzÜ{ó¶O˜0˯7›—›ß–q¨! 謧ò„A¡òÛ£›>°AÌc) æ–ÃXÌ]G N‰ãR Awȇwé…äÊ4/×$™Ä]¥†¶œJ…Ø8z¦žˆúÂ`°ÃI·:îÊ<³µ]x.t3-de· ¹Í×dNp+U]A¡P<:&ˆññ+çÎÛåÇꪨxžd,»X¾8Út䧃s¬=!ÚŸu7¨­È¨È›ªÉdï>cvr‡PÚBŸ¦¼ºÜoëàð™°ÀQƒAѨ•™âƒW#**ù‡'1×±è@׬yºE=wù²rwŸe«ëÈÝs™ŸŸoÕf4 E:™êå??žA¶}Ρ©²´€šÞ‹·p(ÊzçIñ¨åÐÊàB@ýÃÇh´LHò#põá¼yÜáPiMò½¡ž‚šyD|OA’ |0z*æUÙ‚~\÷ž-tÙAW­Ã\^Ó0ß—Äí_°Ðƒž>ì¶Wc‹¸]DÃÚëYZ]W]]˜¬$“=¸Ye~¼ð=O•*ŒP(ÙÄ!Þy)çe›Ëœ ÖGÌwö=νŽw6åY@¬U£rÜÓ#•’½1)£†ü<].­`¾¶ ÝŽöê4 ãN4ÐnçÄýÈÆ  Ï*»!…ÃRéC»ýººêã#Fwÿ½ŸWvzA —¹»ÇÐ:`d†º t™¯yP¨e' 7l€ Þ:—†Ü7TWëÆÏ!“‡Åê½Oǽ½GZ‘k=ãº"×¶<—A FAø|ÂÚzPÞAhÕ J†y×+øãF}M¬øúÜ6ôûØKêbáZˆÒò‰—ƒ»{?Kje—Ó1­Çðð¼ƒY÷EÐugÕ ?§÷ë'A¼¹j<ÄÎ-8Ý gšß/­Õo#e²Ñh¨q³‚($áàí0±Áe¡¢kû±…d ê fï-^ÙÓ» ݉;\0.϶ž>쬃hL\C¸º€@OÅÄ/ÏZbzïç»Ï¡¥ Ä Æ„×[uÅ:x_ú,¢g'Ðékv5º4ñ+>°!Ì4Kh5Ècû|){/¯Îs³ íª~ÞYÜ?Â×õ¾`O5Óãq!Týúœ™fÿ“Nf‹ûÃ!>Ï7Q¤› ͱ­ ÅN1ì»8³±‘‘Côål\T®ÙðY×Ùm]ÓxYg¯%–â¢ãg˜==q²T~™oÔSj£E¥ÖÝ÷f׆Ë{dn¼Ë»³ì5È;×Û• =D.¶.˜†®¶Ë(¶ÿ 2¶'"t\âÔ-7Ì y}IDã _œªÎL-,“YFá3]?êé“ú×ãuŒ&m}N,sýyVR_{à]Köš’Ô1ÛÃ÷×µL튈ûýÂõߟ/§¬ùp*CÆ5åM8¤â7‹ †H•›æ:>ç›q¤óö¸J1‹^9‡¾ñ ÌW’+hýu|Bí[k`´³|°,ê´àÓ›#0á¶ý% ¿ ¦þ¥£ 3Ñú`.c‹Æ¹â»§b4'wlʵç>êÔßNL~,xÂÙÕ­¦~¥ƒOÄÎM¡UÈ4o\Å“ÑÉ]ÈsÇ6‡=>+töwãî$Ï+|ÖÆ7-·m$6Ä’²¶ oHð! ÜwTl¤í‘]09gvÙ¦¹‡H‡!xõì1Þ·å e>ÖÙ&ùÈBXšüL’uÆKwÅmbBDmËÁû…’žñO8ˆd†•ÓÏõXFfô¯ÜX½é<—{ ÉÚiYø/lÍ-óiˆ@¬_% ÎÎj¹8}ò©k)ËÎÐÏÏu)§Vg¿ÈW]ö¶ÃJ” ÌN7ëxIƒ¯!¹ß<ñ²{Š•Ëê›ýWУ‚F£]ÝYtºázwÒ qëÓ6^ÞÙOÍrTˆ}:TÁ›8µõ²¡ô´½Þ¥ÅW‚Lâ [8HP¸žËã¡‘¬Ø^ã@ëöÕÿ9–pd*úÒæ×9ìkMx»Œ‰]KT%'ò¦‘Ue,K'ˆt\u|šsÏ(/ÑàæeîgR {Ó¿¿MªL|Ù¿z ”õL®ÌŠ·%™gЊRØ0w¿Ð徆LÔ–FÇÓdÝ%ÙÁÉó‡,åã·ö]cVÕ½g{»÷&GÕ$á'%` \¤wÁ²½mK¶ñxR¢1èÕ÷þÛ“é£÷l‰lÙŠ(³ö¶NzLÎ=Bé"EZFÐJs2Ýcí £—ÜìÓ­fîh 7õÄ-*¥~uË#°O…iù 1àR-СêW¶ú´lßrƒîÐÉŸs=×$)oåR§†,v¡ØÜó†I#ÄŒíMt„³A7©:É=éÚT¬Ç)í$®¨å__QÓ‘:ð¼t÷KáC¿µà7ž‚W\®n½}¬ˆ;÷ùU(‡OŽ—ˆ—ŽËåÜFG#é+&,¦sL®ë"”síÌÊ>™ç±v[ÑÝú*7+§Ú“‚:­Ó<Ìqæ!ʇàö7wX<ð£Çö_NÁo.XGÜXÑËQœ·ø:þ\ªLÅýØüŽe©ù¥Ê{§«T;zØ–Ø8غøÚĵDUX.B°FjŸ ,/ò*’¢#º ÉIùÆøWñ>x' ¬Zœ‘‹G7lÞ×¥yïQhÐÞ}x§vkNÆ8D+ÙBzZ®Dj†Ï渀{¼#];bª7·Ê˜v‚(mè#W0´¦>œÝf0ÒÛ$+åerv$oê¾°=Œï8 _ñÎé{-1â¯ÈÊ/ýŽž]åµH«{„ž}P ‚r6c«ã%ba¼jwº}úIüFòWìX`l=ÜúsplkûTNg¨Q7ò¼²Á:Å÷ Þ'²ÙЙto¤›ÄšD7ž~tI:ì§œã³JñÐè«`D‹¾%ôá³Ô6dÑ`WÍÛŠØþ.}…–´çaïÀyûÕGíÉOµ¨ÅχæÊ”¢ –™kÆÔk“;wèy/:ä¹~yÏ¿9ÿLA€·!q¥‚R@øZgi²I¥Ñãjn^œsÿmir~yÛ‡oqWÂáß|¾A_ë—'R•¸uÜ$à ç 8ÑçLæ*™j–h¸ZÈŸBÚÖo)® ‡¡qñ+sÜs¿x¶f\2=§A­U×+(/ Vrã!©Äg=rùÏèÙÙF¸}ôrÔ/»‰yö„WaTfOË-o ”UÇ ‰lDá¡«yyW†p ‰¶®çêàs ÖGZæŒé—W?°­Ô]+8ô2+lð|«4R~š6A÷V܃ç†w eÀD*Ø÷ñ1£õžâ†Òú§Ô5{aó)úÒÌ,b[0iÕ+wC“6f…aWÍ'êÞ|XЯ‚O;"=“WHìÐóíl-lç~Ÿ­£r•OÛ|>m¦â“N›US› |-aeºXž:Só(T –]xiKqsÄÚz…h:å DZ×,ÍÆ£a°À(Å£>Ã쀚ëqD=Ë3Äíƒ ZLŠ©Ö7äg,hJŠZ5>ÄYd¤× ¥gb|Ö•ßreŽí²vDçi ù*Êò?1ÛñïuΊ°{q< #»*‹|zßÚ!Ïñ}.© B•6|PIüPwg”0¡^’[×”7$·»L~C&YGú ª qe6Z©÷V¹‚}ÃD@©ß³šIì’}Þ•'ä;J äYí÷ÒðÓä^UX˜R„•Ö“–tkg®g³-ÎóÑ,ù¦ÜTøþÍê9ù@<¦f—}Ë.&›QϽ‡$:èViiëØ~ø2ã–è–‹/<[\¢ÎÅwk_öuSV'¯ªI¼»ßšéžøm~˜oŠ%žA^»<Ÿs4„%ÞU‘61ø·ØjK`ŒáVÞà©×“=å]/g>0Ý©µ¶’mÉ Þ°µŸ0“·(΀  äy|‘ZøyÒ°ðaÎôE.‰ƒëƒFjq„¿¸è%ÀhÙ†*m]ycg<ïžÀ 5sHBXÔÞzÄ¢qàú7ðU{¯\ß:/öáÝHG6üÍ%ã 3‚dþ+ûeFQâÂN; Éulë(”ÌAåÅ£ÇýÊ@ þª¥Ð»=àg[LnÎXsÓof½Ó·˜ðÒŽÚ׉ozS~ÞâÒnOÏ¥@‹¼VŒ7ÜkÌ|1Wذÿ<çèâ)?í‰Õt›ÿÑçK³ìÒ žr^W„ØQÅö»ÁÞî+¯ÌæGÍ­H¨Ó'æ´ËpT5_ùeË“=×Ò) Õzë„̳MÜ¢…•«wèà e[•_\Ѧ?Ú+}]>è9‘:¨dfŒÙ¥>W/©uÿñáœAŽvÑ®j÷z’ã›`•\=çMwHµµZÃÏTÿ<…°ãÆ’!GÊã>=­Ý Ú‰ µ† j,Öû÷†¶G~­“1È’z¿OôƒL&¾ãý w½‘éwƒÏÉð¾f”•¬t¼[¿~ŸqU{‹~\ò{üûþc‡Ó{¡Ð8m‚Û_ÄÜî‰uZì|\;t›”Ö¯w70ÁkèÅýÏÁÁ¥–‡(¬Ðy_õ—ß«}CÉ|le™EÑö&l±~¤/ì©h h h8¼&oØóRÞ„šš´! Ÿr\צÿU?C¬Ë$v’x$ÀWM®2ý™{z•82”ûPô$qìÂb`¬ñk³—:üŠ•èUºâ÷³ìÁ[ÏÚb¾{ºÆ^÷t-6˜¢3°¯_¼S4ƒ:}Do1L¼Q|Vœóà¶°ªÊ{vv‚çyw»¢ÉOv}¼©r©ŒÜb’t V’ÕU^äŽ,ðç:ô,W+?R‘(ôUôy¡oÕ{Ü8¾µÅÍ"9N%äEãÁ7«{d‹ÛÕÍŠ>[Ö¶³:UáéwÓÆlqH£û£GƒhHm`ÁÇ‚b/_›±(F› ­ú‰oí*§¯¾lÝV/ þÄïE·crËŽ?Ðéû±z}ÓÞz×XÔÕÌþ]rM0œ¿Ÿd‡Ëe‚ü[C.Ƀ,d8ÒWžZ:¯<¹qÎ0²ze¶ñîN±Æzžšx¼À}pX­*Ýç: OK?ž*ZÓz1À7v`vö™Ù˲c:æò–5Vè›×ìs­Ÿ8YÓ< ïL:¡ô>šÌ !‡ÛêWg¨Þèwªu©`Hoãã`Å|¬Š…”àÕôDÀwÍ5 ˜äÂG±´¤E¼¡Äî š˜ÏXÎ…]&j8ÿ¨Ï^ž:åø”Å[<Ó³Ú ki‰ðê,ï MÖ˜ùïáŸMÖ\›™¹kþýR¦Æ½D½Ó‰uGf§´ô(Z§*¨•µC< ^ŸCœº+¿=¨ÉhQ’–•îëÖsÈÞÞöX€ùóWVÿ¸NˆÝË“æ.ò‰Ò aþƒ\¬ÃGlÛ^KÎVãá›"3k $!– R˜V~® GezK†÷ém uq"9y»5߇’qÉ.Ç­”9_\ᕇǦ­Ÿ¾'¾ÂüÎ.ó@.5*ë‘´°dñ@x~Øb,ï†t¢%#xaÕ¦½“G°›îÐÏ¿¹K‡ÿbwÓ²üÚf¥´¬¬¬{Úž¯­}_ zx-É„%X ||b¸4úPU )x›œ~e9Î94ÂÙB+a!Mø†òà —¢ x^è„Óg¡õ·8Øm°SÜ“ò9‘YS”iM“7„CÛ[Ú…ˤ¾sÅ'™¨‘ÝŸNpó^/nNÚ˜]UŽƒê*œ…GEEUŒWg…[äܶtÄ%M”Rz ÌŸ¨¡ÃÑ•0½¨âæMÃå@R¶“b¾²_ÆÕ}W¸®¾¹EJV¯òäyº¢û¼áQÈGìàuq{#\mÎh€K,ÓáÁ§åÕU?Âb®£ýª ¬ré¶wì½ËBC;E±P¾£Ô´ôôtÖŠä§?jm›ž¡w¶a‹RÈ,ìX}Ê´‹F™ÏxùbÓ~OXjjïòbÓR%[I>UC0o¹÷özzŽ»À¬-ar‰˜Z¼‡ S¡nO__Ì’·¬¤€²íz» ¦ÍGH‘w \•ƒ\éù¥¡Yò NwI„ãaWŒ«V³Ô=Ü"\´¯½]ivðô—]g÷”áõN`°>æzºK2çЯ|…ij¾yå0W)c¶ˆKŒi€‹Õܹ¢3åcÜ©ù‡õ ­÷~±Ù³áZy:E¸¤g§ã ¼¿mÈ+dgƒâM$s‚†Ä<ÁU9˯ÄÍÌ2œZ0Êg§œä;+N SÙYq0ÅÅY”¯Ymñ2!΃´sÑ=lÇíü—@|ßZ¤‚â:z•d²ëþØ\·œbˆÏƒªÌöÕÁžòöò F§Ž¶6‘UkàOÐ;yLñ‘¦Ï€–OÖ”g[<| 4ÃÚj9î}Ï9PvPÍíêÛ ÉïåYá@åÔg•ok¼`Å¥^½S#Ÿ¤0‚y¨\ í¯š«ŸË@>+ƒÖu·‡ñ±AÚÅÜNòÒNWA>¥ºÊJR€Ð.$cznø=¦ç1õb>{TIÌ£fœ=êå³ÚR1Ýl¸¶·=µmµå’ZpdûøïôÝxLM%Ì%AUº=ÜŠÑ.vv’Ã4–â¬ãÍõ0ϦY^øãÙ4óW~<›êÊgÜéòW®Àš•¾4ë&¨QÅ\gøªÚ(¦w‡œäí>÷q̬îöÙ¡ôÄå8m#RmâY3¯žÕ3V^àÚ\7Øþ³{æq_мU–ZÉR&«£ÉR3‹®É¸cTß[0<ü²¨ÿpµŠ˜U87€é y «CR,)ÖïA°A«iZÊbµºüû …nÜ0=Ù‹x|ù`ŒÔ—ÂtuM}x@­»•¿ÏjËqYêêYáÚ,-N/‹l§c¶=zÈ:lÑ: ÚÙ ’Œ„Íf3 ‡Í7/µÙºmïqMÜ}Jç^ábbaZÌâŽÞ¢o6Û7\`!–ÀiŽÔdjuÊë&AŸr¦«‚xóľXÍb·Òµ–¸-æ WTÜÕíã >Ý/·hÙî9#ü‡ØGká8‰-4‡¥Ëœò&[w_ËélI]é=fß‘Â-{åxŒBŠz·‚ëȈ'¾”zŸ `§9]ÇÛ'ŠÒ\x 7Ü¥¦<…jëk=Ü{*ÀnêÄ…ìá5K/éBÛ ¥‡–Š(ö©tõôdg>“5ô£FƒÊCC'òvû伞S\Ï£|P+Ÿô˜©$i‘ßl`½qÏÝ»-‰•&ó#ÇÆNõ[ÿÕí´²‹ L¥÷¡ 9Xß½¶Ô©xm"Ú6ø¦œ©5ïá.}®‘¦‹ÞâiŸŒ{dÑeP±¡$|ò ”lÝP“‘³=v|CýÿÇÙ;Yöÿ‚·§mcšÓ¶íž¶mÛ¶1iÛ¶mÛ¶mÛÜžï/^¼»±qÿ8•U•U§2?U‰uÕçÙïÂë½`Š ˆÇeÊ,‚Æ<•ôU¾E±¬ö°¯êy1 Èà©g1fÛÔ¬=)ˆt xkl`ŽÄ:Þ ‘áôÜ‹zGdœ\1ªhºÛq¸Î3vmQ¨Z›ø81Zì0Z¡Ât™Öh;üzÒ†À•x™¥¢cÖb³$÷ÛKï)¿Ö6GD”Hóæyg}êÛó¸5´ã˜W@Z§;‹˜{ âvYØ»êÞxê ͓4—˜9åE*/~YݨS‚3EC×Ü‘¸QM0\ø¾Ø¾Bâóz²áœlíÔ-¨%¥Ðúð–ª-z¤q}bu$Õ½Öü$Yµ¿7pãISve䫉[ý óÝŽ#§5(ü8®“z4¬k6 ëçÊÔåWÀ¬q|ªÄìÆÆ)A!>H¡ÙëãÓ#{ýÞN]~šå™çE zÐ6S¥‹0ö@¨Ý䇽]»Y“j®š$«ÀŸdü™uIïhZìDªÇbŽmŒKž©¿SO¼Yà³C×/m! _Ö¯Ün¡móg§SŒkãW íÛ ¾µð˱S£ºh{v«l‘êBsUx«ÁJY¶ ñi§e^o}0 ª4¸x:™‘ñ…f¢”oÖ3“¹K°7·;&#¢µ5<Ù°y£Î‡FBN‰nu€i͹Vãa§ÁÀñ*Â%™Ìsóxç)û½O„…A<ølžqâ¶4ø ûãEͼSWå¡R¸J̲R8¢‘§Œ«-©¶“Ü4ã[4¶³¢™È¼–QeÑLø"xÞ¢oÌUrH´ƒø&b.1[™ b,8ª ’›ñxzã9r¦Ó¬íÏxVêä îÛüÕÏF ¯`ö›‹Ýý«î¸'ê4ã;&Õ|»b›2æÒÙIºƒÞ-éÍãyYîV.}KŸ¾Zì«ÓÈntšÈn~œ]–!úpy.šx Á½À¢Ã“ qLãZÑæÒh{Ù2àÂ7&ñu‚ò/“;˜Ú Š ÓfI`’¢Î’˜süÅþòTîˆÙªŽlæLS»a]e’·³71wŸ»£fUVí¼ß.¼3$HfŽ–5É 0µHj5¾¼wöÐüêd<>ê3Y« Ú©¯_F›´Q kkÁ·ž²ºUÄ|s!³g1øºd×iáÈá6_»1©TUi ßøQÔJZ¥ô¨6än¡ñ‚âã°¯_ŠÊ¬óé åßj׊×»4lQ/p´íΤSuâÑam6Ñ6Ó¨”°‰úhfìj®Æbb²k¸é”ÿrí¶{_]œ¶Šù·Ì¶4­éa6,½­ÍÌõUÂÿ{TØQËéÜ2$­KìV~£TUìVù$ž OúÊ'ˆ|ÔMMRk€÷¬® tñÂ-ñc­hYºê„§7pqÙhõØÈÃ1ÏÉiÏŠ¥¿6\5Ù¿ÕÚákU ­rvB'{Øw¤/ý¸7”—ßÔ•58òÄÖRÒˆüX7À¤€•MƒSX©W…+Ã7å‚)a?3NHièÞ’Âfž^óÝͬt"õFÒ;‹š¸Hlñî¦k äà²mð ³É]`k¤>Ï|·µaår1âõæSÄb6ÇÔ¾8tÍîè]m®•.–ö´3Os¤SKâqð¯xÊ™èT]¢§ G6Š™eá?~hµ¹Å¤ž¯º±ºíXN0b |(hÃʼnÐʰò:‰òÓl¶²Î•UOFÙë…×hüýJ4°yЅβ±Ñº¶euk˜ä©VIÒŠûCš7hj‘; kÁNzýMî–ç< µÊëV/i;¦Ipå Sߤö î sjÿ¨ïÄçêËrÐìÎY¹äÈ‚µØ™Tgs´À5%+zöè>€£,µ€ËÄŠU&2j°ÜÿµãPµ´cO .“¯—çóDurimÎ¾Ë Xwc…—^þ-Ä®/×øù¨G±¯›½¤– 'âˆ÷Á¶Ê¯›˜ºês\QÞ‘Ý¿‚/z1Ž;ÔB>ÐgM?3-îZÜ;6Ç¢º,–Æ[£Ùк̿õ­9ã•5Æý2øp]½ó ÷<-:¶:Vt>ñýÍ2S‚ ŠWƒAˆrû!£iaêÖ)T?êB /«¹Ðwo§ëª¯$‚Kƒ"åÂøšm™«âb.­Cp„¬H,nãœÄÚÀ^®ãæÇ¸¾*¦‡kÿÞ4wæt1Hõ¶.^ (eª°Ì¡!“Z9 ú0&;³öô¯úë5÷”ÑdáÞÞ&Õ9•KÎrS¶?E÷ÎvÛ2åÎn0¡.?=d4'ØçÌUéþĤ…ò—{ë`«A»3åb¶I¿ª¡%ßÐÃtÝ\¿K ÷gVÛ‚„̺9Íeó«J­Î‡?0 :ÇI‹Q¼KÜð7%n2΃ÊÀdý¹(¹ÆüÍ¥JÛér#XÆÄ6 ï“^L,ÇãYJíx Œdz“.Ú£¤)³0f¿ ¯%atG€÷»ê3­ÙÏ Š˜Š±û¸ç'‘8œóvaé¸YÃzÍ|3ˆ/é¸OŠœ©Á2æÅSdÝÓRmeÊÛ.Ôy¹í²úƦDcA®é8]'Ýâr…¾¶µðøÓ¾Y‹º/Yîáåa Ý¯b¥~” Žs­᪚ZÈËB*“޶4çÜîwzO\÷º¨ áÏ¥3§·É§µ«7uÏ1ä#-x2©¹æ¦ÛËc-žÏ3ÊpähëÝÊßî¤]ì>ó)š}Cçž@óz’½ê<"œëaKïÏ?£’„ImT* q]Ž@#®Ð­Õ]g¯3¶8çé 5ŒšÖŒ•(…f˜´³Ã•Ç»ÄW…Jm ¯9¼Ȧ¡3A`g†¬í%¥nÜaÚMÕwx€ì’oÇ8È®WèU–q«–ÉR2×pL˜½£2­£R‰oÏæÛàn¦JÊÅjØË[c±È0ùV»ƃ¦êÃÈ5aüF5¬M³ô£•Œ5Þ¸×saá3¦Ì‘¿¿=§Ù´•ã­–YžÐ(&ç†-¨¾½â¹ÖÊK<ÿôŠòËÒHÌ¢wª„÷vÍ«ÞöéYâäB¨€zìjœ ! eLWKr“ËçÝ9:*Þ lŒ2¢e4Y ‚ÝL÷íåëáÃu÷3†è2мIçV2€fÖã³Eç±ÃV{#¡ÛÍóºw|àN©Yl×ä^ÿöº:ÛýÂ|[oÐ|"WI“Tö‹g5X/4³æ•v¦U-G¶ÎÞºXp`ZµÍËT%D©¯ûÅ©Rm=~ýG‘Õ î5sHñ7H†½âLÖi ‹Bè¶¹Ûök´F-VÎ/aþm*˜ÝQ}ëOé²dcƒ§½¬lŒ¯Ãe^zX K‹ê³æP€ª™ÊRyl[«a0ó u> ›”%þÞ2yd»RŠòº:­GÈŒ¾CªuŽíª¶óš1F ›"„èNµ™!Ø@ièábæ|{ϬƒóœPÞ·Ë}à\bÜòJ©˜¤ÍÂÀŠÔöÂÍ3*/[°v<ßaÈ"ðpWXO£ë¥š¿¡-ƒé T¾tfÍmbWµ‚¿Ý6úq,e=ˆ È^|›¶6 Q¿hzïO@] ’J i©z­%Ðù¹1ê UH|§·p•>ˈúöku>ê 3‡ÏºP $¦Æß.ì_޼´s‹ˆ+ø3I*.U ÿú,:85?å8W—µ8²Æ¯ôl:m5ÀÒÉ·Õ¸²8E“!ÌeÑZ&lá±1.:Ü8eKTN‘s{´?Õ‰¼…óLiÑå9»ô°–a5Ö°x,µ¸,ì¤KQ…#àйÑΣ£Y¥¿íH{Š:^+§q¹UžJPlز¼©n4¡!èñ}|¬´ÀuhÐy ÇP:G&1»­®NÝC4(é‚úûéøxŠp”‚MDsØŸWÛ0f(ñT®Lgæè;˜íµÂFƒ«VSEIÚeš@V.+ ¦x)ï;·LqüÊ%`÷¦ræ§idE¯‘wZRçí—fjÐf¶ÑÿH¯»sLƒ•jaõ¥0Ùýi=ä)õÆ—_$uÄ™rh˜•»yç4ìöFMƒçmJõÊNÉ«XZ/Ýa·ÐŸšü©·€ûC‰Ô†AàHÅ…Àä,í4‘ް —VoÅ­Qì{ùتĘ0ù[ª(þòß•¿hIŽ!oÃC¼DZ i{oðé«+˜—éÚÄ4†Þ)5š¾ž“ÓÔ·57ˆ&×÷Åb ‰4Îr9 €f*c¥Å"Û¹éU¶ðÚ®¥ Û­õ¼õ0% ˜PJó = Z£ê§çmÿ*r&,À–…¦¥òeľ`¢ºâýÄðlhtcwÙ`X3ý/ìØ\fò+Ó*Òä ³]ß³½ºõp‘h»TsÓ}ÂaÚP†Ð$ UQUO Èîðô¬×dìÂ=¨÷lKj>ºK¨î”ÌêÓÐùàzÓüÊÕÈ’báoÃmúo=$}¿dkžåéêì̼ó(9½;zÊo‘8¿K²;üÊ”ÐÒüëô ‹_ýè QQ&rKë¯K¶ç:dœÏ ^‘WíÁôÞL5=Ò¿¹¨ÉŒV`wjÒ€ã\<¸—ä䩟mZÛÂ¥K »íü²XL{n­W]%=ØKÉéuâNNÝNf?Ì×-·UűóÒ†í»/-×ap÷’ÝW–¡` p!ÛŸž"É2ˆ²0¥ Õ˜,ŠîþDè+ƒæW´¾nŽU4¹Á¦¿\ºnޱÂ{F„[·°¶k’¶˜ öw‚Øc§ :!QÚµ¤ ÈÒ$iu]áÒRàulnRᄀ¬ã=¶ö¹FuÕV–æiÄñÛ'R†‹kGG¯Un€··Žqw Ä.6sì„yåÖl"É»Ê÷ÇÚ*Lb­-ë°BÇK4'¯´Ffj[+]„“ †XAè‹­‡¹X*}!>úsŠAŒž‡(©*°;Ð^Ý«F7]ðTþǵł%,7âTKå¬ëzì›Ùh˜š½§×¬Õåƒ;ÑŽ#G ¼ý¨{›—‹·ïàÏ ÖÕka¬s8;ÙeO›–ÂäËë£ñÎ^˜U¸¸XšIs’¸ e©ˆ õe“?èxÕ¢ÃBc—¡Ñ±q#d™? ÝHg{ç.ëXuzÕ†Ôf¬TžV¼î(©‡ÅöfH³­8ˆbï`¯,|øË<%„qŸh©Î\ØÞkC€œµ6íw¹RÛ©a9¾ ‘‡JW†æ†¶Æ^k‡ÉÝP'/‰j íkSÃC‘®¡¹R^ªÅ¼¾¸©mFªê‡RT˜–ßë0q5ÊÝg=¯ùMöZPßýATÇ•›DÌ?޼·m’ecáË»ÌûaË‚»ýô9vðgÚgÆÑkíRá qC~•.R|Ð.«±Dc9­öWq¥ˆ©WãÍ|Z>·9ÙÆß·ëš½+hXxŒ!¯½æª³µWÚTJNª1–È·Ðr·OŒØÖÎ:¤7%¥U ÷%¥±ÚÀžï) ï–̸^Ș&ðiÚq9iLD)¿\T}ü~t ,§±õÓ¼­Tð”4ª`EÚB^ ^ìZÀ n?~m4Û ¥ŠµÕ‚ÞÚ½¥ž%ûys(*-m1ïN@ù–ƒ:ÅšßÛ8¥f7•ŠGm·°¡&1®Q€‘°.<ã³R|Ágê¥>Ö*ãðLážG_aæ¼sžƒê<Ét$™–n:™bœai­ üIJh‚µ„ôÀé¸>Âvi¡ÎR1JÜx Ÿ»ôÄhP>½¥äRÒÅN¸×©Ÿüc“GŽ\¢)'’qOZQÔ «ëÓ%žëÎíºz’s=(‚IøÊ^ö‘£Ü'"«Iâv_;ĺ_N&¾Ùd¨¹ø*œË6ƒNEAÚòiêg;PH¢#<ÌÁ>À*?”/ö»QÊ‹°ìJ=áXeÚ"¹I|Ⱥœ ò ëî‚ÿ]NÞ}@T®L§äk·é2x´HÓßBöù-õ@ÿòÇOóPòźº×ãúHñùåHTõŸ·¿Ä<Žý®Sö3ö¹ç}&8Ÿ`[MPæìš’¾åÏ…ÁA*¦íIœX¨LUš=ÎþÌ=A…/˜JÔða¦†šQ?ÊV«Öâ ¿ù°XîVÐcÒj¢P/5£:b…ò¥­lžXÑI'Ó8¦pb5G3Éù× †û‡é{ ëç¼Y¸­y†" ØË±õ@“°&×{ŠÉ¶yÆŠª°ö°K&Ü(¤§ &hÁG<´[ió Õ(wȦÓ…ZbÆõ¥üV®¢{%šŸwfVÒ‹4.Š“‘r€‹Ô.Åy”^ÂYñîéóê•E”Í0Ê uJK&„ï˜Û`Ö Ó$Îîß#äH°•ýK[Ñæk(¬µ¯™Jt !Ê'¤~¼ê®íµ·éîH±ó¬$B£¸‡ñP\y—v‹­MÒ©/?„û¬²ƒñe}L5²†Ý|£¤Q;îôö1×YxÕ[;­°<49ñ„ç» ¶}ow4B•“òö…nG­ûOOL@$SÊ`7táïlB¤˜UÆu¢v­µ|'³lÉtÒZš‚åS,Õ©l(¦@ӱꀊE>Iõ6†3¬Í¥O"eHÁq€)Í´£‡§Àh3 ÊÞÿ|ï“` =?˜)®"U@!ÉŸí02áÁ±àÝÙ)õ!O›»lè Sõ_~1¨O–¦›&ô6 ÊLÊßìçjõÓCŒAø/ÄfÔÝ‚I_6CîÈNRn\ËÍ0½¤”>å%:eÉÏÐ}ÒßõÖX¸kXæ‰âh¥ÏòQìrýòþNT/1õ‡Æ¢ ýýI¢U|¢³ìU³½/ïgcxØb‹ÝW[NvåM/U·`Îɨàzƒ¶Œa2“¤n*³}wœ·£¤6”á®kÎKcÅéoýd6 éMóðŽ -Gáe¤— Ú“bBz{ié—kgW'7b¼ EJÀã§ |ÌØï{xÃÁ<;»¦ä|JjœY¦ ùM--Hö¨¤~Í“÷{ò{í*RÒˆ''ÐH0'3Lù¾ÁUûb†ž6ÃMçD:CÆ)û÷4 8w.¢?…³„‰Žþ¼Ú<üÚO¯îZ­&{9X(h,@u KRI‚ZÓ²—þ9u±O±õ±Sãg¦^¡ ͬ!ÈÖ’.bpCÚúë&¼\‘bo­†êh?¸ºè1vŒ}Çi:N‰ ÓÛ;Ô¶vZ#QtHÄÅ(¼•n÷‹k×G*3÷©ß±!µõ±‚?­éãf\ºFyøD¨-™²9]0#“ÕA=—j[æÃž6µð¢c#L 3bÔgºÑÎ67Gbrì‹,®8NòÐÙž¾©~í¢ã6óa —þq]Z:Óà ó`kÿäëÙÛœT¥›Å“2A_4k_s®~®N~–¦ºÈù¨]á­¡qß>Ò ¦ýˆ ër󄑬o…eñÓSÅÈ<ï²²½`3(H˜­HÙCO¿úI‚2O!)å¯pH’fA¯f§ü{MKG QˆËÕVLqTEÍÇ@aÆÀ†~¼C‡=\7ñé‚8sÁá܂Ԝhµÿ¾ç½YüÚHLZe³Þ%äYÆTð·½ìƒ‘—+i°>—æ&Ü'¸$Ü3ÞáP©®2U!¤ÁƒÉP+7ǤúŒh2ò× Ä¯?¯§|ëF‚·|\” M^þ/Üp-¤YT§•ßಟ")ñòÏIü)ý™Ö­T6W›]¸Ì@†uj€F+‘ú9Ê#ˆVh¹¨ GY|M-m¥RÔPX¾£rðßálæÀ¶–C_ôWñ‰¹´Bpî²ûÚìU æõ5–Þ,%õû°- k”º­À«cÊta“Õ«Á|3lq¹™…Tê'K 2¹º)Ël¦?å ñ+z.‚¹ƒdËö3*ÿ؃fŠˆ¹S”,…N›z…í íÆÞ©ýÛC4êôÄÍlMf#}°b¼p^£<¢gãb+W¤ØÈaD§ïya ØKë§„›Ô¦ôJÿ~K  ¹Hw -ØÕ~ÑÓn\;Ô”¸æúI¡êºÏ…r%Ïö<âV¡¼¶.ÎYËÀ¦Ð^¹=†ÐÂmy Ϲ$1|HÏ¥”áçÑÚ&ÚÉEJæ½òS*3€?Óª¹·ßš¸cíF™” îEX+L¥YQþ ªžVc”²b*ñQý.ƒ££¹=i+ÑEÑIåè—>)„…= J’7Ïð UÀ(»Ü29âäÛ_ª1ŽuÞ¢£O¸î}kùUêŸCƒå¹Òl„õØn*8±É…8<œ™€6ø¯´‰Øô¸Ä¸kÖOT“qŸÛjµÞ  òÚ@Rœþ†Ž’’í£}¸ƒ‹è÷÷«Ð¦’èé IU)âé›T\USEó:|FaTG€cË}k£ÐLŠÓÛ1k1^`@mnþAF—bžW¹SÖÀot‹ãï•^åŸ7HVߪÆX‡`Éñ#ØÓ\ó”Wñ©ŠŽhW¥ÏÁt°\­³<ôpÈ®¸ÍÖW¿Ìœihœ8T¤†‚À<lu÷Fr²˜=WørÂw´ÚIWÐ>îÕO§fó±ôâoZ"ýŽ8¶yãÜföˆôÒo,“-N+Mѳ†V©tŒ¡7»NÞ>…¢d¯P"˜`ç/ 9ö—ü™‰MÔc©Ýàê]M¶§Èè»Ïuí*l¬{éèbƒÇÜIkC S õO©NUŠÐ‚~(†ªSY1ùÏÆÐô±e…µÌÕÇþFRøÀì3wo“ ÊÁQ‡«_Ýê@ÃÛÖ¾ÌWͰ–†~\öŒNx a×3 ''mR¸u,ë%”géé dä ´¹JF'öÛn†îòBõ¼Ã£l£…v–ÓX±UN2Z“ˆRùbóÃ-ç ƒ×ó]ÅQSÙM‘.ŒQ­ÈrûéÁGy éi«O?MÕ¡Hë×_-ÝHå€fûv0}e;ûJ÷¡Å‘•g+àæŸ¦3ûc €÷Mpœnè Y—êÌiP8Ý(;Ÿ¿Q¹>u5{ (Ó5Ìáô™‘¹à°G£õ³[Xnê“*`¹ËÑt'd?ÓÐQä­ô("V‰„|-„dëÍ´òPùƒ[Ÿ[|Oæl7?z úÎy\LEo–tÛ¨NwŠ‘‰ Ù] Pác•è/`»ÙøñT¾Åæ4ÉùðñÚïÛf]E¹¹,~{¬žèdg‡¨Ž·¿dµ6¨p þpl¯½Jý`óZhkÙäc÷­ßc²V_Eg­Kè®e û¥ð6Ái›;›ƒ­h Ržuv¼@,Õ = ’&â†46É=ë™"© ïbãä9ÁT¿ÆFÜ´ ½hWgë¶‘²Ñ¶Õ4aÅ„>¥2ÎÂ<žú§!ñòjÀ¹ i[fL—<ô¥`úÃ'„ŽÚ €ÉC3¤Ág×_Žç†ÙÌÔ|8éwѽΘãÒ¡µŠX›X?7Ô7?;6žŸx-9T?9W-]ùH¿J>Êïn'ܱ±5gm_í<5\Â/'ÃT+u«tÏ\;é´2rçóÐâqk¡MKÒ¦!Q¥qwrUÅ0t"¤ÐLÕr;hN”IØP= If 9N_uÁ#á:ý5Éù9âÖ/ÒÅŸ“)Õ´„úÊщ³tö½ËØ2?¶6¨S¿†2¾øyÌÚ3,Óh¨º*`xcþÈ® z†‚†d÷Õn÷U¾kð±éoSŠËÛZîWkRy¾"g‘PÛN‹ V%ròôÒ¤I¢ìÃÝ]ƒ/¹KRÇ8¨%Êå!e/ò;¸ÔѺBžº•g‹½ †kånÐ[=pÛ" αŒ½;†å'¿H=¨Ñ/ðÔé7Q[Ü·ž½pzõÐrØúyXžèYjpïÐÞ‘œp¼œ­dÕù§ù}4E ¡^ݯJÄ;€kYÆw^©Òê9øŠá}¹„4Pêo¢yûÕsØ`µPXOåõ‡NÒѦ˜Øà™hm³ lÄÚÎû”½á¢VºÝß8oÍDzÃψ3ÎEß$nã·Z?lV&“ºÄ]:5yl4|Y-•6å^ÞN"¶T#NÜ«–°6"÷]Ž;5©I†Ñ¢k¶ ûá,ÏžÍw¼Cm–åF×îðU,@ìÉþT‹¬vxNV„ÿlÊ;£Ê,dýÃ7!+w<5Ç„+K™°›áŽG©Ä»àªØˆ?®mÓøô$ôó /¬w|´N¦»_ÃÃIeQ᜗Ü[,Õ,^ØRS_£^†–H´ŸÊŽß¶y™>èÞ°¨Eƒz?¡÷1ÇéûeÇFŠÿêó™uÐüZÍgO9«WÃ#V.* —¿é“÷Ì|BIYìz‡+;òR§2•$&RúòD²3GO'AzúÿçïÆëxh4²hhªÿ¹‡~QQ“¿‚Ô(ž “ŠZš>ÖIžÉ9d–èÇå{šˆú¨xúd:È+K£:‘„¾sZ@2¿£òóIƒ2e :;ý7-üÏ Û ¸šØ°ú™ƒ·0öЇÿ¿äèæ ßì[Ö×aÄð¾YøÃìžx `Æ X84üç8·oý¸&Þ™wý*¤å±hÃPvß³9I+ËzЪgþçÔÖb$9-^ííÿuÅÍø6¨¿»q=ªxÄlñ†—C!wüEûâç`8‹*é¢6Yd¬ˆS6æ>%5þçá°|¤yʬ}Û¨U‰Ä³â¬“Åœ°„T®tøñ‹ê¤»I;ëX)NlOðY"LRuï‹Eó )’cgš7ÓSõðR¬d9²ÀúYÉ#s¡(q¢ÜBßrBDºÎûÍKê‚|Vw $ù0µœÏrzyaÚü8ݸ¼w‘&¸‚,h¼aÚiÃþÔ ÍÊpäPÅALW*9ØPó~³LJƒ¤·ù£>î E/Yö•õC8oÆ”‰ÄùµŽGp~òUçòy²·ŠË{¹®¦8VF·p¨Œ¦tK!Êì¦$ÊÜ­8¢¬WêU…)¿Ñ±m 5w¡¼Q¢_ ‹êÜ5w <¼àt¤^mhü’´ðÔGºq¢ZËøyr,Ê`ö™—’m¤Ö2´2ý†^®{WÅfˆÜvë£)¾¾R’Κ–] ¤d'd5)Ø‘"LŒ"xûèú!á*Pœ.3ˆÌ/zUÜ‚yM¸+š{ï2¯ÓKX, Å -³ÝÎ ,û°‚‹‡§öf)Ž“°sw(‘»©}ü7P p'Ù99NÊ$Œô “—õ35=®ŠÎgPT‰V¬zd‰Â4Sr«;¸§™ãú!*_Ä{0ƒà£àP&Ã(‹8FôñgŽq…•CæòÔ£ÐäËêG*Õ¢—äÕ(”cd§ð÷†$ôòxMÎ5Q(_ÂEQ*ä£á8šöçv»f`”Á§ï¡ØW{dœð§£™ýmW-nRætô¾*Ëjz¶§Ö°FX°ǧô€Bæ÷ÀÒ[Ú%»H#~HGΕ NÓ"“ǹî=â·òWéxãÞ°e3%͵×5ÃòiÕË2!!}µ½6i‰Fj‰ÅRBWc#Γóâ¡Íó Ì  ‡«¨Úy¿|N#\‚ãΪ3§ƒH‘"ŪPZßäW‰cû°1¼#bF\å9È…Âóñ,§,wÏ!ÜÖýèxé’ìÍı›º@÷k\Üe_àÝ|Ôx ~OÈ;ùY"]çuѦ[ÒÈ™[Ç%ÿ"c[Ý‚…ÀÜs°‡û$SZÏ… ³_.`Î¥Éó}+jmEždå÷Ö´K赦DÆ^óŸ²L2R ¢Ž?‡­ÔÜМ§¸!U.Â!‚öÓÑ_‚¨ÜnÕZlp£|Æ„äkØ&ž²óãŠé>’»ã%Ìáu…³G†þCü´,ìÜ–r¯êBDâ¿¢P¾åZ`Ò†ø¤ÓÑà6!%6·#JäšnbRð^.>ˆS%nœw™²¬–Öýר!ÃË=þ*À?þÄ,¼Êk–I˜€¡ÎYé0iÀHt¥»tn)‹•ŒKèUb‚”d_²)d¿Šï%ßÓÝ}õu}õbÓÂæHŠº©kcóó1ÉÛ€ãlϘŒzºÕ¼@ÒªÒïÇæ½èàI›*°‹´ 6æI °êÑ%€L9QApÍ6½-zañ^½POýB_ûýzëe[²k¤¼u`úæY×.Äêž ëozDX^ù‰r0w‡i3ß)X‹/NJœ·¸éD­ïª=es}íï„ùœæ#ÆÐsÒͼŸ=›6[ Ýç®~C¯d'Ü Ê/­ÄUàÒé4²ôk²ã`u)óF76²¯Â *HãMm,´m@~ œç­µå„šh ­,κøD€ðÖDKÏt`CW‰ŽlA+Ïmä–¤y@àKq/ófªh_«Ýü²ÚÀ]^ÁŒÝÄ-**ŠŠŠ"gÄóÍçYWö:óä×Â)ùpõ´/«Ûy¥ÈÙ ¥(SK[<~|Ã0+2ÇíËï­€ï{½Ù…þ9VÏá0³ÁärѦ¥ò›@Mú­³#îøä„¼œà<û þ›8IÄù¬„೤$‰w[­ÏëiK”ãØõT¸(é.¬d¬Ž ÏÌqM¯àÅÎŒoüÁ‚0Æ2ðñNÿHq²o)×!®¢èö¢ÅÉ$) 4| ÈG„ð,zª!w16pXF¾Zj):ù'$ƒGmzÑ …4âÝ3ê–\«8/0C¬ÊêJæ8WâRYfHF±ÆV\®íÌkK±‚=n…k;ïIÚO­1ÇB¥¯³"ÀåX‰³· ð}À©Å½ª¯:D»(¼Y¶ÿ^Lnôé≬ý\´ª>ä§nt1[Ÿj´‰¸¯qHì“u`|NÓF_²!Eh•ªÌÃ[{¬ÝÄJw_z¼KÝç)UD™¼ÊÆ¿¶ˆÇÜV-V 0wj.|{­rm•FeUõC|QyŸ8€qÆqÝu,ŒÆÒã‹2gÕˆÁŽšë‰Õjt(€:üLàªDDuÈŽWL¾‰Îfa(B Û)¥ù¹@΃âlô[Ís•i 6›9ž4•ÔÃø‘}ºšÐCè‹]¯ñ›ôáäýü Îo¬Ë¨à,¥EêÞÑ—X¡Ò/ý‹©]Ó7á÷^ÃsʶïÅèÃX-õ–ñAÛÊŒÁê®­ß„èŒÆ=d­?lײַKf#ƶ‘ƒ•„ ¾@áyúós¡ “ÐC3xò¼HüI¡ ÌÏ“}"he=´A’Úâ|Ö!á­NUUÖ…(‹±™æâ¡¡×A¡Ùœ £Æâ²ŠszTºN2ŒSO|–ê¹YP‡BrÂ+88ž]tyOgx« D©WËqû×êé½µ²°EœíնϹ¯³Ü©g­·ûŸ1Øü¯ü~`¸æÃgžUýÜR—¥8yt-ÇóHhm߀{Œ9±e]¤šVœ¾ ðc>Löñèc ÉO º±†˜nã,âyè,Ã)37dØŠ`ê…{&<èú¡õÂ=)1j1ÝA9KÉÞŠh¸ÖíýŠLŒýü0Û°ñ•šêö"_÷dg¦m#a°èZz†É0Ѥ|²Ù„UÂëZ¾Æ›R¢— þƒ ûsGeÁ`0õ ÔÿøpkbWf¿Ö!¦zÜKIZ&4éÊÑÝsíg¤æÀNeW#gåF%×JÏ»kèÃI=sÙ;6`ûÀ^’níå<ÝÝž#GÁ¿ç«[]â®\gþÜÞæœí-C™é~4À7­®|ã©¶V À/*—¼û"Þ»û½IËÉ }Êý¯oP}u9ñ/$šÛÔêGÊi/»œ—³?%6­™›¢¬,§p_]“Ïø{ÌfõáÚ§³²o V:Ñ]FÄjé¾Z&ûz =P×óÇëo¦UÈSælñM °lµ8o'rˆT-Ž(?¹&°¥Å·Âë`£@D@¬<‹×†æÎ°q­pÀ=]ëª,mnµ61{Ñó+ûqÉ9Ë´Â{Óî[gÚJxÖ[ÒµC ïwÏ÷ÃÞžƒ¾à¼(úŸ° _£RŸõõò@Š €dhü)LŒ^P›2Nœ˜0é bµI?Ö[õâÎÔÖéÏ¢4$: æ)ÔEÐVé„MâþÚ ¾&¯ Šn\Ã9pøC{8F.ì¸_§Ù¾PsNAÉ=œ£ FÎÞ&!vK¯Ô6D8wFq¡D0- ü¬4·¶EFXK°¥1;þœýí¬°Ø ¨=Ýá¶’<ú£-ÎØ¶ª Ðh—@ÀÆGë@€÷1ñ¢¬Ä@ï¾;ÚïJ·¨Û”Æ`wã‡+˜õª=…äz6|¦ë@E` øáÚ¬•VÉX.•,õ vaK²Î†¦v"ÐÚsÚ;ZpXmRÂyr¯ãü/[IlîÁ»ð81— 8¼z&è@Ùr—À¾EP³ \`YÙúäÉ’Ó[“]—íI<€éà7Ö!¹ÙÉ'g1,žQæÒf9©WŠËacþä¦9çiD~²¬1ÙIî-E⤩‰ì_ÊcsHœN„”̓rŠ&­c`óti,´¹æÛŒK …FEYBcæ˜ì[çŠslB–:-°ÁtÁcO0d“ w©ÑÎDÍÕ¸v*|l~‘6BËÁD“´8‘ÌÖ›iäC„ƒ¤R=Ͳîëž#ÍUÊæ6ëZÚN ÆÊÇ'tR ªž]žŽ£{Œ W{g7¥^3%5y»:Y7"[ûbb.çèÀ×/ý—än’ëø‰ƒ>Ž=Y¦|4‘¯n{èû4‘ÅG/îf k…ék—Ž}rG"* r w'Y>eC HU‹k~xÍu3ÞÎÐÚV3n¢Š˜*îPYì€_DÓŠ‚à‹&hA´ûÐaêÒ)¹Ýì;˜mìÆ1wªÉ3äÂ^Bž<2t‡:¹ñõ=4fI¸L2,ÀqgWÉWˆÁѸê®UÏC’ŸÝ%c' ‰ÔÌÎ)ߘ'ì«DºDERÿØyeP6:–{“Cº ®úL¼ÍÍ –>å¸d&¤!”f b)iö¸kf.¢§y·ÊÌ &`ó£–+¸´;+÷‹° )IAoÉ™ú¡õˆ°{Ƨa½˜¥æÚîu ádd¢”|@-:PÒ ÈÉ-…‰i-¹íí%ÕÜqåâízdS´pÄ0xDRf Pì!O7Ý#ÿ¬Í,² ³ÍçžÒ]‹Û "áz"¬«_U¹xÈ€ æ»hUö Ž|­ÛQ¯}&²!¯Xu¢Æïcëüá©îáŸ5†&†…¥Cw¸hEëЛt°rTÚE»‹ãÏô…Ï8z¹Èµ¯,ÑÞk90¾ó¹y,µ÷ÎýÛµz©z,“Ö•ù÷goŠŽW;Õ@`‡ŒuÝ\ÑÙͲe³µ¶òý´QzÖq=fƒÏãù¤Ty*íæ¿#›Êã}§©ü^ƒ(iJ©ºæØ Ç…ÁÓ™?cÎäÆpÌ ´ýnˆ?(Ç'ž#ÿÃ÷³ŽÓ÷¤Õzß¡Î<\s©`(´túÏä˜ámí'ÝÒlR•¤Rºûãéý,‚ÉhÇlä%e‡/óøø®õΰÄÎáQõìÕÝ.uM/]7@Ö$³îÀo& ­ÜÖ© $ü ¶wcȲp›¥`k)rê/Äl¨0J| œL|L{¢LdÊÒ’ËØ[KÉW†ØAÜO‡ñ±g: ºç‰#8(”€§[ƒÊɧ ¨Äi¶ ðóç¸NÊèjT;{º¸ù¾¼y«žŠt±6Mrôr멦*/`b`Þ¶ª¸{¹“Uþã ¸¥3zmšÁcyÖ‚Þ±åžäŒRqI=õ:VJuƒ‹YTcåÒÂŽ 0>ÀTk7{šôF¥ÿHéRȸôtÏä&¹#Ýßß2,9&‘å¤dÙLrc÷…¢©÷© B§=}}\d+ZŸv("=xþ©'‘,®»açÅ‚ï;Íîh‡Yá GN6`â ¹kòÈãñ©F¹M¾Mnþì7 ^OMq„kyÎÌ® ̵ýBZØ¥‚ûmÃ%HPÌ®ü›s¢|2û¨oÆ/Û{v¾øcQ={‘†ä@بvñ¡ÇÊó:,’zëêÉêý[|¹ÞàÉѳ,u¸·íâic0É÷ôæâ) sÑ^ô¯ìEÁ,rLß»>ÊL·Wüâ|΋'-ÙG‰zï;6÷éV¼¨îs^4¸¶ê¢‹GãW%6*Á¦vC>(<ΙòÒåg^é"`~òfƒU„ìt2Ì¤Í ßüUe¨?¯l‰‹7Û©,K&í¤3ú•·Ÿ=`<ªHq¯F{¥i›:IĈ ïÑeò†›[‡ì(J´G¤Õ šÄŒgºº•kí p¬f* ¹ô`C3ëÅŸ‹~;vȳ¶³{› !‘c©ŠÏ„ßci—ú£›†CÅ7eªÑÙ‡¢!ãµ3V4ïÄIˆ-!ôL>‹“aÃó¡K†ÏžÊË}󼞫¶ù®H‰3•Ú3q«¿HR*äþŒuh¦ÄÐ¥nÆu“ß^¼·„Pª pÏN¬®N7!fÅ#S²ñ—#‹”4ù,ÑKë °éWk:$ 2ã:ónAº:]ÏcîýàœºMÎq™†Ã·4c9ÂEy/cá+Çǽ´9÷Ú¹BãB;Õ=³~óéTåm€lŸ~&úY.—ÿ¥|öËàøsŒá³(ü>ÁáÎãÅ"<ýìÅX£ ‹ˆÏÅ×Ãz†XB»cTxÂÊE=je*n´¦² ‹wê.`o  »^-£{üA±cvÿÌÔ+ÒbK÷Uë¯RuâfuÏ(GOÍàY˜‡Äú3mV!¡ÿ¬®œJÒ½çje+“­ê(CÍ_,](c¾ŒK»Ò€ÇpsÞÉ‘Q¶o½äæL-=yÁ°]lP’|¼%É1÷ܳ¶Ú¦gÄ\‚wƒÎ'Á„—…2¤•4•£AWam>á·¤åõ¯Ë£ÁóÝ Ê㤘4y¼Õ‚õ&UV²¨ÀõMìŽ[yèÞË õî+CÔ%=½H¦ E²Ua<ÕÝÛßLˆù*Q,1ªRý*ï›Ø±ih«csß¶H £Fÿ>`]gË0¬Wè gZ±½,J«´Í7$ê¢I¿Ñpé{oÙ\–rÊåñœHÇÃ]”&õ|·ø®¬tâ9ôN©²ÐÖÓwZ¡h#)Û¦sʵ%Ëz{g™qeíºî2h†âõŽ õcQkšE&5õ:\³÷Ê N€ìI¡ÔÍÄ’ŠÆ ¸ûzeÁD¦tYMRŽ•UÑ‘»ªmJÚzÑÏVGÓ.…‰ö!T¯sšK'Û×(k‘WÕºM {¢ŒFü“Eu"aK±^ûžô ( l|…Jý¹Áד¢cÂ|c›F*¬DáDŠê}Ò. /ü¢)Oœ5ò¸u ç‘e4kìÙû¬6gÁ»ûÃöô3A Íi»ô+öÜÛx= {°Ibà“TycaóÁâ “›f;á<éËäʼk¨áQ6öµª&S”9­}¨±§éQ.Q1Î<Ê„“BýV.‰©z<ŠW›©:Kfž•ʽ“¬å} ¾ö>´!g-5ç¤éÆÅÛ¾™ÂjìÁ|ÕTÔ$=ñÀ+.”ØÇ0¦íÔé‡56NÂÍü¶Õ²+G‰ö=Íååß÷/k ë)ÚKø¼h|Óö ¼ÙPh@¤ÄäeTPd _+ @=c&Ó¼“æøýÓ2ŠÏóÊ«ãk/ÓÕ@éŒiš-e&LúÇÏb9Ö3CéyÏ, ‚UMnœ!;Å?:pé;/òKU©9~µä¼©Ò ñ·F#³ì øýOï†Ôqd~á±f¨»FÀñ<¬Áû µ!f^9ZF©ÐÙÆÌó~Ê‚ÞûjÞ޶$ô`[}òšœ‚èßç„”¸ù¨£êûÓ(õ%Šñ•¸ö$õ×Pùà%!b?7ä€Ê ²“%tÍŽG-ÐT ¾ü?pVÜ@Lzcüêkìe`ÙjM¯yÕ¤Ìì]ØÑOH“ß©Œ_¢¥!ffèBݨÎþîu Ç ÑJÅ+ S27™Ô£á¹e˜$]‡­\ëžX߇.ÓE@.‚¥žRŸÏæ’žnåäw‚S–aÊÙŽP2%ùÃÅGØçt£‰Ð’)€ôM‹$rELr"MöX?ã(SàŽqH?qLÑz”v¦s _/NîÆ­ŸtîQ9†ÜäÏvš!ø7=^äb ë!lêwAËÙÄÖÁ› ¡ï Õ´´16Ÿû<ÃÁÙæ·î @|çã”]É}X;o¯™+_ `¾Ž­MTØj~%Y© uM œ‡ãîÚš¿eÚKüžÆ :"âmï1 ü=ÖžÞå[P˜¡dTByþÈÇS áx`«Äk2¹Ç½!…fûáÿLX¥ð[à^íP&š¦Õò¶b±æG™P‡:]?åiÕu§è‘€ H½åþ€ÿ•»Uw„Šý6?WûN’½5QŒŠ×¤›u–1>ûQ„•”±¼Y.wcZ^r‡ ”xƒ-\Ѭjt–žÄ·µ[÷•i¢\Îà?¶ãlø¸S×é^‚|Ak«¨P7ûeÛ-<lQ”—êAÕgÝ^Yx7 “ìa5Gš-Ü‹w™¦tì±ûêrté]6Ûä“?“öÇA¡o†„Ù»˜$(*¥.Êå-vÞs-Ù~’;ÇÚ5Ž,¼’¾…4¢€+' K~`‘…Õ·ˆé6%Ë»r2#ó¢]ËIHêòÆåT®·}ù Å¡úÍ5»£hèG#µ¸§Âû2•»(¡„üV¦µ¤tP¡”4 þ`­ð7^™ìTjbï‘Fý‰‘±£!DùzuÀn&Ñ`9Ž¿¨a|ß¶ ÷úGÇãÎÐïr‘?ËUçÐ%Y”Y¶Ò`ÈsD‘búÀ@€'•{§Ë )I™²Å·Ì­¶†5^°KssåÜÞB!Ïô¥¾»=wi÷ åÓúÙK¸ZQ¯Ñ–1!ÁYã‚rææðI^5çÎ•‡nv¼j;-1†<ý}É;‚Mn8À^ˆÄ„îe¾fM{WË›@Òä=A†3†–8{ò¨q…ur¯½Î#ð½°ApAÎõÝ!‚&Y4xqÕ@ƬE™ß²'žÀfÛ‡/„Ëúòà|>‹²e?êã©rº³¡¦ÿ¨3ŠCcÖŠõïvS˜cYèJá`3Ã>¦Å°)ÿOç!ð†’ £ç… IÙœüîC•…+?1r1+LÝr»ü3Å}&›­ º(ži)µåpËχìKãÒyR¦i¹ºVd|?Ñ9ºÞ? ³¬ÉhÐÅ×d~Èé0ýº ¼ÛûÁêce>_Ðá„azÊf5êÖs\G~äº9ùðÅ$"eãrUŸ²³²W¿“ÎlޏʼnìíÌ,[ך4ÌtÅépfÇ Ë h^7‰Ê;!Z#GX][ù@ô.öÂþÔ²±×2ãˆúð0í!a¼õqÄdþ&–+gYÍ+@záê?voÔ¡ÙŒ•:5Gi½ŽåœFãçÈæÎŒó5;úsW¤;3‡‘ xOnÄX ÌüÐ NîÁÕ¯ÈLØé–®êO»uࣴ‰9LÍ€%ßJàåvÔÊØú/œ €NAËLu--ðÒ?‹ž6÷éö‘–Œ<øø’«˜@dÉ-íÙÙtjÚmn¯­{¼ba˜3†ZçÚ° æá§Y¸¦åß´åc "¥dH|‚=k:‰$GÄÓ*)ɽu«Ï͗űQžÙ«Ò怌eŽ|Ã{pãzC¨aʵ²Š’üBØUèܲçí™Ê\(õ üú )*4šÈoË©Ûÿ´1„Øê#Ùa­r„®ì¼¿“ˆóÄm[ov¨1¥Ò¸£ctä–Žé™úÕL »ìéPõ¢†œlŸ™pÚÀ¥,3Cbå$àÀA‚€À/°‡lGb¹ŽüIÕÛ*y ýûÀ[*ÃÉŸ/ÙÅ+Çj1šZLÛ²·§èëå‹”±e²¶{”ã^(²å[ m gHš¹S½ÕU„® ´“‰.yAk,se¹ {U¿á"'E›ŠúoF\ÍY£Åú¬Ã,¹Ö¸wë¥ÈÝ>j»N5•—Ÿ;?;¶AiŸ5|_Õ¦’‰k)©—N[ü– $™á2³tZ#gM|\Ï뫟ÓÈ]+{`T͹³î”œ×›D`gœqtBíœËȬÿA?æÖ“:Ý+ºIBª¼>ÛéuÁ>(œß§¼~Z‰‹¤¹òìf†…ÿ™õ˜AçÔyË_˜=ÂÕ:0 °Qr‚%ö Ï˜˜Ùl¦ÿéY&“-¡çe¶öæ9õa Öî“5³GÇu´YjWò@ØL#`v5ôm°PŸÝȾÇvÀ„‹¤ò–ú©ÜPÚÀ)\ŠÐâ¶ÿ -ö\¬M^¼ôèæFÈÈ @oˆïi€ï‰þ~Œ~YlS~`0´Ð"Ö¨×ÿ5")'ÃÙ ­nŒ?M¹ªXV à{¨]-qRüé(æ0ð»L©w€SÔÁ9UNÆAßÕ¼<¿£éO£Ý›ßà^YªæßóòÒrUU”/˜åŒúËö/ÓÆcUúÙ—üÖίÐýoôéoN3…õQÇiKL¤‹›'ïƒÊ’Ÿ†dò¤°qâ%’p R„&ë4,òæC-“.ŸèA€)Ú‰ßý:³É-ÌJ |ÂÉ´,ÁNKµh™‰•šèóÑB_BOdºÚM> W\MÁ»èï¶§YÂ:Kæuà€€™E‹J ”!;ŽÉ¿DgL^¼´emÉp6÷x¦Wú™™¢‰¦k?­U‚FØØÌ' YSƒÉ(ý¼ôMÃŒÍéô»‡ù¶í†ìžw§(¡/ئøÉËu.=>-ánˆF¸‰½jîˆrÁÃÔŽ¢Ñûi8³JQ€€ÑéLx°g†¾(?Y‚¯rÛŸÑ%Û |M“HT´®=Й?¦‚gïDð¤0|Õž!xp¼¿Ì­sRá~‹n8FK·_—Wè=:×Ç´«Ý`Àí‡Zrª6b 7É‹F+t0~=JMøÄhU=;…بû¢>Э¹|¡͈ëBÍùQ…ƒHò49Ê,2)²°nxŽ~Ò8æ¿ÑÞEf½|õÕý1ÏÝ*Mˆ"1Þ˜’É©ÁŸ´˜šq¼×ÄÐbó¹PQöjHF#XörÐû ÔÕµÌF¯ážõíE:ĠÀ(ðŸì ¶OcŽÃUÁ6q³ä+41, SÙ [öxI¦Ž][4’@ÏOš’ÄG‚w×cYyq8Óy@Ç} 3på­¯Ò;o4<@F饦î«ÓuÜyŸù;‚ñ•«á+| ßKJx….ïÓHGš‹ÖÐ÷øˆñ»TââÍØ‚ýf(9öãú`ïÏ‘LÇ­ ÕýTZ`ÝK Ì]ç‘ÅmÇ8 êMIP¬(÷îl¹rf7ZŒb=œÃÒ:ÐÚÂáxÛþ üüw^¼ãA!‰¬¿Ç5(ÒÚÔ1PFZ!9—_§Îþô•/‚<¹Êzgë™2¼ta !ð’ð‹0–«Ùû°X•C.8ïkü[ˆ¦åòà×""ý$©Â0­° Ø)ó–wÊKHÀußÇ áþÕS[ ¨2©Mþ¿‡é}C=À²é“srö;¡¨¤ö0°CZí—.Ö[ÔËE1áØv·ê¿,Õ†\’W¡ƒ,ÄÆô™@‡%‘L… 9€/9Ì'FƒÏŸÉ7(µ^°Á€è+zrD“sËÈù©ÍÅÒª`ªøÚLd³=Ž"pãŸ]ì]Ê’20ý¬¼÷Žp7?줥\ù[Åî‹cs˜àT|©°ÑÿJÒ”½ð…óÍDpþ²°B¦ÑÆ€EçòÙ¾6qeÁõÍy¿)§Ÿ~'tåDvâÀ ˜~©ÞÿÄ@Û¹EoçhE±ö0eœÍüsh'Ÿjlñ³0ó²ÈmË*£ÒH|Í·b3êÎBÒ,b”óíØ.ˆƒ7 Xϲ€ì{HBàLcV`t2¶k¿ÅøaV•Í— N.;ª±Š/”ÇèǶ Ca"xÝ/ºâG úVû€A}}RK³%' ÃP´´®dü-£ÇïA‹ÜÌ?ˆ¹ •âÙᤠ¨ö†h Ëðøã@³?†Ìžè-¼Ü>ǾƒÞK"¿Ñ±}óÖoÝeañ³ÕgÁ¦ËÂÅ£n>÷qºòb©6äUåcÕ[ÊüÂÈ’6úò5îf’×…âŠaúþ«èštþSɯê½ý,ókw’ú,6êÇ0_@t†Ï% ªó0=0¢P‹´ù‚¢üqHËzq©{î™¶qÚ9¤ÅÜéÅh¦]k^†.b»+óBnáC°DAKõ¹;€8ޱUB =¦Yak©Ã˜Ã&0,Ú¹jÙ͵›ýH"±ÒÀ¨ >JÁN/†ÃY‹ÏöÅ ‘?Ä{qÖjQÕAC[á{»œÐWÛLš8´S°:Ñy Œµî’( °ÀeådBÚô^ú´ˆ~UÖØˆñ#Ê@öoFF§«¼œeÅy;„öô„î~ÁFn=‚NÁgUM ·k>ªJúYNpô6@Zœùœ D–¸w®îR Þ›œŸžçÉÍ ‘½¸›Às>¦ŒCÀð:py›‘6 D¿ „˜“j¶,ÍmÈ{5Ù¥ ˜ÏšdÜg”HïÂ0`±ðS< ÙˆA÷rãCÕUv‹ùGÄ’qn§ù]4‹öTÿäæâ*¯º“zŽqÁMëªê‡øÏ`JVø’Õ‘¿Â_Ÿt¯uf¸³Ÿoy‡øÆ¶[ç]¼ñ¨;‹aF1´¼yƒ‘D¿"Æ;wÕà›¹õBu\ }ÅÌë[BW‚æ] 4öÌ¢ƒþ×·scH m Ü$D`QTB*ÌzÆ2s;¶£¢ÙU‰(¦4ùaüÅ'Oûq~}`Q((ˆª¦·«)Uw 98eˆ»‰QéK§eÏžam;Q&69RäÑ´.šVõ扥%6#‡¨5 ®ŸÛÖÓÏ.}TiCñ/’˜¼ïI 6Ø#ψ˜ZЍLj†?­Ð„~güv–¥•ÀœÐžgIÅA [³ø]ç¿+̉ހeÅj¾ÁTû§\M8îw¥¾z>(q˜ü‰Ù âÑ{§ç+v‹¢Ó}õ§R‘´Ò.Ok„[À%ÖGNþJ±ÔÆß©É n›Ì©eËw3\ŒáÁãû·)@8ÎÓû¼ùªòhîa*¶6n[”d@Kˆs‹mosùÃÞÛNšÃSÌæq›ÿa¸Ö;[&£³³z×g医™Kçq’õßÓF£pÄÖB0 „8lleY5aVÈ~á@ ~eñŠøgP·Ž]àÙ|*MP½%_û äu|r%ÅÜV‡[7W¶žÉX/=æ¹yyØGk–Å€Šâ_3ñ KGJÅ­1 ”Z^vJ÷7§ˆ1!§‘ÈÚh-€ñÞ·†…‚Þ½ËÊB’1"—Å­Pq}ñs¶œ«‡ê˜ã%r@ “$Á&êMl±ïÚZ‹S~Rš—RœþÆ1zQ$ •G”Ç%˜EZ‚Iù¥õƒõ°›v¾}s.P²l$%$°¸ŠàÈM–¹mÏ‘¤zs·qò’‚ã”öuXÍ»|í¼ÌeÁr>x?6_ªAã¿Ï‚{ô¸Å€®”×¥Nœ8r|.µM>ÝŸžš?Ù¾ëÁ®Qé?åXÅ6r™Å'%Ɇ–íZÀ¥Ö(˜þ¼oˆ9YÃo¥Oaø<͸q:Eˆ)x,¦ Uˆk!ê#Úá$U½2ßãÅ}ufv)õÍ“²I×îR† „ÙLR„E@"ÑäKMÙâã™ ´4ßëýnVŠÕÓd&ÒzÛ¹#›&™/œð½ôÖ„ÌÍ-ë/&gSHQÑÉ×8£yï>²Ò×åI'."lóY¥1ý³ÀVo,)\â8ÔªH"û¹åœÕf€ÃYV“ï;Ò>µ$È5öáôÏPÛÕs¯vÇ<·mX>~3À€î{Êäχv‘“í¢ž ™¦‹«µ»­# _¸Â½¡Q+}(ÛzFïÉR¯Rjm”—΋Î;É©³¡B`õ¥ñæ´`ãÔgµHi)Û’³ó˜‚\ £ß¿w£#~3*T’ÞÄ{ûD/‚:9˜ý¨ØPzÚÙ[š¦Ï~ ñÙ©p'»™X ê#÷§Uò ±Šbe 3š¬ú¦¸kï]R’¢Ñ‚5ËJ?‘«ÕóíólpÍÇ .GŸèëØcÅZƧ| á*^ %—œ³ÖÌIVd‡žµqÝŠÒÓéóñs­û+]­UZòýEבV¤Žzž:ÀØDЧåLç©êméÃûËÝ–ûYdÚN?£ã–[ùB\%/¿q½Äó3×7¸{Ùn(R£éøàEl®òûÍÛx£(ëD‚ÇbÇÚ5±´‹ƒÃh%}B{ßé'£3.ÝÜx\™ªÐ7Í6‡eåȃ—¥…ñ4¯ÜÑŒ;•9ÇšnÂé_ú§™üa5ƒ!mCe·Å¤Ã yõX¼S~iç"[¹J`¼°Z‡'·¢¯ùnÆ¿¦q1Ï:Ý›ôäýq¶ós®ñ¶qY%ý=Ú‹VÃéévžÓ$®ÿtÛ|U™,}XèÇ–].ÜK—èhä;ÃðÁÎí.À›­&Ú¶¬]ä¼q›®2³ß¿ì°‚ë ³xÖNNŠq¬µhäæ!¶´^àf Í:+,tlY¼y:_, tc¬nBÌ<²Žð¸Ò†-úášK:_ØœôJ¬®SH`ú²æ²ÈÅA¯àš•Sƒ}5`mì£ra²Oü~§ø†´S~Œ´«:´îw‚¦éL$OqD¤ngm‹ÛE¿gî=­Ö¥›f CõÞž|i—¦ÛŸ‡ÚÚÚêNeN7P€b³tæ)\.ñÈgŒ ¹3‹€“<—‡>T@·Š®×œ~' \6¬¼UúðO: ü2×êff£ï,i¨*mñºÀÃ~ù]`M:ºâá2 î9Cêc ²¡9 àmèâáñ©B"ØÂŸþm˜ ôºfÞ°íãFª”$ƒÝ«Ìâ‹ò7®löq›]Õù´ch ¢Pc?xÐÅp™£‰ÂÜC1,!‡‰ø7Æ(f_Úî'ÿ†Îþ¶‘ ·ba.Wåo@­›à‡‡A… –U,óµË5d}6¯5¶S rB‚•œ»ÖaJ}Ævl]L°;éB¿ïtœ®6ç*GF¦‹µ\n&M¤!ሲð“NR¼Tg ¾2~€Ë{¬ù’©ÃY®æÓè ŸJËÙT¸qâ\Õª²Qfmk{ÁæZ‡3֢䧇)µ¶‹Ûß·*ò4·DE‹9Ä?“A{ׄ‡§ÝÅ…<:`ÂüÑ5Y–¶sÉ©`‹hçPá°fǺñ .© ˆ ph4¬ˆÈxÀ]W‰„ßöà¹ËG¶’Úд×Mº4‰ê›-½^yHsåK=·#)”}[•P½ˆÿ‹_Pø7L_`ßž»99ÀØ6C°…HKO@Þ&%¤äö¥¨ij½Pj†0'€åë;t¬—±hå¤ëSmÝd‘<8ÂJÚO„ÍF/v÷þ^aä´é¨¾ÕÀvtÊÎæÆüåõРжŠë¸u‡µß #¥eÜ”ÔÙúiÄðNWƒY'â3¹ü@6šwõâÈÁî†Ä(šË‰Á~…“”¤ÎJ³Î`?/ÎÇÕs reu¤†L¨Ë¿5„zæÆ~ý®Ûïgé 2è&ð‹7ÆòæArNLÅâ·óÕçÈù}ï|ˆ( F}‚×gG¦£•J™ÙdèG6^6®htQ¢?§øš•Š' þö (©b`äC˜¨ûÃ¥dEÙÒ‚ oÐ\××|-—:‹¹(ôê#4ü¦8€ãžßHí¹‡á XÒäqõ6ŸÎXn èÜùƒ!ŽÄo~BœkL‰öÙL<¸Ü²å=sî óÄÀn q\Cra¿2§¸p[S-h5‘µ"®EUÓ;¯^ÄþÚE)DѰ£öæ ëã7ß2|€,õmBuÞ–êg“Y(:ÒG–M;RžÈžpsÜOç>¾]YLºI­3Ic¶Ù¤ß®.þþÿÕÏÑ–úÅ£·ÙîÜ ŒÔȯ¹"N³‰ W‹4×X|b ÀœÛýe}œ7ÛÙÞXxý]†ìá#i.x«éºú¡[tÉàæöS_ >ý÷ˆ^оLR=ƒit%–×'¥@™VŽ˜‹åHfÛãˆ!)®tc'E”ˆì!"œÞÝõøÜ[MÛàTëGדÃ#LˆèÁùaŸc"+Qƃð`ÃäÙ9.{¢`z7겯¯o``àìËk‚›ÇU߇î3,¿EçækK}Œ'tšN¥Ÿ5fc¸;¤úsÂ8»ò|2:¹Ú()|¡™dŽ)¤‡§Ž–qÉb,ñA^‚À+¿G;\ç±IåhKʱ7<”>Õ¹ø%}ì5R43þÂŽDÌ:koÅ£;â/*÷ÊOŽWˆ rjU¹kÊ<Ŷ8Õ«z86ƒA½ v‡¯/œ7gF•%|æ³rî/'ßßg""¨Gh?XÁ yç€JüŸû3’}lÅ¡yiëëþÒhAÝ(*u‘Í,•ßkþ¸V4À@ȳ=dVÃh аp·õ­B²Nz//ic¸G€÷çAdû(¬ñ_7/îÜÍYÙè:pÛYMM_íø~•”{Ý«_9å=ì·²OÿRÜ÷ ·è¯õ£ lŸÀ¤IWÆ^‰ä»±–kÙÌx,CAÕÙ¶Ëvd?çsmm¤„Ž0Íá•OëU½é «äå¬Ìæ%"NÑ$¢vF¤VD:¦[>¤ÏùEB78ïí¾2„øÔâªéAX=†ý›Âð"ÔgvóÌøÈXS/3@>› ë+÷VˆÚÙñr¾DP}04Âä"·ú ³›^äˆ ¢Öó_~o[l°*Â1Úî¼ï0ˆèv–lÌàÛ9âfS’þg`zwÔoŽÁËÚ@¤¨ækÜÚú£0×SJ¤‚çµI¹’Š$²rƒ_ȸXèû$çÁ’&6×ì¨*=•y[EGê Ëk£:×:âùB‚•!ØÞyU4´,æ}>—lÛÁYÖ¸§aöÓøŸÏÛsÃåXSÿyˆM°¡·€TOý¼AºÖõt¹%R-ø‹¼ÄêżKÀºÉ2ö`ƒ¨c¥2VšiØT¼^¼o4÷Ö¨æ?&9<| w‰*utÅ‘ðšà.f5ìŘ.íèFro„—À¸uåŽ<íu¼‹é%ÍL§TœDÉB!H’:abŽŽ.v)ʃVFCM¦Ÿ -8gú|n]Rùo¥FĶ%ÀÕ,vˆ|À{Õ7輌Œ–÷©Ÿ±aþh¬ót\ÀÕµ¨éZÄ;êÄM6Ñ9/MïÄLàÕEñ7½ Wê7Fóm÷*ö;ç¼öìçá g`\Ѭýù“ÌSCL-§^V%Ôø<0Mû¹ÈiRäžsÒØÄ"„¢F(L›Ø,áY÷‚7nÀ^…z B>HZúÒ@¿÷…<=˺Zä7ˆX¹Ýó¿§ß,`~Aü9.>†ø~¨…ÏÎ%ü~æñ ü¦ÿzü¿5¨ùiŒ†öˆ~¤é‘©¤¦t±b¦Zõ~ZßYS+n°4 oqEžªŒò»ºq8ÀÑì€ñh'v´¡û)χz„ˆñ†¤ ®Œ7êí7Â~KÍQ¨µ"Š…ÁÐÄ(”Á’ÓA#Sç•0Îïè¢akòV=ŸçÁ¯-ºðÙÞ\ô—òDÁO¥'Ò7òÄ~©ï †Ôn¶Åv¸]Ám‡ žIª1ó¦µíª­«­ÍÍRØ¿}ÎmÔÎkVÓuÀôÕSÚÄ·eŽ5ôáH(tÏNMãº>?—TeÀ8–û^` ½¦Õã“á$7ȬbÛå˃Éz¢¢’“Âû¼$xÒyjenŠ.ú³fÿD# _S±°)$òAþá.þ¢…Ê'Qn `\åÞ{ÉÉkKëõË}ròVq骶ØM:µ^…ŒnòKSY4 /Ô;åÉß’„,•@7cm‚Y´Ü´¢ª´“Z?šG"Tê/ÔÞ­«§µ‹ÆÓù™‚2–¨âÄ¢ˆþï1û1÷¨P ©¹5·Y*9e­pÀ±°KÄòi'7`­ý*_岃·Ï"™,A›ŽUÛ dÄfönSÈ‹Sij/:¥’NÍÓ±ÂÊiv§–kÆDP›ùõ÷ôìø+þöå˜ÊHÜ$N8³Ÿ.À|1éI{wmSˆ +ôh?ÑݺDRÛÍ“ÜF'Ç•oCõK&t,âSÉ‹ÜÈcìÄNøºîvC(o¸‡ùaƒ5jÓü,(Ù+'b.Ú6/œß>¼›ÖFëŽ ÑÁG™ô)õwcá¿çÈ5èÈÑ@%1þðæ…öXƒNZäC'5‘cO ·­ÿ òÿCƒì{—<[ˆ¿°Ù¬íÂ4ÖwÑš¹Ä ‰IïÚôtä=ô—O’Œñ;ÇQóøSdçÒÊfuÅ)´¹­F{ôÛü:Iú•¥U®=Aª-žù¾WL~p”_Ûÿ9œ‰Ã%ȵü’•ȆxÕ”å~µ¨’HE̘ÕÌÍ~!)’ðu`^åÃÅúÒ~Àö~,#Mrì´”ýZpeêé³Ó®Ú.pã)ô·ÁÏôÓ®bá0NQ¹¿ˆ£ÅEZú¢yˆ9*08±43ñ`=ñý}VAÝJ áþgÈ‘ŸÉa„½‰4gœx­ˆ;Ù,òx1´8“^ß¼ÊlßÒo9 Ž£|î?{éOiÛlÞh`¾Â%Kä=n•©g¿ÓÖÇ06 YߘëÐ×ä¶Æ›”þX¼gkß⨼ȨtÅþ”óºï›“N5ÛSÕЮ]ª ç5\¯ÊsV±X€)È6…÷æ¶a¦°Qg6qFhðBKƒ½SäæºPMôÂ>ë©:R/{w-:›ª³ú—…µRÀpV¹>óÉ­¡¡J9…26±‚žÊRY]b -Aï®'lN×ò¶I¦?ùxÏ-K•Uéð”ºDÒGgá·ÅÁ"Sš+ºE_؉Æå<ßá…v&{Á |g˜å*.MÛi ¿MBÉUEȉÆÀ£Y} M¢x=¢ú*NÍXÏ!i2¶Õ³·ŽåY€qø"»Æ‰ãAhñ²V1öâuÿ¨æ‰)<uÅUDþt~÷!Ëë(¹–èàºÊnî¢úS*ëšouÕÁ8Ó‡7n¨…õYœ~œ±Çgè¢eï`0áIc(ña9h#KDéžK Ô+1Yn¤˜v¢²8 Lã2M™zb˜+#l/¦"èŠÃ%cÀ3ŸqâÞ{.êõä“vg‰áÍzn2‹2¯9ë`E#kcõŽètLwl¬ê×%wÒGÜÓ zr¿J¨^&ICÇÜ:tÖ2Íë±Ð‹Ü+êÓž ;†Ð‡c×Ïo­&Ñ6¿]`¿»ã>1_²úge†3.H1lâd:‡_±~Óîy;ËÄI¾¹L…fšhH¯ËL<1t¤½W¹uxÖ68™h¯3Ö'³¯¿u¥ }0uý™;ªv f{jgåIû«]ò¶þ­äta{ßj1G×Xn¨ ãð•T²Ud;™jI^‘0"Äp0çÆ\t6ž–—Žçäò µŽPj”ÿTu쾪u¬¨iÂTH{®êŠ ­ijßë2‚ve0’¹ê³_ÉãpDö~Oå§öÒ¿Ûeô2”ÿ»àòEWÈäßšEÝ?†f8».i*íŒO¸L/Ù¾+ëLÑŠ‡|tNl–‚ûúZó4zþ]ŠÉ6áÄËÁ¡nú6åG”òþñüúûøGK”ùÝñ’XËXÍíëmC¿ÜàßUœSÚsê´­aEñöµ¦¢L¢{ŸŠ/Lh¶B7ĺAn¯T&¨ª‡aÓ¿ÈB"<Êí'¿çŵ­ùô`hÄüó{rNA¨^ä®c,þÝÃí¤cðø¹jú¡ëKi Ðþ ïŸñaMÝR=™óé¿p1kŒùnéF¤:³„*W‰}¾ø']?ÊqáŸç ²}=tÄþÐÑø5ÊÍm)Œg8›õGúï"dÿ¼Ë³PBKL )$õ‚Ÿ-i,¾îÍ#4ûn¤¡îfÛc,qÿñ]ÑQ‰…F"ÆÆ=R¢œüœù k-ѵá+a~®ù¤‡qXÖÍóºÊ@äV¤à^&•2Rç¿Ñívbå£RåJð®@³ ø¯Ý®Ž “ºÔ—m×&»Õ…§øõá3 ßÓ×ã“ËûâWGÜsô¿A™ØN;+Ÿ·-¡7]D0f7u°ÞxA®>§ù.qÓ©Ö˜¾™CVçVQ&¨üðUB¼֜‰;©¥ÖÿC"$åkëí%UåRû3Þ›{ñdîþöÓäÿ®[Í5ûºÆ‘}–cËTŠ˜ÛøùïªÖò㳿òä1âW ÆoÁBߊs¨ÖÚé½,P"ú£ûÚ\õýÎâ{Ùdð”ïò3iÖ@{ŠõR½¸ ©À˜¨†ì°.Çp,——Ú ÓÀpê$,Á¤ Œl‚ÒÆËY¢t4Œ;1*T†ô…L’PÆžI™Ç+y5Ľ¸fnáâO‰oðÇ+aùL˜ èÅ/*òž`îV¦mûÅÄËVëU…dbÅ[¦i0Œb:ò°Øñâ mò~—hÅ;Í…M?8ãñ’ ,Èg4 ³|~6Ön¨6âשeçâáâ~ëzá¼C—Ôª;™Éeîï!¯•w~V­QDr3+¹Ê5b•’Ì÷5b6f8`.dáˆÂjѵº¢Â|# ì3+À'Ý îC(õñÚG~!ôó­ô]¥J{?êã®ðJ…çÞ§„¡_¨tR}óàOãŒjªqLKBÔµä·cÅiâ&GDóàì¿Ùˆ9šS4“@ ¾A |ñg:‹Àu,Ž^]w­p٠ñµ ? ûÊ<‚E§û˜h R EªÈ¾KW,S›Æ½•:Ìøž=òà¿32LCΘmb+ôÉy|š¸s›&B*ýɘryxHGUòáÔ–7øbÀFÄûJÊ4+F~¡Ÿ8´"¯ŽË_7µRª&<”.ƒƒI`éQRÙš“°âTCG(íG¾ù&õŸ†öe‡VKÜ æÐð¢Âµ‹'€l;©±º`7©ÿë[€ZHøÎ® ˆå|ü?SÈ£cT¡ÞõjOøh+»‹l(®½¦î¸º=hc¡ÍZƒ®lT;‰{X{÷ËØ-S£v@"êôA½HÝ£,/.Jh–ˆZÆ÷üä]¬Š!ç—EŒøèd#á1*mÒ‹b $%ÇÝ‚(/.ok)å°Aøq$”úÊÆÌ<ßmþkÖÒÃøÍ£âWÓÛR“8êMíËÁ‡ºsÃq¡Œîš’óth/‰ü[Ñ3øe [nª×cmP»thÕ×Þ†€#poEÍ—ARrz‘I ç¾3IDÂ3lŸ’¤L€åê„jPr¡Ÿ%9¥9¾¶|WލïW)¸/‚9h?™U¥TgRª„±QyWõ5‚-É1KÖ}Ê @õ~Œ4ž@VÄ8ÜÉBÜù“ˆOI,¸%úÜÈíA©vž'ËüªsÊÇ; ¾‰5æ¶gD@ôýìÚ5HÀ»¹‹°lsÿJLqÊÝöÞ[þxLt ×v3Ã>úTJKe/ÑÄ/˜J†²šCG…®?‰bå~¨¤(+®V¥µ”S”ñ»5bu®É˱<\Ä»ƒÛ¹•ø4?¶vˆò8{/ÕKŸŠÅ}+¤mƳ› Ž™‹ ¢"Ö&J`ˆÉ•Um‡¡Çø r¾šVMj”PíI°FAî!V²a.螬†õC%«ÔÒBŠ~´)]veœ¼UÙ~³Û]p ƒ|´µ?ô3ä@ÜàÏ4²áðöõ 2V€æ$çL€‡,%‡:Y×ìB…ènš.Ü«v¬˜¡4sd”ôM{”·$ÅÓŸ Dk¼¹¢ô‡ |¨ÕÐgOœ ‰Bƽ³L ž§õÞ¢5û  ·®.¾o‰¢ÉÒ0^ç’öæý1ýìÍêª^-+÷dá§ñ8ùéÚVxQ…hÛúÛè¨×Ë1ÜDÒ¿.Ê1aU¾@HH;£”);\vu0:@{³k‹NÊèM›ÙIØß!üX¸E„¢Ã5©ÀPþl¤!³“æ…F 2F!w?,î:Uxy×¹;†Q‡„õÏř˔3Õ(aïF ÚRÓ>BqÄìªé)±÷¹U‘µÒ\z“ÉÛ"·'a ¨×¯þ9%Ö›MIyu˜“õþ»3»ñÂPú#éµgÉz5 Ï«ù-ÞØ)Ž(ÀzEÔ¶ç¬õˆ¦:L¨©Kø˜ën¬Vྫྷ NQ(Ö3×ßV>D$R?ÿ£¬<‚¤?äœú­ßÏ€>°ŽÐø@G¯L(O(ß§8êL‚~;*Š2—-p?âç»R¬'ž„¨%<¨˜›L– ·@7ö×¾ `ÙV: ·K–w¦¯†Ô{WyöêW-ÚOÉZu-Jaêé(±Þ. jÐ!9?Ëta¢Í9÷8µìñ†#4Nž¥æs«11ß=ŸÌá;ú+n…‚ãXu—Í}=‚d¿úæ£òeùl(c²×äÇC‡·æÆ­…ƒÍ2ÛÐËŽ`k>©$újã{S¹(óõ伺cÌ}ÂAV¡k»ýð·%xÅÙÂÍpÂÇÓ˜©Ž& J`bCÞÝ©_ûiRc‘û®‡€g“Mòà–”-—·éw\ µà·§ý>ÐVœS©Y©œ7ÊìÙ|sàÄcž‹›|®Ø0ãÐ^£ ‡žÝ¦JRwÊIPºµ,:içHþËJYSF5/9Ö(Ž*gMÅ‘vµÚN¥¼q–îï&1í J¥ZÍã¡d.’]TòKàG¶ˆ¸ éz&òR–á©L7È åÖs ZåQ»/êà˜Ÿ#PÍìÇn¯ÃšsÀè°ŒQMÞ|óƒÜKE°”#·H`2Â_7g~€ìÒZÏ—ÔLî’'o ©½ rRŠ­… ”Rdz¶T–¶4¯ÖÞÞÀ{áU|æPµF„E³Üulíû³ô³ÈC%†½ðH4%À#´^|ó· šÎ €Ý‡4ºÐ@ªÎzÎÜå~;üfεØ}gN.Óð®Â;Z+lk›@h$[œÚB ÅÄÐg¦äFvš­ J!¼fÜñòø‡;ûl‡R¼¹Ò‡+æTìûS¸nJ¯ÆÕÉz7&^—B¥Í šŒ’,Ãã¿—«R‡Ú…¨GÊ1ÿo,M¤š»ÏÉ~n¥"íK·wÚ’¸Î“ª+‹Žõü@Ïðåò0tTæøx§‡öíw­pn¬ ¹ô4“ £”…G F€š³æètD?››Ô³7æ€j‡ÌN›zhYÔVºó¹Ça°TX}þëIjfŽyï8N9Ùµ!!FG“wõ:€°àØÀ–ˆ¥üÔF(ú•þ°åÃXºnŒˆU§â)Z?*yuÍú⼆´d ™K·x̤FÌ‹Ý_„Óð‘t5™·ˆÝãCºÇ}nÜÙÝ令á( ÍD¸Xì×µ!YÐQhoÜ:4­™ºulV댻:¯ïà¥G£5] :~@bn]•R¦ºú¹zCDÜDð„&È+p€$Èž[ŠÊƒRäÅÛònžyµ‰©’ð€l±Gg ‚F‰JÛÆ»Â!S›ËÞržq_F u¿ƒBÅl…ÐYôú ë3\ C?ø§³a¥ÜÉŒÖoß§›ooûzÒ5®ŽsÉzƒd’–.¨vû½¼Ä`ÑŒÛú“tƒÅA2ÎmP°/W_DP°€ÀrÀÛ¬gÄuéñ:zú©±5h–hë‚““Ð S7+ª(9záù~›q”?ïùÉIåænR9ÍþîijÔzÛ]áÅ1áBµrÇÞÀŒú³µ¿pz¹íß–Q'ºÖÏY‚ ²U´E™·é"ßtjµ41ÿrÏÀ\·²hó•ÕQn³6ÜhBÁ·°^B¦„¡XCùGi±2V1¿lCE¬D›cd¡³¢\‘VC褑q££‚_eª iÅŠÂ/!#Ô_\>3¡Û\›ûŽLœh)³ebO—üséj«åI¿™¶‹G¸26çxÄRaïÀ#¸!‹àËÜï=¬ä•…–ˆY Í•Ž¢^{O¥~e2ÒV·úûnq?Wâ¶þ5Tƒ~j:0Sé鸎rys82ë¸ýqýØr'ú>/rGâƒdóѤä7äl¦ÐØßhÐ9J4&¾T²ƒ%Gµ Š.EÓö‹2 Ê·ÿn4ÛÅ²Ö #ý×4¤f P÷îxt¢LZÁrÁ”† @O*ã7鱯]·Šï¹„÷î›~5à¡êqOçd;_ˆ.Ð_]XiUA|„èƒG“Ù»¾NãèÈ«X×/ò!0m¾VËÃt±WYŸ4ü,D­KH€e†¯f%¯FS•  ÂØa†K,^}ÇrÑC9 û/˜dåVLå–Ë⳦¯(Šª F þ>§/w³¼¶Ô„C£œ(¾´èùgP)n*„ ˆœ|n« !KIÚ1¦»û³!9ÒRÈ»ý©8 ¾ìàÝ¿!”+(Ýl—úx ‘OÒËýÇ^Gv×yøÆ³ÿx~¨»Z" Žƒ“÷Ñä£Ê†>å—TÏrD[#ßk>ï—ÑŸ™b7l<™¦ +¢žS_—&ë‰õµË&Œ ¼ xºZÒ¸¤¸‘1’Ö.ãuëèoS«a½aEž”F¾M\Ä}$ÂePÚ×>1Îí<Ý¢Ùâ/ ?^^“6˲A\ÚnsÏmüεDFs"ÝA•ïdïÀJÅÀ$èq2¦n£þÙJµÚ UÑ}˜î–7fs >rÓcHi¹¬%©J_d¡ ‰Ù‡•ª|/¥îðIÝ' ¾›biã•áOþò¸Ô„xÉ}’WFᇉ·7OU>íjÊ™P Ÿ*ç˜4ßL¨î Ù¬§õ{°:qÜÛÂð8&=Õòî‚™wŠ iIÝÉ­ÎÎÝ’„å)¸œÜ_àæGªªÌȰs¾ÛÛû K{§¿2–ZÒCš5V¨JTÂSi"li’ÆŽ€-ÎÈ3ˆæ2}^}"ÑÇù–*Én/]´’Ö­ð±ŸI%#÷Ibohš.2ÚeN—E°nKa£ÏÛÛ¶lœllÛ¶ó„Ûv²±íl¬mÛÖy_ÕwêÔé¦î™šžžën\]Ó5, þß1oxÙîÆ€/ìšÑ-÷ùu'tiýò÷³gž¢Ïo³V&3 LËl-Žu=C@¡@Œûp&9ªõ÷ÜâþQ·æ÷¶C›  Ðw)¶ˆ«[K ¨-©ùåáùÉbž~âƒb5‚6ÔØàGwÚ³{°öçøÚà©fñÜZ×>KüzfEB¸g(€ ³­µBµ„Ò[Šð%,¬?”ü,6Vô…%S/™Þëò :¾‚åþ¡ ¯f€‘,3ý.ü’Í&O•¸–'¤OÒv+7.سÞ]@bX(÷]³]ÌzØ 59ƒ,CR2£=Ì„¥WãO@<_s¸6¶z§cp\1¼ƒç¸j.,z«w¡á¯‰nůÂA†­ïW{Ö;Õô-êþ‰ÎÇj]¦C±uQ=M Ýú{V;H Ý=Àay®l"+áâé2e3À~iX ú( Ú-9ÇÎwl^øç~9ÃÆê‡RÏY›SG'Q z3rÇlÍ#=y‰ EüV*¼eâf/(Ìȱö†Ï{ó÷`§iƒÓÌìwã?Z @ÈBòñ§ónsvó›ÈQô4i_ü• SmÕõ @ú£²eE: Ö`‚²9QÉEJÚúÜxˆ«ØÁó†ÝjIVtn+A~s O ö/'6±ïÅæ‘¨‡ — ޵‚Ú}øÃ¿.žú·ùñÝ–ØP5~}©dž³; ²¦µø"cJKn{‡é»ÜšèLˆX^IY]­…Âí¸¦ß¤‹mE^dDz‹?Ì}½?˜3z§ë2¯)ª1Kb"^Òh@^¿»øú šÃÎÕÌgç83¹½ëÒ¼Þo. …€ ¦îMËâ¶KÄêZj‚ÞÞó¿oYêcŠœ¸þ^L·5ÕazÊ˱Ĭic|"Y)ÆPVpV tµg¾ªˆ¼š6v§‘„™Hã‹5ÝŠÍŒdÇ~YaAãΈúZ–jIn7ê $ÌÈzœ![9ïÚ&ÕÊxÛ"XèÕùã1±‹È Gõv³RRxÖ£M'Ïá¡û2.4+h>.|ú`•=ê EE ^¯ƒ,àãZјֈn²*ö$¶ðœ"îK£]㹌tï=SnÏdóÂe_s¾Cßrxh­Ä§•EïÀ¿ÈèK™1Zòg”› ÖãW”èÀ¿iÙ½¹dÒ]Pľ‰Þ ³KØg~¯›ë 8’×Lrúê‡fpŒ5Õà˱E>[=KoþGEo˜àõóQOMªr$J¿-£ôiËvꪅݮZm­^Kîª4ÄÅ”eš}©©z±²PÂ$¯>\ÒÖ3˜XâlÕ«MÍêÊýïâå?á¸l!@¼\ K¬.MÇm5šú ¢äƒÛªË›“¹ã ×뎊vÔ ™õÙÛ2³R‡[Ø>—M›GöÂ2\áä™ú+J¿ñ†_ðA·PÝÕóýY°¿øõÿVŠ\Åt\U>S§ÿPJ(îJtZ*x­À’Æ·ÎŽ]\O\\?¹ïàËvJ÷Í`$ЪPtX?Ñä_¦wkz@[È… ˺ö篱ÞÖ_¡VNãÝþüѶ¶á*cX/{ÜH@k.Ô~æÇ{Ò0ŠÉÊCÇ&4•¸M£Ž*ƒl²ŠØù—aísQ"K*ùËÑû±4WG àÌÞ~i<ž‘_g´¶@u2N[z´eð”’ä}O¾jú;½è´¬G¹-lâKÿ)ÊÿÕæcÄб;bÍ š©è›ÕŸòº /üDYJû9(¿G:ÛI·cJ:Ûw6r>Æ7"ì³€¿‰LŽÈHA~½+\F²—îTTä,àK… ò¨¥,FHd«ùƒiOå$å”óp:hžqs*Ä7‡ÝÚw§ÈÆÂhcéR·$$Ññ«7].4 åáö˸$xÿx°±èÙ_|Îô:‡À±Ç·½ÜšJú6ÿ¯ûÒi¨Ñºª<ŽzŒ¼g¬ÎèÒ "oÌ¡;˜P—7ö ¼ÏÊQî½—U×6úÁ`?ÿÎ}ýA%½;ÂðÍ/”.þkÄ~‡¨‡¦÷ÁÌ"9ó²¢ß.¦M †2ôÄ(þ“ƒt{í”4(!ÄŸÀM„ür³ªÕšg#ì¡Eõó+/OU7´ëʵóÞÿ=ÄRjqO÷*Aå̇ GÿºmÏ{PQ™»¯%¤ íí|y¢Vð¾úö~Ðmyëú¹ÏZRë†JKøùÇäÏ-mÐãù•' Øë0 ?)ºÏ›šÀ:;«{¬ö¡ž¾‘ríný:8âït?"rŒŽkxÄÔñäÎB}\Ënã¤^³àŒ=^Ù”y`¸BbHÒ°‰ÄüË=—(|›Ê€Ï‰#•|äçþ—ÙDÚäv×! [}Lp—Xj&ÂåËs WbнSÐR aSÑݨæêlÜ;aŪù ¤p7&#qüq^à¹0/ØøQ˜O”9 cç’gÀ+ÁT3.ö }z@ÓíÑé›~cõ@º ö¤Ë5Ö.ä;ª®žÝóz^…ça§“Ûšs 8©ÕŽ_ª«æy`VG€™C׆Õ;ÿï–b:ÄÒK«6‡—}Û‡o‹k¸þu‰–G¡QÆL²(«èñÔUý–µwEcuõ¬”ê`÷ »–¨33?jFo?jØõ(ú¢KñT¥N)²L+(5Q—~î kªØ¤R«µÊXI‹él¥ž³gv Z½ÉÕˆþÒLXŸÑ$­a¶:¡:a–‚ëÎ)Ô0k#­ær¡ß˜(Tv!‘>Úó½?5ħ ÝøñAO÷èX瘴œLTvqí—Ê€åLT qI׳öÇùßË ¼Â½ÅÖÒ%\nÍéA»¸¦>‚ S€=ŽÒ³– ´á”æ'D¶ÿ,6¢¹î\Noö½þÒ]Õì/ßÝ^ÞO{Q›Ò©þâô·N 0ºVõæÅ¯ê¨jèçÎ[}®/`Àw‰v7«$D €ÿõµ}Ñ©ºyIL5ä]p)¤šuß]äÙ ½/…Ú1Ä`‚¯wØ™Vµ\qw8qƒÎt-?™&¬1LÃûvr^Â:øÝcÉ7ÓàˆGr|M69ñųDž%a]Ò¡{ù­ê7€ZÍ·’š~nH ȽNù-õ¤¤ q,¤?7L§7—§?v$ZMCttǨÑÑhoÉâƒTOv†ºÆè9‚e3fBñé7žÖÝ¡(À(dÂMÚînöº8ð˜Ñc@ÖšÔbù{Ê„¼Êê6ð‘)Ñ®7Ù3T,›¦R  × ÇK•‰ksYø{½4&ÎuËÑöÁ€\:ïlC'Ëi~M6´Õ²A§qÜÏQðM;ì› ÿ’Å[¤Þf£tën?Mðû7…Âe¯ORÄ÷E†÷“a$k0˜åw9to±ÍÏ£ÚòÏ"u²²¥öÑcc»3ÖñOÖõ_k=Ùp?hUÛìâÓЖ-$›:òœgŽkßïyZ.IìþË àÈyÙ¿oŸg;ãÛ?‘’" Fñ ÷n]‰æ­ó\R‡vÒ\Y,F˜h¤y  ÿL|fýT›­aI³ÇRwƒs£o>B«²¢©WÎ,»¨yÂn=œot«¼CÙŽèmHnÿM]a:½QD€’~—èOÇ©)<ùOÏ åêë³_Óê”'­ ¬f¦D}VSðl¿—g?ö% ?¾D‰^åѵÐÎ^WJíⵊ­AÃE;\”LnìË‘q61S_tSnŸ›Qæ½Yú/înD‰c…ü¥gÚn þü÷>g—X°ì’þ;ÉÁ›´[T1>¬‡/†Êíë\¾¸at‹´â%sxŠÕy¶yK~ȸ\ÊgÑ#ÍâáÃp ÷^¼¦E™à{°Ù£ÏäÒ’¶ÁsýÄ<ü›#SýÄNÒë¿ÛžRCÚfþÆRæØè„þ›/:¶Æwf@"éflæÖ5s¸¶èÖÅ ·BµVrbdfÑ#Õ&&VÌ;´Û€ŒkÖ7BŸ] &¼ÚOðMœÑ¶½wãJpéP·±ŸéÔÆï—…×hÙå}ÙKö#¥–|è5 šÅ†) ¼j:rÔ¼¤·&>Vbý{° YYÆ QMçÁ`°e¯åÂ3 &ðÜêËùi㋾5ÌÆ¼ qã¸ô±ƒÞ+¯ ªîøuHq{Îä/jý3þ˜‚[6éÌ Gfdý“k¿Fr“Îý†y‰tdD43º?ˆ ±T„ôÞÏM¹¶.1W&QŽê2ŒÜPPz¼ÓН›¦J¿Y– op36îpû Ym*Y™'5A½VH!€{æ°µ¼üU´pœÙÀT…Ò0» †ûÎ@õÂö écô ‡A·;Èã÷ã›g÷C#lwÞœ[Ï'éP¾P«ró°|e‚0~Kú¬þ™{Ë\ €ú®ždý 7// Z™îŽö7êQÍ!íÓ’|J@ÖŸá"bÝIHŽ(²]ËMt‰–¥ó¬œ0ï.S7™ÓXŒñDl‚n:”B‘Ûsê1€È¯’´†EwNŒ,H@l ‡H`íÝI¯»{àW߀y°Üå`Ø\±jQ÷Q9Á5> g &C‘“M¹%MÉ”ÍÈŒ•õó3§øù³çÏð—©ÄCˆUä%tRÿ¢øZKñcæ‘C€Iåí.3hy¥¢©þžÍZx…Mv÷‘ÝŒñí³å·oãÚðŒógô Dq&zwôEQ@Ü‘ §/…÷²ÆyæPfèøí•4D‰ë5È7êÖ XVùå„ÒëÝ+A`•|§7Cª<[H¦¨Ÿ &”dW§šßþ_”½pó"þi•S’éþ8×´*y€ŸE*¤n‚%Kô¶Î£ëÈñúÒjê!ÿ½B› !&D \Ÿ|cL%OZ­?t#ž4ºTÍ]_>Uù>2-†Õ^ì Ù¦Îð£×'†ø†uíõ<¶æŠû]òoÁõÀ}ÊùªiœžÔ…½GOÁ•]“8K¤^eóªdÐô¼F}ý "*/®ÈªÐ&agÄÓ Á,W'Àºaí}[M7–:íÓß‹ýÖ]Ø6¿¼ èF6×î_üÁ/–ÛæObräËÄ-Ù×.º`Œ°ÁþóŽ5A~„ÁÂ<–#‰êUfܘéËÞÑh:†.zwûw];¬_õEî÷Œ¬&}²õEvëítåâ€ä; ;MÉ£ì"s@#~ì\¾SªiS Ù1/î…x±yÁ™[ ,@òûшhˆI{ŒŽBŠJª$ôˆRæõÊ Ù=5Å•nc²ªs…õFŠ’¢)AnhG}ݳ´ÖÏú"å²âë£WÝ¥3c;/|{V)iŠMýúÄNÌæåKÁª2Ý[Nð×ám}Ò‘:ùaÓ.‚hXç®v±Øg¶Èc!gƒ¯z<™¹Ýqûì›÷òsG¦l¬š¦Î‰hô áUˆ‘Wf€ˆø-jci—,s 0wïg‡€z‹kâfï¢9ÒÍ×›]]Qœu¿a3mƒ@7“SàZxpŒÙ¾™3}‰Ssëª.3eÎøôß~Œ–(ºõôuýŸ,\?·ÆwìË—±á# U„=†2'+kÛlºæÈ<*”Íû÷¸º²gM ï;eÌrÙuö‡^^ÒD~]&fkpឯͶÌdºï´e¿ŠÂÌÍ¢žU9qéx@ÔöÃ2Ï>}üÒÿá,ÞWOXEÚ›iWî ûu'‘µãQ°ŠÖ/"ªX¥n:­W“ùMrÐsò¬ÙÎŒ 8îôQ(±…ÕЃ’M9Ó*߸ñ‚D˽ÈOÜŨ¦n¾,®Y0’*ë|R¦²€«X^,gOJâ›tìàfCÀôYtºxŒVÎñhL=€xý×£¹4BÃGÌ,d¨èRŽðe‹_zëUH Üô­VTÙ( Smcì©õS•ý¾ÿeЦÀËlçó£@ÈøÁ%@Ÿæ„‹ûÒ”æTºqc‹!Y¹=°åLGészfÝæÂ4N¢¨9÷Ö!ùxòüþîÍL™ÓJ¬Ó×Xˆ_Ï®¼j¡,øšTæß¥vY×H’zÇ_[â:Z;Þ*ÒþQêNë=)]Ð× â‘«#¬ÞycÀŠ(ãÂRòïn?̤  ‡ÂC CM,â°"û–Ðç‡ä;$7|ªüÉ µê)¤VŠ|ö‘£)·œå᮫ÐäJY#/l„n„¯Þ}¼™zÂÝH p u’ŒZéû±qÏŠ*¢°‡Í(“÷`Í4¡'«CÏŲ ¾Æ„¹Ž_þh>ßåôu­_îh²x®ÿqEJ¿‚£´6¹6©Y„'ªib eœ.%2O§~¥¹˜ß‹91Dº—}Ž Å‘eSom:|ÅA…©¨mÛÃ;÷uê;y^;0Œî$ç[6Œ.¦ãsþ««ªg^ZóßmÙq†auÙoÒ^¬2¾—œ·<ÉôÔwŠJÇŽ¶"äÉ—åÈKÒ¸5ÒÜrµÝü²Óèh5Ø«uTi›h±“”„[E( Ëß™óß§Á P—h¨z§êÛOÎñl- `Ñúмõ(!†”Øá½¢¢m#˜þ%ØFPÛó*€d³üapƒò‹D½Ø,±Þ$“i.Í‘ þ„B$(x•šÞ¤íuðåªPê°@€â9o„É;SöÈFbã“öÙe¡åµ`¶Ú.ãþäO– Âå5EÄÑ[ÓÞè¤mÊî­@ùǵ¦ÞGÖ<\ìWp¢È›mZmZ®äðIhÄá6ÿ¸ÊF;†Û>,A¢æÒù?KÂHˆ?Ÿaˆ“´rpôuìÊɎ鸠­ñi˜txÎGû*à`†öÁ€Ô€Vçîæ4´5‡ñÛ79¬Á¦žÍË´ñ¨î?åï¥-›×—zî^× v:ÿνþìõüºé»~Œ6Ø{‹ƒ*RT"»ùàmujb ]ª˜½ùxï¹Ê–pš§²fwÝWZ'sø'«ðólT¬  ŒKÃ÷åg0n¦S»w/¨%!á¹pÆ @[EûúTPþ7”»|M!±á”0.¿›¶Ï)wEwÿà·ò{4\xB@D"¶aГà"r“ÍSB÷\ﳫv3êdíñõ-ÇuðyLvK|œ]ßWöqG>öò–O÷§×/ù3ÿeÁ(ôJïÒ© GÌ<ºA– „o!éHêtˆ(Lˆ}¹»hϯåmŒž\6äïS¢ÛŸÊ79."™,ÖíD[Ö,E†DÙGsˆmöGSPr¾P“…Üñ`iœØí¶ä;7‰=Ã÷ÜižwY:t.Z{î+ý{"K[2 Åû\ƒZ“Ÿ¤©wJ~SDlßþïB59^uËü…ŠòÛíù(´i¯Ý¾”Y¾À¬ŸØ¦ý^O¯¿l´¾£Ëíú#VÈ%®±¢MbØJl¶+Ëüw†íÊJýkÇõˆÈ¤Ã¬¢ÏopˆW[4¯ùýùÏ€«V\wÞ+«¨ù4úÅî>e;t;EpVy7L Y@vÿ}¸õÆö}"»šôœ/q²r¹‹f0>fX¸+’æÉäÍíÌv/ ®ú¸ry%º2CÇfz+iD2 ›ø«:Dm«¨;áw3™ê±rg‘ c"ýÃüø ‹Ç×àÖàf'öK:‚Å+µ3õ”œH•e¢ªN´b)m¢ª^ºZª•áã_´´Ò¡åª˜‹Ïe{å¶¼jagO´ù«‘*õsN ”ä'ÿî8"·V>¾Î†«îŒœ=}FÉ¡¢¦=;¬¾ržï ‰<êË#¾ú£æH=µ‚ªÉÄýá?qj&fnÔ‘ ‚ öÓñµÎg%”Å1š&x¬EEpaîúÅæÄo?רZº%½íʔ˻»œzjªqäpµïž–%ßµËütê5y¨Ó¾.¯M}z¿2’‹¬Ípz9^Ë…päÉ·$¤tÀÉ»š¹=§FÉñÊ¢²<™½9(!§88˜œO>cw†Ž¢dÊN¤Û}´4”Ê ÒÝrf}»DX]°uÿC·ªsðõ7?£Ðo&k¹Œ¼‰ãŒv­ëW2›¹Rõ¾„XUgSYS¥š‘oC)…_›”H»Îº+É”èè%Fsò4cËHFo­.÷Jº­4÷Žïž›nÉÅ_ó‚õm…:ŒYs\Ð:{½:]~5vëß ·¿ –ë—éBnæm1ì¨¶Æ § Ø•Œ÷«ŽÜ-®Ï¯0= ЋøÈz˜§à³¾&¬9ÀÌÅñœ­1yê©åY“´E›9‹yk›Ë:Þ/wq¹,”WxðcÂýÆ©OQ„l¬QSÇÕÌèÂŒg€ŸôÖRf¿Õ½Ñ~J)„E‘ähóA„…C;=ЍíÑSàw ¸ü„QØö£0ÞTCœÛŠ<öGþT>SC¯â,=¢L§lÙÁäA|jf=M"6¶í&ó¶Á¹²@â­´m¦¨GL*–ç"¶ÆNò²OùÒι8MšÕY÷…ƒ®Y…á—)7{öºå¢Ÿdݳ9vïy¿.˜U¯Ñòœ“Lž %K±' ï׸ ª1¹p‰÷üM;7£YÄÆ% !Ù2JäÝ".›_ÍIVSe®FňyÇÅ©_jr‘6gWêl¾Ò0ŽÓhš^ª\Ðcggg—öv4UB tqg|{þÖ@’üâX>ŸnÑq/MP¸’9©¬»ãbekýÕlðíV ±àŸàž†¤$f¯T»Ò°:¬õ8 z­¡ñzZ]ÒGºDYG+-¿°o¢—Á›¤´„Ù@ä?pqS­±3à®—]5@Û"¶¡?àY¬Z>”¿ŠÁÔ¢çxKÿoóžë™)ÓubD0þxIå vìˆ@~]2ÃÔÄ6œâ­xüÛhç €iKùM¤­'šHêÈlÜì¿G¿;ˆÏ½é“Ó$%¾î²Õ›Œœ Y0ªÝ±Å7k"lCb†ä´ÆzŸ!´>õÒö?›Ö!wÂÜ98Uå9DX®¬ÚÞ­‡gSm8ª”=ž^žø£7óv¯äËKùËùBkÇÎ7Å!±µ±¤{¾í{ï}Z½  á«Ûð[¾WVß;‘‰}ËY ¸Ê¸‡³·ž:QûÒd^ŸUe–À¡£¶Ó”Z™ÊæA^JÝײǿf€R„H$ü4!ôAs¯ ÷£—?s73;ê~æ+{îJ¦¾µ·öM^ ö"ôwÉhrÂðë›U' qOLÔ;Æ× &éÔ•{.“XÞÔ˜^êI»W„»kâVÅPŸ¼Å8=ב3§ž{pϼ7•˜Fü>Ïb|{Äs®Õ*Å–€¦Éïøa¸0¹«½’KonŒ[#UÍgx€±­¿–À%‰›oÝ©ƒŸÑÞ›_‹3œÜ\Uɽûöu‰P(b”$€±.þCz·­sè©£Ígër¼ÊŠÅ=‡Ÿèâ]ËÈÿi¦²XE6ÃVÆ(™ád-lÚbßæ UîT¤¨ž·À+_Þåï/#¸MIÂîεnVµXÏÝú[Ï&‘·‹I‚‘‹08ôIMjLC¶á©ð*Y;šIÖ`‹GG"¿Æëçê WuG¦%“L âœ\tðZU'ë§*ÿ´ °dK¢ÄÇ ¥/c¢›•÷Ï…Ok‘ÊrЍ§qv¬ùßÍ4°]óôÝí臠cŠ2m”W¥#^‚’B}®ßàÙ(ÉפËbÕöGyh{ÜQï«E™ÌaÍPñþEÜ”Xƈ’æ!D±eÔ{aS8PG qiõÄ7 0\hUƽ6ø€%P(ÿ9?ÞBßµûéXG­¯äÌ¢ƒè—]Ô™[$é'cÃTÙÂ)3*h'Y“f:†9‚{ €­¼I³ÁZ­%Cye\ñïÆØr®ßÜ—W«5p¶¼Kà\^K“n“EÖõN\]´@Æ+™;›þ@±VÕÛKBcXO37‡ÏE37×"öÍHà%©D }OîOý ªÕàµsDSq#© Ÿ‘œ²l:uÖ>ZXa8xCj¥z”\]­wyòajäŽËè]üá%Z‹R âÐ:ÂJž¡Œæ¥B°1åIX%à!ˆï·Ýè´4 œôþ}äÈõë7^”ÐPÏAe‹Ç6‡€PÖSAŠŽŠs”ÏXiåóÅŒlõ'4IŽ)3”°ÄøÆ^p!Ý> ™%|òŸ(ÍBÚ'Ñòl¾çâý¶äÂéÍyZSÓÝö§>ëx¶ o Širý4 dr=nR+Ž6"@1ƒ%ãl‡çƒ.u*]Š÷€Û¹ ²ÔÛÈlJêÂÝ·¦rñxI,aÁ–ƒÇ@f:>Ò%”xSñû9áÒu´xt—Nü¡ : œÈ¨9£a_ùvF†fŠº³…€(K¦…´øÛy€8BЩÒãÿŒT|ô~¨w¸Úøj͈¬v´~·>-há¡€ÆùÙ³±ºGœ,mg]^ßÃÊÍ9`rN£ƒ£µ¢ ÄL&è0e"/ ¡¢¡BЪSÐ&Ò‘òJyHgŽ=íÙèu°Ö¯°3«šydPnÈ} AÎ<ÙõΖ@ Hn>ëç&,œZÇö€æÜ—Î>ê<ÄÃjKtô™ÝäôWÚÒe¥øw4±»÷³—‘"Ñ[x¨Œí¼®¦Ó¸ØÁÌbMiøHªè#<7âï6 ªùW§Ñ¬*W;Ìâ}2Æ\Ÿ3¥¸éDŸ‚FaK=ç–ÈUäÏÓºK¤4<‘ŽØûZtE¶TW.«ÜKÏXCGa+;Ó”gŠÃ†ØÁ¡J˜¸·mJœ™›žˆJÞ–Ã,&.3lód "ãÝÓG€–•0þs}/Ý^úàë]êÑ{Z(lkOKƒ¢\dØÑ‚S4㟯vpeßED¥íù'¾åÛ-¨Ži~Ì[Gˆo¶îò’S#1m¸šê†°—‚ZÑæ-xánU–rcRÌmúI-Cd Oq K‘“¶U’Üjlë¦åÜ2Xßèǽ+Æ‘æP3ÊuÿçÈ2l&<"į߲ç‡rï{¼ 7…tÑRÛ¬°^‡>B†2­dzÇÝ\äœÚ¬½Å#/&˜=çy àÉÂ?ò (MœbSNBïí‡Ñk}|lõ²=Oƒ™ž}/jÁrÆaœ~ Ĥ³öE®Œ Ûº­NÑÞ~BUNݱÔ`f§q¿|ze´£Ü³Ö/]}]Y¹²öœ~†õß¾ôì>{ã_OäåEºãÍÚÅ_qsYÚ­p§µ-BÊLl¾ŒÍþ3)&Lá×ýŸ¨—Á5•e¬ï Ñ&ª½õ®¨²Š(r馥+Œ!êHN..‡ó!6ÂjͲåÞ¨—åç»ÖÒÌ]YÍô#ƒ»gV½ûæµ/?*óq†Ÿ‘$KþÚ„éÅXˆ ]{èK÷©Î‡rÖ,¥¾§Òãvõ¡rᤧëZH8%ÉåÄ|$€B0½E™?/z“ å¹#Ìøi9¢ÃDº1àŽòplîî~¬‘úQ¸aɪ>ÉÅÔÖØçqç°½ º¬Àk…NO’˜vºÞŒe¸ãJ—y_\ßd.%¥ÆO êó݇ijÝÖhŒ­ŸÔŸþÉÞ*Wþ¤0$ÔDnÇ{CsP[C¥/€Ý`ØÐ»¿ê°4Šön)~‘¾Tþš«Ëóh)7—¡Ò¾íͱžj’¶ªC%ÝEjõΡël•·®Ü =rÛyc\’õ<‘ðÖ#^¯ÔƒÕUzþM ¯ÝjªÐïG ð*eå>Æ­å÷ë7ŸYâthtxá)šVËx¸˜xÅ«aSÀ)6Lò4r*ÓPˆœ€-HQ ®L0ƒjlžÅ´ø3vç0…´;×Ë Ú}~1ŽþH:iÐᯢòv-ëôbbºÝê˜Ì‚ù¦Vy,RíØ wŒð¨M¼@8Ï:«Ü&, Ë“=•ü;$¨0"} SÑr’j%¿·áÕ]Bû’jÌÛÕ,-e\tjTØ™ÈuÃ:õk¼€«ã™E÷/€@ªàWâtdV²²¨î舻ÿª™Å?¾C*ÎvfØåñ½—ª§Ø£4ø!=tçóŠ(6_§¿ŸékŸòÌ¿%L(ä‹<ê1¤Â+a¸eYšÞü ]n˜‡¨E çÐù›La ÿj w¸þ¥ 1E6œ ªÆ–Q-¾ ™‚åÙ œ…§Õ„™KZȉ_‚;}j›U(Ú±äK¶×ЉLØq›¼;fpÔú©õއ³:žÍ³LMI²×Yì÷Æe6'ùÉã€î¾>'àØ’¨Œ7™?’uÒÆüÃ:4Fòô9ª¢cgàÍå þè_3öÆÊR«‘<%˜š0ñj €*fÓé1°B°Siî03ÀNA“ín¬Ò­DÖ4O«ãûìˆìõQz²)ÅwZwåoû}©9ñùè ÔX€D*™èìxÂÉè5iMáfTñÅ–DbúeÉëõÙ+ñÔ"ŸØØH{†Z±‰¤¤³ªâgA„þ°AéÙ;ßkX0ïŽÊ€âÓÚÊŽJm~o³V¦À*}§{±CJ múäýÊE_³¦¶‰ßiZy‚öÓ õfâ­.ÏooÚÝìíÒ½»‹?ƒ×AG¦ºÁt qÇá9«‰Ýeè×÷ …(ª8¢ó—©(¬íÄ?[Û×îB×ÖFáKh‰ÌÙ›äŽmëhcÄ4ÚøÔ ìå¾p¨ô4s8[ŠðYECSìÌeÖé=ôÍœ 8”ÉöI½2r._ÖU<ó xL“]¥ˆO¼¦öÈyfú’Ë1%>Àe¥Yɦ®½] ·‡£Ñuª(€Ø|8‹ÌÁõÝ'Ÿ^_=t€÷ÃàêÍP@/·—ÅЕüO>±†ð0b@—kŸˆ)v,Úh¶,5ha§©qZÚSRùoÁ,wó‚œL]xîÙ¤ g¦PwÃþ23ùçº:/°'ð|Í«ñ)iœŽÕ–Þ…ÀVŽm}Á¿z£¥É¨Ç1ÕŽeF·²ÆÚÓað®¤ÿÈõ÷dLªG g† ÖÆQ¶BøFüü4* ùzçJDa݇9QŸßÛõ®Fá³ë'-píþD®¸„,G<#8B)6.YÁÕR‚W"ΔªÕÚZndy%Årô€±R63 d®Š¼ËõýÓçw4çšÑ×íÍ[ßδ›+ÎW¡•ëß1°Ç;Â2V#sGÿÃ_ŸëœTÖÆ`»ÎרDv~9AHÏz¨çE™ç¸ÙúÖà@ÙxÙÁ7J#(«ýlÂrDÚÛÜEѶ27@ E ÚñùëS¾µ¤/åèúÝã ™Ÿ^áwïS§WÁìdBœê¯ÍþÕÉp-×Z®v éÎÝÇà1Žâ€Œã·B Mé‘\íàXßj×ûÂXg²rB‹„Pu_vêäìÄo£È]uSý[Wñ#DS}Í'ÑBm!¿Oûû­·»eߎ؛G<—f²ÕüþÅ=õìh¢æØ-Ík,L’h£€·ÁÃÎ?Q+WeÓ:¶K?/ Þ÷Ú­£œ×+WH_ß™_À%K]ѽ† i”ôqÓÜ[cÍtº~Ï'Hu¶éaç†q‚i›OÂt^F ¥Ö›=ݤ·²ŽûUÍ`<ö—¿7x&®ìºþ|»†a)ÿæR~­ (=.°àæZöu­¯Ïã£Û¤G7© Á™Ú†dÐ.å¸YéXDáÁ“S§kîºOe»Ö•­›{jº"9Ëñ×É;Tõ#âú¿\²x¯Ã€¡ú¸ðÓaÈVP!‰sfž; ³?Î;—¶r WíNß7F~ψ¨Üd¾öWXõ+wØd8™‘À5JÐÉL<Š-‚úÕ8}³¸‹JÞÕ’âðÓÇ×í¦ 8~3]þmA„+ãë›Úa™*0z€Ò6e>FÀ´ãÆ/w»s_‰©«±={'Rð÷/O‹ßœ¾Qý}}o¤¢Îh»´µ}¥$ícƒž£ô.ÉÉcëE|\mï¼Ôd¯ˆ3C d«¸à”“ÏtiK‹©ª^Ì/Ìâ±[ÞDüŸç„ÄÎÅ;=ß×$ƒ™+ùÜß•ÿ0½¾éÙXw自…¦º¾+Èiûéþ—Œ½*œ–`ƒ%¶i¦ËxÛLçÔŠH@k-Ig£‡J¨µ"o|,¨¯”sŒÀ ¼J \—lÜ+ WÑ>hvḧ'»DT],I/³}5®×¹M£ë¼´”6ÏíqR`ïj:'õÁ ¸B<àñhq‡|™ÍR•£o„Ñ‚­ Ú58yìRgŠ&åÑ´ˆù"Sm‘r©ÆíèF ³¦ M?UU±"QJªDP²°_(?WLA]6`En0sZNzùoÑTL@ 8°Õ4óýbÏÊê¯~ëõøÉûÆK߉[ù¹T:ÄiûÉ¢XÙø$±÷olŽ$QYáËkÃãÚw–mO>ëI'Õ8— ‚Ø~Q÷ÇI*ÎÄï•„ú±ØiÊ·JÚBY£Ôu ·¨jãß3ÜB@8÷‰;!áÅiZý`9­þ{¿vê LTÍìVœy‚ ä\`§–\ï Ç÷V®—Ñ´ø—ŒéVîÖ&m’G£oçsZ1”ˆjðc‡óÙõWÿ‘÷fÍ5qX;/h×òåè˜k¤Ö §Ë”ƒÃRôbn·}s¹:…›4Ó¤µËš‰ÁCÔúû5oà –.úÉWÖlÎ¥ží¿W3˜k"À émÎ ³·aŒ"‚RÚŸ¯Ìv—®ÉÖÉÏW›×›ë*»ÄB_‡š`®Õˆ3Ò´ÙsV^ Ä¼—…סà8,àû ‡}' AN!™’oÎ'Sžs9É*G˜ŒMØZƒWõÑR4?šOns ¬¿œzÚ–›–¼à{Êú7¢kwr_ÀûD4ò÷Š•å©Ê_iQ¸yŠéÿ; €™ðÉ÷ŽL(„ÝEØõq:âÿÍ|"Tûi¶5#°-'ßòäE)XôÑTȵÀ›é¹Ôß²us—íD*áqá²Ù#Eñ>?ÚÊRè’lÊ»ø-9ÀB’«ê,+~w¼”Õ†9¼ûóòã$:Yh„]ßù2¾¿ê{(xc[Ý(ªAÓW?ËöYø •Nç¢÷NöO·ä³—å×A0£.$ü¨&ÀÅ}PýÊ+’^78È6œÙ;}¯TjUrÅ—sÞ7Ùôs`20äŸUóÒö/W¨J¦¹aqï³P¨•Å\ó¨SjÞú€žúÓã9P ¢æü÷¥2A»âNä­no‚ ¥>w]åz—ñÊù‰¿‹‰¿WX?ö×HŸçÓÔ¼£‚¡c³ GI[z·O÷V÷ÖíDSœµ5à¡{‹TØðwÌOÎê!/ñò)AVëF:”. GÈœÎì4[÷î·£´.Á Ånyþ¸#¬1ù±$w°e[pJw¶U3ñkýëß½½ž·ƒQ3yïå7* ?ñþdYjfWð|^ßÖÇ6=±ü„‚ð„•¶Øc53ƒC'Ù´Fêƒ-)jʸ©B"•0—‹F¨r:J…¸ôÝz$à»ßKëÿWžäŒ¯™N»ýZ·Ìùž¥ôc”€Tþø¥ˆI¾¿òô¾î3lfBHRÈÆÞp¹5¥ª±EsüùüÁÞ-aÂÝ%gO‡r¯0pÓ娎ûhÙ©œôóÙÿi¹,ŽP¨*àŽž'ç™Mé½wwó½»èû­EèÌc€ü`O.âMVnY š&à šå„ÛL¹˜ôÑüBºgÒÅ"…0ÍÉZO/ÛôÞðÔ…Ñ!Gó0C[g²èjÔX¯™hê¬ÇØÀ÷ñ°KùÚî9R¯ Xâ|ú:~m ½O$Iøß]&ëáôÐÜ!å nwMtk˜ÆƒìuL%ž®|*¡Έ\Ü>§!83,`ÜÁ¼(*;Xåàû(uPIÉtÁ<+¨ŸI]Û3IŒò–àø±pÅ0ÒJ$૸U‘ßïËÉ–Ém[‰-CZ‚dWm² âɳ¹lÄ)ó¡Ö?®±è—nö+ßèUÛņ9 ãíOÏxe4åT÷øPe|k س‚ùDLY ^6@ê4Q¯×Öëiçn'ÙëÓqæ7X¼þb½NáV&+½-ˆ^6$çWj[V˜`ö6¡Ù»L‘jxú§Ò†P 2>c#`*ÙSýÙnú/ÕÜë³oy?7ná?æ¶¾÷¼¸Ö¶«‰ÿ<ÎêŸ[b,¬+Ê‹Íå÷ÿ¸ Ú&úÜvª]6)ÜTÔ.„Xü”ÿ=Ê¡y(|tðw »ŠÝ³#Q]û.í"Œã#Z2ðo69w"É Oi€Õ‘I„- žêÊ&g• ³Ç¸×}ªJáX§#×tînd0¢¬5ràß̼²«á1¿ÅcýÞ~44³¼Ï²³1ü jß Ö´¦Ú ¾’ÿò¨)0×~¦ÅëÑë¿ñýÈÃωmO ä†ÀÃEÃróÊVÊHóÚãáC(Ѩ_ºZ‰à~§FC4*%þ)q'3ŸrR~ú¥¢•f‘ W åÛœ+ç AÓδ; :–Nôôhbʼ¿Á¢Q’Hå‡EÝgÇy¸7:uOkæã}Ÿœn×_XïÉJkv÷;yÛߟ¿‹ü{Ÿ‰~onè¾£‡‚Óóíc#>·§`™“uüãóâSdÆGÑÏK¶õ\Õ*»ÍR ær÷´šC[aQ®»AÒ"O¦.ä‹‚“±9í÷H\ˆ3`3drêœÕk¥˜h€ÄtŽO8 ” TKãgyëqg¤èº7§´˜CŒ ÓÖëÍ3út="1çüÕëîþKåö«EN¿äfvʶ?ìx‡\ÿã9D BG-àu¨Òf‡î¤(Q?Ç‚«TõƒÏÞ±£Ô¯gf">q>¦<’`øÌމ1U…áÄÓ-× áà“õÙ€é:Þ‘É«EÄéñF$ŒˆQàA]PagÊa®±¹ÂÆð›¢Æâ¨ïU!å!À¦~T0%¸=%ÔƒïÕNíÎSŸ3ÔÍü ‰YâæÙti‘$‘ÔU¨U‘Îà½|¯à‹üg¨U‰{††s-´¦ Û¢IÒ Ëûx v­{ ·ã?* íeÕé×÷ÉÝYïs§Ó˜¶Õ<¶óÔuü®ªuÜÆE‡d`‚JY“­Ù@θê‘Å¡Ê$™xªÄã Œ‹(€¸ÛùÌ9:‹Å=°òri<¯Ó…«¹â¦Om"¯sè|¾ßØ€ÁŸ§|ï FÜ1©S4÷³ÛW‡%§3“’÷ÊÄôH5küó£ŠbvWU%åªÖœà¡(³t¥‚"#R@2§t£þE†Oø©œØqÔìÓøêÝZ%»9%8MulûÈEt/ývéy¾ xG†´u°þb¹Ý¡à{Ò sØH´´î%x 2© n¬í„ßvE'c…8CË„ +Ñfn‰t JÕ$…Ùzþ}M/È#xuü¬`d²z¤x¸÷¤µQáÊiQNbR1©²O(~U™9î'íTg6=Ù4d\Úü)üoïv-³À"þša D¥tŽ 6 )ŽÎêqVPR!\¦HÁ˾‡ >+§¹GIÞB ŒÿIÈD¥TÅ'P¤§2ø¶£OâøÅêô {èÁç¼[¤‰µÚCç*j:Z§…$’LϲЛd Ý šïU¾P6pïR b£HQ¬vºòü~ˆ{³Y±t0+WëxÔ”’’t]ë>I“%B’ú/9Ó6ê@ŽÒûöä#üUÅøÅk –-nS9ÑËé¹’å™·?%Ú`€4nÖ,Óê%¸=ýaÇðìþ«<¦¥ólSWèAt“1Eb£¤a-Š|öîr0@Ù-*ð£eNYÓ €¿éðêȺíÛ鼯@MS[PjTÉ£Çùeß?$#!!Eoè?W~…óÕ ›¤à¥`AŠª@-0sãóþ£hÁ;âLh ôD“ökÒÈÄPéw©É7#’rÍfÏÔ1­Ï9 E'Ëj'%{Kþ’‰/ƒ—T„EŽT^—¡ÅnOîàehJ¨rçf®ùöçMuñÍ…µË ÿ>9«æËdŸCöè%§èÝnkú^µÅÆŸ†²*nl©lF~í¡. 4çþˆbå–õ5-§ªê †ahWÒ$‡†- ª5ø€£¥z-ÀIIÂÜÀdZþ×!ˆò&w¤­XGD¦#ª³Üyû Q*õG¾Â<‚ëÞ(§5WúhA.©Ö Žä¼Åñ*ôš¬ÝÈà1nî8ó[_Õ^tßR9¬ì1!Ò‹÷"¼ŒßéHì:0ìÒBã×ù¥ã×®îyv"ÂŽ„ œV³øF¥b'„­A%¶'Wö†bY!/M Ö&¼&¼å"r œB”è®'縺–> Æv‚œdQ·‚£Ü>Ì ù÷WuÜYöÄ7Qá{ŸÏ ­uë3A/“®;M¸pãÔ‰#K9Ù*©ÕANQCcöÏÍd-5ŒõO:ˆöüJ¥*÷†Jwd(r;,Ç—R]-Û˜”ÿÈœ!É|À£‘4ßÉß13”Fýë&R/$á]êÈiRÓñ/!ZDFÑà‚Z®Ê ’ÝíéDD8¿Ùg÷$€Ãøè¥9”¡¢*]»+ÑÜV  êI–q{çÞ[oà5Ÿ{óL¹öæ+«Á–4¬‚ƒ© Ž%¸W°AÓ3‰û‰žÔ¼©ù¤sa‹ ÆŒö8SW^û¤kžÄÈ ˜tœRËÿ1j¼6C‰b£ºX¤„“¯Èö¢™ú£H:Q¥7]±ùI €I€Hš¯ÜˆÊM,^¯üGäzÖ}i™[#ÝOa*ét ûûèe°ˆTSAn‚žâMKeßv:Ÿ’4Pl¼iÞI7ØOÎÞrKí´º”«(K•]¬&j]öpœ<ÝÍçzÇ;ÙùX÷Ý.å-=Ç!•¾ÿ*â]Y!¡ü-ËWÒÇWõò01ñ«¦hžõSÄàSÈsŽïy{ºHU¿~Ü1ôqû ‘¨†kâ‹Kšù¾*Z$ý7}ïæ ®îå«#žÓÚ\5¼öˆSøÊETõù€ß7O”›Óue÷-£Óùއ<ãu|8\—ë·`ÒþÓG"OM¥—˜äY„?+ü0JmUë¨Cle” ß¾¢B­Ä2ÿDàÄW>¾5]¸w$®Â4ã0=>«5\QÜ'dä¹u擵ó™û°=`Ä>9õ¨Wè‰-a¢ZìSÙÐF (q†.rÚêòÿ|p™¼…e¿—nÇOýLcÒ.pŸ\ÖÒÖž&rw ý¯ƒÚE1‰H!‘µSƒ†ø±Ñ—) „¯v¥õª¦E!MÌkHúlê|׺­òkÃýWuõÞmÔÿƒ™ ë®J=°RÁ9;…™ S¸L4OÓô»YÆÂÎÏd¥…!¾uÚtïë°+麇$ûeHˆM‹wí“–$å‘ß½¢ïÕQÿtW”ÉÁŠJÐÁ>ÓsYdÜê‘øÄå³1}O¥ ®÷x8<çÅìÆÔ'X°.KóJ{ÚzúÍd÷”©Ëäòg™/(3«Br^hù°'§0Ó•Eïþ´ÔRcÄ(F2 ±Õ¡€™¸R8&ྠëžiÎ ¬6yuÓ4ŒÊô¯'LŠ'Ó‘³ˆÆ™g²Fc÷…L¿ ,’ò'Ø÷¯póج_[ ç®Ë‹tþZ`÷A»9-»TÓl3`~~ÓþÄì úû3‚¹™^¾1<©+žçc¢YK(9„‡0ÓkÁì‘øÂØ§žŽlÛ=ÄB™P½Ÿ¯»__Ïtè[¿®=+ðFµ³Cö-=máV¥I¿9¥Vä МÓÜÑ™z'ìÒ·æj]÷ßAΚ5Õ5"Ýï–^ï‹_ND u$Íq-èâË=nazb©–ŽÏ«¬Âo*ÅкŠV°HM¡ÌÂò;I›ˆég} {³ æËÍ)uݯºc§ç—M¯áÍlÿþ*ï~òÇ­±{¿€\Q7'Øý…Jbß7ýˇy©0Æ Oi”0ðCEÛ¿ŠíT_Hp^–°¬eûûp{Uèr€Iã«%­J=Û2»aB$ÆDc˜§€´Ôû­ú9÷ rÀ2˜Ín!Š›³V——ƒ>y«”~}¨°?¯Òå‹Ò$æ )5©£DcÏ’Ÿí‘ŠÉäu(lÔèÚîÁÍkýSæêz>´Ãø[¿ˆ¨kí£‰ÁÙweË]²a“ˆ3·—%áj´?hâ÷è{z\Dö+éD·—pQf¦/Šhe‘l¨Béµü÷~<–T¹x(_Û»Ðr_­ûÆüÇî×ÈDôy·Šì›'÷»«þÙ–ét…aÇwüVh¶½?2àâRP;_3çã2c`}¥÷vù;ã†ÈÀ€¥ÔuY·5Êõ¢`å«µÂ§æ¦¦ÆæW†«G6nTâðx“¦ÝƆ”Ìá2¦-ñ7Ÿ7¢O‚™+ª´ô˜ñKßÞJ…ÿ‘Cp3mõIІ¸Ü ¢¤ô€Æ·dæHoÚ HÞØÈnœi¸Æ1‚#ø­AV\ ºùf(qÔ´t[´Lwßmª¿ø¼´cÓÚÉ„ùô'ʸ’b;Q’™hânðuÂÒSŠnß` Æ>LfÚWWöü>™±ôC#lbô¸…$Úd"ÕQ¬ 7!‚}éÏ …¡IE8fÞGå´—0iÖU"9±øjžï.Àôð+.ò_Û~tý©ÀØ* è6´y ÆhbT 6(ß!{aä ½Ù†¥Œ%œ£×Lê éÀ·±^Žó›màZðÉ_ì穘ýÔñ~ÉÿnÙº±·E«ÑÍŒ7ì ÿ JÈÂ!?‘8f; ñ–ÌB+2 ÷Á­Dǽf*¥J‹Ùˆ÷¹ÑœZŽtl6äbÓ@KƒìLñÓq O8:O‰’õ|Z|ýïìy:Í9-˜Ò v»û- è—€ùyb1öø{6ªÕĵu•qY¿ù×Jw{[.fE3G èóæòýÔë³0¹½‡ûg“Tö«êvÎZ‹8¬ £ G׿ªå§•¬/„Y;ëyl”SÐÅ”#èÓ¶BrÞ‡^îÁhZÜìî*q»Ï'†o+?—Ëtlð.¡qŒ!óÑGí¢RÊã̹ûH6t«èÁ¾îÖ-Em~ÝŽÝ/xÚ°¶”?ÓñÅÄÈ(ÁíðûûZF®E*>Ä=¿OåL-ý=&ÞÛѸ”Ÿr‹4XüGr­j=ë×µtYóàõZ¯°_scÆÚ¼Áÿ{üâvu` /Ûå• ŸÔÂ…9ÃKSòúåà4 ÆÞÞ¡æ›KÀï⚘t¨.`tÑ—ð.‡Ô#],Öv6‰qi^²K¦'è Qùxä+;à)lzÉË£„¬’ÙB˜ßÁ¨ý „5ÖXYwÈÕ{WfíÃ:Ù»²×<'3GúÚ{óé’6Hãt»§Mß[^½ÝìY¬´ÿ~ó¸—í|…aê¾[b™MõêèY„be˜Åã˺R­UdW¦}Ï;Hbˆ¸,ø¬ ¬iPBTLÝÕUëYµdè=:©ó 6EµÄN‘ãÖd(¹&DUÔZù&”Ó÷¶³`Å õ“ž¬Ô®VJ(ª…Í…Oq êê9)òeÿµçD'u–©k9%[YÊ×?ÆØìIŽŸŠš“w¢ïL{¿ Ý6l,ÇÄĘF£z{5ßî­Ÿ||3‰ÿî÷7…@ÕÆÖ5Âî¬ÞWǵtl»/q¶j¼.¯.mëûîwè}\=Í¿‰AÄÕ ²öI"®j…4ý–+âé N¹}Š¥šî+âô¤Æ5%˜d/Jî<{fNcm&»w ÛDÑ$½¬øXö!Ðô^è1xâIÏùãý í€Ê‰1aŒ"/š ]·|Ž7kj•B'h~Ò2…>ä1…;8}§,ÃȺ(4ªÙ²H56Ó눷ËAo ðmê`Ÿ lÏìÞÒIëØX± š‰tñËE@uYý~߯Îã\×rp è±yîŸæsè·®ïB‰‹Dò‘ ìì«høã¾–kMeíI´´µ¶^Η¿¶v–IxFÙ#[ùØ‹™Ð¿3.í¹å€d¸…izBÇÒ®€Šãâmë’öLF,?›yr“y£³e»ß+× ý‹˜zGD*žpÚòSabèe€ªÉË•‚“ƒãÝSšË/èOs§U¸møeÛž;àËxš‡Šç1œÐ#rðŒ¯Lóycñ*×åm£èÏ $¬>¦ñ¢`—ûËú{°–Á`ð¸0¡Ã`ôiLõurGF˜>ÛsL[U‹U–á‡.GP}¡‘:ÛS¤@Ñ~ð0#:¹1à:wå1ºr®~àòïW™zpýÞÇk†ïMpñ³¼ã¬É]DzÖ=ý ËÇ«·aó§2uk=òï<~¡í/Îu¡Ý$#{á+äiÍ‚‘õ/ÿm “ßm³ú‹ê‚õm`'J©ÅP¢èk&«{ @į…“£v ¼ŸÀyôxþ‹eÓý«QØt7€îùkök_ÁãZ¡ó“ €T±.Ž¥õ#}€ dísz»Ÿ#ß9(2Ïn³m•VV’¥´hZQHwùà ¶V=˜òríÿËD0+ûMGŠŠ@‚ "ŠÓ=kF¹ÛFA6}šñd}?:W$¹MayÎAšŒGÕ£äŒÒ ú/®=þ Ÿæ··üg ;qº[¡4¯µˆÙëyÈ÷O9^Ì86Z/¶–ÓCÙ°ØW:ãkË[Ø:>OÐïC»Äd´Áñn€š^ÌîÓì' Τ3Øý/Ÿ¦ïÔgó(vÁñÖØX yÈäÙZLÜÏo¯–x'EÄìx+¿ŸÔB››ï(Ú:Ï„¶{dõPyDÜ8ßíçO:¸<¡ºÚáøì†´k-*•2'ÁåÀŒž1æïÏYîÔ bÖë†ÙI\ÍÙ|lYŸ2(>Ó=Ãn.KJó<}šCªåVkVÖ€eöR …²zrt;m„IÔô^Æ«9Ó1Õ‡õÔ«—®{wÞ›¤³r×0¾¶¶Žô;Aö-·…ÙÕŸë7‹{‹+ßVNºw0À.ë÷ñ×Nš_u°)¦`8TÓWWGC¼•¡¢9˜ÍÎþ ˆD˜Eí‚–Z)C",@1él<°Ol–}èO¬ÂHr:'wýMÈ,Ž$©ß9*õ.*Uª*Æ_5†Cà”€4E°¾3mx]Q¾íøFÀp®tµ–v>f#´,)V:ú|ƒr­p*Kz9 Ý’w·Él/S]Y®ZK× `5tJêfø.ægÜPýNé¸j} ˆ‹„þa²9ÝOܰ¥«råïY—ÕÂfZ}ךÄÏõ=u cÈž£RPJùèò÷œèEÅ ±Êߺ5€¡¦±Qû<UMØÏŸÆ~<…·-òÁäð4lyǃYí¤ø;U$6£UZ²èÄ,K»ºkºÁ(øUØï¥SmÌ–¾»Ã­4ζ½¶kðN»Àc¯µc,G-ýð†;,ýýEIÿ¾ƒëPøÚ·œã7fß¿þNË'¢Æ–J§[ÝÜ”SÑJÇç÷'ÿ3`<Îý„0AE°$_Q¿‘·G ¦²ð‹Ùn^ܧ§XËUÖ8v¾úÒú–€Ã tø ÐT©?=¿®´ [8•[<("Ud.ü#ÉÍ EU„ê"£ À'o–¿ñO¡&AÉmƒH©5ÀK¦“Rù´"`Û!Þ’Éä.–\߬³JÏG²Ü"P1›SÊ äµ±ƒÀTÑRбåu1W(HûÃEn€lÚXºÝr4hÓ0‡åW?/_Á¨/yšV:¨aä4Ä^ãk¼²6µ¨w1Ϻzõî½»¦*}ºqIüND^süÃ!Ú»¤Ãiå5á5}b$8üp„|6sz©yía5ŽLG©xl(ÇB´ŸoÍh!@b–`Â]\$‘b ³DðîjYÊ‚‹­"‰reùi’º'ÓÔ‡¥Èê«dvö¨[ó\¢«'0ø8ã35ßíwÀ‡õÁ‚åÿxp-›àã³Gµª†ÜÉ´Œãü¯ï=¹•ÈÎ(Ë@_‡PÈ`á8(’œ—Yç“D8âl„ ºbÕ,À¤ßQg]Çáåv¤i”i@„õ\ÆÆWØ:Çj@K%zÕwýêZ’KýŒüK±®NáÜ/áŽÓŒr­1z‚w§·õªG$æm2+S@,ü¶ ñ¯ò¦µ×žã¸‚W•<íéßVúdäyXpjÐÓ™wÓ§ÖMðñHŽÌg¡Î餧s±!™\ìŠæÚêæuM­kƒø±Â=ĉ+ït¦ˆþ¿$ßDsÔ3yµÐZä¼ZÂÏå;¤¿ ÌX´ƒÛ{nОÿwàžŒ£«kn÷ß]OPI¢×‡1û] ra_p”BK·ÐxÞec ¶d¬+m#w÷ISª:à¬É>J?ËÅ®ïAåGNPv§~©²Ë¡\5,ìBþ¿üc¾&Ü>öìà~U %Ç÷¹î|ßpj•©-½5:fIĨ*PÑ9emk+âf{O¢é{"ß§w}ºÇÃïsV~Œ_—]ÕßÙÄ&£‰Ö9”N̆‰`ûõ±ãú>Û/<’ËP¨”׫–&ÒPŠ—[ø~o_», t°“—wáNxð_ãûöä?:»>´Æ`#x(²ÇÈ-ä%ëRo´ tù·v¶P3Ì‘6ygé Ÿ?õ·ÙgOí]¯ŸlƶVÏc6ešË‘óïñ6íù¤S¯jlí`[Þ<Ò¶ßí}½}ëËßñ2™Ó¬&t 0J™Ž%‡¼jóœéÄî{v@³AÔÒ£ž×9ãgÊ>f°=‰w)B㟆Žÿ6Oü§*LCë"œ/iY™‘gy„•$×lrÛϪ§xåBËŒ£“htéyb^q²¼/Ymv–@K®íR K@DZ$SF‘ÙŒ ù ŠòiSû¼N¼}Ô õoH“‚ÀwäwŸÏW èÖÇb!ÏBÞUJÔdpá=žhèÚ¦IP òç{y »œÁwÒo3¡Œ±1!î¯ÿú+úï6Ô)¯Û.jºÔ%õ5­¥Îm>¯ÓÍÆŸ@ræ@™Ô['$á_¥…£.+€a! ¼™ÿúN^,Ç¡CÍ“aŠä7vN‚&";‘ɱŸ˜j‡ßãzÊ忦+‰ÞæÊÆ—üÒobÏÀû{}E‹Øó¾"vŒ%;õq]kéývkºÈÿ¸ ø%ó'hðÐúcï†ñù*æœ/bùÓ%*Ê‘.™G¶ñ"nº_­lK³qî,_œ.`’yèn|îîÓ1Ò×ÓÙ‘;:ÖŸ!<Òiü¶  9#rG–W BÄ6Þ:=…˜Ùñœ\ £òòš†¢ð9¦1»Œ™%¦*!¢ÀÐÔx\¥fÊ=]é!›ƒß -dPc$À ¼Õý 3­_“——ðÃåG/×öÉŽwçúéæ“ã·Ç¹[±H)ŽÈ¸¦ûþ8%æ=ëÊíÕÜð«K¥•Íï¡­²ô/™×¿s0l¯Þû´[’ÕïÃÛþZIšÙad›×Æòp{³ÆæÖÒ\ŽÜÌŠfk‹å†Y Ò¯`XÞíÚ=ÝùFùVŸ»“¶æ“èê€'°`X¶Lh§19ˆ5Ê篖œã×á¸g‰ýHâJÙÕÛ¢œl½–ަgÓåþKÁ‹‰¨¤…LLÔ¯óm´ýìŽ÷%…¬Á¿ª¯w;ðå}úáð~·\Ñç.9¡ÛÛX0…º)ú¨Í|r,¸q÷I¤$}ÜÎ3´àfGÓy¼#CåéâAÌ’±ËÏ0 ñCIMi¡ €¡3,Ê(9 §¸}ôe˜åç›{Š(&*˜†Àò@véFHRøŸçø€$ˆ6*!ß4 TgcO•&D䓪sU´¥ëI;ßóð·ýqgŠ1÷— ッv1<·ìª±LÎÒò¦ûqÐÍÝÍ5ß~’’èôÏ—-/¬`í… !ÆÙ¹@˜nƹærÙ3ïù|€ráì¿öö絋’Õp5%uÐêKüŽeú;ÛÕµ½‡Oå'•‹ö‹×=6ßõ¢*ß•íºòkÿ6QKÞEÉw·}4æÁànðå%#6¬åìMÿ U31ÔŒ¯+Å4|Á·)•öd‹_Œ8fÞXaïlÁG¤IÍIQäùì¶ akÍë{PFÒ†y9,œ9¶iµz‡â˜jù.:cî‘ÚX)pç{åßPÍ|àþ„V@iIÌKÜþLœ5O0s%ŠŠqg’ zbˆ ~ê¤FêpP²}Èç²djŒqÎ0Ã00…­f¾Èÿ#Š[àOñ=â„OÅô^ƒü+Ñ»ÃæèݼâÝU@áÇ&0?ÚĽφ-~PE4…›™#¾fXò]n—smÖ|UŽÓ ÎH‰S»`­™‡Ã ¸¹‰1ÄÄš†·ô{=×k1œô›”]L‚~=ÿs+^ô‘Uà·@ ƒ*eút£YÒÒÍVN]yÏñ²Ô³´µÇtÖ"„,RÁM˜‰£¹ñLè®›PLR›ï¬°sxˆ«öÿœèh¾HOY€ Ó*† 2*B:a”;×Å.m:Þ2o]‰&ýoú7¾ˆríí7¾­EQU¾Í¾*r³&ð¡öIžŒÝµm|¹U÷®GÑÀ"&7)Oè¶IS©Ò8Õt®xÝE9¡„V10ËSÆ€±y:r{ÎééÇ‚y¦ZK”}òkéKCëôÖæýms#rkåâ2å¯ÖŒ(rNÍãÑ6Åhž—¾z¹¶·¶¶Fu¼>Íç4:Û ŽúÄÀ±8aÁ@!mš>=-íí¹­ÎÁíòÏ=,¾Nq_$©t5BŸ?­m‰>o‹ö¹pN—…ÅèÒâEºæd\†Ú"^I¨áÁ£U£WY[î½& ‰à…6nFœQ‚X³j/t–#ÖŸZ;ÔÊÉf_ƒû‡×XKþÞKBø£¤xúv~Çq`!îÉØ.Ö4« 7v|ß9*ª9Z¢\zÆðÍÍH¹ó¥Wrêní‘«@;[š\y›_h¬X7°&»j_1>ëÏß}QyCËYªOÚZ^÷CÚ³ÛZ_f—äÒŸGØ×OÎzqp@WmQ$a`”Ї¿ú¤Ýùiã"×ú%6Wk«²©®¶ƒ —èéÃBHßD‚Óž™Êì%³(äÿ9²uój½´¬®ß­‘¤1}¬Ÿ"Æ%6_olZ‰wá’ìâž]¯ðÖ§ÖÕW]•6¦dMó±°’\8¯€wwц …«ž¯J½ôid­8hx£Kgÿýµ¾5=¾W$••¾›,õâîh`tDè&E‡†Š3‡¡~”ÏiS$¥7.…án†®è…ó½o¤³–B£ym3zy`­|8ú=ì–¨ñ×ë‡BïÁƒ ß[ßÍèxšZW5Ÿ%ƒ&¦l¿8¹®š…­{bP¥@0f†Ç@ D¨¹U!<šiò*ðzpì¤þî°å\,ç8]À F¼6$q ÒÖÅ“ûû„‘G€f{ÑówmÀùõDx šZ(>„\x`3'r"õóŸ²2cnÏOï÷ÛýÃéAùã]ÓÇÞÛåCÁ-t¨‰?ëÒÅxžàÔIb›½¾¯h­Mœ“Gµ[þ××Õ7¦ß·u¡V—Ý$îe»ËWm„]·ïÞŒ]ÍͯÏmÚ~™@NçavW$abv2M;þ˜h¼Š£ym mŒzŠ™Üê'L*Uô‡ÑŽíýmàç'ÉðíûBËCÁˆØJT6¨zþ «ÈBEjØH¤bT“ÿvÔÄ(1mº!¦†Já=AFÉ'ÁFBðßäõ\'J§¹ñlïœÓ3Õ€?Ù¨ˆƒã†óÀb”ödÃÄ$WOƒæ‹¨ØgMªsl‚:ÃÈ¿Ôé6˜smU›ž”þÝžœÓñ÷mî@-ÛwÊÅFö6ÛÉßò½ oSÐFÁðP]ðºm\í\8{o烿E÷Ï«?‹ùø°Ó0ÄlràŠÐ—;Þ…ð {{¯èÝöíË6KÓs• ó+*Äë—ÿ·7Ð`IèRÖÚR6¿®ø_ݪÕÀlª3¿ï7ºrÏé‡Óˆs\\›I' }Fåik³ò/µŸæSÑŽžªô3øk/àŸãû¼Uý:àˆ¿ê[ñqþ=ÚK¦¦Þ¯1?·²Àz <ÔaÐçÈX•טGEË=ÜØ=§ Íä5­Íˆj÷ßJ0¿¤àñ˜–'›°kšðý¬Œ˜·‹¾ŒÃ Œ÷…ÒØÑûÌB¬ ¶¹B|âüãø@“„O÷êaÄåösyFÑ@n®åî£ì¼ ívzz׊“çßâ½qkæo5Ø‹¹ÏÏïµ_ï‹;+€¦û®Æ§Óÿ”ùfè'¤r¿ö&gÂüP,&ôÒn¡àdŠzIK‡äH¤¢† ÅÆŸ¨éóÑ9Ùóû¸¼PÐs²j†NþtŸÞ\^¯z×Ëp­º:üJÛ|Ç%ñt™¦ý~ƒû¼¨LñEM<_=Ÿ…Aéš †¾®J"öD4ç™ö]ö1»8ÉÜGV8•Í­Í¡ÕvY)Cñ9é†×m¢J/uÂ7Ü~Mœµ -“tŠ%2@\âfL ˜©cŽóºùWy­ä§ q`ã[“+¨}7ð˧õ8>SÚ7Ï3÷@aË.­¯£³:=¹æ|ú.ÁA^ÓÉ»Q«ë‡Ú%Ìzá!eëó¬®VЕâ3ÖÞP54WžoC"ºóÜ… <@¾b(GªÁŸ¯íùä¹ ¼ëÍnDBM ÉU5ÉÕƒ2!^š:!í€ • åKsƒõ+‘FGœ_±µµv‹ñýË‘N°‰J~k7Mû‡öִ1ˆ3wÍ‹CÜÐ.$œÕCRÊXžðtB¹X àÌ:ÈAŸMVµ ý ®Ë¬2!3V ßߨIøµµ÷Êù]ìTë!•gµþ¨¦ê°yy)ÿá ^Ó›þýù§õaiÊ ‚°Ì;Õî\AIßj!©Q¯MT(,MÉ‘â>3Ϩ5™jUWK3ò’¤‡^\ ¥}ÕCd«Èd‹ ÿˆ¢‰ “€i("‘´ó¢æÍ¯òʉOÏCÌ¥2*óÇ_mÝß¼"]õX¹~Ãï—†8^T¤b+.ŽN2žG•}oïmmï#1s»C™!wh%mIÛD G¦ #±UÇÒ\rJΤ¤ÿª±<‹ˆZò¶Ý¬É©Mn^všyµ 0 9ý!ÎË  ’@lsB?BGBáˆb†t†FB-~Nè F6Éïçç$×R+Næ ¦|»¢š·kDgiŵÜaêþ˜° ܶ׉ŠÚh§ðˆZ?mð-Íœà‚R×…»&š¸’r$Ü %%Ͱ‚Ë+œê6ß°Óóûý²uÖ!¯®–R@¢ôQáaÄÇ—d• ²TfÐ çï’z±­G±­9Lx»wâTOÓ/|…Ê:˜æÐå+NŠ÷éþñ&EöY¬i¶¾¶×j³]],Ó¹¬Ø3¬Þ|´*4ßôÈo\¢¬ïɤÐË“ê›÷þX ú5£¡r6Wjé4óÓ¶Ñ íÄ òY ¦ÊÝeD‡h—¥Ô~,g.uxpïtü"§'Ò©â’²#"ýÎÊbÏw-†¹ ãˆg_ðÓT8UÓ,ã#„¡òÈ{ŒMa8YÙÓYyCk7…`óÊ·²Ñ^ÈÝš'.…"T{éd¯0[±(—©ÄRï½¼å+'ù?é&›Iú‚ÊZÀ„y@yüPT±s[—·_-´Šƒ`óìÿ 4@"høM{ÚDôw84]Lv>lˆ$Íy “ê`há:8„ŒóÁœÚè¿ yj>6ó7¶%ª+Ê&¼C„ªs&™}–—?sÁt‹týSg¤”=Áò¿×ê{h½6´â¯ s<>ûÞ6¶2áÂ?ÀZÙ’Rš, 8œª]®uú–õ‹òªa|:ÑkÇÈz›Õžõ?Ø”þH¢¢°à)%´#l=þîäS¿qdæÚž6k—Öw€ÁÎŒ—ÊŽ±ÌŸÏ˜g±•0¦S/1±üƒ£[JRDZÓ\ÈY1dh Âm‡¸«/R'ʨǿ//M¾ÛăõWhg:Ùí5Ï“§O+éÀés°ºKˆËc†¯Gåiç·Ð<ÎWz,µï§Þ_ã×;s( FŸ· ×gœŽ—U®òLÓ²`Í€øbÖÍÄ^kq”`xª@ÞËmsàIg‰Ë¢yˆm¯$41¯uÙ ?C&¤¿íœ1DÂH%–ñÀ0 ³ ¸ÿ7§¬ß8¹·J¿œhÒCGxþ{i+Ê ]á‚ÂÃDü\Ñ ¿#z;‹–÷¼´$΀H?ürQ¨e¥ua›í¶5O1šQÝúW¸®§;²Î`±(@Šö2(éKn,ùÑÅ‹ö†d³ÅGºU!‚2h°z¨ó+ÐÆ‰[X…u‹Ð}°f²utBôÙçòÉ8ûZó‡0¸—T¥%L¿¤öHÕÇÍ:^ÆF~™T>ôLR¶ŒJj~Îk²g¡:Ú÷wèO‘µˆú~!9ÇŸ¦¶:.êôu3–›úfôÀU>ŸrÎDFÄÞæ›Â-±ÍÈ0&eô*0Ò‰pKwRâ;{ˆXs*°Bô~1—ðè¢<à*¯¨Ø>M“²[þcµå¸’báb“?*1{®lœü|E¯½¬w§ýfÇr[ùçŸ, zE;–ž—Ç‹±;bÓ•k%á]ñÇS+7X4ìeä7›Ø¶ «ÀZò'ŠŽ‡þoÊëQDiÁM© bɇzB뢬Lo@ŸdÞMÀk„:1ëlP(‡Ac/# ELÎ/bØVƒð‡:íQd’Òþg>E¼p]ê9â;MÃÃÌ_ZC@Ô"Љ}ß{ƒ›“˜Úæ ÁÒ$À0¿¡v{l6ÐÆ0ƒ À¾JAKb«µ›Ê–S8ÈB]±;lTp¸äv¾yD¹ÞDkõJD r¶&Øò@h&ÖãƒÁý˹òþÛÅ"ù:{ß> …9ØF]‡A]ºM,´4œË—ì,ÈS38¶8tX¦rU|Ôè´$27~Cãò¤ßêímLøpýôæ7kꛯ܎Ë@ÕÎDRÅÌåÄ™K Ýްϵ$8ƒŠba«½oîW¥üâo84"žcbŒæû*70©À)oÝDS—ö}<ÆWwE 9 f{ÞcI«žK]®ÃéXŽKCÛÕUö àS|ÍR•iµc@ê/°º@ÈnU¸ köÌå_Ê`ËúÕJ À÷ØËB:5¢1vþ¯¯ÓTåðí,‹GtâI){² ¬"qˆÛ›ÊýŽŠNy{Ë·MV4—F¥XÈ£&·ú¶c“n5“Æ&V_)*¤L]y¼D(³#SßrÌÛ3°&q_X•;@A±Ob%öï‘“LØ pÆjVžÛ‘@Ê9¹óœüÚš~Ùá6VN[¸¾iQ\ÞJy•{÷tßõ 5Û^¬-nšþGu˜òQûüœ•†¨KÚ-;3$¿ âK.ån9Ûãô††Ã"AJ¡³*¼ÜR2Ò²#¦qÿB]$VE”>¦×dY¨Na`›Z`m/ßÒèð›,oÊ&X²Äbî¿Å{ ¦aô\¼»wOúK”?uèûèUýj5X@É8·B0ôªîùÜZ=³§ÊŠZÛŽ:vNÉ‹•&=˜Ìµ½êµ-,ô½_|Þ}2îŠïæiáÉ úÄ–µMêÆ†X|Œ’ôA!!Œî™;YLbt•‡Ò¬zPÂpøR@e-]|^>èJ˜1Ó0ª$ ûÏ„Ý< ±¾%—Z¹à•’äëšKj×È>ü¥ ¾º=õV ²äÖ~¸pÛ²ÌNܳÁ‹Y¥â˜¥‡Ç2ºÔ²%á'ÿ'‹FçÁ"ÀÒ xq$‚ýeqèÈÖ WÍÙ«u¾@XÍ3Þ*Ù0 úaRªê#ñ5ûV&ÜÝ8½)¤Æ"n‰ÆuBP܈t¾z¡¨˜Æõ×—ýó³ÇÇ)ýëöÏeiØ Q/kœ´¯QLŠn¡p?MØåÍÙˉVÙ„ÚÅK¥·ÒÚ+x¶ÇÛ‡OIv~ÚÿL» 4ûK @IŽ/Vüñû‹9<#[†¯(¢6jãȤŠOÌó=ÞìíæëíjK_ñïUb/ÆîЏµo¨ì=ËâZARo¶²Ùò™[!Hf9kf'¶*1ŽŸ‹å6+§{±$a$Ôël¬}dfá8CyZeÜkìbì‰I` ªâË=,çÕfH ½•_ö:€äƒ×{M IœâÑÌ/Ä”Öú}E e)dØ%{c—TÐÆ·((ÀQDܴ昘]ØvHpnŸµ–|t`háçvúpÒ–&ñÉ)úåTûlñ}Õæï˜ú·n1ŸäÏÎ èÆÚ®ø1¿‡ˆRÜ tì«<++sO¥›¡ÜµYaåI!õ,Íϱg•&.¨EÉ?K›ûKÝâH ÞÌ;f[ Ç•§o®gŠ©u܆¼‚("{¾NíÓXm1ÐËv•AÍD-\'\‹_ÇÿUùìÄO;ÞÓY§‘¶4Z{Öz¬[~Õ6QÍü¨§)¿Þz·Ã «œ—`þÀ!ƒˆ±PÕ0.økþÌ0D ¥Ûû½f¨Â­¯”ê“ ë²&)eeP ON Ô½…ëSžZBi°ÛÎlì‘1þ},¡È)žOœµ” n/ÐûI–XåPG ÄcÎ…ÿ›ú-‘Ί×ÈÇ>¯WõiV§S¤Ë«tzšÜÙ­ÁE.Ï"43vQè×¶ºKø<&j3ó½Ùs48¹»¿í®\?ÞÕ>zûº#ãÎײ6/º‚*ºW!ÝgG¶Öí€ÅâAÆïPe4•Í Ä¡ÿþ_h³¬>Õ¶å¯ ‰ÑÈrí†& ÓfQæ¨Il¦-± }pÃCa îd¹8Š´gÞG†’·€¿ÝK°¸S2PHä¼!1Ѽþ4:&¢K“ ( eŒ}—ÔÄÖߥ•Ø~J1®*Zòh£¸IÏ\ !@Ä;v½L›øŽ§bO…‡O^644NÕ .!ØÍ¦  Y–‹NZ‹°Â™)«Q'c¬„u£Ëòñäqƒ»¼í¶9ùç2-½­NÒxkÂ2™‘ÿ ³Ï%$XÞ¶=!5ü:´»oø!=kÝ ]\î@нº+† Ða†¢:u™p4vúr¿¿)Nð0³»|di´ßÄÖÄbx1ƒ,ZmÆF’·\â’ÚUhž<\ã™§CÇWs3I‘ Un …ý£þ¿ÿšíšXÙ)uÈ`NC€úµ$‰/ÇÚuA‰åÝ{ÍÀàcâb«â“ÏáÃéí^ ThEaöžíN¾„XÒ’š87Ú‘ìV¡ Á“#lhQãKajûç°ÝÇŒYçú3Åh9"rÁ/5t*·%< þI3Õ¬É*)Ç ãfª"Ržžø’gœ@Q)§9ù{*éHb¤äиek˜:Ç|áÈóAá}J½H2³öáŽAۜƚG­ãÎm$âxp÷ÒMœè@´SN”Âÿš–P ’dOE7dí¼_‰åh0 ±$ò|U²]­ÄñÚ#©6IŒæc.Ú›ðã\Úð#‚˜'8o•DzÆñ ò Ãü“fz )²¥½ó¨÷ïï_»¾V½¦¢m‰ˆlqÈüBkvù®›ËQv¶¯F±Ý…4PÌCÍqØvcš+´…Ùà†0¢ã(m9Í­«À àU19$ˆBÚôG±O+!<÷1¼7¬°OÚ“ÊñÛ^JØ|¥:{°Wà› Ï=8·úË+UÂcvˆK‘z׿È!¯ûã& ç`XŽR,56Y#ß©¼CA³Ê!ÀÄÏGy MÀz+f™AÓyú,Å®s˜@:À¶bŸõF²µKw ñ pá¢Ù•íí€*Ù9œÒ8A'¦g{£’&ˆêãpŠ{ENþ=…À%Þ¤ýYÏú«´ëZª9"š1j"Þï0þ¬B¡Ð«Tm}V¼ñíñÄÄDžâÉåÿ#wŠ´ÞÒÿ“±å¾åÆXý;݃O‡Ò ¢Õ3Í,ÈßU“Eq»4Œ½ðÇ-È®©ã¾ÉeçÝÿŠ˜ƒu4”ïo\\{ãÎï Ÿ{»P¾LŸ®N:/¼~÷Bõø6¡}ñ :÷Õ qõâ¥q½s-u>­n:ÀƒçšN>Û ™@9_197T2â+L%mMþgŸÏíA¤¿c>ð$K?_0àbFaú04]̲lÿfy熙ÿõß×T0¸Ÿ'¶ žú'úŸ;®îâââƒvOçJŸ&C¹ôµÅÑû½Ið°éÈù·xݽ o—gBNŽ©/ÉÎ8a4´·Õêî÷*ŸÎD"½^ž˜:Iè¿)«…ÅQÖ3\rœK$ZøjÌæ˜&kØEFZ¼MSŽ5-SäBr¬5SØ_ˆ Ѹ<è«Á¢fE];£»Ž_4l)Ê2Ûï/·IpCãBT3è·¨Í| ›3’ú~Ø1K9𯇺@5ä{LÊ~íh“,TìrEÕ‚kÑk÷䕬;¿tó_²|wd$°Ò¼xf[ÎìÐ÷[Ê÷O^è- õ^CZ‰)Æ68o3î™î?Qý%;ÐiLÇ7Ž.Œ<„ä:ˆ(μ9ÿ3¢¿ îLé¡ÎÆiíê4\úV­\î^µ\©={/œ¯zgërß?á»Ûú°ã»í¼Þ4kÙO»L1Ïôœ‹'Ó³EöˆußЋ\ëŽÞ¡#D˜b¨ï³}„ÎËF’-ÛµÏÞî=,g+¹<†}³žK"36–æó Ûnô'¡…’ö&65”yjw €„F™MÎ×8X@|P|ºQ%Ï)5¹QõfÂô§§£×ÄuV.|½Àò9a÷ôð –¿ŒæßÆ9†_ ;^Fî:чóƒ÷æyC…L̵H¯¼ç¨•wІéìªuCðô² wpôøï…;2#$߯,Þ®±½‡é€{svžîf%ü@åܱ€ä jÔÝê5?‰0,íý‘¾r1˜fòcé§«QbÊZiÍÊì”{ÇKÀß”Mâ‹C²‹A¹/A¯@!ÍÉd›»ä“7Ó²yèŸôæ1ƒµÞrS……|­Å³ÐâžsKî¼².È%Íu™‘Ë5äDPSJÈç¹ánáàè…Ç Á¥1æmîõ÷ŸMŸn†¢QÊ1mcô¯4Ye¬”bç9å¸D_¤û–u­­˜O9Ò-ñ*BejiÒ8äÃ,`X`º,ù[Ô!õ‚ÿw<Ðóþÿ–Rq¸Û:³ˆIȨ|Þ¶Ÿƒ A ELkÐ0 ‰u×ê“Ú{$Ä›+ª9ŠëÕó×Ù¬‰PIh¦/¿@‘×pVÄþ%ú|ÏÐEÿ£í?Íã}…Á¡ùYš?ð4BßdÍáî/\,Àݘõ¡ùY`û5ÝÞÓÖy=tÒ@±Ò‘¿Î¦·f\Y@F£‚¦£Áñ¢îʦ¾/t·¹ox!{rïNêÁj§¢êp$6ª¤ÞcÚÒBò”ï¬*ÏC„2òùLûÙ™o׿’>Qž¯Sæ4c“ýJs(´R°îóN-32,£ß ê:é¿ówãx£cTnš K˜…Eg~_£u¾}¥úG„U{íJY½¯@Å º2ˆÉ9«Ã.2s,F±§þp‘Åß%ôPå ˜n„iänH,= 5¹°“Ìþ´è —òt·Ð»öÝŠ÷y"šŠ„À¬8îË|ª«µË¯ðvÌ ‰/ \pÚêÂÅÕ¼ãRÆa,M~b’^Qtðo6ùýHü¶ó5ö4”ç™ÜEƒgôXF‘œÂVÔÛó~¦?ˆ}P¼÷™ Wàs©ïÙ-º¦pÓ¨ïžâ»\‡TO–L2c¯¢ ãÄòMÅ‹‹C(¼2¬·Uåw/²ÇLÆÚ UK5züű—ЊњDv3Ûo¼ZNÓ¡¥hýâ±èä0%^[…•ùËXc,Ûxk‹tNÌ'VßIʃ¯àëZçØe‘*@ºRžY"¬¥Ï£Ñ;6¬pŸy_G¢ŒcÖÖG•âK¥ˆpó?ü9ëBèrÊàC¹“eñ—J1•O¹Oú?·™M×*Yb›ÈRż™½Ì ûjXwë$¢ŒÂh'¢rpfkXËè!ÔݺâÏ‚K÷²VÞ¸#•j=á¸FA2 ÖÆ|™¼³UÉyÄ\±ë1¡È–¾ƒ é®ô0sÑèƒJ`YÞ\Ö5ðfÒÀôsRòh–=_kr=òuôZ¿ºhæóA-uZ4ïá…°™þlr pYqåwaÞrá0­à”¦§lY$(ÄPÒ—ÒðÙÔy¥ëÄ0Ü<ÈQ߃F¦ä½,zë>cð ˜Ä#ßÃ(ì X:…ß­·ÀÕw3öË É뀊U>DŸ2–6 ï×åôÊ¿[VB‹G—*Ç“ 9µ.LûThöï†j^nŒÀwåùk—ÊVc““ÃcÄrS'è·Â§ÒÃÍ_o$wŸ³áàmýǧÅ|»äóˆüm)û– âÁÛ½“²pkÖ—ªóýê¯.ñÎo´mêúÖ$xý—§ó¾rOÛ~Rÿ«Ðlµ\iFÿ¬‚£ðüî-ë-“²ƒÎؾl£ñOrè±2 @“tèõäBìÉ»%×`XäÂ]²AÍ„¬šqÒ¹ôÝ ù\Å‘FU_[7’ùÚ½&ƒÍ;Wï[eª½–÷ÙÄÏÏæ2öáðÄ©²¿Û6†+½#Ì;q -\Ö.‘, Ï¯TcœZži¾ŽQ¬3ˆ”¥æ>7}„ºSv5×%îI¾Ó ¿º_ÜŽí ÿ“è´ÖÀ•™lpXÛwŸîâ~ÑżG§ý}Î…Jºc‘)Õ?x®ÊÃ6<Óžr³õ¦DäY#(\¾kàUŠ1…|ºÖ_Ì*r¿+.B,6œ¶@† êËX[a.²¨<.áásàõ< ‹áÛvÉ.ž¶©Ã®Iþ6Œ.ïË Ýó€ŠWõ椫¥ÛÐÕãqYV8ª*T¥ûͨy|?£èª:úÞ>%õHHžózd裹».Ÿ•H–ãv‡¨™´”l@ßH¢Ÿ«ŸUøÄ¡&U¨u•…#Q³,°]áž(8ÅÛ•¼uÙñØqܱt%•«’jšü¿Ê–¦Ô&ÿPá¨Ø½¹ ßøX„lQnv>Vøÿ0õ@m6ßÛp(Å E‹§-îîV¤xqw-nÁ­Hq/®%¸Kqw‡¢ÁEwçKŸßûŸù2L`’Ýûì¹ÎuVË}I‰Ýå9ïV­=@£Ç (ûBi… eäNÚh ÿe`OÛÃãÑ+ì3õ{̰ââb¯§T7Šó¸§ªaño$_ü_ôQòç_øbAãÎ\vŠO{ðž”3D¨©-9Ì Ì ÈÎÜk,»S‚‘ØŸ‡<åf4Îü~­gŠr¥>üÁ¿Äpß‹RÞXlu ü/¾3™ö›ù`ÒÖt!e‡¥ÎKïBÿ\ á„’SÝÉ÷ó±¥þÉBšèg¹è?±¿„ÿ(òj ^}å—Èt`šúààNÄB^x#u8ѦM¿äoi«ìÜrì›Q:¥ˆ¥N ͘ôæÀt%û×çÅ÷dßõ@EyÍéëCò·¾{ÔJþׅ䋳ˆw©gÞ(‰Yã¦þ÷.׎yœÈ¿®#¹] ƒ{l¿ö´4¯Ý€G£~ïè/ï<½_ÛS:Tkß$¡;édƒ˜8>„ôÞÿ¦ ªV"…å/xcv5ðI÷µÏ‚œŽ£G«¨&²à¸î ¯°A8“Äóê!Û6ŽGB>§”ÜR¹l[®³}êƒÖÙŒtdn,q¯sµþµ2EU+:eÑ4j$ºT.ékŽb¯ ”F3´ÞÌyh—£ŠT?z9…IG$2@í§ÿߌÃ똨U——:Skíë£Ê•.ר½•´™e"‰?ÉÁ)MÊ?J£M[§}¹jõ*jRŒâŸ'µSx ;Ôׯ¢º3àl£¥Ïè×RÀßׯʥ°ŽÚPmóÁY#‘ˆQ˜@f8ÔkÔa’®KýDúoy©á$7Š7É_%ßÏCšQi®Æž¢5"®ýª€Í)?µffnSQ¦„HÏUì`Üf>“ÏcH÷ÿœNu“3Éî]êæò.Ç.4ýÉmd,PªZ \å [ŠNÖaàžzš”VƧxf@ ÆÅj¿¾èÚjKÌl¶2ƒ‰,×^ÌõÑâ·ÔLèé,Žwp°ÍI5æ‡eîÌàÃ-‹¹{Pç€>ñšw½Í„»£,ÝšÀ“¬cWø$K+¿åþ]mlÕ¤ôä |8>éøõ SÜ tûäuÌhŽ;stþ¥¼%9p4O\^fž@w¥ 9ÒÞa‘5ãÄ'ÄÏ¿Q¥¤¤”˜5-èÐûFdRü"¥eÕÒ$èó}wXYÏY¼^Íi~בãç¾ûº¬ ^,‡Eœ_e?8·ÕƒOÀê—HV¡ù˜Ìº÷\˜˜˜á{÷ÿ½./«,æyt½ùM‚ª²ñgÔ­FûÛ}!H |"ʺyeÞi‘ïû‡SC·ø|lêV$ü jìÛæmt+/.\©[››µ/›n0$)ÈM¦áMŸ$ZÖ6 óöóOçg[2Ó¢þ{>7››AÁ#v:a}TC}H˜‰®-䮚=®‰fà¨"éææÖÏz'!l2Ðç·U†–ùùTï~Ä.£ÒT*juª8 â÷+®Ðc™)^f%ÓmùþF{žBx×F{˜£¾>)Eî/ #}ýߺÌU¥åèØ8©Œp5*)+_ýtsrê–“ UQ&Ú†>ãåÓØa²“bÆÅÅÁG˜¶šŸÉëêç§(944¤ŸÌe'â‘5{Y5ƒcÐCaÆ×¢—Ò]F«\'úæÕâ2‡WðöjfÅTMå×CL=Ò\ØàTŠK¶c{›ž”„7ä,45fªÓ÷Ï¡A·“ ®þü‰–tb«^aا%BgA¸Sä£FMV¹¶Õ[py ·­ý`«p(g„Sh¿³?iuQæxÐQ®Í„Gb˜µÇu«¸Ø“àM&]c¨ˆ+>*É·ë@?g Øð—ËËËÛ[>j…Žæ×{ÝŽ-±Òi­ð|Æm‡¿ §~§Zµ0¯fïšœ8A6átö{@ú7[RΛd×_®¢ ü©io¯¨nw$NPÍ%=fQ 6êdddH] óÞg«æ¬>0--­ÝùDáÓ¡+²q ýs‚úS:Œ‡Ûô½Ž¥5q¢-ì5Ö"ŽY3Ïe_<ÊcµUÝä2;‚:#3Ô×ß#vÍ—ÞHà3a†5Ú£üxû£ÏD3#£&½ÇîþþþÞÞŽo2[Õà,~Mÿãù]5=CÚŽ&G‹óICci5㺞eî´­á¥îW ƒ××)N½åÈ¿Áb˜5<öõŽwúqU·gpMl Å}ßMW¤çUÞ :²cÙ-Ú4TUWÏW¹‘KXd9'Bzz EHùÊ‹¤›{{{·ÿ^i¼Ã¡@Â¥¦ø¦WŒ’|B­‹ÀÞ&ŠùhvÖÒëJ‘Tra@«•ÆÏ,0s º¬-Šü¯Nˆöõ»6RL¯©•:ÚWÝ£œÆEÄ<Œ§RÆåÝ9f "1Ý´! )Á•nqôngR‹X‰™}†ãížqöÈ2E°ðz*þc÷az02‡cˆ÷ò'àRm,óH+˜/?U0³ð õ†)™ê›•—ޤ:|¢’ºÝkW[Ò£©BbZÛêÇ>!&Ÿ’yцü±Ö™5AwvŸ)j¿AM:öñ¾ìÊŒWø·L HB’ŸïýgÍ"å>ÕzsÖI½ž QžÜFÈÅŒ7DU¿ I×$ÐL+О2±OºÁ®­e6帘dΗÕÑ.’šð!×c1ùæ8±N¯¤§§N’NU€>¹Úq P B™4;ÎmGÍ,ùÀ+í6¦û®jPZ\ÖšÖúþ‹–ÞÔþ3±Í¥D-ˆqÐIXdRr‰‡›×«ë-:ˆuÚ©;×/ù²È‹'Kv.ØôÁ›ŸM’}Çö¢¬;3éÛþÔÛV•WBݬþÑg¦õüÙ‹³C«„ŸÖAÉ»ªÄ싯ڱåX,HqHðŒ&ÓKÆõ™UÍÞ©f[ü˜¼ÍïŽ&s`ºØ6ð(¯á©‘*;´* jȶ¿ìká9ÄËOÜ Ú{ÛkãGU­ºQ×yé»ìË÷,¹~Ïàµó¸þùì-‘ûlij±Ï÷€B_T•ËXß8óʉX£Êõ¦¯`è#,¨{µÚBñp ]M/UBCøêõ§ZQ.TWªÒÆrÔ½gEj4r?—ŠÚÔT}\÷üñ¹¼N­ßÿ²æÐÙÈ릯\ÛW[ñd½¸¬êº– ®?´@‰l‰Í.µkÞ¥el»Î:J¼sòàǬÝEˆ1•ãÿ•o–ذ’Œ•©ª1§ÅÅ´ãúÊq;bY¿:.D” fU×U‡í9øq¡±`T”æeÚ½ÖûäÈYÃ66ÕûXbæóåù3)ÎO$à¦@—zcëBTµ$·‚§’à0WHœÉó 7è/»WÚ^ÂÚGð=]m½÷ÛuÒ|Ÿ/|Y'ÒÔoêWu©ÆÛÐ{˜ÆÏ뿈°Þÿ2f6Æ |šDÒv‹çÄy ˜}²Å´K.`ìPê½·“Òt•òZÓ›4döú\/$;ÿßÃ`œqÍýUŠYÛ­Fb߈™(sË©œíb‘ß<×¼•Ûl]a¼¤MÕô» £dë깩X,¦EOç7;cQ“ò–/OˆA[–¯åÒ`›ee’Z²q;§à>1KRm©Ä•@ß ¯Äø~˜,M¼sbifŸŽ‰ï«í"¡Öï±›— Æ“}q˜.4Ôœ,rªöfdÜ:ŽÜ„û?¢JH3wSjÊ[hxÜMr [s¥.›]Ÿ_ LüFþJ´£ÁÈJŸ)-ÚìæxŸvoí>eØ::Í= Ä×6Y“¬ßnJ²Â<Ö§ÖïB„k‡Yy²—ùþ.·Š@øµ6Ý(‹œE6uš¥Â„ÿÑÄ7€tgÀ?Ft‹'yz9fõyC‰ÏvÛ¢;uV€4’2á)r,çÕp?’]]0ßaÃõþ|-]DÉ,s,@‰Æ#w(€„ÉÒH÷IJö†9¾Ø-VïŸç=dÜ£ŠLùމ9§è€n—@)€äfÂÏÄ"LûO|‰xðòkçû8@ŒT½ 0 —3e莮£E "«xĨc_žž¦»ŽðT Ô#†®J¨•^¦ú–’ÕN]|ÙoÛù_ÕLÿ[óÚÄYiƒPèÅL²®¹q´ïåF‡ïmß4Ø’qu–çæ’Æú;cS…Õ<©›L­³Ñ¡ä€ŸÑ%£C¥´dÔ.´uÏm 8d¿ÝÛŠµ’| ÷kÄc^&€|e”?gÝ%ìÉRAâpbø½ë«5ÀøSs[j¾-„"¥¥Iïáî’'bT>ô€@±øŒd€“••eþÍ0^ŠÂGrî¨õÉßïRê×LØV/#Y³¨x7sW,#y)Y Bçw·æËq °s§07›Zk˜'´*U{·zx|lyø+OÿÆ¿KIrÂCÕ€óZé³ÔÖ|ƒa/!PN0YRáUàsñ{ÂkÑùK"8ìPyº¹-òݵp ‰Ú¼ü’’¤xÈØÛ}yztms¾4ÒZë×9~@Ç ƒs Ÿ^®¿†ÄMî6®o2ÉÛö§¿{@ýdz´VQRóÁõS“¤ÔWvÔÅ„Ã~Á›­Ì„ùãC•TÓ'€˜ÍûõM溗«Ÿä;g]]/-³¤'_EøDÝt®çÚxº• N| ÏF{#,xÂ!u© _AZªi×`K’sÇÃî2e© ÿWÌ÷C´éÚÖѨë‚z«¢ô† ®£Ú¼»ÐJͱÃ_p¶câîc%'Y¤¡„Òvøäß®¿²ã`ˆÄ9’yøÞ]ÜÖÉ+Ï “°øH*H.î÷,±ÐãZËñb“`;µÄ'8¿ë Ä®rB+Wî(+–m¢œÇ;s±‚ˆ2ñ¬ýc@¹!dNC·Y xXJï[㮎¼™÷ËH†+9œïq)}¶4Šžë͵[ÔÉkÅ—öAË0<ìv ·ÿgNÑÍò/Z@?ÒÛé5‰àŽÙÂé;aÈ­ûo¸¼ióü¹XðIÌPFÆÉG`.o Ð`^m+]M§Ë……ï±ë ¢ŸÛ ~½i%‚§4u*”©‰ ï–»DÁ%G¥xl”î|bÃlxäì^ï ÿm8Í]r…üš{u¾}|<‰ñ I0V÷jŠÁËÿf^~êÃXþéÁ/{<´ÃÀ••  [ ¿¹Pà+[ ¾ë2Þ윥FÃ2]_Vn(xBüï.ðmêÂ4Æ›R}Âo|§ 6¸æ©1Ç#G­ùÇ0ò¾.v–Ñ"ø—¦îqß5«}¾iž¾müiFf€VÅÖ¾Ä9ã¸÷:Áùü€x²YLÎ&¡VíÅÓÉtŽJP}„AI.cޤÙÁ!¼QVKt±1ŠÂ5ð2t|˜ *Cš=>ˆÍ)€Ëd·Œ×³äÔ6]ÃíuhrÛ“ÛÕ×Ò›Þ™:Ê–¸sUû )n'ç‹,$çû Ð fÓ~ù¹%uܽÍÝ[öç ÷ŠCÖÑV™a¸HçÞÆI/-’)öS’±æß)¹ŸÐ’:z\'JÎ]Í»AýílJ~‚eÎæÑ2©(ó—Ýí—Ô€‚¡Õ ¿C‰ÿ; AÞÌkÀŠ®¿†ù»Ó„fIËA3ŠÌÁ€~V •£ RUžRÂßüÄT+''Qù`âÂY‡œÚ „zcü¾Rnð† û2ŽÐ™p¾Æ)V…O2-®x%ŸKd¶ì=òWõ· O•­E‚qÄüWe‘HþÏÿªw™ºjá{ຣ7S™fµ÷á²[žÎ7f³F¯ŠÞç*5„p}uKÐ'ÅM …UÛ+}ÞBºê)üû›;—bœêlÎÌYš¤öÒ†o$9…ýo $Tu·Õ•Í÷R [å? ¢CݱÔÐÎ9Ù蹨/´rlCªÆèË.tèžÕ˜Mßu(-bÀ­H:’s€@ K þ|¤999»ÉgÛ"”ª"sM8YðŽUmS¾¬¢ÿVhu{p ÔüÒžê×`¼|Í«¶nñ™nçßòM`¡™NÊBˆJ\¼¦Þx…eŸ}øZ¦¯¼×·4^‹ÑâšüòlÜï}5]ÎP°ú¯ý(Çó;À<(ûjøÍsêwÜÝïŽékÕ.2½~ûŒø^~|hQ;¹Ó|0K6p¬å#™²üq¨(ä­äm¯É}Ô¥! ®î•Q¯.Ï~iwMCbý5›­ÿªå¾DO’¶kÕ£dᢷ“Îò2îÖG ;Íïì&uвã" ® àŒö‘ Š3}òÑ‘~6ÇS“„ÐNkÊ\¶»œFI¥VðÈZW]«/us¸.¢ i*jwWeÒ¨ÛÞ«+Ò(°×è;æl³Àc‹é­Æf¹Ù›™/iC£¹CùvyßXkãþ+ÛÉŠ[ l[ÿYª_]`Ýñ~Gã0›Þ(+;T.­žË†r:ò^ûå"önÏ€,æZZ âšÑáÁð›þ’ÈÏ­þ£î‰Ð¡E¿Í}±‹T„Ÿ[ãÂQ¬ú2ó}+)½pÎÎéÿY9¨r•££÷éηy î>ˆP?º&ч"2Íc[r?B¸ixRwZ‹i4÷—"×ëÔ3:fO—æ´wUͱä‡ã”æâ:þíZ‘È£¹@\U(íÿÿkRòLØŽ¢Ÿþ–¾ÅÍÆjܼVâyË1œCw#«¾¢È®O Ï Mï/5ÃÓ][Y§~#<ߥº>iºrGZë:`F4 ú<¦ÈMÌfJ¶Mš¸ìËšÏá4À)ú¢ÜÓЧ¢·æM ·Ý ¶àK«—ã]—=èt3Õ•\§û+¡ljSYÎ/jŠÌ­åk|8Õ%ô±$0Jÿå²Bï¨/þÿ›°—ŸÛ³¯°ÙÇWÿ‘j¬w'€a"Ã1ldƒï£KÃ.œú‘Ñ€óü×°=ÀvT±¸8Š)€›(Ia}“x,¤U¯‘Ç—¹ö¢2> Ä$ëøùV Ò÷¨¹¾}&cèg@Ä|ù"áç6k“{Ǥ ñ‹0f 8ií–AùÔ‘ˆB€¬™i¾‡ƒÈhEü.P5éžjñ²±Ãüâïâ;$Îô‚]NMSÏt¡Ù¦+‚ˆ€65fènb8e‹aŽ<“p+ã•Cgð«¯Òs[v"Þ¿ÑŽ?Ñr…­;Höý`ƒZjæ”7±‰ßˆ ßú҇ůäf»…5|O¸ øQ}xQ¶Um$µõ!ƒÒ‹'Þ tlòÑ#(Þ¸h#û5+³Ú¥ÕØ¿“ŒÆäç–¡wÍÔÕ•Ùß?è^hÕ1° Ëž²&™ËOêÀí]+k!èü#³ÙòcØOi•2y@ÆûhÒ0$å=àû-ïÌnÏ`âk{úsŠOšw½UKW¡yWup9#y‘fÕWvwáErªfL‚H_W4}èûC빎Có®qÒ†q›#™ðÇt.zá}ï¥?®A4)’‹Ö(íÑmãE!ƒŽ³Hˆ†Ž©&£•ž·Èš†Œì¯½ º*[g¿ð¼ L4³ó»ÇZÏwúw¸éýú/o.+mqx8îô¾sûpÕ°ý ()°ÊÎè-:´îaº+ˆxçÑé¤UxþÖõ"BKž3Ü{Aï­’}¨6!È誈¥ ;d¸€$ H¾°¯XªÒP¿šõÈ•¯$…§vöwñ”µæ7Ó„U)¯ÕõK“YMxþ%ýÿ‹üõ4ÈbÀl~ô_å)Àö¾»‰*´¤†Ž´¤^,‡‡KN„ð‘U3ïÿ[ù<„íý‘A‰c.SFKt«ý Ï¿]f@ †™¢ þSè¢kJ~\êÏåêüƒdÉL5SÚÎsô,0û¯©ÿeúˆy•+“Ñè ÌßÊ¬Ü "óLq")Ñ}ˆ2X¤åL#þn_¥_Äv?Ê%¶Âò]µ’ýb„%”F’2à Ë·; ËÞì^MO<í¡7í™Ôíì–rðc6åM~W:{ø9ªƒs2ƒÓ°^ÛŽ´‹À‡ÙINà0ìZ‰L–S…üî™9™‘‘ÁÃÇD÷‹?Îýg2m‡d@k{Ôžúµ¾‡ÈuÃKé ´3=cÏ—«ÂŸT˸åRÌiĂ̔·þT}foýó{É]0¸ãN©Ž:ª4br¦äÉ?[ñvbØôjþ©ˆ¦žPYa ”ÎFªsÿõPÑŠ¦šŒVÂëiâBkò’ˆÉ°&W´€\2(9õ¿€Ÿ ÀÓiüï{v5KŠZšú¶£ ÿ  óÊkPØ·|W}?øÃYÿJoò “ª¶Òˆÿ[9 bþߢ€Ú2Z’ÖùõOpó›þª Ÿ-€îÃxúW&.‚ŸÛ`StKƦnµœÏS kCÒž:¦¼îQ¼ä奋 MàJ Ü!Æ#¶ÛïÞg()ÓÓ]68ýø,ÀŸÞ–숥º˜R‚w{{6zptŸn ܮШì½ä))§²]öôŒ5—VÖM¶góaž%ÌHä’¨d `~e[°•8¸½š† ÿ´ï=0É·/Ô4Ö+ºF'sÇä1¨Zr_·Ì¿(^—\)fË=å¦C lŸ=ØsP×ÜØ®àïÆ¥§óµ +ª³V2s-x)Vš¼ªã ÖO蕹¹úº'Ðêj¤±Ž0•´ JT£/V%ʇ¯ xyxì¬ æüŒâ„bè}}Èð:ÊÊäIÝš|úˆµåê7k\Îêížr´óiÄ6Žuñ¾¯s"5mn{æsl]"]Ý= %óh9~úF4­L@0wDM§VåÓq|¶ô¯5 ¸šÆd‘ª¶ ‹È¼ÑÙÖ-BŽ]PÕyuÓÂ^-`hµN6‘PãjôHø½íÒ—åwÞ‘¹dWæ…4…A÷Â…NvÏä§|,&'>ŒÛv˜œß 9üýy aÛ²9–ä÷mÚ-?lC…½®àÛ]hèv0Sœn¢]cÆ=¤÷ÃK8O.5#9îö˜êz´àÅ—]Y_ÿä Yi¬«Õ«ée|d6[iƒ¹þáÇÔüÉvs;n»¥‚]-“}¡7ö …?ã8Z)àÏ„õ–0XýŸýÓùeYáT•nµJõ•>{; ì„’7Ô¦m,å}Ñ…YÃ2²qä8Ìp¨"†W9‚“OÚ~Îh¬Sõ‰­-êX 1•K7Á}¹Ùëúò¨ëç·~™Þq³ûò¹]¿¦`ØJ§ûºÍHªøí´ÿn~wéi'ZÄ'ï|¬W†!Ш,³?‰<:è.*‚Ó+‹>œb´½àì.ôXÆŠÑvyÙ]—Ÿ4^TÐÕ(t†&ŒrÚfÐt§TæïÝ¡CÆ”ïøFOrjÄ9››Š¦Š“1Á¬GRÚý`z]„sÿ_’ÒvÃÇwô0oã¼ÆÏpL;qÁÂk„‰´4­W{´±Ló†-½¹ïû9\:o¯‚?éXU¹‚òÍ1éM»c YHžûí6ÐÜåR[Hî’?Û1 ±e}ŸÚßœä!”½:Î!‡Xk膗Œÿ ­ÒPV‰Gˆ5Ó–?*õIuáð»tÁh¿xq¦¹á Ö¦Ý©‚|“Ú ´ fÑ5aª‘½ç¼ðÄ$V‚XßùOªÔ5 ksb>7øoÈÙi-•€xpõeDb#è<\« ìæ†³­¸ƒEZ—xý%Eq>éд¨Ú¹Uµa%ß`ºvŠ M4jT<û—ßÌâ㌄•Ò~"¹‚£Ž×z«ü~gõøòÚ\ѶmÇŸG”÷%ÖÄÚ‰²ÛÐ?ûóÁÕ²vXFIÛIh¶D®½ßd0$ÅE3> ÷û7Ê÷D¢Gz.]NÏŸq”ö±h†÷zÿEà°X/B  ³cP–Tæº*bÊ—“œ—k8sI]ûý>L²_Ú S^rv¨ô‘Ʊ+þc°¯ä¥¥§äžÝ :+ËzùõÀ𺑣|ówï¿A|«ùà͆ÞR÷Mêò|q‰¦…»~%dÓ÷šªÿûa‰%´‹ÓYïelÛÐó¼qÁ6ôÊK´Å-IŸúÓ…%gØÏ©êe0YzëÁ¯\5_Rv.*·²&ü¼¯ çåÁëNÎâKâ7 ƒm@s97ôD¹0ý× %jî‚ µÌb£2{¯cqyÜ"_ö;u¤nâ—-?ž0C°‰ÛfDC|Oj/eâû K Ò½¥“e~+ŠxÿÕ.¥møùœ£l µ]slÙkOöufØ:¦x7ñ'ÃbÑÙ#{Ùªïà}èX~yþ‚*ŽŲXuµPew(*G‹ÏÞÎE’Ùr¤øøÔ±â¹RïaG^–|`瓹_Çê9¥÷&“l/bð}Úâ÷º¶8ç“ÐD‹p};W„Ü#êÕ£6Æýþ„CK¯^åayš–ßÄòÏ×ú7ÔL™=;ÌQ xåWÖ7Ôâ•%nñJ$\ŸK¨¿ok{ë­ЇOů[›å#3Ê>­ –b.®Ï_Š'Ë.Xñ#ÇúžïSbŽV¶Ò'¯&Iõ¦uù½DYè'™wÒ!Eó@CΈ#ª‘fâÉK™Ô±×š³qS¶šŒ^®þš‰;§ÓWj 7™† ¤Soa!õŸŽ‚”y T(Ɔqdù LÝÿÿº*ò>}xF˜†@šÏ,íȾÜݳË(û“œ'¶e-Hq_¢š\C9Þ²©^¦ôÉ™^äûȃûF½øŸ±ë¥6,&•RÝÿÒñL 3È@Æ~SD¤f¾ŽÉÐ]è=)7„ìÜC–[ß³Wë!ó«Õ†[?: “o72ä±ÀÇ d8µ¬Uã-%\íŽj'+?ÃC°˜ëâlîÌ<šjm“žÚJvjX•Èq4SnÌǾøÝYn •ÊÉü”Á[”cU˜þ8—³äj‹oÿ¸{ÏfF›RÓR¶ˆ%êþ*…`œ7Œî/-ë.½åN(z¼žs˜z™¦"Þn9~È<ÿ¼f‚—ð¿aU¶wïþ€ðg À‚®÷O­íFÔs :ÁøLo]m—`¬ÊrwlÉX¬Ð‡Ñ°}'ßOe›À¬/£ìÎúÙá¼T!pÌ´IÁÎ?X^1óñQlÝIQõVæá-Õd:‹æWKn"ÕË9]>œ˜Mk’=zÐ?ab}çÅf_o6Áz‹c0´ý¡é: ŸêyœþØ2ÔâPü%q\ŽU ÜÙÛýÉõäê¸a¯Gr£i<JúÑØÚñ¨û¥ÔåÕ×Zqë 6Ñ…Vaš’dù•w£¿ôáEËñÜ øªÑd§säVîçrk+²Ô©‚ýýžÜ¾ÊÀyÁö‡5O´¬ð ¹d†”Ô³6ïrg>Ò)¥D*jþÔù'ááBôÌT‹%x*öQá!%:Že×Ì’1_”>ù‘Dé~Vœ½ûº¸$F‹£WþEݰÂ3Öj(%{±&å§Yvøuæš¿ëŒ/í6on(2I?Îô¥óŸÇ¹Ê‚ÔD‹Ç€¶¿·üÿu±ê€PR½|å„ NOËno´úðR,q²uª=^š?Q×2Ki,:^u´–pq¹:ŒÈÈ&Õzr&8bÒ`Í$kPg,¹P}ÑqžŒC÷„աζ¿QŠê“¸¢9—”Ü–ÓQpðï ò#;ïtÊ ¯hÏ«hvéø"²jØl@-𘠂@ú@}FYa¶Ð`Óñ-F:„âZˆ~G}ÙñšD´–šÊ¦A×U|­2 {Åj"ÁE•ßZB^wø5E€‰Áˆ‘Šd:­u 2nI¶b­Ÿ·(³wÀ +]¦NÿÞQIKcOa·€÷³‰ËPËE§b2+K™)MOòhÈÔ«ý [‡­TµÒTxøJ¨WcêÑ^_ïP”ì/‚øëA¹¬Íм^9O ¨à/ýì“¡Ð_‹íDmÂSi‚ý`vaÌÇŸ…«ÁõÿĪØÀ:¡ÈñÉ´­OÏ>ó&Ÿ¸,†#†q%ȦGyô–NR»Ô]ð> N°ŠxÀ¡ûúF9ÜúåôtRzïä,5w»!,³LÒØ×Ùü¨éJ®®ðe†i§òz3µ/ |(ÒúßÎ=ÕÄÛ°¾ÙÙÙöW¶ÇŸŸwL¬ºw€<¤“iè Ná)ݼ–™ŽNÿ–ÍWÓÃþõS‚ááf'‡ÙQGe.«À.}ü{CžF,LÌËÜŸ,LÇI=î2î÷’\Äqaxu Ù°…Ì2]î\/hÍ ß ^Xu:W . ¾ÅDXq»i¨‹Òþ}ðû®<&4 …²ëkø<Ÿßiß´àÐÛ [ÈVüöæþöAÜñuçÚèí¾¤ñ+²éb ŠYÔ–¼).|ØËzê¼#‡Pô“ÑšO]{=Í<}Ô7´»²ð|#óQÈ4&…–©1?·ëX0‘ŒÅ‡‰ N¶ŒÚ‹8ÈWZŸs»‡oýáÐf¬´Ý…U7ûƒë¤5³3kË·mCBX%îÌ­{Ïú¶\ÛMËž\»Ûî®”maëø«$¢V5uÇÇ&OÎ6h*øá݈ñï ¿V 5ÿ ;Åt%—w§èøZ˜B üJYZ—o‡ƒQ¶¸î˜ ÏQ*ob#£Êâ±f“^:ên® !Ö­`ÓÅÍ:~«¦œ¤ýŸüŽ2O^•ÓD‚×pÉ’ dmšå++î0£Ø9ºÇUc´ÿ. ¬“{tú¡$Ÿ¡!úâ¸j¥[p¥ÏF-´ÖEkòokæeTUy}}ͧýAHoôÔÊæå4—{ÄOö°ü å&k,€þ®…¤‚MÇý@šª¾A½ùôd!…ì1‚§ƒ¨Ñ3LÒ¿ò¨›¹*(1g#ØØau”Ýðô”ÒÙc õ ÓÍìÄ©˜:ÄŽÓâ§åç7'ŒXP–7D‘ä„3îë¯ÿö`½øb«ÕþÒ‡úG»5Î[D…Àn-XØ2g€Ù¹¸go#’⺥{Æ·/ì7–¢_-œá ”7Õ£®ÖÖÁ£Œ’{¤™ûáHUéö ß‚Qi”wƒj¥f™h£Ò’q&ÿu™f_èc<ÕŽöhÄý°ÒF"öª\½·4mq†ô6w—Š[Y¢‹r÷6!¡Hû^2é.“kßJú6&Fï\.uÊy²ëßdxuE¬÷yý}i;ÉÊŠ.æä\*ÑÄŠ°Yç¥éŠÕéÿÈÛ/q8±ZAYS“noñoNÁší;ÞP)Ÿ Œìy Ñš€1E–Å:C¨½óNÖ±d²Î&?—œ¶ybþŃ—qÊ£+V %IU¥U^ yÔá „ø÷øI(¥ô2Um-]ûgT¼—cüÜ|¬–ÿmÿ*0:h¥cÀÊÕÌt°; Kf=¼Ç“O·–æÎSü±ÑHÓÍX˜#ô—¬Z’s%u £Yå©IFC¢¹Y|+AXßMËfò?P/¿ø»'Âà^¶½7SÂÚ˜µã5…RÄÞ†G–ð¬uýZ +bàÝ-5À±VKpë I†-§8üã“ï!-ÕÇjsâ,­"Þvnº w’ÅVŠ„ýGæQ«++™–®BÙq±ý+ëH~}×qý™$×Ó¾uþr¬A@ãÞBJßƩݬ’%ÁÆuîÅUáG0‰èUo]\, \~PhZ9i¿öÛúk4VÝÝ‹éĬ>„'ƒQ#{Û‡Û]ð²ù¦®cYÖk­•FX¾Ò»[ߨ𖔎5e-†ƒlàgÝ5ÒLWÌ–LÁe@ž±\<ìxU+bïp|ãÐ ê?nÈ‘ÊÉûa ÊèšÝSØL¬s­ôÁ{6£l<[2*ÿZtþ¶ô´‰°[Ãâz€T5î{ô€œy}¼^žó³ ËÅQ/ü$;³„ž6ëõÐÃl/õ‘NŒ÷ÖÑóPÀË… ,$Š6§‹rŠdѰD[v"æYBÛì·/û¹ïþ»•PÏÛì ´,®Š«šSkvS_Úræ¢cÐ’j*Ÿ(f+o©Ó›ÆÍ°¸_W´]±¶ë¼á_Ú!;¸üdMkËeAØÜ*éÙ_8s+ÿŠM¡ÜÊu'v[[ÌH² 5Åj§¹]Ô$bÄ›#`ìダ÷ÈåtO]ø´L@¾J9ðÉ¢ •¬¿t%ÝP†²öO~«ª€fÁUûè.îpk÷@ è¾>”6Ã[Í›úŽNŽ™9¾¾W€â”©#²¶FûÏ\ð¬ÿ¿ $mÔ«$¼{ðÿQëG?m~äG=PlFbî ?e$k¶þµ|¨uT u… }‰t\=Šæ‰³@%*u™&“<ê¢  ÛeäÔ—,´Hmë“ë¾Öãß+¨Ì€a¶~›vh«70hÀÚ‚mpñ{2§uªø”ü¶§D*±ú±µòÓœ… Xx~ŸœStNU’ aÇá«Ð8£JuX>‹¿ÖVuk XªcùnZ„?ý¹Ó¤£422/ò“Í[yT*8Y. _úî Éq§h£ÖRd#.M’“Œ„jê”áUfvšlÔùVUŽVr¾çܳjR­Y™š¤y¤i{s»¸O4!ØøÔ¸’’øQ-kOÈ¡ˆ·8loò©^î[¾£V¨ú=³Tl´3®†–uqí–»ÛjH.ÊòehfKÀJ(yY§eO£Üi1‡œ |¸œ§6½œ†î\É:U˜>×!Àñ1a<vÌ¹Îø“…'ŒK_ŸÖî—çRBÄÐæ÷hOI. a DÁx~çv'Ùô8¾ÿw>Šy»á+Ÿ¯1)žýÜõ¡ö÷¢gÊ=L)b#ÓvqB40]7ý€‰*ÿmu~AlÛoG›ÆÙÜüV_¦)ÒwXN°pT†–ΊzûïÞÈL’·k’CÞAýÄ1ÚÔ÷uÒÿõ v™Hª…ÝM ¥ræ:輪ŽBùïp˯”ß1‘("ÂÂÿÉ. r"6™ñùÝìi#_ò‡wÐÝÀ3ƒS0Põï¢Øï«KÿÛh£ÄÃþí"V þ'3ù׆ÿ]Ö, ü7U\ÆX%ñs†ŠkŽêçûÖWÿÝÉyÿSÄ›}sOVlÿ í{Ü¿«4x:ÑÞi(tÙä r¬q•õƒÿö¥ý-Iq–$·W×ß-ðf¤õIÐbò´¿N3ž ¢ ³3{­½õ:\~ûë& ض‹´zYêãtxþDø!Œ ûiÛ¹×ý°›¶ýoSÚúáàß)ö7Õ bò"ý²z¨bÞ%l/xŒÑÇj}m‰Bß)åFôÉ…ó=Îô„õÜË%:á²àƒ~sž¸ßN´7ã¿Ã_­6D–LÉ™×úYçÜ"]ÂÑp con?¸RššÁU©ö“<šüeèp2·œÍŒ»Îœ˜Nu¾0ù¸r¾o„¸g²¤ –TëO»E {å¦VþinLR r•¸mè“'C^S¤û©´^ÅÜH¦éøøØnÅÒV”SYY¹þµ‰Ûj»Q³%lÇ,À Jpu6hZï ¯$åqKG¬¾Ë_.ÃDÌºÐæšHpNZ_ÜX'QÀ¹¢‚7æ'_OÌš€Ê4"¬ï¹Èˆss±D^€_$}Úžs'ß;’üÖïG lÈ!^pœ´Nù¦Z’ù9yÍ»€í;£8˜£‚!7þ/ù`Á·QãŽ4 é½­0NêeGÿß“ÂdqþÏqq³û?sJÜýýE¬bãbï}ÚÂ&…ºù„aʹEc9|Êž?M“Q‡°½Â ô‹çMßÔX†X›ëâ1éZ´4ˆÕ¬F²WšÉ{q&ª| `{ÈÍÂâ@f¥åŸ©›|Ÿûru‡†W‰??éʵ>mý)ÓÝÔ ¿Š’6»yêññ<Tà9MÔ=Ö÷¸öFIÕ:<9—ïx´äÚäâšß¶äÝ#Â<`ÔrÒ%ÅafüR“ñxw~°'êoîê&ÚÁñ'Âæéð·hs»ÈÓVăXq)æ OJœ¤f¡’dð˜­Vëåïí;D@wäW Ñ«ÐÔ’¥! èÃá!ÈÅëêÜá&œyoiiÈðä7d?£Ñ%£,•1ãäýœðæ#w¹"4bòåòn»`jWß?)E£ažaþ ×*Y{ÃÍû˜ÙÁögXx8S.Z>ÎÛ°¦¤°ˆ’pÒ›Láã|5ȯ-s‹Ü;–¬‡ÖYq¸67…ç _¬.7ÞÖºz>9W.{ ¦ñFÍè‡$Ý®R›±ƒ\÷LÑä›dÓ~à5·‡1‘ÃçO †XuÊ×Çbj µ”k~L¨aÐð¦ö¦^¦Ž:X›k½Íݸ<[ÒuÀÁñÊ ·ºð¼½Sô^*ûêBùÝ92ë¤Þç«ÈGŽ ´|=º}õ&/]NtòËR 8i—aö{Š(Š[‹â§¥¦>™Þ•4h¢] ‚Âa—Qþè¦íq`}t´@zS³§DqžCvÌüB˜éz“kæþG¯òÇ#_ǀ÷‹lA“7¯ i{„\8NIåŒ~•2Z4r–øµ €|€ê=‘ÆÏr?<—¿›þœ8 ‚U 9ÞÃab ‘I`8¤$rmè8îåúÎÒuÕ“sóž"íaöË­£(y{€²¤Ä9+÷åƒÚ²™ÍÜtr+d'qOÂ?çtà¯ò‹Ï9j9@ áuÆÅGæ¢mÝ&¿W_‹ô=j~¨{›Å yä¾üTó¸çKPãm•zòˆ™ ë,Ö9Å×€ÅHáS‹íŠ*Ko ¼\Fäk.øõÆ¢­GÒ˜ìÌÁv¾¿MºÙ,ã<ÝV2BЈlUbúøŒ‹r]E“h[ó€ÇÌ`a=ZülÖ©U…ñ~dD~—?\EcYdÁÌFiHɦ^¦Ö–$šb~û<âÈqI¸ÇÒÑ×µJ¥LGeäíæóYi¢uÒaz+«´¾#´'ød©gN|D #I-OÇ>CT(Õù×™¦¬“I/ÖŒêär›nkz\;æ)jf¹ÍŒN|zÿ+ˆA Öaèór²|ÕÀ® eŒEè=—C}÷ë+‹8€ŸÉÖãôºš˜Æ.ß“dEùü¢e`úÅ…Z¤‹6‚ÿè.}P]9¢UÉUüØ%mˆÝ‹å­=¹5ÉÇ”ûš<ýc¦Ómè0ëwÍÇê¶Ÿ‹ÝÀäl=Aq‹3#éÛBo3휶´öî—í_¾‰ŽzQÆbæÙ•XÊ®1‡ÂZŸü» ›=òŸa騱D-¨gÑïn“Ͼ{ß·m2H’9ÿúx+*[a%ncò7Žg'q:]Ô¯êCDÕŠ½|ýqÎH¼nh:wF^SÜ· ,èažб­Õíž¼^'rLù‹´¶Ó4ØT@z꽉xŽò­²d¾gNEó6Æ1ëÔCÙz¾áŠ1…pœ&$7}—tùàlxÿ3yËÛÈO^¸-¦ó£Tj>]À½QÐÉ[.ÀPKÛì°×¹'åh)yó—pÂ[#9ο@$n³ËyWR-Ÿ8Ñ dODr_‹hb €Øü%.´õ¬Ï°|Þ‘‡6ó!¶?¼tª«ŒyFøX9MhôÔö01ÆÁ„Çô©¶ì̲—;™äè Þ„¼PLoùUF@R²Ý¦á^žŒ×íØfÕ,öÝNbÝ’‹²„-=£Â§S®^,ÚªW#ü(VþþO˜c^):Æ|ëÌÄÌ“"IÇEìÑU5æ\Í@C8§!2‰ñ™<"źã®ë| ©–®U>N~wB‡Äaå3ìjÀÁ —‡ßñ”Jã’^¾ì›.Ò™¤+JœèÊ9ÒÅ-J{;¤ç !¯‚>]òXWDI”é`iñèwwJ›Hlkþ Rj¡¿©[ÍId›¸qj}û óc…#£WÏÝx½š¼fuS½ÕJTáÜ?v7ˆGÂbÈÃye %âÊÙ”\ê÷O]åó&åñ\ÌçÉV=²uñn¢Ë;ýÊ ‰Ú)ö:OÓZ¬m%I)xý®â¹‡Û#Ò´ DÖ(©&e˜ÓíѨnf:(À8Cú[ªÇòQÕ.íç×âØ_Dì.Ó=ÓyüUÞ p½…ÊS4Ò®èÇ,˪1ÚKˆÖ4o•ˆ¿óÓš uUf£dVš^~§ùQ†ã·sÛ¼cW¬Wgx‹Œp:y ÀpÈŠ Xt àok_ºx]dþ€#3:+9“÷ó¢Œõm rþ$ˆ8Ö5ç:$h¦ôÍç˜~h‰¶¯Rm½ò$ì·I„H'é†ÛÙÕ–(ÌG¾ìI¦_N©wü»‚×QIôÒÇ{R_¹ÄZK)‚ã¼>#2±žT#§É_Ÿ¹¤ÍKc5‰ñ$àÃA¤ÜÌ“O~â¾Üpò¡[+úöûå7S¹cr나Ãh \RƒÞ¨§F³IÖèÏJâ¹å®¹¿çJH½M’¤%Ä%¤¼µ_šÁŽÛwCüÑÛ«lGSqßÇ ÝºK_¶¼5 ]e PôÞo‹:4=0‹óNˆ£ž¸øù§V@ò½‹1hˆYI¾„ÿfð¤9úíËø;cÉÐ̤fúò·¦i1p¤n©úLäòJ®‚‡u›‡ÄúNe‰,ØÛ¯¼ä$*—zé°nÑŸÖ{Šåï¦ÐS5ýW™Ÿ-ûäôбfÖåóJ¿xeΟý=yEr†õá+.¯Ý [‘HRúr´/8þV”Û? &)2£ÓváqàHapHŒ’TÄ!N¹dI«uÙS­Üqò†üîÞOO ßüªo +,©\}tµÌEë X˜å ó¬ÏMoI6"ü2so“í³N“RóÕÑü“?ŠöLæœØzîÂWVÇÙ—¿ôzLÜÛYy«q›T·-²úÏÓÿY¦&šÏûïžNÎ`Ú5X¶ùËìcSįßÃ-çÞj@¾jh­_"žüT™Le3µl…Ô#ˆAÔkýP<—”n pjâ7‹P¯oH; ¾ÙĦ¾Rìø9õQñƒY.”ÿWÂÏÆÛüV=zŽI¹n^çËÓÎßbÉã*’v_†/ã Šb}¡óú^\Éíxú¼®ØaLJªY 0Ø3ê/ï(Ìë½ÜÔÞWÛ¡‰àw¼6L”£ìÈžéb¨Fl “§~ˆü äÓkÿCx1’µ"S(z¸“º u•„‹;v+í^!qEÁŒ½ãzÝÄsE5¾l°m°1D~G‘ã$È#tœ`9ô¬`d:ÖíÙÁÖÇêCúÄϹ•ÓûJ)åîgð¯YÍ]ä[Ûç‡=NQ{²I þ]QûSj„Ïð¢pÛùg$Êýš9¾Íß«$n ‡½ÄF;×öÃ~*õ2«9bÅñ_óçÈfÈ$¬Ú™ï\>M.ªdœLQnë¾CWoÊ?nª^ð¾ÜÙ³Èè3î öJ/®4ß>¨ æwäqh,©¾“RU$*ßZž’y2긨/r¶7gŸ5ÂT¶êèPØóÂeTе¿<¥§G>•„Tãþ9wZÓ¿ÝKÝþŽc²ú+J°“XMþŸ³$û“™9ç+mW&cÔXRváOz÷Q4*4‡¶vW¹Þ9£ CùߨªØfl”]…0fãÇM‚Ž¥ÝêEtol¹fEýí£sÓM8éûpüòw©!÷CŠ LÖ~·ç ¯ÖyÖܰêŠE‰j:¢XõP&®û,ÉvÅN;éJÇ€÷ ¡¨›ŽÀʲãï´: à‡|¥ðý€Dé£Tñæà‡@P‚Õ§Š%mê»bJx§\Rh+lÈmÌ'8$‹•:ã°åX^¸ô“o¶S¬ü¨½‰u›f\ìÛÿ0§¦¯uÕ˜»e¹‚ßÖ ]ûu-²yˆõáûc²OÖÑqØ ×N #”5h˜|Ð8ÌqÓÁ:.Ëáÿ>×FüÇŒ¦gãf§™à#ïªê±ÂÕýÉîj¦ë³jp‡½A øèÃ>òòx¯òÓmÌêÌdõ•dê±áýZ>PðÜ×6qù7‘˜˜çÃø<øå î$ÙJ6TÿúBi¼ÝTÝàM‚<ý-¦û˜ãóÿµé¿HÂ"ñ£Ò+§ÉÚçhø°¼’üolÎÃÒ/˜rp¡æÑMÝÅ}Qv'yZrô¼úäzxkèAÞÌëôL2€?-ëY |Ü}Mª¼õþù5ÀÏãp.gk©ÊvO 3Ü»_aw#cµW>é?WÅ9¶ÏÛ<”/UÁÖ:F›¶ÂÞ½ôLÏÊà>¡örF²Q ìþ¨Â3À~ŒàÅ÷ð- Š%>ߥiû#£33Ò&¥ µáäØ¹Òµ¾ðy'8Ç|CB6F;Üâû“uÞöÁÎ÷ã}Ãr6¢¡9·«2# FTµÙ•§®Zƈ¿Úg•¾œíðN.DiøþÃ4oãk@Ún œZ\yóÆÞGGšgùÚ 8ÆK¬‘ßþ< µ4®Å̶9m+Ì­ÐWZt‚ EaH•qí=Ñ­_ôŸðYÁý¢z“AÞ[e†Ä½1©¶›i¬Ž vxˆPRVVœŽ>þ+ã!DÎZ?ËG H4Œ¾eµ^ßaÐiÄ9@¨ÌçP= 0vL]¹QX4aw _R“øÚx¼8#ÆdµE|¹ bÄç‚gçCó£'x÷ËåÔËÞ°ƒøáQPíD•â×wŸN[ÐSÛÍëVöäU/»lØëô}rÍ ÏÐçw2Dñrg+Ó,/..ÎV’y^Þwûj¤âA3È!¨Ø £GþŒíõË~ÉwOâ;Ùü:"àðr)ÖÃiº¶ãW³Ã32 Yëñ°ë­™üâM…ë]íy$è{¬{Ë<Å—o(=lýØA3 ¨kb ﻚ‰è²éçöætÛse¯¹óizÎä×,ÔÊTuÁ“-ê³õõœé!:•šéß ÿšå{ ¦Ê ôüŽÚf‹HÚáóÛ¦Ÿ0ÎÙÏQK_/‰upËèZC@s_¤‚g$ÄÄÛ˜îÇèúîJK³v%¨Âœªô2ÏÁjTö¾ýñxï€×þ ä‘Bz?$W·¹ªÂ„4{gï¦jÞæ–ц`tê—¨ú‚M›'üÍÜ4Jh* WFÅHæ5•9_ë6~…Ð>¬ba¡óœúg4Õ¬¯)1b~ˆlqí+ˆZ^]ÓRð=€hÅnë’º¼}sƒ¤s«µv¢ypÜEöý& VÉ3„P§4ûyh[t³½ý7yÜõÞž¿Ì#Å¢ÓÆûúÎn¦Âñ¹b/ãËÎYJÅj•šqqq*‰pƒ,-- H)(‚•ËŒ-] ¨(t»šikILäo ºCCCΈ¨DoŸÎ<£«ü=Ó”±û@øDE²ý„S÷åX€AÄ¿$ÐV ²y pA-ÙÛ¾£ëÊÓ¯×îüæW(§ØŠÐÏ?,½KóŽ2‘·Zo7 ^®2asOc¢sÎ/ûL&p'5fû›Z6kœÎ'¯õ‘a9¾g•.àMzN”2•/N{:{{òß ‹ŠWpD¾*î(ËX”!£Í†>´B€æ*ÿc®ÌÖw@.›©©ì Wèvȃ”°Â5óÆŸP'ÿã¼K¥£üÞòGÊ,½‡ƒ:,JØÎpù –¢ibŸ¨ »EcG™ ÎHÒ°D±~äøÐžBW¼/Z£4o焰ãs¿Y¾ÅêC°Â3¨Ç«D¼rØl£þ û}ƒßîÛ·Qgþ¯ç‡c³õ7ãñ¼eæaãÒ"›{.bÀÞ½ö³›Ã¼°ç* ùKKûÇî L ÀÄDJÉÍ: ”mšz|›kzŽÃ´R™ãq:…ƒPÆÈLÑØñÏ›ð$?*ýÂ8…lÐë~ÿ¥Öaãô  Ï¢wELI»ñ {©ëd-¹ÌÍ»™2³Hœ+8ƒ@D±*{3ýÜþig7êï‡Î—‹{% %²XÔd¤2Í­æ(a` ¶Ø'óÀ<°Æé>³Pj®®Lÿ{3wŸy‹oº£6žïõY¢ó‹—‘oÞ šl{º2³•ß´¯µY,“jÈÞfŸ&QüÔ“kS£Ó‚½<•œtœ<‹(\ æXOXU¥&îRƲôu{†ÛP~‰æµ&¢O V±§ äïå?–Ä&hr_ûG^-yP {Ó`bŽÑ|lûÂ&ôYÀÎ1Çß’°ð‹ú£º T8­>r%ºÅÿÓ0 ¤?ò½m.!ƒFþÞŸ]ׂÀkh? q«aýÌðN<+Ë饵.øów~ç4аHT¬ø”1û“k…”â }+)Ê_6çaÇ#hÊ”]ˆÐ…]mÁ0†Ó SM}ÂsfD¤i´ mìöáq—ÒóHQÒ8‚UžØ#ëk¿_ÔRË›æ-B1Š¡qüáŠuS•Ÿ×yÇBxVÝ›Ã饧„ý_ÌÉV-4þõb@yÀwké Ψ d§@¡Úx ¸ž$h·/XÙ²ŠÇçú`Žò-Z×’¸!ª"ÿXJöëX†ÅM¾â´A}«£Š~£š›Š]£”Êša\› . çx˯vèƒét‰Lcëî]´Ê:9¬å±“ãé©_ºô‘úG¶¶^€SOyw0„JÒ]††ó:ª‰òôéýÎu»ìÁÿï,€ÂHRYʽ‡þÈæA ÂóÓo‘ûåk#Ÿ øáx*9пOï#ÍÉ› óé·´9&±Å$>}°Á©ª†KSù;®Óøw×{Œ¦jmÔrØþÌRs&p“—½A@ö®¸ª00Ùy‡rBB!ú @J*i̧kª\Åg÷~mþ¾˜ë}L¿?· Á™® ZŠ„{·’¤ÄßÑîcº.yºÉÞ&HSÀÈj4Úq ¼è*KåHЇF"l˳¥*¼Î´- ]MQ°Œ`Uó‹ÿ *ÖýC@È[Šä5É0¨U &ê —-‘fÉ-ú|Aßò>˹°.Aç,ìí@ï”O„íÈM u½Ïî)À1ltëx\cf[Þ%¼kbœì^68°òw‹‘MW¤îņù‘QlUÁ€X%˳G6Ód¢7Ú<—ÓÝm;#ŠÎ§Ø0ÿk«ôÙ±Ô¯“ŸÞ.6hB7|zp53TQÕ*uñc ØIU´Ái½«ó êÿçníX¿v;™Ö€õú8âCªf–Ôã¥Àó‘+íü+«_—c²“½I/‚(QL·Š Îví›óµkõO`H“±¨€¹ä¨™Nޱ¬ªWáÓiêË Ä49vXƒ5W?qiÞ›&Ådƒ°bÁIˆ ÝÂøZáÍnW'éˈLU;†u@Z$áê ÌúùAA`¯‚'“»<©e}˜È4»fŒŸëîã.X‘÷Õ¥¯ËAî«Þ2&k´ˆ?n&~´˜K-ÖyfŸå~?A£jòp’½ÆízÂfFU¨I§@­®¦‡èøy2xm-çâžÜ¡‚\F+o'uoñÝ NŒŒÎ7ij<«µ&ŒÝˆ„,qSD)ñ´°y5FJ˪£îÀÓ@óUPüøçsâ5dØf"—ŽPA‚N³¢ðƒôO~”Àà}Ùé~‰އà6÷eûöûEguý¥Oƒ–ä¿­.qøˆYj`ÓäS³s¸(îÈ0ˆûLàü2w¯2“%χ®ñ†¿žGê\1ÆôYû¦¡$¿äÈ=ÏÍÝqkJ”šŠ,¢¥ÇþêÀ£Æ\ùIöMuñ•þÎÕª¿«Ï¦4{¥©€¹%¤^8E_ð5—(•jRr¡rJÓDÆ>&³'t9¬“ðêÃ% „oíéМ‡žýÓ“ú þ↡C'˜֒šBßDèÏ‘Œ²îw·^íøEnZnVMAhRþ~‹ët<ö×0‰%Ú‡F½ê»a6QÔ\(A&jÛUýv/¶ð¡Å·v‚›|䤂Óûæ×î-Âra9o2„X1%N;2Ón³žÞá8$<çh‰´D²(u{;…ì)#Ðtt°jT-6îÒ¦˜Ò¯Á–âY\ÆÌ#®Us2›FŽ#—â¶ŒZðø |xS…p¥Ûä–§ŽxÔçïËF"Í%#)Þ¯GÍèLa5§Z þ"¸\|¶Ó]°´¯ÎEÞ0òXÒ’;NÍ>úæiîc. |"1–å#4®Š-‡o¾UZßîÊÛœàò—²o‰Âòà>ß•ÁZ:'“:²÷¥Oþ? c Õ FV¡ÂªFmM<êÎ{±Kõ¸sS9³—³-ihæ˜ Ýbå˜Ã¤×O‚žäi°­™ê4ûËû‰Ãá¿ÍÛÎšâø€’#_»ôIÖ·é*JN¹~7‰:«ë‹—1ŠzUæ Aÿ=®R=' 1Æ…!ž»½–/ø^b¡Ó»Å‹&ÂoVìa‡$ ׬…°ÖCÕ/°•6± ßmõ8Žv¥CM+ 45».„N¸,ÆœÜò˜ªÄ„þBŽe$²:Œâò‚6øTж›“f‹v–CòÖK¿®$X’ðIÔke¯kà~H¦ªêñCùd9LŒŽ -»Ij티לƒëö=Ì·ö‘&q0ó㪷×`ÛŽÓHÐõtãf¬ú0$ç¿€¼{3 N7‘^ž\°e¹(Ks•Òä–­ l•@Ëk×çÕ½f9²=y5Â\ªÚ–ºÿi#rÏ秉ó,¦ÿÑ-ØÈàÆ zJlTIêŠÛ'ˆ˜µ´¦È5ÉÔõˆr®È˜_N³eÜ)XÞb)«ì¸¢LkÈò-ngÝN0ê…™V¼ŽÚ]™`HÀ9l‰'Ü}þ5û¼Õ×ãNÎ1Z{’ó·ój”ʽüìÑËdT¯©·g™\"ö*±t=Ñhè÷Äcžtÿ/¤eW¼ÜÞÉÑjŒŽPrŒEªÁý sÍ5pˆøÁyv +êìÝ | —ÞÙ¯‘Ãg­96iµ¥Ü‰ ·vÞ#½×VjPMR°C\%˜4–òŽ~Ã,&á¦jyºòa{»‚¡!e˜R܉Ås8& ýùoéÐk³@"J‚Þ¾9Þ7'ÇχˆÝ##[zó#³‰-¯ZNR¾É‘ou3dZ63O~§2òSó«i|†”:?ŹúsÄzŠw!}Ð)<«;h„!¹p¬Þ:{'56¯ /ù|áøÐÌÚ”/{†?)q¿â¾\«¾jöØxœ9=FS'¹jz[×Ç~dðª-äkùbÖ˶¡'ûÅÃ^fI\'ÿ›÷½WÓ¡¨>©´K®t•¼1ìøÁáµ,fä]Qs«‚€Í LH´O‚sþW¦(ê±¢dÏã Àö ºK[–y¥b«|WE`ÙDâ0çuù¯ÕQöÙ‹Áꬉ«aÁKËúȪO·7y0oŸØ·™—»iuüðûNÁ—­áœÉc:‹ž7TKáïlùïÊ}î;PaŽ™+òÈMcÃ|€ÖpKÚÃTWÝ.éQZ å¡Otvد¨·3ž^_çœ ×û‰8gÔ3ñÝ©Ô1ÿÃ,£Id`BT2:\ª¥ã5À@ ~ýƒÝœôÆJŒg›‡•·Iû¼:ïÃlQ[ΰJý{î©Ä7 2XÕÒ×þ@#ýœ/õö3­ß–³PÙØÃ> iQÞ:O~@F¥vGf'üœÇjW®IHy-ƒ§ßK\ˆÉþmÑj¦ OÂó]mKalVù:AëzÛZaÓ‹C×YJÜß*>, âG*ã]ÂXÚ¢•×/‚ai{ˆá^Ê%-k½WHÝN½,bÒ'Bÿ_»qÀS~÷ê¥|t5§'ÍÔ.â»1/Y5X ßÒm;³f\Ã>°‡Ç÷8…:‘¿ ß?aÏD}øcU÷‘E •ÿá>AÝ^âZóþÌÒ™[ƒ(·¥¢@1£ä$ÝNÒ«š]¤`é€9ʹ²“X0þxÑùueà}.‘êK²š0£²ž-ò¥@«%µ¹‚×Ý¡ÏaчÔ(„©ß\1g$´¤M™/wÈƒÈ 6<¥óß µGfc.NHÁ‘qŸQˆðZ_ŽC:kÚ œ}Š'WÛß±ƒ êKFõ"ùÞ¨}ÌÅJôROŒ‰cÌ"?§ój©®Ž˜6ÞH|³¤LÇfó8²ÔOYßanغMÐàêçJTMmÝŠXV@s(|Rê¨`oôl›X© „¦D¯(%tUýíÕM‰‚u%QâMœc]7yg쪊Nç§)+^´ž™¯Ð[óßT"a6”—:Œ…2PfR(’Ci‡3SìMôÕ̪'»±N›ÆE÷úz!†2`;Ò¬‡CPËÇv³$V6(åÀ4­¶¦ I\}…)çö˜YÆkéòÊî{Ô¢ÝézŠøÆ8þ¥œ{ LNlHã^-»Vz,s|‰+-C-(õ@•ÕN¥ýG%Òù¬Üò6<;¿²¯ÆKÿÍvpë¸Ô(˜kû܈ýµ¾¸œ$7BÐ'rªà!vì Zñ$Ç!¡xg÷æWiÚYa–¯Ä”Ȥ[Ü«ÇV ¬Œƒ-gž]ÛÉ¥ãÑãf!ç±nF=×JW>œ£Ö¯-Ñõ6KÚÅŸVfTÁKÔÿl]ú9õÆÇ”oY1‡YŒÝö猥Ò!"ÎúDH¿›ºÀ¢Ê˜Ÿã%i 6;j×V´,äš2)Ü¢£_ªÈ<«—1¡Ûpx·Z4ÈãÇèãc.j|§q±éþWG¿$1ŸÆ–´{Y†.¢«]›ï¢dKaPÏÖÿÕÓÑ{þ·ÍÛ@Èý#‹ê?UÑÓ¢t8ä˜#ð*ÐØn&‡õóq9ü—qÓqIb„øáó‘ô†I=°D­ÛÆeúaV•s&“?ÐÞ£‚0ŽÅ$’ý“wdÒ´C2,!ušGÎXì<ؾ±^Ñ_¢¯·)ãö]‘¼øãDf?’+f§Û6'-kÔÓ²ˆÌ»o=`Oõò 3Ó`êŠ=~©e’ÅÝwcãI#Æ*‘ì­Óˆ7hv?JÔ¨ ÄÆ“Í%döœ=óiÙGPù~wWÄòe§®TZ|ùytƒÛ x×ãÌkåm[Ô‰A§_¿ª3Ti¿ê«¥dY€ÔzÓPƒÃ‰"\â?ªx¿Ÿˆm/ªzøÛ·õŒd*NnFþyC‹çû­eðdÒ_¿Ú®I¨òÎþé·ÆokŸ¦%òwœR½V¼Âø»ÄÍIØÏ,œD½``àx|îóıŽý¾æÐ:HP3šG®±q°<ó×BÙ^Ï ‚ß›$D£7Ð#þ®<€ó'Ž\"Dr§D_ƒö'{=;ü+Ó6ˆGŸr¥¶xXÕ@º –w²äÄ} ”áFƒ|·Tvð%[p~®F¶Hz­kË» |[ß¡QuG¤;o&@Š4¶²ÇÂ1YûN€,mõÕ©TGÝÒÇ©¸­kuº‡R#JY³ùd¥ýá8.Á«DÚÚ\;Y†vÖû(·º¼ÇD¦0ta-ì…Mfg×yîEo9õ¤Ô&G¢–}1Z‡a­RüǰÜÍgŠÙ :§ÚãXü¤¬õ Ž?gÓ§N§ûl²÷Y|DŒg²o˜±‚*`1«µÜîãLã~Eºp´˜Ø]0ÊæOÍ{y©Ê¹ d3Ò¶â;“zd·z°.“K‡u€ÖW‚«  C«ƒoŠÜÇÚ«lo2Û¡Cn|oR‑ÇÍÂ4¼÷Ö–¤ý \´,æØB¶‘ÀoDT ý~>¿Èå–JÀåóØF8@ä8ª&Ö7â?û6¬®…‰#¿6°V/7ù:ËQ f÷?Z-Ĩ+¢öf ¶£ßEž˜¿[Ô";©ìbRøQÛtrQnš¾šçeÓp=ÿÅv!¡yž†‰’s¬Í|-/<¦Â©dy»¥7¨í³m!›ûá¯"&=ƒøŸK¿_ŠïoW-s*ìŽ{Ú&Ÿ&…$0ÍÞ2ÅëlU£äV¹—ðeÑWë&™€8µh®6†bå~N9ñµ'¡šÈ Ó6)ÔO.• kÅä&ßUº}R Bjyv.rx(Ö"ò£üsº ÃÁº¿ý•J3õÚ\eÉÌ»ÝÒEø^ ?²P\@:¥<¡’^QB²Ñµ3ó“µâ}ÝDDëX´qòôó²\-aIÕ1ûVòxCÎ'SÓÛýó®|¤ÿó鈅T%Gi¡Rë$LdÈíž0¨¬‚kHæ®uN÷“ìk±Ÿ¶â§eÖéÞ•¬mÖvÆÜŒ¹s¡¨´2_è}dR§î…ŽÝÖÊÔÜDÈ_nž84¶?î»ë V÷òúè‘2=s¹n‘añZÀ!Ç¢šß!náƒÑï¬÷WwbFtb‰´Iäê‚ÙAjf\´W_6Ýzûq…6¸r.Û§Þ.1Ù!¶¬.¦¿ïç§-»ñ>)Ÿ¯ÃÜ0M³©|YLKo?—_mîL2Nö;“>5­X; õðç÷ùûfÑ’{ÚdõmxÎ5ûº ²µ°~ ÉÆ»°ø’óqãBïcàå¡k&®1¡€°ÖoÖÒÓúoòËÛ%O‰8LÉßTkfp9th–w<)ÂÝGk0‘=±íheçžOm…WÓØsI§sUšü}Úˆ_¯‰ø]¢”¦ÿM}§ˆ§µœÚÌi—²ì;‡¯ø³p1~¨ôc©sehî¢NÒ!mè‰5ëÈ,ZÖÊÞ휨ÒY›hŠ…ÉÙèÞÅöØ•êýÄѵõÒ1̾e:‹ïÝq»4¤„ÜSßú3ñ‚tªàp™.ò¸HL*ƒç‚ Ð90pU @6œøRú—öbçö%¢J_w6(Ë3ßù2K¢éb¹ ºÇfn '0ê3ˆ(dÊéð'ÆÇhÈÚ_•¤ÿ.•ÛŽ¶9<ý.TBNVTõú޽qlÈ+øðpRß3¹Z¢É€|ÝM”TTª*—1÷íÀµ£©I°A—5äõý×¼®Ñ…â_'>Ò±¿vpýÿ!D3NƱ"'Nú!† ÷Z,[2°oçM‚£\4TRýÁôÇŸðSþhæUÈG–xbı´ïH¬aR²éåy¸ž-³ü·dl[¸.ICÁÆ™^·W¹( *Ϲ87=ƒË ä˜Ñ?vŒ« y‹·IЬdm—”~g_D”ξ §Õ×ÿ¼]Æ!ïõ¹§ÊãÀöàÍG@Ræ6Wo‰lÆëp¡Àï•##h?[WÑ ;Nä»uãèxéœiÍv«%P©ÌK”0­&._e~OÖ¾ÕçÊÐóULSHúÊQ±bX½ò¬u(úýçÕ’+êêg› ânúÖ­ÚMݧÉÖ¹çP/RžV_Õ‡û<ÇGÕ§ë샱ÔËiC‘¯ô¶Ï¨=ß òÈ+bN"I¯¹˜’g^fe*Ðâ=-)`ž§UÌ o Ú¤ ’#(8²,™CßÓõJÑUŒ]aëÃC¶q’»áI-‚BË$ øû_ž*¤æÄRPà–·¥|£e5¸ÑüYóSyùSš§“#h]M¤ÕçæÂ-Àux‹Ž}00ñu^ŒêJ.V̳0ç`Å“DÚ¼ìå·Z{'Sñ?Û0Ÿ%·”S„.>¾ú|Ð BG”lj˜_ôÈœÿƒX¶©t@¿9o¸©¾¿Úp¸[ÝpòµM™’ñÀ·$•ï]|m—Û¾àŽ]í—©tþ¦ ~k\Ñ`'‘Ù@ÝV–Iªn:o¼ÂŠ²Í¾ë<Èw^ æ!Db›JÏ)BEO¶Ìfe•B—”?¾é>D9Ùy²a]]Zj™~â#ÅJ “Ê'ø[½‰ªkëWÕµ`³q­?_þ¼rÖìûš·aÚÊêÖ§4uÿ¢µ™”ªl3"Ár„QI0˜¼ôÚÒ$-¤vÎFäF¬f0…îôc´AœWÉñsx¯WTÐÌ2¡xD³ÇáAhîÚ°¯®ÃŒH& êtâ^ÜŸ•Gh­›ý&t¤„ù¨¶WA²¸Œï',Oçv@‚ä¢Õîy¸”=¬ŽNžÚ‡j´eW2Œ"‘_è=üלÅón¦¶´e¾*”B:ö×?ﺳš˜»B¿³_„ ‰>ÏÉ&R%³ ¥[W_#|9 EaÁ7÷XyÖ…ï_+¶´ 7›Dë OÑž´þ½†áHpeø¹gÖÆ*!ä™ñ%sß|’~«Æ ùdõGà˜Ô­L9˜ C%CøØIÈ;ñã·N;ÌMÙ’5•jŸEáÛ›ïxW>ƒ­‚šÈÎhƒ%æIæ%S?B…”G½¦y `’¨pÇ·Üc6A 8F|+ÁyT¼Fïú¾F "7;Cèƒ(=/v'6†”nØêZv`àÊ ØÅ†“±/O‡e.F,hÏl}÷9*UÐræÉžËÈ™(cÝ1´Æ8<‰‚Ä…ÄÐ*5Ë[uü®î“T^Öº¬¤r×8ÔEQ¬>°‰œ†ÛGtÃ˵[L{·¤ôi†X.3Ütý¡2îö=6'À/_Ú[‹V—µ¥ÖÆàsòIGl3ÑoÅ“WƬ¦Ã±÷I ÇíÓ1ïI©IægOtÎ줩/Ú•‘]EK]L€Àùooâl…¿Lþäþ`õðe2—÷ÉbNŸV¤BMld8‰‚-(z‚¶@(ÞÄ"ÊþæË2“÷“AsSÑr®ô=9œí•óîýjî±e:÷I%Ôó'O«lt¤3d Fj[jcå'ÂBç×MCåÒ-ITÃò#UÙt… ª(„œäîÝà%—iŒÎïß;›ÇžÊûRÆêí^¶@×dwɰ‚ >g*cÛ®A[,ˆ‰ÍÈÃxxkþ¤[Ÿ¹P2 ò2p ‹þ¸ºSÀOªõÕG{(UŠf“Oi&$|ûS4@ÃùL8]ÈkIj›™‰ÊåöØ6WxøŒ}%c Ê»‹V¼× ¤ÅXQ þMjF Š~ëÕ9þfUu›h²n|¦®OT“ð8´²=òRïqýÇžd‰üe‹Û”ƒa¿gÔ]ªD®Wu šÃ@¸0QÿS)“V¦zJ™gùð¼7£Ê¼ £šÆïäa9©º:5´Š u@Ù|Cöëpâ@ÄÓÌÖ.P0"æñ*qäG–ãì8t€­Æ”WÂIžÕDt’Ùî‡ée û9aÆw¢ˆÙ¡±WÍyˆ\ ÃdßõÏ8¨]g Ø­Xb>™L IdF¸£paþ3 å> šª”8¨×þ{¶p#»[¿Çþ-xD‰Ú^Ln¦ íöY”)zÆ +»skIH¬²–ùn2%Å‘ß(ƒúxoW-ÛÀ× À[5Á{hÛG%l™ ðŠ®U‡-Xf$ê:5uOî}»%tgcl¸Tc„"[ƒÞ£zåd;‰P¼©‘ž;æ âîì+›Ïk˜ÝeŽÕ[CfØvïžMø¬eTDŸk£í›c]Û0¨"P΀iúC Àî•Ê9Ò¡ú#4e[ZTSj¶ofÈ7 cD07AÀ5ÉôÌë¡lèì¢c\89b>ÜœÇÜ]ÒÀ§¢Ž¥¿¾> ýß k{ã°'b/Ø÷“Áu{„ÖV@þ÷#/ÌF‹¡hÛÒJ^dðäÑݸòÀ¾ýõÛÐI´¶Þá·y8F2²«qw})K¶øaTÕf(Îì´áH#ó·z…PQòÿ” \év¸N÷¼oll š‡æ·Y ±ë¤ŒÊ¼˜ÑáYø.Ĥº¨„íïÅØ¯ ü·h±_€¼ùjg«‘dƒö"A†ùT'<œ8žÞï•*GGí¤mµˆô0ºIiÑ*V £%¯ÅÇ»¨?Öf©6_ SÞszßXÌ—6®Ø2×hm¦>F^ÙQ˜fã~Û­qú€F{°íÎÍ7š:m aÅJѪ­Hïz ¾»÷gµwAÃËnJÌÌæNÉÅö'<Ž•÷[)kUÑܬŸÇFµ—îj,“8•°Ñ‡FÎŽH·wQõQþ><—whM€,ºìÚÁ/1¬oÈÁÍhV°ñ‡3X…a¹ fàBuå)ƒ9,z èÁ“E©ÛÕxΛNõoK¦D#‘ªÚ“¸þ±ÛM"ö©²"†FP+ ˆnsçk€ø¾<&_ÁßÁÄÖ@*Žýš=#µº¦Q¬‚¹Žñzc¥oðBúEM´E)ë-ô®jêS˜}”}ŸÔºÅ·ªèÈ“ 7„nåõÃSåœØ åi–×Ý/Ÿé:cGüX'8îöxY+r•mQ°_ÖÚÍJ±(Ÿc׎/ä+†r‹a7Á\gÀÇcµ˜OG?HzÊzª¨ŸßË†È G ¢QØþ»fË \­è¹ñ3JÍe[ïð¸¬þ`á÷öpóuiïê:iu¸0šÀ¢9|ù½nÇ#˜­Ô¶'ç.^~ÂÕùýQÖÓ‹£šÌÈ”×¹Ôeâ6³}±•Hù&ÀÏ‹%°€Ð‰x¬1¸ ^©å F#‚<·×SîÖ®xLž=IÞÌ4ÇͬŸüuUf”Å~}&Ö¡W¹5åPíãë²zôè‚]·Rˆøîx´f?[¼<¶ßÔýlT&·Â"®Üáá…Ö×>mƒÌ&»–ú¤ßR¬È¾Û˜Â#•¤˜@j‰‚ÕÈ~CÖªýGþ¤Rc@ Am¶Lkõð{×éw D²"ª4«~Û *´¨A_z–žã4l^Ü)ÚRsY¶ø»j`Ê0è‹p“ÝXeËÅñn½‚ˆÀP•¨Ì?`µÿ ®;bwFL~ü¡ÙJÕ¢C tv.<êí´ Wr$ÍjÊ<+ÜùÚÖð^ÃÓ¸`˜XGÝh¦²×êp’?Ä£­*ëÀÙdùU@–_|Ü_µÀáV PÞNõÈ81šìV4b F2â3”õY«¾~ÔòélI̯/•ІüA×Ú±ÀÊi÷ ¢ÔÌ¡‹Ìut-ìò¿XöÛ^6Zò':3ª…µS(€c\hyb’ „,Ê'Ã2;)äÀïwSÑ-ÌD5àUV.«Î ÷O¥ÁLJT 'o÷å§ØË„¨Ðk§ËgT€èú“/鮽Ã|Μz5{TÂum„’—ˆ$ ñÏ$ÝïRŠÚ–ÔÀ¶7xJ˜EŒ'‡2<¬{òzrò3×qíwýfÇ•Šþ º ‹üèO—r§8ý,ÆKÃ÷çÓè I»Ü !x¨„´nm%E¶Ú²*"¿P.ŸŒ‡kŽémT<£ÑQ GËÕ·­ ›Ùo™+ÔWg~—/é2M„AºdÖÅñ‚âØ’T·‡<Ï©rª9 ã9ë†åÆ´x0Ì¥ßå+s Yù"­e&ÀDl©ÏhºÈâýcj‰Á”ŽÏæ‘×:¢0ܦþG寡|6 ìp×ÚnË>¸1û©Ï/D”b§ÅAß_|¾?!²ý¨'ð¥ˆ!ô|ë0ßBšÔm¶î»9+ kêúËx²^ä°²†`Ö¼·ùD%r康*ö GÔI1ñ½d‹´i({©`ѳœÛvxsoóéJ…ÉäÜE/Þ¯V†¨à EÿÒ,U"Zyü!Ôëä}nÂÌ«=*¼T&àæPÆ~]ËÕ¾Ö÷@Ãâ½ @ȹkZk„õÞ8ûg¤\“ö|bñ¾µÁa‰v"Rõ]ü?}"' †öÜà„,®õà[4³ôÁ55|hòßZj›ãkziºïY™¬÷¤™u=€£x¯2NúÁS6î"¢X,¬'Õö-óoŽ¡P„@н½Á¿‹Žá†„pIòBîgýâº4Dy`™¶eâœh'ØÍz7ð´3â‰ãa{ëaÓ nmñš§ËÄW.×Ókd¼¬!މ’<=ÓÔ•yzÁ“K,«ÞüD’WÞ?î”hÿ:?ç’¨]MýX3ÄÐèáäYL®Oxä³x̲v¼¥ƒhÕÚ"G;ćà- X\X#WŠ=3ï?ÿ‹ÆòÓóæ¼ÔŸ–î4 ì=o±JT\.ÿa™Æ®Wþ=Óu­Ÿˆìc$Cdª™M¦{e¾â;?Ûó³æö¯õDÅh*`}ÙAæ™’B†£¢I ¯„wòÌ]>Œò\ín{o«¼øvsRˆŠþÝÆ[÷îp3y÷J ûÖÊí L=ÚÀŒ“t‘¼Ž‚d'Wðâ·sZÓÙÈAum¥`¯JõÉ~ú†:É&ü‹Î8/’»•dhñxÐñEöÖ³QÔXÜ܇(›³ÿ^׆Y‰xû½FAºg8r•ô±æÁ‘Ò¶Ú»Â~Í÷-¿×i®_O Â,fFk”X\bM’Ò¸”ÉÞfïk¨É”{ÿn)Tƒêȹ <¾"ò§¦þp¡avû×°®C æ>J±˜€eë!ß œ•šÜÚ‚ ÕÌ/ow` S]w%ó ë§û~ pÔÇ.¿éƒ ¥QxµI¶|ÅT.E`¬t,~Vr¹Üö gä£ÉvfÙєԳ‰¢¡âã/½0¨ü•šo®}ý5´P°_1îJ‡ºüãŠ6(á,ÌÌa*†ÚãÎQ¹Ôì^òÖ>+ßó·•ãÛ¡é–W®ì¿ZŽûóÿ/_¹¯G\HyxÍo³ o²Óvô~'uì2¶0³k‰jV…Ñß%ÀAÉ|0¦DÆÒÛêê“[çúÈ/öÀE)÷ÛIx5LÓ¾ø´}I}i Ú¡ê“–({Õbõš°×ÚÅqÉyJg§p—eÖ¡%·Ëìeøé±Þ}—un¾T'’ë‰ <•»K á÷gyèY;<¶úЇ›ù0ñÿÑt €•4Aú%Ù8ÛÖÆ¶6¶mÛ67¶mÛöƶmÛºìwIÞËLO¿ªê¾êL¦,+:G‹*sn 1Ù¸TcI>74ó<îäO©þór¥xE ¥cd_滎Wï¨ü2(I…ÚÛc¢¥+0‘èÃþœÆñ®,BêÛÑ­˜f¨rÈï.Naðñ2UñpëÃB’,HÞ¦/Å î[!ý……©»¬òu£z9þ+ÐoÕÁ†g¦cä†-V~·Ñ¿¡2ìVæÅ5h3kâ/,O~Ê3—5r;ħj¡§v€¸ "­ærñîPœ™¯³h¶›_~k~Æ~%‘o"D'òž3Î>ü 4á»[Òr… Zã#©ÿ”Ÿ¤³}”¿_ìbå\ܤ=¼e” ž5ùx8ø‘ 0ËÇæÙ~Tê¡úÅ*ŒKÚÇG+Z°µOhv7´µiRG_ò¬fðÿRû‘Ýî`™‰á/ùÝÎ2&KÉïĆ"©_„L9‘J ½ë5Àzx-êáÍ”…/¬/E=ãÊÎ;ÊÅ?Öÿ ”.Û·¶±ló–BM­ß ¦;èt„½S™Ó7j„âïZÐVº&¸P5bcjì7ýć!šI6šÁ)Æük©vµÚf£%ì¡tñ[9\¤°ÿ¡?ÑñÛ¾˜ük°…®C ­RIú¢Na^DåÉ)Ûd~¬¶™Á)®Lbº’9qLaoýÖó¯zW‚RæÈâi²Ñí–?%Å™äCÉB¶;Ú)º”K;¶ ÚS‘t‚ðº„B}ÄÄUF­ùºÖ‚¦À‚¨¸“‡Î„cù°¢¤?ÙXs-{ý Å£tDhŠY Žü’Qfù\â-Fj9fé#¿Ûi9ûN[PDøˆ€PwhlÄ}Ê‘Pšô&;?¶òœÙ¿GgÊ¿¿ì`þ÷ì ߈«|äääª3{‹-ëf8XXR# pnoBZ@¼È £¼5:z¶¼ñ‚Gr•2kF³èwv>MαÄmÔuÔê.ÅrTš¹ÊŒXWðxÀ6GtÄ@h½y¬Yñ,š'ZÑYD„sÂÖlàä¥/Â.ÿÝ]Kù´£lm(ÒÚ³¤¨Œ¦hI 5Kÿ"=F’=¶VøË°ûg\(6ÉKèÔfá°¨›u\±æ‚q·D·rq{7ã¿WG÷ÉöÊ•©­Åƒ¡ök š¶€a7É`Ã<÷±,Ô×-Û©[õnò_î#Á/‡çõé1¨†ñr ãåØÚæÎ¬º ›‰Åõ¢™8¯Œ·ÒiW†V×kXóGÞÏ(‘qw{²ì·˜dÈ]Þ<†ž²I¶¹+·æŽº„ïqÖ‡mh]gn˜)ûã‹3vEwÝ·.†·qˆ>{â¸dùðŠŒ)î°¤›˜¤šÿ¾¬øö/ƒQ{z¢ìsþä§ãNÙ?o}¥æ÷ÇMÓ¹\ÙWaŽ;'ñ³âI6d£Rˆ5&5‘½¤‰¸ïPl}û¿¾˜›£¶øhí¬Xþ‡á 4v3ާè=¬‚ŽýmsÝꕼÀ·›¦$-ÊÁH}kýVo¼­¿ö“ ±¹J!Ū¤&×)“ Í&E U º3ðCè1¶D²}¼ï矛‰Z36¬¹XöZÜ›ÉTÜ¥M”ñÍÚöè²Ð:ÈÙyjËF•³¢.¶NôˆH_¥ö•\ç33ìýñM^ÛŠŸ¿'Q‡­ˆÃ÷¦”TQ !ü+j°Ã"Q#Ç/e;,Ñ&`VÙ G©ëþZË/S‰û;«‘G©4ùê±b H2ˆƒ¾ð­ef]*ŸÍ%í¿|™‹“4ge©¿¤=½>x¬v2O‚# ¯mpAËw;ÀÞå.Ø‘V{ÃÉ>‹‘N°+ñ¨Á^|ë–¸¡Í­TÌÚÙa|¶lgbð†>t7B ½±d½yyb‡Þ•2ã Ò„K`Îüž6ÔÒù_Õ åÚÀR|íŸÔQÝ©+ÞbÚ·•$ÑjqKÂÀqï®#_Ê&¿F #èk,½i¢l6Z/¾„ O3gÍÇòŠnŽúV´TE7'kaƒQÇß¾õ!ͧ(ÆËÛ‘³,ö¸[×£?Mm­Åçû#“) O÷vS¯*΀ÖýV§ZÍÈf æú˜ ª¥AÇúš64l Àƒ|²ZåÓ˜àywÔ&D¸´YVósmAtÕê^ǃjYåô¿'Õʢ𸛰¤³GõÞòÃ?wé,P>xÒ‘=$ÑÅ«'ÅêÛ5­,u™txo(È;·§uÂxZ^ ÈžiÒÚxZ [R73.ß•ÎûEZˆc‹$J™¡Ò傊˷¸Ê*cÙ¢Ô”°íþÖ\é]B9\(Šo´4dJM¬p5’O䪊8TfúJq†â…¡Îæã N4@³C¡î>…°t¨p{ò/Í\)’h:‚¨Fr4`DûØm…/c‘¼°Bð¢Á.$tp²½_É)°³;U¥ö¶˜ñ0Z§`¶:hÒvI¬œÛ”eâš+’U~Ãxºáá´^æ`Îkbл9)s‚ÿz* É QŽ¥ ¯yÓJn]¯Âzí¥ã>>†b@ô„HÒ¹ßRÎIûB^ê%V:rºöö|ì«Ù5q-O…°¸B©ô8%r–|Ñty>ÎÁdxDK¦óXpDå;¡™ðK`ë……Wém 2þu î&¸ÄÚ'4\QçÁ†Ÿ÷<öŠeøä‡â !Huê%ÂÒ̘¼qê,8²ý~ò7!/IÞØ–Nôº Yþ^e—èïŽSó^޼Ò-·MM–‹2çÌŽ#÷,Š3æ+ç¤'}¥ï&¨,ú°É. üSØñqÞ`<^©Ð’¯™t¡û|¿öwDðfÖ¼å «i/]­W³cžšå2ö½‹‡ö™—‘ô¯Â+KO&ÛPÓûÝ@“M«Ðx¯òÿT.'Ù÷µZ-F™~ìsŒëIĹ1›^1w¨<:9Ò›L` ±M ”s-eF÷´„æûqòxð§S±Üè„›$ëègñ }ë* ÿ˜éáæåq97¸~m{ëIóu»}4µ_t§O»Ì'³*žlœhÛä^™Ì·zÀ^Ë2–E[™ª“¯¹Ø0R•WOyÈô %ÏiM’áhŸé1ºy<)¦h¾O,n—sy²ÝÎŒÜø²>ëÁÑÖåú[Q0–@hÿw/€`rw7)¡™ÇohOÇ\•ÍhO¶è×# IÚaé*ͧJuM×#|”&ïÛ1‡6‹³ø?´*Ê.V‰+³œVefë`ãmÀLÿå=M¾œærÛþïÍóþ ™-JA_bj=·ââ£ý3š¦œ½¿ÅÕCÌ Þa}|a½!™’ŠN%4‹¡¡GD¥=Z‚‡µ:z7,yAN{œÆÌ;cFg)‹3úõ\¤²Ä¼qïÛ3°6ýBv¸™51³›ôÛËŒ\Y8‘Ü´¦¡·™…h4([†úW9ã`Ä(.°ÊÔOZWQïÆëô䵿!Î7<ª‹áD¨íáä”ñÈ´Ñ_u¸!~¨:4PKBEØ !ŠzÀU`ªåd{u}³{8Ô·ÝVÍ6îÌ–&íÖª?~Ýo¶ ´‡ÛøÜ+¾Ü>U_ ©WîˆXéT^²ÇeŸÌÇ ï×é¸/0串ä²ÏÖ¿¹dL’€³—óæ}r¯¶jÄku5¨=9@Ⱥp:®"Ý(\ˆªùk7~–·ý­ß ÇnŽU’ƒ;ØÿóàýfŒ^mñ<m‘hÈ‹…ðÉÑÑ«ã‘fe¤=¼ù2wl2t¸Ýå ãO¸íuþXãÆ'Â}ö}êøó9èÝm篭nw!ÁÏ…r“ËëWæÅéùŒÀéfg™´yèDäjn‰ßŽýºû3[x†››Çîqd™î4‚g›4á°S„;›ÌìlÞdÁô±g‡e­A®› Ž–Ã¸¥Þ·ô5_+šîÖŸ¿²¯d81[X›{ð’m:–Äà80[&‰DpdÌÍ¥9°l\*³"~Îă¥óqzÞCQ¤>e-á ñÓ/È¿wôÔ¯¢8 ÎlD Õ‘=!”¿ 3»£Û6lÞ¶û©áï&Í.w¶YàóÏ6W^®|­<æì™l®ÔaÂZEâÍ+Ó &K…>f\¦£;ú¸/ÕëG¹Í(Æ«P&&cáÁËxÕ4»ÝpohÕí.ÜÉ®Zûü*«"4ÖJGAõøÚk,Xyá‡Î슣GmKçùáá[ÉË$z<äZÌ¢ÆnÊôÄå6ð¢˜È,ÌßHoðî¾j—É‚µ1Ñ"Ñ•h‹³¥¬XÆÞJ¯²wÀj)Î7á͈ˆrÑÔ#›m'^))ñ˜[ša|¦u6 €Ô§€´Îó%®%†L_3d\—ðwRGb^nRbÜì¯LiŠ»"9¶+à°«èƒ1oôÇ¡û8{Z¢Z|²^²ÛžKÏöQý ÅîxIêN2Ÿd?¬»˜“™»¶åáymÊ4pèV¬D±ñ×¢ý¦8¯PŒ‹! RK3þ:#nBŽr¿…œ†Ê‡®Z|ÒBTã•t޵*n`{XR>ϸÞ÷¨7gðlBŽ÷ž…¾––c±>0Jnÿ˜¾`]ù³i7bÿ\žŠ¹²C³2ŸÓÂašø9Ó'Òó_H­l>¦Jšô^=^º¤¯ècožÎcN¤*_6“ºy‘Ã&(4H¿¯ ~V˜W3c&ެi‡±!Ž= ²iäl9 ìÖâñf¿äƪÜm¹køºùî"—3_WФù‹s}K3—åb%r.ÍaMz­­ìVê «di$kÇùå˜ê63¡äïžcÞ§YÃAC…$¼ª÷­_ÔNâ‰÷%¢­`ŸÈ›JÜ'j„⨴æÓÖh"u±¨‹wÈ™Š=4µŸ«dyŸÝ´äQ*xÅ“'b=8-bOmÁ 忾ž(d»;!½mãý¢aÓ„ËÍ„sÄöÝ•ƒäžn¯D1Ü €eÙwΜZ”°–Â>=¤ïž¶šRÙ¹‹›W½o£ ¡ÐvÒŸ®B†q°o‚’0\ˆS|¾N•Šm"'}tñl¬¤·êº\DC7¯Œî Ì¾©ì2Vž©o•ooxÞrÓÕó– ÖõŽþd™Q¡¸râÒà‘ò9ŽRy».ø=­¶Ì”ÌÖ×ýÛó}öÞÉËÉûc+Û)7ÖC6)áÿÓûÐÜ™®€ ôFv§.èvÖ—ã)nÛœŒ‚õÀF¿Ÿ )¡3QÕQ»¸ó=Ý>XZÖì%HÜOX4‡µK³úÑÖmïDÚÚvÕ*Y¥Oä¢à‚uWjMÆÊ¥’Ÿ¡¦Fó(~¬À9ìlCd“7¡L}S´Ú]úd—¹ÞQƒ&ôí•_Õ‹‘;¬öÒÂC»"÷"S öü%,‰Õ¥õÑK) “»yÆîMi2Å^¨ÑmG 9£¢Dõ+®œ¼CiÀÙqŽÔþ¾ÏÊÖpÌÄwf°­=sRáSÀB|²©x TûÆÅ³ßÀ"·àîì0ü ,¦ÍÖá`ësìhÚ¨þeJ}è¥müo‰:‡I1†Ó'ÔÿvŸX ; gÑÆÊ^/Kž/ébž0íÞQkÏíˆÞL0ŽÚ£³Àûáwõ¦tA“B;âèsŒ“à ¨Ü¿=½}IÕ”)J‘àiƒè.È*ÐN¼‡7R*ßD)Ñ›óÜÔtñ4xÂ$—Æ®~ÊÙûöò̸pª5XÄýæÏÆ9P&*œn^ŽçߎÅ×cè`ÁhC¡$BßïF‹t­èÝÛQÕX69…j5é=·² Ù˜pIDX:ðr4ú¾*oïá\®yBsWÜ®#(RÅ ø.öDp¼ÑkHÖVeÚ”Â-@wõý£f‚ü –e™õ˜“IÓB ÜJ¿«Úå-:®æûÌÛBQ¶ Òè*úÊs/ÓUQ¢ÎôˆJ¾ .±ÄX”:˘÷1öåñ§ñpœ6z•·•æ ç¹Ž—ïÃÇÚrÄ3Õ,jíÛËøgIG±Êú—(ßFª:ÖÍ[ﺽ…3ºÍ J`”¯Æž?QÞR ,‘xd—ñÿ2xfZxtDDæq,c¥Xo8;§ÖšDO:ɈT˜kºÎ;|~…׆åy?œ¨¹×Bc2}Ì¡ËSi¥tS‰ $x¿0Ÿ½t¯ø«8M1Àð´Öî˜Ä6á×d: ûó/Û^wÅ[WŽXDN€OHßðHŠ-ïf»+kt³K¯ü0®!ù«d‹ë'S÷êè"…ÆœÁ® "4uNš± n ˆ¶¶¶þ)0ukIYs–IgÌv·¡ÿ‹ÝNpÝ›¹Þß ÂwÚ†G~•ïb\ŸºÇ6¾ οýæ­4`ynFâ·tŒs– œ³»9lÜEnXä°ÙaÓvÓ´o9ÙýEÂŒî þi€Š_™`û––ªûßÖ,Ëÿ·5ËùÿmÍâàá0ýÑÞºüT¡Šw¯ébö°Ÿàb:G-užj\…´„TUw·ég°Â‰Kâh¸sÔiµ˜hÀùfü×î'+oe¥×îç§Ae„ʺ™ò©Ô2Îæ*{äi´}ÏÖ?ÙTí|ÂÛùÂù¯ën×Ä?ó’ Ed.¢å‹ò<°…֓€Áï åm¦íîÒEkí’.ëMDЕUÉN0q+BUŒAù»‰VídN Ìñ…Ci¢ØBÜk¨ÜöŒÅ$ÕÀ­‚7/Ç2ØUªšþŒºÅAYutÔçqŽqÜk¾I‚ nkSµIùÕ£t£¥G×ÍÒ€Ã7õ¤èŽ‚ÅÃ9"³J_уw:ÚlRÖ®[×,*ˆÖŽ` s ÃŽnÓH§bïò¤ùîߤ[žoý%0#EÂrï”ÑõÌWK…†^/®Oí4í¿¦ˆîòþDŽgšÜ“M±ì·^ó¢1î†×xt2Æ¥Úp$#g'ö­À,¨ad•w%ó§¿’é¦$á:ëÀè¾»U1Þé˸ª an“r]d)­Ø;ëåL•òM š îdë]7ÅÎo9ý¤cXÝ«ÍiÞŒaC;u€¾ß¨/ƒWÎYú4ýö,™NÜœšãVíÉçx\åQI#õ ÌÄ/Çï­;ú#[î Jé”=4b£ÙÀ(u…¼û;¶%°Ò¤HwZ5Ç9À}š% •GIÑFf/CcÕ#™‰Lt)Äxr¥D.WRîФñTn&Y§žÄbý ¼S6+çÿ öG‡©Ü=R%Iãäd˜K8M!¨t$Ç»ÐõÏ©¼›ç€ç˜3&ôG?ÂaÓ~ <}@»ÀöpûaÜFfèþç.ã62¨þÛÌ Ïñ?ßT!*ÿ£ëªZ¹\\q mNüÞ—tšóx‰ô_Sí}¤bÞK©Už`ýûv»l›†þÄÆï´GCyÒò_¨ä $¬ÛB„ÿƒØüÔÞP´„yÌÒŒŒ´ô¨ ôw`m°!* ø÷÷ŸD«ÁÌXƒè¿ãH]Þÿ û·«”¯¼kÖÐÓœ)ÏûUÁQ[{ÕØÔÏ/LAúï:eÞ¬,Rp¦ íK ­öÿþvæëCþOˆy ÞÆ×Ôî< GK´Wås‹¬Ný^:8$DÉóÈjÙkkj컪Ƥ²vðe !!ïõž ©õ¬Vÿ|÷Ñš?ÅÒÆSéœÚ¼[9JóYù‚yP·` mY:ÿôëÔÂNFx«"È„ êhUE¬tÒjÓRõKH‘úÕ=bèÓ|aÆ53JENå;2ÚÑ-aZ›Yö÷«C¸[›ÌüZªÊIÛN¨9²D2'Íõ{£1.&¾ [øñ6WÃ<ÂØñ\L3.ÉývlÉÅoïvÀnòwªˆ¹ñ¡Õ¤ÅÎŽ×3æŒA3»L¿u4 éÀ4¸ n"ÂlTto¿¤qðÆò|3¡öñ>|ëÉ… áH!8ÿÜ3iŽLߎ…Q$÷2®o ö¿Ð½]9l0³­œj]C¥98áh]åƒ÷ƘJ ž¹3õëõtMo0_ÿãY=)ACûžÄí.Yâ4dX¸nôÄU—KÕùoŸaÃ&> ý¹œš_ý ¾·ë‘ì¤Ûá­gÂUñyæä¯Ÿ&Üœeì*FL¨N/edæõx÷èÇÙ¿[ʉ–wqÂu;´½âÐJv‡$\†«”r$f:áVääH˜&é¿3=tœò 0ÿb,M¬‡¿ëáEê8 0nƒíó|$#&Z"dy#ÄÀ —ßs×KwWqtøùGÀª.Ì¡¦–«’߃×Ö“œów£”O•Âlú“X1êÙU¤Pq|澑h²æ¡!Ê|tÊñ‹Éyg¦}ß!´äTÅtîÞs¤ñç§ô‰ýS– ¬ã•½¢¬2qçP§¸Wý› ÔïA!5B?ÿ÷U’ý’¾L ¬+÷Kêß¹˜´`•€®?À÷š  eЩJÞÌÖÆaØîã–Mû*+-ò ê»îO1QAy8A…øf úÒU¿ï_?Lø¥ø€ÚÄ”û¢ïsH[QµïpÛÿýú BÓÿÿÿ=âšqžÉ­H(Ö>ôµ^t,¨ß mˆ¤EÌÀšºÙÓ‰ä7ó*Ì0Ã)ÌkÝ yïND¿:‘`:ák:hÚ`ÕP Å$=ÏêÚPt÷ òãè'ºØ¬ìÌ­¬¤ÌÇËÉŘ 7@ý^ŠiòØ ‡.âè1ð¿‚Õ$Ðmð×é«§ì”?ÿŠou¦.ýt0ýt×﹚—¼ñX0ÿ΋–nàvz§M%ëW,—›“ŠŽ‘þ«)&KÁá{l¼ý]Œ÷+ñóÀÈ–†þûÂ8âN[’÷¶$é^‚pGª$˜é`€Êȸ¬#ÀÉõq÷©þ”÷ImãÛ´h«5Ž^ŽLéŽk±*Äcr€!¬%ಔïíãS톯‹÷篴ØúÆÃò(šíŸí[±­ª—$Â"Ì«=Ú;cÙÑa- Ž‚*ö|w¿º»tXÆØ‰Dü6Þþ ·kk ¿…7r&,ŸÕÁ„M[‹2ˆ$g°"Ov¬smm!|7D@·!¸†Ù/šÇ‚ô> S›œ¸rˆÜuq+ö€pšññY°øTy墦?ÇzçøÑ3å~;ã…]ø°Ã§áÖD/Þô05OdÃÈØs-7àÀ!‹ÝͽX ò¤:5Dzmµ—Íb@M·—­6a}[K«Y¶ÿ¤3WÎÇU ÝpÜÛi3­cÏ9.& ?)Ga\?®ü%ÓþþÌÏûC€aOž†ú4)ExŠ$ mÌ8áK ‘1ïÁ¦ÑZP]Ò¡}«©Q>幬çj\>3ðY8]á]øtT Vu( •™œ® ¯9•:.ïæäË,\GŠ'*Íà“°ÒÔé`0ésLÛl±ä7ÊR¬ÃJ÷|úJ éûÜ{™ŸOó)è—¥zÙ–Öº O°‹ùRà¡úômƒ¸èÂ,•[ªYtð@§%s«/Vóæ²2jôö…€E¹‘÷‘ãw(K CGûFäùf¯Ùã”5Àã“G¡ºKL¼oq&.” Nb ìÜPÉgùMÍt^𸻆µ0í ¤\†!Á=gÎoÕÇÓå8áÝÀBg¨ˆl¦hØr‡Þcz0¯øeö&媯`èO&ᄘÇRüéH.MsÒ`YgsŠ*¶ñ<¬|ïÃßýÝ\œö…… ;ȱµ§ˆ”Œlv ™ù2<2`ÂÆLØûÐA\P÷ÃOƒÁTPA“ñP‹õrCǯ\÷ÑàaÙ­[ÝŒÆõ% )Ý‘§W·ó†á¥Zãä£ÔÌNmß3.o©Tu"/ȳxqëÀÏÊm9”O&Dùlƒ2–ѱ"$ñNî‘©Öï¦üCŵpjÜâ#ôV3Ox¾ ±óµ@‰N~mº®Òkr-;5‘$f_›B½@4R&¬‹¢,e}Ùu±ÎòÀ 2–lí€Ù ÈÀ±Ÿ÷ ûþ¯-DÎMûÊó†`.]ŸÈ[0·pqÜijòÇD FdZqÞ,­²¯ÈlÖ¤ä~î_R¸®Bm=+–pûêV¥oçÔtAL•é—AþÄ…Ê“õ=‘Šø³$Ÿ*¼(ßU<˜ãù½÷îå2æy;€ëU¶”·áRjýŸä;à Eèû6a?ÝXZyõ‘…M”QeŒàî)é VY… ¬=‘GkED´9“—æãc :¨AŒðꀷ*<2:/+ã»|gl±Èõ!æñÒ Èìq„‹og^¬öS×/¿ÌÒ¿'§"”fYt¹ÇVNÍŒl!«¶Éˆf·Ï…¡}àÛ·:kÚKŸkŠ——æ ¢S× •|FqŒV¢õðâÂ!Sí—½¯Õ”{ú²;”¯sÞî ù\ürϵßg±PŽ\?Áœ_òsx -@j•Œ€ÎãÁêÄä|æ&Açè@‘ ^¨ œƒÈ›s!4rZQA°¦G pϰ#|Ôv~qY;èc:,Iêñç¬ñfªØÌó¸¤GöÚ·CZ3ߘVŒ7]˧±$¹…—¹ýè·Ë,¼wåb (Z<`m܇N¬sû<©ŽÚ›Æ±Pä¶çy9o’V爎DºÞ°ü3 ݉>2FØOg¾žpi©)íPÚC=;ú¡¿#ï”÷ÉÓ[¥ò˜Ó†è΀‚®¦y.cîS~ôŸd#$—IßÒ»–VîK¨6'.øòÄÒhP”^AJ-‰ïÐMlÞÐÈíÊ\ù/t»BÿÍr•þˈd€dOY¡<•©§ €®r,WRÓŽ1<ÄäQb`Dîtš7õýG;”3¶—bhÒQóš×°Ýê‘ÿú’…ICŸÿÇ>*°e3;ÿÔ¿«&‘@7»,nÔU¹ÿÇ@$aÞÝqj¢&‰œþ¨!¾~tÃMÒ×ñ?0)¬ëÔlf=•væÚ(} E7‚Prœc’šÛïê§‚Ô$é6ùþ€YÚÔÅc*ÒÂ7ku¦—ïUº5¢kÁMp–ØE÷u24ëxÆ÷-Šã›L>õ‚-2e |G\Òá°oãÍCÅúìya/Ï ß‰¦BÁüítáÍòžw“rB'>b]bEKFÛ½‘È’¹$í_Ëeã}eÂÜŠúµ þm]`æËù@±*^¨>¸Ó»34 °\ëêè(D ç+W:U·g©$‰çB ¸£²#UùY"Äó0¨ÓN)õü³Š±7& ÍÊñ±Õ½ÙŽ&@A^æe§ø$Ù%‘ÁÑ‚øÂ§e|I|°>{1ÿ˵³«›…F©2àüc ·áŽÿÎp0ßή9¥àW€õ“§ºp¡|kG²=îÔ_Í“÷{Ê{íj2<²È''Ð* 'óúòÈѦ[5g‡áng:»ÐaÛ£Œ½ö2²3TÿÁG$O¤è$èCöäÿ0ûާ]ž0ùØËÀAP­²KøwŸ@­qÛKCN]ìS.@}ìÔ:  W*§Ÿ4…ØÚ³bDîÊ8òﲫ•*6¨MšùÂö¤rHÐúøfUȶ.Ó]ïí)¦Åö5r8Êô•@}NyO5P¿ÒJ²B2VŽáÍ6¸½áM] Ka˨6„¿€&#Mí¸1S LÞ8j^ÑEt6{ÔJäÏhÈL±Ü§TÖg´ÍãGD?°ê²n®¼äI|ÖŸ››ûü346…b‡ÅÒÎrêÖ \¤«V(›Ö;7X‘êÚ :˜’PêjE;™Uis.#Q†By'½ªgT¡Ñ®GҸѡ^¼Ü.µJ)ÝÒ[Ô¼½´¥µ )ýÍg¿âC-·3§c]‹Æ|ë"í€+O»RÑÀ•DÿÓõq†ñœŽÏ óÀÙžIREQõAÚŸn~@f¢¿Ãnú¹kÿ}s  ’5`Çc}-Ú$x¬=êw†?Lª›L#(Ôxc2Ìà…/ð^’S:$j ‡n·›Ãv;u~CY55ø¡Æô€ë÷ïÖð<.¦ªd Äpà“ F1ð,OφdB3¶öw•."X±DõÝcKó~=ÈÈQs!8­M‡  o¨:Îp>^K`ƒ49Øâ,y|Ò_JÌ$繫î{³W/˜;ÖXîýXIýÕº<¬_mE¤Ò‹Iר·îsºŸGÖšá(&t½ýQ]Ñ¥w4'Ø@ÚÌìÃØ'ãÎ0ŠäŠ‹ƒàõ«49,uÌx ü/Ñ‘\±Ø^n½6Otl›*Ùƒæ…óí=[…⯼…@LÆ ;Y­¤Ð<㊤^±îûXOþ_giÎy»ê÷šµ §J¢_³¨\ö2PyسC}~aûïw(—[Y“¤‰¨a¬Sh«\»…¬ã²ŒÇŸ‘Þ¡{+j•ôvopoe!¡vs¡KY Léy€réé7Ç}…»¶#!ë€ ‹‚‡«´(V€O‚%'Wî=ê4ݬBhrpw³-…šã®q: ṉOŸÿ€ š Úgî“d'ƒâ "ÎÛd?›ö³Z ~ ŽÙçJžJY—o'9[£< ½l±–‡Ýö ð@ÃÑó‹gçž Ò¹LÎlZTÙ*;RQþ™+¯»WüÁ~Í…Xhc$­Vòȹ‚!2ÒEíÞ§rÛyY:Æ~/˜&Èý'cÌ`èÁ†h~ÈcZc¨òðm¸þ20*éfðù¨èÆ 4­©’ºù«î#|—áRlvb@5†Ø¾³¯uV‘e–¶2þ`ÞeÓäm5s³÷êÞªYÄá‹Ö–s©Ïž ¥Ùƒ±÷ ûÄ#ôuúŽr ]} tƒKn!¸ôÉÄfÓB¬nÞÛ0$oŒé‚\³ÌeÐÐ¥t‰ƒêq„|m…„T« Þù(!mÏ-€ü{s¶/7ú‚ß÷ôOã1»¡ÅY#Îjó{rÌ‘ˆu–†JT 5Q©¬!åI&™¯Þ^ú¼bZÍK(2–$íÄmMVÙÙÙSTpö6ývØgm]ÉÎgüÝ[d+Ö_³¤ìdÔɹkŸ2íKßá”¶¦¬Ma¿ N&$}sg³·må¡QÊÓÉ–ˆ¥F¡·ñ§$Fê’1]ó[ì!²ON(;Ƭ!˜ôäÆs<µ 74®œŒ9P呹(å­Í-1ågmË—$L&¼½4²Gßo\VÌŸ&§’ç¡A)µnÇN›œòµs'|êœßîYMD¹Rùì݆Lø=OÆØ§‰h¤µ‡IÊÝÞcoëgîÁ…Îj¤ï}¿p3ÀÃæÉ}Cûq¨àÉ–„F[L&$ ü ò×{íìÓ7`ägÔ3p ˜7Õ¶ë¬Ôéf~ñpÚ‰‘‚¿ÑYÌ‘CÜCâð”£[Ò‚^Á¯#ÿK<-w}7|ý®CÀÇç²Ý¹šË3KZl†Åæ+3Ò銣‡VnõÞš]§ö“#u•M[§u¥òÜ–é–­ŒzyüE]pkÐN1àÔ<¤¹&&äØÉ`ʪó–ü8VQùÇQçst‘¡¥ó¯L­Zßw”ÃñìòÛÉ¢^;°7bûíiÏÑ]¤§M%Axêç¦zù9ó°uCeDľ„é0T_©¥ý$åŸ2Jʾ´%Ë?k]ªIJ•ÖÓ,åÙdõÍ¢6´]ª;–„\÷ÞcšëbDVáÁs–ÎP6‘1Us®Üo‡¯ƒ/k½{Q.mN$£­á•„,â[ÒÉ5n#€/¿F ]b@ ï_uþ6k¬VJë©{êÚ<Æq‰Ã•µ¡¬uB¹Uêï‘ú8rßnÖ7­âÝÂuMVzýÝ0;ÊiØqñ¤R¥ñqÔFv8²Qà±p¡í”éÃÙh.%2ÏhOÃõƒ¯móìá{_0ÚhUÆBaê@ -[0ì€×H»–[²wÀ-0:6ûË¥ø`õ‰Â¤ÖÏ.­ …LлÆ,Æ·J¤¦ˆæ’¡nÆУ;<¶ Ù—<*`wO`õt€ØºÙª•,.Ö®ÑjE¯rSÁõ¤»4©} ×o²^ÚüOö,ÝÁç<ç<‹E@½ zÿä6Î 0âTýªÜ0OC0ï:ÂsrÚ¼Œ¨Ñ…ngvRN ÷e-“ÊÎx ¶ºØŒ™µ1€Vr|ÉBú£—…Sg.ßíÀÌ.A®%qŒO˜ÆÓ­‚ǃR·Åxo×­Á†d\w\ÜÃðÿ3¯Cê§ú—÷SñNt^9ˆÎ¸µFé%AUÅ}'T]Y¯ÔU§è^$†ß¤_dTx\q½aQ© g¯ÿ/ݳËC;¥ŠÃðØpÚ4|h©zŠ ü'?ä;u}[ oá[)Æß§0æ2ʉ¬)ÄÊM74~L Ä^À™Ÿk兾ꎚ ¯_ëÖÕÓIcWøã¿•T5eTFÃÈWíŒ@O´§üú¼™KøÐË.ÕíG0=ŠÖNÞWù@÷}}ÔøkþCóÁ¸{‘ÓìhÅY—~Ò¿ÔGÿ›{ÃT;ruဇéªR·Ûo˜aêõÆC2šeæ8ò¨]v&ª{|]»ÿõîÖñÆŠ±H•$M¼pÊr=6PjÀ26-©¥•ŒÝoÒ'cBš²°;¼Jár4É7N 4~É_ #T÷áò£g/ãØ4e:Þûªwù¼ÝSÅö©ZTQSìWJ¡\R°j +%ÕÐ+W"Xø÷šPJ1?,K1gPÊi“ *%UØQSN9û®YT§YÙ<‹BµçC¯ aøðq=xO¼ò—·“L­©¸é¡Ey|?:^mž›k¢`úI[ÜÕ2Ž”6J%ýJãïC(åPù_)JD‹ÓOÄ–:K;•Îápc÷,ïòeФ:* ¥3œÑûYû*…E¨w0?(€ˆb)`›l¹;¬™0#…û³Vï>¬Î5¯üRÓuë{–ʃn{ÐݺÁxvÇ2÷ðÏ{ò»æÅöUe=7elCåOyUƳü`+a;¢¯×€€X‚1ÞÀ¥€ÑVîFúÁ~<€8oÒ±ÊÞWä‚O9Å„»”z†Ã¯6²ªX?—4ôdDAc,0ï·Ï6.vð뢩…V¡L°«Û8H0lXŸ¶n×Û!ß_Š+ûIÛ€~f°4ÌcQÿ Ûr`üº½X°9:]ºªŸ;à³ >{e¢>%ýJdØ=Kè<Ï; -w(“‡6ªšt\qLôq×>²lA½®Â„Ìzó,6ãiòwòîî´j“ ¯)›‰‘†½n÷ â ¬LëÙ¶âèJ†n=7`÷Ë*DPc‰¼t×½ Ô9UX¬hÅRC„ i'vyP¤Y$ޏw\DÚÅXÐo{,©¿í9í3¡¤ùmˆrçôúYU9ØRÇŒ„$-^p`[¼;¨q=?EÚšyaB§ÌŸ±ÆŽ6ÏŸAÆ\x˜¼OÖygKçq˜.R¼{JÆå‚Ks[ åÊ%*ÚO×a£ô/ußvMÜ3;ÿ0Kê°%æ<C?ºT+r»[Õlé…F†Ák#[Cu‰_«I¡sE¢ŒìŽ|·´¡‹©‹Ž\}2‘8†ž3Ûý“L¯/sq«Í®KìUÃT—*ò$2¼·)x¾•ëÉ@µ(ÌWíb~À°ïWÛà¥ê¼!f<›­ «_â‹âk>”¥7@"¢£ÝŠéБ²¦\3.Nݶ…ÓkŸ×ot¢¢QÊÜ‘ríemº—‰«ãùµî±û®Ôk¤]¥Ÿ­È“®ðëÈQÿ"©«"ËÜkñ¿SFNžÓ!îô§9I, Okøƒ© m¢}HÖ2„¥A…1¢KÇ‚ñ.";pkwLR `Ð8ÃU3Éðké¹I-u}føYІ]ÈtÉšÈSüU‡~2@ZüÖŸK¡22 혣û ˳âúEGøNºÞ¤vXP€qf¨aÐ7…¿bùj€òÄ)Ve±£0¥Û3Ⱥ×zû¦ÄpùÑaˆê4õw²MÑ)ÖËøq?=áÄ,‚VÓ “(U­…(6ù00©€Åvi6EÜÚdY÷¿Ñg£'8Ò<2zÁDã|–Á„îeŠË8„)IÝ„ ¨­=¿ºP¡D¹ˆìð¨îÌ klàiRÇÓ˜Ú;ú{¥bä*¥ÙnD‡Ñùi´1ErJ+2sb]ý«¶ƒD¿)ÏÙZâ Œˆä—ºéÃùΩªÐVZpbíQ&#úw)ó€þMkz ¥>ŠVÒ3‹i|¨‘ÚÔX@¯®%RüÈþ¿«M̧]Ì?þ•Ñ- ÈÎ4 Q ©.NêÒ¡Ã BÆæÙ„gü“Ð q-:“º7öß…$†­xõÿJu-I%g0þ¹BÖ”pþ“‚®ZVæ½[ådÓø9‹UÊð¯b-J MEt ^æÅëÈ"ÒR-¦†3¯šœ‚1þS®žG^4‚êRήàø_KjC¥ìLáÞäi£6 lVÑiN&xøµ?`»öX@´Efðòüçî‘•"UÖèvOjç(°y¸T øÙeRõ›ÏÕ.6püÇX_øà½É^>"hL_hg~/ÇR†@¥ÚñFÚ€%;Àm>!c5á?* ø‚Äí°Ó½ÁKº›oX‰¼œã“7âŒèå¿Ët¸\ôÝ Ã´Çed fJå.ÍiGHÚjbï`þÉ™MŸ-”î×W¿Ü¦P²Ë`WºIØ|Y%Ññe{Z-ô®ßóê˜:›‚Æl}åbøîÑÅ>TrŽ!N`øsá·ß>Mxh„­ŒWgvÏë mXp¸ê#«}÷’®ª²2u^žª¯|å/‘J{|¾–¬O~…yàÑÈ“ÔòMæx=VŒ)¡Bù›Ï"=hOG@nÏ^¾–Öh¬.ÑæÎ.í±ÓÉêkTJÀ§|®5Si‚VH*ÕTLòLepëâPeÔ*Övڦȟš™Ìàë ´›¸Œ×?IÓÞ³%£¢»ð³p!Ñλì›râñ-3€=О›uV½J¶hãÖ6ßj<Á„1àþW&|Þw„ÕCþéoúZˆA~.ÁeˆÝÏi³ø¾¨HÀ„ñ\W=]S£ ¦A`„0Q?]M¸Grg`Æ„±Â[Æþæ/3&Ò¤ Ú ÚÄOüha"u"«}ª»¥ÄÓQ2TåŸMÒõ'*îõ+ë) œ«d]õçœá¸Vp@ Dó †ö³Žá-D³ÚßÌdÂ8Aïa̳™Îwg¦¯í…QÉ3˜0¸w£JtNî©~¯qC¿˜q=\È:öǶ1…¼%:è…g°<Àœ[G6Ê¥³p"â Qo™D7Ø udp«$óòuDᆅÈÜwj7Y`ò_ªI(dÍ>ËW5Ý;8×,%Öœ¼¦ñÐåÅâž9pÒ´½´êœ7Y.8 rw­íÜMT|BQ!dÙÝ\f¹¸™«"DÓGsóÊNÍ*»¹yÜ\vCn†ò^唅䥿í³:8)öcËʾ›‘™™Ú{[4HPÕ¡â}«ʹˇ§Ú¬l×lº¡ÞV5g€x©~ö»Ü <ñÒèh÷½«·¤Œ£©bR¨ØY•ÓÍŘ]læÿïÈóžŸV9ªóáÚÑÂN«Ó¨%Ý<•¶( º® tVƒôäTCs!»„_ϵÏ#I–]šãà:'©è5=«¦&Û¸;¿*}9Ê»ªFÁ«ªT|ÜT-k#aò\ëæÉ9Ö«2Æû*$@|!Ú×QòièvAÔ¢®Öd…£#Ð+až×YŠd¸tÚÃ,9eæR•E‹<6"ÆtU3Ã?±žŠœÀ¾ME©¿ë˧þò%í€|óYE7Ê 7NJ®”Î1·Tw¥K]V°"Ç¥ÇwÎyÓÌÒ¬¤ÂëÅ,h÷¡ 7Š¿k郋ìŒÐU®ÛŠÈ!Ù¶[fLÕ]Öìl…J™0vc© Æ•½†óòµÏ5YW:S¿ãË~4Uè.E™‡y±VvUÍt¹ '€}åi(@ÔÍ6×–˜&z£¥Ýe–fÊý[ˆ”ÔÞwØT“ŒÊ.+ˆ.ŠÐñ:ÙÓô©P¡f³l¡Ô+“œ,œœ´Ö)Ä<ä[ZX·[ºº¬ßëõ`'j™Á|7 µ‡ÑÔñXìZwËV…D –œ«÷vO9?Ç€í1=„Ÿ©SÚŸ¬Ÿd\KóNR q¼3åjÅ·’q¯EU¸ƒyé ð*ƒ¯Gpo7p)¾îsü‰øxÝz}EÓúÊ{3™C Ñ4QFð½{ðS… Úèp?óíG¯ìQ—‰?Í‚ Mí|ø$x œ#C¸£ íØ¯å¾^ µ0Œò&7Þ5£€ë€k¶8a²B±Þ«W>gXä*¸[׿v¼M•\•¾õx™¸´áXî*\—ܰÀ¢ùûœkèM$€æÖœ‡µê`mÝ´déL}Nþ[DÞ)÷!QÙa`nל ùjƒ( mÅÊÖa¥ %SšÌ]FùcßQŠâÒ|V¹m6ÊËÓ)Á¶ž“ ›•пŽ*UÚ ºб À”åçßDŸ™£Lö•°.µ7®tÎH(¯»Ï?fô2†¢ ·9¶9fx^I©÷®º¤%”´U8’"ŸÂÈÃäÉCâÓÅrñ)ÃéÖÅúë*F&½¶è¤©R¿%m³ï™çtÙ4|ÎzÂ*—q¸+ÑE 4á~Þ—ñuÉœÌûàHU‡Å§Äæ9~®Iñ€®o±Ý5#|L7 ¡Â-Ñ„µ~KŒ cz÷µnªöÖ¬Æ[2“VRúhÇ´„½w;’ATÉH—$Í#ŸÅþ£× ^Y‘UÔÖÓu)ï½Î>;a–ë­ç“þÛõº)R‹ßšµãïI&äc‚/€f%˜ÒMƒ ߇'ªÃ¦ò®HÁ3(ºڤɴªN…Ëzö©òÒT_@wåòÁ\iÖ™èœïìÌò+ŽÍ"÷+æžrŸ²‰à1S¨—yhy³ÿŒš­%LË‘ߢ±¾…ròöik¸µÑìwd/ ìn?kÙÕ6­ir–W›NµøªÙúÂïºF|%|Á# .i ÅØàwÃñ—u>S-F—ÚÐÁ[¼÷Í©vže_Y›GáHKݵïT™-|ONx.X3¨ŸâðßN)uÝED%eis>‰µòXÅýÁ)qåµÔ»6ÏkãèÂ^µ‹õÌÛñ®jþY ¡¿ë³©Ò“ÒÓÂÀPzv²¡ÎÖšÐãJuLÂ…aç3µòÅhäúÉ B0ô\‰LqôºÖb[©1%; ”“€Æõ€ò¬8çíà,_ääôZTD«š¼´ CF¨ämÀ¡8µÎ_ |ÎÇBðÁ.So ÜLú4ƾMYe"5ž»ýè%µëÕÙÛé i/êè|­&Ö‘Ë’fÌOrð: lCcÂA,Û3+ÚZuÖ o²Ìëê}±ü¾Åµ0ÓÌàËÝ–ˆkˆÁUðRR‘joâƒ<º»i Ûˆ [Æd}Íøz6ÊÅ]‡òËC"½!=Þƒ¿0ðþ‡Ô&f ‡€Ÿ©³¾>Ρmä×FýÙ6S[æ¹)>‘@&\(‰Oö¥K/ðy×{ýQåKöÂ!ë×2^"úL[bxs Ñer¨"¹KueÂÙKŒ—lÛøçÀµÊ&í1(ž—-Qc.f@3Z£õÆ \üz'Vé fM¸Á]Õù–7Mí¾E”±9'[+ [«'L÷`ªwS®`Û«’W“L{kõzÀÕ3Kbùªl»S“á﹉ù—³J„]Ä3žÕ«-×ó6rKnz’ŒT€®äÜÝñÝu^äÆZ®–C¸qw„7ÅÄkññ·å7÷ÿTº’›È?^»˜ 8»îˆíÎç€UÚ¬2ìKJŠeá![dKC²J¼qXéÓ5Åþôâye¸·~°y>n,ÅsJÉ£ÑÜ {#)Y-q’ÄÄ—5­ ¹ŒäP_oç柤èxAëg"8~.Òo û\Á²N´Á®½ 5zê±n ´ŒW½f|°¹q!Ä@gœ¹>h•G¼ùûC]ûOBÇ×w‚”8g]“­n¯œ >Ê(4€/rŠy/kŒè/Ñ6ûnÜÉ“®§;ëCßɲSljÃå'Ǥ_Ìoˆ_­É^¶dx],No¡û.÷”z`Úi Ÿˆ ¾cF ÈHVü$¾m{ØA_#µÑö¢ãˆn6¬²c€-K—ÜãЫÜQ‰ÆSÇEÅE2}4 ‚B鸘Қ)gR¨³Q2½ Ú-úúW½KçµÑÚ+2è„’f¾a,J—!h#Üÿ†³ìS.[ÉSéñ'*‰^;9‹;uX¤v8a¾T¬QÍ-„š˜p›®¥ZÒÙïÛ­ŸrláÌñëQÆU>«˜´èqÇã#ŸJΛgF§#Ü£ëm1­¿¦GÛç)þ ¾Ü ›‡ÖJ*Ú õFØœ°£©;ãQ‰¶›~¯ö¹ÝFä© u7ÚiâÂQP¿I·Áì]@wPn)léÎ×NöÚÉsÔašºg}.xµŒ¸³ýÙ5WˆÙ&ס©ñ8x<;|œNÿ¤žÖÒHª«E7ÄOé–I“²nJa|hâUÒöšßOoÎCïæ‡f•"óÛZ øè*<¥Ž£Ú§ôå˺©Ýž®£Êý‘ ÙõïÈÖŸ¸æ5šIk8Öa;÷ÓÄT —æ5O7·û¦u!Ž\ÂíŒ2ÓTï4>‘-‹û¯{„To]²H Hnßø¤ö„I)R+·Hm~ýñã¢Á@XÔ\%~U‘öÜÂô+Øùž˜:sA]['¨’Ôý†X Q›Ä_‘6_Ü­ž…iŠÄûÛòüú¿áT1¦¤  ‘a,¶WåØ<'Kwn³)#ì¦ í0JyÜrá×KõöxLnB¾lž­Qž1¿ûâ ¡|ùÖø‰½æ Nz#[c®ò±JÓdtQ…6­±¹öp¯þ)X)8-‚(p2Ú†§´Óºûup={¥ÝiÚ׳¢ñdì}Ãx[»Ø‹“ññ¨ËB'¶"_ÒèZ‚^·â4àžúýàF{÷·¦ËôuÂ'±u —1没)›@ l,Ëó¨.o¦ÓöxŠ€!­³?c£M^8¢úñÐ…K϶΂‘~äÍJTtWaTÐb´¨Á°kj½:‚`؃ਘ*\DΉΓ„ÈÍð? È3r&,%íiF“º÷dFm¯D±Ð’:Ǩ•ÜÛg.€q À/ jgMeLzë3)¼²¸aÂZh h5( ÔL^]Çh}9†LÉžëfKâá¸I=ü]2œ ŒíA–Z˜M 拉Ÿ Û§Hu@–ˉÿó ǸD á‹«.u̧Œn,Ub!Vö˜¼÷Ï|$ï./S×Ïü·<×åm’r;‹©ŽUÆêØì­6BÚ-«¤ôDŽæýðÅ]¸°¦ÑÑ[^0ñ©Çlœí›n X8¦Ì¥­äª£iöfÿ´½ Ë úé÷íAþa…ê6X™L‰”oZGöæ$´0x+D^vÀU€èà¡ÉY^’–Ö‹­õÇL+F»Ã­†731®fSx€m‹×ª©…ôϳ§øA«ð@‡ó†Yy1 {þ£*[h®ì™6•Ju܃–à€š‡ª dnhÔ—eÉ#͇¶ùœõYB_Ù†3‹ƒ Ú•Áö[ÖÃ…s¹ˆTßWÄ¡þaÕÒæ ´ƒG­ODT¸Æ²º hÁÀ¦U0Ün´(u´RLÃR:J¿XýZB ¢-åÍÓeJ€ò®Ð@óÐÓsåÆä\þ³(æŸýžˆñ/“uä4™ß~/†ª7 ^•6§D È !ðh˜Á»aía ÏBx܃2¼}У“¯¥!±ò¶¥ùȤˆ<ÖË_­˜·’ø. ïpÒôx.FéÝó^ûÛ›ÇåÉ Å'Gywè^'#g:%ý|íÅÕ븬Ÿ¡ÊE¦ð”š¬S%óœiÚˆ};VEßq/¾ôŸf©kÆîéJî á]1õÒNñôw#⤢ˆ§`1m@ŽîþÑ#®eY«î^HùááÚKØpøùö¯Ë꼳鎈gÖëöè ®å¾öJR)E|OÄRX ðFƒ³Ÿ†)¥úWj3íiZÌÍ¥ExUEWÃLÕýðT\º#‘9>V2Š ¦Y`|d»2sŠ]ò}Ö"55šTØ×ò#`ª:AëˆLŸPM\ÙC… «ìÂí@¿ûµB‹ºñ£§«cã\SÁ{æ6e~ŒDF¸ð5Ý»P“F£½»¡F,q |à®ü.}-ê½tZx½;Sñè=•]Ç’Ý9ÀbyĪ•èYý¤^Úî–_¬½ZÆ[§¹] æó4Ñãf19–ƒ EËÄÐŃí§~LØØ†–vÍùÂÝúøÉŽè«c ¼™7^AeXc¥Î¾ñPÎúîk1]u‹­Ïí´£4Lzx>g²˜<éSÒæßlµÓ?èICZ…ž’Ñ–Å¥QʱV á2ÔÈXžiÊ“ ’•‚BܨH{ɇ”¸ÒbÅD¬üôDÒ6( øþcr¡9¼çXbÿ#¸Á¬ë*Æyn·º.ò®u}¡EuÜêb{™{Úçâeò«eª  ÒzgÕ%°¹t«£C_R)»±<+C'ãsJnÅ> ¤ŒPöîÉkXwÓ)ø!«%dê¹,vÜ¡ šx1é-'[Ÿû«³Áñ©û~á·ýÔÏ»ZœˆÈÜCílw.ýA響Õ1eæãSƒ%ƒ‡n¨üúù°óÔFb²Ì̾DóÄ'ÎÌ鯦9`IÏ”É8xkê*ÿ~«Ê‚‹§ÎeýY(¶osb¶r[Þµ^Ž*y:¬s~nx}ÃÅ=g¸B Ã2‹†P¤*Õa¡È‹-„5t˼¡SÖk&:祰ÔiιƱò¬Ž?çÞE8ÛõлÿáÔ­ø$AóTîÑU¢(îm´ôÒ~€–ÖÇîîáªUÚÏwa¤"úöÐ--#cžxq»Ò/>ËtÚ¦¶ìÀiƒÙøÓÝ|YÅ[ÌciC?™D|vÐã¨íÈsåµúŒðfuÓ%¾¦mëg§v èä¤N2eŸYþÅ aÔ®ãNš‡/z }ÚQ7ø«qÄ%§ûrnþƒÂ°"½’£æ,óÂö‘êòÙ|tºf¶ͼçÎW…³9 3&ú„ÝUá]ì"÷Ë¿æ%‡ i$B<ظ5éçž+?AAº±ÀÅ <:CÄ}îŸ¬là†w¿·¸e‡Ð‰çÉ:îMþN»ãO}ZÕÞ›¬#kH“_¶MþiçÏ~¥„â?A·wÙ ~Tvº{½N=¿/}Ô{ŸÝîÎF(¢Œb1çK?¥]ZçHh€Çiùت絰Y£8òŽŠE=cC®g¼w(¸)ÿØ×Ýx‘KÊë`•+ËfYem&ª#þ%«NêAŸ4^tn‰ﺷ±áÜxîP]S0¯M¦ýƒ~ê ‹t6í4=òç=ʱ¢Z´_wÛ¶þ䢜èjœ6|Sö yAÚlSµæîæ÷×~R ¸Üð|ƒCT ñivg74y `øÏâ¦Dq:¿ç"òTàß]ï† L·Ê[J˜µS\0ª%`äëý‰ý\ô,¡•Ï[c1Ÿ?£Ý®y®P$Nõ…Ù£b˜ÙÁÃÎËyõôêÙ¾ý¡íÓÉÏ à‹•h&ìúd„úðxüÚ3rI^Úz‚0íœøÝÊdÿÀ¹ÎóâvDªdy‰ æ.|›„:KÖ!³{y«¤~V´Ìµ·Ñ´GÎBͨVš×QzŒT@jD4]¶u¶VªÎôBóäî6Ì!#×7|–UVxžEprÿ¨¶–,9ÑÕ&?¥àæXŽqƪÊYL‡wÁövwü•±ze†³d©OÏÁœ“y±Ç꘤n QxÂå°W¢Wá›™$ÖÆÅÔøæåÈWˆe§¾ïªCˆðã'þxq!t#ä}±Ë>0X0Wâ‡+èØk#祙¤¹ m¿˜snSéëÉ´p£{3Èp¢ýº½æ§ï÷ãóÆ~+܃2²1“T @Ö£ñ"æy€õ4P0£¼z?EÕ‘E *ÔfÁد!ö÷è_?;ù0:ÞJiö¬½§s™ÈæÉ ˹ÙFX¬ÅQQ-5Y)ƒëÃë÷t¢±¾‹N4†MH®éi@¡<ˆ¡qÁŸ5YÒt÷xŠ]º¼ä+íîë"uÿ>ýËY³‹/j§h©¬Û“E°?ø„%‹Î0 ±Ýç6ƘÏöÈ»ÌãÛ,Å[ÜÇtH”½6¿S!4Ñi­!gœvç“ ¢ÙQ¾²À‚oòz¨±3ÑûQ f³v5RHPxÿÞ•®Â˧Ž|ûcïÇ$Y$f zQ̘r'AœUWÂX¦Ú!!CöŽ4Vt¾+ñO ¼Ã©+ ù/Rð´ð!ÈìþZ‡!ÇQ?mU«Áû‡˜HQ_¨½þ,~è¦Õ"9ÞõçÖ¡8Ä"˜P=_ß¿!{íç¾òBô8¨þ>]ZõÙm!rh>¡J0ÂülÒ•šR[‰ëÖ¸{…MyBJã~€è—ú«" ¬Ì—0„÷n9íÔà¡isšn„Ð…H¥òw|­W$„;¬ÈSø‰ó²9|ÐwU$›NV8nÈ,¥2{Þå4lß»='¥¾Sžt°üs‡xÍ.š.–|•S³CãAÍÞILÝý}ˆÍ«•!š)¸Õ³&<ÕYÞRÓ)fÆ 3^tµSõTñÖ¼Wª„8š1ÍêN[Ô”“ƱôõÑkoÚ -w²ÄÌÀ«¾¬÷Âð†ô³b}š@øJÑ¢±Ãó§¶]oYÝs›'Nbߤñ½gò['ÝÛ* ¡/:>iÜÌ€^Aؼ%Üù¸a£X”rÚp²^XÙ‹ýœÅa¼»zPUž%تz JƒŒJA.]Œ”èÛmÊ©ÀôúQÈ7†Ä˜¢ÈÛØzîHò?ü g$µa¿s]\ ,\¼oÆbnúü´¨@zbf*;¼¯ âyQ–E»+å=ÙBó§{öe…~‡r’¬*ÎçÝúҲͼ䞅×;ª}ê·r9T˺$;Ê›×AÂó†7Fþ|ÔȹËôÎyü:oW.Ùï/0Í1K _rêç7U/úئŸ¾yÀø8ïLÿŒ'<4gœ LÁPS¬Eìj°ÿÐÕ`‚"þ+RÖnÿ®8\ÛINTFŒŸ@õ¢R–ؽôàòñÚÞ•õDêÃ)ò0nœÊ\Õ߸-ªôiˆïÜ$e<!‚¢w4¯»”h–f×wùÒw”UHÝém¶…‚û>Éö›[ewóêaöN©˜pá±ã1Y©Àž2(räD¢u(=hth¢x‚|’ÇdбKÓØ•ç·S9ϯ|töTÁ•|×Ķ›×ÉȳÊ*ñÓÖÝäèô8ŸÇöÔ,ÆòÜÒTÝ2€é†çP«Ç,*Q=†3WÄe\ÿ‘¢„¬Ž»“| ôvâj­L©9î£ è±÷)@Þ³Äåg«h¾n9 @^} Ö…±Ûó±ïR0àþŠº%ª˜Ù¶w‹‹t¬PÚ——»iñ7ñj%œ7¤Òtöš‹ qZDì&i}(ú”Ÿúåê ê¤Ï ÉøÔþÊÚ ²ÇOTfx¤¾ýŒ›­ê* 9ñºrYÿªqiܶ":{Í”¨Èy <'Œœ)…2G[áoßÍ{$l7m'§YÕFƺ ( ˜¤)‹”ßÍ™ ÐÏo"Gl£¸…XJãOšÑÄë¶ÿœ“rãñÂÔÀ6T[dÝÚzË _¬[p^Tžz!C¨Ÿw´çþ:·mh IPyp÷ÎPà&‰o`–ì? í@AXŪ ÖFŽ·Õ"x‚ÖÛ|49®ÐLpùHë³ZêAMFÖ^ÿ[i4óžýÁÈNÊ2“;µJ;ÆnŒ-+_›ËÕŸÇ.³~#¶Ç†<³wœ×w¸Ï „šƒó–ÅXj„‘ï3. <µ1˜- „©k\šðƒˆÜ÷»Ý4+Çóƒëh‡³ Mý ú0ÃÃü7 'ùú@Pà±k¿H©e?Ç!F¤qå›±õÄ·9ú¥ºû еÇÙµ÷EdJÜ+hàÌ£µrüaœ’'?RB§2ùq a×ü“ £?Ð*²_:Õ³ŽÉ7šó°+×g{9·†þÛêQçêŠåtÃÇ̪#Ê/%5–…è"B–”šÐ„¹Ào*‘wc9ô%JÞ|Šw.“|ûXà'…ÖŸ™!G@BÄ[<Ù^ŒûL•ýÙ­ NóO—œEnþ]Cñ£†dÝCì{‰¸<â— xÞO%ØÄ4è;é»]ŽÁÏææ²-xGÏÁ¥<¥á=Ô"÷SHO  Éú°ë)eóÖÊñLµÞ/äd’#zzÅÓÄX17Ť˜á<¡‡÷4½µÈqhÍ ¿è¡ÿ¦¾çO0½g¹åˆ&´ ›Eü¢c€áäz”óÕMšÆšçÏÖ—¤Ù¾³+ÚØ_ôÞ%o8×*R&‚um}Þ¹ ;Ðý-³²eœE,ȉW\ΤÆék[G´…£ª|4"ô ûLÎÀé„FRÚOߨƒyíæøüÞ:̬=†lh“ ˆ”$æ0‹ö¾‹k+ô2ß_q?Ó‰]ý8Û‘ç–ö‹xíÜجŸµóN{é€]¿Góï5”¢+%áb5wë©H u–?ËÊá¨vÅÔ=t”c#ÝÚûcY„ M( ]BIJI•Ŷ[G4ºýÃ4‚@·Ã¦TIXÙg¨ŸÕ‘ áCU;k0@¤ PDSí%ä³úÒ¼tZ«:f{ŸÒ;2˜B¨bÑn÷ÂEªúógg:”½ø§üoB‹`–1Omó,€ Ü$ 3Ç=o" ðÖAŒÅ wô‡ýu«%ƒÿ‹Ô6˜ª-éjÍòdwýJvæè«¶IóÕ‘s;[oþn ×-ݨ;½ ù#cõº†M†c²Òò"Ii‹‚¹±Tì µ*ê5Ùðô—6M¸”…ª²^7º±— ¦ï¬Ùuqj^ZÞxŒp«’òÒœÿ]±rGví‰z‚ò;Z¼¸ƒc6I¨éq´ãŽ4ûvàiñRQˆ±ô ¹¡“%}¿þðý\Ò¡¿ˆµÀ¦æóé´éþ®Ê*: a$jþ0¥vÓÿ²žélTÑ–âÓ%ó‘´#{%혨ãægžyYî¼VpUµ¤[ׯxnxk•/N2þîÞ¢MóððˆÞs:¾i €ƒC$yüMžÉ„h¯¢Jð ZÝ9ŠüÔçÅÒf•-}0M¹Ø “ÂÄA‘èLiz€òØJ ˆj7˜iôÜZÌö| w#à€!^ÝmÂ|¸bC£š¤6F¢¾—Ì¡J¤;Ú®A× æa•¶iNÎMSÛ¸zÒ§³è3$sÿ©0qáýз·§ÍCl©‘M LC-šmB¬š·~™¸NÉ›ÕX+Þ‹]7î@À25s®¸õÚž«ÔDWýPÊ’áYÛØ/là·”HDZ‚FÛeý‰ªCøÙIɉÛ]†à™KG9x0zÂ5Žyî/ޤûD«A»oVLçLD úÜ>Õ FOì…í×opß½$zR‚á¯i2Â/-FÅÕÖ¡Üy“C‚"(|O¿Pj¹ÒÓ€t Ê»¯G§"ÓÏšïã<´(3'v\93òÚTП¤J;MSg%Š,Aûøž„,p¦ÊS*Ž’'ºÏ:r9ˆéÙ©fhddOeÜ5zÃî³-+¤ða¯ûGý&ž-©ÝQ¦bgŸ ¼õ’üèïÿ #“gâbÀ4Æ{‹Âv„ݲ|™*Üòç8ÅSX@Jñ ²Yê›ú0u-ÎcDë-üIxÊò|X/ç.õ’šMÎïE?{z4ù¬G0밌֕¾Ø W6º¿žS¬(®Sá:&Œ_H·kÒ€˜²¤Lˆ¸M}ìÇÒ+¯S]~µÂm_׌¡{|×<FX}ÕeZn½Ú…Ó ³T ß뾞æ“E7(§¶k ñ|ªf™ûÂn:Þ´øƒ“@\·ø;c%fŽïÈÌHàb¿·Îyk]:ýÚjYÅã»Çôp{]1keUÛZèeá«6%½¦œÉm”»`6¯çY¸Í‹»kà®ü¥Þô =û"²ë‚2´¶“di}Òb`5™Ïæ]1¿²²áÕtHÔ±:\êNNfirnn÷Qü–ðaGò³ ×é‚¥a1–&š¤Z쥞`³ÙwÜ­Ô¾ 9Љ36S¿Ó3¡£k5¨§9ï6D Ûd”i–ù’Ùxrµ³¨PúþŽ”_Y€³€s5î.î­.œÜDì•=ïœîtÉ cjÆfë襔?%ÈŠ_r{x]WƒQÍÞè=«)d•Æ2Ú6o¯ïåž‚Hçùf¥Ü Ê&ª±cµ–ynÝE“LzÍæD“›÷„6;>TÚ»4l.ša¿:-gÆ.y5æÝ‹°V€ïQüÔØ¸ëЮ>rÓþhvoŸ£¹Rd»Ñ®Ïy»„àûX¡ñ5¯daÃpÜr:køò®¢€vïC¡Ð¨T~²zÊYÓÚÐÛ|X$Ì6dµKS¬ôk& K‡ñUØ.|ƒõ-  !¤4ÅÉ”o!µ$9ß5:͵½¬"2Ÿ³hà8ÁE·–´Ø…Ÿ©‚“«û@ƒ‘ÒLºÓù²¸Îžì[¹±=؉¼»N@’× rMxK*Ðßž <-%9j¤Ã6ãCyâý)©g¸Y‚•nŽxÐ] µ$fWöú+øHÔ(3÷Õ8P}™_®ˆ™¨¸|¬h%cÒRÖW'é‘ME[´’wwØ4÷B {LœSYÄm3Ço'KÊbyz©Q¢Œóqg¨äíO¯¨ ãõ ®ýîBð#•=%ì'Ffƒ[0? ßÉsÎtIǽ3ß9Ï1JÌ¢«: >³te°6RóþŒIzåE74`ìHõnç²>­ùÄ_gGœ“õö¸Š ÜÞŒïïgÖÞLTú„1y¡mF@3x†ë._z‘Û½¡ß¢0[”ËÈ62ö?$ß‘xÏf8÷ÔÛÑFóÆdºt¥zùBÖe³ú‡w÷]Q(Y•³]ý±Ïõ÷°Ù·®»Î¨Æ¡­­Ð¸Àµg‘þì·ÇrrsAëO,Øõ‚L½Ðfµ²ÌwW'ûf“½üÚhMÛÄEI4Š®KváÒ݃þ„=²¦ðËØzP·)çbÀ†io«Š@X&âxÊO°BÑ?~—ÚbªZžîÛ…£]¡EGƒ«ƒfÐŒ¦‡š«D¦Ãü»ü+;Ï9î™ ‘ÊéX=jŠžßÃZâØÁcþ¬CL1Ïļ¹ks”}67¯#¬Ð@8e`ˆó¦9š^î{ÍÈ”§îh¬³qwÙˆ §:ºR3“Q 1:ÙïÇ, …a|Gmn !7úK^SVXR÷ÿªÆAéѧ#émý’Ú$%tËpÝiš6´ p0ÅÁ²Õkpåp@gÝ qýcìŽéK-;Æ›èâíöʬÄ|{¼‘HÎ1µ¡¨ÞüYÑ´eŽãØÞéÒ¹ZÝXÐÜõtY²t†óðüuÙôeŽ×Á^•š×ìB x‡ûà:‚•­f:Æ¥)Ÿ =‘‘[{ú9ê˜Óð&CÒÖ³Qbn¤Rgu)ûr^ׇõU§`×7”cƒémm?á6h¿šv&w®Õ°l4ÇÊðgÄ/ÕwèÔ1.Ü6í|ÐùP/ã¢êŠƒ^ºìÏÓØ†,—ôw€þã¾™^ý¡yï /ÁSJ¤CúqÌ"W§\zŠGÁ,åšÖ*ÕÞq‚ýj?„”eüÛaκ¤”ÛŒKÂtŒôqmPðÐÒ3Q©3Û} šúdi&;Ý­i@Öx„›ðÂýô¸úw3„šDôIR¹«çUºw3XÚà‡ÌWîż: /C ~•T„àÕÒeSxa¨æbeT"Å&X^,…M{3|¿ ! p­ À(° {ª¥¾:À¿–Çfª¡ˆÁ,”$‹SðïcàÂIFj΃+MíÜÑÙ‹IÂù±Øg¼WŸ—Æ{r#NTÁúOf+‡0¾Jø¯|á3î+b2³VÎÙÒ³|ë?˵Ûd~=ÔíÙ–¿ûºd'9‰´,ìJœwð»*Ù%±å쭜Ը¿?˸mÄGÿTϘcWþ„? l)EtK]H2¶‘˜½²äÉÂÖ¹ØRâØkP¥š:~oyß~ÍÐìæð‘ÎÅÞí5öE¼ ¿ŸåqGù“;ÝŠ¹+"˾¥ðžUÇ*yF‚Ÿë‹QsÓ,Æ0»Ñ6"gÁû$½Eé‘©Ø<±Xýsèö/»ï#ùmÉìkã²Å<Þ’ ø2ïÊeÔšÏÆ–M#`Þâaò.êÈ­êÌ=kÉmS,lé£{ÈÉŸ”£»ù#÷ªÍº{ˆÛÂè÷ùÀgÕ|ØVÕ¾gŸ>•uénÚøwxÈ6Å+”ÎmDbæê«äl ?Ú}ߑ魰—€{«+¥’ê+cãÚ¦‡Õ*ŸHþcÎûâ“Öv½¹Õ™`ѹ¢«»¼Þ÷pîýw©FÝŸÏíL“´Šó$„{™·>eõþ¢‰ãxß®£d<ۥ贴£ñ­{‘ö᩽t,+Ì£â­\K™YYdìWç'u¶,h-‹w›™bÖêDïÛhåî­ˆÇVFåÛR(5@€‚•6¾2ŽÅ4hÔx¡6*y ƒäÍ"WÇ>"‰æAè©Rv5U“BÅ„’Ñí—¯Õï;¦öÛÛõ?lëôš)&ÃÑ>–¼PJ·à5f,€Í4‹³¨ûd¶^À=Ï>ˆÛ"t”÷Ç9á~ .¹Ï’* Úc ¹÷ø¼:'‡§c•ÃÀŠâè‹Å‚³(+»èÑ Î'rE¥a1Sý.À¼«ßtüi~î´2_ $F¹"E-êmT,) Q߬®GÉ—ƒga¿ÂFdó²-J Ä2ã‘rAÕ>ß í”p"1¢9 go È¥]nêÇUþãó¦IŸ ­“µuÅÕ¯xn!gW>'Qôú Ff>BP»,Ñg½ÇÐÇÓUÏ"õnËk³!ê¸MÙÜÖGÜ·‹¼Þé©ä¹JÔ¨h¹ÈãÝ=BÕ?o´)UâÛƒzç¯fµ~}UJ'»=/’p´k³ UÃà/Û\¢±†yÚ€|³aí–Ó­Y&‡ƒ@ËŸ ößô±€JÜãw{Ô»쥿íQÅ9Iÿ„¢Ó§C*åo‡]¢yÜQ,^¹k;S Ýóº–c[·°„r—ïã¹Ú»ž÷k†ÒÑÒèñõ¥§Ñ9ú¼^5sT8eâã£/„̧ðØHNBB|ŠeÏ”hÔ C_¹¿Wk›= -9”éHûSñGÐS˜LGüàwWþì‘´ ÙVv2þ±Y¼õŠŠ‚ë·Äµù?ꑃKˆ±ÿ':u¾– àL9ÞÎxV±?ÑT>@-õöð :¦ô’ýCç‰BF™´!?_sÎËmj,¦×“h “Èì—“3Ù»6 [&è/IÌ%¬Ýô¦Š=ŠwöŠP|«wõžÏýÓãcËÄY"%À8†ÚÅž¾àívíâoãûg±~ñ³ú PöYCÃãæ›QMRç” rœidu³¹’Ó¤UÑÚñæ±=g±6Ðßy{ƒ.ˆVM†vÂS(p¿õÈȃԽ¶» þE´ Z.g7îôÈŠu™êh4ºÌvõª‘pŒajö¡03“Ágž±/4¯D±Î7^’Úp?D|µ3¦?U ;¥WÆs˜yá¿!Ò†`O%h[•¡Õ0!% VDäÓ×Fâ#ÐàŒ¡NÕ q¥¾)]Á‡Æ6`ôb裠ÐÞðCøTÉ"Îb½ž˜„qFR)0’¡€÷*§ ¥5¬!Àõïu6ÝF×:ð©v÷eðÉÞÖ ËšAƒÏ†È!)€j³nj¹G:Êûf¨ï #Ö¯v¥6A^ xd‰ gc¢BÏVèg»pÄëqDø¹ÁZk bO ±úÚjB#*ïèrˆKç½ ¦´‰'éJýwCÆÊËr}È™-†Ke瓳겸õLçÝõñÄwOσ¼z¹¿ß`U·qS°>½ãOçßž™$A?6Ñia8ޝÔ]ÓwþðÑ´î{Í=›ØãYŸÄÈÚ˜EÏ"Ò²J,aV9c­‡´3û‘Ï7GN}†—=wÁ´ž¹†~Èa,zŠr·”J¡¶û¶á0sJY?LJm+§ðk Òh”¦ïö‹ø3`â¯##™,¨è`|#°îõˆÃko7gÿKX šÁ¢T—Ë:ÖëÆ"µ-ÏÊî[ DΜ –GޤwÒ½¸ï³Lf¥FüïÍL žDO<>®ÐÌ´S<ð6áÞ“}çƒ2ñ»S½n%‹ýÎÉ#lz/çS¶¯ØãðïžÍÔ(§Që"'ì…b©Çé^B@Ë[±D °äY/KŒ™Ï±nõüë¶g–ÿY@Sø“™µ|§ø Pá_¿ Ѧx’l}Y•K›1¤Ð¾J»å¢W )L‰œ÷a/?K¸pâ–™eâ éÊ÷º,=ÅyãiÓ`­ÈË6!ö ¨Ä:êY wä—©j•{”ÅL¢`µ Bl^èDfé0•7Cdý‡$šAmÃb‹;_ŽK›¢¤‘4ÂÈzh i^va~k×jü“‰öDzq¯¤µ%ùc§„ zzù¤t„'A”Q÷W¢]óÐG¬¸m²9`ߨkWàê8Œ<à”UˆˆI ߉ÃÊßÅÄuq°úÍuŒÕ®;0ÐôÃ-š’ à‹ƒ&óh»M-J½Çx!H ̵ò»:8ŸÈvÆrv#Ík´i¬ö£s«Çnj`«Ùç rë­ veÊúrœÔb4[‰3÷†ßÇ—Šjç­ß(~#"°Îµž'¸µ¾ý+¢i¾”¥q‰†¼ð"€E†b¬M}$™‡¼p¬GÒ!ñùLY€ /èÏpÜcõÀVÖ›`W¨ÕÔ¹º“kˆç¾#‹EÉ€üWÙî‰gi*+̈֬ô-ITr¦ˆ¸ ƒCøík.ÿR£Ìdzq­v;"Nü˜Î´¼²pœåh)Oé†VòtN%ð5R¶§o¼Ó/ƒªaæ¿ÃÅ.E= À(’Úl}Ž9¿T²0oÚ¢78.“I£Óe~^oæo!%?OÙTz¹5BMÊ•ëu#DÏ;wOì¼µèôÙÂÉ÷¬>ᾊÏ)ÂEôR[$Yv?–¨Žá|€0¶¡ªj 5öAbl)Æê‚N6cªæËÎ ÏÒ®Üu¸wò ÃðQl­Šô"Ê CMVÊ|ÐÿZéªåÑãžk f 1Øw•f~Œ—ÉÄ—SPd¶â¡iü%g`g‘‡0 Q‰ÝͳÉèåêå’’ý-ÖöaAlTf-µ¬ê  ?qÀcÝŸÖ7¢Ð_,’ÚT™@?ŠNHA £üW?ý]•Vìµ$Š PT~oðœ[ªÉ2Y•‘j—j÷“ [kõ“O,WGÿ àF±?œm’6MZÀpü÷ Ë:3²ÇS=Ãê¤Rïót`òZíøøª\›*À*Êœ¹i£:°çuúÀy’#x™\¿9jrGzfãU鳎Êom"¢<ù¡„:P:³p¾Ü ¡ç`,Q¼ðÑAJ¸Îe xÞŸŸ¼^q?ËeúUÅ@Ý»œ–qúçè`R­¸èô`{\jõ6c¨¢¦ºW&#ƒê “U|w`­‰FµH©£J¢›ºq5ËQ©q Eü<;m8vŠüÌûÈœ´¥AÕ7\Æ>œ`LlÎXûÖϰ›¥„ϪFZîx夻õ7!~¡GuW¯”Ÿž·ýÐ&ï4CmAfZX»·ò!r=—²¯IÉú‹|ÉÉþyÜ¡K^‘÷¼î‹:¸–·} Å' Øxá¬d0)®éY~,¾b9+‚þ*­¹.‘æ(í‰Ï‘Lç-®Û€µOÃçÛ¯¸ àï”c.Hã—ŸR (hïaºÆ§ÎÐ.!Û9ö`{é@3n0ž{Hþo ¡&c[ÿOqô1yÏ3­‚›³ÉTvå¡Y~ë’³…ˆ 1Â9x¢Ø¹Aªš1|Vÿ¬ÂaÐ ¿9[­Bjaý<ª„Þ› Õ¿eÒc:<Äqˆ1D©+lœ²Âq&/î.˜bÌdü´k°ºu?PÖEL_} Jöw;Ñüd¡Ô«Ðr@…—PÙC 6¡ù¾$ȉ¾¦67XÍ =>¥»¥| ã•åä‰v‰ëâ%£ëâiæu 9”+â›æ‡ÊJÆe¢J,(mí‰ví‰rÉŠƒJëJ#ŠþæaØ'èw$|xÏ_‡3ùü¶®)*G ÏlÝïF¤žæ!:¢§*æ÷ì‘u’ɨ….ýŒMnwm"´JW›>-X/…טFìŽQ‰b‚ý;·Å[I´k5rŸ\£Ñ dTªOlVWÁË;,R’ÑdC§o (F¡‚hdsã‹\ i âDš@¬xjbx¯hnò#¨>·7ÉÄܹŽòvVZ¹ïsb‰B*Î5#Qd>vâæ³3 Üb#V\ë=-)ìPôL±Aitîkr‘n¹h×eð®ËgãÛ!—UýqfL¡öÅðO‚lM® x·áÂ5lnR÷½n“´öºŽæzƒëÙjýnºÈÖß6m>û²!³1ëèâ³§¦Ô)\§ºà5u²º,{AšdÝ„“uD_±ôõ“U‹Èň3‘bùîºVÖ²¿Œ‘b=Ë’ZhðõµV±Ú9Ûýÿ½û÷ŽÒž‚Ž»Rcs4pb’û½^Ûo³§#ä‰<ªÅ¢HvçöæÙÃ:F¥©óz£©…?I™ß,õÙô¶ª…{nÃl7¸»#&oö6û#ák«…ˆoÊËGâI>iBí¤O‚Ž_`©1Þ8îL¡Â2ÿU0§z^ØïО,;¿1¤ ¢¥Ð¤ò¾ ”‰Ü^xžÏ1!îŒ9.˜ñäï[œ:eƒjoé(Þó+û²LÖRxú}õÛ&ëz#]BÑU–Sâès¯êL„1PX0¸2îæôk, sj{,j9ðS5¯õh¦ó*þéú¾éßÙ{Cݵó‰§òv±_·ó~üÉv 3lž­þŠ¡ˆ7®æ*tX‡%«zlT¢\–ÃYµà] ™Kj¦Kìí×Ù&tvºi‚VOìÚ ÷ž¢Ð§s5j²sè’~è-®V,â mÉÅ{¦óÃUVÈß¿"67"y/O<™æd3&`OûBXGso·*ìƒÐ õoÛ3)¶ÎD\S{ nu[ƒ¾¢’žÏPÞ‚Ua¼\ɉWW¹dB3˿ꆶ*#“f]ĥǚw»Õ=é}À7ˆ%ŸgÁ”› Ã?ûãï¢T‹<µMl©,8» -Ãn… U8wœét®ñv à%ûwBfÇŽµ ¬1ôVãæôiãÕ}Þî‚jˆ¬Èr:wrVC‡5`Ï Q %T+÷Š˜%~‰Òhïñ"AE†JXfDï_µX 1Þ|ÜÊ77ÿÍ×·‘!ñöaǶYÃCÈöÐ\UÁǺ lT—¼-Àª@×?]ƒ1þmm„aèørð ƒ%ÿCØ?@WÒ„ï¢øŽmN<ñĶ'˜Ø¶m;3±mNlÛ¶mÛÞqnæ;¿óÇ=kÝ[k¯ôîêê]oU½xžwuºÀþßN–eE·ÎÅ—Ú¨êÊ‹G7¸=51·i©ê› Ú {-hRåo&*”Wž5Z'¸„B€ 8»¸O5û“C£ƒ-õ†3H WËÿƵî]M•ÜJêµj}*4/>¥EP¡Öƒa¢tö.gYkäΜ4c¡j²p`²Ú:ó_Ÿüv…Ž: æ àPVÞp…TË'Πi&ÞÉFÀýÑk#Ÿ˜î4Ô±Ç~Ut%\3‡ãèRM›¯Åaw¯ò&RXÑ©ö¯ªö–…¨®ìYJizþþi3¦-.\h^‹*5·æ¬-+Õ·º†Ð7¬³Þhͧ`GÍý}Ö#€—6z|N3þ8ÕÎIQóGïb%‰Âbpi2y"…“m†¾‚WÁ‡4®ž>LvŠÙñ±1€bÐT ·{•žáH5Á:¬ðú{“qF噎®.š|×–©¢“6a¤è¿÷ÆÍ\™khšÍ}C ®¥1¥·Yk,-D®^pæÂgÛ`™ðé²Å|xx0c5½w³Øù¬X‘1½ž5X{²gÚ…f½¯^.¼9¢ÆA‡j&7ŸF ip›î\3a®›àŠ`d·ô;c¬Í”=×uïÜè…ðXÒT¸çã›'ÌGdÅyk˜Ó!ÿÔ^ªÃj²^sÖ^rË“¤ºí ì´“‹ö¬hÔ‡æ€ 3ìqài,]1±“$&XcgyšõÕ6È›‹d¶È'kÊ© Þ"âgaƒ¾Eɦ]…æÂýqNƒ»…æ.\øKÎ3WˆrÌbœ‹¼ áìw/a"íS¬k¢¬WVÊKž·Xí3M"s]V)-娠H‰ÝõÚî§ÝòƒŒ…=™¨’(Yf÷YγqJæ}[Ëå»ók‰zqÏÁ,0·öyH]ùꑇ`wD`ži™*bðOb&鹯 VçEÅÉ$¶fëµØ(w¶ü¨©è$;§G±èŒLbè§PFÏÝÕß2šK¶¨£²ð¡° KŽAÉØ?ß¼ÊÕ ŠW˜¾ñ%)fvcyèþàµÈc?G÷ I&~ÖE(© ‹ÜçѼ“¹Xh‘)B#À-}å)óë«ÏŽýòíäG'±› `3q}ýÅ'ú·7Ý<ÈÿÛ‰’ÛTóIÕÜ)ì—5.·=&_x_œÿO å=ÊK–|/µþD½¸•ÍPË)68ÈÇ H­5!„t~Ôû çÿÌ’àþÅF"6@Wà½sÅUÊAÀIbÝBŒ™.$*›ä]€oúH?w-V@µð®åWjœ¡<¶m.f¢~ðó5:Ratän†m1)Ìvhú çX^[sE™ã0|<Ò+Öõ¢œþç›ðxÔóé€êë<ZE&ûü „“ 5…âñêôFàÞUÜyÏÓLâQñ0G1›·QxþOQÔSoyMÆ9ÐN*ÂtÌQ©†ä³D°ìçFåþלǎƒÃ$^*Á‡­ÁïÐ+´-+t~«^‹ˆW둈EU”qçŰî·S©.,»Ðã~¢ §ÓD¼„±Öýb{9\ÈæïôéIñ*Òô+äê35Á@ÄoÞ}¶¡,âìØ¿”{êÆH®¢)Šgϰ\“›´fv²ƒ‘@D+ìµ`n›s…9ÓuäÕ«Ry^½_G=D‡$šQñ.g¨yý1q;U ¬A\\ò/!̶+÷”²4¦s“çõpÂÀçÎþ®gÐ`EëèP1ˆUN¤þUÅ¡B(£•óƒ7êÞ™f}¶ô‘Z«56”•F^œÈ?D”f<ž9ØõÔ xá¨Ù‡­t²C+jµQE¶õ­ÿiŸÆâ¯Á@k`%fÚ€®¢/J_ãúo[¥Ú¿ÿ6ÈËAŒù·‰Ù)àÛ'Tçbªõ¡D!‚Û{ UìAAïáªí_a0vé©Å>ZNìÿ.þÚ[ú&os6¬+¯'ë-Žeê"g¸GÞu¹Ï®ê«òvã ž}M\|Æs³èÖ V@CÓ×˾vÓ†…Lù‰ûV†ÚœKçñÅ3‹†jjûÙ¢!mðÏ3ª7 Àöô:ö{?%ʽ&ÞN¢nŽË£ -VŸóN’¡ÎIJZö 2ã±r¢óä+ùVëé¢CJÂï.ÌÁÁÙdt€ÀûÅNçegŠZ”¾È•.¯û’ñ­´ÍÓ  r msq+.éò–¦Ö«smœòv7=ä¹]6-³Qfî'/ytø²m¤mÅ¥IQ§ÝÎlvßBkìß³rëÓ»—&57ö,Gè.–¥¯ÖCCp¦ N2Ç€øy@å‡Ó  çDAÙÔÍ ¨+Z6°³äT5Ä×oý@¸«ªW2/+¥ 0€,HYU60²ÿD8ßlO{¨>4³±UsNóÑdZ‘üªuGeåfM¦ì«ÆÒcÍ2ûÄ;QZUáÈfRã$”rVâjòªÊ,‘¢üä¢ßa•VÝœõ‰'òU3‰,Ž!‹¶·£ýæyÎ`²Ã¥mA©^Üë⦡œöb™–ï…æ¡Qsb@Œÿ åµ}ÓånTßñÑåÁV3IúHÍA×®8m&§¨^“éªG^eXtÇÍ#´Qu¿ëük¶×ïâ&‚û%=˜mð–9¾6ûù3±ÞC©‹¤MSñ ²šwxæÐ×Ô!?u<ªWyêz5/¶ý¼h¿áù ’” T\@ÐDîK Ò´¤çÓ‚úÝÕÇÇç«a…ïº1 æk­i?9µäµƒ‚òZлéhÅ.Ò˜If^°_–Z[(6j„aßè»ò§ÝÚð­±îé8ð•ãKF…zÆ6I)qÓûÂ@mÝN *Ú™<ù¡ |d“<óÏ ¯iKö,ÉÉ /WyòСÁøy›‘ŽÇTCD5„Z;ó¡Éj< õ>‡Å ö&ÍÚEe·C™Œ9F¨5æŠÎG“*oC³Ë €¾¡ó½[ÙkÍòÔÝÌõPuáM ¥F{çj_áÃ9U¿ážSA*»0á¡0Ø2BÂóÊÂ=$™òt˵·i¨™ÑæqÐÆUƒz™ì»7@/Ýú<¥äý œªÊÌP¿ì{ת¹¨éŒHCÖÒ/½âKÛœX«8”ãΦçIjéó^ÓP!à˜x5> 'bšµð\©™±È_ëOãr lÝ\o(X¬ š—«“­ÃÉüÝçe²õ¸`~\˜ÀTømÓFv÷.)ƶcxœÑænô†ºëܧèÔ]øæå‘Ñ¥NÍ›}ÇpÁ’'[^2ÕÁ6f4×ö¼ýŽQf«íÕLÐ¥¬ê¿p4I5W‡Çpüã›2»FÃ\ÐPë|h"¿ÏÚÈD &îÑúDhÀ‚(Y9o{Ò—0Ý»yb‡»†÷žzÎÇ×j®›|=÷“‘¡†_JL~åû~¶N’ÓY¹E ðáž8:€î¥©hH5•'Jë“”.ß?ý*¾Î¸qŸ•¹)¨=’ õlë% Xªm¬ßƒ(ô.«?ý;¼ù;‹½x‡š5ÔîJý‚—¿aõÀócÇãí{Ÿ÷Æÿ¿û_Î/§×ç¾ ‰7V8Û«}q›µÓ÷̃—Ð[ʇËOp&ò,ºäLÏfƒ÷ÅïÊWk.ófŠgo³ÿ¬Ð¼Ü£<ô* ¼¾véò?ξ6«W~2Rà ˆ¢_LB°á'ÿ’s^ü%ïU´W².œp6Ï ZÛWïŽXjËYG±W³¦œ—¢!Nˆ€k½òWû—ò?œ €í”ïy„-hâ1ûÞP_r¾«I?%U=½e„¥ÅI‰Õßq3åu¹xêf{øè½õ1ÒW=â“çÐL/5q::íò‰¶ä¿»ª'Âc9ɈßÛ*iØç;K¼6Yî7ïÙ]]š>`903g~ñûË÷nÇ×GpUÏZ¤¹Q\lW— ¼™›“kaíW =191~•º-Þ“€ûpöKÂÍsC†Vbâ“}}ÈæÛw75d Ôù>Ïùª…Œ8—_|AÊv5ö‚†n³÷“ÌU§´¨Öè}÷’Uø áÝbÆ,*Þÿ¶À]-û”5ãè$ÎMÿÄ…×ù±ú©ÑÓ»aëT3ÿ“o«(Wàv eÃó½Ë j«žþÓØÓ·Ù–Žüx|{WËô¡C‰µ#†vPlu>z‚þª‡ùª×Öá)Ô, 60ÌðñÐð(ë(ŽÊyê‘?vnt¿G²ÙÖy„вq¤)н·ô¥6HßÞŸ–“vâéãšgÎ:ó ý2Qðd5ƒ* z@”Síx¿À:©O‹Ôcþ*׋›£vÓ¬ò"d»ažù¬‹ âR)'Ï:R–ç³Êï¨<ópìÛ,h8ìæ£ZÄÆøáÂWúU,~ç2nQ²ýãWˆ[•nVˆ´tu“±IBÕ¸®:Ï]Zñ‰ãx¦Ènyè¯ý×Ú4×›¦€YG?Âr}*$âú‹ªYlßçV‹u†þôÈPßEßI¿zܤÝhldQQ XߺºìÐ$F‰æ½?*9seîØ âFE†()ã#Ó\Ñ û9õ2ëó„Oõ¯mÙ«ÛtŠGYjkÆ‘šoYÜÕ>Ç·P))w<]övÖh/ý÷ÞÅ!{­%å)冼¨­hëµIõù¬¢=¡$ãHþˆ¦ˆS˜/ëÒL6ùrB'nev‰U°Ü™±)±zÉœºUÞ̯%çÇëµ`d†î¸_VÂå¥.ÚK¬¾Lþ²¿¯¥r®œ‡ìé&$wRs|*,¼'>¢;ŒfWÎSí,¾Âù”a2ì¾LøC-^>œ8‘ ô‰oß2CxøU/Þv/IÅ£öÔ>“{¾k˜yÚ"è?ziäÙÅg^8.˜ ð$žökÏN‚ȽGˆþ•g¡sKA±I3}n¢²O4ërS›p½}]ý߈Ñ@ÂÔÉ8OZ¶ßNݲ€ž"¤q¤âqŸEWî›ã©îpѬ‰e¥¥Þe:ÀeÓììšO]—‡+gñ8zå ÍŠçvqá°ÜáÚrJØWzKmÕ.+Ë-‹¬#÷ßK^3¤Ä;©Ä>µ4ÁžÓJÊç·]4(eëÜìˆpâòèlòIÆ\ı¾Uu …Ye ¾éC ªU‚ÊZK—N\ï>ºs,ijÎÞ,85ðWÀÐéè=Þž˜Ï‰"ÚIª!SW.üM€MšI×;üÏ$ãM¡,LÍF·ƒôwt½ŠËÒÃ?±ÏýîFöŃ1üɲòè.âqè"߉“ºð‡N:.ßf‹Øe^µf^V\±Ðw':˜E’êB¿}6[-±LÔ– ê¶µ6’‰·¾=;|\µ¹—ž»à¾Wv*ÉNÉ`ˆÜðL½½è Ù{tl"åÊLÉøb¿3t¤²áÎ~Ö¹6N[“®|bÕFœ²ÕB9ìHY'À+@‘ *Lųèß万ïæd ZÖÑÔþÙ„‹ˆ#jš.Ñ dt` |Ñ1‚Y#sær(¿ ¥XëÚ#I.=+s>¿»z•/€Bânã¿bkÊõ‰K íŠ~ç°çæ{3îâ—Šd4O•gÁƒwÿì>tóªr¾çŸ›ß°§—+**ĶÕ!¿ýf˜5•å“dOe*Ù~‰µw|V–@;!yO!ë•tw)§fYÑ ›Í§Í7 ¼XÝî-XSmüó™®sSòUä7ý’îbaîî§øÍNåL&Ô9ü, >y_ö£Ïí9[Ók×¥¦eÛT+[“§ïVøÞÓÓÂMÏÎï’ôÇŽÆ¥“Í«Žl×ÔÔÔŽNÃò†¢‡O×ÈÈÁÌG|ÀæMç§U0×T¶|…á¦û§ð¢FÕâG ±{æù»aÕÚß³9p»zí})œ²é›À ©ý—˜üü…ˇL\@H®Ç¼û¼ySÓ„¨œðJ}äg˜× 8Ž¥õ÷¡±oùήâÈÎØwÁ8ÄW] öße„^3'N...^åâ@¡§=ŽÇ0Ÿ Ž£°úfj5¥ã]Lª•Êf™öUcÃË÷GžÔQ~ùn(KíÚì›ÒU7nUñu½;µ=éþwóp3®É<\ULþ5¸‘cåõ5 ËÖ“kõÓùké‚[°6Là»5Ò¿\ ©h|C>ÿ²OwKÃ"¨Ç‡¢¨ïìYSŸêXÄØ$ŸÝ†ÖÍ„f L•}ØÁ'nŸXfÛ†M)£µû«Cù‹l…xmNß®Nýg=êèëâèÓñë䤌~¡Öâ­DBäÓ莽µ°ü~ádÀoF“R>¨÷¶ü“H„9÷'?ü#u™0@ˆâÃÕs¡‹PcæÂĉšXä7#¡r$òV¤&P#“Eþ ¨Ãô+—Ò¢©‰›ße¼ÚOGäÎ%>D#=’‰kǃC*ˆm/èQ|ˆmÌ›iãrªíÐ¥ŸÇsòT2Ÿòx,0ôclt‹H—–™ÿk¿ÚÙw­ ¿C:~XÕCìýØzu9ÂÊ$Z‡ø0£Â¬Å.ìý}µ¶6JYÉçs¿¿½2w+× È¡Äb¦Sõa±( ¹~š‰ÿ ú±hÈœž¹B•c‡RU²™ÿ(s;¦‘ļKÖYþúµ®“““™Ü®£ê7”¡—Ù2MdÜsoí¹ôSÁŸÝR]fUÉï×ÊaZ ‚Âyì$W’MÝöUE‰–üVÀÏã"óÓ·Ï%obƒ!@®IÔV<}+}ãeÿƒ5/ßa i€HNÜ|s¨呇¸-â{Lë©ñ½N?åY¤Éò4²â0IÊ)ŽT.m+ R»¯EZ¶Ü>hˆNúu¦‚²WÓ2~)Tgæ„(ò4rèó'¼”†°ÍIýY“yÚÞÑa£#*I¹QNà‘ØŽÚtië)´$íòo–¢Ó¾”úNEKeZH®ã˜nÿØ]߯J4¯É\þqŽVÒœª‰> u¢‹ðãCý=÷®]«ÎÎÙÖÖ¶¥¢}ãsæ2S¦hXU÷—½îË\ƒ7zÕ_ót'öú+$_åñ]çÛŒ8=[YñÓº‘xP‘­Bj/œ Ûá}ô¾Tû†Ô*¢VŒ›”T÷eBH}½ŒØÐÑÇ(‘úE‡´Â°•ÄAÌñ¦šÇà´3beÒ\ Ï•¹@È·Ìå®×qŸÁŒ§~n( ˜»_‚·\úC™ÜÇG)©ÑñF•#Ÿ-±´[YÅ[è"ÀÅŠä©A¥_åCen†ÌTã6Uöë³eNöõd5„‹á6-^‰ÆZV]gމûŸ´ö"cñÞ ]øªÂ•'‰Éæt|±Å4„Ÿgúèlc²sóš¶óêZ\ÒsJ`Qî‡Õ]| S[ggR½E€÷ÂTŸSw¨a¯_Õ^ äüŒÙÆÙÆ¢ui:ÚÒA'ë¶X‰pº—d‚>ãÖ¿äÔz׫å°qç÷r1á÷$}E›»£ïBµ}O&„ ú˜}Ê<“l¬¸:?Ç#$ôíÁPVòV?Ktk†$•žc‘îXô8h0Õ.€ö›Ò£d&K•Kp&ïÁñ•"BF(–œ²¥á!9a6|¬`¨œÏqÂUü¤ò[Dþ=kÔZa›ZUxÌ7¶ÕWi³á‘ÜÜ´‘Œ=‘=H½"î@*&âäÛÓ\õ$‰6tãðéåœë9 mló½Ë‚ˆ‰¶)V9µéÖAÛìB*îvžŠÑ´ÛØ¡rló¼%-É-•ºÌunªð§ú–•%HÌȹÅÎ)0W;«ô®îáßz?ù.Ê;œ˜À6JÖiÂÎ{/V ú%ß¾ßD9Œ4^“Ú2µ“ºJ;.V ·‚ü$Úmƒ?õ`LíR7jÄù žê«ðÁ|‡M½ùët'ÑH:pîÿÈ´bÒ)…Îd*Yøè-ùèÝ’Z<ïmª×ZmBSlû»‹©í ëññ`“ìMþ´,§3.=ÿP•s,Âåñš—<¥ lê8¸ð>9 s˜„k¹ÜÛhÇx¥iS.zUL¢7yê,ð…n– û*–¢`½ãmü¹ïƒÂÛ!òh€h‹î0ÈvÐx$Ïײ9¡Áv‘ ú‡ðUûF CD:èÈÀ"üÃo…ˆ:­(®ð—1¾¥€Â+ø6ð–œ(íêo6™8óì陦ÎéCÔ$2'eÃó.ÃÌæhÉoäÍ¡^ˆ'ó[…ÅÏ)Ö7/yrÒ>`C&ž`&r3¿rœ ö6yïáâö§…{‡üôKùþàñuæïbÌb4³’Z·µÜk…‰ÎR—ೋ¢¥#7w—^x[×´›.{iv½`¼WqÇ ^¤xß2¸Ð“mÎé)*0µN–#Çz…œ] »hÝÏ¡s¯ª“rB¸á@ØðœØPÍ)±°J{qÅ”áÖ[Lþ ÊÁ®éÛMýð.SXÛUôs¯ýO)c5ÄŽ €(Cº¤çl7£‹õ¨+H#rÇbX-7å¶Ü£âóÙ œh•%rMަ ç[×§t,(xíäÄÚá1+ὩÃϼ[vjæÊܯ²ËÌÈV 0•–°E„[áxpƒ Xn¢gÉåô!cûà°ÄfÖC‹ñ ¿²ÊvÖ8‘ØÅ~úßa~úÅJ/—·-F“ãGyåXäÛ#~ƒÃ;âù-EJš _Ó•vÕ;ô‰f–˜Ç1ªH€ÌÁ;ÿÀû«áÙÏ‹¤lh _nüÍñ¬rd†ÃmT=”$Ó´8Ø"’åW÷†_ÈY]DêNÿ‚Àö¢vŸÔk—zǤ9ðÄ\U%%%¯¾_l"ƒ´Ò•‰H³Lú«áÕÎ s- Å© ¾ÿ$>w¸FÇöÂä˜K+òʹGÕ\ƒ÷<™¹r;Ùb ð‰>F…àe«ñA4 &1ú¾Ñ—KôÊ‘ ¤Ý ƒ˜fvØ 9 ® gÀA~3Ÿ(¯>µ«tõŠÚKãt3áÖܹ4t¡!ª°ÈW{eƒ`­øUOŽ Ã]££`µ"ÍÌIQÎPŠg˜÷`€j×-×y¥FGýíæòÇÿÉXgØÑGŠRd…a¿"€s3^”ö~ƒ]‘^Ÿô™ÃèX]Ó–——¿!ÌÙ -L;F08Œ…ðõy%77~ÿ%ÞŒq$¼VcÏ%üîÇo‘¾n+HĘÐeæ\ªAÅÆÇw/‘VÍ4Êy*KDŠ´?² ‘pü8¤[nUê:g°N ÈBï¦ßó„Ù§ürk•hIŠÜÑ6ÏR¿ €¼’2à ¯Üܲ‡x\oñüýZQŒõwP:1/1ËÙï–ÇŠ¥”‘yV€gÔ9¼ßøÜQKÆÎdjh+l|dny.!€GåÁƒcôÍ{“fè••Ê£m£µ³‡úË)Yl0ûßÏP%ÉM¦wfBbòõü5‘äTô/âƒÕWzCÛÌ9¢‘Òø~bh±¡_òáÈùÿ’‹ïþ1êe¥ã—vÍiæÌ†œm«¯¥·¨í’ÂYñÔèƒæÛâˆßÏÈ™lD“Ÿ$`,³¤`×SºêSÏJB³Ë,¶b¶ÒgTâ(Üu09¬0ÌVQóaÑ~ÌÔÄz8L›Ð¿Vh 2†Á•ÀdS„¬çÚ·‚õrS·L1³çàŠ =RÃØCˆlhy€"žüvÍ“Ôö Ѫâ¯ò>JÑÔ £„@UðËœ¾Fˆ>t:ÊŠbc!RÃ\'Ìòsp¢ Àÿ¼Œ4Æ,ôíˆáû7ÉZê/"þ’¢Ö¶Öƒñ%emmÚöæÑŸDµî „„G P¡:!÷-Ý$Ataá~<”HêÚó¾³ÜMx‰«ýÝ”µRñ¨.­ÅùWÈ\VÑ*ðP!Äè¿‘Ã5':éõk)±À/™^°eR^]Øi™nóÂj`ˆ yE „}¹"WëŸ ãӥ䯿 4ט‘º­Äc~ £´i$ÐAÊÃE80)ç}ÝœtìôØ`¾å™Ç|ïà a\c€Cqò¹÷N0~ÀÛÿ!±ít40 žÝAîF3-'‡Ã…ÚbätÀ°ÜQ®.ÀðÀY-ÚñŸH€ŽŽ+wfmÜ& ð3ÌaÐQ0Cxn  ˜rq…£µmš³îcãú z„Ÿ.¼›iH»pŒt ™TùS™¤Æ@tÂ<„%3g˜éž“óûæ¡´Êof E²Õ k·z÷"ç^„/ìÌêËZÛ=[öΑ {¦çäXÆ"o0E×Qû¡XbO¢ýßÒÙ”JX?3È)è !÷o±lˆs„‹“£kRÿú4õ1×gž‹«rjoŠè¹y§FfØa¡Â¢–“Õ¶ˆüa6 ·‹ù­t¨¿ [p±ã&*–Y[¥;ÿæ&pñiwææ5' í`Ǩ$c÷²kíP§° Zc'•–r($àriVPž‰£ÝœÊqüg˜R?còuê¶ÞPž±‚ÜYÝ VÑl¼¡ó”2Rî˜H•œ±õ²Ñ“Ñðu¢–è· Ñ?‘“5B„¥Ð€4¿y…¶0ͺÿ0˜ú½;'€V€ åf¹éâ2¤ÚŠI•Ù˜>Q–Ž°Þ˜…&–!"Ï5îQSy¸@`3t•0ô5â·MSË N)ÑQê ¢¨¿‚#È4„œ—]ª> dÛ@£8þRÜ~-Z£µ> CQkÜ?„%ØôÏ.QŒ~y›×ÛK­Û“T·zó¯ÄôÚIUl™ øoLZ(h$ŒaA5X Ù£ÜÄOr.¬Ø8 h&Å¿À‰Œ°»æÊÁùìb@]^N6ä±A~ e nèKŽ~FŽz À2¡¬Á8›/ %ŠÏérG+œ”³ã•s&¸°C8œsoŒD0"oí†èõ`)¼=íÊD¼ñ$"ƒ£«ÐmR€&ˆÇ_ ”jÓjuQ¨JØZH+åa ,e²ösd@B.^Íá¸h6ȤïkëçÕõ4Ÿ×¸!VG‹ò-žÖg‹Z”áo£ Vðíì¨2·t7­§Gç£ËÊ>‘ª×ñÊ¡ƒà`ß­'$À`öPGQ±Ó‰Ý×ÚÅè#¤Èp_¢š P2!bëÈ—æ"Íöí:õ‚Èÿ.‹Z4“ñÂû‚uGC(Éj'éËSYÌ2¸(÷¿¹¯Ó-ò;üvÙ@Î_`ô®²V ç-4* pãœô €€™5éø’Ñ åcU&|–Š©ÉWgÚ`£¡8fP0?íàû×™å©ipš±‡ÍW‰×Åà‹Œë9¦N:Añ°¹ìBæ÷÷­P‡ŽG6îI›V˜/Ôí|·x¼ÖM/H<.¥Î8ýA—;¦\]µˆ$T8?ü]®h¸8U¯x¼Ú™£%(Zeøp’ VaRgƒã¿ÿ ‚?ë9>Öø³’8•KÜÊКIŠ‚ ÍÜŒ¤ý‹c1DÄ Ûf@04üw;]\‚KXCÚ‘ ð–WLB+*ô[ ž‘}_N'c퉲 †Zá¡m¦®E×ý3¼_à†unG rîÍØÐ,Ô•™å’n»W ¬ˆÐ "\n£ Ò ·µ–©Âu-¼o,õìF~NqRÐûSvî ¹ £ÆÁÝ9^TOŠ/Ó—Þ«câKˆ6y£„”oøðȸC&8tΤÉNWýáÍñík…«u ¡;w­9U¿ô71·R- _ˆ¼Î;àýdίrc †›f ©šfc¨^ Àéøµ%¿×_š6ÏaÃwúÇaÚÝûW;h†‹—÷ÒIÆïo6žEŽxi;¿Ý¯ÙíÐ@$"å g„{&ûyzå@³‹L«³Âa+Ýø}ï¶¡úž¨+òî‚®D”ÝýÓãa=p~ÿà“Õ¸ÔØ!% 1po„J gŠñi³ÿ4U™ûn)•í\zWFW­´É'þÓÕ áÇå"?e´„ýoŒ·®aÔÅ'OVf]ŽåÚºÂ(œ…1 Ö–£= š¬צӬÂk•¿¶¶&GQ˜_=§ <ñ˜ü 'ä.Tñ=ƒ^ô«=ùw¡ý8 ~;Øý…`"ƒ0ZBî(7Âéydó~íB×4«Õ]:ýæS7AüQ‹ù1æ+ïЯž9¦ÖÖ»<ÙÅd€~Ïúsë•qHÐKÇ…ˆêuü:OëˆûgÊ&ÙAýÕúJ?4É}„Ò¹nµ‡M¢$´jމÚ5mö×ËÜ)ÖPõ$ºš`|µ¯všQÊà¨ïÅÞs×#áŸÌ êH€ºÝÌÙ$Ø€Ý:”ëJú"ËwD7ã¼DOíãuið®p|KxžØIè0ìõ‡à.¢Éâã?*5Õhв뮘`ng“6‚¤Jl è@ë[P °nŠûml+÷§cÿ 0äD´Ãè¾Ë[Öë2´Éø šÅ¬zAi tõ",8ºŸÚq Š Ђ$tÙ‡Ðmš eÿšîç€{¾á$Z¥ÒçÁëöš6N{ƒb §p2RSkšÝÏ^[+¡KzXóÔ~[ÖUÊ4ª+)ý41y‘\“µÜ-M®W³üÙÈ%QB×€uüÈìíS§ ”k¦SÆ+Óo ¢Œ:š*r §j³ƒËc‹óåâÂÇúórãöÍÇ”…¬n 8é0fìhJQ"~ _°é¦î®¤nÅÁî1üN:½´Yë‹Q9ý4®‘-3%â‘MážxzÖ/U1û^_ýg¼6.e«%I\g/Ú9ñB§e8°ÖÈÿD‹ïF õ"šŠÃ\•.9ÚÇ–ÍÇÛð¼Äû¡uæeR@“¥¬ÇÈrÎ[º \à½â±ÝÄ&ÝþA¡ÄéIQ[Èü³¥w4u‰·¯•qêÆí¿âp¡}ÞÖKûTÚ°$Ê„kœ}Î=}—Bw¿HÝH3»µ€Ü|h¿ôu2>W.xÍi•„³êKódñT5ßVãÎÿÄ# õKºF¤‡eQÊÂJ%9ñV­ˆdÉPf¯×JÿÈpó0…s᪸ëÈ×ãj¶j½q÷ª.ÿ(›è“ú “9‡å.%Ùj“Œ9€c­G‘¨»Ã®¡µR¬”ÅCÉ¿ìÛ¨ûÙ‚˜ã!G›(ÑÓŸ‰©|â…ÚpĺgùYªnÙ÷W‹.y¬À¥mÃkcy9…#šuåXÜ@‡Ê×Bô(=bÀ¿ˆAL"9ûHM‡³Ñ%‘n™wýGG¦¤e°ù)@늋P©µ[Á¿U4Õ=.ùÔÑ\lŒ-‹®Eó™\LH8QlKcÍ¼Ý PÌSš Afi½÷©Q?†”¨¦P¢ä®Ä8x¾I‹ß´ê) <íZä42ßœãz‚åó{Ø9ì¸DKÎ ÝÒÕb«AOÑùfTžý½§Z¿skìfåG†>"¸#¤À†¡TÛŸu6Ÿ%/œç‘Øl¼i¿ª#·°°ˆÇCãÈxQ¦"bjH)”2`ÂÄ1Öp—=Š•ñ%%}èóå–Qÿ Í`“œ”ÙÖ+Þrp=pJfÇœ¦öý>±ûŸ¹í÷šgë’³¿®1WÑÕÇAåäÙdðd=¯4VÜîï@„dT”NâåFcQãó!Ï£õÕIV‹5=îÞÅ]¨(BöÜ «cYBýX¼.³ã°ŽN:<{¯4u-%w ŵ:µoDZ×y½í ÜUÏVUOêÄÉ­O®¢2¨—£æçÆç÷M O¸÷Û<¶ãËß·­BöûÐâÇöE·_Y4ŸU†Rq“_¶ÌO@ÐaëÁEŸ<öà»töYù*ʆÆ~嬋‡&ú\ŸÇ÷ó ñ*1ë4wˆ–~iîˆí¿×o­^42Þh‚u·å%!ù ƒC  ³øXb×ݽou=˜«œñ/üÈ1©;iÚ™ÏZ=pÈ›ÁNÿLy¡Ø‹ßÓ=E0”ºN[a\\U)ki;93¼O­¼­òÑâ›Ê˺_õú¨÷øÇBá µhÑùª>fËFÉnvø.Y4S^©Wr/!ЮÐ-]¬„W©¡þ£œ áO¥¦H@ô†î+w%+íÿþ´+6d¿ºU¯ûq7~÷#×±EÁçöâd@ +¹‹ßI(wr‹;óó¼Ãd;×w§µrµÃ%¸ ÆHÞasaWvMl3hã"iäo‰Mªgj[ËâÚž·òV?ÂÆû½~‘wGµuÛâÑ0ßí°£v²WØùÎQ•gÒYv{ ïÒ¤NÆÃÖ=ç‘)6£ÿƒÏ{Ï °¨ÑšÙÿ}ö ¸uŸ¹•éOå¿#€ÊŒ‚ÏËÿRy‡?·2°æômο:*ºØs ¿S=ò~¥^ã«§Á* @v@{ë˜õ’Pq ”ð ¿»&Ú²П¹%/]/,Síëkƒ†²ËK»‘ӌŠªùzÝäE€‹±˜:ió<¦,¤œµîZñÖ@õ¥žÒ¬hkÁ|„Hòøµî‡×eOàƒÀ†REBO>V¤7wµT°„ðxù¹x¸Œ"3µÛ]óÑÖWdMUÙŽÚšSV)PSˆt›:åǪ]œ”¢ªr_e™vYw]îj‹÷›$Àp¼–æ¬d€3wÙ£ë1 ~K9v¥ùA»É×oŠè9…5e¼)Kãm­ÃA{ #‰,Y(ãÝ ó¹†;ê§ð¥˜*Î)íØ×‹•FÚ.H—øÉ¿ØÚúΤlËÂa?.©(!^Cfç&0›ääˆèõÔyÚß`ÁÕàFeõ ‘µ7O<8ývJ7.,ØG¨`¸[ ˆ0ø¥¤¾äß1ÿþRNT nXìêÐ4mÂÉ‹ 9~[xÞîó Ÿ#‚Ý×à8ÊÉpEôÊÅÙ?å6´âÀF䃇¬ëâJ ˜À>û(£öšyþË Göú^‚Üû~<ª!}”IPm½ÖhýÜ0Âqó*“› Èù#<çKh²~"}®ÉðËÔÆŸ…Òs'&Xƒ°4ÕrA –´©’{dÕù̘Xz+•p¹©Ií× 2b  ÎoÁžËí6¹} øw2ÄÚÉÖ£mòÝÁìø[=¤Ù¥ü1+¢ÀôÆ2\£ê$áÚó­Sç<æA·=;‘{ñÛ-ki$}@8®ðK5eiW¢ÊöÂå"*«‰Ùê§ÛB¶ÇNÒ7o[é~ÌöX~ÓPÃvõH¢Ö*ÕjÎQYª¼éù?ÑÚšë°œòÜ£¥9i­¢Á8Ñ‹jñV¯ª£D¬R¡HùÈý}7O£î¥C¼QjÙ¹ƒ'êBä÷€v)ݶ•Èj™&úuš¤sÜߪ TýC‹³0bý™c“Kœ•rc‰ÆÔ¦î„Je„ÑS„çöÌØŽ:›SË•¼nrâV±Paž¥?’î©°ÜQò õ§T¿²Ä,S,"­&kðN,µ“¨ºÅ—÷†Šþ<=ƒÌqºáweYî*ðÔ83b$‰örK™$±_ÖTŽƒâ–*+.ÄfußêB. \á0¦ýhŽ^àSIJ{fØZòÞGGªS‹gÛû°)ã_&;(ø-Ȫ> Çš{JQ0}ÒÎ) zè“@¤ƒSW&²pJÒgtƒ¤ºSb*䩽ÒY•nW*Ç´´cÃQ¸ ÔÐ;w¡£‡Õ(—µ9¸+ÊýgÈùyQ†%Oíþ+BYóq©-JByÔ”^6rfqOý‹3sEUT”ÿ•íxC'Jºÿì[n¸W…wý¶:s¢Ùr}œönO­&ã@ÝP¸…v[§ðx3]ZUÕscnà6e[Kʆ)ÊÐÒÖ´¡²]ºœ13×.0Rˆ±õ¿Þ{v«ÈZôX”m§Rt¢k)÷XáØ7ÀºG¶•Úéh£žšèhUk@DŠ¡‰ü¤N*RKaÁŒ*P˯Ü3 ýЦ’ÓN 19ÙDÓ¦Goדtɬl°:ì%Š£ËN¹¶ð×áY™=1ÆUZ¦t5i\ˆ×¨MÄ¼Ò g/[öHÿÕœÓÒ”#£ÏT÷^iÒ|ÿ9Ô€Ç ”“nRì¯,ë˜ §°Ö×%ãO—@lìEW¦¹öT{ì‘ôåOìªKÕ>òŽ1fS¸À¥C¬ëio'é°õ뀕¶´×7âzÑÆBõ—†ÿ4Ñ!ßô4©éH¨o x½w–5[˜i¬—ÒnëlørNjnù6Ñqè·1z£ʲºÒíW¨WÎÞXåÞäJo»5û#ŠD¦¹gE®ú#ã£!Ú>ÕƘ‹Tœ4%ê0`¯ðnC,˜§YyS o„ƒH‡‰¯Ò—éýx«qY2/ÍN#R!ý’#†Ö½ÖK e¯Hï+yŸö[ Ü8ñ`þÊúo§¦Ûµ»¨ 4/)Â.&“å`5#¿% h%Õkë)é’l rê”0ØO ru¹‘z$«CµÃqˆó¹‘öd½íQkçí -„%Ç1ï!Å>²~µp)ÒÄõØ ºH¡×„ˆ6ĨPišÌ"îiˆÏ¯G—OÜp«Ú÷ü^×õ‚ëê}u€ÚõíôÊmP„Ó<Û/3ÀÀ "pãKÄù$lMïϾ ­›i&é#ÇÛ ˜aÜñó#½BcûºgŽÆw„“ºBÒÏ\êžýFté>†NJܯoÞ,˜ ò¿êZAP"y+'TŽßÇP8ºdFèà…Ì./·[ôç_=_°p†˜j¥m»bgo®XÂÂ"„ c\" „÷ŸxïßHvù:qm$ˆ¹ŠbN®Í½DÍ8ÌtPD#)–RRâ¨-óÃ$¿¸’»i4¢RPùÖ‚‘ôÎáÆY&M _S‡^}˜7qÊP¥ÏýÑÎOLm_M]Ú œ(¨Ð˜£rꌕäú±‰ò;Ó)×îÞw\Ç[ÐY€•[QŽICôúÄ;_ý…‹ç9pKgÜârg’fÀÝ[µEË@’¢4c„Úêµr=dÕ Ó\)J©u—ëÆå1 Ë©&’H· pÅé¡¢¡"…Ø“2K¨BVµˆ° udû:rÃøÈÐT/¹ uz€’9ÔÂ2IÒÁCjñõq0Õho…ªï–†l"°« GêMó£g¹þÑ0n˜{h×QÀc«º·¯Û¿åo(ë ·ÚñQ"¢ßP҇ÿã]ÞÝçXóÏ£9n'ºï…ý¬˜+Ë$À¦æ+.â 2qmS¢¸T§/[õey¬±…FxôªáÞ‰¨Z^c‰9k ’'逺Ýs‹T-qϦ.ðNϦຩä-\t‚úE÷©B6£¿AÒ1­o3÷Î_Á_ÏÌÍÌ£}ßOÊݹ¤ µcq/ª£,¹·uÄ)ýBµz´)ÄkãcârJ¢Vóm”9wv¨¨âÍÜNQgš@öDx°yºHÓ¿«}¡ü8PV[,3H”Ó©ˆ i= à¤÷k؎د,Ëâ†H†Ñ •×6É]½$ݦ〈pµÊ½iZ¸ ê0vâa“íää!þ˜{ðu}% Šà!?­cxà}Õ‹>f‹»êðeN§å8 ôØE¥ò$f¦—qg»ãà ³I EÞ•7ñ€NŒùÎx½;'†™ö‚µHeCE'šz¢Q:1g”M`ÂZ"ñ˜$Z¸Ì ÕùøFÇ\é)X™ê]8t¢µä†]¶M3ƒëÔY£Û)3ë^ˆ†ç+›ÓbÂjìíŠáowêéSí˜ó¾gZâ×Sþ÷ê6L(yéMòæ´‚äÉ„,“§É8M¥³ÞJ’4T`( Ÿc:U§ ÷ n‹³¹¶ýf¹^Cºl²B4Ü{…ø `+U·…4"m³ iÿ¾Xu•#s´¿àgßÒ·¶ì2É\ÙÎÉ‹gØE͵…ȤÎK§ÎÄ\S½åD\dB¥ ß­3UÁÕx^ÙN?¸2Ùü¥š]oAŠª F–½ÃÑM\æ‰ÃÞ½¹îŒXÒp—ÎÝuq$7 Ebÿ\¡C€¤ÐêòTžnÌÂþÔÏlˆŽðö_p®ëɸ·½½–ØDÚщźF®Ökì´ÂÇ­¨«» òI‰¾§˜ htŸæâKxhg!¥mžÑk|ê6Œ:†”÷è~̤?ˆõHe7¿_ÜœNg¯›Xà¦âwv‡`‚±º°N*Q®¨ŠSÅzlØíXž~׿Î_àÅr4‰£8ÌÚO°O§'Ͷ›”zoö )âëü¸\HW}ßä„YÊö³·™W=žfHáBðs?q7ì­ÃÌíSl5þ=izã%““ÓòØü5M¨úÁ=tgúè8Ç`ù*mrªw¬+䄉jWÅêhÒfkj]{À©4Ï \Gé=ÔzºkÒuøüO>œë±YNowvØñ¨úˆ§¸äá:®=Ÿ ©äfì‚©ÎÌ5ø­ªÎÇ–àŠ¬î¦ýÂÊó™ÐOg2zT–ö“–º # / b¡®_Cv‘H‰ I˜äNox4¡Óë¶Zi6)–ÍÜnqV{&Ç*ù;kÓßV¾gi,&W¨”Á˜Lj؉å-]Át/©Œí3M¥§bïxìGŽd¼lbúƒcŸú~‹ÆySüš¦¤ú¬×¶!ÞÙ#ø÷‡HC´ŸÊK ÈE¾Bhw’4ä2f¯f¦lVÙrÕfw±q+~nn€Øø Ž)š,Ös³jj€e;íR ºíHwÔýï?f¶cIL >a •aV•"M°"â~^ Žü½ÉÙ1•ïeô¤éC4IÒžöPû3èoã_‰J"9ÜV\&g•ßC–¦0æàª¹ñ‘¶Üöõ^,ùðãdF÷Jµcó¥=~ýàfg+¾Äø*ü ê̵yçv*´ h{ÑKÎKæÛYg@;®vëÙý8póè%诮¡_Ûæ;<˜—6ë¿/é?b‘fË×óáØð¹¶ôñ‰8qÉ@6UÁ:dÒß¾Ù%´ØìûÉùK’­í†Ý3Ç^mGË€û¡èQ`ídt!EÉÙyï¡„ÎS¨‹«X—·`:û…Vµ¢oÚŠPèëû˜¶LKKøß¤”õ<ÂOú´(”]ìäçë’6Q{¾-®™T—–1ïKšÍ?;L²e©Ïs ˜V®CîÅŠœ·¶aôå-7®èêQ³ïx—ó>3D§1W^Õ»>Y©×[§>Ò\Sg1ÝøÖ¬½™œ|´sž?¸å5·'9^†\[–õ‰(|Ç\|šº€‡Ö?÷Y2>¶ð×Ìå#»¶€Ùˆ½ø´á9Âo¡Òá¥I´ªA!ñ3O@Ï•d“|âÉÀ½x+ª;’®½)Zð´ÑDœ“[fg62©ã‹@¢8`…³b8¡u|&ë¬ V›Ï¥ÿ ¹w3hÁµøeòëàZ“íÕ¬Wß1î:Œãã9§`…3…Ž"B›Ï„¦líÐíªâ‘ψމڙTmÑ‚Ö]Vå!Ÿq)„.ûÑݲÀÃ7ð£÷Œ ¹ÒÉfÞë}èÉÑðD¥ð 6RQÂoCM̤Ÿ¹bšø05È;j&mwãr“p†q7£jwÝ”ð]/‘Ù“ äñqðô‘ŸÃ× 4´([$@öaøãÏ1ˆÝ¢Â"q'ŽHÎYU¢(ÿ²UÚ ˜˜_–LÑîot¯T0¡î¥‚BG {&Ð?9|Òd:ëÙë,V¾ €2žEQlbÌ›jr5ÕEû¡_óAvr—Í€Cvìš[èÙ":{´g®º\6zœ‡Î–´8S+(m±¾*Ÿ­‹ÙSi¦ª:5‰¦KZO/ÞKZ»>¸ÏtOqy±©—fùSÅ~hì;uÚŽ‡Ûnžwmfù«þöG¥ §-fKÁ×TÈ̾©?ì²W-øvÚÊ’oyssf+¸ÁU˜½–š(šÒ&~wë0¾·ÕX×ùfô«“çÍ)yIïÐ* ·ƒ€°Ê ²J”ÿÖó4k2v°³›å4äšEéLÆÁÁC˜¯ÛK]|ßYßà÷~a!ˆ¦ˆIërÁL_2øZQ«êH~EÊÐ+Q‰‚­NCßh¹x“íSúF§Ã;y”ff}­ªáN–·kŸŒB6iç˜_‰Zà•èÓ#ª¡0ï3m}ü^ŸtšlZàU3iT¿¨+OÚ¹/«²nûv…òö§•„ôPüQ½x̘'ŽÝº‘§üNL©R´Íß@–²IM\¼ðë„ï8™sXŸU%J‚Qæl…âGú±™—ú‚fØ—õü|\Š!&‚&÷žÞ_Á”úåU®²™àúE.'såcÁóô?7Êî ѪéÚƒ—rv®ÎË =¯§~š ûj£Îaÿ}ÀÜs„HD¾Šy>+*qS•(“lrëÎg,öÐðñƒòs »ñ߲ѺպTHž£D®ZÐTXRåìTnlúkãâ2Úm´¨ÐPp6üJŽœÓ.«Ó…’ù™n|¯) ª{ÈÎÄ5@ íìÔæ¡;¸†"P8SßV†¿0¨~¼ÿ*‰C«Y4f£s YQ’Úñ+—#·­ÕçéÍÍ2s-‘Õ(ÄqPjã‡uù¥'qS]TI‰Iÿ¬¿âc'Þ 3‚98ùĽ05¹EV\·&Šj–¾àgîZ«×•3 'Ñ:&s-a ;ƒ.ÖFçXðΉÒb¹Tiµc;<­ÒÍYt1¨„òÙ ²ÃqËcUܘ˜^vE/Ù-†Y=Gh7¾ùø#°}Í8ÆÍ®Î%ØÇS²íÞú¿šoš{q”µ ST½Ô0t Ÿ ûäi*æ=é DØ4üêK Ìu‰×³4ß F‚$ЄÁ¢U 9š„áÆEg)°@ö ©»JÈ‚Œ$ ¡?XÚ2eLž£+†‡7˜yFTçE«ÕP>õŸ¢@)?¯4¦LXÂüªìZ°þRV\4»o=‹a邶A2¾ÓIsáýþœtË¥v%ÄäKð§9í·UùBnHíÏnŸª†%ˆ eQ´rm…ºTZÎJv)m¼¾°±ƒYޠب…Àˆíâ{ øèï-\‘E° zˆ1Í2&ó³t&^?Ž i¡‰ŠÝüfí m`÷M[¾;¬¥Ù‘g ™a-3U"$žTW9A· 5W a`ñQ·»v~`‡%†å™á@*(!ýuöÅaòK çðêsÐ.!U£Ð‡†{F ê¬щž]*¶VTm½}çÒ­›ÊZ®N,üÄU½©ëÛ† _òlT-tÉþ|Í|M9+bT Ë'B¤µƒ°¡-ÛWbkæ›ìíÓ?jŠ’ò  Ð“›c7FGº6¾„&b8v“kA½neŒDKd-ösM K…ÏJÔa'n˜ïŠ{fŠ–y•EkâOPîõÌ×_öeû65ˆ™´ˆWSárFýü h:üΚ¼Dªú£ /G…¨ëy‚@t­é‘Áó9Ä »¬wÁéÖïB‚“’lñÆíSÙÙ*>s_oõ{-eiýxª½»¿(oŒiÁ’™ NˆqLš²$2Os;>Ž6ÕI1&Kg!:r‚|AÙFxwœ©ñ…Ô¸SéOCz*ëèŒ_g‡&\¼Ø ³8¿”Àûåá›IÃæ$e_=°ZÊ7Ý þÈYÀ…&dX;~õ<½ß—/Hž¼’Ïß 9üç&eÁ´t¨#-ÛDSuÏÓEXô Ú¤‹ü<é£Ìøâr¯%0¹£‰‡‚¡â¥†éYù3RÍ3(ca+›ôBr¥9ð²Îm1bZÈÓI°¥I¥gÅ ‘µúp²$¢Ô8K®,&,ÃþLÃÙ%¿þ &Ø€ÌI­Ãôk®b'ÊÈŽ„gľÅHœ8SøÑ.Úçç¦õ‚$·=rÈÜ­ŽÐ9cNõ(… ‘-+~ZÃASkÿjÀ?‘ˆ‘Ù¾ZHù7ºçÌÕ.}¹œÚ›åÕY]ÓêËš?¹ðò8-Ǭ góþÆ c%Sב¢ËÔœæÕÊ»0WʧV>µj°µž>uW]‘1»>Í( ÕjsK½ä>ù:à8zÍj&I1çýâ ݹG•´¨~ws–:þèÚâƶÕBW"DU0Íu´Ú±>jV| ûº fßò3]¢!¡µˆ®bíòþ¸¸ŸøY‘ªDú&´Í¹Dsó\@~û'† Ë#q#Sèíº-’³™¿Ü>èFò6ÌðñR¹zš]A׳óʲ f¥Ôeí¤.Ížt%K†ŽçxY¸íþìë þ}ë!õFë¦3ìÒ•×ÁªíÌólKÞ½héI–àk[ë–r9ó3Aßç ÒþÕ¹©è6nU¥DÉ!ýþqiµØgÚyV*ûˆy¿M •9·­,Um‚(ä§– mòœ|]ÓŽ©à·a©Æ¤Ú•>ç¨ á£vííáºÑ|ÞÙÆ¦ùOíQâu*C¢tN·˜ÙbT\³>z”°Ôd#Óû˜㘋š í j=î܇ê™U‰g06‹±´¿ôÎLÕeDb_å̧Á#G²B¢[ÛE‘—é–7´‹¯ºµì8Ç¿7ßáÔ5|cµ“0áÂ[\gçžÁ&¬ÍËÒ7çÒ廄”Ó°‰³‚ÊJ øÚÉÅ´Òò ÜG›ÞãZ\/éç ’w;†×pŠøš8Ž\©gEv𶉧³°ëø¯M&õ¼ôá?NÖ7§}µ+Ÿ_ú Ÿ^\ó®tŒ3E¥¯Ýñ,ÑΘ«šÆ7›lNÂ<.æ˜séê;öö¯ª€ë,‰ÌX–øÈÃ~ë¯^˜)èÆgÑ) ÌuËÈܯ9âA¢¼²ý‚ÔbàîÊ!]¶–/h1_°b{³&ªùÛ.Ù]¥Ì!€ç6¼úðž`ŠJEçºZ×M7GHYsšº ¿¸ˆ‘/’ç/Å÷6ãExô™Ó¬ Ýô>MÏø›™ä°OfX]r¡QqÂÉç6•³dÖ]€+²ÁÓþ™Çë]ÿþ’ߊ-zY¥m$ŠG²ÂÒêâÏ<Øá÷Û ¶‘"2>¥œ—G^'™;ó\©ß%Hi%AT´^L,‡-g’ŒßCXˆ…ù"¤~ydnûR[ÝA"5 sŸŒfÆò*ç®1J¤ß¬EÀe{EËI4wã!Œ›=¦Í¼zJ„å.ª0l·Iº“uº³Zå¿’GU' gÔ=Ò!8‘BÏf}ÍÜtÇç¥DO|—Q × nü¼\asÑtÕIÆioâi—¾ï-ñx úàû+?·KIÖqèlIm¹¨Æ­ÅÌÓ@$¨I61W–îÙÿ HÀý¢|yfø£l£fj*HSë7kú×$_>d#†»æü-õÞ= ñ?T ÄHN)·W ÓƒJAå@ò’.­T*œSæ¹®lWqY"¢ÜÈP¶_ê·l§^»}nqî`"Ì>Ò3×7ç³±ø›‰”Âz§°”Èæ¬˜ÿÊÓ,ÿ™i5œšË4>´5¯®£Qq¿"×ð‡edzH‘¯ôÖË ¢N¢Ã©ÛxÙ˜^ eQÙoÍ,£`«˜K];£Šz_ï¸-ì_Ó«Ú¡ß=ÍÊ9;^µE¦òjÕê>'é.þv]Û A«Ã·æ SâˉïÄ÷v¾s[HF“LôwQ-ì4VY/G0w¦uü¬röäü±Yä¾W*±±ƒ¡Ôç—C “e¹è&S;ÑeZQ–†¯{Ò¿vbÌñ{gCwK-ñ³Ù½kìóÈ9³¿]Ǔ擒™ãÿ܉\ªáë?xª·fMWpÔKÓ6€8Ø´üUäR_!õëvýø‚CZ°gNú Dö§¨îzäC+v£f‘U ÝÇE!óú9š+‰Ö‘ôâgšæŠ…±j8«j§šªÇuç.MÎǘóÐZI|‹âÙÖÄÇïKK ê±%ÝÕHXÛSõç•m¸*!2 ·ªF=‘ˆÅÔ¾ë±OÓ+÷uÑÚ·¦(5ч€ÕH%ÑøŸ.Ó&r\ÇAÒAøkßXœ>p9(Õë=ÍP<)aZipØÓ‰ÆÌ憕‹7~UÅ+AIį$¦Úá^é–¢‹â4u;T«6qá)4xÎÆ4ß®ežévÌ®Ç\ã»Æ“,ìÐýE'6é:ä)雋#¹jªïÂX;‰n1¦š›’6\#X„ôÎáã†oð—,! b¢³V‘l}ˆqÞž0p ÄQ s)MS’™Ù‚6 ÞçâJœŠ½ë?%Î×ÁÐמåP®›nopðãwà¡¥‚ZjÒsvþPàƒf,MæE åîß#v‚0¨«)¯Ò£gÇ6aýƒe£3¿€×ƒì6›*oï¹’ªJÂt3|Þv‘` ˜˜(åïÊæÍà2ŸSãð!æ¾ µÏy"ôw/'—g:1q.¨ö3K¡¬8cÑÎ(m O3‚£tô4KëaÅ Sk×8Ϊ@×n~lÈzÂ4ßä°äcÒ^¢Àú% 9¤kÎLDì'"öx‘½Û4 < ·­êšƒÉ™V:ÎlÑùuªÖÕR‰ymuÖX”ÎÞÂPd_S¸P&á^©¯©¸:~Øî£«6Ú¯Qõ%¹Ðæ¼!µ ˆÊÒú]tÅïãöA¸…ÔIÖ?Ò Õæ¥ÀAÔ«‚ô›u7¦9U¹ùi˜Ð_ãÁ¶ý­8XPàØz‘6º‡óä˜û./Ù1ÏÚ*H[^¯æÕOò9“íÑ@1§àŽd&Î2M̨äÕ96‘„xH$ÅšÁWxך}À½×þdŸnñæO¸¡»božq_±Â~7¹^[»®ïX޵i×ÚüK¦)‰òŸ'| ?ë&fŸåÍ [†¯náfìóíî¡èlgé'FŒLƒë½ç¡jû騻zK‚‹JÑ4ù+ ±¸ ûcZüž•Óý!¸»ÝhÒËÄ×NÔ?åéÏhÎØ†GÏ©ß>ªß/QЯSXgÅ€du1»™>} ]€5ÐjÍÿVr\¨6€ÜG/É&ăY6æu $ãÔáÎKŽBöSGµ}s)Ñﳜ _˜áê%Üì<Ò¬PäéÂ)Þ:š E‹ú'Œ•Ê@Z´X ‚-‘Y³(îþð˜•öD.z2@&™”¦®)ýœÈ¦AAàÀˆ¢åø·®d‘Ã8|hÒøOv·uʧôÒç!F¹É¨ò× õCûCFL& @Œ{÷÷ šöű©õ‚¸L:Úf÷"áÍLªØ>j œÌ,¸T#‚Âe'åûÍØÞM[CiѦO†–vv¤2D¢N»'´Y“o¨@2ƒi玜0@‰?ÌÙÅû`ýt>›®sæ”4ÇDœ<€>¯0;òK}3ç©ÅOÙgÂâÙý ›ÛY[®Âƒ¿Íã%UϤÛñ‹æîYñXº–®®"uïm´Òƒä.\lN;ÿ¨//€ÕµÃÛéª$Ãn¹jÕ1ò`ë‹¡q˜À¦¾W¹Q6U|¬’ð\è$«ª5_,ߢDñº±æ ypWXÌõ/+ Dÿ|”t@ŽÉ4‡°“¥ ŸÉ˜!k•ó6ÕN“úÄP”M,Ò‘NÂT¼àú kÚÈ#.óbnOÀõ"z÷Ô8N¹ö«¾sB‡U–qð§[Zv’k´/&ë<š©’”Ã¿Ú†Ñ Z`–›š¡ù·ºáh¬)Y“¥¼ÇÃgø`Ô£®";›!‘YNMÎê¦ÆH û%FnØèá«K‡PXüR äÒªaÒʪnfÃ\8Tv{W””Èyp€#¤ñÍ d–9l@tÊš08ˆ/:ŸŸZuŠaQÂþ»sÝÐÍ—ƒ{ך¦:¦ý€~ú9£ ]”Á î7¶óÄæór¥ªªd¡$´³Åbû¿MF^¦ÉêùĦt~ay¬]õ~ mÅá!ËÍ+ò˜¤¿m±â’Øè_ň÷4—b;|ÎN8E0bÏ í›R¼üÅ”`f”!®7bÁ:"t …øßÎl{+°Þ^!R´©Vêèá|\F™?wÓ3S(´™ìý/Ïõ‘=­Ô.*6’ ê'ÍŒ5éf1¼÷"Î: ¬½O—òM2vqØ'›i«Gô'Ò¦:k®<ü±:+z&Ó7å&Û‹1žÇ~²¶?½ðf ï %z-ñ‚dÑ~ñšÇWÁWÆx¾ó#Îb¦Îiü´È&‚2Hƒµ“Öº LU¶Ïlö<Y23#¸aÖ1*HRê"‰;çœþJ©êO¾ß ¢ Ï’Ò£mód‚ɤŸÒ5ÿB}¨¿®ˆÚÜ­Ñ/i½Ñ<÷ºôª^¬W·íŠÝ³|ôðvïXb̻Ъ‰¤uÕÙìí¬³²j\:G˜yKbM½y‚\vbO× \Búà½j Û}1i}CŽ&©>bî7$R/û|¤ÆÅ]㕤ïè/MbU{»‰ûÃNOy÷çJi€A fŸ¡0 u;ySÍà•ì:Bq‹ûÈ…áÁ‚–o'0„ËOI.ãÑXÉÒø±á0_P£ÇfÁ}Ê]‚ê¶DQBj 'Ú7îdíNëR²ÉrãrŇ½ƒÛW߬hZÁ¿Æ®çò‡Y"¢sí½õ“Îê’&øƒëîaZehÂc•aMr¥UÜa²‚iÏqîæåŸ»2™½ÂF=¬Ç’q¬„íýè†ò…`€¤\ "^†1ÿõ]jE$4C-|ÞfùšnÆý&Ù0«¤XÌdKrmÌÄøœ Ò?#¿}P÷÷ãè¡:™ÌBðhÇ€·MìcÝ}t°Û–È||“ùУŸ‘ðëb”Ïj!øAV”¤0ô;‡¥ÙO ÕȲ$gøD«MÕ¹fŸw,j¢IyW†ŠR¼ OYŸ9=¦%`Z/AÓ˜W\Rht”–!VŽOÜ*¤¼ÂkáÝ0á,þæ’>Î-ÂuáÍ8eéJŠÿŒVJŽñkïÀ–ðÿïg°SNš™S%wÏ¿¤ë3ß›¡³º9y[“„Z7 ÚGkzóg>ù€à»êôH¿ÑnI^§³!#v³¸5 ÕŸ–šKP'™»|zWÊ*1@þ¼eT¾&õèÊ –åæg›§'wâïíùçæ{thírÔPIAd“AÔI"ð›Ò‘&¸,t&2àÁÏëTP€ÂÕièÛÉ1«¸ Ž ?y¼ÄöZç>0E²†@¯3uN]öix­9Ö>mlqÀÕýQ㹞`mµ\³7JëÒÊù N¶¬%Ézì–¬üò£šðCû„öÂÆ&\ÀA¿ I™ô¯‚¯7ÛÛãÃk"ïm˜¦Vå7$bo´¡%Ñ+JŠ˜16¥ßŸYa¦«Ða:¥{%ýãÉŽq“ãWc/ð|è™ ß|]“—úo>F?êeÛGŠƒÜÖÚdõ`o•%Ô{AþSÿ˜Šãc-Er²µ¶ó‰»›ûðãOþã×O¹÷ý@„_âIO6Y‡:âΖ{@°°úKáõ˜©ÕgÙ­Ã?œ¿CŠÕ3é}ß'Ì%uæ²Ø4áãGªë” ¢õƒI»Àˆ€"¿5?7ñ[¶®Îsï~h«L°ïó5ׇÕ>Ä7“l)üá'ÀÏÚ£WD—ÛtÝ®h­ÃN–­òÑóÅ€fciPÀÖsÊé"€O‘û´êt…„³=ÚsèöO.w6æà*ÍåyšNÔº«,2§É—ç7=’F'&B‰9ç­ÛÄìZjþR[ÔɂŶuhº‚¬9ÅbŠïšäâ<þôrHu33p妦%žË–öF–­y Ö^#Ël¯ËÏŠqêÙõ uítú"í£Êóô¯=Å[ýfòV:+Fõ8,îÚj]}›ßÓÆT¶Ò•öιÇß;¨µel@èâ&{^õñÈï`Üöh-’qéÆb¡=ß‹´%Œ»o 6¢LÂ<[ͽ¹G%š~™xØ ŽÐž± ‰>wW˜Fõ÷ë!dž¤xÀÊ&eÙlma_\(~™µaE°_êoбa€á…Ø4èíŸs|1DŒ Eþ"vmHdIs…Ôü(âÛg”¢¤ÔïÇI#wCôÒ¹)ü/5Š?×Ï(üX 3[#¯wɈ˜{¡r$Ô×Ùsºõcq{BmWÜYÑC¤w™¾/ˆl,zk…ÍxòbM®¸Úš§HB.ç”/¡§…¨Ò8?z'ßæ_a­=a UVÖéÍÓáqǸÚ=#— _%œ—#†¼Þl~\OÞ4-àÕeqÛ/#•´(½ŽÖÑ‹Æ3jCÃoã ›ÎxMâ„èüÊŒÁßÂ1'Ж…À2R´ƒìöæ5MÙƒSZëØ%3õ+. ™ÆÝ\©NM×\T¥qŠh4Xþ)xÀƒáH× gýf{ mÙáæ“®›£«Ð[lztzŠH m\ú-Õ\»÷»êAG'ݹçª_ ”ž}d0Áß[ÜãÆ­¸möl\/W&v›?pD#y™’Ççk¸!tlW‚ÊmgrE CE˜nÌÅ,̵gýZhaiE%%Ù.Á삜»DìŠk®A3Œý´Xa¦[ÛD,!Ö^ µj:a~ÄÈ]Ç]ý4’Ö×ÊÚjVȹÀü!Æác ]P'C‰HcI›¤H¡] hi¬.óMÞÍà~ýøÌãŸE*; “î–"Eu BÆbh§vˆ3ú›=cÅ|ðt\I¥VeßšN“ o Ûå¶qœur á¿ïpX,äµÄ íÇ•Pέ¥U éäù²£·‰„c'D§ðK,s‹N¦e‰ÔÅ[ Àøà‹E/’›£ãà>\ëÚÎÓoIoŽ3Ù:RQ°Òß&?E»¬ ê:î˜Þä”Ëj€É¹QR FUk㣈´0oû“ÉõÙPè Ž_|ƲPýÈRÖ%kµ À/âCŠs d‡¬¥ÅØe|2ÞS.XÒ·ƒô¹¬H\ØjZy IWˆø%¼wúBG¯×ƒVó]ƒ@•‰—ú•ŽM¨ôøªQ´{úX+eòøK>ëË»hÞ{«ÛíE“Ù TÉ¡d~ªH-‰fÉž€QŒD(ç=—O4¨ÛÍÄv_z™b…¶x<Y,òyLï³ q"¹t.Áx¤²ßð\ƒˆæÚ1‘ªH‰ÛŽÙSo !Èv0!Ôé•‘¬‘iZ |Áåü¢ bÁt‹d¿&D÷rS§ˆì{“KáÈ­Ùe>c<âŒÕé/#“·òÀ‡I×2ËkÜë È„tŠÆ[{.¼ª¼ð§ÒœHQ€hÞŒ,ÿ»S©nKêBÍðÊÍåŒQŸ÷àg8æW”½|Ïÿ §ð¢ç«šî…2Ìæ}‘3ùíM"¨¥™Ï ¾~ÈNø+èûx¤µÝ¿užŸð•â·tý–Û‹F½²5œò论ÑÊŠ{Z![6tÛ#a¨×eއŸ ÷Ükœóƒ£¹íö¼®:Ú->U:PŸÅˆj‘˜´2!ÌÓ3º³€û‹Û˜lú×—ClÝpraOlO¼NüŽ×!á­Á*“¥ª¾÷X§.•0üèvO~°A8’Øíÿ¨ªʃþ=÷6jå BE¡•ÉôòN Õâ!‚™ŒÝ—¢DØãv•”ˆýÀûžœæåXº5ç»&÷^#nãÀǺ)¢Ù˜ÎƒÕW4Ññc‡itÿ \íbñ'Ûåõ© ðÎÙÂ;ÏP?uÊ »( ÿ:d?Üö¾Ÿ¶ØÖ$úæ…uy£ E„ÐÊ–ö»ºkᯠp¤,DÉ›J‚€DV.µ€Eù$ûÒá^Þ’¤s~œÄl+7MdÉ£ÉÂ\zƹ§¦j›6:,¿2%þ çWü¹‡PÿCeÛd´‚§‹f*^àhˆ³é²…Žoè0j5[VþÈû……ûé \U€ÔHßNV–Øž*\™^°Fw÷Qòº”Ý/ðj‚Lý²D.Bj;ðo+PûÆË:´$.Íp;LdÑ'N­©.s‘}`ìK¼CÕ ]ÔÐÞ÷î0|²–@Ë4ÛJYe¥bÍ v4?òWyì žÖ<â¦u„C3é …²’ó…¸/:ÚduêíÍxR[¶Cñ ”ú¶¯§T$ë4ŠL¼´a{\ZÒí.v]{##%dð>›Zàg'Q•=( eœl}.VKpˆ)·wÇbPú¿ßŽ9jƒ Œ»ÈÿÞXï÷cB€G:°[/@loÃ/âû1éU¢ì®»ÿmÍ@y:Îñv»ˆÑ1 aiTn¼ž§¦J•Žð$ÿŽFÔ(4•ýaM3ÜrIÀÝ0¥s¤Lÿ]!¿‚o:²Éq9ذCZ!½œ¦E"ò.‰®PTZì3”¯ßŸO[ïå8Eþ*þ3Q¬åèÏÍ m? w ­/õzãíFc7;`[îËÆšb;"xßk§F³/*ÕÜÈݧìv>î癞¿q© %åɸ’÷{ ÒV €œt=ü¯ap€#Ÿ}uÀ½þ÷~~¿Ÿ>®¯S;èÿï(¿Ýß„ÿ«õö¿ÝvÁ{!”>W_‹Ú¹µ8#âà{¶µØÊž•q}cáîÊÅd%4ëwøÃnäë.IÂŽ Þ½¸×µýÇS*uš ð1AÃ÷U=ÇNÍPC\í9¼¯žvP6y^ÜâPg ­š·nÊ8¿¤ºt„¾;þjývêüvú`ñmä Ì8?9<îiÁ2¸Í*þ‡£sât¼ëäP¢Ù$YøXÏ®ƒãšóSWj²‹ã†¢ÌˆPóŸÜ  ¬/)@PyZáqKOœú>µµ1ÿãίÐK,cèÐæ­Ð,Ž¥Nº:'Ž›0¢œ ­±¥ÂÞ”áji§R£Ïe|ë—ód\xç0å/˜›Yô6ñömhÇ••1©sãi!Ë=£Ÿ9–æêت¹ÙNå>JF-HûšÖé£SyÀNŸwœ!Æ×«³¾lÕÄb‹»k37¼c7Õ!&+•ßø×µ¦0Ý‹„§f –lö¾” P‹--`Üë‡ÉÜ£oATMòè·N¯Lm@@þöåX<Žò°íd¸yÿCXêÞß¼z¹Î´’Q•äzî8T¥3©ó·úð<„³o…ÆE„C6ïfߨî$r3¥Â™¬ãkJÌ’¿LA:º·Ä&)z|n&‹R{ZîÅ6±#‚âÄÍÁÓq£íµfàà÷½Ö29VéÄWÇmè×30´bƒ5áí¢ÄÄc+WZ´$‰Ã © ±%Kò†žï{A,…IÛ–.%ëì7ê8·u¾z ¹æãjËŠ¶9v"±šýZpÞÁΓX˾¶pë׎e£SgŽÂÓöô͇äaþÂñ¢äæÏï±Ãu)9·ƒÝ}³ßoòùoÐá·|h±ö"gWAÿm%Çîn¸¡ñOWý"ÛùZé@0ÿé¯YööÑÌÝŸ—¯ïPâ×5—_G@NßòÒ¿‹ýñ<ê±Óåï2b4hì&ìæ ñ}…À ðÆåvžX›Ì-L[Û©šQJfU1ˆ¬ÜÁN3M±QiJš¡#«š´Me¡J[ßbÏp›¸/§!¶2çíì<ôÂ¥³‹lÅ«êÒxA½vçû7òaö–·*ÍßkÔKÑ’T}YÄM*6©‰Ç* ŸiÁ/ËÔº6‡@‡b`O<ƒ—H#TwÐ 0ÊyÃY âÉ‹¾;Ä'ùÐ3"Fž^iú-9x”3±Ù‡Š™Ä­òþ¨UÀë–²ƒÉ JwÀ¾öˆ_Ï[@Ð%þì8ûÖ7òçtÂR‚ÍZýmU‰YâJIQc£bØëe^×Íc’üÔ_#2  OØ}'Sv¼V´®8˜á™’¯Ä’ËóÕÀM€éâýRþ›7Rub“šìDdtÀÍdÂÛ#uQ{ôæú)ëæ„’ý\¤ú`‹‰ÃSÝ ŠoXä´7ÓŸ# ßJ8twIï¸(ܪ]ìÙ¤1ÛõVêŸ'‡\˜!B{¿»²£˜X¨Ìm˜>Y+å >„m@­)*•ë2¶ž}ëtþÌù‰PË_UîMïÌ“tp¥Ù°ßÊ<Úàù!Ò$ó?aÑ‘+]y@Ú´3+ÿVmÐj Ô×!”aáË8l±“sÀç{½%p°ŽÞÇ9ÿŽ¢cª"N°‹5¶êÒmäÇ> ëîúûª$A^d4Áu½4*ßBÎÔ¥ÞÑù#9ÕÕr[“×f ¡"”JQ¤ÂÔæ¸µÙ>qO Ë2µf»IQMÎmƒû®"ZÍYvbÀ˜P¿¡\¶ËŠzLýÖãXÀO¡v*>”XÆÑX°‹µâÖøÀXùe*»bm, öªŠ^XÄj±U‘t.rÁ‡%7FÏMtevÎXçm¼W< ‘ÍB?R»‹zñˆÇ¿jêW[/¾8Õ'£ÅrÎfŸò¶Ùi‰€Àôì<§ãwµÏTFuˆm×èŽé©I[óý¥xÛËV¹²˜dÝâ™à/À¶J$ÑÀóâ ×j#Âÿ:WÝæ8º›ˆ^·ŸLý›¢{¥ƒÁ2U‡LXß¶1·µ ×ÓëV–éà æ ê`ê5,¿;|ùR7x Ð)ŸµÑ-uÊ_OG‡•ö>!© ƒ‹å4ÄG_¥¯Îø²òëV¢?Wk#à|=8ÖÃeå³RQxl_ë*„ó©ŽŒ//Ë8‚ê^tËߎJß0qϰ.gx{«XVÒ ª"¸X“^‡“5WN—÷—ëãÆ¼éÂh¶4@Ö=Ÿ—ÊCSbdäEã`ÙÀšï]<Éoí¬#>[÷Ás.Th{Ú´ñqg³i¤UÑ^>NÓ˜øãÑ›•C‹Ò£[ñ$]e‰º>ÀºˆRm“¡Ü3~.èd„X=pÙ”¢nwÇ€ýÏún>Ai¼gí ªSªò¢úöRA- Í>¸ubjàÞnt ¨ÎšõSâµúŸ` ðrú:l#CŠaqJFQYÄNOl$­·.tŒòÔýòU ü¹CþÀþ¨ì†àª©+H†$ð\æ‚…y\¦8åHék¬ÿtœ1lÔоÇ;®¯ 3ÆÙ¥N–+Àè‘hr•4 BVúzž=·ûÌÏ8V•I]¡!øÖõG£Í¦Üõ™^ÕÉ‚&ÿmKò9;pÔöC|†Æ?Àê’‚òZsW´|ÚÀýÚ„g†šp9Çl|uy® WÚ÷º‰tætÚÆõFƒN^½irÉ{«õcŸ†œ‡>{Wˆl(» ˳vD,%¢ÝØ·i„Wž®IÁ"Ìbî6l¢ Ë^n²nºP”Q:¢ãØuð¯¨òè‘rs5ŸêQIþÍ齡,mr^õm%>h${ü Pˆ“0±î¥/OIå4¡eâÒÎ;`'ïî°D˜å QøKÌ&LRœV÷uüCíåFxXê½÷ïI‘¾ÔˆˆßÜÕî%Œ]Ûç±Ï>ÙO0SÔSÊ”½¸u"%îÇç·²Ëîž5Ê:b ;-4˜º¶@W“?=˯cÙ`ïÎà¶Œšs¥69ü_S¾'N¥sCÚšv²ÿž„À=Ÿà<‘¢¼‘$r± pAÿw_÷H Ƈ´I“Êõ³~Êœ¥ŽTä¨oûæ1×{§/Ÿ¬–¸XûJÑÙ»ãúUŽq倨Ž<-Õ Š»­ƒ>ïyŠš«K‰ÈŸøQÅpM¦[¢éàºÑ¥qÍOóϪ´y9ŸiLJÝJ=ÅN÷°”ú[ëXÕµ Þ"jD®@Ô3ºb6™Cì¸X(AÙ´ƒ[_’G_ïI²E1YˆIE°ª7>¬ô’ ¢#UöU¬·ÒR‚–Áaç¹´M„ϱˆVöu[l>.¨rûzÏ)â-κf<ʃsǪ$”djõ瘈vŒ„àͧ³˜³/Gi¸CߟŠÿÃ5ßÊ9­E²¥\ˆ‘wL÷]UÙ[¼VóQzY_à/šU~·Sñ‰×üû„Ö¿ðà;ªåtÑ\$Ó/Þ¥i¡¬BîZKY™©¾=žlS3ÞO¦[âχQ_™\ž;å%òž' ºT¹iÆ^«»AÛòæ26‚öŸè[®¨ì_g·íÈ„¬ëªG{œî:™+]s&›Ë°^Šš¡{"À,kà÷äŽñ7°ïÑÔL|0 »Ú·šBÌUpîÞ÷“bXŒ§‰÷ЧyþÏ3mƒ ÍÐÁÒáºrÚ{úsœžq싼¢>ÿ¬7Ç2€1ú (Óöö,TpØ%ºnì68%ù·P|în7nlÄm¨9ó›²’vK.(GÙ/È×÷ˆ^¥¨~ø‡¢ ¨ƒ<\Ub@zz¿8߇ç¯*Šn1 ,ß÷ÿñ@\!ÉÚþök¤¼ÊkúöMU\mÝâ[ çÑ=í?ÎŽnuö,Ræ’×ÀUŒ“ éï]eÇF’—qÝI,/.nêmùØÈ¼ˆ˜CãCXå\“E¸;±[E`…×\L?#8RâÅ¿pçøêtgC'RT›T¯¡fåžã(ý×–Ã;N‡ûø¹le 6C÷Ÿl`‘èî8#äàE’”OÄE©ÖThôâSævÍSÙ©!ºþWOsoçÍê$‰±k«ÙÛ7ÞÆ<,0áÈʰ¥ ¶~]?††ÚÍ›sd×ÉL[ß óm â1¸‚y}i½úÇ>ê~?“¶œ£w­Ú/’Ô¥%‰Êbö8]·ãáDy^âõ~I?Ë¢]ý×Ô,å X¡hÚ07Yu}é’]fÑUÓ܉ [øP|ü¨ÿmÅõESZ¿ÉÊìªVqNµV÷Ùt /U&Šÿ›ØÃ/JÙ”Aˆzûåœ6ö™N‡ÿ­+À)¶/õ¿ÕŠJ9üG…z`ÿÊñö@¥uÙðºú‚˜ß¯gÇî=::„ïL66¿(Õvž?›¾#]r½¥Šþ<`”ß qeðloÇËŠÚ©i4°HªEްuÈÃø?åšÂ?ß›ZÛ ·—[*åÏ{p£ßáÂ/ “J”;ŒA~\ÃgyCö忊7r±¡ˆhŒÄ­ß"LϪ“… ¥›µ*—~Ã@XÄ¿ð8ª¨è† kÈ5KKõr±3¾áÆÆ 8ñEöœp8‘;.U÷ýÞZ5¿H*ãñ[ަmš`Çrt„kž·9[‹ÀùàkœÆËÅp ©æ†-]œ *[‹mò&›ÿ€V|Yö×À_9 Göj:‹7fFè„«ÌÏæíµÈ— €·ßÑÿOŒò÷X¿ð„ùZžg¢–.ërůZ"è/&SqñÍÕqƒ™€û”žÊÙœ*§Hþï>fúÒ÷­$°B »ÔwhÁ @’áîxI—˜8M†}wyÂÍ¡V ÞR.AT_%QädÛ¢†)Ùd=X¬Å|°·½ÙÖ CÎ=yè~OŽ1$õvÚ€‰5äCXž„’­MK¸¹zÔ;pÐ=t•ƒqÏkÁõÔ 0ËüBÞl_ÊuèToʾaí7 ÌýuÇŒ¦®6™ªêˆf¼)_K—6íføßè-¤4áoRIH÷M4ÿ^”kÅ ° :½³?Ï©ÿz­°L?ëüF¯Eß´àv˜—ør»ék;vô|ñ¯¾w_,4÷†_VáF×Äžó×åë—ß¿7JD Z‡Ô„q¥=Ô]¾¤j›>V&s­œÎG®Ûn¾æi%ß`®\âr4z¯gÜSx}Hˆ7¨°öN©ôGþ¥žýƒNx)æJ¿Q7krNª‡Tú¼®³hv^iê3輿ˆ}8ÈãmÍb¥ç¼ãÍÊçÙŸì{:ÐE` Š~[wµ¾ç¨â´¼c^¬sÒRAv÷ ùEO‚«ªŠ;øŽ}.w$AmÚVz"R¤Ÿ}ÅŽ%÷ûIz¨7‡î—ç?Øq‰þ#k‹á‡4MÐy—/­ðœúêäš1¹Î@Vf–4ÕšGV!*t ‰°C¼hîkm™²2¤ŠÒn+/á@ðó«ßX©eƒœr&Ëÿ9œÿKLqx7ÏÍè Gý#¬eK cŸµ1s3˜ ö™¼9Au³É{ñ;(Zr—­n7L–·~¡¶BiÍÑ4“É”¡›ñ½ ùí}!ÃÍÕ,ûm¢ß­ÈŸ µÖÓ–­pÖ¿õ.cï:‚lâOb²Ï„"¨žËLÑKZ޼縨—*À¢æy#ìMwÿëô¼àøìE´è,þË s]ÏôÄ*9SA`ÿ“O q¦ø±Ëœi#j;;'r,rrs'5øÏfLžmˆ˜.÷ÿò–Å/¦|*o‡­_áÔÞó® Û;Vñû:Ã(Ãg%n:JÕ~Ðþů‘Nµ½@nØHƒ3(@ΟÞPX@¡ØÆ «-#°EöÐÙÈ(<¹Ó“°žDšÜPí¼ÁÕROUØèpÄ‹u`úh†~¶‚È! fˆ¦›ÍÃí=™ÚS­ ·­:’SeªÂõœ©«ÃeïN“ÊÙ[âÝÖÇ-PâT ý—a‘©ë1`ÜçÕ5­K9¶_úßù‘[Êw7‡]æ\º©B `ÓÞ aÈßý•¬PöÇÜùsèhM!̹\¼9ǽü졾öËÆÁ:2¸ð…ë”y×½‹Ë°&¸~“¨³<­ _**%·ý¨¦œ6a°yáüâ3v¢É–Ž÷9óÏ“ôíäRÚÝþïg6ÝF‹°ÒƒüÎ_ý/ .ô¬‡7í“nÓY\5÷Vâ1mn°Ù°ýH¾ç»;ÉøX𙪫Œ™ñp®Xy+”ʯD–nï-À˜:Žj¼R­©ËXW™è¿k€J Þx<òò.‹òxMåq·Ë —Ž&q3‡[`K+•Ô— ¾ôjpÉ¡†—‹‘™­[´<{V$ÈÆ‡ÔH þŒÛzÐ#b¦YAU†ˆ?÷`¾‚én5ë’Ë‘ôT?spkVS˜ŒXoÖÃ13'Ûšš.'u°#®å©û¬U/þ²ÇÍÒ:%C2"àkŠŒÊ¹‘‚t}CCÌ^|¸3mLêÔÄén âhr¿/9¥.Yw ;[áü!>+#K|škôsÌr'3Æ÷Ëù§¯/–xC^6:SGw¥íìHØ%|xAôþhÊ .SÞ’o†Ì?7ï;×ã{³XñÃF>Ye †;–m<-ÖÙÄôÊO蔨Ü|~£?Ï*S® U«~ƒõ=¾V"é¾Ö'J®'‘Ø®IäNw\ê0Ù&t!À†{ÿ»Æö¿\%€Kpò?F%ð÷‡‹æŸ…LóýO!b Ü0åuÝaÝ2èp31Áâ䆣—ÿ×vâ˲ÝÔ9«°\iŒŽÆ©Ë´|=i0b;]¯øò ü• –eÆý‡sõwl5ÖÔ_õû3ë–Ö/ÇeÆFcÜ“EÀrS®¥‚Üî›Ä#5CÇJ½±a:.ŒÑåÙܱƒC>Õ/9¶9`–Åtÿ%ð·¬<2æC ¯š< ïæbÓtÈ|öü˨-ae"-ú3c¿HØ ÙêäŠãlC7[É] tÛ£VGO.zðˆ‹\b>Ÿß¿?Î(H°¹ýOD¨È¢¼Ëãl ëâ£qlˆpës‡ØY w: [mt(hy¥úyi´b‘3Ï=Çctí)}aÒ¥0é RUQMNn9þ»ÿÕ¤¿U5î·Óÿ_ᢆOw’má¸-Åg¦Mè‹X}<'µÂ~Ý!öëËgkV}!± ä̬ˆ³/`ZVÚ_KK¥5ùÀÌœ®³/´ápóäæÐ[$l–µÞÁµ6[ðš/_úBÛÐ_Øk‰àÛPÝÏo¦MÿþÍÿ¤ýj¬òØ‘½|¤}¡ghsgÇìš¿æï+ÈóÞÓ|EX-Äþü¶˜Áßn{#¡´2:—Ç3“Yj©±:ÿMR‡P{ª#èí¸Nó?¼ž(G´¨Í¸¥/üoy@°4àî?>Lê§æúï‹èÿ-¡Í×ZË×6žÅ<Àfù¯†kRþõ8c´Üšö_ºO¬*ôf¿?Vá_Æ1äçõL¤ù€õÊ(„A„6•+©Ö?pÓ*õ‹¯•aÊáï/êÉôjXÉñ•QÎ*^ë+*…¿Ãœò_hxI ™gËõžÖ\ôÂ¥m1M•ÜùËØÙÉÉê 0\M©›vR9üOIùŸGª/:wŸ³¨³ŸñÁFÀŽAÚ•v¡ïpÁ¯žÀ6\§+ðü~î½FuZç9I›ÏìCcüÊqJ¾ü´ìò–›Ãgù¯±Ð¿týº%ßñJ¿Hã-f=HŽó£&ñjAÓkðV^ö”FlõkãZ÷W ÷(áoZ÷@!t`;_k–g…1áF¦ ³&ç1bŪJ¿È'Ö`,µëÝj}ü2ÙýPDHå;ÄQ¯¤ä¯®‚Œ û®-¬”ºÿÄ úuw,Zø¢¡ÅËáFY’Ë(TBõØáÓˆ_Öj“hêwm]_§²ù¿ü‹”õÒÙÃÀ€šLg‘p‚¨©p©kÿÒ„ä²÷ZÁI4L•ušm}¹Ñl ùàh&–ßíÿâî/ ¢zßöqt‘RîFºA¤KZ¥¤;”Αn†iîîn†f``nøÏøù~ß÷ýÅùýß³þç¬uÖa-ÐÙûÙû©û¹î뺟{ïYú:8p€ÆÅ¼/:@Êiâö ÝÏUŽŒAô³Ç"ùöäWg#ùxí² ÷M×·Î>Š“b·¶ÎwçVʾ/&T9ZaÚt&ç>õªçBWëÚ÷§¹é&E^´xŸí.ûMï8rHˆ¹+¤0¸þ-¢‚G¹zÉãP©ž\qï£ ý™Æ†Ø©çÍŸC‡Šù듸¢—2]ÄBý¦¾¯ Gª Ñ7Ý¿eª2I›‰º.Å*¦½¸ZQVÝ×ÉÇ©6ÛcÞräŠY6³A…õXåîÇíÝÚ3"üýT¦·ˆTãm»7¾í¶ôj'¾Ÿ*3Wû¤z´¸ëz µ<·Õ–ÿ;Ü„pÜïÁÔ¥xÔ¢é>¾e®r‡Éa[_ÓdddTIÞnö©ÅÚ¼ÎUªÚ $ž¬¯;ÐЉAŸæxľv”¬×¡,ïx n"*o•U „·{•e&ÜÉŸ¨ú­º¹ù-#¦ÀwÆöŸN8/µs¬hÑËîCcís;w¸¯†Ý>Óf|žÃíu#§ÁÇɉ»È[;Оúk‚Ê—ΑMèl¹ˆ®àVŸë³éBÕƒÕÖ8 ¾Q9-Ð rê™úÖÅÞßvÏ{ª9%ÔäÝD¿^d"¨|Á«,®~«7ž(Qo½óµ¢ü å3)gß³«Š8¬êGåI‰(C¾kT®/?Íi5²¿p$½µ ÕþgÉ*²æRõs õQoåí¦Ë3ûµ¶|†à¢2TР˼/ÊïêdçæFXžp³¤ôÕy=4é œÓHê6ióÂåJ ´|ëÐ|}Ë} tƒë_yƒ­Ì„ï’ŽÛï*TµœŒ‚ïTo/,„Ý-pxöO=(ÀJŸ·‰Ÿ¢½TC*½JXÖ3SVèÍA]ÁÝá¦,D§2‰]a{þ{DD„=¯‹“«ër~.½YC#\´éØ®f€¹ÆcaŸ|áb9ãõ@É¡öžÖùûÍŠq™%x¬ø¤jÌ~Bõ)—L£"o…Úa‡pÓ˜᥶µ&† °þ ²ÙEG§Æ¯Ó;ƒa……Åp¤†Ur†Üœz–„Fl+Hù°V½Æa(±µ2ãkBs3çõΚ ‰nIrŒ7¨Vî F+Ƚ·ô!Û5úbk”øN  6\[ihzBâj )‹¸Ð‘ ¯ Úl`E.…‹?ëÝÍncã¨õ˜…çÏucùòÁÆÃœÆjãØBV,'Ñ÷ó›‹3Ç`פUz¼žÅ{Âó¾{DZ>þè©“ñ²y::ïÂp€ÍåÛ×^iI±£ÌψûÇŸO¦EDšÍ7Úé¯*±É†z‰xêÏ´é´P\Î\'îÝ0ÜÚÝÊž\Æe ~…0çóʦÛñ5ûûóÔÐU•Š«îúZ$’Ð¥™ßM|&‡?‘âÄ…H•b« GZAuïJ”„ߵ5Püi³÷Tq^}¡µJÍüµÉÙÌÔåëŸÐÞ5x¡¦Óþn®šAëA³ï‘õ‘íI…ýZtõ”Ësòo-úÚÛÞæCÞÏp}Rn‡ymïu%#5sÝot£zøúª5Ëôžð¾ >´ oÿg _½_•µÓ†)½Q`¸:ñõrZ!WUA2×Z’ˆWó‡³Y¤Òy­UØÿ‹jöc:÷ø`L5rðÄbF1·¦]åîgpî¹jN»Aºt‰§ìš†çº§ß[¶o¾9ܤw7,l íkb—;¯=ä\×\›šï°¼lôþ1Wî§°ðÀ³·MŸD}Ú!3,i£ÀÏ5%%æ¼íR…¹o¡ ~Ëc·oª F-¹Óz71e–€ßkjjÆpk4ÈN}_Èø]~ä­g»º]×÷L9ÓÓ{w@íuÈŽ¸7çLdc¤êk>ª66ø§2)¤ìÏn¥7 ãõª"}ŠaxÖK°ˆ‹B¢|nàtѶ¥ÉøÏ –»Ô9?óqþö–¡ eÒ$/ ‰E‡ÉW5QÁ\¨‰ AoU€érØ,ŠV2äº ä9æÔÜfªðå5sT¡X#>Í«Þ&8í– {l8Œ—nÄöÊ·ØGŽÅ‹j/¥†ú›Üþ %‰"™f‘ÿÚýÚôør…:ùyãï3‚Oâ×î7ÏÛoÅüšH[Élï–ÍçN©î醾½_£/$ü«¿§Âr+ó{c1@øfy²÷-N‡N?},À1¬9Z²zJ-žTö%åŽJÝõÔI[$‰iüGï˜ Ç\ùºIC¿þŒz$ÑyhÒÓÑ»AƒoȆ¶îx”×,†h»;<=©–,(ê,>†ÉÌTQòï†Ö ¶›D½_–ÎÔ»¬OÇøºô6ºéVCGÕñ—SsNà±vI>•`>>ˆp¦¾ÁÄ [ï®™Ô¥ôrZŠüãÇÐ)ν¾É+´2¸- Qí׎³†tžÛ“q×m; $bÓ>ðãNU.i… á´v‘ØE? Z‰ïì¬Vjà ^€¬4’= ™CÜO[^‘UtËÚÈs(z“¯‚j4+A]ð>KWÆ(ÅW­Ý‹E݆û7ž¢Þ¶äZ*dVµO'ˆ^$]&)t`e¡i¢ ñ–Jðñ $Õ‘ÇâLBÊN„ßòÝÑdH·ÈÁh›vH·U;Z‰Ò¦µµ1,ÔÏ\T×-ƒÌ…ޝhb( ËÇÓ†º z$ÎÊ)T‰%‹cMú—éSBJ_x>åPž1x£îÉm}_PÅ%˾?3~e-)qò;sPúšÙÆGº‹8XùÔ=V"„ÔlÊ3Õ9YIéi6Š?ëx²~I“tuRÐâüYñccZ)e¦ÙÙ‘%5Jqžt­µÌhRu%ô dû™‘Ä !°*×$ª‰ ø:'þðvŽÍa‚¯·êÉEºPˆªŽ×”+Í¢ø­aA pÕ€WÓ³ºº©ŒRõ}N ÆVE9a&¥[‡ü‡Æ;ç&²Vù ôŽ*\z”ÂzøYGÏ #ÇÉ&('Oƒ=}ÌQa¸ˆÞ¯‚+ ‘–&.¾u:‰',ÖÖýCèï"®ÂмÊBA^¨XºÂñúshw°ç¿¾úªå¢¶âų(N=ÿî•}|b)Ò$WJØîÙÚ@øÓª!ÑöyF¿ÏÓY¥´Zo5#úŒo¾õpË\BRÉ Õ£ïìs¹ÃÍ¥ è3å%Ç>Mÿþc.7b "Ø·‹ŽÜñþâ ð‡% H¹8' Ô4äDU$Oz 3ý |I‘ØðŠÐ¡7 ™]YN77)<ȶi¡„pFÛÀÓˆQ¡çLvÓ•þ8çÚ–Í&d…ÔYNNnµÍfpø\ùC„3AºåŒfÃuvËZ¨Ö~òg÷v¦¤Ü/<¨ß£ˆ³ÌF¡-6µáÄW =5¹€Ñ¼Ž uo1T)ÿ=–Œt8¤…¡•Pxô"JªdiuéÛôV ýÂ~•l3˜^åj¥D{^£[:\•ÐL°8—pþU”c¨BöÀçöŠ'Úìl I£½E×J䥛<Š|ý3’w$ÏëŽ~n¬+²ì¢ü_ Âsäs’í÷à*¦¶‚ãX[/ªP Ç„”×WëæoG¾xðe¦XJIMïXžHðìÎAÍÇ>Ñ”pÓ€ÿûA|¾ïSÈ+)‘düh²ÇR‡m#ú®yi@ÒH·ß™1ó‰²v¸;Ò¼¯|}^ÿuu vçHn Ýv‰£)·ˆ_#?]u‚Ó­ÆÔÜêL%Cùбè6–ƶTß…1»eI„êÓ£Ïö ¬–Ôc¨}j[ôY‚‘ r=^Þ(”Ò‹ŸAy»u§%W¾MƒšB‘4+ @ôZ9®‰ÑÍ˰҈ z¶&Xq¥ŽnnÉY¨º[:âVa£Œ[û‰™ˆ ^M…ëI7â§'÷ãB3]–`ä¥x.«jâ‰*Oòä#UFÆG*G«‹d«fD[aõß<ßÒ© ÍUׇ"†¿ÅÞ-g(šœÐç¿q¨vݲ@¥ çb$RSþzôw‡£ ¹cþj] ÚÈ_±û2`ŠÊsüÀü×δÿ¿"ö¯.a4bá-mò ïIu£Ó7è*n~ž Š:D‘¦Éò¼{ö(Ú-ÙéS AhÐÎàmYµÍß»³ 6•9kK ÒŽ§'3Cûâ>Œå½Ç¬Kgè}Ï׺ºi×Ö%Q1Ï\’¨Únԃ쿛9·à“ªX„«K“‹ð7±®}‚³õ¸æ{úœý }wh Ñ™Qg‚9FÆ¢Áø=|N^Ë?ÃT¾€¥)CÒ…~p%99qæsñÑó“äBÜ»9ÙÕ;,IÃAr¹ôûLÎ#<;“ðÛ»mhï‡ÓºOÌ^ƒÃ#Þî'ïÔ×Þõú["u=tÙ:ÅÀ/LÆ~jçöìoöZ$Ãàí[ûùÔå5ÇWÊÔùƒt…¹Ô¹pä±´¯+BпÕSÞˆ0ªóbÈÍv'ìv¨@âµõgÓ…AiÆAŽ>BÛªäcwQ˜z—øªQCNQÎv|è;H{Ÿ Œ@Š!8~PÔòÀàl’RyïöçZ-þ2óf™†Œ””“ÉÏADVóχâè( ­„e*­Ù XDØè’ dèŸ<ÀkÌΔ1dÕ6ý!³åСqß©©ÿ.¿šeùUvì²ÂÁ»¢ý:ÆhB7¶÷’.úÔsZØF²¢•a§;KÙØ1_()›yÛ^Y¬2ŸSÎ)†/Z&;Mø ¹Øþ–ì¹ymd_\Ühƒ•êätJ’ÒWÙh4÷nf<Ù* ×c£ÈU¢º§¥Àf£tª·Ä°BféÎwL=ÓÂÝTf/#uÜê¢S4&)s«ö27‘ Á‡Pšâð±Ì ê§i"‹Š®î# f页³ÅCEàžÊBýßMšUäôx•õvt +¿M2Ÿ« ^0D"Ix–Hfz¥: ¼7*!Á`ÇSð¸ sl‘7"þM P•íCg UVÛžrk{’T„dŽ¿l×X—kˆ²Â袃=ç=ÃX%.+€wzímÖ<ˆã Á×ðÂÈ„4Ч²H‘ÖŒ"'à^ˆ÷è@l²Á–‚(“£‹-þwzR!³À<ähÏ÷[0í²‘\¼•º®Ùß|…À#Ó³-YŒo\X«‚ Ö A˜ö´+÷¬€'ìÿìIþ¦Oöpþú#½íú×Úg«¨(ðøx{S_½ÿÆãzç bín鑲^ :ñ]ÕÌ?®ôÓ›ƒÜr€Çÿ¸ÜQyËÞÞ^È+¬Ð^Í>Nö×ÂÜ×o¹é%PL¼ÞÐg^¬¡òÈ – '+…óö~t9È?">çŶ.âB˾WBb˜…¢š×Ãê$0Ñì§ûðµëN1Lä€.iWøÜœ¯í"Ì 5û]ë¯ÒodèÝH0‹e |¯"Õå¸ðzÚÉà µì÷½Ï›vÌ“›ÛŽÛ׌tÏö쥨[ƒn`öОPVÉèÞ Å+nñ”t1§í –—ÊWãgÕ´ø^—\È·Šª~¿H|tƒZ;¦ Ë"‘^+Ÿ¨xQó-íëHh»Dèô¦MÎK¯¡ñP~Ân+ök;ü>YÕýéë(ǚ럋ðC’E¢Åp¸¡GN¤=i––ã-$1ÝAû*Vöº›ˆ‰äëþ¿V [|ηx×€ÕZàZé1² 1³-ŽÏ€-#äý÷ø¬´X¾çÜ+À̼:Ѩ)úï½ÔxqÇ7n”J¨K3Þ&ȹèé[ûä¼KÔñë‹/|bR›ã­‘boyu®)ÞÆ²ÏnJÿ;7 üå¸×ûÑ­Ð…†=ݼÍÍq‚·¡{1LGI7e°®¾O#±Œgª„Ÿ¡Ónc›¾>È8 =4)‰ÌN_ü ëüË óÿ6UÙ~aAF• !Ñïâ\_·>–}ŠÉÞÛOïp‡Óà¦(Æn]]]mläB\ïϳ ²°¤îoó.$ï©o¯‰@ý—d·çOÆ;8üîN¦U?§ºJÄ=?«A8·2ññJ ª].g뮀cÝ HCžÐ}MÎk_e; }ÊœÐÐ bP„iÙrªöB„r´o’ â çª]½ÂúGv9*B‡Œ)»aŒwßh†Kõ£?• O±<Ùî®`nªˆÉ¢vånSGØN…öŒÂ¥Ç ¯³ ÿ¢ë‘ähz’±±=¥í^ˆàúå|šÖÒ"~žÔN®ŸMŒ_ÙfŒ[BܼR0Ø¢q¦ÔV>T1©Ü_Ö ^·ü`1±r_ž*vßµdÔnØjQp—Nyˆ`*žPݸ‚ÅóM)°Jj€»Íiàt%– 2`oÈ+e7t C2¬ŠÄö(†éQK.Ïã&âG >Æ,¢£–Nàa5Rlš:¿#«ÚX.ÅÇ¡T>·ýªsRÌž»Ž7<êW±Ã n¨o£8£·˜mƒ”ÒÓyß$±%3ÅäÄTö7íCc/,Jæ[®ðcöWºd»[>Ða|ûs »«œö¹?¯ëkêk§;ç+˜ ú(º2Üñ“aÓ¬Ëk…ˆØ\ÚhŠ<ô4V t`Õ¥¶’€½©?6¤ýeO!mP!ÉW7tÊK¼fØž3Wµˆ¹8ŬŕäR58øHßÔ0Úî€2³×þD›àµ1QéO±9ðôSD¥ó™'Ò>Ö ÷C¾ùyŠ`úÔeã$çh.äˆ?Bò/)[BgŠ7ðHCUû¼b*p¬Rz¾³}ºÃœmlÁÆM˰ΫgŸâØ-‡mÿP3Šz¾îö‚cj¢š·_Ùƒºµq€ßcž÷KœUiE¹h¨w£· Ïðó“ÝÝn^jÕ‚¦²Ñ ÕBÇÆ'Û<ÊkŽÞéOŸ gô^Úïܧ0Ï­Ç@Ó¦~q]~ŸÓ~­r²uúâ4¦–n ˆ&åÎ_{üÛáû]„ïW™•m‚íÓġ,X@Œø˜¸¤ŸÞŸÒÒ÷]¯ONIG?:Šêå.OaÊ:βjM¡RÃ,IŠ[ˆP·MÝ{ ÌÂÜÉOþü àË‹µ}^‹ˆda›Ç¯Ô_Í‘”½½Ê)tw÷|ΠšóÚc¡*Xª§iÐ ôÚæ™"›q’M£íí=û•¾O¡%¥bå|Îùq/V¼¬O=¸ìëèbŒ.a8¦=¾ÝðÒÔÑqgS Ç:)Ï»ôÚA†‘*Uï—x«}›³Ÿò¡"ÈNöô*¼‚¥åkÙÖ¢®nô(Øþyg^M¶ÙU;luÞiPÈÐoÓmÛf–Âèå|L[LÆ~)‹Æõ!Å!‚²HG)p,²’Ü5É•‚ÄɉšžW3 Ô"Éüñ¤Ã”¨Ç¸øN¸ÑŒs”þÙ]É÷*ž‘:Í¿ß`ò¬ÿNOa÷>¹HhšPd{CŸxï‘É4Qüé}X×ßDòs¹ýF çõ ï¾ñ~Þ(…iS<ËRÒD‡Uϼ%óFÉS¾®×ÌÏõüÐŒ~qô†ØéÏ>ƒ³òÍ…ŠþÖº"“ÉíP{=7šæ!ÅŽ_1ê½bS|‡-¾Ölç^q¦ÂH:GŸÖh €œ+Iv^s~òZ3Õ »ÃdÓŒ-Âv˜„ÍF ­Ÿà^Âd"Û6\“ª‰ëñ3þ⇋ƥ TætXðh‘÷â:7sÁøTe¹Ñ¢áÂåm jBö§óðø”=7Fl@ùÖÙão„±Àò,›˜?uŸ]b±ùçè®Ç«‡NµJW –³²ÐØ5p¿£ÂJÏy––)ýÊuÔê•Ì(ëuîëD•ãÙ·j—Š/Æ"ˆ›Q¼+Bêùe–š—Š»‰Øâ²O|© 1DYQJ8ïFØúw#÷k R§¸`VÂþbþI:€ÏW8P7žzŠ€ÆÏ¯}è†l©f2fÉÀ/|šçZ¯ˆl°M=D€¹o:n½ÞóTðrûp£’2ÛRZq©41> éÈñÍŠ;á®/Ø]ÈÉ|þ• ðu¤þ,ÿóP¦`¸xf%KS¦|“ÿv]?j³pªî‹œ•SØU°ƒ¨Ù^Ÿ ''w~L‘‘ÙŽÁ¯@Ñ…Ò“©¨œ½Æn%JªJðˆS€ 3òÂHEH“­±Ù:#âHm¡ÐC™[ã“Ùùš<þÝÏN6•žé—3ÈLk´7£ ¿" Û2)ô8(‹¼€`)‡2z ¬^×TfHl­E¬ÎÍý¼ú<Ãt0»ãU†µ‘ÄAzÉ‘ª8 •MŸ¥#¯}?v5c½äfÜwåBW “ר£MòÆÀ”)Œe~×Ïž´>—ÇC·Á~¬~ô‡ôX˜{ññk<ò_æ+›zàa}€„aÝ2Hë/wÐêk* “!¥~máú¢^å¾GSµ«ÜZÚÊ[Y{‹¸R9®ÍÓxڡͤ*Ž’4––¼ô­W&Np'CQ7¥¤¸7d¿I«†Ý‰þľïéu~Äïe 謱 R+¢… …?l-š†›ëHV—7ªUÆÀáýu„žv²Ä/âÂ˜ë µz³“2f–èGç&”‘䞃´£•©=|ôýý„´|ÞYñ@1™)¤Vñˆ{—¶Ï›ð6î=Í.þ¤k=ùâî×0– Û_úïÚªdëµp›KŒ‹'Úž¶>]œ:ÈcÏÆéŪ×Ü)t4úraa¿i—/Ç~uî!ÍtôNm†l&øØˆÉÌ ÓUËÅy5'pïxcó 5Ñ>÷\Ȉ$ÊÎë¾)V) Ì¥S{D|8³àf5iðÍõÞ-nÎðÕTª,[¤( .âîv;a§ßÊQãiº×_½ñQyêdò«¸´f9÷}¬Ç¾òêàÑÅu*îø‚É¸cÔk,¶ô5ÌøE ?øµ1fYØ G½Ïråd|lVÆ &Xj>¸ÜµrsOì–‘ú±s Iæ aæX}Ç ’ãFhô:»Z±d^géÜÖ!òîgw*é´6Šƒ«>ïQÃéÞ·‹ÉtAt-Ž,óFù­-ĵ«ìh=M`^—úý±Dfc¬÷5ÎÙo}oƒèðåëp€e@³Ÿ“m¤òÇk¿§žXZûž‡DŽsöê¬H‡;¨¼*?M¬{êö’¦²àbÂÕ£ÛÚ&Áó¸-™¢QÅÇ‚®/ùìãò ÁsÃ.ÞM•Uz26cª²^4/T§{*¥Ú”H:c†i)°s =Z[žmI±åSÇëN5߂˒rK‹bÛx4Î5É¡½N1|öM¢åF¥Æõs ‘ŠÐ©J\sŠYй&,m‡_¹€m:ØaŸPùÁœ%¯ñ¤†ƒKæK @ê‘zÃt¸” ©á« ëvT„$MÍ­–ø“íÍkv0=‹40µ/÷2‰ñÒÓ]är¥–»ý@çÔd¶lV´{|/´“5WºÇ3´uD”4xû±òJv¾¿ÌäÒíE}ºÁ¹l¦,-ÆERQAý‚g'Á¥š4_§•¸QðßËšäLá™YÎÔÑ’’ÀPäGF2ÕÒvH\ÅŸ³š]|5ÿN®ü›)w¸Õ³R{G¸‰øÎ&ÖxzŸº|j/mEÉÚŸhu•¡p«t‰‹Ç‰2ùî.ð;Ç£ÊW»5Ü"O3bd C6.õN6äÜ ¥ZãTÝ,%gÜܶÚv»*÷c¬¬veÂï¯Ü»Ðµôˆãr“êKT™Í© —ã~ž avËB_£Òš0 êm*ƒ f¨¿ ÆîËðnÂò"²-½ÖÆzž ד­Åc†$g²™Í‘„š>g³° ¦š±>·à–æ)…så(Ÿ0Ç[vÖ~M°‚ÍiBsÞx.Ü%Þz°½¯„5R´Ù[b‘6Þ¬NBªo1ôjÐtçJÙšêgÍ2‰ÀÇÎbmßs=o²ûw6§0PMÀôûïí¦~·q~S¼hœLÊ"¯ r@ñƒP§‘ÍÁ0ajÙžf ýôçGbA¦ß;¦'Ž’=Ê-E¤¥L|);Mç(Ä €·3Έâ€û~"£Õó$t\?¢‚x)êšš¾yƒ1¢ºh™ŠÔk÷¹ý7³¿c0«\UÂÚ¹º¦‰ö²ŽQAtzuÆŠ®Ç‹d äÛùdš3oDátTr•êûè„Í ~‚çý>ÂêÛ Ë–À Ëgðþgÿzø²Nñ®h½á룪—¢¾§©l®µ-Nίd¸úýÝ”“Göh> ¹xôiœÈ<&ëªþ\*ØIZäꀋw®ß¶«ŽXn :’Œí£N]¤HxyâK~» µÈt¼BúÌ4|™R¯s‚’Uætk¶°¿{OžXˆ%"©XDyÑêÚï…'²xßgì„L¼Wfžu"€É¦IVxÐvíð-ÉmçǬ½ÑXá×·$>UÍ)FS-G€_*Ô”Ï3`—Râ$°xNÀEGâ¾¹›Uý€ Ü<Ò€ V{‰¥H×Üýà+û?¬ ’bˆ¿ŠôpöYw©R‡Ä¦Õ 54" ýÂø £ “¶ºš?5ýÏã fUîãsŠ>IxâÝ¡ºguÄhY’(:áš¼“ª¼aÃ,õKoõð…ƒ@”§À0PØL߆5Švbðò¨04pÍ®žfŽróÏïOH³>৉‰3¾c‰òTÆ2W:XJÃVCßš®$6¤W!ÊŠqÅÁ[¹Ì_—ì×ý›Î"¥õœE>7EÒ~»ÚpÌ’Óú9Úc}c,ÕÄqÜTelÆÖÄù½…lâ¨tœ;CºƒËŒc¤7|FÿšÚ°NfðvçÓøuK8ÎHE9¡Û”3™ÛVBy‰…éHKÛâIæ\EÿžN³ÇØt4¹œ—ït×ÇÑïšÈNGe‰Šôù¼;š<õpŽÑÕ4—L‚Ãå§-–1g‚ß¹éœÆ[#Œvºg'77,ŸÇ]ƒ‡¬Pq´YêVȬ5Mqj¬a™'QÆ£™ˆÜþ~)¶ˆu›çB–d¨}æGðI/ãvߨÍäñ²yø¥wÛšö¦†•CuÉŬõª”!.QíÂÞÁ‘{›Ã۫£ÙEO¨Qdãqí MR%>ïEØ0²f òözŽW,K…„bZš(ŒÆXX1„{íFÒº4öºpj/ÒÛlj#7´…8FKgÈZåIz|÷)E¢>B—–V I‚_gŒ"¹IîØãÕÂì\Ù*ŠèŠãû.›»å‚á áºñõqITÔœLZ=µÀp"¯WHmí ’+ÍÑlÚ•{í=­‰¢WÀ¥!Ç=W˜rN9|Mç™æ”Çå¡ðãEœÈ£áOí·d©’ÂEÖL‚)‘«¾ÿ×/U6A›éX3Iýƒ>*Yû÷©±ÞÄ¢_Pûcy;£¶ÏW`nLƒê'ËëžCNÒÑ M«IÌå#;£uï—VÊ"vu‘;)"‚¨„`ñ~Ì7sÓŸy¿]Pº I_í5üXµò9 û1ú¯•9~?êvŠÝ£Fc*×) >™GFøC«F)Š¡¬$þ_?¯½ø9:ì:‹2OÁ›ŽUr,Mª¹E"J¦†dAœŽñ¿el!"ûŠ«ÔÔYñ Ù îÏoû G•dØ/ 1Ø®Vì¦àÒ£:l)/ß;…muVžtOüL9®ÒçñH¬ ó«¿µrRýUj÷†E6Ñ2þeýP<íØóDZEv=ÓFßÁëMZ ç¸2kuÞ¥:Óµ:º‰¼ø…]þ]0¾`èÕ²VU5RnNŒ–÷膟k—ï$²ø59Ì ºT0ÉžŽm×¹6rÖ,ž BʪgŸ l<®úÌèù†¶ŒI Ë…ˆÛdwï<®ù¦jvýŒm¸(Ͻ¨¯êád„²~~™-¶x}ñÔ“FÅj˜!Á'oZÓ™(/sL >¬.P‘bóî–Ö£-RÛ4ƒ P£æyXÄàd-aÿݼňº¾8.Œ>DˆÛEç±pb|b§µz°%pôtN£ª3 s‚ƒ¡u¥ ù@h u >(T.x¯1µöZ§ë#»hL%í±#¥³5‡ÀÕEw"ĪÎ|INU@óBé^Ú´ƒVŒÙÁo§ SªùÉe-Ù‹ŒÌ/îc&Í·6dëú̶ 1¶>Øâ$H"ÆÚ(\ÖÃaNãmÐÏR9*¸Kû¥zT£å‹d%íα¦óˆŸéïÎÁuhó0Å–Ì{ôšáæWÓ9Æžµ¯]y_‡¡Èæ ƒ\GbÊÈùO'KX`÷\;…öð1—ÍÊÑ. ¦¶†äúçVƒ°Üzdz¡“Pa?$â&I‚ Åùþî7 ýæ°êÍ S7f%q•®óŽœbúœo¬Þ¿a ä|[æúŽOZ5¨°f\!}¾aZÑ|0uŒÕÖ¶©Ñ¥œbѦ%ÿo0Nkr´øÀñYJJ…cc}¹*š@4á"É4CÅ„ÄÑl ÷ïîv¨Ë?é•þïß\û:lsáøøæÆ •.nÁx]~ü­­ŽI»üÙT5ð£ñ×"Ø:\†••5R øQ;s®Ù·ëÓºÿÌÐŒVQ¥¥`^…4HããYÀnߺ³*û.. @ͬÿ=Ù6Ä´bŽÆÏ‹’2Ä¿SNóДüzÿõÜßìsñzöàj¿»›Å•§H•£&R»Íöû÷åÍeé ר€É òà«#¥Æô¿òOº6!ÔQ$· ñ›ô‡rP€AÇ ê4à**J <›‘QÎt@pc´¾µi?†ùW=ñcÿ«Ú¬óSø<´ø?£g9|xõ h†/Ž\ÀL¨ñéÖÕñvýfaV–f_j„ÞûsKÔšúOŸ«þK­]B’ŒÔdWÖÚ|ôPiò€™(ë™Ö¼vT’»åäpžêY ñˆ·œþyÐÿ½Ahãˆd,z𢜌gîvoO‰B(óq#ªPÁϵ¾òA4‰Už£¤ÌõFópªg¨Ô¡g¨,oäZ.rÊM²±Û6¬n~ü©…µRà1OUŽC >› ž(}vÌô*ĢɹôT9Ɖõ2@ M7ÑgUˆcSOà}(ë™—Éüùõ-Õ’‚>PMcÛÙÅtR‘â^#š¼¼lòWZ_IÈcèï[\LáÜ0­…A¡p<êíkŸƒâß9óÍEŒ!¨,¦c1²£YI•c‘ÉG÷í<µâ¯ÆÆÆNÄùj¤­œ|$ZW}Û¡gX¼»§»Où2?õö=üÔËÆít—-K]MiQþÕ×—uþY?TuàÞåWõ š(é¨Àâöd@a!™ó‡ R»¿TÚ>‡?šì…ŽÃ¹Ö¨Ý9 Yqãïw O´C/‰LÆN‹d¤+ÆÇÇDÏ=­ihšØòâH<}P/¿éÚ¾Y¾w[1q£T©[}JåabîT>ž›æsrz•C' AÈ:ù¶m“4AS!§í‰÷ïõ9<îv|º»UúÆt÷­^µ‘ƶàea (è lûFeˆùî³C|*§T?Ñk%)n?Î}©ÃEÖ¬÷äcMbMópR–«Å”äÙd¢Ó‹µ¼¿Å_ƒÆEA` g‰c<îû?:ìl|Çy ü9!°„ ŠÝŸÆZ·'Ã`ÇÐÓËËÅ<êHûÆ ÄÒXÏU¯/7"z®Ç;ë™m: ¢¿Sè=š~=–K4‰™ÓÅ^¨î ï³ÅꨑôjB‘ÝéðcX¹áGèñ¥w´-êôï2£„CÛ…#ÖM^¨§O’t?€ñØwAòÕ4ªtk…q{ŸÃH.\® 9ôŠv~Y;ŠGl¥ž"­òøò†:>ç ñ€ÿföOÐÒf³µ¢r‘üÕ.0hºyÿúÉò¹ó+´(|ásÉ~ú,/­"Uþîãw€ÕŸci€Xï«Ì‰sö˜LÕzî—û05Yœ§/P, G^Nê=ð ù+ýÉ”=%6ÈZI(KU¡ É'ÈϘ_åt£ÓüíA eÍý÷#oîé{oÉSƒ÷Sœö^¢Øz®‡!oj”÷¼I×<Åö‡9wÛÀÓTÒâ t ÚÜ4éDõàÅwDôd†\ŠŒFy¼©Øï±¤%Z×0CvÛßßÄ‹ô÷jžjºh¶žÎ¯4ºc››h¥¼ËþCèfÏ\"ü{ÀÔT÷¹?Öÿ‘Ýý)êü€Ÿp-v7;vw^‡êð‹Ë)KvÔg.¾Û¶7Ñ~OÏ‚-RÇ¡cz‰i9ÊK¾~¥4‰ökµÖ{EU,}îKÀð°éczä©Âõ¦Ä6¨+´É)ÒÝ©‘b"œËŽ(‰·ýó§ÀšÛ{êVȪ3Eêláîp׿ÆF…¬\à‡Ð/´jì+Rì±&+@xþá'iìÀ¿y¦Ü˜p«]2›Usë+– cÞuÖä&HÞØm‚˜xîh$8"„ @¶÷†fûÓ­Å ž] ÌìY¦s±}/ íçÚ¡g/(/gòÐLýYè]üó0øaÙ»ç¡Þ¾ï¾;Ò‚7ˆ³ê% ~;ð ËVI↩D¿»Øñ[*YY­¥•ÕÔü$ŒÞ£Á ÜÊ1k”+ž’b)-ÃÛõ[:/k\O4×^”Œ ›L• ±?ßNÈÒ+cjE«ˆHªäðÌ­Ñ]ê]|ˆ¯Plì^ßjïv¨ül£¥&ñÁ¾K°ü‚JÖ”ô²ó· EòvÝ]mqœþ,=ƒùÛN0>y̸¢\S]ÐZE7“ÀÜ`‚‹AU4óþ™²Löc·ÙygoW-žQÛð÷K,Ûͨ&B†fµ+«Ù¾4HÙ¼4Q÷@ĽÂ–?¡ôd¯Zô“—ÜÖpú£š­#ÊÙ/Ník ˜…Ã~•Føü2Έ1ÜÉÿõZŽ^;×~Û¶J %4;Só—I‚[-Á—²¯Ïsƒ¬v­‡W#“<®ÙdEÕ´«wãKœÈ÷ª®O Eþ1¢Ã¿õñɎ̆üyåâ y8´ùX€QŸnÝñÉ–Õ÷OÉÐ âøÖ¡ý'ãF‚ôã[cD£¯‚ß\ªš<•]¬k´+¢ÀÍx/e·Å’ÿj~Ãö [ DoðØöœBîóÏ5?†Z 8åù¥-zòjÁ|§Ñ,Ç+@ZHëÆRgû>~’\ù+7úßÚú qX™¾òjÞMQi$ö·GF„ºÊÜÌŸó8hR.ã#¾MÕ=qÞ­öõ9båìø“ ÑOö)Óà L´øþ¬u1j?Q!DðiÎçÃQìo^ý#~Íé¶BsƒÄþ}i9ŸL·¶eìÜ­ŽÛ±é(¦—ëlQc‚1qÿË>¼ÌEôÇ|¶®ÿòÇ^ÿ"Ø«‰šJÇ|:–*•r©¼!ݦ90‚óW43ò~”Ì’Ï žP@ð^\SøRvò­¯z†Ÿfìir*Œ$ D¶Ã{ìÖÆBNo˜ÂW檓^UxªîØãwiwU0,X>#Î:õøò®KãI@xTú7Ó¼rsÉœ\A滞V»–7L¶­Ëõz¾´ÎÎs×~ø»hÀã!ޤß.aÕ/–yIµè°ïP}~ÅïóVæ›ÛtE¶RŸ<Ô~Ê›ÓáðÉ8O.í“Ç<ÿÙN HµÈh*áÛ‡oÁÞ!ÔÝGÞŽ¬ÏÚ0•ÓBŽ›‡ ìØžX,­&‹és8…Âh±?ó¥o¾õgp­tô9»†œ [ŽmE€}× ö3Ò±Ð,G8¥qÿ³œY&ýþ„eOY YD=œI–’ªànQ«Ä†ÔcÓ"sÈàÝÔÀ3¨¡•3&2é&E¢²-¹~ä°ܵГ«ªñ;’M´d·Ew©TÈ+4¡g•Æ-dùñùDH Œ/äë Ò\³õ×QÒ 8>¶°ºÃZüöá„ß)ìÏ7åX¤¿}á­Øep:Lž± Q†ë”8eÛ/Yȸ^ÓËà ’~ª”_‡µì¤Î*Í×Ú€çkxI±—öëàM[ÆJiÌOÜŽØ24Lc ¯[%0®­šhÑKÎFNÇÜuͪL9R¦kÞI²ÅÜ]·m2Žå 8UjÏ'kBiú(3°8ôÂ[ÑýS™R…†‰œ«µw/ßï"È5>ŸÄõX¾¸84èÒWMT Yᣠ3DÂà ¦uË›`îp½JÌAAnŽŽ÷–Oó¶nš Ž÷:9ΦóÙŠÕ?˜øjL%íaHòÛ ¯—ÙònZ/ñì-fq …ü^èsËlz]0‘n·nÁ”D¦MÒüŒäŸ¾Èã„:$v Õ/yTL)^6}éÀÀîT™©j‡XÔÕ©“Ћ92”:§‘¡ ÅwHh‰}SPS¦µèÖ]É_Â25ô¤'Aëw‹œžÕ3êƒÁöèÓѽSÖ­éÅ€€¶ÐÐÒÓ¥R{ÓÓ 9í<Û6×!õ §!Â0û¦+ÐYÙf¸­c­q%Îz{õB I¡Ü&ÄW$’Î÷†E2ƒÎš~¿RÝÂt­ˆ | ‘bâì÷>Hµ—Õn?Á¬°Ö5x"^š»~Y?Åâµùt0ôì¡4 ágóÑ£2!‰ÙQ/|ùÙ€1ÍãœÒŒáëÍwÔOήŸûO~õâf65¨ìĤã&?û gðô"HÏ3Á8I—߸õº¬`}ßTV×õÑ5VgÖŽ¡›s^/I?ÅYLÓ9¸<5go8fõ`zõ Ì—Óù^OÐþÉaõ;./HäUÛÂYúgÐr+︩›…^Ã?ý(ØÊ´o’JlªÙþøÕ­½²^‡<Þ[í©‰\•¼œ{ʹ'qâ{ úÑÚÜ·oãß᧘µ¹Ö¿–zn¶Ö÷–â2öÏþ÷ƒ W} S~¿¼U^!½Ë·¶ÑjÃè$ü5Ø;œbݶ ׳‚ zŒ¬iLØùõPè2|£×Š2ƒ1ñ‹æñÍùy»P´¤j©2‡æ–‘,("+!®?ƒçs1PK'ư'÷vÿêÓÒ;öóU–ŠÄ§=F²ó'Ô¿¢Ë4{9^i)/ ¸ ƺ·Ï"µ'’(–"ÄJ(&Š•q\Nßòë6N# 6áÆô<ü¢wg@ꎵדɈ+OCTªÐ®”½Ò¦©UfzWš3ŠÝýä¹AvIïÄ1åJÕ1A)0§~­žH¦Ed˜£ï­ä’Þ&²K8óî~½@1˜RðYÆó2Ò z#¸ïŽ"%¤–—U,ŠÏí\æVªK¥õP%Ù•°[<÷k¢Çh]‚u |›Â°"µ\ÌòLe¦fá_˼J<ì¨(æD£šw™š>§|>úío’ø°joG>²UÜ kØñ'o¡òýyO¿³íÔÇŸJU;ç¾ðt³GãUÄÒTÚ^Å s§^ù¶ž×Û„—{ÿ¤8~öó£A)T}ýÅ@Ùˤ.H) 9øìÚóÚyü ÂÆyQ¢@€Ãsÿ¿¦3{»±q+ ›"ËeÆÌe¼I_ -nqx²)ñaÆT ‹Mý*ÝZ¹†ç¿Ãe`\è]î„H9™ð[s.å°lQû!FØÝ ^­$ͯ‘ƒ½¶v¯Ò?WEÇ­#&.=Vr_[§ôÜõ)G)¡³`FënæmoÀY—Š„‘?©±1ñÎý…+Åg†G¤[‚UÞXšñ¢ƒ&¤…Ô*½JÍ)‚+5v·Ê>ƒ ]¥’/€ß'ÎI“MmÉ­¼Ÿ™©A(,½·—¤E)š5J&eíŸ ßM±ØöSßx«]ücÇIvÝQÅÆÎž>lc¿¹þõ®™×ž·Ã@U‹þ\ã3ðL}­b¿¿R!ÐÛÓõ écL×é@QàS¡G/ B>,üÉx(HÂÅÁ{¼mrÜ{œaKd‡Û]Ÿ¼ˆWÞ 1”=Á^öjH S®ÙÐÅMÐùM”C”[A}(¶\S¡¸kÒ+½'Ñ9äqD{"¶5¸@÷ÊP= ø‰£÷á‡ùjôë„fɬÃ`°›½~ÿ[À¥7•ÿ&ª«'$=K×íÕnUîPàpÄð’oÔ;ô‰Û‰ü>m>Ž®×éÅè.³·¯öŸiˇ?†I|ó‚´ULwVG™›’o›ÒËíšÝ«¢ÞáXwÌû ócÎOjhœü˜ îŒcp·8ÅqTMúñ:§±lÑ,ô—‚ëN…ÃtiY)±ÄEióÊ6ÝCõ-ïÕÏSî°Ò$+Ž÷$Xм¶QËšéwˆðcÙÙÚ[=z›ZÀkhò(Á»Ðô8šÝFïò_œwŸK˜6S7A<*<ÛYÁðóR3ëò·îæ™Ø,ÂŽTanÌ7[È&ÛÛÑ¥Êê’-¿1šûcÚEÅ;âÕúôH[µ›uæe‰®[ÐØé{WFî`î“hVëƒpÐBYžÛ"Í*"ð‡FÚTç1k‚ôÛ÷¡îc-‡o?œ®ÙÀîŸ/X32ÓázÏp)Õµ1R3¯¶ŠÕ ®<Ø Çøo RŸ ã¥fš­ ‘Èûý$6$ü ®YÞ¢Þ4Cç8\p]°|ÂpRÉÿZÏxðÕÙ] ãH‹9O™[é¿ÒÛ/Çù"FŸòbÛ(ۉì¾,O¨´0å술I7ié¼úžiäõ8jç{\V$ætZ`!eå³k.F›ªàµ\¦Ä¡M+mè»øvGvà¡)ã稱‚Ÿ³uˆó¦q.q/Ø»­tú_AEýìµ€¯N>èÕ¥}&èþ?œ¾›Üâ™g.k ”M„n aüV¢`BŸm•Ò‡S*Œ]6j:Ñq(Ù~•A":/UÆÕbGNüOÒÕ^¯XÛIÕŠü;å&´ÝаmúŸôÀ{ƒíâׯM’m¸]éz ?¸2_’xp1¸ë£ŸslhíñS©ÒíÔÃ]£ðnü&"^ü­ yªÉ/é¶ùÊåî=V·°~¢Ô W¬SªâvñXôÅ>Ù Š,! ÙÅ9ÖŠkz %‹¸t¸=cD^µ~±VÉ;úáÎ?>D [0Ö*ÖÀ%ˆÓ‰o«t’j­çG¼=hHb¯Mȃsß§#I—ÃëŸÊÍ *C¯hG„iIdÔ[ÈéS^{öÆ®{Ãû„ õoÏ€•Z±å`êz«+Žª®§íAp¿_è4<)õ£Œ_´YõNøµ­œ¿©}~rý1?á3á€;ø ß°¾ ‡nkp%ï¼xþzÆÉ×e÷Ú‰Ñ2PLˆÎçÖµ ì‘3¨"‘H`Kq`ñ«S˜¾m)YùÇ? –±ÞKÿÒË©*¦ÿŠÞ²É‹\w’,x0QI¬¾gä÷gÃLê«(¯è±²%é~:Þäu8zÛùQtjøëŸ2Õɯà-k½òx‡Â‚Ì‚(Ùáž^1FÓîGª1)©t’©wsNá(ë¹kJÕ¯]«w‚7’Q}L^@⌡¡ñäá…ëówͰ_Q\p•é'X™J¡y·TûçI±ÒeÁåÅ[(F€Äé=¸Ù¡?Šk}3ŠIsŸ?5¶õI õkˆ•(ÅÐÕ6rÿm~±uò{ eyN}úbJMMH§•ùŠÅ–L}ô@˜ñ:NVçɆÿãkªÅ ²&oñ·~¯O:ý¸öjþ|ÜØ¢²Sx UË8¶&/âó‡á`pÇUMu?Ù7Ù ð2†ÿ¼Ú¡µ‡yõMÖܨž3FÛúÚˆ0ãyÇž¥?š¯0®¿oñnH¿‡–Z)‹åâðÂËý&ԛ鮬ˆ@t¼³Ê·Ûbg£…ˆƒ–r»Ýí8k"kmÞó!u³1Œ7›h“íÝö¿ $‹jbsæ¤?ÒGÌ‹|šÙ •¦V7Êq65x0Ò‰w±~ GÖÕÞæÝðë>ãÊØ j›‹6àýà!<’à°Å0‹90²íeú‚dì§= #v >׸»hø©ìž¾TÅgÓˆFŸÌõ;ÄŠxçÝ?±/T†&á%ÁO¯n×½^õhßCK\g¯ï=ï×–jÀ¬y¡ìß¹<“ ¢ˆöß -b;ö¾òÜ+Ú49³J¹]µàz¾ßÿ–%ôqÚM¡ñå¯M鱄±„ò&¿&ý]48-SöîñhÕM¢–§Q!ò%ï>Q ¬$X¹÷‘zqÞ'I"$ðºT (Ô©êzDdm±FxÉ춸â*îv=WóûÄVWTRõ¥¯€!ÝÃvj¿cøš³âÝqó½3’ãˆ]%UËÄ@'iëÞþíŽËç”À¿4‹|àë?38Zªü&#†?ç5`·4QhÕêt›År[4ÝX‡žhÛ¸Ö@Ñ–›IÛ"ÚÙàé&PµÏf“=€µªzÿ!°-YŽ: Š&[¨¹Ë;9›Äœ½øÌ »-Ž$?)x×icaõ£N\¬Uìv{¾=FÃÑÞ¥\Õ²ð‰p•^;Åa°–W¯zxãn6z¸PVìß?|sx@R†ýË…Úò[ñ„“®©DŠTž†ùÒô!Í€Tÿ~d²°Ù©Ÿ`ºÓÐ [q‘ é u`S³‡Qa]%Ct6¦§ ©ûKX”ŒùOFÛ}kÀû«wíõ­Zclµ{÷¿Öî?ƒ„ÂÓ·Í;hçGð‚¸ððÈ¢NHÐH“\  »ó“3»ŠÜ“–frc7;ãÂÂæ=^è¼´†Ÿ|š–R'IŽÍ,nVàînI~Ÿé( ¼ïÚÅnš®Rx|™.ôЋüïò«H‹âDDÊ;à#ác…‚ȆRJ€ÿw‘a˜¢<?dÉÕ¸x¨T3iŸyl‡EâÄ1“]0cv›‰ê=Ë®}ÛwÉ‹‘ež\‘ÀqÖd©wç¨EEq§ð¶C’*C:¬&«ÔÃ17ÅÖnl hцWtÔÆ˜‡!—–Ð àß |Cò+f’u÷š®úy€ Ù“h€äâ;èZ2òTEíβXqê ¥@Œ½ § pœSø”7V?¿ãÙº‹àlnn&Ïw¯ãWó нÌE¨=@•¥û-Œü[óÃÝÍõñ’Ìï%Ï2ÊÐó}ðò«g9åÖm|hO^á†t»6‹P3ïçýT3"q¥–Î%uZ¦wâ…~dý>uyè>ã§„<ÓcJïöd¸€„¬ãË£|'³¨±Z°E¢— A5~€í—̼ª?¨ÿ¶%K¦?rymœZö|Î%Gì+6@Q**ڥрµQ௮–k&Ú¤¨Ï¼¶¶6\¬]^TüQWíRd_âŸ.䈵Ën«s³‚ßEE7Z×4g¦E6ÏŠÉ3âP¤‘Öï¿àâ|´™%'ñ>’Ùj‡Å/Ú~b9¼å›''GNèÇ×;<‚ç‘Ý¥§ÏÏïÞJNs¹ø¿ šƒ-sá:q|¸,QúÙÜlË0•{áˆl âDcreÄ[¡:’¿›’;gÊo¹ø!àO’QnÜ$»Èñb"ÿ˜ xîLÔUxãÈ^Iƒ½nâ…áý>å ²ï@kä_F´5Y @ÖÃïo½òÍF¥0Î·ì  g]Ïí%°©Ü)Ÿ3ß7ù‰nOá±F¹NTÈù¿áânýçÜÐ :=œ_æÞú‚„{…2T#¶ýý&®¢<½…k²xQ ˜XGM0œPEð²Ùšƒo(›õý§þ”\Ž~~öÞ+i,‚É'r€¼©)éš Xuëùï8” Yn96þztx{Ûš®–@£_‘Ù\¶|ë6P§P|墆Ý+ioeô$È3Ó.mgßK6û‹ñSˆô‰ð>çoyêq`rG%²˜Çg§/Rn;ÇK%{OÖÑÎÍã05Ž0­³ÚKÁ—Å©²h[{¬PíÛ_ï5Ï3£ÃÒd¤£¢ó_Ü~~8Ö¡¹Ç¤Êwµ¯çÌl˜T¼qÍnéáÅO‰~ƒlç¶ŠÀöÓÏ–«Çïì˜AêË­1Gç/Õ2O¬Wa¤É¾ ¿Þ:€ž¹˜-«µ«M’ÂÔ‚ÌèßY;ßÖÏ#×/»ÆP£$¼ÑcºZ9^Q¸YO`V¶6ÃQk5•¶v6¹›J8ñ¨ÙFIýJsýíß¹o ¯Ò“&ÓÕ¢ÄûRe躸8AÃÃo&88Ê]0ª2T®¬Ìóࣹӯõ¦èûjâT.†P\4quÔ”:´ýõ˜øcûµ¶QÊwU»MÛÓ„sa/(ÌÚ× ¸Ùâ…ÓoÜžˆó"‹ðþ]Ä÷r owwÒ·øÑŠPíñàØPDÎhÇ2Y;?–x ÒhBÈ€#¬²ÉSªXûO¨÷’*~ÂÄ,J·jþo ÿ:Aé}†Iºð3 TEqÚ–ø@ðˆê(µû.mVÉÆõ…ƒâÆÐA'Õ«ë(’’. ˜­à_ªáÛ'ßy7ƒq Ÿ-Fÿð¶|ðNo–ÞqJ +W¦ÿ½4T[dÔ —¤>›Á^«ú³T@ì14Ú/Î#†úÌ •ôS£&øhÜò"û¼öŠgÉWYJ±wü’©~é¨5$«:[G‡ˆ˜Ù ªë"ìGφÜq”Gj$’jïÐ5”}sðÈ5T-çs2øZÎWcK5ä H4ÌQþáqUG$ ð±jSõÛ~²)p3ÅZhm<EÿŽÊü‘ŠÂu_ßæX²¶Ê0ä¢ËmˆvŒç=ÈDÚ´/5eGÅñ>ž†Ì–<‚?úwœ§îÓ³øÿ¢Äó¤aù§˜re08Œ*ÇÔRO^dØW ~Š*?ÿ‹'(cGB× ”ûQûë8¾8 âQ(LJ4<$ ý ÈÿÕþŽ&kloçF”,X<‚ ®—#\šÆ¬IU’ücP>¡iÆËÏA; AÅŒ'<]·œVÍ^•RÅ0—ýë ¼ì3ʼŸæñ¹q=õÔ AÔÃc„Q7MŠ66ß!Ž•š™¸]5$þ7 ‘î—Œh\ÏÜyD;m ayïÒá!EGuà,mTfç›®ÛVŒŽ$†æîʈÄò @Éÿ–ÜÌ *ææ®*ìNXµ1Ü ØMNÄ`gN—íß#=.qKß\¹]  áuâø·Lçjüuzÿ€úº€—­2Ð!~ìÍ}p}£d‡ç¬‹ dÑ^Ëß‹ ’Q,¢Üï‡Ì[âIu<ÿå“|Ë„PâæBô_Pù4]Kö9)ñ"î13ê¼ÈÑŠ#§|„4 5ÎÛJé÷²ÅSÖÎm@Ümuà²Ãi#Y¤u!È0>šÈ­ê„!½I»E êþý¨— (t ÿ>Ú`Щ|‡ì¡Ú ß—Äðä¡| \åé‹{1·–v$àeqïôó| C I¯pthµçgËô ªç¢3âð¢ OüsÑd• ²/ ’HFƒlÔ‹/Î¥D<‚þSHÈ@5=ø%¹²¸g`: ÿq è±GÍ¢û_=MB*seµÈF$xÚð’ƒ,] äìÙ/n½E™Q„j„`zG' Å1~— !œŠ'~-ByýŠIÔÜE…ê‹?Œ„¨sÊ»yNñQHÂô«ŸmJà© Ò¾•ƒ2’ÿ—E‹äKHfºyˆ¥Åˆ$sí(fÁΆD$†p>)›¼Ü牄9 î°¿œÙq¢|ð¹æ·¿~“@®ËÀÆÿ‘bÅdãÜäïëÿO Ç–ðŒºëÝâÈUrssC® MM$£t”Ecÿå+ Jøëö¹hç"ëþFrÒ5^¼‘&Ô …þ­l¾é?nÛQ‹Ð‰X±c¸?þÊß@ÞLhGÚ$lj`!ï\/ôð£©í¤Vpéáqž¥¿ÊJÏ#È ¿ ØyoxÐ%m†¤2PQ;l—¯ODÆHãšZòlÙW\QÅ1s ½$™Ë4”¦¶ZÒkÁÊS†nRþ*šäZnØá*ƒiYˆÛš“{9DækíÌïxf!}5ž™”à¯ïß *zß©$Њ÷8ÈØ-ÐÛ_Æ{ðMÛ 7fF¿ Pñb†¶œú Š'¹íCÊOÎîDÎë>¼u†áë0€©n1Šê?\ʼn3kÛb ý}Û+„¿á¯XF³Ò”ùïM0Ò2o#Íd^í6Q>˜óþŽaÿb!E“‹ÞáÿÎúdÔ2÷¤ãêÿ;“ÑÁsÝ=Åšk?O¡üoˆ;Ѐi)æRÙ‘¹lhj-…p¼éÓ³³’âyߣ'&úi(p> “•‘ýL(¥õ@š á—g­Ô«”í^§;4E*;¿K¡W=Ϭý|ÎÏ¡ÖÆË¸§7(UÔ†i2“CVÔ|Óp]¨>ƒÞS`òzn"@GL€á³ ­eoêrêµµ6w[(„Íïîìð°µáZ¦¥áT§™Ìbÿ+Rõœ,/kíkjò(OsGqr­•Ïjc¾J݆Þ/ñìGzžƒ¦”ä§7]¦ðü{›½N¯µWíýøÛ¼šîg]¯ÁvF—e·–¥µèH…l>G·#Á(íškKìq° wöiºûswvwwÕåÖž×˦Êðœ3Ó™¿sw)£|‡$@Î#AòÃò†ÆÖ’¯pŸìx6µ]\Rû±òßnêž0Ú)”PCjU“úÁlõhÖöusµ ±òZI$n!©×¨å´åõæaÃÚAS£¨·7EõHç0αâþL“­¼P1ë½Fæz›»c3 £VÛ"óÛº¨;ñ‡¾ÏþOZç å×Fšh3ïÖUr”Ü€§ïÓ¬¬F£&!}W„ù"¤ A+9K\¤ì AZÄGé*Üÿ‹ÓÁž¶56C<"ªJØœ« ë”’ÊasµhN±›ˆÍúq‘ðŸ\¸x‡}ÚHD.Å ÑhàÏK›! â¾È“âæ8;·þ庰ì3WÒ™…ÞMrôd¼/Îæ‰ï)ƒÏÌô§,8=<`¡u¤[«g‰™žG®…NKK;Be|Ìî¢rcVª˜€Q\}OQ&ÈòmâU9ºý™á–F®(ï¶m`Õ÷\ò“ ÐnYqñ³§¨™€ÑÖœO¦BÔ|ÙÞúÁ?L=×löŠ~ò‚/‰}f»ë38'maŠÖí“SY¨ÝœOÀ’#ÓïIVâê÷¦˜Îᓇ³YB)ö3‘ð²nuèàà¢8Åç­bó»W"ŸÔúzPyT‹š®éÞòJšïƒµe+X(©óþ†Ç¶Ÿg0à)Å@ßBvîC7 ‚J${x€¦Ó„tÆÒ„à7:fFοw6œ+r-ìí%$½oÉÚÌúxCÞÀÝÕð3¾ìßæR"RòW½ņKF™û¨Öç9P•¥Vסöñþ…c¹È…íA®™¸ÖV¡X0=^d¸º)ôÂs%ñq- óS[/+öÑÕ}16µ‰.ÿnDyÎL˜deŸ¶úmËÿV–@Ý^»µµºÌ‘°óyÚ¦KRs¬[-t­ÀÌ-ßÛ7JˆÓ\BFVxS½£nnráž¶å½¶€gåéΪkQ™µíuô›ûÝ8ã»þwý²øçÂáÐ’9ðˆ^¿Èy¶%]ßþŽüªÿwtc}~nÔ¸P]ËyØõ è‚óQ”¨>RœÔd=y€²$®we“bÏñ´¢Qƒ“ÿW~<çuk±À®§ì"œ‚ÁÜ3+¯€ì˜Ü{Í„÷’䎛e ?Ço®gÀp$j aø¿?ÜçéáZtíl‘P–êv^ìlÑ’ôÀHNFéíBDhFoP‘Ù¥<ŒŒv“_¹Ÿ„é|W7ôÞW ðX é÷` Õ¯[z÷k%•<ô1è:¯Ê]P jþ×§Êü·þ»Ì…óoo^BûŠŒ2ÆòTô1€Ž"×wäã¿:©ÿòÞãü=%?z-s+{Úïd^“ý´p:ßJx7­®úòœ.×°^ÙX×ÐæÒb¦vHùz&d–CÁÍúê>în7ˆÙÂüœ&¯†[ÈA ¾FémïéʨÂÇAè2ºÒtŽRòçÏŸÌËþ1‹ºÑ(ýŒ {:6m*fÛ“oË”’Ç"ôŽgO½|½ý®7 § ¤ö›Kpÿù‚üpcÎlß2¾ÖéŒ,¡Èx­¦—ÐäÊ¿}ö N“¦!ÃJ¬Œ©uîùæËúz(¥Oß> »áÿì´k:K…b#3¶–]ÎÜ;Õ¢Ñk\þå°ZZ"¶™zÊ\ÊÔ€˜"ÖÔ¥Ö~-Mscèd”5Û }£É{´±MÂhÉI:”„ UçIŒÛï6‚ð ý¼™3©zG?Ÿæ¶œí¹_Cx?îÎ5M/Öº¢”]‡òYlaCïñ“”mú>‘ܧ_d\1¶7φ÷KŒíÁý+ Ûáöö«Óv+!$=ë™ÖÈÈÙ¿+«<’²[aèQ—ÛlQ-,3.Õ% ¡×o°5R1¸ñS¤Þ·¯¢ÿ=SÞ?t?ùß§.]›g½ê„Fâ<s·ß*nÜ â¤H¶©òU–Øaœå5·”êÑfD F´€É Õx‘Œ8ÌWÿtÐÙÍ%ÃQMöÖá$m²ï-ÓLÓ¨4þXÁŠé¨è‘÷?»'|m› hØð('Ÿ,§Ñ¾3+þéŒh¸Ï˜”‰d<'øi‹‡GεHYò.*:éz¼ŠØ«@G2£:/³£ÖfUulçD·r%…P­ûhÃXp ëkÏ(è/Bj¤L¼ˆ›nmþOÞÚè"ÚðZÐ4:³-\6*ú”Skÿ®iºuï-Ю46á[Žl• ÿ—}x´€E=ºE®Œ¬Ê¾ùgµ¹Ï|“…^×;KX t}c+­;…}Q\#­’²=YÓ!øãz6WK­RÔ½üjREW:ž#GôC‘žÖ²o€šòHí†Å» Ò)8Öò|q2íÕ4Ï%7¾ú=ø »!v¢O¢ó‚ïlùÕ[x™d?yÀ{ªB½\иU>Æçx³?»afTÂþ‘ü@Ü\2\€ÍØÿ*Ñbâî 9mv[0×ê ®G8ܢ͂ž¥ 8²8ƒN='êïM©¾âmù„\c§Vë;b®\.ªç¢çþ~P?«Ðâ Ö£uTé±YFÆ#¸­ØÖZõòO‹­¢ÛtlVY„óþO<]³_Gû‰¥‚âfÛÓ7gѰÅe+ÙùÏÕš·î÷O¼B¾îñmÖ!’Š­Íl >/Ç4Ÿgãp¼hwž‡­À>í4ÑRÑA>äõŠ·ÈY*ø  ʹ&›«¥`Ñ(QìKM¸©Õ'Æ{É[]vòÇFµGV¡#Ú0û! ˹Í!Y‰~&ažž¾Ü;OõÀ5ò\ë7¿Z†˜À³Ï•§š#"±DÖ¼ú2’¦nSwÍ3 ̨™"§îGw¢ó®nj[›'9ŠîæŽÈVnƒ÷Ä‘x"À«†©¡/(±xg¬V«Ä„Tÿ,z ÷ý&Ÿö±=~6#n¿ÉZICꦾzû¼‡AEdÞÓÆåÉ×óÎÍ,ñIñdÕÇ>t…>_ÇS1&ý?DÏ(dWųÍݧ*/¦½e6-—¥Ïô‹`"ì3å‚Ëv#GÚªQÑ)»¢Á|S7ywª—•×qͶ«ã/×®Î)Šø>úhÃl7‚¿>\³-êÁ'0ÿôk6´Í\]Vg×½JõýûWõß—ü~²¥°±IÕ“´9«yUršŠ×Ñ+°c©ï2õ­¯ n©û+~b‘¯Ze Izøã$°Æ¹Âom~쿵êj L ±ßf‚ÏvØ?±ôs…û^n=ezmžÑ}*t‘õ¾ç÷¡zxºÉ˜K}Îä¶¹šq°–¦ªH¼¢þÝ–§ù´Fï‹ë„U6É—5…Î#È.$™àБS¶÷í&ž’Z ;¨ŽýUg–úôUo`%”D~xRÔÚx\y=lÒöÍN^sl>§7™¥Wn)ÕÞ͘È%Øo:òç(‘,8ðóÃÖ“¡¤ä(EgäõJl6A¹Ë“|3Ôn²ïƒVÛߪ´FµÁ–x™x}ï+Üþ´ n?ÄlEØJÝ[­#$¨æI³¯ÏzV(›Ðyy>¬}g+²h>˜?R»ö6"”žïpW%ö¼LÄÚ,ž²¦—MïºþÍŒñÓË­Ö,aså“A¾_%;ë!ÕDÐ z¬‹Ò"ÃÏ óéÝJxäöìEÙâ6°?Ë5ÛÏþ¤ˆÎ•NOV%³Ný濇ľÿfH#ëïÕ{ÃyTÌvä±0aðìJds*%ƒáô$ÀÑæß­æßznÿ˜X¥è¼ìቯ«õtÞå¸U}O†>ßà]2”Ë÷Õ××+·žmž¿{^’ÊæiòççŒýñMi«ŸÁá±ãÙÖÚL<âÖ`äÓôäÕÏæ°ñÊŽÞ%cƒµÛÛË%’zIÔ¾w{…P ‚ô½¦¦á:«âîM­Ý²ÂA³Gã‘Îç\¼-~‡³ÑrxZE9´ûtóLÂVqßr_m#q[ %©§²æË-¥Ä…NƤdB—~¶fÀìReRRìçwK¶¯ü,³“§­ª¼vøvŽ;ŽÝ<#ô7Ynõl¼-¹¸@\Ô‹Q¬‰¬Üi¾Ýw«w«¸™óåš[ú†”ûœäBã—ók¦€gCP¹XK{k{»‡ÓóÑÙZ­¢þÀÌÚy¼¹Z1#Cë³þR$þbª˜&ܸܰÖLô¹¸à—KH2~±´¬Àüù}ÊôŸö6Ô‹RñÄÜ_7ŽV§vjé"¼”ƒÕ"®,ç¢òua|cßOm¿—õóõïŸ &’š±ËXPô`ïPt,ücg sÿ/¢ U¤¯ê‚“ÍùJ³‚Æ”H††ÜðˆíľƒÍ¨°qEèd‚¦d+‡>ºbûo߄̵Wñ¶NèoÀør£ô9?9¼àsxí2% ü!Ù· ‰ÎRFT‚9o7òÉö½×Ü1_E8³Ê\¶´MӼˠ?ˆý/aŒCÒŽ·Î¶ñ¸òaR¡^í©2Õ­èô/ÿcãJGTÑÛYUjm¼ï¶/ʧyžûK€(;hxdƒÊè¥Ã®mdŸª³ì¦¯;˜–-¼xŒY6³YdÄsc¢ëšµÆ,ï¸g€(Ï5ËÕŽ œ!Á¨mUï«ÿ.1’È…sí¶VPæ kÑ!½Òü‡˜×§sÛ³ }… ÕéÖL ϳçÜ¿¬ØEcyqŸöµWAqå&û²âÿß_ü{ê¶òü?ý¨ hÊØƒ+yÛ?íè)šü¦þõù_ŠØ¶%”ÂÈç8I¾ødG†YBsg•åjÔܳ{ú@xúÜí%& åOÏ; Æ+U‡KöùÉãwÏ_qØY4è×7š1‹ƒ‰Ðþnñvÿôé/Ï.žDSòÿK(€®‘·›Ôfçx€ï/(kf?‰µåÜ<“Í½Õ ?ÄP¬ƒxŠBa OÊ$XÇh=ü~KUøØÎVz .óþ %í׊þm{«QŠNŠþ?ƒÒÇšÅôq«ñ{r6Ø¥éUÀß®fñ‚»¾ÔŽR¤ª?¼Lçþ„õ¯|¬¯¨®Çâ¾ëUW÷úïÕðÈh¹ºˆ·hEd ©p1èŠÏ œºœ)#eUvEw þ¹â Q£• JhZ‹e`¡Ô³ÅÍÊBa¨å«C!)T‘#/ww¹=‰QXáôŽ·(ƒëÕâŠøíËöõUb `z'~¡»&rLDÐ)²"Xé¢Äe àÿà—ò†óû\‡ø‚õ¾ì~+Ö+ï+"Ávõ+fýÍvŸp\lÒõÅt3í+È*„¨€ý›1|O€c‚KŸ“¦rx}1zG5c\EŸâFÚd‰Â“W©2O^5Û¬œKˆa¡òG!û)ó+® _^.PŸ›Þo]Xª[Úw¥€&u¹”]û²ýÜ-¼,J+†+Os·ô*ŸíOù´VHÍæ;!¯á{º‚ ´Ò^¡{ñT»hW?Á“{àÚÏg¦¬ác¤¦­¹2ø÷.RŠ1]J±žEá»\ؘ¼BŠ,6g.«ÞŒùÚ¢ŸŸ—Ïš”w7ûžH—Ý—à j÷²üc¾÷icÆz׿Œåj¯–k¥»B3f}±?&JÐ.WªVEèÆ1™óá1àcÊÙ‘”õ[)~ 7ý5to7•V¯¬ ã|{ˆ]¤‘¡à|Ånó“M‡úªŸ»Œø9v©zzºð}4ÖLÁqƽÃJŒ¥t]1±·@:9ÊsuØ@´…ÿ.„­S‚ñœÇ‰„1WM—Ù÷´!/´¡­ßÃm˜ŽøçÛ%íDmk|ïöÀIžõ`„¯ç¢<P)ìU%fƒ—óüÝžX¡ë«Æšr‰S¾Þ&1‘ ¸-6™OóþØ—½ ¢¥ûÕ–Wè4”u!+êcµøµ í×|boúgF÷å%õÔ­óx6‘;Ëpá&ü¯üW0Ÿýꟈ€ZèÒ¯?…yv·gzIÙel¡ZWL0›åó Soœññ¿+EtìhkH^Ï9å9Ý 7ÁY+¯o}Û¡u(âp¦U1tÃÛè=¶¼c`0k™¨‘âî)N¦Ãfwœ—lx÷÷źÐÁ‚ceÔæÏœç®ÿn²ÅKw?~€s̼r¶»ýøÆ õþ—Ä ¬Wÿ~û4àeû=^Š{§;q{Wãÿüê—J} dŠùÓ¢WÖ%LËo2ýv¾ÿÝ«_V‘¿B_ýòÁKàÿæÕ/ÝhýöEæÿåÕ/+bΛ2©àõˆ'9i­5ú¤;zL«ºâ$¹.å¨Íb„H7Ú•¯ú™OMŒW޹‹ê¯6õ’Ü”¨¼è¹èÔð¹h9é9©‡99Mh¯‹>óï¢&¤Û=§ nxÁò8ü™º»:`Ö†—Ù¼=âNAªoÓaí- º28zÃtÙßÛ+ TF‘»óA}5ÛïÕŠ? *£“làsˆ:oǘØ*ns“»;G[UÅ9ÄÙãGÙa¡Þ×ökzó÷—l~¢‚MüB`}‰8@üü—¨ÃxiüT“ ö»7tG¶z±eJÄ’Da¥Ök¾÷W—ÔFœ‚h€ßUÉãPÖÅÕi¿´²÷¬¨"§³R'Æ}ƒbl¬¬Fíoi¼â!'Œº)Øññ‚à¬7º N.h~E¢•Ó|Aú ’6× "Ì0V!^+³×SYd.\¥ºÃõ#õ+h•ý8–wÝÝȆ ÷~àåö8er'VžöÛmd0"ñ ïRk»­·_»ÿã+ ‡6ÁÜá+cÐq_tíß- ;–^>žÉ”-ÝÌ sÓÁ*%™’HàÝ^­Š}ÜÛèÚé+l>mÌ~:jlA´ù}HØÕ—¦‹i~lºpsn*‘8«)Sx)‚)ôý¥±rYSNešÌm#tgi@Xì'…¦ÙuÔIuãpƒ”B0}…‘¡Ïí¬œÝUHU¨’(hȘ>×/õŽ;šîyÌdçÙe¦XÉ['ž× bF–sÏ(Õ¦y(ƒ©Kc’s~Žboó#üó§rŒ¾TÀ6 !Í?ìÖ¦`ɧ¨0Ûkz¼‚”½eêÌ·…Ù;Ë[G0•í-xW<oŸš”¿RÞ‰F·ßys^îZ¨Îj‡ ÐÄF*š‘§ÅôH †}gt‰½ÑþU ³¬Ñl’¯QD§CÇ­yo={)òSÓ¾€üøÚ®lf©E¯Ôkÿ}Û©áwmÑ¡´$Z¿JÉ,©õ Î’%çZõPÞZª%¥þ*&-Há@–ÊóÅÑ›ÂO šÞÏ#ñ†+åê…4a°#qï·‡‡G ÁÙð¼fÎÖ‚¸òbaè0ø÷˜KÅÚë˾d!§(QïËh¦îJKÊ'ss¹OT‘]lŸÁC²¸`ÃIÉÓvÒ ¦€÷^W5¥·­¥)™ÇT ÜÕ«ÑÇ)^ÂoTe£7cÇtûé(Ç¿’É¥„QÍ®œ÷u¦ÍîŸ*È2$hVØ–h×h~pB“’UtXa‘ý~>·Ûp‘”!g&šþ5j ?¿—qƒù7w…´1¯»» {æb…ct?/ͤ1qu^&ÌAÜÃLp P+ñ ãšÕOË!À<® sQƒÇ(¶K‹žN—òÜN×{5¦#B÷†?lõ–˜ß8ÈS«y¸Ÿ¾òaÌå”4œË–,H|­ðÓ:J±Ò\jÃ~Uì¢Y~ó.xáªÉŒ2³òȩ۲U½ +AÛoÈúÍ¥šèGþÄŸy]1ä XaE‹6¼TÀ¸Þíñë}åh\¼»«P[Dc£ "?«®|Z,ãH|!Q‹€sqæå4ýºÈƒJK=Ðk¼×%#žž?kËÄ|Ô|ÊbAçŠsÏV…½D„„”À¤6`ˆÄô» :òb°ÆªwKžO À_ùý‰ÍEùQý"“æaÖU¯wŒîd§¹³çG–£†?¾h:\ù3 Çõ‹C8¸‘cðõþQêêöC¸Õ[âölÚ.aBRâÓ¾~†<Õ&LšZz…új"N•¹³ïcƒƒƒ‚úH¸Ï¬¾éèæœ\ÀDBßhooïà üõµõîÕxï—î5²ÌIÎ×OŽ_Q?âüM­en4œ1/Ÿ˜Oåý¨.ÂÜDÖ÷Û”,IÉܪ¥†¦šo5Jڼ▷cz=žHÌpsþ²´Âò(,鼃NãM·"OP³Ó; ”©ûZIÆØf‚@ÔTTÚñ ñ‰ê¦›ºÄ;ùÖm1ð<Ä6@è³NÁXNí<ÀŸ‡tÙ1­;ûŽ~ŽBj“^q—³Þwv¾.>Ä'ñr~wKù.7·Pv7ìr~‰Àvöýðõ ûàô>Çgœz»i†Òo€?( ãÐrÞÜ:yj@Ïy©4VÑ–¬R¸»yýêÁóU«ÆÁ› ýr|˜äþ ï(Ûîír¶æ¼û­ ,€ÿÎ{)zÇJ±–Ì{¨š(4t‡X-džìK°gìµ>kŒo½MºîtxIs…ñdˆ08˜IÅkîj¤¿ìðŠ…¹ƒ~h-­wt±p鯛J'èÁ™ì¤IS Ž©)BŸËjGçxJJZ‹‰ºtˆK©C)óêÎB¿“e*¶³C•Äšã©ÏÏD›ãñ®¯i’hvè¦Ebä—)¦£#%ü{µkA±]qRz6†sg:ŧrg@RE~Qí¾&GÎXo… :qgn”ÒBâÁKœ¢dΉó½q@Çw9mÈâÄŽ¡5”èÖÍY =Þ6þRñµ\>øôë”Ée#¨UßQÊÆc¤¤´òk#gÊS@¥¾¢•‘qêŽë1€‘ÄöÀ?å–Bô> ycú#_¦ÜýÉáâÔQK‡–z¾Æå¤<±ðÐ@ÐÈÙ6'èQUB³ô`{‡_ßÌ/:XïãF•PoE\kßa… ¸)|ü¥…Ë÷-á°×õ±’”séi§¹°Ç+ΕûãSÅó{`ýåfC_ƒ”gÊcøeqÙ°:—X‰Žì•ÊO9=»ºö´¾Yûnëódó€ó³.¤Ò“Î ílq+kb~w×ÚÍí~Hc¢ã$ðH¼Yï¾d)ÒïMÍ¡ßv(u’yñ§.üÛ;†æ‰¬ò¾}ŽŠ4sÇë¦ÖÞ¦¢D%é’¢ÖJÎúX†Etecòm#Áít3)©'e«Õ‰Ê7‘´Œ;#=Ýûz¿Þ§~c}"Љj°ù€lù#^²Ï?ܳ‘‡ÿÒÜÜ|™pŒ‹¼ß”»°ë ÖÉáß–šÙZV8†à¢n(‰¤“¿ PG;h±•‘¿PRQ5YY~B²B-F²¤  i*²š²¯£s‰P?Ò™$MbŽó ‰&³ƒ¯ïêGæœÿ¸¿,ª<ø·ÙÎÅ0·kŠYªT¥ÂiÞÓ„¿K(q’‰6刵°z¸¸¹Õ[\fJ+ÿzž¯Sm>K§˜xǪ8jÉuÞÝæB¡áõ‰mó#©}ܑ콷³@sKCÃÂ⪼¶J¡<ø<†ô?.kcSŒêß~ï½Rx6ñšôñÜi’˜a°I2¶T¦˜ŸïY=AŠJ¡XHá Á¤Þ8Ô‰®:‰<ãu7%A=‹.ò&Gƒo‡+€:oò͆Wë\¾:8¨×ÿù`EâìZç666F7øÉËùä:×Üâ™´ßÝ0¨ýÑœ›KKrãê(м·7±åÛ+LŠù¯Á 愬Y"¼À³;ÛÛë5í  “‹ÞˆAó£ c#d?¨Hûþð‹•ôâÂ]˜*Bî„ãgab"ª9—¿G…ûlWœ‰x<îÆÇ¥‘ê“ÆØûPú™4²Wá‹kc±RC鞦ëݰº¿—@«S¾Û‹½7óлyº»¯& 4 _e`ˆ<<<Üð¬:ßÉ m¹½Ûono'Š™žžŽó»„Ÿû½m¾] •ÞÅ«8 ™·\ºaÛ)‡¶ÜZ±Z1 {Î¥#N]W»‡sD%[k¿ì”dÐ)Zïßµ´ßý ¤.lfù˹'fæô°«´728ÈîÌÌý5šñIˆ[þ;ÍU®ËsŠ9Òàé“£Âá?Á‹í4û.v¶ þ9=¿ã}>ã»õለˆs±–q) ;ˆlŒŒÞ~»ÒˆFb»·²¯¶™QþIȼ<øä$êîÏRÄáÅOÙ+fÆËÎkpSâWGkO,Ý0ŽîÒkÚ€êµQÛ´hÅ-»@“»o°fÊ;ƒº}µ’ìÁÙSMÒ`y½7Ä¿…RPRRÞ^À+ÚÚ.@¹kÔ†††­î‡4O¾çææZĈb677wœSÇd=^Š…bÍ bÅ„XÉdšûÄÊ*Ý&1“);3.¯|¾–(ƒçÖÐâ¶;)$¹†k°U™::% lûgit])¶'&<:Õzi°U,ÛNݳ9h¹¾nÎXÛ•ÃÈvq´n¯Ú&" *ê{ÙŸaüÜÊʪ$Nw'cЧ¼™îì½7004ÖUÒïäðô]m¥ë#É”´žaÔÍcJ{úÄÇãšmTøœYzkÝGK~ LT÷mê+ÍwœIOLô3¾3,ᤃZËëgÚ%°ÝשFrF,©U‘<:x'`qýv¾d§îª¾E9b¯Yb|­¿(6˜šã¬Îf1Tº—s­?›³ZfêW}´·ù&ï"–÷¦Õ¶ðŸÁ]ërÚ§MŸ…pÎ"Ö|^ÑøÝÞU¬Ýî4Ñ]:ÝMkoÀ÷8 Ú·ùy9:Æ kAööXÂs"îä\V.5€Áq³©bbÑ5å:©©-ru­b©_Ê íGNëe š§ì¦wê/·‚m¯¾è½« Zr”mÖµÔÓNm³W­v<ê*]Yfš>)1¥² > ®Å±ÄœKÔ_ :ZnaKi•;Cøn™€™FÍê[B"V»îã’Xò•šZ’J*†^í§•}Ù/vaF®¦rûÏŒ/’’µ­ŽÖÖk‰íÓ>‹×„**R.gò­µxž25Š04#V„ñcîöFÏ=<Þ º~Èé{ŽXNb«Óž×Nœ Š¢‰úuj°Ü¦i§?ü¬dD×ýΦ-OSþhSì£[ó>VnZ¿6V#ÒÆFuÆ ‡“.§Âç`à’=ÓFŒ¼"Wý¥–ܼÎjXyNWk X¬.ý\ÛééUžŒý¼M¡G8Ho»›´_äíšµ¾×Oç{£‚Ã/Mš§N»õ5‡ZÄeÕdS-îÓª"^Û€Sùn-ÔåËsšiH¯Á>¿Uaeå'"¤Ï‚‚R£›sé#°/Ò>+î®8< b=]/.zœŸ»ß "¶@gÕG¹ÞK>{ºm}rV v³·t`¦MÜ,^'åêªó¡Vf•4·†<«û ôŒ.®Ÿ¥¬IÄm8gUqÞjWô0®nqd§z~vøêÖlå|(Ýå`bÅÚ›ðgÝÏsùȶ¶§óº ýj.ð<Þ°mžê¤Ôƒ3†w±+ùv³%,sy_N[8fC{#HüÜÙh‚6 &ÏçWGRèn8[N‰o˜›DÅâ²6|ÓoŽÖE›â >D(6åÝx«$ /Z ö4᫳CŸA³êÝ'ªõ­[mƬà_kÅÚHŸÚ8eÁ%b×lºr¬"˜ %%ÎEÚÙÍUIì½ÐìfÇ>ð3i=úx24å“Â>gžITóø{ï¾.›êÊj}YÓ<"ÁM;?9^NCö u_pz\ß‚/Ç·H‚Þ÷÷G ôö"ôŽÆüÓKvOCˆc÷˜‚¡é‡“¯>]HV°–Ô÷ÙÕJlå.äXa›§ðy†íÈùùŠ»›·Šµ wç¯Ôú(!ÿáÝ7§|åòê ‹qƒé7×"¡í#ÆHkûýûec¨ÓMEÿ8HLìêv\o÷IÁ1À‡Z¦â/¯A™³—±hµ­v)’õu²Ë4 }»©Ž"߯cu%NÅ<-þÒ]-íâ3'åØâÒ]Ú±¸ÀFg†×W?¨É`µw£Bm.ýàÍœæ€(&Rj ‹”e>Æ&Þÿ¯,É©LPlR¸kâ¿Ùÿ™wþÿØí»ÍH†®‰T5°fÌnäÂANsÙwdINØDggç‹/¨›#¢¤-,@¢#Öb²ç7fQŽ,Õ”ÆOúБ}*œ?ÿ÷Â& üµÎ'äÿyHÐo¬Q^ììD›,µ(=;ÌËÈzÇ8®áflª¾b±ÿ«"çÓšuÂD™5ìÿbïOà¡úúpüZJŠHûÆ|„([¤$Q!Q²¤M‹† cF3c+Ú÷…BD‹B;mRiSŸV¡BiOEiS¢)¿sνwæÎ¦>ÏóôüŸßïÿå5wîœ{î9ïsÎû¼·ó>hQcðã~yHiLŸì =•œÏéú U“ Wê¯Ø2³ûKAáä9Q5©ý칤ž£¿eTùÎûáœv;üÜÆO\øþMÞëŸKãF{hTéÖ×:”÷êv;lpÍ­Ãß\Û1§Ó«´ûV§n*à%*ì¶Uç(óí Öìɼ£W&Ôwšiê”ØórÅný™»CnŒìµ–æù½ÛŽ½ÏæL{¹ÅL¹|µEÏÉÅj¯æç®-^Ù”0Áuð ]AÌœŒŠüNy'nòu¢´x5ç3k3K_‡Ú§ÿ†ñiÛN>æ¶7Ôü‘eŸþSìÞÄÁVZÓ4›»½zS?z•œŒÐݯ†Æu~ù.<õ‹×»Ý>y‘SêfszŸ³â5îñèr¤°ãÍØž÷-:ŒË¼ôék鋿ì#^ã‹øŸ²Ôy]ãOÄ;2ŽZ§l~zpºàÚ›¼ m«Ò•†jþôv˜Á:+vö· ©ÜešÓÊÛ+öÝõúq¤æåáŸüæ™êª¿èÚð.÷Ê‹³곜Nÿ< -äX‚Ê]¾žaYíâìKe-k¦M±¨ Ûœ~|ïÅöÇÖÞŒíôB'³”~úÍ‹fãöOíNûæ[»ßÓ{3—V8uÝ;K~lÚ$ßðø‹§’YËzÎ[Q2é°S ß­ìàˆÔÅk£7×]ï35öÀ“Ðçý“+îõõ¶¸—Ua ~Ca˜oiþÇ'ÍÕ¾.6#¾ìÒ)Þñóó˜ c t gm<“éٮ7sÇqæÆŒ¡6ÙëK¶„^¿æ¹öƆoZÓî¿ÿì“ý¥æGÙƒ¯úX:NØn8¨`ê9§®Nê·&rû…lZõ|‰mJÙZƒæê½Ù6ÃØ?ÎìÔ¹it3{Èp³,Μ§zs-»oÿþ4Çýç”ä›ÎlºÚfßSÏÍìø¯š¯¼(îÓsHyÀ¹&kWϯwó}Ñqëö9ë <3Ru+¾¤nnÚ²6<¶é“ñ"Fø¬D³‚˜XÏZ§­[܈´OÏe _WŸÒ¸9oy‚_Ѻ·Ìžõ/ÕëŽqÞ•ùÌMµ&_XüÍYëàø{5UýÂËMùni›Òò ÷\½c‚þü¢«®‹í¥ÕîzU›«ã``‚¦'Noš•ðrcÀ!Õgíb#s6é8×Sðad‡âh½Šèof%2¶pý6ä]ŽôOi™2+ëâ¬Äâù;bmâ»õJ»à›×¾·é½•‹xöxxtÆšÇWÇsgÕµ˜tU—·À¬øçëÁT{£ê…7‡¥yYë\™?gacð•Y]3§Üe&,Ëä'ÞåÃãáù÷ fÜŒ/™Vþ¥©%5´¼Åe{“íË[Fù ¾,<—joR4%<5KçÍ,¨hy3u‘ݨ§vƒÖ,:î~8cbY1P¸?3¾Ô”vu+û>ßâSü×7 ûæøÞçtúp[a±ÛÉä†7gj¶¯ÎÞ³Ã÷Å„ù&«Ó° {j¶mýìï~¸gWì¾§¬á€ž…Ú„qn¹úÒo§cŸë¶_{ûûN´\àQÁ†m·¯yœ¥³àáŦ¦üЇ±©fKÉÒye¸ñéúãËÀߺu™ç•°-è¼aBçÎëõ]ìFP–ˆÑw”1+é|NYü¨ÚÅûT±k‰ÂT£»ãdð¸R†¶x¢Š#è¶)d±Ý‚íÕO¼,T°~ÁUßÞ[ù“[¿#ŒóßÔÏ;Ø×ªwüµT­4Û}??>~q*ö¸$ ÷üÖÅê/ˆú=†[¤ß²Ôzvg¦B¶W®ýÄ 7Wè˜5|@íâ|jw)aû^È‚zg;5^7æ1kî8lN¹ÿ(“—ÓnqÜË›±ÎœSù/J¿nÒ¨y™Yêù1tzÃϸñ€hþÐîÀ½šÎ;‚î8mNµ›tH‡«crèVŒµYAHhåÑ%yYΙ—®¼ˆ™&uféóAoO/H9ø*îTÊÚ sù±ž;¾ìýèób‚©}u´\ÊpêÔpzÜ#ç»?¢[U?rI¬I;eyI‰uä¯5:zfúƒK€MÌ:~x÷Ù¯Y?*ú²wœM;{¹v'6ߤÆ㛨Zã‘ÃÖ[Uñf¾¥{Ú$?“È.)ßC{®ËMøl=bÎÚ¬y}r·©H¾ÂÓN¦¨6 øÝ/Ùÿý“Ô ©…'šìŽ^ØñëàÉ÷bcÆgÙ¼ú+á¬sÀ£â¯Œ‡Û5”4¾[˜x|Tcºæ‚Ô-!eøn^ƒ®Åì6¡Ù똋CáÊ5‚K-œ¾ç5ãLžÍ»WNüy½ö€¾z­T}$ßnD‚~ͧF>­Ø6’Õ¥w¨NÉá[ÆÌY‰-.MobzB¸®Ž+|ßEc‚fîò‰[Ëc]ÞõÙ·þÜHžQîwí«]¿e¿`‹9ä’xÔÚÝuBå€..®Ãî l*OÖkøbH@§D‹òFý7 βaÁ~êƒî<<ð`ÞÃõ“º%ò- Úyö~ËëåóTkwÛ–bvèÖ8—ì¿§s_¸o­i€²C’S/«·NJ¼•^Yñêû]ÖÈò/[Kî^h:!íç+·mñ‹N}ŽŸñ1¶ò镹 ¥.vÚþ¯\Ê^5× ´ _pÖ©›˜ž=²v'玞¯¢Câ‡Ô“=»(Ü. ³ÕîH¹¶yÒÓQ‹æªòÝv¯€µ’Ø\æÔ`yÙ‰¼§fGo5½\»3=ß ÷±¯&vaòK½éDzóM§òÒC¼@Û·W$ íé$ßq²ÁœnÅ}ǧ¯ >dÖ<ªç5Áó¯Q“ì¯ã~%X»æbdA2oá÷w§"ß­«?sË©îeËÂÜG}}§¼èܰЙÛ.´Ì®,þøò„ÍÉ…ë¯Ø^ÖxoÚfÀê°Ö—UËj4]{äœYº+uà ÿ«Ó–.Ñ )«ÜîòJ7ëÊ»  ?SësÞdÇ<ºQÞag¸÷@IÖ4›{°+  ¡¬›pÙ›“oå»U@ s¨k…qšŠÊÌÆ7ko½½¾;çeå¹fs“„;3g¤™×ÄŽ˜jP2 4w/»æ¼SÍ5Ýc§ìŠnŽ<úÃàæ“ƒºÃç5/ª«Õ­•säñm·aîSšYù­µ[3,,_NK™|7ñvÁˆ3 Ù€Š¬Ók¬ïöcØáÞñC’Jj£¾õÍo:>ãgìiçþÉMGZÞòf=œØ|èð ¼ø´º¡ÓÜ'ø•Å#Žú¯Ó>Á.ýó‡»l[ƒè•û¿D.Ó¹ìT<ì~Y@S㛌¨ø¯.Õ,šÇ²|sæü4"S€$þÊV+ÚúÚßŋ҇ù©UäÓšò *æ' ,jª.ÆlZ5d}ý77fj*|1ÈòÍñúh½nWÈ·H¸W2¢GÀÏ¡çNÙõ Õypþ{hÚ£O%¡ª¯B³^ÖÔ¬¨®Ùt*iQzÁ·Þz©§Ïnw Õ®çѲzÊ·DœÃî~fk}Ž{eVzôÓ5©“êýºGê?Na¹> »7hž±ýl_¯=ù¡U{XüÊïñðµ ýmpžýÈÏÒîø*A<ßM$p4Òzmèly+ãËÞÐ,0ã±é€tÁ}Q=§×§=£ð”‘¤¼ñ bÍ7þM·æ£{ûÃ%‹ßRì¶…&)HüÇŽ¥V#FŒ8ºgA5=so" >¾èªCWïñqÍ{÷î­ør®îˆËâ{íÇÄtU1žqbÎZïøIoǹ]­š·g¹C×ÝI§cÜr7{¥¦d_± ¼ÿæãç>¥Îôžmò¡–u{eñ‡”‘#F¸ŒÃ^e-?UA{˜j)¬ù¾oM$ßí³C“çøvtásÛÒcÑ6WädTOÉ- ¨Jh_{Ë;+oGI@øÁÉ«Ü[^^ê×®lë&Ø©±>O^_îêó· Ö'þZÓ¼}iYI®•Kϧ)Û*’2’ÝÓ]™¼ÍZ‘µöxÆÄs¯V\=ÎÚû=®fšOßäŸå›&%=°¸]6ñ¼>ëôÁøUy:ƒ¿=Wž_EVÏfß¹<ÿÜÎNË“CTlÍ6³±= Kèy7ƒÝÕ¹¬øe­™Yùé‘o§æ4Æ;Ÿw¨hy®Üüœ|ÙÿŽÞÝ÷×÷jê=®sfk—{+ò¦l.á䛽\vd˜þïí㌿;p÷ÀІµ7T†­":fIä-«!î£Â?´ïxM˦xê´­ ¯ZN8+5k<:–wiUkŒÝ­Ê/§/pË™schaqå)— ¯éydݧÎýC¢fõµ9|Ô!ô!ëI„’iâ€Üâš=%ìòIó÷?2PØz‹Ó÷¹ð:¸h˜8±ÎÙc=ôYÙÍ ÛÔBÓÐàN‘w™Çz­Ž~©6‰a7°÷‡sw艋Þ _= ^½sôfÃõÃf7·¿ /ôµ¸xeÞµ¼A%³†gOM-y1ÜßaYI×' m§ÞÓ›[^$ÐÌÒÒ ïACm&–©ßÜåœé`v³j]yÉ׃—~ôÕÉYT9íûyë×üC.¥QËÞl ¯±LfMº•zx°åß@ã-=7xÂCú[õÉgjfím¯?Å»Ö}önîÈÆÙÆ7_$/¹¾a|&ÿõ™„¾;Å[åÒwjä¡ô †[=ðÝ4WÈ‹ë®^Ñôm¹•vâŽkñe#t8¡Óo–ñª9?fÇŒ÷¦_\ý·—N—Y þ¸Ýèáµúé“NÜZWåðòh¿ÜÃÙ?*2 v‰V_xÈe™óü3Üc'jVدUIœÙwÆÉ— ÞmÇã%¬Çêã ?†ô{H…óÎMŸ&O8™Ï}ù& ð¬,÷Ø[žÌs)òµ¿io´hØV+ý%ømß™wí^•üÐ}yÌ_¦/»1ø^O¶Ôڗ컵¢"˜ÁîcYI/É. ©c±*Ï Vi®&ýmþÇ“n¼ÓîòÒìÆû§zoêÜ É«Ø½éMéfq)oVçÝôñ9'^†ÌØ´Ð9`t:”e,ÇZä¼Ç0ÔÎ÷r ~ÙÁI#ï×=ø²jEy¤ì]yú [O;é?›õ(M¿¸¦¡åÜœ’´À•ƒõMe%ìŸhñň}Ûwšr¹é샻k³ £ßß2úëœ K¥ïÂUqê}­2?½ãΜýŽoe¾µÄB'mX®[NÉÁ.»#p_ZûxxêpƳM‡Ž³m ý¯ûl°»ÿ7m«7Á ¢Gäet±›˜VXUv½:lŽgBîÝP†.É’Ž»ñ,ÙåzÏÞÜØþ}Ï­önUýšj ÙÌ8—:ðÇ“ÔâÜɦqïÕMÔ¬›`Ûp¼¥1dü÷-ˆ1Ž0Яwîß0¥q³SW ×9á\¯Ümª ~ŽE9Ï-ÿÚ3áêÊ«+¦o½ux`Jn.«¹J1 µñ1¾ ~¬»Òôƒ{juÖ»Ä&ÃuWòWwÕz)ÊÊtÿx¬àä+·×ØãÓ#nßêoSQ>/dõùP™¾I©FàØ¡œÿI!µÛWœÛ¤š{âbú2ŽgÃï9¬+ Ù×ÿõŒOg—è…¾Êw/ZVyÆ(Í×oO ¯xËÚ ‹ŽZ'fTVé×òŽi|a1Ól¹4{çj»Ù_¾Ÿn²° ß-*™|76-O‰ÂX)Ç—ýLQ¬ž·F¹n(7ƸÚ.ôçžõ&çÌʦ^96}PÌo}Ö×ýP t1—õµ.˜]ih_tã÷ã#z^îá[˜Â2¹¶:íqÊ¥Y‰×Òy4êéh3ÆP›~\ÔÆ{«AÆÕ‡Óç»Ë¼41uÜGÀS"óß²êÍÕ‰î¢A«MJ²÷ÏÞ38·Õ Äß-°žqãì‚/cR çOØqfKÉ“ƒ±×”ÆŸÉê¯ ¥çO¯¶Ü°ßü^õÑ=¢„è«…¯?ÜðüXû×l ŸÅÞ¹ü®òö’ieÄ,L­ó ž®‰*×.;w˪Ð^=y—ê}çåå“ß5ωº¯wÁwíü¥dã™fNœ†g4­š²OÚШˆá‰W_5Ì9v(Y£ºîy´¶é÷-z³Òæ#úR\좻AÉ–­õÌŠ$_=_ñÝÊ.Ž©Òòz¢]´@§wÒ»¬k7òןÓú°¡Ð~öB@j¸~=á;F¤QpàüUq›Ö Ô]ãžu.ô§r¤2ᕉ!Í·vÞW“Æ8”Ûm¶õøŠ­*g‹ï¦ÞÐôˆ¦QeSQ2a¥uSN¶‰wÎù½Eîƒ'˜÷­*;R¯d{`Â`^ëŒW1‰Ùê¦>ò3â/ÏV™?/,Ìü‡/ßitš` ïé«´,ç´–åñÅó†ä3tˆ61M-šp$NËõª~jΠG§/,í5*Õ3mÂ¥‡Þ}]ØÝjgÊÃ%V¹ãŠ–l®¢Þ»á JÝËë“&rÜîÚDyw¶ëwò@ö¼pçõ‡>:⽬Gòªkë§ßÕ”œwÀtœv”×–^q_Þ N˜³Ùü^ö뾋º'ŽÛºùÍù»} NŸÈ¾ùã‡ëù{Å´Íe@Î\´£_È­ì!«§3.×›\e €.{Ôߦy׉ïϧzždVØdlÌËÎh¹l•}ô;¹éõñÔÐàX÷r«¸¡‰6›µhÕ¤Ú}kŠºu¼–SïzƒÆšÛ}mçmO‡˜:¹|ñœ˜0?äÆÙ°µ°¹»c¶…$è¾›;k쫳B&9šNNQòwL^VôæKÙ7´7êNöÞ ´¨c6ç±ÆÁ-lgêW¾[°ïm£æ7o9ipå>ylkÑ}sºÑ®×S,gFÕYT|øVʳcË*xk]¯3"\zÖFå¬ÌqsiMç¯úÖtO]7Rpd,PªÔj³*sª>JI,˜˜81ÖÊ…·÷ÞÓÎCJØiEÙÄä; ìzqX<×8de^ù—W¾QÌÏgod¬õIø°´×µøö©ÓŽÞkJ>±éÑÉ•s—U <âZ4ÓïûNs¯á!SžŒuƒU×XfX[ØÓëÙPËaßphwgÞ¹ÜÒ#¬©ÇভÙ_¼š*¿ÎÿYÿ$d^ÈŽø oZíõý”÷5äî¨Û4†ïó~tõü“¼ë^N9Óf¾‚|=kJLÆZÞ‰÷1Wõ£–6/:´æ¦›À÷Òn͈G!3RÒ«ªW¦ èTÓý3¬gÅΤï÷"÷¸ì¹êövEºNÕ¡S—·LH~x<·B¥ï}½sOvM®?0l¨áÙcÁO{˜ ýÎ'ΠÇpÕ†. uóYq£ÿ¼Ö wÞövOú8;§àż÷--[´£:©%)HGÕ wŸ¯k}^š1ûéÂèÝî‡Äÿˆ»¸¦zä9‹IsN^{8”åd±À'$>;uA|F8èv^pÿú´ý·.I†˜¢æV¿·Ë›ôôjå/gé•$šÙOö,¼‘¼%eÐÃås}Ìkõ=³½ß÷œþwO5L»—5%¥|§ŽëÕèwM½fÚŸÞ<8§äÈϋÂWß²ýcýÞ´ø· î®™¥ßɪŽ/oÞ=5•ãáÃôÜ\ÉT·8óqBι¯1³ÊviG”Ôá4• oíÖ=gÖ£k§.Þ¨OÎ~avp_︼i‡Ž¿¸§µxá«´o¯æÍ^©‚Í]ö¥aV×Ê ªƒÝ¶<ñ´3•6Á¡Â>wl¼y0D#øy-¶xïš}p¡üº3tÍt¸ƒÏQZO´xN½°l÷í8D «clÖPz;Îít“z´¾~€s‡a¹ÈA¼¿4½×]0Û±m‰„Ͻ­<]v¯s,àfîy†I^Až¾é›©³½÷ø›M9´ÿ ›1°"v{×Ó ƒpUÍq_Ò_õá3s3²S'¬ ?ü°ØìézÕ~[Õ± }>wµšq믶-'Ž»8gÃ$P±#×3ñËz­âKÓªÎøw{—·+aóË)[{žÔI›Û½yMZ¶_’GdçUÜ))Ÿ]JÕºïöžÿWa¿9IÙÙlºÝÞ¼Ñ6•Áÿp{ÿÈç—6ñwš2³(2Õ¥üÛ”5 ËîvËjÿ‘·tç z l·ÃO¹¿mßšÍ#Šâ³›6%Fÿ`†çaØÝ­ý¬†\Ó׎›tzû¶GMUîýB°3·vµúÖ‡Ý4?ÚÚ”uû=cNðؾñ¬ÂìÂê÷Y=@ÍY±wª§mxljØVÄâ=)àÜ÷•@ïÔze~7جn¾ÊÈô¥÷«@GElúV ì7Åì0º˜{ü>¶ã¦Õó¡ýÁ@³øÐ0¶Xý ˆ­›4=þ+XñwÇë¼0mš¡¾k÷Ÿ–³ýK’[o5',˜°¶âTO¯9sj¼Ù\ö¶Ï²îo~˜¼ËRx¹èIÿ™†îÙ]Oÿ0`GÜ™ž—ì­Ý»hÚ°Á7vÓg¿³ ö*cêfäý Í'–X¹\Ó_SüZYµŸ³#ÛLáBûGG¸›fÇåõH¿z*ö–ÕŒ/Î{Ìg|ed(¯¿¾Å*¡bNÓÀâ³ÊSïìÈØTh}šáÛç}¶U™a;-7ŠõÏT³ðe艹Ø>äôY‡ìwvÒãR'ôñ͵6‡=åü…˜‡GíÚ%GNË}bÔ4 è §]¢×ú¼¬O¾Ì÷trê×:={­6òÈÑÓ€6-*U·¶`Ä»ˆ¸ð1}úÙ 8]r'«a¶›½ºiú›ã‡GöžUS9bJŸ‰# ç?]ì;©OæáWAÁÏY¯Nœ™t±¹Æ35?&rдSRbŠg5gsp=°ïÑ‘Åá}'£ë_Kè›’þàȃï÷ß;L?¸)ôgDöàu6çJò柩Й°Ç4¥àÇÕôÂ䲂ÉÜÝ ÷¼Û]ú4Uýf¿‚YS}"÷Ú:,jŽKßÓ¡Ê»™5~äɇ½£MΟûTñÕzرŠóÞ_OU“Ê.)~[có {?Mýð Œæ¦ý¹'=v˜]<½‡³áCú`@äæÖžô©ñœôíP›ªÔ!e€çVîMŸ9Å]Ü_M®9VöpG†Ú«UùñG'TòÝšmö~L¤~8¯tîøŸŽ‚§–›wϰ¬žvè5À¬û>úIœÇ[œ?GG°‚sãKäÔø?¨:™˜ž®{ +k¿?ûƒÓ”8§©­ó5­Þ¬±oVi‡ÂQŒ‡&­,lÞ÷nhÙyÌ&dn´“ú»÷}Òï&›>¹ëÒw~õ©ø—gÊ÷d>ÍMZõòÖ93‹JǃÏì–á÷°7j[žwê㳜Ù-ÅeÙ#çä[X6G<~àsÆÿú/9F•Û‹ªÛ…;…o>zmMÑÈÊsÙ©ëN¬_ðØ‡½ªòç‡t›Æ ×a‘­š'ìYû[Žl>yãGCÕÏû¿¤fßt°¥ò|Qåö"c%Ãé?Möµ<›Q0¢apHlÓ™¢ãƒZÃ}Î;fhiêõôÛ]r}¿º[ö¦„z«’úž±o’Ãì稛¹NKž™2Û"‰=eΙ¬¸Á!µÙT+RÖ>=S?nØ‚¢àsoLìæõ™:cvtäæ÷–Û÷åîÔFKãÎ&‡óF:­þm_ÒñÜÄÍt *'õ?ðûÉÖÚcçm–•ùhO~\¹úkNpÝ*ÿ’ÛÙÜi™€qÙ¥ºF‡«Å‹l·„(>sñÜaçºk—ÛÃí%÷;Ù.tÿÖyûÀu\Ï,Šw7É‹LŒhÙÏŠx¢¼J Ë&ßq|¹ðýÕY“Ÿ·¨bKóê4ÃGU?òjóM?ŒPÀ.Œ«[pHõRg ÛÑ«õUÚ©Ê•'‡ ¯€-¹1à®U3îdéifðìW¿®Œ-ÞÐ0>Ã@Í”Ô'fmZRËMFÀ¨Ý1lXR£g×q*õcÝ&eµn^o› ’jm7{Càa¬îÛ—nV…¶ÃLfÏH().¾e¬€Ù“ Üaû±r‚½ÿ9ßö ã!B¾Íã•‚a•u_â&ÝÙV\Ó0Q5o•.oþü‡c)`O·”ÄWè›ÄV;Ð5Èbh—.9áN(aS øøEFF2Õ/&–»ƒÂŸ´îë~oÞ휧’Ö5½ßµ þ»¿ †í´´E;l²àrèØG»ÖÌßçö—ÉÌcퟜÈÍ:nÕxÕÿMk€ÏBk,ﳎU©ÏÀÈwYkVg_/xt3¡l꽿*|™Ú'y5wÎìºxÿÀéË~f8¥9M®OmX‘Å⻹ü ¨z¯zXôuúÁÁF•ÍÁçë2½ý0ù½aûŒççë1sæ;¯óMeíãO/>0O5³k¶O«g×ÁÌmNëô-Ë)®Ú8cÒ1;#óh£w›Íh´wШ»ìÀe_Ç©+|ü2£¾ä¦‘‘mŽnzylÁÚn/#YvßžºÛ¿éåvÀÅ_),.Uz£|ßšó}‡f9¨\Ë žBr :Û¦5aÂȆU§ÏÇŘ^Š»Ytòk ‹ª~SŽÃ¡úŸ'ã:=)ºÅ¾¾±ûÔ…Æ¿V>Xn|ì@MÚëYš~NÝ7ß™yÞ¢UËùðYŸþ oF_+XúªöÑ䃌¹Ëú÷ë7ý–[ïs»ѯâóÐû×xzaìšÌûýSæ^˜x·6eÂ‚ŠŠ£? b/ÒñâC0ÌÕéí•”\ ø{ÖǨ1MþÊ=Þ¾¥D­¾NsKáÇ(AñÉÜ×cr"’³¿?YkÿÅæ»y˜u”íôCˆî@"<> .êÛöåQåü_ƒKô+Z «««ÁHM]©‚_ÖËŸ¹ekä]¸oí§°~‘`ØšC ¥ªUZÙÝàê¯:™HR0Pv(îþÄŽÎ|ÏáÁ h‘»?úÌ™3€2¹{ãfÛ­%õþý°Åö¹3*Ý.t½ëpgy@Œ Ëý:Ãn÷þ×~žÿDÈöY…ås£ßöÁ0÷©Mæ;9w²¶VÞFÞÌÙ`šEõ1ưé½B¯‡á[ü~‡`ʪYG\÷ÍÉ;päÐ-öVÎŽìbn‚ïÇcÑ…Sõ6§xä»xn-Y4lß_®ËÁA#ƹ3â&TGdemKþètÞ¾ãÃÓ^öÆ0u0•uCïŽòœ á´5E§ª¡ÏÐq}÷­q}ÔVº®M(;7¸”gVÖ>iyW‹ïÓ†uÊžâÓ4õå‚is6}·;Ä7>µ6ÞÙ‡çàêZèz¥á1f;¥6Ó PÚúN'«3Ͻzc_d9M{þ“{'+Ïže4Nšyéé]“Ë»õ?䔬Wšõö;Ø3µB­äz@iñ@Àr³–í½¨¨yè6zÉŽ·þ^3`˜ö=ÐëO$>ÕU«·Ý€Ä†5Dl`éX5My2èRåͪ1ÆÃµ”—v7[V—èqg³š“ëýOaÎÉ›´W>·HÞ§çÒtuÅü¸KÏm½è­ÐzêX:×yå¼³IÛwÇ%š3î¢ùúÝŒ—Z&cg\=¶~éðNù¼wÚJ6Ø›ð½—vYKešêÝd¯K4µÍjz¯U‹dtscxɺŸaÏGžC=.>¤æXé˜èžØ5G¿ãJŸP–ªâîÖþ»ýõ©ýý<ΰ¿š¾f÷׿§T™Fij+Gò,ßf€Vº~rÑë²R—î×=–ŽþÛý¸šÿ(Íœ½—[$v^PÕĈéþÆc…gEÆRsªÚ+ßîM£÷º1z…ƒ>½—ÚëË*'~}|-ccŸ#ËêNð>†f{¥.¥ººËFs|¾)pz>˜^Ëé½–ë:”ú¼Øj˜0]o#½Ç¥× Ášª—B´ä®ÝîùTÚ%šöe µ¿ÍµÛé:l2ÙD§]²Ö¾Þ3±)*f÷‰±Všªº½W+gl~½k_Îô•Zúiøõ¾zq粟`Ú¦·Vw÷ñ>WŸ‚®ZF§ÍtÝ_}cR¿×ÓW\ŒÑçà•¨@S¥MæÇeŒÓâ¸Xkuwý¶f|¯ý9´Ç ËÜͦUÍ¥]ôh73ãÄñ>+-Ô˜ÞÑÖ:)vWv½6Ü'éíÎK Ÿ}Ѳò¤k¶wè_¤ÛCßuÅ%CµW¥¼VIÏî•Þ-¹ÉÎ_ôíÑAZ·/kÖÿMÛ8½=]ó½ò²éFý9G庾ã±çÞ‚cúÁƒWçulïú³ËŠKÓÛkMÐ\®»DKuÙCˆkustønŠk8I«èýØk:.Ýnnóí³EÒxEÕNê ¹¿|›8äáéŽzO{_Ít˜?V]•Y:þ£òÑÕSÙ}+a÷©-Hÿæb<¦›šÒîϹîf‘‘=2wuôÞ·RWëÊ„5N~ª>‘=Áä÷p¸F‘ùƾ&—Ì;8:¹Ùöy³ì‡¡wÃIg@÷÷W|ÖØôãõƒëÞðºpêuùãÏŸôŸï ûé¬ôñÛT—´¨[ëÞ´•G÷×ÐÜÙY×9ñÊ™FŸäAý”.§>ŸÚÏD1ÿùRÀΓZÔ[ ·ÞGv;õØÕ§Ð|õÊÒY¾¾ëçÄ~ v®fÛ%/I5q½õ*1³rÎì½YWçÛmmµm-Úò™×rË7N¿ÙoçÞ¢yu.;§èMP­ÍüÌû^Y^Ó`˜ä«2¯›JÑèd-'ŸP£ÞãÆ>3ºàKݬÄgUcWíø÷t]«õWíZÎÓ¿XXÿmî»EµòúoÈ<8*?m] †Öœ•Ãs®;8ϼsÕì&£-?jý¸G¶¬Ï4\;nfÃÑ «×F6”ÿ°/X£ašé¡¾ÌCO³ÿ„nN¡ë‚rF¾1ǰ#®£Š­< ´Yª_<ÚÑiJkR6©e|š>ûÊó­zÞŠxy%Ìæi¼œ)uÏߎ³ï[4ýEá‡Ü񩧯©­¶çš?±ÅtWwÒY4]ý•ó#8ûÖºæ½Ë®ðŽ÷|[—xpºn“ãÒÊÕ“*6ü¶§!7 *p×ûƒÏŸF[ùž¯|Òçãø^jÏ¿~øžnúêÞ´ÄÊ剾:û˜¶>ã觬¿}i)òõu;‚shiÓ{¯W Ò Î>N<X³ª5fçcEÕ=ë¢ZË_WÛOŠ+h~õÚÝW¥²`mõ fÞ<«$³”Ì'•gg^ùqረQ}}Kz¯î|(âÅk×Sѽ€²™ŸvG;íýzï˜Ü€ª· îu+üÌ9×äœý–I Ó]ÉñcŽl9ðfs±iäÏ#¹ß^—¼ûxþ§¿õtŒ×Õ/S¹·t¸–Øô¨êÓÝFXë¨|Ïèº0góòeæIE~y0¼àŒgiP¯kZíyÝcšgÙõwÑ«÷dôzç¬{ñCEÙ¼¡3v¿ŽÏü6nÝuv¯á·â°Å݃íïe}½]=öjƒ¡ÚÉŒ°#–}®\4÷²QcØi›þ½¨øË ‹¸ã—wéëÊ^¥µÖ¸ÊZÍϪçnf¯•EÖ½\µ~Xh8­»œá”¼iyUЩÜû6g×.]Ñ9sü•áÏývUM×ÝÁRÄ.øßÜTíªî´cjLšî€RÝà¿TmúV5´%ºGK·u=6N]Ò2¦:ÀxÐ &J»UtµÞ0w:Ží¿Ü~öò{žg»õþ°Þïý ö‚@S-õ)ƃN«f05ŸŒÏÒ×^ž±šÕi³~Vݺh/°ÖÜä±0Î?ç’IwµÏ7\.òÔÔ^‘>î“E²ûØØö;Ü#í»vÉI4}íiÏ ÿÞíK½2–ôó]±«O‘תM—µÆ-ꔹÎpãÉ£ÚN®ë’_븶×uý\;þõ£¯³! Ù»jßš¸W¥´µökÏwé=Þ˜Þk%¯«Ó„MîcKuÇŽÌ|ÆëQzþÇÙ»Ÿ1 ~Ǻm}ÂoMÆ\óŽúÛæ¨Ôog¬åhÓçò[×¥/™ ]+K½T–xéÚä¿ÈTܽnÞÜè…®’‰Öø^kÇŸÚ]Y‘á4VõÅ3ƒõ'_lgî3 ,8r̾…9Šý×:êjmZ²ÏÐCkã’Ž/|_5{ý}Ë@÷h‚‡ã5º¡Î€.ª«õÞlè©»+¨äÇ ûv¨\_ùnÞ½˜ß®;|ÞÙ;®kú ê~À£®ÖÚëìa?_PUú{­ÙF«ûå ¥5ŒNF&*6v¼šþaå„ü殎íuu3Âw.Ý΢Ã0ØÐ¢[ïöÞÁ×ýïcö÷š´;‹ªÓVz.ñ³ÏéxþÎÍ™EÓ]Œ ŠÍ*[¾ÌµHm hy¾j]£}1s`G†–YžÏ œÌ¨/úš¸^)²V[öã\a”¦ñÏHÕ±ú®Œ} ËŽít—ìÛÉÔ›·.¿{, ²ðöq¬ ŠÍ¼ë±—×¥ÑF›v]w>÷mÞ×+5· ªž4¹7˜«¥ÿøp¥(%E·an¯"¤ŽŠ¥»ݱظ½ÖÓŽë^Nº\à˜¹«Oëü˜/ñAõM¹åÓ«ÜÿnýÊþ#«ÔÇÙõŠ…ÚÝgƒ´Lt3Æ>Õ^E7üNKŒ¦Þ’®ž®I“´º¯îøbLÑy(`Þ³ öZÔç½G¡sNûA§TÿÞåe³±ïš CÍR¥îìxÓ§‹¢"Â4?¬×W lÍ,ø^ rkQã‡o•×|cz¬¤ëÝ[’l°=Ðù;÷çÂ…ó[JÞïmzù%&0¦Ûl_£Ms{éYz:^ã °Ð,Õu]Óàx?1±kHŸƒ£¹JØDÀå<‹ÜŒµöõ]“â³h½ãþÑŽvW3œ6üÝtíõç[‡¿.´ì½âù‡½ß+·]Zs±:òyƒýÄKï>Mï<ò쩸‚~϶TMkm 8?]ùû™£—3KãÔœÌü<}]ê=ºzê:7Ñ¡êÍ›ýá£N;ëçGZ³zßÚp]Ýù½‹6<¾j™ìÙoÂNýûýK­©æ5¿üiÝü%êS¹ ñõ·¢ÌáÎ)ß|>ç•9S¹caÓÛÖZ?Ì]x®—ýVGú©Üîã†Ûü쥒Plæ©;f£²krá¬Äµ 7 ]x[†r‡Nuu¹{ÑËhsþð{†„xöO®œ6¡Oã‰TË‚Ã×(]ðG½~hV>\ ñšãXm¼ÕºO{Ý11™UµÛëÊ?ÍrÞ[yná§—›vÎ<8Þî@JkýÛÚ»1õ:f¯6M\´å|KÊáÊ–š™M‚ìÆÈ/'Ö¦d¬佄ÝnŒÅÆÎ££cz)¡-)z¿ø¨[Ȩ­%ÁýGîöò–Â)æ„´/Ê.Þ_ï®ý<Å cŸmŠ±ÓŽïŸ²jÕª&­·öê_ý‡g8ÞÙdÂëzM'OÏ3nÉõ»”Åyï»ZºêÁ§OŸJ2?ÝŒªw¿õy®íމ7~}^²è\ôÏW¶¾éÛ;>ÂàL0íù×éíÇ»/_R–‘²d¼±ëÒ] }»”}|uÒZ½ŸÞl²Q§×:ñÌÎ;2Æï9é¶ùÜvÕ z™]] ÆíŸïäùµ¹§ Ù‡ã¸îºE“ÂÍý»¨n.tySÎhÇUô^ãÍ[é6['½Ìì×’¾,jÝï?>SÅëÙzÊ« ÿÇ÷ëïÜŒëìðÁúiiÑôEw2WöÒËë±iôµÙ\íIî«GŽxÕ}öü뇇úÞðí¼Ùâpr·Í†=ä²¥µ8icÀõžöèö˹yô‘ålÏ9K˜üýe6]ÿÝì‹qiÅV]ºìNÜXX»áòÉÌ•K.ëZhæL9ž6PÍ>®2öÛ‘†‚†Ã­ßò:ŽùèbŠïyë–' ͵s¶»ò ÝŒÙ™rTmiÔþòŒjƒT¥­ÝÝ™ZË6åWsnߤ¶¦eSÙiºKS…Zj'ÍÍŒnÝÞ©ÿÎûà£Á5·­¿Â•Š/5iÆþ3®6¤bƒuu‡kµ¶Ö>9wìÅ8핟Nœ¥?éŽnZjõ´gŸúßÔ?.Ómøã3£·‡¾šY·}üÍm¬|¿ùþùÒ߇cOoÙz¹ùtEq¯¹Ÿ†¹•LèÃwÏ–·?`Üš·_î/ÉêÍÛÓÁÍ¡Õq—JN+E~Z›Ø¯0gbý¤ 9 ØÃ›Óo?0y±üÙðck’®÷i¢™=Ð<ürÐÖ=ií,Ó[í™.l¡ùžnßú.½ã³a±#ï­së9L™U›s´>±yzÎnÇG­›6¹°ïGŒÒØ~jÎÝ–nœøÑ)ÝҎ״.˜ÖÃT°¯5qVAÿc9gëì½nÛ?O2´[¬Î:dÜ_›†Õ÷5šã°ðûسÃÒ²OhœMº™{ò¶Í·“ŸšwÍYTV3·2+ÜÃÆ=vvÈŽ‡w^/*›8Æ+ãÈ'×õz¡ÝŽÏ6ïÃÊó©Ußð$w·ûÝ3¦æÏã?vJñœ¿Îéÿ÷3tfgö®Ø»ÆÙݨ¼í˜ñªF›jÛÃëÆL=¶æìÏfΗ¬çj«¤ŸÖùÙÌð­ù²uÅú·á¡¾Œ€ýKßÛnÎóYåãZ3îÝÃ[ì´ûG>u´Xó¢O鉷_·ì¹}rÔ踦vÓúó¼î^Y¡ß©*RDz—{ø\ÿ¯?ú¤½¾ŒþAÓvš‘¼àMuiiïÒ˦֟?1,/!ÞRßÍfHý»¹¾[tô ¿ßÙóuÁG{#ÃØt×cï|úV1óÕßOÒÁ•Ý'ÐEkðþa®±ýž¼˜dñUm»enM²?str;ZZôîW{ 6Ãí£á‚}wY nÚ%8´_Õ·ßÃù zMÔ7Æf¹}}¡¾Í€´˜Ÿ/ïMŽŒîе"ñÊ­ªÔÇi_¸žpÉÞšþ…Ë㸤~5;[}¸Aváîe…EÊëm–‚0§lg ¿(Tñ×Ü<HõÂä( ‹¢9&.ˆ§û×e ‚÷ìdƒaÏâÌáúÚÁëó±ºÀå<Æ__³÷tû´ËbæÜ7/M:x÷íßÚçWô¼yðY¯×yM¹»¡³†~¡Öæm±RÀ¶e®µf̲{<ÓþÔšWïÖ}-š›k¢­s±6[8ìîê0îgSã¶Ù>žÙkæðÓ”I^àœ{Y†k3 ÇÄ?y²Ã…gá5WÇ%FÅçGq“moU«yìÒ¨¥Œ=Kó3\³[-:ùàF½i#ò™3V}½Ñ°­´våÊ›·çMºÊnÍÒ]n°s¹¦¢o_ìÙŽ+•¦Y(¯ÖráñÚ1-ðóƒë‚ÛÞ?b”Ž?ÚZaÓË­þ¬éì'w™ïyw[¬’0팣»ëšY×~k Xµb»qÑé)9?Jõ^%dlò×òSq“/ êÃã»`‹¼§¼œutç)Æ’¯í5õ[f{ë‘ÉÖkM“¾¿¹0gUs´Ï¹|ÇUÁni³2fo^ósG%ìÙ¼S_—/ú«;sÆË÷é9ûG²´ßª=çIÈ©Oü`žËÉAùÓ¼§ì`î²Yo‡]Aç¦ )au4?ÓÂkñJ ~sfžéÉ× ­U–cõ&ÝjÿY>® 'z5 ZYb–ØÃƒ{ïý‘ÂsÊe¶Äzt[`ÛÔÏåÑÓ7sÖeT\Χå«}Ì-pá©bφXç[ ž2žwf½î›ƒÅ?Ó‡¨¯.ødVYhyW·cÙ3”ø kéç+cuæ7²‹Ft0ÌË1:ù˜VS̸ü÷¦WcÇÓ9U{Ò÷–m0înÚøAEƒnå¾ä=èPGÍ©òj¨Íˆ¨ú°®VS3ÏÌ3Û´þñÁïe‰ÖI®VÀÌœZ1{æ¹yFô³ÓÁ“n¥¨qBh)‚·•¦Þ·ñã—Tr¶Ï§eª»ªo¬ä»œüá1ôy‘£Ôë&çu雊´-wƒó¦¿ø[}¸¿2¶~èÝ ó¸?æú œ² Ò¶ïnùqeìÛ 7+„›»v„¡Yg=ˆL°vèÃtcs+["ï³î½Ó?ôŒ·{ô¨>uÐkü÷¾-6W=yôU…ö)å VÖš˜ðo4˜?Ë0Ì1q2Öo´5ö†îþµ­6åVH×1Ý®ä®êã¶îmMPèþ7./â Lþºo¸ÆÐäÎOìѨµ»¢¼æsî«éÓfÏe[—Žç>-¶æ¿ôþÌ5ÜcÜ„Bþ°º›ÙE¿ ´Ë循}H±nK‹bôZÛ…™C·š(Úç^˜ÎÜÕѰx½¢ÎþÝ–_)ôpuaÆ ð«Ý¢ÓbèM?µ´µ£î욤v×tÉÁjÕúyõ¹ÕnÓõäœófbºË~ç}gz¥šùT}ðˆ9|'=¾oÆôá§<òשgI~QgÎ_Ê‘‹·úqn^t[ñì¦Ïã‚ð9·œùÐ<§ÿ±‡ç7UM®òµeïóôÒ€ó†­w#Òõw?uøP«âœNcvkr´ëVõ—SÞÿá×”æÈ›GÿÕñ|¿¢|Õ3^Œi£¶&5D û8öÜSÑî±ù࣢ݳçlo…Ñî5°×Jaû1L{£d÷l Ì7ó.vÜ·i° È‹0˜]40UeMUø££²2¸Æ¢<Å h––ht æ+Èo®€]ÒèE¾KùæÂË1?L;žÅX˜ ÅèXÜVî1&¸?­Ñ<÷¿Yä1÷,ÌÜ…c<Ãü%@Ȳ~2ØØ;QÈ ñq°úƒºBAY°~‘6HŸÒyÀ#™Ã³FP™‚\nVÈÁŸô>ù&MêMë߀•F|o À Gj2Æõ1ˆ~ÓCýÆÅ"Áoº#{P”„u¨Xe½O£¼ÿ»ÿE|Çý¿âÄwüÿk Ö#¾7þ¿âÁÄwÊÿÄ¿C¿†ß©ÿUú%Y«4dÖÄwæÿd#ˆï¬ÿ9ÈFß{þ ™ <E|ïûŸƒÌŽøÞÿ_…l'29£éKpñ£ÔÄ %ñ(¼Û Ì|gk ðˆrtÄ\½Ex=\Eïj`õJÕ3캆xß+ÓP&`ÓÀ#@Oj8‡@ÙëóA “Àw$øöµÀ6sàl>á‡>Ž ßʕ̃À7l;ü^xG €§¬¥),‹`ÀßÅþµ²tiDYà=8*,D+IذRÖs¢¬©¨ zBö/”¥‹a»Ilì€ô~4¦*HZSÝ;ËÔ€¥µÃZ؃oÐP'þÇÓqù®µõ#JiE½H¡»4ŽJí`~ü x?Wi®y¿Xy±2>ž”«5l\÷ ÈXûº×íA aJØcðë"xÛ‹¨[…"aÂ?ULØ ±ôö¿%¿¹rÒÉ÷ԉçÊ”zºJ¼×Yâ·$œ~²œüjßêÿ°<Žvïu%"_{J»©ýÖ‰øV#¾a~OðéF)_IN=Ôú½§=ÑO‰ç*Dþï©ß½ˆg=e”«ŒhŠøoò=U‰üZÄ·&_” ¸”ÿÁ¸ü%Ñ’Ï;Küî*?Ð|•~O“è+¢lëßÀ_Éz¨íí&ÑÎîù{Küî/QMâyO‰ß½äÀAûMx¡60_‡j}Ágå¹±œñ–Äûñ¿¨G‰h—+å=j;û}%¯mŠ>ÐNžSçê?À«öˆ·‰ð´#1Ç©ù¬e¼§Nù=Š‚÷]ÀljÒÞvÄø·£Œ{g¢Þ~ÄoX'”õ)óJ“˜³ý%êíD[™ÈãF©¯Ñß$Þ÷#Ò”‰q†0Èh!A*R5]ObÜ:íÑ&äX‡=1žw ‰çjÄw¢ÞáÄAàêX¢ŽDߌJ½ö~¸SúY…È£!cÜÇõM ò{PÚ¡H|¨øãE<×QT¨Ën«ÔÁ¶¶kÇhÝ5ã̓׆ÚÙöhÁñV¬ƒ“H6ƒö'QÞòÜ)Û²†.h™_¢ùtÐÙVìª5ž¾óúyÛ·7‘‡–Ì[W9|~v¸må©ÎU·Ûu~ß­ ˆ—=V2oìKŸ°Ž¶r誰î _i+æ €çÝæ(™wÒͬÂk׊y›ày?æK–Û.§º{íà•ƒ{^|~Å!ÄØ¥{í‰çu¨Áó*y¥ÿZ%~Sa¨ùöpÔ’k ;½ìôih·kJx¹ƒGt•ÈëúÅ9çÝõËsu/…†¡ù­ØÛNxÞzÛ®ÿQÛÌ:M>ûäPa»¥!üa;µŠZ±=Žx¹ÇKÂ0þ²ëÝÃjôé#¯ÎÛ¯ÁyÔŠÙuÄó.ÝÐU¢ÜöÛ–6œþséf‘KÓAW¯ÞX<ï…Érwµ»{£¯^ÒÞчûv›SÓ|¿SèŒç­~ YîǾ‚ç2Êœ—dLíVbì9°{§ç}Y#™÷JÚS³V/øX^·eºw+öw>ço·ï&‘×ÍÿÜtÓ֧mçUE§›µbÎ=ñ¼ ©Ý%òv÷ W7¦qºù¦¯µŸg·bß :ùàH‰¼R§Øb§fâyï|í!Ñ’+g­˜ë½z¢¼J:ÕA&±3g*`K±-Ç0lº_ŽîW j¿ ½³õt-@¼CMá3`=êð!­3º.FÄ}‰ W–¢ùº ‘ðåè~ʳ2lÕEx]ò¯A×µèº]×£ëtC×xt݈®›Ð5]Ñ5 ]7£k2º¦ ò· ûTtMC×­èºM. (¨î{A$u¸ˆ ü[(€Ø%çe”ó ‚ö**íJ¹Ž®…èz]‹¬ô1¬ƒ!¦‚è†ÝBoÝS@:&@ÁÎ8óÄÁWEÅ¢¢"L ¦Ð”}m§híÆ]UPN´8ƒ©¢§Ñ}'tUC)êè¾3ºj(ÂAÒD÷]ÐÕ^òÿÅè~ Ê¿TÒÚeŠÛ[ŽÒW(Ö5µÇV¢ûUŠ €ÕžE0¾PúEtý[jΗÐýet½‚®WÑõº^G×Bt½¡hzFñ¶VW¬XѼö}k‰âhï5ØMEl1èpmm½ rF·–*Z€üeŠ´IV®èq `2*ᮢæ@ «P K}¨x͵õ>J€Ò¢ôVÅ@®UV‚Ý=FiŸ‘6©rJðËQ)æ¼æ„R)AŒ]ŽRV ”•è~ºõùe¨Öø«Q¸ÔâV®ÒA¦ øpt€½¤ƒÕiàÖÕ¥n„ÎC‘…c”gÃÄõÈŸ­à¶ Ä/¬åå*«Q(ª"’×;(Û¢_?”†rƒòMÚJHyj˜Ò ^Û·gh`ÍJ(å'ê”/Î(†ü&6arÅòyEKkë0+à›aØw%RDë ú ŸîAVÙ‚(›ü¿>7L`+S@&,²­:òAA3BÈÞV»PG÷hjmÍ–rH'q·t€ ¯îŠKÂk»Z \§5:#‰þ{€oTߺ®pœdÙñì±³ÐÝC"Í•¢…n† `îÌÑ?XôÆü16øíŸ4 s»cÑê D6O:zê€î£ÁÓjbuŒ×i0Ö‰ðl0wDBvº†²P¾ß§1ÖìϦ±8´1îiެ@–€Î¦9°Ѽƒ˜´1<ÿ –€é/ç1iÜæÎ°A<&ÁdÐÆ³ƒL<˜¼./”ÎñgÒ¦1ýh“Á¶ -ÊLe/1³µ"ø-ü ƒÝTRáSÖ$ÀlG€ Û•Js¤G°|.G}L(“Çò§ÓÜ9l‡iLsáø›ªcúñÂé¼hÚaÆ4 sssu²d+aÉdç §K:ItaV×€,q“íÏ eÒ¼¹bCÜKª`kJ¯«É,x'„ÈŠJZe8Æcj@#Ëì(Õ Ä{.»ü€˜ŽÖ¤à ñPP' ÜE#j(²HÓ@‰LprÒÑ= OØÈž¬ŽJ‰„epÁ/Üšk%ÄK#ý‘·È2ÀÛ6à}+¢N‚…` ü”ίð}¸ÌÜd aÈ‚îòNDw$\x4ÐZÈI}"‚Øš€7ä‚-"Ú8|C«»?$,†lÍp6ùõ‹<ç¡ÑD6{ºdQ oEPÂÒÉòaú£Z¡h5ö7Á'‚t‚“òâ)Ô#°?A:µP€ÊC´¶ÉAŠJc<¡!Z ¢á(/Y?cá†RÖ'˜hdð1¡a†X$(—E”ÎBitbÅ/Ÿl3¤ ЯÔg̃ÓûñÅ ¤ñÃø< ªÛ9]ºÈ}ú(a„PÌG¬Žd©$ã‚Ì)œ`‹ˆñ“® ÀqFÊF g÷LĆq¶ ~üP)aH`‚L‘Žòrƒ…ù"³ç‚ç"'?&¢Xˆ½r(é$ãŸ~³€ð c&ÁB¿pA€ "k€ob±xýþˆ“NdËI,Õs%ö¦ñQKe÷Uh${Œ'dÿdIH ‰é~èèÆ¥ÇEØ.(þ9Š ›"qöµ ‡0œ€Ãô1µT€z /Š4 4.LB$qOD-1µŒEåˆJ @¢Ž¿°¿øÂƒbž*Ÿ‡î£)£ Çzx“‰úÜ<‘r%- ŠzØŸ"ˆÑ5Ax‚rù!A)À„‹xß P)!¨Rä GoAè¡HÇG½æOˆ›ô.å'[Ÿñþ$ki[4Eÿ¢Àå§+ÂyV(œ;W()"ºÙ¡9Û”)³ÚCjV¢Ìê.rfµºØ¬¦ðÝÎr§t–"\ëÄ}îpD5&¤q&Ñ@>ê‰ðéMCFHÝ4äs#åƒPN\VŽ×hôË<Å…ÔVÂâzU‡)©H¤ƒÓ·í$Qâ i—ÏY ’+ ±1j Þz|Ê’P‘„….†øâSÚ!IBXœBäóïÁœä„"'ˆÒÙHkÂËÅßšJ:êŒêViÐÁ!t²üɨ5xi“)mQGЄ¢2%Ú…k?t¢EhšËèKœ4“=ˆà`¢gTÝ„‹&+IÔ‚”dMaè'Z¸6ê/Ô÷è‚„ÓDHÄd¤ö M®Ñ¤ úsbq€0må†|¬(ÞìÂi×g gÄt }FI¨é¨ SzSÊÕ)>A—R&¨‡œ ÚUr‚Òܸ &[rRÒá‚1οd#)9A5 päcypúŽ+¬âƒi$œâ*®ˆ‹DµòRêO™Z$|"µ¢ ÉCDüŒ:‘%M8GÁaˆ@N‰lÄ'ØÂzà„OäÇS§él¢ ~û ÿOYFcPõ É¡DÆD?r¹ÂG…l‘4ÜÌcLááÒЂ|ÃÀ»4?‡tjp ô_.Îóc xÐÊÈÃkàÛü´§L3‚´‰p4¥UÝä´ªµUޤb2Æßh1dCzËmˆ1Þ†Í(<@KÇUF=*jA“=' Ô‚W÷`)¸×Sàö‘wo*Ü"}˜æMç‡ð%Á´ÀÁäûb3ñþ†“#tE?QÐâ&@ÀêQ,ì‹ bGƒ$A$“É¡„sü!8|’%,ŽïGá˜,§¤ˆ›ÓË\/<'…MÞl,gÒö''í n8Í€î ¨<Îкr¸ÙC.†\a x|è+h e¡|c’f!âÃâøƒ|&¹r.€«œ¼p"¦|\>")7œf9 Š|fd_šƒÇ¾ºú/Š©€ Ðè¸âŒ+ú€.2£Â˜€?D0IÚËcòÑÒ% ÑpÑ.Ȳé<@Dýé@7úíšèf ½ò`J  ÛA]¨ìÌpkÂà88jу¥t…9ÆRÎ0   ÎN¨tG¼ô>1n43wCDƒ¦DÁNr‡n߯ÓüÍƧnC5 > " ®pAŠì¡|m!…xË(-òlC€ˆG"=š6–IKgHõõÄ^e&!Jº‚É$´Üs "-_›Æ¯P‹–"ú¸·$´Êê…ŸÈ"C¡8Y#[ɧL/'9­„‹»ru-¹|,˜b‘ö.@àŽU<‚;ñ+ªH;ˆ$–Èfà:¹ˆ¯úâ­x7@¾DUþI¡2”X‹¤劬°8õbSL"À ¯Ä@˜€A­%-ä"nÈ3…!F8pñ‰uM\¬4Dëàƒ·<Ñ|õ6ÕD²D¥I/8‰DHa]@Yµ& mõä(àå²Ð$¿ %ZÇ®:KÚ«%-Ô‘BXÈòB- ¬AßXPÖÕÅ¡G‘®©F‚©6Ñ ©éíE™Þ†r_OâÓLhHR†j(¹“¬»«°–ö”ºÕäR,Ã8/0F‚4` T1›DG¦_?&)„ƒˆx…â’:î;dL àqCiö‹mêoC:Ç •)ÖªËLU–ꟹ”þ±’Ó?†rú‡ å‘¤?—ôIza$·7àzÃ$f¥3Ù\?P‚Dg„r#p›¸@†B!Ù'.îDÐ(-q;¿tÛé”¶“Óv9mÇh;7L¾Ùd?„¨#eñ\Ð"nrÄ\—Àeó8˜<ÙdRe‚Îg†|&2pv´UL 40ã™°(ùúñ õ7jC£!5Oq3ͅϙֵå6nöÃAéI¨Å"Ϲ p ¾¹' ª¢‘tØÆº¦z*@Ò Uc£>‰ ÝÍBépY ?”Ê`À¡VkLƒ¢ ¥Sâ4½¤)¡ Ê ƒ % Ü©O†µûÉ·@ hÑLèÐ'ú'ôˆ±àÓ˜d9aÔ½É4A‰ò˜¡\^4 4@V€©`¡ú d€ 4D m«»pøy¯Áêx¡Hmd0è Û!ôèpÇbÃÞ§Ê1êêãÀÃb㾃„ev Á€þsÈÂÀä“}ijjJ®Šû+#6D˜æ@y&þŸQÊ ²<Ô–I!ÚX ¢õþSÆÊ¡r\Í b% i©*RbF¸šÄ—Á|HAéx’ ͤ:ìO°"Ò, Ùv0‡J”BÖ)éJW d±d~›uò‰¸4ä›ýhÄor±›¬p†”½"Å_b7B4d±Ñ„°ÁE=ÁCª¹:$í('òùa¦„hŒôrç.ò+q ¼uXB‹E)$GZ¶H@ Gj4-pÓˆU¼ÇI4\¤‚}Ý lŽÂwHl…Þ÷•H5jéOžKž\żýˆõ,¡ÓÊ~߯rˆµ0\Ðâ£_¡Ä(òQŽÈ€Bî9âm£#Å}>E» ýdŒ…“±V8«– ÓŒ)ÏD“±nØ Q˜wÊtE!SáW–)Ž,—" S)ÄX(“%»@¿è0ðŰèlÖ|:)±u$B3È&&0Ø“‡Ø0Ú eVQ÷òÅ&¿¬%?I©Kª,„À"äǃ.´ÆÉXy>®â›A¨Ë—pRÀÁ&u#1í‡N@@ú¬âù%ýiŒÅ¶Ï0Ï\>¡ÁikJL"wBŽ—tÃÂÉ i…ô£Øâ Ù #|%ñ…iH²d-¥ã½$IžIBÉÓ|¶Fx­R§Á¯Ç„)”Ë£ · “†¸sV›è¦'ÝìdúTJ1Y„jÉC«Â áš4Ù)Æ¿ð©d!*( PU¾â2Q- „¦ÄÊG¨LËëBY¾w6_CŒsѪ ¿t™Ò4Œœ–Y„ÙT@L"@–ÐG1€ ’laž0"j_øœD9qÄà#ÇãpJ¼:u±â^$÷ÁM—2„ûªD4VT6=eåàÿC÷.&±ò/ÝÛ"ç.h× ¢g‚¿ „iA”g¸AÖ@j&eÝ›FQˆLÚð@Ê,m2—±Þ†œ \®Èv(ß`¿Ød²05'ÖÁhaà}¸LÆcš°È‰ž°Pñ@3# 7¤“‰4¸•ŠFÍ åð06ݦ"e «Nšî"¹ál) 3…¥àz$‘™”“ x ¹Ov˜° ¦ £¤P÷É¢1›(4fæêØš(`ÙQØbÓ‚œœ8RÛ „ÄXHŽF®sHî] Ý_ä¹ëª«T¸uˆ…ê 7#J x¢¤÷|8šD‘ÈŸR@ÙIÀ•9‘&KÄÒâ°È¿“%\#¢ÿ¦ª!!<â¥âë3¸+;‹XïÁ=SÉiÌ•I0™Rp“SçÁ&ÚåHg(a‡ùÖ²‹\Ä7‚êQŽaØ!Æt£¤P·[¦Ë´­)È´Ó3¤p}:…ˆ˜¶áÊ7™éÏSU„ì4G´àK› ”wŠ—|W>EÙŠ  “Cˆ^'Ý®\èG#+¦ÐþËCNXAf@µþú":iƒ–Á È2E~Èÿ:{ÂÙª,œ‘fNýhTö$.[…Ql°’2,u&H³gH!D MrSWœ©åBh‚P9RðÅlúdï‰fR[LVº‡øRöuÉN~"ÚæGÌ`IŠA#ü¼ÙÄš,9_B…ØzVˆq¡”*½7’b¤ z?ëÎ}Úð0 ±wh^L>ÐŽ»$=cÃÃ× x¬á¸Á‚F(Ž@} '€ ø)>çïŒìq„Y–b4#Ì_LËso©ObÂeLèm ]IàÛ3rgø:Á MËQwŠ‚w°Âñ…@l©åãö^&±‡›¥á<Ü8 t=Ж@øFñLVÆ46SX:—äY›FÓ@¥Ñ4P((€BŽh/aß«-`½()T{WæŽÌ=R´n…Ö™µaAžúWcw@S†™&—ÔWMê,ò› § ذçO™â’S©Í_Jî‘:¨üÊ&=ÆÿñÁ™‘Hÿ 2vyz¬?@H¤¡à›¤™,XD“Mèpâ‹GdjU !y÷GÞ½ÑÏdéM'J ÂŽ…Ç” ZÉD=B"Ÿ•Ø>$qçÕ=ÆÖË2——ºH!_"…ÈÌþsÈ·O #ˆ œ´¸ÌLóÇ_·QŸÝИ !€ô%ˆ½È¸3ê“ñ/‘#=ú‚Á=,¸1œNÚïñâ ünÈáGA/4>Ül(2…“ ¸ÃœC¾á \2â«»@'èê€oØÖÆáâ$Å?ˆÎÁ½ÓH¢Kæ;Ç¡#î=—,h¡,rÏ99ª}E»„ÝÕ—’BÕp™âS²Ô¨Î£ŒªC –m˜Ði„÷…PeЗKWÌ%EŠüÝÿÄÎÉn ÅÌÈ…aÑ®NÒÐÅ”`Ú\TK4±÷P€Q]}ÉRn¶T>±Ñ˜ô–À©N$aÿÕòµÈ±NÞö*¼WS¥Æn$…t–3v}DÞ14šÐo“ÐOɲû¶éþâMñöñc+d ¡ï'¹~Ìáûâhцû‹-d_ïu “b†Zëúµ‹,4<À R$´ÄÒ7a„ˆ$×o{Éœ*jR°ûP`7ÿµ?„ß¹à©~íÅoж?E ~}‰–ãqW1’¬}¬pß,ÔcbÃ( w™«Ñ:R­ £´fláLD­ñbÂH"Ô¶Èg׺)Â\A¤z @ÕÏ@¡ + )‚V Q¨&Ø œäÎ ÐHn%I6…. .¿P ÛµÉ×x è(§#à"ô>в#Nþ„d‘ì6ÕÇ_mz`µ±ÑA~Pr—i,1Ê8%c" ÿ…Ó Ò‡.Ó´NJM°Æ¶6J!ø„a‡/\÷YƒeæÃ©9nJåvK][•ÝS"ÕN2 b’íèÚYˆ•5²Q3ˆx\I^´=Q‹${^rÿ•ž‹lÊáÂ0ø~4>‚3TfKÛÞ._%BÁêörÂ%õF´]"“‡D$¦>ÿ8PÒ8 eéצo-¾ …ZýoøÖúHDÃÂ]>pw­º°àÔ‰wH&DòX`8òSè!J]¨-Zs–ª(6Ñ&gJ›ú·!œŠA„ãÿZ8ˆL¡(3ŒË&Vîʇ›¸ŠÛ›?RÑ&4&²%2¡U‘ˆÂ±q“› ϰ•Óñ¹N õ !/:¼@M¹M¸§ c@É Š4ÿp0@ ZÃÑà±øÐÏq˜¹¹ù`´'X@ì¢æãZÑáæÆè ‰L.($l+ÐîÕ‡˜K>&"ÍàÚ± °Æ³ø¡XÈÓQÝfÇãeÀ"‡Z$Ñæ:cX"¾'îÃZX›S4ø2éj©Ždo¨ŒLöœhæ1q²0bÑ.ÀO¸Gn™£6Ä è`è /ã6[Tš› Dۨǧh(‹ÍFFa¸& wÂèœ|u1Ìa?ãâ%ön1ÜÍâb(oÃñ8ÌH0,Ø)cüýÃÁÔ€p¡e +UÉæ¢¢!ÅœJ ž‡:>ð}„IñBd0“8uA´ƒµð.^ŠšfË´úHÉ‘‘”™èÒF4SIª\瀆6¢AÊ'–fB(Ö ž0žéï†ËÑDDŽO¸¼/·ڛþB¼v2ÈcLpÅßó• z³È“·$m8P®š„ME–îI¨&ÑÖGѲ CæRüÍ#b•‘±.`ìa›ßŠH,kÑoµ*a²p›" È¢“â[1IÛc¤p¼}…cII¡.PUHÑAjÜz9XÔ‰ºkÒT²0ùû^€›ISi†“˜‚H./„6•°ì!€#¢ÐäÒ4®ðÅ Ãó/‹BímÔÇÐüÙ,H€ …žÿ(ì*ƒ†ç0"ÓàQ…ø“Žö»Ägñx¸ÑKêx™2jç1C…pòé¡LuuÐ4ÐŽp>3 ߨ–·èbÁyùd ×É(Â2)¾ ÍÀÊâ„ÃÍ<ƈh¡ ˆÈHÍfG«»q•ãÓ¼ 3Ä܆æÅ„¼6Ä/œbB¶Ê8e3÷*Ê$œÚ†AÅI¨Ó¦Ì›È„Q©$;ìäU¿´²‹Vø”²Â‚J¯–ð‰ðÉ\båCVºp}Aäf 7Øi[[©E@äÅô‹¤xƒˆ¼ã¹È’(І+Zy¹ó±Ð€³Ñ¯¶£ü¾×·,{,M!YzíB´ uÊó”S£ñøŠZöeFÉAd1Ò§34Ë“ Ô€ò’X³ï·°FvۤÉ‘hï2ó#\m„ë?¤;"t/S|×9aE(›rªM б,²A‹ÆW¼Nyoy”ýT|¥†ã#ª~47ÔvqÈñÝz¤ë®hmLÜûÉY¡á»8~Š·€/\K¤ÂL«Ÿ„ËŸÀË"Z ž˜’)%•dJÿ.2È—"ÿ('¦(ˆcÞ æ…´±ø$Â< -¬•O&; ›<XÖÆÙˆ.ܾ*4¼ãDˆD8éECÙ„ŽºïJäI?Žp÷"]ÁDgàÑ{&¢€|ÊaG¿sÈ‘¤9E,çJš,®F8L¢08VˆGL–0ø¤øRnyçóˆ“ü…­…µ ”á ÔVÉ$O%'Û¯—.ÚŠ¨/›ì³ˆ("pÔa¸ThyjŸ‘^òøSÑÆG‰ÿ;-įÁ´‘BÃÝiáÝ áõÄ4mÊ‘ÑpÚtWg\ßE‘€üÛØ)Sdˆ©9鲓Ìm–’ó£“7?† Rcb S8±m™)Œ‚/àá‡WÿÃQÞpÂùJ´‹þKÇ+q²ƒ¸\DÎ ±4J.ó‘¸HÍ-M E{%D.4‚„š ½ û•ÕW|)2B!Uö¿GªÀ8PÂ#HV!?ˆÑnèwÄ‚'°‰V98L²I!¥99â Q“='šà§úPê‡Ñ#€þÀ⣨R6ۜ慳üC`= Ó†‡Ñ(áE6s|9Œ¯>dfU \kçk2¼p~¾  d„ûî”à9@ƒgêÓü`Ì,7„‰Ò†˜›ë“‡Zá|ÔuÂ_Ý›f2Ä\Ü@_Zö ƒR®HÏR2Þ¹¸À!ÖU„V=‘⥴|äÆDÖ»‹±Qï x˜AáR ìQÂO”A‰Ÿà-ÄNB㿳0Í›òLü ÎHGÈd¤~RÆýJÀø=J`ñÏ(Á>©÷¡§+ É#¬i᱑­“À•#ïHäeB¿Y?ÞK ".6¢6²àš%5ëB)mó{³Îâ_œu;0rÖÑ%¢‘ˆn4t<4 Cçä5–º½arx@ÒRF‡q¹<ÂÇ.ÌuÂu€c¸1n5„;$èád݆”ÒDJ{´”"-\Ýe"×"©ŽN§t4ó÷ËòŸ²xÜD)6" ÑÅ@D²k¹~(¢] ²™ éÿ Mp!KRÝ­ÃH‹[¢MBTï3\á´!b…Þ;tä¿Ã§(üÒLÇ“qשM#v8…9·áÐ*>B´ÉáÂc$GJMîH…)Št7ñʤÈ*®ý0±˜ #‰ jÆ„ÐÅ[« ºò6Š|úÚêmY›4™B‰“rH¿qqñQ4ôI$·›2…;8dcð#¢$u;êžYB>y¬îm*ì9eûn‰´VÜŒ.±¶gƒ%’¨+œ¢½2:A®]Ê.Ç_fPQ<ö 5BŒhÎIzbQ½'ùhG,Í·þ4r©§L¦çP™©#¤fÉLÊ,Òæ,á Ã+àX”åö½SCm+å~a¡„ú';÷ÈOŸQ^ßSâfû m8xì¶ð´V6%T:WÌAøëR·ûÊ:+‰‡,P|±àâ›M„ÁÎiÂè2\²@žÆ@m•|K‹‚]‘Âx>Ô­Þ<1œ#íÔrD¾ÊTólaGcRN† ž›K !<¢í}ÔƒrDGöñÅøÊ²CŠì)+ŸKae2…»Î•ƒ•ÐcŠ×DÚd·mô¡ND‡£(ȱq4c"’݆ïUwÂGá„ÈÆ’æ&IC›@H@ev _ÌLË tyqð0y’yž¡xèQ*²‰BJI;‚(#±ƒˆ£–Èoœ™ ½›©ÇËt8@X ”аSgR¢tn‚ƒÃâ ˆS/{HìæÏPµdu$$w(ã[–ÂÑ䋌Åž)éOœ`(øå¨ÈŠéƒ ¹’´wÈ"Ÿ¬X@â1ˆ¤£ý„RX^¾1jÈþûÝ-!±R“ëeÌÙmmŠãD Š2™\¹«Ä¡ ’JÁ#¸µ–t/ՆÚÎÄc€Ð)‘ûàúP´ý¡“T†Ñ’1¡,á whÓ#?ŒÉÄå~C–)z¬ %;¸’ˆ¯÷‘ú.î)gõc@¥•CxРWŒÔÕÇs#™ègGâç0ÒÀ/A¨¼âÑCñÿbj/¾A–$±/›FÇÐèp>;¾†ÏäðÃyDûÄU¤²¹‘’eÖ¢P&p¿|tU$%@ åaLR!B‹ö„?¿ð°h¦À]á’?*%‘§UÃ0ÕˆµS5*´IØ6—ÏdG®›Ì–ˆÒ^H$”$,Õ±"1¡ÃqÑŽ+ 2ÑÖá¸û4&Þ¾pß|Ù—€pû‹ƒ»á·Ö|#-ÙBhµ¡¢_¸ÝJYæÜRù͵ÛJ³Ç·á;„ƒ°‹å»S#F»b!M¨õ‡4’¹Å‰£hCZúi_²IµTG¬¥tÄô6NitGN+lªP)9à0°pÎú1‘KbâRÆ„[#Aá„êÂò@W c8=ócB„ I´\Êkð.E–„z r6dÓRèg œÍG_¦ñèa´)a’‹dû‚§ô§Ãÿ¦qicÃYlMü(x±mF²NP’ò§†¾RAtÜè )5—Í ŒD›ú U.¥©¡mžÞ /Þ\š3S@sƒD×E´3I•3dFš1.κ¢ëdbM‰<í¨­-Ò¿:]Itú³ÕÉu!YKäÿÚ9ÙäAYγâ.ÉsGÄ>ÁooÎ?½Ù˜gȧÅã6‰¢6±…ßÄWœdÅ&{Ý.é ²ô%ÛŒŸE.“稰„±™Bež¨!RÁ#A i wf«?åÈÜÅÉÀpC{¸7ÿ‘èß”ƒû‹ˆJ0%È'Éê:K¹ØH°º5”IâÕ†²âEFP–ÚóGœ§LìpKMloÃÀàFr ""*ب a6ff‘‘‘¦t.Ïl Ø ºpá•…D£ÉÈ×ðWu20šò……1˜¦|2/,ÌŒÁõ7 âF ¸fø ¾èSA([zŠeâä<…g‰"´þ÷þ`÷·°‰˜öM©¯ìáJ½ÈÚUT;H¼1«S2Hk+¾dñâÅøƒâTÌÒ²+.nÅŽ;&ÌwyáWk*~S’““)åãÞ–,Ò2Õ)¹(³µ8@ª^KK|ÄŸX„@ˆ]¸pAn>ø Àáƒ1äå³LmÅR[‹Qy°½–©a‡ú­õ<ûU¼Ä úŒ!ì½ÑŠ$‘jmÅOøjE4Õ4A)1£`) ¥@ܽßF)½D^ ²+íŽôg…qŽáo]ÚmEøž"¦E<¯Sš«k¢ßg0Ív‹ZÑ ! ’-Ñ–ÓŒ€A íÙ¦)µí`~ü x?ÕŒß/VÆkÝf­Ø/jíõ/Öêjõ g°u;”‚*þ—¥(ü—§$ü—©,ü—;”«&FU`8 CÚ SàØ(ïµꆉ’ð¾³Ð ïË(E‹RŠ&¥”ΔRÔ(¥¨Ù®¦üEÎzźZˆwê:ÍŸÁt¥ºè¹r!j‡j&Þ/è_ü}\;¢÷°g8D0:\OW|†ºD¬STì¡·cCu"…U@>à®Ëàm‡0]° p :´‚«* @ŠÈ ¦‰JÛˆQ0令uAÐ`Ø¥N„#jW¯ó–˜Îè&!èt* ”ÓÜð3«€ö†Ç8Dà ¹í‰Àt"á/á–Á &dË”ˆ–--3§´, ´ìŸ´ S‚mÂ4`›lQ=Ý4õP­Ÿ“0je1Ì$p]Ýœl¿U¼ý;(í§×"»ýÌ(Þ|¾:¹ T<\–Å#ïÇQ0zâ+€¼‡=¦-ì1uTŸ‚DÍÒ°ˆ÷äd±žþËsûþ¤kÄxc[¼îkN0àug6€®Þùwx]¡F?e\¨~¯„ó¶j%(E༠¹BôSD¼-F†P½Šˆè!ÅÛÀ;$o»FªA:ò\Ю±Ô!Oƒ ó‹ª:frPUÀS|Píáü[¤„×-âg‹Uhmò³Qÿ.?ƒÍ)¤JÒrš£œöï7ç‚êè.4Ù¼HñŸ™›ÚàE°A%TžB4èhÐxJƒi©÷ï4ëBw8JÏzÈâ;ªÿÞ(‰› ¨úN;9ºük+éF)Qh‹ý¿O[¤hlÖ…F|PªS)æB°U!sô«IISŒàVBH[V+à´e1:>§-ÈMô.7÷Røró‘Ü̦â.H§)⦱^ȉ5 (´HjEW%¤Ôÿ†J®Aˆ{h½ Û!6Ô:ÛIÕ©¼S²N%Jm©Ìš2êT5îG~Wú÷Çý6eÜU)£dTˆñ]LŒo”\‰¯ò{||5eŒ/<<(¬u_;$Æ÷½ìñU|/Ù×z»¤Æ÷¥¯ÛXÏQºª¼ñePÌ­~H:2A¶BB¡ßÏþ÷ä°ÿ$\ âÀù8P©û>¥ "ô['pà‚¸ ˜‰äÔ¬ø§qàÂþž~›:ÖÝþ¹ÌÞ‘ÉÓAºOLüÓ<]ªÎ¬À?>¾ Îÿe™íu|ŸÉ—Ù.·+—-³=“#³=“”ŸA||¥ê¼ôÇÇ÷ÙOf;Ûî÷Æ—Ý_F;¨2áã‹ÌF½ðùÛ¢ül%½äÌß^’s©šõÇÇWªNÇà?1¾ÁdÈP#ôw8(ú; °NLQÊÜGÕß;·©¿?Sž¦8°[¼¬?LIÒ¬·Sƒ£ˆ£ãÁßXÂÓM}……i˜3æ„yƒo3aÔ3JF<ª¦7ñn©½)þŒ†-ÀbÑU\EqCƒ„›§ð3 ˜ð½©³%ÞÇCÚE®j¢÷Éç,¦'U×â-l q:š@ªü0á®Ä~4[´u'ccv˜- .ËÀ¢Áý,ðfþž(ÞCâm²'l”þ”½|"˜¾Á{6*›÷ÛåŽëÔRñ^ù½rlÁÈŠÚ‰ZK¾-Âr'<–ÝÅ,Û´DïAHÈÔÑ>Ü]ðt!k!ǽ©U¨wüÄS”ˆ”bϹúÙþϨÏá:—ÃÁň˜JøÞ’îRá¤ö±ô’ÊÓN*ÏT©<Áòìà½þ{ÀŸs„ h€ƒŠÊqiÉ€ÿ´„~4'1øP12p“ˆáã̈·TÄÉE:G=&_ç×):Iñ•_|V¹šwØ‚“²2Å@ʶÈ!e[¤–8¸œ”IÕéö'Hº½d‹‚ØÖ Ê€:ÉÍwí‘Ób[d­HaÛ0º¿ n>ÊG^wôPeÈðe†‘fqR£NÐ[}¿‘Îó à„Ҝـ´çDÀ‚¢PÅg÷_‹dì®nR”zPÆf-u?è'MJ?‘®œªè â …6ú)Øõ×ýtDec{ÍnKшâ#w±“\!cË¿735°vu¸àýg…Iª0¹³ma²º3~&â{µxá Ý)g†î”&wþqÇ@©:»Ù½üÓÂäÎÿÑëßs*í‰{aO–whüó¸Œ; Ñ{Jû ?è4I’2_–ã(tY¶»ÎPû—ÚQHNÍIö¿Æíþ)DPj¶¹,¾’º9ZÖî“¶ÄÎE8[{`:Ôgg;{µuÍN’µü/Õ^ n¯!]»í«íšxí;”DX8Ѝ]©C§º¾3gÂ…[ŽÁ ï—£{*T«ÑhâQqÕ>ƒŠàždŒÖ]Ç¢ý´ u LG?ætq"¸Ž»ˆ6ã"ÇÓÅH”Ã[·aÞÆåè~*gåE˜gº®Fù× ëZtÅÖ£ëtC×xB‹›Ð5]Ñ5 ]7£k2º¦\$D%w]ÓÐu+ºnS€‚µç/"/!/£jŠŠEEE˜:ÿÆœ@ÑÚnç…W”³ºª¢§Ñ}'tUC)êè¾3ºj@R…i¢û.èŠcÅbt¿å_ªiÎ2E(Õ,Gé+ëšÚc+Ñý*ÅFPÀjŽKPúEtý[nþ¸„î/£ët½Š®×Ðõ:º¢ë EópÐ3Š·µºbÅŠæµï[KG{¯Án*Bj{ \[[oƒœÑ­¥ŠÐ”T¦H \Ñã†ÝA%ÜUÔjS…b ž÷ض¶ÞGéPúC”Žc»2Š¿=FiŸ‘6¹8(Á/G¥˜ó ˜JÁgÄr”²¥¬D÷«Ðýjtí þëZ¯£ÀwÓÑnªXà1æ u€Óƒ8«pDÁ»>šŠÖØxÅoØNð¹ >˜Òhð±ÆÌ•̱¹J1Ø>¥ëX’n4–£@“ùɆ½ÏÒÖv ¦OG8KÃÀo B:³#f)¹GOPBÔ¡ß¿DÆvlÖðÑ<ˆêý‚‰ N´i1öð²Þ¶Íí»ö‹í 5owû¡*o—1<´ÅîÚ†6™ã_Ó9Ln8_îOž¹ŽG47FÇŒÁsåþH”†ëj6B†>BÚJ“P&á½&Iÿ4þiü?Òø?B±öÕ?vö"ãÿ0iÕq~ç‡÷t”¤.ÿGþ:üuøßœÔêÒ‚“ë¦Î[Õ|Õ zoS”º —Ń·,ÆŽ~ù‡T;ÍN@­Õ¬C×eˆOÐØA FÜ0&G]B:‚Ï{Sb—ö–‰¨íš(Õ.Á˜?×®ÛŠ*®]T%Üí¿¤„ÃáJøß^2‰¨Ýð’´ÿ(/^e þÿÿ/¹‚J¸Š®×PÊut-D׿¹“ôüæÿ+üf Š#¯Ær<øÌŸ(l úlŸ}à÷}ć:`À\€øX+hbQ î¯Vб‚ú'üƼý}å°vžRüÆýóŽyÊÝÛáüæ3EQ÷RÔïŒùÏ+ê‚öz¹v„9BE†KV“Yœ@6“&RÕ¢üÙá|V“ö[zú¡žn݆ž.¶€pù{—iuè¿àmtAÎÑÉÅš¡cÿõ%‚—¿·@$UgÒØ}èåoî"VøŸßÅÔñ½ÞöøÊ\¢¿.g|¯K-Æ9þññ•ªSàøÇÇ÷úÿöøn¤Žï¾a—ø>9ã»O²¯?;ýññ•ªÓ{Üß}ÿ½ñuèô{ãÛÐßwáú;>¾°Æ®Æø.ñÿ}6–³KÜXrÇv7ç?>¾Ru œÿÄø2”(‘åŒÅÙÃùå?p±ù¥Óˆ2¦¶¶[˜„å½ ÏAèQÈæúÑÙ4—Ï çÔÕáY¶´ÐhStÈÛ>×?$–öÿpw=ÐQUgþÍLf2óŸ?Â# l€Âå_ÀAˆF!@†™ ™fÆÌ$€¤,Ev«Wz­ìžÔöœ]VQ°‹µVT´¬ºmÜRk=m—]Ñ£›°gº¥ÊÙº²ß½÷ý¹ïÝ÷’™Ì{C8™7sß{÷ûîŸïw¿ûÝïÞoçÙGy?SŽžáV~S(ÚJ~oÆïð$¬ô~hϦp$ÐAòàgÎÞÌ/YÂWw Ï¿CLd6Nèö¡¿n™/Á–b ;a |骕Mü¬p$ÚU…܆š;š#¥ðH+hRmH{ u…€:y •G}+‹ÓKUÄ á´Ú‡‚ûm|[4žà÷àËlü9ÎÅŸóSrWJLiú„3ýñÝ‘_ŽsZPÜ-[ÑHkx; ÓK¸š¹ ¹]â(£­­\£z¸&•"³Ý…bõâjgôI{È>¢öܺ±ËÓÏG)Aâ—§­ŒÃàl&e…â•Rªo÷)Ì[ã7C·$¯bJ “³ƒñµ/æ¤ó©TÏ Y[GÉš‘µy«•µc–.Ïa¬á¿¯±{ª)ï;Aû*ªÁHÑþ´í{ÕÚ{—vŸo’¾Ëûä£B¨÷\µ´S4†XÆñòÛ¥Ô.ZÀíA¬’v 6 ûÏK…\Z! …ìlSäCîɼ«ïÝòqa7¤|¯ï¿iÂwú…¦2ÿr̦ÒçPßçRßç)jª]µ4ƒ¸Òg(ë{›°Óíȼ™×j¹fKq­jsOè §eŠ{»?•¹îÄ{iÔÒNOÔo%)Íg¤t¯B†ö1}¿œIa]~+˜’Væ™QŒó£’ªŸP³g¯ U²UóÈjµUÓ¨9ô½½Î±žS>$a‹4æÐH†W"xŒ‹u™KÙ0s¥yp .Å«T)|L)®šVŠ˜çËœä~ Ûfk”ñ)DF‹á¤ŠáTc?òA°bA1öA1þÅØ¨iB!¦LñN —A|ußÃުĄ—Za.¹[-Ž˜GÍI±P¡Ùãd®¯ÀÓã™ëcTèJkÖ}aÛRÜx3VØxS×S9è‡ó2Q¥OhŒŽj­~Ñr=Uº¬£J_V«µWŸûØl_X†fÓ©ÁUéÚ´ý ÑêMä…m³x’-š=.gÙ(ì‘ÍꑎY±ÅqÊÒàþ¹Wí—ÍkðhOÇјÇɆòXk¯võ>çQó8YƒÇÜx¼ óXf( ¹µžKůúÔ<–iðèLÇñ˜ÇrCyìu~á=Ò®ŸŸ° ù³¼+u®&ÅV«IÌFÆYŠû“™û.f«Ök€rF“ÏÌh&ˆ[¤cKçAyLŠ—™OÙ˜”)¥Hw†•ÇPgc0dÏâ»'EX™!¨©ep½Dï¯!ÃÆË°‚jìø™ITïhX©Ñ6j˜aãŒé°ÂмxÆŒaãiVj+Ô‹FZ¡;þÎòiÉß`ˆ)Ó€”‰1¡Dc"X‰„Ú+äZÉ'vÇB"¾™hc $¼5¨ó'üüôD<Øèà—ðM+Ölmj¬ÛZ¿®¾©bjnÞÚ-âÉÎp"ÐÆWàÌ$Ë.–?Â/66ÕÕ¯[$¥£$ã™Kã‰`8R 'ÂþöðC¡ š½XÿI¡ð”På³Û ÈI0íBN2µT*€e< ÷ÌýòAî/d€ë \²ÉS4ÁŽavhç2æUŸt •“ »î32”ÍЃ šìi6U…©AÐï ½פAh¦TVK (RÀBÐ…}“´&®Õ Zf¦ü¢éÄÐlú¡ÔOApa- F˜=— Äû^n™†]¨«)ê ìö6Vr{SB“l¹éŵM,7ÿ†??/âÏ_ ±ÜX¾ˆ3’þ'¯#Ë.Å< zÓ%ÈsžeŒåÛÞr 8Úd=ýi­åª¡—yYG#ʹhrî§îoxzê2è2÷ºv¸Q™mÉG„Üí”l-æ¸_û«GÁ¬Ï!×I1Ô òÙ+†¾çœÃd3å!÷ƒÞû}¢›–8÷.·¬BœøZNŽÆŽëŽßÄ­äÖr ðM\ú@‡LÆÃvr;¸V"š\"ºÏS&ÚQ]Y/ùgvà´ê¶”2 0¡yhÖð@³ÓÔ‡”µÆP{(ð­‰Fcbd5¯¤×zÅîDŒYdÆG ]Of<‘ã¤qî÷pÎÌßOSý¾Ã(Èãœ*~]4£v¨ƒß釱8'Nc|k´ƒ÷··ó>âiça¨nããÄû,ŽËY1oJІ¶•ªÃYløÏ+¬ýÙ„˜¥äà+£W/¢ÀïuªIÇ053ïl¦5Óc?÷’{.>Nâ^š)—­ë¼O«Bñhð××Wã‹Ä6ž"•|Šªÿ‘*ÉX¦$W3.‰Åñ\Þ…Ï:ô‚ü!»+Ñ­K­Œ&òtƒfù7"ÞD!âl¹ qÈrœBÁ KEAâN|^p Fcv/Æ€÷p ‹¢“°sá« ÿÇMãþd¹‡›e½Â¬‡,÷[æÛW¹P3 ¤°ÅÕà.ðôzÔee<7bÊXí »[¼¨Œ£)xÏt½¦—2ízÝ—rN¹ZðÕ?ht=¤-ήû@F$'[‡*øâ“àÇ úBHÖâ<:@ ôúh„Gî ‚.Ž„²^bVi@L)1)ˆqPµ3©3×Î9× Ï±‚F|×w5j½s§ÑàûTLg &î ;ýí¼„¼mÂæ >ÚÊ‹pćãØ!e·(Ñ«¤ºY•àÖPµñ0µ*ws­r™3U9´Õ,õ8ÎuÔµÁ͹ԚØÄ­‰}àéôí“®÷IY­÷³î]Rï4|Vy8áió²m?y·½ßñ–/WÀÌcÎ¿Ì Tjj2=Ž¡™XÚg¸LÛ’ÅÂbó=Tý,„´Fø«„=”…»xBƘ¹ÀS‘JUZ»ºæyû¼ïÁa©ÛHQè\Âë' Ãì³Ëf›ŠÂ÷¯+)[3Ú°ÝÛêú›9Ñöm”ÓFWz®¦o©p2öm5×b©Ä9á\ ¹hÆæt©fôæ´f-RÀVȹͩMaPXn… ·RTK4…¢Œ»· -s(,—( óÜú2\ ûí²þ0WâDÖScUa(£Í»¨j™L#Wp®–÷˜©“(ÿá^áÙåíÄ‚1ICô>þ«&cnY0Ö¦!z­(&¢çŽçn¢(ü'P8 TQX'ˆ^Pð2yçk¾«º»TB—º¸ýÌâÀ5Æ ÝG4[¨–i:¬Ø2´ §Ómo…üŸÁþ\?t±tîDÏ(:·êйǠò ¶RӡŰQG Ë2Cº[\†Ša0]k€þÖ} ð¥¢=jK˽ŸYF¬¥åtnµã]G‹K½å(*”YÝšVôehÙß—{ÂÖk/vé›4NZ<ôu„ì w„#Û}þ1ÜKËÂ㥞1^Ñ3lɓҭPð†Ö¢ 4ãåS>¹ew *ñæ>nï¸äCù|ÓÍj(I KÂ6ÒîÓÐP´Á’æ¤ÃK(´R`¹AÀ§ §[ÓK-˜Tó‹ÊuÚÅÂÿj+y®Â®ÔíîOþëàþ6H)‡wÇ 4FÙ´i¬‡ôÅ6%)ÐP¿›®¹)e òn+Ñ ¯Zµ5Èæ An6]ƒÜbº¹Õt ²Eg躘ñÐE÷¾šA4Èeƒ ]Ú²F$fª&Wþ„CýnºÂ±Í°éUàGÐtá™.­¦ Çvᘷ‚!id–ùpQe1*³-YáÖ˜›ås\7¤O„îQ'×ÉnÕÜl»ûxþÄ¢ÿõ©gL 1ÑÜ|ÏKÆ‹ñ6v¼gL U³™E)Ï?J‡€ÒwàÇ·½éL‹ ›ÓÔÜ€‘i‰é#ÓRÓG¦ÛL™ju@¾©Öˆ9Ød>§ÑÑð>]5§Y–²ˆ Ñ@"rWáÐDd¹a3›7@DêL‘•¦‹Èí¦‹È*9SkÔÂê¿ 2Ù(ǬՆŽYÍ ‚Ü~%‰‰rñ Þ Åƒ§!ÿg@ë{®¿ö°tî0h1D¤ó´; *O³ºk­ÑS±3¶(­/$ÀæTºÅcè¼ ®gËx^À£m¡Ð½^)$Ššéó[ò¨†¾¸à2éoßR¶ü]*}1î~Æ5Á{Ûòwº4489÷I(Ê*œÏø”‡'š“G5lù •r5¿éj¦7§\®cû#ðÊãP¦ùžô‡Ý‰†i¦“nÀ°Ë›>ìN6}Ø-5}Ø-Óƒ™¥ÆšiyÊ"‚D‰È^ßÐDdŠašéÔ "aºˆT˜."ÓL‘éz6÷Û†™fJw§&8ë!]iNž(,J}®Ò }î# óG 3è,Õp ši~*ÒAW-:U•ç :t›¥g·Î¸ƒ!·*o»¡&ƒ.CõÓ„Ó+3eú$0ú àr½ fÁnýU°NÁn­ÔöPЄ¾!yÉvµxb/™FBL–¼dÐ)Ñ€?Š“­ö1¾µ#ºƒQE+•ŠVªj™7¨té¸üœ¹=s—Ÿýù‡‹ˆËÏÝ…™D»ü$:;"qÁÛLJ¶îJÇ«Nü$ÿxUQ~êŸfoÂå÷!ö! @dµÔ>“-^²¡<;^yBUîÍ^²' Ê=Q¯Ð§á“®tªg:My Cùâ*-Ït%eCöœxSÝ“0‘›”a[Ï*J­­ÿ½´5²È4m$ö[ýè·cï”ö$=Fc Óhû~íý·õ3{ŒV÷™¼¡–¡yduŸ {ŒÞ¦`jY¿Žgb}¦0Õë<â8ê ààtŽ5Yë0ñÂø¦ŽOó'|ñ„¿#ÑOŸB(>E5-!§R+Ïz¾þ€¯”À˜ŸC™±û-œ!ô¬;’tŸÅt¦ +úS‚¼ âKÝ êú³?YÙoöäö~³§ «ú͘‚4QV - å—VÞ¨7^³‘V¿fcµÏú~Ã{}¦ŠÜ{@y+P<”½™{MÐLß¡ÃtÉF0„úQ`úÍA˜¾wp¦ÏPLß©ƒxç_ÍñFùºlG¯ãƒ,—k0‹†·{ýaÿ¦ }J4(lËWñ~š¶¡ëð~à\¦¼ßíi±]v|…OˆY¦stÓŠèŽþHPÉzźúð¦{(áY+°.Šgú ¾ò´9^É}Ê«Îy]Æ9ïô„œwúÔŽ$ëûG®ó̥ܱ…/>g¬ÔñC[uºØåŒ»Xó;¾³£±Bp˜c£ 5cdþ‡qŒ™(áü\;¨Ot,š8ŽFå:áŠBî$pÜž |~§•»™÷á89(½ƒ‹Á{bEõØYªû,%l­:5Q÷Z¦5ñG×Î5®gpMÔ05AÀL:TІ*N ÝÒ©âÂÎWvaç x¸×CöZ5P ;ö+vxw›w‹¯Ç£VCîªéŠV@‘3ÃEÓ•Š'q‰G”äna'ýéšz”Ôò€Â9 x®UÔö *‰±Ôòt¨=bhÙP목A­g%Ô¢¾ 5]ÈÕ.QcPZeÙçùòújËOf\¿^¿+qÊÂÉm :aÃqžUñÏ=+—½§½¨‡^Õ8äS¯‡PAçÝ/œ($ý•^ü«~#—µz*m”üë~cŒ’Z}”¦óÍ~cŒ¬Z½“¦ó˜Aå¬_>žr¿\ûkÔ/¿xõKôÝÈ~Yç¬*lgFûoèÑþ‚7ä#£½ÂÜÓŸ™iogÇGêZ¸"l²ÈF4Ad•âûvARÑÌáqê¾Ù&ÂÊD¸´`&Âmá’µ¡.çõ옗2”ƒ¯gÉDX=aÿ¨ÔÚúØ(ÒÖGàÚEh>$&ÁòQiDpNj›+“jóÜù×Í6 Îdh–¿a¶I°1©3x#s“àÓŽ'S3 †³ilJša\Ÿ4Ê$xo2û&Áû’f›7$Í6 ÞŸ4Û$¸1ižIpSRÛºVw~››u˜>~~›7ë ^ðÍáoÜ¢Ã{ù[ÃÞ$¸5i–I°%i–IП¹“„B'2 žÃ“„ TÛ¦§dÜÅþ6wi^maµK/ôA)éb±öP"$øcàX¾(Ž"PÆ.£ú]Ù†½€Nyê~:¼ {ÊžÑ=/î+È;çJWq{09°©è_mÞ=i+n†)nñ ¸%LWÜ:MWܺLWÜvš¨¸íÒÓ~:Œ·Ý:Lç\VŠ[zøðÐ øà.äŠÒLJ=†áÃÃ7ºMLJ½¦ãÃ#¦ãÃ>ñáë:¢¼0Œña¿Óç/ ³‰]Òcì„é¿t¦_Óë4#ˆc½ÇsÎóƳ—©*;Ôöa>ð/Cñaþ®÷”óœw& ¶^LJY˜ŽÅ+ùP"PÅ¢±p(ˆ=˜};°]MT•K)U¹t ×ßdfëùœ=ÉeÁ¾¿²ïÏ(À¾?Ÿ·œ¬á-?®å-ÎfÞ"Ù|K´íûÓKÔVöº·³cߟÁP>þv–ìû%Ù³ïåØùÃtXãVÝcçOu¨Lõ¸N0ÕãêÀ¦9ï˜mß·14ƒïô™Vàxö¾,µ§Ö¾ÿ-Äëþ®=V9^wî—ÄÃeoNku_rÚíû%§ ²Êôöeh^¾õŠ í»Å&ÓDu¦Œ×]7ÿŠñº÷åôX?)þ%6r|beý¸öB&bèTžÛÁíæª\<·~EAyKpÝø—>yn*ÏCj žŠÀ¯8~ÿø•à*áw+þ€7yxÆÏmÇþ^Syäáƒÿ­ð<¡@ž)ÐÔfSés¨ïs©ïó<µC~1'Ä9òK#>h› %ÎmU•l|ÛŽýÎxîf^«ìå¥Rn3§Ç=¡ƒž–)îѤ¸®a\NñÙnljú…ý“dîæíRûÁý*8À} Ü¢¸ogî[ÉRZùç0÷s™`ä¢÷ÙFv r¼œ ^!¤x¤Q‰”ó)RlÌ3 Š~Ée-øÎû)¢èA;Aѽè¬9 Es„1£íi (§|‡cVÁ\1Ešå Í@ÑÏ)Eu¦DÑ FÑš’ßà€¥{m,жX‡†¢#º%â/e¬Œ+°á×ÐðV³þœ×X¼5¯6P±w³~ù¡euTGÛàµHüöKµƒZ~û€-¿YÈÕ'ŒÈc¶¤'Sàl.ƒÃŸr¿˜Áégø:šÁ×9) ÷T&%ä¶19/bž£‡î\öB«LÝ›to‚ë9ݯtï×Ñ‘‘Ú›9Wžï^ÓA÷kL¦eCG÷+©¡;C³|ùÐÑýŠ.º¿K£û5Ý—÷ãµó& t¿¬Ð‘j„»Dé݃±x· DLo°ZKêå¼äç6ScÃVK:ñ®ˆ]ŠœÊ¥ïäÙ0 ÏM¦( 7ÂCâ*:]xÏE'|¯„|ß›)¾µÆ%ú}ñqT¢ÇýÂÒO“ÑåÞ­ª!™£ÁêHæW¯Ž:!M¿ž:pžpà»2e¥‰ÿAÒ¯Ê@P¤)ç+î— ¢ »™÷o$ÿùiÑÍÐ/b>!/½SÈ:Z1ó@)ÅÌ3<“²8…|x=̾–½c –;SÃìÿÉ%˜ý_pí¥1»‡Ø­ö粘}JB3|û (¼GÇnÕ£¶!­ÏlÌfh^5ÃbfË.N/¦ÞàpÁAߟ3å3Cö <Ú‘G¿“ÊêcûÐÆ‹të)õr*G%-¹E·á>…f(—¸0Ÿï‹cy´czÊß TÂþ¿ê “QµæøOZ¨[EIz$§jÕZ·j„6~|E†˜ŸK3˜ Ôø”§?óðø¶Tq4s¿r÷K÷Ç(îË–,úÕŠ7Š˜7r™7¼ƒðX¤¸ÆàE–ÔÆ` 󌇙Iå¦0rÓM‘ßZÂIc¢’ϼ5‘yËÃÌÚX-a*ó–ƒ)EnÙSÐ$z¬Ã:ðò%jÌ~BLW“8¡­Iäü?y×ÜV•žïK{¯^~%!8Î-$à$Šã$vbo°ãg=Yg°reœ6ʽ€G>¯PËV±Á¨'…W6]¡t£ÜÌ*+Ö,ój’ºFp‚ùç '.X¦é¹Ê¸]ûîÜÇ)³”vAÊ4¢LË2€Qžâ)þB%¬È!eÀ“¯ \¡J&7±ù­ñ¿ed^_Ee‘2¯¡fãûäžfç÷}'<}D“©]ÅXãY\Vhj¹¼¸kù•¾`]éJ‡±¬—9™²µÎò䤮ÍB$Õá>ƒ5§ÏpÁ2Oû„›œZZ¼-› ZõÖGsÕAËf@Ëj‚Ö¼mÊJ¹ÜÄJé+ÝYèjvC‹iŸñnø[™ªd5¥WJÜÀ¯Žkw¦ÀîÕ¯”<#]Í™Ý«ß ·ÑyiÂxévÃY&?þFM¯’Â_È#>Ådu‡Æùû{õó}RÖNа<VÏ_k]k‡ ™j(³t`ŠÑÕ¬ ]1g‘¸‡+Ö¹ ­8øy—2?^¡¥ž«ç—p¹t’¢Þ¥ÿ(¦×Í!›n¿cÊ1퉻N•N†ÊS†½Š o¯õ,vöW-ç'Î.c¹ÙqUÍêë¨jV#O׊.Ã,A³¡±2üL†!f W,-¢¾%¤\qmÐ+ém§hù˶qj¯ÇâãúËCc—ÇxY„cܦ§G«Ù’ÉàDE~2X[!Ë ^[„ñÕhH¶(ß(_E2°(C„EÙXt$h.E{1šGCÙE¥Ù6$eƒÒ Åšã ÷96 ðɯb‰â]!Zs²=³gm®qÑùöWœÏ tñNtñ*ðo_ªõßÝí•:{;{¥£Ýwߢ¦ˆ¯ÁRÄ×ähtÝM >µ×ìà9§Gø–ã%§QÓq¸hÚzŽúÉñLN»€ XÐi:Î'Ap*/bSé!¦ÒÐdv*ß´ü€ÿÈQo…SiÕ™ _›Ïw´³½-ÐÙÓíWgãÄfãÔÀÿ6f1æEÓcNZÿ›Ê!Ùà˜¿bÿAŸäk;rÈ¿üZa¿‹öÛÌxÐö‚ýS§ÇžKØ1¥@ûQÉ×ÛÓîÏGØc: W¼ªãW^¤%øvûm{¯­²ñ“‹©Ù,8~ûü’ƒâsÕñlï$AY®Ž_%`Z1îà‡l÷Ø?A4ŒÁqw(»R[®´FŽiPv Úší¿D ·é€7:Æñ{U0¬Ö`+÷Øð2øJ¿ÇŒ†}fÁHß°{ùï#0öê€=…¶Þ€ ‡AÁå€âx ¸ÕµÖ½„šý=Aq¯çLCáº\_¸lŠ=:PÀgw§‘`1$ØHœ0Ä’x„_ë–…âY¼I ¡0®ýÈ,ëcâ ŽŸ:r‰C¯¯}¥âÐWq8âØë”Åá‡xÿ£•1mŠøÇzg ‡&(૯çèQ †…%÷‹½Î[]äÒøªÑÒ0…C¸ß)º„ÜKãØJ—F¿i$6 G€\¸EíÒ’–‘i v ^!.Î ¹–†¿çÀJ—Æ€iÜ"a‰a!ð’Ynw q.çvÑÝ~x¥ „Lƒ°“?· ò¯žÁ@“&§iŽñÛùQE’ÐhBú¾0.íNk!ÀïIÒü{Ùì@yáI÷@ÙQ¿'Íó¨ë 0ÿœ]±ÐX4}3˜¯˜Ã*9ì³As¸Õ®}þpžßoØÖ»}6íó#z~ÜŸßoÕ>ÿ=Þ ñ™siŸª@Ï_pœ´­uÏ£0Ó÷0yŒ’Ö…iy¼›ß" :ÁÈò†GW½=þC@ú>J{Zí¹jÕC×wœÊ‡Ç©&ŒãTðÏ{°à_{þ6a§šÐÆ^)úùAóÜ+ESM”̙/;dþ¾ ^ûþÂÿS=+ó÷.Ç ²rfUþ² ;E²£õÅXí–oŒVÿ¤…wô÷ Ã@Yx\jÓ”t¼ |Ž1Ü_¹œû«;k}võÎêì^„…‚Ööœ™Y½ÒPnˆ”{&Íà7å6BÓn;Ž5'8¶<À @pà=Ö*8/aàØ À©|Õ,8ðnÉßàxåw28&Ýx»ih¼®ŒäJJWøi Þš”ihºe¸–¾¯µ 4æÜzÁ42PX "êšÖ€‰ l6Éy€G ù7_8s‹Kžn>ŠÃ<(Y\ZœqyÅi . ¯™…fPþð,?ŒQuÔij„:‰é{œõqs-®Àtú­NÜ®¥c)0Їt<¢–޵Àtâ"¤3éÔÒ±œ?ï‹ï8dþàyNv…Î?:y7y+³ýÑy´ŒÈ?ípŽù¸àxŽ…òy»Ávè€Û¡¤1T#.u<ÏIÄîøt(SQÛ¢‚ÅT?BzÏ3­®ÉŠ;,pêLâÌ®“üñX"•”’ƒ±D¼„GSÒ`l4‹%£g¤TLS•ÎHñDl<B—I§Ã‘D^0LA`Ùæá¬ž°r$„¡Ý’]$’T ù)3Éù„÷8ÉŒ$P~wÖI‡)<pÀ 7€ €d4<˜RÑW—‚‰DðŒŠÂmiØ,uP€©q^L³ÛÓ)r7E—V ¹írer׊€\—õ‚}®ì-”’ö#aÚ]‡°I„e±HJÁ :¼¥$™J„ƒ#Ii, ¦tL×pHŒF€ì%Iaʆñ€Œ°þµ2Küà§ê1Ѓï(÷ ®ƒ m±‚Ñ-–z7 Ž¿¿´ÔAÃLðNô}án@¼Âù¸÷Å+œ:ª›”QÝF5¹Ì¨¶碃vLQÅÕ°M;ªê¼Gµ÷™bÊ.hGµ!ïQýýÙbj¡mx]FÕZô†×S¬äô¸&‘üÌbª`#¡ v^üŒ_àç*ÛQfó~šTðné†:)0•Rá‘x-õàà`8™ÔêLét$5K1û Pc£`‡‰ž‰ŒI£áÔéX┪.šÎ–áÔHt¿³},‘€û”=­ÙÙ²ù+Ò}£ãuCá”JaPþȯK›÷;ëêê V¹Œë ­À´J5VÝïQªçmÊO°_ÀÚ¬÷i¥[™\1,«ó„ò¾‹ÐLÕFµï›Ìuî¡, “ØŸŒbBC3 j=6}ÉMæÆPNyÿ÷Åd…ïWë¼ïPLMøþìýb;µS¸S;aìÔÞ29aàÔN¸–`%Ù©5 ¼HP.|d·tNíŠùñú{¢Ìk-¹ ðšI®Ù©m\‰SÛaàÔvNíî‘¢9µpŸø®Mqj;ØR\Œ`Ÿ§}¶Kh—ú%æJqZWê˜wq\)Ÿp’Y°nBéOC:†c™\J"Ú’/ƒû„êX•cŽU™áW®()Y­Ú5€(÷‰X4€Ëq=£Þáµê¶ƒÂ¤ÍS&ûâ8»­%a÷ßZFUõ#v¿‹G¾ vŸk(»Ç…¿*û“Ê;»è°f³&Oœ‘üÃáhTe´c´hà.¶`–޽Cké,6ÁÒ±úè9{*k¹¨3™²»Ø¬ùb\¯Å¢R$)áçB#ý'‰H<å•ÂuCu^)J¡Õãi7pŸ[s8޵†½‚Ýj«‡°+vXB¹Üµ5Õüœæì—ÜÓÈŠ§1>Š…ç£äœtöW=†,ÖoêðqŸì¼úw¤ðx0:„.idžyLœñû49m"œKŒ‚·RÃ‰ØØÐ°ÄÃ*[ ŒË&Æ™áè‡R0c^û¥{1ãK<®O0c¦(Ì€‹JfÆ×u˜±Gvd%¡âF¢è’ÖȨ3³]ÈWRnß/LåÃ^ƒ…Ô`À‡c2¸ *÷ƒ~vŠ_¨jB9˜Q+ÆiXÒ_GIÀ4¤T„Š+ “¨1w µÌŽ¡&Ó°‘Ýj}wµ„Îúmò?BT3j“ÝÞOQ#T”Ú~ò£†Ù ¥u_/jV=Þƒ´šÑ§7kZ*&±ñÀ–uqÔ O¦’yÒ&êAÔ".F ¶Ô6è)MïÓ-|= §¨×úð«¨_¼ÆQS»¤òÌ1„…Ü6<Š”Ë÷dºxãÚÍ‹:ôWug Öò­˜ Ý™å „£Ø’ÓQ„m[ý„£XNœz…îÌ£­œ¸l¡ÜÈá츾¯šÆ=1EçLÛÕ^¦ôËæ…”¶„=µg¤ÈÑi‘ ymOÑ»T霻Nw~ËÏ]2?uÁxÌ_X#¼±VvîÚ\úüýä õ'4ÆßZç®VëÜÍ4”&bY[؈ع‡Ù1ˆX˜Î Ûk•íT=‹ûNµÄžx›Ö}§Ç׬Þw’lïqZZ‘±½ß ¯í°_uð¼6Æ`_Çì+kír˜ñ “ù[VÍÖóܯ¸/¬Zê¶’PßiÅRaýÔNDNk‰ÈémÅòÿ.Y{ا¸s¶FN¯â™ÊÄTš‹5•~½Åa?‹Œ´Ã…[þžR¦ †”)ÜÊjྈ^ÄÀÿ‹çò¢#ˆ1ä\r‹ECî¤ã”{±âjrB¹¹v9äç¬Í\e0·¨hnÄЬ1@ó M7†æ M¤Æ.o5D3‰î’]G€Á8ªƒkƒegÙ'e=hi¿„® åØWx‡¡ž^àç+. Xþn˜ËÃr,¿+<2Ü¢DøÁ±pºM‰Td0Þ—ÄH‘¡Q9>¿ODRJd6~<#…'ƒcY¡–6ù jŒ%@QåÁ‘`p}ÝÀ÷º“`‹¬âª,ÙNØÐå„  m‡Õ=9s"Èc¢r#7'7SÆ=gûDl-;Œ”Èy¥p·|ô ¬ip8fàÈô¬¦ELg”“½ZxˆâÌ<]o@Iã:Õɧl‡B‘€e, ¤¦¤àI[*3VBi°ÀÏJž7œûaôÌ}+&U¤ÑóZáç>-HœOøiÊuæ’C ²TDC9ùÈ! ÁPzáËŠ$OyÑ2—¯’8\²l©ˆ… È¡{w)‡ÜkÄÔÒ3‡ÜÙ(}›û;Ë-¶f«öÐlmmé;fù÷}Ë×PZÚY,áÆZ9“DíŒéÍ茤ƒnÿŸ¥Nº?™‡°Ú „=f‹yž´ã©ÑŒGÏL¿w#Ì‹8û*Ï¥w 3žE4ždw<‚ñh£"ÿxtbE<ÊÎÐÈŸS¿i}¼ìñ²·í„#\kî ceAÄðȹúJÁ’òœ«j°÷Wr`r<Ï^—v¥×%wëui=(;ÔOé˜ô`hî>†~|-ö1™»Éfê Ü­=˜±­|˜m%!ÛªIc[ÝCuRÝÔAª|ç?D‡‹§Ð±eüœBökXZÀҊ㉦–ϸ³e{ÜDïÖƒÚ¾—©×V`3’ו yíµÕØŒäw`s½¾o?Àëè?3®£ç2q½ì¹Ï êè?#êè_/6Y‚æ¹×‹ÎßÏ®ïÛ-pþN®¢O¤'‰;«ŠÏ_‚fà¢ów²tüųiðCð\Ù4'óºV-¹³iþ|Öò·%³?<„ï-ËÅ“¹¶ +êy㘠œË_`s±s9÷ãÂÏå œËêÔÚ¡38^å€#‹C—úCµÝÇÒ³Y›žÍÚ³±³ ¼UøÙì²ÁÙ\°ç1›Þ`*2:8F£gò˜ÍÏñÃ]b6•³…ŸÍœÎæ9ÔÃô>ÙÀOú‡c§S‘àž×úŽúÓÓȨ%6 2s ¯ox ?ò%R&è¬@i;ŒZîB½ÙuF ‡ƒ©p"©N.cß84’i[«…â§mÚ‘8K>’z>FRÏkGâ*ùH.ˆ“Â\ÙâÀ]ò‘øœ“B½ÛçÔ(ž< ”…2P¬“Â%w¯¨5 ÊÈÍçbr¬‰Ž[sšÊæátÞfÎÙò’söi!n‰‹O Ú‘T”^p­–Kü4Gÿ-×w6‡Ë8w\€]y6MÀà"”€ö dæbÑ;‚fåOŠîÜJx8“g©ÄYŹƒåp’Â_øQ·Wᯎs§ §ùë5Ȧñj³iÎ]2›M3’WY KP^¼¤ÇålÊ«å5Læ¼Å &Oñý$s™¨Ù·x › ð‚ý/ÅNçÏåz¬øÉªÐÅ“Ý Ô£»ít|/kÊC—?‚ù6—ÿ iM(¹“(îó° –B»¥6´ßÿ9ú÷môï»tãfŠúkôý½ŽZ§ðfø»Äî{›–ªc\Ô¦†ºi¤Ž0½T73NcÎS}ÌUj€ù’fêé(3Lǘgé™Áèn`’Ì1ðõó s•‰1ešØaf˜`ždû˜‹ì1fžíf–Ø#Ìîvæn³ƒ«cvs›ÁW7µƒ;LÝÂí§ÖpÔ»šg7SÙêIv-5Ì–SM¬¬V;u•±PO€}àÐÿ7L>ªåÿˆçäÿ!ÿ+^ÕhX•Ão±B´û€ïL!}+Sü]…"ï•C´…§øžÅ#Æ+ÏÛ‰²oéÊZæ…)¶U”+)¼¬ÅKXù— oå»ÄINÖ ‡ÿw(²Š骥{P|e¿GPv|J¹„Þ öQjeÇ'QN¾ìWpïRk œè÷1TY?y;¥&fmÁ³j ’*ñ–'$"7Æ Ê_rôVxßóû:ˆœ@ˆÀƒ(øDsóGsN¢Š Z·H°v¡Z£âT!+ö´æÓð³*6u6Ûó¨ýqyK—ưÀ÷³qqi ã›àOeuáù³hïgçu'òß´~éM°4‰IÁ“°5@2ì.êP0*µ%b i¯’k?y³ '0 >Xú`é¦A¬DVX…Q5„÷úößê1ÿÊqõüNýËX§ ‚sSD¯>ÀÿÕúo±üü7‚æ5‚fþþ[,?ÿmªtÁ¹;\ùñ÷ §Ì߯­ ¡|®«—ý·o;Wœ«7ðßê ÿmC̤ÿËÏ#(/nˆ™ôßbùùoõÅòßêù{é9&Húoõ…õß.Úç…~ÇLjÎÇx@®žH̬)¼¶žØ)~+ЉÄuvÓ†ÿeïJÀšº¶uCHa•ID­€ 4™´¨Õ(""šS ¨D­± UëÀ 8‚aJ$·õ*´ÍU‹xïíÃöV4ƒ¢Å:¼ÚÚsž‹5WoãC^Î9A9 ¢’Ô~_ý>¿(ƳÖÞëÿ×ÞkŸµ×2°¿XŒÜC„g@nøÚC¸aÖIWCw80Q+1ðϨõÏ¨ÕØQ«?é¼ãwÎè{ŒA‘L ±"™UýFg¾Mãðþ{W-Þû þ’Øfæ>|Y6«íÒÐMØ=(5Ðt{Ðó$™y9é<²}‚½¢‚ójœqÆÙƒöÐ=èv={бphìŽÓÏk^Î Ó‹ŽÙzºÚzŽbëi»¬km °4e=†@‹;¶h=l@ÙàŠL0Ãö<¥ÇQ@ÖðíaÉÉšÅÂK³| ×Å3‘@ ^^r ~H`úra\‘óÉÂVÜ«­@Sg-¯Ö„®ûÕ).c+Äã,¢òy‹¬!ÊÈçíeH¶Ê"¹‘h ·÷ДÜç%0«ýìià–.Ø5Ã*4ØWS¼håŽhw­`ìÜÔ.?òS{žrŽ´ö5Rï¢EØ‘YA`¾A³;‚+!lÑV@XŒ¤Jû‚H5†áŸD¼Ê©EÆráÃ8µmB ž§Òz™vº:Œ1¡”;´…NÍT\DhºƒNËáE”{,ш2_ó¹PQÂÿF¬DO \, ¿ñ…O ØBy•N *u£wÉx£Ÿàd:Où‹žÇæøö_4_HÖLôÇšÐÜÓ•Tnÿ•lýƒE£'rÎÅF£šï9j°zX£;\ãÆ2r<|Rl–¦MGÕ½÷ 7ˆˆ@ì`eo¬-ÐÚ¸iƒjÓ㨙ä|ÀA;’¿“ᑤig¯›’Z‰6À”}ÓÌÞH_¶>[Ÿi„Þ!ÂÙ(hc‰zXç(ä.àxQ'öo°¨oDt ë’0ÞÜ7:º·±F׬U3u ðèþ¡gtp¯È¸ìŒÍ™é¹p–ÝÚtN:|óv Îr²sµ…À²r6gze 3×Ï‹Š” C~ÄÑfúy ü,·?˲ÿÊÞòçÌu4Os†Ø”&kÿFÒ[$lw«4ÝyÙáy·ÿuG½ÛšÏÕZï3u6=/ûÀý%ÎËèÎËè¸S+o—á$/ö1ÑyÝXçep>Ú-³P2llíiu Æ:«5‚4_djL‘G°Ž•F#Ø·:àô\Ý1/´=oÁ·ªC"õllçÍÿ2׎#3 2ß!ÆVЂìPΪձ߳ÁR…Ø´r­Ô~¦hÖCØn/Ý’ž f.`Ë1ôøx>R4~!ƒÝ¿÷&b|&Q§/¶'µÖÎý+:?šh{âËé«­©o³xœ´™d(söh}‡èìµýªÚ꩒ѯ*ö@•DÙÕp¢³ÍU›ë60j˜€b¡fÞ 5š34ZûXÑV Do”çƒ Ç¿XËlŠlcœ˜11pdbÆ@EÆ0ÙàвhHD›«ýºúhu…å¶bÌLÑÊÅô.œ˜óšý¢Ê52ÿO;?[¡àŒ3Ô®à|ò ²¼VÏk:„r¡f6Ú9Ó®áÖ) {oÒG(IÉHÊ C¨ØÊG(8TÆáèä\úºtúܶÚh·úõW)‹ž-z"Ù÷à‚VÂc'!ÌrA^CF²Ÿ’ŽùÎùyØìŒÇ`KRò Hº©ÅŒÇÌtGT»Pv¨öM˜ Ÿ€J_3ðŒ”[ Ì<ñ¡VÄ”íkÒs3½æ=o4;PCG7J|óÀ[‹“þÞ»C¿›C“;£¢Òvyµ!ï2Ì“}´Oîê‡÷ÖOßó™«Ñçc5ŸøÚš·Ø€Ï5Ç>Ù—Ž¾ÐÑ“‡Ò~2Úã ›–0‰>òi <’ˆºÎ®ÈVWÖd#È ¤Ú2É^T]YSŒ «œË*Äë-#È걆eÝ!ê¾$›J7e^ßê±—^âG7Ý‹:šM³e3ŸââoÂyà“a® ÷ë`Bl]ÍÿeVˆÃ^™F7Ö%^r*­Û)€ª+1P#ñ¼Q$2mzì 6‘tç9È”˜'RîPi¸‹(3L¨ͦœÂ´ÛˆÓnB ‰=¾ê°›Š™:k¨&²;ð*{ÿrëÊv‡f¢¡úp:idîöì ¶&®ÎÙ’ë…”SñÊ‚+c®GߗѾ%ëßѹël*NcÔÆ©½¸ìUÔ>O)§Œu¸ƒÄoK ÜyX˜¹ÈY d *Ss·efnD v®Ùœ“¾6#=—Ó¯½7F{oí±†¡›.Ÿo#¹™h/#ëê0Ë„:(4»r{´÷V‡Ù&ÔA†ÌC ÷•þfß)Ùˆ½S"º á˘HËÛ˘Ïß¡J dˆHp"eFÏÁÉt.7úÉ›]Яk_ŠùË×| °/w§ÜèöÅɤ4º})¦³ïÃ,øê§-øê£ù,·(øjã…æ@|©Ç¾Ï"„¯Yåf–ºöõȨƾG×üœf;T)aËH'$‡iÖó¦)vo=×*Ì¡ÝN7§i–<½tk€¨æ¹îˆ NæâC9Æ®;âeñFcÁ 麹A ";Ÿ„}æÕqûÌ¿Œ Ààus½$j~þ" : œm ÎÖ‡‡ë¸uî±1HÂÉt>lt ^³×¹fì:·Ìpm£/4Ãx`ÖL@Ê!aýà2µ–áŠ@6¶}-p2éGŒnßeo¶9ñ1v û˜XC…§/ð1_ìcÆ >&È$>&H¨q…Œƒv8™’£FÇàEÓù˜‡‰Á#Z –ÀÅõµDpÔ‚bÐÇ\Ïý{Í—z4¦¾®ù]HÃ`°eƒƒz¹µ ÌÐŒÛÉ·Cg©“ŽŽÍ ïŸ÷ßÈKœ'ÚEÑÅ‘¥¬S[^ŒuWDr¨I°ªw-¸¢ìWŒu{œLÕ£c½ÅtX‡·ÃÁºL‹õ¯5Ÿw0X·" ëéj=Xÿžk®¿ÖÁÀzJÀퟯ}=ÅÉ”\5†}±\³$¼8~¢!\ Q®õXo4W¦Ûêr-LŽVÃÐÑÑ1|DuœCê±^1J†óáúxBø}b 8ÒŒ‡j˜€Ýw2 ï;™Ãó¸ Ù }'ÓO˜¸ú–8žü8€Y¾U³™Ì~ €ç‰ýpy‚“ÉAdš!2ÍPžüˆ­dH ñáÓm¯·8î©:¦ïvSÛ'WßMK ó-öα+¿+ÿÝ,q¾“ü+ú7éP%ÆV:÷ݸ°˜>óê•MiŠª»¥j÷ü·¥9üæž«TRèÞóf(ýèS;b>WºÓ'uDç*çЧuÄ>RšK¼üç‘•$“ýcŠ•Žÿèxåt‰Ÿì·J[É„“ô_¿¸yíŒíÉ'äÿ#±>·AÞ%±;_®–˜eÍw“·KHY ªä÷$VYq+äjVü ùc‰E÷üPù% ™*HBºjóÀi]Uy@DWßòbTÚ ¢ @Fõ¾74™Á; È€f1j“øNë‚Iesïúí¶ÃkÎÆ6Ÿt8c2³éqS]¼w~ĘºÛ!1ïWö^;•¶­sÃ9õÝ{Jƒ7—öõÆLw-ûÑÌû—-áwŸ”†³zÍVmMyœ×Ú7³¥øë²ìüœÞvñi]uoYËTï)à³Ø¿¶-êûiÑ“‚ Ú·GïÍÚyù?‹Æz–A}Ûú.\lîØkÄc¶ÿv¢/ïÖ¹üÞ¬·×Þ`ÏÉmSp%·éáß"~è-P^µýµ'Oýô|é÷õ{OöèÜ¢¦Æ Ö÷1Gk抇Q¹^±œ\õ³b;'<•9ZÍ J[¡ÈäÌN|G±„335êšb 'ì&3D‘È™qsîE'ôfä6E*'äfÔE'"Œi¯ˆR†Í-Sd¨f…E&+RTô°¨ËŠ\ÕœVæ4Eó¹E—«* QÜ£«ê¯ATîá[ÂY´B•¥¶Ë«Ø£¼¡ S‡÷æÏŽS†ªzwç/ˆ¨¯SN+Tž­ÉÞÖ¿¤É› Õ µGoí3fAC„¼š¦zGí–7œü6”¡ÞÞx§JVWŸãÈÛ ÕļhïÛ“ßXòþ#ךv~àçZÕ.ØÌq­óå“€ ¼J_A0W-âOÞâñD`ðj×ñǾ¼ãëË`^Í=þl €WuO°çÕ¹ð­€ñ¬JA4Ī>ÆŸLañŽ 2Ù¬Ú¥üQÀDÖñ¥‚%ÀLVM'&àϪêlÂXuÁ|*àÝU,HftUŸæûS»x§Y@hWíV¾0©ëøVÁxÉÔJOɤîèÊpÉ´îØ§J3Ž—Ç<¢rJjT‚Æ®K Ÿƒï1ö^j|~ - h(×Hw4~ n–î<Õp|WºçTã}+ý0»¡ \'ý(»ñ¸UºëAÃY0[º÷AãS0Ÿ[èÙ°Lçîöl¼nâî¬mƒwOmãÏàvÒUŽ­ M²*×Ö¤Y•Ê%o×¹¸ÛÂå6ð,½ú–èùˆ¨ŠR;ôVÞlƒ&©RÔc{«ó#Ûž€yêÂüè6ÑmY´MµCmÑ{ðÙ¼Q›, ÊQÏ›W .ƒœÔGÂë dP®zç³è>QŸ¬B5ªôý»ã^Šp-MÊUÒ]JïÊZ螥ÉN²Ýt‡Ä„òúØÄ¤Ùú¨ÄD¥LB÷HLž!+¡;u$|.û+Ý­#)WVMÝ‘øHö%}\G2Y¶SBóO(– %cü“âe‡$Îþ‰ßÊ>“¸û'O•IO&œ}"q=™´AÆ“¸œL¼/“JÏ­ôÄBAÜêZþ$h —W+XÍæÖ®âƴΛ¦œªz«5¦Ié¦òm¾ÍÏQœo¨<ÔTñh‡*OmÖ[ž?/B´ LU“zäÇDˆÓdÓ 0n]8ÿ•¼êL×MŸåÓÿô©lŸ:'}ŽKSÁŸVüC[ñ*û«ÑPl½ ¸n~ ¸»V´×?Ìyå¾Âý€#ïˆoý7€-ïHø1àÊ;&ª‡kÞÁuÂ〠ïèºúï;Þá{Â/O^Žúß3V¹‹ð#ÀuÄ¥þ¿ëÐ1a#0–uìXýO€ëàRáQ`ëèÒú«•u¸Sø7ÀƒUÑYÿoÀ¢«sϽݽfîšÓ¹¤­¸3#"Ÿx"kk•¤[äZÜÊÅ 0ÁK´£€oïPöÆä ÿ*‚½q~JâÍ–=dz‚ÆòÐèÜØ<ÁyŠëȇ‹xPXÿ?¨e?E<7íþ·ÿoÒ£ýš)3g¸€@•™5\hàÂÌ+ÍøÎÌ - 0dæP€bi¡i€3Ï?@Š™iL°`ÉÌ5&`Ðdfºx0óÑðCkéiCúµì4’…Zf¡€]-w?@¢–±L°`^ËY&`P¯e-:¸ÕòZñcDj¬SƵV€µ,VB˧ZžS~.€L-Ó© ©ÊR¸S©ìRè]¾§©ÎRä]ø?gl¾ÐglÑgHD¾Á*gDDÒÁwÎàÀ÷t‰‚©Cˆtq“©EØtÉý©G0-1´©>‡¯Z‰S»ŸµÄU¦f`´$ç§nÀWÅØ¦Æ V%¦N WŧVàV%ï§€7xÄà¦zn¾ðHDNmß|â—𾿑œ˜º¾ùØ&Ös@â–¬­rÈâ–¾–ÅvHóáÛ.¼ž>élÆÞ&½žs> wxCôÄÐ&t=(¸azâúy‰ŸO=߀C¼¤;²×ç÷7ODÀàW)ïìÀúÐSЫ Þ4Ù …§È[–7`ÿæ30ôUú-›îªx*Èf'\äsÔÿ¿pÔmåýg‚g§Œ?6·á¼kf3Îþ㇮Ï"žŸ-zÑÃæØN3÷·+¤Wت+`°‚¡„a=+>¯z}"AÆ‹!.rK#)øß™ÿe ˜™tuÒVÄcˆI(Ç Ù/²°ÁAœ…qLºc ï-c‡™Áï`fž @ÅÈ% ö=“ûÐäâ13ã>1Äâ³Ûï%ž¼d0‹Wtñ˜Ü?qfqÄâ ÿÕó0AÏóS?Í©§N_ójHØy•ºiØŒûÁál)Ôå ’%‹ûkOŒû¼Üq)½ùÐæ²o[ÜkwÕ0#V@cåÞ ³ƒW«÷™tÊo‹‹ÎŸoe'Xý=°H¨zÂGÜ@—+‚ä†k<éËÑRŸ6,ßJ›ëÆ­ZžŸÓóù@zÇÈÏ}“NV^몌–¢QÆ»Ë0ë÷-+3È=·Ä ~gôذ%"ý †HádfÚ!-x\íp^”/Î ^’s/Ê‘qµ"nv©x3@`æƒpÞÉ@!9ìùO£ü ú•o­ 4†c8¥¯½f„Z‘Öòh³ºnÃÅ%Í¡¯ãûlC;å…t0Ø!ê=ð­RÁbÛ+“M¿Û(tcÐ%–”°ðêG}ª";˜²ˆÅqf‡¡Ùm¡-ªf2-¥¦ùÀI¥Q7™Ô§åó¼e‚FÐIµ‹;®+GjD`Tz”d‚ å¿÷>­ÙËaîiDð’ Ú%VêéDäùësèoس{³ýuÅñ$i®|€f‡ÝÀ“§2.ýŽ\"f£íèC $גЙ\bù|t ‡v‘Äþ^C÷èÞUw¢EkGNeaùí¼»¡±bÖÍõ^­môôè³ÙüÌôG+Dç]õætoéð‰Úªï+´_ïý”q¼úßï3ÒÁ´Šë‘?Å›M½[‹x™í»ãšðƒìéèçßLÆÕ˜´7-±Ôwþesÿ2@ÅvŒÊ=ôw‹Ôû§`øßâ «Ä àý;Ì8Å4ôB޳,¨ ƒh–ÄEôÿÉ„ÿGÅjŒI¢7ó}qþÿZåZòd”ôNŸ(Ž9X·à\& r"S3ŠÜœ °KùPò§ TpË«qLA´‡H´úh½v·ìt|­³/ØßYo£¨Àoýâo:‡A¿»ž`1 ÄûÆ‘‘OµKË|BÔÅ䫿;×£>ÎôâÊNC’¢F 98sÜ-ßèþ™/à6­Å­]‰´oooI_xN:ü)Ö¤C0€W}ü#¢àpµÅøä)}Á†æ ÃfAicû‡äkm€%ðU3n˜ |®:Ì1yNV‡éPhjÝhºaýÉ&­JÃÔåM¼ù¼êüCVµnì—Ÿ¬ù̶ lj`l~dÞ2á>°ç‚æÇ(h:œ¦öU;wŸ;fÂñ]‡šPŸOØv8௚%›ó/aûç ôÙ„Ú¶=V ÄØÆg’þYÐZAÒ ïK²ƒ`ßáSÔ}¦ÔñÎC˜É’ à$Ê¡¤sÛ¬¹®4ó>ªçà:iû‰X-ÓF+Œé”ÍóÙw¢|ed«ÊŠfÆØLZs÷á7,=Þ±ã îÆ³¶FRMŒw2y­|½k¹‡ýÇó6?•Ä93òŸ¥—\N1ÖˆmDgòÀâuɧkú»”¸[{<ó³íÈ6«§}ª}Ûgq´j/Vûs¶§‘…‘ÍÌœ'Gõõ Ð"@î ì·=Øf‡¼‘§F¨öúM¢Õ£°äðþª³a nQkãIº!Ó«'rýÆeÉ1M|`º#ú ÊWÔÝG*ÒþLØ ¸àøQ™×{Ð2fû:Æñ¹*s ûËýzáÖ !“xà˜v·’†d¤wÂ;Ú|žPUcd«Ä;bóNPï5\žn“ëñžÛ‘W•†ý1Zîsh "k^÷(–mš×;·¥ø2ô¹_ÅïÙ¦·ÓìL¨æÝå6¢Ï›Ýþ +vÿ‚þg8á.ä½ìïhbñ£BÐNçkã0Û €Ú\®è²ˆã…k‹5§9ˆ2‘çÚ}?Ú¼{ÿòwïßwHJpÌV[Û²02å[~ø4Õf’¾—öúú`»Èe¿¨=¼æš‚$1êæñ—¨Àþ€4ñ,>‘ –ãu³!ªÉ9ºúxÁßlÞ©·4H hä°6l»X·Z±A+ƒ‚&©eÙ%Eo†ÛƒüÍ\u¤Ýãxâï ‡*&ãv zÈwmÌp€ ÙÂuâ Î—~×¢e*•9'ý}¦ñ WaôòÚ^Ê\žv3R:_ ©xmÑÍð«ºû3¿äkâ4@»ªt:mÿ½ø ä¨nŒÐþRQ;òuè¤Ë‹w¡Ä0_þåÿ…šèü[¥,Çö×µ3€(m‘þ?ž´â3huÊS…•ËÞl f}—ï¢ü=ƒ›tZgÆÇ—Ÿå=¾ÙÌ^ÔQˆ›·ø2áŸs”½(Ĩ˗¤‚‰¶s>{XIÄp3‚ÃâpÖ–)ÉŸ³¤‚>UpHÄ,Ü5å»R¢ÓÀòþJeèº(P; ,öåJæDÄžÆ}8n¶@S;Òz¿}_`ˆóÄ¿»ß"±÷"#ˆ0 l{îùÉÈ¥´w•E¿5™Ù6L“ø Ïí3j<ñZôåep®6ˆ¬Ç ]‚6nr#¾-za­)¨ØÚª/s_«gè< ns:ß§q6îs¨b¬NÐl¼Ñb4˜6+Ï‘±–lMrð°³É`Ší©µéqtÍàÅm3±xÓ™¿€&¸+×Qy˜Ø©@<¦Ȥ>7í!­"¶Ôn³$ø -û˜<ƒô¾`r)N •·lõµsHËKdm.\žf¦Ý|Lýú máðÇÌÏØÁ3òïËŒÛáÖUl¿5»0skæØù¡02¿áì ú@ÄŒïTË—…h·Â†mz¢p²Gð&üEØnú Â`þÚ ÑûLçÞ?o“©¼O~2ô½‘3Ȉwéù'¾«8ˆ[ì‚ $¾?ÜìðÞ’›ð+¼Ëäx &æH½¼·\Ê”•r|`²^ ÑÿÞ d§n¦!/Œ)K} ºò¯@~ÔK`W¢ ³îšØž®?N “ƒãTÐ5!§¼õ¾ä.&]€xÃܬúƒWç嬗8˜P¹ì“à’xÌÖGyÿßÃšÏÇ!·§Kíƒåýx¬ÑSÂx—2ø^”ƒB…Ær wY/SeÏû¬2’@ÛÌÿ¯d@ˆ™Kø.Ç ùRÆü§"”uo k晈ÿ+±wbïâ‰%¶MB/j̧nÎ褮 +dæp_c1cˆ ×1ô?¤ßB’9ò²}ªù·êÍœÛ)u²Ã ƒû‡p¬Y|à¼g IªB¹ìºËS~Ì\d[{Â¥Ecuü¶¸3"ž@|ü?ª©:—ŸbKˆÓÈ“tƒ [U¹Y%õŒô=ÔL0’ УtÚ*øñ¤H tœwè   Ìm3á̈¿6š~7éƒ3è$/£|ýù0mXi(îñR›îvµ"*ÙTë1_6¸VÒœM:ÛOï&JÉ."«œ;á Î ¹°«¯ÛšÞ;ÉiçBj&êW#»°³¶QÿÖíCªxéSê@{t~G ©'ùýG“Ψ{åÐ 7‘Ô› ’Ó• ÌçÎ Mæ(ËÚ¿÷Û±èR`|“IçMo»€ðýZåz§<Ãmœ]‡~¤èQ"ãö/îiÌŒÎMºÌ¦6îØ¹‰æõü$-£JŽ÷¹J€üGÑœwÁDóï\Ppyç© ˜îãp<´ø½0lNIóÞ*$ÌÞ(û¬Öe§]‘ó¬l„Âáø4”Üqžë…"¥†¿êFbÊb>p<ŽÓlˆ;uQ"~ïüÐÞ‚ïÿSQ6ˆ#J_H$.jû+é>P›™–÷[tC¦¬ýOʼ§³ÿäuÇ29²%®Ì*pÿÚ»ŠqçÂ4ªøúbâmêkŠuê#CÍæÒªXÏn\*ñ)áîxCŽ6ÚóWé§ïû.ÍOiòEaìzáå_PüêuãÉ8}iØœæµPu¾CqXš¥Ì ¾çõô8*ïúwU«ôÀa)ªÞòdÇ|¨E­ãN›™öX8 Þ6p:I’Í÷部ßѼ*Ó)ítª•Îw`œ¿å®G¡›ä† ëÀʾ½ˆÑ;Ò}5éD5É|JmØåÖup‚âûX»rýçÂþüÐèÏûþ¹Fùá’}¶ÿV1± HÅë½G QµÀ¸kk‚Øj`œ¹K(ì£Ñ \QñNlêM©˜›ºñR£ô(u¼ÍßhÕÎyÝÀ“ Oêãz´WI'‹ç^!÷_ö‚%Ø=éR™@±ÚuÅžAõDP³YègÉëþ·"AÝö¿VÛ+rû æEÖ¶~K+ÞÖý—#oùë;e®™óˆgíÿö¨D÷ ¡Ü€”prxVS>}¥ þ÷F— ÿf%ÕùÜ<{~ßÄÀñ‚ìÑÿfU\þp"ä¢@møöKv] ðT5?g¸ÓàÎÈ%Úyí/ÇsñÎI _•?I.cÿÇX ¼'"^!ÒìJàÅ^e2½,ÅÙà¼ß½G̽VŠ“òegâ0(w稿dxë[£¿-ÎQ)E·œëh÷VÄ Yÿ×ÈœM:o¨˜Êà½6Rµ¨v­_ï½?¥¨©kŠ‚xEg*¤6ÒÕªN½øüþ«ÙKÝ 4ú?ÈÕÉ·ÌÖÎçy"Í*Œb¿MÌ™hË 7ÊÍaT&¼Ø‰5éEÁx//™Quœ~jOð|°ûo˜rÁ{öœÏ&«Ã×,s-¤Ò÷‹ÏÊŽò£þ õ®ËOo–Ø3éP‚(ÔmCú½9㻾e€)ŽcÎè,ƒÊ ªðŠùbà>—¯ÛxPÉ•Æaí¢i‘r$Ü”Jº&jÿïÀÁ££ Ný (Á7P¡(ð~ZÍ¥±½C¨šÈ=ÊêhÑqê¶hœ¾÷±!öuäÂ?ú¸å šñ ×|_Cèñ¬0A±Ëz|wú0û—ùà“ov@öÉûfÏwÞdÕ˸p:8®VkÁ…y£ÑC!¹@æq2Ýþ:ÜIô•##@#¯"ùÆ.¨ b`:x[EïïžzåÖíiQ{ç©ÖÄN\SÎã˲{Q§lm+Ã?ÍmÅ2Ý3ÅÑô½1Zòmh)Ò”(NßLOTçË·UºþŽ3T-3øÀÆÓ* ¼aq8­2fâæ¶“îŒc}®2(ŸgCïa¹}YâòW?&'%Hv;žàÂlIíùXÍ8&üFñW–tÆa<”‡Ëìà+÷+Ö“.•Úá±hàð ÐxÕkc7`™G;ÿÔ´ÒœséׄÀ-ZÊ¡‘T[¼nò½z@ÑÿS„:ŸÊÄ?’;HUî |bá¹Ê?®(}Óâ3ëH®_¿ØrQrºhḭ̂Ûxïž-#­;qcçJ?·züPÃzkƒígBºå…²ºûeú¿»—N5—лÃf¾Ý#²¸ô=¾]¦¦À&7¾@g>ņ‹ãÇÅîô_¦‰Þ˔彧i~®Èæaaµh ¹><æÙvÿí} ˆKhrŠXíÌl7àCIÏÿæþߊ@°y‚E¾;wŒÅç<ðŠ¥-8'|Û¦WÞý‡ ¯ÄÝd/ç\k Òêó¥Ø-ßħžIÆ ïþ‹§‚Põ_ÑÀ–Ig\EU?n6¨†ô/á¿çÖ½y>ù#ŠîîqÚ»V©ç zðó?›Ù¢È;1ç5çdŸ2ÀoSþE¤7×ñâX‰Ä,»ÿDÎF˜+iWÄE§ï“-‡NrЦ»øÃÃ*^ û>Lñû¡èpçÿmª¼Ñkœð]£¶{ÑlBò²­z½íFi‰ÅÞ)ŸÜt#3 ˆÐ<´&˜qÝ‚kpN51znÇäò¿¯YÉzÅ%QîïÁã_ðב<ǘÅs Tÿ"_®¹tM¬¥Hm¼ÇNêïá ê ˆyªýóUI` ö-žtï€S ®on¬Û­ ëj1EÔ?®èvÛˈ‹Pþ>Ñ¢t—ç÷>Ÿ¸9Ñ?lM"¦yüJE‹Ð.W“´´´éª˜Ú¡iïgPȽ$zÞq%ùY}ðÝíb1”E°ÀïÒèá ú‘­€ò÷R P|!²­ú®•ÚÞt ón,Ât†K2ÃÒ¸:¯‚ùÀs¶Ýñ=U¾Kb+2àÔ—ŽxÉöçSXìåmkªÖš—4B¤ÙºakȽU¬Ÿ¦ŸÉ=§²}–N Àé³&ÛuÑ7É[hËÕ$8Ä6Ü^¹ñûÙ&y–w 2UòùÄ›&pó({¥x]KUÆ1ŠÄT\~4„,&€›Îÿ ðhOkiE«ªÞåôÇçÌ 6öËhùLLº«ó‰ˆù2£>0Œ8&f&¥ÉŽRn+vÜ´›’Æ·x'Ð… ¨¬P]ñY”® RÝ·FãlÛ’Ý'nõ÷ Ãú“ÞÄÍf%_òø½W®Î\ä/qûLƒ,2ÈÄ÷'ÀEL oº(Ý8Œ¸ÎÂ-« d¦·ÃÚ^¾örÀË^kšidøv/À6jK]Ô„ÊÜ2'x½çá´*– %HlꆈRyÌ.ìàÅœo@Ÿ¶ö_+ëRþ&·B°ÔÓØh«ŽY2ky} Ag墿Z¢+‹LN`ضgÛdÓª‘µ”bÙŒl ÃUÞ&ŸY~æ;ÿL 2'qPˆÌØmÜYÞ¡×Ü]ý—½‚zZÚÕ¿Ÿƒ¬¢°‚K˜Ó½‘3ÈNþ“ݰ¤‚‘ ôügçv4 ²Œqõõ¥Ï9¾rgd!w¿7Ë­t×¶§øgÂ7heÅ)ªcÜU›ž;PþW|þ¬=ˆùÄjSÒ:Gl†îká<Åv‘A摹1ÆŠñ9i]IÇ!R1QëYD†Ì žßzócÄMíE-óŽC›Wá«£ D˜ŸĨƒç‚É ˆùº 0|ͺsx ]ˆ;ëϤ[¶8ïá¹X„Ú‚«1ažpvJ6‡—Ÿp#é¸nÿÐŽûÜVÔå{ß ;Ø‘å¶Zõñ¶Õ+!aA»¥ñ<]z]p¯P_ö./í4·`‘å;ÀEÏ›Ý<-8wwç­!>Û‰y…¶+¤Íjp2³.›L¢Ú&¦»É_‚Tt÷÷£â«z“"vç#±Gòã>üÉþɢ闆­Üÿd£°†8‰UjŒÂ¨\ ‡A=º“ÓBsǵ-Ìýxû{̧5oîÖ“\%‘üʉYJ À8ÌÓJ¢ ] ÜéY5—DešÇ@cƒ÷=ˆÚUh:G(‹ ï¯Èug¶v$69¬Ñ˜Æ¨$Q¯×S o¨99LQmµÇë 7©1#nIüÝ.YÌPXà\<àÆm…©½2þ‰'2é~%æy8×e0Ð}@"²­»Á¸hs^·PÅü±AJä+mVrš*Ѥè›ZÜÆÒª÷û€Eüï°ß@XÇxüy¨°Á|צÁêÀ鹨6‹ÛŽÒñ è…„.+U,“Îöö§ì §Ù>ÍizÎ÷SÃ蟖—eCôNc|ÇÐÙ!·ÂÕcx1í,oE´2¸)Ö7ÑÙÁõ£…áR0lgzÙZ­qöºŠèÞå¥r‡QïLÚ©,|pèŒù£>ûÓ*U¯vaVÍ]7QPþ‡Üø5kA ¶;Þá/2üòo0‹qÄâ§ñ b‚‚$ƒù08UïšC»9:È_ 2Èœtž»Ü…Fƒk, (Õã>‡ÞdĶУ>o:¨mìùG&mòd¯ç<†ƒ‘ìXìv”Rëï#£Ðƒß±îbƒçMNúv@ãµ§Œ[ ×#±GXë¼ 'çä^ûLý¤{âq¦‰ð©ü¤jOo¸L üŽnŠîÜ;øÝÑÐOÜ‹8>ìöû¾Æãü'²v=¢ªÊ7âJy¢òg»Ê÷ó>txÑX›YAc?Ý2#‚‚]é<¢2Ëb/`¾è‚K õ>X‘ÞLJÛhè2”•œÊkŸM¼±›º…sHlÌ;p-Aì4€èBóŠƒ"i½RþzãOèÌ„ç­7So& ‘8¥ˆ¥Ü1TzÃbrÚÂb̵cÐ7ï^„ï,+õ˜‹ß“{@`ÏYHrb¡ÓÚ~ã©=ž¶A©îò`Ú¨,÷âÛÄó-.ß²xSjýMæãœ'ÐyF)©B“.V^¥H…gç_Ø’Á*ÌÓ0rTMfÐBß?é#¿;ÿ …ÕRmMév}ÑUöJÕAcM9» \ŇW‰äMÇþ’sȤ«ØvùòtþY2F‚jz¡Ý¹àGI½ Ç!i:×àÛùŸë7±'4oÅþΛkŽv¾) úõ|bqó Oj¹ãÖ?¼Xež²JNýÞöŒ_sÆù´á¼%ÙÉñCÌU‡«8ƒ~€‘yÓföLZz+aÁøPBqGW…ŠjBÿ&IYºðÌGïºQ20Eˆ¼ƒ¢ÚÜÛœù‚LgI>4/Bº—Riªœ{ÂižðUÉá|Á3±á}r3QÚ%/ ÛK ¡ã€ölpˆÎö_±>‡Ûâo»¿ãN™Ós~ˆ­»ü.M>Î%Ùñ‰µŽi¿š{ŠÐüW‚^½½UtXoT¢aÿènxL9HH`š €îïaÌßD¢£_^¨ˆÕô= û@a£R±lg4ñ¯*ß™ÕI‡¢!ÄšxóŸ‡Pƒ–Ä€þâÜBêÄtx-ìÀþ Ã0%BØ×@éÄôÇB¼¸$€(7,­€ûç€X i5ú_ÒÉÒÁôî{ƒ¾­ 9KŸëÅq˜ékñ™ ŠgºÅÜe0r~._¹Á?öNÞÞ˜¶AlIÌÙ`ùgž(j˜Þ³õ×>‡%,8ª‚ ¥X³ƒÛÐ[ d/$·1æôlZÅâD.~+„s7؆h'ÆdßßDbÜA{3œ]´>ŸPk7§‘gCã•‡éª€ë› Ç‚³ueUÙ7á÷îèh/çkný“¡’£(ÇNo.ZÿXS´žY‡Û3¼êÐ’d¨dÃýù¿»(¼zZÕ¶K?Á,רTµ ?ÏsùIBÞY­4P½­2Ü1݇ónT$ÿZ1†Æ,‰÷·Žr|;y~£«µ»´|ÿ÷uÿ÷om‘ùðþïë:–±ÊÈ|÷ÇóåXq_‘ÀD#õ¨_>çú3jøŽ™…uY9”7Ö×,û}—vaØD¸À òû*b Ÿ¿…5}±*¡–‚>….ø4¨ôu¼í~¹ÝÓJ‹Ë÷³³÷ØaÓ[»ûÙÛ²½[ûµŽL‡ËVÏ"_,dê¨P²Â·FÀ/Ò`øè¼m¡d©~ñqôÅÆÏ”óöƒ;¢Iû­Ÿ?Åû ó+:$CvQñOÏ ffILzfa4K¡<³Ô² ùkìùíµìö°!Æ i>Ð|¢ùH3g}ë$ÿ-“w´U¯àÐçžüAE)ÚÛeb¹ÕI‚&™·°úxÕ²¢ìewmâž(õ¾Ô¢ø*2•D>–‘áWgïožÖ{%…ÉK…ž+V…ü¢Ð;¼(”™âÖ¸[¯6}d…Û“2Ï! :¯öî8â­óÔcMZg@›»Í7<}²¸%½*ùsíÎç×DkÑ2·ùœÏÝeE7k¶Ì³S™A$Ï;éÕlâÖ°óœuLJO‘Úè¼#»m&ÇŽc? „lˆrp¢mŒp­ׯ{WÓ)ì?©"&‰Ì^ahô7Á d°^G$–ìÈ5¡TÅð¶ŸZG¦.¤ÉÚXvXOËn$ùç>ÍÉ’û //ïä‹2ëR•¶i+U¼©$,Eîw–B™ôö{ùðJ[¤t=Ü0g_îmw¾‰DŸo`ÙòØþeÞƒQ„*< qzÒ̪ µc¾÷‰}J>­0Ý¥oâøe‹y“ör–M›;›cÝîX ³cšXCÝ&1KÅ« NƒP‹€S¯¥×AÛÿHR.GJ1£p}Ë1sX¬Üó­éë¥ÍŸ b]wÙ,£Ï^Ë6–ç¿Ø•Y±ýÑr´<øh]wdoÕg ¢×é¨å+_Hžª¢JŠý_ê°Ðì?ª|—éI!QxŠó±b¸’¨èѸ¡é ÒüŠÛ]Ωv#Œ{´^ AÜÂi._ÔU9„†¨V$3ìÞ`"#‘ –?´v3¼¬Ãe3cS*•ˆµV„šÓ‡>Ö'6ÔýDO‘UÁp䃺FlÕµ*Ì£#,XYÜÅ*47cÿó¤Öy_méuù˯øø+Evãðž×!õ’œÙz‰ã~í?g¹¥Y{5â+=V·NTˆ¹e¨x¾øŽZ¿ó@ý $§&~›ýÂr—‡dìÓc¥Ô=Ÿê¯—dÚÇŽÌ—_„fcEÜ%1JõJrÏíwžóêuÆóŠæ*òŽSÑÒ‚ õ·†ÌŒÉf8ÜD‘G ò²ìxÎ¥Oa²P/óh)\‡SáL‰­/t ëœÚ_LB—m¢¼qns‚g0À¥yé G«ˆ=wë禟=]ͦ–x7±ï'î`9»_Ây£ËZðεFÎâ^õ¶MD¢½2zá×EdíÇdw™(k·wE?‡æÏƒ»f‚­}ºz3¯!b»“ß4Vý[`ne#ßb1ôiǰ’оÁi®0{ã«V¨½¸øùF8¹ålæëÛ•Þ'Á6b×XíCÛþ47‹ÅÕ"xŽ÷p•WÐnÒ"U#ñqœï»DÔp¾]XÜ~_Kn+-/©‡èpâ —Âkn¢øc˜6YBMKA“à!ÑÈ/À .êð„CNÊðÄÍÏÓÚª_ʱÛ“©({¬µ7ý€ïéD®AöI@5,ÅÃïΧkJxá´‘µæ« ³¹Ã5š‘tÓOêÐb¿Ž_Š}qB•ÆB˜h&_ ÷‡K¿>ÕZhtÀ@ÿ÷éŒùE-®ï‘¨40A³ôíóñt޶íC$ù×Óþ6j¾L` b)T¦û.²›¥cumûmrÀKFm\”e‡–(Eª4…û·å€¶…óoxd·ÖôËA ="ÆÚß,©ô±Fð«d¦Lr-öWù¦©pîßgHô]D5\Lª¹2ÂfaÅàÔ½ˆ,¯mÕµhÂ~ÎÓ\Ù_EkÝÛÿ¸×‰Ù·Vp±jÖ$*z«’•O[­–ncsÍgädœÒÀLmfÌø²ùi –°MÕÂPÈsw„üÀo…hÅÍV~øŽ á»2[«œ_•8Ã9‰*Çã´ÉW(zFõHºÔùß%]…m<ð0ãwWûþ•w”]‘:Œ¥Æ, ï=×ÏÅ– Á¥üŠl~(i¬…á…¹8§]ébééÜ>qí 5}÷z!ÌpùÄ',%|9HB @/)8L³4 ¦ ´Ä×RK)? ™#Jæ :ÉÇþšI{½ø2Am0ÖªóyËyûµóÄãYÓ†»ëÞøÎÌ+Ê·aÀ`K¥…þ_Åš?¤4g×ÌÙÞ]_ñ)óöÉY(Ñ”¹’ü@›3/µ.Å-Õ.å-eª|ʃê”*¸]ë5)ÞßEv ÚÔùý€ù½JºÓ–9ަ¦+9ÔµÛ?™oqÅþ¼9ÑdÍín@^ýŽgÅaÙ1Ûç7j~©¿½lHA[£’“gþ³öê×¹7° l-ÛSñk8Bïnþìë‚Gÿâu„‘¸?»Òbˆo±³ëóHæ«¥$ЕÞ(Rt¯_Éók|<>n@—²¨Nôª‡:ÂÎ5©îë•õpâ•ø:‚͹•šP`Œ÷ßa—îëkýrd˜»®Ìˆ¬{l}¹‰Z~ @ó¥úÓ’wŽÖÏ[æj‘Ë… Ùï¦(¢a9(UÛG87µ†wȰø[}yÑ–ß]$F=¬—9?x™ØszïQ‘ûéíŠN©ý>}ÊÊæ-+å妱܀YƒþG`Eè ±¼Jp="öYi:N‡ÑÎBàñÓÇHKû®Çý׫ iö;¥¼°Ïnk_.žøÛÞƒI®ß WÂ|ÃÂÙøû'¿F1ì 2F öGbÓ(„þ$00ü:gsƒ…ãù•i%–ù©”AÞO³ÆÆ?ÐX¡n_ ð¤0.»¾s'0džvåÞÕk9wÞK„Wèïœ_ÑV‚1 ö>&¨Ç%]¤Ñû{èržO¾@Ì: rIÐûxë­¹—ós¸!D#qÇ:„mŠVy\ºr¾˜•Áª {aðôËÐ䨆­$—ò¨½’ÄwòG2= LêN¸ .89Ü©ù>)´ÛK53^üš%õ|<]´¨Ž~|Ò„â]¾·÷ Îj¿ô)8Žzþt+zîRùT[ÿë9Q¯­NpéW¿&¶_y/ªŠ—^dÝCAá'cTDŠÅZV8&2ËŠÄlÐ)ã=Ó¹ Tž|Å×ùfˆùþN×ù|ÌV¸- ÚBf¸_Ž<Ý)sÈ%bH"++j57^W²ßÇ:ôˆ‹ ˆ&7pó(•îöI4ë[U‚kwNG!ZeÂ7¬SF}!âÔóKÇ›rÇ›J3g`ÎÀcÕ·¸ ¨P*OyƒU]F#Ò'}Š9ž oÚÑsã?|®ôdi¾÷ÌG´zçW/)ÉëàÝDäB–xa˜ˆ¿¢÷ùªXg!$ÝEª„ú¤ÉL—å=øí†>1P5ЖH;“Lp ÌÓlÂŒf=éÕ²²Q‚é)ªd‘wÂÉ“u¦=ýªã4Æ7)ý;ºµU\¬>€Gxï—ƒÏ3Í—k¡Þ¹©™V'} ¶ýeÆÑù5’ M­RhÕRûh_Ô7Û•(_óH$Äâ^mUbzÕìü‘§#픪N5k0£«–Hýãj®³©iëm´ï®¼èì^ñ6P¾ðçY}þ•?Ûpݽ0tµZDnE+ŸÎ®‡Ò“'Ñô"ë~š7f‘†Ôx;ú†Éë67]2„’a£|sþ¡É;ûÄÞ÷»+Þ¡ãC퇈˜ ök¥!lÁôŠ_¹Ò®Ùãš PÊí ø†¯bb&¥uÆßTFM¡.›M]·…±iY§ú†«ïnãÁ 8¬sÂÏDò5]„K«=n%þ7-2ûeÌŒØpƒž1³ÕQQŸÿt3x–daߺò Í|ªxÂ1ÏÀÓ.áî­ñÞÕ Ÿ‡U‡xp°èT^€ÕkÉ]Õ7 Klnd}i‡â}ð_›  Y ]‚=2½ ÑåŸ2ß} lW…ÞN^ý.qš†“7³økj&—‚šþBñ^voh&ú²rþã¸T ÞŸ1gÕ 0üu1REWÃæÃ ù±͸¾?€$Õ3QÔðõ‡Gfìøç€•Ätfv L›bÓ™hÊhë={ž±ö~ †ºl ÊS®Êcñàå€c J†YŸýJdyjáùÙ—SÑCªÀc äŒ]ºç„­½@pœíc*`¬îê/(š€Ë°óòÉ LóHLf½ã{ùíÔÍÞÞiúŸç¤I.Œ0|¼^ŸœŒœ{ÊMH'CEÁX9i›‚ºŸÑq¯ ¶3GžÚ -¯JbêÑKâ¬úñ›æ¸Çªî4ÓŸ øv òjàd«¾pz ~BÎMÜùä–Ôf ¡ÇiOé…TÝò4|æÅ«“Þ«‚;)>â+[µ?ÒŸœz\Q®RuII·ÙA ½×2g ª,ZOƒ¡þ¢Ž“üUÒºüÆTé3)G¶qléò§š«"1[lªªÆìº¨ž¸3Úÿ‹¤]Û´Øá¼‹‹Ùæ$l9/U²¬Jø²Ù§4ÄÚ°j95%ÙAñå«4j%/Ö«šó#ðÊ7³!]÷+q3µ+m¹…û{ÎÅBn5ξkW`&4^á›Xÿš]xR/ÇS9á²: P `Åg…KtŠèæ òG^p²Vš˜&ÿ {Ì£ãÒØÌúÉsÍÛ»VýIÉèêK<fã#¡ âÔ‹¾{QÔ6&ƒ0óWnŒ¥T½ÃúÊÖgö:̇)ÏÚ`ÍØv|­‘=®äo#AðS]ûÎjŠàŠÅ³&„å=bìq`eç9=ïÿ)IΛ#ç.3w¿\‹&ñ|KRÇÆ–Ÿ{%®Ó²ˆz‡n1v<ê¥#ªC¬w;ß TÄ{L °¸ÒväpLÊL$Én÷8=ùÂÊų.ÂXÊ#@¦4éÚ@†¤¥¨¡þBòò¡Zºïħvä–š‡=¬°Ë×(7Ο܅}ˆ 4ÒÌüã‰"è£ÎäùMVæª$ë›ÎŽ,¢|.K§Â$ý@Ñ3àÌIe™¹°Ø’ž$WÔÍ©16S9­C¬ÑVXšŽ‡¼t®AØõ |í ¥´ú÷ÜÄËUCÅÖñïÊì³Eír›œu¢¤w¤ •š×"H³ب„å‹Òü;´Ë')n>~¦è«·Zîd±— –»ŒïIB³úí>Ù qr;=ß;-—áÜüðlÇÆ¼õa noøésÈAIe#F„!åKë¼b+Ý´)ÄiaúûÇóœ?Ì.o|1à6*¸­*KØöòºµ9i\i°•ÜgÖSN£èP(¡ÞR²Åu1ªš‚?S#Ïû’`J&M‹$¸_‹†<·Xï§â Ê´l‘&š ¬·¶5ˆš&Ũ˜»†%¯¹ `Í×0ìWï€sb8C­Ì96[K’x<|ˆk9÷‡”kñ>p¯{÷cVQoNBBÊeÆ1á£=Rt«V¬€¸¯âÂÊ<Õê}áYË\ºóz¼ÓýíÞê=Gêf–X†½ÿ'(§ë3@„;Ôt{|…†]f̯Áy¼Ë[Öv ´õ>ø½Ëð¹ëïév1e”—1Çs¹|´ý‚é(}ÕŸ;–èvEkží?š]¬æ›^wŽšƒd‡„°nÇÓ¨s3ŸQÕ?CƱ޲ZJqÑ¿~8øe/f†Á³AŒC×pHÞjÇRÆýê†dä’±áÜñR'ƒæ†hòKµ5c_pŠ5«¨tœov:Î A*«gVjY4\¶îûŸÐ`: ®0“¬ñIÿ F+÷Ö­X]5¨K ÕQxùÆðkt³Ñ¬v±ˆØ[]ã÷:R˜«øŠSKwðY¿ ·#eÇowp…tN@Š*s<3+ñ.Æë‚xÃ’”Hy0&Î+_£=j¥˾÷wzNr™=ÜW¸·¢Uo}ï¡2(4“øšqCÙjÎ:î·7ðŠ¶¨áS/sc-3t5VãE=aÇ~W­ÿn&Vp«®¾I(_Ð2HfàÿPà¡UÍ’d(È(>J†ô1µOZK?h%©÷ˆŸòã)<1Tã§b<û+îÎë^m‹±õ›fãí-ç«×mûiîg-6,W5UÏxOŒÈØ™HýdGF-¤Èégî/ƒƒ¿zºnål¿Í\ø …ošIœ‰\àϸ x|ñúõAGP®ù3þ/L”3dîÌ_¶Œ‚LÝ_Ôáó ¤D“|m)ý~Ó#é%tã¼å¨oÉ^«B~}‘ÜVMƒüÉM¦'©GYè’öiÜrT‘×´ññ(£eî¥tó©çÂêaê°bñ¶Îãj^ö ´>1™³ Ô—7h®wÚË¥ Þɳ¸Ïâã˜7ÉÑ:8ùDc­ñ«ÞŽ,G”~¡úëŒw¬¹3?tóÔYê䕼Ò›úmÃþñOkÎ×´…rä7¼¾ƒ· ¡A³—$8_\=·¿ñ×î˪3c´ÄM~YDïži5BhAÙx»ªl\AÔÝx„!3JxÑ¡*áxXùúdzݯØûÑ#Ã2¶¬ƒ.¯©›VвD|<ú)èc™á·VÑ#öüÍáy—€rÑÇä‘mWÉÝG?œ„y܎סʽ$ü­ç9WÙF/Hùô>èÞk%¨Ÿê¨e“*ø,*ù2•¾»ò©Âáv˼°Ÿ¿$û·Ž° ¸ öQæ¯Nñ-hð"O_Öø~a»H*Ÿ“Cþ4i~![ˆ´º( ÆýY18”g¢/O(úéÊaj.*°×ÎÄÊt #ìÆ)"ž1¾$_j—óØœ1×BV:¹8I…åÿÂåPJX ¿C\søCóÇ•kå¦Åù)Î–Ãø›RîÅ`F£ßI(' †ÕÌPÇ™4v%!z\š‘%i€’oäUœx5*-qeì· †óO 6er?xŸáç~>Ÿ‰™+æVàZôø£XhÐðÀbo²ä„i»Æ(i©Š;÷â?¥¨l}&ËÑ$ΉTñªg‡– ÓеJ6ùP'ÉîOâN‹z3J˜7Ѫú\”[UJPZ~¼‰üB´d‘ÀEuÆ4 ¯@¢*g×’þYŸåyÓ45¨AEX¤Ú õ;ö±è÷Íg¸'}ž R¿ÒØDÇ+iÁÙ>tÜ)Íq« ‘Ô¹Ch†å,2=ªë~ý+l;Fw‹»,˜­mã’$çÃÜ TŒª öþ#úŠôÈÀ¸ Ð1°Í"+8¹‰«˜ 㡆И%i€ìí €"î*dò&LýIÊ•æÛ| —ü·’yÀµÖ2Òj7ôùà‘ì¢K„Y'°¿¥r؃Í.ÀqLL¶Î$•´6y»â¹.ÙmŒéwr›ç‹+Ò&ó l›b+”¿­Ãa9ÿ)ÒÂù·‡JãCSEËâ¨úT•ØÓ_fÁÊ_DV5«Þ»ÓüùqøŠðœ&ØC>µ’’kAO]%‹­ÕlÒ§TùÌCµ7C­Eµdù»ZKT@ì’súCE¯jÒ©dʉÊ"Áû™Z”†¤9‹ôг„ [‹³¢JP*h¶Û¢vž:Ê µÇ+Ý—: ¶FòóáƒòoÈT’Ý㧦j*ɉ¡uAuÃ/1“óÝ{yÝá k>á#Ë,ÀQ£Ü‹¨mMpSH %ö’”8§Ü4…¸Ôk`5x\Æ‚d¸¯€·9¢/É ±ýÏl¤áó“â ¾Îä/þî§ÛNØT¥¸p£¥zC<û¶üxhȺ…ê†:«°?ǃX¾¨ÒomIÿò4ÆÜÛ å„iñeû¬ô£oó0gcs°ÜÓ.Ó#c?n¶bSæû@7+(h|(NWgî²µtNLpMò-!ÀÐØÕ‡i ³ ýø’´‡ØÀDí„g¿¶å§§¤¤h÷³1KH(û$Fä»Dôm›r6G÷A†¨ú{Žþèd!éølÓI拏#4T ~ÏÊ’Û@KÀû° 0…Ñ ´µ5¹¤;ùÂ5Ë›Š£)ìôÐËdE6 »|”À*ε"× KìùˆVÈ+•­BW7N}Ðh§€e˜*¢L3.¬—ÛT_!ŒMƒáˆ½¸š”ß¿›•˜Â(lVï²á¢e¡¸üLò÷ˆÉ©Bê§k¹¡ÇT*ã `&¾ÛQ®œ‚õ¢¥aµòCA˜¦š®´ùÚ°Å›t¼f€\؉5 èäV>ƒÉ‡‘é¡ N…+/Ed²óªÉlhZ£*Ë«»˜{»T"t\òdՔצ.)Òª“;Z&§¹HfRT¯éå¨à]ÞÔÔƒ^A-ƪ^¤CSs@²j ‡ºñá°}&XêsÒp”jë·_Ÿ´Ï[F DSTì’0ÏHa1_ŸÌÖ¯£ÀÒÓÞϘÔòˆìŽ?¬ÇÂýÈð~u9kØy}‰ÿž…{ÃðÏZSüC«Éž6ó¦Í40‚Æë°=ñÑì+Ýj"«c7(ãø ¨ƒ$¿ÿÜòüdöŒ”z¡Ýµ©_ C½ÐåMyÞ8Ï0vü¨øã‹FPùõ…ëµ5š//T1ÁÂGÓ+§JGºX¼¾¸ûø`V,ñJ`²mÑ<[«F,•¥Ú®•þ«¶ðÒÉ]B&ðXÒ”_¥æ€Á^2,HT>ÕXàv‹û5Þ7®ág=Ïù¡ìÆ~qÁÄçn¿G*PêW:TŒ[Ñð@üÝT$¶Ÿ“«—Ìžk4ªwxÇ_žÒàÇØµïvˆëà6tÀ Ðx¼Õõ*}?”d_àg0}éqñD?7©THéÃ×Èþ[& ™¶¤Š$G-žª{igà{â2¹‡"c$šþçgùëÖÉ7mªõ¡Ñ…‚äð?Üë9/jstÞýãVhÓ;R|Dvþ¼†¡îÍsþ<¸•‡{ Í»GQþh‰óVÕê·l¥–1êu‰“ÃícaæòKŠ`'Œˆ!®WÈîCùI-¦“d.\ÿ9³ö­WM]¨’y5Á6÷ó»d6%Aq`,sÑN’´¸ìÔËo§Ì¬©ç¸k˜ù;݆ЙçÄ#å¥Á9· Âø4Ñ'jÀ:ÿ±«DFÝÂM)Õ)?¹<Ègsà›a!y ÖÚTW2¡XÞÎßôĽëe¦8®‘»2)g7½jó°[q£t5Õ­uá§|ôûÛÌÈýÔ[eÑ>•B•ÇŸ™–ûüŽªÃdN…óP’ªåJ€zE a™mŠ]öÁ¤9ënÑã|”û—mskQ–"nê[xÒ‚n0¯(ÕWùÑ {›‹¾~‚ÄvjNØM+V'Ž(öE|åÍÐ-Ø›hXZ¿5ý”õæã×p½'Î5¸;m‡†·¬þÖÄŒ(¡mYÅ{¸{"IÄÅJ¬Üª†jJÓ%1úÕ„>/3ñrQÎÅÓkQGcùyq,SCfÈh¬îÿgKãn;֦Ŗ ßÚ—X­LpbÙùº°ç±þ7 TYJ¿·î’äÈi·]fŒ­Ü¥ðpv#T_1¸Éã†Vmû…xꉜti[›ë`ÓògÜDÄ>ˆÞ›ËQ/Ûo/ëàS¥É!·ßپǬBA@DŸ|ÄóYLÈ#ÊÁ.œFZI!w•¿š…W–ÿ-ü,¡Zâ›D­Á<Òùv͇YÙ|°hCé~-»õ€—ÌYø~T¸ƒð¯¯é{¡ÆAiÀ±ÉFeiöÌÀ÷¡ê%Œ ¯èÏBŠÉ™/Ë>_ˆc¶·Í§xÕ–ÅZŽÎô³nƒ¸X«‚8Ší-õ÷wr‡Äe·ˆëÅ£5dŽømý <ÌÝl·ò“¦Y-SØû ï×’žïdÕ ìx|é‹Él6{ãmë+îûã­H|)N{Pëi@Ì­y°ÄþV¹ÍB$ÎK”QO¯€……$-ž»µÛŽ#7ÈXɉMeÎŽŠÞ®>¥ßCC‘>E˜Šr é®0ù‡Iæ ³z)¾f¤ùnR5ôcýÌÓš«û€så­{Úý:Œ­‡ÄHÖ>è{_âÏ¿õ·ûp\ïÀå{î•ay3Ÿ¶Û_ ¸5×Œ× Ùÿx9‰Hüí»‹ÚsG•W*~ØZÌÿ­€{÷®ä³ûË,ùÛhB¼å :R/˜YÞ(Ë•Ë" “Ö™ù þÙ2‚+TL"Ë«á®óÓ±¤Ûše‹ƒ+÷³÷„Ó›– Ív¢ç×™/9‡^í§±6‘wÄ[C.6Ã'A畈8—¦ÔFNw¢D¨t§é8_©Ìú6•˜q·•‰—˃—Yhü¡Fà^Äa_©ØñâxÞÖ2ñ2…Ýܺè'Sæ…!Gë/N§Äq¯ãj?×® ~Ù•Ð~ò˜N›ô‡sÝ€ÃZz",å¢b¿ÙÜw§ÆÂ‚¨ÃõŠÃcÿ: ýÙH´Â¿:ÏÒHqFXî8WÒôPkñ[]vÿ[]Â8šùªò0Äùlì'ìÜóp-›<…Ý'_à¶Î»¤ñ–š\ª0µ á÷Xki+0+§2*›æðÂÕÂ÷–Te§Íï¸wÜõ[¿Y ànz6Í[îôN^ÅÀÆM.±UcqFûƒ½@]/Õ >G¦m¤ » °Ïŵ£n=ÈxÒšx\ý½ù8é{ã\Ù«b޼T¹ÒãA¡Ù£Ï“²o7PÀÁË7²Gâ]:´Yu¸C†S6OÉ—ñšÙt_umcuåéHwô†çqŒxó¬“P9te#ç9™f›€ó\Ÿû†ÀDúœ«ÁëÌ䞤@²–K|†"!W7iÎçªv-cîo¢1{Å¿ŒÊ¿’2[À¤L÷ƒeFªÈÖ¢õø˜MÓî¥9A ÑÛ¥4p*µ{ñÚZ·+³5Ÿ_w•Hq´ƒI¥œ¥Tìm*_.åZ2/>…»ˆ3±2ü!Þ|¦ôCG)qýfTé…ÉÅK‡b<ÓÝC´œÜ¼§^þSyµ.;'5C\½­¾ó4E&ÞZ«¯Ll J„VZˆH†¥neø7ÓÖÊ|4ís®ÖÕÈþî4ÄX™ä'Õ:‰å‰È_[O΀±¶Ã!nà÷ÚÆâ-Ì´{$»™¢ëš˜j§5fb"ÁéÙòD@ÌΙß „=}™ic3˜i*ø(€æGò@8«@Üòž,äé acf2³“ó©uªYrÖãò–¸{"¹Q\»ÕÜ$»ËM¤iša‰êô)u+õîÀÀúc½ì–aÈÒܦ®%=ë¸_SDÜE…,ç¬,ÊË83j±…ûi[s¤£‰J<ø®‘ 6%£s¶½šXUÝip ¥ÝÔÊ›ž$kÏ•'›i1hÇZAÊ(s®·ª‚‘$öWú…¿ÃÓ¯ô¢#Õ(H‰­ÅcÕý),t±hÃ%XRBéÞär’s7ºo>›>7* Ë»¢$jQçÿDû˧=&Û"Àô°)¾]õ }Û W^æ°÷k.Y¨~<~#qÃY-†ZWü)+¾M–á­õ P‰g)-X¼©hà³µu„‰^LJÅQ•ãÓŸB¸Ä`~"[V–¬´ËÈ­"-ÿ„E ÙÜüÐe觨Ÿ;÷•/r^u‘#‰‚ÙÞÆú7Â?o^¯E;Ô#×F2ªìUJ è"…ßB¶÷QXT5ÀgÓ wvÓ’Î<.8©%®Ô»[Â&JLÐ[à7$'Ƙ©ÌázšM?ûÖ2¤’y.]Ã+&`œVň3¡°ÅznþBa ÚTZXA¾M^fD’¥nPÆ­L¬…F}!€ ÉI©ÊV¿EëüëµÕÅÈsÿ.2çTªþ-ÊZe,Ž'‘$^°Ÿ(ßo4%\o.k;x¹4øI%eïÈ…° '=Ã/÷«yíÉ,fh)ôìIÏñCS$ÕnX•+¯wlM… Ý@»z_‹‘Nìô"'û ëŧƒoiîË-uò†Ûól$0k§Ñû¾é:2OÕ´ñ¥ÑÍe¡„ªVe_aà XO÷+(©.ªy\1‘†ãZ-¹råkïVk"&dÄç¤S®°Ø~¹?v}Okë‹°eŽgvßþÊ„W9êR ·ýhû;y%¾WŒ¥•ÓàmغX>・¯ù8qzd¦[%¶àcISŠ{äK†ö*mgÒX3u‘ õl,9ÊiÃswÕrŒôǧ,«ýÅA`¬nEÚ™ÔL™²ò’¼óç† çٽˀ¤¤Ø¼:žÅ);L ´íV³;_|3±ýQåú3øñózf÷¬nªŠZfF"i‹)Í1€sÛ9YóÄ£Ú!Šy¡Æ„‰1ËñZDjzã®±-ß¡·[a øÚ(©½UÂiÈ}¡„ÔÁ—²[¸—púß_ÚòÙ‰µá'‚æéßêÚ/å$q víõ‹¸IËùØUzï2Ú†‡"†,oNš\‚œ3YM”2lÐ+%2P‰í~)¥±s]N¬ìnW¡.'|‹daDƒ { Ù¨Š», t´‹Ð$Û·S§’vM£[Þ\$ÄÚŶ+²L€Ú±S#ªHD¦ºZ$ÕáÎì}ñQ¥á#RßÁÙ"²ã§Ž]Õ~)|ðY!_ 4ã-PP…Wù­jم˵qÙ¦I=uâ î7D42g@°É¢Tÿ ŒÄ•–×›VžÀF²ÕsñÚOÁj™O¨åºzobï‘â«jÂ^ûxflRKÕü~n‹eZè9ûÑ.ÇÃïÆºÞˆœ¤@~äKøéE!—]X\¾¾RûªÄùàsÅaÙ¸­ªÅ‡ßÔã´|»'g–¸¢yþ$±Û ¡d‡ÝËŒ½­KU)QvÚê†öÆ„µÝ5ûñî ÂOîó3åøi,˜Z†á6èÌàmRb$”±ùQF‹zN¿Õu„áDZ𺶠7›ðÇ„?'ó–?oæ 6Ý:û[=,–ç]•ñûŠE¿îûhìuŒ¹Wcy½À*ηÑ ®*·ðóý¨þÊ™ûÅ\æÄû–Ï6×¢ o–<9T°M“¶©0Ìò~Ø€êbÉZc*´°K­Ò$7›Eügm0\¢¼ñ:øðš–½wÐÐ¯ÒÆLÖÁ|t«H@ÕÖt®ºÚL %îfБ€‰‰©Áo-Ïîæ ‹ËýʼnË2ÙLrq!ˆRnìøL yNÞpxjA¸È (ûbsúûågjj*ŸçóõäÚìþx:•©Éµ(sÚ¼ˆ¨¨d}ŽÉdɃ?ùb¹«!´H#O Ú䲿Dcü¹Õ§…5c^e¬ÜÙOo¨–™(¿NöŒ!2 ©»º‹~.ð¿|tÓa]Ýû`!óRñšçW\†/ÒIßÁè~+Ö {‰KZí™Òy.‚Õ›qı2VÈðW X`JæÛìz$Ýy§<[ %¼ö“Èx=F×ýM‚´|l²»ðÔ`íùÜyÿÉ~ˆ›ÂÏã&K!Ë`zQö#BDõhœ£·Blœqʲµ”®¡W–Åf˜š¡œQH¯]8:øDxn¤cÌúm÷‡ÍÏ/é& ÌèþœÐ‰áªy½ÖÌŽKÀª°öÊçŒY«0"eQJ¸ÏÖ·» jŸbË.Îôô_àúwB½ºw¦>èÙQÞ{à†ù›‚Õb¢,_ïN8šBx§>'|»ØÜê“W'E'Ák»1ƒvú=Cn8V?_¨64Ø,o¦BºH1xò-_:x¼}O²¨`3RHlr̳[öx-bÔñÍl¦w'äcQ~üˆY@õ8I·Žc#ò£]*x³/Oc;J&ÊáÕ²70Óý¡tSàrq€÷óso‡GœDŸ Þ'ç%Ãá:3w+ƒ·‚sqÊj §Oï¨zþt÷é+ ø`ù(™ °Ž×LÔëx&z¬KÍ\j ¸å:¤¿<ÇøæíKÜ3þóxï%E]ùµ­Æ¤gÈ.  %C òÛµìÙ¼>ò²Ÿtõ4if˜ØRñ¯¯ëx Ùþ¸'ý.ÔñÌ Äe_®Io‰0Æ$DlB“µæ:u½ÙŒ kÞd}ÞúOþÅîm¾åw€ÙÚ9µ½Ÿõ¼¿¦ô÷¬Góýµ0×׉¦’YÞ:*µúÀѾ–Ø9èŸz˜« 5qaº‹Iê“™Õ%©Z…+ÌçU­“é?‘pkiB„a­ˆû"n×òë@‡¹öB€ga˜®n9i’Á«€Ã¨ßÞÒZÜï‹´ÔB  ÷O8îWì'ßνÓÞ2ÜD×ÉùZ· j^a~`&ý+µ³_Ó¾|óô2¶´-Æ}ÞzðvôÊ6jäß'¾V¢•²–•Җâ•ò’2Jú(ñ9 [ñs¾Y%ƒô¼§’žv¸i¾Z’±AŠÄ´¦Ô¾#Cz¤n¾ºšn3ü´pÒÞ±×xš¢ïÛåA,´Ñ¥èdèã‡RYçÏ®‘r1•®W»÷ëSMŽ»X»ë¼²5hxu «¯Óë¬*èªÖÌԙՈ͚3Iw=à 7í•ýßÏ}½r X^Œ¦¶U6vÀ‡¾ád.UÌî¢ñCnµ£Fà 9n£t¬êdNÙÕX–}yú ÷SpoxíLÌÆ%ÚUËFtUùÄuðþæŠÚ–è)‹>ÍmTPzŒîŸà^îY¸Yóc™˜œ— ÷½f ƒC¶(îF ºÛoé'uçå铿àÃÎ6jrñŠ°Â ¢yм´Ór:Ïvˆ«=ëUlüw„,#šÅT ïŸ.ÔéÞrsòĵǾƾzAKdŠŸsD SF”ÊL[„ Ø¨×¬Yj0ÁÃ:ŠŒåûVºZ™fÙG/NÍc¥® Ð\M\[Þ-)`@Š4[fÅûÌ.B¤¥ÄòÚɾj¿×Ѿ;knóyÍÎbÐò?6I@B÷gÓ-œ¥ÁÍ¡âg £þéÍä3U£Bïûhï²m¡ 'J£¹âWX`©ÓÜî4m> HHp!%F¾ó¢zi8òân® Ô@è(›á îö)/Úù|ŒpX¢*‹‘m'Íd¦fâ;~*ˆqéøN^ü¦’p±ê`”ÑN¨ >Ã>È6ì ±p&}JTôû^Œ<¡¹‰éŒØ„}FçY¸ÑÔÞËðÔ÷²®&$w‚Ó–`\§¦ëÐãÜn£ÑÇdT°Ï§Ò³ö¤XB~Ç{"‡,FÐ( 41‡‹©?¶(ù#Ýya‡5¦ªÓ§Ä¯8q®ß®/µã!>%„ԋɲ›¯Ák›”Í6yH>Êû>m}»W¬fq^>l>NáUÖã¼/Д–9 °*ÒÄ=b®8†ô#'@»;è’¥HàvÑÙצna/ØéwƒÔßíâlÀ•<¨2”È€©‹b ÇC8,4Úþƒ>~Ý«fÑȇz¦®¸“:Ú§¢ùs‘IB àâ)N÷ʾ(nD)Ç.g4¯ø§¡í/<ÖÒ²5ˆ­­¦s=™Ù¯ÆæÊõUñãaæé®k€¦4ÎíINEx²ÐäX–Ê´ÌãëÇC·•YSwRóyèÜbÌ ª‹Ö÷Ó x‹|ƒt8¾#sø<ú1CÂBŽžÏ„ŠCƒØÒªH…â¬÷·w}s÷csí¾ªÈ†N‚ë1hhÛWÈ[2®Mr ÜzEü!:bxžå¸m¡@.ñ®°ÛäôÍY ›v@¯Ã£ 6¨2æ õÝ…bì Ë®G O±0Q3N™G «™8Öoêç‡Ð}‚bÆÞ L+Ë_EÑ’«Ädsï÷â$þ¬…õy"Ç-uÃ{&¨ONòÍi3Rû“÷vOÖ°W|ÚN µ¤XÛÁ-Ê©V!z¾¥Ì?"YÚ‚ÊTˉ‰õÅqrïhßa¦1Á„Cb°Ï„¸æ[Ñ#tEBvâ®F—ý蹊 ÝÌÊK ~°ã/·ý9ÑœèT÷±ŒöñºÕÍ­¬_ûÃøÇ)y¡L \‡x½wðásÖ¥²´pnV”4æûµiT[•c0ò¨·CNز·û¦"2–Û \ŸºXäÏ[þl4âü­TÁÇsM­j_Käw⇣Ov‚Ì¥‹–VÕªsâ—(\梦I|ú¸%,ÕRÙŠtìôŽgÞN¦u<¬‘ËÙÐÃ!¤Ôsäúó%ó4`šUz_µ/ÐÔ%ºþÊo·gæâ&·ä^ÿbt§ëþÄ„aß#»¾ûGÞp³”•¯L;´…1u$´‰õ1󧃮¿ö>º`ŽG|ÝÔdW÷jˆ˜»Rªel“mÐÃÌÙwâ° ­qݺ$oVX!ŽáÐ IØÉ!×Êñ Ù¯À‡qgà˰Ãùª-ƈ†‰˜á«ÒÇt‘Ù½5€‘¼žÑ[=ÕcÒeÃîjáE¤Óµž§ì&Ð ˜9B [Äæ:n÷‡UOǨ…è+!$“šæµÄþП:B½(ìuˆ· ›°©Sz`Ý­ZJÉôM¾Âx¨–*à@š’¬Ze|ü¸‡$WHô}º n*™‘œñý¯äe¹‘]ó`. ÚŸE«B-\ÿ<;€%y'ë ¥h£c-öÙ~ @»Ô³aDY¿;yÉ/¥^ç’ò±y’f³¸+–©ø³ž·ÐÊSWc"?ôxÊœÍdA6ŸÖºÛ‰Èt5•ÔpÕ©yºèY‰z°T+ÃT$Ù‹©/ðCkå—sx–£ @=ÖmÅAeóJ$äjÐsäYOžè‹¿ŒÇR¶é¹GBCà¾ÉãÊ岋jì˜bk½â^ä|šÚvà;¶<‘sšÙ“ŸV’vï•—<‘ªƒUÏÕ—¹ð:«ã)PS3—Ľ "…)JÒ£§˜´°ÂÐÉ‹Ú+a­ñRùDœ²í É¯ß˜óÍìÒ, ãWB̰D+­?UXõ°j¹Í(“«÷=£Q©“1©“Ø p,2È”¥™Î8Ö¬Ð$݉ç_iT?Ë´AäC2h)+)ÑS§îT2„ú®ÔŠ_ñq­ÊxÐ/â¾Ü­^pý£]Žvk÷⪟½òëT¤×¨úÁÕ¯Ð]X1÷ó^&ÙÑn »ù9ý3w•.ÈÕ¡"?ÖXèjŠm£0hþ‚@e”õ •‘qÈÌO|þ ‰Öã {5W@ >¿¢i=6ª»®é©—-+í—u² Í@®‡±ã5XÖ+롯Π+ ¬¢¹Ž8]þÂþî™BM—»5؇²p `ǵ§‡ó"ó—Ê©Ë'ÉM›oæÅ„ºç™1K'¹^­ŠyªH5t¢ ì_é”ßÀÝꀮ¾ÈÆøèO)Ÿ\SºªO®\ô¥óë6\Õä…„OmîÚ7v‡–­ŠO_^:¿½Xû9·öûʦÛ{­ÜzÌØë®6ê_ÂAãæÈâñR/¿îÇá 3ü¶%·Qúå¨=Åõ êTU ¸øµ¬•‹4ÿ^&b>ñYÌCäLÎWkÈÓ3jþ¸¸Î“úL“?|sØõúð–'DåòîÖÅíïçpfõ¿–J¸ W¬k±~¸2ìÈ-¸ãr>¸{LaaÌ<ÄõR!„œµŠE8—° ¾Ø´¦ö­ à.Ôù—·ùͽÝO=µïû¹¹/¿r7£oà'êìŸË¿zÅv¬ïÞ0œO~.7ŠÁñS6§¡Ùy õJ`¯¹ub¿®!h<ŸaXà¸C §¿w‘›:ø]¸þñÓ„¿‹.ìµ3 pæ†+†’=·FÙ•{’$Æ ‡SÊ€Wäãг7<ú9©‰ú<å;šÀªÿ$e@˜sÞﶨÒë}×ôøÓÕ¨ä«áüq¾5¬aªçt*£ÕèKH»w;šqù"ó£’33¤• ì» BÙ¯U—¹©r¯ƒ…s*¿© ÎR¨‹l](¢u­˜±01a-}Àm7:ÑOÖÚ°J§ª«hŠùYRÙl ½!¥UTÀåa40ãÔu3 ›ñ=W Æù6À󳛚0"p¸¦ÆÿD>á«G .4ØèŒ;9À4#{V~¶«·X`„Ð臵õî¥Ëz{ ÜþÑø¯û U¸„_æA}áYÙ*÷aN?µ‚ábf‘º5±m*½1Ê©]º†¼3Eè 6®5°²ÀÛOþNòõìû׃Ÿ).iw J6çDª¸’çeÇdžɈÉoÌÜBnc÷û¹6 K”P&eÔº?eN{q̦J¥•à†vjk.w³ÈðÔµ7q¹±€¡Ÿ‰òøUF´ò[Ä(°Œ;./ñ›J½¶ßßS¾ß?‰,ÂØ£´›·v¾šÞ³Üˆ^5Æq¸u¾Ú ¯ßö üAé]P%¡~Izººðœáÿ{,·+8kkî²]+ºa†›ï\ñ!£ë‚wžîûÛ«å5bý†Wýˆ;·UKî«™¬ãoÜùI ÆõÎ)1GïÁÌl/=:¢-ÙÉ B¸ìnK£Ü} Ú/•Š\¹‰KhÄeê™å’Pè—„<»?ëZ®…+vÅ?o!}ðn ŸPØg@ê¨8ŠpXœ–kdBdJ’_šÅ ímî1f®oç‚®dâ·c×YÏã~züjE)ŒØ¿A¬ÿ²Ï ½´6Þµøó-jŠ“êyФB÷ˆr¿l¹¢aQœ¶iòXØÁ¦èVàêù0gË&Ó VâḾ–Æ|+ž;B‰¤mäòèʧ(hä?ñ)¢Œ‚Ýf1|;0ˆhÈú åúp ®0„_TÐ õ'‚@Þµ;2ýÑg]Ÿ¨æ±€8!¢xïHRahd„±ßü$ê~ ?êÿY?‹Þ¤ò2@=}rg#aΘϘµ{dçt °»X±³3Ù²3ÿf·t +Qb_‰ý ù‡÷>bü÷§OÁÚ¿3*}šµ»MŠäZÒÇ{Ì*‰¿YçG®ŒÄ»©ðxpmÒÎÚ…˜8ÑÔTF9\žoý¥è’P&CYUÆÔµu7¥GRø¯³V2 &gPú d<&ÕÆø¾øp¦Q>]þ„7ÚÐ^â°6Ýgüe8{­MÝ.óMj" 3ä:]­Ñ|]{ ÙñuÿT‚óœ4•ðBÝu š"Òž‡kà I6gE›U=ùLõaŸL#!5E5âwg‰Áái¨¿W}†.S†‰™¤|¦Wê:¦˜j+ÎV[Êg›}“Kü)Þ,#úëo<[Q7ñc—¹=B*×¥5æ‹ip²!ùÀªÔñ<€·óÑ-ëè:™ OÄ›t’¦óðžñ[±Ÿ:É´Né¼CßòÚ;г?çµÖÛ{Hx²)Ût,ÐVе?[­Hf>ÁH÷C€K-ä7ØS­®ì7scuÎZćłŒ®KZ³PˆâñÀhT#är„{·A ÓÛžöö˜ÚÁ5êNÍÖ_3m¿°_0Å=‡…4Ÿ¶ç™ÚŠj’ÒdÒZ7T ú£yÞ¢Ÿ(ó]i"ÒS¶Ÿ§ëCZBþüöMž=HÖUŒ×~½Þ— ¼WÕ¶˜¿uݹ£‚èbÞëãO#XøØÔÂZa#ð)kù¢¸µU¬dÓ’RZ,¯±¾û+½KŽjª’g-€3ÍRdxm  xÅöÁ u¹åΊJ\T¸°¨ÔÞŽÖJˆq'#tݬâ˜"Ó§‰§Ùj¨Š†´9 š¨ˆÃá­r™vój¼èµÐ" ^8ØÑ›:µ¬iÞh]ÆÙÖ›o6‘ /[!I3À;|Àû5îÉBV5\„³§DǬº|{ëCSºJ*lÃ,ÉÙ Ÿ²%›&¿%Áôþ½ô{ õìð¶¯û+nÙ[ðfG ãò°Æ +ŠÇYäxTâÌúûy'?á‡ÊßÏ;O´¾º +×óήŠs¦¦ã ªZåT‡Ò—xBJY‚D þþ$èÓƒø~@@ù0<¤Ñ‡lÜ1-pa˜p0¢‘ˆ}ò¡ŸÂyš{IsI1è—ÓwÔc†LÙñxŽãg™gv³¥ÍÀ}oÊd~ˆÍ\¾°é—Â+@8ÇøÁpûYy×ú2òoÖKT"Îò Óà#ÿp)xÀ09W)—9×!w$Jså3>R`WŒ%ºœ¿ø·T¬‚V®›Øm4&>Ë÷fÄ¡pVÀ¬Ø<¾VèÌ—"¤Ü|±±¨¢:þfØ"À-bÿœË R ä!D.V´µ ¹¿“‚F®F”]ÔAI;Ì$B’‚I.­˜Vt3£è‘ï Rš‚M.¯Xáj@\h\à ^ž‚w.˜8‰ZñìŸ9uoò.<¼¥?\ÈÛ??JÍåû–¡º…†^ ì­`ä Þ¯fp<³—ú°¥â*Fh=9íÓåK-Q/ˆß‹·ÊòKGø J2ÆÓ|¶ô³ã5Î,ùZýRÎþVEû3ì—;õH…ï¤ÂIR¼ìöHîµ¹ßÇw óvx‰íÇ×\ïÿL¨“ü0ïaHCÜ’Kºg¯Ú‡7Ùð·Ò #î3Ò,áSŠ•ûº*YÖ Ê$9õ­Û¦kÉa(²Dd”çð~äpJCÚ8.|oA=3½*›_…¹I®ò.š’¬å»cŠËuÛ0;pÅÚôd ·Ç\eõFâÏå‰PpØM5ñ<ÜÆ¤ãô0ØO—Œè‰±_†JM“t=ßÎ\+ûu2™œ­ÇÃ……B°Ã!pÚOjõµF´°ž=žKpV%½L_×_é¸~!ykKiÛkÓæu<,†&[t·ÐuÏÒˆ@ÿ\~œˆ»ÚÛ+ט²t?‡¡º®ïH¾î‹õ…:>kìËq̯à‡–|9Uœ’µÞ–˜ˆîÜ­¬ÆG‰ûY=Ûœ¦Þ †õR;(4XŸåžûú: ö\OWZð¬[Zö÷—êß®æÐ–â¡NWù xfÎÆ`’NËͽ]´qÒ+©÷;âë*®l8÷ØfQnnsÁXŠù+i<‹ ÏbÀÇSV™¯“£·³SN`ÿdécþùp2Ò™ù²ÍV“Ìt@&÷ªÁeY 3)oìrŠR#¼²ÚNƒÑ •Úã«EúÜ›Å3’Îj‘Üæ©Ë›Eî¹·´Ÿ5¢^\n·Z¤Õ‘Á¹¦ýÜ íQwcŸ4“µ˜¦‹)piívÇ«óÒ3ôÕÛõ5\Û`oP;3UÞf!Áxy6£feÕa2Í&Òc¦ì¸¦ƒ|˜ªŒÅëØ’q)­²%5åê0±ØçX¯ss_Fònu^Ïg¹ã‹y0(Úïp{?÷­g¦Ñ¹}:¯Hm½|C¢qóq•Ý´îñqí¦bº'–[1ï î§â.Ù½®ì=CÄs+WpW,ê¼]ޤT”»Ø,†Ô”?oêÀ½e–ÝlC)Êǵ_ï¥DBÞ·5-†òu'Û ʹS5œl&¶L x+ÞL׆°ÐØÎm†YˆÎÝj£ Þ<,¯œKÜh&*ùæ‹ß~-/ÍÀä&:ëhzø{_Ye2ªøâñÚ·¬×«ïaÃ;<Ë›p$ø°8y¤õ;µ__kÔùÜBXÛýÊN=ð–8n#Ÿ"Ηóå7®®îyÑêÖ¼¾%Vèj´TŸ–D¾æõÙìϧ/Ý.ÓÁȤs5œn4õ"­B²× X™ð²U\Ü%×àºîMåß>­å}Y†¼ô¢kõÊsb¤öäÆA$>nåìpÌ,Og2¶¹›h3Þ—¬¹ã˜;=b0[‡²(¸M›¶·xZ‡–)V@´ÜÝ»®ÍÚ°eî°oj'­ ¬\l™Ü9¯¥³t»wux?ýÎQà{s8|†¹«MŸ×½Z?sòÐí“$ûv~€€ÞôÚ|Ýî×±ÖtW¿ÆCç|¼mîÛæóºu äm4šžH XW41_kÑ1u¶îÑ[ÿx9³žhÉóã:>±ºWgœ{ý!6ñÈÓy£¡nú˶Ҥç¾]­õØ43 òˆõEÿiR­¦Fæþé,»ÖåâWþH‡gÞ)’è·³'ó¤Tž×Ôþ¥s UÎêãŠkÙŠ¯O‘¯+¯FU§ogMöKWÒ¥œ÷)â<{™n—«í{e¼öm7¼8˜½ãº&šJÎ <ô–#/t7ÏÈZpJ|y… VWE¤¨1•ÕN˜]ž>–7FÄ "K Vž>šN(ÒQ»¾Ži¼4£ÜÂ?4‹ßïÐ ÝÓ‘Õù¨-jù¹âüC;ì9x;*Þçv\Eya ;øNwÔ‡'hD›‚Îùmhßù-µ: «uzBórßâý´‹¹ ïÈ•7ðK¾].Y–„¦ j«ƒr 5[¤“éîjÜΫ¢w™O¬õ„¢,~šÛî9*üä¦W¡91:H–ñ|yí±£3n,e"ƒÚ¼é ÖÓw‹¨Ü…ÉL•ù²‘¯ýÂM ˜À⹂=ðrˆ#­}›óx>¥6‘öZw~=åÕÑžiks8à~—¸qÖ€Ò t@°åÓ‚ieõÀjìÀýxæ½Ó±Évï®/☫¸™“çîJÒªn G}N±¼)ed%á»´„1X…Ék:ž%Þùš~¡]pn£;‚›·¾n5[t5ö1ÎÓû “³ Õß·¯||Ÿµ¡Æ5Ñp'JÉvïî…”øVÍ-؈É"î Û,ÝÖ!lEæÓ÷rÊÞMahíÞ aè\Î÷R:ý/YÔÞL(°_‘¢fŽõ‚^p›Q›Šåëñå ñ>? Äâ=_æã%?{%wöt««ðvŸåÛñvcƒ_È×eA]‘è/Gûi6_1’Ù|Ð?’Óù,| "ò¹J2û y„ïÃþñ8Yÿh8ÜgxÉUŸà¿øÌˆÆO æAïãÿqŸz¬Ûõ+~‡C=|ª‡dªà ïЄúðþAèI\þuû1È· ý_·ß{ñ ! ÃÿÝÒ'è |PªR{ç6&|2‚p¹J¥ËÕ=.1±çd±Fo³û÷Åf ^÷R…ÞùZ›íÃ…ÞÃÕÝæÃåöû÷4t.Ö˜¸hÿÚO¤ícÏB]äÃo? y¨>y ë÷®åSGaû€«‘wÉ®93rd£ƒèšò­ÏÕ Ïô2^¦ŠóÁ¡¢GQHôQ‡äÒìWÿމ¬„¼6ߨ=+":üÍ¡¨Xl ú"9Æ#[]äá;|üªãe0%nµ´2/õáa«Ëža§D}1./ƒµ‡²< |IPd Ñ/p;ŠÜ´JWÃo|0d`¥ €M¬`YØô‰¢Š:™b§…F°¿î%D4ðŠÃà¾uêŸ!è–7,›p…öÆßOY13[Ÿ†¿'k¿ýc}Y„†´[éB–æ%LÂûeϳP&­•µÐî°ÖÃ|Yâ¡´”ƒ—ðrˆUeWLN«–ò5A¡|¥‹šwÚž IVÜàFUÉ#[#Ÿ¸8ÁÒõg¸ që`Ÿàª‰L!GÕèp­ÖŸ^ ñ|åùîÃÌç#”æ9e¾?½ÈF³•5®›Ñ8MiQh‹}²Ä‰ °ú ¥  ax¦ "ee-Ùy)µøû°Méùù*l¿+Í5§¨|¼MÍøƒÎ6BåEÀr,w¡Ì /ÅÈFÝ3ë,CeþQø,l˜†47*ò»%~À,ºõBf²á°Ò>Dòv|ÄÌæX0¡s?uy££þFqËæÀæÆ·á†ƒü›h:„Ï~¨}((€bDöÅ×Q+•1Ø ‹–Ôèÿui®Õž ¦ŠrA­Žð–LnDÍJõ uèA Ímü[½Xg¦r V®-[än¶­µ¶ª‹8eÌ[yß3!EÍãÏÍc?‰Êâ^±hPKaGu‡$‘VÀyê åìq…e|• R”žný”aR7‚|¦ÈgŒáY]æniÔÍSx5>ÑQþEFUåÞ Ö‹Úi>GWc‰,ܹTóQóhÌÇ*~óPÏ WlÓÛÿƒ÷kªÛÖ…•Þ«téÒ{P‘Þ¤÷¢ %‘Ž‚" D@¤‰Ti¡Ho‘.- 5HI€@„ðÜç;ûûöþO»÷¿÷žç¿Fp­5ÇœkÎw¼ãcN°/x½î*¦~=¤jŸó¤sc¿˜¶ªÃ²²üΧÿò5«_s´ c ’?âîLßÓqã¾@XXr_Æì ÔW~à»sR,<æÇ´Ä[\3Nëy$¦ìOýÔUT„^YoÇ^`„]Äõ” o2çÖYL}GBŸ®BÑÚ$ÒýÞEösP¨ÄË‘kŠŽåÌï~X4Ô¿ýÔ.C¸;†Ý-dÔŽ  ÉÿffI¨u²¨õþDöYR9Vª—ÌRè$ ÎÄ+|;×ý^àQíWòW,6©È(ëa!hœÿ‘"îG ë‰\D½?AÜó‰ØB1ålž¢M ³"hß‘!mœ“ ¹¡ÐI×/R_¤Ð/Ú–'‹„-T!A÷ìÖ ~°‘*Ç*kG4‡2u¿¬je믣mÅ|š£vG.öùv)>ÀI¼82¸lnPWh'g"Y¦î‰yh´¸DÆÄr¦y2>q!7Gæv"!ûAÿ¢xw¦\®YÓ>¦¦ü¡Î¸J@UxBJC+rÚÔ€ßàe^\øÈœÆ¯³Åƒ¥öâñp× ›ÔÚż n’„ôŧhò;á’6lA‘rÉË.%TÀU÷O‹ 7tßu¿JÀÞaPÔy„Џ}Jê ²ÛJ ‚ÑŸ/Å…MßÄ\:2~⿎tÕЧݽ¶v 9ÚÈ4?¸~ëƒÚûKKF/*4E Œ9Dþiáí<±ëN^«þˆOÒ ¶íj1vB:$¸lô*؆;H0ßݺœ­ýž-–¶Ö0”öjÂGù.ùêEU²UÛ& 2jrojv²QÓ­a>o¶jzæ¯fnUd·¡S±C7ã=ÁÄÙ'Øwz-§ÜJî¤-«áööÒ3ù…­i“”P>y>EþW;%Ø+ К–lÕc¤÷³Äeã/š½Dݾ£W¥="âƹÉ4=úhpq ìLçn5*‡o9®ã\®0sÇGVçN[¬,%P~\ª™?0–]cgc¨T©n‘תâÓ‚>»Üüõ¢µÿ,íJim°W€%Ê ðݾŽã>‰÷.½VÕ ½ç rñ%91Ê/ùÀ\¥^^ŸˆØGróö`0ÿÃæŽ0h£Á3°¯KÔÌ_B,6Ü6#ÙÂýF$ÈžWG>—5O¬Ž¼˜‡PÒ¦]¨õñG»Ó7R¼BüzÁ¬XæŸéLŸÃŒÁ•[o™nu^õ{‡x-ÙS^IyÍ}—%±žê[ýö"Û—¨ƒ®€WáŒû¢Ó> ÕŒ’XQöù‚V› â‘y¥Ê‡-7n{h[·?«µWÕšF,æÚºê¿€˜%¹|órËÅwe½ÖB†g¬ú®-½SÒmžNJš86¼QÃNÓ~M¦¾*ëãs¥ðÆ­p¾„ääüö‹-œ¶‚ì¨>°F7ÇÿòJûµÿp³ËÚÝ%QE‘¶í1¯¸ïIþAY®¤m/¦î‹ÌóÖDðlå¸J¾Ùþá_6E½ä¢¥£2["Ö¶z‘•ŸóýBMâÕÛ·) Œ&lüS6 [aƒRÄËŒ’;w¤çX¢â,¾ºw®lÏ -zÜϵrn øò©Z-ÕO¥÷êH´åú‘p¯6ôÇÚö=jûÁkz¥VKùÆ– ÆqÍ”‘éä*ýSY™Â~Cr3SY¥¼øohµ†]ó¥.,]ãÖ!Ûû,üÜøfGŸÀøùëûã£Ï£hÒ„ˆÓ2(D¤.YŠãÿÞZ»œ+{sÛ³–sùùð•.ù•¦Û“Þ´Ì_ x§#‡xåXòeæ<Þväð®FÆv#f ïÑÕ¯ŸKfׇWì³"é Ǻä³Ezó5ß•ÜÖÏÑÏ\c-6¼«hVîF™ï÷‹ªØpƸ%îJ¡añLÍüû¯EÕ‹¾Ç„^Ü›iþ_!ÞjRFö×,euÕµ¿ÙÑï0ò‘SºÔàòÀý%¡OlILÒ›O¦æÇÔÍ$ä{—]Ca–òÙä= Å7ȩä?:¨Nä‹iSû?¦ÑáHW¯f:æ<2¯¾]#8G ¬ý¤°¼8ªHT~ÿ?Ríb|tj rªçàk¶n)†îäOáµúÊ1k_N¿Iò¿º^òµBàq^ù›/é‡ùòTªR5> ¥­¼ñ¿é§æŒ{3›¬LòŽåâN2Âù¢h‚*…ÀËyý]  òÍ䬗Ï*~;T;ÿû'sQÝ™±’îÙ{Læ]Nœ¢&=ïmxi”ÿ4ÉÕüÕ$›^ÐÄõÜ:wð‡¨ |–¿Rtߣ)È”%mR‡åšæ$±kËë7“:L‡Ž¼Ž) —>=Ú&;0!zøõ’v!YÙ ê(m>°Ð2Y‡çãjÖC×á­dš"ÉþËkã$*×!¯Èqö/g³—x1ÅFž~£=}ºzÍý°Ø„çœ{ÊšÚì/µóW·¶0Õ¤úå¬,fš‚ÑÊ#5‡E&Ån8ðËî]²T[œá EëPø>ûQÌ oi% Tð±8vã®&Ø•èõ—˜®ûúKÛøSÈBmÏ'Y;ßbF‚Ege¥¥#߯üÖñìô¤ÎÿÞzœŸ„eVòºˆO«…/Ëv×¼õ½Q¤öCºº_ÜŸú¹É/^¿{›©¤àeÝâ(c°qɘâN~5Ïq­Ÿ¼6Z?|Ü’Qh >–Ïli 8n7ûîeBBð¼üÑÒ vß”3õ_b½‹zcÀ$¯¬ÿ´×_ư–20~;æ­x[ÐyñÅÑš^FÒ¬ƒ_œ>q/ åçdÊ Ù½ÄI%Íås]ê,½]0y±Zïò­g{òy%4ðŠI¾º\u³êä÷O§ eó~ŠWíË5#ŽõåÄÜŠµ“¬e›"ªÔ½Å. jÙöëÆRi¥úáÔüÕ˜oãwî‘ÐêTë–+ë¦i…]žÛâžáN#W¾„ é`æ&¾4O$Z«žJ\†åû¿ÿALÉV/…æS„æ\o¬c¾ÓÅÁx»`Òvö»ÓCÓ›@"…º_oL KIx°iczÏó±D&Ô„×cÄ_aeÞ«#8ŒzSäÕ¼cx ˜Äÿ­©Þ–Ÿm^ùÓÂ7¦ã<kÝôÿNtl(ý¥þþ&þJn]XK‚B¢O½™\{ôRÒ[ï>YÅöãÞ"êùƒLDÍÖ\¾kÌ'C[wöCtxøS\ ºUWt.`Ô?' ¢‹Ù6q™Ôtí{ú:óþ©ÏãY??Ó"^û9wLK'“V‘>/ªŠDñ³ÐWBJ®!ªSÕ2)× Ð÷¢jj?½ᘠâñ<žŽòÓ1‹ª™O}+"\ðVDÿ-x[q³à­ÿ»Ú*&wxNBØ¢P”Ž—F‡Å)ÖûñŸÏøÃèþ#ú+UæÉJø¹<2m%xãã@¥ëL>˨g YÛœ¼¤ï·;:¿Ü…¢Æ901@=ï×þV¡/§&JKÉ› µ%Ñ_TÊÅCXœ›÷ÁÐo‰å¤”sÕÄÒ‡V$7zœ ޤcfdæí8h/WÑcµL»6_²½o™ÝTÙ±«^âV¯Žx|ÀòÈ Ôó}Ó®opÁõ±?v&SÿÚû¡ÒGÒ•_žÃ8óÀ_Ý€Ö ÀñmŸ2’šÞ Ù¯Ü^k—‰” ‘Y&qͭײX†v1µ½èŽ1b‹^Ί·ÀªöŸ¯o:79“ê-ì;‡˜c©ß}³Âª6µö~ÏtÃÍšÇDSæf÷i;Ë,Á¥í’Q%Óý.FîQ2 --ÚƒïºÚéXå<›Í'þ,Á²&5A)–¶)Ç“šKvòî)ǽ_—Ä"IXeŒ¨–­þÑgGý«RÝ…:’B¢ u%©œ<…|V>Ç>uõ7z»x3Ü,ÓEù–±fBí.1Œ–kü0¯Ý}ŠÚæa¿ÁÅ#wíÒþÅtkñ¶ïu¨=¢\ÿq£Ä—P¹½Ö;;L™Í^7>–×VÈpêUlM3sPyüˆ„£„\äg]S_ qôðQƒAƒ¯ÓÂ?q…é£ÔU}> ë,hÀúÝûÂèCWH!ä›2ѧ©‹µl÷!;‚ŸdK³7è?=cr;Ì›dRQ;¡yè†øÈXÿøÁÏ›ÜÅ.‹Ç{é7M EêX¦ÇsŸiñ3wË~`øÀó öÃÇís³wûM?¯Vñúô å~œ®tDzIúN á7—10?irÒ§‡ù–8Öüù§4[©¾.ªÎ]Vc5W×ÇJ1OC4·ŸY—p–yû—Š>]øÔ_TÑŸý„.la둸FüªËÒu²v®;Ç„Ùj íwfžšËXH,Z‰ž}NÏõð­×¢ÏœsÀ"˜Ä3;fÉ»³z1†‰„— BxlΈ$±Ð8ç\½íóÕŒÅï&O"8êû»­·±Ä³¿*dH~}¹¨ÏÆzåõGa’Vƒ^e!mÛœ¯W1 á!„ÙL‡YR#¾^ä'zY¥S¢ =޼4É+Æ­¿ì+¦œÂ¼D{‹·—…Hü²Óv¼Çv¼&Ñõâo¦Bá ê¸ö#S:­·oQËÄå½[rvö öôŸc÷Üü(xIÍju,Ȧ0×óf&=øîò`1AŒ{¬Ä|2‚çzø×F2ùzµ„©øà R¢-™[„úý¬&‹Ú‚¢?ý¾ÞòùøÖvå2«ú]æ­Dá{Û—eZ¨w혷¨°?Žsd %ÆtÂöÀ!R#g¥ìÚd¯ÉME®É¨žGI°ªeÈÛb½0Λ4ÒVw¸âûwI §*#­ëW?Ö±ƒenÞ …ÉI.!&–T|WŸì$^¿¥ÐÁoÓÈ—Ðík'­ü®'IÕ]=ŸÊLmÐÙPÎÕ©K#…•cã u`FŠ~{`Ú>ô…G¡¬Én­c/Ä|UkyÛ”…=O«†§ªþ¶ŽSüìjøY»ÌØÛÀïâ×$ƒ€Xš£Zž—(õÅ£ò¯÷®k|(Ôþdà®RDIþ$ažó]×°ñÚEt©~u0Ma‹•m,"Êv`:ȱΚÚb¿–ö—QfUW>¼¶‘ ùFaÈ«±í¢Úª#6ÈôË­Ž~‘d$Bãól¸Ü£ÄÙpµŒÌ_§Í˜ ÔiK¯ÛK×r<®Ù”!Û[„:TžcJÈ€+P酪,·ͯáoíÖéŸ6Óš’Õ¥¹È÷2 _ÞuY‘ùxU—næ]7¯íÆñ«Ð¨Ï\¼ bsD^2 ™ÂÐTÁ©9ý63‹Î9®í ‘ íÙ0“ŽÅ9Îm±PÏzóàö˜²M÷7×ÚHÒöò~ «âe®‹ ‘Zí0F¨Ò4ð²"W΃H¾öd?òQ »"gÎEçNÀŠ”9Ô#axÈB/*7_°& géÔ…"Ååš ¬É+ÃM:Ý¡µHù@¥«! !âÍ•‰•™†£dôÑ'âØ©îÅ —Ñn—K«µK—êOÝK|ULÙѯi(U”¿gû‚i[Ö¢7ÖDkz TzN–n~æU²¶éì:uT¹6}b¼¥t ˆ=eÈ(¸EÃ’ À¥XPŠŽ#õ·{Š>ÐBq,A˜MöØ+ºcm,Cʬxp)°î!•L~LÏV>ÏœE,€ùWÑN¿P¤ sbaÓà ”|š°€îw¯]WÁWpû0œœ<£H­Ì©L¨Ì¨L©Ì¡LªÌ¢L«ÌÝz¡•®•¬•µ•h8B4J4B4¦òEede¸L»IçTÛTÇTûT§L›L‡L»Lg&Ìj›…Π °&h, ;†ÃH¡¤°h L ªëöÀø |0a¤!r )¬Fú"÷|¥ÁÙ€‹ú ˆ D¢ðް‰°‰©ïT€Ê@e`—š”)€@ àÆ]ÀÑáÈp¬8"Ü%îò1":û%Z ™†´ÆbÜ1ÜXa,'V KˆåÅ26sãØpÄ8&5ŽGˆcÄQ*_8¥>%<¥<%厤m_¿fƒÓß5g!`‰Škï‚1øè4\²d!L‹h_Qøh60X²U˜D•¶OÀØ}ô˜-9*¹ ¹)§¢6Ú÷a$> ôs¬^2Q™í=íC0fݦ9v/B>¨PƒðmÀ …Žlè°Kƒàµ2×6 úEpG tÁ‡»AtŽv›–öiG´IxS‘Š‹&á…VGô’É(¤HÃEkð‚¯#Ú‡¼( HC3ò¢vM‘1‡x$z­Íö܇F‘Ûú‚h$K{ì:òa [óeë‹•‘&í¥0)¤y g3—2½2¹2ÛÂ…\‚\еØt &•€UC«a¾P_ØtF ¥„ÅAã`ºPEÌCŒ8æ)†s#È"B"¢BÂÂ"ÑÌÖJÜÊÔJÝÊÙJØÊØJÙÊÑJÚÊÒJÛÊ ¸ XD€K*Àe€a@…X…Z…P…R…T…v­“I‰ŒCc®c1L£@,;V¾™sá"è"ˆ¼š´@Î"MÈ`ä1’ƒÔBö ùÅHgäR$PKÜLŠcX ©„ˆP(|Œ†£;U:Am P;¨Øì¶“BA0 ;…F y¦u°Ùƒ :Ëÿ»ÚÿXmY+”mã7Kt\›&ÌÎçIßÂÑóKú "“èÒ6#˜›Ï³KÆ â©è¶ž¶žŽg° ŸÐ†‹st^D2Ñ™mz0'äßâ9/âúèÙ6rYJ/ÊúˆÙNN辉9âmŠ€ˆ„˜¦N%hŽhƒÌé6%:⸓†¼xK‘ˆ‹‚6"¦“šˆ¼(B HÂE™ÑÓÉ}‰¼(®HœCaQÜ)õ%‰tn¯†É!-¹²GbXÚ(ašH»@òæKÖ$¢1&m‚0#¤[ u3³5ieŒA¤A¸A´L[q[qÇ7äŒ$ÆC…¹‡Âx`.c,1Š˜ Fsc‡a¥m½ÔJÕz¹• •¡•bȆچІ҆ԆrB!‚PyG{‡yGyGxÇ ^ "áˆhD" ˆá~ÁÉÎÍÆÅÁ“û"7²¾Í Ý s¤m¤c¤}¤óÐç"–{µ™ @`˜H@$ 6ï6ïþ@>,3VKƒÁra•±±l B–4"´&/;R ý>L –Ô4S/Ü;j¡3>œVŒiƒˆ%m­Ì ŽŽ×ÐnÆþ9*e/šúåÐIÙ‹Îíž0ŸàÂ9úm¢€è¦6+˜rÇ' tŽq›}Ü ø/(ÒqÑFÇ´iÀl‘>DŠ \Ä Ñ/zÚìaOŠô9DÑÅm†0W¤_ I5,)(­HšC9á =Dò4“YS‰†¥u @W×›)¬©+æ:6 ûÈ—Hd’s óH–e,—$—&÷b.y.q.u.a.e.i.­Í2"*‚µö´Ž´ö´N“6““öLh)ÌêÛ€nÀ8 °Lh&l)Œ,Gz"·œÈl¤r©„lA†"O„Ȥ²É‹,@Ú#—ŒÈd$3†ãŠaØaä0Ïe¹E^ؼ°‰¬ïmí¬l«ì˜…NA§`[H 5FO– ‡DC QHŒÊ •H•p•h•0•(••˜€ö&˜(ô¿¸¥7›Ôÿ_&ÿÿI܎ΖYg §ìÔ„~ðkµ$!O ×ít„~õ‘kP´¼XAf.Øiýì#Õ oIXA>îÞù jµ‡5ú(5(Ï]ð"“ çèÔƒùH`däæ¼ÈëÃ-:=¡DYÄõQ³í[0­Æ9¶m‚€¨¦öžÎy—AËÇ6!:ê¸ýv©H§ÈÊE@ÓÞ £Gj^RdW¾ÈE˜ÕÓ¾#GÞdPdË!0ˆ*nƒ±ùHgE:wTC"/Š(Ò‡­uRB£WÅš‰¬)D#Ò:¡)H@©fkÊʈ©N¾¾v¾N¨!ÔfÈÂ"Br#„9D:„&D$„+D9äbO}ˆXy© … ‰ ÍErbïðÊèʰʨʈÊïÞ‘ÞáÞÑ2õmõõíõmíè6tºÝIÛFÛAÛNۙЖБОÐiÐfÐa-†ܡΰ5è,¤áÂÿ (½@·ÙtÃ*¡•0oh(²€D#i‘ H$ãŒaÁ˜`d0ZŒFs+ƒ¥ÅŠb¹C蔉f¿ìÏ©ûØ6Y^!a‰Ñm»{èãÚ@eÉ,Bš#ØÆ»ëãØ@aÉTAbãÞ&3÷ñl  ¡ ²d© Šáh£†Ýñ±o Ÿ»äEÂM*cÑ& 3öqo ÎzQ ­óQhPš»¸M®Ði­ð‘Á6(Ìn“£Ãƒ;C¡­>* *Š_ns¤ý™:ž0D@¦lN߬XsUuæ’ÀCží•d—úf›±dà¨h+ÆgÓ¼ç_éymyÝ!ã‰|ýtÊ*`èz$º¶!|%`ütœ'’ÎŽ{5@ŒçãóØÃÐ÷@}2žkºŸƒ+ë–ÞÖŒ LÍœ‡Uñ—r¡­={xúÚÁ~SZÅmúdˆ½rŽLx¾e¢ËÀl ¹ªb½hrÀXâKÎóQÜx÷xn§R}k !ÇçÂSú¨^,Üw-B…2¨k;Þ[Fã>Š8Êh÷3hï´xv¶()9œˆv-ûž`ñ\ùª[¸”,fuÅÇ7@õQØ]¤¦G`)B‰nOÝ!Üç½Ð¯æÓ7– '¸æíO©ß$@9~€'€„ËÕÑtê¯pØ7Ç€âÐk _µÖh–æÞq)ൊ'š+hH"ÄbLe›f¥S¥¿sHªLG§NÎ…(”äY| ­™Ü¨„3®¢1-» gŽåëÒ¹à%›\–Sq©õ_äÛ¶WAõέogK¹ôvöwƒWs¸J]ìsŸ†UL'¸î)í¶*íDüÀ*Ë$/òîÿ(<þłɎÎO4dÍ€‘P„qýRVA}/¥?ÌîRàùN½|zŒh¹dó02‡Ý»²ª%FÞg(sK­.øõ;Ú;ƶÖC›\ó2'¹õvèssE÷ Þù½žžüðÜ­L+ƒ<ßů ™àa(]ˆ±ìò*w[ACð½¸|[àœáV¾‹3ëPÁÃd´ë6ó–áDœšÎÏÝš;²¬ðô(¦Ò{ز:q߯cU$Xð¸dï¶ëÇ~ÄeKu²’—åXýw†Ò ±~eFumÞ©ié=‰[ Fu26ê’í–™7Ýê²gÿåù.9ˆ8CäÝ^ÆU%Î÷Rµ+rö­©ýc€7ÐÖ2¸^ø}£çg Þ©Hy+¯z©m¨›cºÐ%øáëÁXtoÖWºç® 5O·H´½L÷C(Í•Š©ýïÊqiŽ.Ý%(QÍÞùE¼à¾•Cj­x()¢d~]' ²Çª"ŒD 7éþþȦûàrÖ NlðÀ-Öò§¢Ý`± -¹³í£Wš ™LVÃ~ Ÿ%‰&ï]‘ê>U6$¬›*j4:ò]_eʬó›áx Ù«ê¹çÈqïg_NôX’¨ÎnBÜãØþ¥.¬²¢Ý/tÓ•£œ[ ?!®ÕÆe­æ›R¢è*ÀÈ}IX_ü×ÏOFÒ®…QÊ>Õg«ÄJwn—3^Ý@ôî)lÄ\»üÄ7ðÕ5 à`ºé+ ØSÁÌ·¯ ¶F¾ÜÛEžÐ¥\Üá»éöä!ˆ‘1ëÉHUœiòo¦öïëõ[M">ÒähÍùn^eæSd>΢©*-4?Y8Ž'ÚH¢áÝ–ó§cäŠ ÕZ›žx˜ ¹•´¯ õ×nø-@õ×¢M@ÕŽ©Âu‚õ;‡JTIÏ$òGìçýíÑõ" R‹Ud£þk×Qû ?"þjÙöD}þ]©GÄîI‡}ÕH òr“ùâšÕ”,ÿ/Ö{¤”›@,²Ð¡”;sŠW=Ã… w“©ˆG†)ÑÓ®DbcY²+VO¥üéÉeçÞ˵²j“êÚèMËÔ××Û[8 =mÂÈVÝ,6‰Î½úý5¸‹»Ÿ<±>öÎÃ_nè¦7Oõèù\í×ûà%*ÖåéÚµqê„Þúoº…˜“ˆ-h¥qïg1ƒ©Óæ°M :bžªc…?<¿m½ Û Y9Tj*ÀŠøz‚N¸Ì"h›•¹®”… äÝÏŸääÚg-êî³Åa¡¥b*HÖž·Íø$§ÄGbÃ\ê͇%qLš³=ÙùZЇØóvã}üãwïÉ*ž¡ö`Ã(u—jñ ì;_©®8õ%Çž…_áç˜Oª¢Á¨@ËÞ1òÖ#ДڈTA1Å–í)~~¿‡0[YÊÝùN+°>û¥DÂzQ7í£rD+>'çæ÷=È‹à7Vß!†ÿi 2O"nÓþ×aðn áñóëäfû·Ú\/lˆ(&4¬Mk2³–‘ È1娛èÊtÅÔÃŽ’ÿÁÞ›²N7üi´šcð†„ô…~Û¡Ü0’AüÃõ¸ü#+,ÁÎÇ«VÐchª&ä Ý7oŒ‹ØˆÔ—ÜÅí­VQº€zuÀ÷.F;ùî«» è×T9ØH>d©X ªõs‚ØÒ·ywÍ™57v/öPJó¹Dó×ÕV˜ç«ð-Çe Md½ÐLÅb!«ïgÕ’ÒyB±±ã¶Œª+“wõE GK)߸¥×—ã)7öƒ0óáŽx*õÛñ ©= “}=Â] ÿF@ÊBk‡2á]=`=äõ}ר”·©Õiö*=ï®÷ò~OÜ¡’Üä:R*p(”p6²˜;…OìÛóN½V“ïû«¦ g²f3Æj€Ðwƒû)~²<ϺKÑ –:[>gËéÏN–{ƒÈÖ°GÕÞ8N«~&{§cUƒ²¶£­…‹1m‘Z–%0¡*‚^Å:TOžÏ¾çþ‰u ÅÔ½“7{ï+åœwfüÊu4hªERBwɬÂIת†xdÿ&Î3ô>Ȩ9œx¡‰_]ÀbC¢?˜Bu-ì¯}˜L¬=ÂûÈ`FtvºXÇ‘L¤/J=$<ç1 çßp“5ŽøNô×…ïÒ9Ñ¿÷31*ý×QûÀúï‘<98s_¡äÕùC½ïÚƒÀv¹†09ÿZ?ClÛ§Àvñ¿î ÿtœûMb¢0oÁ^îjÇ—©qÅaöI"‡ø8W{gÏÍØH­SòªéµGß{D8úná &Ù^V‹Ö’ ðªM„°>>]â­HáfÛ³ˆãTIš%ÓûúKà _¬AõaSimHãä=ñPº€Ut``ð&Là_¢‡fÔÓøÃÐiÓJ¯;Òv3Ï9l!hV:ðaú—7ûà!7éÎtêŽ-?R²‘EW&˜1.Ôwˆ„9r„¿ÿHé dÙõ/¯|ÓèÍ~q ø9>ùðL4¼Z¥zöæç_º]îÉ?æ–ÄeÅsjìs¾‡èA%–ñ”W…1ó;»ï°¹¸‘å ý`Ð0Ð6ÿ\,f+=¿ÿ7añOô?¸Z+û xœœñYÝSö¶£ìø ¿£'1ɆÚßbð¨ÞÌó +ÔÿÓ±üƒ…)4JÍéø½p\+æÊ©6m9F ÷PèÈ›)Cd·9DyN\»i¡ñ±¡ÃÞEŸGJ>ÉYÎî¿=Z§Àx°;TÆß?K³Ê^¼¢C'Ú…=ɇkñ?« ¾ò4HÔë–Èwó¾>bK`³¹H²NOxP̶‹^Ê„*[eRè|ƒã±‰rW+ýUˆ~½ùð!ðýüË«NáìxÚç]E/ŸÃÈgqãfã¥8ýgÉÑ/öƒ£UçyZ—°\ÔEŸF¸D òKcî™~çxj‰iPvÒ „„5]⌹Ƴz0=΃<*0ò„¦èêKjž¿ˆ-Ÿ7‹Ó²û›wã ½…†©‚í ‹u°ÆõÕë­E4ñ|FžÐðÏ—%¶R(_ÖG\ø‘Àl?* ÷šÈ *§Q"v³‹;{{lûy¦4 Íb¡^x³ÎÍ»³TMõúO¬ÝX¬5ºþ ˜žË N'úŸÏwüÂUƒç¼‹ Ï_Rñ‘h=Õ¿óâ¿§6ήû'"€‹jÐYŠï¢RdÞf(Ã'ØûƒWø7ö{? e}Bâê$o;lz  @¼›&±t̉/7|Ö»ïÛüÊ«ø#Mô/´O+eqW˜ }·ñv{åŒN,4ÍTƒôéìX:‰Ú26J±ä74ÝÉ8wåä "F*ˆë‘m À›dñÅ0¢h¥²Cš0' ½—›©ø¾·ÆW­¶œzÄϼD>ÎIèücéªMÒ£¦*Pñ:^Ú "úª¬A,V×ÂðI‡Å/YMªf—tÈìè–Ø^Þ©V¢½[f:›î“‚¸F¥3ó£GIT›_>ßüüÀ¹9ètö<åÀÇÈ.›°6QÝŸ¡K s ݸq š9YðI2èÒ1pc/–ï¹K ‡ˆ£½·b˜y°h‹P«ç=*Éß“*QÄMjY¦ 3}fûiê^IÄÞ/ê+o±Âó(Ë›7üMˆrMÜdØ•¿ãþ~§ó¯óÖ;ˆ’Í>Vr5ÑO\[mÙôGÚ±*íp']:.ã{K™m—sÆÃÎaºx¾ä âº¿¡AÿW€Á_SžHÅÅ3®”…UýíÑ2ÈK®ßúëO²éé_›weÃÛ÷bÏÝ ²çoaðf%ä76-êRfÃÆ.L"ˆ~ãJè–)­ùß¾×+ZïN4¤Ïårï¬øõ½Bb†)$ Ǽ®pIT?iÍÕÑœ!¶©Lçþ‡pií×y­Oì/@E.ìtÖl{—`¡„M´sïýø¥©;ñð öݳã$ëQ6…HÄ+²#«ADâÃô{“g$ \Á ¯þeèê.oÔ¾V‘°ÿŽOøÃ~'¯åž>¶IDæz¢;gíiMþðÌ»)öÍǯI΂áC+mØRÃÑ3.’?…á«»KàZv ~÷›3DÜ@þNL±Bg÷ÅÚ?\“+ƒô<½|uñÐ»íŒ v%SÛqÉGÙïÛþ:¹²%—äÿ¡µa0¼Q¿@:ÿjŸ“iùè¤@Ì@ ßÿÉÝ“¹{Ø…-Ö?¢héYz/IõÏsPû2ˆa¤öàÿdÉwÈ]ðqÁñ`jzÊ 0‡{ú+¼˜6ENû‡ì­îaüe [÷.#× KÄ™ôqÚÔ¬7|HŠ_Ý~ġԢ!>ÝüÐÑNÊ•»ü’mÉV§{¦ùÇ‚ŸD<±=w°ûjZ÷¿jþ¨ǽàhcnGZ®íkôä–¯š•‚xï|ja=›ì}{g€Á›ý#¥¯$•_*ZÍkQì/ù»!ìð¡™/Ø.7Û² /é^y&²Vœ?¯½—‚…Ú¿Ézž¥òÔO‡+®õè `äm.ò;Vù Ë$Bi±Gp/OgÍaï@·ÆÝ£Y0¸à„¢h6ƒÇ¼ã>©gÿÅìØ¸¹ðÜ- ”ù"7QœhÛÍø‰TÂU}Älqm-ø{¥jºÁ¯¶sßü?#B–w`¹ÆÄFoý¦”…¶ûÁ‚Z?yc{Ê€t k‘ñtØ-PÕu^efÅ? †ê¼’ñ}|}1€ …¸Îõ±¾>qáI詵&çÍe-Å-]±Œ¾SvyòæX¼.úËvT0%­W—R6¬¾ xð)Y{Ó{耗6lÛëZÍšñ…|ÅãÛa½ë- í t”0Òû{GJ8¸ðy ÿw‡J6Yíå¥Á'ï!îW­_é[/OlÇà•Vµ³Îfuô›×/ŽðQ&ç2„ƒR÷kô W Å¥ö‚^‰hÒò½Å˲}9˜ÙÏË—˜&îÞm”yô+ÞÄ[¯rß§û΋3™€®dIà5þ ‹pð²ÐÛ¢ý¢­p3Ö{¤¤aÿ -ÂŽorV¹P[2¿‰÷,“¢bÃ-ö%¥o7rÜMñ3/ = ðœçHÁ§¯¡x vb½ˆGryðK­M¨¬1žlÉèÜ,UñšðNX¢æ´þÀ„üG¡¯q¢_ö¿\èÿÛršOò _’eï•›ÁDâw!Wÿ£©aâ³ Ö ŠæÐ'€ »:ÿ.ïöZá{le~r[^„¡rßžWÆv–R@ž4-¾ÖøE`)œù ãäMHu³aˆä——{]XáOûý¢–gò®[pfêÃ¥‰³X§¯ÿŽWMõ¼N/ ŸúÝ;±¶µa Ĺ@³,¤OøLÄ¡!iï)y•µhCøKv[¯·÷ÚÎ]‹‘1Œã\„qyÖËØxb‹ý`Ú'¡P—ÃPÞã_:Ç&Ì[ÚȃéÎÛòø…ÉÊ; cQ;áÏ¡¢ÅCž¡ßúÁ³ UëGþ£Àц#‰»BEÕùø)1|”_ªRpí<Èee¥‹Ù}ì59™‚ÐK Ë®mkkM.Û>êW{«»ûúØXÊ c^¿ ÿçê²]ºÿº ¥—Nÿu òÀô²¦#à7XR=WŒm 묮¬¿II5ñ/“¹Ø9‹< gÿõ>úå¨%¥`“¾—u'$ùïÃøŒˆênO®¾Rƹ,–^L<$Àƒ%íCî”-mI¹ÈXg 3_ÕIÛÔ)x´$Ò$/àµj›Ü—ÍöË?Ñœ ITÇce¨ðP¼4Á©é|ŸNñëdÜ=ÙqÂŽNwçVÑ?Ækt­{wWÐØFr{Áê¿3úÄ¿±NßÞµò?Ê¥¾ÔïöLì*TŽîòZ£Ü¬÷Yì· ¼M? !u2r)†÷ëÖk¹†§É¾âLt½ßšFhq 7§78º;®Õ²ëäE{*–A$në#Œ®ƒUs9 Vv矞qIò[ì"›¬ÔõXîlºwhñ¡2‘»’Ó5—„gòË9c*â3ƒÎÎû'9D«C±¼Åx8žÕ¤Þ|¨wŸ¡¡ˆ½þ2©•:S~ÉèÑäŒ/îî‹ÏC;ÿ1Âyã9%þ¯œ²c bú_áŠþëxúxd5¢b¨óvÈ ûóÞ£lþ…›9ÞôFuô¯€` q‡ÉêõšøÌ~Æ þeHÍÁæ¤xV”—~”ýá¢< æÁ‹\ç7ñ/Ñ7o7_Ú«nøÀ^wó– |õëMØOÛøØPÿ§§~g|ž£x÷eÞ@?<Ì6TÓÀsEAÉ™âP/ Ô¿¯yõ¼Þ9Ty5}u÷[*r Äc'¶ò™»¬n"ã#%N}íì_'Þ•žÓ¿Mù£Žš ÙïÊ!™Dx0ˆ1ry:—xœ,\;R†##¦_LAÉEQ;^73˜‚œcÓ‘. ºšÜtCEù¥}CŒË‰>»Î½“‹Ÿ_6ÂrsGo~0Ùº3]«n÷ ½p÷z¨¾föN?.ß h ÿç‰~ GÿºŽ$L@j¯{öœ{Ï#J5üìvï´^¡àãQ €O¯ãÙAc_ÁUñŸÔSôÙþçÖh4ŸŸ §þ^ìò9A„'/õïTÌ¡ÿ±’ËßÌ5ò+7SC€|ÿQPéÂÖl2/SRh…8þåùJCì-°âbg÷?‹Õœ‹ZEŽ®F¼×`RNC†¥ÀXu¢±…ð5bFüË,ó)Äž¥¥Êþ |ZÑùGJYﺋ†„&¯š’íî4—ü¹hm!â®Ûás¶”,x]¶Áð‘fo÷i9ÉŸëËL {Ç..'Ê‹X.kEØŸ`’X…þ•g=‹‘¸S6ŽHgÿv³…¤"K/ÎA;wôÓ¼(}í/izþew¬›Â 4²¿ª ÚäèÏ!úž ²|ö=wO¤÷ï6 [¯ÿBöDo>œ+°úB÷Àç’äÿ¸³Ôwþa¡-ðè‘þ_&bÿëÕê'F ãÃú«¯ÿE«ί¦^þ5s:ßz3ì¿%¨UÃQÒ¼2ŽÖNJæ~òÄ/H…Óv*Z7>Ð;$7øá˜·vÉñhóA…œuó áYnê±”›;¸Zp»Yó’çÜÛWßf¬< pÁe3ñ¹jr®û üJ09϶7±ñQÝãXÉÓÇh¬usEwT ¿S´=T•ãúª[€fÞöýÌÅ.e…o/6Xö‚Ÿ²›Òú°‡w—¬^qE¿ÄgCmÌéÉ|&Ýã_ôZ^lÄ› €Ážúà _‚œ+^} âl½Õ1eñ˜Cœ ÍGóóËE»³\Tkù’æä—×Í/Ï"M§þ@ ˜9(Æd2’eº!¶Ò6Sæ¢=þÁŽw­±ª ;É5«Vm¿s"ÓÈ,oÈë8üs7÷Ùv£©UTróá{Óv=M½z1sÒëÄ'þçðÒ­Œ¼ûGÑûOƒ‹])€o¨û¿]þ© øÐ pþ½oöÓØ‹iýþMb4쟪¹¢ äÿ1È®í7ÅeFéþAŒ o¬¶jþ“’`oÙ`Èsµ&(ï·§­„OVÚ–z.‡EöÙ¼èàß䬌Ã÷ß„ž;g,‡~ާ.®a¡àÎûuµå~Šžkbßã wðé Êšã<TÕ;˜<ζÏ\ð* ãeà`/A³‹cö¼ÕŸwÅm" ò÷Û"¦Ê é¢?ñTl|‹ ÷þLw.>tFƇ5û$Cj—eètO±ÛaûרþZU”:Û+Ø,äz`Àñçî6gKwòÖõž¼ R<³“sJrîá§93ÿ:}:K;…@^µxü7H‘þã½×ýBs·HR(àkìt¿q¸¿Øž¢±å£ng'úL½,Ÿ‰}~¥4¶–aZS¨ïöÆDië7Ê—´ƒÄt¦:ñW­_…½ãôe3ý&`gÇÝÐ}÷‹ØY†´ãkµY=]õ¾´ÑÅ&û|+CôµÔ¥&óŒG ½ /úƒ[O ±CˆCå„AúO ý9©‰ôr:•¿ˆju—Ï¥û' «]ƒwíÞõï#€ ‡¤ ¹ìeõx<*ï%¢ogY=w!,‘°nñ *ùvß¾€°ËyγÓñeàÖ/ô‡¡ú\vq·_)܇YŸ§“ÇWïPÝÞ|œ©£+቟D\m¾Ufx&}û±K:6:vÞ ‡´—W¹ÝãZàI„&u[À¯vñƒ¢¥Å !VkÖÉ—e¶¼Þ™åéTä%—›Êo-ñ)Ö­N N!ZR“/F}:¥iª×wyx¢_¶ôÛÏÿ•‘t“ØqþÏ•»ÿË)õÎ$»Fýáî,i:œÿǤ ´6¼þ­¼$Ã{Ôˆ™½i>*óÄÆNûR à8;n’‹×Dše|ƒ”ã¦Ü~èy@{}\ \é¾%¿Ny«7›’àZÍšD“‘@óš;|‹•ùÓ‡_XȲáÓ¨`ÉÈôÜ+Üi¿@ÑyWÿv¬Éý¦­i%ž2#ùIîÜZMuY!ˆMhñ¸úå)‰8Ñ/šÚ’/N¹ÝL';vƒ³½îUô‡’‹š•»+ST!ëÂÏ~¡Ý6R,O ´F+é4“k0ù8fTÏŠ‚™ÖîWNXË!])'‡J>VôµD"]H᫊OØÆñù¹Š[[¥êò¬ïçŽx!ŽPéŒÅ³HXo ü}ˇìø2ŒT~’:ÓÛÃõ¾ßÉx•{#!àŠ#d`RuEÙ¤é³ÑÿUôòÙQü³ú?M<:-$جë“ïê¹ðÜìü£6ʬxd'­QÿWÏÂ)èìÄÝù²á8|Î7@‚Ýþ5ÝÍ6íù‡Œ¦À7¹óÿÝž˜EÔaËl•Î-ç¤òäÉó=ž²s+¢Ò«d¶ŠÏî‹ù=•ÆÙoìŸÃbîb÷)m¨Ó&µ—¨zb,è‚å]ggOØ‚#,&û5çTiç^…‡±s÷4¯ì”ÊϵٴùYÍû̼” - ·€ Bo"u¼^{¼ œimðe­[Š“éŽ\ÎXsLØÑ–ÑÜÃ|ÜmíôÚÛŒ 0S´?ŒÝ-Püû ý ¨•¿T9¸ó&äu Qí¨p$S³ '$(Fï-}ʯ5 Ûn?AwâB{³}£ž­ª×äåb-Á%UÒ÷A.í õÛ‹¾ªï@èÿøÝKb•{¬>äöb+9ïç±µ÷ wÞ`Lï”ß[Í©ËØUä‚rÆVê„Ø7°GaÁ?_Y5×íõ¼yïî¯Æ÷!ö*+¢,r⸜Ö+ÄÜÛËx´å2qdè¿Ôöo•ýE2v¡Ð#£4GÚëSÊ™?3VËeûØ?^V»ÍÖcÕÁëÜÆa¿°–¤54aS¶4¨GE ?H_—aDØÖžM€E¦·¸«ÿPiµ$nõ¡¡ÿ Ã‹tüx3ú÷‚q)‡[àš8E±oeZãt&îq¤CÍ{ÛïçÝÄÏ‘©¦/€åô‹’ &ætWI9‘ú^¸ëẽ¸k|H ŽI鿉áçÒéV76Ç ßþTÆíÕ®kRAá–AI„D£z¬Ì{ˆÄµ2·d‡ Ÿ}¥þüd‰E~‚¼6_¾7Â÷Oé{>ã<„ëE«¬¿WWpΈä|U¾•'ý^—#5·êóU°#´¾ù7ÖèȰöüwûËéG-7¿Iœ›ˆî)‹Þø}ƒnñq¸<|ÖðÜJÞ €Óß—£Q'g’‰Ý¾wÞc¬\Çï¡Ùþy߱ʋ#¤ ø;ט°ÊE´ÄgO}d&Ü Î¬œ8K ¼èǬž¥Êù+ô"o%B‚¯ŸÂGhÏÞž¿Â/ÎM¿üh°±bú=/µïúŒóŽ“¨Ñ †òÔôóaÂèÓ!|ž|Õ÷ôE÷Vïé§Ëþ‚ÜpÖ+Ƙ1 *ª;ï­ŸrêFTLf$nD'ðß9bj;R&bE˜ 4Öu6Å—GÒ­}Ç«Æee1çExA‚5°z¿êie º£ßL¡S_¿çëBƆÞ`ú¦" >ÒÊFâ'.~uOáÕ“eôú×P»_E:B{^·rßýB½4³F6¹èy‡VrLè›ß`~ººþYé¢J¦™°¡hµúÀ ñ笪¢÷„¼åøV<öDg·™0W_1ïÝTv6¹¹úÛɾò¢#Ëèç.:F6ÊÖ/í—Ë1–gÉSJçH"KQ]xÆ&Mz´²3¤bu²Fy_EäIχÎhîµ=óåTFÎÀÔCâ‚ä廬¬NIbW#ß².B€Àk™*ªVÃá‘õåf·ƒÙ™y¬2r(@é°…w›{T㘽özáX}Ð&iî{_` 1• IVáç‰üN—™²ðm1SÉP –~xhŒ˜°’¯ Ø@§†n"@´÷€'d]ÙwƒoD~¨›‘X5qÒ7Yå'ø)q ÒÔ*ÕX% ÃE*äþzÞIøèô99ÕÃP;cü"§Ç8.èº<øÁ»°áýÌí`’×µ%Ò³xx±ûà$؇Y´Ý3090ÛMXª6ê¿ÊlU±«$Pù ÞúpJ¾[ï·ñ+.ÅÆGÒ1è ÖÖøn8ééßãC÷ÉfccøªGÒ3ÞKE-†Ùïe'LÚ$(7J•N˜½ªÂ6~Ø?ÑÚ®MñÕÂ=y@Fš’[t”}þröRv$¶¯R‚Ys^$(õƒDúòsRe«UŠsæBšø¹úBŸÊ[RsžÈ*1æëqJßìúÔîHïp8B.[ååe¯ï‡JÍ­B„ cIâ³ÙÌäYG©›N™Þä~ÔÅ;K|1oäÛ@»½à5ïY¾ÄQÐönß0ÈCâ%éF9hÁïdÁk(cêðʼng/"û(ô`óg¹@T–Pîra Ú ÎŽ8c ]D!åè(³8Þ®õ̺0Ï•Ø^|š’sêÈ1¾9D‚&#ßÈ~EC,ø(¸±X©ÜŠ› „+¢5J}ÚŽHɹAæ1gŽ6Tô}c¯úFÐ ôxLus¢‰û£·Þ)‡l/‚ÑWÞxîû‹YâQ‰Su\¸ºô˜ÃápK±“áà5Cÿjs˜J¢ý9QDk• µÆN7±GϬ? ŠöÕúZÔ¤¿íZí^°è@}#QæÄêiDÀÍ”s÷øêöa‹äßã~Îù5»Ø÷ç,Eçy>õ{¼«e‹Q”,"– ¦–‹{Ç+i6?"û„ØóK>°‡ ƒyi&ë÷o>°Ž¨¸\Gxnd%Jh¾åî º ÑÔÔ4÷<Ày] .2ˆ°¼'D lõ››‡vDé¦nÇLðº¦@ZgªýЯ†Õ7ÞBfik î¸xÖë)Â`ç¼ þŸZ¨Sx3Û©\ý×Y“àÔmk±CξÐm^£Ó澘4kˆî>YRnÙ$Ÿè¶¤Ï./-ˆ¯²-¡)<.³i7¬‰™ ´9ÇSiQåwô]Ò CöðÆßCó!…ÒI $‘DÒøQÅ%Χ=ß«L&Ý †Nì'® '÷}!|Îzyžʈ!Ú¹RBôÖÞKœÒ»/_y À€ËI•uL<”^@ö#Åt9‹ÇùÙGIÄNJ|•7Rð3Hõ¹ÃqùƒY{VùøãÏä½Õ¡Ì‰_Eû‡õƒ=£Cû'üʧG! Z§GƒN‹ âk·šÓ§¿§ýê=ù©ŒŠ7ü\êXpóð$â‘lzâ =ðÒ¡å¾ýù¼ZíïâÃs2Xb½õ„Ýà[ÓÓÓãC—ô¯ ¡µ¢´œz«¹ Súi€ŽÙï#ÉØ0íæèÍtõÍ­¹ðxÃ_Y¤A7¹šoF†õŒTRe•¶Ñ‹$µ•РëBøµØ©®éI„¬„”_9Å/4É*úÛ?`ÁsË 0"D¸F.!ÄÂì¥cu(4[¨ÄwÍ:F2Ÿ“ïoÉÚõž„VÈ]u,ÅT¦†‘ o.–>ï,þ¤”L±vWQ½ƒg@…ŽÖâð;óþ+ü: YÏto ·Å½–Ç=÷йk‚Íœ  Æ,¿áo{»{l-”%Ô¿mzPÒ“)kGâHT|u üHAè íD©UËèGZô¤r·ºž¯‘¿5s®éô…§òÁ ç˜%@t¢óѡҖ˜a”Íg“sܺbòXè‡ä** .Ú³±rD%i±‰rôè{ÙËí¤%à¬ÇȵæV-aHg¢’÷ŒÄ}gËõ&§Á„Œ:üÌØÙ±…žãA?±줶³0´k¯2qæ}Q½©^«¯óU@=Þ6[fÁ)CˆÅ$àZöo÷tÅ&Wn©–b&r ›LJ°{1{•¾ßM)Ór»-þiãTÕß:Äõo‚%±ï\Ÿ¸^8ù­K^ó ë>Úb¹e È[g¿ŸŠÞøï~?Uó5͉.ÒûôènߦÊûð>@Œç#I8ïÈ‹¸› z _SÞÕ,ßáÆ›$üĜ۳º„Hàˆf™[ƒ¥>ÇþÏžÌçìA”÷3·J*Ÿ5•zͳ¬f·º6IØ [³òOºâú¾M'Ç fÏ2ÏlbO-ŸŠÿÄ6ŸæZM‹Y±š·zéÂ?€Á“஼8´ur•J’?i>÷^É"ÌV(öexÆ?×É™§«¡ žæ.B¹EeEÓ¨èG W€Sò5LÂü#*(¬¨g8åý¨áàÚÁ:»>Wšfßèç3€´n}îVÙvNPz²äda‰TžL «ÐàØ—™4ZÍuÞz¦0xbê…<¿²Ý {} |=tp‡î¾¯9‚‚äqJHIîÅ0Ó¹%ŒýZäŽ7í–ÿŒ´`刢5{¶}F½ß¹Ú•ÕÀIBQÎÂC)ô`þèò)í :±‡ÓwúvÜr —ÎNžT¼tu Þ6Ì+V7ˆÈ¡Q" º‚ÿûæ­©DH«ŽÄX_h¡ ¢GÙÁ¯ƒuÀºùij¢1Ö[‚˜Pnp)°{þ”ZeÌÂ…ú F”\l‘_¯æ³p±…1ˆåWç£Õ1ÊBéŽèP¶p^°V~‚wŒòÅP†£K(W—%‡£,É‘J¾fÉU/V· o¥ %–§>@I¹0úÉ£žÁ9À2ùÞjèVÂP–#.T(œL›Ï­¦ Ⱦ˜M.ìÝ $9¹|DŒÒ…›€+ó!ª (é ×!J n6çæƒTQ8’Î#R”Üü Ê?U=‘ffS–QÜí@kåjˆýxà`Í<áü8u 5 –+‚’æÆk5œ5J~ü.¤ðQð°c^vÞ€º‚FZ„­ÕÅÆ«5”5‚~×áý`£¼ù¼Ru“ÿ˜ +ÂÆ~Âðð³¼ u÷¼Z0x?oCCæ…Ù<Ù c£X ‹#¼<”—©Qÿâ ú Ì‹|‹rž¢QÊ^ÞÊ;É›Õx±M6O>Ã-AžNž¬QÂ^žÏkÒ@¿Ø&礚§l”ñㆷ‚OòŽ5bTuÁ„y¤ê´á\TœJD検$J—ä/±¢|àdpzp"øø˜7ß>Ï>)o)Ÿ11_K-!š‹P‰9è2 ‚ï€óøÔ Âs¨”ˆƒP’ðu°Dž³úHxµiJÑ…'S注‰F[dµ\ bC=…3óMÔ*£­ [˜ƒ8QApj0G¾ŒšwôA SÊÎ VÈPCD/¶°q£pB0i>­w´2Aè¥#VÔ8#˜/ß@-7ZZO#7L™2› ”æHE —€ÓòD5lÂô#Z)B©gˆ²iB9HPzp p}>BÕJÊ}t¥×'äçª:«:««DþGp!LŠ[é±Õü_\ü_\ü‰/®…NWˆò-ejX¨²„‹PYÍ04Þ¬aª‘òƒ/‚¯çyæyæëªÏªÍj¤…û¿¡Þ"³"™!oª‘ð“ƒï‚™òÕ›T›ÔMÂ+¨¬ˆg¨ü¤\à¿ÀRyîêSáÔV¤"5$æ”[­h•ýáÑà×yJùÁj2a^óTr~”.Þ.ÜðTp+¸<ÏB£>Ì‹ržf†¶QÉþœw’O˜G˜‘§ ¶M1OݨàG Ï·ƒ[ò‚5ÐaÛ”ó´*~d5DJ‚® ®ÀÛÁù`¼g`[°F~g~ŒmÌ›\9É9‰9©•äIä™åiä¹ä/ÊÓ]B¹ÀÅÀöù=j§¤å1\´JÿD^?q¼Ì^ËѰyÑJ–MJ~$Žb‚KÂKÁSyzàuðT¾·*$²•8”ãˆe£ó¹UU"D'¬Gä~$~7P†pgðH¾*(@|Â~D²€€ù*ªÀHQ6ñ Û%Êî †äUO#qÄÙÔ'G´(8,þvŸXXpñu¡„«ƒ£òãT-ÔY¢êÂë¢EH¬.7ÕP×ûé¸(¸Ã‚iÀ…ùœùª jiQþÑ"¤V\~š.,.&ð»à”üRÕ&5“¨ ’-+ÎF?=¸9¸6Cu*jRÕ=_)oCm*ÆëÂ<]#} ŸŸ½‹(üX/?SM&Æëâõá<à K#“Ÿ;\ì™?«v¬V³}až¾‘±FÅï‚ß?:?g¸Ø*¿I- fûâ<£ŸªAd‘[êÜ<–ï¬:™C¬ÄDƒ²„?“ÀÁ”y,ê¢áÖT-DòäAü(qø X0ÏD½2Üšº…$H%ßsäɨ{‡/Pµ ¢¤á[`…¼uDøu i(J~&Í£UçW¦ %:º‰ƒ/ùò ÔsÕ©=#õ£• C™å‰.£žÃ)Á,ù†ù¢j6Ñ­Ù$¡LGì5äòœGò(jx&¸>Ï[ÖJJ{¤Œ"„Ç€ò¸5T†_ G(N¨ŽäP”ð4pež( @yBs¤„"…'€sóªóT4€a8Šê#-< Ê«Îjœ†á(OhåIåY>ç­x{’xÒx^´"k¼åGïòÙV%BîIêIkE1s±Q²†×Í…þ< ^ÉÐ0yQA¶E°EaEÞ(îÇä"ÿ žÈ›Ï/Õ˜zQAnEÙ(íÇ o³»×ú)ÁÀÔyê2á‘^T[ÄóDü~ðU°p^K~hž…ú±z}¸õB ¸pBwD²‡óÙÀé`ƒü\5•Àņ#&”;\ìQÅà.œÐ1ú1£œá¢`›|0wñ„ñˆÅOå WóOÕÖT×Ô™j°zGCyCùÂy”j,Ñ"žäV—f(fØYýžÀÀÒà:ðõü­¼­|]5Õ´hÿHÂ-"+æ¶ÆË~Ïá`¦|«<«|A5“è ‚-+¦Fö¿gpv°T¾»ÚTt¡‹9ayÔÁ‹ R+îÆ‹~ð;àðëü–¼LU™(/’ùËÄ525´~º.6pcpyþ¬j}”ééœ,¿ÏÃÀy1Zª /ÞD¾ ÍEÎIÈIÉIÊI›}!›L‰"HÅ ¯/åFLj$Ää\P¢b@9ÀùÁ†ùÅj19•ƒ˜Qp9°oþšGÞš†è k²² 1ü¼<—¦Qùš¼…"H ůoäMix¿X k!’@1ÃËÁ³yõˆ ä-”A2(.x ø8­ÁýB™,”ìèŠ^îÉKÐÈ}¡LJq$YC/ÏvD…2ƒ_‚û‚×òEUm"õ£Z‰BÙŽ(üØQFpwð ¸|,“ç­ o¥%=A)ÁÁ´yÜê*áª"yByÆ#~”| ,šg£ PŸ £àh0wžŠ:0|8GuB|$ˆ’#À*y@õÓðáhõ é‘(J~nù)<ÄTÿ”ìÌ.†44sÖpûÃiÀœù jǤª¤ê¤jÑÛóL~p.°R~D~°:z›pž¥‘Û§s!º€R…«#ò5òcT7òðPÑ à¢á¼¨D Ï O!ÏtÍÊOÈﲟ¢ßbê>d ²_ãyãx´ô\…ú 6Yb@åY5vâÛJå=ïº] ÅÀ‡ ¯CË—É9š¿>+•ð®ÄK ›œý¢¯ª[qˆÞS™³í›ïÊñçÕV Y7Z¨‘E÷õ¦Òä“ÂZÝQåÖ%‡Eÿ0:uchо´Ê»î1¤õNG¯ŸÁö©ôB¦°Ö´KW#YÃÅÔ \Ÿ˜yÅÄ~k4ßhRh#*™vu¶b ¥–Ê#³ú>—âwOxc0fµ3kM…(Pá…LÝbFù+FÙ;èVýz¢¤&ÙNµüÓJc¯ŸØ4;¬)HŒ% •][Ì]®{K×t«5áV«IF™Y5é–vô3î±å}’Xb*fÏÖÓ7¦ÖzöGýVÙœ&§ÏG_ï`*BÊå4Ȫˆ—Žß/* Z‰Œ$ ÆL¡oø¾S&6®X´KPjî¢!ô>Aoï•çÞÏyW[½—‡®:´?á6 ±¡!¼SiT«1ªÝÉkݨÜ½â æ–½¨NC•16Ž!,­ÍdüÜÝèÄ.´Û>ËÓÒ½½VJõ&ÌvÙá®QUœÎ brà–4˜Z†dî?W/ëÄ(aZÈw^a¸,~¹k‘åÐô®ëhˆLÅ`¥:–bâý:1·Àç᳈È÷Ñ;¡ïvBÝG8D€Ì@•¨€…Q"2’¸×: ÓV2‡2üLñ·zg3c%©îuóXïìí½^p#Z¸t‚†ˆ~Z:¶Úâô׿ºàŸÅ? à0SMÚÐ-NI´¦…áŽÕ§Öo+ [ÏEEÛš€4:q/Vˆ3¤ø4;:âõžŠq½5Å6[H°3î@*Q G„H½ S/:78¢?°üâøÄhGW=øaèy>éei1 ­õÎSNV‘Ǿëï;»äsHüÓH!äfßq¬2p l…SÆÄD­J=FÂèÄ»;\~¬6ƒ iæDVAòý“£=•6nEѬãSÇ0èõá¼öVê*ëe·ŽØÈ‹$”Ö³áö<õÜq'|¥lýlÀ¾ÏÙäÉ¥Ó0“!%º2èT¢ûQJ”ãGgÒ#އ˜›ª‡ž^DŽ¡? !Q|¾YÖßM,SlQ߯[Íšª/©ú¸îm ×?íà¾`ë«4Ú.¡çžªaHÛk[QW2@j£Šõü|ÚxòÕËëƒpãɽ!8mÑ dúàð4$WJ¸åÿ 39ƒ¥t,ΘˆßÉ&*Âh_8‰¡€Œ0ÈÒG´D‚’¯FóWKjx2¨ âé{К½Fÿü×W‹ µK²ëw0öbô%㥀è›#îü‘B0!ÿ«ŒzæùøF}­wìG<€¬ýÒûws|"Âi?û¾|ºH*ê'’ü£†™£á±ç fÕ£‰3rx'äù^wÃÿž!í¸Ù®û‰N{´¾-Žëû}œõŠï³ÝÚ×"ã*&Vy®ssKw¿.‰ÆWݼO£Ç²ͳ‹{~ØY™¤xEæ=ÝÒ«§;¢{€J­/A`¥Ÿpea®{Ìë/žA2hÖd‡;oA&_AMŸ‘gkpËìµøä;œƒ‘*Þ¸^t q[§ð·Öóxƒ:•%˜sM“Xâ@:ž¿W{‚þ'ÀŽý†Í¦K¢ÿ} 0òlö[Íîÿ$î´a‡ º©ç°ÿ6È:'xæ)íÿb$&9ó>3ã†Å)ð|ÿ÷Œ7©ž>þ©¢6¼­ÅŸ¤öåïoï¢íS=LËο.5MHüð¥á–ùþU¶Œ¨v¨âš.´”X+¤MMf}?}÷â½ùñ]ËÐnߌïÕ¥{§}nÑ_ïvÛ|u[«T4Ë*j¬’ç³ ¾âÞ— î† {i^Ñ5¿†ÍÛ]V~W»’½ñ §N^³â!ä¡Ôö9bÁ’ j ]ѧMÆß$¡¹®5û4ÛbÀÌ_ cvnލý½¶»8k©DŠ<Ë›lT½g;µõnÙË–Ùn§PQ&žDQf\  ³/÷ ÁU™‡dfŠ÷SA¬“ºù?‘ßÁ“ö˜Ÿ—Æ›p:º4qzöê,?=™ƒƒ¯Qöšî¡¯TeàŒ PªÙä46ß&‰E¹ËÔ «“ÇÁ‚gè[í¼×=U›˜B)0ÉSLêÄ"È¥R²YÞ@zëe› ÕZÝÞq¹¥~Yø¥°³½‹þýó’ÆaðDe0ǾÔf¨|~.â®|‡ ëI¶ƒ«¤Õ ;z«Ö$åN8érÙí¥TS’K5^vö&A}u»èÏZ´2[.m¢ž^[WCÅñ-=t—+_:S@–¯æ1€vË<îÚT;Kª¨T–å¡’È=VLKÁEÂÊ¥)…p7j53÷Ôie‘hHĈÉð<ËÌöŸÅpÔÚ¿ÒðWŽ6|“uçUOuE'Ä(nüïõÖ"¹ `¾ZÛeæô×V%ÒèAu¶*¨;=OÃø[=¸é°Ü­aÜFnVåzó†Í¶MaÚ¶ºë °ë­vKzŽÚ±wåEiïã´û0c*˜LQݫӷɆ·¡Bɳ,úE4¥ñhÑ,ó”›VËáv*LßéDe2på<ý’„§ •Ù®>Ó¨yÏ&y#cɶ¢})žtNfU†öÕâ ].¨e´ åÓ窩·¦ós¸;ÇR‚Ëwê¿ãAû2½l•ÆÍ­»Î³° ý<ù²ã«ãÔ…º]îÀÅ+÷NíEg¬‰>ðù‰'ÄmÔ´b%狊„A«© M‡ÁHáO£;¿u\ÙQbÝŽ È.b]Xþ4G–¨Tý@èõr¥Ü5ÑýŒ!_O-¶õqÂö'שêF´>­GóùEÈÈO>êóux•myå]—}ª?BÄm~ïãk?òý²^¼×@wK1)·tÚÇ­”Ø“nóÇ´4D{Óüá¸d%S¤Ü‡o×›¶ú6ÂîD”·4û³­‡o6•ØñõRAùCϧu5É4[ñŒ–öaH?ðËˤ*|Ä©SßÂÉM†‡<<ôÒý¨j£<¼?r/«d*w€DbtÚŒñ^nÈÙ…6•ZaÌÁjû9¾D¬¨ ¿Û–áq]rÅ’ÉrÍÝ@߸€M—ÝLñŠiéŽrwAšwxøÜ‘øÄwtíÂØ—‰žåLö^ ¥:m6ÍàVúÝŽL‰ðo”‚N¹¾[âôÉúþ,±4£ºøŸt^B|í5Írdö¦T‚¶QÐáùWHœÙ9ý·+ùt2F*ðÄÅÿ½~E 3ýg´}#-"¸  þ0â#¾‡¦£³±x Á»Î»ÏxðÔÇÐq‹nº©½ Ôi_*囿x]ûU5±Æôð³8ÆVý…¹«BÐcJ§O¯â5]Ê\ÁXÑ©¼ÓGHÄdl*hVRiR¾ŽâPz³¿ ßþxIÌýäÈËùÈÀXâ‘8.©0Ë®CcQæýì¯,‡!•ö†¦^.:´®“Æ|¹ôÙ…œ3ÏÈoZ¥ôO,O†KEed,ƒ*<ÍnÕ–(½ö¨àÔ>žd`¿_¥ |Eö„ýþ‹8<÷âJ§ñ r®û9‰·õ‰md} ëµòAÓ>ˆ UHåwIã i~ÔMI®àl:‡'aÆÌ¤FËÜ{§Ì±ÇàUS°O±}ݦ¡G2î[Âj9TQàm<¸ìéÓ“;óÏ": ~̸Ä%® Ú)ªAVz +ßÑÒ|³õE~öº¡¬ ñI¬’ö–ȃÃqjý Rs¯${5›1©žY¯¥¥oÜz‡wz-‘Ànb w”{ÅŸ» ‹y…ôSÑþŠçUˆÛ¸9øÑš9äi¾T> ¨—4õÑü#v¾äŠbX†taSåãG<´ãu6®°D“ê+Q* jT+£_wÄX#Þùù†< /5ëˆ:æ(ë"—•ÅuLŸ.ν‹ìš “6í<¿R—Ln}¨5p¶¬ÊÌ¥æÊv·ì1^Ð$}¸7à\l®R9Ž+™¯wÙôƒºúú·³ úºëízÚÒ=kaâh{b^À–ÎÏÒùüÃÃChS•š«[jB9¶Å.q¡PŒ<‘þ!¾*¼ ò±î7ÁãpÁt¾x€_ãý{TþßÁ'½Wíÿ“®ó‰Í¾þ[ݤ[Nz⛈ßý#$LÇ*}—ü>ð s ÞýêßîYˆ€/ cøÝ¾Ó1³ÜùW–‚Ç|—ϵš{ÆYÓþ×h¡Œ ÁU¯d«\¤‹«î¸®nØŸ`QËLÉ>B´$B!‡»3¥vþI|ŠN¤4Ì®/‰šµ¯&Æ+…‰?KíU”ÊüípÑÅþ_Úé»ôWëêùð^—‚‰Ñ‹¨¨Q4{ 4û:ÔÔŸžY°bä¿Öµx–÷AdmßòioU¹ëò¶âcx€R—|{÷Ì–ßÂN§(ðªìó0 ·]3D¢ yTV䔺®mDݧ¹æ? jö¿²ôþ¥&^6–ð.0ò~±é‹Ë†R^enÝmÔK<þ5–RÛIßwË‡Ë˜œB§1 —‡Àd,ØÃü¦INg¯ì.u±Iì<ŸìËðª¼ÞiJL=Ì!Ï¡ŸÙL_¶ñ¼ü£ÆP(z-ðõ™ßð IŽŠ™E»J®ñØsÈkübÛ @аDªö»çÂZ•»Ï-`D ¹«dœ¿þy±Y¤ÝÊl=½XæQ¬zúΦÔÄÔÐgþr#r©o‹0”Í%‚aEqÏ=´¶@ÒbX>Â~Š×‹Á…ÇÔh%çw'h$´Éy=#ñ@e‡Ç©oÿêÝTÏ©Ïõ^‹è\¿7\´ˆ0aR>k ˆês[.¢0ðRQ±±à¿}ŸvïÌQH‚RY!Žb×ÿ·Œ5އïã}òu‚8Ê‚uÍ»8®ã&„€Ìšá8øb{wJJD(9Idæ[‘¿Ãpk{K)¯$“‚Ü6%:Ž4Ü®¹nP9¾àÕÎÁ.šr }ÖI#èÇåæÌ ¶r °L)¨9ñg¤ßmÛËß”:úé2•«ÔÈ'P”Ú§ø¸ (2Äö-[9tÅÛðdêõäaMÑÝN¼Úé °Ù˼9Ôrßze*-3%3£òíciNz<þU‚3ºæŠýÝË]?Ó8 ^ìû„Ýuÿf`ã*­(¶lkþüZxü;û ]twÊ•œGJ>ÕÞ2.6ÅKn£$û½nôÂvYŠVìû;{ÉÓ…‰«ml¿fDf&uîeä¿©<é%tMŸßÚJwá5Ø/ú$¦ÿ-IeÙ<É­?ÁïËËÃàXר´ ä1"2žé?Ûž²Ô”SSs£tï$tEýø£->㣤t€€1 { ¯‰ö7ˆlŽIÈÒˆ¨ã¨V)ÔG‘Å@ŸÖKgŠüÝ;¾g_Jøª5heñBã'>€—Ê?Íö÷>¿@Ê—Km,Ê>‚[¿&Þ‘v÷¸òñz‡àÎØ´eÓ¥´žŒ»™?u/'hÒÊÊrä–[Õ¤Ó _Ç=Sâô8¥Ør/ûŠaƒèŒ¦ùôªßcözs?«ŸñùþÈ&ïFÍŽßa ?õ\’χ4OA"¼] ŠÌ31"’ý»¼²'ö<•t£­«t™ZUºáº6ZÏÅEûlž¹^ŠXÄpäOoß üêŽÏåfzЂDÉ­œÏJ]2Ú)ÔøLr:Wœe'ߌ½8´¦|NÂ8š5qvF•>);Á¥mKÒ~˜Éw-ØÞ;ìKQØ"{9¥Bë•ÎH9W†½Vb\Àdó×Ýî裂ÓíG±Q›ÓÆÍu¡'}"½˜—vBòv÷Ok|º¸…]ØÔj>uŸÃÞ[p9¢«Û”ÜÚ½ÃFÄã¿¿¶*Éèö•ý¾áæµ@Õ7†ýÉŠ*¹¹•åtMÇFɦK×ó šÏš‡}˜]ô»ËLýß³¢¥1³6¿c¸Ë|ù(÷Ö~)I=…vÚ;ã b¯þ‚à„P;ЩɅ¬½áâ#J>ŽZ(ë-³/6@—Œ©*'û;ÝGÖ+ TáŽÊÚ™hTÂßÕùB£¥ªíq2ÑξS’\HwãFÍ{²rd¸h-Àµp&;“^»3åÛeƒ$_¸{Ò·Ì^çê&ý9YñSêßr_^âG`øiÁ[FU3¤R%êøá›û‘Ú³*(*Û±)¦®xìׇ7R¸½ž›®AõÝsi¯ä­‡ÔHå§™+ÌÎŽõÒ9E¹ëäžUøêïà/ù ñÔ0"Ù*²Vÿ@õpǪz%.?žÒSï2AÓaÓœz_õJµpVÚ#dls|v©¾ £|·;tL´®r²òÖ„Ì5@äF΄íª&Òºî}h bú­6=Ôþ&°rñØ`ˆ/phx0­Ÿ›q—ÃŽÉNx}J1†]Áý8£’n/ÞçÆ´÷ S{©öÈ-`¥±ÊrF ­ÖÏ}›XˆÖž=hý%4‘6b?‡{0e³^hÆ»*Q=Câ ÌA$K÷ttùå ‘ÕªÐÊÓÆO﯃QÛk§eK ‘~½ú#z&©Á¢sÐs 2ûktmžIïÌÏ9°]çí…Î×]{ßB²8TȲ “Ä[õM‡Ô³‚ ËåÅz^E†t¡-¦3Z^àT!êEÔ©ðgþh-¹Sn´À8½Ž”âus½7V55£jwÙ FcÛW]$FÇ–LÚ†´’Ÿß®ìæìœ§ŽZêžžc¿wþ‰´«UO@~O³^¡Ù†ÖÜ0æâkT­®–!‡v<%:÷ ¯=´öŒˆé^"Tª1Ò‡¸N¹H+*ëAØCÞëUe‚H!¿ä[I üf¢j%dúfb/»«yó,{Ÿ•¸w $âk÷Ò¯_Y%:} ”vá~µLmàñ^ŸòF·Æapaàòòsæƒâo–cÏMà&w·T¿ÕN7õ?:ÔVÍ ë Ê5b<¢~s3ðåÂf¿ï ò¯_›S(Š›°-ïy:f†&ÕÁèÝúu+˜Î„s²ÖÔÜë÷âe?É[ÒHŽ–©(¨hünÝg¢3ôo¶Fo ™7Ôí[/¨˜I+®ÐVó×á…P ›D¯•Ë7@‡ÂÏQLÍ€½ÉÏP’#"ü(gS1ˆî `L24lúŸJ‘“\“ÚÐÈ)d?@üúo¯vZ¾TàuäæÂ×ÿ-èoo±ÃéÇrþaD6ý\©T–w#þ”9þSã_{TÐñtQË šB^'…HõÁ+Ì­œB×A4¸‰3w>ƒ!ôomHµÄÜóK¢ª’«(pqPS;êIiÉY„>—þ âC²aTn™ÓÍRìõRÿÕIåÂݾQðœÔPCFêÒ„RFq——¾ :Eï–qV¾~ ì¿v ­ÀŽ6ä…<èÖ}q}=è3\,e¡PaêØÎú }Ý#|ùRVªwýÃW+mæÞ9“´C˜J©¸÷Xˆ:IiÞXIq1¨0‹v×â…ª™ÚFKúö׃åDý„ù ÒýrŸ»ŽÉ÷oþ§ýàœ÷ïáyÿ& žaÄØjqé„þ)ôs!¢Æ]Ò¢•O—â¦J¼Ãìä½Bì‡].Pö㉵±w7>Þ 2S.Ah·¦¾k3Ý à>-7mÛ5H½3cÅØ½‚—ð—FÉ <àí¨•¢ì9:†æÅú›°2uÚÏ«ío¶¨±E«` x.ª2œҼ0ýc»[m7‘Â+)ŽæW—öÐÊRæ3?9ÏrÆA&ëc«K‹…ñ‡M>:<g%Ú¿rµÈÙ’;Ãz¡ÄWòuf0F‡ÉœÕžãÛS—Æ÷¤¤Žò­2-îµ)îÃ舳ú!Š©L‘A /Í'ò¸&ïå^\ >沨SÌÐC¨?˜;«æ>Î`Ž?^‰,g%~ÿy„wüRãÍïÎ¥Ï[èÛŽªIWO€ãÉÖò –ñ¿¥VŸ’8qÖå€ÂçŽîf:²ÿIµ3(oÔ"U'»ÑÄßÿ¡NµÂq\®­7é›ïS:êÖ§¨Œ‚õ’È4*J·ÍP„ï¨gVK¨UëxËŽ¿²Ã–_Üô¤™|¢ôú˜Ï¾“ÌûPžû­Ã㵓;(K« ŸiÒË}x<4Ýgª%6Ûx”‚maÈ–&×s;ýh©ç¥7V.Zè½ÃWÍ:7Œs‡•ß¹“„#‰oÏX™+&>Ǭ¸uèØnF4hšrHIXÉ–ØÄ²ïJáRG€ÙÚ’Ïbwïm:Xã½Ø(ùpc3ÎN¦ ¢Lž/0¹ä UEÉ¡©´â“Díeÿ¾»þˆÄž%iLÿ4?•÷zPæI½d‚Í `Ó“Ýû_ê*+¸üà‡Gà;¦$NÖxâ»òvø(.Nrˆ¸¡r¨^æ=®?“—mÿr§œŸCˆÏMèFպͱuì `BKáå4ñK$,{\.ìÃËõ^»™u? õdÉRg±hä›[ã¹=Å @<‚Iëñ7«r·Ÿ'7‘ƒµNöJßX·ºfɵW\Ô¤³Ý=“•ýÒJûHí=W=Þ"' ¾Š¨¢ŒZ3sšr„D HEèÁ+(ƒ†!Q+æcöžZßÎJ—%Á]3¬¿Õ]~áégô4à¤^c÷V¿ôŽ:Ö»Úú`bAå§äò¾ªº¬a£¶Š)OyªßíT¬•ÊÕŸÉC¶*Œýg%ù9DÑau–£çÝr¥£.ÝáYþ¡–¸èU¾*çµcñÏÑE‡ÁFh& ìµQêì&õ‰•ï/"QW‰ih:nþÃym~(Ö®bÏ‚ÎízÕâ0¸ ³ ßꌨXó×¶þß²7%nïSyvD€ô#úN8.;öE÷Ò3obø÷Œ'´XðÆ½ø«€R™‘Ïå™óED¢"þ!{(jÜûv²'jǽÎÝô¡‰M »·7ÏX‡k¼Wé´"uý»„bøÒ7õÍÏ3ÏMô”ò¸Ó°ˆ”òž<›Â§ÃC¼ôM×àÉs7ÐagnƒþøüBŠñ‚ÒªQZr½Vš.éÎÙ^ª ¹ ÆŒG’sê}ß›Am§Þ›Ÿë–Gú]:«Ó¸Î¦Ìì]·¿¬üUg¡Ï)çF*Jn]‘.D:1LÐ0J{~ Ííãy[‹Ÿ«ž¦žB n«¹üÓ8‡¢{ŠK~FÍ…*ùï¡¡äkš09]Š…Ô‘Å&±JwÌCX>L_ÁË£ƒ `«?ù«rÝ»º»IÍ+É¤Ê †3„yç9ðZ¶ ¿VxZïQp@Å(úz&K³ât%‚ZÁ4k•³„3Úê^™2¹µlÔë- OŸY©!÷ Œl²&_9 eÖ¾±þZÍþ˃ª:íúƯDz7“ 諹uÅSñŠhÒn<áêãjƒ§†…¶‚ÀÊñ̪7^·œÆD¦6+Èuìñ2Ȩ^8½¬èà³)T°GXO‰® <.œâ¥KçQí.©¢ÂbBÏ(ºÛw¶D´üuÊÿŽeò÷ µ¨\)-Û¿¿ˆ§Èëßõ^Sÿܲ…:|7µdþû¸0 ‘BªlN—CôÖ¬NŸž A8É2.•®› ÝÝäŸé÷kŒ±ZnˆüÔþ6Íë½2òË’vÒ„žˆI™8\aö¹I]„í¥v|'Ò+JKÞ1ßõõxàUáqu³UV¼ûXkej¶ôWÅvóP…»”}_Î”ŠŒ¶)»ÒS\ߌ™9räZ™n­DèͳC-òž[ ÃïÎ<@ÂLïÅäxüÖÊ2ÿØÍF×ÕDpQ‘zYÑRäMÚ”S\è ËÔ£B«Êýt•ÏÝ}ăTm÷Y)ð@.ɳ¡]aªtØ\E´×KÖ}bÛPç.f×¼Wøóµ¼§›ÆXrmOÅ++mÛ²Ã`:ÇXQàuƒ½tëËÉxª×wo„•X— G(ÎrÔ…ÓìråW¸ôé•öÒŒ™+Ðq–£‰iŸBêªÇ'ýÃ~dìPSÖ¦TÔàâ2Bø¤O.¬\Ôs?IþKÔº–0fì3lY¯3C·±aÀ5îaji£Kò» [ý™õ Ú»²SsàWÕ$Ðe«à𻹎/×¼%wæ+]‰ñ;qêÙ%Ș¹$¯ulw©©+]Üø¬^®×ZôÎÿ«$ƒâý.c>ZµŒ¸|>ûlKèŠg·µòÙaƒã[2fòÂ*­ÉOÿ;ªý¬UÂKÚŠké ‡Ä©ÿ”¿>x`t«ˆNR,âÝ_ ”ÞGiôNkk‚²•+€ã]vý¡iST÷€Ó Ì'oce~VFP]Üû• Yë*fC÷û0ºÆÈü]—⡃«Jµ,ÛÁ†zQØYÀVüšEïØŽ×æü8V3¤ñ¬²P*Ôëž_ãÒ»–š6…œ>²•!t]ùÖÃð))V„L0÷ínp%Oiä^ÆDÁMÒ£ÙG§ÏfìWÉÎŽÌ,Zèbk09…œùú¼ö’«‡ Ú·4\Œ}¢,ó'IÚõG ÏPnÆ£<ƒÍÖQld1¬ˆ/»þÕÓ<§Î¥G.Õ½í^8‘zð ‘â¨]å¥`ÏâoƒduysdÂd©™™j“lî8®?ÊWqTÑþw˜iÉøf¿£Õ.OûuŽùI žâÇ']õª¶'M>7ü=7︋лuW$YXhßÖGÏ0c“Õ@ÄÇÙ‘^OÊi#L·M³Î6C dô Ï àGU® ®~Wr.`;¿Ûm³32ß0s7“|\¹q+“³Ž~” h‹B&"»LOk×ñq…°¢J¯µuH ›Š¥¦ºyÀàpVl'­ØvÉÌÎv51{‰ð/Nzp†ïWž:Büø¤„™öžñÒ#kwži“1µZµ½½=µw ¬ÖÕØrl‹À /š Ãp§w-È¥ßö¯z?´øM‹ÀS¥¢àÿ öÿþÑù07ü{[èë=÷ú‹ø&l×ÿ |»s²"VËüÏŸTÄÓad‚„p{ôgV‰^Ù¿ãªypÒG¸Æ*Ú«~!h\¬™mõfÒRNÏGœ0S$Ùܾ,ütÿz€)äÒI@DB)äé 畤nî¿D+Ižæ`‰œ e`øGò3™ ߯T6ɲ•‚kZ¿|ù>À:/=ÌÓÅp¶Õ©`ëH—›ÎCI ð´îÞŠ’FíšRf/ž« ‡rç»ÝxGÑäºåì|ôëLF•§ÅB›©ð탌ªszÝñ·­!»í`)f’®–T­on6”äÈ™¡ ÏÌê8¯ÛŒB®èE~.k>ž0•Še«U¢QîÑ!°‚„†ïݬ{ÉYHŠ H ÆX¦hQ 'R;¸_^9cÛíõ§^é¾ÕX ~®fÉͲžÇ'Ó†Ë m—áÔÝ ×W¾|9l ™¸©}ô©å®²Ù;ÂÙe„p¥ÛÙÙ—åRE½ ‹I)Ä ú’Ψú¸‘AÛt0Baa¦t†}†m>T®q¥Ï´ØêŒèÑ׎lSãñ`tÛ(~³l>`%iÚÀ¶ºÚawvÆkÔS7|ãù&åý(ï§ Št³ËËJrï¥TTcN›7κçl{iñÈd8½=0Åê¹ý é?ÙÆ\AD¾ÿÏn5þ£ üÖѺ©}ŽÝPk1 ßwš?Œd žk’)ã%ôŸýÿb\™`TY­bm$[pk 0ãÀò§ ß4Y²Œn=¶ºôŒ;NÜéæ_‹’·Jžl\Ø[s>}¦4hBŽp“§ö¶4µ*ý)œ‘êN:ñUë§ îVTwh¥4{T©ýÖ¡qFÛ¿Ö(ù·Œ^»ÑhÒ~÷r÷¹}—¶7áîH뮌â‘ÎVV|­á8^³ž“¹>žÌ8yl9xÄ —§‡˜‹’H~ýæeËB×åþ­î¹ï¹g;œ´Z¦l \SC‡Ô´÷TË Üf/Y fn‘d|ó!1¢ç|Ô¸‚¸Þ¾çtœjÉgâ]CíâfA»ÓgqÉ+#¿ÏO;b ðJÜ%g´ˆï˜oˆPOëcI¥Y{j5ìe~ú@ÔºhzrÂüUh—œo¿ê¡W5¯»D÷ùif_sëˆÐnNHOH£¦µ°ÞÕaÈ“£Céî›u*½«Ú‘Õ¯¿Íg}FÆ;k÷•—šýs ßÆëDÇ߉zKÞìδJzÑßᔬ­Û€¦Ö³×2KN|›¬·tуwU–€®ùÛ ©ã*žg-'ï.ýPaÛ €=m!Å–uc­žwWð“ǘ#B àŸ ÛÈ%י߇^~¸Š@Eã5‰¿^ÁË÷ƒ–ò®o:È!ŒŠWüfNyß9°”=¶»óý ò髿Z;-ŸÎμè:nݳœ^o“:Œ>? €Y1¹Ÿ“Uv£‡l& &€+ì˜dtë>úÅ>422eLçåǃn9+j~&T¡<¸ÖÃ’!™°ƒ¼´¯*ðšß6ÿ-ÿ{¡ÿ=®´%ýâðï7°bô!÷4š-cÎΔý{½5åÌÐ*Æ[M$*EÖטµÿ½º¸ÛŸëZViI•©ÕØý—é’²ò‚ìZ¶ w^åz½hnYmuIIÇõ*zWö)Ö¹¯¡§I3U чƉoÅ@äOAŠ×CU=R¶©LÚÅ\HÑ„ ª ®ö7ç§|Ééþ8³h@ìíØÑ7SliøúfÕ¡âG![™· ðå(É(ÿÙ–­ˆ‹Çäí«‡Ÿíbl®?oSᥭó^'=;5ÉÄÞóÊáLøkž ²”BÎooæ¢T‹ Ê<@»:ú. ÿ¨{¯u´Î6p›òÌCÙ5e¾•´¯¶êüŒíŽ~ãÒ¨ç„Ö°áõýSJá¥àT‘x©ÑOÙP£þÔ(iÆçÑ\(*¡|+ê-VŠôTŒòM >¾”p¹ÔHvÍ”X©º ÁË8¸òßÚÛœ•ößçt¤O×Vµ}üvûS‰LÛ7·…œƒ‚d½QÖ¹š“÷:íöÆäSIÍBú¸m|ø< 3áwæFì~|³?]LØ4 ±Ÿ 8+Ž>[²ô¬»-íz3‚ÒoüƒØ$4e ÎzKDK°^Uy|ÛÎùþ:P¦e…ÒŸºÊ#}«Nut(‰š‚+£ ôAS ÀÚP øUrtÛüß„ÃJò_Jªƒ^ïdPtøôBÎÔRÚÎüíê¾ñ‰ØöÂ箫þw)ûþ hØ3]¼þÙüTsfý­ŸùUk*/°|.›_ç;òÔÙ«LÀ·™wŽòõ0}Ýïqíž7¿8àåÓÊÕ´?®â³¶¤³2iœ¥y–cŸôHjÃÛÂäJǧ8e_mòø¢œíY³ŽTfg³àÌ´©½|-ü3QÁe¡8eêëñ×í]¹•·@¼Ô­N}IŽžlYŽº¯B†r_êæ{ÜÄÈË:Ÿ¸KIï¯?YȶQ|BlÓcîó‹ò€l©$WF©`¬,½`N˧H^ýTH»P{˜*µä†ztŒÞaQ6ÇSW)Údâð¸ïpo‚ýXÈÌßä(êç4´jò% h’óò(£ƒí窩ûZẏ!ÿô„ë“E $?×NU U¹÷[È&¥Cœ “A”©Á,¿$C“Ü3¾Ð: b#tîûª³>òõy¸‰ë°‰4KfuõJ}ËÀFM7ëkÆñLWÛ¦® Ä»úàYAm)/-Fz|A+ßFOT87Òl=ät^LH:ÕÑ¿vÛΩý*™Š Åí'yw&]0ŵ~p±[s®t.ï2§™ôp¨žËðÐñÙ°•–T©LzgÙL­iN¨m© ÁõE‘±‰ò¨ItV%¯ÊßFÒtõüe…ÌDžòŸ¾ðHJëÚ«Ìðvkz| ÐkÒõuïHªWî=!™Ý™¥2—µxn'¬ÀEöæAÝgZLNåêS땪 1Žðƒ^aLáéÞ^ ýç^ÖÈV»€kÓê[¾£ÕøžA”ÏL¿:ð§µç~¯X ×D~>üÉ’õRiÖòå·º¯YÜÞ›µ÷ÖcÞ(~‘De뉜äæV†FÏ*2+J„c­>á_W÷îÆ³BŒÛ´ÇgfGßÌÔÒûÅ;¨g>š_WÂÚOÙ°'hˇշ›Âhd–i$s»ß§™…È*d!º~±xópoC`ñm/¯øD…ÏœgŒ0;‹=œö/:¯î¼¾{îA(Õâë*@eSqü">MÔýãÚzÚïV×¢„ÿh>‰¸~f’åÛ.$LPâ»þwE·4µz!ÝW@r¢Ú6Âwyös ÿ;ïÕT»­ GQQQ"MA@D@º MAPPzQ©Ò‹‘Tzï݈4¥G ¡(BQiR$©!AHB ÿ ~{ïoï}ξ÷œÿœqÿñŸ»CÖZoŸó™Ïœï›dZ÷3Yùô îoÿ9<»ý ÐÎ{ÿÝIÌ5òzòº€€@}80“ìk¬D¥ö)H ²Y¹z08#›&ƒÛSt|hTÞ"ø*w„wëý½ø«ÏÍüCE«äk‡¯î5¿ü¢ “{q÷œPH ŠÛØÇ=l ×_…øØ R ¯c¾QÀfŒ†Íç>Û:`­?“GÔ“¤N?;T¹÷”B…i¿4±W{ù¼m>9k·Ô½ôØýâЉeDŸgó/G`v¼²k¯Ì ·(Òd×d$»H±Ü¥OjCÖݺÚ~À´×ðaÝÊQ„2$š³ðK1„ëäá“\&%MVG0øÉ}§Ÿ?)ÚAž’©¥E"éÙ„ÍÕákPòŸþw»9¾»bÀL:œÀ0^ª-9 8ŒIMçÐfý CW Zëæ§.‹ÛæÝÊä×*wjøBèª ÄÒVzÕ·i‡š),¹šMLj]Ø~)¶ì¦ÿ‚ÈR³Dþ+p~Kß-¿s¿¶³³~YyHüÇ)[¶ÇÄS¿òÓŸBÚ'“5` r¬lÿ"8â4½¢=Lu»Ñƒˆ)2†1ÕKùLVÃV‡Õ”k»‘=ô÷àØ°íy…è´ß¿(þù“°•öó¡,ÊïŽÄ?’Énÿ¤ó¯ %6Íåsaý¤Súüõd²ÇjˆM3à ¬Éž)¼_‰Ìßî`žó1(D&±z›¡ýÚ½ÝÕë3RφåÚíè~Tˆ"¸vŒ¦ÚùØd_äÝ^öÊ­v²b¿Je…¹…ŠR©¥…EÝl3ƒÓÊ¢áðÌpùÈ4­¤‚îŸ@Y!§ÛµLã–_×Ùîþ‰Ùóô~ÓÑÀZ¼ÞùøC•S?×Èæ^¶U=WتWfp“´¥ØdWò³4»KqÖ~£=Ÿ ðÃÂÝÔÎV`õó :rqDRmÅÈ£ï‡ãŠKN‘yNú¥èÊG`ž»¤.¯ª!/Òó°×,t.wåû%Rű‡' U‹d^q…Ò…Ö)„Ù9rø‹;¦Á\8ž$ºúé2mš:…¨ö ¢I|iXÚžÝiåóùæ â‹Cú£ÕЗ¤OkˆBNÍé]Ÿ°žÍ‰‚Þ‰«4ïÝ21Š’È lV¥ãñªç6JÚ+iâ¯ü2ÌW¸O?sþ¼Å ;î@;¨øG° ŸñüSN5YíäQODúLÿO)ú£„IÕMdeRÁeøÅ·4eQDÝ’õL•ÿ½§O¦ƒÒsýÌæF¯qªìz%mä ¢móóg %XÚ&¸â`ðÚ™‹eÏ(+N›®ÿÌ4ŽtZÓp ùqhtªúÔ¾ü[êžBú¡«.ß:ÈŠ®é"´ïŸ^TÊ©Þ'*÷dïÙc˜æ»¢Þ:‰ ߤRcß1N.Ö ¹ ÊÊ0]ƒª».V›Ù> 5Ùç)š!@«p»¯íOíËþjí`F“±¶æ:TjmQux<}ÈÝ"Ž ü·´¨TfÞ°EëŠï‘ÙrV/øèë•äšd¼HÜz~Etn¾'ÄD¬ƒsë±ÛÞÖhœÁœaW‹¤™øì. Õ}E«{ÉLFÖÐq¾®Vunt_;È#t¼l-ö­|„ºL¢|"0Ìëçß(JbRla=¨<øg³Oâ$já@­ü>­f¥¦_Ç9/-¼s¥í{tÓð3îÐÕ_ÎX‰P+s:Nèqëm=t¾[Õ3ž†¥Oh`KysÈÃŒ¹ƒfÌI_#2·—‹%æ›ò0ví6…±,SíºÂƒI—_·öǬ³Ï<ÇèâY žä†â=ziö|¸¥~®&ó^LzŸ®Ôƃ|=Îóùp-ÁÔyÄú<‚|è,þ•¨Â7œ¡Ʋ)laËðÜpyfªdþ½*þŸ‰ï ƒ`•$Þ‹×!)'bÛo–hyH"; u§&¯1G»!ótÒS3¤#^•€Öp¨óÞŠâß¶àï±L˜Õ™ŸÐ%zyÃùàHØÉ¡ÅÐÀ«Pöߤ”4D :ŽïÇDZR-}ÖyßΩYH™<±=Ð[Õýñ¿sX?Ûæ¥Ïüùy(Q (`uª%ŒKð8WTcáÝN£ ”ˆ¿¼Œ¡+£^âT X5Ëy³–ÿÌpÁáÉÝ7جgoŽ`Q>Úm£0Ÿ XÜ ñÈYh,j·Ù¶pC¬g±h]®é/F¹Ì:Œb“k»ž]Õk!QÔþ,X»à}±6Õ"2üôË.oã-_›¿Ápçç¯{š]"dˆ’ªia¢˜1´ì'%‹O”¢¢úBÅás’ì–å —À;œâŸírÚ~ÊrpÀ‚q·RýªLo´…‹€ð`)¡üƒV¸u¤ôgÿé’Ŧ/dTä"Š¡ò+æRÖ^”Ó6¼˜ç5fuvRŸ³îúµLçڎÜs—ùXT0€OöÉŽ}ˆ{wÎyé!¶o£4Õbç÷^ ʵçç(e¥ŽìØ@;0°ýö]Åû? ˆoø¼õíÐ2l éÎ÷¿ã=kÊ¡4öë½¶µä0µP2øêç‡ö.ý·?/ybtCåS7vaŒ6aç‹úcêõßùéÈ ßò›¸K.Û oJ¶õ·§fæ‚ydB©´Í¡íÞ/ƒQj>Œ»ÇÄùl]_|u;o´«ÌZ(òb,TÚì„›šÒ³Ñ FrhųãÏJž…kzÕ¸¹Ó>®n¯Ã%‚‚ð^ÞO·)4l'¯Kž†µ* TuÜ™ÒÈ4Œ’õSÅc WN;–¹½­äÛb^X躊_ÄA²-' k÷Áô`°“*o‡Î0‰¡½ÛEà»fûÎ0‚p1 ©질Ƥ#ÁÁ >Ð|æ©  Á¶‰SåÄ}õ¹py—mG9)°´æmm‹Ôo4v¯2¬Ü§?¢5èrzÌí4VjÍvWöM?·î?ú™#ôÛµ½(¸YäñCq¥¡*½°%h£ÁgïÊŽbØá>œŸÜï/?ÈŸ•ý=L’4™Uí–{íâžH±îvLl²°?HìŸ3@–ÁK½•¥Ê•L¡}cŽåÓÊ•QÄ\À ÞhŒ~&ŸðöQÖÖª°}u™° &ý†ú¡¡áRkyuúGÚ±æ$œâßS÷¡fçô¤ÊéÝêÄ÷)\ƒÉ¨`÷g~j \ŸdÚ¤Ç䲡h ]\+.,‹šjySgw¢ØÝáĨä¯KhiÛêýmoS²›m[]¯šßB~—Eâãåë“!XgÕ5!Ì_îM8Oÿ6n…?Ò—xÍlç†Ön†n{§ó!Øp^LÌû¸Œ•¥ô·Ä°»sDð¼áa hÁ•X½o´`ïtuú¤Mê½ Ëw—×Ë ®r,‘¯ß.¸jy.<Ò\™žIuζŸ œ…ÃQf•mäY ”ÇŠ€å4ÓÒÃz§æøF¹ÔÀR„¦û·ëkim»ó(¤šÑÐø-ÚÇ'MÌÏKϽ¹ÝJëNHÇéM%Õ•ŽEOUÆ{Æ÷ ˜4:ðL‡øñ:xô•$Qފ״宷¢•Àp³¢·”ßpËcou+!åæƒÞ"ã'”[nzËó×5KyKŽŸ¬kq÷ÞU4íW¯¾¢:cP/¿Ú0ãQ¯ºò4pÆ;çWV˵M›f€#ا[ö F…OOìŒÔ™þpÀ ÃŽxQMаùñŒ¯a‹1QAM ¯Yžx>ç雥¼°¹HØ&Džxµq¯L»ÞªQã™I¯ã6‘¦Óƒm¢‡§×ØÀ»ó£ Ûøˆó”9±Ê±B´ctÿƒÑa?VÝJ>j{›à·6Ä{ Ú>œÁj‡Az¸ò—'<ƒ§Úùf¥?|M&ËÃøÛ°—eAŽ×µ_¡æ|¿­›äýØÚ¡ÆDHÇOÏyyÑl?ÖN팕ý@̈ZA~¤ß>R—¬Ú;ûF…¯|ZfÍ×ב% Æ<æ L@2~`5ê: ï¹%N;=uä#dì¾è{Ü¢²RÇDb~nõ“‘ £%2¥h@ÝXù’ãÜwžÏNÓUDŠT,d"ó™g:š(J1‚ò"øç¦$WS)ç Šˆ=¶ÑÊØÅÕuʨb&Ƴ¥nflõ8TÁ†‰$´úcW›(`¨ ¤!ÔÊ…ÕY} 9ùB¨-+¾š :ù4¿Õë´ZEQ¡«õ–)öõËLñ è‡a¼ÈPÛ/ «®”Ç|„Ï)eï„/žÓuDUŠ5]&¢ñYh:ž(N1¦ó2ù m´ÄVÚº(sp,²3FQ¥«3wlE·j`¯Qxè’̃[q\XÕ|Š t×VìVËÖÌÖêmè¾Ý[kÊYáõ‡¤c¢§^×ÿ*ëù¥ã%§¢ê—Ç”L½¯?Yç:•U¼ÿvk/Óñƒþê^†ãäö /Ûq.rÛêeµ½\í×Vo©àêYÕUÛßnçuI0ºcš°3/B|°?/ªhz>`O^¤Óôþ/UD~5ž¾¶5âΜHž­Y›Ðô‡›§U«7÷W´»®Z4rVtð­JPî@ONFv8M¹5îËìkuÂú®Â)jP0d!ÓʃÕ[- ÈAUz[L§$‰w).ЃˆãžíÃӋămè/&ÔóKÝ´ÅÊŽ8‚yNh'Oƒ(0:vHã™P{ü”Ѥñ Æ ¡Ã)q¢_#›Æóüö¾)'¢/’½¶ÊAÑj<‚|fÛ^1eJ”¦Ÿ„ ÚWù(7ùÛ‰–w:'ŒŽéšâ"êPìèû˜Gƒ_htÐVaôÝàägÛé ¢2Åz(8Ù¡1%D4¤8A÷n…ANcˆ÷éìÌ#[Ïã§D Š-]_€g‘§y·÷i«<-ZÞ²VüéÍ¢ÞV'Ó[¼U¬M›y‹þ—yüzå•0Ú ¬^C0„}æJÀÁÐð™ûŸêÌÜP ë'š©qÆwYÕTÛgØn¼zGí a‡üª¾‡ÓÔټع)x€`^<Ï”~ã!™ÖhâáÆ£2mhâþœç¦3wm†g¨O†¶Íô¯jC/Ùœ°7)úÐã`¾ü°¾/sÓkÄÝ”«PnÄ ÛP™/éÓhoNÄNÛÈŠVS¬ëjM€<‚Ó6Þ³Yy&{µ‡r*‰88O¬êj.EªŒ`ÇDÚÈXöÕ0ÊiúØ.¨ºwŠ,ý"l§FdV€"AW€íшÎoëÃZå„Û6ËÌäRDér°ÝÈ(ÿéáÕÅåÉ0L³ç̉ÉhL«'Öµ¢N3AÁ­BXÃÕ"Š<]e2œŒ•YýO9ÍÅoº8Ù†Á ­ÆSÄéòàgÁ-ÈÌ*rɶ¹Õª³Š¡Ñe˜\B_:>ÄÅ*Ïÿ_ÃüÿaJþŸ2Ìj³µXôÏ<޶ f¦•-¼>ù’ˆÊl/ò8i:wÒ´çÄÖ.§… ôЊ}¢jvtdD„®œ€ 9Fww3~p[paaa#Øø3(Rƒ4Ä{FDëž¿˜w´È´oðƒ»Î=2#7Sauˆ›·ƒøöbÓ“òîªß})ß0f\ãy/uƒeHÄF°š4·÷FÄÌK[NÏŽ–àG=‰Z›+Å3ñfšºqâU[I ýŸ”?YÏ!û©Ç·Jc‚[¥`>Ž3mæÄ/úQ–AÁõÂßCMA¤WE~T³Ë‡‰GÐÏhAt%ª‘~åp_ÏOÂSŽ‹Rkâ2 …2Z]ÑŒ& QÞwŒøIèÐOøf$_qЫ{aÌ­1U›'—汃‘7趆—”<Ööq)´ÀÔMÕð±w†¿ÈŽ2ÎAj¼v_ûCLrÞý¤0ü7Ýé+³ñ$bÃa)˜ÇS&xX(M×þ¦dÃWvþÒ©&·8訑ù3ð&º"ÕêâÕK[MJ6É›(ëÔàãK„§hš°ýFr³¸fÛY¦‘HËs#N¬“Ód5M†Z½¿ÐØŠÁTþü’Í9-° ,cä·DH%ª,- O™yŠsµÌ£¹Ï×È>­-"ê¸FïR96Ów»Zóq[ƒnñG¤i%R™«©à‹3 ONkÑà¶\9÷ý”Ûq_ÕM™j-ʯ@[hk¾b4Ý`­¼­›Êv92”ïFÜ ÖÀ Y»ß~hDgÅÓ¯ÛdzÊ#i¸èÏ/MOAkFtMù †}t¾{°gr LìÇ>Ys¢Qzį¯ˆB+"îðÑ¿l®å÷ø]ð'u,8†gѬ²=1™t¬k²/Øw ‰Ð=B \ߤ}îF=ªÉÜÿdØŽÒ=×´ ({«œ)}Í ¡ ¬ŠHÙ¨éý¢L†V%©gXk¾åã7Œê/™sùQ+Âvz£¥©ùvàëÏ{—`C†BnDDħÌÞnš&Pæ†Û [lð´+fú7~lhëËl¼áþÓ|}’ÏL_óÌÕ·çÄ;ÚÓT’·’Ìœ,®\áêÙ„ÞrMÎûE`ÓËs,Pû¡û¬úsÁ¾(à]ͨûæ÷à$Y•}epŠø\à &šßÌ[mDóŒãN•ò4Jò”9Ç®Ùyé] ‰$ A’þ,¸Af7á7TâŽÌÄåšóªúákÊþd^~÷Z`1A—þ.ùäDúÛóšIÀr†{_ïºz†j t£ÇýÝVQ„/ží÷ÊJké:Qƒf®õçNœî¨?zZGN34ÈZ¾àÇ=«ÎƸ>Ô·†ÕY”™” ŽzKMbÚ2X… ²kPKh¯††Œ°‘ Ðõw±Z{ÁÞb3˜!LéåÄ`´Û‡‰ž¨ˆÇžŽö´ÎÂd~Ô/„¤» ÜF´Ö¡‹´¨ç-éDºðg@F? ——D÷¨ai£;Ú6k£ŒŒŽ8À»ÖM ~s#£©L È¿îAÂPÏé«C<‚»§©ûá\¶øÏ`†LÛÞÆ%£:,*n«8ðì0ž\j’÷éò½Í$aáÔ3Š»Û»WéÍÍ‹õ—ÔRÎ"ëÈ6~ø¥v4QW·ÇûKX<£)æŽ2Ü6e£uF “Ô$Ófÿ¹Œ1fe_£òQ›ÛšoŸØãëCyp‹äÃF¯é“¾j\ZgˆŸêÈôIW=È'ÚEPïX»¥ LÎÏiA±»9g\T|Ö°G$¡6RX¯f(Kj²s€Øt/ü˥ʵïè;ù+„{‚xïå2v³dŠs-eU±%ý–Ь„{24X ˜o¤·ÄÕ¹˜6¾@o ²H]sRà9sÛÐEqø{ŽAL™[{ %e™ÂÂAb¼é;ÃŒÐÖÓ‰R®Ý)Océ6®þJUâ–€Ë;Zì-áÓÕ£Y¼ø‚Ê 'MÎî­÷n¤®6Õ|Û÷¶½ 4'OÑÞ!6 |iæ ÛG<¹×„àf›·,,wÆþKAè°`ô#(¶ûÃíIú¤ÏqQòñd)JÞ·ÁoA[mLËþDg”^ñ1ÿnýÜùËÊn)—ErZsfÄž'IѸ#ôŠáb듲E´k©6@/6}²™z–E¯NìÒÓ³zßcˆn}*™9¹þÍÆ{j–œç9äk©ùâ`ð–:K Zšo÷2ŸöÛÂJ<þoJ›Åçâ±½PCZ²¤î²\¿ñ>ÜD×ÚÕ~3Çʃm¹ÛüÜaäø/‘¸VQ •sþ€åèJÏ’ÿ YÓ3»ï“>Á¹¬4ßî»ÊPÌñ«z{ À*ªäíÆÏ´±§ IòÀøú.qæ¼°Òˆ·€Ò†ú¢ ``Ÿ¯1O¿4Ô2‚œ‹ía\þ«i®´é¶CÜÅ si×ú½†¹Gí>Ü9…ÇìÙ¸Ñ/jÇ´Þ’Ü®jõ–ж­ Ü ŒÃŸ›{>ærœ$3Ía…=¿U¾ °‰è]§3˜}†®QKæzŒäëiIÐw§n`å©,~ݶu;«¨ÿ ©gÑäšYå6í¿-}Úº´øs»Ãî€ðÎFéªm¿ôˆæ‚ų–¾êÏ¿kÖ°û¡««”|›Ž¤°\7KtÒr2UÛ ¥Çß¼I+?{æ©RcäɾÒcÝ45tyÉÈ׊x\(#Yµ½ëåY@M¹t'u‘ÈpåÔM¹Áª;šç.»ÄI ºìyÅäeX_Ö‘ [ú—"§âˆ;!¥üÃ7£eHÌ ®¢’i“·V†’¦'úï Mâ\%ËÂyürø•ndaŒ ¾Œày%…Äå¿<®Gä̸¦'.$Ÿü¨n­µ­kÒ¦ýB÷“öÙŠ«OZ|gÐ 0öä Üö®†µt#I ^àû÷eÞ™0瀭À° ùËvf8Áâã£û¬»É|»¢ÿÜÃ14¡fײÇ€¼þ*q–{M·ASN¾Virø8 sKw"`a§°0^˜7ݨ£:ÔV4ùqæGÑ5­HR`ýØ¥ 5Óä:–û»ȶÃÎŽ8è’¢Žæ€ ¼ìOX\±cSrsd-0±ª“)-œ˜œŠ²Šâ:Ÿ3ž5<H2”pPô¡¹Øjíí}îÄXK8µ©ñäíò±bO—­zm²àÎ{àQaáH:Õ6)c‘B þÿ àýKCžE¸”§¤ÿ5Àtªøçv)ÂHjXø„Ì)a£»@Ï€ m¾+JzNX$“ý¶ïª1H»&†pá†õ©ÖòaÖ¡pìãÐ'¹ªŽë œ1îÐfï>ý*†ª^Æ“?2dQ\ íeÕõ©¤3G¾|ÖæY’ZÔëV‚ÌÆh½]Ú5¹Ò½L˜v0’y}É‘“m°—P\â”àNôIìö^¶¹gxüEæé-€Þûž,НØ-ì1æÑätS6Ô¤G¤ç]*r€­œh¹á Ø„¡Ã9ƒ3†ÜÅ'¾`‚=3GV´ ú¿®ÞJ£Û°“j*Zo¥Ò¡î°zŽ=9õ%EÒ¿ÅÈd>ûC)ò¢ðÛ%@Üš>ÿµ¾ýíjSÚË ©ˆˆ;\ÕKÀ)W^[»”ìþ6Û¸úÉç«O##Râì­öÇG¡/¸NgÊ*Óï$¡*öï$GE܉)å7…žï9ùÔ¸ãnxÿý—KÔ&›óŠf¥¥gå%ŠÜ©"ÙbÉäÝ»ŽÂ³±ØNYwl¬“¡Ë{}¶¾´•©EÒýÙv©‚·_ÓÁƒ>QºwQ›t(e]J­¡îëNÙñ7‰þÿ„jß¹Ö°mäCq®+h«Â+ìЩúžNdíŒþÜN×:Ì=+ÌÍò=Îk R6š3-tÁÓ€™clŽ2¼iV>u&}Ÿ›‰æÛÆn4óÓò@ˇÎ$sÚ~®ÖïÊ€4UPýç!ªëº,oq㌯•OŠäÅ€N{j±õ£N]y˜1—~sK]Ä¥u b:—˜…ŠI(Þê¶SK»T¾‘Y9G¶ «€YWv©ž’Ùð‰¤ P/W#ûÑ‹ ýB3þ¼Ü‰¤ÃÞZ•~‰L0ÑFK¸DQ†@õöFõºŸºÛëÇõ¦B“‰¿Âî‡Í@Î ße1Ÿ¿‰rŸEiÙó†' ïàßA'©óŸåÿ-‡^¬3œxÌ „Q°ø¤.ܶK?>»ÍÙžTÁ×i„óºŒÊ°RÏ˺€ß‰ÓÔ¼Ña¶1ì^÷º¸íúxRà¾ø:õÀ F1ÀR¼dVÜI“ãƒZš7tä:b> zã^·i§’}P¥™¥8.û0ÁB>]€wÙ¸0è¥û¥³Ë•X\áÄ•4º ð¬ÁJ÷L û,@,—ãÐ7ñOe¿2ÁݲÉûô qº^Á[Dû¬néî×Wo©M[@WÜïvP¦;Íy®F/éž\ ¼ÂâƒF mÛ1H çN1}Âï8áÀŸ¥øOàM8ÝG0ÙöHªåp6V9Þ¡›.(Ôs\ȦånÄþKÐn/ÄY‰ÈòRÜ3p(R·ò›Ìâ“–4ú£Ý1¸Û<ÉÕÕ$\ÎÀ˜°ð1À‘Û>î³VVÑ “.¦ÈÍ’g´##ŽPÕé`Gô§Ý^jŒçå z ð  Ÿh9¡¶è㜈~«M¹rÿŸHt®Uø­&‹D/µýo›=Wv kC,gßýÛîç¤gi,Ù~ù—=Ã4•yJhjŠÐƒZ›¶ÈD;cõ} |²aÈnÖnOfSå D“rJ?K9j)ã=74€€²˜¯¾°WzÑl×WãìXþòN^)úãÌ&€1JxÆõE{Oë,fq``"G:½'VjËÛUO‘3¬_ÈS6Bþ'OK^îv*,õ}  3ÇþK°¢;ÃýS/Søu°ÎmÍsÛ›$€]VzšöYÛ$À óž™ãÉÁŠmUá)m´sîÄ•ëíÍ!ÉŠÄ”³C´´%ø}ësÉÚíô¢põG¶Î#ŠgTsÏï zÂ×G§ªTez7?~Ûµ -{H›4•§ŽaÚtG¦##±þ‹é+rì§òãÜ‚ —¨êŸŽ‡Œ›Ë ŠCÿRË$-gÄÃ)32´WÂX‡ÕúKswZ•dN\té`¥þ”¾‡øã3áâ@ðô”??Ѩ£wÂÒs.õò½û™ÂÀ2ÃÃ{mrŸxDw¾ÿ0XhÏvÑ€±²«Abƒ¦fa àq­.twà"6&ßÉ]¸Ë^1ô¶‚×øÒÿ‚‹¨/¢¡ÿ±=ìò}ߊlÖ1L ä÷&vüËö~ ñ_÷˜’SÓRÉ¡Êãï É‰Á¼6šïoÊIےΕw];bc½M:½î˜ îÈäË@Ì`WWÍöö-U}ý9k£x&àJÓcr«†:£`ãrú$^¯KXfëôìTG àÖ†¿sØT{ŽÜ›ªýõô;žŒ+þAêKû²É:¢è¢Èú9Ð,狦›Àv˜ÙÜ JD8éÛõ”úE&­ö±ùÝí¹Hç© ï6ÏÉÏ/$–ÊÂöÛÌß>øïÙP9ÁÈÑ(Ý;ÀË3¤íÕ‰ Û¦H)9ä² }|ÛýðïãÚaŒPú¥{fßrf˜³ù, ’tð{Õ Rd‘<1˽G¹‹/«HäF§ªjøÛ÷N”þb®<™ù üßî-ö.Æ29××w†}à¹Mc­›RƒÁ­}bf¹ÌÉYòÀtuÞÆ“‹PŸ…õ=ÞµÀåHåqKæˆQ2úLvDTXöëÝÆð@­y]UûÜÂw_‹ÉG_Mu¤&×±Ý>+™ÊîÁn’žÇÒ×UJ꫈‰$ÌâÈDãÔ=>3õÅcW) øþ²ÇgQï%õrÿë௔p-³ÔøYþ_d1Ëi»<ª:8K ì/»½Iù×=°B-Û€”ÂðáÈ}ÇóXV,>­X~bçéãˆ.g“xWÄò%('»)nî‡I@ uà•T,øBű­D¯Ù+Š‚&¼ô¾Ž‡‹>v"â”*ítÃ(äBިƷÿæ ËÏ0ǵRH°Ähê÷k¬@¡/'-øÉhD„þ×púdK*}uå­ EŽ™`uÕRÈÔ#3³Qý˜|Á\Š$’§¥ ÓsÀmÉìù”)ÑTð„åœ,VÉ‘·¿oÿ{ΦþY~¬H¨ l/2¸Ö;‰}ìØÄ‰ Ò^°Î)X1—ÓÛÙzœÙɼäK{y¬ ( ß%·Ål9écv§÷}û:´ò6|»SÃz^Nþ“/0’5ªf¿My“~Çø]ðâˆ&`û3Ô&|ùx¢ÒÈŒoEÚžù$ÉûÔ„45GYa¦ÆZZ *y²ô–m_@ÏTøqŠ4rXUúöL&¥î%PÓ™dób™Í¡›ðS¨‘}ûl‰å¥ÞÊÓ}ïs}g…O_þC›%ÂC˜ÐóÌ7Û±i¡ÜkNú‰Ò rÀyyÔ,×Rgý9}öl™³jGwE\Zµû°ÏbÁµ†4H¼¯ÈŠj]ñ%TõV–2†ºLןÕ<¢=xŠZw4È;‚P‡p<“²”F¼ Îix³‡ …üœaâuÞ7¶ÍÝCô횪{l S”&‰T†¹DŽõ9 —D}‡»&®ZÒ*¾OS›ÜèúC¥¾:ßÄG½[šæâšÌ#ߦEËÛ öÛ i˜ª `‘׌³1–/Q–{cžÂßxø¼=HhÂ<Êÿ[ ͺŸÍ‘¡†^B²k@Yi°ÊÅ„b4¡Øµ`hü¶2œÑU-ÿr!ˆ¾&ñf·gãPF<¦,à€4®7cÆÿ¸ßcè’jï«å“ƦèTL8ò:.©°­&˜Œ‰^ú6qŒz¬†µÌX…ƒT‹º‡Ô_\`ñþmu]ÂQ'XÁž‰k‡â¸Ë˜;Q½û¯qŒºÛʺ +úæÎtÙÌg}¶cƒe=wÎ"B÷Ë…ÿ†‡$æy¤fÄXáfK¿ˆ°°¸{ûãÐ7CbM só@}À-¯‘{òÞÚ^ßø"꾨ñ»ô|ÒŒq»–šÖø¦Î¶nõ$\ëÓž¨]WŠ}Òúî.› Ë¥ÁžF& eE+Œ J›¯–_N–Býx8KÏ 3ì}\9˜“o'`w˜‚A? 5âºM¦@ ’õ”Lž(ŸH^\»Þ*%ñÁÄa3ä½þ9,Æ=YPž@Û8† -žžE¬÷O bj¬1ó>áKïî¼®Nt¹¢©¹çË=Z © jÉP_N¾Y„f 2ôölä50ÆuŽþl…ÞId šô·ÙvL°u3ܳµê‰à!\„O¼WÒ@}i]n(Uýa½`¡•à¦%`Éx™|Þ{Á†Jø§[±Y¥í¦F£Ë„§wGGøiw£òŸ†2ÀLxÚÓ@¿Ü ì8@ß}9òÃVT„¦Þü& €Üw·­,%¤<§¶žSØh¿‹ûÀñpóÂö¬3äEÈ=¦P/qs'.Üg½.‚œ¿=$[ú.°Ï.³VðFé¤ÈbÎÝH]›|C÷•íª‡7™•ð1šn<˯8òOü~˜&o£!^b“É ·ÖöSâ¼Xµìþ\9qC£S/õæ=e‚_ríªêšâ6ÈŸ†€.½Ѧ­©z'³>tUð“p$¹ÕÔâ•Ð öœÜ^öÑ·ULĸz„5¹iµ›4]ß,%ð `EîúÖJ:n@Æ+¸¾©Š‰3ôuŒ‹ëåW™ýj§][Gy(‚V¿bG$s¾EŠ“ǜίOÿòã Ócÿ¶e·÷Â'‰ÅqΊïumG;%ò0âY´ÎîÄùþ¢ äÈf÷¸&(CÅÇí×£Âu[OûYg¬”iFΦv ÓàD2¾c#ñc¶Næì¸Ú I¡›èy‘þ=ã˜ä7ξ½Ÿé‘m?—®»BίYú Ä%-î¼:´ìá7\YÑ,mq|/F7hò’êTi'ý‘Q|‘8­gÂzA^BXîØÑ&°Æä¸Ž“’4ºïá/²ÊazN{Žö»Šþâ µ¡ ³€ÙŸXÓù*b\ ÅquùŸFp+Ÿ0¦S§mÕ™vºQü*+ŽYUЇ ü@Çäö>IÎOŸ(äSS9¸)äžsRÚ„ÅvÃL›F0¾¨Ps’7h‘0=™Rc¯L“ú[…»W£…nt0šÐM<óuL1ÐÇþ 2K(£ÒýŽÝW$1€°²Œ±›PydÃJíæAËÖg7½ð‹œžpWüwú+£/“õ™ò®®_+Ÿ7Ÿq!Li·B>a*"t¥¿ÐhÕÚNB¹*á{{ìîV¿‰$AËG\ «×ƒ…æææf×߬tüÀm+g[7^Ÿ”ž,{BùZ¹q—`ÎË”=NÙßCÁ±‡¿DÑ‚ž3Úø-[G§“â9ž1BÑ‚7ÏnŽcÚÖÆDýUkª9ôØlq:ëÑÜâáGŒ?ªr'Î]&ÄbÜ… âû>Á†œ±2c1>vMëÃ|}„õÑj•X®ÀRpd^yÇ,†ºjëflB+øä3FSv,PfpvÃw=ˆÑ3¤ØÄIÓù™ßlN0ÓÔCp ­d¿1+ÔôGnÏùzœ¶Á ,ãñ|>ç¡¿œÞ€^ 9§L‡µìiÀèÐr> “ox®(V€ˆ¼×ïüKs}–}ÞÌÎËU%ΰosˆpQ.!7óŽk|ðX7Ö!ûmX:ÄÚåa!E—ôÙ&ˆâ7e„x´ó&6ØÆX?™þ3Û]½îÿó›äÊi4Íô Å`qzŽdê\Âb]Ë_ïu±ÀD4íNX5…E_ënÓÏwîɹÑT«r~_]UŽ=Y6!O5„Å·¯"€C~XÛM£˜+8à:Ú§€ÏFp–é©] 5‚}?‘™í ÞoTF0¹7dÕ™ÔïW„^$'ï.œ ä0r ¦ön|·*¹,”­t5¸BÃ(øgK¸àÉŠžY0üË« Ð0'牢lÆWåèàÞ² ¼ê˜žo™0#wL‹ÐpúE|(ÜiXMA1ÔUžäõof?Y“In”l´OT?n+ùÁ«…ý0˜$줷"ÈÎÿÚ’œ¹y¨UgpåP U{ÚT=Þ©ž1.~æC0±3ÆAFs7mĹ~‘›×ëäуUó„7ýÚïÖ¿‰ÙGËüÀ°Ù=¾7Þ;zuÈ‘c嬫g<}·rFCziUÁD_藍åØÃE‰¬×»£ø •ûœÈá ,ÉÜ!¼F)ýgæû •„Ž3ÁØÞ7¾³Ý™&®µëpÿn—M”„È»G¢§}1"¸@8Û¢ 2ã,ÿ1/š±^ß±ø10ÝwiT*%ÕVvL9Í\csmYÙœ:oIŸñ¯s‹Žf–S¼?´?6«p7¨¬yý·8²S©Cæ·¿%ÝSçÒù5ÉÜëQ¶Œ{жó™`’6Ùã<ãÛ‘á6=ìóƒ^yÄ#ݽ‚XŒÍŠß¦Ÿg~pËš“ÿÇÛ>Ç7 +=ŽOðn×Öh-ÉÌm]ÛPßx†åÊðdUpñË£Ûï;æÉ?Ÿ/œ._,_zË| l Ö[‚uÀ¦`C°myªL‚LŠL’LšL¢LjQg:*mÚiÚeŠ2Eww £†ÑÊÊ]Ê(et]g]WªíßéßåòG“;É]dÍÕÉÕÅ…âBÇwÆwÅ£âц†]†(Ct_çã°o‹¿ªH¾¤;Tu7U‹* É¢WÒ£èïÕ¬a7aÖ Nžž]ž(O4¡“ÐE@ÐBB]B(!t~g~—<Þ܇ú™6Gâ!¥“LIÃ$e’Õ’ªJ ¤²Su¨â8z=š^BϦ7ÐÃéEôt5S¦%S‡iÊ4ÌïKç;òœ“‰ÇÕÀǯÚèÛXÙ\õø{ðâjI•>ªð¦Æœñ+66+g+Nù'™¦¨¢%Q’è’Î’.k\9É…´@:é£ ¹ ‘‚74Ö6Æ5–7æ5"Ÿ6¾²:mÚ¥Ž‹ÅÅâoânâ{py¤YD" q…ðÁëÆu&MV$ÉÉuÉ4ôZµ“ '€ÏÅåâ­qOI§ Ô4'ïNÞœ´ž¼6i<©7i)xŽ B$ˆd„N 5E‰ROQïQQoA2 VR\é\é:À¿.üÜm’3$FÍDP<>]¼óþ:ÉžêL=A5£^¤PwÁµÁ·Á×Áæ`-ð]ðM°53úZMƒÖBã åÐ<(ÂJÒö”íYÛ3¶çm…mÏ&Ê$ˤW$T¤T$U¤U$V¤V$W¤{&x¦x&y¦y&z¦z&{¦)„$B!‘JH&¤ %¥% ¥ % ¥ % ¥ç'ä§ä'å§å'.âžPÍ©*÷ôFz(ý5=Ií&̦»›'CJ+wÊã”qÊø:\Þç'ãÈx.>7Äâ3Iç©òT_*U*Iu¥òAjéeô\z=Œþ†ž¬¦Ã4gj1ï2o2­™×˜ÆL½<É-©-‘-É-ñ¾ä94þ32‡ªœœ–Â}Á}Á‹âÒHI>’ðšÆ”ÆêƘqmIɺä14%€ÃããHû}Ä!ZðªÆ¤ÆÊƨÆ÷ãZ+ç*Ä*¤+Nû'§ '5 ]Ñ‹‹]‹¨E4_'_×1Ÿ‚ñk“º“f“š“w&õW$<¥ÉIu u)uIuiu‰è œ;á£Q…#›ÃÔ.OÞž¼>i>©%x–+‰} gŸÀMàÕqêø&\þ LB`$&ié©OªUWWW"Wj8*5Hò¢zAžAŸAߪoŠÆ§utÚá½IPµÛyg ÓâÓâãSã“ãÓ \qGðɸd¼1ÎßëÇo¡œ:ºœPNè¹Î¹®9Ôº†´›ôœ¤EúB%ŽRå¨>ÔýÔÔsTêIªõõ uU›*Fu¤§šP•¨~TNªUšêA¤ÚPÁTuõ õ4õ>•›z›*Kõ¦î£^§JPRyáåéù©ùÉE]}h™N™.T?.oŠ3ÅÏ“\I‹>aj×`×`Æ0=˜%LÆú~™-ó2óS—iÆÔdÞÉ“èKÒHÖHG& SIÈ4d¢Ó…AaÐ](_\>Þg‹Çà0x œ‰ƒ“0$ ’LRƒ ÆÍ~Í? ‚ŸÀXyœ–“‘–9]—’žb‰*Ãà ð8%Kˆ9o,hLm¬iŒ·\ñ”$§ÒPc(~/€ÛAŠ#zIÒ¤Ë53AaÂ9‚Ašpš A%Hq¥’É©ädr:WWJ . šý€¾SÓë—§…£ÃÑ"8à>‘t›tR­¦-(ŸÜ>‚‹$TB«¡1ÐRh´j%’6ÿ/L_û…äpR`‹ÄKÊ$™“FH*$8 B¢ú”AŸB_A¡¡‘Ðb5-„> qa„¸°@h#LÄÄmÄu„9B qqa¸†0Fè!,:S„!Âvv ¦ 3ƒiÂîÀôaV°«0#Ø ˜L»õ<ÕÊOµ¢ªQ¡pÄeÄ-„. ¡‰¸“'l+f+m{ÚVÂVÔVÊVÄVÒVÜVs sss#Œ9‡ÃHcNc$0¢)ŒF#Ž‘Ñ8¥qVãŒÆy asbÒ§5$4D5¤4D†Që¤ÿwžäDúO;økpºöÄÿUûÿ@µ‹ý_kÿŸ¨v“ñÿO¨ãó«ý¿Û¿“Ò&‹„'›JaA\ãÄPC¶óÁ>ŽTce´é\Z…¾g-Q^íIìqvK±~à› ºuÖ)2{¸;ûÜfÊ@r·¤p:ðç–`;ÜçÁjVxõÀÓ%ží~¦:ÒuúüÜhÊàÝìQìe¯_1“fuã‚Ø$Œ58¯.Ä{èèuÈóâ®­úú¢€tú$ÕhZbhU,ŽpÄnE¿OÄóÄ«‰7]ì&\SsúáœBíjDÓÁ™±æ°4©«¶ç%`qêH.e°Crúƒ,8ÌZVgÕœi†·â®pìx¹§E¸v &$N©ÕY<°ŽåkoœÊ8uNÿxUãV¹x“Ñø­ê’‡«òýñ2u‚X‹> 1º®”\‘!óÌ’oK;­¶ëTÙ/ðnÙ[›$ %‘\JLȯ;6«EÚQ¶s ˜a¢ýPu fk°ûMWPVͤ½–Ðd¦îóœÒ´þñCùÈ'Ú:«!°Ö€'A—¯Û'b³m:†ƒx (#$Úî:L‰;þ1p+ ý@ÍÙS)bv­C@ïÂõ×hYÅG ˜±«AN ÊLTý[ƒMÄÂÃŽ»…é\ž®Æ=x§(€=äFçY¤!b l@lZ OaÎO1qI§t/6m®G‘Pë±K kÆÊÄãô³c¾ojILN¯­518Hè½d2FÆ¢â€pbôâØ@Õ‰z@ÍOG5 ö¸Jß ºvN1™4J>Oê⛹ÐlžoãQŒ è‚0 Í¹³¥Ùt³‰“–>¶:$ë‹É†¶H:b>•Z\²úšnE¢LŸ©rÛ;{å½7™tA‚÷×ÍAP›bµVäA—ߦ¥£æý™˜ {²Ï¢šŠÕ95[ò€'Ð)`p}øûÝ„vÃ~àÅåM3RÃñ¼}ÀKø·L û²Æ åmù†òka>¨k±-• ŠíÌEi7ð½±Ö^ëÝï ¼êyÞÞæô ÝՔŕœÍÑðª^¿Ç×i—^>B¤r×ê7Ž Â#rbNÄ÷_ߣ¾/ «ªtL2ë•òè‹ ðîiÁ;›?¨7Õ2äFkv•'qÞ×ËLž¯ßŒë¬oˆÕ/z0©€Æ‰ÝèYÉÏáJÅXûu³¥çx¨ƒB¸{Îuظ7ºÛþŒÐË:;u¨&Ž Ä!óçéßÈ!Ô ‡µnuRGW»v8Ï!¹¤+{|¼Û`ª–îj+Ì©“Çs×äª÷ª•7å_$O·®ÑBýA?¿¨ eã) §¾Í©\ÄÇž5w)Áì8µ÷[¿«(ñô¦{Q#·¨žûº*h×é'OÊ΀5óç¦R”_ÛË1ì…ùã0öwÏ~Î×$Qå…OF$}©€ >ÝxiðºhøÆÌµ_NˆÈãñ›A ØŠèØaõ&“ÃB¯û|½ºønWþ*ð‹Íš"û_äêçºêeÑÒxëçwÿV/ƨ1H¬Á2Ö4¬Hýþs?‡¤rèqêʯ_סྠOMÔU'Hðï+­¬7pSýÝЇ+Ý5À|`(}÷‡ev™zX:¹ì ÖèÅïÝïcö¸=\Î9¯ÖOçVAÜ˪¨þªš­,íP)çS3X\ãõœô³unîMÝq®ÃŒ'@è­ Ù̵ë:‹j<Xö,cZˆî+6¬«ôÉÏG@Üàj“ä½Yøçdˆ¼…BBD'aòÒð›«Cˆ‹w1&Üš'¹mˆ·­W2š|¨á6@²÷‘!ççÆ,_Ñívãõò³G½ÎîèÞGØT¿#\k‹‘ܳà8¨tÙv†wpÅ«X@®B ±ñDuà•==Ã$AÇ`ÿ‚?©A2H¨²)oZåBˆƒÌ±Ž}MÓ•[?¾YÌÍÍY›x5 ZÊÿ–²§ìƒ¬Ï’±‘% ä+y6’‘\ÿ:rþ^è·l!ìÿ«Jglþ†‡Ü¢üË´Þ|;ìvé*våòvKù×б³_ØõWÚ^®þ¢¾úæÜ~ü.äEºên#ûâÿ£oð&HÛ_ªl…Áœeuª¦Jå×Þ|;Гbþ£‘S2œrÏ<ã¦oö\NÖšd<”(í.ïåuÍnž}ó%_™v—áñÛÃàJÐ~3b!Ò$½ÙYÙÞk§‘=ä”·æì!"ÇY¶öx¬xϸ‘‹zépÉÞGÈ­:ëè1„ÆFw†Ðx¼–£ã«*ëË_©gä…¤ –ÖTׇ9B´ßðZè=Ȉ{ ç7öˆôL¢$÷È›»øQV{€Êož×áhóA-;~$(-YÍÅ|Ð3WN½SÛt =a˦pÒ=9͆1¹x¢¯0³‹?p¿^ÓzfÂôBùÃüµ Õî’EÀ*ßÂq¿–òMNºOöP­ ¯ËsÑkÎ֞ƳÛÁ¯›“BiÒ µ³YÏqäñòH6^"Ûîüëoû]ƒÀÃêév]H.ýà(‡§gGäºÕ²†•wž7t»Š©¹i·–OtênøCö Ënè–z¿ @î냅“R—£ÿÀT&7~l¡óPÁ"äÿ½bEÿ„§É´ Î [vЃ“¯¤3$ÿÄoŽbज़®ú  þÏ_ þ ÕSǯ`ì ®ÿU%T ù³¤¿Å/õ°aî3v)·aÿ­ÓÆóƒ°]74ÛŸɶ‡Ïº\©=–8ûPÿ ˆ´åPɲý¤r>qÖü¼‡]Aú£ û»ãvÖSA Oî°’VMà1^³BElîqÇ œ~³©ó|@•”á ¹úvØœS2ýHÌ­±¨ˆ‚îb{Mœ¿ç;ŒTö‰Z«ì Ž_.ðÊKXÙÁãõûö›:1V*[)¢ +ò¹ ÔÄÛ ð£À­‰†1hÕµÀᇛst«`ž ä5ß¿£”9c|}û/öÞqïþÇfæ3aÞ–™W0²XÅfßÒ˜¢É/ó|:[÷¾ôÍ yd'ÒQƒ bB#õdèôFô~c=0ê•m®Þ:. îKai f:ô÷.¥ vSúŸ`‘®¤7³®ª¾}5ùc '/£'»Eü³Ÿ™ f‘ø¯Ò¿':6êá_>^Çç-ØŸkú$tÅÝu£@Êë >òª\¼€Ùžþ «ÆƒéÜÁ‘=ƒ•yÉ*€J&¡íÙužt›!¸Kþ1ŸIÜÜ‘ñvëî¾èoc¸¨7ÆNÉî%S XQk²)¬º±lñf£J¾h#èÙðH‰&«ˆæÛÅ{{;ÞpF¼k]qÚñ[SÈ/ÝdŒ|Á¿…—ÁØCNý'âÁ®”À00ܾþy{€Ñ›Ïð=0½ÿwÎÁÓ6œŒÙq/êï°ø€¢ÚßGBï0;šÃþW•Hï1E0‡fJÃ1w Øð°ì`¶±ƒË¥ÚHéÜZC\á|@añPïÏz¼vûê5m+mª˜ÿ“€4ÜãÔ º¿¶C@y¨ ŒÜõÔ?’&š»ãôͲC»£» Òâ'¢áILÏ;lªz¾ý#òSN¤\Q™¶AÖIå?¸pX­¤ûU],_,ÅX›œÐÂû÷e c_«#cbë¼áÀÖ™pærMý0Áí¤†8ÿ͵Þ츸ÞÐä’ýs? ˆTO™ÍŽ]‡­Î†ÔÆ×Õ” ©5}z»üõgáø˜8³#£µ&äåðŠ=w˜¼)­Ÿ|ICƒPÙ:èèÿ "€8óÚ‚È~3¡†ý%·€Ò;°%‹üëÿŸ+‰¢X0Ý“¥qé|;T؃Þ%ÿrQ Í"üûÝÈA} Ñ~~y“ðÉ‘F€=ÁØž±Žl®Ÿõû@'6¨ ²Š€IåÖ÷o—ûvèwÐ «%Æ%Vª†TþHOM?Ø|¦ýS³(R•YœL:œŸH2°û›‹ˆ ÞùîysÂΑ¦¼·QHþJ—j켪°(_¯¾^•üG¼×î?K6ÙÓ¼ààš±YãCå?íC>|š_Y s|RSä†]¯6¿Ó—ìßýgç`„\ØãsLYðÊ+Î’Zå½ûUï,þ‹^EýŽܬŠàbìGM5F9«mýìâ»ÍûP9B€³Õ[€Ñ× •]ÇðMAºqé^Ñ,<äþ§˜wž_•&¹åÞcÂæÈbîâ±9¼;õï—rX‘°ù—>î*OŠúÐb= }€øÒû`½ã~¡·}áïÀ.øwÞá|],8Ò¼fRí0–!£^õ´†ËŒ¼ù ace¹Ü(Hò¶‹Èy¨ÊÀVzy½j•Dîpÿ¦‘ÍŒüŸÉ W'uÇ­3Òë´{ÆYh§‘` !‡`Ç;Í´’Êä­ ù»/ÿ .0=´Æ–{Sdž>n­î¸œ«_0l£s+¡í½<8åÊš‚Ph'qw?´àù¿E—¶`Vk~ïÚºX°ø·†$UöfÆóKýZÞ?FX*ÉÚtºî¹·Ÿ°9Q “9ïy(@Ã14Åÿd¿¿fœ9Ž\pÄ‘Ìâ eiÿnB.‹9þÓç11ó+s;ÞfÚÄ¿¼žD´³¸"¨"ñƒ"Lâî"ûâ‚Ú£òÐ`ÐM«òýa­Zó¸Òm°øÍ¹ÃvO·É”)åˆØÊ“øZýgUñyÑÿÉï‹€XSF9ôŽ €v©q‹ó?u8õo¸ HZ—dkÏ/wfí}°WA'jYº<ëª uT+¼„½Æ«`hç#TˆŽØS˜ŸôN½ÁÑTŲ°?mö8Qþè$Ö™TøògRÞ.Ø ÞÝs9ñÄâÎŽ0…N‡ÿärÑ;Þi€q‹’ò<ÔMúP|û÷YÔNÊ?ŸE«#ǶvÝ:=¹Nó>ÕWɶ±øå2cÅ'-cþNwöv,pîö¯¸RejÙÿ°‡òð6V¿2yhTêýˆþïÖÖÖ¤%ÙÄïÞÖÙf]•Xøïùüƒþ³qÚá Ìü韛‚ ÒepÞÚ±h÷‘!~’À ÿKN¿30dt]^Óa?ÏŠ Ëí¬ö‚Ú60ñ®‚îzŽj¥…3׊u\YÖ/û)ÆùÞ¦DælBvEÉ?†±z£ÇwÞ‰û(í¥¢»õ«ùD}—ªEö¿»A¸^áÛÊ wß“ð•pÃp'bš^ÁêÜZ+½ôy‡á¹– xƒýXÒ߇„éɘ¯`¶ïÝßï³Èåk­5 ðø Î\ 컹½#4« jöl¿yðo§éuÕ‘¸ôޱïÒë "a°I‡ç½‹/ÿðóù›©Ogã9Íþt4˜…”ÆN¹xçsàjV,R{|ÐÜ+g.Æ‹7kÜ3øÊ_Éov_ÀZ-­u–í’ÇNÐ äŒú°Hg†Ø¨ÉÊ(Á%鵞ªFŸÑп…|§‘l¨0lô¿+ì)¯ýäYY–D6tûÚüà¦Nð-Ù Wë¤zoȪ€3‡•ô•—pS «ÇCiɘüïüùgÝñ˜ûÆ©k0ö½¡Œ_ ð nû}V=˽fg´ŸmNÀZ‡ °ûú»­ó3ù Ñ ¹$›³LÛ¥:ÞÿŒñu¥1ÐêïèþÍ6ÝÇaÒôœZü_®mNäÇHªNª ÿ ÿGÚƒšu囤)Í™Q\îá^+:ÕÞyU‚)¥û·âOÿþ8`H¤ýÓ½DY¯šåˈp¿5…öU+íeg>Â^À^[ÖØðâ~ݨX{Iا]¨S÷çcPˆÒèBèsM`gGL~Gy*婥ŢQÐdõànÕÀEï¬<ýw»½jwåEyhÈ»bŽã¾üŠýψŸa-Çøÿlñ2‡A:£ß[{“}2šzûúJ¿BÔÿfd̃Y!ÓèßÑé€ ’íò¡ÿ¼Þ+ú}‘WT Ù€Ñï%üXòáOz¹UWÑF#€.hýÇýø¿Q €1Rî+ýÛ´;­«]‡-D©ðûâ=ããØŒ‰¯ÜÙcR¾µLªÅ¢œçbëÐŽêþöw&µc tˆ×Γ~Èî‘&œM<ßÓ»Ìâ‡@/A·MÚ‡ÌÞíí@ìªBA£^±ö½ Î -¥É‰3r•¿ûÿÖùrÝŽfÝãë´€WèÈ ¬sdCé˜ÅïO2Ã=HežZ)q$[@²'cò¸è÷g¬3¿›ƒ„ ×Y^æ:ô w)7öQð”r͈j[Îf.}å¦Í:mé‡!ÁW¥€= vÆ9ÛÍŽÀÜü|óõãÚÿS6ó1‡eáo—‡Ùå6ï QȼQv3Ó"È>zzaåò˜Ã#в¡Ü(DDZädìF;óS׃YMíß.n˜±ƒÔ. ívgVã¼d—å5R-F÷/¶m/ÑS(èþ>ýh»I1Ó=¯¼n¢`-E4. 4sV‹S$9€.ìýYû¤2Llð‚%ríhµM´©Wq¡vw¹˜±÷ÖoÃë=îtéôšÝÿ`2Ç.¹×°}QmŽ© ´iCŽÒ›ª,Šl”ÆÜFŽ¡«©MÍûO½Ùœ`Ë{¢òmƒX;›åÛõVúákßû›·É˜&ÀÛ8 /5çx•b–ÑN¯Ö6mÆZ[ wa>~ R!éDz ]0΃þ1¸“h0 Âýwb „Z9ÿ%Z"nææm_“ µƒ/Á®+}.o=÷·FÚ“NVpwô¿*¸S>ÖÊŒf]ÏšÄë\Þ)wLhOöL“ibÛr%—ñš¿ãØþÏøT;(Â*/«öy>纵ؽ@e òv' ) Bý¦_Ñ>„„bçõøÉ.²ª„¸Ý²å™z G|µº÷¤Ä$^Vݨû^¿mÑÍe‰³Å0CwûÛñ¿ÜŸŸ:Á–.Ê#wíì8x¾}ÓUV^MÜ‚ïN¨ËÈ î åß1Ú±ƒ«­TBýFg®­½/FÛŒ´é~þñÝ$¸Ÿõkþ1¾Èwwúš)÷s<À‚[¨}Õ°|+¹ñ_óz^I;ºÚŒžóòìѸ õ­nÎÉæh/è–eÊ›ï"ØŽÔ½Â+&ïÌ"h'åÚ‡¼ ¶åÔ Ù›¿F%õž’l¼ˆ°Ì½ýðH-Œ`õ3±f‚G,³ö³|FÂÛ@|µëÅþxGÌ}45&ªm>¿ÒA8°¶/dE¤²ôÔe4O‹e7¿H5¤½{sË  eÂÆ÷ùßÿ/!›£Rä0á×ïk2¨~ c²þކ`Ë:^Nú_Á8ªÓO·Ý½3E“5lÖ_†5²¶PìÊ,>þK$cpoÛžB[ÞŸü'A_Ól¬aÙ"{Û)÷Æó{…ØçÉZßsœÐ£;팿:hº÷i͵֢Ž=°œù vÕeíáiÀ®)K 2»BB¯ï®c»*òíDýÒý„¦AæE1dåñ{ ,HÇÞªFžíZ)òuoPÿñ«è^Θ„Oên;çÁÆJ¾Lé¼–õZ¿ù5×¼oèûÅ(¸çâk³ú£Æ’¿Þ×Äráý[¿Zå™ÂúÞÁòŸÑ9¥×žëd“CóíJ¸guX6¦:·½¾Ï×EökL¹ü+ïò˜à¾EŠ££J}Å8û»’@j±E~¹×Ø@\1„ל|W`:¯É|»6žU~X;¢Ãæ§©‰ÛG"\ë×C×s5‰Q]dW®ÍØ[ ùP®³;*Û ÊsO« W\¥CNLÄñ °¼†íOöcŸ'>†õ•Àê’‡»ÙìcÑxbK᳉§ŽY<ÐõÑ.Òþ¶gâò• }çb/ÂD^F¢êû :Bï åk½eÛf„ߟ{o“Ù€ZZÿ^Áÿ…Xü‡Ï5>¿Ç¤›È”}¹Îú:ŵ¿|‚v;Š+c<üÊ"Yôã“ȼ

1l…Ê͙!ãma‚N®ÉñËë%#ÊÊ«1œ?”±mbì5ó6=xwb ¥³‡&}êIµµøG· ¸Þ%«àI‘,ï£Æ®—w:ò;rº‹ûÊaBµù œM dÔ Êõ‡è|.ñþ]½ns³ñݾc`ý=ßmDg¶M‰TÆ´"Ls‰ãX›çøè% ¬ªé‹Zm%›´×I‘_ù–×iFoɘ¢¸ š Á„«K1/žpLôʼn¹p–‘å^'.Ô€ÇuRôyÉîÅÜcËzãE8WÏpXP­ñ ÀšákuoÞæ—=‰7;7>D.dlœñ¨–…Bo¯ÌxgtÅÛa”¸ÖêMm‚ü€hDI]1CBõxšŠ@Y;É¥\V¶t}ܹãášè¢ê0Àû›hss´Bê’UÏÀ…ô÷÷õ7GCê›7ƒ9µ¹ïé€k§Å°µùhóçOå6:jR7XD)ôë½ïm„:k/Ö¤#Ôô;ZsÒNñ4dšðM§â·£f}WĘ5Rà¯op*«« ÝûÈÆÕŸ×X_GùjCbåqþ PÈù ý¿í/ Â/ÛÐY.’*t’ÀúaWØïo¯n×$B²@)ìTè¥Úïï^ùßj¢“BG8~p4pï­Ú %°l·å–DÖ Ž&£ck k/;tÀ5°ŠE˜(¬öØF þ¾TÃpm%þþÐËÃFÀïÏ7x„¦“æ—ÌPúj5̇ˆ?’ ö&ÑÁ­2ÇžàLì^çãï3H´©«1Á»A!¡‘yåsÕÎuªXܾ:wx Ì¿¯ÌX²/C[¦rT»‹:Q óíÙµHîýuéÇQZÞ“ÕeúŽì zjÄa ólèÄ|Åôäa:¶Ü&ÍÒ¥FMÑ„´6ÐeâÛL¬­›çqæ†'¢A\5ÝÊM"mÌÇÓÿ¢ÖÝ\ W/ \ûLŸÔïòÞRÜaü }­OF^Ý !†#ËrôÚÊT—jÙž«¤m ;5^‰Îí]¶ªD³ÄõuV±a[CÏåi¿oB¯n«aþÍ@c;ï¶ޝR/ý;º’ÍÌŠÊgØwÜaL¦£Xïy¿5‚=õW¶õs±5ù—û©µÇÿžŠ1Á¬wñ* &ðdÿLU'déÃÐÔyòÏuÛ20iÝí?#vš5¯îøó$Z=ΖN*átSƒmÃi*†ñsßž0ê»$²âDM*ߨTè¤Ìp2k˜Ùp;˜­ìBº<-ª Ö}y¡ `P’<5UÊgLï:6fÓIZàÛâE*×ókiÛ×ùÜý‹òq$×ñ™^£1×1XúóeAи@Ø`EÒ¤â".ášßD©Ôx`~S>ÏG¥¨d¹²_ZÒDF S 8¢cWÈùùtænŒ$Òóü˜©ÛE‡ëîËz7ðz…—‚¾tuR›xµtôÚÑ ÓÊíd¥óGs0/²È5^-oœÏÎMs8b,ùÃóÄ\gø˜ßiéY¼ÓOUÙ)ç:(2õ$fçckÑ5‡-ûÀlKlDé£xQ´ãÞzT‹_Z¶‰MÓ£–»›~³þzI$Û¦¤¬L«=-#Ȫ]µV½”á'_¡RÎk_'ei>LZÚ}Ä)ßé» 4J£x×¢I i2ék%ékÌËŠ´‡m·aèš:°›íh%5¨+×”© ýÖ1¥™ÚNP£Æ5ZŒ¥?ŠÐ¢¼è†q(²6Yû ¾¿{H¨"¿“²Í$dÏ’þ…ÈëjbRÏé`Ågµ“žÑ=Ïûköém¸1«–¿9Þ_à>O³ÃPoÕh\©ò佌¯NþÄ] $É•÷+íëAåãáÎc˵eÕ=ö Ë~ Çv‚.hŒ¯ÑÎ~‘„˸ë¯|úØè¼þ¢Å'ÊVÕ¬éÁ|JÁ1>LŠ-âãj´OZ¸¥¬N† 7‡= Ïë•Vvþ¼@÷Ãkk“Áñ\•zitp|ÏP=6 “ŽC¼Uƒýº®##µ•ïžöÈ.ÝÚÄ ÉÅ.9,ÜÌTÀ“ñ›A€üÃnÃ…“e!J›>‰„1iîd:èˆûøýxò4¼Í·<—Ë8 7, ©JEkʾ9¿Ê $ÒæÆ7Ë u©ßš¬H I´,ŽfOµ÷i b2@WÅÓõƒ=ûgWVÌWj‘ÍMüø#‚ú¬m¤r-ñÇyïL~ÈT±¹RFkZ¢Ùt ÄöæÎçBï攤”ÓÙØ³ˆK£{À?!>ÐÁ!±$Ú÷®c áz<5ŽQþÝ„43÷È1÷ø¯âø\8ÐJH®åÃÀš_A¯²êYýû¥iòhh/¢è5O)ç4’ïÈ#'˜'ØgÌüŠÌöñÏ÷5®Ãåü1ß7?Å—óá7QG1` · p¨‹"6¿pö+"‹xŸ6Y2\(€…b: ‰ÞO–]0·«—·–¸fd3ãhvôdl­£G¬vIÑÁ Š¾À9rñ3pêJ žüˆ°.¿8È—L{QÐBÊ&ð 8*ºËùÚ7ƒzºáŽ.;³ý3?#âhM£y`Z¯ÿÊ üý1¹çÞžÃÕö96¾#×°au_­³9¤| »ÐMçe£ïŒ‘ý6>~u®~2zAf[7_:k¢M^è&¸*RjŠêPƒÞ?"lŒmhÜ”Zâ{jmâu}¿{ +æzGÙº±ñð[ÉSä‹í§ WÖbút1AUÝÙäÅ¢ágVŽÅjK6Á“r¬ R­Ý©‡ð6oĬÆÓÁ›§š>Âl±iÂcÂEDïóñnú‡€Ø…ìâñÑ×ð’ЇeârEZ/ûRÃcìÀz–>íèAå/vå1ñ‡V%\'/€KÉŸk—!_Ñq_-8XT6qaóå\ï Ì,ÏIj0Ø1›‚y£æ°aÿ¤, ì]¯&Á‘õÁ0ÓöÝY!«@ Ex5œï–l:›:®'©-K×Ùb›ýQÔêèGm|ÑE¸/$?°¸|Œš«ýæÆEpÿ±Ø Ä»c»·‚³¿­S9Œéï$Ê*Ìà²ì<_ôLþ0£”*’½î¹[V~`D¦"œÆïœ¤j¦aŸYk@r&¡ Æ7¿Ð΢uò]Xvöíøvæðs}À°ô‰-£öªn›é—ºÙÔkW… •¹¬™o¿ÝÌ;›‡y¸m¸øïç·Í½òÅïÓxûiÿ=¹mã—5C¸r='naÜï>a%oÑ=ÞÉJÞbÍžqFëØJ“êåÞ½ÂçfsnqÉ¿~~Oíâïð3á(‹‡Ž©ûöª¨fpbwˆÅ¼Ë8âÔ~ñììùi|ÌÌÉåÅå÷OÖß¿,|B Þ ¶½ùx½dX}}¸dÔf£6>6"žW9ܽÇôô|m¼Ÿ”_ù`Ù®¹ãVïÏšœ‡N‚OÆ/1}ªúTä5ÏE¡q,•c|7fZ«ÙºepJ«%ú)»Ì›Jþ_<¦V¦ ZÔ›Ñ!¡é»eØmÇ9wh­Þ˜Jm) 1Ý]±ÇF qOÀÍU‹©š–ÅáÝì6B;ê•®­jOŶ(N§n6g‡*³yrNîl ô²]š‚M¹7´ûÝ^âšld«?®j 8p(@|µwʺ¹!ÔŸÀYÎÆµ‡kÇpDØ7ÉѨ ´Š˜b4œb´°‡píÚ>Ý{‘ |z‚âµÊ=%Òr­Eçiü.6!6ANðq(À.J€—HÀ™€£ ê÷©Wã„î P£h®^ŸJn9Ò\b¸[9Ì0û3‚{˽ÕßûÝ#´‚xìÉÒ¾™¸"ôÃ9½£_œºúÙÇò‚F'çr¼èó¾’þ9tï½+‹__‚ÍbÍßój†—o¯ƒV¶öª¡¯­ªó Žo­|‰‚ù/"ÄÝ·°‹ï} [´{ B1ß>ìÃP¼wôÙUDЄúæKLÊ3Rêd žcªyNj²¦…Dçîû¸R+ë8FáF‡Š=côM¼úì‡V5OŒqüùÝöþ§¾]ù»Á|PNŠÕ*dj­…'Df—í.Ä è>ŠÑªÃºÅ4¤b—ínÄIèAŠÅêã©ÅåÏ]˜]^(ÅÄ ”·qªJá\Íjh–šº>ÕÐB!ìÆ°#„è úcj¼j»ÕŽÑOQN¯¶Mé4LJ=bÓà„í¤Ÿ¡H¬öOÍk©hpÀ8ÕØèj”Ý«ÑSéÍ2a¶;ûaé—(W³§2§”V-§êZ!˜ÝHv˜}GÀqʵU©ø–üÝÁ{8[ªZˆ­4ž)•)™Û§È=ÁlÌãtJà*×”P‹ÆÓà=[;™Çè|ÒÿUµU¡)–à§[{¶Ø˜<¥Ë|©>r5J¾ð$‘ôkrc²õ'÷z4M¯Ÿ=Üݨª34þ~ž"ÇІ#üû±<ɯŒ=y ðCº :·–µ¸óžÜwZ$ŸQZzõÀ´Qz˧@®6¢*ÔwQªSÈ:}×óa3>2›º{wdÎíÙÏÄßppkÑžY´Xz¾_‚fîk¿À%ŸT«°¸àЕ5èÿm¯MÜW¼¹Š¹Ä`îáȯŠcûŸ©5x½¯ƒø½Èzüü-Q&ÁBÂZçð/³½’ïÕ,ØJØù(ä…ª5ŒR£°»è'Wœ=gïtõXÁ¬2­MžÆ‚›Ÿ7ŽÖÌSÇéî•é²·0u6×@5FW %bÞ}äâîé.ÔO Åô?N­ÌKz¹ú)ZsþiĵL§EÒùEöè-ýÉ£[[#åˆ[¦‡ )ÞYeOƒ>¥㵦–ýÚ|¤ê+¸óÚ-\è€îe‘^¿¢‘ú4M6 ÚH¬å0äãÞ!ÅäAƒ E‘‡zU“5™%Æ;Œ¿ºkœ²Â*YWuéZ¥rǧìm•ë­ úV:~¹ØÜ·ÐÅJ4'6úLµÀ7ÏK7ªž4)¹x_¥(%ÞqÕ¹ÒÒŽßEÁµ]ÆÙ‡O¶à­ÎÌ㳦FUß:¥ú²ä?èqqKV×)ÕÕ?èø:7¢­‡Ÿ"\­òNÜ›ú-ñÐIܬ¶A涆3VíÑ[óÅ“>bYµ^0Ú÷êŠKÀޤƒ£–(©õ7£n·¶œÝ“'Mu¶õë\ Hü_ÆìܹôpÈÐy³1ö»û§á­ºDÏKÜ';S •{D7uO:5)/5ùI#‚¬¥&àŠç宊YƒùFÚLÎy*ý¼}ÄÆ>ÏÉXoZålm-]ÜÅo^ÈþѬœ‹ßÈ) ׸ãŒûÚßÓ{lž¼9ÐWÎ3!•J~Õ‘-úúcÌZi‘ÁÙɉÔáüŒfK–èäyÅì¸?‰³øèá"J®pîÆý O@ RwÚ©û¢Þ~»¸é© pg§É‰Óëñ“±>_)×­øÐ`‡úWékps%WÞÔœhJGêîM¶{3›nÈŠ ™:0RJ`.YwÁBÂ'áø‘•öØà‚pÍ­Ö'§^½K7”y¨Àùiä¥ÎM¶9gzJá‡?q€Ä'ÏÏ‚jЭ‚CTnyuebÎy~ÙRr,Vsc6vÜâÚ.‘¢¿ï«Ô+QNëLŽ&¡uf¿HbÓÃ_º=µ!KknQŽ"jì_Äê¬Ê³Žm>þâh½çP¢îX_–m8ó·4ǦM¸«dáË‘V¢}Ф~Áq#aâŽ.´æ™´Çy¹…ŽeG´µ’ò¢ÒÜoœYW‚?.cª‚Ù׿ºzÙÅmH‹sïÓ2€Æ8l9Ò}†'Ÿà¡‡y"Gžû¼õ.÷ —îTVEîTºcUUWô†_öZ±„(?÷ëè¸É™Be¿=ó 7ÛŸÝŠ’Ñhż¦ECÛþR/¸Ïõk ¶y˽ðLèµôŽ«zéˆÉï ojn>°ÍRÔþUÍpãè|È¡ 'ý‡?É ñ»Èÿ©K´»Ê±etòîHýW>ÀŸ¥ ™•ƒpí]48j|ç©«ÌML j¾KÚ¼ú¾){Vi$žÌ ª+•áÑ‚»/ï:ý7£k÷ýd_šWTlž>g²óThˆ5¾®—¥8ÿܱd*,”ûœ“`ó<÷3‡'Úks‡›¼žY;:o力§tºh” Oyy«˜Ãm8¬¿9”={¸®–ÑC Û¹ºà°‡ŸYéѫ!zT™oàô •«¦vAn“z)¹Jçßoˆ Ïú±ÝËË= 8”±‰ásâÅÎ\>z.&[_#Nnðõ¸ûa|ÛVðÕÊÈóåíUÂÁÒ7 Fë]7cž¦.9í ýz¹³Š£ˆBkß•xð¦‚_šk_ò2³`y%\˜\æÐ1‹¡>­G±½jÏ®¹Yç9™›cúÒR;kñ“µÝÞøZú‡nŸ"¼]Æ`†Œ m„Zm²ØW¸úqt£ÐŒrý×e½±)vËÉÑ“kÒîÇkóùx’…&dÜ"«×’yE&¸¤ÜëüäfK„Úf/ÌÎñÚê¡¥bªÜs¬7ÏÎ0¾~÷{¸QÌì–TþðXCUe–,ß÷}Öò§j6ƒkó•ñ„¡sž†ý`Òjþ—„”ޏ†•îÕAÕes#í˜Du­ìëyÍÆŠÐJá¼ÙµñµX†[ªºÃXgœà41z4î…›oÆÇ‡4ç†É¾ ɾrÕãJŸX-7Øg·ÅÜÓcÀL|ÝyhæçÜ^fI¦ÐÌÓwKq¹ø^èûî—é”mgÙ]¥²ä6`ñXàS~Ù€øbõéÏùÝFÁ¶yеhK0ͼoüAvâ{øUdþÍ7Ny%w¡2å>“7hï•#}{>>˜ÏRSèË–:áSÞw»ºú¾I¢SÉÇ垪Ì%§›ƒ'f£^’«LF>-TYk1IþëèX·Ï4óÁeÒ£ÔýÉÂåt—f’ —\Ê»KOgËfÜ£®gÝ…Ç‘noÃߨ<‹ã†ÿ &î4ýÖçužee]ÎÍÜ¿ËUƒ¿äc ϳ²õ8¥œÂ‡ŠÅ‹ùÃ3Ç­ð(«»åb¦é®Šx wxœ•i¹øp:_çA¼¶,!”ð;å'WןS~†ã„ÿšùñÃ_Ò‚ý%ó#TS:­¿E#—®‡*ÀËù˜Ãs¬lÊO™¦H¢Rñç|~ÓÒéá”ÿVº#(6×Õ†ç&éBRÔ,EâS;PXü>’&$IÍ*-AÒŸÓ  —™7˜LmðÙ`É`ñ`™­S[g·Î%Eÿ5Ãk‰@"å“lÿšá•næ'´ù ¬Îkk!-’žŠFáñû}´àIVæå¦©%¨AüIŸ›ð4+Ër‘áÔEÔ:~Ï5x⸙‡°rj6ªÜGž:ná!R—:†ZÆsúèÀ“ÇÍW„ýSPxAŸ¸qãQr­3ó †„¨Ý<ÕÞy ß§\ÍJðt|Šê ^–dÉQ³É;e˜"ŽJÆKî@²Ô¬óN÷¥8¡ªð*$+Hžš­Í)™T4^”d¤"&“œŽ–Ä¥’ÎAÖåôü¤a#êhv<·jå{OúF~ÙÔÍæ‡_²=¤¼4Ž,Dú¯¿|Ó6Fîs•:Á'$¤Y’ÊõˆQ½}y¨~ÿçõxÀ ݽfQ«Õt¢GW“˜å™i¬KiŒó¢á›þ\ÏîÁ鉑WJÓž³.Q^«•úµžç‘ÔÙÊÚ_z³Ù÷ó '¥l×qøœ~<;¨ÌóŒÎ…|ËŽß`ÞÉ‹‹5|ÆK­Èï}T(Ÿ;¯?wÁJce¦†qký0¯ït©?³÷Q^bïô¡/Û3)ûj· Vo#ÏYoÔDr‹=¿ÿñ0Nƒ&oŠåþÑÜüݸÀe@y¤VhïwþúŒœ—¤½b•dÇ)g{ï$xöµj¶Úìø§n&›33#lÏxΣdÙ·ý¸|M«Žïâì(Á÷V BåÖ9ÆE ¼¾,aüíZ¿/U;[cöÅ–GçËL;iÌ#ùµhX~ø”ÿçE 8žà»9{9s9?6KÑ·»ê§o!ô>¾wcË Õs’í1…Wh­”2qýu]BËŸ3âJcßÁRÏ'ˆ(’N:®¯ÀþH,#GbôÙœˆv,÷ ¨íUò›xd×1ŽÃÌ•eCò¥Úh]k·úþ '±’{³ÄÓQçÄ£Àiy¦¯ÄÈ ; §µr|V¿¾ÆÄgŽŸ~€qW¾ÃŠÙ'ÿùM,âÇU9wÛqæµéáß,dKçy’b¶¬¢öWγj´[…dsžÍ@+Oà€Q®SùÙxÃL¢lºgõ¢q– †?«/s)7¿çwbWÛ/púÙáÌÜë¢_é¯x«s?qŽl‹Ùð­p?¦vÁxSï[íÚÉnÙ¾vr¦,Y–ÏëË-:–¥e'¨7³v4ÐéëÔ¦t™í¡OÐèåÔåå;)‹ý;A g?¨…ÖK c.é…· ³Ù@˜|ú¾É ê G‡€à)vØ#ÓXoŸfzŽB«“o4¦±: q¸…;‰Ü%<óºR8Þ‹Ù­†¯±E8ºþø›u`ý&Ð<ø« åkÍBÛ=2oý®¾ÝÆ6靿ñ¨—êý×€W¼!›Žê7SzܼPRKîçŽ^ªÚsß™ÓéQÐKÁ-LiË…9 ‹”«À{œ¨¹óÏ7甤Q@Ü@wÇë—ø¯]{²sh@¹$©çæë# {^"æg’CŠÇd<J([j·½Íî”if ®÷0 Sûª¿i(_7…¼²7V¦‚uãá™—zÓÆwNÜpô ê×¾kÛ½±7Ÿt7UmóE”8¨ùƒ\àb¶ÇÕÁÎâ;ÁùUr Úï³ú<›Y°ÞãÖ½ž” ®+ñýÝÅàäñ¥}Ì™} ËÖ'm0磾úÊ×ÕüLéNò˜Ø›ÿ£óçyªÞ}œè²²ã'ÄücºK­Õ,D¨øšž´Ã-ðØÒøýÂI@w?Ûõ‡•qŽÏàA………]ÃóŽnŸM'Ïkÿ€CtØG컵Ï< jƒ *])Ùloèî¬ÜáDðJø)tæò^áÃ’ý…-Mt^ÅÛáØÌk6R§vzó6¯\ù=ô’Úåq^Qø>ЭhÄ€rênÀ†š#óô=j]#|ß«Ïk:]úréã1qO¤¯¼S4*¼ÉÇ÷”SHaÒ7uª"í,„û–¾éX6®o¸çZÒýox ¹Ë¾…ÉWÌÆ—p…¼F9îgˆÙI Ô““i¨ðœãFàÕÛu ×Ð8ÇC RêÉë¿«üÙMÕ÷ð_éù–5~ÐR^ù1²»‘³pè‘|²UPçͪÞ;±ŠA÷Ü)oÎ\ Š›ZoË9E¾|*0,,@!ÐK¿¤r¿š çµ÷k›5Q»~ŠrßãÑž#«wÅ<¹¬¸åWLvö}'ߪåóZ³Žpþ.»Ä¯»@«ol×{N)+«æ·ßo‘UVnÓÿhøhæTQéüFäPâ¾’‹OÿAË¡îì•uIå7¹ÍÙýüg}ªrŸlM̪Mº²NX?©ðìêi$™§¼UR6–¿éÄãš *~s2uS>C4-Û¯r~¶pŸˆÿ·™ª|¥³ºÚ};CC‹›T)ÀY’7 ùÒ#žWµªrÊRà%ô)ø·çú*g#ÜW>ÂÎÞê©pŸ{•ù&lÿêØÓÌÑëÙP”ìû*ç®Ì÷³ÇeƒÄÞ^9—• Ï´pÿQ5Äý ÑYÞ,T¿ (®œû2çùP;ï§Á‹e{µ·±ðss…ýÎCü“{‹rrk´’oª“2Ëô—ûµÆ™w½Wè͸Bƒv\¡¢ –Ôó+zt=i}“&% Žé÷dZüźPlŠÉ‰!C }å»JO%çmäõJõÏ:VË÷´»ÆŽ‚ùŽ-õí_JRt•Dõ,m†}Ö; 6Q Ö_Š©é[hlþyW5ÈgÖþeüµz]¯üxuvö†`€/sž¬÷\Ÿs‹˜Cæ.Â#3»o:ió:ZYùêw_{¼EÉõ¥ûöç–¶ÔÃGàÜ}‡8 sz³’Íözí› vôkýüˆ­Ó@)÷r¼Tdë(<óÄû}7U+d:{šƒ‚A Sé'×oÒ ª¼ËOÏwÞ,òÍÉvŒôëvŒË‰sÈå<âß+€ôõ³?åSwéaïˆ~oFoV×óPŽSÕØÇŸ<ïdTõêq>ÊwüRèì­ ¼˜Œzý–ɾÓAÕ~³nùGeC‡:° Ч[5ˆÌ÷Ñx+‰Î‘›.œNÁ“o¹ªM-7÷ØÎÍg¹ùÍf_ÉÑí 1¢îy˜=2’ßÓÓ]zácR-\^\y70{›bx°"—ÿ.å³Á¸xí±¹ÂHÕFTwæEó(y¾iËÄ‹5g’³§ré*r=°_»õÊ+l€eŸï}qX$¾ÈÅ“=j’1?Ý¢7Íó@rò‰¤—¼§Ëw€‹E_ñÖÊ%×@ôwtãÇŒgÏ uûÇüR>-2 êïé!ÑåØóëÕûNãºq=ï 7 Z_yý¦—O?R}6hdéU}dŒrÙ\<€ÀÒ’¦½ªÕýú^¢ý¥ ºŸ¨zÙD8ydqRÉ"ÕªÝkG=“g›‹ºçåçûUúUÎý0ìƒÿÁ›–­zBד)½¹ ¢þWg Æ5¯ÑT„VNõô*O¼;øZý]YsæÂÞÑΞžÏK¥Ép?‹¢±é¤ñGP¯;õ(ƒÖ\/:8 ZÑ2ÊXOžéô„}s?&VÕëØªëà¼g˜tgzØ×@9p°Áe GoÚ©Ù#G}瞎ìpuL÷fÔLHÏ.VTe§j¢’~ÜÿØ» €(¾…áÿ³K¨¤Ø…®þìÀ@D ì »iQJRìî.@LlÅ@ÅîìD1AÅn,Þï™Qïó»÷yÞç½÷ÿýììΞ9sæÌ™™sÎÄê>:,!\×=®j5óØs‘$9%^y¿ã^ª^£:ÖO÷ÔX;ûzAs;§{O›/u¯1Ô«œõrÕ˜Ô•e“›ïOò79nìgš#â΃ýQçî4IHkm÷.î¤Óf6ûF—^[ÛG¾æ¾$>þÀI;·Z·¬YtªÑû–5-ãÚç¾ý‰YÓ]~¥6Z&<º¢wÈ]·9êèõîyÖWîV«´ûÑ­VÖví·°¶KÙµó¢SÕ²NÝééo¾âÈú³÷£íKZõ ôZðºëõsªÎFäbF}ß >—g[ÄY×5JމmQÁm|d¯cqöu{6ªÝ¤ÕC¿F/<´-ÏL3ó²EÂ>¬2pN–0¤Ü†O‹o::n|yÏú_v-Û£ãÊó·L"" ò–48u&Ô²ÚìËÕ¢·Æ¹çˆˆ×Ø&n{ú.h‡—÷î÷¥£¤ïõ`J“ &;ý*ÝÊ1;üœÿ'k=õlœ¦EG=ý0ðÝàÜ-¼o††t¤ò÷°ñ¥®Õµív$Mª÷(2*®Ä…ÁÛê {ò¨ø¹³ÖDÖ}¿mݤg Ž»|:r ÷œ)Ñ'ÓºÖ´ss]÷­n>;uNïÙ·ÆlÜÉÑá×V‡m ?÷è}|B¼}·.5ìŸØÝúF„kZJôÍ¥O¬ýú哤îlų-7™$¸ø>/Õuàæs®ƒæ Ö]`Ó­bîø¸rµ®,ûpºx¾9µsßÑüž»^Ê–;ëã7^H¸9ªéÄ­‘§Ž$…V._]oZòÜ‹½{T_;¬@Jô ;ì7nçîÙÈfvx`=ÏÔÝMo\+F½È~;… v«8ä»>—”ZÎ:õz}"RÛnª·'¦áÝClâlŽqk¹§î6Ëä¶æÏîîÓ {à~ôÞ™_Övø¼*þ“oÏU;o¯²5_WµZà=.hŠ[ßžC>l´‰Ýêâíå5Î¥kª±÷M¾ŽÎ!²bßëÝ6¨µ¹Ùývõ^oÞ]êÂk;ë‘Ï^šm?w§æËK¹òÄ- Ño=°Ëš •’Ò£ýú¯mï•`w¬ÛãüÛ×¶»vhN[óK³ÃÃù \5èÝÊGÅ{]6êw}ÎAÛ›éêÜW‹RCohÓ%-|°—ëôÏ5Ë-½ïu¢XÓ"ö¾‡l›øLÙ—¢[À­›ÏÇ«+†8¦}vß:ªd·¤Dw¿­ží6{šwß5ôîÀ@)odºkîÔè$7þ©]ò cß7"_—Äämå8ûù?¶¥dþ¨Í…¾Xö »–kô£Þµ¬#Ý#ûy¥4ݺ{ú•Å9Šì MÕô²îª?ØË©æî)}GÕQ!ç,+»3³Ì[µòŠìÝÞÙ¤Õ¢ ÓõΦ¶ùµóZï²ËJïÊÓ§Xy×”BeÚ¼:{9î^B¨e~—‚«+œ°³œò°ù•>Ë'þ5mÖ ·};—?ߨw›rVk¶Å-¼ÚÌãk‘ØÔP¿¤Þž¶Õò>>ëËÅê{ÛÑÂ鳺g²Ñ“v×½Æ]89ñÈâGú6 Úg3sñÔ®‹½õEkuáƒ×ñ1sÖùX>¸“[={‹äõ=šŽÛ²œuÝM§{OYm5ºG­<»½/Gv?(áfÑþãhoÝ\v½kš«n¼tN¯qâIþˆ6Ÿ]•t¦ßŽ­úy›žx!!eVœÍŒA;êÄŽô¿ø.yW‹Ï×Gæ·«õtÁS³FÏ‚—÷V@ZÒ¢ââýî'&DV³)W×mpQtàÓ‹oI+¾ûFƒ$¿Z£ï_Ê?+L¿{²Ñ¬ºîåÎÌñKú¼wëEgËg“m »Ý}¶¢LM•4tÅÝôp/¯ž×S¶è÷iq>¨lO$Et7ªP'´üû¥¶5LÒŒ#½ˆþ:b²ß Ï^Çïºÿ¹˜J:ÐéËsïí[Ì./ì–zuÜëø‹ +¤„·™qÑå¾N9ë_ÆWðÌw=iÛó¹õ]Ž}¹WuôHÚfå—LN>s:~Ï]×Ý’×[)þ(òd×}$ª¹o¹C o_ {O±µíøòs| —×¼3’,;¸ž^õ¥©o»ù{j<•^ž´ûô~SŽ:y8°/#ÿžÆì´IYR³X¥²»çúÐÜñ4fn¿g_ÚŒ«fþ.óÅwM¼/ï])I‡yÙxàÞ=ùL±|] Ô 1½w&áѼû•ûvª²6åIX•4nÄÚ·ñ{’*ßøT§×»xדÓB£û¶)kí–ÖË@ª¦{q§­gEëñ±—ç}mñ:|V×ÃÇéHg öŽÚ~>ÔïݬôåUV䗤Λ¼]-U[?rÖ®ÖMüD·BµÑ7zO;æly$âôÉäÜ*iÄ„SoãÏ•÷7Å/º´$•^Ó;¹Øæô”¶¦¢Ó YìÇ”ù¬›,ðPK 'õ}ޤ߇¢ÏºqŒ³Zí÷5zdw¦ï¸Z¹Ï&ï==IZÐêÝo:$—Áî¯î–\šRÜ¿& –bQí¦ùÌ¡oíäÅ]tqwdfpn…+­{ÞÌo¾lã»Y×k¿“G¥‹™—ÎìÿÈ%I·ÛOýX¶[´߯l6{ÿ’ðWÆÕugnÎk:&;‹`þs=+rÌ—>¦|øl#FQÏdçrU˜y vßY!öù ‰ï@yûåûlfyÐ1ë ¢N½µíæ xóî!sÚÇí;š9J^öC?Ìîãð1bkóæ³^uæ2˜cgº¡#!ï² •sÂì‰5ýaí½ýHÖIËÛ^’û­Hó¦öì+«êüå“XæåFÿ|n˜þË“ ¼h}üرÏWÚk{o£_W ØØ1[®Õãp»Bµ2;\-ÏÇ5Ûšë°Ü·Ë˜àæuì“W(âÞ§—}kWGééÝÚáw_h;î¾÷â– Üç^0$ãâèÉuÖì:‘`}œ´5/4{úûñ¢o·ÓÚ±~òµ‹ÑñØ“‰‘Õ~:%v·ÛÍ/;vm(:? ÎûóïÕ—{Ç›$% Šý»}؃v·YºYÍÎ$Ý{hø®È´Øží§Z²’?ógëóøÒ³×~ßUåKŒõÚþPO·ÔÅ]÷^Þ“ïÆñ¢=põ ½EÉ öi?(­Û³) ûlùšê½+2¤Ç±cå>n)^€¿y}’Ò]\žUw±ž]Pý2¯ã“^Û/ð>/þ,fÝgc“îºRgdÒÛ|îH ¿gY;¹mXpþÜoŸžîZ'¨Þhe²‡˜_ƾ,Œ?ضjÓ¦M¯‹&Û÷¹»Í|àù,ÔO7-¼i9CCÃ6‡ç7ºb–`]´O²ÿñb&7Ì÷ïN{¨7¯õ¥’Aeºxw+Ò=Ý~×­~!ñG´gߣ×I/t.ôiÖ/Ìrõ¨/îØ$W6˜0tÇÖ £IäÖyø©ìÐ~–b–£Ò]Þêi·Ú[ÿR…S_’jÕíÿ©}ÔˆòîíOY67Äëbêªoòe˜u ›ú.Pg_{±´bû<o4kV¬Õª}׬4“lÏWºdv÷d¹ë¿ÎHÇXšö¥Lú¬O7šõÊÍ%ª¯ííev‡Nk¿iWʲ͛cbbj:Üùÿ*)ÑsÐþa­Æ”É]©¾×²ûlÕ [ôbÃ,íI™§éáVóÊø„]¿eïëL‚k-ëo–uçïãFŠ©C‚'\œ³IáêÏÞ—ik·Æ;ú²ýœé:‹½_½·î!BŸšW¦Cò›Ò±‹g¥§Œx>ÐíÝó¥1WWª’ˉ³9†7†]²N I–8tÒ«Íi¡[oï—¶Tú•O¯³þ¸e{‘·ñ _&×q?íéå~#)åÝ€›{ŠýD¡Á“^ v(Û^9/”Ûsñk»žòßõšº³?y žs±»oû¿¦]Y&oHgÄYî}õ$të~ÃTï-dELå“.>T­=öîº ÎëðˆËíÛˆ¿´í: ‘óê&;’gßÕ†í9©X£:A)ƒÅNIš"eäxñöÝRq¥ËŽ‘’FWºtoãѹK¡¯‰q;š¸º§ÖۼݥŽÞ©­FF .ÏkÑhæ«Z¯—ŠlÛ¨øö>#ªŸ]bÑöÈXû;«õ_æÕvLó»ÇŽ”ÝåS=W‘ËEJöžÕ¿{ùjÃ2‚“â,#÷-±(boý>éùçM~ ËïhpkAzÚÜAù÷wl<®ØÐÆöåäÒéR¯”û­Î[{´q+1¿U—g:–ã-—‘Óó-É7aÁöõV©/Œx4.¤wÙá×Z¬zq¥EÇ+gywöÚ¡ ýÔ(XØÉóå°ÛsZ5}œâÙèÚéº_^¦,ô;zh›¸›ö]´²ˆ:˜§d…Q_ ¯[<Ø4£×ÙŒ¼þE[êtï]ïÁ¦÷m§^jpºDõ·£_ÜjrüeÂkŸÏK?oíTì«ÍåÄû¾8sÃ'-êèÓò½3,[š«jÚmX3üÍ‚„’ ¹–•|`vC½ù:äꬺt TcpQª¾¤@w©²nUÀÇþ'z^|zdþ†õcòLÐY7âRCuwõz—UƆ.1»*yè.Ö_4!±Ö2×%zWu=ô·K½Fv=ßj·ùCL®ªê™>ѽ>¢Ï¯þ¦v_Ã:}{õî·åå ÇO¾CZÅöÒ‰<µçÝü÷æaeú•·zoã·/Cëq[S§òÂîK;´úëzÃ66Þ7ö+»8>íÎÑc›Ë8Vr\»Ò|íÛîùÚt·Z=Sç%禬ÜZ2yá´*ÉQUno‰³qs4¯r/6¥nìÇ&s kvsxÛ¯ù<çÄáN¯Ö7õ84íŠ]äÕ÷-¼¿x¹ÜºõÄþƒZkئõÓÔÈÖŸÆ·8[ Š½ÆªùÀÑÖ öܨ¤?wXô™öÃ÷,³ÑÈÄäîÈ¡eí&6Wcaec#£ÓÚtòëá’|µVþ£mꕜ}²Fíìœ?kwïäöÙ=Z;׸]2¾¥N«í£_Ùæê’ÙsZ–»ÔÏmÊœŽ ¾*^Ý·¹žß“^›¾¾‰¹Üª]·*CӜלÈm8rÙ³©Í{/J{UÚâiМ+%+‘Ziþþ¶o:ø ³rC®“{ûWÚ¸ zñžmq.kCÛÔló®ã†u–ÖO¹Õ}mÛçCú&äøô¹ÅWwýS·r•\bð¸éªiÃÇž¨»g•Åî®}[¾1|ûŽMicææmVÊñ©£YÌÊ8‹÷GMž/ø:åíŽû¹Î''‡øX>>´Ô¬Ûp§ª¯û—üP¿z󾋢Æ¿ã<§Fߌ¼}Ên¾;õhÛg-X®^r´p™Ôõ__Ä]©pùT¡}»Vû¡Ý™~›Çž™gîxvþµò•W :Óç}\šmÁùó&Ÿž8éÊÆüiË®é5µíøEY¥÷žØåCﱉ7ËœÿßÄ…Û]JÝø1©YÔî‡~7m¯<õ»êžxécÄÓ;M§Ü ÞÜq×ã"µª¿ët"2}›û¡'…C>&÷¥ã†Ôƒ~éV5F¿õÅ×Û7Ÿ¹ì°3bɧZåÚznÿ<#aAh¬Õ⌺‡†^HíçSe w™|s–t¼»9=È¡mĽ{Or7qªz*=ìÌÛUMŒž:U·°.POÝõY‚Ú¯Õ;ûÚm‘Ñ÷jõ ÜùµÐ4ë´² þºÛ¦?Ù_¥ç‚ÄU W.ÍÜ[*ºF­i§}šVë¸}Wž“_ÄÕ8¼ÁÄgGK¿‰Òû½w.ëî¬4®WÑÛ …½úŒ9éc¬ÚxÐ'M§wÜ"ùß÷Kœߧ϶¾'Ö?üùz{Gï¶Ùs¡ÀkËÅáž1ÖÓOgløl¸ÂÄ`$ù”hS¨$q«$™2,½K’*1¬yT’,¤†RL‚$m;+I7ßH’ã~•d%u†¬‘¤ðXIªL=^÷¤$9#Iu¥þRÿ*)zJÚyžãúeIŠy(Iõ’$©1ñµj¨’šsÀw=È÷§UR+©šTý™Jzn –ô¿¨¤vÒ iÆcIêõ\’¾¼’¤[4½{”VIÅUÒW•än«’*4VI𩤰@•´d’J³I%U÷QK¹JR_æ±/ÍEæS^%YVQINŒ»J’\YŽGT’Ï1•T[üŽF- â»/uÕ’'êmÕ’7˵|¢ZªK“}™JµW%—RILÛÑK-……¨¥BwT’ã Þ3Múµ4‚á\µ4Šy.¸(I¹Š«¤ñŒQ\-MdÜáñjÉ}˜šzÏ iÈ=Izš –&$©¥­/ÔR”ZGšé¯’¶MPIs–¨¤š'UÒ<¦1óUKÓ êH ‰çŠŽ´Xò‘Ì_¨$ãŽjéf}µd^M-%©¥ 1:ÒŒë:R4áÌt¥Õ¤¿x7]ÉËMWjXJ-Í©–4ÅÔÒF¾õU%Å3õ-ÔR÷IºRá µto¬Z9”.k]•¥ôŠýŠ¡:ó‘ú”z—ŽÈC]•±\ž>«åeUr¶ŠRª>ªõä©Å7¥”oT?„0×/Éç¬ú€Ž”eÚãø^â3ãP˹$R[@ɵÌ-OlqgÕÚÏâ{}åûÌykÓšuÿQ…u&†9Tº„S•%‡´©ÔUåø¶t–®ß—NWÞ&J“9•yb®9ñ=I‰M•[¼Ïº$YsCO™¡œ¯eõÅ‚e[ÄYH¦Ý>Ëê«s‹}«J¥÷þ`¦´:£XÁªïóT[柗*—”5VbO,ÇW>s¯ =hü´ÇÉ\Ú5Ín ]þÁÐÁËËŹ~5cƒ€vžÍÝ=´)Ò—Sñ"[~‹|.ª{N]XžÖôýã5¡Kÿ¿X#"GT?¬ïÊ´¢g–ª¬å/9÷c)úùó¿Z ÿ÷ÊÝÿJ™\ºì¼]œ)b.~õÿ¿VÊ~Ÿ¢ïeI÷‡½iÎ,{7Ýæ÷âÛçŸ÷¡…²ÔTþ§Jï–-[~Qz )sÑ(åî_/½™ë@#ûO,½~Yö.~vÞ§ô–”—ú•Þó={éýuþÿïì#WëhóGñÿ§JÙÂ3¿ÚGŠ9U¯Öùï”21õm-EÄúŸWÊ2”?1NÎÌýãRvP^ÚTÊ~Ì÷ì¥ì×ùÿ§”e/³žWT×]¬óBj™­^©–[ŸÔ?5¦²,‹X¹D¹›O›[žê’6Ã¥™+¥Tg‡ÞžÒOyú«8ÄwªBÚ–+é¬(ihPPÕI®Ó‹Æ»—¦Qû¶š¦Ú¶¦ !©0µrRmÀ–k,¡Õ’Ÿ¡¹üÙ@2aÛ2Çkßkç¡Ræ¡VÒ}û¿H÷÷õ÷wÒÝENwÒ]S¤›f]ö¦žC¶†^Kw·U:¸øºzûz:x9¹äe+ÊMŠóÑÎ4å}†f¤ß÷âCþ™ÉK©ý>Ç·oÍšÉß`ly¬c(kH‹H„0å5{nü¥Ë+/ K'ÊY7G=‹f®Ì1c ~sÖáÏe±£z°ÎÕUö²ø«ôü4–Ó¸W5Ie”­kLúŠ’Âü¤1·œ;&rý+9QFžKsmÊFž.¾îNšö^î^.•5­¼œ,òÊymÈ1•OL¾¸/Ú[’þ‹ú¤ØGGº©tQwRæ#K 3³¦,Ðãõ³}Î>ôþÍøÌ錳œRÍü^7Ë|òf›Î$ÛçìéÌù_¤G÷7á² ÿÉørd9­›u:C¥©ª«,³þ/òÍP)C¾£rÒ93~ßÌ'ëüUÊIg}%Ÿ ”ïs(ásf›.‡2,¤|WðñêÊû”?gN—+[ø<Ê0w–ò¢«¤K÷ŸX/%³åGöïM²}Λ­üˆüôýÅt¹•¼±Râ®ý7Êoöùd]Þ|Ù–3¶ð…³}6Ï6?M¶ï fû\è7éÐüÍôŠÖÀP•6¢EPc³|_ù7ë;{¹où_ÌGGY®ÖY¦ËºœE”¼úÝ|Š+é(‘¥= ÷›ržuûÉõO”+}¥ "³œ(ÛxÖpµ1q–Ïõ³”{Ñ“Ð,Ëòê)ë_/Ëz7Qæ[Lù,æ)êú-²lW¹•mÖ<Û| ³¤[W c—e~9•üÎ,÷Å”qºÊz–;Ì~±<:J RG©e_:Ûz3P–§¸ROóh ¬ÏÊÊ)=e[ÒSòDÌ×ZÙ†m”²ÚXYΦJÍQ'Ë|(y×>K>çU˜þb½7Ræ×F ß!Ër¨YËO§lùPB­z±^OŒÏñB,³žžsÆÒ®=,_üù¦˜ˆ!Û2¤œÍ¤,'‰†f {ak—ˆ5G•³Œ‹7 ºUqO†t¬¶6¬˜F„uTÂêëW±™×pÆiÕ¶à.Ÿ-'¶ñ(CÊÑA{ò)!,{ØbyÚòÞÜnÙøÁ¹ÊV-¿Ì,CÚÛLöR¼*[ØuÊÞˆšåànváNÙ3¶N¡’ùWmfåÕÉö°G|ºUñÃ-œßßNÞêðÁ›4”ÒÆ»ÉL7[Ø>•¦ÕÉH{à0²Á¦ÇËR¯ÙfH[okãÝn©'‡­¡„ÕÑ5[6£Á‹n£ÇNÜîhv»BÑöR•6¿Ýóég‹·ÆÐ»Mgß»·¡ÉžÑ¹Ú7¼Ÿ!YVÒÆ»:¿~¶xMœm›ûª÷º£›Æ>MœKØÅÊ¥q7fû"Ùzèú€zÉ;MîÕ3y’/CúK­7¸qö°azú¬mz ²~“¼ªÉëÏeHMTÚ°M³‡m—°âäqßN¹Gß¾8ýýVÛ&R‚²lÉͲ‡Í7uèà%»#s.Ž˜S¿Ôœé}2¤J¼Zdχ/yÖY[oŽát£ç«ôñÈ&WÓ^–Ü2{ØÏ—on¯Q)ÞÑÉì|áñi dH#Mµñ Γ-ìîçórŒŸ2Õhÿ‘ÝUz]ž÷"ƒ­6lÚmØRJXµnÑ7&<ÒŽ^…¤Ú»§eH«hÃ>˯ކûùŸVW©àÁ;G› ªÜ*CzØQ¶Iª6¬Z ûó_ö^Ù¬iHýp½þ—ø»O>0|Y3–õv\Go%›¼Ù¶~ÛbÃ)‡Ö;Ý;N(¤z]3.Czl¨ ûª^Þ: ß—­ª¡ýÀ=77žÔ5ȯ֒<§3¤è¦Úx“ZfOCË#­/m2ZæÐ½î±ÁkL½ndH¶Ú°£¦æÍ¯~Ĩ׻ž……N8Ý*}]kÒ[º±6ìùÙã]ªwéTÑÒsV5ÜT4_ßÔW3$•‰6ìýkÙã}^ôÙÀþÎç[Œ\Ö5_|åŽå2¤´âÚ°R³‡=ºµwãâ]WLyëváÅ‚î3¤C³´ÛüYý|ÙÂÚ9íí^~Gí]uœ÷åU5CjQPvÖÂüÿü¾Ò€k!KÒÍšï¹]¸×~ë ig/mz/¾+-*Z½ Î±Ž¾ãO6˜áµU†TV)S:”Ãêä4|!#¥j.*i”´`‹$–ߑߕ÷úãåi&Èi™(¿î—!Fª7‚ŒÅ—ùu„¼s)Næ%o¯£å]øùýX9Ì8q ‘Ưäðå×IòëdùuŠü:U~&¿NW}?)C]€ú­®ŽÈîF:«+¨¤Ær“®‰Ž4Õ Ý§’šÉc†ëˆ;F3V3N~?^~ßP*òRÔ¥2\埂•·@qÑHC©¸v¼¶½%VGN‘K%¤¦Ú^Ö×:ù”¶O–:ñ)Ëwµ~lOŽÐöœÍ!ÊW )CC¼ºFÙ.›)!åÔ­'ú¢SS©ï9gfö™dÖ§¢Ù¤Û* ùâU´ý¦ÒG7yÌW9GäÀÚèì”h2‡”®––J׋ˆ.†zúåÏÑÊÙaé“NfUÙ'ç÷Ï⻆†"É9~Hr %îÌaË)Úk½3“­›%ÉJÏlF‰ß'ÙF‰Ææ7IîlµTÎèéë‘äA†?&yAN‘ä yµ5âIykh/g75‘kæâ_þu–ç79¯XO¿êÏk ]3í-¿»®Œ«"Ç’G^ðªRuJ@UÞU“ÿi”³%'ɃO¢TCÝ»½ÔV> è.¹É}Ÿò·Mä÷Á|{ÍÔè‡yÔ'Å/L­'/g•²^rõ­’eªû­ž¿Ú´Ëï/Þ1üW.ŽÑd^s"IKÅí@òÌ3;fô”çPQ¹”ơҸ1Vs¦JCÆLiDæU¶ùåk´ øBJ°ˆÒ+¦4îŠ+ \Ò8*¥4ÐŰŒÒX+§4ª* ¢’Q••Õd!¯Tm#¶ºRR-•¥•²ñZ+X¥ñ$zõ”•­ÒÐj¨4 Ë§ÚFY3¥QÖBiì·R—¢ÕVÙòÚ) ´JçT'ù”—(ÚëáºÊ§—%©;z 'z)÷Lõ‘Ä}lÚFdq;á¤l¬IìÏÄÖ4@4 D%Wlð;_%¹óÕ[¹ÿf°ÒÁ#®œð‡ø©m±½)§Âƒå*ƒ$…ˆûj”“ýÃÄ®UÒîÕFŠŠ›8Àˆûm”N‘qrõA[yU‡IbS’ïíמ²ž¦t¢Ì¯Hä .éâ€.çâ`®œ\ œh[$áâŽH,E\\‚¥X¦œö'˜V*§sV)'OÖ(×®ÃzÑÀFÑ`CŒr²@\ºUÜ£Ü˶]tÓc§ø1z±Yc·¸ò{±O© Jq˜IqˆHqxGqhFqXÕåþ¦xQQÕQÄ9qÄQ™@\\>±ù‹›¨L‹'_á–häˆû}pwqO¹oêR qñÌ#<<ÁSˆŸšà/ðRTþÅîoÄ]~âúpÀ“> ]Ü"®?WUвØGgVWEõIÜcq4Ö ;è«Äu‘Êý[âž-q¿–¸WKܧQm;ŽÜ¢1*îíB^äC~õf©èpCE1˜£¸8ˆª´÷…•mpé/”F”E9”µ©"*©´÷‰«Û,ÄIí¹-©:D#Ó5a…ZÏÉ© ÔA]ÔC}ØŠ'_Š{®ÐH%®Š•ä°¸M²™x9Z %Z¡5Ú¨´÷­Ù¡Ú£:¢ìÑ]ÐÝTÚûÛz 'z¡7ú /ú¡?à'•ö>8jñ’+Ü0â¹Õ1ð„¼UÚûåÃ~ðG„!Vi;>CTÚûêÂ0 Ã!*þ#!*ý¢Ê/*ü¢º?ãUÚŠ¾¨æ‹J¾¨â‹ ¾¨Þ‹Ê½¨Ú‹Š½¨Ö‹J½¨Ò‹ ½¨Î‹Êü|•¶"/ªñ¢/ªðˆ„èĈÂ,Å2,Ç ¬D4Va5Ö`-Öa=6`#6!›±[± ±ØŽ؉8ìÂnìÁ^ˆûíöãDâDóATîŽâ˜JÛlÑd †Ó*mcA4DC!gqçqq —U¢Áök¸ŽHÂMÜ‚øÙñÛ¸ƒ»¸qòñø9r¤â!á1ÒðOñ ÏUâZA¶¼Âk¼Á[¼Ã{|@:>â“xn¾à«J4m´~ÑÎ-Ѥ =µhÌh›2¢æ,š1¢#š0¢#š/¢ñBÓEn¸ˆfKäUk¯³Ì(ˆB(Œ"(Šb0GqµèxdûGI”Ci”AY”CyT@ETBeTª¢ª£†¸E<õV¨kÔ† ê .ê¡>lÕÚ†–8EØÑMÑ ÍÑ-Ñ ­Ñma‡vhè(NÂÑ]Ñ ÝÑ=Ñ ½Ñ}ÑýáG8Á.p…À1ð„ÄsÂ|0¾ðƒ?ˆ M5 EB†aÑÌÌQjÑÀÔ6/ÇB4-ÇC4+'Šç©b²xЦbÄsVg`&fa6æ`.æa>ˆ«ø±áˆ@$# K°˰+°ÑX…ÕXƒµX‡õ؀؄l÷£`+¶!Û±;‡]Ø­Ö^y»û°¢©,ʇÔÚF²h"‹²h‹Æ±h‹†±¸Oö4Î 4‡EcX>I|N-šÁ¢¬m_R‹æ¯hü²ý«EÃW4{Ùþ‘„›¸…dÜÆÜÅ=ÜǤ ñ‘†'xŠgxŽx‰Wx7x‹wx/ž#‡tµöÞPqG‚¸«â ¾Šûi•J¿èSQC4Ût¡}ä@Nä‚ ac˜ˆf9rÃLܱÑמùQQ…QEQ æ(ŽР$Já/q_Û?D‡W9”GTD%TFX *ª¡:jÀ5a…Z°FmØ ê¢êà D_’Žè€äî‡&:¢ëA’;š£Z¢Z£ ÚÂíÐÐ`Îè‚®è†îèžè…Þ胾è§#.L`û‡#œà ¸Â àŽx ÞðÁ`øÂþ@ ‚0ÁŠ„" Ãt´]+#D'"Fa4Æ@t³Œƒèb™€‰˜„ɘ‚©˜†é˜™˜…Ù˜ƒ¹˜‡ùX€…X„pD ‹…%XŠeXŽX‰h¬Rî†ZƒµX‡õ؀؄lÆlÅ6Äb;v`'ât´÷ºïÆìÅ>ìWî÷!ÂaÁQƒè„?“â>yœÆÄ#‰â3œÃy\ÀE\Âe\ÁU\ÃuÜ@nâ’qwp÷p‚T<Ä#᳎è”}4lÿJƒ_ôúªuÅÉ>BúÈ!zƒ!.Ñ1€!Œ` ˆŠÜçÍò /ò!?   x £ˆ®¸G…íæâY(¡+zPÙþQ ¡4Ê ,Ê¡<* "*¡2ªÀUQ ÕQ–¨ +Ô‚5jÃuPõ nàµEqé¡1š )š¡9Z %Z¡5Ú -ìÐíÑÑ öèŒ.èŠnèŽè‰^è>è‹~è8 Îp+Ü0îˆA·¸{ âVN †/üà"CŒ¡A(Â0 ÃuÅÅPlÿ…у±‡ñ˜€‰˜„ɘ‚©˜†é˜™˜…Ù˜ƒ¹˜‡ùX€…X„pD ‹…%˰+°ÑX…ÕXƒµX‡õ؀؄lÆlÅ6Äb;v`'â° »±{±ûqq‡qGq Çq'q §qñH@"ÎâÎã.â.ã ®â®ã’p· Öxwp÷tµÏ9y€¤â!á1ÒðOñ ÏÅCañ¯ðoðïðŽø„Ïø‚¯ÈP:ûÄ ¡â ƒtõÄI}¶ä@Nä‚ ac˜À¹a†<È‹|È(ˆB(Œ"(Šb0Gq”ì¡$Já/”F”E9”GTD%TFX *ª¡:j@œ“¯ +Ô‚5jÃuPõP¶h .D#4F4E34G ´D+´F´…Ú¡=: £¸xöèŒ.èŠnèŽè‰^è>è‹~âÂD8ÀNp† \á†pÇ@ ‚<áoø`0|á A‚` EB†a..†ÄHŒÂhŒÁXŒÃxLÀDLÂdLÁTLÃtÌÀLÌÂlÌÁ\ÌÃ|ñ¸f,Ä"„#‘XŒ(,ÁR,Ãr¬ÀJDcVc ÖbÄ…*°›ƒÍØ‚­Ø†XlÇìDva7ö`/öa?à A<^úŽâŽãNâNã â‘€DœÅ9œÇ\Ä%\Æ\Å5\Ç $á&n!·qw!ñ}‚T<Ä# ñ Ÿñ_‘¡tô‹[ÉÅÍÓâVl]èé‹Ölÿȉ\0€!Œ` ˜"7Ìy!®u×°@ABaAQÓO‘`ûG hP¥ðJ£Œ¾|¼TåQQ •Q¨Šj¨Ž°DMX¡¬Q6¨ƒº¨‡ú°EˆkhA\ÓâÚqMKsˆëUÄu(­ÐmÐvh‡ö耎è{tFtE7tGôD/ôFôE?ô‡ág¸Ànw Ä xÀ^ð†Ã~ðG„!ÆP„ a†áâŒ'FbFc ÆbÆc&b&c ¦b¦cfbfcæbæcbÂH,F–`)–a9V`%¢± «±k±ë±± 1ØŒ-ØŠmˆÅvìÀNÄavcöböãâãŽâŽãNâNã âõåï–õÅ$lÿ8 ¸ˆK¸Œ+¸Šk¸ŽHÂMÜB2nãîâîãRЇx„ÇHÃ<Å3<‡¸`ý%^á5Þà-Þá=> ñ Ÿñ_‘¡œäSA èBúâ bȉ\0€!Œ` ˜"7Ìy‘ùQQ…QEQ æ(ŽР$Já/”F”E9”GTD%TFX *ª¡:jÀ5Åo2 ¬Q6¨ƒº¨‡ú°E4D#4F4E34G ´D+´F´…Ú¡=: £ø­#Ø£3º +ÄïCtGôD/ôFôE?ô‡ág¸Ànw Ä xÀ^ð†Ã~ðG„!ÆP„ a†á⪌Ä(ŒÆŒÅ8ŒÇLÄ$LÆLÅ4LÇ ÌÄ,ÌÆÌÅ<ÌÇ,Ä"„#‘XŒ(,ÁR,Ãr¬ÀJDcVc ÖbÖc6bb°[°Û‹í؈Ã.ìÆìÅ>ìÇÄ!ÆÅ1Ç œÄ)œÆÄ#‰8‹s8 ¸ˆK¸Œ+¸Šk¸ŽHÂMÜB2nãîâîãRЇx„ÇHÃ<Å3<Ç ¼Ä+¼Æ¼Å;ˆßàú€t|Ä'|Æ|E†r‚_ñH'q}….ô ȉ\0€!Œ` ˆ»zrà yùP…PEPÅ`Žââñ›((‰Rø ¥QeQâwS* "*¡2ªÀUQ ÕQ–¨ +Ô‚5jÃuPõP¶h€†h„Æh‚¦h†æh–h…Öhƒ¶°C;´GtD'Ø£3º +º¡;z 'z¡7ú /ú¡?à'8îpøc Ážð‚wNíÕ<ƒá ?ø#Âc(BŠ0 ÃpŒÀHŒÂhŒÁXŒÃxLÀDLÂdLÁTLÃtÌÀLÌÂlÌÁ\ÌÃüœÚKubÂH,F–`)–a9V`%¢± «±k±ë±± 1ØŒ-ØŠmˆÅvìÀNÄavcöböãâãŽâŽãNâNã â‘€DœÅ9œÇ\Ä%\Æ\Å5\Ç $á&n!·qwq÷ñ)HÅC<Âc¤á žâžã^â^ã ÞâÞãÒñŸð_ðÊÅ=*¨ÅcC¡ =è#r" `#æÏü5CäE>äGD!FE1˜£8J@ƒ’(%~A¥QeQåQQ •Q¨Šj¨Ž°DMX¡¬Q6¨ƒº¨‡ú°E4D#4F4E34G ´D+´F´…Ú¡=: #:ÁÑ]Ñ ÝÑ=Ñ ½Ñ}ÑýáG8Á.p…À1ð„¼áƒÁð…ü€@a‚1!E†a8F`$Fa4Æ`,Æa<&`"&a2¦`*¦aºøµmÌÄ,ÌÆÌÅ<ÌÇ,Ä"„#‘XŒ(,ÁR,Ãr¬ÀJDcVc ÖbÖc6bb°[°Û‹í؈Ã.ìÆì…ø¡ñkáp‡pGpÇp'p§pg$â,Îá<.à".á2®à*®á:n 7q Éâœpwq÷ñ)HÅC<Âc¤á žâžã^â^ã ÞâÞãÒñŸð_ðÊ…}*¨¡c žÍö}ä@Nä‚ ac˜@ÜÅ›fȃ¼È‡ü(€‚(„Â(‚¢(sG hP¥ðJ£ ʢʣ*¢*£ ,PÕPÝ@<ʼní5a…Z°FmØ ê¢êCܰРÑÑMÑ ÍÑ-Ñ ­Ñma‡vhèˆN°GgtAWtCwô@OôBoôA_ôC8ÀNp† \á†pÇ@ ‚<áoø`0|á A‚` EB†aމQ1‹q ˜ˆI˜Œ)˜Ši˜Ž˜‰Y˜9˜‹y˜XˆEG"±QX‚¥X†åX•ˆÆ*¬Æ¬Å:¬ÇlÄ&Ä`3¶`+¶!Û±;‡]Ø=Ø‹}Ø8ˆC8Œ#8Šc8Ž8‰S83ˆGqçpp—pWp×p7„›¸…dÜÆÜÅ=ÜǤ ñ‘†'xŠgxŽx‰Wx7x‹wxHÇG|Âg|ÁWd(õª †t¡}ä@Nä‚ ac˜À¹a†<È‹|È(ˆB(Œ"(Šb0GqqÕ¹¡øMD¶”2¿ Èö2(‹r( ¨ˆJ¨Œ*°@Uñƒ{¨Ž°DMX¡¬Q6¨ƒº¨‡ú°ECíÕïÐMÐÍÐ-ЭÐmÐv?Œ*~ð¯:¢ìÑ]ÐÝÐ=нÐ[ü *ú¢úÃŽp‚3\à 7 €;j/ƒ÷€'¼à-.‹Ç`øÂþ@ ‚0ÁŠ„" Ã0#0£0c0ã00“0S0Ó030³0s0ó0 °‹ŽDb1¢°K± ˱+UX5X+ò×”íŸálÄ&Ä`3¶`+¶!Û±;‡]Ø=Ø‹}Ø8ˆC8Œ#8Šc8Ž8‰S83ˆGqçpp—pWp×p7„›¸…dÜÆÜÅ=ÜǤ ñâ&¿4<ÁS<Ãs¼ÀK¼Âk¼Á[¼Ã{|@:>â>ã ¾"C¹ _<àQ #íÝ,zÐGäD.ÀF0† Ä ¹a†<È‹|È(ˆB(Œ"(Šb0Gq”€%Q ¡4Ê ,Ê¡<* "*¡2ªÀUÅ/§¢:jÀ5a…Z°FmØ ê¢êà Œ´Ï l„Æh‚¦h†æh–h…Öhƒ¶¿³ÐíÑÑ öèŒ.èŠnèŽè‰^è>è‹~è8 Îp+Ü0îˆAð€'¼à  †/üà"CŒ¡A(Â0 Ã1#1 £1c!~•v<&`"&a2¦`*¦a:f`&fa6æ`.æa>`!!ˆÄbDa –b™‘øÍT¶¬D4Va5Ö`-Öa=6`#6!›±[± ±ØŽ؉8ìÂnìÁ^ìÃ~ÀAÂaÁQÃqœÀIœÂiœA<ˆ³8‡ó¸€‹¸„˸‚«¸†ë¸$ÜÄ-$ã6îà.îá> ©xˆGxŒ4<ÁS<Ãs¼ÀK¼Âk¼Á[¼Ã{|@:>â>ã ¾"C¹™G5t  =è#r" `#æÆâ.R¶äA^äC~@ABaAQƒ9Š£4(‰Rø ¥QeQåQQ •Q¨Šj¨Ž°DMX¡¬Q6¨ƒº¨‡ú°E4D#4Fcñ«&lÿh.~c-Ñ ­Ñma‡vhèˆN°GgtAWtCwô@OôBoôA_ôC8ÀNp† \á†pÇ@ ‚<áoø`0|á A‚` EBñcôÃÅÒc$Fa4Æ`,Æa<&`"&a2¦`*¦a:f`&fa6æ`.æa>`!!ˆÄbDa –b–cV"«°k°ë°°›Œµw:nÆl5Öþ6N,¶cv"»°{°û°p‡pGpÇp'p§pZ<3ñH@"ÎâÎã.â’¸ûWp×p7„›¸…dÜÆÜÅ=ÜǤ ñ‘†'xŠgxŽx‰Wx7x+¶¶†Žø„Ïø‚¯BFFFqƒ½¸¿:Ð…ô‘9‘ 0„Œa‚møBÿ/ˆ´WeþÕP5`‰š°B-X£6lPuQõa‹âÄh„Æh‚¦h†æh–h…Öhc¢½ëÕíÐÐ`Îè‚®è†îèžè…Þ胾è‡þp€#œà ¸Â àŽx ÞðÁ`øÂþ@ ‚0ÁŠPí:c8 Ã1#s³ýc4Æ`,Æa<&`"&a2¦`*¦a:f`&fa6æ`.æa>`!!ˆÄbDa –b–cV"«°:·6ÍþþïýýúÁªÙlüŸ?ýÏ>ÿzhçŽË¥<”(û¼þ¹ça×fþºY~ƒâï>·ûª¡ô?ö÷Ï.ÿÿôßgþ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýçÒ(ýïõ@é£ÿN”.­<YûWè‡îk5Ÿ¿Wü×Êw]3~º¹•dê)É+û‡ŸÿÕ/„ÿôÃÝÆ™1[}‹93s¬³tšfË¥{ÝT»¹x8y{ºh:{ÿ9™ú)âÚYrÝè—/‘KB¹7UCë2@òc–ÕdÆiðS6¨”éÄ~Yœ%%@>7%~z¸&óÔð.XîKõ”{¦5ÄèÂ{B:Èï5’+ßxÈýÊÆr,¤`‡7Ÿ´½ºVßÊef‰t’û‹µ=³ÎL]‡é­”yºËiw—Óä/—ÏŸÃSÞ­:s>rOº“¶­ü.3]Ú84,­!³~ó=ŵ•ôzJ,éeíŠÞw'iÀ·Ø4rŸ³Øšá'ç‹?ßûÊkÃMî»wø)eCÈÛ况gÆ/òÓIž«ó·žòYr­BÖ”V—Óé@Xí9GD~¸1ÞO^B9îFÊr‹er’Så)ÇæB9ÑÈû‚ïûŠ9læÄú«ümzf9Oá"¯í:ÑHå¥ âuWbw—Ç9(g^´ñg.³ ãüåO®ržùËOb_jºOyVºôm§-§¿Ë•e[ÏÌÈÏtÏÚ_©úÖóð=LþŸÆdöjÎÒ›¡ý&k¹vL£Ÿ¦®úS˜*Yv<µ”§ªk·8=e§£Ãûâ߯æÈ26æ§-Þ)Ë­³+ónèâèçúÍv¾ÚT<ñ;ëÞ¦²ÆÁKã-ïê4~"'ygüãNPÞVÖ¸ûi|¼ƒ\|Ù9;‹º˜ÀÅ—(4ÎÁ^žîN•5ž?ìÃÅþßÁÇǃ¨üݽ½4Î..Þ>ž.^þ±o76î<€˜IÐ M»‡üœ|Ý]²Îá§hEº5þG².&ˆcDfÄ™™ñð§lµÉ’­¿9|‰®Ìo gf—= ™3Ðüæà²V>Žª¾}þž‹, ÐùÍzÍ÷C;8 róõðrΜkþß®cñTæïS’·r¾ünE¸xºûz{Éïü\D®2#·ÞþbTÖ¸X¸YÔ1þ±Ôð…G/ùÆÞŃyeýoŸ†bcåëªí\üýœ|äƒwfàâë§]sÒƒ5žÞ¾.ÆÆ?¤ÖÑA$‚D¶ãl/®cüý½&ÈÁ/3ýÚ’(çíê/ ¢Ÿ§EH,®Ÿ¿ƒ¯€†døˆ™98 pÿ^vE½¤ºMͬ1»{9yˆ•+§ÎË›yh\]D ÅOùÒÝËMãàããí믡ÉóîÀ×òbiZv¶k«qqv÷÷ö­êèëä'o,®³ƒ¿ƒX.bñwqó•WB¶ÅöòijïãâeïàëDÕÃ!ÐÁÝÃÁÑÃEž•³w—‡·ƒ³ÆÁ_3Àßß§NÕªAAAÞÚHD†‹géûI@íÏAh F©oã.}gÿm\§,á¿…–Ïå]úöÎ>Ëù½µ¦ŽÊE?ÚBheGÖéÛØœYÆú›+ËØ߯fûs­ªj–MF÷7›Lîl›ŒŸ»“_ææböÛªxp°¶Rì'ê2©™.qp P‹®ò?óg‡Ú©‡|ÀÕî]äðö°-.þq”cñ‘+Lâ øýC.P>Ø{ó}æÅ‰yH(_9Ü÷ñÿ‡½/Žã¼ÛÅ} ž¢$ŠÕ”H <$QexÀæqAê6¹Ç;äîÎjg d+–6nšX>ôҤϑ%ÛQdÅMdÙÎs;–jÅm]·q¿Ô}~öSš×ö媙˜Móüb³ßï÷]¿™of ÿ*ù$€³;ßñû~÷õIÁŠýÛeʃVcŽ3ÅÂêWЏ"9SÀ~Ú(bùüÁ2YBî\* rÔÉÔa6âõ¶;‡U%ÄêJüË‘æP¡¹Àžçñ7®ÐM0£gZí Ô¿©²©Õ€P÷ÄWØëa0®ãN„Tš"ž‹#T’)¶ò£¸“a6ËG6‡ªNAÁËW5/ã×E²¨>U8ë'Ù›•+n¢qeª‚¡DNŠÓA¼8ßÊ£¢tž­‰«vŽrG‘*g߂ՃJç#Ô Bݬâ»>~_*¶ªÏžr–æêà(þŽr›¸²„ÿù÷Švþˆ<Ñ|Ä!\†Á©­PõŒAÕ÷ª^—@ÕVˆª‰ÜíO$ièñ~DäÞqDÍmÜô ‰8yÛäšÐºm̽‰Gù~“ëÊ‹ìÿKø¯<û”# ‹È ­•"!·“¨%Oæ©$Òù6ÿ†dJUÔæ¹~î ”k®8ƒ»á»ç$+W%K.„øa’G$©!ÊÀ@B’Àΰ÷à›’ $D °ŒV—¿uZ°º{zç¶Ø3ðCT…- ÇÏânøhY² WSÁ1ç#ûâÖONìhÉ,KΚ%¤çq~Fm‰U2µ®RÎTß:c¼ŠDÍ1,'˜0ÎÅŠ‚)L|$®ý2ÿVX<§ž½D>K‰Û›”ãE‘Ý;ÄýOœ"ŽØ3­ÊÒéVO®'ãè9Ãú~B 3 º!J ö1¯è”£D qò+I%.GùñÎß¹Á>ÌaEá âa§‚žµŽFi–\Ÿ6‹]¤ ÑòŒrÔeÁ% _Ã&'–QN”Õ<@pGÄ÷ùÓSL;;#ofüßœPâœ6šP)¢^Qsf«È®ø©ÈýùÈÒ¸›'Cd¸)#,t«ér²…™Ï+©{(·rÈ®rBƒZÄ•\@)_2ZK›»Å%_üÏi…A·«gϑϟ¼2°U\QÆÑøÅÈ-S'±×' 6¸^ÈUjegÜž<<=âKL?é<ÙpüÀž©{§Æ”H·%Údps\Õ?Swæ]ŸYAgjì];ïV‹Ì¦f¿2û׳sõ¼ÔÁËXç3øãRž^ëF0]„ûÉ®6&ìj ÝÕ”4L& fÅÈ\Ÿ¸‘ ßH1o˜Áìtn2²Õã`e<ª ÜÁf’Òë¾ÓX÷/“u?š°îë麵=lÏæüó~t™»ø2ýB‰PÙáð†Ë`¶b^‡Z€‹ÝN<<­*;§]=Ñf_ú„CnHXºM—®Yå÷šØ3¹yC·$j5ÿ2§–Çq:M”•R¦ÆYçSgØÏ‘mg*âýQ²ˆÿ˜bÅÒw l8.‡yšýÍâ\Í^À5dCsÍ„ä6_°Ãd’!‹%›ö2/V5$v:¬|—ò[ÜÏèš¼s„½uŒíxçˆÊ|Y¨ÌI. ŸoU1üš ÂÎY¨1jÚÁÜ@h )è¡ÖL½‘à/Ö¦eMh&®á£z㹞ê,üMXE€ºŸ›zJ½õOÏ£°å~hyF¦¿_ „<žŒ ˜ã¢µ 4E ¥5êÑT}eT¼[ÑÈ_(<7y¢µ Œb:Ê6޶±=ö¶RÚ˺ðÓž˜š±g x 9úM‰,œ' Q¯‚÷|Ž[qЯ#œ<ÒÃxŠØ…²“«‚ÓJnó.tTÃÞ«ÄmE”â\‡'È–oMØòæ»a{ròùy¶z¹Ùë7 쉪ÇvYgܽê̱ C˜Â6I]_LÑcp\9j0õÂoKXê!Ý1Ñź5‘)‚¥ù¢וâX˜©Îçð©,ÎZžYfÐê/!p†Ëýêl퉙i®õå|䆰ö$K°÷ŽîBÖ¨©z÷è˜e¡7V ÂT^·âî‚ã[“ìIÃÂKç<™ìÐbÎŇlÔañ–ok·-”MUö çýaP<™ji¶_ÊÁ:Aó´&½jÑÅHÇB®î‚ 5l߯æÊ8“¿T-”ê^Õ}ÊQãs@ÀÐìK~àÕ™^¯Urn5`ÿÙ5§>"¶ÓØ‹%·PBµ’qLP†k9StëlEå%ö(Xtœª=ר`9¾ Tçû#u&$OÂî´ß~ÍÀ¦Y‚Mw&íM’hñö$[úaÆåë¹2[íô|Õ«+¸-‘táŠÄ‡$v§v!wÒ¤A|^øê uú4#!$«EDæ²p€+-²)Q‡Û9A€ŽQGî'•°0÷÷½sõõHÈ­SV*°‡|êœpúDå1e|º$R. ‚íÄ9•¸›Ë‘î0„ïSåÏaß¼Þæû­*÷’!'<Ä|E„)¨Ç'tw°Sá¾p©K/ï¤x.}ê\ñû»‡ôê‚!Ö‰ N€) Q”è ¹g…0ÁF•ÚÅOùÜN’ÙX_vx„Iå\+ õS2i9ÊA¶&ø¼F>ÓÞ>ª$ºo*2ø¨Âæo’'a¢ûûØ(Ö#Ñ=Hˆîö¢Û„D·dOÔÅn{^QÉÉ͉|¤Â!Æð|Èb¼Žñ²ŠŸ‘< ™[-°øŽŒÜÖD9ë*2Sß…ð9SI½†Ï¨œ1Eß©åêL÷µ'gNù–µÌðìéö\ŽÎÜÐg|ѹPs˜|Xp$ï­;>†.‹† 1d˹:c¢…3ćWÅG_ðŹÙÓ;NH чÖJ0¤7ñ(¡ŒŸ½nçÑç«Õ|› …o³Ct!ÂÍ) ¥_ï2ïdG61ñ$ÒË-Ùû@®eê¿,j–¡J¾ƒSIyî=Á¤“­iþÐÇ– ¦Ï³…€Ñ$z‘WL~…a¶&wéò:˜°Kî&ÚëåØ9â‘ΫO¬ª éT^Tm,ŠðÜ·)dƒG}¹BÈ%jüK¥²"b‘¶W{a9÷*×€¶ 2¨¼.ˆƒaOê‚[G=äZCŽ¢òøšHàòE\“«•Cÿ›gÿñŸGžo5 ªi€„Í 8逈TÖµ–Žƒf°‹ž×Å7¤¼­ˆÝù*êõWG=Ô‹j-rü¢2!øiI,ØË`³‹ÄÕë £¿¶µ€k|Lá#õ‰~Ê ï“„¼‡{âÛ#6jÊà ͘érî j–2w_"Ç‚5rë~AEš ªfÛ¥º~óŽTÂÙȼ*\Sç¹C{®îUì P>¸åѸLŽÛ«ÖZ±OÛ øœ%ð¹+>C ð¼ü(júY®éK~1œ ˆ7w.`Ì—½<!ŒŠ·À}âAŒA…Éô ›8´Â~~sï9²÷»ö~sÂÞ¹`c{÷jÉlrËyD€*˜4öPæ²y5LÄbR×sÙØ>S˜—[–&$Ÿ ù޼¼4ÌT•¢Ã”†"&ž©¡’íãS„û7±h¤åvCØÓ¾ßЮõm‰Û„bŸ‰rPíIY±˜9Wj0õ…é=50EsõbÆv™­@¦b‰µ§·Ž{nVÉAX‡?he;p°j36¨>1Fgä$/S‘Rf,§¥Ë~¶²0{i>ÜØK$ôÌþdšž8 ?7çÈqa‡­Yy#x˜çT¼ú’Íš!+ÃTv‚`¾2]%ÊÌBdÖ¶5]õöÌ^ƒéê4‹Î\ŽVK€„;· ЧzŒea [湃Â3Ì‹?‡Ç—°•±@|SZžØNõl’|þ„ST[:.Cí¢ ˆvýµrVîIH5Ã*AZj"ÕPq3É>RÑG/h–æpAˆ"é–±}Nô£ÒOäœÑT"ˆĉd¿éœ¾èO#ßÜj/ˆË`·^¸!R;  þ.±cƇ«»$” !QGÓOF‡ÌD9óãWÂRJf¹{Â!àa^ɤÈÖq•Âå 'EôèØZAi ÷-¢*â2«Të^¦°M©w‹¨¶Ü<n’Ô—”’Ç¿'£8Úáñ¬‚òbæ…R¶r4VE,Œ+Z>þ«"NÑ_fí@‘:‘ï-‡†ûS¡NŒØ¥%ÇÔyÈW/ž¸XÃS8mµ©x ëV5âƒê°”Lñ B ´( Óˆ3VSÂq挕ø!Ÿ¾„ž¦¤fBÖ„oø×£.Î#oË Žr [äy—ELVÒKEaëWÆUÈÊï‡ Aú1Âᅥ4ðòÀ¶4”"Ów쓎Ϭ#&.efl£VYÔÝW$n¸à„ªÖ©êœÇäi>÷ÅûL£?N¸e‰ÓL¸¿œzÝ«O³7‡­ã„1!ÛRIàí:ÎŽRÛöÎð$ÁàSóªÖÁ ðÌ#_Ü9QRës¯ƒ*ö=£{lîÀãι ³õØ^æëì'~‘鮌]v&Ò½ªcï½±Ù¤K6”Ê–"Ot‹‚}§ò€m!O¨¿Ë‹­È|Éàu^·£‰ù(ƒoœ`Ÿd‹&Çl'²º/¦ãYÝn†ücŠ\ê¢`¯@HTõ†! ͇bÆ1Ð. (¾(4–Ùœë, ørákX—T^Å¡úëÆÙÝGÄAÂÙÝ ³cì[åm ûTŽ}cÓô—Y’í“wD„¬¨r?eü¸êŸáhÑ$ýeYòÀòµNlÉRÍ8†±®åSdÁñRrµ"ô-V¸ Y‚Šßn‰%•>cí’µ-ŸÅkç• “Hµ|ÿ(–?- \,1ÏSÅ$[Q9V<7 w£rÝ]±Ñè›ÝÔÈn4ig¢wsÒN"t/ÉíL ÖM”=ˆ æ?dàÊ!ò9¯RX¡¥F ±Õ‰SÌÎ)+70Po•,;çc¢³JI˜^Æ€lo*×ê„N5AÉ™F€¤C³ž}Êw–CÉj-Ë—;¸MJ’Û1Èúé&É(í‚ó0M#þ/Î}dêM.Ö©.õ%˜±Y‰„l¦à —ޝ"^Úœ‰ýçã܉—pK£ªñÒF]´DޏƒâS||å`™1µ*z§‹b³B%õÙÓ;ŠB>Zù@9¹v‹5PfH(Æíޝ[J}¼rÍÇÏ+Fk ó,%VÞk‹; ¾w$4Rº¹~¤OÓL¤GÓ WÜBéá9[›fÝòú:ý ²nôÉâÉ <‘ûAr 磨ø¡¶ˆšÚ|3XUë‘“Ë{ åëç¡„Úc™#o"‡ ˆN–ÿsª:éÆDòŸZRM°2œá釴Š$¦5~2Á¼* Ztð[Žˆ¹YÆ-k–°G“y Ñt£E^Nê0:QA£éñ#ˆñÚu¢w¢ë|´û—6ù‰Æî¥m%ãNylLSGº&yœ¿&÷ä3gÑeöüîšùPFC á>î(‡™ Å+n-d‰hUüÙçp|éæeRƒåFV;ƒË‰ÊÏ : «Â¹ ªKŠ[ñî€_¢9M†DûrªíQQµ#py⬪*m5ûõ•ÓSF–îWTò†Â÷sêÙýä3O:g$ýŸ‹uŸ\2ètž°Ÿûš¥ 1î¢Óc 0hq–KzyàL” UàeYƒ‰™iA=Î"ÂnmP‡åpE+£ƒC²Ùh–iÜNlÏ"Ó¼KŠ5vøÙá™f™wQND»Fw^'¦êˆœ/‘ñU¬ËÏ„G¢I„¨Ó9D+ÀÙ—Ì…{YO\[ݺO˜ØÓa²§›š(ª¡UðæpþòŠê ºEñËУ-4t¥ã©}Ü]àU‰òW¥‹Òô-:àeôÁ©¨ÎçAã|JDRìKØ tÀÄÁãJž- ³êø€ƒ‰Ûø¯é˜C•MíB£^gb©Úp"uׇ¼Ç»ÇÆÆîÄá@TUûÜJÚyÏX?ƒ6’è‚Áy°Wfí[;Ç¢‹ŽÁÌRa8‚|l{ùWòØ3­Ýü=ø:ïŸC=šÔÅv‘×èåòÐÎp×Þ1bÁË2õÒBW'Ùî˜9šU,ÄN ÃÑÔ,B œÚÎc̶`G¹岞 ©´ÈäÿÒ¸u„ έ¸å2:‰!F U…Эӷ°ƒ£Õ',üßì‹|ÙõKBÙ(2cîþBÕYdD¸ÊD¡Ð`äq\áîyw§,{ó84ðÉÓ¤™?u~ð7¨GÏ*dع%@W´Þ ~{Ö࡟‹õÞfh‹„§›t7ú„º5›WÒ),L¹é‹PÍy⪫þR2ÿkK‘BÝA'BqmÚliý8²ˆá”°YöŒ…+Ë Ù-IZVÔ§ÚÔñÔiô|Ç™t)¤cCGðïºè]&{_@/âñu(Ž Bó]çq„¬*[´™Ö  )Ã¥™Ò¹¨ÎûŒ:ËEò„¬þÔàƒÓ´}õÒº®ã§å`Éuÿýrü´=tÜ ½úyû´ðô £PÕZ†‚ÀÙâ‡ÅÄìn?nMØ…² hHU`֢Ϳ1,Õð.C~PwrXÿ&˜ê¼}~ÉšäcÆÌ^w*(Da~®âXÛÛGÃwæ¼pÃ]¹P³^_6~Í¢¶áƒòÇíI¶V·Ú€â±žŒX"ΘzNëryÉ:æ1.çÛ³^1¸qû¤²6’o”ÏÈÝ@ë÷ùùº3Ž@¬Þ>æ9ümÜ>Q(ä|.È ¤ø™-xµ¯ ˆ[dYnÁØ'ÊÖóUo±j˜hq°ûˆPR*™4­šNó?ßWÏ!ߢßù~$ a$Ö øŽØžˆŽÐÏ“&Ö¹•"4õ„nIxµŸ¾ÊÐåH$‡ • _§x š™*aòtÄ/aÛ€\ qÁl£Š8ÅN~ÁÍÙ5·&…*! ! ^ÉpòÀ@—}רXÅ¡Háã…¹l5…aIš R!Å.õìMõì ùýΛúx_:Ž>ºb©Æ¤ß!jƒ»b$£4Gø4¹½‚ýB@vÂØ}¡†B^^Žf%’Ï~PK¼¼=”ÅîÔ'òç˜&9,ê‹Ø‚FY Ü ¢.g[;dch‰mãÖ„¨»þ¤">è“L±œÏ÷˜H€ œj•×ý1x«EÚà.—QN=ßôŽ–«Ãå0ª`'ˆ¬~¦æ{UÕœ=Óé5®–ŠÔ Þøò4DÆ„%*ëàÊäéH.ª˜P´œÏAýº5ÉxL”÷ h9ç®ñ2Š $.ˆél½#&Ãñ@¤ŸõŽ˜ŒG[è´¦kŸuŸ"\9¿bÌàï~Ž`l©I%{edFtØŸÑ …“Žªºß"Mah7!íèÏ«ì~®˜éàcØ‘-ÃÒçGÚ–Æ9\¢Žš„]Ä’GüV%Ít“ŠÇu±÷/ú;ÝÄ­rPYÈöC‚¥Ízót­Šê5]Ëúâu¬À'-1âÚ†š1_´WöD|$®AHNE!tæ\b3Ôf¥ÖºAHRÏ¿E’-¢³ç=ô'ên¹4 Óý\Œ ”ñ_ͧ¬<+<Î+k«Êf„CGªÁÆüCr»4￸>âÓq ÊÜŸ€2ð6j£‡Á9/à ´á|k^^ÖÄïÍl7Æo7—Uhy‘;®¢D2]Q6eåc†«òJˆÔ"-“[oæ±³öDëó ϙԷNê)¾Ò–a>fXmµáÞÃ+çÕ|2µWGÐÂÙQ³è‹†w9~†wૈ#]³š_®« ðò¼è&¸=¤’|ÚPS>aûëb¯ø}ƒí¿BØþ\“þÇ»ìCâÆéŽìU¨ÛAÝW êžoÃ"ƒOJi3¼¼q8®r'Sª>°¢ü÷œ‹IŒ5c“ñœ’véTýC"ŸLæšéË x{ £ØÔ'·)­ä¥¨ÂQã¨$ ±`ÚÒXÒ@]Ü[Tæªî–áˆ÷²èôÿº¸Š  v§ûfÎÇd5YŠfI­ËG@šµì—®hS§ý\£w=…™LÃçŸêÊ)‘%Äÿ|Eá×êÙ}ÊøõÛê7z%Û6r75Ðݦt’ÇþE¢:š(û„DvŽŽÉVš½±uœQúøI*‰>vbŽjFÔH5D]´£’ð8 ¿ë^ö÷ünCdwéz±Ü²™]¶¸:"¬zIªpE„UF %.Òæß&/ÕÅ:gÔÛ96v«¼5‹Gp;–HˆŸõj#;ÇÂ?xM¹ !ƒí1™º*jÉhEUj”›PÛj–5Áó¤äü<U43Dèð‹>†*ȉ¨EÒ aVá@¯Š&VÏfÉgáO¸$¾7VçhÁ „WÆ v]'xy`ÎxRië MvÞ{ïÞŒÝ\Q©‡E ¼“ÈQq 1×õ+¼=0éR:Ññ¸u=nP]…ìybeT·ë*©îù”¤º\¤ÝIxðqfÔóÞ'ÅÎ%m–ÖOdsshÞ"F×<¯.’øJŒÖëˆë Ǹwj¡#רB÷q©æéRÑ%£|t)‚\›b‘ë½ ?Ií¬ ¹v_©˜›æŽbD÷+"S1²71E—MÄ Y`0§T®dE-zØ1Õ-]…D“ܸ*Rm¢bUDPÓ€|T´¤Z:ã)³‡^oS¯_ƒ ÃM2fÃ'dgê^ƒèIõ5M²œUw}ÐÍRe ›OE¡Ë>•\QË¥« ~iE7©*U§6ƒv\¨ƒøPWñÈÄô°ú¨»2ÈÔGYÏꨑ8¼ƒ*jÒ¢8%_ÞÛÅ“:+ rãSÀ´ÙËÓÉr‘ ]~Í)D6yYs5ˆù[DsBCãÇ)Äv-åÍUh MsÑ„._)èÜÝo:=ÜdKßø‰M@º!ö齕œ ÝÀ~Er³Ò_õÔŠÎÇ‚Æùy‹Â–/Š›åUMòÂÄpoSŠlºg•™Y"Q& ±Kâ.çšøÉ…iF%IÓûkº"7·¦æ#ö3äpŽ7Q} [ Çõq­ææH¹H²@MË»nÅ7ÚE~x§XY·ðôФ KÜî7 ÕÖ‰6®Déÿ&¡8\'Jn®ùK7ŠtÊ›D³¿›Eqà-âBÓ·‰7· •ñvÑ` ЧフŒàŠ ÑÏ._¾ ÿýÿ?Wÿg}:Ž:)%FKàyM\°ºzÍW—–Ä™Á²T×4ŠÓ¦¬·•þ®djœß‹k6nre¶“ª•‡?)¨önA +­9zÚ`®¯š/7«º¬.h¢fe*DàEo툅߇Úm™¯0Ó¶ê>Ùpx“™i ±ã¢ë ëœ!˜„ Œe^‘Uµ~ÍqT§In÷ ¹£¤@a¬¢Ð‚r^ðö´ü ‰Ûƒw€‘"…ÿv޶lÓ _¬'…8U¿Qû ›²è({‹Ñ±Øn±W« T‹u7ÀÔ‹š# bÌ bu›¸©x®+äàÀøhX^‡}ÐQµ£5Ö»©­Êžï”—D.0°Í?ˆÒ¡„„¾”œ#ÙÓDH¼³ÉíËXÒÍn_~y +RÈ¡0^>ムêóêxïÏ]ã€iøà-ã•Úr‡àµ£hå«z¾¶XÚꌥ­m-mi’c}bRx¹ëÞ£®¸¢g½¹a%¬Q~;Ìu Ì´þ´õÏzö€ø%ˆ‡›„ÁN`T™Ñ‡Î‰Šfóº1#„K³Uí-c(Õã.n!€Ü² Pò³¼SÑ'AŠøÙ»E¼º h0~Ùq¹µß&üs>¡† ðå¡z®fŸªEëÓâóˆ¾HàUmr»äC%Ï>ÐpÏщX¹HÉÈqWt ú|WÊq_ð,pj¯ìÍ/1¦«Ü"Wõ²ÕJÓëaÀñ6ëÙ‡À>LwZ¸EQùS±­Œ2*ºB˜.YS”×i5«Á_îú.}½ø$AuŒË±¸º‹Øe%j\6v¸ƒª¼Ø&lð+® ×`f„>#¯47ÓmÁʪ£`8âw×_|Üv™‡Ùå$>#$ºg~!™Ì3õ¸ªùW%öÊí‚YdO¤ƒ(éR๓‚'4£ Õ¯5öûöwÿ޲qx…œaT°O)êú|’ñˆ¨ûç„HN61VOÊÝF騸°C,Pj‡Š}r¼ÏGÑ[¬-;Æ­RÔÆwìX\\ÍyeþåQ&-¸Â±P5Êbò*“¯ã–ìü!û®C(G VtF}ù]lGÑ+ì(y‹·ƒ¿p_ *e‹^÷ÔÈé¢ÂãÔ¯VvvœóJÕQ¯¶’×Ä þh­XÖahî@ÃÎ+bkòÖß Œd`пH"®.¥ÍüNEÈÅÛ­Žãû›Ô³ÍêÙq”ÜpL«B@þìTÌÍŒ»É¸tÔÍâçñsc¤¬ðT¨í0—!9m­†£ÛÈ ÑŽ‰¨mêÉÍÆ[ë dî6ÞJ«½VëK·‰«Óo}\£õêþÀE [dFûÿn=ÐþQë1»Õ¯4ÌgRÂðHõµý]'ül¹ø—ìçwZº.Êà¶ZØóÖ‹ïÇÏÛ.á8ÝA£ú2ûÒE¦u}ý÷Ì ÌÓƒï¥Ø;í)þý2: øóöîŸLõ^Ü‚ϼñW©¯c¨ò2þ?ÝÚò:•ðûI½šÛTkH­ÃùR©oôJ7Š•ú6¾u±ÿõ¼b Ñ9[9/í¸3ž³•Ì™j…9SÑ9ÓȲÌ9ÓbÎ|‡ž`¨ði6ç>œsvŒÍ™H¾/ÍÞêú¼Öõõt_j[êõ4ûG×åt?? nÝ®Z_ÞÛ*Ü.8f­ýÏZžß°uæÿûvÍÛ„ðÿDkJÄúêW^,Í“"ß‘…%fAÀïû¿N˜Ôšëc(Ž˜,ßÓcéï=‘º¼Í5Ûâ²oËï=!fçÚ¶¾ÑŒ®c»ú×Eqz ™7Íð…Óγ]ìô ²S9ß‚pG ï€p“~'¼Æ†•ñë¤P]@%£ã?–ºÍ¶EGïpz•õz ·ÙO¤š­¡ùü+Ûçv²¾è\úDã’¬¶«Ïù{O‹ˆÏQˆ/’)ïf0ˆ‡L3œÑg §y?ûËOèéÈLIë—]aéªã¡ö´ÚuU'O­Á(tŸÆÄ­dÿÿc%”Fîr¡…Q>—‰â_©Ô·ööÐç›Ï3˼ÿOBŸ_úür*õ³´ñÆ‘Ðë7:7ú–YãúÐç ‡AÉ{›!‡7'†Z¤J-Q;·6oÝøD¿u¿áu0ÞÚf¼%×Ó©žØÆ[·ou»LÜ{»12Hš#Dº¥AÒôÁt½ÇD=Höf×ÇÓþä¿H=—þá×JLÆ®gëJµµ‚nò@+“|lî‹0öå˼°ø™gžá}û×S»w;õío_N½öÚk¨I¼§eešD¦…kÛÙϱV¢IlmEMâ«iS“ÀEš‚Ô$Ø;±š{–êßÝ•ê+×$îL¯H“0æÜs×ÕkæœR“ø¸’Û„&ÁædšDkº÷"4†ø§¨-ÿ"~÷ëüû˜zœ¾S¤¦›h ãë-i6Âå–ÍL£ kƒí3mg××Î×øFo›Ë8ÈÖøóÂÁç7­ oâ8xˆýÜ/pBKOÓˆƒ?ܘŒƒ)ev dïÄâ {Ƈçîºæ8hÌyéšààI2çQÈñëë{/ÞÁÁ÷¥;ËÙ)J,ëbç˱L®b¬ûPÏc}7÷ÀÈpSƧúøÈÇÄÈZOþâÝw¦åøˆã-ìo£Sd®”1×%ëû]_°^ì‡M§¢z2OÒ;‘µ‡²§Žgìé“Ógì£ÓÇO=Œ%–[´qÙÀØ,Øy+ÃoXügÉâ‹îYíâÛ¬-=¿Ð÷y Ìâ»iÏN¹à²àžÈ‚?G|ÂX𞽫]ðÚ«û¯ûÆ:`Áûc ¸513stzrbvúÄñ¬\³EÖl5òŒ±æK«^³ßñ»­Ïîl ä©{fâðÁìJ€LQúA¥ï]í‚ Ÿíú[k°«J Û³“G홓'&³+Aé‡ ¥Ÿ‹—œ“j›À|ÿ7llûÆ[¸ÇS§fSSÇR3ì·9LŸM-¦*¢¥µ8Ô®‡[gÚžAnò¼-€ÏSeó<Ãýs6Ïl¬Çq À‘z/z›(8þCúÜ;˜*—Þ–Ú¶B/ãXÇ«mvçwº¢kðØ^ÿ9­a/¬#…wmáêþrë«mƒ½Ñyž\ãy>Ò=Ö:ÔöB¯á¥…yÖÀKûƒü`Y/íîí¥íÔÞÃKûçýÜKû}öóuá¥gÆÍCAÙŒ1äÜŠ®Ô¼Ì†WÆvç쪼&5£Ïsu8@tZ¬5t '¨éáëM}iíATky+=Öq¡ @´"¨÷Ü9jÄ&¦ÐëÔ‡œv·ªÛ.” `± T&Ô~4ŒŒ™„½ßAÐc“©ÞüÞÚïýÕ»m¦ç¯‘S~.fïpöžQØ“D Õ8 M\¢èúç36-Ú"àâ¸%!æ$@,ß„÷îêäÛ, &±¦’sµJà/µýiûmãQÃð:6ãþ«2 ÿ3J+Q®žjÿgm/µ?ÕkøT-·ð5Ü»îÕ)9mXdd®äHzÿÂÏ.O§Ïú—/Ç­¤¿ δbÕ_x=Å.¯ÓüLOt=Û"ë‰Sȹªæ>ô%XÏëÿvmÖs ׳õŽ÷“3ºY`ÅÙ=zEgô\É•ŸÔ;ž]÷ìº7» “wh¥‰IÛØ˜¦É»#ÕŽI éÔú‹[B^N޲¦Z~ÞC>ßF>¿’§#Ý+Kpú‡.n:ÃF¿#Lg€Èú)n:Û]¦éüø£-é¶ÇZÒŸcÿ]z¼%­Lç)m:_ ì”Ö­fˆn…åŠoìèV¥¦SÇSS©ì·,û÷ViÇ£û·¼5k”ñ– ^T©ý‹Ï¤ûïˆ&;µOEî‚ß«\u‚UeE VÆœß5æ\y‚U%1ÁêbXw 8ƒÍy„'’ý›ZÚ!ÃÙ­W`RÛƒo ^IM×Ùe¬óRÓu¶_Ù:ÿa×7^Ý:¿FmÆ)CCß{ ´˜®×ö¯›ênfø ÕÄ1°ZF7Amøc—î¹&›XqßÄÁ„\¨Yy‘”ÜŠæs݉[©šêàMœž°<®$oâb÷þu3ÎöEçí[Á¼ËÓR3]îËë¾·ž»Z? ó ‰l±y÷3‰¼Iä9ÌGcåò§oþéå#éÅ÷µ¤¦ñ÷µËSÝÏ ~yݱªþ)®',¿ªëƒd«ú_Ý?eÚü¾6«šÙððF¾ªý>u­ì÷Áþ¿X÷[ëïphp\1.V Á§ñ÷µ€ÃÙ¾#ë¬ìj¶ë§ÂÞšk©Ù¾ÚYë}àÕNC_šZ]"÷L_:Kô¥Á‹&ZT¤Ö§€Í蟷’Ï;ïŸóŽS+×§žíYY(â®OÝÌ­ëS Ï7îãúÔwLJ"ž'7d)}jŸÖ§ÞCõ©}ËqÛÄM©ÔÚ¸e[·XÿcãÙ©«`Á¾å´ó¶‰m¢” cMVò;­cß³^Gîü&píû¢ ìí6;=Ö±­#ɧ»Q6ª´³KU¯æ»¾5”õòÃ28»IɺMÄ"†½|“ì¥ÃØËs_Yû½ü]zfð즳­°—#1{Áv‚Ü!7}M–]ð ?­vsÚÍuMvÓiìföÖ~73p2ص‚ÝœÄ+«ØÉÌÂmf+ØÍ£Ác7¿ºö»ùH7즈n¿Çbvƒ÷B¹¿[qØ™ÌͪmèÚ“A² y©@Q9üªîš„t 68cý»®ïYÛû“²æ! r Ú8LU¬ûÿ½kãºÎÃ]Ò!)®HËzÑ’èIm)¤½”VJ²ìèEJm‰\‹zÔEivw¸;ÖìÌff–í°ã4èü°î§U“"H u(ÐÆP ÇH¤Ðõ/C@ Ä’T?\Çܪçœû˜;/’Vdh+Üå;÷yιçœ{îýDçúdçúbsôSUÙMòÏn®ôÎRÏ4¡žIéÂ) vˆ~è'ñö$§±¡ÐÌuJu„¬zôV!?éø÷V!¥üG ³@#µ%}w¼%­îÃ]ZÏ{=ñ–îxKží½ÒUêi%ÜT«¡%ÏÞÑ–\YõѪR¹oIÿoÉÀêî¸R[rϧ“®®«=7aP튺aÞ|äW·|SD+ÓõQýíÜ…ŸD-}³en¾ Ÿ©¥6|æj)ª,›JL-íìÿji)#B¦yy‹û[Fȸ™#®ÖœOÔüA¢æ|¢æ¥]nn¦ËM5;;KŸ–ÙYêy²ãZÎHÄyu•nï¶ÿÝ×{/öýšêùµªŠ–[xCîm_Jÿ¶÷Fþ…žéEKKÞF‚7ólÖÏK¨gq+ó~õ–C£‚i±«¼iÂÅ´IqóÝ»ÄVÔKwq¨Ä6†nÿVÔµ®ý­µWhM­)ÎÐ>>Î"x4«ÆOâ½Ö}±¿< 'b2 ¥;·íuµçZî…ž«´rÿF 'IÐUpßí§«º/æoôÜ äbŠŠ6H×}Õ [?âU\OßWÔ'Ü hl{xHÂï„×E÷½{óÝ›ƒ)ä#î ëϼž!>ý¥;èŸé-å¯÷¾Nd ©‘'‰)øÙ§0»{¯öÝXó§Qÿ•ÖÆšgèŠõš–&18»{‘é|ºFÀ-„Hz¾DEdba›Žî³£à Ó/¡X¯)Ý鯋=Wû´þ‹Äÿ¨0Å=‰ù@¿ý3Rù̵UWû¯‘¥üD†ÝÂ!imf®„Ø´6 x(#¸*NìkKù[Œ¿…¡íÓ^XÃâ¯÷ªá‰¡=óÙÛ?´WûÞè)ü˜¬Ú¿N!vŽÊQç¸âŠËGå‘|ÜK…J ~Ý-µò¼b=<¤ÌÜÁŒõ0(qgðjß³7ÖN¸´7ÞÁ6”ú®”ïy¨h>ê¼÷r*BgÿtÛ¶ªïðá;«ýØ ¿ÿðCj êñÏÒ >‡Ž¨K'³ðûßÑï7é÷O:ƶjÚ?Ð÷›µ\S}þß#évk.¯mÏ­Öö憴C¹1m2wZ›ÎÍkçrßÔ¾{[«ä>Ö¹R‡kt¸¹ow|)÷´n0ççÎÁÏ‹¹/åÞι¹Î¼ÛŸoäùJî•üroäÏå®ç§s7ó“¹õ‡rÛ:÷ævtnÏíîÜ ?ÓÚŽÎãڶ΃ÚúÎ1íf~T»žßª½‘Ò^ÉoÐù5Úþ|Ø.ÝÚÛ¹.íEás0²ƒ0&ïÁ|»#§5Àê)utkƒAô6èëßÔ6•i§µ­ÚPýü^ ”˜×Щ:­]Ö¾Œ³{Xû ÆÿŸ‹h©‰åáçk´uÿDº¸§œIؤ( u„Ô‡Î'A}Qß—%õ >X)­mÿ7n2‰ÐK·v 4¦Ýsõ ÌÙN˜»ý0‡a.ÇaN'an‡9>s=s>s?4p háq ‰I q ‘ƒ@+ûfví<4t?ÐÒ½@Sk€¶z5ìÇ#Ú£ÿCsŽü÷iäÿ³'aË—îŒ-¯iÞ"4 õ½Ü©MÂçßœèé> ýêó]ÚËð¹ïx—v>Ÿ®Kû|_ìÒ^ƒÏ_ÎwAW´W›¨~þ;áŽã!ç×iù÷¿Ñ©Í¼ØE²ò¯¤ û~þñ?Çï¿È£zôìzM»pénMûçõL‰íåJ­Dd‡Îôã­çÛ‹˜h:.\}ñ_Ž|­Æéƒ|^3Ÿ{ÌjêƼUó]§[ûÿÿÿýÐsgo.å²+øyç§ï¼º}ÓÀ7^éÖ*þÇ÷g¶+–†q ÷²­ $°?ä{¶/pÂû.Wž~Ì÷o¯qgÖ»üxãu5ò>'Ö|÷æ#q’¢ƒ•ÝÝÁ0f:Øõ5;ØÞ­ÎN±ió½¬ÍÿÚÉÔZ¬{Æõ«ži::î´°tº§izVÕÐgÛrÌ¢>åTÁVô¨Ý&Ð?~þeŽõãTx¸?õsçºnyz8ësh€Eac?ÎÐ~Ï´¹ Ÿv›†CcqÆhÀwêÆ¸Ûö,Óà 4<çL¯f8ñ2Þ=M}>jM£¥O5ºI ;§¬ªçúî\ Ÿw½XÀÕvcz7Ež•ÝÓ+»–è³6‚­FOzF«¡?¼Oo^@ Ƭ-º!;v£}Ã{»Ú°³Š€Úº;§*b‰YÓOXõƨ6 Ÿ7+ú,¼A->oÚU9ãFJ&xÒmëµýàˆ0·`Þ2èÊÃè]ÝÑ ¡±lvež£ò~kºY}à#ÆêH"¾¿6ž¢ŸÂK¸éÚÆc— <1q@ŸœõƒEÛÔO³°{½Œp&5BTsN¸Zf‘#B><ª€rþ%Ÿ äÓ° ¶ ³íÓ•×2Ó,Ú€Ò'ʺÊ"æ K'f¥]¯ƒHøKa¹ÉÑ£‰i¢ÄÄàg¨_ô fç%ÛÖÏ@F«?îg )õqÃÑ'M‡€õ):nB,‹·˜ãíåâ&óI×­"Ð'ÙÞcó@¶£ìòyŸgÕ§vÌP¿Ô{ÐO‹úQº .&MöfkZª> =C„˜2$^„ÉÈÈ+?I@7³ë!»é™YÓ!³Û¢á—¿GÇQà¿.7éµL9éß;V`¶õ4>ÐFi6=RÎq‚·™uí6&9Ë.Š–e3 Κy£äÐ9.ò,H $²eÂQ<‰!„)uÛ®³Ò<[—G–O’ÿ“5Ž×ß#&•ká1o%¦r½E•£ð!ã9‚Ó!y>:m¢£ƒtÊ1 J”Éqõ³¾Ib RîEYÉY…qal„:‘x¤µm›&U ¡ÆÇ(Ødd]ãÔÈSvϧ•kåõt0|t®ö„}÷ií’\<}.ñw¿úwaºÓ’ áæV’ [¨!•QZË`’Ë:it3½˜ŽO5°2Ü·n Ó£59¢ÕÖFqi]áÕŽ»Í–ëà-jv Ò~}&ºzõz}&(tÅxC6lî†l¬ÐÞ`c!pë AÇhÙLG ¤À*­MG"†ÃóœET sÞ´Ý¢ µÎ´L†¥õ¡åÀn´¾¦AqM븋ç瀿jÌpˆ+]¦oÕp÷1 …ðu eÆÌÉc’æÕBIgÒÏXÒ»P µ?RôA»—ëÏùß9®Û^(OM\˜<;5!5Õ#s =£í†·ŽÀô>4˵Q혶þï%—âNmrŒBŽ]ðô|ÛyŽƒY?ÏÆÉéÈþÿ¾„ÂXú¹ø÷@ä„àÆpFþVwHzyÞ(pV÷:ãŸj1ÒÔìÂq³âµ oQß¹·¨ï*•JQòXÚjŸr°sUÞˆ%”I^ðÆDÁû#§/µà+kõ$ùwuí1‚á ´mº(³7?ìkPè‚â]ï6iÔ‰7ü/þs“ïvÖÃG‰zËÐn¼Ñc^×f9x­ë2çø7ê›0¶KÖD˜Î¼å¹}oƒ"6]Ý6uÄ =PˆR <@Ø.úº‡úxýU­ÃøJ?Þ1m~Õh‘eÜD+Èg3zÖ"šN^(DZ‹®‚öš†%™©5 áw}ÁðEû%Ò3w.@Bô›¨ËawýÀð‚v‹nŒÀÊŒ*Aµ ÚEÑ·Þ£–l9U»“K­s\¨CŸãº5ˆª§ßnµ\/ Ûðí2<¦né'Μ:©›tàGÅs|âè®@)ƒR³îÑ$Äºí¸ Ø&P,YBp+*@eX•x#+ Û …'†k–„$]è„WÍþ½#ÓfeÚi%¿ÌM{ÈïÈo³Z€úZ…ûK“€í§ej·’ÈÔ%uR¦®RR“ZÕ…e:—ŒM¸Ë–Œ½Òo> o2\¸pqjóeqŽ£;3œæÚ²¸“·†©Óç<¡3b¾0],üg)ôì²¢ÆLƒb!Ð%™"P£‰šFbˆ?_嘌 Ü5D‹d ƒ(u\›äÈ—ÅT@DÒ’Ar —1ØB³%C 9F MV+—½uŽ‹º*¤NRÝHC([‡Û¢üYê +mVéKZÓ¤2ë±~1ëÇà=ª›SÆÒŒ€ûÖ©&=Sm“(@pƒZÙÂøBÒ:ÄԌ .„PpŽJPãÌ¨Ž‰OÌ…ûîß‘ä>)©xN¦}Gy¦)—ÝtDØî1¼h^rÄï&0¼Ö&Ð>H¥s ýŠÂ å%pºS¶ŸâL‰!òÛ7Hƒ.ÇŒøLž‡Éwf°F'sD2EtB£†xÝ’øÌsDô!k‰ö…f1’‹XCÂõLeä¸Ë‚­(¬ óêgÓ:aËzáNðü,õ,hg'SÖ3ö7c”4'DJóiTfs“×Yäãè¸b³"úç“Hcnž¢²†'׈¹UuÛbÍ—äÛô‰þ ¤.…!‚ =Ú‚ÈWV4›_–äuNRÐçdÚËʳè“×(ü$Ô4_UHïîêÌ!yžÛ»ÂDyœ| ÚòŠFø—]ߺ,cÓ†[lþüú‚iÛzÕu|«F[>a4Ø‘òÓú Ÿ¤a­=!(| EcÈÕ»·— òÆòB@嵚V`ÍãÍ2ª _zʵHÈ/%B©#ü-¿@1pxïTe»ÕKþ*ž-§û Û‰šgaÜujítÌž….tÒ°1žÂ°ÙÍÑ‹Nµá¹Žõ´)Ëç¡s6…Îù,t_k–ÀÞ2½QÞ¬F_hXÕ©• 1Qn>LâÆìEH 0’w®íPÔž/–„¯Êùý79'_UR¢î´¿HÝ/üA‚šÎ(ÔôPÓnY6ê‘“ÎP&ë~/‡‰,±[ÛEÒ)d-ÜÄGEÎ%â²T2ÄÓ"w„4‰­ˆ˜mîAWZ1b!«LUlç8šT†GÒO(aQéŸî{gê뉈[Ç–*ЇŠöwúŠÊ“\ðé"¹¨r±“æTbn.—ï0‡!æW•?rꬿŽt/‰ î!fí¨Ñ˜¢z|šî˜æ ê±ðòŽótáSgŠwÔß=ÌGÏãÑSTÀhÄQhÒØ6xŸ|òz„s­“JmÑSV·ÉÙT_v´„qé\³¹ú)„´(å´ Ÿ·”g¡÷„•*˜î-É/Jj~KI‰2݇©»XO&˜î …é>—Átë2‰9³­Ï”Ó¸*çc¬È:eM¿(d ˩¾)vn[íw9½¶CÂÔ·pûTR·í—ƒPôÍ–ákúxù¬_(,S<¤ÎcÙœÁ gfèƒ\4/·0bqÞ²×3}Úº›Æ¸!kQ:¿;²âš v±?T)uÏh6±êFuЀì&Å]×XÜ5­BÒŠ~(a+|QQhvgLÓý+ŒêæNZ^¡U™S¹~Ãëz…|F«…7š›4 ìB-˜D¨°È‹. “ ƒÏ†}ÓÄÜ^U¥f‚ÒP£À3YT¶}|V‘þ#KX4K\ZÆ¢ùnÿ 2g ºlD”E‘s6¨/ ÷´Ð]0<.[3ÀHÅ i3Us 0íb¸YÓÀmÄ(AÓ&­Ú¢ŽªOŠÑ{‡Ø+©HI3Êi¡AiÁ÷‘n©‚æÃ<¾hb@_ö'hz|.|cÎå ÁŽΈ‰¥‰¤€<:5¤ÃD±"`MÓ@ót• °ÁBk»0åød è5¬Îk’ÙX3ç vl=6î,G_Õc … ðX6‹äž@£VÃø9ò0˜¾K~ÒÞH ð–1c;eÚ¸ò,ú„qTgGZ„Úó B;ªÚà§å¬Ü“j††UÀ7iU©E‹3“ü”ÅG(ÈÄ‹o4 s¸Ê—"á–Äeû)xfɽ u“7J„»iK²¿d>-¤ž|s³>Ïÿ›Ý>yᆕ³¡áÏÞe[ì#ñ¡S+p‰]äʆK#á‘é'v‡’raÌÉ] ‹šˆrÿoê¾N®ªÊûUUwÒI§ÒÙBx „nR½dƒ¤!dé@³w65Ôòºû%ÕUE½ªnd ›€  2ß Ddø¢0€Ž¢ˆÊ¢È"æȌ £?Üéw?µæžsϽMºÃüœÏI~·ªú½ûî»ë¹çžåŠ$(¢]IYëØšá²IHá^¶Ë TñF·IZÙãÊM²TÐ×Í‚a[«ŸÍ!Û²Ÿßã»ÚVǨ/Ê$OæSZWà!}VVK13Ä”_-õ„Ò…IFËÁ¿i1Êq(ÊÀ5$”mKãÁý"vºPv2)½¡WÕeúZŠÝÓòW± g—2¢° IBMQ—‡øBÙ‘+d7# ©râ!8È1i$&?®g»QÍêv¯ãYüa*?9I¹JÕÆ ìN~91ÒZ=°Q6®^g®¾„Eƒ­Î$mžÓOšj lVe~¿=MÊã>“#Ë\‡ÎG°l;hm%>Þo†%ɉ’Bf˜,ÈV‰l%¥bHV˜*]ö’Ÿ<+Bäé"’m–Èj•/ƒ±&¿œ ¿ L¹Ï²)W¬#ÒŸ5½äøÈévz¨M¥_ˆiÓѲŒZáœÖI«NIaSi#¬0ªêx&®…oÉá4í#ÍOA¦£º0Ìö®›öb¹›¸Z!Uÿ`™Aæ Ñ²MbÓ -¢‚˜2¶¶Qì#*éB –~JѲ¼¯¦œwb8hx\%ï)ir5×ìÁÝKíÞn½Ó±Á ùU¹4Ö-›OϰÎ!šwY¤ùö¶kÜr==oÔók¾¾6ÀîIìü€Í H÷Îb¢ö:–u‘Æ´¸Û³˜À ZêÁÌu,ö‰c°Õn«…%îØX¼8¬®(‡””ºh‚+•És^ʧ³<[PlR‰î†‹Õ|N1è–.Ež#)³9< Ë{ t÷ñä×+ÿUtSNfW¸Ÿì=óaFcÎû+uì–iqµí/î²P‹SNênœÒˆEíhJÏá÷]Pæ/QæºIÒRIéïPΈAÏõPÖóU\DÃhOYažÅÐ…Ôëcˆƒì°kßikQzœö©­Ä<ÊR¥~Fš²Û¤ï‘–©jC ¦¨·ZÚr.#*‘l¯LÒ> 뛣ÝÜuªí#iXÍÇ*Z.§Œ¡l’Cº¶µ6IÜ@(AÆ—ü÷=cf±+ÜÝòöPÙZ,TNŸ Ìõ³é¨cÊ7&PȘ¦|ÛâáÁE‚L.¤^WfW6‘v@“ÔFr3rÏ|c:gÀûû4!Ö¢@ÎÁM¶LJ´pB'‰¯Ddp—sš¼gѺw„Y&N G"Kr,‰)Á¥dn¨É·Ôã‡ä5^½Ë'l}ˆ̻ÿz“ï`K2¦»HT`ÑJžÙÌÊÇ»“›À ÍÊi ôeÀîC/”ì• /×,ݶ`à£aƒcxZÉïeñ}À¿·œ¡6°BsÀÙ@P …+Å‚4˜ÓõiuÚÈ$@«Œœä0BSé°¯ßV(J’’H¤uš":P²Cžã`H ­ç@eaÚÊç\êQ®ƒî®£Ø>ªÕPöéæÀ¨^ÀFµ§ŽÂr\Ðg4´'DÒ•.Ÿá¯Ë D{7ŠœÓÖ´ÒÈL)†]¯N%è²|›vß2B¾‡ƒ›úªR+Xï|Å!Gce-!©Î0ÉÃÇR_»†uQîU²Wo ŒÝ©l;˜1vGÖG££²ªkþ²“Yûd,Òå´í§Òœ=rZÔ19U¹el_§ BÞ˜&² x)U[R}S ‡\’ õ·sB—Ê”@ÝÏeuïÛŠßà7¦º? a¿Š¾Du¼4SdEÛXIÛ,lAŠFU½›BµÑÇZSb­YSÎ$spL8Ðu3f4ˆiAEXsÐ|ökV€A $BX¹QNå¹!:ùVE²Ó:k“„ c ëîkeF×Ö™’‘‹cLÉ-¥øØîv‡h8åߣÄ$)Í]HfáÑHþ%©2½I‡ Õ¿o¬ç"¡Àé8ZãåÊS¡ù$—B„0ƒ[®U ï)÷Pç€H3qP¸‰£,}¤S+ t:G-ØIûÑZ¤å2^TMZU¹ªEþž÷{>pJîŠÅª¸g¨^ k¬·ÚyÜñžkÞ @SÇRÍÊåÃâB6ß'D)Q6”Š>ò!”Îd4gn]«Û0LÒ1­nÏõcŠ¢1ˆ4äA#0n‘t? ðhö#æ¥ Ý£BØ ¦P¦ vzS;/@AúXv×ه몎±hy¢†DÎJ¯…§ãá*¢Ö0÷ñSæYc€Ö¢…¹,Ò¹¬C,ta÷7JEcPŒ²Y‡gZ‡BTàèÚÈ<¾g¼+:q[âúù¸â_òã×Ý«³•Ò;e˜¦Œë¾ÙHúÉ|‹ëfŸF Ôï±h¨ ÜÁ¥ÑR!wÈÐBIÒV…}ËWÂaé¡8XIa”·±…:¸4y~¢À°@ÂEl€^ÑÔJ¢ÊùR%pšÓö¥5ìQNÃØzi¬ Úl5ƒíu´ÐSi–VèUòU=ß÷êk+Ø=©OÚ0úß*>ùu`ö3òsj=s¡:ÈÆc˜ lÙã'Bƒð°òÁDË´J9 Â"©B´6ðò$£•r•C l´WFgÏœà¼4%:?ЛX ÷Ô³¼«‡ÍìoH«C6_dñ•U¤ËIyKâF„ÈÓY`»ÂåcïêV±¦Ïñ8Ðr_ýu¬MG×aTCѤÇdT·¡X3F›§@¥“¦}R\P,0æ/ L+:¥Y([´4´Ÿíñ`;Åimi À¦§E6ãÛ±AU Šf¶Z.‹mO°Ú0"eۻǓ»ºº p…¼ªyJZxJW ïŒ$Š`"Ú*NûÉ…]þÛ»AœTÄA>Qƒe2K±1Ðò1¹X>Ù%~¹d©¸Ôã:Û¥ D飗Μá¢e]ì+ÓË$Š"àpÒ»}Sç¶M½Á‚Z’-Š9šŸEp¡Q[¸Yœ-ÄÐmãê|Þ}®ÒœØÿGº“ëEá¢ÐA;ŸG!1èˆÁ«Ð:$"ˆˆu ûAãÊ’Iþ-2JÀpb6râ0wŠ| ` ‹EP±³Ð)«³ÙªX Ç.î·ûñ•ùb? tr7Ó“£.þH}éz=T¾ZÀ£õHýëú ½7T 8?À=³Õ¸¡º©_&4)’³¹'f c웩jö1éPYãK)û7ÉŒø \D×JrÓAH)ÅQN ÇâÛ+ò¤h/Ÿí·n‰â²ü2শ»Qò½ßäºBºjÂ\¨êþ.v™Â¾,âîq!‡)¡e«3XB¯v[4×à:Rz]3•,rX÷=–Ãì WX½ ƒ<&b5ûpý©°h¿‡ˆ[v›­[¬Êp±¼ÏÜM’ž6<\ ­TA lq¼‚b&¶µïN®6³yP«ö@Öœ)s´PDr*e+þoD ä¦.ák܇’=²Ì·—­AÜD¡žNzÐJ&EÓD;ªŽÕW•ŽÛ¨îJ{Àzüڋ܆›”Óèùv¡ ÎTŸUg‚½@¡u>?’Ä޹³X®ÛÜaÁÞ ÉTóûÚUk OÙêGA zoo¶*iüÕmnÍfÓŽÜØÌù‰-H]Y»Øne'+w ) î+‡ fVl-:c¯'†ÁÐÆ¤1 :-ÿ½¦¯Ãrñ<¯ù¬ÚC¥€C1­À„þ8±NwBËGßÉÖ±N ° åй~E,A ²óy œ™vûi»3€°éÎAÑß°ÁV 8§ÄÈÙi³d—Ô¦Êm…–t‰srŸÎYRNWp}J¤†V]%ÑÀŸá–TX:›ÌíŽ ¡`%â“öPB§ Q$î¥b -›œH&#Zæ_|•ªåRy¢ NQzJÈ^ÈY4aÉQƒùf$ÏJç«ayûì\.¯:Ë* ©ÚŠŸ­;Ïm”$o÷TL@K@>ˆs¡û8¼•ºÕÚGEÒæÒ®®A‹K IÆM޹¢6Ù6µ>\"|»ž‹ôµÇõµ=,Ïó¸o}\ [M¡«&¸>>ÃØ{Ü“Ü;¥å„wÑxTÙÙ2#ÊžâîB¥%#—Ϫ†1[{zkf¯à$ÛÈ¿H p”¥Š=ˆSW’­N ­f[w’b#+yR '>ð“‚±'ÊçÅ–8…‚ôû þëÉA+àE™"(-û¬JVr¼bEUÔ\\‚lÝbá¸Æ‡gÝbñhOퟘuw0ªœ÷ÌÏÞËfì@Êz!‚ü¬î7( GrýmÝ/3Wùèd+Á°Ä9>ØÒ0‹_°Ã°sè’cѯÓrw½¯bëow±JXIþŽzö®1eñ®®Àaa°¡AŠCðÊEÒ„„¤µÂ5Ãì‹C­çjí„Daþ 3k×z¾ˆòD-—딹Ÿš<þU8eüVáaRYS#(5®¦Θ_¦aŸ¬ñgød:6›2+"¦Ìdoø,R+pÀyÿ¬98®YÞ¶ ÜX¥¼Ê -C°ÝZK¤Ì(«,Óë•7€óŸHó,êM?b0»’hw|½ïŒÄ-3ÿ@>_9d˜ƒVsÍÍØvoÍ¥7Ÿ2íu5h^ë(mž•óÓÛGky½qåU½²4/÷šàñ–ä“6å“>²?=4ìÀdÿFöûêà‡Ec#qd³žº“|S÷~6u÷ÕÑa…‡t ¯·†yî„ÏÔªöÔò{IÅÔŒ ê&Ã)%wìrMõÏ${2ekæ7ð@›ÔaÑ”ÆEÉ/Ÿ°Ikì—T˜.˜C«5P¦¸EeZa¶F·ôj„¤”Å5ÿ/S(‚¬n‹›ÙbmT¯dµ5«Õ:¶¤dø¾aL Œ:à¹TØõ¼Ï”¾¼ëzî¬%+!ùïa=¿èk§jIàÃú×IúÉ6(ºZw‡Å¢$öŸ`¬S¶³ï‹mHPšÍ¡~œþõñG#j},DÕùHUÉ/ÚÒ€$R(£c-ÿOÁ¼U²îrýÅÒcZv™:ÂËz©Ua“†Ui Õ\äàßAZê:c¸6£&ÑàvŒûwX_9:¸‘ª•ã#U, dÈ+¢Q’þ ûlaU"TÕ&…!«€B. Rxelîe ]¤eΨ|T-íö&ÃQq¥ü>îˆƸ«X\ÒPsP÷œš‰áf]îQVšˆ¥}^·r4ê¯Ü2L者#mm&)0áåeCI%p ‡—qמßXËÑÌ·e„‹a]m*¹÷ ¡ÆEG‡®–åÕr[- ë®–ÐðÚcØŒh‰£OªC¦cƒt´«x‚&e4¸£Ñ·)ºÕ <“ס^ó g½è11Ì‘É/÷ ´TFñ”ãAöðzªöi¤tSCÓIì B9ðVE‹yl6ˆ5÷/{æžbðè:®¹3—ÙÍba%xÐ]Ž®8¤ƒHÔwáQvÜxŽý7LHéE)<~÷féïTÅèxÂj9: e–ÂVÆ•0@ 96Ê—RÉ2¢G£ò… yŒ‚PAƒlë“å÷ШLý7^’K‹ë6æùzu…‘ ?z•š[œF}üg@H^­l+âØR°/¨Z@$Í`ÿ@/(ÑY°(ƒƒ.*˜é $½­ÑcÒ)Yt ²’ÉõÅa ã6Û_èæ’Ró§d^} ”¡ÖŸáêKŸl(ÇïŠ-A NµL5°+&‚ZÃÉ+_f™»“g•í *·K¨ê¿!㛤ÝR?-- ÝGÁYÔ±ò#JÈüSÝõktgþ”]QG[ q×Ò_ôýß½„-ÐwÖ‰j‹®R¾%Z/ªíÁ–ÕÒÒvšGðŽ²åª­)Péj·(¸µÇ­¬"µWÔI¡³xbè,ž˜ÅC¬‘ëëXªn‚îÑ=?–¥ªàéqc(†D²S˜0áœrŠ*>ÒeÓ˜ã牘{Ö9!´kf:á¬ή£HØŠv$yκù‡öFŽÉš±Pä[fÜŽK{/Še[(‰5lg+`“‹°|À‰¸œ_¤—3÷gñLAß+ÕtEYŸ»OZ ô‹b­ í¬´¾†IÿwÈ“~ݧUëð‚¹uV9]2w•üAá–±þ-Ô‰çwÖ@Ñ\SµóÓÝÝã)` æNi)}Û ô³˜/öRšjÒCîþ.ï¶Y¬üud%1 êãæPt¤+‚ޏO™hÒl²g[ŒÿL@Ü™Nãx>ë2^`'ò—'J,ÃFcñä¨â<Ø#ì@Ñ`AÅf}&ƒÉíøý‹‰®µâÚß÷RBT¯aÆ4]VUãƒùîm•uœIeõXÜ&a·¬›q(e-좲vc9l2ÞNYâHûj66É‘¾Çt"rë AZe|²¥€²ªÚŸWŠoÑ#G½žÓç·Uq%D­ÕÞÒòšZmŽáB¨™1òjm„üò ø}~âü„ú½¿aƒÏæ†_ã Öýy Ê’F/Ž] •„ñ=ñ׋q7|ýDvÂP§GešÀ¯Oðýíÿ.F\Ÿ ¥A®üáŽè÷Ìô=7Õ÷·¿žMcÔ§!"ÿßwò˛Ȥü¹f’Z*UØ„~S6¼Ê$#Að@³Xù‰ˆ÷ð÷ÇèÜ;úI)nU˜«&ßsJÝ;‡îRnÒïßZMì˯âòNcóEIÚa\Žõõ‡ÿþTßß3}ó§™wò|Ó¨o–RÙËÆ1ýïáíåkça¾üGøþ>Ú÷>Ówÿpßßs"êa޳¾p¸(&ëq=^Éî§"ÆÛ?ï×ñžµk#{Ž·óH&é{Ï<ªÇ1ì<Ð1Ïùú™tójîmî<åþý*ß²ç’ìïlÞƒÞà ÖÞFÿF6îSé½ n2i>Ö±u5ÖìѾ÷6³z7PžÍì}MÔß“™–öKç=¶.÷»7^0ýû¢¨Ãq²Üû¦7øò¾{Á‡ºk?ûQúÒ•÷ýôŽ7_=½f<ø†,÷s‹1ï"Ê›h˜~Ç +GϺüÊk>—™þFÛQ[k¨á€\ö¬ ¾r]ôƒµ¹ê‘GVMýÒå“¶®úaÍX¼@–{ð° ¾r§®|~Ó´ï?õÄ}«>û‹oý½Èûñ˜œc¯­òç}ý”‹î­žöúç§þûóS>«f¼#.ËYãÏ{ÉÎ-ݳö+[Ñ33ví§2ÿRCh{È{ÛZÞ-ÏÝùÔ×Ë;¦]þÆK×ÿîÁÓ{jÆsÔ¶×ÏðçõÁ‹.8ðÅ5}ü¶›VwÓõﮋ¨ÜO¯ó÷ßgÜ=tä=§ÝÔ|ý”ϼÐþî|͸¶k æ}}½?ïŸ^ù·Ï-Zðl&;ý…#®úÙÊÕŒK[d¹{Gføò~ñ­›'^uݧ<úøÛÏ{åæÑšàleÞŸ]-óGyã Gýþ¥Ï¼~éãŸScÛ¿.ûâ‡jÆÎv™÷­/øËmüôûÅ‚÷/8ü«ß¢g_jCÍøñv™·çM™7Nyƒÿj¾¿yÞüýwWüùÙ\óTóšÿcÉgŸ}=!Ë]°|¦/ïÆß¬ûô7Ó?oo¿zNìWK¾P3~Ú,óþçi3¹nÛ:›{÷~éß>óTãeûœ“ÌxºfܵV–û¯ëýuXÿøÆ—ï›rGúìSŸ¼àî–Âk5ãôÉ2ïeœé+wÂm—ýêá_^òÞÇž{zÃ>µQÔ÷ø52ïW>ê/÷/ó¨ãoú¿«î;jÖ{ÞüãwjFlªÌûÃWýå¾uÔ/÷žŸ{aÝ¥wìžõljû‰5ãgódÞ½éÏûăïZ3o÷W_ü›þGo9{gÍøÚrÍ??a–/ïæì#g·þ󲇻s_žø¾‘Û;kƺÃeÞo=ì¿Ñ¿W½°`àÕ‹üaú™_zãˆó=¥f|þ‚£›` ª¢~@<½ P]q!aD‰½Ú™)‡\…œ‹c ²*¤·Ù…â0ÔikÉ*ôRèH×ø±”ÓDºbFùKñ<Ÿ§~hÖãôµ—õµ^}m‡¤õ8­Ó{YÿêõÄÈñOÐ5}‡¾ÚÄ®VôÕIìêºPÈ… WÕÉ–LC÷L¾dœq¸gh92aŒ»M¢yæà¹1}¹Þžç•„÷B'Èç^Wÿ.t±¼±1[c¡<¶|†ÍÞ¤À”§}–üœú Hy`I†A•Úc¬#o²Td„;Î4ªs}Ô¢£Üõho5Õ®nŒˆÄ™M—]PžR.4ƒ¬G»ècIù‹õ*q•˜R`IÖŠšKÄ€6ÄçTì*”7æœ 2l^Ë/ãoî·¦<Ó¤oœdܶãá*È z}ÜŒN%G·ÅÆP`1ýÄ6*Ÿ1 #[È'>¯ÑFW#¦¢„=’e ŽÅÑŒm…@@ ?Õ[곃.Þ ¨£žÐëì)½vž`W¼qGºCö·Võ ¶ª§G¬ê¤gU³}wjä’¾3nD‚öFƒõ¦5“ !6å4d.nÌ`È 4›eáÇà_ÖƒùѯÁ^%(krŒŠ(©)U$r ª îHXdpÃõÂò:%Ý“¤¤ñÀTØ1X`{%¯”Z gà .”Oí&R˜?ëðÝIq ä: ¨ò{É|{á˜W“y¿¯]òô“¦É0w©¾ô Wtº °H«.dH…ð¹áôâ‚ùƒ9J¸ÜUÞ½NÏâ>}í.à ×gBÁŠØèA^;;àw7+àMrDÀû¯/°@/c t[_yÏ57ƒ_¥Q‚KØ™‘8Û^X»ú‹À4¯D+X½ƒÙ‰±œŽB„CÉR\tu,γHïî~ÆrXüwåÇ<„FŠy Þ##3ÊüòªD» î7)îh˜"%Js4\˜…5w¦B Tû8BoÊ 1 åvüøã)**¶Ä±¼IO¯Ýz¨¯ÝÄîyï܃nH.§y›âÞ‰}:s™Q¤@èY·¡Ý©Œf|…Â8)9…/=™ÙmÏdàW[pö”­~ˆQÞà+fÆôP4­R4ÓåŒ]ÁÀjpÈ f}x¨!("\ÅZ5kì@ÜÝæZu0Y­üêâNɆä2 ËBEíeL q±wû&}àÑèš’cA Þ×±zŸQï#x½×08Ï´³/à‡¾HVÓɈÊ[²¿%ŠŠÚDeHÿn¬ìñ`§Éßäã|+…œQu“WÝ%•*vǶt¿;‡Žäjž ›p÷ã0žÆOJ9Q³)˜èZA´L±W…s;k}Òßmzo…Å¿Y“b%;- ]Жyƒøß‹ïPÀÛ–ooçe§tͺ1(ZžpPd*d­Z©¥mZv©rEEº€gÖ‹§6‹·éÀk|ÏWXyáØ(¤:Eð³x ò„tV%úv /®×ñÃ!¢^»GËÃ¥ôÊèýÒx)ƒç¬gó“ìŠwÑý6T‹uN`Ñmg‹îÄ:‘!b  Å¹]W,æô>9;’NŸDˆjˆïªB‹¤ÍBâcKðKinKßdÄ,W HLÔç‚%-VˆoY0«”F|Öžm»œdrŒâ)ð‹Ù—–笊mj]X‚ÐC–¢½e §â)§Í|ºÜ/ã]Zmã~Sê,¸×2\é/§1è2WTW ôóø©ÀÔpÒ§è³Â{C³8b˜ÞÁç3°ôµ²ô!‡Æ ‚tƒ+$ÆNÜùÅãfeéRIFË…A° ˆ@à 8BÔ/š¿^˜x—³m¯sàØv›Ó#æ„·óõëÈwYÁ n‹i@Kî‹D¤£OÓ*îÁ€Æ¥w‰¾´’Á–\íEFy¼Û%kª•[^gD´”»‘g‡‘ûØ^&‘Îh„4¬*ëP'ñÿêt0LêÕ y¦PJŒœ'øCÅCÍüá>Ýà$*èã‘ÂJê•g¢÷LBæuˆ¢]\)µöKÈÝÝ0ç•Æ—È€Ëa¡\`/ý_¿H²åûæ'ë(Õ\€ê·´ ÂÉUˆ(f½Â´ÖJpP¯ïü£ @…Ë&G½µH¢ )a °X×E•ŸÓG9Zj,}³ˆéÕ½µóN/œÿ¡0Åw–÷¶¼[ë Ž&¾Ùn"§ êŠ >¬Þ=S¿eÂ8å¶ì@|ã²SI¹q‚]6ÛH£èWƪ†W©x߃’SWA²eЬl~WÅÎwd5–õ’P¶6zµ!Ð?ç³þYÑ?­ýC´|rúYÑ‹¶ÈÞ}ÃëBÖýùbF”àëŒÁ┉WBþ>Ù°•zÄd-¯œ?Øö4kûÉm?&¢írcm/–¢-ØT“3à{¸çŠKhˆ¥#Î;‚›¼†b¥#Ÿµ:–x~¤M°*9K0 94<ÓEEŸw1êßVçD£Nž^1 ¿UïDs°œ}Vç+Î[•%ƒ‚Wû"øžE‡Óå\ bá9°T€ÜŒ¯éNn)*¼vä€+hw8Õ¦L`}B¾gpy)}Œå”à@i‹ßmÉ^x;F©§Xö#ôUÄùSpz,°½*&l›ÄëGö ò$*½h1Y¦> ÇW}ÀIn(8‘P `˜ÇƜ՗†È¢öP0¸³óÐûœI&× †ÇÎKÛA’ @¦s9°Ÿ“úÕ—,¦k|´Ži·P_ëa÷¼wäŠjˆ…Y¨]˜hkØD;â¯%¬\ajæÂSçYz\çté^¤V^P0xÕ¿&á¯Ë°'ÀÕK®Þú¹s·AUäUi«Û¦âi:Ãû˜ð.[Dþ£½­Á]à×)+ñ¼[É×yêX™|DzçEâhVÄ»·“lˆ:¸™µ†ÜJ‹QÉɰÕuµï0 ðP`2A}_³êìz“×v§#'¯EÍšg;ƒ~_&¤dåA R©,z6ØáõJ®Gq³͆Še ÝV­¨‚Ôø X3¬fÛlm‘y²«.ðÕ«\LŽÐ<Ù‡#:æ.¢cvJ{° ȶ¡¢à닞rrr¡îCä ¹¢É8G8wAÂ_âKÁn%Þ!ZþÔdà錉žoâ$G<¥O2 \ãD ÄQs8\é¦HjÝL…OmÆ#o•Çg‚¥…i] þ&å~n9µùÌ‹Q×…o¯!¼}6>oQ¬æ:©Ö\¾ÚR`(Gø!5¶Ö7ˆòDÐ¥„€,•:¦$æTr„¦[˜¢ÆõÓ#²~ Q"] P¾!»à²©ª…Ýµâ‡Øæ lâ¡|[[ÌÁ ™šì½.aW>‘…%–ÜXÙÊÿÛ@V™,Ôû›&ºôÁN(Ù¦Æ!òå‰/«&™‰.NK,º<m«:ñÁ†mX:¢ËsË€û¤l+Ã4âLÛ…§)c;#‘'ñ>}Ù{z&%-²Ñò"þõð —¿K¨Ûòb‡5†%pÞ“•󥪤õ¯”ÄUɪï;" éÝDßñSœGÚÎJC*2½ÆÚ†%&Ùr)‘±ÍzÖ:¿áŒ9¸á€ªæg¶CU6¿Yƒï=q=[Ñ'ܲÄi&Ü_v£á6 ž[Gf³ aL@[”®æ.qÕ¶<(šiG*]^¹>Á}ð*| ú{m4±Wt-¥­¸s®Êözì]J öOä']”µ*¶Ï–t·f[+»öe-vÓ ‹5:åŸ|9¢‹TßÏT°Eäõw¹ÆŒÌÃ]w-ÑuÝ äPˆÓ°°°‡&ÃlŪº'ÓfU'ëˆóéÒ {2ÅÃSi‰UˆØ½ZÕÁæ×¬z²ŸHùðÅ(Z.iŸ÷QŠ ú²†yt‘mˆ šYÑqåËêjW¥ëeÝ;AÉѤ“á‘(?ç” ^2Ý#Rø. ä!Á«‡CÎÖŒá¥ùệ(™/}zÂw¤ ÄRIËmf¨# —÷e6 Í.* ú Ø’ª›™!ðÒ@²\ °`¢X.Ä„ÿž7?ö{{ÍëšÉLc +\8`N=O»×! *däe„Pž°¯îVs¹J)”s5ŽN“JZöDæ¸(e$BVÕ‘9çrTÏÐY ª»Î Gè¨6æÓ}‘Q½žŒê@R‰äxº%ÐjËpn¬^é µŸÝøqüœŽJ å 3ÖYÒÑe‡mï2!rý…úÊV}|îJ„ʼnÆ-ÁµÎ¸ð‡O¾ÖÀº¸ô*ޫߎŒÝ%d98%fìktŒÕi)ܦ؟ʶÏH„¿ ´OÞ²¢Â~ÊøqÍÛÃÅ"þr)yä¶©sØ#K3cƺ¦†È‚ãa Ve{¹&O8¦U‚Šß.2N•¹‘gßEž½gj?<;Ï\À*lS£ø»0ýi û•õ%/èP1©VÆŠc³údm{úܳŒÑè³#oS'o³:ÎD¿Í6˜Dè»ÄÓ™@¬›{AÌ1}Èà%´Ï*)+/ÒæV9Õ‰]Ì Í)37 º¶‹UŹÊÎytV„ÁÔô‹ÄG׵рkDrkÓÇ©C³®µÝ³§Ƀmõ–©Óœ„‡x:™ß#Ý$Ye]pfãÖˆÿŵ„ÞäŒNui/Á“R$t`Gå/ñˆ—ögçq=Î&À-ªš{JoêÂ9â2C|<å`1µz§‹â †§]þ8Üóá̪ɵ[¬‰k†ìEÓÛñç–+K=ö…õ¤¦ˆŽ¥”ÊU‘Íb/‘÷“cˆ”>—2ìÞâhZü±)”®":gI"ê–ç§ŠŠOºÝâÉâ`äA#·p=ІŸªn•šˆ`UÔ=“Ë9…ò Ày¨EmwDƒŒíKX‡#=:PfúÏ®iÓ±:äZR RDxz«"nÓ? 0/¤Êb.Úx–-b.ë¦pËFSØÃàFhŒºQ6‰$/;µ¨`Ñux|'J¼vè7Ñy>ÚýKI~±{¹·’q§<Ó4pÞwׯñœ|Ñ»è4{^æ@4øÂîáå©PüDEÝãÇ>‡íKç0O‹,×02ÛØÆ\Nd~VÑaXÎE l€^PÚŠ³ryi rš,‰öåíQQÑ8JŽ\1V5[ÍãûzÊé)#K—©Yò×JÞ÷ªc—‘ïxù 2OKDý\’bÚ!0O75aCËÔˆ=\èHÛž°ªÂÅ2‘i~#Î"B¶6Èò¹¡•ÕÁ!I6:Ä,n»{Ï"³¼ËJ}9ò†÷’7Ü“„¼ k"Jì~#ð:1SG`¾â« U—— ¶DA„hÓÙû`§äå#÷ÂwY@\[³5O˜x§µäÎL0TOÁÉἩ Õ­èÅ“£-аÒqhw¸5büÀhŤ4}‹6x=p*ªñ¹:2>e²R\ó.À€‰ÁÍÍjž=¢êxƒób_ã_Ò†A•¤ŠV¡Ùh°e™Ú0" ÇÜãÅ===`ް/²ªEYûÞ=Yüh$уyð®l·Ÿéí -ƒÙN…Éfð±'XÉOÉ#7"3Ëøup:çÏ€&—_Ä èd»,´Èsôry 3¼peÙÁÅz™AWlN†®Þؽuãb°oRp™Œ gRh`Ôz7±½:À6öW*ú^8K‹lýŸèˬc³F«N¥‚NbˆCV!°uzdaó@õƒâ ä- ÿ7;±™¯8^YE¶™[Á/¨ÙãløN:¥¿Ph²éq|Âe%§„·¬¸¼¬5èÉ„L:øÅêÐJºCUtFëbõ鎈ýžÑ x^Äz'³q0Ý4ìškÙ<œNab¬›žÕŒïPCñKIü·&B‰šA¡¸5¥´á^™Äp®°C윬X §‡ è–8++ìÓkjsjz¾7ãt*¤¡#ø»!¸Ë$÷p÷M‹¡Ø„æodžTڢŬHLÍ”¾Èq5Þ{ÔXŽ“#4`õ³ˆ¤<ö1R4‡æumÞ!‹Ï{xƒ}ؼÃjßlûãncÔÚ!<=¸¨i -CAàlñ‚Žbâvˆ¶ïËô[…Š ¨]e kÑâgt¢Î2äù ;‡ùoBðEÓ×è‹2¼MÃÝvQxN/Wµ3öjì=šž=Òä‰ÛîÊÈz=Iü:„Ö†‹”×g °gujMH~Ï“ˆ3f^ ÓºR™Èlr™–ó¬a·Î\ŸµÍ†µ^$߬ŒvÊ·ê÷R©a—ЈÙÛ›l?‡Ÿú¬-…BÎ㫹€$_£²O¢öµ³Qå–w²L·`ê×ÖÑš;^³ li±1{0R LšV¤ÓüççêØµä,zÎÏC(„N£p½‘ÑŽôý„Ä:7]æ—n s᜘KO¡—²hŸr„¶ÅN‡÷…IP‡Ó©\ƒe¦R@ØzÚé•‘6 WGdý l³†2ÅF~ÌÉYu§.U2)ÄRhó”H&“£œ¸hs?]Mç”ð-]e`„×P$¶N„¹Ó«ÛˆÕ*Z`Îø¤2”0©‚5‰k)[Bµ2™˜·Gø@õf£î¢M4è¹W€Yâæ­ö!d§Þ’ßË,É‘_Ä,ʺïTQt¹Úê–ÄÐRÚú2ý"ïZø“ê(ø`O2Ã^h>ÏeKdàÔj<ïÙ„ [=LÒw¹Œrêû voÉdàéðqج`#‚¬ ~fæ»5EÎŽixF›¥zÁ‰¯§!‘Y_V¥NÇ颒 å|ò×3LWÀò.-Gl¿À-^6£|)‹« ÌÖÝ„ãêŸu·ñh ›6êÚ¿4"uß!Z9?mÉà×~Hl9CÉ.éÜ*ö·ê®†‘›º?&¤0”MH;úó ÝÏ 3| :²¥cX:â¼m©ÉávìPvSrlñ©FÈtã’Çu²÷ù·#Á­r¥Ú![;…JvK6°V…;ê X»¦ôÅëXG(1L´¡Ñ˜Š'è•]1„äTBÃ0GbÉP“R­5AHçß8A‹hô¼‹þDÍ–Kãîç`d ‚%§LnòÊZŠA9áБjØc>KªLsþÅ!ŸŽCD沑«Ñ] ÎyV „óa©92-©1¿[”nŒW9—Yhy€íSQ" W”¤¬¼Í`V^åîH+¤êM 9˜µ'Zoðžq„¸ ’Hå•R†yˆ°ZbmÂw>9Ïæ“Ð^A ¢£†Ñ ×rù ¾§"Žô™­Àýås„\Ž 6Á¥“äPÄL9RûóežŽ¨ý‡‰ÚIà?ÖÒe]%*FHwä%º³C¢ûÝÑ„i|@®Æ†æeåaSæŽYR›*?°ªü÷\‹I‰Æ&Íš’&vi¨þUO&±fº¸§ÚˆŒ ©¦4*Jaÿ„#¢ÆaˆObÁ”ÒXΆ¨[Ô3ÌQì–Áˆ÷²høC”"(¨·Ó¼™%Ú(©e¹4ËÙ:u$‰²ß¼n8‚¦Fø\üw=í3 ÃçßêÌ5%ÄŽ*ùº@»DyªOŸWŸhI¶³Hj˜w ÓqûˆéTH0öÉéíê‘TšsŒyœáùñÛTÜüèEŒjVäH5E^´­IxWÇZÅþ­Às›Ý¥óÅrS"»,Q:"hzÉYራŒJY¤äßQ]ª“14fÔ:¸+†Áúmê+/¢G‰ªº|zªŠá_ß"ž%éAö•paù’ªˆa“Ú˜]C'î#EÉI)†®ÞØÉË‘û=Ûr8ÒVõ…ò¨®o:…Q`èc»äfÝ"|ƒÚ _Fç½—b'Õö‰»<èi4½2OôB&Âb³ ðšìç4° hOÖÊ)WõñXoOϹ²jàëd ~Ø­wöö=~p™r‚÷cº* µd´¢&5ÊM¨÷j™L?ÇIÉûs<ª 3ÄÞáo.x UzTQ‹„ aXÉÀMX«Ž “ï‚ßð•x•q%ÎG¢‰&(NO\øñ4Á‘¶‘Èõ¥m01é]µjeÖjúŽÈÔÃÀ „¢„ÜIá¨ÚÌu¼*§&,åí3=×#³®JÞ¹z³îÂO4ë¶=‰d+qY[Áê Z•‹"d¥0לt o×ÔÑvd¹¢ —pKõ¥â¡4HçÙÓ˜ewé€êq#Kƒæõ*b?ÁÒ°2¢¢S!Ì ‡LQæ7œÂ»t¬‰šP:³ˆ׸yQK0›ªØ“Ch‡£&M•ðBÒ—ŠòâÍIôä5É¢²6!k¨©j„GjnìHíkѺ ï²4Cƒ[¢¢0u%÷$7¾²B2€–6^ã2M50©·M™6ÊCU”ב`ó I¨™$œQæ¨Ú*íÃäÑu¥Â>šˆc2Üe-.Ô¬ªž“’h†ué­,‡ˆåBY·|4’gˆ$n÷j’-m·y“äs{##)'N¡ô2zî…ÁZž2¾¹+ü-†yq¦%ýÞ¯ÁEgg˪ÈlÙMfKoâl©¡–­F¤|òT˜ñƒm-˜“ê èXUlíü@Ѥ¼"w´cú6KH· ÊÁÉg*ªÔk…𬻈aQ@~i®°©ÐRÝS^€Ù#˜©:¢˜Ò-EMã ·ƒ,å@ß*ÞÍã)Wd@4O¼=éÄ Õu4Ü™úlËÂÉf“²´è.eWSE$’“@h•]ïÏ °ÿšœ”A–ÂÓ²úzD*ï#«ì—c¤üÛ·m´†ü÷[,&uêue•tŒÿâ·)­º—X<Ñ=ˆtn"‘|Yé‹ {á|¥HKÆ®ñ>ܢاEÕbY†IC ò–RaÓ|TQÔˆ™8Á.‹:Íuñ›/ªY€¦µif…ª·¦J¡Ýó~28›L @BÁà8ž/JfžJ‰_X¤M£CG"œÞÌóš8½@Y-O¤,ˆò‡þ”£b"âc#s)¥/#~4FÄy&"¡ Q”*¨J–>Þþ€µ‹EÿM7Ÿä«‘ÉõóJRF]mÂÇíÇ s³Ýh¨"Cx¯ Éý‹è³mK͹¾is‘¡ýƒ¸ ÛDQ] 0‹϶ƌI¯n‹mɬsÇm¬ÛìÔB¥›ë2ÌŸåçª %§ å´þ„WŸçdC;áTlNbXóš ñeÇ·Ôv^wœœÜ—ÙÙp| n×1Ô yCg?'#VKu5GêK!YÔ³+ÒÉü¶êúÕª3ß&GäÖTܭ⯓ÕýãÐý*™ ªÚbªThŠ&Uµ=ÒÖÏ‘¶Uñz‚Þ‘¿¹|×,„tUZ|µÇ-Q‘*+êóF)ži”âÏD¤xŒ¼äº¤êFáÕóS!U™M ƒk¨d'9aÌ–r–ìüêrĘòçG•˜ÞëœkìšÓ"p é„k [GR¡¦[xh列¬yA¡iFq\*{‘MÛZÍa§à:'‹aú@q#Ç:ß7'éÏìš"’¾ûÍ\]Y@Ÿ;ÊÑ%×es¥ì:޾¡¿!Ry2±{Šhµº¡+¦Õx„´RŠÉ= ÝÙÈÕ­íõp^‘¹Ñ'É(Õªî,»Öê¦Sñ­`ø@–‘©´RX  ©rŽûð†A »·4Ár®zŽ|ªW­&–õÎ 6ë×Ú¾µ <|ƒ:1)>Þ•s+üä.¶€fTÀÛBþ‚ÙúÝ—‘Œ ’/\𪱢=ÖåÉs¡±î¢[è.»ã¾ÛÍ/؃tùÕJ†–w€ú"«sEúPÁvê¶[¯ØÝ{Ýr­ËmB`¤ì6}Ѩ×U¯û™ÌZHʧ¾k€aŠ˜ˆ¬¶á9~Ä VPêÈœÏká†j™ŽÅªïÏTÇNSÇ–‹¡ä\_i•ÀÅm7TÔ[FÚ¥­ž&~/¿O ¥ƒmÐÅòÕáN‚EjlPgG"úz+u†:rväªùaž¹*­Þm‡z¾ô QR/ýÚ=Z¬ÿ?@ðþ6¼bª-õN뿦¡‡ßm]$îž9EY°û‘mÏ›;ãiøÝ2¹Ÿý¾â¤Y“³D?µú­ìxëä"ü~Æd;¶3{l¸ßŸÓP]|‚ý´¤>ƒ×¥Ø5'¥øù¬×Á·°ãP3z 5grnfý;ÝôsiÖ©øÿtkËkh0àùw¦K÷,¬·´¥æãýR©Í‘[ä [7ÛR™É¹ø×ýJ)„ïÙ¹çÏTC÷l%÷LµÂ=Smá{¦QeEï™÷\Gî™f÷„T„›Ø={:65ë¦4ë“Y÷¤o?pkêÞô¿Õ cºŸMª×Xc=óS¥þMl¯ñø7þð[ÐìúºkÙödÎø/ýÊ/nø›9¸¦xߟüϮ݇¾tÚu—mý÷?xÅÃW<ÖrýpvWçu©æú×®\ðÍó¶}ófžôÕEî ûnÉ/ÿ»9×½8wF~ëÙ§vkßœ5ÿÜþò¼G®¸µ¥ó•õ'm¸qýOþéñ'ï¬ãûí:±§äÜûîC¿¾dôÏpü‡¿¹öw-Ë¿>oãkoü_÷üÉÑܶwξeð鯵?»ùösôhß=/¾9xüøñ¾%·Ÿ(︼óÙÕµ·]»sçùóf­ß°!}ðÊïšùgïÞÕ³.Z±âŽÛo¿á‡K¿vÖŒ^ÿÜàÝÿxàòÿj<ýÞ{ïÝu×]ÇŽûËñwOÞÿꫯ>uß/ǽ猅ÏUÞ{cÿÁƒÏ?ÿü<099éþ}êœ5‡þéÙÞN¬xùÙÇæ/Yþ«Ö·üSÎ?úÌ3}ô»ß¤ÓéGv<ú7wŒ½óáóÖžö-·]õÙÅ‹/\øŸ ûÿì§ ?ìüôðm·ÝöÞ¾K¿p -U­V:´t°k÷SÙ¥K¿ûøã½Ë–½úÕnøÛ7ß>VúÅúϦ¾{øðÿöß÷ßÖKœz˹îûÊWv=ú³—_~ùæùëî~³¾òý_þd÷Qßٲ厽¾hÑ¢úÊ%ùǯi?õÿ¨»¸œ–þ?ÏR=í«$ä‘n–­Ò"•ŠÒM%!diy©¹mWZT®¸-7KHBv’¤¢„Tm/ɽ¨{ÞsæÌS§S½Ü÷ÿù¼ÿ{Ÿ˜3gÎw~ó;3sæÌ™ù-GjW€€‹õ…ñ÷-ž'±Ûëg|c-¾ç" š››µæÛQÑ¢1}“MÖ‰'™-`D-9îÆÛ3åPÞh“€].—kjª ιk§TˆD.¶])ý¥ñu°Q`ú)Ùo_¿éí«Z~ïè¼ê‡7Õ6WVV.Íï¨Îv²?p·9`ÌÎòøøø–Š”°Ø¬š ifj²€%x!кb«§·«2"´ ¸ySS`YiÙÇÐ<çüܼŅKõÓðªØ¹s§ËaלZÓŒ[¸MÜUúéåÓ§O7l`ÄZ5’~+?^¹¢©‰›y_4šû­[¼xpHÓo¹øåýzцÀ‹õoðVÜ¿_câ¤aàî]eEv‘ç‰ ªIšÉ7¼LLLÄÅÅ™,5*Sõ¬Ç(•–”T¦تÿæÆS¾½|Ê”)#,~Ýa oQAùõë)©Í úimmmëÞ6”üüêúõøeÉx+åEDÌš•ì:îÀÍæfìjqZ©þÍb}læþ99!.;ÔÐРఆùõë×ôtU§i\|&¨Þîò[¼xËa¼jé…¼º—›àß!v‡½yóf)Ñr³µ/kªöÙÞÏ[¼uÆNûX9U•1cÇŽœ~òòåÌ÷f¿šðnx-Rñ]SQt{û/ UŸ_~pÆ.ÝóÅ¢ éCGUUUhZò.#ÿÒ5ópƒe·.·©ZÅW.- ù :ÒuÁI œ85»Z/Íáõ½†€×Ç!CROjÔ<Þœ™3å—fNùËn˳ºn”ØâçëË;ÖÇÇçpnîp5µi$m÷s‘rã´´fåÔNÛ'?²¦ªjõç×óòë:‡êcZW‹‹kWòŸ={¦fºæú¤ÂÛ!…¿¼cbr 6§OŸæŒ”‰«®«K }ÿTø>>'?RIYyc}{øŸICbRt‡NÝ·mÛ6Ëó§OâÆ¤§§GEGO^{åБ# 6æAûŽ{ßP8á¶YîBÄ·3N†áIr¦¿v¶—$^¨=ØÊnÜΆóAb ^<÷sr#kîÝû,h¶N,q™={öÂ… gÎ\ýôºüúªpuïhnn’þY¿z öùu‘ƒ­­Xm„ç cuõ¬½{ñ)ˆª´Õó†‚0õßìÆ(™G|ðÓO%?K&Øœ\y_[çýž.ì¦þ ›ïi¼sçxpÛÚ×è"K9ö®Êc99AÆÃðXkÎQ55Mü½Ö–áyY™32®¸h‰®Ùôìjü_áÈôÊ¥BŸ~Ô–É/[¢Û4JEd_•ݾªƒŽ_wå]a9| wÏ©½•1é~v~£Ö¸óî~úiøtã8Îú'9Z[[ûúúŸŸ{ëæMv$Þ÷ð!Ú?ùÉÜèÆ´sKŠ¢Î3.÷ÖO>|¸i†_ÝÉââïdß4ΰ·¿ºUEªôÛ—·…a-D:ËñNÓÖ1ä}G'þã¯ÅªSÖ„Ê17Në ^SÃÃdÊGë‹ë´ÈKIHdûh&O×Nùð‹™{ö­=…‹ÜÝ7mËÊÏR?)·ÞïËÜ#šÍ"…ɇ«_<ðh.½ŒÏ¯Üc½o©xtÖ¿u?wþÔzp›Æ‹Àó—æœ™Þ^œòg:>Îøœ}´/+ë Óž-i“Ö½ùøåU«ø³ÎÕüÏ[ËÙWSž~O©$''È8Ùñâ]m Ó¿‹ž~êtv(ï²~·.Õ[2bÝøŠÇÄìlúTG›cVK¢À?ýw_™üþªvëåà“SYbÕ~ÜH@)šˆ¹)KZ™­”åô|{é2@±¬ å;Lxô‡Ÿdžølõ¼naHߣ\( Ü4º— œ¡%±ø£Ç}(b“ºß¡@p¶ÿ8®þBጘYÛ E™£- ¨ë\$d¬Ý¡ Œ!WÚPÕõ‡ûÔKaþ¹ÝâÉôœ¯G~€W.:&Qx•€Ž§}»¥!.À çnÅgäˆà¯'äu¼ö—ŸKÉÿ£DÇ-ÿŽGQ 'ü38Ö@ÇmÿŽ…bæ) ŽdüGKûŸŽ_}8ÃúrfLUŠù[qf‚ŽûÿvœM¢š<þÿ㬟~&\Ç<ô·ãÌÿO9ÛKáŒ1@k.Foñ´ÑÄ™MéywÏÀŸ|[$m¶ç§!GtGzrq¡j—’W¼gþ»tÀu¨Š¨ îRÖ$kÅH›°g¡Ò+Rø Bf^¹.¸9â3*ó„ÿ¹ø}´W³tmð#qïÄñ×Î[A®›–1Z=ˆþW´Ô¹ˆ–5ÚôAÛ}$oà¯ÐÒÓE´æ@ÞÈðøoh©p@Ø9dK†m*gkÄN¼%Ø'ëWë±. üˆß ðFµîÝ=Ÿµd ·‘0ìm÷j5†©€S”\² BàÉD| k KdG²Éö”d”…scÁkY¸š.hÅ9^à øY“ôõ+\_á8qŠˆ5]”vN?ú.Ú½Þ³A±ßÔ]Ž"-Ÿ íœÎ'ç;ü°ÀKÑŽÒ‘žeÿ…šOíG…Dû©7¡.„P´…̬)Qè³(‡Z>}÷ˆ¢z ÀÝrhù„b3*èÚà~è²á˜Òû¼[܆†ú7—£ôá^û/´ËHZ}ЯËÐÎiýG’b™Š“Cucˆhÿ@ÿ¥—C½_%Ú}¢á‡Ð·ÓÊãÒ®¦« À÷ù%¾B$[‘!ÖXÊuÞíMï÷vß)‡…îËž’zŸª”½ÎþÊQC|Œ |ˆ ÐÏ©Ïø_èW¢ðÝÖÓO©vR„8ã~òISÎ'Sú=±s:•r¿"¨ýE(í.ƒÊÚÕ”@{¿¶”çJ=³ÃiåJRøf#Ì JyTßÂ~? ¥±Q;‹#Wvôúc¡$ ÍŠ¨é´vÊ[«¡y Q†jOò*‚ž%T'D¹Fè6A}Õ Ý§ ¢AXL6¥”kêΉRÏŠ#ÛO»OAåýÜO{1Ñê~¸ 犎#˜ ÁQ⺘€¸woìy/êžQ{›w|÷£°SàL¥îLJR°Õù³wïŸ5Úà|¥Ôº†q—0PjLb‰<ÖaEEÇ›ün¹­‚q*dv§A‚Cä ˆ93 öV;LÁQÅÿ„cVÜjqM1Yò(˜Jbk+4ìWSÍG{¶{øÈW7kÞ4÷ ÇÀð?I¶+²hØbßÊCµb[ï/Mùíþ8ê$ݲØòYÛ,s£cÎxÊ7ê„Aµ\å£$J£«ú/›ä¸‚K™KÑâN–O1` EÒ=4H”FWÆâŽƒÜÿœ’<ËÓm·wâØLÙÇYÒ±‚F£Ð£kÍÏÉ<¹#"óZ £˜$Ý+:6¢e~À›+“­‰9žUtB`wÛÐ±Ž·öß( t‘‹nªÙú%ßܷн5N¥c•’BWxÁÉܽc²úŽ­ 1 èæÚÒë¡Káp°ê³’[¥ŽÝ¿Ð‰ºRÛhGÇvÞ«?£¯Uéé%wHÜ+‹ l%é®Q a/¾ý],ns’TᵋãÜû]€á3[û*žÄª#,“=´½æXã†kaKvˆŒ}l|q \ǓطçétErŸjÓÚ¨5¸¨¹Äz%o:žÏ$±Ö­tìyñ‹.Þs'ïÚñ!xâ[«‚ l'±'g¦ñÐÚþprWå¿nH¶H¾›po·2‰Õ2Q¤aí?Ùæ–{ØŸó™¯Âø0á<^J’Ø÷f$–‰°}íœÊ¯Žä¬—ê݉Z4q¯BÚtÛÑy°»f_›'•åá6©tõaY¿G0— ±QIŠ4º¢»£>\x^|«bzGŽ=ί†‰½’B§û‡HmùPÙ–yC•µ~}€† ‰}ZG§ûvè›K¼ïÚnÈš£TÉ›9¯ÔHlK+[’ïn¥6g|اeÕ‚T7W \ÝN>ówD•hØ^ncÎ_0õ¾,¶>dl“ØíiƒþõwWky]ØÞùi—š†,(4ÂÀ¹$¿5Ÿ•iõÀ»z(Õ´tf GÜ ‹”ê†ÐDýa³ ÙwXIñÒØtù ROò*D<ÆcáèóÄC^Hq¼BR^ˆñ¾˜:—áFÂÁ}9Qðy†Cx ŒÇBÌFâ…â µîxˆO€á&&Âp3 “`¸†[a¸ †¿Áp; “a¸†;aø; S ýTOƒa: wÁp7¿iËB†þ6¾Â DoŠ ‡W„´M1äóD–@nK!µ2˜r†7`Xà †áOÜ„<ð¥Ç5nÃ\÷ð›ï‚2HÌA¨äq˜ÌŠŠ À‚&éØp|a{ám C1ˆäÀP^•€qIJÁi—¡,“h$9—‡¡“˜DÂøˆbcm4s7>ŠÅÀôX¦ Cl„ñ8æœ@<ä§ÉÀÛ÷ L/‚áU&ñ%] ã×`XÃR–Áð: oÀ°œ©»¯æEp“©Ûö«dZº&€[LBâì6bØ‚U1 c>w™\Gª™ÎÅxO†j™r£¸Ç Ø×!ó¸†=€éu0ý!LÇ˜Êø<—Í"ª{ ëÐX°‚ŸvÖ,â`à ¿ÌSaÊzÑcc`J,LÙãq0n Tßs* úi¸ ŸÀ´›ž®F¦“ß]DspˆZ²Æ!UÃÞsãHªëÄÞß•‘äÚÁ1¢ÄàtÙR”'½h¯€.Ö4ïó¦…k'ÂùÔAü‘v@ôjãÉõ Yð•E*ý k‚Ir3áÑ-¹Ø¡%‚Üq|¾~¯ÃâO:úÆN™8=çÄ5KI‚e±^,ë#ÚÂ£Ýæ`RT±Í¦°ŒVh±³l‚Ș À²«á°¢•;0ìh?,¯”ìÍr*‡`9^‘œoR$J]€ªs‹áŸ3þç ËKTTý¯ëY€:YÒáC”6RQ€7®ôð ƒÇtáí ö¸#óëµX0Ý /CªW“q޲Ããzú™¥ï€'f#¥@Òpq/IB…jãZð¥¹r³óY¶|„)µ.Õ/á½Èy±ªÊÅ¿2I=š\!M‰õ ˆqy:Å©0/“×kª«“"¡Waßnƒ@K‘3© ¤4 •#IþÝʆÝýRØ#銗„Á/CTf)"ÒJ‚u?xi¼¿õ‹îmàË b6Vog{k‘"‚W?#~WAåB‚!Ÿ¹®6þM誾±1kc¡|V Q–½Iä(Ä’4yzöÌšòA• ƒ*µÓZAþ´‰ÈH¡œiT=f¼t££…vj]Õ®Œ,Ç™MÃ.(_Qq#ëÑ*úXF˜S³–Šé^!¦X’e¢æy¥qŽˆŠ¤çÝiÀz€ÍKaù%üÍ=w•o®ô–ŒÛz<\YA¯—¯‹Qþäè¶²C t«—ØFå5+A¶$ðUa‹ä4jóĦ•ðq²ÌÁZ¹š±-˜ô§zKmvÐà¶‚:êa½ÎÕkçavÅ¿©#4PIW`UÏVõ¤ˆU÷¬j¶ïNˆ\Ò××Y‘àçÑ çIkg ØÃ¦|Ÿ†ç¸) ½”g»Ó,Œ£NM{°“z5h¶·Ž“C%hª‚d@NA5aÃ]© ¶½Vxs7°¤;p’5®¢ ß l+âXåô‚R d9žyXùÔf"u€¶ß×@‘§³€*¿›p8†ð·Ö~ auôúÚ%O?Ij‘ šéKoö°°¿AØ>ÝujB/• çPN/¾¢?(®„_¬,5´©œÅ=úÚ –öÔ „Rƒq’Áòä€çñÔ€ñÿçžÀ=›-Ю˜#žj¯Ïrÿ¢§Ø#ãxáAk/9ùÊ#é»<°z³%«>)„‡P”¥”)u,†é¢ö³Ÿñ…ìYØS ¾ÐH1ÇbªÁ{d„[™_^•¨aÁý&áÃoB$Di®†]t°&ðÎDäjG:Ox¢Ê†¡…<އ•óG¢3» ›wééµYÏ £õµ]ìž÷Îè†l8ÍkØ÷Nì˜Æä0-:KçŠU­nyH0ã(¬Æ›Ê(œþqd·~&d¼»µäôBœÒV±²SY@a–Á'Ë;YJeË ’·IŒ_/”#E„‹Y«¦Öˆ¯[µLL–h@ÔZÑã÷ ŽœhH&¥0ä‘QÔ^ƻׯÖRÌ¡fê}«÷G"ê} ¯÷R‹œt·8æÈjºé>1B9Gö·D“#@Ñï¨ ‰p•=Ò7.€Îp„Šh£S"ªnóªR©b u%{Í:<’«y$nÇìÇa<Ÿ”r¢–¥ ÌËѲÅ^Îí,óI»ôÞ ‹&ÅJvšGTÏ -ó*ñ¿ß¡8¾½—Ð5ëÀà’9G‘©¤‘µšA-mѲK•+*b<³R<µF´¸E°ä{¾ÂuL!~*‚ŸÆcàIÀ% U%úv w³Û9É%¢^‰›£e‘áûzeô~i¼”Ásž%GظA`  |Z¡p±åT+¿¼_m€RZÆÐèiš;,°»Ú¼Ô¡â ½F~­çùìŠánÆd»—l¬edãÈQ±LD- Ý‹a†7R˜aUú¡‘$o>Bþ”+¥ÝW*ä‚V•/;Š™\ <)SQcÔ²•šÀâ[ ñX!ôiÒ…Ž‘AO 4ŒStœ¼‰'¯¶„sõø¾©Çä\vÅ+N»%T_x_`6md³ifM”G±h?\¨Ø¢ê+•ÈÎ!{Uo¾PÒâôÈ¥{SLHXs­9X¯––‹}]ÈúI uÙs7ájdXÈ.ŠÒž2_Ô^ƶ‡ Ã!(&ÌKýkÅ \éëä4Ëf#Ö¡Š9ÎþÃc3‘É…‚«*I1WAGTOaéIŒ¬‰Í˜×â%UB’$IJæØã Ô»³Ä¨”t¤0>+eÍY|{·=RÊPd – è5€h!…~rN,о÷ÌYê,A×C%t‡Ê²½%tjáZŽØO?¢är °Qd÷ŒôD–ªÝ#z|FÏæGØï¢ûc¨ëÃE·ž-º£kDØEWTävE¡Ñûäþ‘tú„)‰8Ù*DSBÑ,$>3=‰8̨¹-Bœ¨!»TÉ#1u³ >,i¡âBœà¼í:Å$â\wvmrãñaЧZvORœÓ*F´³½!TE{K SÅ¥OÚ¹d©WÆ vZFü¦$ÔYp¯%¸Ò[Jöcðz®¨.÷‰ì΀ø©à$qҧ虳Â?1†fnÄ0½3Î˱ôe²ô—Æ ‚ƒÔÔ(,¸ó‹ÇíÊ’Å¢Œ:' ׃˜ 7`bR¿hþzN`âÃZ´¾ÆQ€£{®IÙKàÓOÔ/"ße¸z’XL}Zr_ "}šVñcút|Cô¥µ Zg´)MäMCÖT+]¶¼–G´”»‘g‡É‘ûØiL"Ò iXUÒ!£\âÿÕé`Ô?ªòL¡”O²‡šùÃ&› O*xŒë‘ÂJê•c¢s&H ó:@Ñ*®”ˆZû%äf7ÌxEE¤ñE2àrYH,Ø @ÿ×+’lù6¤ùñJ5#PýcJ *œŒBD1ëe¦µV‚ƒZ}çÎ^¢pcê­eH ûpOu]Tù}„£¥fÁÑ7s˜^Ý[;ïô÷†E¹<îýºÀòÞÀ–÷Œ‘ßnµ‘SuYqWß2z‘9ö4o@œø’[N˜xë†Í¶û’(úM9Š 7xõKN]Ú%(ø`:·©œÍµ¥uL€y¡lm<ôjC Neý3?¢fDôÑòÕÈéSˆyE/Z"{ô kí¬3zs…”(Á×ý…)/‡(ü}²jõˆÍZ^9°íIÖöc"Ú~XDÛåÆ&Ú^(F[°©&§x 8ìáž+ZT(¢!–Øu³=Y°¬Åî•îÓ`Ôtdã³®ãÀžj¬JÆLC ÏTQàw¶Hçˆt®Hç‰ô)‘vŠt¾Hˆôi‘.é"‘.é‘.é2‘>#Òå"]!Ò.‘>+Ò•"}N¤«DºZ¤éó"]#ÒšLú và-ë:‘¾,ÒõÍaY7ˆôoÍÐeY_é&‘¾&ÒÍ"Ý"Ò­"}]¤ÛDº]¤;Dú†Hw6ø†e}S¤»šÁHß²îé^‘îé["Ý/Ò·Ez@¤ïˆô H‰ô°Hˆô]‘¾'Ò£"=&Òã"=Ñ À$–õ”Hßéi‘~ Ò3"=+Òs"=/Ò "ýP¤‰ôb3ó[ÖK"ýD¤ŸŠô3‘^é‘~.Ò/Dú‘~)Ò«"ý?‘^éW"ýZ¤×EzC$€ŸøH¿éMÀ£éw"ý^¤·D˜Š?ˆôG‘þ$ÒÛ"½#Ò»"ý·Hé/"ýU¤*¸CNG‰HùÈ&¶û·Ô8Ñ*ɃW ÅÂXÖ:Ñîig¯%¹rpÏZŠ–“}Á¾ ¾·¢ˆÁd)“€˜²n,UûÄ@n6‹¯éˆ¯-¨¸'ÈW!R@ª‘°õ :øžAòd¤µC”SBVün‰wÃÛ! ”@—í! :ËÙ’#8}Z‹n²ÇQåÁj‘qo½Å…Œ™2º‹Xè‚Xa¸—$ˆ/X7¾*ï–EŠ ’Ç dœž$Dص‡*€Áe6½ÏùØx|¥`x³9i;J’!èÀd&ö“2Э«ú’ņ5†à‡êذ³õµNvÏ{GRÔ†X˜…â9‰¶”M´ÿVÂêy¦†&@CÆsD.êHq’Aó3ŠÑìÀ#¾ßÐ@‰CÒ:Œ•d­€m;pÉÌ[ÑkJÚ¢0–Ì­ùN—pŠÔ“‡Øô·2v1qf0ß#øé£ÖÐ;-hñcc-€ÅòDW,áÑ_iƒ†’ÆæË!QÒ‹)B´+ê$k­¬f¸³$¤ò/Û0¨£$ÑÀÁ&­šìqe‚(Yjèë&Á°/ÓÏÊh Ç[2z÷jK £Î(“L™OiñŒÂ#EúÌtHÝ‘ª ¤ž8OºPÉhËø¥ý:BbírŒMy€CRÙ¶$ů5§Ke'•Ћñ7zUôÓ»gÓꬩÖYŒ(¬ÓPSä…¡Ÿ†PvôÜÙÌH"‚€Ê’­»ø¢øÊ–³É\öãIºjF$1ð¯.Ï0v šÝt¯ëYüa*_9I¹J=‹ØL~91’Z=°Q6Î^g ®¾†Eƒ­Î¤-žÓo’j l–eþ°X}a1÷äù–m-"âÓo†‘Ï„ô*’­¬4L’fJ!{ÉOž{t(±¤˜ÎCTWiµÌ—Áp“_΄·SîlÊjˆ´¼Æy5§Û‘‘Óí„P›Z¿;«ƒ :(”0Q½e§$†±©ÍRÄXCU]ÏÄutd%Mñkua˜íeí+0Är71ZAUÿ`™Aæ¢Ñ:ç,ÅÎÛôÞ'Ët™OŸ ²äbÎz'†Œž[aø…qQãNܽÔîmê ˆúɯÎÐXS6Ÿža9Ü}4ïsÈò#ØÛƸäz}zz^®ç×QúZ»'òGô¨v@º»…ˆ[kX‚ 0Ãî.ä*ÔQ-†®BÁÈŽ£-A¾âYLsÚÚIjÅó`&Q,9­Yµ° Ô%/NKÊÊ!)¡.ÚàJgóÜÀ‡sÉ4\ÅÃ6«c@ *¹ŒbÐ]Š”#Pf{3ï8boQ~ÒÇè.(ë¦îp?é4æ3ŒÆœò7êØÝÍÀÐA9Zγ,Ô┓º'¤4bR;šÒsù}W”ùStHõ.&äaÄÃ<㢼'*¸ˆÑž¶Ì’ÐYÖôŒ™Ê®pwÛk­Ú±r¹ž&˜ë'3"ÒVÔ³ÛIÄR5“Ý^† »[Þ™•U´)gW]øApŽ “³©×•Ù]™Í…Clu°r´ü¿„Fx}l3àÒÿ±èJ?²A©2ú{ßžä¶6g‚›Ó!6ßž¼¼U‘Éàý<,_ Áí(„ÙÐük˜[ðr¡6}XNO &®G§£zϬ¤Z›l°‡Ü€~Å¿ÂÕw/Ò¶­`?ŰÉÎ?G:yµ^úõl½Wϸ~v…Óû–ÀFz9£÷ý®=ÍÓcàŠÎŸ±7`¨f±]*ËèJ1{]¹”È’áN„Pùr|Ä%-WòpߥçÅŒò8Ë3¡‰¿œR©P‚ˆ¦-ñµ¨±ÁÚL‰ài(wmÛ…àÓN bôòíð ÞC†O)›äa(ïwÅ>¶mw”¹~qÖmé-‰oÌ(3ÍOØ9§,¶ôBÞ±´mOØâ¥C¶(´ –ÕˆNÓ}?FKÀ¦±+\ÞUõȽ!@ë>Ìhݬ„ÕÐ:dcï•fÃlG’º;bá¤n®˜üíz¹”Èa3Í–¸)b§|¯!upø '=‰÷D|äf ZëœïïÑ„ X‹<9¿7Ù)Qà $¾‘£¨OUMÞÓhÝ=Ä,ÓƒNGy†#’&9–ÄáR2Ó#jòÍ÷ø¡y—oð [ U/N L¾+‘ùØßnòíiÀ8"*°h%Ï ñØáñŽøj0Ct2š}Á@ð,zu¼[*]ÕÓÙ¨vÖPXסÛd}£ ï¤+í>ÃoàD{·î‹œ3«¨¥‘¡2 0^½JÐåø6í¾eˆ|OË7õV¥–±Þ¹ŽKŽæÊZFRA’‡g¾` +£Üëd¯^»²í`BÄØd¬£ìV[ÛíÒùT•}pMó§ÌÚ+å†,£m•ý@ÞÝ*§E ó§ãX•›‡÷uUVlÆÔu o" ‚pSµ%Óªá€! Z?-t©ŒÔý#¬îíÃ{q@Ý¥çJ'Ò ïÅцîoد¢/ÑCš *²¢mì¤m¶ AêޡÖ‡ZSd­YZÎÆ´fƒH2¼-Ñp6`ëÀ˜=Ð &=`ÍAóÙ«M˜1ò6h êÆÉ$ˆr*ÏÑÈ·*’tÑÐ]›¤¬æ9ªæ¾VbpY)ÙU)ãÒa‚Ù‚½Éu†›’»›‹uû»dk¸¸DÃq(ÿ.%&IhîBÒ0Fò/I}”éU2T¨®ø%xc-¦á’HÇÕ/#N„æ“t\  ®¹V5¼§Ì¡Î’dâ p/W XzH§–Gét†Z°‘ö£(œEÓ"Ïû=_8%7b± îªÃZ'ë­v3ÒsÑÅûýh’àXªY¹0pXœÍæûè ­‘êûpºº|]í3„Ö‰ŒæRÓêZú'ñ×Àêú#>œ4i " ¹Ç Œ›$EƹEäÔz+hÁ¬¡›È&[bJ¥J`ç¡7µS¤‡õhG}8У}‚þ9ycÆvp$ yªÎª1+½¾®‡«ˆZÃÜÇS9¤­>Z‹ærHç²r±lÂÀoÜ*A1Êròs¬(DŽ®…Ü#ZqÆщi‰ñó2â_òä×Ý«³•Ò;¥˜¨„ë¾…ÙHúÉ|‹Y1Œz= e„»Ø¢$Z*döZ*NÚªð±ObùJ8,Ýb+)Œò6wP—$Ïß~æI¸€ЫCšZItH9_*N”`Ú¾¤†½Êh8ЬžG«¼6[Na{]-ôTš¥ãõ*y@Ï÷ÓôµãÙ=©O:-àôqZ¨øä¿ë´—‘ŸÖ2ÔÁ³N×Tà@+Ȉ3œ¹Ðžæ­~"Ô+\´L+—’ ,’Z Dë?¶=÷FE0‘m§ýøìvÿmBŒ'1GЃSÔ`Ì’Bl´|ŒÏ•ÏAv‰ŸEΛ/.ugË”(}4“)€³œ³ €àaezGQNº×¯žÕµº[#˜PKÒ1GÓà³ .T0j³×ˆ³…:°m\’Ë™wá*͈ý¨#¾R. íÏær($1x•Z«G±t?hœHY2É¿EÆJ*—uûˆÙȈÃܱò¼3(A9›†NY’NWÄò‰8Öpno¶_™+ôbÑ@'730E9êràÒ—.Õ“a–/J„ñh>Hÿº4@Co •àÙj\UÝÖ/ÉÙܳÐ1öM—T5Û˜t¨¤ñÅ”ý›ä†|Ž$ÃBIn:i$¥8ʉåpÜa»Eží…#³àÖ-Q\–_¦ÜÔZk3J¾×⛌+¬QfBUGðw‰°ëö `QwŒ¡:L -[ºµÛª-¸ãHëuÍU²ÈA=Þ[õX²+\aõB€®âq "fQ÷ë[»Yí÷ò ñcíf{ÆZ§¯3Ó.@b?muû6"YÄ9(ú6ØJç”ùlÒ.f‹jSe‹‚¶BGºÄŠ9¹M‚@g)§ËŸ"©¡•FWq40Âg¸%–Î&s«[tÒ «Õ°ÐñK{¨¡S…(÷R±…–lÎÄã­Gó/¾€Š•R±€<Ñ*· =%d/dš°ä¨Á|3âË’¹JXÞžl&“SåäTmÅÏ?Ò"(I.ÛÛW¶-ù r̆îãðfêÖ ¸Š.{~{{¿Ã%$ã&ÇlQ›t‹Z†_«'Å}í!}m+ËÅó<ä[gÅÂÖGcèª ®›Ûñ$÷Ni9ác,z‰,û$¶€ìˆ²Ç{¥ )UZ· ¶ðÀÉç¥ß§à ¶ºè¤âr¥å4ï[5k]<µÃêˆU!F&²fø›_Èkpxq͘g%[J¦øì4Èb"Nž•p³_Ñt\.Ú™”B$¿ Þ)h¼(U¥eSNKŽW¬¨²š‹KCÍg…X8.õá™Ï ±x´‰§ Šö ̺ëUNxfÈgob3¶¯† ¥x¤µ‹",t™®Ý#íguc @MÊúSÚº_2fFùèd+Á°Ĺ>ØÚ0‹_°Ã°3è’ãЯ<SŽ0Îþ;ÙúÛ\C¬²\Ÿí-DÒ6z@-ówÔm°w +‹7º—A¢„ÁÆu*.ÁkH?“ÔZc†Ù †[ËÕÞÄDa>2kc=_@y¢AKæúeî—EÍ@ÿª œ3r«ð0©¬­´ƒ£©†3æ·X”q‰¿9Ù'Óɲ)s|Ä”§‘]Ây¥Vàü³fψfMxÛ‚ps2ʽòBK‘l‡Ö)sEÊ+Ëôzåõá|à'Ò‹zÔ‹ÜFmÆ×ûÎ(@äóäó•Cƹhauˆ½Ûî­¹ôæS¦½FƒæµŽÚˆ²hxVÎOo \­qäu¶=ïWõJÓ¼ÜFh’GzX’/Ø”/ûÈþ¤Ð°wÈþŒì÷ÔÀ¿6³Ë>‘"†(qd“žºc}S÷V6u·ÕÐa±Â;ÕnR¼Š<æ¹>S+Ú?°_Ëï%S36¨› §”ܱ˘êŸHödÊÖÌ·ðP«ÖeÑ´FEË/ŸÈ’ÖØ/)3]0‡´Vk Dq«J´Â²ÝÔ«’Rcþ_¢PiÝ:ƒ›ÚbmT«dµ5«Õ:¼¤VȆð}#K050ê€çSÄ.à}¦Ìðå]ã¹³Œ¬„ä¿»õüš©¯}PKïÖ¿> ñ|ÓYŒrXwûÅ¢$ö_b¬Sº³Ï–Èì¶v¥ÚêÇé_ïZQëc6Ú¨&ÈGªB~ÑŽ¤‘z@m¡ø,æ­u—ñKkÙeSè/ë¥VE–4¬J[¨æ"ÒRãŒalFm¢Á­1öï°¾rtp#U‹FFªÄ80üÿ+¢Q²þ ûú² Â*+D° ªMòN…\xŽ@+J JÒ½~u« ÅÞð$âÈ‘u¶¬ÃçGuz%›Þâ”\)Ú oÒáûPxïÆ»EæŒ>>I1€KŠžRÅ퓎^ˆD™©¤É^Sü’˜6mJØ)e+¶9xmv{ûûUÔ4©ÀæÄÉ ~c¡Ø:»Ý+ñƒÇ´¨,èð<¦LW šÒVäIQ£Å„æ¬/‘vRêýÒ•À,±wdË ÇR+¡GÉ5Ã6ê9Фµ +ôµìž÷ŽÜ‰†îÄ©€¶`7£™‘Q‚9ûF ö4÷žSÚ’˜&³.\°+å,yê¡âTQ4ïÔäèwÀ07ëöKxh†RïÑŽ°z}4°êúY›—ŒlÕÍyO«nwó¶åµåÎaˆ—¸¸>@^næš ðš·èp'°]qÅFa‹uXѦ4ײÎsF6aæîëÖÑW¶ƒë–Á~‚­aA¤‰Šq…ß8”Ó@f7$ãä?¥eM…2žEÜpM²ùlS?ö$Ñ´ÇÅQS¬Š#é°‚¸ˆM5%y¶©¬¨aë!»»¢cUøGj|äHm¯3:/î¶bC½G¢ ±º {T2_ š™%BË0¯Qž¦Æ°Vo‡yv:8ú)¼’26÷²„iA™3*UG»}„ÉpT\1ÿ;â„1î*›4Ôì×=§fb¸Y—9ÊJ±¤ÏëVŽFí¢€[é]v¤Íà!¥Í$å&¼¼t("­Náð2fíùµ\Í|KQFø±ÖÅ¡¶’{?j\thèjYX-§°Õ2»æjÉ£VìF,|öp6ã»›ëÐ'Õ%Ó±~:Ú•=A³RÜÓ‰èÛ]OkžÉéP¿9†³_ð˜fÈä—û ‡Ú*¡xÊõ {x=U{4R¾­¡i $vP¡Ò•¥30Ÿ$bæ¬óþЮÙ?Ð Ÿfpr EÂ:´#ÉqÖÍ?´—sLÞ”ƒ‚ ß2ãv\Ú{Q,Û|Q¬álº Ö9 ¼ËœˆKIÑùz9sÏdô¿\IæP”ðÉÛ¤µ@o¡ ÖJ_!›–Ö×0éÿ9yÔ¯±»“QµbHWŒÌT㫬”Þß#˜¡[JÉ¢½©è÷+ /ô6Jù˜Ò[ú ö2ƒ(Æ:ÑgH><ŽFaa Ñ [!H8h—­þô˜\otNÙIöw¨Ú]À𼡝µA¡Çú_,Å’@éwZò˜£'¥'ºŽ7vƒÍb ëfË‘áçe€_ÁÒ7}»F†Fa£ÿ2˜XHùÒNKÚ_¦ð(k»l2ŬH IÅÑ ÷+%Ò¥` ƒ–äwƒNʯ¹½U(öÊ…¶¼SVÓû–@ÝÚ8:Ö@!Ïb¯\aÆä÷¸_‡µd5[¿­ß[£ÿfý4z{|‚Þa°c0ßø†Ýuð]·÷ª:@GhÜ«-3õâzýÞv¼ß°w–3v/ÐXkÇ'caç—ËY6Ÿ³Ä3£,™?‡ñäõ:qbúvZM{§!³¹ìàË­ûQ\ÅÏX}Ý+¸ 1ÿeÖ­±öýŠuÍÖ$ù>ëÁ&ÅÂÆÅ&ÑlÅ÷ŽÇ¿¾¨g´ÿõw^xg={§Uï´šýïŒaøðà;côN Ö·5Èw6ˆw‚¶Êï„Ñø¤xë«a lY£X€®ðÜ·á³ññØ5³-Q—FÁ–#øQk‹µÊZ+N—ëįnñ÷2d+·á^U— >µMŒu?úR«Ú?×𻆋'­š5úgV£FªôÂfV£©X£tFö~êmÕ.|ÁZ'œ’¾/û‡©±2øÜßEGB¿”SÿÕÿ§ô+P³j°f ¸1×ßUÍÒ÷õw5û ‡êúÿW³y¦Ü±÷üÝÕìúþÊÿiÍv³šÅ"Fs+íâ_÷Q“Nr÷3{÷±òW–¸:“CÑ‘ö:bž²Ñ¤ÉfÏ6[¿¯ÜùYÖ÷Є¶Ýz†ñêÏ‘XFÿŽÆbÉPÕ%÷DÐGl@)JAE¦ÞœÂd‹v¼ýl}û2ñ m‡ï~®^T¯aòD]VEãýùè=•u„Meu’nPv—u³ö¥¬ÙíTÖf,#C€ Ö{)ëˆ7Ô¨%ùÐ_Á1ƒÜH[_nÎã ®ú—Eâ[4ÅÊP¯gôIqq’ T«oJ·]ü7Í2*vŒ¼ZFA~ùü>µþÔzõ{GÃŽ9žM Í‚ü@ÔqªØû¶8h6”ë­Ÿ‰¿~P'c”©s§Å”:c™j‚_íûÛÿ]ˆ¸>ZŸ98ó;Öï™â{n‚ïo=‡©OCDþñ¾ïø>–7†)¿øsM$8SB¬Ñ!ý¦lx”J¦žà¦²òë#ÞÃߣsÏhê'%¸Ua.}Ï)qï4ºw@H¹ HS¼k1±/¿ŠË8‘Íuo؇q9Ü×þû|OñÍŸ&ÜÅóM¤¾™Oe/Áüõ¿‡·wª¯ûùòèûûPßûlßý|O‹¨‡=ÂúÂiàã1YK @èu¦?ï!“×N+|}íu;O{Ô¬×MªZ÷-—yŸ2æËûnÇQ/]{y2;éÙŸõÄ éOT­Cÿ*ëpù”z_ÞsO¾3úƒ+2zååÛ“oDŽåÞ2©Á—÷c3/騾ñjò¬E·¼~Ýk/žPµnE–{çÜQ˜wå­o˜tÝe‹ön9ç¼ îLMz¥åàuU4'‡\Ù©£}åÎùø/–]±ó¾ûO¸÷œ±ëÿ²jÍ)Ëݳßh_¹=½zâ _}ø–ÅßøÍ÷?+ò~1&çØK‹ýy÷¾|ìÇoª÷ò7'üÇÓ£&üçÔªõ¾:YîÐRÞ3_ýHñÆeßþÂñSb~5õƒ*BÛBÞk–ùó®}êúG¿[Ú0ñœWž»ôO·ŸÐYµž¢¶½¼ÜŸwêÅ?}÷=_hüâ5»Ž?b×¥«Zs¨Ü¯­ð÷Ã_&eà ÛÕtéø›ŸiýX®j]Ø>ó¾¼ÒŸ÷Ï/üôÎ93ŸL¥'=sàÎ7½Zµ º&ä=mh²/ï=o^9fçE¿ÿ¡{ZOyáʽUÁÙʼoœ/óAyë~û¹›_>ë¡3NÝ5ªå' jml•yß¼Ë_ýr¿ßÌüÔÌøùÃÛ«ªÖ¯Ö˼¯ùóÞ5öž ™-Ç~×[Ǽ¹ô¾ŸU­KÆÊ¼·m:ÀW‡×Þþññyò<ÚôjÓïæ}CŒÛwëeÞ™ §øòžô‡_{,yÒ7³ëÏŸ{kÞ]Uëõ&™÷÷Çɼu”7ø¯êû›×wVS÷i÷þôæGG½Í=f÷äÇ«Ö Ëd¹?Yé¯ÃʇNzþ–ñ×%Oþà#§¥9ÿRÕ:aœÌ{öÅS|厾æì·îþ홟xð©ÇW½óÕ“D}\*ó~ûsþr¿4êùÇ>r׿-¾åà©ÿôÚ»?ªZ± 2ï/_ô—ûæÁ¿=íÔÌ3+κnóÔ'ë®ZoL—y_}ÍŸ÷áÛ?ºtúæëÏ?ã½Ïî½êäUë;—Ë5ÿô詾¼kÒ÷<ãßÜÝ‘ùÖ˜O];«j­8@æ½üêýþý»ó™™}/ž±ûI'ÞûʧÜlÕúæ)²¾Ïýq_?$¾³çªŽGÖ—’;]ô¹gßš_µŽ¢ùpÑ9wê›ö¦q–ÕîĬ³­«n}ü>Ÿ‡Ô'>s>ÖEêXï—z´Ø‰­0Ä-A‘íHÜÏŠ Øx6®×s„Ÿ‹¿ÏÃ<Ÿ‚ ÇÚ‰(sçcþ ðóÓøy!~^„Ÿãç%øy)~^†ŸŸÁÏËñó üÜ…ŸŸÅÏ+ñósXþUøûjüüüü<~^^|l¼Ø¥^ê¬áwb myëùæ|kû–ö]¼ò=ü|?ÃÏÇcóßoYO 7¤k–õ}|ê‡1Y·xãÖSu ‰ý¾ø¬VŸ9‡ª?¨­ÿ3uöZËz¶®ëA1“±„çë&mY/Ôw‰>¬»õ¸jõGxýE¼þc¼^­Û_ð¹ õÐÝKê÷´Ä¬¥x´ë¬‡¯eõŸøVÌZŽW>Y3ö\¼r^ùþÞ‰¿[ýxª*â‹>+ðê'ªâúty]ž»`8¡—³ö6/`vó½¼ñn3qŒ÷\¹CÊžóë0«ŠyD¹ ãÙŠG°&«q,ë/õóˆï˰o%;QüÔ bI¯¦ýôV)ßh¶Þ­—FÅÁ̲¸5TŒúî"‘ËJÁ@q· ~ý…?W«7ˆUC ëÿ®W,s±Ñü ÷7A•Çxª<‡ÊVß+/á‰¨Ú ¬Ê$¡­]å…T̈*oœÿ%ìèýß©Vo ©ò¶&o•¯j„*Ÿ?ErÆŸž"¡ïF“Ï­ø¿Kü߈ï»pÊT+\®·Èz±Y¢hü˜®µb)“±á³¬ÙbÌ¿Úñ¿MZA£Ÿ×Ñ6ÖëÄ;Æ{Þq¼¨ñÞæ–fžÍdsÇŠ0øÙDƬpËcOÓö‚›‘§|!Vf{ûZ™é•½ÅIÙÝâ eþ·Yå4»Nüóa•mŽ5Þƒ*œ“²ýö²ä@6ãòñ%ýN)›NÚëò€„˜°WåÓmñT©‡³IØsÚÛÛãªäùó²c™ð¤)Â4¶D…º±àéUð´@Á X¯-x7n‚TÕ§L -}”­Êi¿ty•'"(hŒç‰w‚ÀÊTû \[EÃÊiGV8XÂ… Q¯,£ MÃçëy©f¤ß`ÕçÓ; ­ôîé ÉóýØÐÜ^Çô4æ]MV„Þ `ÚœóÜ15^@õíG0ðAr(‚œñ42ÞaûË'Gé'ËW*¹O™„1ÆÒ¦¦³É''àØÅ–±ìh—õ£lÛãâõ˜ã—ÐcØÏôÙvf¢ÙgÖÕîöæaå ¶¡<êdì¬oY<Öx«ž§Ïékc}&ø1´þär˘–@˜<û®(éÖ>SɘGn.¯, <=+§Õ‡¯uZ¨aît+,ñ­Ÿfo<¶,'XªŒép°œ{š_óAê&À„¯€¤N#@ bì%‚H`gZ$H¤Ô1Ûƒ侜ðÙ¾ýgö¯vFÚi"²”Bµëq°dOæ¶ÙƒÙ\NdCÔÃß(6!Íý†š`;XôÚÿ*Э Y·Ž‹Ø¾óDÇ—E™·÷1¿U ¾ø±©ÀRí¾<<øñŸbüI´†~‰'?-$‚>ú±¬ ô"ŒµÄžôÎq¬@ñ‡ÝíøsÂîî+Ã#qº=k­SvÓÉ"nÞÖï&@0/#„´µµÅãžÚJ+PQɵbKî&LBó]ß3ÚàWÌD¼Wè)ÃDtÖ MH ]@ÓàeÉ´ô–§¹ |Éì… çñ’³ùt®ƒ‹µËÄ;ì‚¡›àÙ¡P¿ žîT7\Hˆ¨,±×f¥J…AWG>cp DN€ò6;_„:­+:ùn e" ‚2ÐM–#­~xžje ‡f;B_{^_ëÖ×6ø@ÚŽÐ:½çõ¯n¾pŠŒ‚®i¬°èíe+,ÒûŠP—Ë W5‹-™†î|ɸ#pÏØÝ|P½5Lì‰æ• 8Ÿf%*:‚•Š+²o‘¤{ïú±A>s]mü›ÐÅb;ccÖ ÆBEkQî³Yö&åÜ©<íÒ„5ÖKð*îˆ7po§µ‚0Ò‘n8Ó¨z¬¤·ÿè(7ƒMµ«#"pfÓ° ÊÑÙ¸fº¾}"#” ɪÓR±+:œï QîjòlA|.åÁ¦"@xcÎ'S`óRX~ óh1*H°Ä†–ŒÛz<\YAod£SÈÑmeØØÊY¼—ØFÊ Ã¥ÃvùÄå4ÚØÄT’°²Ì¹c»š±-“0ô§zKmvÐà ýu_'WQ­{f’L2éL6 lá‚,Ó“LB’e’`–I& úB/wfšôt7}»g2 ï…5 «ž¢ (Ê&*‹²ŠlЍ Oþ(ŠDqžÚ¯Î©SUçn=ƒïçû+üª§s»nݺµœ:uêœïƒã¨Gô<{LÏGØ/îx{(Àng`V/d³zBĬŽ{f5[wÇENé›ê¬Hоh°¾¤Æc0‚aC¾WCæqà¦B†çÑ\šÑ(ÀŸ´'æ·Gƒ½IP¶ø9”PRérª¬±Œ7pƒµhùÜÀ”–,ÂE¢hG`‚mÁøëœžPj‚,Ç '.’wm&Q1ÿ+ðÙqq ìyÚ ¨ò»(~l¿{á—PŒYï½äî'Io$in!mé% £« ,+s§fÈp™ð9”àôâ‚øÉœ$\Þb‹“w®Ð£¸[_»ÙòÂõ8 ˜Ç{WN „~MDËìËÊ1ÏôNгÙí¬+ç™ ö,òOJ9.gÓ kS{pRí,Éw¹aõvfK$Æb2ÒýaˆÑ϶8ǘ^ÍzÆ'rÿk‰êÐNŠ9t˜™d~yUF»×›„w,Ì‘¥¹.ÄÁšÀ3!¡šêý8B_ÂÆ†r7|üQ‡ÅŠ)q¬vêáµY #ôµì7ï/·bŠÑ4¯eCÜ;°eA#öaD¸cŪV·<(”ñ D€8é…/9†ü6Â÷ds :ÆÝRrzº´‚¯íTÐÃ$iJ¹`'K©l‰UˆpÀYîjFš³·š<4g»½LmL–h ŸÚDœ ù"™”Še•[FQ{‰‰-.v­_­7<]‹‡äNÔûbVï“"ê½/¯÷Rç•t·ºaÑ¢šnºWôPΑí-£Øek•!C±²‡z€Æ 1ñ…Ð.brR –v]u#*vwg²ÇŒ¡ƒ#µšGëÂ6*f=Óiü¢” µ,‘‰-BËkU¸¶³ÌgýíÔk+Lþ5Z+ÛiÑh‚¾Ì«Äÿ]ø ¼éøÖv^vB׬IQr ÀY‰©)ËZM£7mѶK•+ éîY)îZ#Þ¸E¯ð5_aå8Ç®j µw…ên6fªDÿÖNáÅty¿]ê•{±ÙZ.•×Fï·ÆK<×Yr„éTÔ°+§ë{ýöižêâ›÷S­üö~µ ºN)ýÒ4 r\!¡Z¼Ô¦â =G~¥ÇùìŠÑnÆÔ Wl¬ebãÐhî ^òì=ÖF¢ÇR¥)òæbw¹RÊ+êÚr¶Ob[‘GÙo„LÉ–ítÎIæÁh¥^s.§xòñ¶{•¸½='Ja¦Ãu앚®¸ßu™“ªôô0šöhºâVÄ0)|»îy§;‹\-PŠxInú’qâšmF@¨w2Éxx-b¾hò¡ˆùv5·Ç†fá ªóáèñÑÂ2€‹’vž \œ—'*ËøƒBÛ ~74zqœº‘B×9 ¿$ÄFxª6AÜËB~] óÚØ8Që“H]}7ÁSLÇ=Œµªë¥Þ 7ˆqŒK¥”ò}˜Â?;ÀæOÙèòL/í¡Kæ'VJfɬ¦“Ü’ô¡§ë (cÒœ€àÔCy¼ÍÜÅæÈ#ÎtÛ¿„M§»ûÚÒ y‚&ì”[”¡m`ÀZ‘+‰/7»M±ÆÛÓŠ²ÿÜ!5‹[R9eðÈG÷­½¤s•Ôú’’ÈJÂHH°çϘ¢ÑÌê93Úâq´Æ*à‰b)Û—?·=®Éëñ<|ŸÆ@€[è. ,;ÛQQñ(D'j±%Ô/¸(Î/¤­ê(ä%e¡!†‡¬n¶è«ßq0Ÿî-ò¤Ê— AÔÂ.¦ˆÛÛ€±´Ò+0Þ+P+G({’.4ŒëHc§<$ŸšQ- çêþ}K÷ɹìŠ×œv{èyáÑ´‘¦é5ˆBqÒ~¸P±;DÕWhÆöU=ùBI/ˆS#§îmÈ|SbŽ5›€ÕÔr‘u®U?i¡.{~Mx †—‹¦´„g‡Ì'µW±í¦ è0O¥„y¥-³NN«l6‚ã*®<LÎ)2H. f1̨$Í\͘ÂÒ“>ø#Ã)’׿%UB’,IJž±X•áêLÑ+%po@“¤­9ëì¢w3f¿iÔz%ˆ%¦z ZÈE¡‚ ´îÅ=#ÁF•:K‹AˆÏ®P[¶·„m\Ë‘ú©„´*e9ÃÙoÆzb8‰aÒ=ª§Á'ôh~”]ñNº?…žb}80éÖ³IwDMús äu´¸]Q(d†AþA B|7-žP2 …rý%]Mp^|óA»TÉ£0u³p|.TÒBÅ~«¼í:Å$â³utnr%’Oâ øÝîNÊsZq›9ÛŠ@ýÓï(Ù[RhGŠO1iç’¥Éwå´ ûII¨³Ð^Kp¥§”ìCÒE~P]îè¡~ñ•p„ä*¤wÑÓ{…c ÍœˆnúWœ—céËdéý.õtÁ•뇧áüâv;…6‡d±(Ùò A`GáÚ¢³p ¸ñÔ.Z¿žxç°7Z_c+O º5ÉA{©c/MfüBýbŠ]vH•<^L¦^m¹/ŽÞM+Üã^Kk„¾ô’d æô"¥…¼ï4bM½¥Ë¦×òˆ·„ÃÝȽÃÄÈuìTf‘NééXUÒPç.éÿjw0@Ç?ê5äžBbd<àÏe4óÓ}przìz¬°Rzå˜iÀì ¨¼öSG´Š+%’Ö~ ¹Y 3CQe|‘¸\åkœÿõˆ$ß|+ÊüxC5cPícJ 8™Ã×kN­•á VÛù{A –&_=µ@¦ ia °w@×E•ŸÑ[Ù[jÌm3›«{kçþ^8ß+Ba o Lï lzO«8øv«š2¨ËM={’ÆM¾»ñ Kn9axšm÷&Ñô+¹*áQŠï³OjêŠ$S’f¤s›ÊÙÜŒ´Æ²<2T­‡^m´Ï)¬}æÖ k’å«QÓ'jD%/Z"[ÎÖ:ÛXcôä )Q‚¯1ú ýÒ&^ÙPøÛdÕ:j›´¼vþà»'Ù»ñîE¼»\ØÄ»ŠÑlê•Sà6{¸æŠ7*ÑK3κBH¦{5´ m™Àùlšë8°€ç[1]( t<ÓEEï71éßRcG£vž^3£ß¨µ£ÙÝ Á>Krå^¤óTeIRЊP_„ÞS„­è@²”IŽ[OÅ^ѨÍdñ1íñµÍbÝZ@»Â®6aƒê²éô݃Ó+¨Hém,ñã߉ÛGKd©%.ÛAúÊbÿ)4=Fl«ÊÛ"ñzQ½ÁŽD‡<‰J+:Z V„©MÂö•¡»ñUyè¤ Ë4Žù°mÌ8ÝI@µ‡*€Ã]6­Ïõ˜x|¥Px²¹Aøˆ ˜ÌdÀNô¸ª-§q>PsÚÌÒ×:ØoÞ_äŒjˆ…y¨hKÙ@Û÷e¬<2ÂÕ̹e<[¤¢F¸— ´ñQŠF;nñüÍj;œÖðÛri…eûTÂ¥2W '„וN –d·æ3齺óÛO|/±|§±Ø³ñï%*.hôø°±°ÄzX!J¸õS§CAG9ãóã)aqWHƒ@ýJ:È['«.Eîèï^¶QP*¸Nâ·M§*²Å• šT© ­›„¶Lß+YLZõØ{µ¥†S_”KžÌ§NqŒÁ;EçYéþŸáš å9ažÎ¡ŸDÍT̵Ë1` å»é*•ŸLBOÆ7õ¬:[_K°ßL`R5Ù:‹ …Õaꊺ tÃßªŽœ ›™ID#B—äUà]ˆ4=É!·§E êôtc;³šæu=“?ìÈOÑ›#Õ,`3øåÀHjk\tÇFù¸zƒAøñ%L èlµ'iñì~’Tå³*ó‡q „qÈýLÛ4‰5‰ß +ŒIÀ@‘ÉWRLƒÈ ;J—­äÏÝ=)†ó ÕUz­òi0Ôà—#áíÀû*r…& ¯sVÍávhäp;6Ô§ÒoÄÌjò7¥†L6JbŸÊ,1Ý©êz®£ɺq –<|×QMæ{×Në t±\MÌ©ª°Ì  sÑi™óPI³ãV?·Ëbº ͳàÊñ ÉúSaøu@ûÛ«—Z½M½“³AÅUkÊæÃ3,Çû¥—vèä?ØÚƹ ì:½zx^¡Ç×áúZ/ûMdœ£ÙëÞ lCÔZÃ7³vW!WA2 5:×}hO€[<“ øýä9˜]÷Ã1y±ä´fÕÄ’\”¢x±3XRV) uцP*›ç=¼˜K¦á*n¶ XY&)èŽ.ERb3$ï8bmQq²Gé&(ëW9Š]áq²·dÌ'˜Œ9ùÔ°»šÇ#€ƒv”œgZ¨Éi˜ŒW“‹ZÑÔ9‡?vA¹¿DSÁu2ë§? Sð\Æ:,W„ N¢ô§,³H‚BèDêò)ÄAuØøwfõQr˜þ©ÓHy”¥Êó/µ g»—ï&ÜüõVS[®Á’Œ²H¶½Yû¬o†VsTN_i˜É³d‡4¾µY²¸Á9  =”YÖõˆ™Ì®ðpËë‡àøávúL`¬ŸÈ„ÈŒ®|]Nº ¦ªì6qÅv‰Í;ó²‰våë¬ ßÎbrµºr»*³±p€­6V޶ÿ–Ð «—-Üú›"]Ù`C(U¦ñCþû—'¹¬†™àât€Í—'¯nUd6X¿ËgBpyŽ# h™Ñ¶ñ9ÌOœy¹P›^,§;P×cÓW­gfR­E6ØBnÀ¾îŸáêoʶÍ`¿Ä°ÉÏ;Gg²j¾ôéÑz¿q}ì —÷-…ô &ï?òœ»›§Æ ™ßco@Š)±\*ÏXÉÑk—KÙþ,9ndÁ•/Ç7µI¹’‡ß]º_¬Àh#³,3š‘ùË)• ¥UâΖøZŽ1ÁÛZñ6K‚+\µmH³œÓÕòmðMSÆ ñSqû ½×A{ÞŒ#M çúÄ^O¼KO)I$(2ÓÜ„sÊbI/äàeIØâ¡ƒ¶(T”*ª¢ztŠnûQÚ6…]áö®BhDæÍY÷a&ëfÖ° ¯&…½CTšu³)ê¾ uŠGTN—ì¥Ù÷O¥ìt@ï5¢6¿á¢'ñw ¹™ý_Ø£öðün-‚µP¦ÁE¶D‡há‚N ß¼ãÙðe¦Ñ»wy&ƒNò G"Mv,‰)Á­d¦EÔà›ë‰Cò:¯Þì3¶>z¼4!0ø®dBæ£ÿ¸Á·»ÃH¨À¤•:3ðÈÁííñÕà†Æ˜ÛA¾ cÝŠwÉ/ãH–ì_0"˃3²ßËâ»AŸ–wû[À Í…`!1Ю¤Ãœ®Ï4·…\ô‘‘_Nàê${zZ¾ E p›Kï4%t d—"ÇÁ‘@zÏÁ‘…Ý—U1çªW÷7Q º¹ögWx¯VBÕ§«½zëÕŽZ‰Ñ&t›¼/ô–á°H¹Òæsü5 Jttãû±sfu­t2SÃ&ªSºߢ]À§ RìaÙ⮾ªTÃÆîÅAQ,¿Ê[BJ²‡u|më¢Â«d«^軣Ùr0.¢ïö3Þ1v«­ý6iªÊÞ¿¦ûËFæí“rè„,£}?ÕùqÞÝ"‡E ÷—cX•›‡ŽuUVjÆ<ëÚE  ¥iû¤$ ö‘ Ïo§„N•±ºŸÄêÞ6´?Ô]F. ûäÐ^ü30ü©ÛU´¥$ôDW1%V´•ôÍjWܶ¼Þ¡§ÑÞ¦ÈÞfi 8ó6@áï ggÝLÙƒĤ‡¢I¡™uííŠtzp‰P'N&A’SEn»fYE¥ÈNºèè¬]VYÃ'‰ ®k%&—Õ’•2Nf˜-Ø›\g¨!¹«¹X7t¸C¶FˆC4ƒŠïQf’„Ö.¤ spk$ÿ%¥r½I†Õ•¾O¬"¡À\2é¸úÄËØ¡ù¤—F„0‡[~ªÞRfSç€H2sP¸‹« ,Ýt¦–Gët†Þ@1Gs™«7ò·¼?òKrc«àš¡Z1ìíd½ÕÊcúCF®¹ø{_š"Ø—jT.lg±ñ>2Hi_”ú>œ¦NFÓ~ïBé8&s¨éu+ãS<\ C{ÝžäÃÉ’Î Ò‘qŒÀ¹EÊQTü Í&2]2èòÉ•˜B©øyèEíä€éf-Ú^c´hGoX8Óþ‘2äé:«Æ¨ôzxº­"jó¿´&凉è`.‡Î\Va– †°ûåAcÐŒ²†‚¼kQA£k!÷øV¢4WÒ쉉ó1æ_òã?»W{+uî”B`šÎûæG åk4&_ð)&Ì^rØôx<Êdwñ’è©yßÐBq:­ ïû$–¯ŒÃ2,Bi°R¨hcÏà’ùÙ‡Ã<°ZuPK+Åü ¥Vœ&ÁNû’ö(£á²ŒTÞ°FKÉ—Â÷uµÑS,-Ô³ä[z¼Ÿª¯-d¿Éó¤SNÿ§†šOþ˜§=Lü]Ë]HHÏ<]S ­#ÎPîB»›·ø…Pܬb0Ñ3­\J‚±Hž!ZÄa9RÑJ˜Ã!6Ú%4nùy3BóîÕ’è”Àîdo¸¥–ç_q`WÿÕI¨:äóE_i%ºÜ„·$îDˆ:³ [.{¾ËDfÚmpÂèV°w:°†¢ê©…‡s‡VT;Ñ,Š™£ÍS ÒI×>i.ð°<§AiÅ 4m‹X]0*êþYèŸ^¶RSƒÊ]×VܽêjS¹ïnþA,¤S¨¢®”JbÙª6ôH)ë‚ßãQmmmÓ1F¸LQÕ®Ü%Íš×–ÀßFM0‘ï*vûñYmþŸ 1XìTÄÁ>Qƒù2K ±1Ðó1>GÞÙ%~yä\q©ÃÛ% D£—Lœáìùml7+×Ë8š"`sÒµ~õÌÎÕ]Á‚ÞD‘[÷ƒc%³Û³Öˆ½…è:ðm\’Ë™gá,͈õ°=¾R. íËærh$†3bˆ*´N7Ž"bèvÐ8²d²‹Œ•T.ëö’²‘›¹yò†¼3 &A9›†FY’NWÄô‹8ÖpNO¶™+ô`Ñ '730=Ùë²ã÷Ó—.Óƒa¦%ÀD´î§¿]¡·…Zhl6®ªnê· ŽÔlnY˜ë¦KG5[™u¨¤ñ¥”ÿ›Ô}Á8BIm:i#­8*ˆá`\a»Dž­…ÃóàÞ-QZ–ߦÚÔZk3Z¾×â“L(¤9&Ì„Á¿K„]¦°/‹¸}XÅa‡Ðò­SXB—[´…Ö`)½¡™Ê9 û{‹îËv…X½ƒ«8Ž}Ä(jâq]k7«Â¢ã~.¾¬ÝlO[ë” ¥­öf²ô´à> o$´: c‹ë53sp–Iûöø;Ë‚š¦#†5cË-T#Q†ÜrÉIbü ¹¨KøsS¼C–òô’Ó‡‹(ÔÓMö9ñ¸x5ñ×é®ÈÀm<îJzÀz]üÚ…Ú† ‹”Ûnwˆºfó~ ú$¨Šxp&Ô 4Zçrƒñ5!å\{c¡(\»½Áµ^$UÉmmUoÐï==%§ ½½Æ)'ñ[»½.Nºr`7°àk¶`I4¶vÑ+°ÜÊFVáB|âÚº5_ÈÛi±´8Œ½’K;“Æ4è´üïe}íÃ,Ïó²Ï ¡5Ô x|(&¢Ð×1ëäp´¼õCl.që8~«X€¶iChsätx›T‚"dçã43"ÖÓV·a’Eƒ¢½a­äqL‰žïÏ&íb¶¨U6)h)tdH¤“[%pÆ‘vº¼‰)‘'´Òé*ŽFx÷¤ÂÒÙ`nu‹NÎj5,°D|ÒJT!ŠÄµT,¡%›ëñxÄÛ£ûŸ@ÅJ©X@h•[‘²2 X Ô`±ñåýÉ\%,ow6“É©Æròýª¶âë´'µI’Ëöô–m@K@=ˆs¡ù8¼•úiü€]öܶ¶>‡[ ÉÆM¹¢6é5?Œ¾^ŠÙúÚÃúÚ–‹çyØ7?Ί…ÍÆÐYœ_bjCv؃Ü;¤å€1ö YöñlÙeõ Rª´xäôY jI!eOëBtêu©S…&ÙBñE¢A£,–³}8t¥Øš©€¡Õhk/¡¸k²'qàƒ>){’|nA, “Ï˸?¡‚lu1HÌåê”ÓåÚkNмÞQÑ ÷Êñé}WŸ8ò:Ûžç«z¥i\n%4ÁC=*ÉgjÊg}bB(íÀ=±+ûÝ5ðÍè²#ÆeŽlÒCw´oèÞÁ†îÖgX¬ðµ‡¯˜‡Ã"wÂGjEÇöiû½”bjÄÏ&Ã%%ì2®úÇ‘?™ò53äh5"‚ºŒMi8,J~ûD–Ný62; æÆj”ˆ·¨D3,«Ñ-½'BÒÊbÜÿKDEÖogp3{B¼j•¬–f5[‡>©Ù¾nd ¦zð\ÊìzÞfÊ _þj"w–‘—üï^=¾¦ëkGkKà½úÛõ7NÉ6•qTüÛ+e±¿©NéÊ>›"³f´)(ͦÐ8NÿüxÏŠš³ÐG5A1RŠ‹v4 ‰<”ìX Äÿó0o…¼»L¼XrHÏ.›¨#¼ª—šY:aU§…j,rðï ,5ÁÆgÔ&ÜŠŒa°~‡µ•ƒ[™¨Z4ÀSˆ-GÖEتv_Õi•lz+ ô‰]r¥h3¼Ac„ïEã½ï™3zû$Í.ô”*n¯ ôB$ÂL%Mþšâ›Ä4°´'a§”«TØêàµYmm‡)Ö,y"€¯'‡ø…bë¬6¯ÅnÓ¦Bð Ãý˜r]U€Zê´"O5ÚLhöjñøé'¥ž/ýQ Ì[G¾9áêCFhQrDÍ0€†z 4éÓ„úÚFö›÷¹/]‰SÓ‚]Ld†' f¿?I°»¹;p?¸Ò–Ä0™µ`Áü„])g)R^à(ŠÆ}8æfÝ> ÌPÊ==ÚV¯f]{ç%Ûu³ÿ®Y·«ù+¶µåeg0Ä+\\ +wsM†€xÝÛ t´X®øÁFaKµ[Ñ®4׳Æs†7`æ¼ß¥ØãV–ƒë•Áv‚¥a~¤‹Š …_8TÐ@·V7¤âäߥ›Ãš  e"‹¸ãšT/ò5Ô¦>rìI¢k‹½¦TÿBÒnqñšjZò*lQYQà ÖÛCvWEsø{jldOm«3:/î²RC½[¢ ©º {R*_ ™%Ï–Q^£"M;`­Ö‹ìtp<ô½Žr6÷ª„iA¹3ªUG‡}„Ùp¯”ÃÇqÂwÅÅ%5ûtË©‘îÖe¶²ÒE,鋺•½Q{†(à–zV…mi3¸EHi7I¹ //ŠH*S8¼Œ™{~g-W+ßÒ”¾-†yq ­ìÞφ::[fËÉl¶Ìª9[òh‡«£OÊg|WsƤºä:ÖG[»²‡4)¥Áˆ¶M0Ðí´6ðHà™œ¦zÍ1œõ‚ÇÅ0C.¿w«ôè)Ä\é-dÓÒûý¿˜'ý'vw3©V m ¿{Æðœ7¾ÀÊ퉈F‚1{B)Y´7ý‘Fá…~…õ[¾Êð ½{™f%²N´" OèQŸºhº½×…HÏe•kôÌÙ[ÛU½.d/»¡†ÞµA!Éú =ç­B±·P.ÌÈ;e5ÔoPªn׎ұ¢¿Š½z¥é“ÿÝÆüÌ+«ÙúmýcÐûoÕO¡§ÇÇéÕ«1 óm¸ ëölhÜÓH“³¾\/®×¿7ìQ;Kr¶Hçˆt®Hç‰t¾H;Dº@¤ Eú¸H‰t±H—ˆt©H—‰t¹HŸé ‘®i§HŸé*‘>%ÒÕ"]#ÒŠôi‘®é3"]'Òõ"íé‘né³"Ý$ÒçDºY¤Ï‹´[¤[DºU¤/ˆtÛ8Iý·jµz»ø{‡H_éN‘îé‹"}U¤»EúšH_é‘îé>‘î鑾!Òƒ"}S¤o‰ôm‘éa‘éQ‘¾#ÒwEzL¤ÇEzB¤'EzJ¤§EúžHψô}‘žé9‘žé‘^é"ýP¤—Dú‘H/‹ôc‘~"ÒOEzE¤WEú™H?é¿Dú…H¯‰ôÿDz]¤_Šô+‘Þé×"ýF¤7Eú­Ho‰´G¤ß‰ô{‘Þé"ýQ¤?‰ôg‘Þé]‘Þé¿Eú ´HíWG £÷Àzû±¦’–)ðk5Ç%ÆÌKŽ—r+Èëuâ:ðûvXM{¦àÆ£|y!ö`LÌ«ŠŸ±úºWQ”cþË­;bm{ëš­ ø<ÑàMj;·úbÍV|ÏXü×uZ¢ùŸYxæèó=³ž=Óª‡gZÍþgÆpŸ£g®dÏŒ‰g‚Ûø9â™mäÉh5žmÒxeìÒë/²vÆ~ú@¯õ`l¢¸§ƒÍYC=ȇEõP£ñÖžQ¶lS|Òöí$1ž¼Æš3çIëÉ'«Öw‚Ú_Úg<Öa¼uÒÎQbÉo}~Ôàè)+Ñ9{YõG‰ßv݈u½[×ù—õ£?ßUsz»PF^…µ eñ{ËõN¹ûj:Q¹fаÐEa Z¼ÏÄ…ÚXÍ[ŸmΣu¦ú×Eâ¯x+C­žÑ;âÅuÊR­¾¥w+ÕêËÀÆØ1Šäùåðý”úSêÕ÷í Ûd65ü¡uã=¿iÆÝôžwĆºAèý?ÿèÅ÷8Ši˜Ê  Žcøõ‘¾ûÿ"®Ôû!ãÏb­õs&ùîçû·¿žCÔ§!"ÿXßßøû,o;ðã÷5‘=B™éF†´›ò[RÇPõ‰0™•_ñþüí{FR;)cµ¢öhôݧLÜSè·}BÊm@™âý·6ûò+.Âñl¼¨½fÃûè—ƒ}íáÿ}œïß“|㧉•ñ|ã©mæRÙó‡1~ýÏáï;Ù÷ž{ùòïëû÷¾çÙ¾ß÷ñý{JD=ìaÖv§Çd=.#ФóØï‰ˆþöû•C<§žÞëxvÏý¦yØs¦R=bûãœÏŸÑïc\d¬ïi¼Ä}ùæ‡Ügÿ^ÈÆ=œM-gï;‚úë÷qô\…3†XW°y5žæì¾ç6±z7Pž5ìyÔÞjÜ@רŸGí„¿ýêIƒ¬'­ˆ_?Ô×oÊ7b*é)ðŒEÔŸ bïAsiµ ü«—~9mê[·ßqíËg|¥j5.7ºš˜M,ïswmºö¦#Ï>bÎ=Oøéï¯ZΗyáÈ›¢¼#G¶.¸jñåOľ2¸é/s.\½ýWUkTg ó>}¦?ï×N)|yí;N}øÌi7N¨Z,—y_x*æËû^ûá/_E2;ṟþä±éU­ÿ&ëpŤz_Þ‡rO½;wêC+2~õ•»’ïD‘åÞ>¡Á—÷£Ó/m¯þúµäY‹nãÆ×_:¶jÝõª,÷î9#0ïlÊ[ß0áÆËí9áœó.¼;5áÕ–ý×UÑ…re'ô•;ûôŸ/»rÇ,wÿ9£×-þEÕš3]–»{¯‘¾rÇ-zfõø¾ðÈí‹¿úæ÷>)ò^“cìåÅþ¼{^™wúm•c^ùú¸ÿzfĸßL®Z¨“å.õç=󵓊·.ûægvLŠ]ô…Ô÷«ç y¯]æÏ»öé›ûNiÃøs^}þ²?ßulGÕzšÞí•åþ¼“/9ý´]÷}¦ñºkw.ÖôZÓïŽüªè·ïÔ˼ÓLòå=þ+¾øxòø¯g×_0%öö‘÷T­7šdÞß#óÖQÞàUß¿y}g6uzÿO¾ô؈³·ºGíšøDÕºy™,÷Ç+ýuXùðñ/Ü>öÆä‰G?zÚ-Íù—«Ö±cdÞ³/™ä+wäµg¿}ïoÏüØCO?±êÝ//ê{èR™÷›Ÿò—{ÈßÿП_|ûþ“ÿíõ÷~XµbãdÞ_¼ä/÷­ý{ê)™gWœuãæÉO%ÖQµ~=Uæ}íuÞGîúÈÒ©›oºàŒ?ö<·çê7V­o_!çü3#'ûò®I?p⴯Ϳ·=óQÿ1xý̪µb™÷Šköú_´ïŽg§÷¾tÆ®w'wÿ«ûžü༪õõ“e}ŸÿÓÞ¾vH|{÷Õí®/%w<¶èSϽ=·jNãáâ rìÔ76íEã,«Í‰Yg[Wß çðý\ü~JÿxÏXy–ü ‚µ}Kû^ù.~>†Ÿãç±¹‡YÖ“x‚ƒ‹ Ê5ËúÞõƒî9Å'S+î³uuO<ñ„Uð (_GÔÍO‹>ÆÏQ˜³?Gã¯cð{~ŽÅ+qü>?›ë “Æã÷ ø¹¨O™ñûY˜ÿì:µçÔ]+¤Ø¹xý¼º=ÎÇï;êþ, ¸ëó`]Lôï7ñú·ðóÛu°“~¿?ŒŸàç£øùüü.~>†Ÿ×µUDËÔ=3q’õd]Û›¿©>U·xã…°+Þ.ZF|V«ÏˆœƒÕï×Aàí³uöZËz®®ó!1’±„êÆaY/ÖwŠ6¬»ã˜jõ‡xý%¼þ#¼^­Û[è¹ õÐÜKêw·Ä¬¥¸µë¨‡?Ëê?ö˜µ¯üG=ŒØsñÊyxå|ü¾¿/¶öûèTUÄT}gà5OVÅõ©òºÜwAw4B+díižÏŸ­Í@λñçølŸ½,ٟ͸…||IŸSʦ“öº< ?&ìUùôŒøqNªT˜ÇYG%ìÙmmmqUòÜ€KÝŒƒ¸+‡XóLt•‰ˆ" 9,CY¾"åäqtZÅ8ˆ›šÎ¢8¤pPgß°ŒeG‡énÛžoÌÇ,ì¿„îÃ>v^á?k†`©½Üº®†¨°¨2/ÁˆŠ"”|aß°8¿z«§Ïëk£}a1ôxåv˘¶@˜<{®(ëÖ¾>÷ИÇn.¯, Ü=3§Õ‡)vj¨3òT+Œ¼ùŽÀŒO³'ΫE Þ¹Ý:éîæ×}0 pU, ¨Ó¨WB{… ÊÀøÖ *5hÜ÷‚B¶>_ÿÌç×ÎHOTDÓRH^à1ÞûÉÜV{ ›Ë‰LàP™røÅ&¤{¦|$‹>ÿ_šukÖ1Ë×AF xX€(šçi(–€¬õ5ŸM–êí¡Ÿÿãw¢G4´KTG8ùþl© Y0vŸ Ü™¡»%Þ¦wÔˆÀÛ¿Ø]^'ì®ÞBq1ܧŸg®uÊn:YÄÅ» Ü&æ%+ÊŒ3âqOm¥·«¨äZ±$w£ùŽáþíÒ,F"þVè.Ã@tÊ]e Q€âàaÉ´D ± zɬ Žä%góé\:k—/ˆgØÝ›C?‚Û³B:÷g¸»ìp"!Š´Ä››™*\œùŒÁnàÓ{Aëò`*§Èù'Ž·Á c¬/[aìö+BÃLƒZÕL6ej„¤ð)ã#$eWó~õÖ|5Á,¸Í2V4k—âRyl2¤¹c÷ Ÿ¹®þMV²©1k…b¡jTÈp–=I´ªèÂ4á«õ$‚âZñ’wX+.ÉêÕFÕb%½üG3ûthÜ9õ^íÈÁ•M£.¨ànŽêeý±A” ½«ÃRü‹Ma‰¶ô*†Qtƒ´k»S3LºL˜$Jpz±PüV"p±Å KWèQÜ­¯Ýly!Šœí̈ã=h3'ÂÝ&¢‚öeå˜gz'èÙl‚vÖˆôLP{ Pù'%E‰-ê…ò©= 8‘x–ä»Ü°z;³%W2i„‡;1dðŽg[œcì¶f=ã9Œó¶DuèG'Åœ‡:»@lT2¿¼*#üƒëM‡µf„HˆÒ\ ‘â`Mà™‰ðTõ~•0áa€ Cö>æ*‡€ˆb•Ø];õðÚ¬GÐúÚNö›÷—[1 Åhš×²!îØÇ² Œ‰û0œÜ±bU«[Êø¢@@løŒÂÔC~á{²9ãn)9=€‰]Úçv* ˆi’(¦\°“¥T¶Œd2D²`<÷ 5#M„‹Ù[Mš|´Ý^¦6&K4xQmòÑ„|‘LJÅïÊ-£¨½Ä»Ö¯Ö(ÆÃ§ê}1«÷IõÞ—×{)ƒ0Kº[a¤³e5Ýt¯è¡œ#Û[FîË ¦ *C†pbeõ€YŒ Àâ ^Ä$ä¤ÌôºêFT*¼òÎdCGj5Ö…mTÌz¦ÓøE)jY"P[&„–-Öªpmg™ÏúÛ©×V˜ük´(V¶Ó<"ð}™W‰ÿ»ð lÔñ­í¼ì„®Y;ÁähµS9–µšFoÚ¢m—*Wº7ܳRܵF¼q‹&›ák¾Âr(v_¡ó:ó ÕÝlÌT‰þ­ÂÈéò œ»$Ô+öb³µ,2,.¯Þo—6x®³äǪ¨¡fN×÷úíÓ 0ÖÅ7ï§ZùíýjAD¡ÿiïKà䪪¼«»HH* a‡eé&ÕI'!4[’NH‚Yšt5¼ªzÝý’Ú¨WÕVQV‘EÔ%¢2Q·Q7WÔÁ]fu`÷Qû;çÜsï=o«î0?çs¾ÏÎïtW^½wß}÷Ý{î¹çžóÿ7ˆÆ°ÀýÀ¢å%‘0êÉK/*^jÆÈÏL?©8b­›ƒ^1¬66 µqR {‹~¯¸…‘l+S‚éÒKUyK)_½Ñ¬W4]oÃ/+<vòhÿ è¿áJž[A§•~Ì¥’Ö*ÂU6âŽí(%¹7‹G>yrŠæ>zÖÕ^¾9<,¨éÓ)š{·¥Šõ Ý+ÞOü4X <¤t}©|xC· ¦Ô„f<¥a:ñúdd„{;ûÚ&gŽ›óɈùéÊ2ƒÈR~ž8D^˜Ë•q¥ü›œý=KØÕÑI# ]N g V$¹ ]‰šf^KìåõŠ~6½Õ.&ÙF`}⻘Ñ÷´ªn˜n8Ù!&q=µQ*×aómž#ï€È)ªÑÕž^!D-w¬´ôÙ­¦;“Z’”)Òõ­¤c !<„øÐ>ˆÏ 7ó #§¥ìéö N ‡wwv”Cr‡!)UK”o`,3¹!‡™ôÕÀßãh⮚zA7h âWôUEÚò1ïÖY9°^Y}®"ïRp¬œe “j´£zÉ‚Þl–¼±`£V÷Ë>’}Ù~8ÒÐü/»ª>)Ù.|ÜÍW!bÃÛãAEáV„ÈÔí(xc #ÐuèÞOlï8$–d3¸¤Z1í é§<Ôз¹¬â˜À- È•– ­å ¶C<=Zª°°öoŲ.äÖ)“Í!@`Í(Á8“yTÆ9äBCK&9•”›«jØóTº|²<*ã^Ò%¸ì!VõP”}Ì$GÂ[©T ¥|Í~jqŸÍºýº¸õê¬ë @tsˆB™“«<ïeC=Á!“Úg˜É8¬é`¢/;\B¿q®•ØüÔJZ—²†Ápkâ;ë=±<Ì8è5ÃàVÓ›Gƒî7‰»XÇÝ…bÐÚ’òIˆ=£n×V«Å)P¾ŸÆ€H„i§áÔsZg‘ò!~C70¤î5ÄtwêÍ )ÓÀÇís0I«Í9½*NàÕ\¤ëØ(Ä¢Å3ؽ3䪅sAó¹y{jHw4êiÝ[רNšCÒuJn}Xq|yÝS¾“‹u뵎G†ën™ˆ&åFuc!–Fá#ã%©YȬ¢çÇÖ /Í’”×ô|i8¯¡ÒW«ÒG~oHL”¦óÃåNž|n­¦±ApE8ð}ÜáF¬|nc_/Žu¼kÄ]Øb)€Owºî¸³ÊsV¹Å¨R¿‰s—=6%/€Á4b<÷UVÒé«iõ—‰öYÚ1©}X—o KŸé µ¾èNm ÜoØäí1\ªæ¡„Hc”«£Ê'ÞHXPDÛdýfnG8´Â~þø³»âÙÏHyöRž]MlðìÕZz›~ä¼õÄÅ͹ðDÕb–ÝÌ˜ä „"/™0ø¬+ð<œÀKãÝÄFC‘ÏLQéëãmBûw·XÑè•gØ !(GZ­höub²ÏÊRc„(LuYе æ Ø=5\ŠŽ¹õbù‚F*Ž@5ãÓmú²›ª£–ì#´ÊÎWµ9MŸ„Egä^qCÊ,c™9^‚î,At3/ó÷Ž{Ð×€õ'Xz‚ÌW—ƒ¶[a“yC/’ò/¼hè¬ÍëâòU .Ùõ•)´¿µ‚ù¸l,zC.¢!Cí± pç—°õ¥“Í®ƒÇ/ `Kj@·XÄø9EJè¶<>6ø8Ãã³Èëß…¿Q#jZ[R„Ú5±Ž¶Jt´£ÿRÎÊÓSBÍ,y]1´DªT5AG'mhôÑ/ºÑ¬—Ã9®¦Vœ¶w1.•=by0¡D¸[4%-ï0N¾rž3Êÿ×›Ý ¿¸K䨅ÿÓaëtSćCµÀ)v<Ä„Q§¥ŸÞŠÊÙ˜] クC9ªWÒÏÑ:¾1¸4¡eô-Ȳ­Ò¤e´KÜ直×!hʤ¶žÛjs­bn9'£žÃG»[õ¥…ä©óô.Žuxçy?«Ày4U´Ú'¬ð^˜&1ôÈ£Ù,Z—c(:Àªg‹Stê8™œŒ¿4£êjs,'¾³‰Ií™Ã2W ¥°3 CQ—'.ø§%š#ׯÈv¡@r) äÔÄ)y=ÆE×àÅ»f¼+U™ øÓ@è5öÑ6«mÞ 4ø“¶ü4³ÝRõ©Ûί:†k¼qé/6-Æ5œ "·/qPàËÖk’îÐêÇåè˜Uu~¯B?‚Zá°]ÀƒHÓ±Dð’Ø,üzc%ÕÆ4ª¬¤­tÕJQõ³ûX­„:®gX؆¨£ÖCßiM˜{×Çó ¾b5›Ø]!]ÿx™qPвäÞRnÇÝNò@ätYjë ÆîŠé¨)ðë긟f/={Ûz»1·A™óª¬ŽµeËî™tÆþRj{¼óomÜ…~Ó=o3ýëslD|§²§ÄöÑœ˜wo‡Xõ´ˆ Å¬3X-5‰€C†䲟<à¡Á„œ†jÌ©Áõ¸M^«{=¾XŠЇ•ÁʆNHÉ郦R9òl´Ãk%·€Gi±…ÅFBÙ@÷L)†„“ê@<)σ¹EçÉžaš aå qDæÉÞÓ1· sé_¨a÷v"˜ÀRj~±ÃBNËÞ¼ƒXôŒ¦÷9¢¹ :ü%þn@x‡$å[’¦e5#4iQê[äÙÜ&Õ&SvZ6vŸý6¶ÖgîªDГY&ókÓcGdºåÝ“ðI?}1Ö×/JdA‹P¾A¯P…¡j;»Ãü¸ƒ°xQ6é¡|íÉ ÁÅ &q«ë°«†è ó½°òŒÿ·NAX#b2Þß<›èÚ;ž0Aé2mòsŸžÔ´šÔgâ“ÓÍ‘D䳤Ùà^·0öpÑ}(ÚP?p†M+Ñâ$AxÅkN¹Œ¢UbRU*Û (ÐÙ„$¬ÏL7>¯Õ…\Ý¢K44t„c¶êl ¼ÉºäÞÎZûäé~‹‡t8ߣÝ$9c](æÑÒHýOizã&:Õµ½„wl•"¡ÁvéfÇËús‰ç)=®œI·rW5¹¥ì¢. á wPrˆO`,C¼§V!ït‘Ÿ@“O§ó·ë'ж|4óAjrëkÒœ¡[1ééT½õÌc߇Ê\ èûr š"þ.u¯\[,.ýý€ ¥£IëGpš"MÇì7„ÒùBçÌku«òSBl§“GÝ^ÁÉRÁ *‡pŒ0¸EéQ2ü,(1z èŽÉU˜Bù:Æy˜IíÒ˜-Ú×b޵hÿˆ‹l£6ŒéØT‚l!é½2á„¬Š´1,sü †}„Ç¢Ggy¼ç²n·l<…=ܨ6ãn”œäåeÖ’-ºnïaw­íì“Ø<ëþ• ?ѽ{½¶ÒûNy¦©Ó¸ïqJ¿¦còÅïbÓì‡Íp(¢¡ÁŽð€žÈ¥H…â~C ey·*ùÝ»T¾v«´mÁ* £³=Úƒs9ó³Là ;°[uÜh+Ív¥6œ&'vû\{T4p¾éG’)[i¾<=o`œžzgé3J>eúû.sìñÚOÚ úß•è>ùUlœ õsV«p!Сqº±‰ ZP#ÞdáBû:wF•P/Ö9˜™Ö¨»è,R»@„Ö†yXž2´rvsHƒ‚Åíq,.‹=áâ w¶Š¼‹j" ì}"ô:©Ã1_ñUЪ+È…K’A„dÓy{ °Gãò‰{ѳÌ®­™'ŒŸi­x¦ãZª¡Z(p¸`rCu€Ü¢t2b´… AT:Ú§Ü!6ë­””æ‘oÑC/c€NEó~.Œ½Ÿ1SœÝ‚¾žB75Ëy¨EÕµ¦¯ß×ù­¶„—ªAB³^‡iLm|#u?À¸Ç3z{{çSŽpƒ³ªµJZtfo޾CIrÁD>+¬ö³‹z£_3b0¬T PÔ`™:%OØù˜]¢®ÃÓ~yúR8Ôo“írX¢ÊÑsóg¸xY¯XáÅ:ô2K®\œ ^¸aáÀ†Aƒ`ÁO¢I¼G1° éEam¯cW–Jö^4J‹0ÿ÷e×AáPhÙ/•ÈIŒ{ĘUˆhA–D`˜v08ªdöÉÍ|ÉFØØ(ÂbîLuAŃAÐð Ø(+ …& ôˆS — ûÃtËRu˜ŠF=¹]€é©·®^ü1æÐ-¦3,Œ°ØŒÖç[b:ôþD/à)1ëqLŒÆõ-ÐM£>¡™©–Í}mJLÃy3à­šÝÂ;T7øR:þMYã‘D‹ˆ`¡”5‡´Q^Äp"ͰƒpNŽç©ÅNÈè–4++êÓAkjSf;y¾7Ñl*¤Ý&,&náÿëŒ]¦±/‹¸oJÅI›Ðê©óT I[tÀj°‰”áÔLí‹3ï{§y—câˆÜ°úfL®—8ö)½h–ÌëÚ´]–ž÷ðCø°i»ÓµÉkŒUë»íìéé¦u@Åjh½„Ζ ì(î`_hû¾ìJ§PòQu™L‚a-:êŒnªQ(CA£î¹”ÿÆÊ@Mê ¾Æ^”íWe&ܽî•iÅznÙËfáÑà9š7ÔT‰Û´Ýå†Àz ü:HÖF€“TÐçôC]ýJ“¸>9®"mœyANëRi<»± Z.p¶Vk àúœ-Îø ùfiw~„~®{Ãä¤ìí^Ã¥O}ÎæBÁ Ô, .ÉפlÑ“h}íðVpºU¬Ó-@}Òܺ»R«8˜Z¨ªL Õ E;,'jˆÜŒìšQ·ÔL:wÈ/Kº±¼Ê¨®-|ìÚzI7h’’?<Òp-ì NÌÅæ“ðVú«.ü‚6ºœ¥½½eOz ÙÇ͉¹P›B·V ßm:Åbsìsl§8KžóHd|\Õ–4>f$Žšøøx0ü)wòp—V¾M°W¨²/ÈI){vP¨š×¥eS‡Ï 4Kªy§kЩ7çw%ÙÍùEðÑ¢¬5ü2u]¥¶j`hÝÛú²+9ïšýI5êøhO‚aÏš/¨Â”€8•ŠÊû›uk@IÚè.×»œö~ënÎf±vTðæ±#ƒÌüjÅ€ƒÃ1žQSf)‡^(àkŒÓàˆ‰,gÖá—e­Ói¸˜dB†œw1=Ûºo”¯â¦å×((‹FTC÷ÅU ÈÖ "WEð¬&D<:lÓÆ]ûgÇzÝ=B+ç§Ü3Ôµ÷‹;Ò"†.é`„ýÛ´[ñMGMÝ/P‰&dýyݯ 3»ùvdkǰvÄØÒ$‡KÔ±#ƒ°‹”’ãñ§ŠÓMK·ÉÞ׋ñ·½…[eY!;;X¥m­{ˆZm¨÷áÜ5©/Þî# 64¾§0¼r•÷G’B\³ aÃ0‡RÁP[¥Z[€4Ì¿1-b£ç«äO´h¹r?@‡ûù´3P¢ÿµN™zTx’WÖ1Êñ»SkÌ –i…¿87âÓñE—9'¥ËàÕd®Eç¼ÞV€óÑ^³oJ½&ùÙâpcŠå\g¡å9¶ÏìépE ÊªÊ gåP+Ò’`½& f뉶ï7|Ï4@ܺÈ”ýUB†a5ÏÙHÏ®¹ÊæÓ¡½v-µ•|Ñx­êŸá'ÌŽ£¬³º¿®WûånF<)d’¼-f¦¼-¢öI¤øHLíß'ÔþP ücÛ»œó™1B»#g™®;3Òuß+ºîî{X¢ð~='¯™‡“2w’{jÓä–ÿ^i1Ýcã{“ÉšR&vÙPýó9žLÇšYr´AÁ¦4¥¨Âç]㨤!ö‚%¤±uæ-ªóó ºexGHyYlø© æé,næpB´Q«’õÔ¬Gëä; ­ û“ç ŸaJð­#žK#†]/ÛL‡á«omæÎjŽR?šþ5ß;Ëx4ŸN3Ÿ$%Ûñ‚£ÇÝámiû· Ó©ÐÂØCdÑ‚^ ¥9+13:>þI‹(F5Ç9RM΋ö ‰ÚTìXËáß™tn“£»l¾˜;id—ÃÔaÓK ŸwXõn¡î‹ü;®Km2†uX÷cÎßImÄôàn¡ªÎ›šª‚÷ ð¢·HGIzöøèÂjhD¨"m›TF½ 9¹hAQ” ”bð =Š6HÜá)`Éá[ÕÉ£º¼év#B¬’›5Gà Z'ü9ïƒì œ\4Ë'åx£§Þ FT¢!›Ž×„O ÓÀAÒžœ“GP®zu·GÇõöž¬Y³ÔŽ=N–â·Vk=‹zÃ?¼Ì¸ 1‚ŽÖc:tUjéÝŠ oÔ7¡]«e³+Uœ”¾¿ŠGe0CjõäŒch6±E9µ(¶š>0Ëì&¬5ǶŠïÂߨ™xyâLœíìš 85M°xÿ4Á¾Î¡ØõJ[‡n²hùòe9§Ùð9S6^p+Šûîesý ¬àJyèö%Õë…±QWϼrj£nñsu{;?@`+iY[av«@ÂÊ%ˆ²Ê0W7t Þn¡£½Øt%76ª[ª/“Js·hÍ+]ðÉDœ$Ã]sq©@Ͳi9Ý“úìRV…ˆ¹‘¬[õ6Z Ü2Æ÷jŠ%m‘–y&©0ÉåIpŠ„—±c/¬ã[¹2’—Å8.Žs´ßûñÄà¢ãGËòØh¹TŒ–E-GK…ü°0 úäÉbÆ÷v¶SNjÀ¡ce^Ú5B¤Iyî襴mN€nŒƒGÏ” ÕkIà¬WC!†Eù•¹ÂIDKurO!dp¦êAJw 4M•ÝšÊA>Uº›Ç½lÌ€É<ñz¨ïi'†d×±áÎÒg;ÂN6OÐJHÒ]‰®8jH$Z'H–Ë÷„Гœ”a”Â#ûêb½òN1Ë^–Ò+Ñï±mËg°á*¿Å1‚§Þ2«´¥ø/þ±ª{ž£ÝÑÎMÂ"Ò«}QQ/\Ã(ÒáĦ B>Ü"¯Ó‹ÌZ¬i˜4b·Tv6‹GÑ]&­c0OsÿªI5g %7ÍŒûpGf8²z¾R¼œM-L Œ„—ã ¦Ì<"’ ’>±ÎmKz;òMDÓ›U¾S“`¢Õ !e链•$@ õnt.¥öe¤¿!>/ H( `‡ *‹©O•ßÏoí n¿©æ“\\ïï¼Ô*£®2Þ åÇ Þæ†Õh„‘!ºÖA„ä•:±Ë–ŠyÓS"®€ýÃ}AXD0¢ º´ÁÌ !•mM“AÍãe—Í®«ŽyÄÛìW"ÔÍ5½ÍŸS皥‚ U°þW_ådc9ÑTlbX šu®ÁˆßpÔW^¥ê˜8¹/»£î7hs»F[ݘ7„ûì'fy¶4W«HB{)&‹^i\;™Ÿ2M¿Ê4æSâˆ^Ú¢Š{5ÿï3@ß Wˆú‚¬¶”*¢­Xm÷u®T‘¶e~<†wTO®Ÿ5‡[º&- ¿Ú ŠÖQ‘&+ê´Ä^|`b/>(Ö‹GÅC®k©ºßp¿iùÉ"UÁ¦§‰¡šÀd§1a’-åœX4"ªËç5°ÄÏ+1»Ö99±iŽˆ5«D#\Ôb#a3Å‘”¤é}µ·ILÖ¼GŽ È0“q\&{†m¥cØ/40:'Gqø`q݅ƯòÍEú3\S$Ð÷FÓ-‘+ ásw«hájÆÊHÕ/¨èkìô/1OFwìÞ%´ÚpJÖö­u·æl«E3‚’#7> Ú·Ò xÇHÕYmØÃq¬o†§¥JŠ6:B÷­óJ¥*Ã7,\¼[¹åBaÒ[Aöé*Ý(žsKK6„š€ÁºÖk8Ñ1·ÞæE뱚éÈ'óŽBå®J&7”á8Æí· M1ê~£/•K\¡õGna“Í÷¨_òFï¨Ø¡î¡¯@‡Ù{P@eÁÃ$€† ´æØÊ¦ )Qj™r«‚У²ÿMûl51ÀûøVÃ5¨TÕ¯¡»ëC1ZÔW˜`ç¶iLaÕöäíö¥ý÷~Pù©õ¹~¤2ÝÎ<|~ú5E Š¼æðLÇÝpìëOΠZ}ˆk×™ùiljïÀÏ?ëÀÞ|%(š'AAöÂDð­#ÔÑ¡|&>¤µ'm?DÞ¬+èœ/u*´—Ç:gØïÞ¶ÌÔ¤Ú‚ÑTÈ"™ûòPÛéûU¤oˆC~m¼=H-;@›¨uÀg_l_ôNRÖìíS¨™ï{DÍp¶XMš»)’§¤-§¼Ù· vÆ‚Ì2ªÕÚ Š“î0Û„Ñ+±®÷M¡®ÿ½YÔõ "€*¯Äƒda ˜“éÅúÙót]OO©kÒõޏ~ª5>‘ÿ¾æMŸ/þwÔø$þûÚÿ55ÖÛ½¯ÿ«¨ñTô—NR~ãÿ¨þŠÕl"^³e28寪fËùïÛÿêjv–„ú¿W³„~¦ÓK÷ýÕÕì\þûÎÿÑší5kKy›;yÿ‡ˆ6éçô%;wo„‘¿–½¾#P{†Ö#½)zÄ^åPˆ†#®íÌügâh/Ì|ŽB{3ó¼3ó6Ë?RðËV¼ 8Ý ý«[hUèHÂaïÉ“8ð¿ûZGïjø‹ÏŽ_þõ¨Þ´¹›²\rõ•‰Éã9•õ<‡Ëêç½MT¬ê–ÙŸ²õrYÛ©Œ"' gžKYÏËdÞ¡{ã õ¦ßIïô@²ÖpE¼"ó¶Î ­è&þ„ôÙð(™"·zÑXÊ+Úõâibâi•†H?Ge,$„ÓÆQúÓñ|u~¾¬ã²ýùÊiWNSïsÖ´_u’müÌ/:É/óÌï`½9­Ñ‘ùüa4—ÛÂÂÔ«íj•Ljü?ú·šr\_—á­"ÒÜçÐÈus"ÿÖsÆ$õ™–rþìÈßì~–w pæËëf±#@/íHh7“ ]Ìœî|˜(¿#å>òþm¼î9€ÛI;¢4lÿŒÈuÚ}uwdB¹ÓH§„ÿoÜ^‘ó5ÏØÁ¢¿è•û´ýx/'FÚ#úýœÈÿôŸYˆHžw0·ÍR.{Ùúoô>òy‹<çá‘óŽüÿ¸ÈýœÈ÷GFþTJ=œ)ÖW/iSõ¸…Q®ßçRÞw´ß¯›ä>ü\ˆëäs#ðŠ“îs<×㱘žÒÏåø™¹ýêÁè<—ûK6rÞ²„ë²âÿçˆ~~ç5ây§óûŸ.Þû¾¯Æ·8ˆ¿ÖŠqu0Ùã"÷%ê=ÏÙ(î7ƒÛ[÷ûy|l¿ç™ )m¿¶ ;Ø*’ÇOм7½ïy<Û)xóø}昙c:¥éÜ&xß3y /ç¾ºŠŸs5—ÈE}â¾çqÛmí|(ŸÓ™ðÞWòý^ð¾ÚYfŠ÷²%¥_œÐÞöÌýÓñûŸÁgŸ>½8ñÖ‹öŸvÿôï½ë‰—~`"3cµÕ`4‰s¿öþmw½ýô«O]ò‘Çf}ï´Md]¦ÎÅkðÜ<Ÿ{À=Ëï\ñÚ/¶}`|Û—ܸáÊŸMdh£s¿|EôÜys7Uý‡M÷\ùÌSvÝsÈDæ¡5êÜo<Ö9÷}§·cÚ!÷¼ö¼gv\sÝÊòd÷±›'(<Ïò; Rîâ—üpõí×?ôЊ9»fææ?šÈ,™¯ÊÝwø‘rçœ÷Õ »ú®Ï<°âƒ¿üÊëàÜ·´©>öÄŠè¹Ï|ÿÌ—Üß<ûûžó¯_>ç‡Mdžß®Ê_=÷Š_R»oõ'ß|Nÿ¡m¯~WþŸ&ªϽkuôÜM_~ûç?[ßrð5O~ý–ß¾ÿÜþ‰Ì—ùÙ¾¿&zîa7¿äò½}óŒ·ÜuÇ9Ï»ã–Mds¹ï^m‡?Í}çè1÷}Ǭ[f¿çñž•&2¯îMç~]ôÜ?~ó_>´xþcùÂ!}ýÏÏûñDæªNUî®ñ¹‘s?úô^Óͳ?ñÈG{.ýæÏL€e«Îýù êÜçñ¹íÓŽýÝ×ßóý«yéewLïþçe}ÍDfk:÷éDËþîþËù¯œä§~ð™þݹõ™Ÿ^¨ÎíÿIôÜÌüè–âŽsÞtdz£g<½ê¡ïMd^3Sû¾mGFêð“ß}÷œ?=öÃ??ëdzþãôÂ{ûl‡:wþòC#ç^ðëµïþ‚{Á‡ý o8ªíÙÓ?2‘yj–:÷?ÏVç¶ó¹ñŸ‰Èÿe}ÎÜõ±yÏç§_½;8cïÜ/Ndî]­ÊýçuÑ:¬{ä‚o<0û÷¢³½ü•'&2ç¤Î½úæC#åp×ÕÏ>øïW¼ìá/qýïßuÔ÷¤UêÜO¾>Zî[§ã ÇžtÇ߯xàØÃ^ü“?|{"Ó6Gû£ïDË}úØßuYññµWݳý°Çrž:‘ùùñêÜÿ$zîgÞÿÂUÇoû /ýõðמyÃE['2Ÿ¾Mù¯pXäÜ…‡.êúÇeö?~à+Æï^8‘Y{¤:÷¶7þßhßëŸ?ò—îýý!çìÉ£/ýÄ™™_ªêûõßi‡Ü§÷½¡ïÑ ëîõŸ?ïõ_{véDæî7mQ}§cƬgpÒ¸*Óëµe®Î¼á}HŒŸ¯¥Ïבö¿ž®¹ê¢6¡>AsÉì¶_ÁT„˜È‡@^+I¹_ÕpÆÕ4^¯!~-}¾ŽÎy%N8™ë 5ë:ÿFúý*úýjú}ý¾™~¿†~ßB¿_K¿o¥ß·ÑïÛé÷ôûuôûNúýz*ÿ ôùôûïè÷›è÷]mðÐ+>Ñ6fãO¶Á¡Ÿ¢~º „™‡©žÐ™Ÿ¡Ú>J¥}–Ž|Ž~ž~~±méə̗°˜ M*¤×2™¯ÐUßj£5'tÁ9j2Í´ahÜŒöö/~ñ‹™J ŸFúuzû²¼cú} 9ƒ~Ϥo¢Ï³è÷l:’¥Ïsèwg;¾¤ƒéó!ôû¼v´®¤ÏWÑùW·£®½¦ý.Ðb×ÒñëÚŸùý™WÒçëÛ Ü@õùD{¼ßOÒñOÑïO·ãJúaúüýþ ý~”~–~Ž~ž~¡½· -ÓþÕ¹‡f¾ÔÞûË_L<Ö¾bë¸*¾Z~OL|Οø§vLª{¼ÝÙ”É|­}àaèÉTÂ7Ú>5“ùf{íhÃö÷ž=1ñm:þ:þ]:>Ñ~عÓ:°¹Wvìënˬ¢¥]þYÝñ²·eÖБWt`½–Ž\GG^IŸ¯§Ï+2ÇüÚT„—ø%oüÒ?^Wë.|3°•NÈ<Ó¹Lì/ ÛÆWÊä3ÂëÊ+•ïà«bÿ:!3Aç@¹Óf‹Oà3™”7žÉü©ãt¶ûŠâ¯öh{ê^ÒxA|òotfþС‚¸þL-B'«â6r1úï»\Ö± ‹{/ØëßüãÄĽ0*Ú˜÷¿:´É\›aÿß­˜…U>0TåÅ\¶þ»î¦QE·ÂÕž&ªÌÚ‰Ò«¼œ‹YžRå­KßJ }Äï'&îO¨òîYá*¿aVù†C•eüªCUr烶“þ À¿­t¿WzX&Ù¯w^æ; à»|¬‡J™K¾0³zÀBøÔKÿÞ´°à“²3ºî1;ts ÆÏtN¿Þö³ù¢ïdR ¶qpž ÅÌÂø'‰µGH:HõuþðH%qvxyg®ÐáLÛÍ«<*äÆn‡ÿ·E°—¶§€´î£-œ ü²³Úõ‹Aµ’]Yöê~Áu6WÙ-笯dÏ÷òõ&B¸-:#ç,îííÍê’—ÆÂeÎΓY)±8%j\íÕPã肊¼L´úìÄ‚÷2ˆ zUXe*¨ÜS]æAéðcí.¶ ‡¸c|:ÜãšÇɧZf°`ÍîS2‰y–UÁR¢*£jB]—š~©{d4o—ò=mJ ÊVèO8? ýýÌijɶ:wGE…Aï1T³úÆÖx×·Lù-˜Sá1#–Íœ°Ù.“§ÿ&å°8ƒÞæœÁ‘jm^’å¯nòAÁ­ÑßOåAŽAÓ*ŠaÁ‚Ùl¨¶*r*¹ ¦íAÆa³Ÿ)Ý·hB%¡'ÒwÕ¡vÄ€ ¬(ÌŽÕ( oæT†0÷]´]-_~º,Ù¯JM|¹T»Jîá 1l‰Ñì铲ñêD²¢D(² oja¾^ htTl giÒ›ðcWªcX§Í5¯2Èt9­ò¿u £ÛH ŽDåy;W£pTÏ3ǾaŽ šc["ÀTÏ3û~ß0ŸC˜ªyЧãlÉ$1V72IìÖkÓÌâ–×B1d¦µI—C&˜BHúÞÎc:2“ðU(£R,á®ÈÈ8é¬=šKaÿÐÐUJã(åîàyqþømV¾G˜:›ÀØHçd·l:»¨ÀøJÜ­¹Âd¥ý™µŒ •Keõ†¥n±º™þÓ™=ú î”~®>B—©5tr§MG ˜²zŒÑàŒÞÓŸÑükMCaÚånà,©nÂ$ÒY;õ>̳aëÐÌSùuú,241ªÂÃUÆã…´‹›‹a6‹€ùÕÛíxÀ:Av˜MKˆ®bU’êç• ÂÒJ‘Q©ÞªÌ*§ Æømpâ#¶§¾KksÐb¬à–ÕgÌ8û¼;ŸGÂXË}‰ ¢±Q}ŽÕ‡¤Œêl&B®‡ôœÔ!ýöDRpK'— Pæûݦµ"ƒÕä &¹"ȵ ‚rAƒœByŽÃàJQe'9C+% Ý$5 º î°ñ«ÜW ±ÖŠŠ,ˆ iÅœZ3šjØNÊ9-™¥ÈZ%J²uÕvVu¸BZK÷ÎÂ1ôUTx- Ë䜙qú† [Éy5ÑçR«—ŸHQ{äÚ2L¨–DÑOÒÔ¬Í^Ë4ÉchÅÆBˆ“½ãàZ",\kzñPˆàPB”x1Øs„Ð&.Š¥»Ë(8Z”cï W‹:Ð"?(4@˜{”N;n2§a †¡Øç¬Ö “•¼¤5ù`N=H1¯ó÷Ô’j¯p€áàà…Ì‚Ç É4Äù±zß$ê}IJ½–õ^% ŒÜ`w­æbUÍ 0o¨ä©öV™»ê 0R=—¡²¿¨²'…’ÙŠÁyrŠÖ>zÖÕ^¾9<,¨©Ó)Z{·¡ŠÕ Ý+ÞOüX <¤t}©TZCµ ¦Ô„f<¥Y:ñòddd{;ûÚ&g›óɈÙéÊ2ƒÈQ~ž8DV˜Çuq¥üšœý9KصÑE#Š\N G V ¹ ]‰šf^~KìåõŠ~6½ÕN'YF`=â;Ñ÷ ´ªn˜n4Ù!&qý´Q*×aóiž#ï€È ªÑÕ¾_!D+w¬´ôÙ­¦;“Z’”)ö­¤c ¡\êøÐ>ˆÏ 7³ÜS:-eß·W`ê;¼|´£’; I¡Z¢¼€|c™É ¹:|¨þÍ”ít՘彴ñ+úš"mù˜wë¬X¯¬>W‘÷¨L{V Ä÷ŽªÑŽê% z³YòÆêÜüZîýQ$$1„Ýšl?w àÓnC>¿±X<¨(ÜŠYºoŠ¡šçˆ¨zú«EÓfɰñÔÀFÊâ´¯FêÕ ÂÅèòUC0jÀ$p™fxAŠ~Áõƒf%r§ M‰PÚ?”"Œ«×CbCÃý¦§„kÍû}Ú¼“kÅ‘°;íÄý‡b½i«èMó[B;À ½¸Útú¡êk KõúáJµn&ÄãS‡îýÄöŒCbIf1ƒËé¡ÓÖ™~ÊCÝ}› Áª Ü¢€\i¹Ð Yê°a;ÄР…Ú kÿV|ëBn’1ÙÕü`Œ/™GaœÃ24´\’SI¹¹ª†ý,O¥»ÈË£P1î%]‚ËbUI×ÇL²xt!¼•ºAõ¶@1Ê×쇠ÖùÙ¬Û¯‹[¯Î ±.LÀpD7‡(”9±Êó^6Ô2©}†™‹Ã&ú²Ã%ôçZ‰ÍO­¤u)k ³&¾³ÞËʃîQ3 n5½ùQq$<è~“¸‹uqlÐ](Ý©-)Ÿ‘„Ô3êvmµZœåóiŒ¬B˜VN9§u)â7sCê\CLçq§Þ¬2 |Ü>“´Ú Ó§â^Í%Lªþm;iQ<ƒ];C®Z84Ÿ“·§†t'£žÖ½uOa¸šCÎuJn}XqüxÝS¾“‹u뵎G†ën™ˆæäFucÑYFᣆV¡YȬ¢çÇÖ /Í’”×ô|i8¯¡ÒW«ÒG~oHL”현8¦üÃåNž|n­¦°ApE8ð}ÜáF¬lnc_/Žu¼kÄ]Øb)€Owºî¸³ÊsV¹Å¨R¿‰ó›=6%/€Á4b<÷UVÒé«iõ:b°8­ÒWÑB `Þî^ä’·€…V­é§ ÄðZ“ò”¸¹›ºv˜›:íé¼Ù€PUuï°ý¯Wc¼ý£C­)ô&F1xÛi³(Å‘dÖ@¯AÈ «´WI¸ìš GÆë(¿ˆ(¹ôÛÙ°rÕHÇ×8€+ðÕQó­Ð!º[²ÿ8 ÛÇ–ßp²"–£ÔîZkÇA«¶‹¾ ¤Vghp}×*»2”‡}2Ò1S]~Ñ,!ÔÛÒ½`´Íb±¯®]¸û‡!LoK„f»'6¼·ˆáÝÕe1Öñ‡,etP7f•¾÷¡™$ÜtÂÑ-„éV9ËfÍlgÄ%ׯâçÃ[iŽÃ²²Ô51 " (”¶5üÒ‚‚Áï;=ѬÍ&kŸËDû,m­–Ô>¬Ë7¥ÏtpZ_t§¶î7lòöˆÆ.UóPB¤1ÊÕQåo$,(¢m²~3·ˆ#Za?üÙ]ñìg¤<û )Ï®&6xöj-=‚M?r^‚úábæ\x¢j± ËfæLò}Mp¤wž‡xi¼›X¢Áh(Rà™)*}}¼MhÿîVtï¼ò »!å@«;NLZYjŒ…¡.K!"=Ø=5\ŠŽ¹õbù?‚F*Žüibb¢ý`xI Pff:È ‚Ì™ rÈ,Ù Y9 ©t0È! sA9 äp#@Ž9 ähc@Ž™rÈñ '€8 '‚<äù 'œ r È© ] Ý §ÌÉô€,YˆØl ‹@ƒ,9d)È g‚,YÒrÈ٠瀜 rÈ • «@úAVƒ¬9d-È:õ €¼dÈFM ›A@.Ù2²dÈv \ r È¥ /yÈ‹Av‚\â‚äA `ÐdÚf·Í„Ò–¯¦âµ[ê>u`ÛùUÇp76ýŦÅ8‡“äö5 |ÙzMÚZýº\³¬ÎOÂÕOÂÇWëc¶ xi:Žh^z¾…ß®q¬¬ L@••J¡Z)ªž‡ ì· Ýyœëª¢–å0˜¬ó«žðl¬Ë}Pt¹j —V88¯ew;)µ»›Subû†°À#§„eàR’›$¦Ögv«UƒPÇõ ×uÔzˆã9­ “b/ûx^ÁW¬f»+¨ë/3®Ã Z—ÜKÊí¼;ÂIˆœ>KmÄøaÂC1Ý4Æ!RÝöÓì¥go[o7æ6*s^Õ±¶lÙ=“ÎØ_Je#?â­mƒûЯ7bºçm¦bŽˆï”Cþ”Ø>ªóîî âž‘ äÌp«¥&0èÁ0€\æ“G‚¼34˜ÓNíƒë=‘Þ×½_,Å¿ÅÃÊ`eC'$åôASéy6‘Ê—Ü¥Å6!ˆdÝ3¥FªñdT<æK}†iKC†8"s©ï‹é˜[…޹ô/Ô°{;pb ) 5¿‚œ] NËÞ»ƒ˜ôŒ¦÷¹¢¹+:ü)þl@x%åW’¦]5#4iQøñ„ J—iãПûô¤¦Õ¤>Ÿœæ9rz ÛV5áƒÚ°r$ħç,Q_6U™Ã2â@–‹µ¡r†b5 B{:ºõìHj5ÉÆ[(ˆí¯DG¸þ;Lº-Ï#8ª1Žó/ñž¼/eÓ[?fz\Y‘ú¾;6‘Þ&ôý ÿ‚c`_çñm˜Š.¯q¶­L—:2ZñÒ:º?êsàŽN¨J#» @Í ~ðõ0“?ŽÝòÂiÆî/¯^¯Ö‘Ƥ;»ÉÃmlŒ¶×\ÅŠÔ‰fm'@¢(/Æî´f~"ø„¬Vì#¿¢!9sÁéšÍ„œseXëÁ³ ×Ý¢ DR'-Í9%¯Szµâ!uIΛŽ;P(” UÑoô(ÓöØQâˆôwU3rï麋…®[ØbarÐ$LìýPiñštß¶dU§¹3Õp©sÂfA ñèPšçbv¯Uu¸øMV=¹ç¤|Ôdd×rbO[gàý‡Œ"ˆ×BóvÆ'Ù:o¢&+:¥|+^cËY èîq™O:ª‘û±¦ˆô’ÙÑoi(-¼|oÄÙúHâöâ!±Îw»P2/úËu¾}*ÇJ­²™‘; /ïËnÀ0DÁVŽú…HÛÓTvPmxÚ@Bwc™ . xòß«â‡Ð~画݅`² h r…ë%0iêÓtsHˆÙ2 ²ë1C]\&nç»UªJ¥ Ÿ·ŠN´ÜG‹Yéä(DEOâ–•Sö5æ€~«ÇÚ,Ó\ÇŠ#ò­6ͧ;coõrñVû[Ѧ»Ð޾1K†“SõJo$ðÛ(éÙ­ûãçôMµ 2Ô6«W;º¼È¤]¥»Œsîi##C½u©–<Œƒ£™mu´ŒÒ:cìŸ,|ÁV¦¥×©V}cìÝ%¦ƒ9)ïîåô8&n—×§ºìc[†?mÑ^ywÈŠ&öWÇT‚ª[´:[T¹sò\7¨²636Ò^×ä!ÒèxÀ9CU§4×pÔª³TâP™«û%¢î½“gq`ÝUæ 1.NžÅ±€ÒßF©]¡-‰%… jµbbìTl^Ÿæs•õž‘pBìijâiVµ€³±O³ÅC$ù,ép6ë Œ=ÜAtABŠ6ÒœaÂLüs¸IP7^1ÇšSgî £d•˜4•Êv t7!)ë÷ƒ5>¯Õ…\Ý¢K44t„c¶êl ¼ÉºäÞÎZûäé.~‹—t8ߥÝ$9c](æÑÒHýOizå&:Õµ½„wl•"£Á4véfÇËús‰ç)=®œI×rW5¹¥ì¢. â wPrˆ—Åzâ=µ y§‹üš|8¿[?Q´å£™/R“[·X“æ ÝŠIO§ê­gû>Tæb@ß—cÐ$ñw©{åòØbq‘èï¤iMZ?‚Ó5Áè:f¿!´Î:g^˨k•ŸbÑœ<êú’Nš R\„c…ÁMJ’ágÙ(‰ R@7qL¶Â”Ê×1ÎÃLj—Æ4ÈhѾóp¬EûG\$ª´alǦêd”Iï•áß dU¤a™ãY0Ø#<=:Ëã=—u“¸eãÑàVµÑw£lä$?/³–œ¨hÑuszDÓxkmgŸÄæyY÷¯yŠîÝ뵕ÞwÊ0QÆ}·ˆ#Pú5“1~ ³ xކC v„ôD.E*÷Z*Ë»UÉïÞ¥òµsX¥Åh Vimîќ˙¿erVعˆ€تãF[i¶c,µÉàD9±ÛçØ«¢£ð‘ºeJVš/Oϧ§ÞY:ÇŒ’O™þ¾Ë;G|§ö“vÅ’>v%ºO~§ÃBýœÕ*\´Chœnlâ‚Ôˆ7Y¸Ð¾ÎQ%TÆ‹u.E&6ê.:‹Ô.¡õaž§ ­œÝÒ€´ƒ`q{Da[Ë{Äh¢ËbOx‡x­"/£šH‚ÿFŸ½N`êpÌG|´ê rá’d)ÙtÞ†‚ìѸŒâ^ô,s…kk¦Å‰ãgZ+žé¸†j¨ 0˜ÜP ·(Œ}¡B•P…ö¹šÜÞ4Z))Ñ#ߢ‡^ÆŠæý\{?#b¦8»}9…nj–óP-ŠªkM_¾¯ó[m /Uƒj:…f½Ó˜ÚøFê~€qgôööΧñgÕj•´èÌÞ}‡0¢ä‚!ˆD|VXígõF¿fTiX©@¡ N¨Á2uJž°Q(ò1»D]‡§+ü,òô¥p¨ß&[æ°D•£éæÎrñ²^±‹uèe–\¸8¼pàƒÁ„ŸDó?b`%’;‹6ÂÚ^Æ6®,•ì½h”aþïË®ƒÂ¡Ð²_*‘“÷ˆ1«ÑZƒ,!ÈÀ80í`p"UÉìÿ†›ù’Œ°±Q„Åܙꂊ7ƒ á°QV Mè§.ö‡é–¥ê0zr»STo]½øcÌ¡[LgXa’°ÍǘO·Ätèý‰^ÀSbÖã˜ë[ ÛF}B3Ó‘®Û2”˜ˆófÀ[5»…w¨nðÅtü›²Æ#‰$ÃB)k:i¤¼8:‰åDšaáœÏ…S‹Ñ-iVVÔ§ƒÖÔ¦Ìvò|o¢;ÙTX»MXLÜ:Âÿ×»NcŸ >uß µ[´R;˦e6‹DÚpj®öEŽ™÷½Ó¼Ë1qDnX}3¦×K®ƒ”^4KæõmÚ® KÏ{ù!|Ø´ÝéÚä5ƪõÝÎvöôtÓ: b5´Þ BgKv w°/´}_v¥S(ù¨€ºL&ÁðuF7)”© Q÷\Êde &u_d/Êö«2î^÷Ê4‰b=·ìe³ðhðÍÀjªÄ}ÚîrC`Íþ$k#ÀI*èsú¡®~¥‰É/\ŸW‘6ÎÀ¼ §u©4žÝX-8[«5Pp}Îç||³´»G? Ò ×½arRöþF¯áÒ§>gs¡àjˆä{R¶èI´¾vx+8ݪFÖé6 >inÝ]©ŽUœL-%ã¯cƒ!c‚IÛ è¸úy»Xœ%Ïy"…Гè¼ Ó‹uè·swªZ]ú1NL¹t޼& =ÆÚ™:že“ †§Ë~–™I‚ù´'!Ø·F}Ú'Øf…ú¼ùQßuj~MOªbPðTè©”Xè“»tÑS~ºŠÍ)R;´*è*KFtŒ¤¢ÒEgî j^÷j ,´Bü2j”TEÒ\ ShÝ‘6@6›òôþ%P­Y¯UÉ&ZTU¦„j…¢Ç–5DnFvͨ[j&;ä‹%ÝX^eT×>vm½¤4IÉi8ˆ–Av'fcóIx3ýU~A]ÎÒÞÞ²'=ìãæÄl¨M¡[«„ï6b±9öˆ9¶Sœ%Ïy$2>®jK3GM||¼G˜ þ”;y¸K«ß&NTÙˆ䤔=;(UÍëÒ²©Ãgš%Õ¼Ó5Hèä›ó»À’ìæü2xhQÖ~™º®R[ 50¸îm}Ù•œwÏþ¤u|´'Á°gÍTaJÀ œJEå}‚Mˆº5 $}t—ë]N{¿õ 7g³X;ªŒ xóØ‘Áf~µbÀáᘠϨ)³”C/ð9ÆipÄD–3+ñ˲Öé4\L2)S¸ˆ_í]7ÊWqÓrÈk”Å #ª¡ûâªdó… Ž«"xæ "¶iã®ý³c½î¡•óSîêÚûEiC —ô 0ÀmÚ­ø¦£¦î(D“²Žþ¼‰îW†™Ý| ;²µcX;â‚lm’Ã%êØ‘AØEJÉñøSE€)§ØdÿëÅøÛÞ­²Æ¬¬Ò¶V‡=D-‹6ÔûpîšÔo÷ ‰’ßS ^»Êû#I1®Ù…°a˜C©`¸­Rí-@Læã˜ˆ±ÑóUò'Z´d¹ Ãý|Ú(ÑÿZçL=*<É+ëíø‡Ý©Æ5æÇ¹Âßœñéø¢Ëœ“Òeðj²F×¢s^o+HÂh¯Ù7¥^“ülq¸¹*yyuZž`ûÌ.‘WÔ ¼ªÌpVÞõ¹"- f¤aÂà¶žhû~Ã÷LD®‹ü@Ù_%d\@Vóœôìáš«l>ÚkwÐÂÑQ[Éתþ~‚Àì8Ê:;¡ûëz¸_îf4É“B&ÉÛbfÊÛ"jÿDÚ‰ÄÔþ}BíµÀ¿¶½Ë9ŸC´;r–éº3#]÷½¢ëîn±‡% ï׳qBñš:)s'¹§6M~`Ùøï•Ó=6¾7™¬)eb— Õ?ŸãÉt¬™%·PðP6Œ[SaÚŠú'|Þ5Žú@b/XBZë1PgÞª:0ß ›†w„”—ņÿיТ`žÎâ¦'Dµ*YOÍz´N¾Òв!yÞð¦ß:âù4bܲÍt¾úÖfî¬æ(!õó é_óͱ³Œ'ðAóé4óIÒö/xÌqÜޖ汫0 -Œ}1D-èÕPª³ó8£ãã™´ñ±ˆbTsœ#Õä¼hÏÒ¨}@ÅŽ¶þIç69ºË拹“Fv9L6½ô¨ðy‡Uïê¾(ÁßãºÔ&cؘQ‡up1ÆáüÔVALîªê¼©©*x#z‹t”¬w``߈.¬†F+Ò¶IeÔ«“‹ÖE©@I/ÜУh£Äýž–~@°e}‘<ªË›~a7"4Â*¹YsÞ¤uÂó>ÈÂÉE³|Rn€€7zêÍ`D%ze±YàxMø¤0 $mÊ9ye«Ww{tlQoïÉš5MíÐãd9 ~kµÖ³¨7ìñÃËŒ«#èh=¦CW5 šÞ­¨ðFqÚµZ6»RÅIéû«xT³¤ÖQOÎ8–f“[”Q‹ a«é³ÌnÂZsl«ø.üš‰—'ÎÄùØnÁ^¡ ŠSÓ‹÷OìëŠ]¡´uè&‹–/_–sš Ÿ3õhã·¢¸ßéÎQö00×Ê Z Ô‡Þh_R½^ueñÌ+§6ê?§Q··ó¶“–µfç° $¬\‚ ¯ su@Âáí:Ü‹MWrc£*°Åú2é¡4w‹Æó¦Öa–ìïÔìbSƒÅu+R;áÔ°,5DŦB$O:i`ȘÊpŠ®ÒífMÜ„²™Eq’ÒJ ³©Ì=.…öôÖ´©Hú2q\ÄY-=yM1©¬m~CÎ`ÓpUDßÔìÔ7µ§Ý.è¸ÛÚ /‰ŠlêjìQe|å¸gÖCZÖxMË4µá€­Z;)³Ó£þPfz%l6 -Ò‚gÔ9ªžIûHòáh^±è‚O&â$îš‹Mj–MË鞘Öe—²*DÌdݪ·Ñz„hà–1¾WS,i‹´DÈ›0Iµ€I.¯ˆH«€S$¼Œ{Ñ`­ÀßÊ•‘¼,Æqqœ£ýÞ'—8Z–ÇFË¥b´,j9Z*䇅ÙHPlO3¾·³rR+óÒ®"ÍÊpO/¥mst½`< x¦d¨~Kg¿ 1,rȯÌN"Úª“{*!{„3U‡ R¾c iªìvÐTò©ÒÝ<¾èec Hæ‰×C}O;1$»’ w–>Ûv²y‚VD’.KtÍQC"Ò: D²,Y¾Ç „þœä¤ £T™ØWë•wŠYö²”^‰~m[68ƒ Wù-t¸o˜Y§-Åñ‡ŒUÝó•èŽtn‘~X틊záF‘'6Mòáy^dÖjMÃ¥É0øµ²³Y<ªxÔˆî2i{„yºküWMª9-¹‰fDا;(*Q®ž¯/gS #¡ðåøAƒ)Sˆ¤‚¤O¬sÛ’ÞŽ|Ñôf•ïÔ¤„hÕCHZ`úËÆ¤o% H½K©}éocˆÏK Å¡‚ÊbêSå÷ó[;ƒÛoªù$WÄ×ûÄ;/µÊ¨«Œ7hù1¨·¹a5a䈮u!{¥ŽElÀ²¥â_Þô€ˆ+`ÿp_ÑŒ(Ã….m0óBHe[SÆdPóxäe³ëªcñvû•uwMoóçÔ¹fA© c­ƒàUP9ÙXN4[V‚fk0â75Ç•W©:&NîËî¨û ÚÜ®ÑV7æ á>û‰Yž-ÍÕ*’Ð^ŠÉ¢W×Næ§LÓ¯2ù”8¢—¶¨â^Íÿ;À Ð7Eèb€¾ «1¥JE†h+Vã}+U¤m™áÕ“ëgÍá–®I‹Â¯v¨¢uT¤ÉŠ:-±˜Ø‹ŠõâQñëZDªnÀ7ÜoZ~²HU°éib¨&0jL˜dK9'Öˆêòy ,ùâJÌ®uNNlš#bð*ѵØHØLq$%iºE_ím“7ï‘#(2Ìd—É^„a[©Áö ŒÎÉÑA>˜D\w¡ñ«|s‘þ × ô¿ÑtKäÊBøäÝ*Z`¸Z…±2Rõ *ú;ýËc̣ѻw ­6œ’5„}kGÝ­9ÛjÑŒ äȈö­´@ƒÞ1RuVöxë›áiià‡R„¢~lR¨ûVP›ðË-Ÿ¨«q£x¶--X^èZ¯álDgÜz›C½÷j¦€ §Ì5 E‘»*ÜÐÄ㸶ß2Ũø¾TþxÅй…M0ßcàÉc½£bK¸‡ ¶½eïAA”ÿ&¸šã)›*ŒD©bʧ BÊ>7í§Õ c^Þ;ÃÉáÔFªê‚Š×Ð]ô¡î+L€sÛ4¦-k{òvûÒþ{?¢ýT‡ú\?R™kgfü?ýš"?fC5®9<Óñ£'gd½r&ÕêC¢ÿíç¯òg Y’ ¢¡Q(&ãûuý™émüƒýãà›¯*¾ióWyåS™û2éþ©y'i‘?øîÂý{A,Yr:ÈR3@ÎY²¤ä,³AÎ9ä<ÔA +AVôƒ¬Yr>ÈZu ëA.yÈ ›@6ƒ €\²dd+È6í ;@.¹äKA^ò"ƒì¹ ÄɃ@Š ÈÈ0Ȉ² d7H ¤ R©‚Ô@.©ƒ &È(ÈÈq—€¼lŽÒWÀß—ƒ¼äJ«@\ r ȵ ×¼äz@nyÈ«An¹ä5 ·€¼äVÛ@n¹äu w‚¼ä où;7Üòf·€Ü ²±|@îyÈÛAÞr/È߃ìy'È} ï¹äÝ ïyä½ ÿò>÷ƒ|äƒ ùGƒ|äA‚| ä!ƒ|ä“ Ÿù4Èà €|äQÏ‚|äó _ù"êLÇ@¾ ò¯‚üÈã _ù:È7@¾ ò-oƒ|ä» O€ü3È¿€|äû O‚üä‡ ÿ ò#ƒüÈO@~ ò3§@~ò _‚ü;ÈÓ Ï€üÈ‚< ò+_ƒ,€÷ú[øû;߃üä¿@þò'?g•^¥ñÏ–~/>¦ó æ@öÊÍä8—Yœl„!âs8Óâ`^¾ÏeZžÃ8·ôv¾Å8 Çp.ÿ<PÅØ™ô ÁõüùŒÜ|2#éžÊÀáݼvŸÏsfóôb0´žþöóÜÀ0¥;?yë¿®Ó}væW™¡«.ðËÎjwÔ/ÕÊŒ¿™ÊÿOþ\ƒùjk@®¹ä• ׃Ür#È«@^ rÈÍ ¯¹äµ ·‚Ür;È ¯¹äõ oy#Èß¼ ä.7ƒ¼än½ o¹äm oyȽ ²ä ÷¼ äþ9Jù`¿}þ¾ä@Þò~÷€Bú üýÈ?‚|ä# ‚|äc |ä ŸùȧAyä3 ‚|äs ŸùÈA¾òÈ—A¾òUyäk _ùÈ7A¾òmï€|ä ùï|äI€üä_A~òcù ÈOA~òÈÏA~òKyäÿùOgA~òkß þùÈïAþò_ ù3Ûm¬Ä'þÆÿôÿ ÿÓDÿÓÿPK«nR+*Øëîèd! ¤tcl2k.pptUTBAÏ;UxPKD*éaolserver4-4.5.1/docs/intro/faq.html0000644000175000017500000001316007442211052017145 0ustar frankiefrankie AOLserver

AOLserver Frequently-Asked Questions (FAQ)

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/faq.html,v 1.2 2002/03/08 19:34:02 kriston Exp $

AOLserver Frequently-Asked Questions and Answers

Getting AOLserver
Building AOLserver
Obtaining the 128-bit SSL Module (nsssl)
Installing AOLserver
Database Access
Getting Help
Contributing Software
Contributing Patches

Getting AOLserver

AOLserver binary builds for many platforms are at http://aolserver.com

AOLserver is open-source. The source code is hosted at Source Forge and can be found at the following locations:

Building AOLserver

AOLserver builds very easily and the online documentation describes the process. We recommend that you use the defaults in include/Makefile.global when building your module. This file contains rules and knows how to build modules properly for all platforms AOLserver has been ported to. To link a shared object, we recommend the default which is:
gcc -shared -nostartfiles

On some Solaris installations the Cygnus compiler is unable to build working shared objects. We're told that if you put the -Wl,-E option in the nsd/Makefile when linking the executable, Cygnus works, but we have not verified this successfully. GCC from just about anywhere else will work. You can get a pre-built copy of GCC from http://www.sunfreeware.com or build your own from ftp://ftp.gnu.org. Just install it and put a link to the new gcc in /usr/local/bin (keep the broken Cygnus in /usr/cygnus/bin in case you need it).

HINT: The magic option to GCC for the compiling step is "-fPIC", so if you're using a third-party library, make sure "-fPIC" appears in the CFLAGS. And, to eliminate the possibility of strange behavior, it's helpful but not necessary to build everything with the same compiler and using the same options. If you're using a third-party library for which no source code is available, you may run into problems if the vendor did not build it with the equivalent of "-fPIC" on their compiler. Shared objects must be position-independent.

Obtaining the 128-bit SSL Module

AOLserver supports two levels of SSL for "https" connections -- the export version, which has a 40-bit secret key and a 512-bit public keypair, and the domestic version, which has a 128-bit secret key and a 1024-bit public key.

The 40-bit/512-bit version can be found at http://aolserver.com as part of the regular AOLserver source and binary distributions. The 128-bit/1024-bit domestic version is not available in binary form. It can be built from the source code if you have the RSA BSAFE library from RSA Data Security. If you do not wish to purchase RSA BSAFE, we highly recommend the nsopenssl module instead of the nsssl module. It can be found on aolserver.com. The nsopenssl module supports several features that nsssl does not including SSL v3, client-side certificates, and client-side SSL. It requires the OpenSSL library which may or may not be legal to use in your situation.

Installing AOLserver

Installing AOLserver is very straightforward and is covered in the online documentation.

Database Access

AOLserver works with a great many databases including all the popular enterprise systems.

Sybase Proxy Daemon (nssybpd)

The nssybpd connects AOLserver to a Sybase database. America Online does not have a license to distribute the binary builds of this code externally (and neither does anyone else). The source code is located in the "nssybpd/" directory of the AOLserver source tree at Source Forge and requires the Sybase Client Libraries to build.

Getting Help

AOLserver has an active developer community as well as a very active user community. Links to these areas are at http://aolserver.com/.

Contributing Software

AOLserver is extremely extensible and we host a great many community-contributed modules at http://aolserver.com/. You can contribute your software by following the guidelines on that page.

Contributing Patches

We accept any form of patches at the Source Forge link on the left of this page. We request that your patch include a test case and, if possible, a context diff against a tagged version of the AOLserver source code. In lieu of a test case we can also accept a narrative describing the problem in detail.

aolserver4-4.5.1/docs/intro/features.html0000644000175000017500000003202607441736127020234 0ustar frankiefrankie AOLserver

AOLserver Features

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/features.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

What is AOLserver?

AOLserver is a World Wide Web server that provides access control and database connections and runs on multiple UNIX platforms. AOLserver can access SQL databases including Sybase, SOLID, Postgres, and some third-party database drivers.

AOLserver is extendable with both C and Tcl APIs that expose core functions and provide primitives for accessing the database. AOLserver also provides optional CGI support, although the C and Tcl APIs are more powerful, offer superior performance, and are easier to use.

You can configure multiple servers within one AOLserver configuration file, and then specify which server to run when you run AOLserver. AOLserver also uses a multi-threaded design on all supported platforms. You can configure the number of threads each server can use.

AOLserver offers direct connections to SQL databases such as SOLID and Postgres , plus an external database connection to Sybase. Third-party database drivers are provided for Oracle, Informix, and Interbase. You can even configure AOLserver to have connections to multiple databases and specify which databases are available to each server.

AOLserver also includes server administration capabilities. An access control system allows you to specify separate permissions for each combination of URL and HTTP method (GET, PUT, or POST). You can also specify users and groups who are allowed access to AOLserver.

Features

AOLserver Administration Features

Access Control:

AOLserver's access control system allows you to define users, assign users to groups, and set permissions for users, groups, and hosts.

When defining permissions for the AOLserver, you can specify lists of users to allow or disallow, lists of groups to allow or disallow, and hosts (specified either by host name or IP address) to allow or disallow for each method/URL combination..

Multi-homing:

AOLserver allows you to run multiple servers on one host by attaching them to different port and/or IP address combinations.

See the "Configuration for Multiple IP Addresses" section for information on configuring AOLserver for multi-homing.

Database Services Features

AOLserver manages pools of open connections to databases. These pools let AOLserver quickly service simultaneous database requests (without continuously opening and closing the database), and to prevent a large number of HTTP requests from overloading the system. Both the Tcl and C APIs provide access to these database pools.

Programming Interface Features

Tcl Interface:

AOLserver can be extended using the Tcl scripting language. AOLserver provides a powerful Tcl API containing a full array of functions and primitives that give you access to all of AOLserver's core functionality and SQL databases. Tcl functions are available to interact with the connection, implement scheduled procedures, maintain state, access the sockets and threads interfaces, roll access logs, maintain permissions, access the database, and much more.

You can create scripts in a private Tcl library for each server, or in a library shared by multiple servers. Since Tcl is embedded in AOLserver, a separate process is not required to run a Tcl script, making Tcl extensions much more efficient than CGI-based extensions.

AOLserver Dynamic Pages (ADPs)

ADPs allow you to embed Tcl scripts directly into HTML pages. The script(s) are interpreted dynamically when the page is accessed.

C Interface:

AOLserver can also be extended with the C API. The C API lets you write your own logging routines, access control system, communications drivers, or database drivers. It provides all the necessary functions and structures you need to access AOLserver's core functionality and the database.

To use the C API, you compile your C module into a Unix shared library. AOLserver will dynamically load the module and call your initialization function.

CGI Support, Including CGI File Type Activation:

AOLserver provides full CGI support. Because running a CGI program requires a separate process to be created, it is less efficient than extending AOLserver with Tcl or C.

You can configure AOLserver to look for CGI programs in a specific directory, or you can store CGI programs near the HTML files and refer to them using the .cgi file type. Any file with the .cgi extension will be interpreted as a CGI program by AOLserver. You can configure AOLserver to activate the .cgi file type in specific directories or groups of directories.

High Performance

Fast and efficient handling of simultaneous connections through a combination of multi-threading, in-memory caching, and single-threaded asynchronous I/O. AOLserver has an advanced multithreaded architecture. Multithreading features include:
  • Fast response without having to fork for each connection.

  • Multiple, simultaneous servicing of connections.

  • Ability to keep state in the address space of the single AOLserver process - no need to maintain slow and messy external files!

  • Simple programming model where each request is handled in its own thread, freeing the programmer from the worry of a long running request blocking the server.

  • Fully configurable minimum and maximum number of threads on a per-virtual server basis. Threads are transparently added when demand rises and then slowly exit as demand falls.

  • The Tcl interface is fully multi-threaded aware - no special steps are required to ensure proper concurrent script evaluation.

  • The nsthread platform-independent C API for multithreaded programming which includes:
    • Functions to create and wait for new threads
    • Mutex, critical section, semaphore, and event objects to protect shared resources
    • Thread local storage for maintaining per-thread data

  • The nsthread interface allows the AOLserver programmer to write new C functions which use advanced multithreaded locking and synchronization techniques independent of the host platform. In fact, the AOLserver is written entirely using the nsthread interface - no platform specific multithreading code is used anywhere in the AOLserver or in any AOLserver module. No other Web server provides this level of multithreaded programming support!

  • AOLserver performs in-memory caching of pages and scripts, and single-threaded asynchronous I/O for returning static content.

Tcl Scripting

Quickly add dynamic content to your website:
  • Integrated multi-threaded interpreter runs scripts in parallel in one process with complete access to server state
  • AOLserver Dynamic Pages (ADP's) allow embedding of Tcl scripts in HTML pages
  • Rich, easy-to-use scripting language loaded with new AOLserver-specific extensions for building web applications
  • Ability to add your own C commands to the language
AOLserver includes the Tcl (Tool Command Language) scripting language as an integral part of its architecture:
  • The Tcl interface allows you to quickly build custom Web applications without C code or messy CGIs.

  • The Tcl interface is multithreaded, allowing more than one Tcl script to operate in one or more virtual servers simultaneously.

  • Built-in Tcl scripts operate up to 10 times faster than comparable Perl-based CGIs.

  • The Tcl interface can be extended to include your own custom Tcl commands written as Tcl procedures or as C primitives.

  • AOLserver extends Tcl to include commands for accessing one more open databases without writing any C code or executing slow external CGIs.

  • The Tcl interface includes useful commands for accessing HTML form data and information about the active connection.

  • The Tcl interface provides a command for opening a TCP/IP socket which can be used to implement a quick HTTP transaction to another Web server or send Email using SMTP (a procedure for sending email is included).

  • Resources allocated during evaluation of a Tcl script (e.g., open database handles, open files, Ns_Set data) are automatically garbage collected after the script returns, freeing the script developer of these tedious tasks.

  • Tcl scripts can be in the pages directory along with the HTML pages and images or in a special Tcl library directory:
    • Scripts in the pages directory are evaluated on each transaction which is ideal for quick script development.
    • Scripts in the library directories are evaluated at startup time for fast response without having to open and read the script file.

  • AOLserver includes an HTML-forms based interface for creating and updating Tcl scripts which are located in the Tcl library directory. Also included is a simple HTML form for ad-hoc evaluation of a Tcl script typed directly into a text area box.

  • Tcl, unlike Java, has been in use by a large user community for years (join the comp.lang.tcl newsgroup) and is well documented by the creator of Tcl, John Ousterhout of Sun Microsystems.

  • AOLserver Dynamic Pages (ADP's) are HTML pages that are parsed and run on the server when the page is accessed -- ADPs contain HTML tags and Tcl scripts. ADPs are ideal in situations where you want to generate part or all of a specific page dynamically.

Complete C API

Write custom dynamically loaded modules for:
  • Handling requests
  • Translating URLs
  • Logging
  • Database access
  • Thread creation and synchronization
  • And much more!
The AOLserver includes a complete C API. Using the C API you can write:
  • Custom request functions to handle HTTP request to an URL or a complete hierarchy of URLs.

  • Custom URL-to-file translation routines to convert an HTTP URL to a file in the local filesystem. This can be used to map URLs to one or more filesystem directories as required for maintenance or load balancing.

  • New Tcl commands for use in your Tcl scripts. AOLserver provides initialization functions to ensure your command is available in all the Tcl interpreters in a virtual server Tcl interpreter pool.

  • Database drivers to interface AOLserver to your own DBMS.

  • Communications drivers so AOLserver can implement HTTP over a new underlying protocol:
    • The included nssock module implements HTTP over regular TCP/IP sockets just like other basic Web servers such as NCSA, CERN, or WebSite.

    • The included nsssl module implements HTTP over SSL (Secure Sockets Layer) TCP/IP sockets just like other secure, commerce capable, Web servers.

    • The includednsunix module implements HTTP using Unix Domain Sockets and TCP sockets. These protocols are ideal for implementing a proxy and is used by the included virtual host redirector "nsvhr."

    • New drivers can be added as HTTP support is required on other underlying protocols (e.g., Named Pipes or IPX). AOLserver supports Unix Domain Sockets with the included "nsunix" driver.

  • Filter functions which run at any stage of each HTTP request. A filter can be used to implement logging - in fact, this is how the nslog Common Log Format logging module works.

  • A scheduled procedure which runs at regular intervals. A scheduled procedure can be used in conjunction with a filter function to implement a statistics gathering system.

No other Web server C API is as complete and powerful as the AOLserver C API!

SQL Database Services

Powerful and easy access to a variety of SQL databases. Driver source for Sybase and Solid are included with others available from third parties.

AOLserver includes loads of features to help you connect your website to SQL databases:

  • Provides a platform independent interface to SQL relational databases.

  • Connects to underlying database servers through plug-in database drivers:

    • Included are drivers for Sybase, Solid, and Postgres.

    • The AOLserver Community has also contributed drivers for Informix, Oracle, Interbase, and MySQL.

  • AOLserver maintains one or more pools with one or more open database connections. By maintaining open connections, HTTP requests have instant access to the database instead of incurring the expensive startup time of a CGI-based solution.

  • Requests are queued in first in, first out order to ensure efficient and fair use of database resources.

  • Database operations are available through both the C and Tcl API's.

Secure Sockets Layer

SSL enables network encryption for e-commerce applications.

Hierarchical Access Control

Restrict access to all or part of your Web through lists of users, groups, and/or client address.

aolserver4-4.5.1/docs/intro/index.html0000644000175000017500000000077307463565165017537 0ustar frankiefrankie AOLserver

AOLserver Introduction

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/index.html,v 1.2 2002/04/30 19:03:17 kriston Exp $

Introduction

History

Features

Reading List

AOLserver Tcl2k Presentation

Frequently-Asked Questions

aolserver4-4.5.1/docs/intro/intro.html0000644000175000017500000000330607442211052017532 0ustar frankiefrankie AOLserver

AOLserver Introduction

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/intro.html,v 1.3 2002/03/08 19:34:02 kriston Exp $

What is AOLserver?

Find out what AOLserver is and what it can do in this AOLserver Features article.

Read Tcl in AOL Digital City: The Architecture of a Multithreaded High-Performance Web Site, by Jim Davidson, Keynote Address at the 7th Annual Tcl/Tk Conference

Installing AOLserver

Follow the step-by-step instructions on how to build and install AOLserver, then, look at these documents:

Detailed Description of Configuration Parameters

Annotated AOLserver Configuration Reference "config-reference.tcl"

Then, tune and scale it.

Developing with AOLserver

Get started with ADP Scripting with Tcl.

Read more about the Tcl API used by ADPs.

Move on to C Programming with AOLserver.

Getting Help with AOLserver

Take a look at the Links on the left of this page for more help with AOLserver.

Further Reading

Gain a good background on programming from the books and links in the Reading List.

Frequently-Asked Questions (FAQ)

Learn the answers to many frequently-asked questions.

aolserver4-4.5.1/docs/intro/readinglist.html0000644000175000017500000000347307441736127020727 0ustar frankiefrankie AOLserver

AOLserver Reading List

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/readinglist.html,v 1.1 2002/03/07 19:15:35 kriston Exp $

AOLserver Engineering Manual by George Nachman.

Tcl in AOL Digital City: The Architecture of a Multithreaded High-Performance Web Site, by Jim Davidson, Keynote Address at the 7th Annual Tcl/Tk Conference

Philip and Alex's Guide to Web Publishing, Philip Greenspun (Morgan Kaufmann, 1999)

Tcl Reference Manuals, from ActiveState

Database Backed Web Sites: The Thinking Person's Guide to Web Publishing, Philip Greenspun (Macmillan; out of print)

Practical Programming in Tcl and Tk, 3e, by Brent B. Welch (Prentice Hall PTR, 1999)

Tcl/Tk Programmers Reference, by Christopher Nelson (Osborne/McGraw-Hill, 2000)

Unix Network Programming, W. Richard Stevens (Prentice Hall PTR, 1998)

Tcl/Tk for Programmers With Solved Exercises That Work With Unix And Windows, J. Adrian Zimmer (IEEE Computer Society, 1998)

Threads Primer: A Guide to Multithreaded Programming, Bil Lewis (Prentice Hall, 1995).

Advanced Programming in the Unix Environment, W. Richard Stevens (Addison-Wesley, 1992)

Programming with Threads, Kleiman, Shah, Smalders (Prentice Hall, 1995)

Tcl and the Tk Toolkit, by John K. Ousterhout (Addison-Wesley, 1994)

aolserver4-4.5.1/docs/intro/history.html0000644000175000017500000000467507463565164020135 0ustar frankiefrankie AOLserver

About AOLserver

$Header: /cvsroot/aolserver/aolserver.com/docs/intro/history.html,v 1.1 2002/04/30 19:03:16 kriston Exp $

History of AOLserver

America Online acquired a small company called NaviSoft several years ago just before that company delivered a document management and retrieval system called NaviServer. NaviServer was reworked into a World Wide Web server with Tcl, natural-language processing, database management, and was integrated with a suite of document-management client tools. The document manager and editor was called "NaviPress," and the document browser was "NaviGo." NaviPress was groundbreaking in its implementation of the HTTP PUT and BROWSE methods for remote editting of web content. In these ways it was many years ahead of Microsoft Frontpage and Netscape Navigator Gold.

In the years since then, NaviSoft created the NaviHosting service and created a group of software tools around it that was used by GNN, PrimeHost, and the AOL service itself. In 1998 the NaviSoft subsidiary was integrated back into AOL and a new group of people became stewards to the code. This team supported the legacy code and added exciting new features to AOLserver, like ADP server-side HTML scripts, caching--even an FTP server. The team also maintained the many software applications that supported GNN, PrimeHost, and AOL.

Finally, in 1999, the entire AOLserver code base was overhauled and released to the Open Source community as AOLserver 3.0 under the AOLserver Public License, an application of the Mozilla Public License. America Online continues to use AOLserver throughout its business--from Digital City to Netscape to CompuServe to the America Online service itself.

AOLserver Team

AOLserver is maintained by America Online with the support and contributions from developers all over the world in the Open Source community. We provide support to both the AOL businesses and to the general public. The result is the massively-scalable, extensible, and reliable web server we call AOLserver. aolserver4-4.5.1/docs/index.html0000644000175000017500000000035707442277162016374 0ustar frankiefrankie AOLserver Please upgrade your browser. <a href=toc.html>Click Here</a> </frameset> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/docs/toc.html����������������������������������������������������������������������0000644�0001750�0001750�00000001777�07442277653�016066� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>AOLserver</title> <BASE TARGET=copy> </head> <body> <table> <tr> <td valign=top align=left nowrap> <big><a href=http://aolserver.com/ target=_top><b>AOLserver</b></a></big> <p> <small> <a href="/docs/intro/">Introduction</a><br> <a href="/docs/admin/">Administration</a><br> <a href="/docs/devel/">Development</a><br> <a href="/docs/intro/faq.html">F&nbsp;A&nbsp;Q&nbsp;</a><br> <a href="/docs/devel/tech/">Tech Docs</a><br> <a href="/docs/devel/tcl/">Tcl Development</a><br> <a href="/docs/devel/tcl/api">Tcl API</a><br> <a href="http://tcl.activestate.com/man/">Tcl Manuals</a><br> <a href="/docs/devel/c/">C Development</a><br> <a href="/docs/devel/c/api">C API</a><br> <p> <small><a href=/ target=_top><b>Back to the Top</b></a></small> <p> <p align=center><a href=http://sourceforge.net/projects/aolserver/><img src=http://sourceforge.net/sflogo.php?group_id=3152&type=4 width=125 height=37 border=0 alt=SourceForge></a></p> </small> </td> </tr> </table> </body> </html> �aolserver4-4.5.1/docs/README.txt��������������������������������������������������������������������0000644�0001750�0001750�00000001066�07442211034�016055� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� AOLserver Documentation Guidelines ---------------------------------- These rules must be strictly adhered to. 1) All documentation must be human-readable in either HTML or plain text format in character set US-ASCII. 2) No documentation is to be machine-generated. All documentation is to be maintained and edited by hand. 3) Only AOLserver-specific documentation is to be include, e.g., no Tcl manuals. 4) Documentation is to be approved by qualified editors before publication. Remember, text and HTML only!! ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/docs/ChangeLog���������������������������������������������������������������������0000644�0001750�0001750�00000001257�07446205002�016135� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2002-03-20 Kriston Rehberg <Kriston@aol.com> * admin/sample-db-config.tcl.txt: totally replaced with a copy of what is in config-reference.tcl.txt. * admin/config-reference.tcl.txt: added a badly needed Sybase example that actually worked somewhere. Also added a postgres one. * admin/config-detailed.html (Note): Tried to fix formatting, remove obsolete things, and correct some obvious errors. The formatting is still heinous. * admin/config.html: broken links pointed to old pages. Thanks to Steve Jacobs <sjacobs@fgm.com> for the report. 2002-03-19 Kriston Rehberg <Kriston@aol.com> * devel/tcl/api/thread.html: ns_atclose example removed per bug 229421. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014363� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/dbdrv.c�����������������������������������������������������������������������0000644�0001750�0001750�00000051324�10065331431�015623� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dbdrv.c -- * * Routines for handling the loadable db driver interface. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsdb/dbdrv.c,v 1.2 2004/06/20 15:54:01 seryakov Exp $, compiled: " __DATE__ " " __TIME__; #include "db.h" /* * The following typedefs define the functions provided by * loadable drivers. */ typedef int (InitProc) (char *server, char *module, char *driver); typedef char *(NameProc) (Ns_DbHandle *); typedef char *(TypeProc) (Ns_DbHandle *); typedef int (OpenProc) (Ns_DbHandle *); typedef void (CloseProc) (Ns_DbHandle *); typedef int (DMLProc) (Ns_DbHandle *, char *sql); typedef Ns_Set *(SelectProc) (Ns_DbHandle *, char *sql); typedef int (ExecProc) (Ns_DbHandle *, char *sql); typedef Ns_Set *(BindProc) (Ns_DbHandle *); typedef int (GetProc) (Ns_DbHandle *, Ns_Set *); typedef int (FlushProc) (Ns_DbHandle *); typedef int (CancelProc) (Ns_DbHandle *); typedef int (ResetProc) (Ns_DbHandle *); typedef int (SpStartProc) (Ns_DbHandle *handle, char *procname); typedef int (SpSetParamProc) (Ns_DbHandle *handle, char *args); typedef int (SpExecProc) (Ns_DbHandle *handle); typedef int (SpReturnCodeProc) (Ns_DbHandle *dbhandle, char *returnCode, int bufsize); typedef Ns_Set *(SpGetParamsProc) (Ns_DbHandle *handle); /* * The following structure specifies the driver-specific functions * to call for each Ns_Db routine. */ typedef struct DbDriver { char *name; int registered; InitProc *initProc; NameProc *nameProc; TypeProc *typeProc; OpenProc *openProc; CloseProc *closeProc; DMLProc *dmlProc; SelectProc *selectProc; ExecProc *execProc; BindProc *bindProc; GetProc *getProc; FlushProc *flushProc; CancelProc *cancelProc; ResetProc *resetProc; SpStartProc *spstartProc; SpSetParamProc *spsetparamProc; SpExecProc *spexecProc; SpReturnCodeProc *spreturncodeProc; SpGetParamsProc *spgetparamsProc; } DbDriver; /* * Static variables defined in this file */ static Tcl_HashTable driversTable; /* *---------------------------------------------------------------------- * * Ns_DbRegisterDriver -- * * Register db procs for a driver. This routine is called by * driver modules when loaded. * * Results: * NS_OK if procs registered, NS_ERROR otherwise. * * Side effects: * Driver structure is allocated and function pointers are set * to the given array of procs. * *---------------------------------------------------------------------- */ static void UnsupProcId(char *name) { Ns_Log(Warning, "dbdrv: unsupported function id '%s'", name); } int Ns_DbRegisterDriver(char *driver, Ns_DbProc *procs) { Tcl_HashEntry *hPtr; DbDriver *driverPtr = NULL; hPtr = Tcl_FindHashEntry(&driversTable, driver); if (hPtr == NULL) { Ns_Log(Error, "dbdrv: no such driver '%s'", driver); return NS_ERROR; } driverPtr = (DbDriver *) Tcl_GetHashValue(hPtr); if (driverPtr->registered) { Ns_Log(Error, "dbdrv: a driver is already registered as '%s'", driver); return NS_ERROR; } driverPtr->registered = 1; while (procs->func != NULL) { switch (procs->id) { case DbFn_ServerInit: driverPtr->initProc = (InitProc *) procs->func; break; case DbFn_Name: driverPtr->nameProc = (NameProc *) procs->func; break; case DbFn_DbType: driverPtr->typeProc = (TypeProc *) procs->func; break; case DbFn_OpenDb: driverPtr->openProc = (OpenProc *) procs->func; break; case DbFn_CloseDb: driverPtr->closeProc = (CloseProc *) procs->func; break; case DbFn_DML: driverPtr->dmlProc = (DMLProc *) procs->func; break; case DbFn_Select: driverPtr->selectProc = (SelectProc *) procs->func; break; case DbFn_GetRow: driverPtr->getProc = (GetProc *) procs->func; break; case DbFn_Flush: driverPtr->flushProc = (FlushProc *) procs->func; break; case DbFn_Cancel: driverPtr->cancelProc = (CancelProc *) procs->func; break; case DbFn_Exec: driverPtr->execProc = (ExecProc *) procs->func; break; case DbFn_BindRow: driverPtr->bindProc = (BindProc *) procs->func; break; case DbFn_ResetHandle: driverPtr->resetProc = (ResetProc *) procs->func; break; case DbFn_SpStart: driverPtr->spstartProc = (SpStartProc *) procs->func; break; case DbFn_SpSetParam: driverPtr->spsetparamProc = (SpSetParamProc *) procs->func; break; case DbFn_SpExec: driverPtr->spexecProc = (SpExecProc *) procs->func; break; case DbFn_SpReturnCode: driverPtr->spreturncodeProc = (SpReturnCodeProc *) procs->func; break; case DbFn_SpGetParams: driverPtr->spgetparamsProc = (SpGetParamsProc *) procs->func; break; /* * The following functions are no longer supported. */ case DbFn_End: UnsupProcId("End"); break; case DbFn_GetTableInfo: UnsupProcId("GetTableInfo"); break; case DbFn_TableList: UnsupProcId("TableList"); break; case DbFn_BestRowId: UnsupProcId("BestRowId"); break; default: Ns_Log(Error, "dbdrv: unknown driver id '%d'", procs->id); return NS_ERROR; break; } ++procs; } return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_DbDriverName -- * * Return the string name of the driver. * * Results: * String name. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DbDriverName(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); char *name = NULL; if (driverPtr != NULL && driverPtr->nameProc != NULL) { name = (*driverPtr->nameProc)(handle); } return name; } /* *---------------------------------------------------------------------- * * Ns_DbDriverType -- * * Return the string name of the database type (e.g., "sybase"). * * Results: * String name. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DbDriverDbType(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); if (driverPtr == NULL || driverPtr->typeProc == NULL || handle->connected == NS_FALSE) { return NULL; } return (*driverPtr->typeProc)(handle); } /* *---------------------------------------------------------------------- * * Ns_DbDML -- * * Execute an SQL statement which is expected to be DML. * * Results: * NS_OK or NS_ERROR. * * Side effects: * SQL is sent to database for evaluation. * *---------------------------------------------------------------------- */ int Ns_DbDML(Ns_DbHandle *handle, char *sql) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (driverPtr != NULL && handle->connected) { if (driverPtr->execProc != NULL) { status = Ns_DbExec(handle, sql); if (status == NS_DML) { status = NS_OK; } else { if (status == NS_ROWS) { Ns_DbSetException(handle, "NSDB", "Query was not a DML or DDL command."); Ns_DbFlush(handle); } status = NS_ERROR; } } else if (driverPtr->dmlProc != NULL) { status = (*driverPtr->dmlProc)(handle, sql); NsDbLogSql(handle, sql); } } return status; } /* *---------------------------------------------------------------------- * * Ns_DbSelect -- * * Execute an SQL statement which is expected to return rows. * * Results: * Pointer to Ns_Set of selected columns or NULL on error. * * Side effects: * SQL is sent to database for evaluation. * *---------------------------------------------------------------------- */ Ns_Set * Ns_DbSelect(Ns_DbHandle *handle, char *sql) { DbDriver *driverPtr = NsDbGetDriver(handle); Ns_Set *setPtr = NULL; if (driverPtr != NULL && handle->connected) { if (driverPtr->execProc != NULL) { if (Ns_DbExec(handle, sql) == NS_ROWS) { setPtr = Ns_DbBindRow(handle); } else { if(!handle->dsExceptionMsg.length) Ns_DbSetException(handle, "NSDB", "Query was not a statement returning rows."); } } else if (driverPtr->selectProc != NULL) { Ns_SetTrunc(handle->row, 0); setPtr = (*driverPtr->selectProc)(handle, sql); NsDbLogSql(handle, sql); } } return setPtr; } /* *---------------------------------------------------------------------- * * Ns_DbExec -- * * Execute an SQL statement. * * Results: * NS_DML, NS_ROWS, or NS_ERROR. * * Side effects: * SQL is sent to database for evaluation. * *---------------------------------------------------------------------- */ int Ns_DbExec(Ns_DbHandle *handle, char *sql) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->execProc != NULL) { status = (*driverPtr->execProc)(handle, sql); NsDbLogSql(handle, sql); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbBindRow -- * * Bind the column names from a pending result set. This routine * is normally called right after an Ns_DbExec if the result * was NS_ROWS. * * Results: * Pointer to Ns_Set. * * Side effects: * Column names of result rows are set in the Ns_Set. * *---------------------------------------------------------------------- */ Ns_Set * Ns_DbBindRow(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); Ns_Set *setPtr = NULL; if (handle->connected && driverPtr != NULL && driverPtr->bindProc != NULL) { Ns_SetTrunc(handle->row, 0); setPtr = (*driverPtr->bindProc)(handle); } return setPtr; } /* *---------------------------------------------------------------------- * * Ns_DbGetRow -- * * Fetch the next row waiting in a result set. This routine * is normally called repeatedly after an Ns_DbSelect or * an Ns_DbExec and Ns_DbBindRow. * * Results: * NS_END_DATA if there are no more rows, NS_OK or NS_ERROR * otherwise. * * Side effects: * The values of the given set are filled in with those of the * next row. * *---------------------------------------------------------------------- */ int Ns_DbGetRow(Ns_DbHandle *handle, Ns_Set *row) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->getProc != NULL) { status = (*driverPtr->getProc)(handle, row); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbFlush -- * * Flush rows pending in a result set. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Rows waiting in the result set are dumped, perhaps by simply * fetching them over one by one. * *---------------------------------------------------------------------- */ int Ns_DbFlush(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->flushProc != NULL) { status = (*driverPtr->flushProc)(handle); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbCancel -- * * Cancel the execution of a select and dump pending rows. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Depending on the driver, a running select call which executes * as rows are fetched may be interrupted. * *---------------------------------------------------------------------- */ int Ns_DbCancel(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->cancelProc != NULL) { status = (*driverPtr->cancelProc)(handle); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbResetHandle -- * * Reset a handle after a cancel operation. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Handle is available for new commands. * *---------------------------------------------------------------------- */ int Ns_DbResetHandle (Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->resetProc != NULL) { status = (*driverPtr->resetProc)(handle); } return status; } /* *---------------------------------------------------------------------- * * NsDbLoadDriver -- * * Load a database driver for one or more pools. * * Results: * Pointer to driver structure or NULL on error. * * Side effects: * Driver module file may be mapped into the process. * *---------------------------------------------------------------------- */ struct DbDriver * NsDbLoadDriver(char *driver) { Tcl_HashEntry *hPtr; char *module, *path; int new; DbDriver *driverPtr; static int initialized = NS_FALSE; if (initialized == NS_FALSE) { Tcl_InitHashTable(&driversTable, TCL_STRING_KEYS); initialized = NS_TRUE; } hPtr = Tcl_CreateHashEntry(&driversTable, driver, &new); if (new == 0) { driverPtr = (DbDriver *) Tcl_GetHashValue(hPtr); } else { driverPtr = ns_malloc(sizeof(DbDriver)); memset(driverPtr, 0, sizeof(DbDriver)); driverPtr->name = Tcl_GetHashKey(&driversTable, hPtr); Tcl_SetHashValue(hPtr, driverPtr); module = Ns_ConfigGetValue("ns/db/drivers", driver); if (module == NULL) { Ns_Log(Error, "dbdrv: no such driver '%s'", driver); } else { path = Ns_ConfigGetPath(NULL, NULL, "db", "driver", driver, NULL); if (Ns_ModuleLoad(driver, path, module, "Ns_DbDriverInit") != NS_OK) { Ns_Log(Error, "dbdrv: failed to load driver '%s'", driver); } } } if (driverPtr->registered == 0) { return NULL; } return driverPtr; } /* *---------------------------------------------------------------------- * * NsDbServerInit -- * * Invoke driver provided server init proc (e.g., to add driver * specific Tcl commands). * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsDbDriverInit(char *server, DbDriver *driverPtr) { if (driverPtr->initProc != NULL && ((*driverPtr->initProc) (server, "db", driverPtr->name)) != NS_OK) { Ns_Log(Warning, "dbdrv: init proc failed for driver '%s'", driverPtr->name); } } /* *---------------------------------------------------------------------- * * NsDbOpen -- * * Open a connection to the database. This routine is called * from the pool routines in dbinit.c. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Database may be connected by driver specific routine. * *---------------------------------------------------------------------- */ int NsDbOpen(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); Ns_Log(Notice, "dbdrv: opening database '%s:%s'", handle->driver, handle->datasource); if (driverPtr == NULL || driverPtr->openProc == NULL || (*driverPtr->openProc) (handle) != NS_OK) { Ns_Log(Error, "dbdrv: failed to open database '%s:%s'", handle->driver, handle->datasource); handle->connected = NS_FALSE; return NS_ERROR; } return NS_OK; } /* *---------------------------------------------------------------------- * * NsDbClose -- * * Close a connection to the database. This routine is called * from the pool routines in dbinit.c * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsDbClose(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); if (handle->connected && driverPtr != NULL && driverPtr->closeProc != NULL) { (*driverPtr->closeProc)(handle); } } /* *---------------------------------------------------------------------- * * Ns_DbSpStart -- * * Start execution of a stored procedure. * * Results: * NS_OK/NS_ERROR. * * Side effects: * Begins an SP; see Ns_DbSpExec. * *---------------------------------------------------------------------- */ int Ns_DbSpStart(Ns_DbHandle *handle, char *procname) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->spstartProc != NULL) { status = (*driverPtr->spstartProc)(handle, procname); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbSpSetParam -- * * Set a parameter in a store procedure; must have executed * Ns_DbSpStart first. paramname looks like "@x", paramtype is * like "int" or "varchar", inout is "in" or "out", value is * like "123". * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_DbSpSetParam(Ns_DbHandle *handle, char *paramname, char *paramtype, char *inout, char *value) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; Ns_DString args; if (handle->connected && driverPtr != NULL && driverPtr->spsetparamProc != NULL) { Ns_DStringInit(&args); Ns_DStringVarAppend(&args, paramname, " ", paramtype, " ", inout, " ", value, NULL); status = (*driverPtr->spsetparamProc)(handle, args.string); Ns_DStringFree(&args); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbSpExec -- * * Run an Sp begun with Ns_DbSpStart * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_DbSpExec(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->spexecProc != NULL) { status = (*driverPtr->spexecProc)(handle); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbSpReturnCode -- * * Get the return code from an SP after Ns_DbSpExec * * Results: * NS_OK/NSERROR * * Side effects: * The return code is put into the passed-in buffer, which must * be at least bufsize in length. * *---------------------------------------------------------------------- */ int Ns_DbSpReturnCode(Ns_DbHandle *handle, char *returnCode, int bufsize) { DbDriver *driverPtr = NsDbGetDriver(handle); int status = NS_ERROR; if (handle->connected && driverPtr != NULL && driverPtr->spreturncodeProc != NULL) { status = (*driverPtr->spreturncodeProc)(handle, returnCode, bufsize); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbSpGetParams -- * * Get output parameters after running an SP w/ Ns_DbSpExec. * * Results: * NULL or a newly allocated set with output params in it. * * Side effects: * Allocs its return value and its members. * *---------------------------------------------------------------------- */ Ns_Set * Ns_DbSpGetParams(Ns_DbHandle *handle) { DbDriver *driverPtr = NsDbGetDriver(handle); Ns_Set *aset = NULL; Ns_SetTrunc(handle->row, 0); if (handle->connected && driverPtr != NULL && driverPtr->spgetparamsProc != NULL) { aset = (*driverPtr->spgetparamsProc)(handle); } return aset; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/db.h��������������������������������������������������������������������������0000644�0001750�0001750�00000003606�10300725130�015107� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ #ifndef DB_H #define DB_H #define NSDB_EXPORTS #include "nsdb.h" extern void NsDbInitPools(void); extern void NsDbInitServer(char *server); extern Ns_TclInterpInitProc NsDbAddCmds; extern void NsDbClose(Ns_DbHandle *); extern void NsDbDisconnect(Ns_DbHandle *); extern struct DbDriver *NsDbGetDriver(Ns_DbHandle *); extern struct DbDriver *NsDbLoadDriver(char *driver); extern void NsDbLogSql(Ns_DbHandle *, char *sql); extern int NsDbOpen(Ns_DbHandle *); extern void NsDbDriverInit(char *server, struct DbDriver *); #endif ��������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/dbtcl.c�����������������������������������������������������������������������0000644�0001750�0001750�00000067630�10221646102�015617� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dbtcl.c -- * * Tcl database access routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsdb/dbtcl.c,v 1.6 2005/03/28 00:13:54 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "db.h" /* * The following structure maintains per-interp data. */ typedef struct InterpData { Tcl_Interp *interp; char *server; int cleanup; Tcl_HashTable dbs; } InterpData; /* * Local functions defined in this file */ static void EnterRow(Tcl_Interp *interp, Ns_Set *row, int flags, int *statusPtr); static void EnterHandle(InterpData *idataPtr, Tcl_Interp *interp, Ns_DbHandle *handle); static int GetHandle(InterpData *idataPtr, char *id, Ns_DbHandle **handle, int clear, Tcl_HashEntry **hPtrPtr); static int GetHandleObj(InterpData *idataPtr, Tcl_Obj *obj, Ns_DbHandle **handle, int clear, Tcl_HashEntry **hPtrPtr); static Tcl_InterpDeleteProc FreeData; static Ns_TclDeferProc ReleaseDbs; static Tcl_ObjCmdProc DbObjCmd; static Tcl_CmdProc QuoteListToListCmd, GetCsvCmd, DbErrorCodeCmd, DbErrorMsgCmd, GetCsvCmd, DbConfigPathCmd, PoolDescriptionCmd; static char *datakey = "nsdb:data"; /* *---------------------------------------------------------------------- * Ns_TclDbGetHandle -- * * Get database handle from its handle id. * * Results: * See GetHandle(). * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_TclDbGetHandle(Tcl_Interp *interp, char *id, Ns_DbHandle **handle) { InterpData *idataPtr; idataPtr = Tcl_GetAssocData(interp, datakey, NULL); if (idataPtr == NULL) { return TCL_ERROR; } return GetHandle(idataPtr, id, handle, 0, NULL); } /* *---------------------------------------------------------------------- * * NsDbAddCmds -- * * Add the nsdb commands. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsDbAddCmds(Tcl_Interp *interp, void *arg) { InterpData *idataPtr; /* * Initialize the per-interp data. */ idataPtr = ns_malloc(sizeof(InterpData)); idataPtr->server = arg; idataPtr->interp = interp; idataPtr->cleanup = 0; Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); Tcl_SetAssocData(interp, datakey, FreeData, idataPtr); Tcl_CreateObjCommand(interp, "ns_db", DbObjCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_quotelisttolist", QuoteListToListCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_getcsv", GetCsvCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_dberrorcode", DbErrorCodeCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_dberrormsg", DbErrorMsgCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_getcsv", GetCsvCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_dbconfigpath", DbConfigPathCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_pooldescription", PoolDescriptionCmd, idataPtr, NULL); return TCL_OK; } /* *---------------------------------------------------------------------- * * DbCmd -- * * Implement the AOLserver ns_db Tcl command. * * Results: * Return TCL_OK upon success and TCL_ERROR otherwise. * * Side effects: * Depends on the command. * *---------------------------------------------------------------------- */ static int DbObjCmd(ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { #define MAXHANDLES 4 InterpData *idataPtr = data; Ns_DbHandle *handle, **handlesPtrPtr, *staticHandles[MAXHANDLES]; Ns_Set *row; Tcl_HashEntry *hPtr; Tcl_Obj *resultPtr; char *arg, *pool, buf[32]; int timeout, nhandles, n, status; static CONST char *opts[] = { "getrow", "gethandle", "releasehandle", "select", "dml", "1row", "0or1row", "bindrow", "exec", "sp_exec", "sp_getparams", "sp_returncode", "sp_setparam", "sp_start", "exception", "flush", "bouncepool", "cancel", "connected", "datasource", "dbtype", "disconnect", "driver", "interpretsqlfile", "password", "poolname", "pools", "resethandle", "setexception", "user", "verbose", NULL }; enum { Db_getrowIdx, Db_gethandleIdx, Db_releasehandleIdx, Db_selectIdx, Db_dmlIdx, Db_1rowIdx, Db_0or1rowIdx, Db_bindrowIdx, Db_execIdx, Db_sp_execIdx, Db_sp_getparamsIdx, Db_sp_returncodeIdx, Db_sp_setparamIdx, Db_sp_startIdx, Db_exceptionIdx, Db_flushIdx, Db_bouncepoolIdx, Db_cancelIdx, Db_connectedIdx, Db_datasourceIdx, Db_dbtypeIdx, Db_disconnectIdx, Db_driverIdx, Db_interpretsqlfileIdx, Db_passwordIdx, Db_poolnameIdx, Db_poolsIdx, Db_resethandleIdx, Db_setexceptionIdx, Db_userIdx, Db_verboseIdx } opt; static CONST char *spopts[] = { "in", "out", NULL }; enum { Sp_inIdx, Sp_outIdx } spopt; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?args?"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 1, (int *) &opt) != TCL_OK) { return TCL_ERROR; } resultPtr = Tcl_GetObjResult(interp); handle = NULL; status = NS_OK; switch (opt) { /* * The following options require just a db arg and clears * any exception when getting the handle. */ case Db_bindrowIdx: case Db_cancelIdx: case Db_connectedIdx: case Db_datasourceIdx: case Db_dbtypeIdx: case Db_disconnectIdx: case Db_driverIdx: case Db_flushIdx: case Db_passwordIdx: case Db_poolnameIdx: case Db_releasehandleIdx: case Db_resethandleIdx: case Db_sp_execIdx: case Db_sp_getparamsIdx: case Db_sp_returncodeIdx: case Db_userIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "dbId"); return 0; } if (GetHandleObj(idataPtr, objv[2], &handle, 1, &hPtr) != TCL_OK) { return TCL_ERROR; } switch ((int) opt) { case Db_bindrowIdx: row = Ns_DbBindRow(handle); EnterRow(interp, row, NS_TCL_SET_STATIC, &status); break; case Db_cancelIdx: status = Ns_DbCancel(handle); break; case Db_connectedIdx: Tcl_SetBooleanObj(resultPtr, handle->connected); break; case Db_datasourceIdx: Tcl_SetResult(interp, handle->datasource, TCL_STATIC); break; case Db_dbtypeIdx: Tcl_SetResult(interp, Ns_DbDriverDbType(handle), TCL_STATIC); break; case Db_disconnectIdx: NsDbDisconnect(handle); break; case Db_driverIdx: Tcl_SetResult(interp, Ns_DbDriverName(handle), TCL_STATIC); break; case Db_flushIdx: status = Ns_DbFlush(handle); break; case Db_passwordIdx: Tcl_SetResult(interp, handle->password, TCL_VOLATILE); break; case Db_poolnameIdx: Tcl_SetResult(interp, handle->poolname, TCL_VOLATILE); break; case Db_releasehandleIdx: Tcl_DeleteHashEntry(hPtr); Ns_DbPoolPutHandle(handle); break; case Db_resethandleIdx: status = Ns_DbResetHandle(handle); if (status == NS_OK) { Tcl_SetIntObj(resultPtr, NS_OK); } break; case Db_sp_execIdx: status = Ns_DbSpExec(handle); if (status == NS_DML) { Tcl_SetResult(interp, "NS_DML", TCL_STATIC); } else if (status == NS_ROWS) { Tcl_SetResult(interp, "NS_ROWS", TCL_STATIC); } break; case Db_sp_getparamsIdx: row = Ns_DbSpGetParams(handle); EnterRow(interp, row, NS_TCL_SET_DYNAMIC, &status); break; case Db_sp_returncodeIdx: status = Ns_DbSpReturnCode(handle, buf, 32); if (status == NS_OK) { Tcl_SetResult(interp, buf, TCL_VOLATILE); } break; case Db_userIdx: Tcl_SetResult(interp, handle->user, TCL_VOLATILE); break; } break; /* * The following also requires just a db argument and * preserves any exception. */ case Db_exceptionIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "dbId"); return 0; } if (GetHandleObj(idataPtr, objv[2], &handle, 0, &hPtr) != TCL_OK) { return TCL_ERROR; } Tcl_AppendElement(interp, handle->cExceptionCode); Tcl_AppendElement(interp, handle->dsExceptionMsg.string); break; /* * The following options require a db and extra string arg and * clear any exception. */ case Db_0or1rowIdx: case Db_1rowIdx: case Db_dmlIdx: case Db_execIdx: case Db_getrowIdx: case Db_interpretsqlfileIdx: case Db_selectIdx: case Db_sp_startIdx: if (objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "dbId arg"); return 0; } if (GetHandleObj(idataPtr, objv[2], &handle, 1, &hPtr) != TCL_OK) { return TCL_ERROR; } arg = Tcl_GetString(objv[3]); switch ((int) opt) { case Db_0or1rowIdx: row = Ns_Db0or1Row(handle, arg, &n); if (row != NULL && n == 0) { Ns_SetFree(row); } else { EnterRow(interp, row, NS_TCL_SET_DYNAMIC, &status); } break; case Db_1rowIdx: row = Ns_Db1Row(handle, arg); EnterRow(interp, row, NS_TCL_SET_DYNAMIC, &status); break; case Db_dmlIdx: status = Ns_DbDML(handle, arg); break; case Db_execIdx: status = Ns_DbExec(handle, arg); if (status == NS_DML) { Tcl_SetResult(interp, "NS_DML", TCL_STATIC); } else if (status == NS_ROWS) { Tcl_SetResult(interp, "NS_ROWS", TCL_STATIC); } break; case Db_getrowIdx: if (Ns_TclGetSet2(interp, arg, &row) != TCL_OK) { return TCL_ERROR; } status = Ns_DbGetRow(handle, row); if (status == NS_OK) { Tcl_SetBooleanObj(resultPtr, 1); } else if (status == NS_END_DATA) { Tcl_SetBooleanObj(resultPtr, 0); } break; case Db_interpretsqlfileIdx: status = Ns_DbInterpretSqlFile(handle, arg); break; case Db_selectIdx: row = Ns_DbSelect(handle, arg); EnterRow(interp, row, NS_TCL_SET_STATIC, &status); break; case Db_sp_startIdx: status = Ns_DbSpStart(handle, arg); if (status == NS_OK) { Tcl_SetBooleanObj(resultPtr, 0); } break; } break; /* * The remaining options requiring specific args. */ case Db_sp_setparamIdx: if (objc != 7) { Tcl_WrongNumArgs(interp, 2, objv, "dbId paramname type in|out value"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[5], spopts, "option", 0, (int *) &spopt) != TCL_OK) { return TCL_ERROR; } if (GetHandleObj(idataPtr, objv[2], &handle, 1, &hPtr) != TCL_OK) { return TCL_ERROR; } status = Ns_DbSpSetParam(handle, Tcl_GetString(objv[3]), Tcl_GetString(objv[4]), spopts[spopt], Tcl_GetString(objv[6])); if (status == NS_OK) { Tcl_SetBooleanObj(resultPtr, 1); } break; case Db_gethandleIdx: timeout = -1; if (objc >= 4) { arg = Tcl_GetString(objv[2]); if (STREQ(arg, "-timeout")) { if (Tcl_GetIntFromObj(interp, objv[3], &timeout) != TCL_OK) { return TCL_ERROR; } objv += 2; objc -= 2; } else if (objc > 4) { Tcl_WrongNumArgs(interp, 2, objv, "?-timeout seconds? ?pool? ?nhandles?"); return TCL_ERROR; } } objv += 2; objc -= 2; /* * Determine the pool and requested number of handles * from the remaining args. */ if (objc > 0) { pool = Tcl_GetString(objv[0]); } else { pool = Ns_DbPoolDefault(idataPtr->server); if (pool == NULL) { Tcl_SetResult(interp, "no defaultpool configured", TCL_STATIC); return TCL_ERROR; } } if (Ns_DbPoolAllowable(idataPtr->server, pool) == NS_FALSE) { Tcl_AppendResult(interp, "no access to pool: \"", pool, "\"", NULL); return TCL_ERROR; } if (objc < 2) { nhandles = 1; } else { if (Tcl_GetIntFromObj(interp, objv[1], &nhandles) != TCL_OK) { return TCL_ERROR; } if (nhandles <= 0) { Tcl_AppendResult(interp, "invalid nhandles: \"", Tcl_GetString(objv[1]), "\": should be greater than 0.", NULL); return TCL_ERROR; } } /* * Allocate handles and enter them into Tcl. */ if (nhandles > MAXHANDLES) { handlesPtrPtr = ns_malloc(nhandles * sizeof(Ns_DbHandle *)); } else { handlesPtrPtr = staticHandles; } status = Ns_DbPoolTimedGetMultipleHandles(handlesPtrPtr, pool, nhandles, timeout); if (status == NS_OK) { while (--nhandles >= 0) { EnterHandle(idataPtr, interp, handlesPtrPtr[nhandles]); } } if (handlesPtrPtr != staticHandles) { ns_free(handlesPtrPtr); } if (status != NS_TIMEOUT && status != NS_OK) { sprintf(buf, "%d", nhandles); Tcl_AppendResult(interp, "could not allocate ", buf, " handle(s) from pool \"", pool, "\"", NULL); return TCL_ERROR; } break; case Db_bouncepoolIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "pool"); return TCL_ERROR; } status = Ns_DbBouncePool(Tcl_GetString(objv[2])); break; case Db_poolsIdx: if (objc > 2) { Tcl_WrongNumArgs(interp, 2, objv, NULL); return TCL_ERROR; } pool = Ns_DbPoolList(idataPtr->server); if (pool != NULL) { while (*pool != '\0') { Tcl_AppendElement(interp, pool); pool = pool + strlen(pool) + 1; } } break; case Db_setexceptionIdx: if (objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "dbId code message"); return TCL_ERROR; } if (GetHandleObj(idataPtr, objv[2], &handle, 1, NULL) != TCL_OK) { return TCL_ERROR; } arg = Tcl_GetStringFromObj(objv[3], &n); if (n > 5) { Tcl_AppendResult(interp, "code \"", arg, "\" more than 5 characters", NULL); return TCL_ERROR; } Ns_DbSetException(handle, arg, Tcl_GetString(objv[4])); break; case Db_verboseIdx: if (objc != 3 && objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "dbId ?bool?"); return TCL_ERROR; } if (GetHandleObj(idataPtr, objv[2], &handle, 1, NULL) != TCL_OK) { return TCL_ERROR; } if (objc == 4) { if (Tcl_GetBooleanFromObj(interp, objv[3], &n) != TCL_OK) { return TCL_ERROR; } handle->verbose = n; } Tcl_SetIntObj(resultPtr, handle->verbose); break; } if (status == NS_ERROR) { Tcl_AppendResult(interp, "Database operation \"", opts[opt], "\" failed", NULL); if (handle != NULL && handle->cExceptionCode[0] != '\0') { Tcl_AppendResult(interp, " (exception ", handle->cExceptionCode, NULL); if (handle->dsExceptionMsg.length > 0) { Tcl_AppendResult(interp, ", \"", handle->dsExceptionMsg.string, "\"", NULL); } Tcl_AppendResult(interp, ")", NULL); } return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * DbErrorCodeCmd -- * * Get database exception code for the database handle. * * Results: * Returns TCL_OK and database exception code is set as Tcl result * or TCL_ERROR if failure. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ErrorCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv, int cmd) { InterpData *idataPtr = arg; Ns_DbHandle *handle; if (argc != 2) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " dbId\"", NULL); return TCL_ERROR; } if (GetHandle(idataPtr, (char*) argv[1], &handle, 0, NULL) != TCL_OK) { return TCL_ERROR; } if (cmd == 'c') { Tcl_SetResult(interp, handle->cExceptionCode, TCL_VOLATILE); } else { Tcl_SetResult(interp, handle->dsExceptionMsg.string, TCL_VOLATILE); } return TCL_OK; } static int DbErrorCodeCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { return ErrorCmd(arg, interp, argc, argv, 'c'); } static int DbErrorMsgCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { return ErrorCmd(arg, interp, argc, argv, 'm'); } /* *---------------------------------------------------------------------- * DbConfigPathCmd -- * * Get the database section name from the configuration file. * * Results: * TCL_OK and the database section name is set as the Tcl result * or TCL_ERROR if failure. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbConfigPathCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { InterpData *idataPtr = arg; char *section; if (argc != 1) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], "\"", NULL); return TCL_ERROR; } section = Ns_ConfigGetPath(idataPtr->server, NULL, "db", NULL); Tcl_SetResult(interp, section, TCL_STATIC); return TCL_OK; } /* *---------------------------------------------------------------------- * PoolDescriptionCmd -- * * Get the pool's description string. * * Results: * Return TCL_OK and the pool's description string is set as the * Tcl result string or TCL_ERROR if failure. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int PoolDescriptionCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { if (argc != 2) { Tcl_AppendResult(interp, "wrong # of args: should be \"", (char*)argv[0], " poolname\"", NULL); return TCL_ERROR; } Tcl_SetResult(interp, Ns_DbPoolDescription((char*)argv[1]),TCL_STATIC); return TCL_OK; } /* *---------------------------------------------------------------------- * QuoteListToListCmd -- * * Remove space, \ and ' characters in a string. * * Results: * TCL_OK and set the stripped string as the Tcl result or TCL_ERROR * if failure. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int QuoteListToListCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { char *quotelist; int inquotes; Ns_DString ds; if (argc != 2) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " quotelist\"", NULL); return TCL_ERROR; } quotelist = (char*)argv[1]; inquotes = NS_FALSE; Ns_DStringInit(&ds); while (*quotelist != '\0') { if (isspace(UCHAR(*quotelist)) && inquotes == NS_FALSE) { if (ds.length != 0) { Tcl_AppendElement(interp, ds.string); Ns_DStringTrunc(&ds, 0); } while (isspace(UCHAR(*quotelist))) { quotelist++; } } else if (*quotelist == '\\' && (*(quotelist + 1) != '\0')) { Ns_DStringNAppend(&ds, quotelist + 1, 1); quotelist += 2; } else if (*quotelist == '\'') { if (inquotes) { /* Finish element */ Tcl_AppendElement(interp, ds.string); Ns_DStringTrunc(&ds, 0); inquotes = NS_FALSE; } else { /* Start element */ inquotes = NS_TRUE; } quotelist++; } else { Ns_DStringNAppend(&ds, quotelist, 1); quotelist++; } } if (ds.length != 0) { Tcl_AppendElement(interp, ds.string); } Ns_DStringFree(&ds); return TCL_OK; } /* *---------------------------------------------------------------------- * * GetCsvCmd -- * * Implement the ns_getcvs command to read a line from a CSV file * and parse the results into a Tcl list variable. * * Results: * A standard Tcl result. * * Side effects: * One line is read for given open channel. * *---------------------------------------------------------------------- */ static int GetCsvCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { int ncols, inquote, quoted, blank; char c, *p, buf[20]; const char *result; Tcl_DString line, cols, elem; Tcl_Channel chan; if (argc != 3) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " fileId varName\"", NULL); return TCL_ERROR; } if (Ns_TclGetOpenChannel(interp, (char*)argv[1], 0, 0, &chan) == TCL_ERROR) { return TCL_ERROR; } Tcl_DStringInit(&line); if (Tcl_Gets(chan, &line) < 0) { Tcl_DStringFree(&line); if (!Tcl_Eof(chan)) { Tcl_AppendResult(interp, "could not read from ", argv[1], ": ", Tcl_PosixError(interp), NULL); return TCL_ERROR; } Tcl_SetResult(interp, "-1", TCL_STATIC); return TCL_OK; } Tcl_DStringInit(&cols); Tcl_DStringInit(&elem); ncols = 0; inquote = 0; quoted = 0; blank = 1; p = line.string; while (*p != '\0') { c = *p++; loopstart: if (inquote) { if (c == '"') { c = *p++; if (c == '\0') { break; } if (c == '"') { Tcl_DStringAppend(&elem, &c, 1); } else { inquote = 0; goto loopstart; } } else { Tcl_DStringAppend(&elem, &c, 1); } } else { if ((c == '\n') || (c == '\r')) { while ((c = *p++) != '\0') { if ((c != '\n') && (c != '\r')) { --p; break; } } break; } if (c == '"') { inquote = 1; quoted = 1; blank = 0; } else if ((c == '\r') || (elem.length == 0 && isspace(UCHAR(c)))) { continue; } else if (c == ',') { if (!quoted) { Ns_StrTrimRight(elem.string); } Tcl_DStringAppendElement(&cols, elem.string); Tcl_DStringTrunc(&elem, 0); ncols++; quoted = 0; } else { blank = 0; Tcl_DStringAppend(&elem, &c, 1); } } } if (!quoted) { Ns_StrTrimRight(elem.string); } if (!blank) { Tcl_DStringAppendElement(&cols, elem.string); ncols++; } result = Tcl_SetVar(interp, argv[2], cols.string, TCL_LEAVE_ERR_MSG); Tcl_DStringFree(&line); Tcl_DStringFree(&cols); Tcl_DStringFree(&elem); if (result == NULL) { return TCL_ERROR; } sprintf(buf, "%d", ncols); Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_OK; } /* *---------------------------------------------------------------------- * GetHandle, GetHandleObj -- * * Get database handle from its handle id. * * Results: * Return TCL_OK if handle is found or TCL_ERROR otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int GetHandle(InterpData *idataPtr, char *id, Ns_DbHandle **handlePtr, int clear, Tcl_HashEntry **hPtrPtr) { Ns_DbHandle *handle; Tcl_HashEntry *hPtr; hPtr = Tcl_FindHashEntry(&idataPtr->dbs, id); if (hPtr == NULL) { Tcl_AppendResult(idataPtr->interp, "invalid database id: \"", id, "\"", NULL); return TCL_ERROR; } handle = (Ns_DbHandle *) Tcl_GetHashValue(hPtr); if (clear) { Ns_DStringFree(&handle->dsExceptionMsg); handle->cExceptionCode[0] = '\0'; } if (hPtrPtr != NULL) { *hPtrPtr = hPtr; } if (handlePtr != NULL) { *handlePtr = handle; } return TCL_OK; } static int GetHandleObj(InterpData *idataPtr, Tcl_Obj *obj, Ns_DbHandle **handlePtr, int clear, Tcl_HashEntry **hPtrPtr) { return GetHandle(idataPtr, Tcl_GetString(obj), handlePtr, clear, hPtrPtr); } /* *---------------------------------------------------------------------- * EnterHandle -- * * Enter a database handle and create its handle id. * * Results: * The database handle id is returned as a Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void EnterHandle(InterpData *idataPtr, Tcl_Interp *interp, Ns_DbHandle *handle) { Tcl_HashEntry *hPtr; int new, next; char buf[100]; if (!idataPtr->cleanup) { Ns_TclRegisterDeferred(interp, ReleaseDbs, idataPtr); idataPtr->cleanup = 1; } next = idataPtr->dbs.numEntries; do { sprintf(buf, "nsdb%x", next++); hPtr = Tcl_CreateHashEntry(&idataPtr->dbs, buf, &new); } while (!new); Tcl_AppendElement(interp, buf); Tcl_SetHashValue(hPtr, handle); } /* *---------------------------------------------------------------------- * FreeData -- * * Free per-interp data at interp delete time. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void FreeData(ClientData arg, Tcl_Interp *interp) { InterpData *idataPtr = arg; Tcl_DeleteHashTable(&idataPtr->dbs); ns_free(idataPtr); } /* *---------------------------------------------------------------------- * ReleaseDbs -- * * Release any database handles still held. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void ReleaseDbs(Tcl_Interp *interp, void *arg) { Ns_DbHandle *handle; Tcl_HashEntry *hPtr; Tcl_HashSearch search; InterpData *idataPtr = arg; hPtr = Tcl_FirstHashEntry(&idataPtr->dbs, &search); while (hPtr != NULL) { handle = Tcl_GetHashValue(hPtr); Ns_DbPoolPutHandle(handle); hPtr = Tcl_NextHashEntry(&search); } Tcl_DeleteHashTable(&idataPtr->dbs); Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); idataPtr->cleanup = 0; } /* *---------------------------------------------------------------------- * EnterRow -- * * Enter a db row set into interp. * * Results: * None. * * Side effects: * Will set *statusPtr to NS_ERROR if row is null. * *---------------------------------------------------------------------- */ static void EnterRow(Tcl_Interp *interp, Ns_Set *row, int flags, int *statusPtr) { if (row == NULL) { *statusPtr = NS_ERROR; } else { Ns_TclEnterSet(interp, row, flags); *statusPtr = NS_OK; } } ��������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/Makefile����������������������������������������������������������������������0000644�0001750�0001750�00000003054�10300725025�016011� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsdb/Makefile,v 1.5 2005/08/17 21:20:21 jgdavidson Exp $ HDRS = db.h MOD = nsdb OBJS = dbinit.o dbdrv.o dbtcl.o dbutil.o nsdb.o MODINIT = NsDb_ModInit include ../include/ns.mak ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/dbinit.c����������������������������������������������������������������������0000644�0001750�0001750�00000070345�10010501175�015771� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dbinit.c -- * * This file contains routines for creating and accessing * pools of database handles. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsdb/dbinit.c,v 1.5 2004/02/05 17:50:53 dossy Exp $, compiled: " __DATE__ " " __TIME__; #include "db.h" /* * The following structure defines a database pool. */ struct Handle; typedef struct Pool { char *name; char *desc; char *source; char *user; char *pass; int type; Ns_Mutex lock; Ns_Cond waitCond; Ns_Cond getCond; char *driver; struct DbDriver *driverPtr; int waiting; int nhandles; struct Handle *firstPtr; struct Handle *lastPtr; int fVerbose; int fVerboseError; time_t maxidle; time_t maxopen; int stale_on_close; } Pool; /* * The following structure defines the internal * state of a database handle. */ typedef struct Handle { char *driver; char *datasource; char *user; char *password; void *connection; char *poolname; int connected; int verbose; Ns_Set *row; char cExceptionCode[6]; Ns_DString dsExceptionMsg; void *context; void *statement; int fetchingRows; /* Members above must match Ns_DbHandle */ struct Handle *nextPtr; struct Pool *poolPtr; time_t otime; time_t atime; int stale; int stale_on_close; } Handle; /* * The following structure maintains per-server data. */ typedef struct ServData { char *defpool; char *allowed; } ServData; /* * Local functions defined in this file */ static Pool *GetPool(char *pool); static void ReturnHandle(Handle * handle); static int IsStale(Handle *, time_t now); static int Connect(Handle *); static Pool *CreatePool(char *pool, char *path, char *driver); static int IncrCount(Pool *poolPtr, int incr); static ServData *GetServer(char *server); static Ns_TlsCleanup FreeTable; static Ns_Callback CheckPool; static Ns_ArgProc CheckArgProc; /* * Static variables defined in this file */ static Tcl_HashTable poolsTable; static Tcl_HashTable serversTable; static Ns_Tls tls; /* *---------------------------------------------------------------------- * * Ns_DbPoolDescription -- * * Return the pool's description string. * * Results: * Configured description string or NULL. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DbPoolDescription(char *pool) { Pool *poolPtr; poolPtr = GetPool(pool); if (poolPtr == NULL) { return NULL; } return poolPtr->desc; } /* *---------------------------------------------------------------------- * * Ns_DbPoolDefault -- * * Return the default pool. * * Results: * String name of default pool or NULL if no default is defined. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DbPoolDefault(char *server) { ServData *sdataPtr = GetServer(server); return (sdataPtr ? sdataPtr->defpool : NULL); } /* *---------------------------------------------------------------------- * * Ns_DbPoolList -- * * Return the list of all pools. * * Results: * Double-null terminated list of pool names. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_DbPoolList(char *server) { ServData *sdataPtr = GetServer(server); return (sdataPtr ? sdataPtr->allowed : NULL); } /* *---------------------------------------------------------------------- * * Ns_DbPoolAllowable -- * * Check that access is allowed to a pool. * * Results: * NS_TRUE if allowed, NS_FALSE otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_DbPoolAllowable(char *server, char *pool) { register char *p; p = Ns_DbPoolList(server); if (p != NULL) { while (*p != '\0') { if (STREQ(pool, p)) { return NS_TRUE; } p = p + strlen(p) + 1; } } return NS_FALSE; } /* *---------------------------------------------------------------------- * * Ns_DbPoolPutHandle -- * * Cleanup and then return a handle to its pool. * * Results: * None. * * Side effects: * Handle is flushed, reset, and possibly closed as required. * *---------------------------------------------------------------------- */ void Ns_DbPoolPutHandle(Ns_DbHandle *handle) { Handle *handlePtr; Pool *poolPtr; time_t now; handlePtr = (Handle *) handle; poolPtr = handlePtr->poolPtr; /* * Cleanup the handle. */ Ns_DbFlush(handle); Ns_DbResetHandle(handle); Ns_DStringFree(&handle->dsExceptionMsg); handle->cExceptionCode[0] = '\0'; /* * Close the handle if it's stale, otherwise update * the last access time. */ time(&now); if (IsStale(handlePtr, now)) { NsDbDisconnect(handle); } else { handlePtr->atime = now; } IncrCount(poolPtr, -1); Ns_MutexLock(&poolPtr->lock); ReturnHandle(handlePtr); if (poolPtr->waiting) { Ns_CondSignal(&poolPtr->getCond); } Ns_MutexUnlock(&poolPtr->lock); } /* *---------------------------------------------------------------------- * * Ns_DbPoolTimedGetHandle -- * * Return a single handle from a pool within the given number of * seconds. * * Results: * Pointer to Ns_DbHandle or NULL on error or timeout. * * Side effects: * Database may be opened if needed. * *---------------------------------------------------------------------- */ Ns_DbHandle * Ns_DbPoolTimedGetHandle(char *pool, int wait) { Ns_DbHandle *handle; if (Ns_DbPoolTimedGetMultipleHandles(&handle, pool, 1, wait) != NS_OK) { return NULL; } return handle; } /* *---------------------------------------------------------------------- * * Ns_DbPoolGetHandle -- * * Return a single handle from a pool. * * Results: * Pointer to Ns_DbHandle or NULL on error. * * Side effects: * Database may be opened if needed. * *---------------------------------------------------------------------- */ Ns_DbHandle * Ns_DbPoolGetHandle(char *pool) { return Ns_DbPoolTimedGetHandle(pool, 0); } /* *---------------------------------------------------------------------- * * Ns_DbPoolGetMultipleHandles -- * * Return 1 or more handles from a pool. * * Results: * NS_OK if handles were allocated, NS_ERROR otherwise. * * Side effects: * Given array of handles is updated with pointers to allocated * handles. Also, database may be opened if needed. * *---------------------------------------------------------------------- */ int Ns_DbPoolGetMultipleHandles(Ns_DbHandle **handles, char *pool, int nwant) { return Ns_DbPoolTimedGetMultipleHandles(handles, pool, nwant, 0); } /* *---------------------------------------------------------------------- * * Ns_DbPoolTimedGetMultipleHandles -- * * Return 1 or more handles from a pool within the given number * of seconds. * * Results: * NS_OK if the handlers where allocated, NS_TIMEOUT if the * thread could not wait long enough for the handles, NS_ERROR * otherwise. * * Side effects: * Given array of handles is updated with pointers to allocated * handles. Also, database may be opened if needed. * *---------------------------------------------------------------------- */ int Ns_DbPoolTimedGetMultipleHandles(Ns_DbHandle **handles, char *pool, int nwant, int wait) { Handle *handlePtr; Handle **handlesPtrPtr = (Handle **) handles; Pool *poolPtr; Ns_Time timeout, *timePtr; int i, ngot, status; /* * Verify the pool, the number of available handles in the pool, * and that the calling thread does not already own handles from * this pool. */ poolPtr = GetPool(pool); if (poolPtr == NULL) { Ns_Log(Error, "dbinit: no such pool '%s'", pool); return NS_ERROR; } if (poolPtr->nhandles < nwant) { Ns_Log(Error, "dbinit: " "failed to get %d handles from a db pool of only %d handles: '%s'", nwant, poolPtr->nhandles, pool); return NS_ERROR; } ngot = IncrCount(poolPtr, nwant); if (ngot > 0) { Ns_Log(Error, "dbinit: db handle limit exceeded: " "thread already owns %d handle%s from pool '%s'", ngot, ngot == 1 ? "" : "s", pool); IncrCount(poolPtr, -nwant); return NS_ERROR; } /* * Wait until this thread can be the exclusive thread aquireing * handles and then wait until all requested handles are available, * watching for timeout in either of these waits. */ if (wait < 0) { timePtr = NULL; } else { Ns_GetTime(&timeout); Ns_IncrTime(&timeout, wait, 0); timePtr = &timeout; } status = NS_OK; Ns_MutexLock(&poolPtr->lock); while (status == NS_OK && poolPtr->waiting) { status = Ns_CondTimedWait(&poolPtr->waitCond, &poolPtr->lock, timePtr); } if (status == NS_OK) { poolPtr->waiting = 1; while (status == NS_OK && ngot < nwant) { while (status == NS_OK && poolPtr->firstPtr == NULL) { status = Ns_CondTimedWait(&poolPtr->getCond, &poolPtr->lock, timePtr); } if (poolPtr->firstPtr != NULL) { handlePtr = poolPtr->firstPtr; poolPtr->firstPtr = handlePtr->nextPtr; handlePtr->nextPtr = NULL; if (poolPtr->lastPtr == handlePtr) { poolPtr->lastPtr = NULL; } handlesPtrPtr[ngot++] = handlePtr; } } poolPtr->waiting = 0; Ns_CondSignal(&poolPtr->waitCond); } Ns_MutexUnlock(&poolPtr->lock); /* * Handle special race condition where the final requested handle * arrived just as the condition wait was timing out. */ if (status == NS_TIMEOUT && ngot == nwant) { status = NS_OK; } /* * If status is still ok, connect any handles not already connected, * otherwise return any allocated handles back to the pool, then * update the final number of handles owned by this thread. */ for (i = 0; status == NS_OK && i < ngot; ++i) { handlePtr = handlesPtrPtr[i]; if (handlePtr->connected == NS_FALSE) { status = Connect(handlePtr); } } if (status != NS_OK) { Ns_MutexLock(&poolPtr->lock); while (ngot > 0) { ReturnHandle(handlesPtrPtr[--ngot]); } if (poolPtr->waiting) { Ns_CondSignal(&poolPtr->getCond); } Ns_MutexUnlock(&poolPtr->lock); IncrCount(poolPtr, -nwant); } return status; } /* *---------------------------------------------------------------------- * * Ns_DbBouncePool -- * * Close all handles in the pool. * * Results: * NS_OK if pool was bounce, NS_ERROR otherwise. * * Side effects: * Handles are all marked stale and then closed by CheckPool. * *---------------------------------------------------------------------- */ int Ns_DbBouncePool(char *pool) { Pool *poolPtr; Handle *handlePtr; poolPtr = GetPool(pool); if (poolPtr == NULL) { return NS_ERROR; } Ns_MutexLock(&poolPtr->lock); poolPtr->stale_on_close++; handlePtr = poolPtr->firstPtr; while (handlePtr != NULL) { if (handlePtr->connected) { handlePtr->stale = 1; } handlePtr->stale_on_close = poolPtr->stale_on_close; handlePtr = handlePtr->nextPtr; } Ns_MutexUnlock(&poolPtr->lock); CheckPool(poolPtr); return NS_OK; } /* *---------------------------------------------------------------------- * * NsDbInitPools -- * * Initialize the database pools at startup. * * Results: * None. * * Side effects: * Pools may be created as configured. * *---------------------------------------------------------------------- */ void NsDbInitPools(void) { Tcl_HashEntry *hPtr; Pool *poolPtr; Ns_Set *pools; char *path, *pool, *driver; int new, i; Ns_TlsAlloc(&tls, FreeTable); /* * Attempt to create each database pool. */ Tcl_InitHashTable(&serversTable, TCL_STRING_KEYS); Tcl_InitHashTable(&poolsTable, TCL_STRING_KEYS); pools = Ns_ConfigGetSection("ns/db/pools"); for (i = 0; pools != NULL && i < Ns_SetSize(pools); ++i) { pool = Ns_SetKey(pools, i); hPtr = Tcl_CreateHashEntry(&poolsTable, pool, &new); if (!new) { Ns_Log(Error, "dbinit: duplicate pool: %s", pool); continue; } path = Ns_ConfigGetPath(NULL, NULL, "db", "pool", pool, NULL); driver = Ns_ConfigGetValue(path, "driver"); poolPtr = CreatePool(pool, path, driver); if (poolPtr == NULL) { Tcl_DeleteHashEntry(hPtr); } else { Tcl_SetHashValue(hPtr, poolPtr); } } Ns_RegisterProcInfo(CheckPool, "nsdb:check", CheckArgProc); } /* *---------------------------------------------------------------------- * * NsDbInitServer -- * * Initialize a virtual server allowed and default options. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsDbInitServer(char *server) { Pool *poolPtr; ServData *sdataPtr; Tcl_HashEntry *hPtr; Tcl_HashSearch search; char *path, *pool, *p; Ns_DString ds; int new; path = Ns_ConfigGetPath(server, NULL, "db", NULL); /* * Verify the default pool exists, if any. */ sdataPtr = ns_malloc(sizeof(ServData)); hPtr = Tcl_CreateHashEntry(&serversTable, server, &new); Tcl_SetHashValue(hPtr, sdataPtr); sdataPtr->defpool = Ns_ConfigGetValue(path, "defaultpool"); if (sdataPtr->defpool != NULL && (Tcl_FindHashEntry(&poolsTable, sdataPtr->defpool) == NULL)) { Ns_Log(Error, "dbinit: no such default pool '%s'", sdataPtr->defpool); sdataPtr->defpool = NULL; } /* * Construct the allowed list and call the server-specific init. */ sdataPtr->allowed = ""; pool = Ns_ConfigGetValue(path, "pools"); if (pool != NULL && poolsTable.numEntries > 0) { Ns_DStringInit(&ds); if (STREQ(pool, "*")) { hPtr = Tcl_FirstHashEntry(&poolsTable, &search); while (hPtr != NULL) { poolPtr = Tcl_GetHashValue(hPtr); NsDbDriverInit(server, poolPtr->driverPtr); Ns_DStringAppendArg(&ds, poolPtr->name); hPtr = Tcl_NextHashEntry(&search); } } else { p = pool; while (p != NULL && *p != '\0') { p = strchr(pool, ','); if (p != NULL) { *p = '\0'; } hPtr = Tcl_FindHashEntry(&poolsTable, pool); if (hPtr != NULL) { poolPtr = Tcl_GetHashValue(hPtr); NsDbDriverInit(server, poolPtr->driverPtr); Ns_DStringAppendArg(&ds, poolPtr->name); } if (p != NULL) { *p++ = ','; } pool = p; } } sdataPtr->allowed = ns_malloc((size_t)(ds.length + 1)); memcpy(sdataPtr->allowed, ds.string, (size_t)(ds.length + 1)); Ns_DStringFree(&ds); } } /* *---------------------------------------------------------------------- * * NsDbDisconnect -- * * Disconnect a handle by closing the database if needed. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsDbDisconnect(Ns_DbHandle *handle) { Handle *handlePtr = (Handle *) handle; NsDbClose(handle); handlePtr->connected = NS_FALSE; handlePtr->atime = handlePtr->otime = 0; handlePtr->stale = NS_FALSE; } /* *---------------------------------------------------------------------- * * NsDbLogSql -- * * Log a SQL statement depending on the verbose state of the * handle. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsDbLogSql(Ns_DbHandle *handle, char *sql) { Handle *handlePtr = (Handle *) handle; if (handle->dsExceptionMsg.length > 0) { if (handlePtr->poolPtr->fVerboseError || handle->verbose) { Ns_Log(Error, "dbinit: error(%s,%s): '%s'", handle->datasource, handle->dsExceptionMsg.string, sql); } } else if (handle->verbose) { Ns_Log(Notice, "dbinit: sql(%s): '%s'", handle->datasource, sql); } } /* *---------------------------------------------------------------------- * * NsDbGetDriver -- * * Return a pointer to the driver structure for a handle. * * Results: * Pointer to driver or NULL on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ struct DbDriver * NsDbGetDriver(Ns_DbHandle *handle) { Handle *handlePtr = (Handle *) handle; if (handlePtr != NULL && handlePtr->poolPtr != NULL) { return handlePtr->poolPtr->driverPtr; } return NULL; } /* *---------------------------------------------------------------------- * * GetPool -- * * Return the Pool structure for the given pool name. * * Results: * Pointer to Pool structure or NULL if pool does not exist. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Pool * GetPool(char *pool) { Tcl_HashEntry *hPtr; hPtr = Tcl_FindHashEntry(&poolsTable, pool); if (hPtr == NULL) { return NULL; } return (Pool *) Tcl_GetHashValue(hPtr); } /* *---------------------------------------------------------------------- * * ReturnHandle -- * * Return a handle to its pool. Connected handles are pushed on * the front of the list, disconnected handles are appened to * the end. * * Results: * None. * * Side effects: * Handle is returned to the pool. Note: The pool lock must be * held by the caller and this function does not signal a thread * waiting for handles. * *---------------------------------------------------------------------- */ static void ReturnHandle(Handle *handlePtr) { Pool *poolPtr; poolPtr = handlePtr->poolPtr; if (poolPtr->firstPtr == NULL) { poolPtr->firstPtr = poolPtr->lastPtr = handlePtr; handlePtr->nextPtr = NULL; } else if (handlePtr->connected) { handlePtr->nextPtr = poolPtr->firstPtr; poolPtr->firstPtr = handlePtr; } else { poolPtr->lastPtr->nextPtr = handlePtr; poolPtr->lastPtr = handlePtr; handlePtr->nextPtr = NULL; } } /* *---------------------------------------------------------------------- * * IsStale -- * * Check to see if a handle is stale. * * Results: * NS_TRUE if handle stale, NS_FALSE otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int IsStale(Handle *handlePtr, time_t now) { time_t minAccess, minOpen; if (handlePtr->connected) { minAccess = now - handlePtr->poolPtr->maxidle; minOpen = now - handlePtr->poolPtr->maxopen; if ((handlePtr->poolPtr->maxidle && handlePtr->atime < minAccess) || (handlePtr->poolPtr->maxopen && (handlePtr->otime < minOpen)) || (handlePtr->stale == NS_TRUE) || (handlePtr->poolPtr->stale_on_close > handlePtr->stale_on_close)) { if (handlePtr->poolPtr->fVerbose) { Ns_Log(Notice, "dbinit: closing %s handle in pool '%s'", handlePtr->atime < minAccess ? "idle" : "old", handlePtr->poolname); } return NS_TRUE; } } return NS_FALSE; } /* *---------------------------------------------------------------------- * * CheckArgProc -- * * Ns_ArgProc callback for the pool checker. * * Results: * None. * * Side effects: * Copies name of pool to given dstring. * *---------------------------------------------------------------------- */ static void CheckArgProc(Tcl_DString *dsPtr, void *arg) { Pool *poolPtr = arg; Tcl_DStringAppendElement(dsPtr, poolPtr->name); } /* *---------------------------------------------------------------------- * * CheckPool -- * * Verify all handles in a pool are not stale. * * Results: * None. * * Side effects: * Stale handles, if any, are closed. * *---------------------------------------------------------------------- */ static void CheckPool(void *arg) { Pool *poolPtr = arg; Handle *handlePtr, *nextPtr; Handle *checkedPtr; time_t now; time(&now); checkedPtr = NULL; /* * Grab the entire list of handles from the pool. */ Ns_MutexLock(&poolPtr->lock); handlePtr = poolPtr->firstPtr; poolPtr->firstPtr = poolPtr->lastPtr = NULL; Ns_MutexUnlock(&poolPtr->lock); /* * Run through the list of handles, closing any * which have gone stale, and then return them * all to the pool. */ if (handlePtr != NULL) { while (handlePtr != NULL) { nextPtr = handlePtr->nextPtr; if (IsStale(handlePtr, now)) { NsDbDisconnect((Ns_DbHandle *) handlePtr); } handlePtr->nextPtr = checkedPtr; checkedPtr = handlePtr; handlePtr = nextPtr; } Ns_MutexLock(&poolPtr->lock); handlePtr = checkedPtr; while (handlePtr != NULL) { nextPtr = handlePtr->nextPtr; ReturnHandle(handlePtr); handlePtr = nextPtr; } if (poolPtr->waiting) { Ns_CondSignal(&poolPtr->getCond); } Ns_MutexUnlock(&poolPtr->lock); } } /* *---------------------------------------------------------------------- * * CreatePool -- * * Create a new pool using the given driver. * * Results: * Pointer to newly allocated Pool structure. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Pool * CreatePool(char *pool, char *path, char *driver) { Pool *poolPtr; Handle *handlePtr; struct DbDriver *driverPtr; int i; char *source; if (driver == NULL) { Ns_Log(Error, "dbinit: no driver for pool '%s'", pool); return NULL; } driverPtr = NsDbLoadDriver(driver); if (driverPtr == NULL) { return NULL; } source = Ns_ConfigGetValue(path, "datasource"); if (source == NULL) { Ns_Log(Error, "dbinit: missing datasource for pool '%s'", pool); return NULL; } poolPtr = ns_malloc(sizeof(Pool)); poolPtr->driver = driver; poolPtr->driverPtr = driverPtr; Ns_MutexInit(&poolPtr->lock); Ns_MutexSetName2(&poolPtr->lock, "nsdb", pool); Ns_CondInit(&poolPtr->waitCond); Ns_CondInit(&poolPtr->getCond); poolPtr->source = source; poolPtr->name = pool; poolPtr->waiting = 0; poolPtr->user = Ns_ConfigGetValue(path, "user"); poolPtr->pass = Ns_ConfigGetValue(path, "password"); poolPtr->desc = Ns_ConfigGetValue("ns/db/pools", pool); poolPtr->stale_on_close = 0; if (!Ns_ConfigGetBool(path, "verbose", &poolPtr->fVerbose)) { poolPtr->fVerbose = 0; } if (!Ns_ConfigGetBool(path, "logsqlerrors", &poolPtr->fVerboseError)) { poolPtr->fVerboseError = 0; } if (!Ns_ConfigGetInt(path, "connections", &poolPtr->nhandles) || poolPtr->nhandles <= 0) { poolPtr->nhandles = 2; } if (Ns_ConfigGetInt(path, "MaxIdle", &i) == NS_FALSE || i < 0) { i = 600; /* 10 minutes */ } poolPtr->maxidle = i; if (Ns_ConfigGetInt(path, "MaxOpen", &i) == NS_FALSE || i < 0) { i = 3600; /* 1 hour */ } poolPtr->maxopen = i; poolPtr->firstPtr = poolPtr->lastPtr = NULL; for (i = 0; i < poolPtr->nhandles; ++i) { handlePtr = ns_malloc(sizeof(Handle)); Ns_DStringInit(&handlePtr->dsExceptionMsg); handlePtr->poolPtr = poolPtr; handlePtr->connection = NULL; handlePtr->connected = NS_FALSE; handlePtr->fetchingRows = 0; handlePtr->row = Ns_SetCreate(NULL); handlePtr->cExceptionCode[0] = '\0'; handlePtr->otime = handlePtr->atime = 0; handlePtr->stale = NS_FALSE; handlePtr->stale_on_close = 0; /* * The following elements of the Handle structure could * be obtained by dereferencing the poolPtr. They're * only needed to maintain the original Ns_DbHandle * structure definition which was designed to allow * handles outside of pools, a feature no longer supported. */ handlePtr->driver = driver; handlePtr->datasource = poolPtr->source; handlePtr->user = poolPtr->user; handlePtr->password = poolPtr->pass; handlePtr->verbose = poolPtr->fVerbose; handlePtr->poolname = pool; ReturnHandle(handlePtr); } if (!Ns_ConfigGetInt(path, "checkinterval", &i) || i < 0) { i = 600; /* 10 minutes. */ } Ns_ScheduleProc(CheckPool, poolPtr, 0, i); return poolPtr; } /* *---------------------------------------------------------------------- * * Connect -- * * Connect a handle by opening the database. * * Results: * NS_OK if connect ok, NS_ERROR otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int Connect(Handle *handlePtr) { int status; status = NsDbOpen((Ns_DbHandle *) handlePtr); if (status != NS_OK) { handlePtr->connected = NS_FALSE; handlePtr->atime = handlePtr->otime = 0; handlePtr->stale = NS_FALSE; } else { handlePtr->connected = NS_TRUE; handlePtr->atime = handlePtr->otime = time(NULL); } return status; } /* *---------------------------------------------------------------------- * * IncrCount -- * * Update per-thread count of allocated handles. * * Results: * Previous count of allocated handles. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int IncrCount(Pool *poolPtr, int incr) { Tcl_HashTable *tablePtr; Tcl_HashEntry *hPtr; int prev, count, new; tablePtr = Ns_TlsGet(&tls); if (tablePtr == NULL) { tablePtr = ns_malloc(sizeof(Tcl_HashTable)); Tcl_InitHashTable(tablePtr, TCL_ONE_WORD_KEYS); Ns_TlsSet(&tls, tablePtr); } hPtr = Tcl_CreateHashEntry(tablePtr, (char *) poolPtr, &new); if (new) { prev = 0; } else { prev = (int) Tcl_GetHashValue(hPtr); } count = prev + incr; if (count == 0) { Tcl_DeleteHashEntry(hPtr); } else { Tcl_SetHashValue(hPtr, (ClientData) count); } return prev; } /* *---------------------------------------------------------------------- * * GetServer -- * * Get per-server data. * * Results: * Pointer to per-server data. * * Side effects: * None. * *---------------------------------------------------------------------- */ static ServData * GetServer(char *server) { Tcl_HashEntry *hPtr; hPtr = Tcl_FindHashEntry(&serversTable, server); if (hPtr != NULL) { return Tcl_GetHashValue(hPtr); } return NULL; } /* *---------------------------------------------------------------------- * * FreeTable -- * * Free the per-thread count of allocated handles table. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void FreeTable(void *arg) { Tcl_HashTable *tablePtr = arg; Tcl_DeleteHashTable(tablePtr); ns_free(tablePtr); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/dbutil.c����������������������������������������������������������������������0000644�0001750�0001750�00000017423�07470541155�016023� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * dbutil.c -- * * Utility db routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsdb/dbutil.c,v 1.1 2002/05/15 20:17:49 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "db.h" /* * The following constants are defined for this file. */ #define NS_SQLERRORCODE "NSINT" /* SQL error code for AOLserver exceptions. */ /* *---------------------------------------------------------------------- * * Ns_DbQuoteValue -- * * Add single quotes around an SQL string value if necessary. * * Results: * None. * * Side effects: * Copy of the string, modified if needed, is placed in the * given Ns_DString. * *---------------------------------------------------------------------- */ void Ns_DbQuoteValue(Ns_DString *pds, char *string) { while (*string != '\0') { if (*string == '\'') { Ns_DStringNAppend(pds, "'", 1); } Ns_DStringNAppend(pds, string, 1); ++string; } } /* *---------------------------------------------------------------------- * * Ns_Db0or1Row -- * * Send an SQL statement which should return either no rows or * exactly one row. * * Results: * Pointer to new Ns_Set which must be eventually freed. The * set includes the names of the columns and, if a row was * fetched, the values for the row. On error, returns NULL. * * Side effects: * Given nrows pointer is set to 0 or 1 to indicate if a row * was actually returned. * *---------------------------------------------------------------------- */ Ns_Set * Ns_Db0or1Row(Ns_DbHandle *handle, char *sql, int *nrows) { Ns_Set *row; row = Ns_DbSelect(handle, sql); if (row != NULL) { if (Ns_DbGetRow(handle, row) == NS_END_DATA) { *nrows = 0; } else { switch (Ns_DbGetRow(handle, row)) { case NS_END_DATA: *nrows = 1; break; case NS_OK: Ns_DbSetException(handle, NS_SQLERRORCODE, "Query returned more than one row."); Ns_DbFlush(handle); /* FALLTHROUGH */ case NS_ERROR: /* FALLTHROUGH */ default: return NULL; break; } } row = Ns_SetCopy(row); } return row; } /* *---------------------------------------------------------------------- * * Ns_Db1Row -- * * Send a SQL statement which is expected to return exactly 1 row. * * Results: * Pointer to Ns_Set with row data or NULL on error. Set must * eventually be freed. * * Side effects: * None. * *---------------------------------------------------------------------- */ Ns_Set * Ns_Db1Row(Ns_DbHandle *handle, char *sql) { Ns_Set *row; int nrows; row = Ns_Db0or1Row(handle, sql, &nrows); if (row != NULL) { if (nrows != 1) { Ns_DbSetException(handle, NS_SQLERRORCODE, "Query did not return a row."); row = NULL; } } return row; } /* *---------------------------------------------------------------------- * * Ns_DbInterpretSqlFile -- * * Parse DML statements from an SQL file and send them to the * database for execution. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Stops on first error. Transaction protection is provided for * Illustra and "\n-- comments are handled correctly. * *---------------------------------------------------------------------- */ int Ns_DbInterpretSqlFile(Ns_DbHandle *handle, char *filename) { FILE *fp; Ns_DString dsSql; int i, status, inquote; char c, lastc; char *p; fp = fopen(filename, "rt"); if (fp == NULL) { Ns_DbSetException(handle, NS_SQLERRORCODE, "Could not read file"); return NS_ERROR; } Ns_DStringInit(&dsSql); status = NS_OK; inquote = 0; c = '\n'; while ((i = getc(fp)) != EOF) { lastc = c; c = (char) i; loopstart: if (inquote) { if (c != '\'') { Ns_DStringNAppend(&dsSql, &c, 1); } else { if ((i = getc(fp)) == EOF) { break; } lastc = c; c = (char) i; if (c == '\'') { Ns_DStringNAppend(&dsSql, "''", 2); continue; } else { Ns_DStringNAppend(&dsSql, "'", 1); inquote = 0; goto loopstart; } } } else { /* Check to see if it is a comment */ if ((c == '-') && (lastc == '\n')) { if ((i = getc(fp)) == EOF) { break; } lastc = c; c = (char) i; if (c != '-') { Ns_DStringNAppend(&dsSql, "-", 1); goto loopstart; } while ((i = getc(fp)) != EOF) { lastc = c; c = (char) i; if (c == '\n') { break; } } } else if (c == ';') { if (Ns_DbExec(handle, dsSql.string) == NS_ERROR) { status = NS_ERROR; break; } Ns_DStringTrunc(&dsSql, 0); } else { Ns_DStringNAppend(&dsSql, &c, 1); if (c == '\'') { inquote = 1; } } } } fclose(fp); /* * If dstring contains anything but whitespace, return error */ if (status != NS_ERROR) { for (p = dsSql.string; *p != '\0'; p++) { if (isspace(UCHAR(*p)) == 0) { Ns_DbSetException(handle, NS_SQLERRORCODE, "File ends with unterminated SQL"); status = NS_ERROR; } } } Ns_DStringFree(&dsSql); return status; } /* *---------------------------------------------------------------------- * * Ns_DbSetException -- * * Set the stored SQL exception code and message in the handle. * * Results: * None. * * Side effects: * Code and message are updated. * *---------------------------------------------------------------------- */ void Ns_DbSetException(Ns_DbHandle *handle, char *code, char *msg) { strcpy(handle->cExceptionCode, code); Ns_DStringFree(&(handle->dsExceptionMsg)); Ns_DStringAppend(&(handle->dsExceptionMsg), msg); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsdb/nsdb.c������������������������������������������������������������������������0000644�0001750�0001750�00000004334�10275641301�015452� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsdb.c -- * * Database module entry point. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsdb/nsdb.c,v 1.3 2005/08/08 11:32:17 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "db.h" /* *---------------------------------------------------------------------- * * NsDb_ModInit -- * * Module initialization point. * * Results: * NS_OK. * * Side effects: * May load database drivers and configure pools. * *---------------------------------------------------------------------- */ int NsDb_ModInit(char *server, char *module) { static int once; if (server == NULL) { Ns_Log(Error, "%s: attempt to load outside a virual server", module); return NS_ERROR; } if (!once) { NsDbInitPools(); once = 1; } NsDbInitServer(server); return Ns_TclInitInterps(server, NsDbAddCmds, server); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscp/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661375�014377� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscp/Makefile����������������������������������������������������������������������0000644�0001750�0001750�00000003011�10300725022�016014� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nscp/Makefile,v 1.6 2005/08/17 21:20:18 jgdavidson Exp $ # MOD = nscp OBJS = nscp.o MODINIT = NsCp_ModInit include ../include/ns.mak �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscp/nscp.html���������������������������������������������������������������������0000644�0001750�0001750�00000006370�07170655007�016240� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nscp</title> </head> <body bgcolor="#ffffff"> <h2>nscp -- Control Port</h2> <code>$Header: /cvsroot/aolserver/aolserver/nscgi/nscgi.html,v 1.1 2000/10/04 22:27:23 kriston Exp $</code><br> <br> <a href="#Theory_of_Operation">Theory of Operation</a><br> <a href="#Known_Issues">Known Issues</a><br> <a href="#Sample_Configuration">Sample Configuration</a><br> <br> <h3><a name="Theory_of_Operation"></a>Theory of Operation</h3> The nscp module provides remote administration through a simple tclsh-like interface.&nbsp; The user connects to the control port, logs in with a username and a password, and types Tcl commands as if he was in any other tclsh.&nbsp; All Tcl commands available to ADPs and Tcl scripts in AOLserver are available with this interface.&nbsp; It is also a very valuable monitoring and debugging tool.&nbsp; The interface to the Tcl interpreter is extremely simple and only supports limited telnet control codes and does no terminal emulation.<br> <br> <h3><a name="Known_Issues"></a>Known Issues</h3> Although you can type "CTRL-C" and exit the control port, if you started any Tcl commands that run forever they will continue running for the live of the server session.&nbsp; This can be useful if you need to run a long index process and want to log out right away.<br> <br> The default installation echos the password to the screen.&nbsp; If you want to suppress the password, set "<tt>ns_param echopassword true</tt>" in the config file.&nbsp; This option does not work on all platforms which is why it is disabled by default.&nbsp; The password should not be very sensitive since you need to connect via localhost to reach the control port on the default installation, anyway.<br> <br> While nscp can listen on any interface, we recommend that you nscp listens on localhost (127.0.0.1) so that users who attempt to use the control port are already authenticated Unix users.<br> <br> <h3><a name="Sample_Configuration"></a>Sample Configuration</h3> The sample-config.tcl file has logic to set the control port username and password at the top of the file.&nbsp; The default username is "nsadmin" and the password is "x".&nbsp; This is disabled by default but you can re-enable it by uncommenting the line.<br> <br> To create a password, telnet to the control port with "nsadmin" and "x" and then type "<tt>ns_crypt password salt"</tt>.&nbsp; The gibberish that is returned goes into the "nscp_user" variable.<br> <pre># nscp: Uncomment the sample password and log in with "nsadmin", password "x", # type "ns_crypt newpassword salt" and put the encrypted string below. set nscp_port 9999 set nscp_addr 127.0.0.1 set nscp_user "" #set nscp_user "nsadmin:t2GqvvaiIUbF2:" ;# sample user="nsadmin", pw="x". # # Control port -- nscp # # nscp does not load unless nscp_user is a valid user. # ns_section "ns/server/${servername}/module/nscp" ns_param port $nscp_port ns_param address $nscp_addr ns_section "ns/server/${servername}/module/nscp/users" ns_param user $nscp_user </pre> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscp/nscp.c������������������������������������������������������������������������0000644�0001750�0001750�00000034475�11026662410�015514� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nscp.c -- * * Simple control port module for AOLserver which allows * one to telnet to a specified port, login, and issue * Tcl commands. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nscp/nscp.c,v 1.25 2008/06/20 08:06:32 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" /* * The following structure is allocated each instance of * the loaded module. */ typedef struct Mod { Tcl_HashTable users; char *server; char *addr; int port; int echo; int commandLogging; } Mod; static Ns_ThreadProc EvalThread; /* * The following structure is allocated for each session. */ typedef struct Sess { Mod *modPtr; char *user; int id; SOCKET sock; struct sockaddr_in sa; } Sess; static Ns_SockProc AcceptProc; static Tcl_CmdProc ExitCmd; static int Login(Sess *sessPtr, Tcl_DString *unameDS); static int GetLine(SOCKET sock, char *prompt, Tcl_DString *dsPtr, int echo); static Ns_ArgProc ArgProc; /* * The following values are sent to the telnet client to enable * and disable password prompt echo. */ #define TN_IAC 255 #define TN_WILL 251 #define TN_WONT 252 #define TN_DO 253 #define TN_DONT 254 #define TN_EOF 236 #define TN_IP 244 #define TN_ECHO 1 static unsigned char do_echo[] = {TN_IAC, TN_DO, TN_ECHO}; static unsigned char dont_echo[] = {TN_IAC, TN_DONT, TN_ECHO}; static unsigned char will_echo[] = {TN_IAC, TN_WILL, TN_ECHO}; static unsigned char wont_echo[] = {TN_IAC, TN_WONT, TN_ECHO}; /* *---------------------------------------------------------------------- * * NsCp_ModInit -- * * Load the config parameters, setup the structures, and * listen on the control port. * * Results: * None. * * Side effects: * Server will listen for control connections on specified * address and port. * *---------------------------------------------------------------------- */ int NsCp_ModInit(char *server, char *module) { Mod *modPtr; char *path, *addr, *pass, *user, *key, *end; int i, new, port; SOCKET lsock; Ns_Set *set; Tcl_HashEntry *hPtr; /* * Create the listening socket and callback. */ path = Ns_ConfigGetPath(server, module, NULL); if (((addr = Ns_ConfigGetValue(path, "address")) == NULL) || (!Ns_ConfigGetInt(path, "port", &port)) ) { Ns_Log(Error, "nscp: address and port must be specified in config"); return NS_ERROR; } lsock = Ns_SockListen(addr, port); if (lsock == INVALID_SOCKET) { Ns_Log(Error, "nscp: could not listen on %s:%d", addr, port); return NS_ERROR; } Ns_Log(Notice, "nscp: listening on %s:%d", addr, port); /* * Create a new Mod structure for this instance. */ modPtr = ns_malloc(sizeof(Mod)); modPtr->server = server; modPtr->addr = addr; modPtr->port = port; if (!Ns_ConfigGetBool(path, "echopassword", &modPtr->echo)) { modPtr->echo = 1; } if (!Ns_ConfigGetBool(path, "cpcmdlogging", &modPtr->commandLogging)) { modPtr->commandLogging = 0; /* Default to off */ } /* * Initialize the hash table of authorized users. Entry values * are either NULL indicating authorization should be checked * via the Ns_AuthorizeUser() API or contain a Unix crypt(3) * sytle encrypted password. For the later, the entry is * compatible with /etc/passwd (i.e., username followed by * password separated by colons). */ Tcl_InitHashTable(&modPtr->users, TCL_STRING_KEYS); path = Ns_ConfigGetPath(server, module, "users", NULL); set = Ns_ConfigGetSection(path); for (i = 0; set != NULL && i < Ns_SetSize(set); ++i) { key = Ns_SetKey(set, i); user = Ns_SetValue(set, i); if (!STRIEQ(key, "user") || (pass = strchr(user, ':')) == NULL) { continue; } *pass = '\0'; hPtr = Tcl_CreateHashEntry(&modPtr->users, user, &new); if (new) { Ns_Log(Notice, "nscp: added user: %s", user); } else { Ns_Log(Warning, "nscp: duplicate user: %s", user); ns_free(Tcl_GetHashValue(hPtr)); } *pass++ = ':'; end = strchr(pass, ':'); if (end != NULL) { *end = '\0'; } pass = ns_strdup(pass); if (end != NULL) { *end = ':'; } Tcl_SetHashValue(hPtr, pass); } if (modPtr->users.numEntries == 0) { Ns_Log(Warning, "nscp: no authorized users"); } Ns_SockCallback(lsock, AcceptProc, modPtr, NS_SOCK_READ|NS_SOCK_EXIT); Ns_RegisterProcInfo((void *)AcceptProc, "nscp", ArgProc); return NS_OK; } /* *---------------------------------------------------------------------- * * ArgProc -- * * Append listen port info for query callback. * * Results: * None * * Side effects: * None. * *---------------------------------------------------------------------- */ static void ArgProc(Tcl_DString *dsPtr, void *arg) { Mod *modPtr = arg; char buf[20]; sprintf(buf, "%d", modPtr->port); Tcl_DStringStartSublist(dsPtr); Tcl_DStringAppendElement(dsPtr, modPtr->addr); Tcl_DStringAppendElement(dsPtr, buf); Tcl_DStringEndSublist(dsPtr); } /* *---------------------------------------------------------------------- * * AcceptProc -- * * Socket callback to accept a new connection. * * Results: * NS_TRUE to keep listening unless shutdown is in progress. * * Side effects: * New EvalThread will be created. * *---------------------------------------------------------------------- */ static int AcceptProc(SOCKET lsock, void *arg, int why) { Mod *modPtr = arg; Sess *sessPtr; int len; static int next; if (why == NS_SOCK_EXIT) { Ns_Log(Notice, "nscp: shutdown"); ns_sockclose(lsock); return NS_FALSE; } sessPtr = ns_malloc(sizeof(Sess)); sessPtr->modPtr = modPtr; len = sizeof(struct sockaddr_in); sessPtr->sock = Ns_SockAccept(lsock, (struct sockaddr *) &sessPtr->sa, &len); if (sessPtr->sock == INVALID_SOCKET) { Ns_Log(Error, "nscp: accept() failed: %s", ns_sockstrerror(ns_sockerrno)); ns_free(sessPtr); } else { sessPtr->id = ++next; Ns_ThreadCreate(EvalThread, sessPtr, 0, NULL); } return NS_TRUE; } /* *---------------------------------------------------------------------- * * EvalThread -- * * Thread to read and evaluate commands from remote. * * Results: * None. * * Side effects: * Depends on commands. * *---------------------------------------------------------------------- */ static void EvalThread(void *arg) { Tcl_Interp *interp; Tcl_DString ds; Tcl_DString unameDS; char buf[64], *res; int n, len, ncmd, stop; Sess *sessPtr = arg; char *server = sessPtr->modPtr->server; /* * Initialize the thread and login the user. */ interp = NULL; Tcl_DStringInit(&ds); Tcl_DStringInit(&unameDS); sprintf(buf, "-nscp:%d-", sessPtr->id); Ns_ThreadSetName(buf); Ns_Log(Notice, "nscp: %s connected", ns_inet_ntoa(sessPtr->sa.sin_addr)); if (!Login(sessPtr, &unameDS)) { goto done; } sessPtr->user = Tcl_DStringValue(&unameDS); /* * Loop until the remote shuts down, evaluating complete * commands. */ interp = Ns_TclAllocateInterp(server); /* * Create a special exit command for this interp only. */ stop = 0; Tcl_CreateCommand(interp, "exit", ExitCmd, (ClientData) &stop, NULL); ncmd = 0; while (!stop) { Tcl_DStringTrunc(&ds, 0); ++ncmd; retry: sprintf(buf, "%s:nscp %d> ", server, ncmd); while (1) { if (!GetLine(sessPtr->sock, buf, &ds, 1)) { goto done; } if (Tcl_CommandComplete(ds.string)) { break; } sprintf(buf, "%s:nscp %d>>> ", server, ncmd); } while (ds.length > 0 && ds.string[ds.length-1] == '\n') { Tcl_DStringTrunc(&ds, ds.length-1); } if (STREQ(ds.string, "")) { goto retry; /* Empty command - try again. */ } if (sessPtr->modPtr->commandLogging) { Ns_Log(Notice, "nscp: %s %d: %s", sessPtr->user, ncmd, ds.string); } if (Tcl_RecordAndEval(interp, ds.string, 0) != TCL_OK) { Ns_TclLogError(interp); } Tcl_AppendResult(interp, "\r\n", NULL); res = Tcl_GetStringResult(interp); len = strlen(res); while (len > 0) { if ((n = send(sessPtr->sock, res, len, 0)) <= 0) goto done; len -= n; res += n; } if (sessPtr->modPtr->commandLogging) { Ns_Log(Notice, "nscp: %s %d: done", sessPtr->user, ncmd); } } done: Tcl_DStringFree(&ds); Tcl_DStringFree(&unameDS); if (interp != NULL) { Ns_TclDeAllocateInterp(interp); } Ns_Log(Notice, "nscp: %s disconnected", ns_inet_ntoa(sessPtr->sa.sin_addr)); ns_sockclose(sessPtr->sock); ns_free(sessPtr); } /* *---------------------------------------------------------------------- * * GetLine -- * * Prompt for a line of input from the remote. \r\n sequences * are translated to \n. * * Results: * 1 if line received, 0 if remote dropped. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int GetLine(SOCKET sock, char *prompt, Tcl_DString *dsPtr, int echo) { unsigned char buf[2048]; int n; int result = 0; int retry = 0; /* * Suppress output on things like password prompts. */ if (!echo) { send(sock, will_echo, 3, 0); send(sock, dont_echo, 3, 0); recv(sock, buf, sizeof(buf), 0); /* flush client ack thingies */ } n = strlen(prompt); if (send(sock, prompt, n, 0) != n) { result = 0; goto bail; } do { if ((n = recv(sock, buf, sizeof(buf), 0)) <= 0) { result = 0; goto bail; } if (n > 1 && buf[n-1] == '\n' && buf[n-2] == '\r') { buf[n-2] = '\n'; --n; } /* * This EOT checker cannot happen in the context of telnet. */ if (n == 1 && buf[0] == 4) { result = 0; goto bail; } /* * Deal with telnet IAC commands in some sane way. */ if (n > 1 && buf[0] == TN_IAC) { if ( buf[1] == TN_EOF) { result = 0; goto bail; } else if (buf[1] == TN_IP) { result = 0; goto bail; } else if ((buf[1] == TN_WONT) && (retry < 2)) { /* * It seems like the flush at the bottom of this func * does not always get all the acks, thus an echo ack * showing up here. Not clear why this would be. Need * to investigate further. For now, breeze past these * (within limits). */ retry++; continue; } else { Ns_Log(Warning, "nscp: " "unsupported telnet IAC code received from client"); result = 0; goto bail; } } Tcl_DStringAppend(dsPtr, buf, n); result = 1; } while (buf[n-1] != '\n'); bail: if (!echo) { send(sock, wont_echo, 3, 0); send(sock, do_echo, 3, 0); recv(sock, buf, sizeof(buf), 0); /* flush client ack thingies */ } return result; } /* *---------------------------------------------------------------------- * * Login -- * * Attempt to login the user. * * Results: * 1 if login ok, 0 otherwise. * * Side effects: * Stores user's login name into unameDSPtr. * *---------------------------------------------------------------------- */ static int Login(Sess *sessPtr, Tcl_DString *unameDSPtr) { Tcl_HashEntry *hPtr; Tcl_DString uds, pds; char *encpass, *user, *pass, msg[255], buf[30]; int ok; user = NULL; ok = 0; Tcl_DStringInit(&uds); Tcl_DStringInit(&pds); if (GetLine(sessPtr->sock, "login: ", &uds, 1) && GetLine(sessPtr->sock, "Password: ", &pds, sessPtr->modPtr->echo)) { user = Ns_StrTrim(uds.string); pass = Ns_StrTrim(pds.string); hPtr = Tcl_FindHashEntry(&sessPtr->modPtr->users, user); if (hPtr != NULL) { encpass = Tcl_GetHashValue(hPtr); Ns_Encrypt(pass, encpass, buf); if (STREQ(buf, encpass)) { ok = 1; } } } if (ok) { Ns_Log(Notice, "nscp: %s logged in", user); Tcl_DStringAppend(unameDSPtr, user, -1); sprintf(msg, "\nWelcome to %s running at %s (pid %d)\n" "%s/%s (%s) for %s built on %s\nCVS Tag: %s\n", sessPtr->modPtr->server, Ns_InfoNameOfExecutable(), Ns_InfoPid(), Ns_InfoServerName(), Ns_InfoServerVersion(), Ns_InfoLabel(), Ns_InfoPlatform(), Ns_InfoBuildDate(), Ns_InfoTag()); } else { Ns_Log(Warning, "nscp: login failed: '%s'", user ? user : "?"); sprintf(msg, "Access denied!\n"); } (void) send(sessPtr->sock, msg, (int)strlen(msg), 0); Tcl_DStringFree(&uds); Tcl_DStringFree(&pds); return ok; } /* *---------------------------------------------------------------------- * * ExitCmd -- * * Special exit command for nscp. * * Results: * Standard Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExitCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { int *stopPtr; if (argc != 1) { Tcl_AppendResult(interp, "wrong # args: should be \"", (char*)argv[0], "\"", NULL); return TCL_ERROR; } stopPtr = (int *) arg; *stopPtr = 1; Tcl_SetResult(interp, "\nGoodbye!", TCL_STATIC); return TCL_OK; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014401� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/pd.h��������������������������������������������������������������������������0000644�0001750�0001750�00000004555�07142130361�015155� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * pd.h -- * * APIs provided by the proxy daemon library. */ #ifndef PD_H #define PD_H #include "nsextmsg.h" #include "nspd.h" #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #define SOCKET int #define INVALID_SOCKET (-1) #define socket_errno errno #include <sys/time.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <sys/wait.h> #include <syslog.h> extern void PdExit(int code); extern void PdTraceOn(char *file); extern void PdTraceOff(void); extern void OpenLog(void); extern void CloseLog(void); extern void PdMainLoop(void); extern void PdListen(int port); extern char *pdBin; extern void Ns_FatalErrno(char *func); extern void Ns_FatalSock(char *func); extern void Ns_PdExit(int code); #endif /* PD_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/listen.c����������������������������������������������������������������������0000644�0001750�0001750�00000012537�07142130361�016042� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * listen.c -- * * Listen for the external driver. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nspd/listen.c,v 1.3 2000/08/02 23:38:25 kriston Exp $, compiled: " __DATE__ " " __TIME__; #include "pd.h" #define DEV_NULL "/dev/null" #ifndef WCOREDUMP #define WCOREDUMP(s) (s & 0200) #endif /* * Local functions defined in this file */ static void PdNewConn(int sock, int new); static int fdNull; /* *========================================================================== * API functions *========================================================================== */ /* *---------------------------------------------------------------------- * * PdListen -- * * Listen on a port and then handshake with the external driver * when it connects. * * Results: * None. * * Side effects: * May exit on error; never returns. * *---------------------------------------------------------------------- */ void PdListen(int port) { int sock, new; struct sockaddr_in sa; int n; fdNull = open(DEV_NULL, O_WRONLY); if (fdNull < 0) { Ns_FatalErrno("open"); } sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { Ns_FatalSock("Socket"); } memset(&sa, 0, sizeof(struct sockaddr_in)); sa.sin_family = AF_INET; sa.sin_addr.s_addr = htonl(INADDR_ANY); sa.sin_port = htons((unsigned short) port); n = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *) &n, sizeof(n)); if (bind(sock, (struct sockaddr *) &sa, sizeof(struct sockaddr_in)) != 0) { Ns_FatalSock("bind"); } if (listen(sock, 5) != 0) { Ns_FatalSock("listen"); } if (port == 0) { fd_set set; struct timeval tv; char buf[10]; n = sizeof(sa); getsockname(sock, (struct sockaddr *) &sa, &n); sprintf(buf, "%d", ntohs(sa.sin_port)); write(1, buf, strlen(buf) + 1); close(1); FD_ZERO(&set); FD_SET(sock, &set); tv.tv_sec = 30; tv.tv_usec = 0; if (select(sock + 1, &set, NULL, NULL, &tv) != 1 || !FD_ISSET(sock, &set)) { Ns_FatalSock("select"); } } do { new = accept(sock, NULL, 0); if (new == INVALID_SOCKET) { Ns_FatalSock("accept"); } PdNewConn(sock, new); } while (port != 0); } /* *---------------------------------------------------------------------- * * PdNewConn -- * * Accept a new connection and run PdMainLoop on it. * * Results: * None. * * Side effects: * Forks and exits. * *---------------------------------------------------------------------- */ static void PdNewConn(int sock, int new) { int pid, status; pid = fork(); if (pid < 0) { Ns_FatalErrno("fork"); } else if (pid == 0) { pid = fork(); if (pid < 0) { Ns_FatalErrno("fork"); } else if (pid > 0) { exit(0); } close(sock); if (fdNull != 2) { if (dup2(fdNull, 2) == -1) { Ns_FatalErrno("dup2"); } close(fdNull); } if (new != 0 && dup2(new, 0) == -1) { Ns_FatalErrno("dup2"); } if (new != 1 && dup2(new, 1) == -1) { Ns_FatalErrno("dup2"); } if (new > 2) { close(new); } PdMainLoop(); Ns_PdExit(0); } else { close(new); if (waitpid(pid, &status, 0) != pid) { Ns_FatalErrno("waitpid"); } else if (WIFEXITED(status) && WEXITSTATUS(status) != 0) { Ns_PdLog(Error, "PdNewConn: " "child pid %d returned non-zero status: %d", pid, WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { Ns_PdLog(Error, "PdNewConn: child pid %d exited from signal %d%s", pid, WTERMSIG(status), WCOREDUMP(status) ? " - core dumped" : ""); } } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/Makefile����������������������������������������������������������������������0000644�0001750�0001750�00000003010�07667137021�016036� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nspd/Makefile,v 1.9 2003/06/03 15:26:09 vasiljevic Exp $ # ALIB = nspd LIBOBJS = listen.o log.o main.o include ../include/Makefile.build ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/log.c�������������������������������������������������������������������������0000644�0001750�0001750�00000013040�07632160061�015317� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * log.c -- * * Various sundry logging functions. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nspd/log.c,v 1.5 2003/03/07 18:08:49 vasiljevic Exp $, compiled: " __DATE__ " " __TIME__; #include "pd.h" static int trace = 0; static FILE *tracefp = NULL; /* *---------------------------------------------------------------------- * * PdTraceOn -- * * Turn tracing on. * * Results: * None. * * Side effects: * May open trace file. * *---------------------------------------------------------------------- */ void PdTraceOn(char *file) { char errbuf[512]; Ns_PdLog(Notice, "PdTraceOn: traceon:"); trace = 1; if (tracefp != NULL) { fclose(tracefp); } if ((tracefp = fopen(file, "w")) == NULL) { sprintf(errbuf, "Unable to open trace file: %s (%s)", file, strerror(errno)); Ns_PdLog(Error, errbuf); Ns_PdSendString(errbuf); } else { Ns_PdSendString(OK_STATUS); } } /* *---------------------------------------------------------------------- * * PdTraceOff -- * * Turn tracing off. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void PdTraceOff(void) { Ns_PdLog(Notice, "nspd: traceoff"); trace = 0; if (tracefp != NULL) { fclose(tracefp); tracefp = NULL; } Ns_PdSendString(OK_STATUS); } /* *---------------------------------------------------------------------- * * Ns_FatalErrno -- * * Spit out an error and exit. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_FatalErrno(char *func) { Ns_PdLog(Error, "nspd: %s failed: %s(%d)", func, strerror(errno), errno); Ns_PdExit(1); } /* *---------------------------------------------------------------------- * * Ns_FatalSock -- * * Same as Ns_FatalErrno * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_FatalSock(char *func) { Ns_FatalErrno(func); } /* *---------------------------------------------------------------------- * * Ns_PdLog -- * * Same as Ns_Log in AOLserver core. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdLog(Ns_PdLogMsgType errtype, char *format,...) { va_list ap; int priority; if (errtype == Trace) { if (trace && tracefp != NULL) { va_start(ap, format); vfprintf(tracefp, format, ap); va_end(ap); /* maintain consistency with syslog below, which adds \n */ fprintf(tracefp, "\n"); fflush(tracefp); } } else { int typeok = 1; switch (errtype) { case Error: priority = LOG_ERR; break; case Notice: priority = LOG_NOTICE; break; default: priority = LOG_ERR; typeok = 0; syslog(LOG_ERR, "nspd: unknown error type: %d", errtype); break; } if (typeok) { char msgbuf[4096]; va_start(ap, format); vsprintf(msgbuf, format, ap); va_end(ap); syslog(priority, msgbuf); } } } /* *---------------------------------------------------------------------- * * OpenLog -- * * Open the syslog. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void OpenLog(void) { char *syslogident; if ((syslogident = strrchr(pdBin, '/')) == NULL) { syslogident = pdBin; } else { syslogident++; } openlog(syslogident, LOG_PID | LOG_CONS, LOG_DAEMON); } /* *---------------------------------------------------------------------- * * CloseLog -- * * Close the syslog. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void CloseLog(void) { closelog(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/nspd.html���������������������������������������������������������������������0000755�0001750�0001750�00000002640�07170655007�016241� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nspd</title> </head> <body bgcolor="#ffffff"> <h2>nspd -- Database Proxy Daemon Library</h2> <pre>$Header: /cvsroot/aolserver/aolserver/nspd/nspd.html,v 1.1 2000/10/10 18:03:51 kriston Exp $ </pre> <br> <a href="#Theory_of_Operation">Theory of Operation</a><br> <a href="#Known_Issues">Known Issues</a><br> <a href="#Sample_Configuration">Sample Configuration</a><br> <br> <br> <h3><a name="Theory_of_Operation"></a>Theory of Operation</h3> AOLserver's nsext driver connects to databases through a database proxy daemon.&nbsp; That proxy daemon uses code that is in libnspd.a to talk with AOLserver.<br> <br> Until we revise the documentation for placement here, please see the Database Driver notes at <a href="http://aolserver.com/doc/">http://aolserver.com/doc/</a>. <br> <br> <h3><a name="Known_Issues"></a>Known Issues</h3> Until we revise the documentation for placement here, please see the Database Driver notes at <a href="http://aolserver.com/doc/">http://aolserver.com/doc/</a>. <br> <br> <h3><a name="Sample_Configuration"></a>Sample Configuration</h3> Until we revise the documentation for placement here, please see the Database Driver notes at <a href="http://aolserver.com/doc/">http://aolserver.com/doc/</a>. <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </body> </html> ������������������������������������������������������������������������������������������������aolserver4-4.5.1/nspd/main.c������������������������������������������������������������������������0000644�0001750�0001750�00000073256�07632160061�015501� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * main.c -- * * The proxy-side library for external drivers. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nspd/main.c,v 1.8 2003/03/07 18:08:49 vasiljevic Exp $, compiled: " __DATE__ " " __TIME__; #include "pd.h" #include "nspd.h" #include <ctype.h> #define CMDMAX 32768 #ifndef F_CLOEXEC #define F_CLOEXEC 1 #endif #define FILE_TEMPLATE "pdXXXXXX" #define MAX_PATH 256 #define DIR_MAX (MAX_PATH - 8) #define UNIX_TMPDIR "/var/tmp/" #define MAXSTACK 1024 /* * Local functions defined in this file */ static int RecvData(char *buf, int len); static int GetMsg(char *buf, char **cmdName, char **cmdArg); static void DispatchCmd(char *cmdName, char *cmdArg, void *dbhandle); static void PdPing(void); static void PdOpenFile(char *openParams); static void PdCloseFile(char *fdStr); static void PdReadFile(char *readParams); static void PdWriteFile(char *writeParams); static void PdDeleteFile(char *fileName); static void PdCreateTmpFile(void); static char *StringTrimRight(char *string); static char *StringTrimLeft(char *string); static void PdFindBin(char *pgm); static int PdPort(char *arg); static void PdCreateTmpFile(void); /* * Static variables defined in this file */ static int readInput = 1; char *pdBin; /* *========================================================================== * API functions *========================================================================== */ /* *---------------------------------------------------------------------- * * Ns_PdMain -- * * This runs the main loop for the proxy daemon. * * Results: * 0. * * Side effects: * Will listen on the port and run callbacks; also forks and exits. * *---------------------------------------------------------------------- */ int Ns_PdMain(int argc, char **argv) { int port; if (getppid() != 1) { if (fork() > 0) { exit(0); } setsid(); } if (argc > 0) { PdFindBin(argv[0]); } else { PdFindBin("nsextd"); } OpenLog(); if (argc > 1) { port = PdPort(argv[1]); PdListen(port); } else { PdMainLoop(); } CloseLog(); return 0; } /* *---------------------------------------------------------------------- * * Ns_PdExit -- * * Terminate with an exit code. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdExit(int code) { if (code == 0) { exit(0); } _exit(code); } /* *---------------------------------------------------------------------- * * Ns_PdSendData -- * * Write data to the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdSendData(char *data, int len) { int writeReturn; do { writeReturn = write(1, data, (size_t)len); } while ((writeReturn < 0) && (errno == EINTR)); if (writeReturn != len) { Ns_PdLog(Error, "nspd: " "error '%s' writing %d bytes", strerror(errno), len); } } /* *---------------------------------------------------------------------- * * Ns_PdSendException -- * * Send an error message back to the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdSendException(char *code, char *msg) { char exceptionBuf[EXCEPTION_CODE_MAX + EXCEPTION_MSG_MAX + 2]; char *p = msg; /* * map all \n's in exception msg to ' ' */ while ((p = strchr(p, (int) '\n')) != NULL) { *p++ = ' '; } sprintf(exceptionBuf, "%s%c%s", code, ARG_TOKEN_DELIMITER, msg); Ns_PdSendString(exceptionBuf); } /* *---------------------------------------------------------------------- * * Ns_PdCloseonexec -- * * Set a file descriptor to close on exec. * * Results: * See fcntl. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_PdCloseonexec(int fd) { int i; i = fcntl(fd, F_GETFD); if (i != -1) { i |= F_CLOEXEC; i = fcntl(fd, F_SETFD, i); } return i; } /* *---------------------------------------------------------------------- * * Ns_PdNewRowInfo -- * * Allocate a new RowInfo structure with space for ncols * columns. * * Results: * An empty Ns_PdRowInfo structure. * * Side effects: * The result is malloc'ed. * *---------------------------------------------------------------------- */ Ns_PdRowInfo * Ns_PdNewRowInfo(int ncols) { Ns_PdRowInfo *rowInfo; if ((rowInfo = malloc(sizeof(Ns_PdRowInfo))) == NULL) { Ns_PdLog(Error, "nspd: rowinfo malloc(%d) error: '%s'", sizeof(Ns_PdRowInfo), strerror(errno)); } else { rowInfo->numColumns = ncols; rowInfo->rowData = malloc(sizeof(Ns_PdRowData) * ncols); if (rowInfo->rowData == NULL) { Ns_PdLog(Error, "nspd: " "rowdata malloc(%d) error: '%s'", sizeof(Ns_PdRowData) * ncols, strerror(errno)); free(rowInfo); rowInfo = NULL; } } return rowInfo; } /* *---------------------------------------------------------------------- * * Ns_PdFreeRowInfo -- * * Free a Ns_PdRowInfo structure allocated with Ns_PdNewRowInfo. * * Results: * None. * * Side effects: * Frees the structure, and if fFreeData is true, the data as well. * *---------------------------------------------------------------------- */ void Ns_PdFreeRowInfo(Ns_PdRowInfo * rowInfo, int fFreeData) { int i; if (fFreeData) { for (i = 0; i < rowInfo->numColumns; i++) { free(rowInfo->rowData[i].elData); } } free(rowInfo->rowData); free(rowInfo); } /* *---------------------------------------------------------------------- * * Ns_PdSendRowInfo -- * * Send a Ns_PdRowInfo structure to the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdSendRowInfo(Ns_PdRowInfo * rowInfo) { int i; int size; char countbuf[64]; for (i = 0; i < rowInfo->numColumns; i++) { size = rowInfo->rowData[i].elSize; sprintf(countbuf, "%d", size); Ns_PdSendString(countbuf); if (size > 0) { Ns_PdSendData(rowInfo->rowData[i].elData, size); } } Ns_PdSendData(END_DATA, (int)strlen(END_DATA)); } /* *---------------------------------------------------------------------- * * Ns_PdSetRowInfoNumColumns -- * * Set the number of columns in a Ns_PdRowInfo structure. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdSetRowInfoNumColumns(Ns_PdRowInfo * rowInfo, int numColumns) { rowInfo->numColumns = numColumns; } /* *---------------------------------------------------------------------- * * Ns_PdGetRowInfoNumColumns -- * * Returns the number of columns in a Ns_PdRowInfo structure. * * Results: * # of cols. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_PdGetRowInfoNumColumns(Ns_PdRowInfo * rowInfo) { return rowInfo->numColumns; } /* *---------------------------------------------------------------------- * * Ns_PdSetRowInfoItem -- * * Sets row info for one item (by index). * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdSetRowInfoItem(Ns_PdRowInfo * rowInfo, int index, char *data, int size) { rowInfo->rowData[index].elData = data; rowInfo->rowData[index].elSize = size; } /* *---------------------------------------------------------------------- * * Ns_PdGetRowInfoItem -- * * Get a rowinfo item by index * * Results: * None. * * Side effects: * Fills in data and size appropriately. * *---------------------------------------------------------------------- */ void Ns_PdGetRowInfoItem(Ns_PdRowInfo * rowInfo, int index, char **data, int *size) { *data = rowInfo->rowData[index].elData; *size = rowInfo->rowData[index].elSize; } /* *---------------------------------------------------------------------- * * Ns_PdFindRowInfoValue -- * * Find a value in a Ns_PdRowInfo. Currently, 'value' will * always be a NULL-terminated string, We're using the len arg * and memcmp to support binary data (future). * * Results: * Index number of item, or -1 if not found. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_PdFindRowInfoValue(Ns_PdRowInfo * rowInfo, char *value, int len) { int i; for (i = 0; i < rowInfo->numColumns; i++) { if (memcmp(rowInfo->rowData[i].elData, value, (size_t)len) == 0) { return i; } } return -1; } /* *---------------------------------------------------------------------- * * Ns_PdParseOpenArgs -- * * Parses datasource#user#password#param, leaving missing * elements as NULL. * * Results: * None. * * Side effects: * Sets datasource, user, password, and param appopriately. * *---------------------------------------------------------------------- */ void Ns_PdParseOpenArgs(char *openargs, char **datasource, char **user, char **password, char **param) { char *p, *lastp; char dl = ARG_TOKEN_DELIMITER; Ns_PdLog(Trace, "Ns_PdParseOpenArgs: |%s|", openargs); *datasource = *user = *password = *param = NULL; lastp = openargs; if ((p = strchr(lastp, dl)) != NULL) { if (p != lastp) { *p = '\0'; *datasource = strdup(lastp); } lastp = ++p; if ((p = strchr(lastp, dl)) != NULL) { if (p != lastp) { *p = '\0'; *user = strdup(lastp); } lastp = ++p; if ((p = strchr(lastp, dl)) != NULL) { if (p != lastp) { *p = '\0'; *password = strdup(lastp); } lastp = ++p; if (*lastp != '\0') { *param = strdup(lastp); } } } } } /* *---------------------------------------------------------------------- * * Ns_PdSqlbufEnough -- * * Reallocate a buffer if need be. * * Results: * NS_OK/NS_ERROR * * Side effects: * May realloc *buf and set buf and size by ref * *---------------------------------------------------------------------- */ int Ns_PdSqlbufEnough(char **buf, int *size, int howmuch) { int status = NS_OK; if (*size < howmuch) { Ns_PdLog(Notice, "nspd: " "reallocing sqlbuf from %d to %d", *size, howmuch); if ((*buf = (char *) realloc(*buf, (size_t)howmuch)) == NULL) { Ns_PdLog(Error, "nspd: realloc error '%s'", strerror(errno)); status = NS_ERROR; } else { *size = howmuch; } } return status; } /* *---------------------------------------------------------------------- * * Ns_PdStringTrim -- * * Trim leading and trailing white space from a string. * * Results: * The modified string. * * Side effects: * Will modify the string. * *---------------------------------------------------------------------- */ char * Ns_PdStringTrim(char *string) { return StringTrimLeft(StringTrimRight(string)); } /* *========================================================================== * Exported functions *========================================================================== */ /* *---------------------------------------------------------------------- * * PdMainLoop -- * * Loop forever and ever, running callbacks as needed. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void PdMainLoop(void) { static char buf[CMDMAX]; char *cmdName; char *cmdArg; void *dbhandle; Ns_PdLog(Notice, "nspd: starting"); if ((dbhandle = Ns_PdDbInit()) == NULL) { Ns_PdLog(Error, "nspd: initialization failure"); } else { while (readInput) { if (GetMsg(buf, &cmdName, &cmdArg) == NS_OK) { DispatchCmd(cmdName, cmdArg, dbhandle); } else { readInput = 0; } } Ns_PdDbCleanup(dbhandle); } } /* *========================================================================== * Static functions *========================================================================== */ /* *---------------------------------------------------------------------- * * PdPort -- * * Convert a string port number to an integer, and make sure * it's valid. * * Results: * A port number. * * Side effects: * Exits if invalid. * *---------------------------------------------------------------------- */ static int PdPort(char *arg) { int port; port = atoi(arg); if (port <= 0 || port >= 65535) { Ns_PdLog(Error, "nspd: invalid port '%s'", arg); Ns_PdExit(1); } return port; } /* *---------------------------------------------------------------------- * * GetMsg -- * * Read a message from the external driver. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int GetMsg(char *buf, char **cmdName, char **cmdArg) { int status = NS_ERROR; int bytesRead; int argsize; char *pargsize; char *p; if ((bytesRead = RecvData(buf, CMDMAX)) > 0) { if ((p = strchr(buf, '\n')) == NULL) { Ns_PdLog(Error, "nspd: protocol error: " "no newline terminator for command name"); } else { *p++ = '\0'; *cmdName = buf; pargsize = p; if ((p = strchr(pargsize, '\n')) == NULL) { Ns_PdLog(Error, "nspd: protocol error: " "no newline terminator for arglen of command: '%s'", *cmdName); } else { *p++ = '\0'; argsize = atoi(pargsize); if (argsize > (CMDMAX - (p - buf))) { Ns_PdLog(Error, "nspd: " "arglen of %d for %s command is greater than " "configured max %d", argsize, *cmdName, CMDMAX); } else { int msgSize; int readError = 0; int readRet; /* * total msg size is sum of cmd\nargsize\nargdata */ msgSize = strlen(*cmdName) + strlen(pargsize) + argsize + 2; while (bytesRead < msgSize && !readError) { if ((readRet = RecvData(&buf[bytesRead], msgSize - bytesRead)) > 0) { bytesRead += readRet; } else { readError = 1; } } if (!readError) { *(p + argsize) = '\0'; *cmdArg = p; status = NS_OK; } } } } } return status; } /* *---------------------------------------------------------------------- * * DispatchCmd -- * * Run proxy callbacks when a command comes in. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void DispatchCmd(char *cmd, char *arg, void *dbhandle) { Ns_ExtDbCommandCode cmdcode; if ((cmdcode = Ns_ExtDbMsgNameToCode(cmd)) == NS_ERROR) { Ns_PdLog(Error, "nspd: unknown dispatch message '%s'", cmd); } else if (arg == NULL && Ns_ExtDbMsgRequiresArg(cmdcode)) { Ns_PdLog(Error, "nspd: dispatch message requires argument"); } else { switch (cmdcode) { case Flush: Ns_PdDbFlush(dbhandle); break; case Cancel: Ns_PdDbCancel(dbhandle); break; case Exec: Ns_PdDbExec(dbhandle, arg); break; case BindRow: Ns_PdDbBindRow(dbhandle); break; case GetRow: Ns_PdDbGetRow(dbhandle, arg); break; case GetTableInfo: Ns_PdLog(Error, "nspd: unsupported dispatch command: GetTableInfo"); break; case TableList: Ns_PdLog(Error, "nspd: unsupported dispatch command: TableList"); break; case BestRowId: Ns_PdLog(Error, "nspd: unsupported dispatch command: BestRowId"); break; case Close: Ns_PdDbClose(dbhandle); readInput = 0; break; case Open: Ns_PdDbOpen(dbhandle, arg); break; case Identify: Ns_PdDbIdentify(dbhandle); break; case GetTypes: Ns_PdDbGetTypes(dbhandle); break; case ResultId: Ns_PdDbResultId(dbhandle); break; case ResultRows: Ns_PdDbResultRows(dbhandle); break; case SetMaxRows: Ns_PdDbSetMaxRows(dbhandle, arg); break; case ResetHandle: Ns_PdDbResetHandle(dbhandle); break; case SpStart: Ns_PdDbSpStart(dbhandle, arg); break; case SpSetParam: Ns_PdDbSpSetParam(dbhandle, arg); break; case SpExec: Ns_PdDbSpExec(dbhandle); break; case SpReturnCode: Ns_PdDbSpReturnCode(dbhandle); break; case SpGetParams: /* * Should arg be passed here? Possible bug--the original * implementation had it here but not in nssybpd. */ Ns_PdDbSpGetParams(dbhandle); break; /* * The commands below are not DB-specific, so they're handled in * this file */ case Ping: PdPing(); break; case TraceOn: PdTraceOn(arg); break; case TraceOff: PdTraceOff(); break; case OpenF: PdOpenFile(arg); break; case CloseF: PdCloseFile(arg); break; case ReadF: PdReadFile(arg); break; case WriteF: PdWriteFile(arg); break; case DeleteF: PdDeleteFile(arg); break; case CreateTmpF: PdCreateTmpFile(); break; default: assert(0); /* * msg validity verified in * DbMsgNameToCode above */ break; } } } /* *---------------------------------------------------------------------- * * PdPing -- * * Respond to a ping request. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdPing() { Ns_PdLog(Trace, "nspd: responding to ping"); Ns_PdSendString(OK_STATUS); } /* *---------------------------------------------------------------------- * * PdOpenFile -- * * Open a local file, as requested by external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdOpenFile(char *openParams) { int fd; char errbuf[512]; char fdStr[8]; int matchedArgs; char pathName[512]; int oflags; Ns_PdLog(Trace, "PdOpenFile:"); matchedArgs = sscanf(openParams, "%d#%s", &oflags, pathName); if (matchedArgs != 2) { sprintf(errbuf, "Error parsing open parameters: %s", openParams); Ns_PdLog(Error, "nspd: '%s'", errbuf); Ns_PdSendString(errbuf); } else if ((fd = open(pathName, oflags, 0)) < 0) { sprintf(errbuf, "Can't open file %s (oflags=%d): %s", pathName, oflags, strerror(errno)); Ns_PdLog(Error, "nspd: '%s'", errbuf); Ns_PdSendString(errbuf); } else { Ns_PdSendString(OK_STATUS); sprintf(fdStr, "%d", fd); Ns_PdSendString(fdStr); } } /* *---------------------------------------------------------------------- * * PdCloseFile -- * * Close a file, as requested by the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdCloseFile(char *fdStr) { int fd; char errbuf[512]; Ns_PdLog(Trace, "PdCloseFile:"); fd = atoi(fdStr); if (close(fd) < 0) { sprintf(errbuf, "Close error on file descriptor %d: %s", fd, strerror(errno)); Ns_PdLog(Error, "nspd: failed closing file '%s'", errbuf); Ns_PdSendString(errbuf); } else { Ns_PdSendString(OK_STATUS); } } /* *---------------------------------------------------------------------- * * PdReadFile -- * * Read a file and send it to the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdReadFile(char *readParams) { char errbuf[512]; char readBuf[4096]; int bytesRead; char bytesReadStr[64]; int matchedArgs; int fd, offset, bytecount; Ns_PdLog(Trace, "PdReadFile:"); matchedArgs = sscanf(readParams, "%d#%d#%d", &fd, &offset, &bytecount); if (matchedArgs != 3) { sprintf(errbuf, "Error parsing read parameters: %s", readParams); Ns_PdLog(Error, "nspd: failed reading file: '%s'", errbuf); Ns_PdSendString(errbuf); } else { lseek(fd, offset, SEEK_SET); if ((bytesRead = read(fd, readBuf, (size_t)bytecount)) < 0) { sprintf(errbuf, "Read error on fd %d (%d bytes): %s", fd, bytecount, strerror(errno)); Ns_PdLog(Error, "failed reading file: '%s'", errbuf); Ns_PdSendString(errbuf); } else { Ns_PdSendString(OK_STATUS); sprintf(bytesReadStr, "%d", bytesRead); Ns_PdSendString(bytesReadStr); Ns_PdSendData(readBuf, bytesRead); Ns_PdSendData(END_DATA, (int)strlen(END_DATA)); } } } /* *---------------------------------------------------------------------- * * PdWriteFile -- * * Write a file from the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdWriteFile(char *writeParams) { char errbuf[512]; int matchedArgs; int fd, offset, bytecount, hashcount = 0; char *pw; Ns_PdLog(Trace, "PdWriteFile:"); matchedArgs = sscanf(writeParams, "%d#%d#%d#", &fd, &offset, &bytecount); if (matchedArgs != 3) { sprintf(errbuf, "Error parsing write parameters: %s", writeParams); Ns_PdLog(Error, "nspd: failed writing file: '%s'", errbuf); Ns_PdSendString(errbuf); } else { for (pw = writeParams; *pw;) { if (*pw++ == '#') { if (++hashcount == matchedArgs) { break; } } } lseek(fd, offset, SEEK_SET); if (write(fd, pw, (size_t)bytecount) != bytecount) { sprintf(errbuf, "Write error to fd %d (%d bytes): %s", fd, bytecount, strerror(errno)); Ns_PdLog(Error, "nspd: failed writing file: '%s'", errbuf); Ns_PdSendString(errbuf); } else { Ns_PdSendString(OK_STATUS); } } } /* *---------------------------------------------------------------------- * * PdDeleteFile -- * * Delete a file, as requested by the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdDeleteFile(char *fileName) { char errbuf[512]; Ns_PdLog(Trace, "PdDeleteFile:"); if (unlink(fileName) < 0) { sprintf(errbuf, "Can't delete file %s: %s", fileName, strerror(errno)); Ns_PdLog(Error, "nspd: failed deleting file: '%s'", errbuf); Ns_PdSendString(errbuf); } else { Ns_PdSendString(OK_STATUS); } } /* *---------------------------------------------------------------------- * * PdCreateTmpFile -- * * Create a temp file, as requested by the external driver. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdCreateTmpFile() { char tmpName[MAX_PATH]; char errbuf[256]; int fd; int status = NS_OK; Ns_PdLog(Trace, "PdCreateTmpFile:"); sprintf(tmpName, "%s%s", UNIX_TMPDIR, FILE_TEMPLATE); if (status == NS_OK) { mktemp(tmpName); if (tmpName[0] == '\0') { sprintf(errbuf, "mktemp of %s failed", tmpName); Ns_PdSendString(errbuf); Ns_PdLog(Error, "nspd: failed to create temp file: '%s'", errbuf); } else if ((fd = open(tmpName, O_CREAT | O_TRUNC | O_RDWR, 0644)) < 0) { sprintf(errbuf, "open/create of %s failed: %s", tmpName, strerror(errno)); Ns_PdSendString(errbuf); Ns_PdLog(Error, "nspd: " "failed to open/create temp file: '%s'", errbuf); } else { close(fd); Ns_PdSendString(OK_STATUS); Ns_PdSendString(tmpName); } } } /* *---------------------------------------------------------------------- * * Ns_PdSendString -- * * Send a string, followed by \n per the protocol. Since we're * tacking on the \n, the string is copied into another (larger) * buffer. (This is still more efficient than a separate write * system call for the the additional '\n'. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_PdSendString(char *rsp) { char outbuf[MAXSTACK]; char *pout = outbuf; int alloced = 0; int len; len = strlen(rsp); if (len > MAXSTACK - 1) { /* * rare event */ if ((pout = malloc((size_t)(len + 1))) == NULL) { Ns_PdLog(Error, "nspd: " "data truncated; malloc failed to get %d bytes", len + 1); rsp[MAXSTACK - 1] = '\0'; pout = outbuf; } else { alloced = 1; } } sprintf(pout, "%s\n", rsp); Ns_PdSendData(pout, len + 1); if (alloced) { free(pout); } } /* *---------------------------------------------------------------------- * * RecvData -- * * Recieve data from the external driver. * * Results: * Numberof bytes read, or <0 on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int RecvData(char *buf, int len) { int readReturn; do { readReturn = read(0, buf, (size_t)len); } while ((readReturn < 0) && (errno == EINTR)); if (readReturn < 0) { Ns_PdLog(Error, "nspd: read error while reading %d bytes: '%s'", strerror(errno), len); } return readReturn; } /* *---------------------------------------------------------------------- * * StringTrimLeft -- * * Trim leading white space from a string. * * Results: * A pointer into the original string after whitespace. * * Side effects: * None. * *---------------------------------------------------------------------- */ static char * StringTrimLeft(char *string) { assert(string != NULL); while (isspace((unsigned int)*string)) { ++string; } return string; } /* *---------------------------------------------------------------------- * * Ns_StrTrimRight -- * * Trim trailing white space from a string. * * Results: * A pointer to the original string. * * Side effects: * Modifies string. * *---------------------------------------------------------------------- */ static char * StringTrimRight(char *string) { int len; assert(string != NULL); len = strlen(string); while ((len-- >= 0) && (isspace((unsigned int)string[len]) || string[len] == '\n')) { string[len] = '\0'; } return string; } /* *---------------------------------------------------------------------- * * PdFindBin -- * * Set the bin directory and cd /. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PdFindBin(char *pgm) { pdBin = pgm; chdir("/"); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/������������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014412� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/nsinstall.tcl�����������������������������������������������������������������0000644�0001750�0001750�00000006571�10447625100�017127� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # nsinstall.tcl -- # # Install script for AOLserver. # proc usage {{status 1}} { puts {Usage: nsinstall.tcl ?-d dir? ?-f file? ?-n? -?-e? ?--? pattern ?pattern ...? Where: -h This message. -d dir Destination directory. -f file Copy as specific filename. -n Do not overwrite existing files. -e Install with execute permission. -- Specifies end of args. pattern One or more file glob patterns (e.g., foo.c, *.tcl) One of -f or -d must be specified} exit $status } set pid [pid] set mode 0644 set overwrite 1 set iswin [string equal $tcl_platform(platform) windows] # # Process option arguments. # set i 0 while {$i < $argc} { set arg [lindex $argv $i] switch -glob -- $arg { -h { usage 0 } -d { set dir [lindex $argv [incr i]] } -f { set file [lindex $argv [incr i]] } -e { set mode 0755 } -n { set overwrite 0 } -* { usage } -- - default { break } } incr i } # # Get list of files from remaining args. # set files "" while {$i < $argc} { foreach f [glob -nocomplain [lindex $argv $i]] { lappend files $f } incr i } # # Sanity checks. # if [info exists file] { if {[llength $files] > 1} { usage } set file [file normalize $file] set dir [file dirname $file] if {[file exists $dir] && ![file isdirectory $dir]} { usage } } if ![info exists dir] { usage } if $iswin { set modestr "" } else { set modestr " ($mode)" } # # Create directory and copy file(s). # file mkdir $dir foreach src $files { set src [file normalize $src] if [info exists file] { set tail [file tail $file] } else { set tail [file tail $src] } set dst [file normalize $dir/$tail] set tmp [file normalize $dir/.#inst.$tail.$pid] incr i if [file exists $dst] { if !$overwrite { puts "exists: $dst" continue } file delete $dst } while {[file type $src] == "link"} { set link [file readlink $src] puts "follow link: $src = $link" set src $link } file copy $src $tmp if {!$iswin} { file attributes $tmp -permission $mode } file rename $tmp $dst puts "installed: $dst$modestr" } ���������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/nsmakeall.tcl�����������������������������������������������������������������0000644�0001750�0001750�00000004203�10322025052�017045� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # nsmakeall.tcl -- # # Execute make for given target in each subdirectory in given list. # # Usage: # nsmakeall.tcl target dir ?dir dir ...? # # Where: # target Make target (e.g., "clean") # dir One or more sub-directories to make. # if {$argc < 2} { puts "Usage: $argv0 target dir ?dir dir ...?" exit 1 } if ![string equal $tcl_platform(platform) unix] { set make nmake } else { # Look for gmake if available in the path, otherwise try make. set make make foreach p [split $env(PATH) :] { if [file executable $p/gmake] { set make $p/gmake break } } } set target [lindex $argv 0] set srcdir [file native [pwd]] for {set i 1} {$i < $argc} {incr i} { set dir [lindex $argv $i] cd $srcdir/$dir puts "make $target: $dir" if [catch {exec $make SRCDIR=$srcdir $target >&@ stdout}] { exit 1 } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/ini2tcl.tcl�������������������������������������������������������������������0000755�0001750�0001750�00000003571�10275731074�016473� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # ini2tcl.tcl -- # # Translate an old-style .ini file into simple .tcl format. # Usage: # nsd -ft ini2tcl.tcl nsd.ini # set fp [open [lindex $argv 3]] while {[gets $fp line] >= 0} { set line [string trim $line] if {[regsub {^;} $line {#} line]} { puts $line } elseif {[regsub {^\[(.*)\]} $line {\1} line]} { puts "\n[list ns_section $line]" } elseif {[string match *=* $line]} { set line [split $line =] set key [string trim [lindex $line 0]] set val [string trim [lindex $line 1]] puts [list ns_param $key $val] } } exit ���������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/install-sh��������������������������������������������������������������������0000755�0001750�0001750�00000004317�10450262107�016412� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5; it is not part of GNU. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" instcmd="$mvprog" chmodcmd="" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -S) stripcmd="$stripprog $2" shift shift continue;; *) if [ x"$src" = x ] then src=$1 else dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` fi # Make a temp file name in the proper directory. dstdir=`dirname $dst` dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp # and set any options; do chmod last to preserve setuid bits if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi # Now rename the file to the real destination. $doit $rmcmd $dst $doit $mvcmd $dsttmp $dst exit 0 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/nsremove.tcl������������������������������������������������������������������0000644�0001750�0001750�00000003211�10301226320�016730� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # nsremove.tcl -- # # Remove one or more files. # # Usage: # nsremove.tcl pattern ?pattern ...? # # Where: # pattern Glob-style pattern of files to remove. # foreach pattern $argv { foreach file [glob -nocomplain $pattern] { if [file exists $file] { file delete $file puts "removed: $file" } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/tcl2ini.tcl�������������������������������������������������������������������0000644�0001750�0001750�00000003337�10275731077�016473� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # tcl2ini.tcl -- # # Dump old-style nsd.ini format. # # Usage: # nsd -ft tcl2ini.tcl nsd.tcl # proc ns_section s { global _section set _section $s } proc ns_param {k v} { global _section _sections lappend _sections($_section) $k $v } source [lindex $argv 3] foreach s [lsort [array names _sections]] { puts "\[$s\]" foreach {k v} $_sections($s) { puts " $k = $v" } puts "" } exit �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/util/nsinstall-man.sh��������������������������������������������������������������0000755�0001750�0001750�00000004625�10424416401�017526� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # nsinstall-man.sh -- # # Install a man or HTML page, making links to all functions/commands # documented in the file. Modified from the Tcl source. # # $Id: nsinstall-man.sh,v 1.4 2006/04/28 13:47:45 jgdavidson Exp $ # ECHO=: LN=ln RM="rm -f" MD="mkdir -p" SED=sed CAT=cat CHMOD=chmod MODE=0444 GROFF=groff HTM="" while true; do case $1 in -v | --verbose) ECHO=echo;; -s | --symlinks) LN="$LN -s ";; -h | --html) HTM=".htm";; *) break ;; esac shift done if test "$#" -ne 1 -a "$#" -ne 2; then echo "Usage: $0 <options> file ?dir?" exit 1 fi if test "$#" -eq 2; then DIR=$2 else DIR=$AOLSERVER fi if test -z "$DIR"; then echo "Must specify output directory or set AOLSERVER environment variable." exit 1 fi MANPAGE=$1 SECTION=`echo $MANPAGE | $SED 's/.*\(.\)$/\1/'` # # Search for man.macros in common locations. # MACROS="" for d in \ `dirname $MANPAGE` \ $AOLSERVER/include \ `dirname $0`/../include \ ../doc \ ./aolserver/doc do f="$d/man.macros" if test -r $f; then MACROS=$f break fi done if test -z "$MACROS"; then echo "Can not locate required man.macros" exit 1 fi # # Parse the alternative names out of a man page. # # /^\\.SH NAME/{ ;# Look for a line, that starts with .SH NAME # s/^.*$// ;# Delete the content of this line from the buffer # n ;# Read next line # s/,//g ;# Remove all commas ... # s/\\\ //g ;# .. and backslash-escaped spaces. # s/ \\\-.*// ;# Delete from \- to the end of line # p ;# print the result # q ;# exit # } # # Backslashes are trippled in the sed script, because it is in # backticks which don't pass backslashes literally. # # Please keep the commented version above updated if you # change anything to the script below. NAMES=`$SED -n ' /^\\.SH NAME/{ s/^.*$// n s/,//g s/\\\ //g s/ \\\-.*// p q }' $MANPAGE` # # Create or link man pages for each name. # if test -z "$HTM"; then DIR=$DIR/man$SECTION MAN2HTM=$CAT else DIR=$DIR MAN2HTM="$GROFF -Thtml -man" fi FIRST="" $MD $DIR for name in $NAMES do tail=$name.$SECTION file=$DIR/$tail$HTM $RM $file if test -z "$FIRST"; then FIRST=$file $SED -e "/man\.macros/r $MACROS" -e "/man\.macros/d" $MANPAGE | \ $MAN2HTM > $file $CHMOD $MODE $file $ECHO "created: $file ($MODE)" else $LN $FIRST $file $ECHO "linked: $file" fi done �����������������������������������������������������������������������������������������������������������aolserver4-4.5.1/Makefile���������������������������������������������������������������������������0000644�0001750�0001750�00000004614�10450262107�015071� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/Makefile,v 1.64 2006/06/27 17:00:55 jgdavidson Exp $ # # bins=nsthread nsd nstclsh mods=nsdb nssock nslog nsperm nscgi nscp dirs=$(bins) $(mods) SRCDIR=. include include/ns.mak all: build build: $(MAKEALL) build $(dirs) clean: $(MAKEALL) clean $(dirs) install: install-bins install-includes install-util install-tcl \ install-mods install-skel install-bins: $(MAKEALL) install $(bins) install-mods: $(MAKEALL) install $(mods) install-util: $(INST) -d $(INSTBIN) util/*.tcl $(INST) -d $(INSTBIN) -e util/nsinstall-man.sh $(INST) -d $(INSTBIN) -e util/install-sh install-tcl: $(INST) -d $(AOLSERVER)/modules/tcl tcl/*.tcl install-includes: $(INST) -d $(INSTINC) include/*.c include/*.h include/ns.mak \ include/Makefile.* install-skel: $(INST) -d $(AOLSERVER)/log $(INST) -d $(AOLSERVER) examples/config/base.tcl $(INST) -d $(AOLSERVER)/servers/server1/pages -n index.adp install-docs: $(MAKEALL) install doc distclean: clean $(RM) include/ns.mak include/ns.bak \ config.status config.log config.cache ��������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/aclocal.m4�������������������������������������������������������������������������0000644�0001750�0001750�00000007412�10300740175�015270� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/aclocal.m4,v 1.5 2005/08/17 22:55:57 jgdavidson Exp $ # # # configure.in -- # # AOLserver autoconf include which simply includes Tcl's tcl.m4. # builtin(include,../tcl/unix/tcl.m4) dnl dnl Check to see what variant of gethostbyname_r() we have. Defines dnl HAVE_GETHOSTBYNAME_R_{6, 5, 3} depending on what variant is found. dnl dnl Based on David Arnold's example from the comp.programming.threads dnl FAQ Q213. dnl AC_DEFUN(AC_HAVE_GETHOSTBYNAME_R, [saved_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -lnsl" AC_CHECK_FUNC(gethostbyname_r, [ AC_MSG_CHECKING([for gethostbyname_r with 6 args]) AC_TRY_COMPILE([ #include <netdb.h> ], [ char *name; struct hostent *he, *res; char buffer[2048]; int buflen = 2048; int h_errnop; (void) gethostbyname_r(name, he, buffer, buflen, &res, &h_errnop); ], [ AC_DEFINE(HAVE_GETHOSTBYNAME_R) AC_DEFINE(HAVE_GETHOSTBYNAME_R_6) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) AC_MSG_CHECKING([for gethostbyname_r with 5 args]) AC_TRY_COMPILE([ #include <netdb.h> ], [ char *name; struct hostent *he; char buffer[2048]; int buflen = 2048; int h_errnop; (void) gethostbyname_r(name, he, buffer, buflen, &h_errnop); ], [ AC_DEFINE(HAVE_GETHOSTBYNAME_R) AC_DEFINE(HAVE_GETHOSTBYNAME_R_5) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) AC_MSG_CHECKING([for gethostbyname_r with 3 args]) AC_TRY_COMPILE([ #include <netdb.h> ], [ char *name; struct hostent *he; struct hostent_data data; (void) gethostbyname_r(name, he, &data); ], [ AC_DEFINE(HAVE_GETHOSTBYNAME_R) AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) ]) ]) ]) ]) CFLAGS="$saved_CFLAGS"]) AC_DEFUN(AC_HAVE_GETHOSTBYADDR_R, [saved_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -lnsl" AC_CHECK_FUNC(gethostbyaddr_r, [ AC_MSG_CHECKING([for gethostbyaddr_r with 7 args]) AC_TRY_COMPILE([ #include <netdb.h> ], [ char *addr; int length; int type; struct hostent *result; char buffer[2048]; int buflen = 2048; int h_errnop; (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen, &h_errnop); ], [ AC_DEFINE(HAVE_GETHOSTBYADDR_R) AC_DEFINE(HAVE_GETHOSTBYADDR_R_7) AC_MSG_RESULT(yes) ], [ AC_MSG_RESULT(no) ]) ]) CFLAGS="$saved_CFLAGS"]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscgi/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661375�014537� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscgi/nscgi.html�������������������������������������������������������������������0000755�0001750�0001750�00000014507�10117645034�016536� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nscgi</title> </head> <body bgcolor="#ffffff"> <h2>nscgi -- Common Gateway Interface (CGI) module</h2> <p>$Header: /cvsroot/aolserver/aolserver/nscgi/nscgi.html,v 1.3 2004/09/08 18:06:20 dossy Exp $</p> <ul> <li><a href="#Theory_of_Operation">Theory of Operation</a></li> <li><a href="#Known_Issues">Known Issues</a></li> <li><a href="#Configuration_Options">Configuration Options</a></li> <li><a href="#Sample_Configuration">Sample Configuration</a></li> </ul> <h3><a name="Theory_of_Operation">Theory of Operation</a></h3> <p>The nscgi module provides the traditional Common Gateway Interface (CGI) that web servers use to run external applications. The nscgi module works well for small- to medium-sized applications. For large applications, it should not be used due to the severe load that running external applications will place on a system. More modern approaches use ADP, Tcl, and C libraries instead.</p> <h3><a name="Known_Issues">Known Issues</a></h3> <p>The Common Gateway Interface is inefficient, wasteful, and slow -- and nscgi is no exception. AOLserver provides a better solution in the form of a robust, in-process scripting language with rich Tcl and C API's. The nscgi module should only be used for legacy applications for which no redesign is possible.</p> <h3><a name="Configuration_Options">Configuration Options</a></h3> <p>The following options are available for configuring the nscgi module:</p> <table border="1"> <tr> <th>Option</th> <th>Type</th> <th>Default</th> <th>Description</th> </tr> <tr> <td>environment</td> <td>string</td> <td>N/A</td> <td>The name of the config section which contains the additional environment variable names and values to set before executing the CGI. The config section is a subsection of the "ns/environment" config section.</td> </tr> <tr> <td>gethostbyaddr</td> <td>boolean</td> <td>false</td> <td>Whether to resolve the peer IP address to its hostname when setting the REMOTE_HOST environment variable. If "false", the peer IP address will be used instead. Caution: turning this option on can negatively impact performance due to the overhead of having to perform a DNS look-up on every CGI request.</td> </tr> <tr> <td>interps</td> <td>string</td> <td>N/A</td> <td>The name of the config section which contains the mappings from file extensions to CGI interpreters to execute the CGI with. The config section is a subsection of the "ns/interps" config section.</td> </tr> <tr> <td>limit</td> <td>integer</td> <td>0</td> <td>Maximum number of concurrent CGI requests to execute. "0" means unlimited.</td> </tr> <tr> <td>map</td> <td>string</td> <td>N/A</td> <td> <p>Maps relative URIs or glob patterns to filesystem paths or executables. The <b>map</b> option's value is of the form:</p> <blockquote><i>method pattern path</i></blockquote> <ul> <li><i>method</i> refers to the HTTP request method (i.e., HEAD, GET, POST, etc.)</li> <li><i>pattern</i> refers to either a relative URI or a glob pattern to match on the HTTP request. This is how nscgi determines whether a request is a CGI request and which <b>map</b> rule applies.</li> <li><i>path</i> is optional, when specified, indicates either the directory where the CGI executables can be found, or the executable that should be used to fulfill the CGI request.</li> </ul> <p>If <i>path</i> is not specified, then the URL must refer a file which is the CGI executable. If it is specified and is a directory, then the filename portion of the URL must refer to a CGI executable in that directory. Otherwise, <i>path</i> must refer to a CGI executable which will handle all requests for this <i>pattern</i>.</p> </td> </tr> <tr> <td>maxinput</td> <td>integer</td> <td>1024000</td> <td>Maximum in bytes to accept in the HTTP request. "0" means unlimited. Mostly useful to limit the size of POST'ed data.</td> </tr> <tr> <td>maxwait</td> <td>integer</td> <td>30</td> <td>Amount of time to wait in the queue when the concurrency limit has been reached. Server will respond with a 503 Service Unavailable error on timeout. If <b>limit</b> is set to "0", this setting will have no effect.</td> </tr> <tr> <td>systemenvironment</td> <td>boolean</td> <td>false</td> <td>Controls whether the CGI will inherit the server process's environment variables or not. Enabling this could potentially leak sensitive information from the parent's environment if the CGI displays its environment variables which is the behavior of some common error-handling code.</td> </tr> </table> <h3><a name="Sample_Configuration">Sample Configuration</a></h3> <pre> # # CGI interface -- nscgi # # Note: CGI is *vastly* inferior to ADP's or even built-in Tcl libraries. # ns_section "ns/server/${servername}/module/nscgi" ns_param limit 0 ;# Max number of concurrent CGI processes ns_param maxinput 1024000 ;# Max bytes allowed in HTTP request ns_param maxwait 30 ;# Max seconds to wait in limit queue ns_param gethostbyaddr false ;# Whether to do reverse DNS lookups # /cgi/foo.cgi maps to /usr/local/cgi/foo.cgi ns_param map "GET /cgi /usr/local/cgi" ns_param map "POST /cgi /usr/local/cgi" ns_param map "HEAD /cgi /usr/local/cgi" # Any request for *.pl will be executed as CGI ns_param map "GET *.pl" ns_param map "POST *.pl" ns_param map "HEAD *.pl" # CGI interp. and environment variable handling -- See admin guide ns_param systemenvironment false ;# Inherit environment from the nsd process ns_param environment cgi ;# Config. section which defines ;# additional environment variables. ns_param interps cgi ;# Config. section which defines ;# interpreters for CGI file extensions. ns_section "ns/environment/cgi" ns_param FOO BAR ;# defines env. var "FOO=BAR" ns_section "ns/interps/cgi" ns_param .pl /usr/bin/perl ;# What to use for .pl files </pre> </body> </html> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscgi/Makefile���������������������������������������������������������������������0000644�0001750�0001750�00000003013�10300725021�016155� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nscgi/Makefile,v 1.6 2005/08/17 21:20:17 jgdavidson Exp $ # MOD = nscgi OBJS = nscgi.o MODINIT = NsCgi_ModInit include ../include/ns.mak ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nscgi/nscgi.c����������������������������������������������������������������������0000644�0001750�0001750�00000101514�10746120276�016010� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nscgi/nscgi.c,v 1.34 2008/01/24 14:29:18 dossy Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #include <sys/stat.h> #include <ctype.h> #include <stdlib.h> /* environ */ #define BUFSIZE 4096 #define NDSTRINGS 5 #define CGI_NPH 1 #define CGI_GETHOST 2 #define CGI_SYSENV 4 #ifdef _WIN32 #define S_ISREG(m) ((m)&_S_IFREG) #define S_ISDIR(m) ((m)&_S_IFDIR) #define DEVNULL "nul:" #else #define DEVNULL "/dev/null" #endif /* * The following structure is allocated for each instance the module is * loaded (normally just once). */ struct Cgi; typedef struct Mod { char *server; char *module; Ns_Set *interps; Ns_Set *mergeEnv; struct Cgi *firstCgiPtr; int flags; int maxCgi; int maxWait; int activeCgi; Ns_Mutex lock; Ns_Cond cond; } Mod; /* * The following structure, allocated on the stack of CgiRequest, is used * to accumulate all the resources of a CGI. CGI is a very messy interface * which requires varying degrees of resources. Packing everything into * this structure allows building up the state in multiple places and * tearing it all down in FreeCgi, thus simplifying the CgiRequest procedure. */ typedef struct Cgi { Mod *modPtr; int flags; int pid; Ns_Set *env; char *name; char *path; char *pathinfo; char *dir; char *exec; char *interp; Ns_Set *interpEnv; int ifd; int ofd; int cnt; char *ptr; int nextds; Tcl_DString ds[NDSTRINGS]; char buf[BUFSIZE]; } Cgi; /* * The following structure defines the context of a single CGI config * mapping, supporting both directory-style and pageroot-style CGI locations. */ typedef struct Map { Mod *modPtr; char *url; char *path; } Map; /* * Local functions defined in this file */ static Tcl_ObjCmdProc CgiTclRegisterCgiObjCmd; static int AddCmds(Tcl_Interp *interp, void *arg); static Ns_OpProc CgiRequest; static int CgiRegister(Mod *modPtr, char *map); static Ns_Callback CgiFreeMap; static Ns_DString *CgiDs(Cgi *cgiPtr); static int CgiInit(Cgi *cgiPtr, Map *mapPtr, Ns_Conn *conn); static void CgiFree(Cgi *cgiPtr); static int CgiExec(Cgi *cgiPtr, Ns_Conn *conn); static int CgiCopy(Cgi *cgiPtr, Ns_Conn *conn); static int CgiRead(Cgi *cgiPtr); static int CgiReadLine(Cgi *cgiPtr, Ns_DString *dsPtr); static char *NextWord(char *s); static void SetAppend(Ns_Set *set, int index, char *sep, char *value); static void SetUpdate(Ns_Set *set, char *key, char *value); /* *---------------------------------------------------------------------- * * NsCgi_ModInit -- * * Create a new CGI module instance. Note: This module can * be loaded multiple times. * * Results: * NS_OK/NS_ERROR. * * Side effects: * URL's may be registered for CGI. * *---------------------------------------------------------------------- */ int NsCgi_ModInit(char *server, char *module) { char *path, *key, *value, *section; int i, ok; Ns_Set *set; Ns_DString ds; Mod *modPtr; /* * Config basic options. */ path = Ns_ConfigGetPath(server, module, NULL); modPtr = ns_calloc(1, sizeof(Mod)); modPtr->module = module; modPtr->server = server; if (!Ns_ConfigGetInt(path, "limit", &modPtr->maxCgi)) { modPtr->maxCgi = 0; } if (!Ns_ConfigGetInt(path, "maxwait", &modPtr->maxWait)) { modPtr->maxWait = 30; } if (!Ns_ConfigGetBool(path, "gethostbyaddr", &i)) { i = 0; } if (i) { modPtr->flags |= CGI_GETHOST; } /* * Configure the various interp and env options. */ Ns_DStringInit(&ds); section = Ns_ConfigGetValue(path, "interps"); if (section != NULL) { Ns_DStringVarAppend(&ds, "ns/interps/", section, NULL); modPtr->interps = Ns_ConfigGetSection(ds.string); if (modPtr->interps == NULL) { Ns_Log(Warning, "nscgi: no such interps section: %s", ds.string); } Ns_DStringTrunc(&ds, 0); } section = Ns_ConfigGetValue(path, "environment"); if (section != NULL) { Ns_DStringVarAppend(&ds, "ns/environment/", section, NULL); modPtr->mergeEnv = Ns_ConfigGetSection(ds.string); if (modPtr->mergeEnv == NULL) { Ns_Log(Warning, "nscgi: no such environment section: %s", ds.string); } Ns_DStringTrunc(&ds, 0); } if (!Ns_ConfigGetBool(path, "systemenvironment", &i)) { i = 0; } if (i) { modPtr->flags |= CGI_SYSENV; } /* * Register all requested mappings. */ ok = 0; set = Ns_ConfigGetSection(path); for (i = 0; set != NULL && i < Ns_SetSize(set); ++i) { key = Ns_SetKey(set, i); value = Ns_SetValue(set, i); if (STRIEQ(key, "map")) { ok += CgiRegister(modPtr, value); } } Ns_DStringFree(&ds); if (!ok) { ns_free(modPtr); } else { Ns_MutexInit(&modPtr->lock); Ns_MutexSetName2(&modPtr->lock, "nscgi", server); } /* * N.B. What happens next when this module gets loaded more than once? */ Ns_TclInitInterps(server, AddCmds, modPtr); return NS_OK; } /* *---------------------------------------------------------------------- * * AddCmds -- * * Add Tcl commands for nscgi * * Results: * NS_OK * * Side effects: * Adds Tcl commands * *---------------------------------------------------------------------- */ static int AddCmds(Tcl_Interp *interp, void *arg) { Tcl_CreateObjCommand(interp, "ns_register_cgi", CgiTclRegisterCgiObjCmd, arg, NULL); return NS_OK; } /* *---------------------------------------------------------------------- * * CgiTclRegisterCgiObjCmd -- * * Implements ns_register_cgi as obj command. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int CgiTclRegisterCgiObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Mod *modPtr = (Mod *) arg; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "map"); return TCL_ERROR; } CgiRegister(modPtr, Tcl_GetString(objv[1])); return TCL_OK; } /* *---------------------------------------------------------------------- * * CgiRequest - * * Process a CGI request. * * Results: * Standard AOLserver request result. * * Side effects: * Program may be executed. * *---------------------------------------------------------------------- */ static int CgiRequest(void *arg, Ns_Conn *conn) { Map *mapPtr; Mod *modPtr; Cgi cgi; int status; mapPtr = arg; modPtr = mapPtr->modPtr; /* * Check for input overflow and initialize the CGI context. */ if (CgiInit(&cgi, mapPtr, conn) != NS_OK) { return Ns_ReturnNotFound(conn); } else if (cgi.interp == NULL && access(cgi.exec, X_OK) != 0) { if (STREQ(conn->request->method, "GET") || STREQ(conn->request->method, "HEAD")) { /* * Evidently people are storing images and such in * their cgi bin directory and they expect us to * return these files directly. */ status = Ns_ConnReturnFile(conn, 200, NULL, cgi.exec); } else { status = Ns_ReturnNotFound(conn); } goto done; } /* * Get the content fd if necessary. */ if (conn->contentLength <= 0) { cgi.ifd = Ns_DevNull(); } else { cgi.ifd = Ns_ConnContentFd(conn); if (cgi.ifd < 0) { status = Ns_ConnReturnInternalError(conn); goto done; } } /* * Wait for CGI access if necessary. */ if (modPtr->maxCgi > 0) { Ns_Time timeout; int wait = NS_OK; Ns_GetTime(&timeout); Ns_IncrTime(&timeout, modPtr->maxWait, 0); Ns_MutexLock(&modPtr->lock); while (wait == NS_OK && modPtr->activeCgi >= modPtr->maxCgi) { wait = Ns_CondTimedWait(&modPtr->cond, &modPtr->lock, &timeout); } if (wait == NS_OK) { ++modPtr->activeCgi; } Ns_MutexUnlock(&modPtr->lock); if (wait != NS_OK) { status = Ns_ConnReturnStatus(conn, 503); goto done; } } /* * Execute the CGI and copy output. */ if (CgiExec(&cgi, conn) != NS_OK) { status = Ns_ConnReturnInternalError(conn); } else { status = CgiCopy(&cgi, conn); } /* * Release CGI access. */ if (modPtr->maxCgi > 0) { Ns_MutexLock(&modPtr->lock); --modPtr->activeCgi; Ns_CondSignal(&modPtr->cond); Ns_MutexUnlock(&modPtr->lock); } done: CgiFree(&cgi); return status; } /* *---------------------------------------------------------------------- * * CgiInit - * * Setup a CGI context structure. This function * encapsulates the majority of the CGI semantics. * * Results: * NS_OK or NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int CgiInit(Cgi *cgiPtr, Map *mapPtr, Ns_Conn *conn) { Mod *modPtr; Ns_DString *dsPtr; int ulen, plen, i; struct stat st; char *s, *e; char *url = conn->request->url; char *server = Ns_ConnServer(conn); modPtr = mapPtr->modPtr; memset(cgiPtr, 0, ((char *) &cgiPtr->ds[0]) - (char *) cgiPtr); cgiPtr->buf[0] = '\0'; cgiPtr->modPtr = modPtr; cgiPtr->pid = -1; cgiPtr->ofd = cgiPtr->ifd = -1; cgiPtr->ptr = cgiPtr->buf; for (i = 0; i < NDSTRINGS; ++i) { Ns_DStringInit(&cgiPtr->ds[i]); } /* * Determine the executable or script to run. */ ulen = strlen(url); plen = strlen(mapPtr->url); if ((strncmp(mapPtr->url, url, (size_t)plen) == 0) && (ulen == plen || url[plen] == '/')) { if (mapPtr->path == NULL) { /* * No path mapping, script in pages directory: * * 1. Path is Url2File up to the URL prefix. * 2. SCRIPT_NAME is the URL prefix. * 3. PATH_INFO is everything past SCRIPT_NAME in the URL. */ cgiPtr->name = Ns_DStringNAppend(CgiDs(cgiPtr), url, plen); dsPtr = CgiDs(cgiPtr); Ns_UrlToFile(dsPtr, server, cgiPtr->name); cgiPtr->path = dsPtr->string; cgiPtr->pathinfo = url + plen; } else if (stat(mapPtr->path, &st) != 0) { goto err; } else if (S_ISDIR(st.st_mode)) { /* * Path mapping is a directory: * * 1. The script file is the first path element in the URL past * the mapping prefix. * 2. SCRIPT_NAME is the URL up to and including the * script file. * 3. PATH_INFO is everything in the URL past SCRIPT_NAME. * 4. The script pathname is the script prefix plus the * script file. */ if (plen == ulen) { goto err; } s = url + plen + 1; e = strchr(s, '/'); if (e != NULL) { *e = '\0'; } cgiPtr->name = Ns_DStringAppend(CgiDs(cgiPtr), url); cgiPtr->path = Ns_DStringVarAppend(CgiDs(cgiPtr), mapPtr->path, "/", s, NULL); if (e == NULL) { cgiPtr->pathinfo = ""; } else { *e = '/'; cgiPtr->pathinfo = e; } } else if (S_ISREG(st.st_mode)) { /* * When the path mapping is (or at least could be) a file: * * 1. The script pathname is the mapping. * 2. SCRIPT_NAME is the url prefix. * 3. PATH_INFO is everything in the URL past SCRIPT_NAME. */ cgiPtr->path = Ns_DStringAppend(CgiDs(cgiPtr), mapPtr->path); cgiPtr->name = Ns_DStringAppend(CgiDs(cgiPtr), mapPtr->url); cgiPtr->pathinfo = url + plen; } else { goto err; } } else { /* * The prefix didn't match. Assume the mapping was a wildcard * mapping like *.cgi which was fetched by UrlSpecificGet() but * skipped by strncmp() above. In this case: * * 1. The script pathname is the URL file in the pages directory. * 2. SCRIPT_NAME is the URL. * 3. PATH_INFO is "". */ dsPtr = CgiDs(cgiPtr); Ns_UrlToFile(dsPtr, server, url); cgiPtr->path = dsPtr->string; cgiPtr->name = url; cgiPtr->pathinfo = url + ulen; } /* * Copy the script directory and see if the script is NPH. */ s = strrchr(cgiPtr->path, '/'); if (s == NULL || access(cgiPtr->path, R_OK) != 0) { goto err; } *s = '\0'; cgiPtr->dir = Ns_DStringAppend(CgiDs(cgiPtr), cgiPtr->path); *s++ = '/'; if (strncmp(s, "nph-", 4) == 0) { cgiPtr->flags |= CGI_NPH; } /* * Look for a script interpreter. */ if (modPtr->interps != NULL && (s = strrchr(cgiPtr->path, '.')) != NULL && (cgiPtr->interp = Ns_SetIGet(modPtr->interps, s)) != NULL) { cgiPtr->interp = Ns_DStringAppend(CgiDs(cgiPtr), cgiPtr->interp); s = strchr(cgiPtr->interp, '('); if (s != NULL) { *s++ = '\0'; e = strchr(s, ')'); if (e != NULL) { *e = '\0'; } cgiPtr->interpEnv = Ns_ConfigGetSection(s); } } if (cgiPtr->interp != NULL) { cgiPtr->exec = cgiPtr->interp; } else { cgiPtr->exec = cgiPtr->path; } return NS_OK; err: CgiFree(cgiPtr); return NS_ERROR; } /* *---------------------------------------------------------------------- * * CgiDs - * * Return the next available dstring in the CGI context. * * Results: * Pointer to DString. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Ns_DString * CgiDs(Cgi *cgiPtr) { return &cgiPtr->ds[cgiPtr->nextds++]; } /* *---------------------------------------------------------------------- * * CgiFree - * * Free temp buffers used in CGI context. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void CgiFree(Cgi *cgiPtr) { /* * Close the pipe. */ if (cgiPtr->ofd >= 0) { close(cgiPtr->ofd); } /* * Free the environment. */ if (cgiPtr->env != NULL) { Ns_SetFree(cgiPtr->env); } /* * Reap the process. */ if (cgiPtr->pid != -1 && Ns_WaitProcess(cgiPtr->pid) != NS_OK) { Ns_Log(Error, "nscgi: wait for %s failed: %s", cgiPtr->exec, strerror(errno)); } /* * Free all dstrings. */ while (cgiPtr->nextds-- > 0) { Ns_DStringFree(&cgiPtr->ds[cgiPtr->nextds]); } } /* *---------------------------------------------------------------------- * * CgiExec - * * Construct the command args and environment and execute * the CGI. * * Results: * NS_OK or NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int CgiExec(Cgi *cgiPtr, Ns_Conn *conn) { int i, index, opipe[2]; int https = 0; char *s, *e, *p, **envp; Ns_DString *dsPtr; Mod *modPtr = cgiPtr->modPtr; /* * Get a dstring which will be used to setup env variables * and the arg list. */ dsPtr = CgiDs(cgiPtr); /* * Setup and merge the environment set. */ cgiPtr->env = Ns_SetCreate(NULL); if (cgiPtr->interpEnv != NULL) { cgiPtr->env = Ns_SetCopy(cgiPtr->interpEnv); } else { cgiPtr->env = Ns_SetCreate(NULL); } if (modPtr->mergeEnv != NULL) { Ns_SetMerge(cgiPtr->env, modPtr->mergeEnv); } if (modPtr->flags & CGI_SYSENV) { envp = Ns_CopyEnviron(dsPtr); while (*envp != NULL) { s = *envp; e = strchr(s, '='); if (e != NULL) { *e = '\0'; i = Ns_SetFind(cgiPtr->env, s); if (i < 0) { Ns_SetPut(cgiPtr->env, s, e+1); } *e = '='; } ++envp; } Ns_DStringTrunc(dsPtr, 0); } /* * PATH is the only variable copied from the running environment if it * isn't already in the server default environment. */ if (Ns_SetFind(cgiPtr->env, "PATH") < 0) { s = getenv("PATH"); if (s != NULL) { SetUpdate(cgiPtr->env, "PATH", s); } } /* * Set all the CGI specified variables. */ SetUpdate(cgiPtr->env, "REQUEST_URI", conn->request->url); SetUpdate(cgiPtr->env, "SCRIPT_NAME", cgiPtr->name); SetUpdate(cgiPtr->env, "SCRIPT_FILENAME", cgiPtr->path); if (cgiPtr->pathinfo != NULL && *cgiPtr->pathinfo != '\0') { Ns_DString tmp; if (Ns_DecodeUrl(dsPtr, cgiPtr->pathinfo) != NULL) { SetUpdate(cgiPtr->env, "PATH_INFO", dsPtr->string); } else { SetUpdate(cgiPtr->env, "PATH_INFO", cgiPtr->pathinfo); } Ns_DStringTrunc(dsPtr, 0); Ns_DStringInit(&tmp); Ns_UrlToFile(dsPtr, modPtr->server, cgiPtr->pathinfo); if (Ns_DecodeUrl(&tmp, dsPtr->string) != NULL) { SetUpdate(cgiPtr->env, "PATH_TRANSLATED", tmp.string); } else { SetUpdate(cgiPtr->env, "PATH_TRANSLATED", dsPtr->string); } Ns_DStringFree(&tmp); Ns_DStringTrunc(dsPtr, 0); } else { SetUpdate(cgiPtr->env, "PATH_INFO", ""); } SetUpdate(cgiPtr->env, "GATEWAY_INTERFACE", "CGI/1.1"); Ns_DStringVarAppend(dsPtr, Ns_InfoServer(), "/", Ns_InfoVersion(), NULL); SetUpdate(cgiPtr->env, "SERVER_SOFTWARE", dsPtr->string); Ns_DStringTrunc(dsPtr, 0); SetUpdate(cgiPtr->env, "SERVER_ROOT", Ns_InfoHomePath()); SetUpdate(cgiPtr->env, "DOCUMENT_ROOT", Ns_PageRoot(modPtr->server)); Ns_DStringPrintf(dsPtr, "HTTP/%2.1f", conn->request->version); SetUpdate(cgiPtr->env, "SERVER_PROTOCOL", dsPtr->string); Ns_DStringTrunc(dsPtr, 0); /* * Determine SERVER_NAME from the conn location. */ s = Ns_ConnLocation(conn); p = NULL; if (s != NULL) { if (strstr(s, "://") == NULL) { Ns_Log(Warning, "nscgi: location does not contain '://'"); s = NULL; } else { if (strncmp(s, "https://", 8) == 0) { SetUpdate(cgiPtr->env, "HTTPS", "on"); https = 1; } else { SetUpdate(cgiPtr->env, "HTTPS", "off"); } s = strchr(s, ':'); /* Get past the http */ if (s != NULL) { s += 3; /* Get past the // */ p = strchr(s, ':'); /* Get to the port number */ } } } if (s == NULL) { s = Ns_ConnHost(conn); SetUpdate(cgiPtr->env, "SERVER_NAME", s); } else { if (p == NULL) { Ns_DStringAppend(dsPtr, s); /* No port number */ } else { Ns_DStringNAppend(dsPtr, s, (p - s)); /* Port number exists */ } s = Ns_DStringExport(dsPtr); SetUpdate(cgiPtr->env, "SERVER_NAME", s); ns_free(s); } /* * Determine SERVER_PORT from the conn location. */ s = Ns_ConnLocation(conn); if (s != NULL) { s = strchr(s, ':'); /* Skip past http. */ if (s != NULL) { ++s; s = strchr(s, ':'); /* Skip past hostname. */ if (s != NULL) { ++s; } } } if (s == NULL) { if (https) { s = "443"; } else { s = "80"; } } SetUpdate(cgiPtr->env, "SERVER_PORT", s); SetUpdate(cgiPtr->env, "AUTH_TYPE", "Basic"); SetUpdate(cgiPtr->env, "REMOTE_USER", conn->authUser); s = Ns_ConnPeer(conn); if (s != NULL) { SetUpdate(cgiPtr->env, "REMOTE_ADDR", s); if ((modPtr->flags & CGI_GETHOST)) { if (Ns_GetHostByAddr(dsPtr, s)) { SetUpdate(cgiPtr->env, "REMOTE_HOST", dsPtr->string); } Ns_DStringTrunc(dsPtr, 0); } else { SetUpdate(cgiPtr->env, "REMOTE_HOST", s); } } SetUpdate(cgiPtr->env, "REQUEST_METHOD", conn->request->method); SetUpdate(cgiPtr->env, "QUERY_STRING", conn->request->query); s = Ns_SetIGet(conn->headers, "Content-Type"); if (s == NULL) { if (STREQ("POST", conn->request->method)) { s = "application/x-www-form-urlencoded"; } else { s = ""; } } SetUpdate(cgiPtr->env, "CONTENT_TYPE", s); if (conn->contentLength <= 0) { SetUpdate(cgiPtr->env, "CONTENT_LENGTH", ""); } else { Ns_DStringPrintf(dsPtr, "%u", (unsigned) conn->contentLength); SetUpdate(cgiPtr->env, "CONTENT_LENGTH", dsPtr->string); Ns_DStringTrunc(dsPtr, 0); } /* * Set the HTTP_ header variables. */ Ns_DStringAppend(dsPtr, "HTTP_"); for (i = 0; i < Ns_SetSize(conn->headers); ++i) { s = Ns_SetKey(conn->headers, i); e = Ns_SetValue(conn->headers, i); Ns_DStringAppend(dsPtr, s); s = dsPtr->string + 5; while (*s != '\0') { if (*s == '-') { *s = '_'; } else if (islower(UCHAR(*s))) { *s = toupper(UCHAR(*s)); } ++s; } index = Ns_SetFind(cgiPtr->env, dsPtr->string); if (index < 0) { Ns_SetPut(cgiPtr->env, dsPtr->string, e); } else { SetAppend(cgiPtr->env, index, ", ", e); } Ns_DStringTrunc(dsPtr, 5); } /* * Build up the argument block. */ Ns_DStringTrunc(dsPtr, 0); if (cgiPtr->interp != NULL) { Ns_DStringAppendArg(dsPtr, cgiPtr->interp); } if (cgiPtr->path != NULL) { Ns_DStringAppendArg(dsPtr, cgiPtr->path); } s = conn->request->query; if (s != NULL) { if (strchr(s, '=') == NULL) { do { e = strchr(s, '+'); if (e != NULL) { *e = '\0'; } Ns_UrlDecode(dsPtr, s); Ns_DStringNAppend(dsPtr, "", 1); if (e != NULL) { *e++ = '+'; } s = e; } while (s != NULL); } Ns_DStringNAppend(dsPtr, "", 1); } /* * Create the output pipe. */ if (ns_pipe(opipe) != 0) { Ns_Log(Error, "nscgi: pipe() failed: %s", strerror(errno)); return NS_ERROR; } /* * Execute the CGI. */ cgiPtr->pid = Ns_ExecProcess(cgiPtr->exec, cgiPtr->dir, cgiPtr->ifd, opipe[1], dsPtr->string, cgiPtr->env); close(opipe[1]); if (cgiPtr->pid < 0) { close(opipe[0]); return NS_ERROR; } cgiPtr->ofd = opipe[0]; return NS_OK; } /* *---------------------------------------------------------------------- * * CgiRead - * * Read content from pipe into the CGI buffer. * * Results: * Number of bytes read or -1 on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int CgiRead(Cgi *cgiPtr) { int n; cgiPtr->ptr = cgiPtr->buf; do { n = read(cgiPtr->ofd, cgiPtr->buf, sizeof(cgiPtr->buf)); } while (n < 0 && errno == EINTR); if (n > 0) { cgiPtr->cnt = n; } else if (n < 0) { Ns_Log(Error, "nscgi: pipe read() from %s failed: %s", cgiPtr->exec, strerror(errno)); } return n; } /* *---------------------------------------------------------------------- * * CgiReadLine - * * Read and right trim a line from the pipe. * * Results: * Length of header read or -1 on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int CgiReadLine(Cgi *cgiPtr, Ns_DString *dsPtr) { char c; int n; do { while (cgiPtr->cnt > 0) { c = *cgiPtr->ptr; ++cgiPtr->ptr; --cgiPtr->cnt; if (c == '\n') { while (dsPtr->length > 0 && isspace(UCHAR(dsPtr->string[dsPtr->length - 1]))) { Ns_DStringTrunc(dsPtr, dsPtr->length-1); } return dsPtr->length; } Ns_DStringNAppend(dsPtr, &c, 1); } } while ((n = CgiRead(cgiPtr)) > 0); return n; } /* *---------------------------------------------------------------------- * * CgiCopy * * Read and parse headers and then copy output. * * Results: * AOLserver request result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int CgiCopy(Cgi *cgiPtr, Ns_Conn *conn) { Ns_DString ds, redir; int status, last, n, httpstatus; char *value; Ns_Set *hdrs; /* * Skip to copy for nph CGI's. */ if (cgiPtr->flags & CGI_NPH) { goto copy; } /* * Read and parse headers up to the blank line or end of file. */ Ns_DStringInit(&ds); last = -1; httpstatus = 200; hdrs = conn->outputheaders; while ((n = CgiReadLine(cgiPtr, &ds)) > 0) { if (isspace(UCHAR(*ds.string))) { /* NB: Continued header. */ if (last == -1) { continue; /* NB: Silently ignore bad header. */ } SetAppend(hdrs, last, "\n", ds.string); } else { value = strchr(ds.string, ':'); if (value == NULL) { continue; /* NB: Silently ignore bad header. */ } *value++ = '\0'; while (isspace(UCHAR(*value))) { ++value; } if (STRIEQ(ds.string, "status")) { httpstatus = (int) strtol(value, NULL, 10); } else if (STRIEQ(ds.string, "location")) { httpstatus = 302; if (*value == '/') { Ns_DStringInit(&redir); Ns_DStringVarAppend(&redir, Ns_ConnLocation(conn), value, NULL); last = Ns_SetPut(hdrs, ds.string, redir.string); Ns_DStringFree(&redir); } else { last = Ns_SetPut(hdrs, ds.string, value); } } else { last = Ns_SetPut(hdrs, ds.string, value); } } Ns_DStringTrunc(&ds, 0); } Ns_DStringFree(&ds); if (n < 0) { return Ns_ConnReturnInternalError(conn); } /* * Queue the headers and copy remaining content up to end of file. */ Ns_ConnSetRequiredHeaders(conn, NULL, -1); Ns_ConnQueueHeaders(conn, httpstatus); copy: do { status = Ns_WriteConn(conn, cgiPtr->ptr, cgiPtr->cnt); } while (status == NS_OK && CgiRead(cgiPtr) > 0); /* * Close connection now so it will not linger on * waiting for process exit. */ if (status == NS_OK) { status = Ns_ConnClose(conn); } return status; } /* *---------------------------------------------------------------------- * * NextWord - * * Locate next word in CGI mapping. * * Results: * Pointer to next word. * * Side effects: * String is modified in place. * *---------------------------------------------------------------------- */ static char * NextWord(char *s) { while (*s != '\0' && !isspace(UCHAR(*s))) { ++s; } if (*s != '\0') { *s++ = '\0'; while (isspace(UCHAR(*s))) { ++s; } } return s; } /* *---------------------------------------------------------------------- * * CgiRegister - * * Register a CGI request mapping. * * Results: * None. * * Side effects: * May register or re-register a mapping. * *---------------------------------------------------------------------- */ static int CgiRegister(Mod *modPtr, char *map) { int ok = 0; char *method; char *url; char *path; Ns_DString ds1, ds2; Map *mapPtr; Ns_DStringInit(&ds1); Ns_DStringInit(&ds2); Ns_DStringAppend(&ds1, map); method = ds1.string; url = NextWord(method); if (*method == '\0' || *url == '\0') { Ns_Log(Error, "nscgi: invalid mapping: %s", map); goto done; } path = NextWord(url); if (*path == '\0') { path = NULL; } else { Ns_NormalizePath(&ds2, path); path = ds2.string; if (!Ns_PathIsAbsolute(path) || access(path, R_OK) != 0) { Ns_Log(Error, "nscgi: invalid directory: %s", path); goto done; } } mapPtr = ns_malloc(sizeof(Map)); mapPtr->modPtr = modPtr; mapPtr->url = ns_strdup(url); mapPtr->path = ns_strcopy(path); Ns_Log(Notice, "nscgi: %s %s%s%s", method, url, path ? " -> " : "", path ? path : ""); Ns_RegisterRequest(modPtr->server, method, url, CgiRequest, CgiFreeMap, mapPtr, 0); ok = 1; done: Ns_DStringFree(&ds1); Ns_DStringFree(&ds2); return ok; } /* *---------------------------------------------------------------------- * * CgiFreeMap - * * Free a request mapping context. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void CgiFreeMap(void *arg) { Map *mapPtr = (Map *) arg; ns_free(mapPtr->url); ns_free(mapPtr->path); ns_free(mapPtr); } /* *---------------------------------------------------------------------- * * SetAppend - * * Append data to an existing Ns_Set value. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void SetAppend(Ns_Set *set, int index, char *sep, char *value) { Ns_DString ds; Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, Ns_SetValue(set, index), sep, value, NULL); Ns_SetPutValue(set, index, ds.string); Ns_DStringFree(&ds); } /* *---------------------------------------------------------------------- * * SetUpdate - * * Update value in an Ns_Set, translating NULL to "". * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void SetUpdate(Ns_Set *set, char *key, char *value) { Ns_SetUpdate(set, key, value ? value : ""); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsext/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014576� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsext/Makefile���������������������������������������������������������������������0000644�0001750�0001750�00000003114�10275641075�016236� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsext/Makefile,v 1.7 2005/08/08 11:30:05 jgdavidson Exp $ LIB = nsext LIBOBJS = msg.o MOD = nsext.so MODOBJS = nsext.o MODLIBS = -L../nsdb -lnsdb HDRS = ../include/nsextmsg.h include ../include/Makefile.build ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsext/msg.c������������������������������������������������������������������������0000644�0001750�0001750�00000013152�07477513507�015543� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsextmsg.c -- * * This file encapsulates all external-database message-related data and * access/conversion. It is used by both the server's external driver and * the database proxy daemons. It is included in source form for reference * only, since these messages cannot be changed without * augmenting/rebuilding the server's external driver. */ #define NUM_EXTDB_COMMANDS (sizeof (dbcommandinfo) / sizeof (struct Ns_ExtDbCommandInfo)) #define ExtDbCodeOk(code) ((code >= (Ns_ExtDbCommandCode)0) && \ (code <= (Ns_ExtDbCommandCode)NUM_EXTDB_COMMANDS)) static char rcsid[] = "$Id: msg.c,v 1.1 2002/06/05 22:57:11 jgdavidson Exp $"; #include "ns.h" #include "nsextmsg.h" static struct Ns_ExtDbCommandInfo { Ns_ExtDbCommandCode code; short requiresArg; char *msgname; } dbcommandinfo[] = { { Exec, 1, "exec" }, { BindRow, 0, "bindrow" }, { GetRow, 1, "getrow" }, { Flush, 0, "flush" }, { Cancel, 0, "cancel" }, { GetTableInfo, 1, "gettableinfo" }, { TableList, 1, "tablelist" }, { BestRowId, 1, "bestrowid" }, { ResultId, 0, "resultid" }, { ResultRows, 0, "resultrows" }, { SetMaxRows, 0, "setmaxrows" }, { Close, 0, "close" }, { Open, 1, "open" }, { Ping, 0, "ping" }, { Identify, 0, "identify" }, { TraceOn, 1, "traceon" }, { TraceOff, 0, "traceoff" }, { GetTypes, 0, "gettypes" }, /* * The commands below support proxy daemons working in a file space that * is separate from the server. I.e., an external proxy daemon that does * not have a mounted file system in common with the server. These * commands are necessary to support SQL statements that assume common * file space between client (web server) and server (database server). */ { OpenF, 1, "openfile" }, { CloseF, 1, "closefile" }, { ReadF, 1, "readfile" }, { WriteF, 1, "writefile" }, { DeleteF, 1, "deletefile" }, { CreateTmpF, 0, "createtmpfile" }, /* * This was added after the above xxxF functions. */ { ResetHandle, 0, "resethandle" }, { SpStart, 1, "spstart" }, { SpSetParam, 1, "spsetparam" }, { SpExec, 0, "spexec" }, { SpReturnCode, 0, "spreturncode" }, { SpGetParams, 0, "spgetparams" } }; /* *---------------------------------------------------------------------- * * Ns_ExtDbMsgNameToCode -- * * Convert a message name to a numerical code. * * Results: * A numerical code or NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_ExtDbMsgNameToCode(char *msgname) { int i; int code = NS_ERROR; struct Ns_ExtDbCommandInfo *cmdinfo; /* * tiny list: linear seach */ for (i = 0, cmdinfo = dbcommandinfo; i < NUM_EXTDB_COMMANDS; i++, cmdinfo++) { if (strcasecmp(msgname, cmdinfo->msgname) == 0) { code = i; break; } } return code; } /* *---------------------------------------------------------------------- * * Ns_ExtDbMsgCodeToName -- * * Convert a numerical code to a string name. * * Results: * A string name or NULL. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_ExtDbMsgCodeToName(Ns_ExtDbCommandCode code) { char *retmsg = (char *) NULL; if (ExtDbCodeOk(code)) { retmsg = dbcommandinfo[code].msgname; } return retmsg; } /* *---------------------------------------------------------------------- * * Ns_ExtDbMsgRequiresArg -- * * Does a message require an argument? * * Results: * true: yes, false: no * * Side effects: * None. * *---------------------------------------------------------------------- */ short Ns_ExtDbMsgRequiresArg(Ns_ExtDbCommandCode code) { return dbcommandinfo[code].requiresArg; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsext/nsext.c����������������������������������������������������������������������0000644�0001750�0001750�00000222320�11116165640�016077� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsext.c -- * * External Database Driver * * * External Database Driver * ======================== * * Description: * * This driver interfaces with an external database proxy daemon instead of * calling database client libraries directly. The impetus for this ostensibly * unnecessary complication/indirection is that some database client * libraries have turned out to be undesirable partners in the AOLserver * process space. E.g., they may make assumptions regarding per-process * resources such as signals, or they may not be thread-safe. Further, * platforms without support for a particular database client library * can still interface with a database via a remote database proxy daemon. * * This approach is not intended to replace the existing practice of * linking database client libraries into the server via a driver. * It merely provides an alternative interface mechanism--augmenting * the choices available to developers extending the AOLserver database * interface capabilities. * * Configuration: * * The database proxy daemon to which this module talks is specified in * the external driver section as follows: * [ns/db/Driver/external] * LocalDaemon=/usr/local/bin/nsillpd * ; OR * RemoteHost=dbhost.xyzzy.com * RemotePort=8199 * ;In both cases above, the database proxy daemon process will be spawned * ;for each * ;connection in the pool at server startup time. The external driver then * ;communicates with this daemon via pipes or sockets as database requests * ;are received. * Param=/usr/local/miadmin/MiParams * ;Param is a generic argument passed to the proxy daemon on startup * ;with the datasource, username, and password from the database pool. * ;In the above example, we are using to specifiy Illustra's MiParams file. * * If you're using a remote daemon (e.g. the Host/Port combination * above), you can configure inetd on dbhost.xyzzy.com as shown in the * following example: * 1) Add to /etc/inet/services: * nsillpd 8199/tcp # AOLserver Illustra proxy daemon * 2) Add to /etc/inet/inetd.conf: * nsillpd stream tcp nowait miadmin /srvrhome/bin/nsillpd nsillpd * 3) Send a SIGHUP signal to your inetd process. * * See the man page for inetd.conf for further details. * * Protocol Description: * * See the file 'Protocol'. * * TCL Commands: * ns_ext <cmd> <dbhandle> * * where <cmd> is one of: * ping: verify that the proxy daemon process is running * identify: return the database type and version of the daemon * gettypes: return a string (to be 'split') containing the data types * traceon: turn message tracing on in the proxy daemon * traceoff: turn message tracing off in the proxy daemon * number: returns the connection number * resultid: returns id of the last object affected by an exec command * resultrows: returns the number of rows affected by an exec command * setmaxrows: set the limit on the number of rows to be returned * mktemp: create unique temp file in proxy daemon (remote) file * space * rm: remove file in proxy daemon file space * cpto: copy from local file to remote proxy daemon file space * cpfrom: copy from remote proxy daemon file to local file * */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsext/nsext.c,v 1.13 2008/12/05 08:51:44 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "nsdb.h" #include "nsextmsg.h" #include <ctype.h> #ifdef USE_FIONREAD #include <sys/ioctl.h> #endif #define CONFIG_LOCALDAEMON "LocalDaemon" #define CONFIG_REMOTEHOST "RemoteHost" #define CONFIG_REMOTEPORT "RemotePort" #define CONFIG_PARAM "Param" #define CONFIG_TIMEOUT "Timeout" #define CONFIG_IOTRACE "IOTrace" #define CONFIG_TRIMDATA "TrimData" #define CONFIG_MAX_ELEMENT_SIZE "maxElementSize" #define DEFAULT_TIMEOUT 60 #define DEFAULT_MAX_ELEMENT_SIZE 32768 #define STATUS_BUFSIZE 4096 #define RSP_BUFSIZE 32768 #define MSG_BUFSIZE 4096 #define FILE_IOSIZE 1024 #define END_LIST_VAL -1 #define DRIVER_NAME "External" #define MAX_DBTYPE 64 #define MAX_SIZEDIGITS 32 #define RESPBUFMAX 256 #define ROWIDMAX 512 #define DELIMITERS " \t" #define ErrnoPeerClose(e) (((e) == ECONNABORTED) || ((e) == ETIMEDOUT) || ((e) == ECONNRESET) || ((e) == EPIPE) || ((e) == EINVAL)) /* * This is the callback context. */ typedef struct { char *path; char *host; int timeout; int port; char *param; unsigned int connNum; short initOK; int ioTrace; char ident[RSP_BUFSIZE]; char dbtype[MAX_DBTYPE]; int trimdata; int maxElementSize; Ns_Mutex muIdent; } NsExtCtx; /* * This represents a connection to the external driver. */ typedef struct NsExtConn { int socks[2]; int connNum; NsExtCtx *ctx; } NsExtConn; /* * One element of input from the db proxy held here. */ typedef struct DbProxyInputElement { int size; char *data; } DbProxyInputElement; /* * Types of IO */ typedef enum { Read, Write } SockIOType; /* * Local functions defined in this file */ static int NetProxy(NsExtConn *nsConn, char *host, int port); static int LocalProxy(NsExtConn * nsConn); static int ExtCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv); static char *ExtName(Ns_DbHandle *handle); static char *ExtDbType(Ns_DbHandle *handle); static int ExtOpenDb(Ns_DbHandle *dbhandle); static int ExtCloseDb(Ns_DbHandle *dbhandle); static int ExtExec(Ns_DbHandle *handle, char *sql); static int ExtGetRow(Ns_DbHandle *handle, Ns_Set *row); static int ExtFlush(Ns_DbHandle *handle); static int Ns_ExtCancel(Ns_DbHandle *handle); static Ns_Set *ExtBindRow(Ns_DbHandle *handle); static int ExtServerInit(char *hServer, char *hModule, char *hDriver); static int ExtResetHandle(Ns_DbHandle *handle); static int ExtSpStart(Ns_DbHandle *handle, char *procname); static int ExtSpSetParam(Ns_DbHandle *handle, char *args); static int ExtSpExec(Ns_DbHandle *handle); static int ExtSpReturnCode(Ns_DbHandle *handle, char *returnCode, int bufsize); static Ns_Set *ExtSpGetParams(Ns_DbHandle *handle); static void ExtFree(void *ptr); static int DbProxyCheckStatus(NsExtConn * nsConn, Ns_DbHandle *handle); static int DbProxyStart(NsExtConn * nsConn); static void DbProxyStop(NsExtConn * nsConn); static int DbProxyGetString(Ns_DbHandle *dbhandle, char *buf, int maxbuf); static int DbProxyGetPingReply(Ns_DbHandle *dbhandle); static int DbProxyIsAlive(Ns_DbHandle *dbhandle); static int DbProxySend(Ns_DbHandle *dbhandle, Ns_ExtDbCommandCode msgType, char *arg, size_t argSize); static int DbProxyGetTypes(Ns_DbHandle *dbhandle, char *typesbuf); static int DbProxyTraceOn(Ns_DbHandle *dbhandle, char *filepath); static int DbProxyTraceOff(Ns_DbHandle *dbhandle); static int DbProxyResultId(Ns_DbHandle *dbhandle, char *idbuf); static int DbProxyResultRows(Ns_DbHandle *dbhandle, char *rowCountStr); static int DbProxySetMaxRows(Ns_DbHandle *dbhandle, char *maxRowsStr); static int DbProxyCreateRemoteTmpFile(Ns_DbHandle *dbhandle, char *remoteFileName, char *errbuf); static int DbProxyCopyToRemoteFile(Ns_DbHandle *dbhandle, char *srcFile, char *remoteFileName, char *errbuf); static int DbProxyCopyFromRemoteFile(Ns_DbHandle *dbhandle, char *destFile, char *remoteFileName, char *errbuf); static int DbProxyDeleteRemoteFile(Ns_DbHandle *dbhandle, char *remoteFileName, char *errbuf); static int DbProxyTimedIO(int sock, char *buf, int nbytes, int flags, SockIOType iotype, int timeout, Ns_DbHandle *dbhandle, int readExact); static void DbProxyCleanup(Ns_DbHandle *dbhandle); static int DbProxyIdentify(Ns_DbHandle *dbhandle, char *identbuf); static Ns_List *DbProxyGetList(Ns_DbHandle *dbhandle); static int AllDigits(char *str); /* * Static variables defined in this file */ static char *extName = DRIVER_NAME; static Tcl_HashTable htCtx; static Ns_Mutex muCtx; static Ns_Callback ExtCleanup; /* * This lists all the callback functions and connects them to * IDs. */ static Ns_DbProc ExtProcs[] = { {DbFn_Name, (void *) ExtName}, {DbFn_DbType, (void *) ExtDbType}, {DbFn_ServerInit, (void *) ExtServerInit}, {DbFn_OpenDb, (void *) ExtOpenDb}, {DbFn_CloseDb, (void *) ExtCloseDb}, {DbFn_Flush, (void *) ExtFlush}, {DbFn_Cancel, (void *) Ns_ExtCancel}, {DbFn_Exec, (void *) ExtExec}, {DbFn_BindRow, (void *) ExtBindRow}, {DbFn_GetRow, (void *) ExtGetRow}, {DbFn_ResetHandle, (void *) ExtResetHandle}, {DbFn_SpStart, (void *) ExtSpStart}, {DbFn_SpSetParam, (void *) ExtSpSetParam}, {DbFn_SpExec, (void *) ExtSpExec}, {DbFn_SpReturnCode, (void *) ExtSpReturnCode}, {DbFn_SpGetParams, (void *) ExtSpGetParams}, {0, NULL} }; static int verbose = NS_FALSE; int Ns_ModuleVersion = 1; /* *========================================================================== * API functions *========================================================================== */ /* *---------------------------------------------------------------------- * * Ns_DbDriverInit -- * * Initialize this database driver. * * Results: * NS_OK/NS_ERROR. * * Side effects: * Allocates memory, initializes hash tables, etc. * *---------------------------------------------------------------------- */ int Ns_DbDriverInit(char *hDriver, char *configPath) { int status = NS_ERROR; static int initialized = NS_FALSE; NsExtCtx *ctx; Tcl_HashEntry *he; int new; if (initialized == NS_FALSE) { Ns_MutexInit(&muCtx); Ns_MutexSetName(&muCtx, "nsext"); Tcl_InitHashTable(&htCtx, TCL_STRING_KEYS); Ns_RegisterShutdown(ExtCleanup, NULL); initialized = NS_TRUE; } /* * Register the external driver functions with nsdb. Nsdb will later call * the ExtServerInit() function for each virtual server which uses * nsdb. */ if (Ns_DbRegisterDriver(hDriver, &(ExtProcs[0])) != NS_OK) { Ns_Log(Error, "nsext: " "failed to register driver: %s", extName); } else { ctx = ns_malloc(sizeof(NsExtCtx)); ctx->connNum = 0; ctx->ident[0] = '\0'; Ns_MutexInit(&ctx->muIdent); Ns_MutexSetName(&ctx->muIdent, "nsext:ident"); ctx->param = Ns_ConfigGetValue(configPath, CONFIG_PARAM); ctx->path = Ns_ConfigGetValue(configPath, CONFIG_LOCALDAEMON); ctx->host = Ns_ConfigGetValue(configPath, CONFIG_REMOTEHOST); if (Ns_ConfigGetInt(configPath, CONFIG_REMOTEPORT, &ctx->port) != NS_TRUE) { ctx->port = 0; } if (ctx->path == NULL && ctx->host == NULL) { Ns_Log(Error, "nsext: " "bad config: localdaemon or remotehost required"); } else if (ctx->path == NULL && ctx->port == 0) { Ns_Log(Error, "nsext: " "bad config: proxyhost requires proxyport"); } else { if (!Ns_ConfigGetInt(configPath, CONFIG_TIMEOUT, &ctx->timeout)) { ctx->timeout = DEFAULT_TIMEOUT; } if (!Ns_ConfigGetInt(configPath, CONFIG_MAX_ELEMENT_SIZE, &ctx->maxElementSize)) { ctx->maxElementSize = DEFAULT_MAX_ELEMENT_SIZE; } if (!Ns_ConfigGetBool(configPath, CONFIG_IOTRACE, &ctx->ioTrace)) { ctx->ioTrace = 0; } if (ctx->path != NULL) { if (Ns_PathIsAbsolute(ctx->path)) { ctx->path = ns_strdup(ctx->path); } else { Ns_DString ds; Ns_DStringInit(&ds); Ns_HomePath(&ds, "bin", ctx->path, NULL); ctx->path = Ns_DStringExport(&ds); } } /* * Trim data */ if (!Ns_ConfigGetBool(configPath, CONFIG_TRIMDATA, &ctx->trimdata)) { ctx->trimdata = NS_FALSE; } ctx->initOK = 1; status = NS_OK; } if (status != NS_OK) { ns_free(ctx); } else { Ns_MutexLock(&muCtx); he = Tcl_CreateHashEntry(&htCtx, hDriver, &new); Tcl_SetHashValue(he, ctx); Ns_MutexUnlock(&muCtx); } } Ns_Log (Notice, "nsext: module started; built on %s/%s)", __DATE__, __TIME__); return status; } /* *---------------------------------------------------------------------- * * ExtName -- * * Return the driver name * * Results: * Driver name. * * Side effects: * None. * *---------------------------------------------------------------------- */ static char * ExtName(Ns_DbHandle *handle) { assert(handle != NULL); return extName; } /* *---------------------------------------------------------------------- * * ExtDbType -- * * Return the database type of the proxy daemon, parsed from the * identity string of the form: <dbtype> Proxy Daemon vX.X. * * Results: * String database type. * * Side effects: * None. * *---------------------------------------------------------------------- */ static char * ExtDbType(Ns_DbHandle *handle) { NsExtConn *nsConn; char *identstr, *firstDelim; int typelen; assert(handle != NULL); nsConn = handle->connection; Ns_MutexLock(&nsConn->ctx->muIdent); identstr = nsConn->ctx->ident; firstDelim = strchr(identstr, ' '); typelen = firstDelim == NULL ? strlen(identstr) : firstDelim - identstr; if (typelen >= MAX_DBTYPE) { typelen = MAX_DBTYPE - 1; } strncpy(nsConn->ctx->dbtype, identstr, (size_t)typelen); Ns_MutexUnlock(&nsConn->ctx->muIdent); nsConn->ctx->dbtype[typelen] = '\0'; return nsConn->ctx->dbtype; } /* *---------------------------------------------------------------------- * * ExtOpenDb -- * * Open an external connection on an nsdb handle. The datasource * for the external driver is interpreted by the remote database * proxy daemon; it usually takes the form "host:port:database". * * Results: * NS_OK/NSERROR. * * Side effects: * May spawn the external driver. * *---------------------------------------------------------------------- */ static int ExtOpenDb(Ns_DbHandle *handle) { NsExtConn *nsConn; NsExtCtx *ctx; int status = NS_ERROR; Ns_DString dsOpenData; Tcl_HashEntry *he; int ok = 0; Ns_MutexLock(&muCtx); he = Tcl_FindHashEntry(&htCtx, handle->driver); if (he != NULL) { ctx = Tcl_GetHashValue(he); ok = ctx->initOK; } Ns_MutexUnlock(&muCtx); if (ok) { Ns_DStringInit(&dsOpenData); Ns_DStringPrintf(&dsOpenData, "%s%c%s%c%s%c%s", handle->datasource == NULL ? "" : handle->datasource, ARG_TOKEN_DELIMITER, handle->user == NULL ? "" : handle->user, ARG_TOKEN_DELIMITER, handle->password == NULL ? "" : handle->password, ARG_TOKEN_DELIMITER, ctx->param == NULL ? "" : ctx->param); handle->connection = NULL; handle->connected = 0; nsConn = ns_malloc(sizeof(NsExtConn)); nsConn->ctx = ctx; nsConn->connNum = ctx->connNum++; handle->connection = nsConn; if (DbProxyStart(nsConn) == NS_OK) { /* * Ping daemon */ if (DbProxyIsAlive(handle)) { /* * daemon is alive, proceed... */ /* * consider this 'connected' so that we can shut down the * daemon when/if there's a problem opening. otherwise * a 'zombie' nssybpd will be left lying around. */ handle->connected = 1; if (DbProxySend(handle, Open, dsOpenData.string, strlen(dsOpenData.string)) == NS_OK && DbProxyCheckStatus(nsConn, handle) == NS_OK) { char *temp = ns_malloc(RSP_BUFSIZE); if (DbProxyIdentify(handle, temp) == NS_OK) { Ns_Log(Notice, "nsext: " "datasource opened: %s with %s", handle->datasource, ctx->ident); status = NS_OK; Ns_MutexLock(&ctx->muIdent); strcpy(ctx->ident, temp); Ns_MutexUnlock(&ctx->muIdent); } ns_free(temp); } } } Ns_DStringFree(&dsOpenData); } if (status == NS_ERROR) { DbProxyCleanup(handle); } return status; } /* *---------------------------------------------------------------------- * * ExtCloseDb -- * * Close an external connection on an nsdb handle. * * Results: * NS_OK/NS_ERROR * * Side effects: * Will free the NsExtConn. * *---------------------------------------------------------------------- */ static int ExtCloseDb(Ns_DbHandle *handle) { NsExtConn *nsConn; int status = NS_OK; if (handle == NULL || handle->connection == NULL) { Ns_Log(Bug, "nsext: connection handle is null"); status = NS_ERROR; goto done; } nsConn = handle->connection; DbProxySend(handle, Close, NULL, 0); if ((status = DbProxyCheckStatus(nsConn, handle)) != NS_OK) { Ns_Log(Error, "nsext: error closing connection: %d", nsConn->connNum); } if (handle->connected) { /* * shutdown the proxy daemon in any case */ DbProxyStop(nsConn); } ns_free(nsConn); handle->connection = NULL; handle->connected = 0; done: return (status); } /* *---------------------------------------------------------------------- * * ExtExec -- * * Send an external query. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtExec(Ns_DbHandle *handle, char *sql) { NsExtConn *nsConn; char respBuf[RESPBUFMAX]; int retcode = NS_ERROR; assert(handle != NULL); assert(handle->connection != NULL); nsConn = handle->connection; if (DbProxySend(handle, Exec, sql, strlen(sql)) == NS_OK && DbProxyCheckStatus(nsConn, handle) == NS_OK) { if (DbProxyGetString(handle, respBuf, RESPBUFMAX) == NS_OK) { if (strcmp(respBuf, EXEC_RET_ROWS) == 0) { retcode = NS_ROWS; } else if (strcmp(respBuf, EXEC_RET_DML) == 0) { retcode = NS_DML; } else { retcode = NS_ERROR; } } } return retcode; } /* *---------------------------------------------------------------------- * * ExtBindRow -- * * Put a row from a select into an Ns_Set. * * Results: * An Ns_Set contianing key/value pairs. * * Side effects: * Creates the Ns_Set returned. * *---------------------------------------------------------------------- */ static Ns_Set * ExtBindRow(Ns_DbHandle *handle) { Ns_Set *rows = NULL; int status = NS_ERROR; NsExtConn *nsConn; Ns_List *colList, *currCol; DbProxyInputElement *colEl; assert(handle != NULL); nsConn = handle->connection; if (DbProxySend(handle, BindRow, NULL, 0) == NS_OK && DbProxyCheckStatus(nsConn, handle) == NS_OK) { if ((colList = DbProxyGetList(handle)) != NULL) { rows = handle->row; Ns_SetTrunc(rows, 0); for (currCol = colList; currCol != NULL; currCol = Ns_ListRest(currCol)) { colEl = Ns_ListFirst(currCol); /* * colEl->data is NULL-terminated * (colEl->size included NULL) */ Ns_SetPut(rows, colEl->data, NULL); ns_free(colEl->data); colEl->data = NULL; } Ns_ListFree(colList, (Ns_ElemVoidProc *) ExtFree); status = NS_OK; } } return rows; } /* *---------------------------------------------------------------------- * * ExtGetRow -- * * Fetch rows after an ExtBindRow. * * Results: * NS_OK/NS_ERROR * * Side effects: * Puts a row into the passed-in set. * *---------------------------------------------------------------------- */ static int ExtGetRow(Ns_DbHandle *handle, Ns_Set *row) { int status = NS_ERROR; int i; char colCountStr[32]; NsExtConn *nsConn; Ns_List *rowList, *currRow; DbProxyInputElement *rowEl; int trimcnt; assert(handle != NULL); nsConn = handle->connection; sprintf(colCountStr, "%d", Ns_SetSize(row)); if (DbProxySend(handle, GetRow, colCountStr, strlen(colCountStr)) == NS_OK && DbProxyCheckStatus(nsConn, handle) == NS_OK) { if ((rowList = DbProxyGetList(handle)) != NULL) { for (currRow = rowList, i = 0; currRow != NULL; currRow = Ns_ListRest(currRow), i++) { rowEl = Ns_ListFirst(currRow); /* * rowEl->data is NULL-terminated (rowEl->size included NULL) * String trim the value if called for */ if (nsConn->ctx->trimdata == NS_TRUE) { for (trimcnt = rowEl->size - 1; trimcnt >= 0; trimcnt--) { if (rowEl->data[trimcnt] == 0x20) { rowEl->data[trimcnt] = '\0'; rowEl->size--; if (rowEl->data[trimcnt-1] != 0x20) { goto trimdone; } } else { if (rowEl->data[trimcnt-1] != 0x20) { goto trimdone; } } } } trimdone: Ns_SetPutValue(row, i, rowEl->size == 0 ? NULL : rowEl->data); } Ns_ListFree(rowList, (Ns_ElemVoidProc *) ExtFree); status = NS_OK; /* * got 0-length list, end of data */ } else { status = NS_END_DATA; } } return status; } /* *---------------------------------------------------------------------- * * ExtFlush -- * * Flush any waiting rows not needed after an Ns_DbSelect(). * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtFlush(Ns_DbHandle *handle) { NsExtConn *nsConn; int status; assert(handle != NULL); assert(handle->connection != NULL); nsConn = handle->connection; DbProxySend(handle, Flush, NULL, 0); status = DbProxyCheckStatus(nsConn, handle); return status; } /* *---------------------------------------------------------------------- * * Ns_ExtCancel -- * * Cancel any pending request. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int Ns_ExtCancel(Ns_DbHandle *handle) { NsExtConn *nsConn; int status; assert(handle != NULL); assert(handle->connection != NULL); nsConn = handle->connection; DbProxySend(handle, Cancel, NULL, 0); status = DbProxyCheckStatus(nsConn, handle); return status; } /* *---------------------------------------------------------------------- * * ExtInterpInit -- * * Add the "ns_ext" command to a single Tcl interpreter. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtInterpInit(Tcl_Interp *interp, void *ignored) { Tcl_CreateCommand(interp, "ns_ext", ExtCmd, NULL, NULL); return NS_OK; } /* *---------------------------------------------------------------------- * * ExtServerInit -- * * Have ExtInterpInit called for each interpreter in the virtual * server which is being intialized. * * Results: * NS_OK/NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtServerInit(char *hServer, char *hModule, char *hDriver) { if (!Ns_ConfigGetBool ("ns/parameters", "verbose", &verbose)) { verbose = NS_FALSE; } return Ns_TclInitInterps(hServer, ExtInterpInit, NULL); } /* *---------------------------------------------------------------------- * * AllDigits -- * * Determines if a string contains only digits. * * Results: * 1 if all digits, 0 if not. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int AllDigits(char *str) { char *p = str; if (*p == '-') { p++; } while (*p) { if (!isdigit( (unsigned char)*p++ ) ) { return 0; } } return 1; } /* *---------------------------------------------------------------------- * * ExtResetHandle -- * * The function is only here for the Oracle external driver. * Oracle has autocommit off by default which means major damage * can occur if the transaction is munged. So before a handle is * put back into a pool (Ns_DbPoolPutHandle called from dbtcl.c * with `ns_db close` or `ns_db releasehandle`, this guy can * register a function to reset the handle (i.e., check its * status and perform whatever cleanup measures that are * necessary with a rollback, etc.). We may or may not have a * good use for this in the future. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtResetHandle(Ns_DbHandle *handle) { char statusBuf[STATUS_BUFSIZE]; int status = NS_ERROR; if (handle == NULL || handle->connection == NULL) { Ns_Log(Error, "nsext: %s is null", ((handle == NULL)?("handle"):("connection"))); } else { DbProxySend(handle, ResetHandle, NULL, 0); if ((status = DbProxyGetString(handle, statusBuf, STATUS_BUFSIZE)) == NS_OK) { if (strncasecmp(statusBuf, OK_STATUS, 2) == 0) { status = NS_OK; } else { Ns_Log(Error,"nsext: " "protocol error: received|%s| expected|%s|", statusBuf, OK_STATUS); DbProxyCleanup(handle); status = NS_ERROR; } } } return status; } /* *---------------------------------------------------------------------- * * ExtSpStart -- * * Begin an SP. * * Results: * NS_OK/NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtSpStart(Ns_DbHandle *handle, char *procname) { NsExtConn *nsConn; int status; assert(handle != NULL); assert(handle->connection != NULL); nsConn = handle->connection; DbProxySend(handle, SpStart, procname, strlen(procname)); status = DbProxyCheckStatus(nsConn, handle); return status; } /* *---------------------------------------------------------------------- * * ExtSpSetParam -- * * Set a param for an SP. * * Results: * NS_OK/NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtSpSetParam(Ns_DbHandle *handle, char *args) { NsExtConn *nsConn; int status; assert(handle != NULL); assert(handle->connection != NULL); nsConn = handle->connection; DbProxySend(handle, SpSetParam, args, strlen(args)); status = DbProxyCheckStatus(nsConn, handle); return status; } /* *---------------------------------------------------------------------- * * ExtSpExec -- * * Run an SP. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtSpExec(Ns_DbHandle *handle) { NsExtConn *nsConn; int retcode = NS_ERROR; char respBuf[RESPBUFMAX]; assert(handle != NULL); assert(handle->connection != NULL); nsConn = handle->connection; DbProxySend(handle, SpExec, NULL, 0); retcode = DbProxyCheckStatus(nsConn, handle); if (retcode == NS_OK) { if (DbProxyGetString(handle, respBuf, RESPBUFMAX) == NS_OK) { if (strcmp(respBuf, EXEC_RET_ROWS) == 0) { retcode = NS_ROWS; } else if (strcmp(respBuf, EXEC_RET_DML) == 0) { retcode = NS_DML; } else { retcode = NS_ERROR; } } } return retcode; } /* *---------------------------------------------------------------------- * * ExtSpReturnCode -- * * Returns the return code from the just-run SP. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtSpReturnCode(Ns_DbHandle *dbhandle, char *returnCode, int bufsize) { int status = NS_ERROR; if (DbProxySend(dbhandle, SpReturnCode, NULL, 0) == NS_OK && DbProxyGetString(dbhandle, returnCode, bufsize) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'returncode' command to proxy daemon failed"); returnCode[0] = '\0'; } return status; } /* *---------------------------------------------------------------------- * * Ns_ExtGetParams -- * * Fetch rows after an Ns_ExtExProc. * * Results: * A set of rows. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Ns_Set * ExtSpGetParams(Ns_DbHandle *handle) { int status = NS_ERROR; int i; NsExtConn *nsConn; Ns_Set *paramSet = NULL; Ns_List *paramList, *rowList, *currParam, *currRow; DbProxyInputElement *rowEl, *paramEl; int trimcnt; assert(handle != NULL); nsConn = handle->connection; if (DbProxySend(handle, SpGetParams, NULL, 0) == NS_OK && DbProxyCheckStatus(nsConn, handle) == NS_OK) { if ((paramList = DbProxyGetList(handle)) != NULL) { if ((rowList = DbProxyGetList(handle)) == NULL) { Ns_Log(Error, "nsext: rowlist did not arrive"); Ns_ListFree(paramList, (Ns_ElemVoidProc *) ExtFree); return NULL; } paramSet = Ns_SetCreate(NULL); for (currParam = paramList, currRow = rowList, i = 0; currRow != NULL && currParam != NULL; currParam = Ns_ListRest(currParam), currRow = Ns_ListRest(currRow), i++) { paramEl = Ns_ListFirst(currParam); rowEl = Ns_ListFirst(currRow); /* * rowEl->data is NULL-terminated (rowEl->size included NULL) * String trim the value if called for */ if (nsConn->ctx->trimdata == NS_TRUE) { for (trimcnt = rowEl->size - 1; trimcnt >= 0; trimcnt--) { if (rowEl->data[trimcnt] == 0x20) { rowEl->data[trimcnt] = '\0'; rowEl->size--; if (rowEl->data[trimcnt-1] != 0x20) { goto trimdone; } } else { if (rowEl->data[trimcnt-1] != 0x20) { goto trimdone; } } } } trimdone: Ns_SetPut(paramSet, paramEl->data, NULL); Ns_SetPutValue(paramSet, i, rowEl->size == 0 ? NULL : rowEl->data); } Ns_ListFree(paramList, (Ns_ElemVoidProc *) ExtFree); Ns_ListFree(rowList, (Ns_ElemVoidProc *) ExtFree); status = NS_OK; } else { /* * got 0-length list, end of data */ status = NS_NO_DATA; } } if (status == NS_OK) { return paramSet; } else { return NULL; } } /* *---------------------------------------------------------------------- * * ExtFree -- * * Free a dbproxyinputelement. * * Results: * None. * * Side effects: * Frees both the data and the struct. * *---------------------------------------------------------------------- */ static void ExtFree(void *ptr) { DbProxyInputElement *element; char *data; if (ptr != NULL) { element = (DbProxyInputElement *) ptr; data = element->data; ns_free(data); ns_free(element); } } /* *========================================================================== * Callback functions *========================================================================== */ /* *---------------------------------------------------------------------- * * DbProxyStart -- * * Starts a new connection. * * Results: * NS_OK/NS_ERROR. * * Side effects: * May spawn a new proxy daemon. * *---------------------------------------------------------------------- */ static int DbProxyStart(NsExtConn * nsConn) { if (nsConn->ctx->path != NULL) { return LocalProxy(nsConn); } else { return NetProxy(nsConn, nsConn->ctx->host, nsConn->ctx->port); } } /* *---------------------------------------------------------------------- * * DbProxyStop -- * * Stops an external proxy daemon. * * Results: * None. * * Side effects: * Closes daemon sockets. * *---------------------------------------------------------------------- */ static void DbProxyStop(NsExtConn * nsConn) { Ns_Log(Debug, "nsext: stopping db proxy daemon connection %d", nsConn->connNum); close(nsConn->socks[0]); close(nsConn->socks[1]); nsConn->socks[0] = nsConn->socks[1] = -1; } /* *---------------------------------------------------------------------- * * DbProxySend -- * * Write to the proxy. * * Results: * NS_OK/NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxySend(Ns_DbHandle *dbhandle, Ns_ExtDbCommandCode msgType, char *arg, size_t argSize) { int status = NS_ERROR; int arglen; char *msg; int msglen = 0; NsExtConn *nsConn = (NsExtConn *) dbhandle->connection; Ns_DString ds; Ns_DStringInit(&ds); if ((msg = Ns_ExtDbMsgCodeToName(msgType)) == NULL) { Ns_Log(Bug, "nsext: " "unknown message type received for connection %d", nsConn->connNum); } else if (arg == NULL && Ns_ExtDbMsgRequiresArg(msgType)) { Ns_Log(Bug, "nsext: " "'%s' message requires argument (connection %d)", Ns_ExtDbMsgCodeToName(msgType), nsConn->connNum); } else { if (arg == NULL) { arglen = 0; } else { arglen = argSize; } Ns_DStringPrintf(&ds, "%s\n%d\n", msg, arglen); msglen = ds.length; if (arg != NULL) { Ns_DStringAppend(&ds, arg); msglen += arglen; } if (DbProxyTimedIO(nsConn->socks[1], ds.string, msglen, 0, Write, nsConn->ctx->timeout, dbhandle, 0) == NS_ERROR) { Ns_Log(Error, "nsext: error sending buffer(%s): %s", ds.string, strerror(errno)); } else { if (nsConn->ctx->ioTrace) { Ns_Log(Notice, "SENT |%s|", ds.string); } status = NS_OK; } } Ns_DStringFree(&ds); return status; } /* *---------------------------------------------------------------------- * * DbProxyGetPingReply -- * * Recieves the ping reply from the proxy. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyGetPingReply(Ns_DbHandle *dbhandle) { int status; char statusBuf[STATUS_BUFSIZE]; if ((status = DbProxyGetString(dbhandle, statusBuf, STATUS_BUFSIZE)) == NS_OK) { if (strcasecmp(statusBuf, OK_STATUS) == 0) { status = NS_OK; } else { Ns_Log(Error, "nsext: protocol error on ping: " "received|%s| expected|%s|", statusBuf, OK_STATUS); DbProxyCleanup(dbhandle); status = NS_ERROR; } } return status; } /* *---------------------------------------------------------------------- * * DbProxyCheckStatus -- * * Checks return status. On error, copies exception code/message * to handle * * Results: * NS_OK/NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyCheckStatus(NsExtConn * nsConn, Ns_DbHandle *handle) { int status = NS_ERROR; char statusBuf[STATUS_BUFSIZE]; char *exceptionCode, *exceptionMsg, *p; if (DbProxyGetString(handle, statusBuf, STATUS_BUFSIZE) == NS_OK) { if (strcasecmp(statusBuf, OK_STATUS) == 0) { status = NS_OK; /* * Clear out any old messages. This was added because of * a problem encountered when processing multiple result * sets [e.g. multiple selects] from a Sybase stored * procedure. You'd Ns_DbBindRow until you couldn't bind * no more. The last bind would result in an error, which * would put a message into dsExceptionMsg. After that * binding work is done, that message is still in there, * so on the next Exec, an Ns_DbLogSql would see there's * content there, and would output a message, leading to * end-user confusion due to an inexplicable error message * happening. Hopefully this won't silence Real messages... */ Ns_DStringTrunc(&handle->dsExceptionMsg, 0); } else if (strstr(statusBuf, SILENT_ERROR_STATUS) != NULL) { if (verbose) { Ns_Log(Debug, "nsext: " "silent error string '%s'", statusBuf); } } else { /* * db error: exception form is * exceptionCode#exceptionMessage */ exceptionCode = statusBuf; if ((p = strchr(statusBuf, (int) ARG_TOKEN_DELIMITER)) == NULL) { /* * generic error message, not a db exception, just log msg */ Ns_Log(Error, "nsext: " "database error message: '%s'", statusBuf); } else { *p++ = '\0'; if (*p == '\0') { Ns_Log(Error, "nsext: " "invalid exception status string: '%s'", statusBuf); } else { exceptionMsg = p; Ns_Log(Debug, "nsext: received exception code=%s msg=%s", exceptionCode, exceptionMsg); strcpy(handle->cExceptionCode, exceptionCode); Ns_DStringFree(&handle->dsExceptionMsg); Ns_DStringAppend(&handle->dsExceptionMsg, exceptionMsg); } } } } return status; } /* *---------------------------------------------------------------------- * * DbProxyTimedIO -- * * Perform IO with the proxy; may read or write depending on * iotype flg. * * Results: * NS_OK/NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyTimedIO(int sock, char *buf, int nbytes, int flags, SockIOType iotype, int timeout, Ns_DbHandle *dbhandle, int readExact) { int status = NS_OK; int ioreturn; if (timeout > 0) { fd_set set; int nsel; struct timeval tv; int max = sock; tv.tv_sec = timeout; tv.tv_usec = 0; FD_ZERO(&set); FD_SET(sock, &set); if (iotype == Write) { nsel = Ns_Select(max + 1, NULL, &set, NULL, &tv); } else { nsel = Ns_Select(max + 1, &set, NULL, NULL, &tv); } if (nsel <= 0 || !FD_ISSET(sock, &set)) { if (nsel == 0) { Ns_Log(Warning, "nsext: " "exceeded proxy i/o timeout (%d seconds)", timeout); DbProxyCleanup(dbhandle); } else { Ns_Log(Error, "nsext: " "select() of %d failed: %s (code %d)", sock, strerror(errno), errno); } status = NS_ERROR; } } if (status == NS_OK) { if (iotype == Read) { int bytesRead = 0; #ifdef USE_FIONREAD int bytesAvail; if (flags & MSG_PEEK) { ioctl(sock, FIONREAD, &bytesAvail); if (bytesAvail < nbytes) { nbytes = bytesAvail; } } #endif while (bytesRead < nbytes) { ioreturn = recv(sock, buf + bytesRead, (size_t)(nbytes - bytesRead), flags); if (ioreturn < 0) { break; } bytesRead += ioreturn; if (flags & MSG_PEEK) { break; } } ioreturn = bytesRead; } else { ioreturn = send(sock, buf, (size_t)nbytes, flags); } if (ioreturn != nbytes) { if (iotype == Write || ioreturn <= 0 || readExact) { status = NS_ERROR; if (ErrnoPeerClose(errno)) { Ns_Log(Warning, "nsext: " "connection dropped by external proxy daemon"); } else { Ns_Log(Error, "nsext: socket %s %d failed: " "%s (code %d), ioreturn=%d, nbytes=%d", iotype == Write ? "write to" : "read from", sock, strerror(errno), errno, ioreturn, nbytes); } DbProxyCleanup(dbhandle); } } } return status; } /* *---------------------------------------------------------------------- * * DbProxyCleanup -- * * Zero out an Ns_DbHandle. * * Results: * None. * * Side effects: * If connected, will stop the connection. * *---------------------------------------------------------------------- */ static void DbProxyCleanup(Ns_DbHandle *handle) { if (handle != NULL) { if (handle->connected) { DbProxyStop(handle->connection); } ns_free(handle->connection); handle->connection = NULL; handle->connected = 0; } } /* *---------------------------------------------------------------------- * * DbProxyGetString -- * * Read a single string from the proxy. * * Results: * NS_OK/NS_ERROR. * * Side effects: * Will read from proxy. * *---------------------------------------------------------------------- */ static int DbProxyGetString(Ns_DbHandle *dbhandle, char *buf, int maxbuf) { int status = NS_ERROR; char *nlTailPos; int strSize; NsExtConn *nsConn = dbhandle->connection; if (DbProxyTimedIO(nsConn->socks[0], buf, maxbuf, MSG_PEEK, Read, nsConn->ctx->timeout, dbhandle, 0) >= 0) { if ((nlTailPos = strchr(buf, (int) '\n')) == NULL) { Ns_Log(Error, "nsext: " "protocol error: no record separator in '%s'", buf); DbProxyCleanup(dbhandle); } else { strSize = nlTailPos - buf; strSize++; if (DbProxyTimedIO(nsConn->socks[0], buf, strSize, 0, Read, nsConn->ctx->timeout, dbhandle, 0) == NS_OK) { *nlTailPos = '\0'; if (nsConn->ctx->ioTrace) { Ns_Log(Notice, "REC |%s|", buf); } status = NS_OK; } } } return status; } /* *---------------------------------------------------------------------- * * DbProxyGetList -- * * Read a list from the proxy. * * Results: * A list or NULL if error. * * Side effects: * Allocates new list. * *---------------------------------------------------------------------- */ static Ns_List * DbProxyGetList(Ns_DbHandle *dbhandle) { Ns_List *destList; int status = NS_OK; int done = 0; char *datum; DbProxyInputElement *el; NsExtConn *nsConn = dbhandle->connection; int size; char sizebuf[MAX_SIZEDIGITS]; /* holds ASCII representation * of datasize */ destList = NULL; while (status == NS_OK && !done) { if ((status = DbProxyGetString(dbhandle, sizebuf, MAX_SIZEDIGITS)) == NS_OK) { if (!AllDigits(sizebuf)) { Ns_Log(Error, "nsext: " "protocol error: number expected, got '%s'", sizebuf); status = NS_ERROR; } else if ((size = atoi(sizebuf)) > nsConn->ctx->maxElementSize) { Ns_Log(Error, "nsext: " "exceeded element size limit of %d", size); status = NS_ERROR; } else if (size == END_LIST_VAL) { done = 1; } else { datum = ns_malloc((size_t)(size + 1)); /* * add NULL until nsdb does * binary data */ if (size && DbProxyTimedIO(nsConn->socks[0], datum, size, 0, Read, nsConn->ctx->timeout, dbhandle, 1) != NS_OK) { Ns_Log(Error, "nsext: " "read error: %s", strerror(errno)); status = NS_ERROR; } else { datum[size] = '\0'; if (nsConn->ctx->ioTrace) { Ns_Log(Notice, "REC |%s|", datum); } el = ns_malloc(sizeof(DbProxyInputElement)); el->size = size == 0 ? 0 : size + 1; el->data = datum; Ns_ListPush(el, destList); } } } } if (status == NS_ERROR) { Ns_ListFree(destList, (Ns_ElemVoidProc *) ExtFree); destList = NULL; DbProxyCleanup(dbhandle); } else { destList = Ns_ListNreverse(destList); } return destList; } /* *---------------------------------------------------------------------- * * DbProxyIsAlive -- * * Determines if the proxy is still running. * * Results: * Boolean: false=no, true=yes * * Side effects: * Pings the proxy. * *---------------------------------------------------------------------- */ static int DbProxyIsAlive(Ns_DbHandle *dbhandle) { return (DbProxySend(dbhandle, Ping, NULL, 0) == NS_OK && DbProxyGetPingReply(dbhandle) == NS_OK); } /* *---------------------------------------------------------------------- * * DbProxyIdentify -- * * Get the proxy's name. * * Results: * NS_OK/NS_ERROR. * * Side effects: * Talks to the proxy. * *---------------------------------------------------------------------- */ static int DbProxyIdentify(Ns_DbHandle *dbhandle, char *identbuf) { int status = NS_OK; if (DbProxySend(dbhandle, Identify, NULL, 0) == NS_OK && DbProxyGetString(dbhandle, identbuf, RSP_BUFSIZE) == NS_OK) { /* * result is now in identbuf */ } else { Ns_Log(Error, "nsext: " "'identify' command to proxy daemon failed"); sprintf(identbuf, "Error: Identify command to Proxy Daemon failed\n"); status = NS_ERROR; } return status; } /* *---------------------------------------------------------------------- * * DbProxyGetTypes -- * * Issues the GetTypes command to the proxy daemon. * * Results: * NS_OK/NS_ERROR. Puts the results in typebuf. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyGetTypes(Ns_DbHandle *dbhandle, char *typesbuf) { int status = NS_ERROR; if (DbProxySend(dbhandle, GetTypes, NULL, 0) == NS_OK && DbProxyGetString(dbhandle, typesbuf, RSP_BUFSIZE) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'gettypes' command to proxy daemon failed"); typesbuf[0] = '\0'; } return status; } /* *---------------------------------------------------------------------- * * DbProxyResultId -- * * Issues the ResultId command to the proxy daemon. * * Results: * NS_OK/NS_ERROR; fills in idbuf with result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyResultId(Ns_DbHandle *dbhandle, char *idbuf) { int status = NS_ERROR; if (DbProxySend(dbhandle, ResultId, NULL, 0) == NS_OK && DbProxyGetString(dbhandle, idbuf, RSP_BUFSIZE) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'resultid' command to proxy daemon failed"); idbuf[0] = '\0'; } return status; } /* *---------------------------------------------------------------------- * * DbProxyResultRows -- * * Issues the ResultRows command to the proxy daemon. * * Results: * NS_OK/NS_ERROR; fills in rowCountStr with result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyResultRows(Ns_DbHandle *dbhandle, char *rowCountStr) { int status = NS_ERROR; if (DbProxySend(dbhandle, ResultRows, NULL, 0) == NS_OK && DbProxyGetString(dbhandle, rowCountStr, RSP_BUFSIZE) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'resultrows' command to proxy daemon failed"); rowCountStr[0] = '\0'; } return status; } /* *---------------------------------------------------------------------- * * DbProxySetMaxRows -- * * Issues the SetMaxRows command to the proxy daemon. * * Results: * NS_OK/NS_ERROR; fills in maxRowsStr with result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxySetMaxRows(Ns_DbHandle *dbhandle, char *maxRowsStr) { int status = NS_ERROR; if (DbProxySend(dbhandle, SetMaxRows, maxRowsStr, strlen(maxRowsStr)) == NS_OK && DbProxyGetPingReply(dbhandle) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'setmaxrows' command to proxy daemon failed"); } return status; } /* *---------------------------------------------------------------------- * * DbProxyTraceOn -- * * Issues the TraceOn command to the proxy daemon. * * Results: * NS_OK/NS_ERROR; fills in filepath with result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyTraceOn(Ns_DbHandle *dbhandle, char *filepath) { int status = NS_ERROR; if (DbProxySend(dbhandle, TraceOn, filepath, strlen(filepath)) == NS_OK && DbProxyGetPingReply(dbhandle) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'traceon' command to proxy daemon failed"); } return status; } /* *---------------------------------------------------------------------- * * DbProxyTraceOff -- * * Issues the TraceOff command to the proxy daemon. * * Results: * NS_OK/NS_ERROR; * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DbProxyTraceOff(Ns_DbHandle *dbhandle) { int status = NS_ERROR; if (DbProxySend(dbhandle, TraceOff, NULL, 0) == NS_OK && DbProxyGetPingReply(dbhandle) == NS_OK) { status = NS_OK; } else { Ns_Log(Error, "nsext: " "'traceoff' command to proxy daemon failed"); } return status; } /* *---------------------------------------------------------------------- * * DbProxyCreateRemoteTmpFile -- * * Ask the proxy daemon to make a remote temp file. * * Results: * NS_OK/NS_ERROR; fills in remoteFileName with the remote * side's filename. * * Side effects: * Creates a remote temp file, or fills in an error in errbuf. * *---------------------------------------------------------------------- */ static int DbProxyCreateRemoteTmpFile(Ns_DbHandle *dbhandle, char *remoteFileName, char *errbuf) { int status = NS_ERROR; char respbuf[RSP_BUFSIZE]; if (DbProxySend(dbhandle, CreateTmpF, NULL, 0) != NS_OK) { sprintf(errbuf, "Can't send CreateTmpF command to Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get CreateTmpF status response " "from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get CreateTmpF name response " "from Proxy Daemon"); } else { strcpy(remoteFileName, respbuf); status = NS_OK; } return status; } /* *---------------------------------------------------------------------- * * DbProxyCopyToRemoteFile -- * * Copy a local file to a remote file. * * Results: * NS_OK/NS_ERROR * * Side effects: * Fills in errbuf with an error on failure. * *---------------------------------------------------------------------- */ static int DbProxyCopyToRemoteFile(Ns_DbHandle *dbhandle, char *srcFile, char *remoteFileName, char *errbuf) { int status = NS_ERROR; char remoteFdStr[4]; char readbuf[FILE_IOSIZE]; char outbuf[FILE_IOSIZE + 128]; char respbuf[RSP_BUFSIZE]; char remoteOpenParams[512]; int dataOffset; int bytesRead; int localSrcFd = -1; int fileLoc; int done = 0; remoteFdStr[0] = '\0'; sprintf(remoteOpenParams, "%d%c%s", O_RDWR, ARG_TOKEN_DELIMITER, remoteFileName); if ((localSrcFd = open(srcFile, O_RDONLY, 0)) < 0) { sprintf(errbuf, "open on %s failed: %s", srcFile, strerror(errno)); } else if (DbProxySend(dbhandle, OpenF, remoteOpenParams, strlen(remoteOpenParams)) != NS_OK) { sprintf(errbuf, "Can't send OpenFcommand to Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get OpenF status response from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get OpenF fd response from Proxy Daemon"); } else { strcpy(remoteFdStr, respbuf); /* * we now have a local (source) and remote (destination) file * descriptor */ fileLoc = 0; status = NS_OK; while (!done && status == NS_OK) { status = NS_ERROR; if ((bytesRead = read(localSrcFd, readbuf, FILE_IOSIZE)) > 0) { /* * package data for transmission */ dataOffset = sprintf(outbuf, "%s%c%d%c%d%c", remoteFdStr, ARG_TOKEN_DELIMITER, fileLoc, ARG_TOKEN_DELIMITER, bytesRead, ARG_TOKEN_DELIMITER); memcpy(&outbuf[dataOffset], readbuf, (size_t)bytesRead); if (DbProxySend(dbhandle, WriteF, outbuf, (size_t)(dataOffset + bytesRead)) != NS_OK) { sprintf(errbuf, "Remote write failure, file offset=%d", fileLoc); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get WriteF status response " "from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else { status = NS_OK; fileLoc += bytesRead; } } else if (bytesRead == 0) { status = NS_OK; done = 1; } else { sprintf(errbuf, "read on %s failed: %s", srcFile, strerror(errno)); } } } if (localSrcFd != -1) { close(localSrcFd); } if (remoteFdStr[0] != '\0') { /* * close remote fd */ status = NS_ERROR; if (DbProxySend(dbhandle, CloseF, remoteFdStr, strlen(remoteFdStr)) != NS_OK) { sprintf(errbuf, "Can't send CloseF command to Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get CloseF status response from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else { status = NS_OK; } } return status; } /* *---------------------------------------------------------------------- * * DbProxyCopyFromRemoteFile -- * * Copy a remote file from the proxy to a local file. * * Results: * NS_OK/NS_ERROR * * Side effects: * Writes to a local file, or fills in errbuf on error. * *---------------------------------------------------------------------- */ static int DbProxyCopyFromRemoteFile(Ns_DbHandle *dbhandle, char *destFile, char *remoteFileName, char *errbuf) { int status = NS_ERROR; char remoteFdStr[4]; char readRequest[128]; char respbuf[RSP_BUFSIZE]; char remoteOpenParams[512]; int localDestFd = -1; int fileLoc; int done = 0; Ns_List *readInfo; DbProxyInputElement *readEl; remoteFdStr[0] = '\0'; sprintf(remoteOpenParams, "%d%c%s", O_RDONLY, ARG_TOKEN_DELIMITER, remoteFileName); if ((localDestFd = open(destFile, O_CREAT | O_TRUNC | O_WRONLY, 0644)) < 0) { sprintf(errbuf, "open/create on %s failed: %s", destFile, strerror(errno)); } else if (DbProxySend(dbhandle, OpenF, remoteOpenParams, strlen(remoteOpenParams)) != NS_OK) { sprintf(errbuf, "Can't send OpenF command to Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get OpenF status response from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get OpenF fd response from Proxy Daemon"); } else { strcpy(remoteFdStr, respbuf); /* * we now have a local (destination) and remote (source) file * descriptor */ fileLoc = 0; status = NS_OK; while (!done && status == NS_OK) { status = NS_ERROR; sprintf(readRequest, "%s%c%d%c%d", remoteFdStr, ARG_TOKEN_DELIMITER, fileLoc, ARG_TOKEN_DELIMITER, FILE_IOSIZE); if (DbProxySend(dbhandle, ReadF, readRequest, strlen(readRequest)) != NS_OK) { sprintf(errbuf, "Can't send ReadF command to Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get ReadF status response " "from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else if ((readInfo = DbProxyGetList(dbhandle)) == NULL) { sprintf(errbuf, "Can't read data from Proxy Daemon"); } else { readEl = Ns_ListFirst(readInfo); if (readEl->size == 0) { status = NS_OK; done = 1; } else if (readEl->size > 0) { readEl->size--; /* * ignore NULL added by DbProxyGetList */ if (write(localDestFd, readEl->data, (size_t)readEl->size) != readEl->size) { sprintf(errbuf, "Local write to %s failed: %s", destFile, strerror(errno)); status = NS_ERROR; } else { status = NS_OK; fileLoc += readEl->size; } } else { /* * readEl->size < 0 */ Ns_Log(Bug, "nsext: " "negative size from remote read"); sprintf(errbuf, "Read error from Proxy Daemon (negative size)"); } ns_free(readEl->data); readEl->data = NULL; Ns_ListFree(readInfo, (Ns_ElemVoidProc *) ExtFree); } } } if (localDestFd != -1) { close(localDestFd); } if (remoteFdStr[0] != '\0') { /* * close remote fd */ status = NS_ERROR; if (DbProxySend(dbhandle, CloseF, remoteFdStr, strlen(remoteFdStr)) != NS_OK) { sprintf(errbuf, "Can't send CloseF command to Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Can't get CloseF status response from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else { status = NS_OK; } } return status; } /* *---------------------------------------------------------------------- * * DbProxyDeleteRemoteFile -- * * Deletes a file on the remote system * * Results: * NS_OK/NS_ERROR * * Side effects: * Fills in errbuf on failure. * *---------------------------------------------------------------------- */ static int DbProxyDeleteRemoteFile(Ns_DbHandle *dbhandle, char *remoteFileName, char *errbuf) { int status = NS_ERROR; char respbuf[RSP_BUFSIZE]; if (DbProxySend(dbhandle, DeleteF, remoteFileName, strlen(remoteFileName)) != NS_OK) { sprintf(errbuf, "Unable to send DeleteF command Proxy Daemon"); } else if (DbProxyGetString(dbhandle, respbuf, RSP_BUFSIZE) != NS_OK) { sprintf(errbuf, "Unable to get DeleteF status response from Proxy Daemon"); } else if (strcasecmp(respbuf, OK_STATUS) != 0) { strcpy(errbuf, respbuf); } else { status = NS_OK; } return status; } /* *========================================================================== * Static functions *========================================================================== */ /* *---------------------------------------------------------------------- * * NetProxy -- * * Connect this NsExtConn to a host/port. * * Results: * NS_OK/NS_ERROR * * Side effects: * Sets the socket in nsConn * *---------------------------------------------------------------------- */ static int NetProxy(NsExtConn *nsConn, char *host, int port) { nsConn->socks[0] = nsConn->socks[1] = Ns_SockConnect(host, port); if (nsConn->socks[0] == -1) { Ns_Log(Error, "nsext: connect failure: %s:%d", host, port); return NS_ERROR; } Ns_Log(Notice, "nsext: connect success: %s:%d", host, port); return NS_OK; } /* *---------------------------------------------------------------------- * * LocalProxy -- * * Connect to a proxy running on this very machine. * * Results: * NS_OK/NS_ERROR * * Side effects: * Forks and execs a proxy. * *---------------------------------------------------------------------- */ static int LocalProxy(NsExtConn * nsConn) { int in[2], out[2]; char *argv[3]; int status, pid, code; status = NS_ERROR; if (ns_sockpair(in) < 0) { Ns_Log(Error, "nsext: failed to create input socket pipes"); } else { if (ns_sockpair(out) < 0) { ns_sockclose(in[0]); ns_sockclose(in[1]); Ns_Log(Error, "nsext: failed to create output socket pipes"); } else { /* * Set CloseOnExec to avoid stuck-open connections. */ Ns_CloseOnExec(in[0]); Ns_CloseOnExec(in[1]); Ns_CloseOnExec(out[0]); Ns_CloseOnExec(out[1]); argv[0] = nsConn->ctx->path; argv[1] = NULL; pid = Ns_ExecArgv(nsConn->ctx->path, NULL, out[0], in[1], argv, NULL); ns_sockclose(out[0]); ns_sockclose(in[1]); if (pid == -1) { Ns_Log(Error, "nsext: spawn failed for '%s'", nsConn->ctx->path); } else { if (Ns_WaitForProcess(pid, &code) == NS_OK) { if (code != 0) { Ns_Log(Error, "nsext: " "proxy returned non-zero exit code: %d", code); } else { nsConn->socks[0] = in[0]; nsConn->socks[1] = out[1]; status = NS_OK; } } } if (status != NS_OK) { ns_sockclose(in[0]); ns_sockclose(out[1]); } } } return status; } /* *---------------------------------------------------------------------- * * ExtCmd -- * * This function implements the "ns_ext" Tcl command installed * into each interpreter of each virtual server. It provides * access to features specific to the external driver. * * Results: * Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ExtCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { Ns_DbHandle *handle; char rspbuf[RSP_BUFSIZE]; char errbuf[512]; NsExtConn *extconn; errbuf[0] = '\0'; if (argc < 3) { Tcl_AppendResult(interp, "insufficient args: should be \"", argv[0], " command dbId (optional cmd arg)\"", NULL); return TCL_ERROR; } if (Ns_TclDbGetHandle(interp, argv[2], &handle) != TCL_OK) { return TCL_ERROR; } /* * Make sure this is a external handle before accessing * handle->connection as an NsExtConn. */ if (strstr(Ns_DbDriverName(handle), extName) == NULL) { Tcl_AppendResult(interp, "handle \"", argv[2], "\" is not of type \"", extName, "\"", NULL); return TCL_ERROR; } extconn = (NsExtConn *) handle->connection; if (!strcmp(argv[1], "ping")) { sprintf(interp->result, "%s", DbProxyIsAlive(handle) ? "ok" : "error"); } else if (!strcmp(argv[1], "isremote")) { Tcl_SetResult(interp, extconn->ctx->path ? "0" : "1", TCL_STATIC); } else if (!strcmp(argv[1], "number")) { sprintf(interp->result, "%d", extconn->connNum); } else if (!strcmp(argv[1], "identify")) { Ns_MutexLock(&extconn->ctx->muIdent); sprintf(interp->result, "%s", extconn->ctx->ident); Ns_MutexUnlock(&extconn->ctx->muIdent); } else if (!strcmp(argv[1], "dbtype")) { sprintf(interp->result, "%s", ExtDbType(handle)); } else if (!strcmp(argv[1], "resethandle")) { sprintf(interp->result, "%d", ExtResetHandle(handle)); } else if (!strcmp(argv[1], "traceon")) { if (argc != 4) { Tcl_AppendResult(interp, "insufficient args: should be \"", argv[0], " traceon dbId filepath\"", NULL); return TCL_ERROR; } if (!Ns_PathIsAbsolute(argv[3])) { Tcl_AppendResult(interp, "filepath argument: \"", argv[3], "\" must be absolute.", NULL); return TCL_ERROR; } if (DbProxyTraceOn(handle, argv[3]) == NS_OK) { sprintf(interp->result, "Trace is on, using file: %s", argv[3]); } else { sprintf(interp->result, "Error: traceon command to file: %s failed", argv[3]); } } else if (!strcmp(argv[1], "traceoff")) { if (DbProxyTraceOff(handle) == NS_OK) { sprintf(interp->result, "Trace is off."); } else { sprintf(interp->result, "Error: traceoff command failed"); } } else if (!strcmp(argv[1], "gettypes")) { if (DbProxyGetTypes(handle, rspbuf) == NS_OK) { char *p; if ((p = ns_strtok(rspbuf, DELIMITERS)) != NULL) { do { Tcl_AppendElement(interp, p); } while ((p = ns_strtok(NULL, DELIMITERS)) != NULL); } } else { sprintf(interp->result, "Error: gettypes command failed"); return TCL_ERROR; } } else if (!strcmp(argv[1], "resultid")) { if (DbProxyResultId(handle, rspbuf) == NS_OK) { sprintf(interp->result, rspbuf); } else { sprintf(interp->result, "Error: resultid command failed"); return TCL_ERROR; } } else if (!strcmp(argv[1], "resultrows")) { if (DbProxyResultRows(handle, rspbuf) == NS_OK) { sprintf(interp->result, rspbuf); } else { sprintf(interp->result, "Error: resultrows command failed"); return TCL_ERROR; } } else if (!strcmp(argv[1], "setmaxrows")) { if (argc != 4) { Tcl_AppendResult(interp, "insufficient args: should be \"", argv[0], " setmaxrows dbId rowcount\"", NULL); return TCL_ERROR; } if (!AllDigits(argv[3])) { Tcl_AppendResult(interp, "rowcount argument: \"", argv[3], "\" must be numeric.", NULL); return TCL_ERROR; } if (DbProxySetMaxRows(handle, argv[3]) == NS_OK) { sprintf(interp->result, "Max rows set to %s", argv[3]); } else { sprintf(interp->result, "Error: setmaxrows command failed"); return TCL_ERROR; } } else if (!strcmp(argv[1], "mktemp")) { char tmpName[512]; if (DbProxyCreateRemoteTmpFile(handle, tmpName, errbuf) == NS_OK) { sprintf(interp->result, tmpName); } else { sprintf(interp->result, "mktemp error: %s", errbuf); return TCL_ERROR; } } else if (!strcmp(argv[1], "cpto")) { if (argc != 5) { Tcl_AppendResult(interp, "insufficient args: should be \"", argv[0], " cpto dbId localSrcFile remoteDestFile\"", NULL); return TCL_ERROR; } if (DbProxyCopyToRemoteFile(handle, argv[3], argv[4], errbuf) != NS_OK) { sprintf(interp->result, "cpto error: %s", errbuf); return TCL_ERROR; } } else if (!strcmp(argv[1], "cpfrom")) { if (argc != 5) { Tcl_AppendResult(interp, "insufficient args: should be \"", argv[0], " cpfrom dbId localDestFile remoteSrcFile\"", NULL); return TCL_ERROR; } if (DbProxyCopyFromRemoteFile(handle, argv[3], argv[4], errbuf) != NS_OK) { sprintf(interp->result, "cpfrom error: %s", errbuf); return TCL_ERROR; } } else if (!strcmp(argv[1], "rm")) { if (argc != 4) { Tcl_AppendResult(interp, "insufficient args: should be \"", argv[0], " rm dbId remoteFile\"", NULL); return TCL_ERROR; } if (DbProxyDeleteRemoteFile(handle, argv[3], errbuf) != NS_OK) { sprintf(interp->result, "rm error: %s", errbuf); } } else { Tcl_AppendResult(interp, "unknown command \"", argv[1], "\": should be ping, gettypes, number, traceon, traceoff, " "identify, resultid, resultrows, setmaxrows, " "mktemp, rm, cpto, cpfrom.", NULL); return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * * ExtCleanup -- * * Clean up all data structures * * Results: * None. * * Side effects: * Frees everything. * *---------------------------------------------------------------------- */ static void ExtCleanup(void *ignored) { Tcl_HashEntry *he; Tcl_HashSearch hs; he = Tcl_FirstHashEntry(&htCtx, &hs); while (he != NULL) { ns_free(Tcl_GetHashValue(he)); he = Tcl_NextHashEntry(&hs); } Tcl_DeleteHashTable(&htCtx); Ns_MutexDestroy(&muCtx); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsext/nsext.html�������������������������������������������������������������������0000755�0001750�0001750�00000002536�07170655007�016637� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nsext</title> </head> <body bgcolor="#ffffff"> <h2>nsext -- External Database Driver</h2> <pre>$Header: /cvsroot/aolserver/aolserver/nsext/nsext.html,v 1.1 2000/10/10 18:03:51 kriston Exp $ </pre> <br> <a href="#Theory_of_Operation">Theory of Operation</a><br> <a href="#Known_Issues">Known Issues</a><br> <a href="#Sample_Configuration">Sample Configuration</a><br> <br> <br> <h3><a name="Theory_of_Operation"></a>Theory of Operation</h3> This driver is used to interact with external database drivers.&nbsp; These are usually called "database proxy daemons".<br> <br> <h3><a name="Known_Issues"></a>Known Issues</h3> The driver API talks over sockets to remote daemons in an inefficient manner.&nbsp; It is highly recommended that the proxy daemon and AOLserver both run on the same machine.&nbsp; Of course, the database can still run on a remote machine -- it's only the connection between AOLserver and the proxy daemon that is inefficient and that inefficiency is greatly alleviated by running on the same host.<br> <br> <h3><a name="Sample_Configuration"></a>Sample Configuration</h3> Please see the <a href="../doc/config.txt">Configuration File Reference</a>.<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nslog/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014557� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nslog/Makefile���������������������������������������������������������������������0000644�0001750�0001750�00000003015�10300725025�016202� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nslog/Makefile,v 1.6 2005/08/17 21:20:21 jgdavidson Exp $ # MOD = nslog OBJS = nslog.o MODINIT = NsLog_ModInit include ../include/ns.mak �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nslog/nslog.html�������������������������������������������������������������������0000644�0001750�0001750�00000012046�10117650072�016563� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nslog</title> </head> <body bgcolor="#ffffff"> <h2>nslog -- Access logging module</h2> <p>$Header: /cvsroot/aolserver/aolserver/nslog/nslog.html,v 1.2 2004/09/08 18:32:26 dossy Exp $</p> <ul> <li><a href="#Theory_of_Operation">Theory of Operation</a></li> <li><a href="#Known_Issues">Known Issues</a></li> <li><a href="#Configuration_Options">Configuration Options</a></li> <li><a href="#Sample_Configuration">Sample Configuration</a></li> </ul> <h3><a name="Theory_of_Operation">Theory of Operation</a></h3> <p>The nslog module implements Common Log Format access logging. This format can be used by any web analyzer tool. It optionally supports NCSA Combined Log Format, as well as automati log file rolling. The log files are stored in the server/server1/modules/nslog directory by default.</p> <p>See the following page for detailed information about the <a href="http://httpd.apache.org/docs/logs.html#common">Common Log Format</a>.</p> <h3><a name="Known_Issues">Known Issues</a></h3> <p>None at this time.</p> <h3><a name="Configuration_Options">Configuration Options</a></h3> <p>The following options are available for configuring the nslog module:</p> <table border="1"> <tr> <th>Option</th> <th>Type</th> <th>Default</th> <th>Description</th> </tr> <tr> <td>extendedheaders</td> <td>string</td> <td>N/A</td> <td>A comma-delimited list of HTTP request headers to log at the end of the logfile entry. This can be useful for logging headers sent by a custom HTTP client.</td> </tr> <tr> <td>file</td> <td>string</td> <td>access.log</td> <td>The name of the access log file. It can either be specified as an absolute path including filename, or if specified as a relative pathname, will be relative to the <b>servers/${servername}/modules/nslog</b> directory.</td> </tr> <tr> <td>formattedTime</td> <td>boolean</td> <td>true</td> <td>Whether or not the time column in the logfile entry should be formatted as the human-readable "[day/month/year:hour:minute:second zone]" format or as "[seconds]", the number of seconds since Jan 1 1970 00:00:00 UTC, also known as "unix time".</td> </tr> <tr> <td>logcombined</td> <td>boolean</td> <td>true</td> <td>Log in NSCA Combined Log Format. Basically, this additionally logs the HTTP "Referer" and "User-Agent" headers.</td> </tr> <tr> <td>logreqtime</td> <td>boolean</td> <td>false</td> <td>Compute the number of seconds and microseconds to service the request, expressed as "sec.usec".</td> </tr> <tr> <td>maxbuffer</td> <td>integer</td> <td>0</td> <td>The number of logfile entries to queue in memory before flushing them to disk. The default of "0" means no buffering will occur.</td> </tr> <tr> <td>maxbackup</td> <td>integer</td> <td>100</td> <td>Number of backup logfiles to keep when rolling log files.</td> </tr> <tr> <td>rollfmt</td> <td>string</td> <td>N/A</td> <td>The format string to append to the logfile name when rolling the file. If not specified, a three-digit integer is used, left-padded with zeroes. The format string is passed to the <code>strftime()</code> function, so should contain appropriate formatting sequences, e.g. <code>"%Y-%m-%d-%H-%M-%S-%Z"</code>.</td> </tr> <tr> <td>rollhour</td> <td>integer</td> <td>0</td> <td>This specifies what hour to schedule the logfile roll. Valid values are 0-23.</td> </tr> <tr> <td>rolllog</td> <td>boolean</td> <td>true</td> <td>Whether or not the server will automatically roll the log at the specified <b>rollhour</b>.</td> </tr> <tr> <td>rollonsignal</td> <td>boolean</td> <td>false/A</td> <td>Whether or not the server will roll the log file when it receives a SIGHUP signal.</td> </tr> <tr> <td>suppressquery</td> <td>boolean</td> <td>false</td> <td><p>Normally, the entire HTTP request URL is logged. If this option is turned on, the optional "query" portion of the URL (that which follows the "?" in the URL) is removed and not logged.</p> <p>This may be important to enable if sensitive or user-identifying information is placed in the URL as a query parameter and must not be logged in order to comply with privacy policies, etc.</p></td> </tr> </table> <h3><a name="Sample_Configuration">Sample Configuration</a></h3> <pre> # # Access log -- nslog # ns_section "ns/server/${servername}/module/nslog" ns_param file "access.log" ns_param formattedtime true ;# true=common log format ns_param logcombined false ;# true==NCSA combined format ns_param maxbackup 5 ;# Max number to keep around when rolling ns_param rollhour 0 ;# Time to roll log ns_param rolllog true ;# Should we roll log? ns_param rollonsignal true ;# Roll log on SIGHUP </pre> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nslog/nslog.c����������������������������������������������������������������������0000644�0001750�0001750�00000043256�10275641302�016051� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nslog.c -- * * This file implements the access log using NCSA Common Log format. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nslog/nslog.c,v 1.16 2005/08/08 11:32:18 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #include <sys/stat.h> /* mkdir */ #include <ctype.h> /* isspace */ #define LOG_COMBINED 1 #define LOG_FMTTIME 2 #define LOG_REQTIME 4 typedef struct { char *module; Ns_Mutex lock; int fd; char *file; char *rollfmt; int flags; int maxbackup; int maxlines; int curlines; int suppressquery; Ns_DString buffer; char **extheaders; } Log; /* * Local functions defined in this file */ static Ns_Callback LogRollCallback; static Ns_Callback LogCloseCallback; static Ns_TraceProc LogTrace; static int LogFlush(Log *logPtr, Ns_DString *dsPtr); static int LogOpen(Log *logPtr); static int LogRoll(Log *logPtr); static int LogClose(Log *logPtr); static void LogConfigExtHeaders(Log *logPtr, char *path); static Ns_ArgProc LogArg; static Tcl_CmdProc LogCmd; static Ns_TclInterpInitProc AddCmds; /* *---------------------------------------------------------------------- * * NsLog_ModInit -- * * Module initialization routine. * * Results: * NS_OK. * * Side effects: * Log file is opened, trace routine is registered, and, if * configured, log file roll signal and scheduled procedures * are registered. * *---------------------------------------------------------------------- */ int NsLog_ModInit(char *server, char *module) { char *path; int opt, hour; Log *logPtr; static int first = 1; /* * Register the info callbacks just once. */ if (first) { Ns_RegisterProcInfo((void *)LogRollCallback, "logroll", LogArg); Ns_RegisterProcInfo((void *)LogCloseCallback, "logclose", LogArg); first = 0; } /* * Initialize the log buffer. */ logPtr = ns_calloc(1, sizeof(Log)); logPtr->fd = -1; logPtr->module = module; Ns_MutexInit(&logPtr->lock); Ns_MutexSetName2(&logPtr->lock, "nslog", server); Ns_DStringInit(&logPtr->buffer); /* * Determine the log file name which, if not * absolute, is expected to exist in the module * specific directory. The module directory is * created if necessary. */ path = Ns_ConfigGetPath(server, module, NULL); logPtr->file = Ns_ConfigGetValue(path, "file"); if (logPtr->file == NULL) { logPtr->file = "access.log"; } if (Ns_PathIsAbsolute(logPtr->file) == NS_FALSE) { Ns_DString ds; Ns_DStringInit(&ds); Ns_ModulePath(&ds, server, module, NULL, NULL); if (mkdir(ds.string, 0755) != 0 && errno != EEXIST && errno != EISDIR) { Ns_Log(Error, "nslog: mkdir(%s) failed: %s", ds.string, strerror(errno)); Ns_DStringFree(&ds); return NS_ERROR; } Ns_DStringTrunc(&ds, 0); Ns_ModulePath(&ds, server, module, logPtr->file, NULL); logPtr->file = Ns_DStringExport(&ds); } /* * Get parameters from configuration file */ logPtr->rollfmt = Ns_ConfigGetValue(path, "rollfmt"); if (!Ns_ConfigGetInt(path, "maxbuffer", &logPtr->maxlines)) { logPtr->maxlines = 0; } if (!Ns_ConfigGetInt(path, "maxbackup", &logPtr->maxbackup) || logPtr->maxbackup < 1) { logPtr->maxbackup = 100; } if (!Ns_ConfigGetBool(path, "formattedTime", &opt)) { opt = 1; } if (opt) { logPtr->flags |= LOG_FMTTIME; } if (!Ns_ConfigGetBool(path, "logcombined", &opt)) { opt = 1; } if (opt) { logPtr->flags |= LOG_COMBINED; } if (!Ns_ConfigGetBool(path, "logreqtime", &opt)) { opt = 0; } if (opt) { logPtr->flags |= LOG_REQTIME; } if (!Ns_ConfigGetBool(path, "suppressquery", &logPtr->suppressquery)) { logPtr->suppressquery = 0; } /* * Schedule various log roll and shutdown options. */ if (!Ns_ConfigGetInt(path, "rollhour", &hour) || hour < 0 || hour > 23) { hour = 0; } if (!Ns_ConfigGetBool(path, "rolllog", &opt)) { opt = 1; } if (opt) { Ns_ScheduleDaily((Ns_SchedProc *) LogRollCallback, logPtr, 0, hour, 0, NULL); } if (!Ns_ConfigGetBool(path, "rollonsignal", &opt)) { opt = 0;; } if (opt) { Ns_RegisterAtSignal(LogRollCallback, logPtr); } LogConfigExtHeaders(logPtr, path); /* * Open the log and register the trace. */ if (LogOpen(logPtr) != NS_OK) { return NS_ERROR; } Ns_RegisterServerTrace(server, LogTrace, logPtr); Ns_RegisterAtShutdown(LogCloseCallback, logPtr); Ns_TclInitInterps(server, AddCmds, logPtr); return NS_OK; } /* *---------------------------------------------------------------------- * * LogTrace -- * * Trace routine for appending the log with the current connection * results. * * Results: * None. * * Side effects: * Entry is appended to the open log. * *---------------------------------------------------------------------- */ static void LogTrace(void *arg, Ns_Conn *conn) { Ns_DString ds; register char *p; int quote, n, status, i; char buf[100]; Log *logPtr = arg; Ns_Time now, diff; /* * Compute the request's elapsed time. */ if (logPtr->flags & LOG_REQTIME) { Ns_GetTime(&now); Ns_DiffTime(&now, Ns_ConnStartTime(conn), &diff); } Ns_DStringInit(&ds); /* * Append the peer address and auth user (if any). * Watch for users comming from proxy servers. */ if (conn->headers && (p = Ns_SetIGet(conn->headers, "X-Forwarded-For"))) { Ns_DStringAppend(&ds, p); } else { Ns_DStringAppend(&ds, Ns_ConnPeer(conn)); } if (conn->authUser == NULL) { Ns_DStringAppend(&ds, " - - "); } else { p = conn->authUser; quote = 0; while (*p != '\0') { if (isspace((unsigned char) *p)) { quote = 1; break; } ++p; } if (quote) { Ns_DStringVarAppend(&ds, " - \"", conn->authUser, "\" ", NULL); } else { Ns_DStringVarAppend(&ds, " - ", conn->authUser, " ", NULL); } } /* * Append a common log format time stamp including GMT offset. */ if (!(logPtr->flags & LOG_FMTTIME)) { sprintf(buf, "[%ld]", (long) time(NULL)); } else { Ns_LogTime(buf); } Ns_DStringAppend(&ds, buf); /* * Append the request line. */ if (conn->request && conn->request->line) { if (logPtr->suppressquery) { /* * Don't display query data. * NB: Side-effect is that the real URI is returned, so places * where trailing slash returns "index.html" logs as "index.html". */ Ns_DStringVarAppend(&ds, " \"", conn->request->url, "\" ", NULL); } else { Ns_DStringVarAppend(&ds, " \"", conn->request->line, "\" ", NULL); } } else { Ns_DStringAppend(&ds, " \"\" "); } /* * Construct and append the HTTP status code and bytes sent. */ n = Ns_ConnResponseStatus(conn); sprintf(buf, "%d %u ", n ? n : 200, Ns_ConnContentSent(conn)); Ns_DStringAppend(&ds, buf); if ((logPtr->flags & LOG_COMBINED)) { /* * Append the referer and user-agent headers (if any). */ Ns_DStringAppend(&ds, "\""); if ((p = Ns_SetIGet(conn->headers, "referer"))) { Ns_DStringAppend(&ds, p); } Ns_DStringAppend(&ds, "\" \""); if ((p = Ns_SetIGet(conn->headers, "user-agent"))) { Ns_DStringAppend(&ds, p); } Ns_DStringAppend(&ds, "\""); } /* * Append the request's elapsed time (if enabled). */ if (logPtr->flags & LOG_REQTIME) { sprintf(buf, " %d.%06ld", (int)diff.sec, diff.usec); Ns_DStringAppend(&ds, buf); } /* * Append the extended headers (if any). */ for (i=0; logPtr->extheaders[i] != NULL; i++) { if ((p = Ns_SetIGet(conn->headers, logPtr->extheaders[i]))) { Ns_DStringAppend(&ds, " \""); Ns_DStringAppend(&ds, p); Ns_DStringAppend(&ds, "\""); } else { Ns_DStringAppend(&ds, " -"); } } /* * Append the trailing newline and buffer and/or flush the line. */ status = NS_OK; Ns_DStringAppend(&ds, "\n"); Ns_MutexLock(&logPtr->lock); if (logPtr->maxlines <= 0) { status = LogFlush(logPtr, &ds); } else { Ns_DStringNAppend(&logPtr->buffer, ds.string, ds.length); if (++logPtr->curlines > logPtr->maxlines) { status = LogFlush(logPtr, &logPtr->buffer); logPtr->curlines = 0; } } Ns_MutexUnlock(&logPtr->lock); Ns_DStringFree(&ds); if (status != NS_OK) { Ns_Log(Error, "nslog: failed to flush log: %s", strerror(errno)); } } /* *---------------------------------------------------------------------- * * LogCmd -- * * Implement the ns_accesslog command. * * Results: * Standard Tcl result. * * Side effects: * Depends on command. * *---------------------------------------------------------------------- */ static int AddCmds(Tcl_Interp *interp, void *arg) { Tcl_CreateCommand(interp, "ns_accesslog", LogCmd, arg, NULL); return TCL_OK; } static int LogCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { char *rollfile; int status; Log *logPtr = arg; if (argc < 2) { Tcl_AppendResult(interp, "wrong # args: should be: \"", argv[0], " command ?arg?\"", NULL); return TCL_ERROR; } if (STREQ(argv[1], "file")) { Tcl_SetResult(interp, logPtr->file, TCL_STATIC); } else if (STREQ(argv[1], "roll")) { if (argc != 2 && argc != 3) { Tcl_AppendResult(interp, "wrong # args: should be: \"", argv[0], " ", argv[1], " ?file?\"", NULL); return TCL_ERROR; } Ns_MutexLock(&logPtr->lock); if (argc == 2) { status = LogRoll(logPtr); } else { rollfile = (char*)argv[2]; status = NS_OK; if (access(rollfile, F_OK) == 0) { status = Ns_RollFile(rollfile, logPtr->maxbackup); } if (status == NS_OK) { if (rename(logPtr->file, rollfile) != 0) { status = NS_ERROR; } else { LogFlush(logPtr, &logPtr->buffer); status = LogOpen(logPtr); } } } Ns_MutexUnlock(&logPtr->lock); if (status != NS_OK) { Tcl_AppendResult(interp, "could not roll \"", logPtr->file, "\": ", Tcl_PosixError(interp), NULL); return TCL_ERROR; } } else { Tcl_AppendResult(interp, "unknown command \"", argv[1], "\": should be file or roll", NULL); return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * * LogArg -- * * Copy log file as argument for callback query. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void LogArg(Tcl_DString *dsPtr, void *arg) { Log *logPtr = arg; Tcl_DStringAppendElement(dsPtr, logPtr->file); } /* *---------------------------------------------------------------------- * * LogOpen -- * * Open the access log, closing previous log if opeopen * * Results: * NS_OK or NS_ERROR. * * Side effects: * Log re-opened. * *---------------------------------------------------------------------- */ static int LogOpen(Log *logPtr) { int fd; fd = open(logPtr->file, O_APPEND|O_WRONLY|O_CREAT, 0644); if (fd < 0) { Ns_Log(Error, "nslog: error '%s' opening '%s'", strerror(errno),logPtr->file); return NS_ERROR; } if (logPtr->fd >= 0) { close(logPtr->fd); } logPtr->fd = fd; Ns_Log(Notice, "nslog: opened '%s'", logPtr->file); return NS_OK; } /* *---------------------------------------------------------------------- * * LogClose -- * * Flush and/or close the log. * * Results: * NS_TRUE or NS_FALSE if log was closed. * * Side effects: * Buffer entries, if any, are flushed. * *---------------------------------------------------------------------- */ static int LogClose(Log *logPtr) { int status; status = NS_OK; if (logPtr->fd >= 0) { Ns_Log(Notice, "nslog: closing '%s'", logPtr->file); status = LogFlush(logPtr, &logPtr->buffer); close(logPtr->fd); logPtr->fd = -1; Ns_DStringFree(&logPtr->buffer); } return status; } /* *---------------------------------------------------------------------- * * LogFlush -- * * Flush a log buffer to the open log file. Note: The mutex * is assumed held during call. * * Results: * None. * * Side effects: * Will disable the log on error. * *---------------------------------------------------------------------- */ static int LogFlush(Log *logPtr, Ns_DString *dsPtr) { if (dsPtr->length > 0) { if (logPtr->fd >= 0 && write(logPtr->fd, dsPtr->string, (size_t)dsPtr->length) != dsPtr->length) { Ns_Log(Error, "nslog: " "logging disabled: write() failed: '%s'", strerror(errno)); close(logPtr->fd); logPtr->fd = -1; } Ns_DStringTrunc(dsPtr, 0); } if (logPtr->fd < 0) { return NS_ERROR; } return NS_OK; } /* *---------------------------------------------------------------------- * * LogRoll -- * * Roll and re-open the access log. This procedure is scheduled * and/or registered at signal catching. * * Results: * None. * * Side effects: * Files are rolled to new names. * *---------------------------------------------------------------------- */ static int LogRoll(Log *logPtr) { int status; status = NS_OK; (void) LogClose(logPtr); if (access(logPtr->file, F_OK) == 0) { if (logPtr->rollfmt == NULL) { status = Ns_RollFile(logPtr->file, logPtr->maxbackup); } else { Ns_DString ds; time_t now; struct tm *ptm; char timeBuf[512]; now = time(NULL); ptm = ns_localtime(&now); strftime(timeBuf, 512, logPtr->rollfmt, ptm); Ns_DStringInit(&ds); Ns_DStringVarAppend(&ds, logPtr->file, ".", timeBuf, NULL); if (access(ds.string, F_OK) == 0) { status = Ns_RollFile(ds.string, logPtr->maxbackup); } else if (errno != ENOENT) { Ns_Log(Error, "nslog: access(%s, F_OK) failed: '%s'", ds.string, strerror(errno)); status = NS_ERROR; } if (status == NS_OK && rename(logPtr->file, ds.string) != 0) { Ns_Log(Error, "nslog: rename(%s, %s) failed: '%s'", logPtr->file, ds.string, strerror(errno)); status = NS_ERROR; } Ns_DStringFree(&ds); if (status == NS_OK) { status = Ns_PurgeFiles(logPtr->file, logPtr->maxbackup); } } } status = LogOpen(logPtr); return status; } /* *---------------------------------------------------------------------- * * LogCloseCallback, LogRollCallback - * * Close or roll the log. * * Results: * None. * * Side effects: * See LogClose and LogRoll. * *---------------------------------------------------------------------- */ static void LogCallback(int (proc)(Log *), void *arg, char *desc) { int status; Log *logPtr = arg; Ns_MutexLock(&logPtr->lock); status = (*proc)(logPtr); Ns_MutexUnlock(&logPtr->lock); if (status != NS_OK) { Ns_Log(Error, "nslog: failed: %s '%s': '%s'", desc, logPtr->file, strerror(errno)); } } static void LogCloseCallback(void *arg) { LogCallback(LogClose, arg, "close"); } static void LogRollCallback(void *arg) { LogCallback(LogRoll, arg, "roll"); } /* *---------------------------------------------------------------------- * * LogConfigExtHeaders * * Parse the ExtendedHeaders configuration. * * Results: * None. * * Side effects: * Sets logPtr->extheaders. * *---------------------------------------------------------------------- */ static void LogConfigExtHeaders(Log *logPtr, char *path) { char *config = Ns_ConfigGetValue(path, "extendedheaders"); char *p; int i; if (config == NULL) { logPtr->extheaders = ns_calloc(1, sizeof *logPtr->extheaders); logPtr->extheaders[0] = NULL; return; } config = ns_strdup(config); /* Figure out how many extended headers there are. */ for (i = 1, p = config; *p; p++) { if (*p == ',') { i++; } } /* Initialize the extended header pointers. */ logPtr->extheaders = ns_calloc((size_t)(i + 1), sizeof *logPtr->extheaders); logPtr->extheaders[0] = config; for (i = 1, p = config; *p; p++) { if (*p == ',') { *p = '\000'; logPtr->extheaders[i++] = p + 1; } } logPtr->extheaders[i] = NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014577� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/Makefile���������������������������������������������������������������������0000644�0001750�0001750�00000005163�07547143651�016252� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsssl/Makefile,v 1.5 2002/10/03 22:41:45 jgdavidson Exp $ # ifndef BSAFE all: @echo "** " @echo "** BSAFE variable not set." @echo "** nsssl will not be built." @echo "** " install: all clean: else # # Module name # ifeq ($(SSL_DOMESTIC),1) MOD = nsssl.so CFLAGS = $(BSAFE_VERSION) -I$(BSAFE)/include else MOD = nsssle.so CFLAGS = -DSSL_EXPORT=1 $(BSAFE_VERSION) -I$(BSAFE)/include endif MODLIBS = -L$(BSAFE)/lib -lbsafe MODDIR = nsssl HDRS = ssl.h ssltcl.h x509.h LDRPATH += $(LDRFLAG)$(BSAFE)/lib # # Rainbow SSL accelerator card support. # # Note: Requires position-independent version of libbswift.a. # Requires libswift.so to be somewhere in your system's library path. # Contact Rainbow at http://www.rainbow.com/ for the software. # ifdef SWIFT CFLAGS +=-DHAVE_SWIFT=1 -I$(SWIFT)/include MODLIBS +=-L$(SWIFT)/lib -lbswift -lswift endif # # Objects to build # OBJS = nsssl.o ssl.o ssltcl.o t_stdlib.o x509.o MODINST = cppem include ../include/Makefile.build cppem: $(MKDIR) $(INSTMOD)/nsssl $(INSTALL_DATA) keygen.tcl $(INSTMOD)/nsssl $(MKDIR) $(INSTSRVMOD)/nsssl $(INSTALL_DATA) certfile-sample.pem $(INSTSRVMOD)/nsssl $(INSTALL_DATA) keyfile-sample.pem $(INSTSRVMOD)/nsssl endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/ssl.c������������������������������������������������������������������������0000644�0001750�0001750�00000172503�07271331557�015560� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ /* * ssl.c -- * * Encryption and I/O routines for SSL v2. * */ static const char *RCSID = "@(#): $Header: /cvsroot/aolserver/aolserver/nsssl/ssl.c,v 1.2 2001/04/24 17:10:07 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #include "ssl.h" #include "ssltcl.h" #include "x509.h" #include <ctype.h> /* * Constants and macros */ #define ATOU16(X) (((((unsigned char*)X)[0])<<8)|(((unsigned char*)X)[1])) #define ATOU24(X) ((((unsigned char*)X)[0]<<16)|ATOU16(((unsigned char*)X)+1)) /* * BSAFE algorithm chooser * */ B_ALGORITHM_METHOD *ALGORITHM_CHOOSER[] = { #ifndef SSL_EXPORT &AM_DES_CBC_DECRYPT, &AM_DES_CBC_ENCRYPT, &AM_DES_EDE3_CBC_DECRYPT, &AM_DES_EDE3_CBC_ENCRYPT, #endif &AM_MD5, &AM_MD5_RANDOM, &AM_MD, &AM_RC2_CBC_DECRYPT, &AM_RC2_CBC_ENCRYPT, &AM_RC4_DECRYPT, &AM_RC4_ENCRYPT, #ifdef HAVE_SWIFT &AM_SwiftRSA_CRT_DECRYPT, &AM_SwiftRSA_CRT_ENCRYPT, #endif &AM_RSA_CRT_DECRYPT, &AM_RSA_CRT_ENCRYPT, &AM_RSA_KEY_GEN, (B_ALGORITHM_METHOD *) NULL }; /* * BSAFE message digest chooser */ B_ALGORITHM_METHOD *DIGEST_CHOOSER[] = { &AM_MD5, (B_ALGORITHM_METHOD *) NULL }; /* * ClientHello data structure * * Used for setting up the client's side of the connection. */ typedef struct { unsigned char msg; unsigned char clientVersion[2]; unsigned char cipherSpecsLength[2]; unsigned char sessionIdLength[2]; unsigned char challengeLength[2]; unsigned char data; } ClientHello; /* * ServerHello data structure * * Used for setting up the server's side of the connection. */ typedef struct { unsigned char msg; unsigned char sessionIdHit; unsigned char certificateType; unsigned char serverVersion[2]; unsigned char certificateLength[2]; unsigned char cipherSpecsLength[2]; unsigned char connectionIdLength[2]; unsigned char data; } ServerHello; /* * ClientMasterKey data structure * * Used to hold and protect the server's private RSA key. */ typedef struct { unsigned char msg; unsigned char cipherKind[3]; unsigned char clearKeyLength[2]; unsigned char encryptedKeyLength[2]; unsigned char keyArgLength[2]; unsigned char data; } ClientMasterKey; /* * surrenderCtx callback * * The random object has to be shared to keep it as well seeded as * possible. However, some of the functions that call it take a long * time to run, such as key generation. The surrenderCtx allows these * functions to let another function get some work done too. We * register the function Surrender so that BSAFE yields the thread * occasionally. */ static A_SURRENDER_CTX surrenderCtx; static Ns_Cs csRandom; static B_ALGORITHM_OBJ randomObject = NULL; /* * Static functions defined in this file. */ static int Recv(SSLConn *cPtr, void *vbuf, int toread); static int Decrypt(SSLConn * con); static int Encrypt(SSLConn * con); static int RecvRecord(SSLConn * con); static int SendRecord(SSLConn * con); static int SetupDigester(SSLConn * con); static int KeyMaterial(SSLConn * con, unsigned char *dest, char *num); static int DetermineSessionKeys(SSLConn * con); static int VerifyKeyArgs(SSLConn * con); static int SetupEncryption(SSLConn * con); static int EncryptInit(SSLConn * con, int fRead); static void EncryptFinal(SSLConn * con, int fRead, unsigned char *data, int length); static void DescribeError(unsigned char *errorcode); static int Surrender(POINTER ignored); static void RandomCleanup(void *ignored); static int CheckForAlgorithm(int trialck); static char *DescribeAlgorithm(int trialck); static int GenerateRandomBytes(unsigned char *output, int outputLength); static int NewSessionID(unsigned char *buf); static void U32TOA(unsigned u, unsigned char *dest); static void U24TOA(unsigned u, unsigned char *dest); static void U24TOA(unsigned u, unsigned char *dest); static void U16TOA(unsigned u, unsigned char *dest); static unsigned char f4Data[3] = {0x01, 0x00, 0x01}; /* *---------------------------------------------------------------------- * * NsSSLGenerateKeypair -- * * Generates an RSA key pair of modulusBits size. If * publicExponent!=NULL it will use it instead of the normal F4 * prime. * * input: &publicKey, &privateKey (uninitialized key objects) * * Note: This is used in stand-alone mode (keygen.tcl) only. See * readme.txt for more information. * * Results: * A keypair is created and placed in publicKey, privateKey. * * Side effects: * Memory is allocated to hold the publicKey, privateKey. * *---------------------------------------------------------------------- */ int NsSSLGenerateKeypair(unsigned int modulusBits, ITEM * publicExponent, B_KEY_OBJ * publicKey, B_KEY_OBJ * privateKey) { int status; B_ALGORITHM_OBJ keypairGenerator; int err; status = NS_ERROR; keypairGenerator = (B_ALGORITHM_OBJ) NULL; err = 0; *publicKey = (B_KEY_OBJ) NULL; *privateKey = (B_KEY_OBJ) NULL; do { A_RSA_KEY_GEN_PARAMS params; if ((modulusBits < 256) || (modulusBits > 1024)) { Ns_Log(Error, "nsssl: invalid key size"); break; } params.modulusBits = modulusBits; if (publicExponent != NULL) { memcpy(&params.publicExponent, publicExponent, sizeof(ITEM)); } else { params.publicExponent.data = f4Data; params.publicExponent.len = 3; } err = B_CreateAlgorithmObject(&keypairGenerator); if (err != 0) { break; } err = B_SetAlgorithmInfo(keypairGenerator, AI_RSAKeyGen, (POINTER) & params); if (err != 0) { break; } err = B_GenerateInit(keypairGenerator, ALGORITHM_CHOOSER, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } err = B_CreateKeyObject(publicKey); if (err != 0) { break; } err = B_CreateKeyObject(privateKey); if (err != 0) { break; } Ns_CsEnter(&csRandom); err = B_GenerateKeypair(keypairGenerator, *publicKey, *privateKey, randomObject, &surrenderCtx); Ns_CsLeave(&csRandom); if (err != 0) { break; } status = NS_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: bsafe error %d", err); B_DestroyKeyObject(publicKey); B_DestroyKeyObject(privateKey); } B_DestroyAlgorithmObject(&keypairGenerator); return status; } /* *---------------------------------------------------------------------- * * NsSSLInitialize -- * * Set up SSL data structures at server startup. * Random number is generated, shutdown handle is registered, Tcl * commands (if any) are registered. * * Results: * NS_OK * * Side effects: * See Ns_GenSeeds, RandomCleanup, and NSSSLInterpInit. * * Variable "initialized" is global. * *---------------------------------------------------------------------- */ int NsSSLInitialize(char *server, char *module) { unsigned long seeds[NSEEDS]; static int initialized; if (!initialized) { Ns_GenSeeds(seeds, NSEEDS); if (B_CreateAlgorithmObject(&randomObject) != 0 || B_SetAlgorithmInfo(randomObject, AI_MD5Random, NULL) != 0 || B_RandomInit(randomObject, ALGORITHM_CHOOSER, NULL) != 0 || B_RandomUpdate(randomObject, (unsigned char *) seeds, NSEEDS * (sizeof(long)), NULL) != 0) { return NS_ERROR; } Ns_CsInit(&csRandom); surrenderCtx.Surrender = Surrender; surrenderCtx.handle = NULL; if (server != NULL) { Ns_RegisterShutdown(RandomCleanup, NULL); } else { Ns_Log(Notice, "nsssl: running in stand-alone mode"); } initialized = 1; } if (server != NULL) { Ns_TclInitInterps(server, NsSSLInterpInit, NULL); } return NS_OK; } /* *---------------------------------------------------------------------- * * NsSSLCreateServer -- * * Sets up SSL data structures at server startup. * The server's private key and certificate are loaded * * Results: * The SSLServer context (sPtr). * * Side effects: * SSLServer context is created. * *---------------------------------------------------------------------- */ void * NsSSLCreateServer(char *cert, char *key) { SSLServer *sPtr; sPtr = ns_calloc(1, sizeof(SSLServer)); if (key != NULL && GetPrivateKey(&sPtr->privateKey, key) != NS_OK) { Ns_Log(Error, "nsssl: " "failed to fetch private key from file '%s'", key); ns_free(sPtr); return NULL; } if (GetCertificate(&sPtr->certificate, &sPtr->certificateLength, cert) != NS_OK) { Ns_Log(Error, "nsssl: " "failed to fetch server certificate from file '%s'", cert); ns_free(sPtr); return NULL; } return (void *) sPtr; } /* *---------------------------------------------------------------------- * * NsSSLDestroyServer -- * * Cleans up after the server and frees up the SSLServer * context. This is only called when AOLserver is shutting down. * * Results: * None. * * Side effects: * SSLServer context is freed. * *---------------------------------------------------------------------- */ void NsSSLDestroyServer(void *server) { SSLServer * ctx = server; if (ctx->privateKey != NULL) { B_DestroyKeyObject(&ctx->privateKey); } ns_free(ctx->certificate); ns_free(ctx); } /* *---------------------------------------------------------------------- * * NsSSLCreateConn -- * * Create the ubiquitous conn structure for a new SSL connection. * In order to create a conn for SSL, lots of work is done for * public key exchange, private session key exchange, and random * number generation. Note that RSA is only used for the private * session key exchange, after which a conventional cipher with * a message digest (if requested) is used. * * Results: * Pointer to the conn. * * Side effects: * The conn is created. * Encryption objects are created and (hopefully) destroyed. * *---------------------------------------------------------------------- */ void * NsSSLCreateConn(SOCKET socket, int timeout, void *server) { B_ALGORITHM_OBJ rsaDecryptor; SSLRecord *rec; int err; SSLConn *con; SSLServer *ctx = server; con = ns_calloc(1, sizeof(SSLConn)); con->timeout = timeout; con->socket = socket; con->ctx = ctx; err = 0; rsaDecryptor = NULL; rec = &con->rec; do { unsigned char common_ciphers[3 * 25]; int num_common; ServerHello *serverHello; int i; unsigned char *p; /* * At the moment we don't do client certificates. * (I think that's why this variable is disabled.) */ /* unsigned char certificateChallengeData[32]; */ /* * Get CLIENT-HELLO. */ if (RecvRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "client dropped connection before CLIENT-HELLO"); /* * This is not something to get concerned about. */ break; } else { ClientHello *clientHello = (ClientHello *) rec->data; int iClientVersion; int iCipherSpecsLength; int iSessionIdLength; int iChallengeLength; int i; iClientVersion = ATOU16(clientHello->clientVersion); iCipherSpecsLength = ATOU16(clientHello->cipherSpecsLength); iSessionIdLength = ATOU16(clientHello->sessionIdLength); iChallengeLength = ATOU16(clientHello->challengeLength); if (clientHello->msg == SSL_MT_ERROR) { DescribeError((unsigned char *) (&clientHello->msg + 1)); break; } if ((clientHello->msg != SSL_MT_CLIENT_HELLO) || ((iCipherSpecsLength % 3) != 0) || ((iSessionIdLength != 0) && (iSessionIdLength != 16)) || (iChallengeLength < 16) || (iChallengeLength > 32)) { Ns_Log(Debug, "nsssl: client sent malformed CLIENT-HELLO"); /* * This is not something to get worried about. If the * browser is that messed up it will drop the * connection, anyway. */ break; } num_common = 0; for (i = 0; i < iCipherSpecsLength; i += 3) { int ck = ATOU24(&clientHello->data + i) | 0x01000000; if ( CheckForAlgorithm(ck) == NS_OK) { U24TOA(ck, &common_ciphers[num_common * 3]); num_common++; } } if (num_common == 0) { Ns_Log(Warning, "nsssl: " "client and server failed to agree on cipher"); rec = &con->rec; rec->input[0] = SSL_MT_ERROR; U16TOA(SSL_PE_NO_CIPHER, &(rec->input)[1]); rec->nRecordLength = 3; rec->fIsEscape = 0; (void) SendRecord(con); break; } con->challengeLength = iChallengeLength; memcpy(con->challenge, &clientHello->data + iCipherSpecsLength + iSessionIdLength, iChallengeLength); } /* * Get a new session id (a random number). */ NewSessionID(con->connId); /* * Make the SERVER-HELLO. */ serverHello = (ServerHello *) rec->input; serverHello->msg = SSL_MT_SERVER_HELLO; serverHello->sessionIdHit = 0; serverHello->certificateType = SSL_CT_X509_CERTIFICATE; U16TOA(SSL_SERVER_VERSION, serverHello->serverVersion); U16TOA(ctx->certificateLength, serverHello->certificateLength); i = num_common * 3; U16TOA(i, serverHello->cipherSpecsLength); U16TOA(SSL_SESSION_ID_LENGTH, serverHello->connectionIdLength); p = &serverHello->data; memcpy(p, ctx->certificate, ctx->certificateLength); p += ctx->certificateLength; memcpy(p, common_ciphers, i); p += i; memcpy(p, con->connId, SSL_SESSION_ID_LENGTH); rec->nRecordLength = (sizeof(ServerHello) - 1) + ctx->certificateLength + i + SSL_SESSION_ID_LENGTH; rec->fIsEscape = 0; /* * Send the SERVER-HELLO. */ if (SendRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "client failed to receive SERVER-HELLO"); break; } /* * Get the CLIENT-MASTER-KEY. */ if (RecvRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "client failed to send CLIENT-MASTER-KEY"); break; } else { /* * Decode CLIENT-MASTER-KEY. */ ClientMasterKey *clientMasterKey = (ClientMasterKey *) rec->data; int iClearKeyLength; int iEncryptedKeyLength; int iKeyArgLength; unsigned int outputLenUpdate; unsigned int outputLenFinal; unsigned char *out; unsigned int outMax; con->cipherKind = ATOU24(clientMasterKey->cipherKind) | 0x01000000; iClearKeyLength = ATOU16(clientMasterKey->clearKeyLength); iEncryptedKeyLength = ATOU16(clientMasterKey->encryptedKeyLength); iKeyArgLength = ATOU16(clientMasterKey->keyArgLength); if (clientMasterKey->msg == SSL_MT_ERROR) { DescribeError(&clientMasterKey->msg + 1); break; } if ( (clientMasterKey->msg != SSL_MT_CLIENT_MASTER_KEY) || (CheckForAlgorithm(con->cipherKind) != NS_OK) ) { Ns_Log(Debug, "nsssl: " "client sent malformed CLIENT-MASTER-KEY"); break; } p = &(clientMasterKey->data); memcpy(con->masterKey, p, iClearKeyLength); p += iClearKeyLength; /* * Decrypt secret session key. You know the BSAFE drill by now. */ err = B_CreateAlgorithmObject(&rsaDecryptor); if (err != 0) { break; } err = B_SetAlgorithmInfo(rsaDecryptor, AI_PKCS_RSAPrivate, NULL); if (err != 0) { break; } err = B_DecryptInit(rsaDecryptor, ctx->privateKey, ALGORITHM_CHOOSER, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } out = (unsigned char *) (con->masterKey + iClearKeyLength); outMax = sizeof(con->masterKey) - iClearKeyLength; err = B_DecryptUpdate(rsaDecryptor, out, &outputLenUpdate, outMax, p, iEncryptedKeyLength, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } out += outputLenUpdate; outMax -= outputLenUpdate; err = B_DecryptFinal(rsaDecryptor, out, &outputLenFinal, outMax, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { Ns_Log(Debug, "nsssl: " "failed to decrypt secret session key"); break; } outputLenFinal += outputLenUpdate; con->masterKeyLength = iClearKeyLength + outputLenFinal; p += iEncryptedKeyLength; /* * Get the KEY-ARG-DATA if there is any. */ con->keyArgLength = iKeyArgLength; if (VerifyKeyArgs(con) != NS_OK) { break; } else if (iKeyArgLength > 0) { memcpy(con->readKeyArgData, p, iKeyArgLength); memcpy(con->writeKeyArgData, p, iKeyArgLength); } if ( (SetupDigester(con) != NS_OK) || (DetermineSessionKeys(con) != NS_OK) || (SetupEncryption(con) != NS_OK) ) { break; } /* * Figure out the cipher block size. */ switch (con->cipherKind) { case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: con->blockSize = 0; break; case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: con->blockSize = 8; break; case SSL_CK_NULL_WITH_MD5: default: con->blockSize = 0; } con->fEncryptionActive = 1; } /* * Send the SERVER-VERIFY message. */ p = rec->input; *p++ = SSL_MT_SERVER_VERIFY; memcpy(p, con->challenge, con->challengeLength); rec->nRecordLength = con->challengeLength + 1; rec->fIsEscape = 0; if (SendRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "client did not receive SERVER-VERIFY"); break; } /* * Get the CLIENT-FINISHED-V2 or CLIENT-FINISHED message. */ if (RecvRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "client did not receive CLIENT-FINISHED"); break; } else { p = rec->data; if (*p == SSL_MT_ERROR) { DescribeError(p + 1); break; } if ((*p != SSL_MT_CLIENT_FINISHED) && (*p != SSL_MT_CLIENT_FINISHED_V2)) { Ns_Log(Debug, "nsssl: " "client sent malformed CLIENT-FINISHED"); break; } /* * We probably should verify that the CLIENT-FINISHED * message is correct at this point but we don't because it * doesn't really matter once the connection was closed. */ } /* * Create a new session ID. */ NewSessionID(con->sessionId); /* * Send the SERVER-FINISHED-V2 message. */ rec->input[0] = SSL_MT_SERVER_FINISHED_V2; memcpy(&rec->input[1], con->sessionId, SSL_SESSION_ID_LENGTH); rec->nRecordLength = SSL_SESSION_ID_LENGTH + 1; rec->fIsEscape = 0; if (SendRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "client did not receive SERVER-FINISHED-V2"); break; } } while (0); /* * Clean up the RSA object if it hasn't been cleaned up already. */ if (rsaDecryptor != NULL) { B_DestroyAlgorithmObject(&rsaDecryptor); } if (err != 0) { Ns_Log(Error, "nsssl: " "ssl connection failed, bsafe error %d", err); NsSSLDestroyConn(con); con = NULL; } return (void *) con; } /* *---------------------------------------------------------------------- * * NsSSLDestroyConn -- * * Destroy the ubiquitous conn structure for the SSL connection. * This code enters a critical section at the beginning to update * the random number so it isn't used again in another session. * * Results: * None * * Side effects: * The conn and all its data structures are (hopefully) freed. * Encryption objects are created and (hopefully) destroyed. * *---------------------------------------------------------------------- */ void NsSSLDestroyConn(void *conn) { SSLConn *cPtr = conn; /* * Make a new random number. */ Ns_CsEnter(&csRandom); (void) B_RandomUpdate(randomObject, (unsigned char *) cPtr, sizeof(SSLConn), &surrenderCtx); Ns_CsLeave(&csRandom); /* * Burn all the algorithm objects for the digester, encryptor, and * decryptor if they haven't been destroyed already. */ if (cPtr->digester != NULL) { B_DestroyAlgorithmObject(&cPtr->digester); } if (cPtr->encryptor != NULL) { B_DestroyAlgorithmObject(&cPtr->encryptor); } if (cPtr->decryptor != NULL) { B_DestroyAlgorithmObject(&cPtr->decryptor); } /* * Burn the key objects so they can't be found in memory again if * something hasn't already done so. */ if (cPtr->readKeyObj != NULL) { B_DestroyKeyObject(&cPtr->readKeyObj); } if (cPtr->writeKeyObj != NULL) { B_DestroyKeyObject(&cPtr->writeKeyObj); } ns_free(cPtr); } /* *---------------------------------------------------------------------- * * NsSSLSend -- * * Send data out to the connection. * * Results: * The number of bytes sent. * * Notice: -1 is returned on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsSSLSend(void *conn, void *vbuf, int towrite) { int nwrote, ncopy; unsigned char *buf = vbuf; SSLConn *con = conn; nwrote = towrite; while (towrite) { ncopy = SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER - con->outgoingLength - con->macSize; if (con->blockSize > 0) { /* * Note: macSize % blockSize == 0 */ ncopy -= (ncopy + con->outgoingLength) % con->blockSize; } if (towrite < ncopy) { memcpy(&(con->outgoing)[con->outgoingLength], buf, towrite); con->outgoingLength += towrite; towrite = 0; } else { memcpy(con->rec.input, con->outgoing, con->outgoingLength); memcpy(&(con->rec.input)[con->outgoingLength], buf, ncopy); con->rec.nRecordLength = con->outgoingLength + ncopy; con->rec.fIsEscape = 0; con->outgoingLength = 0; towrite -= ncopy; buf += ncopy; if (SendRecord(con) != NS_OK) { Ns_Log(Debug, "nsssl: " "failed sending record to client"); /* * Note that we're returning -1 here. */ return -1; } } } return nwrote; } /* *---------------------------------------------------------------------- * * NsSSLRecv -- * * Read data from the connection. * * Results: * The number of bytes received. * * Notice: -1 is returned on error. * * Side effects: * vbuf contains the data read. * *---------------------------------------------------------------------- */ int NsSSLRecv(void *conn, void *vbuf, int toread) { int ncopy; SSLConn *cPtr = conn; unsigned char *buf = vbuf; if (cPtr->incomingLength == 0) { if ((NsSSLFlush(conn) != NS_OK) || (RecvRecord(cPtr) != NS_OK)) { Ns_Log(Debug, "nsssl: " "failed receiving record from client"); /* * Note that we're returning -1 here. */ return -1; } cPtr->incomingLength = cPtr->rec.nRecordLength; cPtr->incomingNext = cPtr->incoming; memcpy(cPtr->incoming, cPtr->rec.data, cPtr->incomingLength); } ncopy = cPtr->incomingLength; if (ncopy > toread) { ncopy = toread; } memcpy(buf, cPtr->incomingNext, ncopy); cPtr->incomingLength -= ncopy; cPtr->incomingNext += ncopy; return ncopy; } /* *---------------------------------------------------------------------- * * NsSSLFlush -- * * Flush data waiting to be sent. * * Results: * NS_OK or NS_ERROR. * * Side effects: * * *---------------------------------------------------------------------- */ int NsSSLFlush(void *conn) { int towrite; SSLConn *cPtr = conn; while (cPtr->outgoingLength > 0) { towrite = cPtr->outgoingLength; if (cPtr->blockSize > 0 && ((towrite + cPtr->macSize) > (SSL_MAX_RECORD_LENGTH_3_BYTE_HEADER - SSL_MAXPADDING))) { /* * Note: macSize % blockSize == 0 */ towrite -= towrite % cPtr->blockSize; } cPtr->rec.nRecordLength = towrite; cPtr->rec.fIsEscape = 0; memcpy(cPtr->rec.input, cPtr->outgoing, towrite); if (towrite != cPtr->outgoingLength) { memcpy(cPtr->outgoing, &(cPtr->outgoing)[towrite], cPtr->outgoingLength - towrite); } cPtr->outgoingLength -= towrite; if (SendRecord(cPtr) != NS_OK) { Ns_Log(Debug, "nsssl: failed flushing record to client"); return NS_ERROR; } } return NS_OK; } /* *---------------------------------------------------------------------- * * Recv -- * * Reads data from the connection using Ns_SockRecv. * * Results: * NS_OK * * Side effects: * *vbuf contains the data. * *---------------------------------------------------------------------- */ static int Recv(SSLConn *cPtr, void *vbuf, int toread) { char *buf = (char *) vbuf; int tocopy; while (toread > 0) { if (cPtr->cnt > 0) { if (toread < cPtr->cnt) { tocopy = toread; } else { tocopy = cPtr->cnt; } memcpy(buf, cPtr->base, tocopy); cPtr->base += tocopy; cPtr->cnt -= tocopy; buf += tocopy; toread -= tocopy; } if (toread > 0) { cPtr->base = cPtr->buf; cPtr->cnt = Ns_SockRecv(cPtr->socket, cPtr->base, sizeof(cPtr->buf), cPtr->timeout); if (cPtr->cnt <= 0) { /* * This happens when a user drops the connection by * hitting "stop" or rejects the server's master key * and/or certificate. */ Ns_Log(Debug, "nsssl: client dropped connection"); return NS_ERROR; } } } return NS_OK; } /* *---------------------------------------------------------------------- * * Decrypt -- * * Takes rec->nRecordLength bytes with rec->nPadding padding from * rec->input * and decrypt it into rec->output. It also checks * the MAC and sets * rec->data to point to the actual data. * rec->nRecordLength is adjusted, if * there was padding or a * MAC. * * Results: * NS_OK or NS_ERROR * * Side effects: * rec->output contains the decrypted data. * *---------------------------------------------------------------------- */ static int Decrypt(SSLConn * con) { int status; int err; unsigned char *out; unsigned int outMax; unsigned int length; unsigned int updateLength; SSLRecord *rec; if (EncryptInit(con, 1) != NS_OK) { Ns_Log(Error, "nsssl: encryptinit failed"); return NS_ERROR; } rec = &con->rec; status = NS_ERROR; err = 0; /* * Decryption step. */ switch (con->cipherKind) { case SSL_CK_NULL_WITH_MD5: /* * No encryption with just a message digest. */ rec->data = rec->input; status = NS_OK; break; case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: /* * Encryption with a message digest. */ out = rec->data = rec->output; outMax = SSL_MAXRECSIZE; err = B_DecryptUpdate(con->decryptor, out, &updateLength, outMax, rec->input, rec->nRecordLength, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } length = updateLength; if ((con->cipherKind != SSL_CK_RC4_128_WITH_MD5) && (con->cipherKind != SSL_CK_RC4_128_EXPORT40_WITH_MD5)) { out += updateLength; outMax -= updateLength; err = B_DecryptFinal(con->decryptor, out, &updateLength, outMax, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } length += updateLength; EncryptFinal(con, 1, rec->input, rec->nRecordLength); } rec->nRecordLength = length - rec->nPadding; status = NS_OK; break; default: Ns_Log(Warning, "nsssl: unsupported cipher"); } if (err != 0) { Ns_Log(Error, "nsssl: failed to decrypt, bsafe error %d", err); } if (status != NS_OK) { return NS_ERROR; } else { status = NS_ERROR; } /* * Message digest step. */ do { unsigned char buf[4]; rec->nRecordLength -= con->macSize; rec->mac = rec->data; rec->data += con->macSize; err = B_DigestUpdate(con->digester, con->readKey, con->ReadWriteKeyLength, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } err = B_DigestUpdate(con->digester, rec->data, rec->nRecordLength + rec->nPadding, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } U32TOA(con->nReadSequence, buf); err = B_DigestUpdate(con->digester, buf, 4, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } err = B_DigestFinal(con->digester, rec->macBuf, &updateLength, 16, (A_SURRENDER_CTX *) NULL); if ((err != 0) || (updateLength != 16)) { break; } if (memcmp(rec->mac, rec->macBuf, con->macSize) != 0) { Ns_Log(Error, "nsssl: invalid message authentication code"); break; } status = NS_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: decrypt failed, bsafe error %d", err); } return status; } /* *---------------------------------------------------------------------- * * Encrypt -- * * Makes a MAC for (rec->nRecordLength + rec->nPadding) bytes in * rec->input. Encrypts MAC + rec->input and stores the result * at rec->data. * * Results: * NS_OK or NS_ERROR * * Side effects: * con->rec (in the SSLConn context) contains the * encrypted data. * *---------------------------------------------------------------------- */ static int Encrypt(SSLConn * con) { int status; int err; unsigned char *out; unsigned int outMax; unsigned int length; unsigned int updateLength; SSLRecord *rec; status = NS_ERROR; err = 0; rec = &con->rec; /* * Message digest step. * Note: We must always do MD5 with encryption. */ do { unsigned char buf[4]; err = B_DigestUpdate(con->digester, con->writeKey, con->ReadWriteKeyLength, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } err = B_DigestUpdate(con->digester, rec->input, rec->nRecordLength + rec->nPadding, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } U32TOA(con->nWriteSequence, buf); err = B_DigestUpdate(con->digester, buf, 4, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } err = B_DigestFinal(con->digester, rec->macBuf, &updateLength, 16, (A_SURRENDER_CTX *) NULL); if ((err != 0) || (updateLength != 16)) { break; } if (EncryptInit(con, 0) != NS_OK) { break; } status = NS_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: encrypt failed, bsafe error %d", err); } /* * Return immediately on error or re-initialize status and continue. */ if (status != NS_OK) { return NS_ERROR; } else { status = NS_ERROR; } /* * Encryption step. */ switch (con->cipherKind) { case SSL_CK_NULL_WITH_MD5: /* * No encryption -- just do a message digest and copy the data. */ memcpy(rec->data, rec->macBuf, con->macSize); memcpy(rec->data + con->macSize, rec->input, rec->nRecordLength); rec->nRecordLength += con->macSize; status = NS_OK; break; case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: /* * Encryption with a message digest. */ out = rec->data; outMax = SSL_MAXRECSIZE; err = B_EncryptUpdate(con->encryptor, out, &updateLength, outMax, rec->macBuf, con->macSize, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } length = updateLength; out += updateLength; outMax -= updateLength; err = B_EncryptUpdate(con->encryptor, out, &updateLength, outMax, rec->input, rec->nRecordLength + rec->nPadding, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } length += updateLength; if ((con->cipherKind != SSL_CK_RC4_128_WITH_MD5) && (con->cipherKind != SSL_CK_RC4_128_EXPORT40_WITH_MD5)) { out += updateLength; outMax -= updateLength; err = B_EncryptFinal(con->encryptor, out, &updateLength, outMax, NULL, (A_SURRENDER_CTX *) NULL); if (err != 0) { break; } length += updateLength; EncryptFinal(con, 0, rec->data, length); } rec->nRecordLength = length; status = NS_OK; break; default: Ns_Log(Warning, "nsssl: unsupported cipher"); } if (err != 0) { Ns_Log(Error, "nsssl: encrypt failed, bsafe error %d", err); } return status; } /* *---------------------------------------------------------------------- * * RecvRecord -- * * Reads an ssl record from con->socket. If appropriate it * decrypts and checks the MAC. It sets rec->data to the * received data of rec->nRecordLength bytes. * * Results: * NS_OK or NS_ERROR * * Side effects: * con->rec (in the SSLConn context) contains the * record received. * *---------------------------------------------------------------------- */ static int RecvRecord(SSLConn * con) { int toread; unsigned char buf[3]; unsigned char *dest; SSLRecord *rec; if (Recv(con, buf, 3) != NS_OK) { return NS_ERROR; } rec = &con->rec; if (buf[0] & 0x80) { /* * 2 byte length header */ rec->nRecordLength = ((buf[0] & 0x7f) << 8) | buf[1]; rec->fIsEscape = 0; rec->nPadding = 0; rec->input[0] = buf[2]; dest = &rec->input[1]; toread = rec->nRecordLength - 1; } else { /* * 3 byte length header */ rec->nRecordLength = ((buf[0] & 0x3f) << 8) | buf[1]; rec->fIsEscape = (buf[0] & 0x40) != 0; rec->nPadding = buf[2]; dest = (unsigned char *) rec->input; toread = rec->nRecordLength; } if (toread == 2) { /* * Client cancelled due to server certificate rejection. */ Ns_Log(Debug, "nsssl: client rejected cert and dropped connection"); return NS_ERROR; } if (Recv(con, dest, toread) != NS_OK) { Ns_Log(Debug, "nsssl: client dropped connection"); return NS_ERROR; } if (!con->fEncryptionActive) { rec->data = rec->input; } else if (Decrypt(con) != NS_OK) { return NS_ERROR; } con->nReadSequence++; return NS_OK; } /* *---------------------------------------------------------------------- * * SendRecord -- * * Creates and writes an ssl record to con->socket. If * appropriate it makes a MAC and encrypts the MAC + data + * padding. * * input: rec->nRecordLength bytes in rec->input, * rec->fIsEscape denotes an escape record (unused and untested). * * Results: * NS_OK or NS_ERROR * * Side effects: * con->socket (in the SSLConn context) contains the ssl * record created. * *---------------------------------------------------------------------- */ static int SendRecord(SSLConn * con) { SSLRecord *rec = &con->rec; int towrite, nwrote; int fThreeByteHeader; char *buf; /* * Calculate the padding. */ if (con->blockSize != 0) { rec->nPadding = (rec->nRecordLength + con->macSize) % con->blockSize; if (rec->nPadding != 0) { rec->nPadding = con->blockSize - rec->nPadding; } } else { rec->nPadding = 0; } /* * Decide the header size. */ if (!rec->fIsEscape && (rec->nPadding == 0)) { /* * We can use the 2 byte record header. */ fThreeByteHeader = 0; rec->data = &rec->output[2]; } else { /* * We need the 3 byte record header. */ fThreeByteHeader = 1; rec->data = &rec->output[3]; } if (!con->fEncryptionActive) { memcpy(rec->data, rec->input, rec->nRecordLength); } else if (Encrypt(con) != NS_OK) { return NS_ERROR; } if (!fThreeByteHeader) { towrite = 2; U16TOA(rec->nRecordLength, rec->output); rec->output[0] |= 0x80; } else { /* * 3 byte record header. */ towrite = 3; U16TOA(rec->nRecordLength, rec->output); rec->output[2] = rec->nPadding; if (rec->fIsEscape) { rec->output[0] |= 0x40; } } towrite += rec->nRecordLength; buf = (char *) rec->output; while (towrite > 0) { nwrote = Ns_SockSend(con->socket, buf, towrite, con->timeout); if (nwrote < 0) { return NS_ERROR; } towrite -= nwrote; buf += nwrote; } con->nWriteSequence++; return NS_OK; } /* *---------------------------------------------------------------------- * * SetupDigester -- * * Sets up up the message digester based on con->cipherKind. * Currently only MD5 is used. * * Results: * NS_OK or NS_ERROR * * Side effects: * Algorithm object in con->digester is created and initialized * by the BSAFE library. * *---------------------------------------------------------------------- */ static int SetupDigester(SSLConn * con) { switch (con->cipherKind) { case SSL_CK_NULL_WITH_MD5: case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: con->macSize = 16; if (B_CreateAlgorithmObject(&con->digester) != 0 || B_SetAlgorithmInfo(con->digester, AI_MD5, NULL) != 0 || B_DigestInit(con->digester, (B_KEY_OBJ) NULL, DIGEST_CHOOSER, NULL) != 0) { Ns_Log(Error, "nsssl: failed initializing digester"); return NS_ERROR; } break; default: /* * No digester in use. */ con->macSize = 0; } return NS_OK; } /* *---------------------------------------------------------------------- * * KeyMaterial * * This generates the key material used to generate the read and * write keys during RSA public key exchange. * * Results: * NS_OK or NS_ERROR * * Side effects: * con->masterKey, con->masterKeyLength, * con->challenge, and con->challengeLength are populated. * *---------------------------------------------------------------------- */ static int KeyMaterial(SSLConn * con, unsigned char *dest, char *num) { unsigned int outputLengthFinal; if (B_DigestUpdate(con->digester, con->masterKey, con->masterKeyLength, NULL) != 0) { return NS_ERROR; } if (num != NULL && B_DigestUpdate(con->digester, (unsigned char *)num, strlen(num), NULL) != 0) { return NS_ERROR; } if (B_DigestUpdate(con->digester, con->challenge, con->challengeLength, NULL) != 0 || B_DigestUpdate(con->digester, con->connId, SSL_SESSION_ID_LENGTH, NULL) != 0 || B_DigestFinal(con->digester, dest, &outputLengthFinal, 16, NULL) != 0 || outputLengthFinal != 16) { return NS_ERROR; } return NS_OK; } /* *---------------------------------------------------------------------- * * DetermineSessionKeys * * Determines the session keys according to con->cipherKind * * input: * con->masterKey, con->challenge, con->connId, con->cipherKind * * output: * con->readKey, con->writeKey, con->ReadWriteKeyLength * * Results: * NS_OK or NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int DetermineSessionKeys(SSLConn * con) { unsigned char keyMaterial[16]; switch (con->cipherKind) { case SSL_CK_NULL_WITH_MD5: case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: /* * With MD5 message digest. */ con->ReadWriteKeyLength = 16; /* WRITE KEY = MD5[ MASTER-KEY, "0", CHALLENGE, CONNECTION-ID ] */ /* READ KEY = MD5[ MASTER-KEY, "1", CHALLENGE, CONNECTION-ID ] */ if ( (KeyMaterial(con, con->writeKey, "0") != NS_OK) || (KeyMaterial(con, con->readKey, "1") != NS_OK) ) { return NS_ERROR; } break; case SSL_CK_DES_64_CBC_WITH_MD5: con->ReadWriteKeyLength = 8; /* * WRITE KEY = HASH[ MASTER-KEY, CHALLENGE, CONNECTION-ID ] [0-7] */ if (KeyMaterial(con, con->writeKey, "0") != NS_OK) { return NS_ERROR; } /* * WRITE KEY = HASH[ MASTER-KEY, CHALLENGE, CONNECTION-ID ] [8-15] */ memcpy(con->readKey, &con->writeKey[8], 8); break; case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: con->ReadWriteKeyLength = 24; /* * 3 * 8 byte keys. */ if ( (KeyMaterial(con, con->writeKey, "0") != NS_OK) || (KeyMaterial(con, keyMaterial, "1") != NS_OK) ) { return NS_ERROR; } memcpy(&con->writeKey[16], keyMaterial, 8); memcpy(con->readKey, &keyMaterial[8], 8); if (KeyMaterial(con, &con->readKey[8], "2") != NS_OK) { return NS_ERROR; } break; default: /* * Note: We do not support SHA message digests at this time, * so in those extremely rare cases when a browser is set up * to refuse MD5 and use SHA, this error will appear in * addition to the standard error cases. That kind of * situation would be extremely rare, since all browsers * are set up to accept MD5 and only crazies turn it off. */ Ns_Log(Error, "nsssl: unsupported message digest algorithm"); return NS_ERROR; } return NS_OK; } /* *---------------------------------------------------------------------- * * VerifyKeyArgs * * Verifies the master key length and key arg length after the * server receives the CLIENT-MASTER-KEY. * * input: con->cipherKind, con->masterKeyLength, con->keyArgLength * * Results: * NS_OK or NS_ERROR * * Side effects: * None. * *---------------------------------------------------------------------- */ static int VerifyKeyArgs(SSLConn * con) { int masterKeyLength; int keyArgLength; int status; status = NS_ERROR; /* * This switch is for the masterKeyLength. * Note: there are two switch statements. */ switch (con->cipherKind) { case SSL_CK_NULL_WITH_MD5: case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: masterKeyLength = 16; break; case SSL_CK_DES_64_CBC_WITH_MD5: masterKeyLength = 8; break; case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: masterKeyLength = 24; break; default: /* * This is an error condition. */ masterKeyLength = -1; } /* * This switch is for the keyArgLength. */ switch (con->cipherKind) { case SSL_CK_NULL_WITH_MD5: case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: keyArgLength = 0; break; case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: keyArgLength = 8; break; default: /* * This is an error condition. */ keyArgLength = -1; } /* * This looks like a lame way to detect an error condition. */ if ((con->masterKeyLength == masterKeyLength) && (con->keyArgLength == keyArgLength)) { status = NS_OK; } return status; } /* *---------------------------------------------------------------------- * * VerifyKeyArgs * * Sets up encryption algorithm objects and key objects. * * input: * con->cipherKind, con->readKey, con->writeKey, * con->ReadWriteKeyLength * * output: * con->encryptor, con->decryptor, con->readKeyObj, * con->writeKeyObj * * Results: * NS_OK or NS_ERROR * * Side effects: * * *---------------------------------------------------------------------- */ static int SetupEncryption(SSLConn * con) { ITEM item; int rc4; /* * This is the Bizarro-world way of choosing export/domestic RC4. * (I believe it's because we have to use SetAlgorithmInfo for * RC4 and nothing else). If you're going to add SSL v3 to this * you'll be using SetAlgorithmInfo a whole lot more. */ rc4 = 0; switch (con->cipherKind) { case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: rc4 = 1; if (B_CreateAlgorithmObject(&con->encryptor) != 0 || B_CreateAlgorithmObject(&con->decryptor) != 0) { return NS_ERROR; } /* Fallthrough */ case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: if (B_CreateKeyObject(&con->readKeyObj) != 0 || B_CreateKeyObject(&con->writeKeyObj) != 0) { return NS_ERROR; } } /* * Setup the RC4 algorithm. * Note: Other algorithms used in SSL v3 will need to use this, too. */ if (rc4 && (B_SetAlgorithmInfo(con->encryptor, AI_RC4, NULL) != 0 || B_SetAlgorithmInfo(con->decryptor, AI_RC4, NULL) != 0)) { return NS_ERROR; } /* * Initialize the key objects. */ switch (con->cipherKind) { case SSL_CK_DES_64_CBC_WITH_MD5: if (B_SetKeyInfo(con->writeKeyObj, KI_DES8, con->writeKey) != 0 || B_SetKeyInfo(con->readKeyObj, KI_DES8, con->readKey) != 0) { return NS_ERROR; } break; case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: item.data = con->writeKey; item.len = con->ReadWriteKeyLength; if (B_SetKeyInfo(con->writeKeyObj, KI_Item, (POINTER) &item) != 0) { return NS_ERROR; } item.data = con->readKey; if (B_SetKeyInfo(con->readKeyObj, KI_Item, (POINTER) &item)) { return NS_ERROR; } } /* * Extra setup for RC4. */ if (rc4 && (B_EncryptInit(con->encryptor, con->writeKeyObj, ALGORITHM_CHOOSER, NULL) != 0 || B_DecryptInit(con->decryptor, con->readKeyObj, ALGORITHM_CHOOSER, NULL) != 0)) { return NS_ERROR; } return NS_OK; } /* *---------------------------------------------------------------------- * * EncryptInit -- * * Sets up the encryption/decryption algorithm for another * round of doing it's thing. * * (Note the dual switch(con->cipherKind) statements.) * * input: fRead, con->cipherKind, { con->decryptor | con->encryptor } * con->keyArgData, con->keyArgLength, con->ReadWriteKeyLength * { con->readKeyObj | con->writeKeyObj } * output: { con->encryptor | con->decryptor } * * Results: * NS_OK or NS_ERROR * * Side effects: * * *---------------------------------------------------------------------- */ static int EncryptInit(SSLConn * con, int fRead) { A_RC2_CBC_PARAMS rc2Params; B_ALGORITHM_OBJ *algObj; unsigned char *keyArgData; int err; algObj = fRead ? &con->decryptor : &con->encryptor; switch (con->cipherKind) { case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: if (B_CreateAlgorithmObject(algObj) != 0) { return NS_ERROR; } } if (con->keyArgLength > 0) { keyArgData = fRead ? con->readKeyArgData : con->writeKeyArgData; } /* * Setup the algorithms. */ switch (con->cipherKind) { case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: rc2Params.effectiveKeyBits = con->ReadWriteKeyLength * 8; rc2Params.iv = keyArgData; if (B_SetAlgorithmInfo(*algObj, AI_RC2_CBC, (POINTER) &rc2Params) != 0) { return NS_ERROR; } break; case SSL_CK_DES_64_CBC_WITH_MD5: if (B_SetAlgorithmInfo(*algObj, AI_DES_CBC_IV8, (POINTER) keyArgData) != 0) { return NS_ERROR; } break; case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: if (B_SetAlgorithmInfo(*algObj, AI_DES_EDE3_CBC_IV8, (POINTER) keyArgData) != 0) { return NS_ERROR; } /* Fallthrough */ case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: break; default: Ns_Log(Warning, "nsssl: unsupported cipher"); return NS_ERROR; } /* * Still setting up the algorithms. */ switch (con->cipherKind) { case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: case SSL_CK_IDEA_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: if (!fRead) { err = B_EncryptInit(*algObj, con->writeKeyObj, ALGORITHM_CHOOSER, NULL); } else { err = B_DecryptInit(*algObj, con->readKeyObj, ALGORITHM_CHOOSER, NULL); } if (err != 0) { return NS_ERROR; } /* Fallthrough */ case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC4_128_EXPORT40_WITH_MD5: break; default: Ns_Log(Warning, "nsssl: unsupported cipher"); return NS_ERROR; } return NS_OK; } /* *---------------------------------------------------------------------- * * EncryptFinal -- * * Update the key arg data and destroy the encryption/decryption * object. * * Note: This is not called for RC4. * * Results: * None. * * Side effects: * * *---------------------------------------------------------------------- */ static void EncryptFinal(SSLConn * con, int fRead, unsigned char *data, int length) { B_ALGORITHM_OBJ *algObj; if (con->keyArgLength > 0) { unsigned char *dest; dest = fRead ? con->readKeyArgData : con->writeKeyArgData; memcpy(dest, &data[length - 8], con->keyArgLength); } algObj = fRead ? &con->decryptor : &con->encryptor; B_DestroyAlgorithmObject(algObj); *algObj = NULL; } /* *---------------------------------------------------------------------- * * DescribeError -- * * Translate error code into English. * * Note: This is only used for the server log. * * Results: * None. * * Side effects: * * *---------------------------------------------------------------------- */ static void DescribeError(unsigned char *errorcode) { unsigned err; char *msg; err = ATOU16(errorcode); switch (err) { case SSL_PE_NO_CIPHER: msg = "No Cipher"; break; case SSL_PE_NO_CERTIFICATE: msg = "No Certificate"; break; case SSL_PE_BAD_CERTIFICATE: msg = "Bad Certificate"; break; case SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE: msg = "Unsupported Certificate Type"; break; default: msg = "Unknown Error"; } Ns_Log(Debug, "nsssl: client sent this error: '%s'", msg); } /* *---------------------------------------------------------------------- * * Surrender -- * * Cede control to allow other threads to work while we're still * busy running the random number generator. * * Results: * None. * * Side effects: * * *---------------------------------------------------------------------- */ static int Surrender(POINTER ignored) { Ns_CsLeave(&csRandom); Ns_ThreadYield(); Ns_CsEnter(&csRandom); return NS_OK; } /* *---------------------------------------------------------------------- * * RandomCleanup -- * * Destroy algorithm object and the critical section used for * the random number generator. * * Results: * None. * * Side effects: * * *---------------------------------------------------------------------- */ static void RandomCleanup(void *ignored) { B_DestroyAlgorithmObject(&randomObject); randomObject = NULL; Ns_CsDestroy(&csRandom); } /* *---------------------------------------------------------------------- * * CheckForAlgorithm -- * * Report on ciphers/digests supported. * * Results: * NS_OK if your cipher is supported. * NS_ERROR if your cipher isn't. * * Side effects: * * *---------------------------------------------------------------------- */ static int CheckForAlgorithm(int trialck) { switch (trialck) { case SSL_CK_RC4_128_EXPORT40_WITH_MD5: case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: #ifndef SSL_EXPORT case SSL_CK_RC4_128_WITH_MD5: case SSL_CK_RC2_128_CBC_WITH_MD5: case SSL_CK_DES_64_CBC_WITH_MD5: case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: #endif return NS_OK; } return NS_ERROR; } /* *---------------------------------------------------------------------- * * DescribeAlgorithm -- * * Describe ciphers/digests supported. * * Results: * char pointer to the ASCII name of the cipher. * * Side effects: * None. * *---------------------------------------------------------------------- */ static char * DescribeAlgorithm(int trialck) { char *desc; switch (trialck) { case SSL_CK_RC4_128_EXPORT40_WITH_MD5: desc = "SSL_CK_RC4_128_EXPORT40_WITH_MD5"; break; case SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5: desc = "SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5"; break; #ifndef SSL_EXPORT case SSL_CK_RC4_128_WITH_MD5: desc = "SSL_CK_RC4_128_WITH_MD5"; break; case SSL_CK_RC2_128_CBC_WITH_MD5: desc = "SSL_CK_RC2_128_CBC_WITH_MD5"; break; case SSL_CK_DES_64_CBC_WITH_MD5: desc = "SSL_CK_DES_64_CBC_WITH_MD5"; break; case SSL_CK_DES_192_EDE3_CBC_WITH_MD5: desc = "SSL_CK_DES_192_EDE3_CBC_WITH_MD5"; break; #endif default: desc = "unknown cipher"; } return desc; } /* *---------------------------------------------------------------------- * * GenerateRandomBytes -- * * Returns the output of the random number generator. * Note the use of critical sections. This function necessarily * takes a little while to execute, so we define surrenderCtx to * point to our Surrender function, above. * * Results: * NS_OK or NS_ERROR. * * Side effects: * A random number is put into the *output variable. * *---------------------------------------------------------------------- */ static int GenerateRandomBytes(unsigned char *output, int outputLength) { int retval = NS_ERROR; int err = -1; Ns_CsEnter(&csRandom); if ( (err = (B_GenerateRandomBytes(randomObject, output, outputLength, &surrenderCtx))) != 0 ) { Ns_Log(Error, "nsssl: " "failed to generate random bytes, bsafe error %d", err); retval = NS_ERROR; } else { retval = NS_OK; } Ns_CsLeave(&csRandom); return retval; } /* *---------------------------------------------------------------------- * * NewSessionID -- * * Generate a session id using the random number generator. * Note: This actually used for both conn ids and session ids. * * Results: * NS_OK or NS_ERROR from GenerateRandomBytes. * * Side effects: * See GenerateRandomBytes. * *---------------------------------------------------------------------- */ static int NewSessionID(unsigned char *buf) { return GenerateRandomBytes(buf, SSL_SESSION_ID_LENGTH); } /* *---------------------------------------------------------------------- * * U32TOA * * Shift to unsigned character (32-bit). * * Results: * dest points to the converted value. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void U32TOA(unsigned u, unsigned char *dest) { dest[0] = (u & 0xFF000000) >> 24; dest[1] = (u & 0x00FF0000) >> 16; dest[2] = (u & 0x0000FF00) >> 8; dest[3] = u & 0x000000FF; } /* *---------------------------------------------------------------------- * * U24TOA * * Shift to unsigned character (24-bit). * * Results: * dest points to the converted value. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void U24TOA(unsigned u, unsigned char *dest) { dest[0] = (u & 0x00FF0000) >> 16; dest[1] = (u & 0x0000FF00) >> 8; dest[2] = u & 0x000000FF; } /* *---------------------------------------------------------------------- * * U24TOA * * Shift to unsigned character (16-bit). * * Results: * dest points to the converted value. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void U16TOA(unsigned u, unsigned char *dest) { dest[0] = (u & 0x0000FF00) >> 8; dest[1] = u & 0x000000FF; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/ssl.h������������������������������������������������������������������������0000644�0001750�0001750�00000016223�07271331557�015561� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ #ifndef SSL_H #define SSL_H #include "aglobal.h" #include "bsafe.h" #ifdef HAVE_SWIFT #include "bswift.h" #endif /* * SSL version information. */ #define SSL_PROTOCOL_VERSION "2" #define SSL_SERVER_VERSION 2 /* * BSAFE Algorithm chooser. */ extern B_ALGORITHM_METHOD *ALGORITHM_CHOOSER[]; extern B_ALGORITHM_METHOD *DIGEST_CHOOSER[]; /* * SSL message types. */ #define SSL_MT_ERROR 0 #define SSL_MT_CLIENT_HELLO 1 #define SSL_MT_CLIENT_MASTER_KEY 2 #define SSL_MT_CLIENT_FINISHED_V2 3 #define SSL_MT_SERVER_HELLO 4 #define SSL_MT_SERVER_VERIFY 5 #define SSL_MT_SERVER_FINISHED_V2 6 #define SSL_MT_REQUEST_CERTIFICATE 7 #define SSL_MT_CLIENT_CERTIFICATE 8 #define SSL_MT_CLIENT_DH_KEY 9 #define SSL_MT_CLIENT_SESSION_KEY 10 #define SSL_MT_CLIENT_FINISHED 11 #define SSL_MT_SERVER_FINISHED 12 /* * SSL version 2 ciphers. */ #define SSL_CK_RC4_128_WITH_MD5 0x01010080 #define SSL_CK_RC4_128_EXPORT40_WITH_MD5 0x01020080 #define SSL_CK_RC2_128_CBC_WITH_MD5 0x01030080 #define SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5 0x01040080 #define SSL_CK_IDEA_128_CBC_WITH_MD5 0x01050080 #define SSL_CK_DES_64_CBC_WITH_MD5 0x01060040 #define SSL_CK_DES_192_EDE3_CBC_WITH_MD5 0x010700C0 #define SSL_CK_NULL_WITH_MD5 0x01000000 #define SSL_CK_DES_64_CBC_WITH_SHA 0x01060140 #define SSL_CK_DES_192_EDE3_WITH_SHA 0x010701C0 #define NSEEDS 4 #define SSL_SESSION_ID_LENGTH 16 /* * SSL certificate types. */ #define SSL_CT_X509_CERTIFICATE 1 #define SSL_CT_PKCS7_CERTIFICATE 2 /* * SSL error messages. */ #define SSL_PE_NO_CIPHER 0x0001 #define SSL_PE_NO_CERTIFICATE 0x0002 #define SSL_PE_BAD_CERTIFICATE 0x0004 #define SSL_PE_UNSUPPORTED_CERTIFICATE_TYPE 0x0006 /* * SSL authentication Type Codes. */ #define SSL_AT_MD5_WITH_RSA_ENCRYPTION 0x01 /* * SSL data length limits. * Note: SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER may be set to 32767. */ #define SSL_MAX_RECORD_LENGTH_2_BYTE_HEADER 16383 #define SSL_MAX_RECORD_LENGTH_3_BYTE_HEADER 16383 #define SSL_MACSIZE 16 #define SSL_MAXRECSIZE 32767 #define SSL_MAXPADDING 8 #ifdef WIN32 #define EOLSTRING "\r\n" #else #define EOLSTRING "\n" #endif /* * SSLRecord * * The data to be encrypted/decrypted. */ typedef struct { int nRecordLength; int fIsEscape; int nPadding; unsigned char *mac; unsigned char *data; unsigned char macBuf[SSL_MACSIZE]; unsigned char input[3 + SSL_MAXRECSIZE]; unsigned char output[3 + SSL_MAXRECSIZE]; } SSLRecord; /* * SSLServer * * RSA data for cert and key exchange. */ typedef struct { B_KEY_OBJ privateKey; unsigned char *certificate; int certificateLength; } SSLServer; /* * SSLConn * * SSL connection context. */ typedef struct { SOCKET socket; int timeout; SSLServer *ctx; SSLRecord rec; unsigned nReadSequence; unsigned nWriteSequence; int fEncryptionActive; B_ALGORITHM_OBJ digester; B_ALGORITHM_OBJ encryptor; B_ALGORITHM_OBJ decryptor; unsigned char challenge[32]; int challengeLength; unsigned char connId[SSL_SESSION_ID_LENGTH]; unsigned char sessionId[SSL_SESSION_ID_LENGTH]; int cipherKind; unsigned char masterKey[1024]; int masterKeyLength; unsigned char readKeyArgData[8]; unsigned char writeKeyArgData[8]; int keyArgLength; unsigned char readKey[24]; B_KEY_OBJ readKeyObj; unsigned char writeKey[24]; B_KEY_OBJ writeKeyObj; unsigned ReadWriteKeyLength; unsigned int blockSize; unsigned int macSize; unsigned char *incomingNext; unsigned char incoming[SSL_MAXRECSIZE]; int incomingLength; unsigned char outgoing[SSL_MAXRECSIZE]; int outgoingLength; /* * The following are used for raw socket * read-ahead. */ int cnt; char *base; char buf[SSL_MAXRECSIZE]; } SSLConn; extern int NsSSLGenerateKeypair(unsigned int modulusBits, ITEM * publicExponent, B_KEY_OBJ * publicKey, B_KEY_OBJ * privateKey); extern int NsSSLInitialize(char *server, char *module); extern void * NsSSLCreateServer(char *cert, char *key); extern void NsSSLDestroyServer(void *server); extern void * NsSSLCreateConn(SOCKET socket, int timeout, void *server); extern void NsSSLDestroyConn(void *conn); extern int NsSSLSend(void *conn, void *vbuf, int towrite); extern int NsSSLRecv(void *conn, void *vbuf, int toread); extern int NsSSLFlush(void *conn); extern void * SSLCreateServer(char *cert, char *key); extern void SSLDestroyServer(void *server); extern void * SSLCreateConn(SOCKET sock, int timeout, void *server); extern void SSLDestroyConn(void *conn); extern int SSLFlush(void *conn); extern int SSLRecv(void *conn, void *vbuf, int toread); extern int SSLSend(void *conn, void *vbuf, int tosend); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/certfile-sample.pem����������������������������������������������������������0000644�0001750�0001750�00000002036�07271114471�020355� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� $Header: /cvsroot/aolserver/aolserver/nsssl/certfile-sample.pem,v 1.1 2001/04/23 21:06:01 jgdavidson Exp $ Here is a FAKE 40-bit/512-bit export-grade SSL certificate: -----BEGIN CERTIFICATE----- MIICYDCCAcmgAwIBAgIEAIN44DANBgkqhkiG9w0BAQQFADCBhzELMAkGA1UEBhMC WkExIjAgBgNVBAgTGUZPUiBURVNUSU5HIFBVUlBPU0VTIE9OTFkxHTAbBgNVBAoT FFRoYXd0ZSBDZXJ0aWZpY2F0aW9uMRcwFQYDVQQLEw5URVNUIFRFU1QgVEVTVDEc MBoGA1UEAxMTVGhhd3RlIFRlc3QgQ0EgUm9vdDAeFw0wMDA5MDYwMTU3NDFaFw0w MTA5MDYwMTU3NDFaMH4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJWQTESMBAGA1UE BxMJU29tZXdoZXJlMRYwFAYDVQQKEw1Ob3doZXJlLCBJbmMuMRwwGgYDVQQLExNU ZWNobm9sb2d5IERpdmlzaW9uMRgwFgYDVQQDEw93d3cubm93aGVyZS5jb20wXDAN BgkqhkiG9w0BAQEFAANLADBIAkEA6vMmAZ4Bej7gt9PVFedlwkwvz6Axds+V1Xr4 dwKG6pUFLB5lQZc9secjO1mHG9VcyLYFX+ipi4ZVT7ULiiCzHQIDAQABoyUwIzAT BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBBAUA A4GBAGQLP+5gxbWSmMUMKwuedi+3ZxLZsqfML7pacXyvryK8PR1JF4PWZefZdq00 4QUqVFFCVKUsqZcyHWohPpQ+ESWfoWipM2xpL/Xi9SETQjHKcFXn+QJGZw2j/EbP lydlseC9wrVmquIFZqO+cGzZHGiMBvef0Fy7CydFb8VuloNR -----END CERTIFICATE----- ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/nsssl.html�������������������������������������������������������������������0000644�0001750�0001750�00000022132�07271114471�016625� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nsssl</title> </head> <body bgcolor="#ffffff"> <h2>nsssl -- Socket (HTTPS) Driver Module</h2> <pre>$Header: /cvsroot/aolserver/aolserver/nsssl/nsssl.html,v 1.1 2001/04/23 21:06:01 jgdavidson Exp $ </pre> <br> <a href="#Theory_of_Operation">Theory of Operation</a><br> <a href="#Known_Issues">Known Issues</a><br> <a href="#Sample_Configuration">Sample Configuration</a><br> <br> <br> <h3><a name="Theory_of_Operation"></a>Theory of Operation</h3> <br> <pre> The nsssl Socket Driver ----------------------- EXPORT NOTICE This source code is subject to the U.S. Export Administration Regulations and other U.S. law, and may not be exported or re-exported to certain countries (currently Afghanistan (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, Serbia (except Kosovo), Sudan and Syria) or to persons or entities prohibited from receiving U.S. exports (including Denied Parties, Specially Designated Nationals, and entities on the Bureau of Export Administration Entity List). The nsssl driver supports SSL v2 according to the Netscape SSL documentation, which you can find at http://developer.netscape.com/. It was developed using the BSAFE libraries from RSA Data Security at http://www.rsasecurity.com/. Some seldom-used SSL v2 features that were omitted include client certificates and the SHA-1 message digest algorithm. The reasoning behind this is that users browsing the web very seldom have client certificates, let alone know what they are intended for. Likewise, in virtually all cases, MD5 is the message digest requested by all browsers and is fully supported. In any event, we always welcome contributions to add these features to nsssl. We are interested in supporting SSL v3 and welcome your contributions to help us get there. An alternative to nsssl is nsopenssl at http://aolserver.com/modules/. The nsopenssl module supports SSL v3 using the OpenSSL library and the AOLserver communications driver API. Compiling and Installing ------------------------ If you have BSAFE, simply type "gmake" in the root directory of the AOLserver source distribution. If you want 128-bit/1024-bit (domestic) security, type "gmake DOMESTIC=1". If you have a BSAFE version newer than BSAFE 3, add "BSAFE_VERSION=BSAFEx" where "x" is "4" or "5". You may also type "gmake SSL=1" in the nssock directory if you only want to build nsssl. The BSAFE encryption toolkit is available from RSA Data Security at http://www.rsasecurity.com/. RSA Alternatives ---------------- RSA Data Security, at http://www.rsasecurity.com/, holds the patents and intellectual rights to the most important algorithms used by SSL: RSA and RC4. As a direct result of this the use of anything but RSA products to implement these algorithms is illegal in the United States of America and other countries with which the USA has intellectual property treaties. The patent on the RSA public-key algorithm expires in the Fall of 2000, but RSA still retains rights to RC4 and possibly RC5, RC2, and MD5. In particular, the source code implementation of the RC4 cipher used by OpenSSL/SSLeay is, unfortunately, contraband. While it is theoretically possible to implement SSL v2 using unencumbered algorithms the performance and security are both too low. Therefore, we use RSA BSAFE libraries to implement SSL v2. This is not intended to be interpreted as an endorsement of any product or service. There is an alternative module, nsopenssl, that uses the OpenSSL library to implement SSL. This module is available at http://aolserver.com/modules/ but is not supported in any way by the AOLserver Team at AOL. Key Pair and Certificate Request Generation ------------------------------------------- SSL key pair and certificate request generation is handled by a Tcl script that you source into a stand-alone AOLserver process. To use, change to your AOLserver's root directory and edit the certificate information at the top of the "./modules/nsssl/keygen.tcl" file. Once you are satisfied with your information, create your key pair and certificate request by typing: ./bin/nsd -ft ./modules/nsssl/keygen.tcl Your directory will now include two files, "keyfile.pem" and "certreq.pem." Put the "keyfile.pem" file in a safe place for now. Send the "certreq.pem" file to your favorite Certificate Authority. Some Certificate Authorities are http://www.thawte.com/ and http://www.verisign.com/. This is not intended to be interpreted as an endorsement of any product or service. What To Do Next --------------- After a while, you will receive a signed certificate from your Certificate Authority in PEM (Privacy-Enhanced Mail) format. Save the body of the message (and just the body) in a file called "certfile.pem" and place it and the "keyfile.pem" file into the "./servers/server1/modules/nsssl/" directory. If you are using the domestic version of nsssl, edit the "sslmodule" variable in your nsd.tcl file to read "nsssle.so". Check the included nsd.tcl distributed with this version of AOLserver to see the most-current options. That's it! You're all set and ready to use the SSL v2 protocol to provide secure access to your web site! Security Notes -------------- The "keyfile.pem" is a very sensitive document! Do not let it out of your hands, do not send it out over the network, and don't delete it. It contains your server's private key and if it's lost then you must cancel your certificate, regenerate the key pair, and get it signed all over again. You should put this in the "./servers/server1/modules/nsssl/" directory. The "certreq.pem" file generated by keygen.tcl should be deleted once you receive your signed certificate, though it's harmless to keep around. When you need to renew your certificate most Certificate Authorities should not need it again. The "certfile.pem" file that you will receive from the certificate authority is very valuable, though it can be handled in a less-secure fashion since it's presented to the browsers that visit your web site. You put this in the "./servers/server1/modules/nsssl/" directory. Implementation Notes -------------------- nsssl vs. nssock ----------------- The nsssl and nssock modules are nearly identical, save for the extra encryption steps used in SSL. This release of AOLserver has merged nsssl and nssock together. The SSL=1 variable determines whether nssock or nsssl is built. The advantage is that both nssock and nsssl function identically as far as the network is concerned. This also means that nssock and nsssl will continue to share important new features such as connection keepalive in both HTTP and HTTPS protocols. Running AOLserver in Stand-Alone Mode ------------------------------------- What's this about running AOLserver just to source a Tcl script? This was an interesting exercise in using Tcl's extensible C API to load dynamic objects. The old nsssl module for AOLserver 2.x used the old web-based admin interface with lots of Tcl code bound to URL's with ns_register_proc. Partly because of this design, nsssl's key, certificate, and x.509 handling is a mixture of C and Tcl code. Since the code as a whole is functional, duplicating the same nsssl code into an external executable seemed silly. There are three entry points in nsssl: Ns_ModuleInit -- for AOLserver's dynamic loader Nsssle_Init -- for Tcl's dynamic loader (export version) Nsssl_Init -- for Tcl's dynamic loader (domestic version) o When AOLserver starts up as a normal web server, it invokes Ns_ModuleInit which starts up the socket driver and initializes SSL. o When AOLserver starts up with ./modules/nsssl/keygen.tcl, the Tcl "load" command this file asks the Tcl interpreter to load nsssl.so (or nsssle.so) and invoke Nsssl_Init (or Nsssle_Init) which registers special key/cert generation Tcl commands and initializes SSL, but doesn't start up the socket library. When the keygen.tcl script is finished, it terminates the server and returns. In this fashion way we can use the same code for serving pages as well as generating the key pair and certificate request without having another cumbersome binary executable hanging around. Now that nsssl and nssock are one, maintenance of this code can now be done in one place. </pre> <br> <h3><a name="Known_Issues"></a>Known Issues</h3> Only SSL v2 is supported.<br> <br> Client-side certificates are not supported.<br> <br> SHA-1 message digests are not support (only MD5).<br> <br> The key- and certificate-handling code in x509.c and keygen.tcl needs to&nbsp; go away.&nbsp; It is implemented better in BSAFE and OpenSSL.<br> <br> Requires the proprietary RSA BSAFE encryption library from <a href="http://www.rsasecurity.com/">http://www.rsasecurity.com/</a>.&nbsp; We should provide the option of using other libraries like <a href="http://www.openssl.org/">OpenSSL</a>.<br> <br> There are reports that the keygen.tcl file does not work correctly on Win32.<br> <br> <h3><a name="Sample_Configuration"></a>Sample Configuration</h3> Please see the <a href="../doc/config.txt">Configuration File Reference</a>.<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/keygen.tcl�������������������������������������������������������������������0000644�0001750�0001750�00000031107�07430702240�016557� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # EXPORT NOTICE # # This source code is subject to the U.S. Export Administration # Regulations and other U.S. law, and may not be exported or # re-exported to certain countries (currently Afghanistan # (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, # Serbia (except Kosovo), Sudan and Syria) or to persons or entities # prohibited from receiving U.S. exports (including Denied Parties, # Specially Designated Nationals, and entities on the Bureau of # Export Administration Entity List). # # # $Header: /cvsroot/aolserver/aolserver/nsssl/keygen.tcl,v 1.2 2002/02/08 07:56:16 hobbs Exp $ # # # keygen.tcl -- All-in-one SSL Key and Certificate Request generator # # Enter your data in the appropriate fields below # and type: # ./bin/nsd -ft keygen.tcl # # You'll get a private key, "keyfile.pem", and # a certificate request, "certreq.pem", to use with # this key to send to a certificate authority. # # "keyfile.pem" is sensitive data! Keep it safe! # "certreq.pem" should be sent to your certificate authority. # # After running this program copy these files somewhere else so # they do not get over-written if you run this again. # # # RSA encryption level (bits) # # The lowest level is 256 bits, and the highest depends on the # version of nsssl you're using. To comply with export restrictions, # nsssle.so is limited to 512 bits. The levels are strictly enforced # in the nsssl.so module itself. You'll need to rebuild nsssl with # "gmake SSL=1 SSL_DOMESTIC=1" to get the 128-bit/1024-bit domestic # version. # set module "./bin/nsssle.so" ;# 40-bit/512-bit export version. #set module "./bin/nsssl.so" ;# 128-bit/1024-bit domestic version. set modulus 512 ;# nsssle.so is limited to 512 bits #set modulus 1024 ;# nsssl.so goes up to 1024 bits # # Key and Certificate Request file names # set keyfile "./keyfile.pem" ;# Private key -- should be kept safe!! set certreqfile "./certreq.pem" ;# Certificate -- you send this to your CA # # x.509 certificate information # # This is entirely up to you. # set commonname {www.nowhere.com} set email {nobody@nowhere.com} set phone {703-555-1212} set org {Nowhere, Inc.} set orgunit {Technology Division} set locality {Somewhere} set state {VA} set country {US} ############################################################ # # You should not need to modify anything below this line. # # Initialize nsssl. ns_log notice "keygen.tcl: initializing nsssl." load $module proc nsssl_keygen { \ modulus \ commonname email phone \ org orgunit \ locality state country \ {keyfilename {./keyfile.pem}} \ {certreqfile {./certreq.pem}} } { ns_log notice "keygen.tcl: generating ssl private key..." # Generate private key. set privatekey_octs [ssl_rsa_key generate $modulus] # Convert to PEM format. set privatekey [osi_pem put "RSA PRIVATE KEY" $privatekey_octs] set privatekey [osi_octet_string fromstring $privatekey] # Write to file. osi_octet_string write $keyfilename $privatekey ns_log notice "keygen.tcl: done generating ssl private key." ns_log notice "keygen.tcl: generating certificate request..." set publickey [ssl_rsa_key publickey $privatekey_octs] # Build the request string. set reqinfo "sequence \{ integer 00 sequence \{ set-of \{ [osi_attribute put countryName $country] [osi_attribute put stateOrProvinceName $state]\n" if { $locality != "" } { append reqinfo "[osi_attribute put localityName $locality]\n" } append reqinfo "[osi_attribute put organizationName $org] [osi_attribute put organizationalUnitName $orgunit] [osi_attribute put commonName $commonname] \} \} [osi_der_decode -octets $publickey] \}" if {[ns_info winnt]} { set eol "\r\n" } else { set eol "\n" } set clearinfo \ "Certificate Request generated by AOLserver [ns_info version]:$eol" append clearinfo "\tCommon Name: $commonname$eol" append clearinfo "\tOrganizational Unit: $orgunit$eol" append clearinfo "\tOrganizational Name: $org$eol" if { $locality != "" } { append clearinfo "\tLocality Name: $locality$eol" } append clearinfo "\tState Or Province: $state$eol" append clearinfo "\tCountry Name: $country$eol" set octs [osi_der_encode octets $reqinfo] set req [osi_sign_data $octs $privatekey_octs] set pem [osi_pem put "NEW CERTIFICATE REQUEST" $req] set pem "Webmaster: $email${eol}Phone: $phone${eol}$clearinfo$eol$pem" set octs [osi_octet_string fromstring $pem] if {[catch { osi_octet_string write $certreqfile $octs } info]} { ns_log Error \ "keygen.tcl: unable to write certificate request to $certreqfile." } } # # Various tools for Open Systems Interconnection # proc ctoken {pstr separators} { upvar $pstr str set i 0 set l [string length $str] while { $i < $l } { set c [string index $str $i] if {[string first $c $separators] >= 0} { if { $i == 0 } { return "" } set c [string range $str 0 [expr {$i-1}]] set str [string range $str $i end] return $c } incr i } set c $str set str "" return $c } proc strpbrk { str delim { pos 0 } } { if { $pos > 0 } { set str [string range $str $pos end] } set i 0 set l [string length $str] set j -1 while { $i < $l } { set c [string index $str $i] set j [string first $c $delim] if { $j != -1 } { break } incr i } if { $j != -1 } { return [expr {$i+$pos}] } else { return -1 } } proc osi_asn1_to_list str { set l {} set c 0 set str [string trimleft $str] while {[string length $str] > 0} { set tag [string trim [ctoken str " \n\r\t"]] set str [string trimleft $str] if { [string match NULL $tag] || [string match ":*:" $tag] } { lappend l [list $tag] } else { set value [string trim [ctoken str " \n\r\t"]] if {[string match $value "\{"]} { set i 0 set p 0 while {[set p [strpbrk $str "\{\}" $p]] != -1 } { if {[string index $str $p] == "\}"} { if { $i == 0 } { break } set i [expr {$i-1}] } else { incr i } incr p } if { $p == -1 } { return -code error "unbalanced braces." } set value [osi_asn1_to_list \ [string range $str 0 [expr {$p-1}]]] set str [string range $str [expr {$p+1}] end] } elseif {[string match $value "\("]} { set i [string first "\)" $str] if { $i == -1 } { return -code error "unbalanced parenthesis." } set value "\([string range $str 0 $i]" incr i if {[string length $str] > $i} { set str [string range $str [expr {$i+1}] end] } else { set str "" } } lappend l [list $tag $value] } incr c set str [string trim $str] } if { $c > 1 } { return $l } else { return [lindex $l 0] } } proc osi_pem { command sectionname arg { key 0 } } { set bboundary "-----Begin ${sectionname}-----" set eboundary "-----End ${sectionname}-----" set bboundaryU "-----BEGIN ${sectionname}-----" set eboundaryU "-----END ${sectionname}-----" if { $command == "get" } { set i [string first $bboundary $arg] if { $i == -1 } { set i [string first $bboundaryU $arg] if { $i == -1 } { return -code error "Couldn't find section." } } set i [expr {$i+[string length $bboundary]}] set j [expr {[string first $eboundary $arg]-1}] if { $j <= $i } { set j [expr {[string first $eboundaryU $arg]-1}] if { $j <= $i } { return -code error "Couldn't find section." } } set arg [string range $arg $i $j] set i [string first "DEK-Info:" $arg] if { $i != -1 } { return -code error "Encryption not implemented yet." } return [osi_octet_string frombase64 $arg] } if { $command == "put" } { set content [osi_octet_string tobase64 $arg] if {[ns_info winnt]} { set eol "\r\n" } else { set eol "\n" } if { $key != "0" } { return -code error "Encryption not implemented yet." } return "${bboundaryU}${eol}${content}${eboundaryU}${eol}" } return -code error "usage: osi_pem { get | put } arg" } proc osi_attribute { command arg1 { arg2 0 } } { if { $command == "putid" && $arg2 != "0" } { if {[osi_der_encode IsPrintableString $arg2]} { set stype PrintableString } else { set stype T61String } return "SEQUENCE \{ OBJECT-IDENTIFIER \( 2 5 4 $arg1 \) $stype \"$arg2\" \}" } elseif { $command == "getid" && $arg2 == "0" } { set i [string first "\)" $arg1] if { $i <= 0 } { return -code error "Could not find OBJECT IDENTIFIER." } set arg1 [string trimright [string range $arg1 0 [expr {$i-1}]]] set i [string last " " $arg1] if { $i == -1 } { return -code error "Confused by input." } return [string range $arg1 [expr {$i+1}] end] } elseif { $command == "put" && $arg2 != "0" } { if { $arg1 == "commonName" } { set i 3 } elseif { $arg1 == "countryName" } { set i 6 } elseif { $arg1 == "localityName" } { set i 7 } elseif { $arg1 == "stateOrProvinceName" } { set i 8 } elseif { $arg1 == "organizationName" } { set i 10 } elseif { $arg1 == "organizationalUnitName" } { set i 11 } else { return -code error "unknown attribute type $arg1." } return [osi_attribute putid $i $arg2] } else { return -code error "usage: osi_attribute: { getid | put | putid } $arg" } } proc osi_algorithm { command arg1 { arg2 0 } } { if { $command == "putid" && $arg2 != "0" } { return "SEQUENCE \{ OBJECT-IDENTIFIER \( $arg1 \) $arg2 \}" } elseif { $command == "put" && $arg2 == "0" } { set p "NULL" if { $arg1 == "md2withRSAEncryption" } { set i "1 2 840 113549 1 1 2" } elseif { $arg1 == "md5withRSAEncryption" } { set i "1 2 840 113549 1 1 4" } elseif { $arg1 == "rc4" } { set i "1 2 840 113549 3 4" } elseif { $arg1 == "rsaEncryption" } { set i "1 2 840 113549 1 1 1" } else { return -code error "unknown algorithm type $arg1." } return [osi_algorithm putid $i $p] } else { return -code error "usage: osi_algorithm: { put $arg \ | putid $id $arg }" } } proc osi_sign_data { data privatekey } { set sig [ssl_signature sign $data $privatekey] set a "sequence \{ INSERT-$data [osi_algorithm put md5withRSAEncryption] $sig \}" return [osi_der_encode octets $a] } # # Run the stuff the user wanted. # nsssl_keygen \ $modulus \ $commonname $email $phone \ $org $orgunit \ $locality $state $country \ $keyfile $certreqfile # # Say goodbye. # ns_log notice \ "keygen.tcl: send the '$certreqfile' file to your certificate authority." ns_log notice \ "keygen.tcl: WARNING! The '$keyfile' file is sensitive! Keep it safe!" # # Terminate the nsd process. # ns_log notice "keygen.tcl: completed. shutting down." exit ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/t_stdlib.c�������������������������������������������������������������������0000644�0001750�0001750�00000014030�07271114471�016543� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ /* * t_stdlib.c -- * * AOLserver replacements for Standard C library functions used by * BSAFE. * * The original copyright notice is retained. * */ static const char *RCSID = "@(#): $Header: /cvsroot/aolserver/aolserver/nsssl/t_stdlib.c,v 1.1 2001/04/23 21:06:01 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; /* Copyright (C) RSA Data Security, Inc. created 1992. This file is used to demonstrate how to interface to an RSA Data Security, Inc. licensed development product. You have a royalty-free right to use, modify, reproduce and distribute this demonstration file (including any modified version), provided that you agree that RSA Data Security, Inc. has no warranty, implied or otherwise, or liability for this demonstration file or any modified version. */ #include "ns.h" #if defined (BSAFE4) || defined (BSAFE5) /* * BSAFE 4/5 headers */ #include "aglobal.h" #include "bsafe.h" #else /* * BSAFE 3 headers */ #include "global.h" #include "bsafe2.h" #endif /* If the standard C library comes with a memmove() that correctly handles overlapping buffers, MEMMOVE_PRESENT should be defined as 1, else 0. The following defines MEMMOVE_PRESENT as 1 if it has not already been defined as 0 with C compiler flags. */ #ifndef MEMMOVE_PRESENT #define MEMMOVE_PRESENT 1 #endif #if defined (BSAFE4) || defined (BSAFE5) void CALL_CONV T_memset (p, c, count) POINTER p; int c; unsigned int count; { if (count != 0) memset (p, c, count); } void CALL_CONV T_memcpy (d, s, count) POINTER d, s; unsigned int count; { if (count != 0) memcpy (d, s, count); } void CALL_CONV T_memmove (d, s, count) POINTER d, s; unsigned int count; { #if MEMMOVE_PRESENT if (count != 0) memmove (d, s, count); #else unsigned int i; if ((char *)d == (char *)s) return; else if ((char *)d > (char *)s) { for (i = count; i > 0; i--) ((char *)d)[i-1] = ((char *)s)[i-1]; } else { for (i = 0; i < count; i++) ((char *)d)[i] = ((char *)s)[i]; } #endif } int CALL_CONV T_memcmp (s1, s2, count) POINTER s1, s2; unsigned int count; { if (count == 0) return (0); else return (memcmp (s1, s2, count)); } POINTER CALL_CONV T_malloc (size) unsigned int size; { return ((POINTER)ns_malloc (size == 0 ? 1 : size)); } POINTER CALL_CONV T_realloc (p, size) POINTER p; unsigned int size; { POINTER result; if (p == NULL_PTR) return (T_malloc (size)); if ((result = (POINTER)ns_realloc (p, size == 0 ? 1 : size)) == NULL_PTR) ns_free (p); return (result); } void CALL_CONV T_free (p) POINTER p; { if (p != NULL_PTR) ns_free (p); } unsigned int CALL_CONV T_strlen(p) char *p; { return strlen(p); } void CALL_CONV T_strcpy(dest, src) char *dest; char *src; { strcpy(dest, src); } int CALL_CONV T_strcmp (a, b) char *a, *b; { return (strcmp (a, b)); } #else /* * BSAFE 3.0 */ void T_CALL T_memset (p, c, count) POINTER p; int c; unsigned int count; { if (count != 0) memset (p, c, count); } void T_CALL T_memcpy (d, s, count) POINTER d, s; unsigned int count; { if (count != 0) memcpy (d, s, count); } void T_CALL T_memmove (d, s, count) POINTER d, s; unsigned int count; { #if MEMMOVE_PRESENT if (count != 0) memmove (d, s, count); #else unsigned int i; if ((char *)d == (char *)s) return; else if ((char *)d > (char *)s) { for (i = count; i > 0; i--) ((char *)d)[i-1] = ((char *)s)[i-1]; } else { for (i = 0; i < count; i++) ((char *)d)[i] = ((char *)s)[i]; } #endif } int T_CALL T_memcmp (s1, s2, count) POINTER s1, s2; unsigned int count; { if (count == 0) return (0); else return (memcmp (s1, s2, count)); } POINTER T_CALL T_malloc (size) unsigned int size; { return ((POINTER)ns_malloc (size == 0 ? 1 : size)); } POINTER T_CALL T_realloc (p, size) POINTER p; unsigned int size; { POINTER result; if (p == NULL_PTR) return (T_malloc (size)); if ((result = (POINTER)ns_realloc (p, size == 0 ? 1 : size)) == NULL_PTR) ns_free (p); return (result); } void T_CALL T_free (p) POINTER p; { if (p != NULL_PTR) ns_free (p); } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/x509.c�����������������������������������������������������������������������0000644�0001750�0001750�00000102431�07271353536�015456� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ /* * x509.c -- * * x.509 Key and Certificate handling routines for SSL v2. * * BSAFE provides all these functions even though they are * re-implemented here. Eventually, this file and its * functions will disappear. * */ static const char *RCSID = "@(#): $Header: /cvsroot/aolserver/aolserver/nsssl/x509.c,v 1.2 2001/04/24 19:43:26 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #include "ssl.h" #include "ssltcl.h" #include "x509.h" #include <ctype.h> static int nsX509Initialized = NS_FALSE; static B_ALGORITHM_OBJ asciiDecoder = (B_ALGORITHM_OBJ) NULL_PTR; static Ns_Cs nsAsciiDecoderCS; /* * Private function prototypes. */ static void X509Cleanup(void *ignore); static int X509Initialize(void); /* *---------------------------------------------------------------------- * * GetPrivateKey -- * * Get a BER-encoded PKCS rsa private key from a PEM format file. * * Results: * NS_OK or NS_ERROR. * * Side effects: * Memory is allocated to hold the object in privateKey. * *---------------------------------------------------------------------- */ int GetPrivateKey(B_KEY_OBJ * privateKey, char *filename) { unsigned char *key; int status; int err; status = NS_ERROR; key = NULL; *privateKey = (B_KEY_OBJ) NULL_PTR; err = 0; do { int length; ITEM info; key = GetBerFromPEM(filename, SECTION_RSA_PRIVATE_KEY, &length); if (key == NULL) { break; } err = B_CreateKeyObject(privateKey); if (err != 0) { break; } info.data = key; info.len = length; err = B_SetKeyInfo(*privateKey, KI_PKCS_RSAPrivateBER, (unsigned char *) &info); if (err != 0) { break; } status = NS_OK; } while (0); if (status != NS_OK) { B_DestroyKeyObject(privateKey); *privateKey = (B_KEY_OBJ) NULL_PTR; } if (key != NULL) { ns_free(key); } if (err != 0) { Ns_Log(Error, "nsssl: failed to get private key, bsafe error %d", err); } return status; } /* *---------------------------------------------------------------------- * * GetCertificate -- * * Get a BER encoded X509 certificate from a PEM format file. * * Results: * NS_OK or NS_ERROR. * * Side effects: * See function "GetBerFromPEM." * *---------------------------------------------------------------------- */ int GetCertificate(unsigned char **pCertificate, int *length, char *filename) { *pCertificate = GetBerFromPEM(filename, SECTION_X509_CERTIFICATE, length); if (*pCertificate == NULL) { *pCertificate = GetBerFromPEM(filename, SECTION_CERTIFICATE, length); } return (*pCertificate == NULL) ? NS_ERROR : NS_OK; } /* * Key and Certificate Generation Functions. */ /* *---------------------------------------------------------------------- * * PrivateKeyToPEM -- * * Generate a PEM format BER encoded version of a private key. * * Results: * * * Side effects: * * *---------------------------------------------------------------------- */ char * PrivateKeyToPEM(B_KEY_OBJ privateKey) { Ns_DString ds; char *berKey; int err; Ns_DStringInit(&ds); berKey = NULL; err = 0; do { ITEM *info; B_ALGORITHM_OBJ asciiEncoder = (B_ALGORITHM_OBJ) NULL_PTR; unsigned int updateLength; unsigned int bufLength; unsigned int length; err = B_CreateAlgorithmObject(&asciiEncoder); if (err != 0) { break; } err = B_SetAlgorithmInfo(asciiEncoder, AI_RFC1113Recode, NULL_PTR); if (err != 0) { break; } err = B_EncodeInit(asciiEncoder); if (err != 0) { break; } err = B_GetKeyInfo((POINTER *) & info, privateKey, KI_PKCS_RSAPrivateBER); if (err != 0) { break; } bufLength = info->len * 2; berKey = ns_malloc(bufLength); err = B_EncodeUpdate(asciiEncoder, (unsigned char *) berKey, &updateLength, bufLength, info->data, info->len); if (err != 0) { break; } length = updateLength; err = B_EncodeFinal(asciiEncoder, (unsigned char *) (berKey + updateLength), &updateLength, bufLength - updateLength); if (err != 0) { break; } length += updateLength; berKey[length] = '\0'; Ns_DStringPrintf(&ds, "-----BEGIN %s-----" EOLSTRING, SECTION_RSA_PRIVATE_KEY); Ns_DStringAppend(&ds, berKey); Ns_DStringPrintf(&ds, EOLSTRING "-----END %s-----" EOLSTRING, SECTION_RSA_PRIVATE_KEY); ns_free(berKey); berKey = Ns_DStringExport(&ds); } while (0); Ns_DStringFree(&ds); if (err != 0) { Ns_Log(Error, "nsssl: failed to convert private key to PEM, " "bsafe error %d", err); if (berKey != NULL) { ns_free(berKey); berKey = NULL; } } return berKey; } /* *---------------------------------------------------------------------- * * GetBerFromPEM -- * * Grabs a BER (Basic Encoding Rules) object from a PEM (Privacy * Enchanced Mail) format file. Returns NULL on error. * * Results: * Pointer to the BER object. * * Side effects: * Memory is allocated to hold the object. * *---------------------------------------------------------------------- */ unsigned char * GetBerFromPEM(char *filename, char *section, int *length) { FILE *fp; unsigned char *chunk; int err = 0; if (X509Initialize() != NS_OK) { return NULL; } Ns_CsEnter(&nsAsciiDecoderCS); chunk = NULL; do { char buf[100]; Ns_DString ds; int posBegin, posEnd; int i; unsigned int updateLength; fp = fopen(filename, "rb"); if (fp == NULL) { Ns_Log(Error, "nsssl: unable to open pem file '%s'", filename); break; } posBegin = -1; Ns_DStringInit(&ds); Ns_DStringPrintf(&ds, "-----BEGIN %s-----", section); while (fgets(buf, sizeof(buf), fp) != NULL) { if ((*buf == '-') && (strncasecmp(buf, ds.string, ds.length) == 0)) { posBegin = ftell(fp); break; } } Ns_DStringFree(&ds); if (posBegin == -1) { if (strstr(section, "CERTIFICATE") == NULL) { Ns_Log(Error, "nsssl: error parsing pem file '%s': " "'-----BEGIN %s-----' not found", filename, section); } break; } posEnd = -1; Ns_DStringPrintf(&ds, "-----END %s-----", section); while (fgets(buf, sizeof(buf), fp) != NULL) { i = ftell(fp); if ((*buf == '-') && (strncasecmp(buf, ds.string, ds.length) == 0)) { posEnd = i; break; } } Ns_DStringFree(&ds); i = posEnd - posBegin; if ((posEnd == -1) || (i == 0)) { Ns_Log(Error, "nsssl: error parsing pem file '%s'", filename); break; } if (fseek(fp, posBegin, SEEK_SET) == -1) { Ns_Log(Error, "nsssl: failed to rewind pem file '%s'", filename); break; } /* * A little wasteful since it will actually be .75i, but short * term. */ chunk = ns_malloc(i); if (chunk == NULL) { break; } *length = 0; while ((fgets(buf, sizeof(buf), fp) != NULL) && (ftell(fp) < posEnd)) { char *p = Ns_StrTrim(buf); if (*p != '\0') { err = B_DecodeUpdate(asciiDecoder, chunk + *length, &updateLength, i - *length, (unsigned char *) p, strlen(p)); if (err != 0) { ns_free(chunk); chunk = NULL; break; } *length += updateLength; } } if (chunk == NULL) { break; } err = B_DecodeFinal(asciiDecoder, chunk + *length, &updateLength, i - *length); if (err != 0) { ns_free(chunk); chunk = NULL; break; } *length += updateLength; } while (0); Ns_CsLeave(&nsAsciiDecoderCS); if (fp != NULL) { fclose(fp); } if (err != 0) { Ns_Log(Error, "nsssl: failed decoding ber, bsafe error %d", err); } return (unsigned char *) chunk; } /* *---------------------------------------------------------------------- * * AddLengthCount -- * * Big Endian Length counts for DER (Distinguished Encoding * Rules) objects. * * Results: * * * Side effects: * * *---------------------------------------------------------------------- */ void AddLengthCount(Ns_DString *ds, unsigned int length) { unsigned char c; if (length <= 127) { /* * Short length. */ c = length; Ns_DStringNAppend(ds, (char *) &c, 1); } else { /* * Long length. */ unsigned char buf[126]; int i, l; l = (int) floor(log((double) length) / log(256.0)); /* * Note: ceil fails if length == 1 */ l++; c = ((unsigned char) l) | 0x80; Ns_DStringNAppend(ds, (char *) &c, 1); i = l; while (i) { buf[--i] = length & 0xff; length >>= 8; } Ns_DStringNAppend(ds, (char *) buf, l); } } /* *---------------------------------------------------------------------- * * GetLengthCount -- * * * * Results: * * * Side effects: * * *---------------------------------------------------------------------- */ int GetLengthCount(unsigned char *der, unsigned int *length) { unsigned int len; unsigned char *p; p = der; if (*p & 0x80) { /* * Long-form. */ int i; len = 0; for (i = *p & 0x7f; i; i--) { len <<= 8; len |= *(++p); } p++; } else { /* * Short-form. */ len = *p & 0x7f; p++; } *length = len; return p - der; } /* *---------------------------------------------------------------------- * * SetOf -- * * Determines where der is a SET OF by checking that every item * is a SET. * * Results: * NS_TRUE or NS_FALSE. * * Side effects: * None. * *---------------------------------------------------------------------- */ int SetOf(unsigned char *der, int length) { while (length > 0) { if (*der == 0x31) { /* constructed SET */ unsigned int len; int l; der++; length--; l = GetLengthCount(der, &len); der += l + len; length -= l + len; } else { break; } } return length == 0 ? NS_TRUE : NS_FALSE; } /* *---------------------------------------------------------------------- * * DecodeSetOf -- * * Decodes a SET OF by looking into each SET element and decoding * its content. * * Results: * NS_OK or NS_ERROR. * * Side effects: * None. * *---------------------------------------------------------------------- */ int DecodeSetOf(Ns_DString *ds, unsigned char *der, int length, int indent) { while (length > 0) { if (*der == 0x31) { /* * Constructed SET. */ unsigned int len; int l; der++; length--; l = GetLengthCount(der, &len); der += l; length -= l; if (DERDecode(ds, der, len, indent) != NS_OK) { break; } der += len; length -= len; } else { break; } } return length == 0 ? NS_OK : NS_ERROR; } /* *---------------------------------------------------------------------- * * RecodeAsSetOf -- * * Sorts the items in the der in dsSrc, then wraps them in SETs * and returns them in dsDest (not for STRICT_DER_RULES). * * Results: * * * Side effects: * * *---------------------------------------------------------------------- */ void RecodeAsSetOf(Ns_DString *dsSrc, Ns_DString *dsDest) { unsigned char *der; unsigned int length; der = (unsigned char *) dsSrc->string; length = dsSrc->length; while (length > 0) { unsigned int len; unsigned char *p; unsigned char c; int l; p = der; if ((*der & 0x1f) ^ 0x1f) { /* * Low-tag-number form. */ der++; } else { /* * High-tag-number form. */ do { der++; } while (*der & 0x80); der++; } l = GetLengthCount(der, &len) + (der - p); len += l; der = p + len; length -= len; c = 0x31; /* constructed SET */ Ns_DStringNAppend(dsDest, (char *) &c, 1); AddLengthCount(dsDest, len); Ns_DStringNAppend(dsDest, (char *) p, (int) len); } } /* *---------------------------------------------------------------------- * * DERDecode -- * * Decode a der object. * * Results: * NS_OK or NS_ERROR. * * Side effects: * This is a recursive function. * *---------------------------------------------------------------------- */ int DERDecode(Ns_DString *ds, unsigned char *der, int length, int indent) { while (length > 0) { unsigned char class; char *name; unsigned int tag; unsigned int len; int fConstructed; int i; class = ((unsigned)(*der & 0xc0)) >> 6; fConstructed = *der & 0x20; if ((*der & 0x1f) ^ 0x1f) { /* * Low-tag-number form. */ tag = *der & 0x1f; der++; length--; } else { /* * High-tag-number form. */ tag = 0; do { tag <<= 7; tag |= *(++der) & 0x7f; length--; } while (*der & 0x80); der++; length--; } i = GetLengthCount(der, &len); der += i; length -= i; if (class == 0) { /* * Universal class. */ switch (tag) { case 2: name = "INTEGER"; break; case 3: name = "BIT-STRING"; break; case 4: name = "OCTET-STRING"; break; case 5: name = "NULL"; break; case 6: name = "OBJECT-IDENTIFIER"; break; case 16: name = "SEQUENCE"; break; case 17: name = "SET"; break; case 19: name = "PrintableString"; break; case 20: name = "T61String"; break; case 22: name = "IA5String"; break; case 23: name = "UTCTime"; break; default: name = NULL; } if (name == NULL) { Ns_Log(Debug, "nsssl: unknown tag type '%u'", tag); break; } } for (i = 0; i < indent; i++) { Ns_DStringAppend(ds, " "); } if (len > 0) { if (class == 0) { Ns_DStringPrintf(ds, "%s ", name); } else { Ns_DStringPrintf(ds, ":%1x%04x ", class, tag); } if (fConstructed) { Ns_DStringAppend(ds, "{" EOLSTRING); if (!SetOf(der, len)) { if (DERDecode(ds, der, len, indent + 1) != NS_OK) { break; } } else { for (i = 0; i <= indent; i++) { Ns_DStringAppend(ds, " "); } Ns_DStringAppend(ds, "SET-OF {" EOLSTRING); if (DecodeSetOf(ds, der, len, indent + 2) != NS_OK) { break; } for (i = 0; i <= indent; i++) { Ns_DStringAppend(ds, " "); } Ns_DStringAppend(ds, "}" EOLSTRING); } for (i = 0; i < indent; i++) { Ns_DStringAppend(ds, " "); } Ns_DStringAppend(ds, "}" EOLSTRING); der += len; length -= len; } else { switch (tag) { case 2: case 3: case 4: while (len > 0) { Ns_DStringPrintf(ds, "%02x", *der++); len--; length--; } Ns_DStringAppend(ds, EOLSTRING); break; case 19: case 20: case 22: case 23: Ns_DStringAppend(ds, "\""); Ns_DStringNAppend(ds, (char *) der, len); Ns_DStringAppend(ds, "\"" EOLSTRING); der += len; length -= len; len = 0; break; case 6: Ns_DStringAppend(ds, "( "); Ns_DStringPrintf(ds, "%d ", *der / 40); Ns_DStringPrintf(ds, "%d ", *der % 40); der++; length--; len--; if (len > 0) { unsigned int val; val = 0; while (len > 0) { val |= *der & 0x7f; if (!(*der & 0x80)) { Ns_DStringPrintf(ds, "%d ", val); val = 0; } else { val <<= 7; } der++; length--; len--; } } Ns_DStringAppend(ds, ")" EOLSTRING); break; default: break; } if (len > 0) { break; } } } else { if (class == 0) { Ns_DStringPrintf(ds, "%s" EOLSTRING, name); } else { Ns_DStringPrintf(ds, ":%1x%04x:" EOLSTRING, class, tag); } } } return length == 0 ? NS_OK : NS_ERROR; } /* *---------------------------------------------------------------------- * * DEREncode -- * * Encode a der object. * * Note: asn1 must be a writable string. * * Results: * NS_OK or NS_ERROR. * * Side effects: * This is a recursive function. * *---------------------------------------------------------------------- */ int DEREncode(Ns_DString *ds, char *asn1) { Ns_DString dsBuf; int status; status = NS_OK; Ns_DStringInit(&dsBuf); asn1 = Ns_StrTrimLeft(asn1); while (*asn1 != '\0') { char *p; unsigned char tag; unsigned char class; unsigned char c; int fConstructed; int fHasArg; int fSetOf; int fInsertRaw; fHasArg = 1; fConstructed = 0; fSetOf = 0; fInsertRaw = 0; if (*asn1 == ':') { /* * Application, context-specific or private class. */ unsigned int val1, val2; if (sscanf(++asn1, "%1x%04x", &val1, &val2) != 2) { Ns_Log(Error, "nsssl: unable to parse class/tag id"); break; } asn1 += 5; if (*asn1 == ':') { fHasArg = 0; asn1++; } class = val1; tag = val2; } else { /* * Universal class. */ class = 0; if (strncasecmp(asn1, "integer", 7) == 0) { asn1 += 7; tag = 2; } else if (strncasecmp(asn1, "bit-string", 10) == 0) { asn1 += 10; tag = 3; } else if (strncasecmp(asn1, "octet-string", 12) == 0) { asn1 += 12; tag = 4; } else if (strncasecmp(asn1, "null", 4) == 0) { asn1 += 4; tag = 5; fHasArg = 0; } else if (strncasecmp(asn1, "object-identifier", 17) == 0) { asn1 += 17; tag = 6; } else if (strncasecmp(asn1, "sequence", 8) == 0) { asn1 += 8; tag = 16; } else if (strncasecmp(asn1, "set-of", 6) == 0) { asn1 += 6; tag = 17; fSetOf = 1; fInsertRaw = 1; } else if (strncasecmp(asn1, "set", 3) == 0) { asn1 += 3; tag = 17; } else if (strncasecmp(asn1, "PrintableString", 15) == 0) { asn1 += 15; tag = 19; } else if (strncasecmp(asn1, "T61String", 9) == 0) { asn1 += 9; tag = 20; } else if (strncasecmp(asn1, "IA5String", 9) == 0) { asn1 += 9; tag = 22; } else if (strncasecmp(asn1, "UTCTime", 7) == 0) { asn1 += 7; tag = 23; } else if (strncasecmp(asn1, "INSERT-OCTET-STRING", 19) == 0) { asn1 += 19; tag = 4; fInsertRaw = 1; } else { Ns_Log(Error, "nsssl: unknown tag type"); break; } } if (fHasArg) { asn1 = Ns_StrTrimLeft(asn1); if (*asn1 == '\0') { Ns_Log(Error, "nsssl: tag type %d needs an arg", tag); status = NS_ERROR; break; } if (*asn1 == '{') { int i; asn1++; fConstructed = 1; i = 0; p = asn1; while ((p = strpbrk(p, "{}")) != NULL) { if (*p == '}') { if (i == 0) { break; } i--; } else { i++; } p++; } if (p == NULL) { Ns_Log(Error, "nsssl: unmatched parenthesis"); break; } *p = '\0'; status = DEREncode(&dsBuf, asn1); *p = '}'; if (status != NS_OK) { break; } asn1 = p + 1; if (fSetOf) { /* * SET OF gets inlined as individual SETs. */ RecodeAsSetOf(&dsBuf, ds); Ns_DStringTrunc(&dsBuf, 0); } } else { if (class == 0) { switch (tag) { case 2: case 3: case 4: while ((*asn1 != '\0') && isxdigit( (int)*asn1 ) && (asn1[1] != '\0') && isxdigit( (int)asn1[1] )) { unsigned int val; sscanf(asn1, "%02x", &val); c = val; Ns_DStringNAppend(&dsBuf, (char *) &c, 1); asn1 += 2; } break; case 19: case 20: case 22: case 23: p = strchr(asn1 + 1, '\"'); if ((*asn1 != '\"') || (p == NULL)) { Ns_Log(Error, "nsssl: expected quoted string"); break; } if (p != (asn1+1)) { char *s; int i, j; s = asn1 + 1; j = p - asn1 - 1; if (tag == 19) { for (i=0; i<j; i++) { char c = s[i]; if (!(((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')) || (strchr(" '()+,-./:=?", c)!=NULL))) { Ns_Log(Error, "nsssl: " "illegal char '%c'", c); status = NS_ERROR; break; } } } Ns_DStringNAppend(&dsBuf, s, j); } asn1 = p + 1; break; case 6: p = strchr(asn1 + 1, ')'); if ((*asn1 != '(') || (p == NULL)) { Ns_Log(Error, "nsssl: expected list of integers"); break; } else { unsigned int val1, val2; asn1 = Ns_StrTrimLeft(asn1 + 1); p = strpbrk(asn1, " )"); if (*p == ')') { Ns_Log(Error, "nsssl: too few integers " "for OBJECT IDENTIFIER"); break; } *p = '\0'; val1 = atoi(asn1); *p = ' '; asn1 = Ns_StrTrimLeft(p + 1); p = strpbrk(asn1, " )"); c = *p; *p = '\0'; val2 = atoi(asn1); *p = c; c = 40 * val1 + val2; Ns_DStringNAppend(&dsBuf, (char *) &c, 1); asn1 = Ns_StrTrimLeft(p); while (*asn1 != ')') { unsigned char buf[6]; int i, l; p = strpbrk(asn1, " )"); c = *p; *p = '\0'; val1 = atoi(asn1); l = (int) floor(log((double) val1) / log(128.0)); /* * Note: ceil fails if val1 == 1. */ l++; i = l; while (i) { buf[--i] = (val1 & 0x7f) | 0x80; val1 >>= 7; } buf[l - 1] ^= 0x80; Ns_DStringNAppend(&dsBuf, (char *) buf, l); *p = c; asn1 = Ns_StrTrimLeft(p); } asn1++; } break; default: break; } if (status == NS_ERROR) { break; } } else { while ((*asn1 != '\0') && isxdigit( (int)*asn1 ) && (asn1[1] != '\0') && isxdigit( (int)asn1[1] )) { unsigned int val; sscanf(asn1, "%02x", &val); c = val; Ns_DStringNAppend(&dsBuf, (char *) &c, 1); asn1 += 2; } } if (dsBuf.length == 0) { break; } } } if (!fInsertRaw) { /* * We only generate low tags. */ c = tag | (class << 6); if (fConstructed) { c |= 0x20; } Ns_DStringNAppend(ds, (char *) &c, 1); AddLengthCount(ds, dsBuf.length); } if (dsBuf.length > 0) { Ns_DStringNAppend(ds, dsBuf.string, dsBuf.length); Ns_DStringTrunc(&dsBuf, 0); } asn1 = Ns_StrTrimLeft(asn1); } Ns_DStringFree(&dsBuf); if (*asn1 != '\0') { status = NS_ERROR; } return status; } /* * Private functions. */ /* *---------------------------------------------------------------------- * * X509Initialize -- * * Set up the ASCII decoder, its critical section, and register * shutdown callback to clean up when the server shuts down. * * Results: * NS_OK * * Side effects: * Global variable "nsX509Initialized" is set to NS_TRUE. * *---------------------------------------------------------------------- */ static int X509Initialize(void) { if (nsX509Initialized != NS_TRUE) { int status = NS_ERROR; do { if (B_CreateAlgorithmObject(&asciiDecoder) != 0) { break; } if (B_SetAlgorithmInfo(asciiDecoder, AI_RFC1113Recode, NULL_PTR) != 0) { break; } if (B_DecodeInit(asciiDecoder) != 0) { break; } nsX509Initialized = NS_TRUE; status = NS_OK; } while (0); if (status == NS_OK) { Ns_RegisterShutdown(X509Cleanup, NULL); } else { X509Cleanup(NULL); } return status; } return NS_OK; } /* *---------------------------------------------------------------------- * * X509Cleanup -- * * Burn and free BSAFE objects and critical section. * * Results: * None. * * Side effects: * Global variable "nsX509Initialized" is set to NS_FALSE. * *---------------------------------------------------------------------- */ static void X509Cleanup(void *ignore) { B_DestroyAlgorithmObject(&asciiDecoder); nsX509Initialized = NS_FALSE; Ns_CsDestroy(&nsAsciiDecoderCS); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/x509.h�����������������������������������������������������������������������0000644�0001750�0001750�00000005477�07271114471�015470� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ #ifndef X509_H #define X509_H #include <math.h> extern int GetPrivateKey(B_KEY_OBJ * key, char *filename); extern int GetCertificate(unsigned char **pCertificate, int *length, char *filename); extern char * PrivateKeyToPEM(B_KEY_OBJ privateKey); extern unsigned char * GetBerFromPEM(char *filename, char *section, int *length); extern void AddLengthCount(Ns_DString *ds, unsigned int length); extern int GetLengthCount(unsigned char *der, unsigned int *length); extern int SetOf(unsigned char *der, int length); extern int DecodeSetOf(Ns_DString *ds, unsigned char *der, int length, int indent); void extern RecodeAsSetOf(Ns_DString *dsSrc, Ns_DString *dsDest); extern int DERDecode(Ns_DString *ds, unsigned char *der, int length, int indent); extern int DEREncode(Ns_DString *ds, char *asn1); #define SECTION_X509_CERTIFICATE "X509 CERTIFICATE" #define SECTION_CERTIFICATE "CERTIFICATE" #define SECTION_RSA_PRIVATE_KEY "RSA PRIVATE KEY" #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/nsssl.c����������������������������������������������������������������������0000644�0001750�0001750�00000012105�07642167703�016112� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsssl.c -- * * Call internal Ns_DriverInit. * */ #include "ns.h" #include "ssl.h" #ifdef SSL_EXPORT #define DRIVER_NAME "nsssle" #else #define DRIVER_NAME "nsssl" #endif static Ns_DriverProc SSLProc; NS_EXPORT int Ns_ModuleVersion = 1; /* *---------------------------------------------------------------------- * * Ns_ModuleInit -- * * Initialize the SSL driver. * * Results: * NS_OK if initialized ok, NS_ERROR otherwise. * * Side effects: * See Ns_DriverInit. * *---------------------------------------------------------------------- */ NS_EXPORT int Ns_ModuleInit(char *server, char *module) { Ns_DriverInitData init; char *cert, *key, *path; void *dssl; int n; /* * Initialize the global and per-driver SSL. */ path = Ns_ConfigGetPath(server, module, NULL); if (NsSSLInitialize(server, module) != NS_OK) { Ns_Log(Error, "%s: failed to initialize ssl driver", module); return NS_ERROR; } cert = Ns_ConfigGet(path, "certfile"); if (cert == NULL) { Ns_Log(Warning, "%s: certfile not specified", module); return NS_OK; } #ifdef SSL_EXPORT n = 40; #else n = 128; #endif Ns_Log(Notice, "%s: initialized with %d-bit encryption", module, n); #ifdef HAVE_SWIFT Ns_Log(Notice, "%s: SUPPORTS RAINBOW CRYPTOSWIFT HARDWARE SSL ACCELERATOR", module); #endif key = Ns_ConfigGet(path, "keyfile"); dssl = NsSSLCreateServer(cert, key); if (dssl == NULL) { return NS_ERROR; } /* * Initialize the driver without the async option so all I/O * happens in the connection thread, avoiding any possible * blocking in the driver thread due to SSL overhead. Set * the SSL option to use the SSL port and protocol defaults. */ init.version = NS_DRIVER_VERSION_1; init.name = DRIVER_NAME; init.proc = SSLProc; init.arg = dssl; init.opts = NS_DRIVER_SSL; init.path = NULL; return Ns_DriverInit(server, module, &init); } /* *---------------------------------------------------------------------- * * SSLProc -- * * SSL driver callback proc. This driver performs the necessary * handshake and encryption of SSL. * * Results: * For close, always 0. For keep, 0 if connection could be * properly flushed, -1 otherwise. For send and recv, # of bytes * processed or -1 on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int SSLProc(Ns_DriverCmd cmd, Ns_Sock *sock, struct iovec *bufs, int nbufs) { Ns_Driver *driver = sock->driver; int n, total; switch (cmd) { case DriverRecv: case DriverSend: /* * On first I/O, initialize the connection context. */ if (sock->arg == NULL) { n = driver->recvwait; if (n > driver->sendwait) { n = driver->sendwait; } sock->arg = NsSSLCreateConn(sock->sock, n, driver->arg); if (sock->arg == NULL) { return -1; } } /* * Process each buffer one at a time. */ total = 0; do { if (cmd == DriverSend) { n = NsSSLSend(sock->arg, bufs->iov_base, bufs->iov_len); } else { n = NsSSLRecv(sock->arg, bufs->iov_base, bufs->iov_len); } if (n < 0 && total > 0) { /* NB: Mask error if some bytes were read. */ n = 0; } ++bufs; total += n; } while (n > 0 && --nbufs > 0); n = total; break; case DriverKeep: if (sock->arg != NULL && NsSSLFlush(sock->arg) == NS_OK) { n = 0; } else { n = -1; } break; case DriverClose: if (sock->arg != NULL) { (void) NsSSLFlush(sock->arg); NsSSLDestroyConn(sock->arg); sock->arg = NULL; } n = 0; break; default: /* Unsupported command. */ n = -1; break; } return n; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/ssltcl.c���������������������������������������������������������������������0000644�0001750�0001750�00000124652�11140322751�016247� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ /* * ssltcl.c -- * * Tcl bindings for various nsssl commands. * * Note: This has three entry points -- one for nsd's loader and * two for the loader in the Tcl interpreter used by keygen.tcl. * */ static const char *RCSID = "@(#): $Header: /cvsroot/aolserver/aolserver/nsssl/ssltcl.c,v 1.2 2009/01/29 12:49:45 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #include "ssl.h" #include "ssltcl.h" #include "x509.h" #include <sys/stat.h> /* * Private function prototypes */ static int InitCommands(Tcl_Interp *interp); static void * SslReadFile(char *filename, int *length); static int SslWriteFile(char *filename, void *data, int length); static int OctetStringDecode(Ns_DString *ds, char *s); static void OctetStringEncode(Ns_DString *ds, char *data, int length); static void BitStringEncode(Ns_DString *ds, unsigned char *data, int lengthInBits); /* * Tcl commands */ static Tcl_CmdProc DerDecodeCmd; static Tcl_CmdProc DerEncodeCmd; static Tcl_CmdProc OctetStringCmd; static Tcl_CmdProc RsaKeyCmd; static Tcl_CmdProc SignatureCmd; static Tcl_CmdProc EncryptCmd; static Tcl_CmdProc DecryptCmd; static Tcl_CmdProc DigestCmd; static Tcl_CmdProc InfoCmd; /* * Static variables */ /* None at this time. */ /* * Public API functions */ /* None at this time. */ /* * Exported functions */ /* *---------------------------------------------------------------------- * * Nsssle_Init -- ***EXPORT VERSION*** * * Entry point for stand-alone mode (nsssle.so export version). * * Results: * NS_OK * * Side effects: * None. * *---------------------------------------------------------------------- */ int Nsssle_Init(Tcl_Interp *interp) { #ifdef SSL_EXPORT Ns_Log(Notice, "nsssl: " "40-bit export encryption version starting in stand-alone mode"); InitCommands(interp); return TCL_OK; #else Ns_Log(Fatal, "nsssl: " "128-bit domestic encryption not supported by this module"); return TCL_ERROR; #endif } /* *---------------------------------------------------------------------- * * Nsssl_Init -- ***DOMESTIC VERSION*** * * Entry point for stand-alone mode (nsssl.so domestic version). * * Results: * NS_OK * * Side effects: * None. * *---------------------------------------------------------------------- */ int Nsssl_Init(Tcl_Interp *interp) { #ifdef SSL_EXPORT Ns_Log(Fatal, "nsssl: " "40-bit export encryption not supported by this module"); return TCL_ERROR; #else Ns_Log(Notice, "nsssl: " "128-bit domestic encryption version starting in stand-alone mode"); InitCommands(interp); return TCL_OK; #endif } /* *---------------------------------------------------------------------- * * NsSSLInterpInit * * Add Tcl commands for SSL functions. * * Note: This is called in normal (non-stand-alone) mode. * * Results: * NS_OK * * Side effects: * Adds Tcl commands to the interp. * *---------------------------------------------------------------------- */ int NsSSLInterpInit(Tcl_Interp *interp, void *ignored) { Tcl_CreateCommand(interp, "ssl_info", InfoCmd, NULL, NULL); return NS_OK; } /* * Private functions */ /* *---------------------------------------------------------------------- * * InitCommands * * Add Tcl commands for SSL functions used by keygen.tcl * * Note: This is called in stand-alone mode. * * Results: * NS_OK * * Side effects: * Adds Tcl commands to the interp. * *---------------------------------------------------------------------- */ static int InitCommands(Tcl_Interp *interp) { if (NsSSLInitialize(NULL, NULL) != NS_OK) { Ns_Log(Error, "nsssl: failed to initialize nsssl in stand-alone mode"); return TCL_ERROR; } Tcl_CreateCommand(interp, "osi_der_decode", DerDecodeCmd, NULL, NULL); Tcl_CreateCommand(interp, "osi_der_encode", DerEncodeCmd, NULL, NULL); Tcl_CreateCommand(interp, "osi_octet_string", OctetStringCmd, NULL, NULL); Tcl_CreateCommand(interp, "ssl_rsa_key", RsaKeyCmd, NULL, NULL); Tcl_CreateCommand(interp, "ssl_signature", SignatureCmd, NULL, NULL); Tcl_CreateCommand(interp, "ssl_encrypt", EncryptCmd, NULL, NULL); Tcl_CreateCommand(interp, "ssl_decrypt", DecryptCmd, NULL, NULL); Tcl_CreateCommand(interp, "ssl_digest", DigestCmd, NULL, NULL); return TCL_OK; } /* *---------------------------------------------------------------------- * * SslReadFile * * Returns the file as a block of allocated memory. * * Results: * Sets length to bytes read. * Returns NULL on error or a pointer to the block otherwise. * * Side effects: * Allocates memory. * *---------------------------------------------------------------------- */ static void * SslReadFile(char *filename, int *length) { FILE *fp; void *data; int err; data = NULL; fp = NULL; err = 1; do { struct stat st; if (stat(filename, &st) != 0) { break; } *length = st.st_size; data = ckalloc(*length); fp = fopen(filename, "rb"); if (fp == NULL) { break; } if (fread(data, 1, *length, fp) != (size_t) *length) { break; } err = 0; } while(0); if (fp != NULL) { fclose(fp); } if ((err) && (data != NULL)) { ckfree(data); data = NULL; } return data; } /* *---------------------------------------------------------------------- * * SslWriteFile * * Write a block of ram to disk. * * Results: * NS_OK or NS_ERROR * * Side effects: * Does *not* free memory. * *---------------------------------------------------------------------- */ static int SslWriteFile(char *filename, void *data, int length) { FILE *fp; int status; fp = NULL; status = NS_ERROR; do { fp = fopen(filename, "wb"); if (fp == NULL) { break; } if (fwrite(data, length, 1, fp) == 0) { break; } status = NS_OK; } while(0); if (fp != NULL) { fclose(fp); } return status; } /* *---------------------------------------------------------------------- * * OctetStringDecode * * Decodes an octet string * * Results: * NS_OK or NS_ERROR * * Side effects: * The Ns_DString passed in expands. * *---------------------------------------------------------------------- */ static int OctetStringDecode(Ns_DString *ds, char *s) { if (strncasecmp(s, "octet-string ", 13) == 0) { s += 13; while ((*s != '\0') && isxdigit( (int) *s) && (s[1] != '\0') && isxdigit( (int) s[1])) { unsigned int val; unsigned char c; sscanf(s, "%02x", &val); c = val; Ns_DStringNAppend(ds, (char *) &c, 1); s += 2; } return NS_OK; } else { return NS_ERROR; } } /* *---------------------------------------------------------------------- * * OctetStringEncode * * Encodes data as a proper octet string. * * Results: * Ns_DString to the new octet string. * * Side effects: * The Ns_DString passed in will expand. * *---------------------------------------------------------------------- */ static void OctetStringEncode(Ns_DString *ds, char *data, int length) { Ns_DStringAppend(ds, "OCTET-STRING "); while (length > 0) { Ns_DStringPrintf(ds, "%02x", (unsigned char) *data); data++; length--; } } /* *---------------------------------------------------------------------- * * BitStringEncode * * Encodes data as a bit string. * * Results: * Ns_DString to the new octet string. * * Side effects: * The Ns_DString passed in will expand. * *---------------------------------------------------------------------- */ static void BitStringEncode(Ns_DString *ds, unsigned char *data, int lengthInBits) { int paddingBits; int length; Ns_DStringAppend(ds, "BIT-STRING "); paddingBits = 8 - lengthInBits % 8; length = lengthInBits / 8; if (paddingBits == 8) { paddingBits = 0; } else { length++; } Ns_DStringPrintf(ds, "%02x", paddingBits); while (length > 0) { Ns_DStringPrintf(ds, "%02x", *data); data++; length--; } } /* *---------------------------------------------------------------------- * * DerDecodeCmd -- * * Tcl command that returns a string in an ASN.1-style format of * the DER (Distinguished Encoding Rules) object. * * Usage: * DERDecode -option arg * -file <filename> * -octets <string containing octec string> * * Results: * Ns_DString to the new DER object. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int DerDecodeCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { unsigned char *der; Ns_DString ds; Ns_DString dsBuf; int status; status = TCL_ERROR; der = NULL; Ns_DStringInit(&ds); Ns_DStringInit(&dsBuf); do { if (argc != 3) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " { -file filename | -octets octet-string }\"", NULL); break; } if (strcasecmp(argv[1], "-file") == 0) { int length; der = SslReadFile(argv[2], &length); if (der == NULL) { Tcl_AppendResult(interp, "Could not read file '", argv[2], "'.", NULL); break; } if (DERDecode(&ds, der, length, 0) != NS_OK) { Tcl_AppendResult(interp, "Could not parse DER.", NULL); break; } Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else if (strcasecmp(argv[1], "-octets") == 0) { if (OctetStringDecode(&dsBuf, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } if (DERDecode(&ds, (unsigned char *) dsBuf.string, dsBuf.length, 0) != NS_OK) { Tcl_AppendResult(interp, "Could not parse DER.", NULL); break; } Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else { Tcl_AppendResult(interp, "usage: \"", argv[0], " { -file filename | -octets octets }\"", NULL); break; } status = TCL_OK; } while (0); if (der != NULL) { ns_free(der); } Ns_DStringFree(&ds); Ns_DStringFree(&dsBuf); return status; } /* *---------------------------------------------------------------------- * * DerEncodeCmd -- * * Tcl command that returns an octet string of the the DER * (Distinguished Encoding Rules) object. * * Usage: * osi_der_encode option arg * -octets <string containing octec string> * -isprintablestring <string> * * Results: * Ns_DString to the new DER object. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int DerEncodeCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { Ns_DString ds; Ns_DString dsBuf; int status; status = TCL_ERROR; Ns_DStringInit(&ds); Ns_DStringInit(&dsBuf); do { if (argc != 3) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " option argument\"", NULL); break; } if (strcasecmp(argv[1], "octets") == 0) { if (DEREncode(&dsBuf, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse ASN.1 data.", NULL); break; } OctetStringEncode(&ds, dsBuf.string, dsBuf.length); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else if (strcasecmp(argv[1], "IsPrintableString") == 0) { char *p; for (p = argv[2]; *p != '\0'; p++) { char c = *p; if (!(((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z')) || ((c >= '0') && (c <= '9')) || (strchr(" '()+,-./:=?", c)!=NULL))) { break; } } Tcl_SetResult(interp, *p == '\0' ? "1" : "0", TCL_STATIC); } else { Tcl_AppendResult(interp, "usage: \"", argv[0], " valid options are octets or " "IsPrintableString\"", NULL); break; } status = TCL_OK; } while (0); Ns_DStringFree(&ds); Ns_DStringFree(&dsBuf); return status; } /* *---------------------------------------------------------------------- * * OctetStringCmd * * A candy-machine-style command to manipulate octet strings in * Tcl. * * Usage: osi_octet_string command args * * commands: * tostring <string containing octet string> * converts the octet string into a null terminated text string * fromstring <string> * returns the string as an octet string * read <filename> * returns the file as an octet string * write <filename> <string containing octet string> * writes the contents of the octet string to a file * frombase64 <string containing data in base64> * returns the data as an octet string * tobase64 <string containing octet string> * converts the octet string into base 64 * * Results: * NS_OK or NS_ERROR * * Side effects: * Depends on command -- see x509.c. * *---------------------------------------------------------------------- */ static int OctetStringCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { int status; Ns_DString ds; unsigned char *rawBytes; status = TCL_ERROR; rawBytes = NULL; Ns_DStringInit(&ds); do { if ((argc != 3) && (argc != 4)) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " { tostring octets | fromstring string " "| read filename " "| write filename octets | frombase64 string " "| tobase64 octets }\"", NULL); break; } if (strcasecmp(argv[1], "tostring") == 0) { if (OctetStringDecode(&ds, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } Ns_DStringNAppend(&ds, "\0", 1); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else if (strcasecmp(argv[1], "fromstring") == 0) { OctetStringEncode(&ds, argv[2], strlen(argv[2])); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else if (strcasecmp(argv[1], "read") == 0) { int length; rawBytes = SslReadFile(argv[2], &length); if (rawBytes == NULL) { Tcl_AppendResult(interp, "Could not read file '", argv[2], "'.", NULL); break; } OctetStringEncode(&ds, (char *) rawBytes, length); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else if ((strcasecmp(argv[1], "write") == 0) && (argc == 4)) { if (OctetStringDecode(&ds, argv[3]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } if (SslWriteFile(argv[2], ds.string, ds.length) != NS_OK) { Tcl_AppendResult(interp, "Could not write file '", argv[2], "'.", NULL); break; } } else if (strcasecmp(argv[1], "frombase64") == 0) { B_ALGORITHM_OBJ asciiDecoder; Ns_DString dsBuf; unsigned int length; int err; Ns_DStringInit(&dsBuf); do { unsigned char buf[100]; char *src; err = B_CreateAlgorithmObject(&asciiDecoder); if (err != 0) { break; } err = B_SetAlgorithmInfo(asciiDecoder, AI_RFC1113Recode, NULL); if (err != 0) { break; } err = B_DecodeInit(asciiDecoder); if (err != 0) { break; } src = Ns_StrTrimLeft(argv[2]); while (*src != '\0') { char *p; char c; p = strpbrk(src, "\r\n"); if (p != NULL) { c = *p; *p = '\0'; } else { c = 0; p = src+strlen(src); } err = B_DecodeUpdate(asciiDecoder, buf, &length, sizeof(buf), (unsigned char *) src, p-src); if (err != 0) { break; } Ns_DStringNAppend(&dsBuf, (char *) buf, length); if (c != 0) { *p = c; src = Ns_StrTrimLeft(p+1); } else { src = p; } } if (err != 0) { break; } err = B_DecodeFinal(asciiDecoder, buf, &length, sizeof(buf)); if (err != 0) { break; } if (length > 0) { Ns_DStringNAppend(&dsBuf, (char *) buf, length); } OctetStringEncode(&ds, dsBuf.string, dsBuf.length); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } while(0); Ns_DStringFree(&dsBuf); B_DestroyAlgorithmObject(&asciiDecoder); if (err != 0) { Ns_Log(Error, "nsssl: 'osi_octet_string frombase64' failed, " "bsafe error %d", err); break; } } else if (strcasecmp(argv[1], "tobase64") == 0) { B_ALGORITHM_OBJ asciiEncoder; Ns_DString dsBuf; int err; if (OctetStringDecode(&ds, argv[2]) != NS_OK) { break; } Ns_DStringInit(&dsBuf); do { unsigned char buf[100]; char *src; unsigned int updateLength; unsigned int len; err = B_CreateAlgorithmObject(&asciiEncoder); if (err != 0) { break; } err = B_SetAlgorithmInfo(asciiEncoder, AI_RFC1113Recode, NULL); if (err != 0) { break; } err = B_EncodeInit(asciiEncoder); if (err != 0) { break; } src = ds.string; len = ds.length; updateLength = 0; while (len > 0) { int iToAdd; iToAdd = len >= 48 ? 48 : len; err = B_EncodeUpdate(asciiEncoder, buf, &updateLength, sizeof(buf), (unsigned char *) src, iToAdd); if (err != 0) { break; } src += iToAdd; len -= iToAdd; if ((updateLength > 0) && (len != 0)) { /* NAB: I want the last line to get added to final */ buf[updateLength] = '\0'; Ns_DStringAppend(&dsBuf, (char *) buf); Ns_DStringAppend(&dsBuf, EOLSTRING); } } if (err != 0) { break; } err = B_EncodeFinal(asciiEncoder, buf+updateLength, &len, sizeof(buf)-updateLength); if (err != 0) { break; } len += updateLength; if (len > 0) { buf[len] = '\0'; Ns_DStringAppend(&dsBuf, (char *) buf); Ns_DStringAppend(&dsBuf, EOLSTRING); } Tcl_SetResult(interp, dsBuf.string, TCL_VOLATILE); } while(0); Ns_DStringFree(&dsBuf); B_DestroyAlgorithmObject(&asciiEncoder); if (err != 0) { Ns_Log(Error, "nsssl: 'osi_octet_string tobase64' failed, " "bsafe error %d", err); break; } } else { Tcl_AppendResult(interp, "usage: \"", argv[0], " { tostring octets | fromstring string " "| read filename " "| write filename octets " "| frombase64 string " "| tobase64 octets }\"", NULL); break; } status = TCL_OK; } while(0); if (rawBytes != NULL) { ns_free(rawBytes); } Ns_DStringFree(&ds); return status; } /* *---------------------------------------------------------------------- * * RsaKeyCmd -- * * Tcl command that creates the keypair. * * Usage: * ssl_rsa_key generate <modulus> * * Results: * Octet string of the new keypair from NsSSLGenerateKeypair. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int RsaKeyCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { int status; int err; Ns_DString ds; B_KEY_OBJ publicKey; B_KEY_OBJ privateKey; status = TCL_ERROR; err = 0; publicKey = NULL; privateKey = NULL; Ns_DStringInit(&ds); do { unsigned int numofmodulusbits; ITEM *pItem; if (argc != 3) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " command arg\"", NULL); break; } if (strcasecmp(argv[1], "generate") == 0) { numofmodulusbits = atoi(argv[2]); #ifdef SSL_EXPORT if ((numofmodulusbits < 256) || (numofmodulusbits > 512)) { Tcl_AppendResult(interp, "Number of modulus bits must be " "between 256 and 512 inclusive (export version).", NULL); break; } #else if ((numofmodulusbits < 256) || (numofmodulusbits > 1024)) { Tcl_AppendResult(interp, "Number of modulus bits must be " "between 256 and 1024 inclusive (non-export version).", NULL); break; } #endif if (NsSSLGenerateKeypair(numofmodulusbits, NULL, &publicKey, &privateKey) != NS_OK) { Tcl_AppendResult(interp, "Unable to generate keys.", NULL); break; } err = B_GetKeyInfo((POINTER *) &pItem, privateKey, KI_PKCS_RSAPrivateBER); if (err != 0) { break; } OctetStringEncode(&ds, (char *) pItem->data, pItem->len); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else if (strcasecmp(argv[1], "publickey") == 0) { ITEM item; if (OctetStringDecode(&ds, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } err = B_CreateKeyObject(&privateKey); if (err != 0) { break; } item.data = (unsigned char *) ds.string; item.len = ds.length; err = B_SetKeyInfo(privateKey, KI_PKCS_RSAPrivateBER, (POINTER) &item); if (err != 0) { break; } Ns_DStringTrunc(&ds, 0); err = B_GetKeyInfo((POINTER *) &pItem, privateKey, KI_RSAPublicBER); if (err != 0) { break; } OctetStringEncode(&ds, (char *) pItem->data, pItem->len); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } status = TCL_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: 'ssl_rsa_key %s' failed, bsafe error %d", argv[1], err); Tcl_AppendResult(interp, "encountered BSAFE error", NULL); } Ns_DStringFree(&ds); if (publicKey != NULL) { B_DestroyKeyObject(&publicKey); } if (privateKey != NULL) { B_DestroyKeyObject(&privateKey); } return status; } /* *---------------------------------------------------------------------- * * SignatureCmd -- * * Signs an octet string with the private key, suitable for * signing a certificate request. * * Usage: * ssl_signature <octet string> <octet string containing private key> * * Results: * Bit string containing the signature. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int SignatureCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { int status; int err; Ns_DString ds; B_ALGORITHM_OBJ algObj; B_KEY_OBJ keyObj; status = TCL_ERROR; err = 0; Ns_DStringInit(&ds); algObj = NULL; keyObj = NULL; do { if (argc != 4) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " sign data key\"", NULL); break; } if (strcasecmp(argv[1], "sign") == 0) { ITEM item; unsigned char buf[1024]; unsigned int length; if (OctetStringDecode(&ds, argv[3]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } err = B_CreateKeyObject(&keyObj); if (err != 0) { break; } item.data = (unsigned char *) ds.string; item.len = ds.length; err = B_SetKeyInfo(keyObj, KI_PKCS_RSAPrivateBER, (POINTER) &item); if (err != 0) { Tcl_AppendResult(interp, "Could not set private key.", NULL); break; } Ns_DStringTrunc(&ds, 0); err = B_CreateAlgorithmObject(&algObj); if (err != 0) { break; } err = B_SetAlgorithmInfo(algObj, AI_MD5WithRSAEncryption, NULL); if (err != 0) { break; } err = B_SignInit(algObj, keyObj, ALGORITHM_CHOOSER, NULL); if (err != 0) { break; } if (OctetStringDecode(&ds, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } err = B_SignUpdate(algObj, (unsigned char *) ds.string, ds.length, NULL); if (err != 0) { break; } err = B_SignFinal(algObj, buf, &length, sizeof(buf), NULL, NULL); if (err != 0) { break; } Ns_DStringTrunc(&ds, 0); BitStringEncode(&ds, buf, length*8); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else { Tcl_AppendResult(interp, "unknown command \"", argv[1], "\": should be sign.", NULL); break; } status = TCL_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: 'ssl_signature' failed, bsafe error %d", err); Tcl_AppendResult(interp, "encountered BSAFE error", NULL); } Ns_DStringFree(&ds); if (algObj != NULL) { B_DestroyAlgorithmObject(&algObj); } if (keyObj != NULL) { B_DestroyKeyObject(&keyObj); } return status; } /* *---------------------------------------------------------------------- * * EncryptCmd -- * * Encrypts data. * * Usage: * ssl_encrypt algorithm <data> <key> * * Results: * Octet string representation of ciphertext. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int EncryptCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { int status; int err; Ns_DString ds; Ns_DString dsBuf; B_ALGORITHM_OBJ encryptor; B_KEY_OBJ key; status = TCL_ERROR; err = 0; encryptor = NULL; key = NULL; Ns_DStringInit(&ds); Ns_DStringInit(&dsBuf); do { ITEM item; unsigned char buf[1024]; unsigned char *data; unsigned int length, updateLength; if (argc != 4) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " algorithm data key\"", NULL); break; } err = B_CreateAlgorithmObject(&encryptor); if (err != 0) { break; } err = B_CreateKeyObject(&key); if (err != 0) { break; } if (OctetStringDecode(&ds, argv[3]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse key OCTET-STRING.", NULL); break; } if (OctetStringDecode(&dsBuf, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse data OCTET-STRING.", NULL); break; } if (strcasecmp(argv[1], "rc4") == 0) { item.data = (unsigned char *) ds.string; item.len = ds.length; #ifdef SSL_EXPORT if (item.len > 5) { item.len = 5; } #endif err = B_SetKeyInfo(key, KI_Item, (POINTER) &item); if (err != 0) { Tcl_AppendResult(interp, "Could not set key.", NULL); break; } Ns_DStringTrunc(&ds, 0); err = B_SetAlgorithmInfo(encryptor, AI_RC4, NULL); if (err != 0) { break; } err = B_EncryptInit(encryptor, key, ALGORITHM_CHOOSER, NULL); if (err != 0) { break; } data = (unsigned char *) dsBuf.string; length = dsBuf.length; while (length > 0) { int iToEncrypt; iToEncrypt = length > sizeof(buf) ? sizeof(buf) : length; err = B_EncryptUpdate(encryptor, buf, &updateLength, sizeof(buf), data, iToEncrypt, NULL, NULL); if (err != 0) { break; } if (updateLength > 0) { Ns_DStringNAppend(&ds, (char *) buf, updateLength); } data += iToEncrypt; length -= iToEncrypt; } if (err != 0) { break; } err = B_EncryptFinal(encryptor, buf, &updateLength, sizeof(buf), NULL, NULL); if (err != 0) { break; } if (updateLength > 0) { Ns_DStringNAppend(&ds, (char *) buf, updateLength); } Ns_DStringTrunc(&dsBuf, 0); OctetStringEncode(&dsBuf, ds.string, ds.length); Tcl_SetResult(interp, dsBuf.string, TCL_VOLATILE); } else { Tcl_AppendResult(interp, "unknown algorithm \"", argv[1], "\": should be rc4.", NULL); break; } status = TCL_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: 'ssl_encrypt' failed, bsafe error %d", err); Tcl_AppendResult(interp, "encountered BSAFE error", NULL); } Ns_DStringFree(&ds); Ns_DStringFree(&dsBuf); if (encryptor != NULL) { B_DestroyAlgorithmObject(&encryptor); } if (key != NULL) { B_DestroyKeyObject(&key); } return status; } /* *---------------------------------------------------------------------- * * DecryptCmd -- * * Decrypts data. * * Usage: * ssl_decrypt algorithm <data> <key> * * Results: * Octet string representation of cleartext. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int DecryptCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { int status; int err; Ns_DString ds; Ns_DString dsBuf; B_ALGORITHM_OBJ decryptor; B_KEY_OBJ key; status = TCL_ERROR; err = 0; decryptor = NULL; key = NULL; Ns_DStringInit(&ds); Ns_DStringInit(&dsBuf); do { ITEM item; unsigned char buf[1024]; unsigned char *data; unsigned int length, updateLength; if (argc != 4) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " algorithm data key\"", NULL); break; } err = B_CreateAlgorithmObject(&decryptor); if (err != 0) { break; } err = B_CreateKeyObject(&key); if (err != 0) { break; } if (OctetStringDecode(&ds, argv[3]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse key OCTET-STRING.", NULL); break; } if (OctetStringDecode(&dsBuf, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse data OCTET-STRING.", NULL); break; } if (strcasecmp(argv[1], "rc4") == 0) { item.data = (unsigned char *) ds.string; item.len = ds.length; #ifdef SSL_EXPORT if (item.len > 5) { item.len = 5; } #endif err = B_SetKeyInfo(key, KI_Item, (POINTER) &item); if (err != 0) { Tcl_AppendResult(interp, "Could not set key.", NULL); break; } Ns_DStringTrunc(&ds, 0); err = B_SetAlgorithmInfo(decryptor, AI_RC4, NULL); if (err != 0) { break; } err = B_DecryptInit(decryptor, key, ALGORITHM_CHOOSER, NULL); if (err != 0) { break; } data = (unsigned char *) dsBuf.string; length = dsBuf.length; while (length > 0) { int iToDecrypt; iToDecrypt = length > sizeof(buf) ? sizeof(buf) : length; err = B_DecryptUpdate(decryptor, buf, &updateLength, sizeof(buf), data, iToDecrypt, NULL, NULL); if (err != 0) { break; } if (updateLength > 0) { Ns_DStringNAppend(&ds, (char *) buf, updateLength); } data += iToDecrypt; length -= iToDecrypt; } if (err != 0) { break; } err = B_DecryptFinal(decryptor, buf, &updateLength, sizeof(buf), NULL, NULL); if (err != 0) { break; } if (updateLength > 0) { Ns_DStringNAppend(&ds, (char *) buf, updateLength); } Ns_DStringTrunc(&dsBuf, 0); OctetStringEncode(&dsBuf, ds.string, ds.length); Tcl_SetResult(interp, dsBuf.string, TCL_VOLATILE); } else { Tcl_AppendResult(interp, "unknown algorithm \"", argv[1], "\": should be rc4.", NULL); break; } status = TCL_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: 'ssl_decrypt' failed, bsafe error %d", err); Tcl_AppendResult(interp, "encountered BSAFE error", NULL); } Ns_DStringFree(&ds); Ns_DStringFree(&dsBuf); if (decryptor != NULL) { B_DestroyAlgorithmObject(&decryptor); } if (key != NULL) { B_DestroyKeyObject(&key); } return status; } /* *---------------------------------------------------------------------- * * DigestCmd -- * * Generates an octet string containing a message digest (hash). * Note that MD5 is the only digest supported. * * Usage: * ssl_digest algorithm <data> * * Results: * Octet string representation of the message digest. * * Side effects: * The string passed out is TCL_VOLATILE. * *---------------------------------------------------------------------- */ static int DigestCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { int status; int err; Ns_DString ds; B_ALGORITHM_OBJ digester; status = TCL_ERROR; err = 0; digester = NULL; Ns_DStringInit(&ds); do { unsigned char digest[16]; unsigned int length; if (argc != 3) { Tcl_AppendResult(interp, "wrong # of args: should be \"", argv[0], " algorithm data\"", NULL); break; } err = B_CreateAlgorithmObject(&digester); if (err != 0) { break; } if (OctetStringDecode(&ds, argv[2]) != NS_OK) { Tcl_AppendResult(interp, "Could not parse OCTET-STRING.", NULL); break; } if (strcasecmp(argv[1], "md5") == 0) { err = B_SetAlgorithmInfo(digester, AI_MD5, NULL); if (err != 0) { break; } err = B_DigestInit(digester, NULL, ALGORITHM_CHOOSER, NULL); if (err != 0) { break; } err = B_DigestUpdate(digester, (unsigned char *) ds.string, ds.length, NULL); if (err != 0) { break; } err = B_DigestFinal(digester, digest, &length, 16, NULL); if ((err != 0) || (length != 16)) { break; } Ns_DStringTrunc(&ds, 0); OctetStringEncode(&ds, (char *) digest, 16); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); } else { Tcl_AppendResult(interp, "unknown algorithm \"", argv[1], "\": should be md5.", NULL); break; } status = TCL_OK; } while (0); if (err != 0) { Ns_Log(Error, "nsssl: 'ssl_digest' failed, bsafe error %d", err); Tcl_AppendResult(interp, "encountered BSAFE error", NULL); } Ns_DStringFree(&ds); if (digester != NULL) { B_DestroyAlgorithmObject(&digester); } return status; } /* *---------------------------------------------------------------------- * * InfoCmd -- * * Returns a proper Tcl list describing this nsssl module: * {SSL_EXPORT} {SSL_PROTOCOL_VERSION} * * Results: * Tcl string result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int InfoCmd(ClientData dummy, Tcl_Interp *interp, int argc, char **argv) { Ns_DString ds; Ns_DStringInit(&ds); #ifndef SSL_EXPORT Ns_DStringPrintf(&ds, "{%d} ", NS_FALSE); #else Ns_DStringPrintf(&ds, "{%d} ", SSL_EXPORT); #endif Ns_DStringPrintf(&ds, "{%s} ", SSL_PROTOCOL_VERSION); Tcl_SetResult(interp, ds.string, TCL_VOLATILE); Ns_DStringFree(&ds); return NS_OK; } ��������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/ssltcl.h���������������������������������������������������������������������0000644�0001750�0001750�00000004167�07271114471�016262� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * EXPORT NOTICE * * This source code is subject to the U.S. Export Administration * Regulations and other U.S. law, and may not be exported or * re-exported to certain countries (currently Afghanistan * (Taliban-controlled areas), Cuba, Iran, Iraq, Libya, North Korea, * Serbia (except Kosovo), Sudan and Syria) or to persons or entities * prohibited from receiving U.S. exports (including Denied Parties, * Specially Designated Nationals, and entities on the Bureau of * Export Administration Entity List). */ #ifndef SSLTCL_H #define SSLTCL_H extern int Nsssl_InitCommands(Tcl_Interp *interp); extern int Nsssle_Init(Tcl_Interp *interp); extern int Nsssl_Init(Tcl_Interp *interp); extern int NsSSLInterpInit(Tcl_Interp *interp, void *ignored); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsssl/keyfile-sample.pem�����������������������������������������������������������0000644�0001750�0001750�00000001277�07271114471�020216� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� $Header: /cvsroot/aolserver/aolserver/nsssl/keyfile-sample.pem,v 1.1 2001/04/23 21:06:01 jgdavidson Exp $ Here is a FAKE 40-bit/512-bit export-grade SSL private key: -----BEGIN RSA PRIVATE KEY----- MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6vMmAZ4Bej7gt9PV Fedlwkwvz6Axds+V1Xr4dwKG6pUFLB5lQZc9secjO1mHG9VcyLYFX+ipi4ZVT7UL iiCzHQIDAQABAkEAiHHk5JOKcCAMCTXwTeQwaIIuUfnKQCGV9oCPwy2ohJohmtzE HW5b9pZnw9XHcYBmpgEfC881SfOCChOSISgE0QIhAPndwWhCiKgFzey+DtVQNs0C Y5ZXJHSvy/c7vcITQwpLAiEA8LenLALjQiczBpVqQkCoHKHr1pye2uhQaoY4XlZu VzcCIQCaTLX+A3BOil8TPn78fa+JxFrpYWDy6gjD4VGagriYpwIgQMBWMquQMDJV MncsvyefURxpUTCONrp5Lz5tmUrMoZ8CIQDebFKTgTKIKV0w1HsB3NL+WbnZi4PJ W2cBMeKLrY8g+w== -----END RSA PRIVATE KEY----- ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/�����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014577� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015343� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test5a.adp���������������������������������������������������������������0000644�0001750�0001750�00000000546�07170425302�017235� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 5</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test5a.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> whatyoutyped: <BR> <% ns_puts [ns_queryget "whatyoutyped"] %> <P> hiddenfield: <BR> <% ns_puts [ns_queryget "hiddenfield"] %> </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test7b.adp���������������������������������������������������������������0000644�0001750�0001750�00000000126�07170425302�017232� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Top of test7b.adp. <P> <% ns_adp_include "test7c.adp" %> <P> Bottom of test7b.adp. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test7c.adp���������������������������������������������������������������0000644�0001750�0001750�00000000111�07170425302�017225� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Top of test7c.adp. <P> <% ns_adp_return %> <P> Bottom of test7c.adp. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test8a.adp���������������������������������������������������������������0000644�0001750�0001750�00000000737�07170425302�017242� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 8</H2> You should see "blah", what you typed, then nothing for the "notused" variable. <HR> thehidden is: <BR> <%=[ns_queryget "thehidden"] %> <P> What you typed (atext) is: <BR> <%=[ns_queryget "atext"] %> <P> notused is (should be blank): <BR> <%=[ns_queryget "notused"] %> <P> (Check your server log for the query set.) <% ns_set print [ns_conn form $conn] %> </HTML> ���������������������������������aolserver4-4.5.1/tests/adp/test8b.adp���������������������������������������������������������������0000644�0001750�0001750�00000000242�07170425302�017232� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> This page intentionally left blank. See, it works just fine. </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test1.adp����������������������������������������������������������������0000644�0001750�0001750�00000000664�07170425302�017071� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 1</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test1.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Easy Tcl commands will be run: <HR> ns_puts: <BR> <% ns_puts "This is a test.<BR>" %> <P> foreach: <BR> <% foreach thing { one two three four } { ns_puts "Thing number $thing.<BR>" } %> <HR> </BODY> </HTML> ����������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test2.adp����������������������������������������������������������������0000644�0001750�0001750�00000001146�07170425302�017066� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 2</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test2.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Complex Tcl commands will be run: <HR> Do a foreach with ns_set: <BR> <% set myset [ns_set create "My Set"] foreach thing { one two three four } { ns_set put $myset item${thing} "Thing number $thing." } ns_puts "the set is [ns_set size $myset] elements large" for { set i 0 } { $i < [ns_set size $myset] } { incr i } { ns_puts "<BR>[ns_set value $myset $i]" } %> <HR> </BODY> </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test3.adp����������������������������������������������������������������0000644�0001750�0001750�00000000563�07170425302�017071� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 3</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test3.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> ns_adp_include "test1.adp": <BR> <% ns_adp_include "test1.adp" %> <HR> ns_adp_include "test2.adp": <BR> <% ns_adp_include "test2.adp" %> </BODY> </HTML> ���������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test4.adp����������������������������������������������������������������0000644�0001750�0001750�00000000501�07170425302�017062� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 4</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test4.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> ns_adp_include test4.inc spoo blah ick: <BR> <% ns_adp_include test4.inc spoo blah ick %> </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test4.inc����������������������������������������������������������������0000644�0001750�0001750�00000000454�07170425302�017076� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� <P> Test4.inc begins! Hello there! <BR> $Header: /cvsroot/aolserver/aolserver/tests/adp/test4.inc,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> This is test4.inc. <BR> <% ns_adp_bind_args one two three %> The arguments you passed are <%=$one%> <%=$two%> <%=$three%>. <BR> End of test4.inc. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test5.adp����������������������������������������������������������������0000644�0001750�0001750�00000000722�07170425302�017070� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 5</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test5.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> <FORM METHOD=post ACTION="test5a.adp"> Type some stuff: <INPUT TYPE="text" NAME="whatyoutyped" SIZE=80> <INPUT TYPE="hidden" NAME="hiddenfield" VALUE="spoo blah ick"> <INPUT TYPE="submit" VALUE="Submit Me..." NAME="submit"> </FORM> </BODY> </HTML> ����������������������������������������������aolserver4-4.5.1/tests/adp/test6.adp����������������������������������������������������������������0000644�0001750�0001750�00000000524�07170425302�017071� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 6</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test6.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Doing some Tcl execs: <P> <PRE> <% ns_puts [exec "ls" "-al" ] %> <% ns_puts [exec "uname" "-a"] %> </PRE> </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test7.adp����������������������������������������������������������������0000644�0001750�0001750�00000001064�07170425302�017072� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 7</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test7.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> ns_adp_include with ns_adp_return. Both nsd76 and nsd8x should see the following: <SMALL><SMALL> <BR> Top of test7.adp. <BR> Top of test7b.adp. <BR> Top of test7c.adp. <BR> Bottom of test7b.adp. <BR> Bottom of test7.adp. </SMALL></SMALL> <P> <HR> Top of test7.adp. <P> <% ns_adp_include "test7b.adp" %> <P> Bottom of test7.adp. </BODY> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test8.adp����������������������������������������������������������������0000644�0001750�0001750�00000002270�07170425302�017073� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 8</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test8.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Test submitting forms to an ADP. Test POST and GET methods. Ensure that data at the end of the ACTION URL is discarded in both cases. <HR> FORM METHOD=GET ACTION="test8a.adp?notused=blee" <P> <FORM METHOD=GET ACTION="test8a.adp?notused=blee"> <INPUT TYPE=hidden NAME="thehidden" VALUE="blah"> <INPUT TYPE=text NAME="atext"> <INPUT TYPE=submit VALUE="Submit it..."> </FORM> <HR> FORM METHOD=POST ACTION="test8a.adp?notused=blee" <P> <FORM METHOD=POST ACTION="test8a.adp?notused=blee"> <INPUT TYPE=hidden NAME="thehidden" VALUE="blah"> <INPUT TYPE=text NAME="atext"> <INPUT TYPE=submit VALUE="Submit it..."> </FORM> <HR> POST data to a form that doesn't actually use the data. Perhaps useful for scripts with very poor coding style (??). <P> <HR> FORM METHOD=POST ACTION="test8b.adp" <P> <FORM METHOD=POST ACTION="test8b.adp"> <INPUT TYPE=hidden NAME="thehidden" VALUE="blah"> <INPUT TYPE=text NAME="atext"> <INPUT TYPE=submit VALUE="Submit it..."> </FORM> <HR> </HTML> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test9.adp����������������������������������������������������������������0000644�0001750�0001750�00000002006�07170425302�017071� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 9</H2> $Header: /cvsroot/aolserver/aolserver/tests/adp/test9.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> A call to ns_adp_include, while in the same interpreter and thread, still follows the rules of calling a subproc. This means that the variables in the ns_adp_include are not available unless you "global" or "upvar" them. Likewise, variables of the same names in the subproc are unaffected by the calling proc. <p> <b>Results should be:</b> <blockquote> <small> spoo, 123, blahblahblah <br> spoo, 123, blahblahblah <br> unchanged1, unchanged2, unchanged3 <br> spoo, 123, blah <br> unchanged1, unchanged2, unchanged3 <br> spoo, 123, blah </small> </blockquote> <h3>Test begins:</h3> <% set one "spoo" set two 123 set three "blahblahblah" %> <b> <%=$one%>, <%=$two%>, <%=$three%> </b> <hr> <% ns_adp_include "test9.inc" %> <hr> <b> <%=$one%>, <%=$two%>, <%=$three%> </b> <p> &nbsp; <p> </BODY> </HTML> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/adp/test9.inc����������������������������������������������������������������0000644�0001750�0001750�00000000701�07170425302�017076� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� <% ## $Header: /cvsroot/aolserver/aolserver/tests/adp/test9.inc,v 1.1 2000/10/09 20:29:54 kriston Exp $ upvar one eight upvar two nine upvar three ten set one "unchanged1" set two "unchanged2" set three "unchanged3" %> <b> <%=$eight%>, <%=$nine%>, <%=$ten%> </b> <br> <b> <%=$one%>, <%=$two%>, <%=$three%> </b> <br> <% set ten "blah" %> <b> <%=$eight%>, <%=$nine%>, <%=$ten%> </b> <br> <b> <%=$one%>, <%=$two%>, <%=$three%> </b> ���������������������������������������������������������������aolserver4-4.5.1/tests/api/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015350� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/api/ns_job.adp���������������������������������������������������������������0000644�0001750�0001750�00000056222�07745275241�017326� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<center><b>ns_job unit tests</b></center> <% set maxThreads 5 set queueId test_queue_0 # ------------------------------------------------------------------------------ # Return code - succcess. # proc rc.success {} { return 0 } # ------------------------------------------------------------------------------ # Return code - failure # proc rc.failure {} { return 1 } # ------------------------------------------------------------------------------ # boolean true # proc true {} { return 1 } # ------------------------------------------------------------------------------ # boolean false # proc false {} { return 0 } # ------------------------------------------------------------------------------ # Write the message to the page. # proc outputMsg {msg} { ns_adp_puts $msg } # ------------------------------------------------------------------------------ # Write the message to the page and the log. # proc outputMsgLog {msg} { ns_log error $msg ns_adp_puts $msg } # ------------------------------------------------------------------------------ # Busy wait proc - used to test threads. # ns_eval proc foo {value} { set x 0 while {$x < 10000} { incr x } return $value } # ------------------------------------------------------------------------------ # Long Busy wait proc - used to test threads. # ns_eval proc fooLong {value} { set x 0 while {$x < 100000} { incr x } return $value } # ------------------------------------------------------------------------------ # Check if the specified queue exists. # proc queueExists {queueId} { set queues [ns_job queues] if {[lsearch -exact $queues $queueId] == -1} { return [false] } return [true] } # ------------------------------------------------------------------------------ # Create the thread pool queue. Also test the create failure cases. # proc createQueue {queueId} { global maxThreads if {[queueExists $queueId]} { # # Trying to create a queue again should throw an error. # if {[catch { ns_job create -desc "Unit Test Queue \#1" $queueId $maxThreads outputMsgLog "Failure: Create queue should have thrown an erorr.<br>" return [rc.failure] } err]} { return [rc.success] } } else { outputMsgLog "Creating thread pool queue with max thread: $maxThreads ...<br>" ns_job create -desc "Unit Test Queue \#1" $queueId $maxThreads outputMsgLog "Done creating thread pool queue.<br><br>" if {![queueExists $queueId]} { outputMsgLog "Failure: Failed to create queue.<br>" return [rc.failure] } } return [rc.success] } # ------------------------------------------------------------------------------ # Display Queues # proc displayThreadPool {} { if {[catch { set threadList [ns_job threadlist] } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to get thread pool list. Error Info: $errorInfo<br>" return [rc.failure] } array set threadArr $threadList outputMsg "\ <br> <table border=1> <tr> <th colspan=4> ns_job thread pool </th> </tr> <tr> <th>maxthreads</th> <th>numthread</th> <th>numidle</th> <th>req</th> </tr> " outputMsg " <tr> <td>$threadArr(maxthreads)</td> <td>$threadArr(numthreads)</td> <td>$threadArr(numidle)</td> <td>$threadArr(req)</td> </tr> " outputMsg "\ </table> <br> " } # ------------------------------------------------------------------------------ # Display Queues # proc displayQueues {} { if {[catch { set queueList [ns_job queuelist] } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to get queue list. Error Info: $errorInfo<br>" return [rc.failure] } outputMsg "\ <br> <table border=1> <tr> <th colspan=5> ns_job queue list </th> </tr> <tr> <th>name</th> <th>desc</th> <th>maxthread</th> <th>numrunning</th> <th>req</th> </tr> " foreach queue $queueList { array set queueArr $queue outputMsg " <tr> <td>$queueArr(name)</td> <td>$queueArr(desc)</td> <td>$queueArr(maxthreads)</td> <td>$queueArr(numrunning)</td> <td>$queueArr(req)</td> </tr> " } outputMsg "\ </table> <br> " } # ------------------------------------------------------------------------------ # Watch queue jobs progress. # proc watchJobs {queueId} { outputMsgLog "Watch $queueId jobs progress ...<br><br>" set done 0 while {$done == 0} { set done 1 set first [true] if {[catch { set jobList [ns_job joblist $queueId] } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to get job list info. Error Info: $errorInfo" return [rc.failure] } foreach job $jobList { array set jobArr $job if {$first} { outputMsg " <br> <table border=1> <tr> <th colspan=8> $queueId </th> <tr> <tr> <th>id</th> <th>state</th> <th>type</th> <th>request</th> <th>script</th> <th>results</th> <th>time</th> <th>starttime</th> <th>endtime</th> </tr> " set first [false] } outputMsg " <tr> <td>$jobArr(id)</td> <td>$jobArr(state)</td> <td>$jobArr(type)</td> <td>$jobArr(req)</td> <td>$jobArr(script)</td> <td>$jobArr(results)</td> <td align=\"right\">$jobArr(time) ms</td> <td>[clock format $jobArr(starttime) -format {%D %T}]</td> <td>[clock format $jobArr(endtime) -format {%D %T}]</td> </tr> " # # Keep watching if any jobs are queued or running. # if {($jobArr(state) == "scheduled") || ($jobArr(state) == "running") } { set done 0 } } outputMsg " </table> <br> " displayThreadPool ns_sleep 1 } return [rc.success] } # ------------------------------------------------------------------------------ # Watch queue jobs progress. # proc watchAllJobs {} { outputMsgLog "<hr>Watch all queue's jobs progress ...<br><br>" set done 0 while {$done == 0} { set done 1 if {[catch { set queueList [ns_job queues] } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to get queue list. Error Info: $errorInfo" return [rc.failure] } foreach queueId $queueList { set first [true] if {[catch { set jobList [ns_job joblist $queueId] } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to get job list info. Error Info: $errorInfo" return [rc.failure] } foreach job $jobList { array set jobArr $job if {$first} { outputMsg " <br> <table border=1> <tr> <th colspan=8> $queueId </th> <tr> <tr> <th>id</th> <th>state</th> <th>type</th> <th>request</th> <th>script</th> <th>results</th> <th>time</th> <th>starttime</th> <th>endtime</th> </tr> " set first [false] } outputMsg " <tr> <td>$jobArr(id)</td> <td>$jobArr(state)</td> <td>$jobArr(type)</td> <td>$jobArr(req)</td> <td>$jobArr(script)</td> <td>$jobArr(results)</td> <td align=\"right\">$jobArr(time) ms</td> <td>[clock format $jobArr(starttime) -format {%D %T}]</td> <td>[clock format $jobArr(endtime) -format {%D %T}]</td> </tr> " # # Keep watching if any jobs are queued or running. # if {($jobArr(state) == "scheduled") || ($jobArr(state) == "running") } { set done 0 } } } outputMsg " </table> <br> <br> " displayThreadPool ns_sleep 1 outputMsg " <hr> " } return [rc.success] } # ------------------------------------------------------------------------------ # Enqueue jobs # proc enqueueJobs {queueId jobListVar {detached 0}} { upvar $jobListVar jobList set jobList [list] outputMsgLog "Enqueuing jobs ...<br>" if {[catch { for {set i 0} {$i < 10} {incr i} { if {$detached} { lappend jobList [ns_job queue -detached $queueId "foo $i"] } else { lappend jobList [ns_job queue $queueId "foo $i"] } } } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to enqueue jobs. Error Info: $errorInfo" return [rc.failure] } outputMsgLog "Done enqueuing jobs.<br><br>" return [rc.success] } # ------------------------------------------------------------------------------ # Enqueue jobs # proc enqueueLongJobs {queueId jobListVar {detached 0}} { upvar $jobListVar jobList set jobList [list] outputMsgLog "Enqueuing jobs ...<br>" if {[catch { for {set i 0} {$i < 10} {incr i} { if {$detached} { lappend jobList [ns_job queue -detached $queueId "fooLong $i"] } else { lappend jobList [ns_job queue $queueId "fooLong $i"] } } } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to enqueue jobs. Error Info: $errorInfo" return [rc.failure] } outputMsgLog "Done enqueuing jobs.<br><br>" return [rc.success] } # ------------------------------------------------------------------------------ # Wait for each job. # proc waitForEachJob {queueId jobList} { outputMsgLog "Wait for each job to complete ...<br><br><blockquote>" if {[catch { foreach jobId $jobList { outputMsgLog "Job Id: $jobId &nbsp;&nbsp; \ Job Result: [ns_job wait $queueId $jobId]<br>" } } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to wait on job. Error Info: $errorInfo" return [rc.failure] } outputMsgLog "</blockquote><br>Done removing the jobs.<br><br>" return [rc.success] } # ------------------------------------------------------------------------------ # busy wait for all jobs to complete. # proc busyWait {queueId} { set done 0 while {$done == 0} { set done 1 set jobList [ns_job joblist $queueId] foreach job $jobList { array set jobArr $job if {($jobArr(state) == "scheduled") || ($jobArr(state) == "running") } { set done 0 } } } } # ------------------------------------------------------------------------------ # Cancel jobs. # proc cancelJobs {queueId jobList} { outputMsgLog "Cancelling all the jobs...<br>" foreach jobId $jobList { if {[catch { ns_job cancel $queueId $jobId } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "Failed to cancel a job. \ Job ID: $jobId errorInfo: $errorInfo<br>" return [rc.failure] } } outputMsgLog "Done cancelling all the jobs.<br><br>" return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #1 # proc ns_job_unit_test_1 {testNum} { global queueId set count 10 outputMsgLog "<br>Running test # $testNum.<br><br>" # # Enqueue jobs # if {[enqueueJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Wait for each job to complete. # if {[waitForEachJob $queueId $jobList]} { return [rc.failure] } return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #2 # proc ns_job_unit_test_2 {testNum} { global queueId outputMsgLog "<br>Running test # $testNum.<br><br>" # # Enqueue jobs # if {[enqueueJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Watch jobs progress. # watchJobs $queueId # # Remove the jobs from the queue. # if {[waitForEachJob $queueId $jobList]} { return [rc.failure] } return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #3 # proc ns_job_unit_test_3 {testNum} { global queueId outputMsgLog "<br>Running test # $testNum.<br><br>" # # Enqueue jobs # if {[enqueueJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Wait for any job to complete. # outputMsgLog "Wait for any job to complete...<br>" if {[catch { ns_job waitany $queueId } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "waitany failed. Error Info: $errorInfo" return [rc.failure] } outputMsgLog "Done waiting for any job to complete.<br><br>" # # Remove the jobs from the queue. # if {[waitForEachJob $queueId $jobList]} { return [rc.failure] } # # Wait for any job to complete. # outputMsgLog "Wait again for any job (this should not hang) ...<br>" if {[catch { ns_job waitany $queueId } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "waitany failed. Error Info: $errorInfo" return [rc.failure] } outputMsgLog "Done waiting for any job to complete.<br><br>" return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #4 # proc ns_job_unit_test_4 {testNum} { set queueId [ns_job create [ns_job genid]] outputMsgLog "<br>Running test # $testNum.<br><br>" # # Enqueue jobs # if {[enqueueJobs $queueId jobList [true]] != [rc.success]} { return [rc.failure] } # # Watch jobs progress. # watchJobs $queueId # # Test wait # foreach jobId $jobList { if {[catch { ns_job wait $queueId $jobId outputMsgLog "Failure: Wait should not be allowed for detached jobs.<br>" return [rc.failure] } err]} { # wait should have thrown an error. } } ns_job delete $queueId return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #5 # proc ns_job_unit_test_5 {testNum} { global queueId outputMsgLog "<br>Running test # $testNum.<br><br>" # # Enqueue jobs # if {[enqueueJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Wait for any job to complete. # outputMsgLog "Wait for any job to complete...<br>" if {[catch { ns_job waitany $queueId } err]} { global errorInfo set savedInfo $errorInfo outputMsgLog "waitany failed. Error Info: $errorInfo" return [rc.failure] } outputMsgLog "Done waiting for any job to complete.<br><br>" # # Cancel all the jobs # if {[cancelJobs $queueId $jobList] != [rc.success]} { return [rc.failure] } # # Test wait # foreach jobId $jobList { if {[catch { ns_job wait $queueId $jobId outputMsgLog "Failure: Wait should not be allowed for cancelled jobs.<br>" return [rc.failure] } err]} { # wait should have thrown an error. } } # # Enqueue jobs # if {[enqueueJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Watch jobs progress. # busyWait $queueId # # Cancel all the jobs # if {[cancelJobs $queueId $jobList] != [rc.success]} { return [rc.failure] } return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #6 # proc ns_job_unit_test_6 {testNum} { global queueId outputMsgLog "<br>Running test # $testNum.<br><br>" # # Enqueue jobs # if {[enqueueLongJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Wait for any job to complete. # outputMsgLog "Wait for any job to complete...<br>" if {[catch { ns_job waitany -timeout 0:10000 $queueId outputMsgLog "Failed to timeout call." return [rc.failure] } err]} { # # When a message times out, it throws an error. # } outputMsgLog "Done waiting for any job to complete.<br><br>" # # Cancel all the jobs # if {[cancelJobs $queueId $jobList] != [rc.success]} { return [rc.failure] } # # Enqueue jobs # outputMsgLog "Enqueuing jobs ...<br>" if {[enqueueLongJobs $queueId jobList] != [rc.success]} { return [rc.failure] } # # Test wait # foreach jobId $jobList { if {[catch { ns_job wait -timeout 0:10000 $queueId $jobId outputMsgLog "Failed to timeout call." return [rc.failure] } err]} { # wait should have thrown an error. } } # # Cancel all the jobs # if {[cancelJobs $queueId $jobList] != [rc.success]} { return [rc.failure] } return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #7 # proc ns_job_unit_test_7 {testNum} { global queueId outputMsgLog "<br>Running test # $testNum.<br><br>" set queueId_1 [ns_job genid] set queueId_1_return [ns_job create -description "queueId_1" $queueId_1] set queueId_2 [ns_job genid] set queueId_2_return [ns_job create -description "queueId_2" $queueId_2] # # Enqueue jobs # if {[enqueueLongJobs $queueId_1 jobList_1] != [rc.success]} { return [rc.failure] } # # Enqueue jobs # if {[enqueueJobs $queueId_2_return jobList_2] != [rc.success]} { return [rc.failure] } watchAllJobs # # Wait for each job to complete. # if {[waitForEachJob $queueId_2_return $jobList_2]} { return [rc.failure] } # # Wait for each job to complete. # if {[waitForEachJob $queueId_1_return $jobList_1]} { return [rc.failure] } ns_job delete $queueId_1 ns_job delete $queueId_2_return return [rc.success] } # ------------------------------------------------------------------------------ # Unit Test #8 # proc ns_job_unit_test_8 {testNum} { global queueId outputMsgLog "<br>Running test # $testNum.<br><br>" set queueId_1 [ns_job genid] outputMsgLog "Creating new queue: $queueId_1 ...<br>" set queueId_1_return [ns_job create -description "queueId_1" $queueId_1] set queueList [ns_job queuelist] set found [false] foreach queue $queueList { array set queueArr $queue if {[string match $queueArr(name) $queueId_1]} { set found [true] } } if {!$found} { outputMsgLog "Failed to create a new queue" return [rc.failure] } outputMsgLog "Done creating queue.<br><br>" outputMsgLog "Deleting queue: $queueId_1 ...<br>" ns_job delete $queueId_1 set queueList [ns_job queuelist] set found [false] foreach queue $queueList { array set queueArr $queue if {[string match $queueArr(name) $queueId_1]} { set found [true] } } if {$found} { outputMsgLog "Failed to delete queue. Queue Id: $queueId_1" return [rc.failure] } outputMsgLog "Done deleting queue.<br><br>" return [rc.success] } # ------------------------------------------------------------------------------ # Get the test. # 0 (zero) returned if no test is selected. # proc getTestNum {} { set queryOptions [ns_conn query] set testSelected 0 foreach item $queryOptions { set pair [split $item "="] if {[llength $pair] != 2} { return $testSelected } set opt [lindex $pair 0] set value [lindex $pair 1] if {$opt == "testSelected"} { set testSelected $value } } return $testSelected } # ------------------------------------------------------------------------------ # Display menu # proc displayMenu {} { outputMsg "\ Select a test to run:<br> <ul> <li><a href=ns_job.adp>Menu</a> <li><a href=ns_job.adp?testSelected=1>Test \#1 - Basic funcationality</a> <li><a href=ns_job.adp?testSelected=2>Test \#2 - List Jobs</a> <li><a href=ns_job.adp?testSelected=3>Test \#3 - Wait Any</a> <li><a href=ns_job.adp?testSelected=4>Test \#4 - Detached</a> <li><a href=ns_job.adp?testSelected=5>Test \#5 - Cancel</a> <li><a href=ns_job.adp?testSelected=6>Test \#6 - Timeout</a> <li><a href=ns_job.adp?testSelected=7>Test \#7 - Generate Queue ID</a> <li><a href=ns_job.adp?testSelected=8>Test \#8 - Delete Queue</a> </ul> <br> <hr> <br> " } # ------------------------------------------------------------------------------ # Main # displayMenu if {[createQueue $queueId] == [rc.failure]} { outputMsgLog "Failed to create queue" return [rc.failure] } displayThreadPool displayQueues set testNum [getTestNum] switch -glob -- $testNum { 0 { } 1 { if {[ns_job_unit_test_1 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 2 { if {[ns_job_unit_test_2 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 3 { if {[ns_job_unit_test_3 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 4 { if {[ns_job_unit_test_4 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 5 { if {[ns_job_unit_test_5 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 6 { if {[ns_job_unit_test_6 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 7 { if {[ns_job_unit_test_7 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } 8 { if {[ns_job_unit_test_8 $testNum] != [rc.success]} { outputMsgLog "<br>Test $testNum failed!<br>" } else { outputMsgLog "<br>Test # $testNum Complete.<br>" } } default { outputMsgLog "Unknown option. $testNum" } } %> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/api/ns_conn.adp��������������������������������������������������������������0000644�0001750�0001750�00000001557�07317505620�017502� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<xmp> ns_conn authpassword = <%= [ns_conn authpassword] %> ns_conn authuser = <%= [ns_conn authuser] %> ns_conn contentlength = <%= [ns_conn contentlength] %> ns_conn driver = <%= [ns_conn driver] %> ns_conn form = <%= [ns_conn form] %> ns_conn headers = <%= [ns_conn headers] %> ns_conn host = <%= [ns_conn host] %> ns_conn isconnected = <%= [ns_conn isconnected] %> ns_conn location = <%= [ns_conn location] %> ns_conn method = <%= [ns_conn method] %> ns_conn outputheaders = <%= [ns_conn outputheaders ] %> ns_conn peeraddr = <%= [ns_conn peeraddr] %> ns_conn port = <%= [ns_conn port] %> ns_conn protocol = <%= [ns_conn protocol] %> ns_conn query = <%= [ns_conn query] %> ns_conn request = <%= [ns_conn request] %> ns_conn url = <%= [ns_conn url] %> ns_conn urlc = <%= [ns_conn urlc] %> ns_conn urlv = <%= [ns_conn urlv] %> ns_conn version = <%= [ns_conn version] %> </xmp> �������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/api/ns_localtime.adp���������������������������������������������������������0000644�0001750�0001750�00000003301�07305054702�020500� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<xmp> format: seconds (0-59) minutes (0-59) hours (0-23) dayofmonth (1-31) monthofyear (0-11) year (year-1900)* dayofweek (Sunday=0) dayofyear (0-365) 1 if Daylight Savings Time is in effect </xmp> <hr size="1" noshade> <xmp> [ns_localtime] = <%= [ns_localtime] %> [ns_gmtime] = <%= [ns_gmtime] %> [ns_localtime GMT] = <%= [ns_localtime GMT] %> [ns_localtime UTC] = <%= [ns_localtime UTC] %> [ns_localtime EST5EDT] = <%= [ns_localtime EST5EDT] %> [ns_localtime CST6CDT] = <%= [ns_localtime CST6CDT] %> [ns_localtime MST7MDT] = <%= [ns_localtime MST7MDT] %> [ns_localtime PST8PDT] = <%= [ns_localtime PST8PDT] %> [ns_localtime US/Eastern] = <%= [ns_localtime US/Eastern] %> [ns_localtime US/Central] = <%= [ns_localtime US/Central] %> [ns_localtime US/Mountain] = <%= [ns_localtime US/Mountain] %> [ns_localtime US/Pacific] = <%= [ns_localtime US/Pacific] %> GMT offset based timezones are defined by POSIX as being east of UTC instead of west, or basically opposite of what you'd expect. [ns_localtime GMT+5] = <%= [ns_localtime GMT+5] %> [ns_localtime GMT+4] = <%= [ns_localtime GMT+4] %> [ns_localtime GMT+3] = <%= [ns_localtime GMT+3] %> [ns_localtime GMT+2] = <%= [ns_localtime GMT+2] %> [ns_localtime GMT+1] = <%= [ns_localtime GMT+1] %> [ns_localtime GMT] = <%= [ns_localtime GMT] %> [ns_localtime GMT-1] = <%= [ns_localtime GMT-1] %> [ns_localtime GMT-2] = <%= [ns_localtime GMT-2] %> [ns_localtime GMT-3] = <%= [ns_localtime GMT-3] %> [ns_localtime GMT-4] = <%= [ns_localtime GMT-4] %> [ns_localtime GMT-5] = <%= [ns_localtime GMT-5] %> </xmp> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015370� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/http-test-config.tcl�����������������������������������������������������0000644�0001750�0001750�00000035413�10113176567�021302� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/http-test-config.tcl,v 1.1 2004/08/25 20:58:31 dossy Exp $ # # # sample-config.tcl -- Example config script. # # This script is an AOLserver configuration script with # several example sections. To use: # # % cp sample-config.tcl myconfig.tcl # % vi myconfig.tcl (edit as needed) # % bin/nsd -ft myconfig.tcl (test in foreground) # % bin/nsd -t myconfig.tcl (run in background) # % gdb bin/nsd # (gdb) run -fdt myconfig.tcl (run in debugger) # # # Set some Tcl variables that are commonly used throughout this file. # set httpport 8000 set httpsport 8443 # The hostname and address should be set to actual values. set hostname [ns_info hostname] set address [ns_info address] set servername "server1" set serverdesc "Server Name" set homedir [file dirname [ns_info config]] set bindir [file dirname [ns_info nsd]] set pageroot ${homedir}/servers/${servername}/pages set directoryfile index.adp,index.html,index.htm,index.xhtml,index.xht set shlibext [info sharedlibextension] # nsssl: Only loads if keyfile.pem and certfile.pem exist. #set sslmodule nsssl${shlibext} ;# Domestic 128-bit/1024-bit SSL. set sslmodule nsssle${shlibext} ;# Exportable 40-bit/512-bit SSL. set sslkeyfile ${homedir}/servers/${servername}/modules/nsssl/keyfile.pem set sslcertfile ${homedir}/servers/${servername}/modules/nsssl/certfile.pem # # Global server parameters # ns_section "ns/parameters" ns_param home $homedir ns_param debug false # # I18N Parameters # #ns_param HackContentType false ;# automatic adjustment of response # content-type header to include charset # This defaults to True. ns_param OutputCharset iso-8859-1 ;# Default output charset. When none specified, # no character encoding of output is performed. ns_param URLCharset iso-8859-1 ;# Default Charset for Url Encode/Decode. # When none specified, no character set encoding # is performed. #ns_param PreferredCharsets { utf-8 iso-8859-1 } ;# This parameter supports output # encoding arbitration. # # MIME types. # # Note: AOLserver already has an exhaustive list of MIME types, but in # case something is missing you can add it here. # ns_section "ns/mimetypes" ns_param default "*/*" ;# MIME type for unknown extension. ns_param noextension "*/*" ;# MIME type for missing extension. #ns_param ".xls" "application/vnd.ms-excel" # # I18N Mime-types; define content-type header values # to be mapped from these file-types. # Note that you can map file-types of adp files to control # the output encoding through mime-type specificaion. # Remember to add an adp mapping for that extension. # ns_param .adp "text/html; charset=iso-8859-1" ns_param .u_adp "text/html; charset=UTF-8" ns_param .gb_adp "text/html; charset=GB2312" ns_param .sjis_html "text/html; charset=shift_jis" ns_param .sjis_adp "text/html; charset=shift_jis" ns_param .gb_html "text/html; charset=GB2312" # # I18N File-type to Encoding mappings # ns_section "ns/encodings" ns_param .utf_html "utf-8" ns_param .sjis_html "shiftjis" ns_param .gb_html "gb2312" ns_param .big5_html "big5" ns_param .euc-cn_html "euc-cn" # # Note: you will need to include file-type to encoding mappings # for ANY source files that are to be used, to allow the # server to handle them properly. E.g., the following # asserts that the GB-producing .adp files are themselves # encoded in GB2312 (this is not simply assumed). # ns_param .gb_adp "gb2312" # # Thread library (nsthread) parameters # ns_section "ns/threads" #ns_param stacksize [expr 128*1024] ;# Per-thread stack size. ############################################################ # # Server-level configuration # # There is only one server in AOLserver, but this is helpful when multiple # servers share the same configuration file. This file assumes that only # one server is in use so it is set at the top in the "server" Tcl variable. # Other host-specific values are set up above as Tcl variables, too. # ns_section "ns/servers" ns_param $servername $serverdesc # # Server parameters # ns_section "ns/server/${servername}" ns_param directoryfile $directoryfile ns_param pageroot $pageroot ns_param enabletclpages false ;# Parse *.tcl files in pageroot. # # Server-level I18N Parameters can be specified here, to override # the global ones for this server. These are: # HackContentType # OutputCharset # URLCharset # See the global parameter I18N section for a description of these. # # # Scaling and Tuning Options # # Note: These values aren't necessarily the defaults. # #ns_param connsperthread 0 ;# Normally there's one conn per thread #ns_param flushcontent false ;# Flush all data before returning #ns_param maxconnections 100 ;# Max connections to put on queue #ns_param maxdropped 0 ;# Shut down if dropping too many conns #ns_param maxthreads 20 ;# Tune this to scale your server #ns_param minthreads 0 ;# Tune this to scale your server #ns_param threadtimeout 120 ;# Idle threads die at this rate # # ADP (AOLserver Dynamic Page) configuration # ns_section "ns/server/${servername}/adp" ns_param map "/*.adp" ;# Extensions to parse as ADP's. # I18N Note: will need to define I18N specifying mappings of ADP's here as well. ns_param map "/*.u_adp" ns_param map "/*.gb_adp" ns_param map "/*.sjis_adp" #ns_param map "/*.html" ;# Any extension can be mapped. ns_param enableexpire false ;# Set "Expires: now" on all ADP's. ns_param enabledebug false ;# Allow Tclpro debugging with "?debug". # ADP special pages #ns_param errorpage ${pageroot}/errorpage.adp ;# ADP error page. # # Socket driver module (HTTP) -- nssock # ns_section "ns/server/${servername}/module/nssock" ns_param port $httpport ns_param hostname $hostname ns_param address $address # # Socket driver module (HTTPS) -- nsssl # # nsssl does not load unless sslkeyfile/sslcertfile exist (above). # ns_section "ns/server/${servername}/module/nsssl" ns_param port $httpsport ns_param hostname $hostname ns_param address $address ns_param keyfile $sslkeyfile ns_param certfile $sslcertfile # Fast Path -- # # Fast path configuration is used to configure options used for serving # static content, and also provides options to automatically display # directory listings. # # Parameters: # # cache Boolean. Enable cache for normal URLs. # Optional, default is false. # cachemaxsize Integer. Size of fast path cache. # Optional, default is 5120000. # cachemaxentry Integer. Largest file size allowed in cache. # Optional, default is cachemaxsize / 10. # mmap Boolean. Use mmap() for cache. # Optional, default is false. # directoryfile String. Directory index/default page to # look for. Optional, default is directoryfile # parameter set in ns/server/${servername} section. # directorylisting String. Directory listing style. Optional, # Can be "fancy" or "simple". # directoryproc String. Name of Tcl proc to use to display # directory listings. Optional, default is to use # _ns_dirlist. You can either specify directoryproc, # or directoryadp - not both. # directoryadp String. Name of ADP page to use to display # directory listings. Optional. You can either # specify directoryadp or directoryproc - not both. # # Example: # # ns_section "ns/server/${servername}/fastpath" # ns_param directorylisting fancy # # See also: # # /aolserver/nsd/fastpath.c # /aolserver/tcl/fastpath.tcl # # Example: Control port configuration. # # To enable: # # 1. Define an address and port to listen on. For security # reasons listening on any port other then 127.0.0.1 is # not recommended. # # 2. Decided whether or not you wish to enable features such # as password echoing at login time, and command logging. # # 3. Add a list of authorized users and passwords. The entires # take the following format: # # <user>:<encryptedPassword>: # # You can use the ns_crypt Tcl command to generate an encrypted # password. The ns_crypt command uses the same algorithm as the # Unix crypt(3) command. You could also use passwords from the # /etc/passwd file. # # The first two characters of the password are the salt - they can be # anything since the salt is used to simply introduce disorder into # the encoding algorithm. # # ns_crypt <key> <salt> # ns_crypt x t2 # # The configuration example below adds the user "nsadmin" with a # password of "x". # # 4. Make sure the nscp module is loaded in the modules section. # #ns_section "ns/server/${servername}/module/nscp" # ns_param address 127.0.0.1 # ns_param port 9999 # ns_param echopassword 1 # ns_param cpcmdlogging 1 # #ns_section "ns/server/${servername}/module/nscp/users" # ns_param user "nsadmin:t2GqvvaiIUbF2:" # #ns_section "ns/server/${servername}/modules" # ns_param nscp ${bindir}/nscp${shlibext} # # # Access log -- nslog # ns_section "ns/server/${servername}/module/nslog" ns_param rolllog true ;# Should we roll log? ns_param rollonsignal true ;# Roll log on SIGHUP. ns_param rollhour 0 ;# Time to roll log. ns_param maxbackup 5 ;# Max number to keep around when rolling. ns_param logreqtime true ;# Log the execution time of request # # CGI interface -- nscgi # # WARNING: These directories must not live under pageroot. # ns_section "ns/server/${servername}/module/nscgi" #ns_param map "GET /cgi /usr/local/cgi" ;# CGI script file dir (GET). #ns_param map "POST /cgi /usr/local/cgi" ;# CGI script file dir (POST). # # Modules to load # ns_section "ns/server/${servername}/modules" ns_param nssock ${bindir}/nssock${shlibext} #ns_param nslog ${bindir}/nslog${shlibext} #ns_param nscgi ${bindir}/nscgi${shlibext} #ns_param nsperm ${bindir}/nsperm${shlibext} # # nsssl: Only loads if sslcertfile and sslkeyfile exist (see above). # #if { [file exists $sslcertfile] && [file exists $sslkeyfile] } { # ns_param nsssl ${bindir}/${sslmodule} #} else { # ns_log warning "config.tcl: nsssl not loaded -- key/cert files do not exist." #} # # Example: Host headers based virtual servers. # # To enable: # # 1. Load comm driver(s) globally. # 2. Configure drivers as in a virtual server. # 3. Add a "servers" section to map virtual servers to Host headers. # 4. Ensure "defaultserver" in comm driver refers to a defined # virtual server. # #ns_section "ns/modules" # ns_param nssock ${bindir}/nssock${shlibext} # #ns_section "ns/module/nssock" # ns_param port $httpport # ns_param hostname $hostname # ns_param address $address # ns_param defaultserver server1 # #ns_section "ns/module/nssock/servers" # ns_param server1 $hostname:$httpport # # # Example: Multiple connection thread pools. # # To enable: # # 1. Define one or more thread pools. # 2. Configure pools as with the default server pool. # 3. Map method/URL combinations to the pools # # All unmapped method/URL's will go to the default server pool. # #ns_section ns/server/server1/pools #ns_section slow "Slow requests here." #ns_section fast "Fast requests here." # #ns_section ns/server/server1/pool/slow #ns_param map {POST /slowupload.adp} #ns_param maxconnections 100 ;# Max connections to put on queue #ns_param maxdropped 0 ;# Shut down if dropping too many conns #ns_param maxthreads 20 ;# Tune this to scale your server #ns_param minthreads 0 ;# Tune this to scale your server #ns_param threadtimeout 120 ;# Idle threads die at this rate # #ns_section ns/server/server1/pool/fast #ns_param map {GET /faststuff.adp} #ns_param maxthreads 10 # # # Example: Web based stats interface. # # To enable: # # 1. Configure whether or not stats are enabled. (Optional: default = false) # 2. Configure URL for statistics. (Optional: default = /_stats) # # http://<host>:<port>/_stats # # 3. Configure user. (Optional: default = aolserver) # 4. Configure password. (Optional: default = stats) # # For added security it is recommended that configure your own # URL, user, and password instead of using the default values. # #ns_section ns/server/stats # ns_param enabled 1 # ns_param url /aolserver/stats # ns_param user nsadmin # ns_param password 23dfs!d # �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/ns_addrbyhost.test�������������������������������������������������������0000644�0001750�0001750�00000004334�10155103337�021130� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/ns_addrbyhost.test,v 1.3 2004/12/06 16:20:47 dossy Exp $ # source harness.tcl load libnsd.so package require tcltest 2.2 namespace import -force ::tcltest::* test ns_addrbyhost {ns_addrbyhost} { assertEquals "127.0.0.1" [ns_addrbyhost "localhost"] # ns_log messages confuse tcltest into thinking the test had a failure ns_logctl hold assertEquals 1 [catch {ns_addrbyhost "this_should_not_resolve"} msg] assertEquals "could not lookup this_should_not_resolve" $msg ns_logctl truncate # RFE #999452: Add -all switch to ns_addrbyhost # # This test will fail if we don't have connectivity/DNS service # or if the DNS entries change in a significant way. assertEquals 1 [expr {[llength [ns_addrbyhost -all "www.google.com"]] > 1}] assertEquals 1 [llength [ns_addrbyhost "www.google.com"]] } {} cleanupTests ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/http.test����������������������������������������������������������������0000644�0001750�0001750�00000006324�10155103337�017245� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/http.test,v 1.2 2004/12/06 16:20:47 dossy Exp $ # source harness.tcl load libnsd.so package require tcltest 2.2 namespace import -force ::tcltest::* if {[info exists ::env(AOLSERVER_HTTP_TEST)]} { testConstraint serverTests true } else { puts " To enable HTTP compliance tests, set environment variable AOLSERVER_HTTP_TEST=hostname:port of the server running http-test-config.tcl. " } if {[testConstraint serverTests]} { foreach {host port} [split $::env(AOLSERVER_HTTP_TEST) :] break } set setup { set sock [socket $host $port] fconfigure $sock -translation binary -encoding binary -buffering none } set cleanup { close $sock } set test 0 test http-1.[incr test] {bad method} \ -constraints serverTests -setup $setup -body { puts $sock "." set response [read $sock] assertEquals {} $response } -cleanup $cleanup -result {} test http-1.[incr test] {HTTP/0.9 GET} \ -constraints serverTests -setup $setup -body { puts $sock "GET /asdfasdfasdf\n" set response [read $sock] assertEquals 0 [regexp {^HTTP/\S+ \d+ .*} $response] assertEquals 1 [regexp {<TITLE>Not Found</TITLE>} $response] } -cleanup $cleanup -result {} test http-1.[incr test] {HTTP/1.0 GET} \ -constraints serverTests -setup $setup -body { puts $sock "GET /asdfasdfasdf HTTP/1.0\n" set response [read $sock] assertEquals 1 [regexp {^HTTP/\S+ \d+ .*} $response] assertEquals 1 [regexp {<TITLE>Not Found</TITLE>} $response] } -cleanup $cleanup -result {} test http-1.[incr test] {HTTP/1.1 GET} \ -constraints serverTests -setup $setup -body { puts $sock "GET /asdfasdfasdf HTTP/1.0\nHost: $host:$port\n" set response [read $sock] assertEquals 1 [regexp {^HTTP/\S+ \d+ .*} $response] assertEquals 1 [regexp {<TITLE>Not Found</TITLE>} $response] } -cleanup $cleanup -result {} cleanupTests ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/ns_hostbyaddr.test�������������������������������������������������������0000644�0001750�0001750�00000003566�10155103337�021136� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/ns_hostbyaddr.test,v 1.2 2004/12/06 16:20:47 dossy Exp $ # source harness.tcl load libnsd.so package require tcltest 2.2 namespace import -force ::tcltest::* test ns_hostbyaddr {ns_hostbyaddr} { assertEquals "localhost" [ns_hostbyaddr "127.0.0.1"] # ns_log messages confuse tcltest into thinking the test had a failure ns_logctl hold assertEquals 1 [catch {ns_hostbyaddr "0.0.0.0"} msg] assertEquals "could not lookup 0.0.0.0" $msg ns_logctl truncate } {} cleanupTests ������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/ns_hrefs.test������������������������������������������������������������0000644�0001750�0001750�00000004466�10155103337�020102� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/ns_hrefs.test,v 1.2 2004/12/06 16:20:47 dossy Exp $ # source harness.tcl load libnsd.so package require tcltest 2.2 namespace import -force ::tcltest::* test ns_hrefs-1.1 {ns_hrefs} { assertEquals "" [ns_hrefs {}] assertEquals "" [ns_hrefs {<a>}] assertEquals "{}" [ns_hrefs {<a href="">}] assertEquals "{}" [ns_hrefs {<a href=''>}] assertEquals "simple" [ns_hrefs {<a href="simple">}] assertEquals "href=tricky" [ns_hrefs {<a href="href=tricky">}] assertEquals "first" [ns_hrefs {<a href="first" href="second">}] assertEquals "naked" [ns_hrefs {<a href=naked dummy>}] assertEquals "" [ns_hrefs {a href="bogus">}] assertEquals "" [ns_hrefs {<a href="bogus"}] assertEquals "" [ns_hrefs {<a href "bogus">}] assertEquals "" [ns_hrefs {<a "href="bogus"">}] # [ 995078 ] ns_hrefs only checks first attribute in <a> assertEquals "hard" [ns_hrefs {<a dummy href="hard">}] } {} cleanupTests ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/harness.tcl��������������������������������������������������������������0000644�0001750�0001750�00000004325�10155103337�017533� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/harness.tcl,v 1.4 2004/12/06 16:20:47 dossy Exp $ # proc test {script} { set ::assertionCount 0 if {[set res [catch [list eval $script] msg]]} { ns_adp_puts -nonewline "FAIL\n$::assertionCount assertions\n$msg" } else { ns_adp_puts -nonewline "PASS\n$::assertionCount assertions" } } proc assert {bool message} { if {!$bool} { return -code return $message } } proc assertEquals {expected actual {message ""}} { if {![info exists ::assertionCount]} { set ::assertionCount 0 } incr ::assertionCount if {![string length $message]} { set message "no description provided" } set message "(#$::assertionCount) $message" return -code [catch {assert [string equal $expected $actual] \ "$message\n Expected: $expected\n Actual: $actual"} msg] $msg } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/new/all.tcl������������������������������������������������������������������0000755�0001750�0001750�00000003776�10117446526�016664� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # the next line restarts using tclsh \ exec tclsh "$0" "$@" # # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/tests/new/all.tcl,v 1.3 2004/09/08 00:07:50 dossy Exp $ # package require Tcl 8.4 if {![info exists ::tcl_platform(threaded)] || !$::tcl_platform(threaded)} { error "tests must run from a threaded tclsh" } package require tcltest 2.2 set LD_LIBRARY_PATH [list] if {[info exists env(LD_LIBRARY_PATH)]} { lappend LD_LIBRARY_PATH $env(LD_LIBRARY_PATH) } lappend LD_LIBRARY_PATH ../../nsd ../../nsthread set env(LD_LIBRARY_PATH) [join $LD_LIBRARY_PATH :] tcltest::configure -testdir [file dirname [info script]] eval tcltest::configure $argv tcltest::runAllTests ��aolserver4-4.5.1/tests/sec/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015351� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/sec/test1.adp����������������������������������������������������������������0000644�0001750�0001750�00000000421�07170425302�017066� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 1</H2> $Header: /cvsroot/aolserver/aolserver/tests/sec/test1.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Security tests <P> <I>Not written yet</I> </BODY> </HTML> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/tcl/�������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015361� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/tcl/test1a.tcl���������������������������������������������������������������0000644�0001750�0001750�00000000611�07170425302�017256� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ns_return 200 text/html " <HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR=\"#ffffff\"> the hidden is: <BR> [ns_queryget "thehidden"] <P> What you typed (atext) is: <BR> [ns_queryget "atext"] <P> notused is (should be blank): <BR> [ns_queryget "notused"] <P> (Check your server log for the query set.) [ns_set print [ns_conn form $conn ]] </BODY> </HTML> " �����������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/tcl/test1b.tcl���������������������������������������������������������������0000644�0001750�0001750�00000000312�07170425302�017255� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ns_return 200 text/html " <HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR=\"#ffffff\"> This page intentionally left blank. See, I told you it worked. </BODY> </HTML> " ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/tcl/test1.tcl����������������������������������������������������������������0000644�0001750�0001750�00000002524�07170425302�017122� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ns_return 200 text/html " <HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR=\"#ffffff\"> <H2>Test 1</H2> <P> Test submitting forms to a Tcl page. Tcl pages are nothing more than Tcl scripts that are sourced in-place in your pageroot. They are far inferior to ADP's but some really antiquated applications still use them. You need to enable Tcl pages in your nsd.tcl for these tests to work at all -- they are off by default since they represent a significant security risk. <HR> FORM METHOD=GET ACTION=\"test1a.tcl\" <P> <FORM METHOD=GET ACTION=\"test1a.tcl\"> <INPUT TYPE=hidden NAME=\"thehidden\" VALUE=\"blah\"> <INPUT TYPE=text NAME=\"atext\"> <INPUT TYPE=submit VALUE=\"Submit it...\"> </FORM> <HR> FORM METHOD=POST ACTION=\"test1a.tcl\" <P> <FORM METHOD=POST ACTION=\"test1a.tcl\"> <INPUT TYPE=hidden NAME=\"thehidden\" VALUE=\"blah\"> <INPUT TYPE=text NAME=\"atext\"> <INPUT TYPE=submit VALUE=\"Submit it...\"> </FORM> <HR> This page does nothing with the data and merely returns an html page. Only the most sloppy scripts do this in real life, though. <BR> FORM METHOD=GET ACTION=\"test1b.tcl\" <P> <FORM METHOD=POST ACTION=\"test1b.tcl\"> <INPUT TYPE=hidden NAME=\"thehidden\" VALUE=\"blah\"> <INPUT TYPE=text NAME=\"atext\"> <INPUT TYPE=submit VALUE=\"Submit it...\"> </FORM> </BODY> </HTML> " ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/cdev/������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015520� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/cdev/test1.adp���������������������������������������������������������������0000644�0001750�0001750�00000000732�07170425302�017242� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 1</H2> $Header: /cvsroot/aolserver/aolserver/tests/cdev/test1.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Run a custom Tcl command "ns_hello" from nsexample.so: <P> <% if { [info commands ns_hello] == "" } { ns_puts "Sorry, you needed to load nsexample.so into your server." } else { ns_puts [ns_hello "Confident Tester Person"] } %> </BODY> </HTML> ��������������������������������������aolserver4-4.5.1/tests/dbase/�����������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015655� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/dbase/test1.adp��������������������������������������������������������������0000644�0001750�0001750�00000000425�07170425302�017376� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>Test 1</H2> $Header: /cvsroot/aolserver/aolserver/tests/dbase/test1.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Database access. <P> <I>Not written yet</I> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/tests.html�������������������������������������������������������������������0000755�0001750�0001750�00000001004�07170655010�016620� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>tests</title> </head> <body bgcolor="#ffffff"> <h2>AOLserver Confidence Tests</h2> <pre>$Header: /cvsroot/aolserver/aolserver/tests/tests.html,v 1.1 2000/10/10 18:03:52 kriston Exp $ </pre> <br> Type "gmake install-test PREFIX=/your/directory/" to install the tests under your server's pageroot.&nbsp; Visit the "/test/" directory of your server to continue.<br> <br> <br> Format for patches and test cases goes here.<br> <br> <br> <br> <br> <br> <br> </body> </html> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/index.adp��������������������������������������������������������������������0000644�0001750�0001750�00000003535�07170425302�016374� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<HTML> <HEAD> <TITLE>AOLserver Confidence Test</TITLE> </HEAD> <BODY BGCOLOR="#ffffff"> <H2>AOLserver Confidence Tests</H2> $Header: /cvsroot/aolserver/aolserver/tests/index.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <P> Smoke-test your server with these ADP scripts. More and more tests will be added soon. <H3>Core AOLserver and ADP Functionality</H3> <BLOCKQUOTE> <A HREF="adp/test1.adp">Regular Tcl commands</A> <BR> <A HREF="adp/test2.adp">Complex Tcl commands</A> <BR> <A HREF="adp/test3.adp">ns_adp_include</A> <BR> <A HREF="adp/test4.adp">ns_adp_include with args</A> <BR> <A HREF="adp/test5.adp">POST data to an ADP</A> <BR> <A HREF="adp/test6.adp">Do a Tcl exec on something</A> <BR> <A HREF="adp/test7.adp">Test ns_adp_include with ns_adp_return</A> <BR> <A HREF="adp/test8.adp">Test GET and POST method forms</A> <BR> <A HREF="adp/test9.adp">ADP variable scope with ns_adp_include</A> </BLOCKQUOTE> <H3>Selected C API Functions</H3> <BLOCKQUOTE> <A HREF="cdev/test1.adp">Run a custom Tcl command (needs nsexample.so)</A> <BR> </BLOCKQUOTE> <H3>Database</H3> <BLOCKQUOTE> <A HREF="dbase/test1.adp"></A>Select queries <BR> <A HREF="dbase/test2.adp"></A>Insert queries <BR> <A HREF="dbase/test3.adp"></A>DDL queries </BLOCKQUOTE> <H3>Security</H3> <BLOCKQUOTE> <A HREF="sec/test1.adp"></A>User access control <BR> <A HREF="sec/test2.adp"></A>Host access control <BR> <A HREF="sec/test3.adp"></A>Safe-Tcl interpreter </BLOCKQUOTE> <H3>Tcl pages in the pageroot (*.tcl)</H3> You must have Tcl pages enabled to try these tests. Tcl pages are only used by the more antiquated applications out there and represent a significant security risk. If your application is still using Tcl pages, it's time to convert to ADP. <BLOCKQUOTE> <A HREF="tcl/test1.tcl">Test POST and GET method forms</A> </BLOCKQUOTE> </BODY> </HTML> �������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/nstelemetry.adp��������������������������������������������������������������0000644�0001750�0001750�00000022226�07170425302�017636� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<% ## Nasty-cheap authenticator. if {[ns_conn authuser] != "nsadmin" || [ns_conn authpassword] != "x"} { ns_returnunauthorized ns_adp_break } ## Expires: now ns_set update [ns_conn outputheaders] "Expires" "now" %> <html> <head> <title>AOLserver Telemetry</title> <STYLE> BODY { background: #ffffff; font-family: helvetica; font-size: 10pt; } H1 { font-family: helvetica; font-size: 18pt; } H2 { font-family: helvetica; font-size: 16pt; } H3 { font-family: helvetica; font-size: 14pt; } TD { background: cyan; font-family: helvetica; font-size: 10pt; } PRE { font-family: helvetica; font-size: 10pt; } FORM { font-family: helvetica; font-size: 8pt; } </STYLE> </head> <body> <% ## For Tcl procs: display proc body and immediately return. if { [ns_queryget "tclproc"] != "" } { set tclproc [ns_queryget tclproc] set procbody [info body $tclproc] ns_puts " <h2>Tcl Proc: $tclproc</h2> <blockquote> <tt><b>$tclproc [info args $tclproc]</b></tt> <form target=nothing> <textarea cols=90 rows=25>$procbody</textarea> </blockquote> </form> </body> </html> " ns_adp_return } %> <h2>AOLserver Telemetry</h2> $Header: /cvsroot/aolserver/aolserver/tests/nstelemetry.adp,v 1.1 2000/10/09 20:29:54 kriston Exp $ <blockquote> This is <b>nstelemetry</b> running at <%=[ns_conn url]%> on <%=[ns_conn server]%> at <%=[ns_httptime [ns_time]]%>. <br> For easier reading of these data your browser should support Style Sheets at least as well as <a href="http://home.netscape.com/">Netscape 4.x</a> does -- MSIE 5.5 users will see inconsistencies. </blockquote> <p> <h3>Server Information</h3> <blockquote> <table> <% ## Server information. ## Things that don't go here: threads, callbacks, scheduled, sockcallbacks foreach item { server hostname address pid uptime boottime home config log pageroot tcllib nsd argv0 name version label builddate platform } { ## Note the catch so this works on all AOLserver revisions. if [catch { set itemval [ns_info $item] if [regexp {boottime} $item] { set itemval "[ns_httptime $itemval]" } ns_puts "<tr> <td align=right valign=top><b>$item:</b></td> <td align=left valign=top>$itemval &nbsp;</td> </tr>" } errMsg] { ## Catch commands that don't exist. ns_puts "<tr> <td align=right><b>$item:</b></td><td align=left>n/a</td> </tr>" continue } } %> </table> </blockquote> <h3>Memory Cache</h3> <blockquote> <table> <tr> <td align=left valign=top><b>name</b></td> <td align=left valign=top><b>stats</b></td> </tr> <% foreach item [lsort [ns_cache_names]] { ns_puts "<tr><td align=left valign=top>$item</td>" ns_puts "<td align=left valign=top>[ns_cache_stats $item]&nbsp;</td></tr>" } %> </table> </blockquote> <h3>Thread Locks</h3> <blockquote> <table> <tr> <td align=left valign=top><b>name</b></td> <td align=left valign=top><b>owner</b></td> <td align=left valign=top><b>id</b></td> <td align=left valign=top><b>nlock</b></td> <td align=left valign=top><b>nbusy</b></td> </tr> <% foreach item [lsort [ns_info locks]] { ns_puts "<tr>" ns_puts "<td align=left valign=top>[lindex $item 0]&nbsp;</td>" for { set i 1 } { $i < [llength $item] } { incr i } { ns_puts "<td align=right valign=top>&nbsp;[lindex $item $i]</td>" } ns_puts "</tr>" } %> </table> </blockquote> <h3>Running Threads</h3> <blockquote> <table> <tr> <td align=left valign=top><b>name</b></td> <td align=left valign=top><b>parent</b></td> <td align=left valign=top><b>tid</b></td> <td align=left valign=top><b>flags</b></td> <td align=left valign=top><b>ctime</b></td> <td align=left valign=top><b>proc</b></td> <td align=left valign=top><b>arg</b></td> </tr> <% foreach item [lsort [ns_info threads]] { ns_puts "<tr>" for { set i 0 } { $i < 7 } { incr i } { ns_puts "<td align=left valign=top><pre>" if { $i != 4 } { ns_puts "[lindex $item $i]" } else { ns_puts "[ns_httptime [lindex $item $i]]" } ns_puts "</pre></td>" } ns_puts "</tr>" } %> </table> </blockquote> <h3>Scheduled Procedures</h3> <blockquote> <table> <tr> <td align=left valign=bottom><b>proc</b></td> <td align=left valign=bottom><b>id</b></td> <td align=left valign=bottom><b>flags</b></td> <td align=left valign=bottom><b>interval</b></td> <td align=left valign=bottom><b>nextqueue<br>lastqueue<br>laststart<br>lastend<br></b></td> <td align=left valign=bottom><b>arg</b></td> </tr> <% foreach item [lsort [ns_info scheduled]] { ns_puts "<tr>" ## proc, id, flags, interval ns_puts "<td align=left valign=top>[lindex $item 7]&nbsp;</td>" for { set i 0 } { $i < 3 } { incr i } { ns_puts "<td align=left valign=top>[lindex $item $i]&nbsp;</td>" } ## times: nextqueue, lastqueue, laststart, lastend ns_puts "<td align=left valign=top><pre>" for { set i 3 } { $i < 7 } { incr i } { ns_puts "[ns_httptime [lindex $item $i]]" } ns_puts "</pre></td>" ## arg ns_puts "<td align=left valign=top>[lindex $item 8]&nbsp;</td>" ns_puts "</tr>" } %> </table> </blockquote> <h3>Connections (web clients)</h3> <blockquote> <table> <% foreach item { connections waiting queued keepalive } { ns_puts "<tr><td align=left valign=top><b>$item:</b></td>" ns_puts "<td align=right valign=top>&nbsp;[ns_server $item]</td></tr>" } %> </table> </blockquote> <h3>Callbacks -- Events</h3> <blockquote> <table> <tr> <td align=left valign=top><b>event</b></td> <td align=left valign=top><b>name</b></td> <td align=left valign=top><b>arg</b></td> </tr> <% foreach item [lsort [ns_info callbacks]] { ns_puts "<tr>" for { set i 0 } { $i < 3 } { incr i } { ns_puts "<td align=left valign=top>[lindex $item $i]&nbsp;</td>" } ns_puts "</tr>" } %> </table> </blockquote> <h3>Callbacks -- Sockets (sockcallbacks)</h3> <blockquote> <table> <tr> <td align=left valign=top><b>sock id</b></td> <td align=left valign=top><b>when</b></td> <td align=left valign=top><b>proc</b></td> <td align=left valign=top><b>arg</b></td> </tr> <% foreach item [lsort [ns_info sockcallbacks]] { ns_puts "<tr>" for { set i 0 } { $i < 4 } { incr i } { ns_puts "<td align=left valign=top>[lindex $item $i]</td>" } ns_puts "</tr>" } %> </table> </blockquote> <h3>URL Stats</h3> <blockquote> <table> <tr> <td align=left valign=top><b>url</b></td> <td align=right valign=top><b>hits</b></td> <td align=right valign=top><b>wait (sec)</b></td> <td align=right valign=top><b>open (sec)</b></td> <td align=right valign=top><b>closed (sec)</b></td> </tr> <% foreach item [lsort [ns_server urlstats]] { ns_puts "<tr>" ns_puts "<td align=left valign=top>[lindex $item 0]&nbsp;</td>" ns_puts "<td align=right valign=top>&nbsp;[lindex [lindex $item 1] 0]</td>" for { set i 2 } { $i < 8 } { incr i; incr i} { if { [set thistime [lindex [lindex $item 1] $i]] != "" } { ns_puts " <td align=right valign=top>&nbsp;[format "%.6f" [expr $thistime * .000001]]</td>" } else { ns_puts "<td>&nbsp;</td>" } } ns_puts "</tr>" } %> </table> </blockquote> <h3>Script and Server Errors</h3> <blockquote> Coming soon: Reports of 400- and 500-series errors. </blockquote> <h3>Configuration</h3> <blockquote> Coming soon: Dump of parsed configuration data. </blockquote> <h3>Tcl Information -- Tcl Core</h3> <blockquote> <table> <% ## Tcl library information. foreach item { tclversion patchlevel level nameofexecutable sharedlibextension library} { ns_puts "<tr><td align=right valign=top><b>$item:</b></td>" ns_puts "<td align=left>[info $item]</td></tr>" } %> </table> </blockquote> <h3>Tcl Information -- Procs (Tcl language)</h3> <blockquote> <font size="-2"> <% foreach item [lsort [info procs]] { ns_puts "<a href=[ns_conn url]?tclproc=[ns_urlencode $item]>$item</a>&nbsp; " } %> </font> </blockquote> <h3>Tcl Information -- Commands (C and Tcl language)</h3> <blockquote> <font size="-2"> <% foreach item [lsort [info commands]] { ns_puts "${item}&nbsp;" } %> </font> </blockquote> <h3>HTTP Headers</h3> <blockquote> <pre> <% for { set i 0 } { $i < [ns_set size [ns_conn headers]] } { incr i } { ns_puts "[ns_set key [ns_conn headers] $i]: [ns_set \ value [ns_conn headers] $i]" } %> </pre> </blockquote> <h3><a name="serverlog">Server Log</a></h3> <% if [regexp {STDOUT} [ns_info log]] { ns_puts "<b>Log is on stdout and cannot be viewed from here.</b>" ns_puts "</body></html>" ns_adp_return } %> <% if { [set logsize [ns_queryget logsize]] == "" } { set logsize 50000 } %> Last <%=$logsize%> bytes of server log <%=[ns_info log]%>. <form method=get action=<%=[ns_conn url]%>> <input type=text name=logsize size=6 maxlength=6> <input type=submit value="get more"> <p> </form> <p> <form action=nothing> <textarea cols=90 rows=25><% if [catch { ## Server log can be very small so make sure requested size won't kill us. set filesize [file size [ns_info log]] set fd [open [ns_info log]] if { $filesize > $logsize } { seek $fd -$logsize end } else { seek $fd 0 start } ns_puts [read $fd] } errMsg] { ns_log error "[ns_conn url]: error accessing log: \"$errMsg\"" ns_puts "Unable to access server.log: error \"$errMsg\"" } close $fd %></textarea> </form> <p> &nbsp; <p> </body> </html> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/tests/README-tests.txt�������������������������������������������������������������0000644�0001750�0001750�00000000345�07170425302�017431� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� $Header: /cvsroot/aolserver/aolserver/tests/README-tests.txt,v 1.1 2000/10/09 20:29:54 kriston Exp $ Confidence Tests ---------------- Install these pages into your server's pageroot to perform some simple confidence tests. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/README�����������������������������������������������������������������������������0000644�0001750�0001750�00000011442�10303100135�014273� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� README: AOLserver This is the AOLserver 4.5 source distribution. AOLserver is available at http://aolserver.com, a SourceForge hosted site. RCS: @(#) $Id: README,v 1.7 2005/08/24 14:12:45 shmooved Exp $ Contents -------- 1. Introduction 2. Documentation 3. Compiling and installing AOLserver 4. Mailing lists 5. Thank You 1. Introduction --------------- AOLserver is a multithread web server with flexible and extensible C and Tcl API's. AOLserver is used for several high traffic, dynamic web applications and services at America Online among other sites. AOLserver is maintained, enhanced, and distributed freely by the AOLserver community. The home for AOLserver sources and bug/patch database is on SourceForge available at: http://aolserver.com/ AOLserver is a freely available open source package. See the file "license.terms" for complete information. 2. Documentation ---------------- Documentation is available in the "doc" subdirectory of this release. It contains of Unix-style reference manual entries for AOLserver. Files with extension ".1" are for programs (for example, nsd.1); files with extension ".3" are for C library procedures; and files with extension ".n" describe Tcl commands. The file "doc/nsd.1" gives a quick summary of the AOLserver configuration. To view any of the man pages on Unix, cd to the "doc" directory and invoke your favorite variant of troff using the normal -man macros, for example: groff -Tascii -man nsd.1 | more Conversion to HTML may be possible with: groff -Thtml -man nsd.1 > nsd.html If AOLserver has been installed correctly and your "man" program supports it, you should be able to access the AOLserver manual entries using the normal "man" mechanisms, such as man -M /usr/local/aolserver/man nsd 3. Compiling and installing AOLserver ------------------------------------- AOLserver is known to compile and run on Windows XP, FreeBSD, Linux, Solaris, and Mac OS/X 10.4. Ports to other modern Unix platforms such as HP/UX should be easy. To compile and install AOLserver: 3a. Download, configure, build and install Tcl 8.4 or better with threads and shared libraries enabled. To do so, download the latest release from http://tcl.tk and follow the instructions in the included README. You may install Tcl within the directory you intend to install AOLserver (e.g., /usr/local/aolserver) or in some other location. The following should work: Unix: % gunzip < tcl8.4.11-src.tar.gz | tar xvf - % cd tcl8.4.11/unix % ./configure --prefix=/usr/local/aolserver --enable-threads % make install Windows: c:\tcl\srcdir> cd win c:\tcl\srcdir\win> nmake -f makefile.vc \ INSTALLDIR=c:\aolserver OPTS=threads,thrdalloc,symbols \ install 3b. On Unix, if you don't have GNU make (Linux make is GNU make), install it as AOLserver's makefiles require it. If you're not sure if you have GNU make, try "make -v" to check. You can get GNU make at http://www.gnu.org. 3c. Configure, build, and install AOLserver. The build process requires a working, installed Tcl, and supports Unix and Windows with the same makefiles and a few supporting Tcl scripts. The following should work: Windows: c:\aolserver\srcdir> c:\aolserver\bin\tclsh84.exe nsconfig.tcl c:\aolserver\srcdir> nmake install Unix: % /usr/local/aolserver/bin/tclsh84 ./nsconfig.tcl % gmake install The nsconfig.tcl script is designed to work on Unix and Windows. The tclsh used to execute the script must be from the installed Tcl location you intend to use for AOLserver as nsconfig.tcl will determine certain config settings from the tclsh environment. In addition, two options may be specified: -install dir Specify path to install (default: Tcl directory) -debug Debug build with symbols and without optimization. On Windows, nsconfig.tcl will create include\ns.mak directly. On Unix, nsconfig.tcl will call the configure shell script with the appropriate options to create include/ns.mak. You may also run configure directly although it has few additional features. 3d. Once the binaries are built and installed, create and edit a config file, nsd.tcl by convention. A sample is provided to get started: % cd /usr/local/aolserver % cp base.tcl nsd.tcl % vi nsd.tcl Additional configuration examples can be found in the examples/config directory. 3e. Try running the server in a shell window: % cd /usr/local/aolserver % bin/nsd -ft nsd.tcl 4. Mailing lists ---------------- There is a mailing list for AOLserver to discuss anything from configuration, development, and future direction. To join visit: http://aolserver.com/ 5. Thank You ------------- Thank you for your interest in AOLserver! We hope you find it useful and look forward to hearing from you on our mailing list. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/configure��������������������������������������������������������������������������0000755�0001750�0001750�00000435215�11012403503�015335� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.57. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="include/ns.h" ac_default_prefix=/usr/local/aolserver # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #if HAVE_SYS_TYPES_H # include <sys/types.h> #endif #if HAVE_SYS_STAT_H # include <sys/stat.h> #endif #if STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # if HAVE_STDLIB_H # include <stdlib.h> # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #if HAVE_STRINGS_H # include <strings.h> #endif #if HAVE_INTTYPES_H # include <inttypes.h> #else # if HAVE_STDINT_H # include <stdint.h> # endif #endif #if HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC CFLAGS_DEFAULT LDFLAGS_DEFAULT TCLSH TCL_LIBS TCL_INCLUDE_SPEC TCL_RANLIB TCL_EXEC_PREFIX TCL_SHLIB_SUFFIX TCL_CC_SEARCH_FLAGS TCL_LD_SEARCH_FLAGS TCL_LD_FLAGS TCL_CC TCL_CFLAGS_DEBUG TCL_CFLAGS_OPTIMIZE TCL_CFLAGS_WARNING TCL_EXTRA_CFLAGS TCL_SHLIB_CFLAGS TCL_DEFS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT LDLIB LDSO CCRFLAG LDRFLAG CCRPATH LDRPATH CCRPATHS LDRPATHS AOLSERVER CPP EGREP LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-symbols build with debugging symbols (default: off) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-tcl directory containing tcl configuration (tclConfig.sh) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # # Include and verify Tcl config located by --with-tcl= # # # Ok, lets find the tcl configuration # First, look for one uninstalled. # the alternative search directory is invoked by --with-tcl # if test x"${no_tcl}" = x ; then # we reset no_tcl in case something fails here no_tcl=true # Check whether --with-tcl or --without-tcl was given. if test "${with_tcl+set}" = set; then withval="$with_tcl" with_tclconfig="${withval}" fi; echo "$as_me:$LINENO: checking for Tcl configuration" >&5 echo $ECHO_N "checking for Tcl configuration... $ECHO_C" >&6 if test "${ac_cv_c_tclconfig+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # First check to see if --with-tcl was specified. if test x"${with_tclconfig}" != x ; then case "${with_tclconfig}" in */tclConfig.sh ) if test -f "${with_tclconfig}"; then { echo "$as_me:$LINENO: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&5 echo "$as_me: WARNING: --with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself" >&2;} with_tclconfig="`echo "${with_tclconfig}" | sed 's!/tclConfig\.sh$!!'`" fi ;; esac if test -f "${with_tclconfig}/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd "${with_tclconfig}"; pwd)`" else { { echo "$as_me:$LINENO: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&5 echo "$as_me: error: ${with_tclconfig} directory doesn't contain tclConfig.sh" >&2;} { (exit 1); exit 1; }; } fi fi # then check for a private Tcl installation if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ../tcl \ `ls -dr ../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../tcl[8-9].[0-9]* 2>/dev/null` \ ../../tcl \ `ls -dr ../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../tcl[8-9].[0-9]* 2>/dev/null` \ ../../../tcl \ `ls -dr ../../../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ../../../tcl[8-9].[0-9]* 2>/dev/null` ; do if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi # on Darwin, check in Framework installation locations if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ `ls -d /Library/Frameworks 2>/dev/null` \ `ls -d /Network/Library/Frameworks 2>/dev/null` \ `ls -d /System/Library/Frameworks 2>/dev/null` \ ; do if test -f "$i/Tcl.framework/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/Tcl.framework; pwd)`" break fi done fi # check in a few common install locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in `ls -d ${libdir} 2>/dev/null` \ `ls -d ${exec_prefix}/lib 2>/dev/null` \ `ls -d ${prefix}/lib 2>/dev/null` \ `ls -d /usr/local/lib 2>/dev/null` \ `ls -d /usr/contrib/lib 2>/dev/null` \ `ls -d /usr/lib 2>/dev/null` \ ; do if test -f "$i/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i; pwd)`" break fi done fi # check in a few other private locations if test x"${ac_cv_c_tclconfig}" = x ; then for i in \ ${srcdir}/../tcl \ `ls -dr ${srcdir}/../tcl[8-9].[0-9].[0-9]* 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9] 2>/dev/null` \ `ls -dr ${srcdir}/../tcl[8-9].[0-9]* 2>/dev/null` ; do if test -f "$i/unix/tclConfig.sh" ; then ac_cv_c_tclconfig="`(cd $i/unix; pwd)`" break fi done fi fi if test x"${ac_cv_c_tclconfig}" = x ; then TCL_BIN_DIR="# no Tcl configs found" { echo "$as_me:$LINENO: WARNING: Can't find Tcl configuration definitions" >&5 echo "$as_me: WARNING: Can't find Tcl configuration definitions" >&2;} exit 0 else no_tcl= TCL_BIN_DIR="${ac_cv_c_tclconfig}" echo "$as_me:$LINENO: result: found ${TCL_BIN_DIR}/tclConfig.sh" >&5 echo "${ECHO_T}found ${TCL_BIN_DIR}/tclConfig.sh" >&6 fi fi echo "$as_me:$LINENO: checking for existence of ${TCL_BIN_DIR}/tclConfig.sh" >&5 echo $ECHO_N "checking for existence of ${TCL_BIN_DIR}/tclConfig.sh... $ECHO_C" >&6 if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then echo "$as_me:$LINENO: result: loading" >&5 echo "${ECHO_T}loading" >&6 . "${TCL_BIN_DIR}/tclConfig.sh" else echo "$as_me:$LINENO: result: could not find ${TCL_BIN_DIR}/tclConfig.sh" >&5 echo "${ECHO_T}could not find ${TCL_BIN_DIR}/tclConfig.sh" >&6 fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" # If the TCL_BIN_DIR is the build directory (not the install directory), # then set the common variable name to the value of the build variables. # For example, the variable TCL_LIB_SPEC will be set to the value # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC # instead of TCL_BUILD_LIB_SPEC since it will work with both an # installed and uninstalled version of Tcl. if test -f "${TCL_BIN_DIR}/Makefile" ; then TCL_LIB_SPEC="${TCL_BUILD_LIB_SPEC}" TCL_STUB_LIB_SPEC="${TCL_BUILD_STUB_LIB_SPEC}" TCL_STUB_LIB_PATH="${TCL_BUILD_STUB_LIB_PATH}" elif test "`uname -s`" = "Darwin"; then # If Tcl was built as a framework, attempt to use the libraries # from the framework at the given location so that linking works # against Tcl.framework installed in an arbitary location. case ${TCL_DEFS} in *TCL_FRAMEWORK*) if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then for i in "`cd "${TCL_BIN_DIR}"; pwd`" \ "`cd "${TCL_BIN_DIR}"/../..; pwd`"; do if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then TCL_LIB_SPEC="-F`dirname "$i" | sed -e 's/ /\\\\ /g'` -framework ${TCL_LIB_FILE}" break fi done fi if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then TCL_STUB_LIB_SPEC="-L`echo "${TCL_BIN_DIR}" | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" fi ;; esac fi # eval is required to do the TCL_DBGX substitution eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" if test "${TCL_THREADS}" != "1"; then { { echo "$as_me:$LINENO: error: must build tcl with --enable-threads" >&5 echo "$as_me: error: must build tcl with --enable-threads" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: checking for build with symbols" >&5 echo $ECHO_N "checking for build with symbols... $ECHO_C" >&6 # Check whether --enable-symbols or --disable-symbols was given. if test "${enable_symbols+set}" = set; then enableval="$enable_symbols" tcl_ok=$enableval else tcl_ok=no fi; # FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT. DBGX="" if test "$tcl_ok" = "no"; then CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)' LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)' echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 cat >>confdefs.h <<\_ACEOF #define TCL_CFG_OPTIMIZED 1 _ACEOF else CFLAGS_DEFAULT='$(CFLAGS_DEBUG)' LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)' if test "$tcl_ok" = "yes"; then echo "$as_me:$LINENO: result: yes (standard debugging)" >&5 echo "${ECHO_T}yes (standard debugging)" >&6 fi fi ### FIXME: Surely TCL_CFG_DEBUG should be set to whether we're debugging? cat >>confdefs.h <<\_ACEOF #define TCL_CFG_DEBUG 1 _ACEOF if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then cat >>confdefs.h <<\_ACEOF #define TCL_MEM_DEBUG 1 _ACEOF fi if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then if test "$tcl_ok" = "all"; then echo "$as_me:$LINENO: result: enabled symbols mem debugging" >&5 echo "${ECHO_T}enabled symbols mem debugging" >&6 else echo "$as_me:$LINENO: result: enabled $tcl_ok debugging" >&5 echo "${ECHO_T}enabled $tcl_ok debugging" >&6 fi fi if test "${CC+set}" != "set"; then CC=$TCL_CC fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5 (eval $ac_compiler --version </dev/null >&5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5 (eval $ac_compiler -v </dev/null >&5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5 (eval $ac_compiler -V </dev/null >&5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include <stdlib.h>' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # # TCL_SHLIB_LD from tclConfig.sh is not quite right for aolserver. # test "x$prefix" = "xNONE" && prefix="/usr/local/aolserver" system=`uname` case "$system" in Darwin) LDLIB="\$(CC) -dynamiclib -install_name \$(INSTLIB)/\$(DLLBIN)" LDSO="\$(CC) -bundle" CCRFLAG= LDRFLAG= CCRPATHS= LDRPATHS= ;; *) LDLIB="$TCL_SHLIB_LD" case "$LDLIB" in *gcc*) LDLIB="$LDLIB -nostartfiles" ;; *shared*) LDLIB="$LDLIB -nostartfiles" ;; esac CCRPATH="\$(CCRFLAG)\$(INSTLIB)" LDRPATH="\$(LDRFLAG)\$(INSTLIB)" if test "$TCL_EXEC_PREFIX" != "$prefix" then CCRPATH="$CCRPATH \$(CCRFLAG)\$(TCL_EXEC_PREFIX)/lib" LDRPATH="$LDRPATH \$(LDRFLAG)\$(TCL_EXEC_PREFIX)/lib" fi if test -d /usr/lib/lwp then CCRPATH="$CCRPATH \$(CCRFLAG)/usr/lib/lwp" LDRPATH="$LDRPATH \$(LDRFLAG)/usr/lib/lwp" fi LDSO="\$(LDLIB)" CCRPATHS="\$(CCRPATH)" LDRPATHS="\$(LDRPATH)" CCRFLAG=$TCL_CC_SEARCH_FLAGS LDRFLAG=$TCL_LD_SEARCH_FLAGS if test "$CCRFLAG" = "" ; then CCRPATH= fi if test "$LDRFLAG" = "" ; then LDRPATH= fi ;; esac AOLSERVER=$prefix # # Additional AOLserver checks. # ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <ctype.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in inttypes.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in timegm fork1 drand48 random _NSGetEnviron do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # # Poll is currently broken on OS/X. # system=`uname` if test "x$system" != "xDarwin" then for ac_func in poll do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done fi if test "${ac_cv_header_dl_h+set}" = set; then echo "$as_me:$LINENO: checking for dl.h" >&5 echo $ECHO_N "checking for dl.h... $ECHO_C" >&6 if test "${ac_cv_header_dl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_dl_h" >&5 echo "${ECHO_T}$ac_cv_header_dl_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking dl.h usability" >&5 echo $ECHO_N "checking dl.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <dl.h> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking dl.h presence" >&5 echo $ECHO_N "checking dl.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <dl.h> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: dl.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: dl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: dl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: dl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: dl.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: dl.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: dl.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: dl.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: dl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: dl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for dl.h" >&5 echo $ECHO_N "checking for dl.h... $ECHO_C" >&6 if test "${ac_cv_header_dl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_dl_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_dl_h" >&5 echo "${ECHO_T}$ac_cv_header_dl_h" >&6 fi if test $ac_cv_header_dl_h = yes; then cat >>confdefs.h <<\_ACEOF #define USE_DLSHL 1 _ACEOF fi echo "$as_me:$LINENO: checking need for dup high" >&5 echo $ECHO_N "checking need for dup high... $ECHO_C" >&6 if test "$cross_compiling" = yes; then as_ok=no else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <stdio.h> int main(int argc, char **argv) { return (sizeof(stdout->_file) == 1) ? 0 : 1; } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\_ACEOF #define USE_DUPHIGH 1 _ACEOF as_ok=yes else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) as_ok=no fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $as_ok" >&5 echo "${ECHO_T}$as_ok" >&6 echo "$as_me:$LINENO: checking for shared libgcc" >&5 echo $ECHO_N "checking for shared libgcc... $ECHO_C" >&6 if test "${ac_cv_shared_libgcc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_save_LIBS="$LIBS" LIBS="-lgcc_s $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { return 0 ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_shared_libgcc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_shared_libgcc=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$ac_save_LIBS" fi echo "$as_me:$LINENO: result: $ac_cv_shared_libgcc" >&5 echo "${ECHO_T}$ac_cv_shared_libgcc" >&6 if test "$ac_cv_shared_libgcc" = "yes" ; then LIBS="-lgcc_s $LIBS" fi has_threadsafe_dns=no echo "$as_me:$LINENO: checking for getaddrinfo in -lsocket" >&5 echo $ECHO_N "checking for getaddrinfo in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_getaddrinfo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getaddrinfo (); int main () { getaddrinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_getaddrinfo=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_getaddrinfo=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_getaddrinfo" >&5 echo "${ECHO_T}$ac_cv_lib_socket_getaddrinfo" >&6 if test $ac_cv_lib_socket_getaddrinfo = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi echo "$as_me:$LINENO: checking for getnameinfo in -lsocket" >&5 echo $ECHO_N "checking for getnameinfo in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_getnameinfo+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getnameinfo (); int main () { getnameinfo (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_getnameinfo=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_getnameinfo=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_getnameinfo" >&5 echo "${ECHO_T}$ac_cv_lib_socket_getnameinfo" >&6 if test $ac_cv_lib_socket_getnameinfo = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF LIBS="-lsocket $LIBS" fi for ac_func in getaddrinfo getnameinfo do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "${ac_cv_func_getaddrinfo}" = "yes" \ -a "${ac_cv_func_getnameinfo}" = "yes" ; then has_threadsafe_dns=yes fi if test "${has_threadsafe_dns}" != "yes" ; then saved_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -lnsl" echo "$as_me:$LINENO: checking for gethostbyname_r" >&5 echo $ECHO_N "checking for gethostbyname_r... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname_r+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname_r (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname_r (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname_r) || defined (__stub___gethostbyname_r) choke me #else char (*f) () = gethostbyname_r; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyname_r; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname_r=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname_r=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname_r" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname_r" >&6 if test $ac_cv_func_gethostbyname_r = yes; then echo "$as_me:$LINENO: checking for gethostbyname_r with 6 args" >&5 echo $ECHO_N "checking for gethostbyname_r with 6 args... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <netdb.h> int main () { char *name; struct hostent *he, *res; char buffer[2048]; int buflen = 2048; int h_errnop; (void) gethostbyname_r(name, he, buffer, buflen, &res, &h_errnop); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYNAME_R 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYNAME_R_6 1 _ACEOF echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 echo "$as_me:$LINENO: checking for gethostbyname_r with 5 args" >&5 echo $ECHO_N "checking for gethostbyname_r with 5 args... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <netdb.h> int main () { char *name; struct hostent *he; char buffer[2048]; int buflen = 2048; int h_errnop; (void) gethostbyname_r(name, he, buffer, buflen, &h_errnop); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYNAME_R 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYNAME_R_5 1 _ACEOF echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 echo "$as_me:$LINENO: checking for gethostbyname_r with 3 args" >&5 echo $ECHO_N "checking for gethostbyname_r with 3 args... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <netdb.h> int main () { char *name; struct hostent *he; struct hostent_data data; (void) gethostbyname_r(name, he, &data); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYNAME_R 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYNAME_R_3 1 _ACEOF echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi rm -f conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$saved_CFLAGS" saved_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -lnsl" echo "$as_me:$LINENO: checking for gethostbyaddr_r" >&5 echo $ECHO_N "checking for gethostbyaddr_r... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyaddr_r+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyaddr_r (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyaddr_r (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyaddr_r) || defined (__stub___gethostbyaddr_r) choke me #else char (*f) () = gethostbyaddr_r; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyaddr_r; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyaddr_r=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyaddr_r=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyaddr_r" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyaddr_r" >&6 if test $ac_cv_func_gethostbyaddr_r = yes; then echo "$as_me:$LINENO: checking for gethostbyaddr_r with 7 args" >&5 echo $ECHO_N "checking for gethostbyaddr_r with 7 args... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <netdb.h> int main () { char *addr; int length; int type; struct hostent *result; char buffer[2048]; int buflen = 2048; int h_errnop; (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen, &h_errnop); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYADDR_R 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_GETHOSTBYADDR_R_7 1 _ACEOF echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext fi CFLAGS="$saved_CFLAGS" if test "${ac_cv_func_gethostbyname_r}" = "yes" \ -a "${ac_cv_func_gethostbyaddr_r}" = "yes" ; then has_threadsafe_dns=yes fi fi if test "${has_threadsafe_dns}" != "yes" ; then { echo "$as_me:$LINENO: WARNING: dns queries will use non-threadsafe calls which could result in server instability" >&5 echo "$as_me: WARNING: dns queries will use non-threadsafe calls which could result in server instability" >&2;} fi # # Create Makefile.global. # ac_config_files="$ac_config_files include/ns.mak" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to <bug-autoconf@gnu.org>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "include/ns.mak" ) CONFIG_FILES="$CONFIG_FILES include/ns.mak" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@TCL_VERSION@,$TCL_VERSION,;t t s,@TCL_PATCH_LEVEL@,$TCL_PATCH_LEVEL,;t t s,@TCL_BIN_DIR@,$TCL_BIN_DIR,;t t s,@TCL_SRC_DIR@,$TCL_SRC_DIR,;t t s,@TCL_LIB_FILE@,$TCL_LIB_FILE,;t t s,@TCL_LIB_FLAG@,$TCL_LIB_FLAG,;t t s,@TCL_LIB_SPEC@,$TCL_LIB_SPEC,;t t s,@TCL_STUB_LIB_FILE@,$TCL_STUB_LIB_FILE,;t t s,@TCL_STUB_LIB_FLAG@,$TCL_STUB_LIB_FLAG,;t t s,@TCL_STUB_LIB_SPEC@,$TCL_STUB_LIB_SPEC,;t t s,@CFLAGS_DEFAULT@,$CFLAGS_DEFAULT,;t t s,@LDFLAGS_DEFAULT@,$LDFLAGS_DEFAULT,;t t s,@TCLSH@,$TCLSH,;t t s,@TCL_LIBS@,$TCL_LIBS,;t t s,@TCL_INCLUDE_SPEC@,$TCL_INCLUDE_SPEC,;t t s,@TCL_RANLIB@,$TCL_RANLIB,;t t s,@TCL_EXEC_PREFIX@,$TCL_EXEC_PREFIX,;t t s,@TCL_SHLIB_SUFFIX@,$TCL_SHLIB_SUFFIX,;t t s,@TCL_CC_SEARCH_FLAGS@,$TCL_CC_SEARCH_FLAGS,;t t s,@TCL_LD_SEARCH_FLAGS@,$TCL_LD_SEARCH_FLAGS,;t t s,@TCL_LD_FLAGS@,$TCL_LD_FLAGS,;t t s,@TCL_CC@,$TCL_CC,;t t s,@TCL_CFLAGS_DEBUG@,$TCL_CFLAGS_DEBUG,;t t s,@TCL_CFLAGS_OPTIMIZE@,$TCL_CFLAGS_OPTIMIZE,;t t s,@TCL_CFLAGS_WARNING@,$TCL_CFLAGS_WARNING,;t t s,@TCL_EXTRA_CFLAGS@,$TCL_EXTRA_CFLAGS,;t t s,@TCL_SHLIB_CFLAGS@,$TCL_SHLIB_CFLAGS,;t t s,@TCL_DEFS@,$TCL_DEFS,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@LDLIB@,$LDLIB,;t t s,@LDSO@,$LDSO,;t t s,@CCRFLAG@,$CCRFLAG,;t t s,@LDRFLAG@,$LDRFLAG,;t t s,@CCRPATH@,$CCRPATH,;t t s,@LDRPATH@,$LDRPATH,;t t s,@CCRPATHS@,$CCRPATHS,;t t s,@LDRPATHS@,$LDRPATHS,;t t s,@AOLSERVER@,$AOLSERVER,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/configure.in�����������������������������������������������������������������������0000644�0001750�0001750�00000011762�11012403503�015734� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/configure.in,v 1.25 2008/05/13 21:25:23 dvrsn Exp $ # # # configure.in -- # # AOLserver configure script. # AC_INIT(include/ns.h) AC_PREREQ(2.13) AC_PREFIX_DEFAULT(/usr/local/aolserver) # # Include and verify Tcl config located by --with-tcl= # SC_PATH_TCLCONFIG SC_LOAD_TCLCONFIG if test "${TCL_THREADS}" != "1"; then AC_MSG_ERROR([must build tcl with --enable-threads]) fi SC_ENABLE_SYMBOLS AC_SUBST(TCLSH) AC_SUBST(TCL_LIB_SPEC) AC_SUBST(TCL_LIBS) AC_SUBST(TCL_INCLUDE_SPEC) AC_SUBST(TCL_RANLIB) AC_SUBST(TCL_EXEC_PREFIX) AC_SUBST(TCL_SHLIB_SUFFIX) AC_SUBST(TCL_CC_SEARCH_FLAGS) AC_SUBST(TCL_LD_SEARCH_FLAGS) AC_SUBST(TCL_LD_FLAGS) AC_SUBST(TCL_CC) AC_SUBST(TCL_CFLAGS_DEBUG) AC_SUBST(TCL_CFLAGS_OPTIMIZE) AC_SUBST(TCL_CFLAGS_WARNING) AC_SUBST(TCL_EXTRA_CFLAGS) AC_SUBST(TCL_SHLIB_CFLAGS) AC_SUBST(TCL_DEFS) if test "${CC+set}" != "set"; then CC=$TCL_CC fi AC_PROG_CC # # TCL_SHLIB_LD from tclConfig.sh is not quite right for aolserver. # test "x$prefix" = "xNONE" && prefix="/usr/local/aolserver" system=`uname` case "$system" in Darwin) LDLIB="\$(CC) -dynamiclib -install_name \$(INSTLIB)/\$(DLLBIN)" LDSO="\$(CC) -bundle" CCRFLAG= LDRFLAG= CCRPATHS= LDRPATHS= ;; *) LDLIB="$TCL_SHLIB_LD" case "$LDLIB" in *gcc*) LDLIB="$LDLIB -nostartfiles" ;; *shared*) LDLIB="$LDLIB -nostartfiles" ;; esac CCRPATH="\$(CCRFLAG)\$(INSTLIB)" LDRPATH="\$(LDRFLAG)\$(INSTLIB)" if test "$TCL_EXEC_PREFIX" != "$prefix" then CCRPATH="$CCRPATH \$(CCRFLAG)\$(TCL_EXEC_PREFIX)/lib" LDRPATH="$LDRPATH \$(LDRFLAG)\$(TCL_EXEC_PREFIX)/lib" fi if test -d /usr/lib/lwp then CCRPATH="$CCRPATH \$(CCRFLAG)/usr/lib/lwp" LDRPATH="$LDRPATH \$(LDRFLAG)/usr/lib/lwp" fi LDSO="\$(LDLIB)" CCRPATHS="\$(CCRPATH)" LDRPATHS="\$(LDRPATH)" CCRFLAG=$TCL_CC_SEARCH_FLAGS LDRFLAG=$TCL_LD_SEARCH_FLAGS if test "$CCRFLAG" = "" ; then CCRPATH= fi if test "$LDRFLAG" = "" ; then LDRPATH= fi ;; esac AOLSERVER=$prefix AC_SUBST(LDLIB) AC_SUBST(LDSO) AC_SUBST(CCRFLAG) AC_SUBST(LDRFLAG) AC_SUBST(CCRPATH) AC_SUBST(LDRPATH) AC_SUBST(CCRPATHS) AC_SUBST(LDRPATHS) AC_SUBST(AOLSERVER) # # Additional AOLserver checks. # AC_CHECK_HEADERS(inttypes.h) AC_CHECK_FUNCS(timegm fork1 drand48 random _NSGetEnviron) # # Poll is currently broken on OS/X. # system=`uname` if test "x$system" != "xDarwin" then AC_CHECK_FUNCS(poll) fi AC_CHECK_HEADER(dl.h, AC_DEFINE(USE_DLSHL),) AC_MSG_CHECKING([need for dup high]) AC_TRY_RUN([ #include <stdio.h> int main(int argc, char **argv) { return (sizeof(stdout->_file) == 1) ? 0 : 1; }], AC_DEFINE(USE_DUPHIGH) as_ok=yes, as_ok=no, as_ok=no) AC_MSG_RESULT($as_ok) AC_CACHE_CHECK([for shared libgcc], ac_cv_shared_libgcc, [ ac_save_LIBS="$LIBS" LIBS="-lgcc_s $LIBS" AC_TRY_LINK(, [return 0], ac_cv_shared_libgcc=yes, ac_cv_shared_libgcc=no) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_shared_libgcc" = "yes" ; then LIBS="-lgcc_s $LIBS" fi has_threadsafe_dns=no AC_CHECK_LIB(socket, getaddrinfo) AC_CHECK_LIB(socket, getnameinfo) AC_CHECK_FUNCS(getaddrinfo getnameinfo) if test "${ac_cv_func_getaddrinfo}" = "yes" \ -a "${ac_cv_func_getnameinfo}" = "yes" ; then has_threadsafe_dns=yes fi if test "${has_threadsafe_dns}" != "yes" ; then AC_HAVE_GETHOSTBYNAME_R AC_HAVE_GETHOSTBYADDR_R if test "${ac_cv_func_gethostbyname_r}" = "yes" \ -a "${ac_cv_func_gethostbyaddr_r}" = "yes" ; then has_threadsafe_dns=yes fi fi if test "${has_threadsafe_dns}" != "yes" ; then AC_MSG_WARN([dns queries will use non-threadsafe calls which could result in server instability]) fi # # Create Makefile.global. # AC_OUTPUT(include/ns.mak) ��������������aolserver4-4.5.1/nsconfig.tcl�����������������������������������������������������������������������0000644�0001750�0001750�00000010174�10301172025�015733� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # nsconfig.tcl -- # # Configure build of AOLserver. See usage proc for details. # # # Set arg defaults. # set tclsh [file native [info nameofexecutable]] set tcldir [file native [file dirname [file dirname $tclsh]]] set install $tcldir set debug 0 # # Utility procs used below. # proc err str { puts stderr $str exit 1 } proc usage {{ishelp 0}} { global install argv0 set msg {Usage: $argv0 ?-help? ?-install dir? ?-debug? Where: -help This message. -install dir Specify path to install (default: $install) -debug Debug build with symbols and without optimization. } set msg [subst $msg] if !$ishelp { err $msg } puts $msg exit 0 } # # Parse arg list. # set i 0 while {$i < $argc} { set opt [lindex $argv $i] switch -glob -- $opt { -h* { usage 1 } -i* { set install [lindex $argv [incr i]] if ![string length $install] { usage } } -d* { set debug 1 } default { usage } } incr i } # # Validate arguments. # set install [file native $install] if {[file exists $install] && ![file isdirectory $install]} { err "Invalid install directory: $install" } # # On Unix, call configure shell script and exit. # if [string equal $tcl_platform(platform) unix] { set configure [list ./configure TCLSH=$tclsh --prefix=$install --with-tcl=$tcldir/lib] if $debug { lappend configure --enable-symbols } puts "Executing $configure" eval exec $configure >&@ stdout exit 0 } # # On Windows, determine and verify Tcl library and includes. # if ![info exists tcl_platform(threaded)] { err "Tcl not built with threads enabled." } set tclinc [file native $tcldir/include] if ![file exists $tclinc] { err "Missing Tcl include directory: $tclinc" } scan [info tclversion] %d.%d major minor set tcllib $tcldir/lib/tcl${major}${minor}t if [info exists tcl_platform(debug)] { append tcllib g } set tcllib [file native [append tcllib .lib]] if ![file exists $tcllib] { err "Missing Tcl lib: $tcllib" } # # Create ns.mak. # set makout include/ns.mak set makbak include/ns.bak set makinc include/ns-mak.inc if ![file exists $makinc] { puts "Missing $makinc" exit 1 } if [file exists $makout] { file copy -force $makout $makbak } puts "Configuring $makout with variables:" puts " AOLSERVER=$install" puts " DEBUG=$debug" puts " TCLSH=$tclsh" puts " TCLINC=$tclinc" puts " TCLLIB=$tcllib" set fp [open $makout w] puts $fp "#" puts $fp "# Created by $argv0" puts $fp "# [clock format [clock seconds]]" puts $fp "#" puts $fp "" puts $fp "#" puts $fp "# Config variables:" puts $fp "#" puts $fp "" puts $fp "CONFIG_AOLSERVER=$install" puts $fp "CONFIG_DEBUG=$debug" puts $fp "CONFIG_TCLSH=$tclsh" puts $fp "CONFIG_TCLINC=$tclinc" puts $fp "CONFIG_TCLLIB=$tcllib" puts $fp "" puts $fp "#" puts $fp "# Shared $makinc" puts $fp "#" puts $fp "" set ifp [open $makinc] fcopy $ifp $fp close $ifp close $fp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/license.terms����������������������������������������������������������������������0000644�0001750�0001750�00000060567�07545402426�016153� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� $Header: /cvsroot/aolserver/aolserver/license.terms,v 1.2 2002/09/28 19:37:58 jgdavidson Exp $ MOZILLA PUBLIC LICENSE Version 1.1 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world- wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON- INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the APL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. AMENDMENTS The AOLserver Public License Version 1.1 ("APL") consists of the Mozilla Public License Version 1.1 with the following Amendments, including "Exhibit A - AOLserver Public License". Files identified with "Exhibit A - AOLserver Public License" are governed by the AOLserver Public License Version 1.1. Additional Terms applicable to the AOLserver Public License. I. Effect. These additional terms described in this AOLserver Public License -- Amendments shall apply to the AOLserver Code and to all Covered Code under this License. II. "AOL's Branded Code" means Covered Code that AOL distributes and/or permits others to distribute under one or more trademark(s) which are controlled by AOL but which are not licensed for use under this License. III. AOL Trademarks. This License does not grant any rights to use the trademarks "AOL", "America Online", "AOLserver" or the "AOL Triangle" logo even if such marks are included in the Original Code or Modifications. IV. Inability to Comply Due to Contractual Obligation. Prior to licensing the Original Code under this License, AOL has licensed third party code for use in AOL's Branded Code. To the extent that AOL is limited contractually from making such third party code available under this License, AOL may choose to reintegrate such code into Covered Code without being required to distribute such code in Source Code form, even if such code would otherwise be considered "Modifications" under this License. V. [Intentionally Omitted] VI. Litigation. Notwithstanding the limitations of Section 11 above, the provisions regarding litigation in Section 11(a), (b) and (c) of the License shall apply to all disputes relating to this License. EXHIBIT A - AOLserver Public License. "The contents of this file are subject to the AOLserver Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://aolserver.com/. Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. The Original Code is AOLserver Code and related documentation distributed by AOL. The Initial Developer of the Original Code is America Online, Inc. Portions created by AOL are Copyright (C) 1999 America Online, Inc. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the GNU General Public License (the "GPL"), in which case the provisions of GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the License, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the License or the GPL. �����������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/index.adp��������������������������������������������������������������������������0000644�0001750�0001750�00000011376�10270213221�015222� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<% set uptime [ns_info uptime] if {$uptime < 60} { set uptime [format %.2d $uptime] } elseif {$uptime < 3600} { set mins [expr $uptime / 60] set secs [expr $uptime - ($mins * 60)] set uptime "[format %.2d $mins]:[format %.2d $secs]" } else { set hours [expr $uptime / 3600] set mins [expr ($uptime - ($hours * 3600)) / 60] set secs [expr $uptime - (($hours * 3600) + ($mins * 60))] set uptime "${hours}:[format %.2d $mins]:[format %.2d $secs]" } set config "" lappend config "Build Date" [ns_info builddate] lappend config "Build Label" [ns_info label] lappend config "Build Platform" [ns_info platform] lappend config "Build Version" [ns_info version] lappend config "Build Patch Level" [ns_info patchlevel] lappend config "&nbsp;" "&nbsp;" lappend config "Binary" [ns_info nsd] lappend config "Process ID" [ns_info pid] lappend config "Uptime" $uptime lappend config "Host Name" [ns_info hostname] lappend config "Address" [ns_info address] lappend config "Server Config" [ns_info config] lappend config "Server Log" [ns_info log] lappend config "Access Log" [ns_accesslog file] lappend config "&nbsp;" "&nbsp;" lappend config "Tcl Version" [info tclversion] lappend config "Tcl Patch Level" [info patchlevel] lappend config "&nbsp;" "&nbsp;" lappend config "Home Directory" [ns_info home] lappend config "Page Root" [ns_info pageroot] lappend config "Tcl Library" [ns_info tcllib] %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title>Welcome to AOLserver</title> <style type="text/css"> body { font-family: verdana, arial; font-size: 10pt; color: #000; background-color: #fff; } a:link, a:visited, a:active { text-decoration: none; color: blue; } b { font-style: bold; } h1 { font-family: verdana, arial; font-style: bold; font-size: 14pt; } h2 { font-family: verdana, arial; font-style: bold; font-size: 12pt; } table { border: solid 1px #000000; } td { font-family: verdana, arial; font-size: 10pt; border-right: solid 1px #cccccc; border-bottom: solid 1px #cccccc; } p { font-family: verdana, arial; font-size: 12pt; } #nav{ margin-top: 1em; margin-bottom: 0.5em; } #nav ul { background-color: #ececec; text-align: left; margin-left: 0; padding-left: 0; padding-top: 2px; padding-bottom: 2px; border-bottom: 1px solid #cccccc; } #nav li { font-family: verdana, arial; font-size: 10pt; list-style-type: none; padding: 0.25em 1em; border-left: 1px solid white; display: inline; } #nav li:first-child { border: none; } </style> </head> <body> <div id="nav"> <ul> <li><a href="http://www.aolserver.com/">AOLserver.com</a></li> <li><a href="http://panoptic.com/wiki/aolserver/">Wiki</a></li> <li><a href="http://panoptic.com/wiki/aolserver/Tcl%20API">Tcl API</a></li> <li><a href="http://aolserver.com/docs/devel/c/api">C API</a></li> <li><a href="http://aolserver.com/lists.php">Mailing Lists</a></li> <li>&nbsp;</li> </ul> </div> <h1>AOLserver <%=[ns_info version]%></h1> <p>Congratulations, you have successfully installed AOLserver <%=[ns_info version]%>!</p> <h2>Configuration</h2> <table cellpadding="3" cellspacing="0"> <tr> <td><b>Key</b></td> <td><b>Value</b></td> <tr> <% foreach {key value} $config { ns_adp_puts "<tr><td>$key</td><td>$value</td></tr>" } %> </table> <h2>Loaded AOLserver Modules</h2> <table cellpadding="3" cellspacing="0"> <tr> <td><b>Type</b></td> <td><b>Name</b></td> <td><b>Location</b></td> </tr> <% set server [ns_info server] set modSection [ns_configsection ns/server/$server/modules] set tclDir [ns_info tcllib] set binDir "[ns_info home]/bin" foreach {name binary} [ns_set array $modSection] { if {[string match "tcl" $binary]} { set type "Tcl" set location "$tclDir/$name" } else { set type "C" set location "$binDir/$binary" } ns_adp_puts "<tr><td>$type</td><td>$name</td><td>$location</td></tr>" } %> </table> <% set modules [info loaded] if {[string length $modules]} { ns_adp_puts "\ <h2>Loaded Tcl Modules</h2> <table cellpadding=\"3\" cellspacing=\"0\"> <tr> <td><b>Name</b></td> <td><b>Location</b></td> </tr>" foreach module [info loaded] { foreach {binary name} $module { ns_adp_puts "<tr><td>$name</td><td>$binary</td></tr>" } } ns_adp_puts "</table>" } %> </body> </html> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014741� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/Makefile��������������������������������������������������������������������0000644�0001750�0001750�00000003406�10300725025�016370� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsperm/Makefile,v 1.8 2005/08/17 21:20:21 jgdavidson Exp $ # MOD = nsperm OBJS = nsperm.o MODINIT = NsPerm_ModInit INSTALL = install-perm include ../include/ns.mak modtcl = $(AOLSERVER)/modules/tcl/$(MOD) moddat = $(AOLSERVER)/servers/server1/modules/$(MOD) install-perm: $(INST) -d $(modtcl) init.tcl compat.tcl $(INST) -d $(moddat) -n passwd group hosts.allow hosts.deny perms ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/group�����������������������������������������������������������������������0000644�0001750�0001750�00000000114�07103556250�016011� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������system:::nsadmin users:::nsadmin,nobody all:::nsadmin,nobody,"" public:::"" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/perms�����������������������������������������������������������������������0000644�0001750�0001750�00000001064�07103556250�016010� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This is the AOLserver perms file which defines which users # and groups may or may not visit certain URLs. # # The format is: # ACTION INHERITANCE METHOD URL ENTITY # # ACTION can be: denygroup, allowgroup, denyuser, or allowuser # INHERITANCE can be: inherit or noinherit # METHOD can be: PUT, GET, POST, or any other supported method. # URL is the path relative to pageroot, such as /index.html or /images # ENTITY is either the name of a user or group, as specified in the # passwd and group files. # # Example: # allowuser inherit GET /NS nsadmin ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/compat.tcl������������������������������������������������������������������0000644�0001750�0001750�00000003211�07142130361�016714� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsperm/compat.tcl,v 1.3 2000/08/02 23:38:25 kriston Exp $ # # # compat.tcl - # Compatibility functions # proc ns_passwordcheck { user password } { set ret [catch {ns_perm checkpass $user $password} err] if {$ret == 0} { return 0 } else { return 1 } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/hosts.allow�����������������������������������������������������������������0000644�0001750�0001750�00000000471�07103556250�017140� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This is the AOLserver hosts.alow file. It allows you to specify which # hosts may log in as certain users. If you have an entry in this # file for a given user, you may not have an entry in hosts.deny for # that same user. # # Example: # # nsadmin: 10.0.0.0/255.0.0.0, .internal.mycompany.com, home.me.com # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/passwd����������������������������������������������������������������������0000644�0001750�0001750�00000000061�07103556250�016157� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"":::::: nsadmin:ubphBI5lDzSYc::::: nobody:::::: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/nsperm.c��������������������������������������������������������������������0000644�0001750�0001750�00000047621�11011374024�016406� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsperm -- * * Permissions */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsperm/nsperm.c,v 1.11 2008/05/10 19:31:32 mooooooo Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #ifndef INADDR_NONE #define INADDR_NONE (-1) #endif /* * The following structure is allocated for each instance of the module. */ typedef struct Server { char *server; Tcl_HashTable users; Tcl_HashTable groups; Ns_RWLock lock; } Server; /* * The "users" hash table points to this kind of data: */ typedef struct { char pass[16]; Tcl_HashTable groups; Tcl_HashTable nets; Tcl_HashTable masks; Tcl_HashTable hosts; int filterallow; } User; /* * The "groups" hash table points to this kind of data: */ typedef struct { Tcl_HashTable users; } Group; /* * The urlspecific data referenced by uskey hold pointers to these: */ typedef struct { char *baseurl; Tcl_HashTable allowuser; Tcl_HashTable denyuser; Tcl_HashTable allowgroup; Tcl_HashTable denygroup; int implicit_allow; } Perm; /* * Local functions defined in this file */ static Tcl_CmdProc PermCmd; static int AddCmds(Tcl_Interp *interp, void *arg); static int AddUserCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv); static int AddGroupCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv); static int AllowDenyCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv, int allow, int user); static int ValidateUserAddr(User *userPtr, char *peer); static int AuthProc(char *server, char *method, char *url, char *user, char *pass, char *peer); /* * Static variables defined in this file. */ static int uskey = -1; static Tcl_HashTable serversTable; /* *---------------------------------------------------------------------- * * NsPerm_ModInit -- * * Initialize the perms module * * Results: * NS_OK/NS_ERROR * * Side effects: * Init hash table, add tcl commands. * *---------------------------------------------------------------------- */ int NsPerm_ModInit(char *server, char *module) { Server *servPtr; char *path; Tcl_HashEntry *hPtr; int new; if (uskey < 0) { uskey = Ns_UrlSpecificAlloc(); Tcl_InitHashTable(&serversTable, TCL_STRING_KEYS); } servPtr = ns_malloc(sizeof(Server)); servPtr->server = server; path = Ns_ConfigGetPath(server, module, NULL); Tcl_InitHashTable(&servPtr->users, TCL_STRING_KEYS); Tcl_InitHashTable(&servPtr->groups, TCL_STRING_KEYS); Ns_RWLockInit(&servPtr->lock); Ns_SetRequestAuthorizeProc(server, AuthProc); Ns_TclInitInterps(server, AddCmds, servPtr); hPtr = Tcl_CreateHashEntry(&serversTable, server, &new); Tcl_SetHashValue(hPtr, servPtr); return NS_OK; } /* *---------------------------------------------------------------------- * * AddCmds -- * * Add tcl commands for perms * * Results: * NS_OK * * Side effects: * Adds tcl commands * *---------------------------------------------------------------------- */ static int AddCmds(Tcl_Interp *interpermPtr, void *arg) { Tcl_CreateCommand(interpermPtr, "ns_perm", PermCmd, arg, NULL); return NS_OK; } /* *---------------------------------------------------------------------- * * PermCmd -- * * The ns_perm tcl command * * Results: * Std tcl ret val * * Side effects: * Yes. * *---------------------------------------------------------------------- */ static int PermCmd(ClientData arg, Tcl_Interp *interp, int argc, CONST char **argv) { Server *servPtr = arg; int status; if (argc < 2) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " command ?args ...?\"", NULL); return TCL_ERROR; } Ns_RWLockWrLock(&servPtr->lock); if (STREQ(argv[1], "adduser")) { status = AddUserCmd(servPtr, interp, argc, (char**)argv); } else if (STREQ(argv[1], "addgroup")) { status = AddGroupCmd(servPtr, interp, argc, (char**)argv); } else if (STREQ(argv[1], "allowuser")) { status = AllowDenyCmd(servPtr, interp, argc, (char**)argv, 1, 1); } else if (STREQ(argv[1], "denyuser")) { status = AllowDenyCmd(servPtr, interp, argc, (char**)argv, 0, 1); } else if (STREQ(argv[1], "allowgroup")) { status = AllowDenyCmd(servPtr, interp, argc, (char**)argv, 1, 0); } else if (STREQ(argv[1], "denygroup")) { status = AllowDenyCmd(servPtr, interp, argc, (char**)argv, 0, 0); } else { Tcl_AppendResult(interp, "unknown command \"", argv[1], "\": should be adduser, addgroup, ", "allowuser, denyuser, " "allowgroup, or denygroup", NULL); status = TCL_ERROR; } Ns_RWLockUnlock(&servPtr->lock); return status; } /* *---------------------------------------------------------------------- * * AuthProc -- * * Authorize a URL--this callback is called when a new * connection is recieved * * Results: * NS_OK: accept; * NS_FORBIDDEN or NS_UNAUTHORIZED: go away; * NS_ERROR: oops * * Side effects: * None * *---------------------------------------------------------------------- */ static int AuthProc(char *server, char *method, char *url, char *user, char *pass, char *peer) { Server *servPtr; Perm *permPtr; User *userPtr; Tcl_HashEntry *hPtr; Tcl_HashSearch search; int status; char *group, buf[16]; if (user == NULL) { user = ""; } if (pass == NULL) { pass = ""; } hPtr = Tcl_FindHashEntry(&serversTable, server); if (hPtr == NULL) { return NS_FORBIDDEN; } servPtr = Tcl_GetHashValue(hPtr); Ns_RWLockRdLock(&servPtr->lock); permPtr = Ns_UrlSpecificGet(server, method, url, uskey); if (permPtr == NULL) { status = NS_OK; goto done; } /* * The first checks below deny access. */ status = NS_UNAUTHORIZED; /* * Verify user password (if any). */ hPtr = Tcl_FindHashEntry(&servPtr->users, user); if (hPtr == NULL) { goto done; } userPtr = Tcl_GetHashValue(hPtr); if (userPtr->pass[0] != 0) { if (pass[0] == 0) { goto done; } Ns_Encrypt(pass, userPtr->pass, buf); if (!STREQ(userPtr->pass, buf)) { goto done; } } /* * Check for a vaild user address. */ if (!ValidateUserAddr(userPtr, peer)) { /* * Null user never gets forbidden--give a chance to enter password. */ deny: if (*user != '\0') { status = NS_FORBIDDEN; } goto done; } /* * Check user deny list. */ if (Tcl_FindHashEntry(&permPtr->denyuser, user) != NULL) { goto deny; } /* * Loop over all groups in this perm record, and then * see if the user is in any of those groups. */ hPtr = Tcl_FirstHashEntry(&permPtr->denygroup, &search); while (hPtr != NULL) { group = Tcl_GetHashKey(&permPtr->denygroup, hPtr); if (Tcl_FindHashEntry(&userPtr->groups, group) != NULL) { goto deny; } hPtr = Tcl_NextHashEntry(&search); } /* * Valid checks below allow access. */ status = NS_OK; /* * Check the allow lists, starting with users */ if (Tcl_FindHashEntry(&permPtr->allowuser, user) != NULL) { goto done; } /* * Loop over all groups in this perm record, and then * see if the user is in any of those groups. */ hPtr = Tcl_FirstHashEntry(&permPtr->allowgroup, &search); while (hPtr != NULL) { group = Tcl_GetHashKey(&permPtr->allowgroup, hPtr); if (Tcl_FindHashEntry(&userPtr->groups, group) != NULL) { goto done; } hPtr = Tcl_NextHashEntry(&search); } /* * Checks above failed. If implicit allow is not set, * change the status back to unauthorized. */ if (!permPtr->implicit_allow) { status = NS_UNAUTHORIZED; } done: Ns_RWLockUnlock(&servPtr->lock); return status; } /* *---------------------------------------------------------------------- * * ValidateUserAddr -- * * Validate that the peer address is valid for this user * * Results: * NS_TRUE if allowed, NS_FALSE if not * * Side effects: * None * *---------------------------------------------------------------------- */ static int ValidateUserAddr(User *userPtr, char *peer) { struct in_addr peerip, ip, mask; int retval; Tcl_HashSearch search; Tcl_HashEntry *hPtr, *entryPtr; if (peer == NULL) { return NS_TRUE; } peerip.s_addr = inet_addr(peer); if (peerip.s_addr == INADDR_NONE) { return NS_FALSE; } /* * Loop over each netmask, AND the peer address with it, * then see if that address is in the list. */ hPtr = Tcl_FirstHashEntry(&userPtr->masks, &search); while (hPtr != NULL) { mask.s_addr = (unsigned long) Tcl_GetHashKey(&userPtr->masks, hPtr); ip.s_addr = peerip.s_addr & mask.s_addr; /* * There is a potential match. Now make sure it works with the * right address's mask. */ entryPtr = Tcl_FindHashEntry(&userPtr->nets, (char *) ip.s_addr); if (entryPtr != NULL && mask.s_addr == (unsigned long) Tcl_GetHashValue(entryPtr)) { if (userPtr->filterallow) { return NS_TRUE; } else { return NS_FALSE; } } hPtr = Tcl_NextHashEntry(&search); } if (userPtr->filterallow) { retval = NS_FALSE; } else { retval = NS_TRUE; } if (userPtr->hosts.numEntries > 0) { Ns_DString addr; /* * If we have gotten this far, it's necessary to do a * reverse dns lookup and try to make a decision * based on that, if possible. */ Ns_DStringInit(&addr); if (Ns_GetHostByAddr(&addr, peer) == NS_TRUE) { char *start = addr.string; /* * If the hostname is blah.aol.com, check the hash table * for: * * blah.aol.com * .aol.com * .com * * Break out of the loop as soon as a match is found or * all possibilities are exhausted. */ while (start != NULL && start[0] != '\0') { char *last; last = start; hPtr = Tcl_FindHashEntry(&userPtr->hosts, start); if (hPtr != NULL) { if (userPtr->filterallow) { retval = NS_TRUE; } else { retval = NS_FALSE; } break; } start = strchr(start+1, '.'); if (start == NULL) { break; } if (last == start) { Ns_Log(Warning, "nsperm: " "invalid hostname '%s'", addr.string); break; } } } } return retval; } /* *---------------------------------------------------------------------- * * AddUserCmd -- * * Implements the Tcl command ns_perm adduser * * Results: * Tcl resut * * Side effects: * A user may be added to the global user hash table * *---------------------------------------------------------------------- */ static int AddUserCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv) { User *userPtr; Group *groupPtr; Tcl_HashSearch search; Tcl_HashEntry *hPtr; int new, i, allow; char *name, *slash, *net; struct in_addr ip, mask; if (argc < 5 || argc == 6) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " ", argv[1], " name encpass userfield ?-allow|-deny host ...?\"", NULL); return TCL_ERROR; } allow = 0; if (argc > 6) { if (STREQ(argv[5], "-allow")) { allow = 1; } else if (!STREQ(argv[5], "-deny")) { Tcl_AppendResult(interp, "invalid switch \"", argv[5], "\". ", "Should be -allow or -deny", NULL); return TCL_ERROR; } } name = argv[2]; userPtr = ns_malloc(sizeof(User)); strncpy(userPtr->pass, argv[3], sizeof(userPtr->pass) - 1); Tcl_InitHashTable(&userPtr->nets, TCL_ONE_WORD_KEYS); Tcl_InitHashTable(&userPtr->masks, TCL_ONE_WORD_KEYS); Tcl_InitHashTable(&userPtr->hosts, TCL_STRING_KEYS); Tcl_InitHashTable(&userPtr->groups, TCL_STRING_KEYS); userPtr->filterallow = allow; /* * Loop over each parameter and figure out what it is. The * possiblities are ipaddr/netmask, hostname, or partial hostname: * 192.168.2.3/255.255.255.0, foo.bar.com, or .bar.com */ for (i = 6; i < argc; ++i) { mask.s_addr = INADDR_NONE; net = argv[i]; slash = strchr(net, '/'); if (slash == NULL) { hPtr = Tcl_CreateHashEntry(&userPtr->hosts, net, &new); } else { /* * Try to conver the IP address/netmask into binary * values. */ *slash = '\0'; if (inet_aton(net, &ip) == 0 || inet_aton(slash+1, &mask) == 0) { Tcl_AppendResult(interp, "invalid address or hostname \"", net, "\". " "should be ipaddr/netmask or hostname", NULL); goto fail; } /* * Do a bitwise AND of the ip address with the netmask * to make sure that all non-network bits are 0. That * saves us from doing this operation every time a * connection comes in. */ ip.s_addr &= mask.s_addr; /* * Is this a new netmask? If so, add it to the list. * A list of netmasks is maintained and every time a * new connection comes in, the peer address is ANDed with * each of them and a lookup on that address is done * on the hash table of networks. */ (void) Tcl_CreateHashEntry(&userPtr->masks, (char *) mask.s_addr, &new); hPtr = Tcl_CreateHashEntry(&userPtr->nets, (char *) ip.s_addr, &new); Tcl_SetHashValue(hPtr, mask.s_addr); } if (!new) { Tcl_AppendResult(interp, "duplicate entry: ", net, NULL); goto fail; } } /* * Add the user. */ hPtr = Tcl_CreateHashEntry(&servPtr->users, name, &new); if (!new) { Tcl_AppendResult(interp, "duplicate user: ", name, NULL); goto fail; } Tcl_SetHashValue(hPtr, userPtr); return TCL_OK; fail: hPtr = Tcl_FirstHashEntry(&userPtr->groups, &search); while (hPtr != NULL) { groupPtr = Tcl_GetHashValue(hPtr); hPtr = Tcl_FindHashEntry(&groupPtr->users, name); if (hPtr != NULL) { Tcl_DeleteHashEntry(hPtr); } hPtr = Tcl_NextHashEntry(&search); } Tcl_DeleteHashTable(&userPtr->groups); Tcl_DeleteHashTable(&userPtr->masks); Tcl_DeleteHashTable(&userPtr->nets); Tcl_DeleteHashTable(&userPtr->hosts); ns_free(userPtr); return TCL_ERROR; } /* *---------------------------------------------------------------------- * * AddGroupCmd -- * * Add a group to the global groups list * * Results: * Standard tcl * * Side effects: * A group will be created * *---------------------------------------------------------------------- */ static int AddGroupCmd(Server *servPtr, Tcl_Interp *interp, int argc, char *argv[]) { char *name, *user; User *userPtr; Group *groupPtr; Tcl_HashSearch search; Tcl_HashEntry *hPtr; int new, param; if (argc < 4) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " ", argv[1], " name user ?user ...?", NULL); return TCL_ERROR; } /* * Create & populate the structure for a new group. */ name = argv[2]; groupPtr = ns_malloc(sizeof(Group)); Tcl_InitHashTable(&groupPtr->users, TCL_STRING_KEYS); /* * Loop over each of the users who is to be in the group, make sure * it's ok, and add him. Also put the group into the user's list * of groups he's in. */ for (param = 3; param < argc; param++) { user = argv[param]; hPtr = Tcl_FindHashEntry(&servPtr->users, user); if (hPtr == NULL) { Tcl_AppendResult(interp, "no such user: ", user, NULL); goto fail; } userPtr = Tcl_GetHashValue(hPtr); /* * Add the user to the group's list of users */ hPtr = Tcl_CreateHashEntry(&groupPtr->users, user, &new); if (!new) { dupuser: Tcl_AppendResult(interp, "user \"", user, "\" already in group \"", name, "\"", NULL); goto fail; } Tcl_SetHashValue(hPtr, userPtr); /* * Add the group to the user's list of groups */ hPtr = Tcl_CreateHashEntry(&userPtr->groups, name, &new); if (!new) { goto dupuser; } Tcl_SetHashValue(hPtr, groupPtr); } /* * Add the group to the global list of groups */ hPtr = Tcl_CreateHashEntry(&servPtr->groups, name, &new); if (!new) { Tcl_AppendResult(interp, "duplicate group: ", name, NULL); goto fail; } Tcl_SetHashValue(hPtr, groupPtr); return TCL_OK; fail: hPtr = Tcl_FirstHashEntry(&groupPtr->users, &search); while (hPtr != NULL) { userPtr = Tcl_GetHashValue(hPtr); hPtr = Tcl_FindHashEntry(&userPtr->groups, name); if (hPtr != NULL) { Tcl_DeleteHashEntry(hPtr); } hPtr = Tcl_NextHashEntry(&search); } Tcl_DeleteHashTable(&groupPtr->users); ns_free(groupPtr); return TCL_ERROR; } /* *---------------------------------------------------------------------- * * GroupCmd -- * * Add a group to allow or deny access. * * Results: * Std tcl * * Side effects: * A perm record may be created, a group will be added to its * deny list * *---------------------------------------------------------------------- */ static int AllowDenyCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv, int allow, int user) { Perm *permPtr; Ns_DString base; char *method, *url, *key; int flags, new; if (argc != 5 && argc != 6) { Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " cmd ?-noinherit? method url key", NULL); return TCL_ERROR; } if (argc != 6) { flags = 0; } else { if (!STREQ(argv[2], "-noinherit")) { Tcl_AppendResult(interp, "invalid option \"", argv[2], "\": should be -noinherit", NULL); return TCL_ERROR; } flags = NS_OP_NOINHERIT; } key = argv[argc-1]; url = argv[argc-2]; method = argv[argc-3]; /* * Construct the base url. */ Ns_DStringInit(&base); Ns_NormalizePath(&base, url); /* * Locate and verify the exact record. */ permPtr = Ns_UrlSpecificGet(servPtr->server, method, url, uskey); if (permPtr != NULL && !STREQ(base.string, permPtr->baseurl)) { permPtr = NULL; } if (permPtr == NULL) { permPtr = ns_malloc(sizeof(Perm)); permPtr->baseurl = Ns_DStringExport(&base); Tcl_InitHashTable(&permPtr->allowuser, TCL_STRING_KEYS); Tcl_InitHashTable(&permPtr->denyuser, TCL_STRING_KEYS); Tcl_InitHashTable(&permPtr->allowgroup, TCL_STRING_KEYS); Tcl_InitHashTable(&permPtr->denygroup, TCL_STRING_KEYS); Ns_UrlSpecificSet(servPtr->server, method, url, uskey, permPtr, flags, NULL); } permPtr->implicit_allow = !allow; if (user) { if (allow) { (void) Tcl_CreateHashEntry(&permPtr->allowuser, key, &new); } else { (void) Tcl_CreateHashEntry(&permPtr->denyuser, key, &new); } } else { if (allow) { (void) Tcl_CreateHashEntry(&permPtr->allowgroup, key, &new); } else { (void) Tcl_CreateHashEntry(&permPtr->denygroup, key, &new); } } Ns_DStringFree(&base); return TCL_OK; } ���������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/nsperm.html�����������������������������������������������������������������0000755�0001750�0001750�00000002705�07170655007�017143� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nsperm</title> </head> <body bgcolor="#ffffff"> <h2>nsperm -- Access Control (Permissions) Module</h2> <pre>$Header: /cvsroot/aolserver/aolserver/nsperm/nsperm.html,v 1.1 2000/10/10 18:03:51 kriston Exp $ </pre> <br> <a href="#Theory_of_Operation">Theory of Operation</a><br> <a href="#Known_Issues">Known Issues</a><br> <a href="#Sample_Configuration">Sample Configuration</a><br> <br> <br> <h3><a name="Theory_of_Operation"></a>Theory of Operation</h3> An AOLserver "filter" is registered for every connection.&nbsp; This filter looks at Tcl hash tables to determine the access controls for the URL and presents an HTTP authentication challenge if appropriate.<br> <br> <h3><a name="Known_Issues"></a>Known Issues</h3> There is some confusion as to whether the locks are being implemented in the correct way for this module.<br> <br> You can change permissions while a server is running, but there is currently no easy way to permanently save those permissions to the configuration file.&nbsp; The configuration file is read-only at the moment.<br> <br> <h3><a name="Sample_Configuration"></a>Sample Configuration</h3> There are no global configuration parameters for nsperm at this time.&nbsp; A sample set of permission records is in servers/server1/modules/nsperm.<br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </body> </html> �����������������������������������������������������������aolserver4-4.5.1/nsperm/init.tcl��������������������������������������������������������������������0000644�0001750�0001750�00000015153�07142130361�016404� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsperm/init.tcl,v 1.3 2000/08/02 23:38:25 kriston Exp $ # # # modules/nsperm/init.tcl - # Initialization for nsperm module # proc init_nsperm { } { set dir "[ns_info home]/servers/[ns_info server]/modules/nsperm" # # Parse hosts.allow # set filename "$dir/hosts.allow" if {[catch {set file [open $filename r]} ignore] == 0} { while {![eof $file]} { set line [gets $file] if {[string range $line 0 0] != "#"} { if {[string length $line] > 0} { set list [split $line :] if {[llength $list] != 2} { ns_log error "init_nsperm: bad line in $filename: $line" } else { set user [lindex $list 0] set addrs [lindex $list 1] foreach addr $addrs { set addr [string trim $addr] lappend _ns_allow($user) $addr } } } } } close $file } # # Parse hosts.deny # set filename "$dir/hosts.deny" if {[catch {set file [open $filename r]} ignore] == 0} { while {![eof $file]} { set line [gets $file] if {[string range $line 0 0] != "#"} { if {[string length $line] > 0} { set list [split $line :] if {[llength $list] != 2} { ns_log error "init_nsperm: bad line in $filename: $line" } else { set user [lindex $list 0] set addrs [lindex $list 1] foreach addr $addrs { set addr [string trim $addr] if {[info exists _ns_allow($user)]} { ns_log error "init_nsperm: both allow and deny entries exist for user \"$user\"" } else { lappend _ns_deny($user) $addr } } } } } } close $file } # # Parse passwd # set filename "$dir/passwd" if {[catch {set file [open $filename r]} ignore] == 0} { while {![eof $file]} { set line [gets $file] if {[string range $line 0 0] != "#"} { if {[string length $line] > 0} { set list [split $line :] if {[llength $list] != 7} { ns_log error "nsperm_init: bad line in $filename: $line" } else { set user [lindex $list 0] set pass [lindex $list 1] set uf1 [lindex $list 4] set cmd "ns_perm adduser $user \"$pass\" \"$uf1\"" if {[info exists _ns_allow($user)]} { append cmd " -allow " foreach a $_ns_allow($user) { append cmd " $a" } } if {[info exists _ns_deny($user)]} { append cmd " -deny " foreach a $_ns_deny($user) { append cmd " $a" } } eval $cmd } } } } close $file } # # Parse group # set filename "$dir/group" if {[catch {set file [open $filename r]} ignore] == 0} { while {![eof $file]} { set line [gets $file] if {[string range $line 0 0] != "#"} { if {[string length $line] > 0} { set list [split $line :] if {[llength $list] != 4} { ns_log error "nsperm_init: bad line in $filename: $line" } else { set group [lindex $list 0] set users [split [lindex $list 3] ,] set cmd "ns_perm addgroup $group" foreach user $users { set user [string trim $user] append cmd " $user" } eval $cmd } } } } close $file } # # Parse perms # set filename "$dir/perms" if {[catch {set file [open $filename r]} ignore] == 0} { while {![eof $file]} { set line [gets $file] if {[string range $line 0 0] != "#"} { if {[string length $line] > 0} { if {[llength $line] != 5} { ns_log error "nsperm_init: bad line in $filename: $line" } else { set action [lindex $line 0] set inherit [lindex $line 1] set method [lindex $line 2] set url [lindex $line 3] set entity [lindex $line 4] set cmd "ns_perm $action" if {$inherit == "noinherit"} { append cmd " -noinherit" } append cmd " $method $url \"$entity\"" eval $cmd } } } } close $file } } # # ns_permpasswd lets you set a password in the nsperm passwd file. # It is implemented in tcl because the passwd file is no inherently a # part of the nsperm module--just a nice interface provided by the # supporting Tcl code. # # oldpass must either be the user's old password or nsadmin's password # for the action to succeed. # proc ns_permpasswd { targetuser oldpass newpass } { set dir "[ns_info home]/servers/[ns_info server]/modules/nsperm" set filename "$dir/passwd" set file [open $filename r] set oldfile "" # # Verify that this is an allowed action # if {[catch {ns_perm checkpass $targetuser $oldpass} ignore] != 0} { if {[catch {ns_perm checkpass nsadmin $oldpass} ignore] != 0} { return "incorrect old password" } } while {![eof $file]} { set line [gets $file] set aline $line if {[string range $line 0 0] != "#"} { if {[string length $line] > 0} { set list [split $line :] if {[llength $list] != 7} { ns_log error "ns_permpassword: bad line in $filename: $line" } else { set user [lindex $list 0] if {$user == $targetuser} { set aline "[lindex $list 0]:[ns_crypt $newpass CU]:[lindex $list 2]:[lindex $list 3]:[lindex $list 4]:[lindex $list 5]:[lindex $list 6]" } } } } lappend oldfile $aline } close $file set file [open $filename w] foreach l $oldfile { puts $file $l } close $file ns_perm setpass $targetuser [ns_crypt $newpass CU] return "" } # # Initialize the module # init_nsperm ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsperm/hosts.deny������������������������������������������������������������������0000644�0001750�0001750�00000000473�07103556250�016763� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # This is the AOLserver hosts.deny file. It allows you to specify which # hosts may not log in as certain users. If you have an entry in this # file for a given user, you may not have an entry in hosts.allow for # that same user. # # Example: # # nsadmin: hacker.badguy.com, .aol.com, 10.2.114.0/255.255.255.0 # �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nssock/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014735� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nssock/Makefile��������������������������������������������������������������������0000644�0001750�0001750�00000003024�10300725025�016360� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nssock/Makefile,v 1.18 2005/08/17 21:20:21 jgdavidson Exp $ # MOD = nssock OBJS = nssock.o MODINIT = NsSock_ModInit include ../include/ns.mak ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nssock/nssock.html�����������������������������������������������������������������0000755�0001750�0001750�00000002115�07170655010�017120� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>nssock</title> </head> <body bgcolor="#ffffff"> <h2>nssock -- Socket (HTTP) Driver Module</h2> <pre>$Header: /cvsroot/aolserver/aolserver/nssock/nssock.html,v 1.1 2000/10/10 18:03:52 kriston Exp $ </pre> <br> <a href="#Theory_of_Operation">Theory of Operation</a><br> <a href="#Known_Issues">Known Issues</a><br> <a href="#Sample_Configuration">Sample Configuration</a><br> <br> <br> <h3><a name="Theory_of_Operation"></a>Theory of Operation</h3> Please refer to <a href="http://aolserver.com/doc/">http://aolserver.com/doc/</a>for the time being.<br> <br> <h3><a name="Known_Issues"></a>Known Issues</h3> There is some thought going into whether a connection FIFO should be used instead of a connection queue for incoming connections.<br> <br> <h3><a name="Sample_Configuration"></a>Sample Configuration</h3> Please refer to the <a href="../doc/config.txt">Configuration Reference</a>. <pre> </pre> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> </body> </html> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nssock/nssock.c��������������������������������������������������������������������0000644�0001750�0001750�00000011014�10275641107�016373� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nssock.c -- * * Call internal Ns_DriverInit. * */ #include "ns.h" static Ns_DriverProc SockProc; static int SockRecv(SOCKET sock, struct iovec *bufs, int nbufs); static int SockSend(SOCKET sock, struct iovec *bufs, int nbufs); /* *---------------------------------------------------------------------- * * NsSock_ModInit -- * * Sock module init routine. * * Results: * See Ns_DriverInit. * * Side effects: * See Ns_DriverInit. * *---------------------------------------------------------------------- */ int NsSock_ModInit(char *server, char *module) { Ns_DriverInitData init; char *path; int async; path = Ns_ConfigGetPath(server, module, NULL); if (!Ns_ConfigGetBool(path, "async", &async)) { async = 1; } /* * Initialize the driver with the async option so that the driver thread * will perform event-driven read-ahead of the request before * passing to the connection for processing. */ init.version = NS_DRIVER_VERSION_1; init.name = "nssock"; init.proc = SockProc; init.opts = (async ? NS_DRIVER_ASYNC : 0); init.arg = NULL; init.path = NULL; return Ns_DriverInit(server, module, &init); } /* *---------------------------------------------------------------------- * * SockProc -- * * Socket driver callback proc. This driver attempts efficient * scatter/gatter I/O if requested and only blocks for the * driver configured time once if no bytes are available. * * Results: * For close and keep, always 0. For send and recv, # of bytes * processed or -1 on error or timeout. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int SockProc(Ns_DriverCmd cmd, Ns_Sock *sock, struct iovec *bufs, int nbufs) { int n; switch (cmd) { case DriverRecv: n = SockRecv(sock->sock, bufs, nbufs); if (n < 0 && ns_sockerrno == EWOULDBLOCK && Ns_SockWait(sock->sock, NS_SOCK_READ, sock->driver->recvwait) == NS_OK) { n = SockRecv(sock->sock, bufs, nbufs); } break; case DriverSend: n = SockSend(sock->sock, bufs, nbufs); if (n < 0 && ns_sockerrno == EWOULDBLOCK && Ns_SockWait(sock->sock, NS_SOCK_WRITE, sock->driver->sendwait) == NS_OK) { n = SockSend(sock->sock, bufs, nbufs); } break; case DriverKeep: case DriverClose: /* NB: Nothing to do. */ n = 0; break; default: /* Unsupported command. */ n = -1; break; } return n; } static int SockRecv(SOCKET sock, struct iovec *bufs, int nbufs) { #ifdef _WIN32 int n, flags; flags = 0; if (WSARecv(sock, (LPWSABUF)bufs, nbufs, &n, &flags, NULL, NULL) != 0) { n = -1; } return n; #else struct msghdr msg; memset(&msg, 0, sizeof(msg)); msg.msg_iov = bufs; msg.msg_iovlen = nbufs; return recvmsg(sock, &msg, 0); #endif } static int SockSend(SOCKET sock, struct iovec *bufs, int nbufs) { #ifdef _WIN32 int n; if (WSASend(sock, (LPWSABUF)bufs, nbufs, &n, 0, NULL, NULL) != 0) { n = -1; } return n; #else struct msghdr msg; memset(&msg, 0, sizeof(msg)); msg.msg_iov = bufs; msg.msg_iovlen = nbufs; return sendmsg(sock, &msg, 0); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/����������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�014736� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/ns_zlib.n�������������������������������������������������������������������0000644�0001750�0001750�00000007024�10421475713�016556� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� '\" '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/nszlib/ns_zlib.n,v 1.1 2006/04/19 18:04:59 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_zlib n 4.5 AOLserver "AOLserver Zlib Extension" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_zlib \- Zlib compression support .SH SYNOPSIS .nf \fBns_zlib compress\fR \fIstring\fR \fBns_zlib gunzip\fR \fIfile\fR \fBns_zlib gzip\fR \fIstring\fR \fBns_zlib gzipfile\fR \fIfile\fR \fBns_zlib uncompress\fR \fIstring\fR .fi .BE .SH DESCRIPTION The \fBns_zlib\fR command enables compressing and uncompressing of strings or files. The command is available if the \fInszlib.so\fR module is loaded into AOLserver or the \fIlibnszlib.so\fR, \fInszlib.dll\fR, or \fIlibnszlib.dylib\fR dynamic library is loaded using the \fBload\fR command in a suitable \fItclsh\fR such as \fInstclsh\fR. .TP \fBns_zlib compress\fR \fIstring\fR This command compresses the given string and returns a Tcl byte array object with the compressed data. .TP \fBns_zlib gunzip\fR \fIfile\fR This command uncompresses the contents of the given gzipped file and returns a string as the result. .TP \fBns_zlib gzipfile\fR \fIfile\fR This command is similar to the \fBgzip\fR shell routines, compressing the given file into a new file with the \fI.gz\fR extension. If successful, the original uncompressed file is deleted. .TP \fBns_zlib uncompress\fR \fIbytearray\fR This command takes a byte array object which includes compressed data and returns an uncompressed string object. .SH EXAMPLES .PP The following examples demonstrate compressing and uncompressing a string; .CS .nf # Compress Tcl string set test "This is test string" set data [ns_zlib compress $test] set test [ns_zlib uncompress $data] \fI--> returns "This is test string"\fR # Compress the string into gzip format set gzip [ns_zlib gzip $test] # Save as gzip file set fd [open /tmp/test.gz w] fconfigure $fd -translation binary -encoding binary puts -nonewline $fd $gzip close $fd # Uncompress gzipped file set test [ns_zlib gunzip /tmp/test.gz] \fI--> returns "This is test string"\fR .fi .CE .SH "SEE ALSO" ns_adp_ctl(n), load(n) .SH KEYWORDS GZIP, compress, uncompress ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/Makefile��������������������������������������������������������������������0000644�0001750�0001750�00000003142�10421517375�016375� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nszlib/Makefile,v 1.2 2006/04/19 20:35:09 shmooved Exp $ ifndef ZLIB ZLIB = /usr/lib endif HDRS = nszlib.h MOD = nszlib MAN = ns_zlib.n OBJS = nszlib.o MODINIT = NsZlibModInit DLLLIBS = -L$(ZLIB) -lz include ../include/ns.mak ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/README����������������������������������������������������������������������0000644�0001750�0001750�00000003344�10421475713�015620� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ZLib Module for AOLserver 4.5 Release 2.0 This is AOLserver module that implements Zlib interface. Allows compressing/uncompressing Tcl strings, gzip file support, and support for the Ns_Gzip AOLserver routine. Compiling and Installing: To compile this driver, you'll need to have zlib library compiled and installed. Zlib is installed by default on OS/X and can be easily added for Linux and FreeBSD (e.g., the zlib-devel package). The makefile will produce both a dynamic library and an AOLserver module. libnszlib: The library includes an implementation of an "ns_zlib" command to provide compression capabilities to a Tcl interpreter. It can be used with the "load" command, e.g., "load libnszlib.so". The library depends on AOLserver libnsd and Zlib libzlib libraries so they need to found in the dynamic linker path as well. nszlib.so: The AOLserver module, "nszlib.so", includes a call to both add the "ns_zlib" command to all interpreters for the virutal server and also installs an "Ns_GzipProc" so that the "Ns_Gzip" function can be used to compress content, e.g., at the end of an ADP request. See the Ns_Gzip(3) man page for details. ns_zlib command: ns_zlib compress data Returns compressed string ns_zlib uncompress data Uncompresses previously compressed string ns_zlib gzip data Returns compressed string in gzip format, string can be saved in a file with extension .gz and gzip will be able to uncompress it ns_zlib gzipfile file Compresses the specified file, creating a file with the same name but a .gz suffix appened ns_zlib gunzip file Uncompresses gzip file and returns text Authors: Vlad Seryakov vlad@crystalballinc.com Jim Davidson jgdavidson@aol.com ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/example.tcl�����������������������������������������������������������������0000644�0001750�0001750�00000000736�10421475713�017101� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Compress Tcl string set test "This is test string for compression" set data [ns_zlib compress $test] set test [ns_zlib uncompress $data] ns_log Debug Uncompress: $test # Compress the string into gzip format set gzip [ns_zlib gzip $test] # Save as gzip file set fd [open /tmp/test.gz w] fconfigure $fd -translation binary -encoding binary puts -nonewline $fd $gzip close $fd # Uncompress gzipped file set test [ns_zlib gunzip /tmp/test.gz] ns_log Debug Ungzipped: $test ����������������������������������aolserver4-4.5.1/nszlib/nszlib.c��������������������������������������������������������������������0000644�0001750�0001750�00000026163�10423210075�016377� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.lcs.mit.edu/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Copyright (C) 2001-2003 Vlad Seryakov * All rights reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nszlib.c -- Zlib API module * * ns_zlib usage: * * ns_zlib compress data * Returns compressed string * * ns_zlib uncompress data * Uncompresses previously compressed string * * ns_zlib gzip data * Returns compressed string in gzip format, string can be saved in * a file with extension .gz and gzip will be able to uncompress it * * ns_zlib gzipfile file * Compresses the specified file, creating a file with the * same name but a .gz suffix appened * * ns_zlib gunzip file * Uncompresses gzip file and returns text * * * Authors * * Vlad Seryakov vlad@crystalballinc.com */ #include "nszlib.h" #define VERSION "4.5" static char header[] = { 037, 0213, /* GZIP magic number. */ 010, /* Z_DEFLATED */ 0, /* flags */ 0,0,0,0, /* timestamp */ 0, /* xflags */ 03}; /* Unix OS_CODE */ static Ns_TclTraceProc ZlibTrace; static Tcl_ObjCmdProc ZlibObjCmd; static Ns_GzipProc ZlibGzip; /* *---------------------------------------------------------------------- * * Nszlib_Init-- * * Tcl load-command entry point. * * Results: * TCL_OK. * * Side effects: * Adds the ns_zlib command. * *---------------------------------------------------------------------- */ int Nszlib_Init(Tcl_Interp *interp) { Tcl_CreateObjCommand(interp, "ns_zlib",ZlibObjCmd ,NULL, NULL); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsZlibModInit-- * * AOLserver module entry point. * * Results: * NS_OK. * * Side effects: * Installs ZlibGzip as the Ns_Gzip proc and registers * a trace to create ns_zlib command in all new interps. * *---------------------------------------------------------------------- */ int NsZlibModInit(char *server, char *module) { Ns_SetGzipProc(ZlibGzip); Ns_TclRegisterTrace(server, ZlibTrace, NULL, NS_TCL_TRACE_CREATE); return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_ZlibCompress -- * * Compress a string. * * Results: * Pointer to ns_malloc's string of compressed data or NULL * on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ unsigned char * Ns_ZlibCompress(unsigned char *inbuf,unsigned long inlen,unsigned long *outlen) { int rc; unsigned long crc; unsigned char *outbuf; *outlen = inlen*1.1+20; outbuf = ns_malloc(*outlen); *outlen = (*outlen)-8; rc = compress2(outbuf,outlen,inbuf,inlen,3); if(rc != Z_OK) { Ns_Log(Error,"Ns_ZlibCompress: error %d",rc); ns_free(outbuf); return 0; } crc = crc32(crc32(0,Z_NULL,0),inbuf,inlen); crc = htonl(crc); inlen = htonl(inlen); memcpy(outbuf+(*outlen),&crc,4); memcpy(outbuf+(*outlen)+4,&inlen,4); (*outlen) += 8; return outbuf; } /* *---------------------------------------------------------------------- * * Ns_ZlibUncompress -- * * Uncompress a string. * * Results: * Pointer to ns_malloc'ed string of uncompressed data or NULL * on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ unsigned char * Ns_ZlibUncompress(unsigned char *inbuf,unsigned long inlen, unsigned long *outlen) { int rc; unsigned long crc; unsigned char *outbuf; memcpy(outlen,&inbuf[inlen-4],4); *outlen = ntohl(*outlen); outbuf = ns_malloc((*outlen)+1); rc = uncompress(outbuf,outlen,inbuf,inlen-8); if(rc != Z_OK) { Ns_Log(Error,"Ns_ZlibUncompress: error %d",rc); ns_free(outbuf); return 0; } memcpy(&crc,&inbuf[inlen-8],4); crc = ntohl(crc); if(crc != crc32(crc32(0,Z_NULL,0),outbuf,*outlen)) { Ns_Log(Error,"Ns_ZlibUncompress: crc mismatch"); ns_free(outbuf); return 0; } return outbuf; } /* *---------------------------------------------------------------------- * * ZlibGzip -- * * Compress procedure for Ns_Gzip. * * Results: * NS_OK if compression worked, NS_ERROR otherwise. * * Side effects: * Will write compressed content to given Tcl_DString. * *---------------------------------------------------------------------- */ static int ZlibGzip(char *buf, int len, int level, Tcl_DString *dsPtr) { Bytef *ubuf = (Bytef *) buf; uLong ulen = (uLong) len; #define FOOTER_SIZE 8 unsigned char *fp; uLongf glen; Bytef *gbuf; uLong crc; int skip; /* * Size the dstring to hold the header, footer, and max compressed output. */ glen = (uLongf) compressBound(len) + sizeof(header) + FOOTER_SIZE; Tcl_DStringSetLength(dsPtr, (int) glen); /* * Compress output to the dstring starting 2-bytes from the end of * the where the header will be written and then write the header * at the start of the dstring. */ gbuf = (Bytef *) dsPtr->string; skip = sizeof(header) - 2; glen -= skip; if (compress2(gbuf + skip, &glen, ubuf, ulen, level) != Z_OK) { return NS_ERROR; } memcpy(gbuf, header, sizeof(header)); /* * Adjust the size of the dstring to the actual size of compressed data, * header, and footer, less the 2-bytes overwritten by the header * and the 2-bytes to be overwritten by the footer. */ glen = glen + sizeof(header) - 6; Tcl_DStringSetLength(dsPtr, (int) glen + FOOTER_SIZE); /* * Calculate the CRC and append it and length as the footer. */ crc = crc32(0, Z_NULL, 0); crc = crc32(crc, ubuf, ulen); fp = (unsigned char *) dsPtr->string + glen; *fp++ = (crc & 0x000000ff); *fp++ = (crc & 0x0000ff00) >> 8; *fp++ = (crc & 0x00ff0000) >> 16; *fp++ = (crc & 0xff000000) >> 24; *fp++ = (len & 0x000000ff); *fp++ = (len & 0x0000ff00) >> 8; *fp++ = (len & 0x00ff0000) >> 16; *fp++ = (len & 0xff000000) >> 24; return NS_OK; } /* *---------------------------------------------------------------------- * * ZlibTrace -- * * AOLserver Tcl trace to add ns_zlib command. * * Results: * NS_OK. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ZlibTrace(Tcl_Interp *interp, void *ignored) { Nszlib_Init(interp); return NS_OK; } /* *---------------------------------------------------------------------- * * ZlibObjCmd -- * * Implements the ns_zlib command. * * Results: * Standard Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ZlibObjCmd(ClientData ignored, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[]) { Tcl_DString ds; int fd, rc, nread; Tcl_Obj *obj; char *ifile, *ofile, buf[32768]; gzFile gin, gout; unsigned char *inbuf,*outbuf; unsigned long inlen,outlen; static CONST char *opts[] = { "compress", "uncompress", "gzip", "gunzip", "gzipfile", NULL }; enum { ZCompIdx, ZUnCompIdx, ZGzipIdx, ZGunzipIdx, ZGzipFileIdx } opt; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?arg?"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, (int *) &opt) != TCL_OK) { return TCL_ERROR; } switch (opt) { case ZCompIdx: inbuf = Tcl_GetByteArrayFromObj(objv[2],(int*)&inlen); if(!(outbuf = Ns_ZlibCompress(inbuf,inlen,&outlen))) { Tcl_AppendResult(interp,"nszlib: compress failed",0); return TCL_ERROR; } Tcl_SetObjResult(interp,Tcl_NewByteArrayObj(outbuf,(int)outlen)); ns_free(outbuf); break; case ZUnCompIdx: inbuf = Tcl_GetByteArrayFromObj(objv[2],(int*)&inlen); if(!(outbuf = Ns_ZlibUncompress(inbuf,inlen,&outlen))) { Tcl_AppendResult(interp,"nszlib: uncompress failed",0); return TCL_ERROR; } Tcl_SetObjResult(interp,Tcl_NewStringObj((char *) outbuf,(int)outlen)); ns_free(outbuf); break; case ZGzipIdx: inbuf = Tcl_GetByteArrayFromObj(objv[2],(int*)&inlen); obj = NULL; Tcl_DStringInit(&ds); if (ZlibGzip((char *) inbuf, inlen, 3, &ds) == NS_OK) { obj = Tcl_NewByteArrayObj((unsigned char *) ds.string, ds.length); } Tcl_DStringFree(&ds); if (obj == NULL) { Tcl_AppendResult(interp, "gzip failed", NULL); return TCL_ERROR; } Tcl_SetObjResult(interp, obj); break; case ZGunzipIdx: gin = gzopen(Tcl_GetString(objv[2]), "rb"); if(!gin) { Tcl_AppendResult(interp,"nszlib: gunzip: cannot open ", Tcl_GetString(objv[2]),0); return TCL_ERROR; } obj = Tcl_NewStringObj(0,0); for(;;) { nread = gzread(gin, buf, sizeof(buf)); if (nread == 0) { break; } else if (nread < 0) { Tcl_AppendResult(interp,"nszlib: gunzip: read error ", gzerror(gin,&rc),0); Tcl_DecrRefCount(obj); gzclose(gin); return TCL_ERROR; } Tcl_AppendToObj(obj, buf, nread); } Tcl_SetObjResult(interp,obj); gzclose(gin); break; case ZGzipFileIdx: ifile = Tcl_GetString(objv[2]); fd = open(ifile, O_RDONLY|O_BINARY); if (fd < 0) { Tcl_AppendResult(interp,"nszlib: gzipfile: cannot open ", ifile, 0); return TCL_ERROR; } obj = Tcl_NewStringObj(Tcl_GetString(objv[2]),-1); Tcl_AppendToObj(obj,".gz",3); ofile = Tcl_GetString(obj); if(!(gout = gzopen(ofile,"wb"))) { Tcl_AppendResult(interp,"nszlib: gzipfile: cannot create ", ofile, 0); Tcl_DecrRefCount(obj); return TCL_ERROR; } for(;;) { nread = read(fd, buf, sizeof(buf)); if (nread == 0) { break; } if (nread < 0) { Tcl_AppendResult(interp,"nszlib: gzipfile: read error ", strerror(errno),0); goto err; } if(gzwrite(gout, buf, (unsigned) nread) != nread) { Tcl_AppendResult(interp,"nszlib: gunzip: write error ", gzerror(gout,&rc),0); err: close(fd); gzclose(gout); unlink(ofile); Tcl_DecrRefCount(obj); return TCL_ERROR; } } close(fd); gzclose(gout); unlink(ifile); Tcl_SetObjResult(interp, obj); break; } return TCL_OK; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/nszlib.h��������������������������������������������������������������������0000644�0001750�0001750�00000003253�10421475713�016411� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.lcs.mit.edu/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * Copyright (C) 2001-2003 Vlad Seryakov * All rights reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nszlib.h -- * * Public header of AOLserver zlib extensions. * * $Header: /cvsroot/aolserver/aolserver/nszlib/nszlib.h,v 1.1 2006/04/19 18:04:59 jgdavidson Exp $ * */ #ifndef NSZLIB_H #define NSZLIB_H #include "ns.h" #include "zlib.h" NS_EXTERN unsigned char *Ns_ZlibCompress(unsigned char *inbuf, unsigned long inlen, unsigned long *outlen); NS_EXTERN unsigned char *Ns_ZlibUncompress(unsigned char *inbuf, unsigned long inlen, unsigned long *outlen); #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nszlib/ChangeLog�������������������������������������������������������������������0000644�0001750�0001750�00000000607�10421475713�016511� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2006-04-19 Jim Davidson jgdavidson@aol.com Updated to be the core Zlib extension for AOLserver including support for Ns_Gzip via the Ns_GzipSetProc call. 2004-04-02 Vlad Seryakov vlad@crystalballinc.com * memory leak and Ns_ZlibCompress/Uncompress functions 2003-11-02 Vlad Seryakov vlad@crystalballinc.com * added gzipfile command as suggested by mbryzek@fastmail.fm �������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015157� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/Makefile�������������������������������������������������������������������0000755�0001750�0001750�00000003312�10447625047�016624� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsproxy/Makefile,v 1.3 2006/06/26 00:28:23 jgdavidson Exp $ # MOD = nsproxy PGM = nsproxy PGMOBJS = nsproxy.o OBJS = nsproxylib.o MODOBJS = nsproxymod.o HDRS = nsproxy.h MODINIT = NsProxy_ModInit INSTALL = install-hdr MAN = ns_proxy.n include ../include/ns.mak install-hdr: $(INST) -d $(AOLSERVER)/include $(HDRS) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/ns_proxy.n�����������������������������������������������������������������0000644�0001750�0001750�00000027631�10447625056�017233� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\ '\" The contents of this file are subject to the AOLserver Public License '\" Version 1.1 (the "License"); you may not use this file except in '\" compliance with the License. You may obtain a copy of the License at '\" http://aolserver.com/. '\" '\" Software distributed under the License is distributed on an "AS IS" '\" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See '\" the License for the specific language governing rights and limitations '\" under the License. '\" '\" The Original Code is AOLserver Code and related documentation '\" distributed by AOL. '\" '\" The Initial Developer of the Original Code is America Online, '\" Inc. Portions created by AOL are Copyright (C) 1999 America Online, '\" Inc. All Rights Reserved. '\" '\" Alternatively, the contents of this file may be used under the terms '\" of the GNU General Public License (the "GPL"), in which case the '\" provisions of GPL are applicable instead of those above. If you wish '\" to allow use of your version of this file only under the terms of the '\" GPL and not to allow others to use your version of this file under the '\" License, indicate your decision by deleting the provisions above and '\" replace them with the notice and other provisions required by the GPL. '\" If you do not delete the provisions above, a recipient may use your '\" version of this file under either the License or the GPL. '\" '\" '\" $Header: /cvsroot/aolserver/aolserver/nsproxy/ns_proxy.n,v 1.2 2006/06/26 00:28:30 jgdavidson Exp $ '\" '\" .so man.macros .TH ns_proxy n 4.5 AOLserver "AOLserver Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME ns_proxy \- Proxy-process Tcl interface .SH SYNOPSIS .nf \fBns_proxy active \fIpool\fR \fBns_proxy cleanup\fR \fBns_proxy config\fR \fIpool ?-opt val -opt val ...\fR \fBns_proxy eval \fIhandle script ?timeout?\fR \fBns_proxy get\fR \fIpool ?-handle n -timeout ms? \fBns_proxy ping\fR \fIhandle\fR \fBns_proxy release \fIhandle\fR \fBns_proxy recv \fIhandle\fR \fBns_proxy send \fIhandle script\fR \fBns_proxy wait \fIhandle ?timeout?\fR .fi .BE .SH DESCRIPTION .PP This command provides a simple, robust proxy mechanism to evaluate Tcl scripts in a separate, pipe-connected process. This approach can be useful both to isolate potentially thread-unsafe code outside the address space of a multithreaded process such as AOLserver or to enable separation and timeout of potentially misbehaving, long running scripts. .PP The command is provided by the \fInsproxy\fR dynamic library which can be loaded into an interpreter via the Tcl \fBload\fR command, for example: .PP .CS load /usr/local/lib/libnsproxy.so ns_proxy ... .CE .PP It can also possible to load the library into all interpreters of an AOLserver virutal server by specifying an \fInsproxy.so\fR entry in the server's module config entry, for example: .CS ns_section ns/server/server1/modules ns_param nsproxy nsproxy.so .CE .PP When loaded, the library adds the single \fBns_proxy\fR command with takes multiple options as described below. Proxies are normally created on demand when requested and connected to the parent process via pipes used to send scripts and receive response. The processes remain active until the parent process exits, effectively closing all pipes to the slave processes. .TP \fBns_proxy active \fIpool\fR Returns a list of all currently evaluating scripts in proxies for the given \fIpool\fR. The output is a list which includes two elements, the string name of the proxy handle and the string for the script being executed. It is also possible to view the currently evaluating scripts with the Unix \fIps\fR command as the proxy slave process re-writes it's command argument space with the request script before evaluation and clears it after sending the result. .TP \fBns_proxy cleanup\fR Releases any handles from any pools currently owned by a thread. This command is intended to be used as part of a garbage collection step at the end of a transaction. Calling this command within AOLserver is not necessary as the module registers a trace to release all handles via the \fBNs_TclRegisterTrace\fR facility when interpreters are deallocated after a transaction, for example, at the end of a connection. .TP \fBns_proxy config\fR \fIpool ?-opt val -opt val ...\fR Configures options for the pool specified by \fIpool\fR. The pool is created with default options if it does not already exist. The result of \fBns_proxy config\fR is a list of the current options in the form \fI-opt val -opt val ...\fR. Configurable options include: .TP -init script Specifies a script to evaluate when proxies are started. This can be used to load additional libraries and/or source script files. The default is no script. .TP -reinit script Specifies a script to evaluate after being allocated and before being returned to the caller. This can be used to re-initalizes shared state. The default is no script. .TP -min n Sets the minimum number of proxy slave processes to pre-start before any allocations. This defaults to 0 which results in on-demand start the first time proxies are requested. Setting it to a higher number can be useful if initialization takes a significant amount of time. .TP -max n Sets the maximum number of proxy slave processes. Requests for proxies beyond the maximum will result in requesting threads waiting for existing proxies to be available instead of creating new proxy processes. Setting this value to 0 disables the pool, causing all subsequent allocation requests to fail immediately (currently allocated proxies, if any, remain valid). .TP -exec program Specifies the filename of a slave proxy program. This defaults to \fInsproxy\fR in the \fIbin\fR subdirectory of the AOLserver process. It is possible to create a custom program and enter the proxy event loop with the \fBNs_ProxyMain\fR application startup routine; see the source code for details. .TP -getimeout ms Specifies the maximum time to wait to allocate handles from the pool. The default is 500 milliseconds, i.e., 1/2 of a second. .TP -evaltimeout ms Specifies the maximum time to wait for a script to be evaluated in a proxy. This parameter can be overridden on a per-call basis with the optional \fItimeout\fR parameter to \fBns_proxy eval\fR. The default is 100 milliseconds, i.e., 1/10 of a second which assumes scripts are evaluated with minimal delay. .TP -sendtimeout ms .TP -recvtimeout ms Specifies the maximium time to wait to send a script and receive a result from a proxy. The default is 100 milliseconds, i.e., 1/10 of a second which assumes minimal delay sending and receiving reasonably sized scripts and results over the connecting pipe. .TP -waittimeout ms Specifies the maximum time to wait for a proxy to exit. The wait is performed in a dedicated reaper thread. The reaper will close the connection pipe and wait the given timeout. If the timeout is exceeded, the reaper will send a SIGTERM signal and finally a SIGKILL signal to ensure the process eventually exits. The default is 100 milliseconds which should be ample time for a graceful exit unless the process is hung executing a very long, misbehaving script, resulting in a more disruptive SIGTERM or SIGKILL. .TP \fBns_proxy eval \fIhandle script ?timeout?\fR Evalutes \fIscript\fR in the proxy specified by \fIhandle\fR. The optional \fItimeout\fR argument specifies a maximum number of milliseconds to wait for the command to complete before raising an error (see \fBERROR HANDLING\fR below for details on handling errors). .TP \fBns_proxy send \fIhandle script\fR Sends \fIscript\fR in the proxy specified by \fIhandle\fR. Unlike with \fBns_proxy eval\fR, this option will return immediately while the script continues to execute in the proxy process. A later \fBns_proxy wait\fR followed by an \fBns_proxy recv\fR is expected. .TP \fBns_proxy wait \fIhandle ?timeout?\fR Waits for a script sent via \fBns_proxy send\fR in the proxy specified by the \fIhandle\fR argument to complete. The optional \fItimeout\fR parameter specifies the number of milliseconds to wait for the script to complete, the default is an indefinite wait. .TP \fBns_proxy recv \fIhandle\fR Receives a response from a script that was sent via \fBns_proxy send\fR and waited on via \fBns_proxy wait\fR. .TP \fBns_proxy get\fR \fIpool ?-handle n -timeout ms? Returns one or more handles to proxies from the specified \fIpool\fR. The pool will be created with default options if it does not already exist. The optional \fI-handle n\fR arguments can be used to specify the number of handles to allocate, the default being 1. The optional \fI-timeout ms\fR arguments specifies the maximum amount of time in milliseconds to wait for the handles to become availale before raising an error (see \fBERROR HANDLING\fR below for details on handling errors). Requesting more than one handle in a single call if more than one handle is required is necessary as it is an error to request handles from a pool from which handles are already owned in the thread. This restriction is to avoid a possible deadlock condition and is similar to the manner in which the \fBns_db gethandles\fR command operates. .TP \fBns_proxy ping\fR \fIhandle\fR This command sends a null request to the proxy specified by the \fIhandle\fR argument. The proxy will be verified alive and restarted if necessary. This command is not normally required as the \fBns_proxy eval\fR command will also verify and restart proxies as needed. .TP \fBns_proxy release \fIhandle\fR This command can be used to release a single proxy specified by the \fIhandle\fR argument. All handles owned by a thread to the cooresponding pool must be returned before any handles can be allocated again. Within AOLserver, a call to this routine is recommended for clarity but not stricting necessary. As described above, AOLserver installs a trace to release all handles at the end of every connection during interprepter deallocation. .SH "ERROR HANDLING" .PP Errors generated by a script evaluated in a proxy interpreter are completely returned to the calling interpreter, including mapping the \fIerrorInfo\fR and \fIerrorInfo\fR global variables from the proxy to the parent if present and raising a Tcl exception. This enables proxy code to look very similar to that which may use the internal \fBeval\fR command. .PP Errors raised by a failure to communicate with the proxy process due to a timeout or unexpected process exit are also communicated back to the parent interpreter as Tcl exceptions. To distinguish between these cases, communication related errors set the \fIerrorCode\fR global variable with the first element \fBNSPROXY\fR. The second element is one of the following: .TP \fBEDeadlock\fR The interpreter attempted to allocate handles from a pool from which it already owns one or more handles. .TP \fBEExec\fR The slave program specified by the \fI-exec program\fR option could not be started. .TP \fBERange\fR Insufficient handles available in pool. .TP \fBERecv\fR There was an error receiving the result from the slave process. .TP \fBESend\fR There was an error sending the script to the slave process. .TP \fBETimeout\fR The timeout specified for the pool by the \fI-evaltimeout\fR option or as the optional argument to the current call to \fBns_proxy eval\fR was exceeded. .SH EXAMPLES .PP The following demonstrates sending a script to a remote proxy: .CS set handle [ns_proxy get myproxy] ns_proxy eval $handle {info patchlevel} ns_proxy release $handle .CE The following demonstrates an asyncronous request: .CS set handle [ns_proxy get myproxy] ns_proxy send $handle {long running script} ... continue other work ... ns_proxy wait $handle set result [ns_proxy recv $handle] ns_proxy release $handle .CE The following demonstrates using multiple proxies: .CS ns_proxy config myproxy -max 10 set handles [ns_proxy get myproxy -handle 10] foreach h $handles { ns_proxy eval $h {puts "alive: [pid]"} } ns_proxy cleanup .CE .SH "SEE ALSO" eval(n) .SH KEYWORDS threads, interpreters, proxy, initialization �������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/nsproxy.c������������������������������������������������������������������0000755�0001750�0001750�00000003432�10421503615�017041� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsproxy.c -- * * Simple main for ns_proxy slave. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsproxy/nsproxy.c,v 1.1 2006/04/19 18:55:09 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsproxy.h" static Tcl_AppInitProc MyInit; int main(int argc, char **argv) { return Ns_ProxyMain(argc, argv, MyInit); } static int MyInit(Tcl_Interp *interp) { return TCL_OK; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/nsproxy.h������������������������������������������������������������������0000755�0001750�0001750�00000003526�10421503615�017052� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsdbp.h -- * * Definitions for simple database proxies. * * $Header: /cvsroot/aolserver/aolserver/nsproxy/nsproxy.h,v 1.1 2006/04/19 18:55:09 jgdavidson Exp $ */ #ifndef NSPROXY_H #define NSPROXY_H #include "ns.h" #ifdef NSPROXY_EXPORTS #undef NS_EXTERN #define NS_EXTERN extern NS_EXPORT #endif NS_EXTERN int Ns_ProxyMain(int argc, char **argv, Tcl_AppInitProc *proc); NS_EXTERN int Ns_ProxyInit(Tcl_Interp *interp); NS_EXTERN Ns_TclTraceProc Ns_ProxyCleanup; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/nsproxylib.c���������������������������������������������������������������0000755�0001750�0001750�00000127026�11026662411�017540� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsproxylib.c -- * * Library for ns_proxy commands and main loops. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsproxy/nsproxylib.c,v 1.7 2008/06/20 08:06:33 gneumann Exp $, compiled: " __DATE__ " " __TIME__; #include "nsproxy.h" #include <poll.h> #define MAJOR 1 #define MINOR 1 /* * The following structure defines a running proxy child process. */ typedef struct Proc { struct Pool *poolPtr; /* Pool associated with proc. */ struct Proc *nextPtr; /* Next in list of closing procs. */ int rfd; /* Read file descriptor. */ int wfd; /* Write file descriptor. */ int pid; /* Process id. */ } Proc; /* * The following structures defines a proxy request and response. * The lengths are in network order to support later proxy * operation over a socket connection. */ typedef struct Req { uint32_t len; uint16_t major; uint16_t minor; } Req; typedef struct Res { uint32_t code; uint32_t clen; uint32_t ilen; uint32_t rlen; } Res; /* * The following structure defines a proxy connection allocated * from a pool. */ typedef struct Proxy { struct Proxy *nextPtr; /* Next in list of avail proxies. */ struct Pool *poolPtr; /* Pointer to proxy's pool. */ enum { Idle, /* Ready to receive a script. */ Busy, /* Evaluating a script. */ Done /* Result is pending. */ } state; char id[16]; /* Proxy unique string id. */ Proc *procPtr; /* Running child process, if any. */ Tcl_HashEntry *idPtr; /* Pointer to proxy table entry. */ Tcl_HashEntry *cntPtr; /* Pointer to count of proxies allocated. */ Tcl_DString in; /* Request dstring. */ } Proxy; /* * The following structure defines a proxy pool. */ typedef struct Pool { char *name; /* Name of pool. */ struct Proxy *firstPtr; /* First in list of avail proxies. */ char *exec; /* Slave executable. */ char *init; /* Init script to eval on proxy start. */ char *reinit; /* Re-init scripts to eval on proxy put. */ int waiting; /* Thread waiting for handles. */ int max; /* Max number of handles. */ int min; /* Min number of handles. */ int avail; /* Current number of available proxies. */ int wthave; /* Total owned by waiting threads. */ int wtwant; /* Total requested of waiting threads. */ int nextid; /* Next in proxy unique ids. */ int tget; /* Default get timeout. */ int teval; /* Default eval timeout. */ int twait; /* Default wait timeout. */ int tsend; /* Send timeout. */ int trecv; /* Receive timeout. */ Ns_Mutex lock; /* Lock around pool. */ Ns_Cond cond; /* Cond for use while allocating handles. */ } Pool; /* * The following structure is allocated per-interp to manage * the currently allocated handles. */ typedef struct InterpData { Tcl_HashTable ids; /* Table of allocated proxy handles. */ Tcl_HashTable cnts; /* Table of counts of allocated handles. */ } InterpData; /* * The following enum lists all possible error conditions. */ typedef enum Err { ENone, EBusy, EDead, EDeadlock, EExec, EGetTimeout, EIdle, EImport, EInit, ERange, ERecv, ESend, ENoWait, EEvalTimeout } Err; /* * Static functions defined in this file. */ static Tcl_InterpDeleteProc DeleteData; static void PutProxy(Proxy *proxyPtr); static int ReleaseProxy(Tcl_Interp *interp, Proxy *proxyPtr); static Pool *GetPool(InterpData *idataPtr, Tcl_Obj *obj); static int GetProxy(Tcl_Interp *interp, InterpData *idataPtr, Tcl_Obj *obj, Proxy **proxyPtrPtr); static void ReleaseHandles(Tcl_Interp *interp, InterpData *idataPtr); static void Close(Proxy *proxyPtr); static void FreeProxy(Proxy *proxyPtr); static Tcl_ObjCmdProc ProxyObjCmd; static Tcl_ObjCmdProc ConfigObjCmd; static Tcl_ObjCmdProc GetObjCmd; static Err Check(Tcl_Interp *interp, Proxy *proxyPtr); static Proc *Exec(Tcl_Interp *interp, Proxy *proxyPtr); static int Eval(Tcl_Interp *interp, Proxy *proxyPtr, char *script, int ms); static int Send(Tcl_Interp *interp, Proxy *proxyPtr, char *script); static int Wait(Tcl_Interp *interp, Proxy *proxyPtr, int ms); static int Recv(Tcl_Interp *interp, Proxy *proxyPtr); static void Kill(Proc *procPtr, int sig); static char *ProxyError(Tcl_Interp *interp, Err err); static void Reset(Proxy *proxyPtr); static int SendBuf(Proc *procPtr, int ms, Tcl_DString *dsPtr); static int RecvBuf(Proc *procPtr, int ms, Tcl_DString *dsPtr); static int WaitFd(int fd, int events, int ms); static int Import(Tcl_Interp *interp, Tcl_DString *dsPtr, int *resultPtr); static void Export(Tcl_Interp *interp, int code, Tcl_DString *dsPtr); static void UpdateIov(struct iovec *iov, int n); static void FatalExit(char *func); static void SetOpt(char *str, char **optPtr); static void Append(Tcl_Interp *interp, char *flag, char *val); static void AppendInt(Tcl_Interp *interp, char *flag, int i); static Ns_ThreadProc CloseThread; /* * Static variables defined in this file. */ static Tcl_HashTable pools; static char *assoc = "nsproxy:data"; static Ns_Cond pcond; static Ns_Mutex plock; static Proc *firstClosePtr; static Ns_DString defexec; /* *---------------------------------------------------------------------- * * Nsproxy_Init -- * * Tcl load entry point. * * Results: * See Ns_ProxyInit. * * Side effects: * See Ns_ProxyInit. * *---------------------------------------------------------------------- */ int Nsproxy_Init(Tcl_Interp *interp) { return Ns_ProxyInit(interp); } /* *---------------------------------------------------------------------- * * Ns_ProxyInit -- * * Initialize the Tcl interp interface. * * Results: * TCL_OK. * * Side effects: * Adds the ns_proxy command to given interp. * *---------------------------------------------------------------------- */ int Ns_ProxyInit(Tcl_Interp *interp) { static int once = 0; InterpData *idataPtr; Ns_MutexLock(&plock); if (!once) { Ns_DStringInit(&defexec); Ns_BinPath(&defexec, "nsproxy", NULL); Tcl_InitHashTable(&pools, TCL_STRING_KEYS); once = 1; } Ns_MutexUnlock(&plock); idataPtr = ns_malloc(sizeof(InterpData)); Tcl_InitHashTable(&idataPtr->ids, TCL_STRING_KEYS); Tcl_InitHashTable(&idataPtr->cnts, TCL_ONE_WORD_KEYS); Tcl_SetAssocData(interp, assoc, DeleteData, idataPtr); Tcl_CreateObjCommand(interp, "ns_proxy", ProxyObjCmd, idataPtr, NULL); return TCL_OK; } /* *---------------------------------------------------------------------- * * Ns_ProxyMain -- * * Main loop for nsproxy child processes. * * Results: * 0. * * Side effects: * Will initialize an interp and process requests. * *---------------------------------------------------------------------- */ int Ns_ProxyMain(int argc, char **argv, Tcl_AppInitProc *init) { Tcl_Interp *interp; Proc proc; int result, len, n, max = 0; Req *reqPtr; Tcl_DString in, out; char *script, *active, *dots; uint16_t major, minor; if (argc < 4) { active = NULL; } else { active = argv[3]; max = strlen(active) - 8; if (max < 0) { active = NULL; } } /* * Move the proxy input and output fd's from 0 and 1 to avoid * protocal errors with scripts accessing stdin and stdout. * Stdin is open on /dev/null and stdout is dup'ed to stderr. */ major = htons(MAJOR); minor = htons(MINOR); proc.pid = -1; proc.rfd = dup(0); if (proc.rfd < 0) { FatalExit("dup"); } proc.wfd = dup(1); if (proc.wfd < 0) { FatalExit("dup"); } close(0); if (open("/dev/null", O_RDONLY) != 0) { FatalExit("open"); } close(1); if (dup(2) != 1) { FatalExit("dup"); } /* * Create the interp and initialize with user init proc, if any. */ interp = Ns_TclCreateInterp(); if (init != NULL) { if ((*init)(interp) != TCL_OK) { FatalExit(Tcl_GetStringResult(interp)); } } /* * Loop continuously processing proxy request. */ Tcl_DStringInit(&in); Tcl_DStringInit(&out); while (RecvBuf(&proc, -1, &in)) { if (in.length < sizeof(Req)) { break; } reqPtr = (Req *) in.string; if (reqPtr->major != major || reqPtr->minor != minor) { FatalExit("version mismatch"); } len = ntohl(reqPtr->len); if (len == 0) { Export(NULL, TCL_OK, &out); } else if (len > 0) { script = in.string + sizeof(Req); if (active != NULL) { n = len; if (n < max) { dots = ""; } else { dots = " ..."; n = max; } sprintf(active, "{%.*s%s}", n, script, dots); } result = Tcl_EvalEx(interp, script, len, 0); Export(interp, result, &out); if (active != NULL) { active[0] = '\0'; } } else { FatalExit("invalid length"); } if (!SendBuf(&proc, -1, &out)) { break; } Tcl_DStringTrunc(&in, 0); Tcl_DStringTrunc(&out, 0); } Tcl_DStringFree(&in); Tcl_DStringFree(&out); return 0; } /* *---------------------------------------------------------------------- * * Ns_ProxyCleannup -- * * Tcl trace to release any held proxy handles. * * Results: * TCL_OK * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_ProxyCleanup(Tcl_Interp *interp, void *ignored) { InterpData *idataPtr; idataPtr = Tcl_GetAssocData(interp, assoc, NULL); if (idataPtr != NULL) { ReleaseHandles(interp, idataPtr); } return TCL_OK; } /* *---------------------------------------------------------------------- * * ProxyObjCmd -- * * Implement the ns_proxy command. * * Results: * Standard Tcl result. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ProxyObjCmd(ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { InterpData *idataPtr = data; Pool *poolPtr; Proxy *proxyPtr; int result, ms; static char *opts[] = { "get", "release", "eval", "cleanup", "config", "ping", "active", "send", "wait", "recv", NULL }; enum { PGetIdx, PReleaseIdx, PEvalIdx, PCleanupIdx, PConfigIdx, PPingIdx, PActiveIdx, PSendIdx, PWaitIdx, PRecvIdx } opt; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?args"); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, (int *) &opt) != TCL_OK) { return TCL_ERROR; } result = TCL_OK; switch (opt) { case PPingIdx: case PReleaseIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "handle"); return TCL_ERROR; } if (!GetProxy(interp, idataPtr, objv[2], &proxyPtr)) { return TCL_ERROR; } if (opt == PReleaseIdx) { result = ReleaseProxy(interp, proxyPtr); } else { result = Eval(interp, proxyPtr, NULL, -1); } break; case PConfigIdx: result = ConfigObjCmd(data, interp, objc, objv); break; case PCleanupIdx: if (objc != 2) { Tcl_WrongNumArgs(interp, 2, objv, NULL); return TCL_ERROR; } ReleaseHandles(interp, idataPtr); break; case PGetIdx: result = GetObjCmd(data, interp, objc, objv); break; case PSendIdx: if (objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "handle script"); return TCL_ERROR; } if (!GetProxy(interp, idataPtr, objv[2], &proxyPtr)) { return TCL_ERROR; } result = Send(interp, proxyPtr, Tcl_GetString(objv[3])); break; case PWaitIdx: if (objc != 3 && objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "handle ?timeout?"); return TCL_ERROR; } if (!GetProxy(interp, idataPtr, objv[2], &proxyPtr)) { return TCL_ERROR; } if (objc == 3) { ms = -1; } else if (Tcl_GetIntFromObj(interp, objv[3], &ms) != TCL_OK) { return TCL_ERROR; } result = Wait(interp, proxyPtr, ms); break; case PRecvIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "handle"); return TCL_ERROR; } if (!GetProxy(interp, idataPtr, objv[2], &proxyPtr)) { return TCL_ERROR; } result = Recv(interp, proxyPtr); break; case PEvalIdx: if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "handle script ?timeout?"); return TCL_ERROR; } if (!GetProxy(interp, idataPtr, objv[2], &proxyPtr)) { return TCL_ERROR; } if (objc == 4) { ms = -1; } else if (Tcl_GetIntFromObj(interp, objv[4], &ms) != TCL_OK) { return TCL_ERROR; } result = Eval(interp, proxyPtr, Tcl_GetString(objv[3]), ms); break; case PActiveIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "pool"); return TCL_ERROR; } poolPtr = GetPool(idataPtr, objv[2]); Ns_MutexLock(&poolPtr->lock); proxyPtr = poolPtr->firstPtr; while (proxyPtr != NULL) { if (proxyPtr->state != Idle) { Tcl_AppendElement(interp, proxyPtr->id); Tcl_AppendElement(interp, proxyPtr->in.string + sizeof(Req)); } proxyPtr = proxyPtr->nextPtr; } Ns_MutexUnlock(&poolPtr->lock); break; } return result; } /* *---------------------------------------------------------------------- * * ConfigObjCmd -- * * Sub-command to configure a proxy. * * Results: * Standard Tcl result. * * Side effects: * Will update on or more config options. * *---------------------------------------------------------------------- */ static int ConfigObjCmd(ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { InterpData *idataPtr = data; Pool *poolPtr; Proxy *proxyPtr; char *str; int i, incr, n, nrun, result; static char *flags[] = { "-init", "-reinit", "-min", "-max", "-exec", "-getimeout", "-evaltimeout", "-sendtimeout", "-recvtimeout", "-waittimeout", NULL }; enum { CInitIdx, CReinitIdx, CMinIdx, CMaxIdx, CExecIdx, CGetIdx, CEvalIdx, CSendIdx, CRecvIdx, CWaitIdx } flag; if (objc < 3 || (objc % 2) != 1) { Tcl_WrongNumArgs(interp, 2, objv, "pool ?-opt val -opt val ...?"); return TCL_ERROR; } result = TCL_ERROR; poolPtr = GetPool(idataPtr, objv[2]); Ns_MutexLock(&poolPtr->lock); nrun = poolPtr->max - poolPtr->avail; for (i = 3; i < (objc - 1); ++i) { if (Tcl_GetIndexFromObj(interp, objv[i], flags, "flags", 0, (int *) &flag)) { goto err; } ++i; incr = 0; str = Tcl_GetString(objv[i]); switch (flag) { case CGetIdx: case CEvalIdx: case CSendIdx: case CRecvIdx: case CWaitIdx: case CMinIdx: case CMaxIdx: if (Tcl_GetIntFromObj(interp, objv[i], &n) != TCL_OK) { goto err; } if (n < 0) { Tcl_AppendResult(interp, "invalid ", flags[flag], ": ", str, NULL); goto err; } switch ((int) flag) { case CGetIdx: poolPtr->tget = n; break; case CEvalIdx: poolPtr->teval = n; break; case CSendIdx: poolPtr->tsend = n; break; case CRecvIdx: poolPtr->trecv = n; break; case CWaitIdx: poolPtr->twait = n; break; case CMinIdx: poolPtr->min = n; break; case CMaxIdx: poolPtr->max = n; break; } break; case CInitIdx: SetOpt(str, &poolPtr->init); break; case CReinitIdx: SetOpt(str, &poolPtr->reinit); break; case CExecIdx: SetOpt(str, &poolPtr->exec); break; } } /* * Adjust limits and dump any lingering proxies. Note * "avail" can be negative if "max" was adjusted down * below the number of currently running proxies. This * will be corrected as those active proxies are returned. */ if (poolPtr->min > poolPtr->max) { poolPtr->min = poolPtr->max; } poolPtr->avail = poolPtr->max - nrun; while ((proxyPtr = poolPtr->firstPtr) != NULL) { poolPtr->firstPtr = proxyPtr->nextPtr; FreeProxy(proxyPtr); } Append(interp, flags[CExecIdx], poolPtr->exec); Append(interp, flags[CInitIdx], poolPtr->init); Append(interp, flags[CReinitIdx], poolPtr->reinit); AppendInt(interp, flags[CMaxIdx], poolPtr->max); AppendInt(interp, flags[CMinIdx], poolPtr->min); AppendInt(interp, flags[CGetIdx], poolPtr->tget); AppendInt(interp, flags[CEvalIdx], poolPtr->teval); AppendInt(interp, flags[CSendIdx], poolPtr->tsend); AppendInt(interp, flags[CRecvIdx], poolPtr->trecv); AppendInt(interp, flags[CWaitIdx], poolPtr->twait); result = TCL_OK; err: Ns_MutexUnlock(&poolPtr->lock); return result; } static void SetOpt(char *str, char **optPtr) { if (*optPtr != NULL) { ns_free(*optPtr); } if (str != NULL && *str != '\0') { *optPtr = ns_strdup(str); } else { *optPtr = NULL; } } static void Append(Tcl_Interp *interp, char *flag, char *val) { Tcl_AppendElement(interp, flag); Tcl_AppendElement(interp, val ? val : ""); } static void AppendInt(Tcl_Interp *interp, char *flag, int i) { char buf[20]; sprintf(buf, "%d", i); Append(interp, flag, buf); } /* *---------------------------------------------------------------------- * * GetObjCmd -- * * Sub-command to handle ns_proxy get option. * * Results: * Standard Tcl result. * * Side effects: * May allocate one or more handles. * *---------------------------------------------------------------------- */ static int GetObjCmd(ClientData data, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { InterpData *idataPtr = data; Proxy *proxyPtr, *firstPtr; Tcl_HashEntry *cntPtr, *idPtr; int i, waiter, new, nwant, n, ms, nhave; Ns_Time timeout; char *arg, *nwantStr; Pool *poolPtr; Err err; static char *flags[] = { "-timeout", "-handles", NULL }; enum { FTimeoutIdx, FHandlesIdx } flag; if (objc < 3 || (objc % 2) != 1) { Tcl_WrongNumArgs(interp, 2, objv, "pool ?-opt val -opt val ...?"); return TCL_ERROR; } poolPtr = GetPool(idataPtr, objv[2]); cntPtr = Tcl_CreateHashEntry(&idataPtr->cnts, (char *) poolPtr, &new); nhave = (int) Tcl_GetHashValue(cntPtr); nwant = 1; nwantStr = "1"; ms = poolPtr->tget; for (i = 3; i < objc; ++i) { arg = Tcl_GetString(objv[2]); if (Tcl_GetIndexFromObj(interp, objv[i], flags, "flags", 0, (int *) &flag)) { return TCL_ERROR; } ++i; if (Tcl_GetIntFromObj(interp, objv[i], &n) != TCL_OK) { return TCL_ERROR; } if (n < 0) { Tcl_AppendResult(interp, "invalid ", flags[flag], ": ", arg, NULL); return TCL_ERROR; } switch (flag) { case FTimeoutIdx: ms = n; break; case FHandlesIdx: nwantStr = Tcl_GetString(objv[i]); nwant = n; break; } } /* * Wait to be the exclusive handle waiter and then wait for the * handles. */ err = ENone; firstPtr = NULL; waiter = 0; Ns_GetTime(&timeout); Ns_IncrTime(&timeout, 0, ms * 1000); Ns_MutexLock(&poolPtr->lock); while (err == ENone && nwant > 0) { poolPtr->wthave += nhave; poolPtr->wtwant += nwant; if ((nhave + nwant) > poolPtr->max) { err = ERange; } else if (!waiter) { if ((poolPtr->wthave + poolPtr->wtwant) > poolPtr->max) { err = EDeadlock; } else if (!poolPtr->waiting) { poolPtr->waiting = 1; waiter = 1; } else if (Ns_CondTimedWait(&poolPtr->cond, &poolPtr->lock, &timeout) != NS_OK) { err = EGetTimeout; } } if (err == ENone && waiter) { if (poolPtr->avail > 0) { --poolPtr->avail; proxyPtr = poolPtr->firstPtr; if (proxyPtr != NULL) { poolPtr->firstPtr = proxyPtr->nextPtr; } else { proxyPtr = ns_calloc(1, sizeof(Proxy)); proxyPtr->poolPtr = poolPtr; sprintf(proxyPtr->id, "%s-proxy-%d", poolPtr->name, poolPtr->nextid++); Tcl_DStringInit(&proxyPtr->in); } proxyPtr->nextPtr = firstPtr; firstPtr = proxyPtr; ++nhave; --nwant; } else if (Ns_CondTimedWait(&poolPtr->cond, &poolPtr->lock, &timeout) != NS_OK) { err = EGetTimeout; } } poolPtr->wthave -= nhave; poolPtr->wtwant -= nwant; } if (waiter) { poolPtr->waiting = 0; } if (err == ENone) { Ns_MutexUnlock(&poolPtr->lock); proxyPtr = firstPtr; while (err == ENone && proxyPtr != NULL) { err = Check(interp, proxyPtr); proxyPtr = proxyPtr->nextPtr; } Ns_MutexLock(&poolPtr->lock); } if (err != ENone) { while ((proxyPtr = firstPtr) != NULL) { firstPtr = proxyPtr->nextPtr; proxyPtr->nextPtr = poolPtr->firstPtr; poolPtr->firstPtr = proxyPtr; ++poolPtr->avail; --nhave; } } Ns_MutexUnlock(&poolPtr->lock); Ns_CondBroadcast(&poolPtr->cond); if (err != ENone) { Tcl_AppendResult(interp, "could not get ", nwantStr, " handle", nwant > 1 ? "s" : "", " from pool \"", poolPtr->name, "\": ", ProxyError(interp, err), NULL); return TCL_ERROR; } /* * Set total owned count and create handle ids. */ Tcl_SetHashValue(cntPtr, nhave); while ((proxyPtr = firstPtr) != NULL) { firstPtr = proxyPtr->nextPtr; proxyPtr->nextPtr = NULL; idPtr = Tcl_CreateHashEntry(&idataPtr->ids, proxyPtr->id, &new); if (!new) { Ns_Fatal("nsproxy: duplicate proxy entry"); } Tcl_SetHashValue(idPtr, proxyPtr); proxyPtr->cntPtr = cntPtr; proxyPtr->idPtr = idPtr; Tcl_AppendElement(interp, proxyPtr->id); } return TCL_OK; } /* *---------------------------------------------------------------------- * * GetPool -- * * Get a pool by name. * * Results: * 1 if pool found, 0 on no such pool. * * Side effects: * Will update given poolPtrPtr with pointer to Pool. * *---------------------------------------------------------------------- */ Pool * GetPool(InterpData *idataPtr, Tcl_Obj *obj) { Tcl_HashEntry *hPtr; Pool *poolPtr; char *name = Tcl_GetString(obj); int new; Ns_MutexLock(&plock); hPtr = Tcl_CreateHashEntry(&pools, name, &new); if (!new) { poolPtr = Tcl_GetHashValue(hPtr); } else { poolPtr = ns_calloc(1, sizeof(Pool)); Tcl_SetHashValue(hPtr, poolPtr); poolPtr->name = Tcl_GetHashKey(&pools, hPtr); poolPtr->teval = poolPtr->tget = 500; poolPtr->tsend = poolPtr->trecv = poolPtr->twait = 100; SetOpt(defexec.string, &poolPtr->exec); poolPtr->max = poolPtr->avail = 5; Ns_CondInit(&poolPtr->cond); Ns_MutexInit(&poolPtr->lock); Ns_MutexSetName2(&poolPtr->lock, "nsproxy", name); } Ns_MutexUnlock(&plock); return poolPtr; } /* *---------------------------------------------------------------------- * * GetProxy -- * * Get a previously allocate proxy handle. * * Results: * 1 if handle found, 0 on no such handle. * * Side effects: * Will update given proxyPtrPtr with pointer to handle. * *---------------------------------------------------------------------- */ int GetProxy(Tcl_Interp *interp, InterpData *idataPtr, Tcl_Obj *obj, Proxy **proxyPtrPtr) { Tcl_HashEntry *hPtr; char *id = Tcl_GetString(obj); hPtr = Tcl_FindHashEntry(&idataPtr->ids, id); if (hPtr == NULL) { Tcl_AppendResult(interp, "no such handle: ", id, NULL); return 0; } *proxyPtrPtr = Tcl_GetHashValue(hPtr); return 1; } /* *---------------------------------------------------------------------- * * Check -- * * Check a proxy, pinging the proc and creating a new process * as needed. * * Results: * 1 if proxy ok, 0 if proc couldn't be created. * * Side effects: * May restart process if necessary. * *---------------------------------------------------------------------- */ static Err Check(Tcl_Interp *interp, Proxy *proxyPtr) { Pool *poolPtr = proxyPtr->poolPtr; Err err = ENone; if (proxyPtr->procPtr != NULL && Eval(interp, proxyPtr, NULL, -1) != TCL_OK) { Close(proxyPtr); Tcl_ResetResult(interp); } if (proxyPtr->procPtr == NULL) { proxyPtr->procPtr = Exec(interp, proxyPtr); if (proxyPtr->procPtr == NULL) { err = EExec; } else if (proxyPtr->poolPtr->init != NULL && Eval(interp, proxyPtr, poolPtr->init, -1) != TCL_OK) { Close(proxyPtr); err = EInit; } } return err; } /* *---------------------------------------------------------------------- * * Exec -- * * Create a new proxy child process. * * Results: * Pointer to new Proc or NULL on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Proc * Exec(Tcl_Interp *interp, Proxy *proxyPtr) { Pool *poolPtr = proxyPtr->poolPtr; char *argv[5], active[100]; Proc *procPtr; int rpipe[2], wpipe[2], pid, len; len = sizeof(active) - 1; memset(active, ' ', len); active[len] = '\0'; argv[0] = poolPtr->exec; argv[1] = poolPtr->name; argv[2] = proxyPtr->id; argv[3] = active; argv[4] = NULL; if (ns_pipe(rpipe) != 0) { Tcl_AppendResult(interp, "pipe failed: ", Tcl_PosixError(interp), NULL); return NULL; } if (ns_pipe(wpipe) != 0) { Tcl_AppendResult(interp, "pipe failed: ", Tcl_PosixError(interp), NULL); close(rpipe[0]); close(rpipe[1]); return NULL; } pid = Ns_ExecArgv(poolPtr->exec, NULL, rpipe[0], wpipe[1], argv, NULL); close(rpipe[0]); close(wpipe[1]); if (pid < 0) { Tcl_AppendResult(interp, "exec failed: ", Tcl_PosixError(interp), NULL); close(wpipe[0]); close(rpipe[1]); return NULL; } procPtr = ns_malloc(sizeof(Proc)); procPtr->poolPtr = proxyPtr->poolPtr; procPtr->nextPtr = NULL; procPtr->pid = pid; procPtr->rfd = wpipe[0]; procPtr->wfd = rpipe[1]; return procPtr; } /* *---------------------------------------------------------------------- * * Eval -- * * Send a script and wait for and receive a response. * * Results: * Depends on script. * * Side effects: * Will return proxy response or format error message in given * interp. * *---------------------------------------------------------------------- */ static int Eval(Tcl_Interp *interp, Proxy *proxyPtr, char *script, int ms) { int result; result = Send(interp, proxyPtr, script); if (result == TCL_OK) { result = Wait(interp, proxyPtr, ms); if (result == TCL_OK) { result = Recv(interp, proxyPtr); } } return result; } /* *---------------------------------------------------------------------- * * Send -- * * Send a script to a proxy. * * Results: * TCL_OK if script sent, TCL_ERROR otherwise. * * Side effects: * Will format error message in given interp on failure. * *---------------------------------------------------------------------- */ static int Send(Tcl_Interp *interp, Proxy *proxyPtr, char *script) { Err err = ENone; int len; Req req; if (proxyPtr->procPtr == NULL) { err = EDead; } else if (proxyPtr->state != Idle) { err = EBusy; } else { len = script ? strlen(script) : 0; req.len = htonl(len); req.major = htons(MAJOR); req.minor = htons(MINOR); proxyPtr->state = Busy; Tcl_DStringAppend(&proxyPtr->in, (char *) &req, sizeof(req)); if (len > 0) { Tcl_DStringAppend(&proxyPtr->in, script, len); } if (!SendBuf(proxyPtr->procPtr, proxyPtr->poolPtr->tsend, &proxyPtr->in)) { Reset(proxyPtr); err = ESend; } } if (err != ENone) { Tcl_AppendResult(interp, "could not send script \"", script, "\" to proxy \"", proxyPtr->id, "\": ", ProxyError(interp, err), NULL); return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * * Wait -- * * Wait for response from proxy process. * * Results: * TCL_OK if wait ok, TCL_ERROR otherwise. * * Side effects: * Will format error message in given interp on failure. * *---------------------------------------------------------------------- */ static int Wait(Tcl_Interp *interp, Proxy *proxyPtr, int ms) { Err err = ENone; if (proxyPtr->state == Idle) { err = EIdle; } else if (proxyPtr->state != Done) { if (ms < 0) { ms = proxyPtr->poolPtr->teval; } if (WaitFd(proxyPtr->procPtr->rfd, POLLIN, ms)) { proxyPtr->state = Done; } else { err = EEvalTimeout; } } if (err != ENone) { Tcl_AppendResult(interp, "wait for proxy \"", proxyPtr->id, "\" failed: ", ProxyError(interp, err), NULL); return TCL_ERROR; } return TCL_OK; } /* *---------------------------------------------------------------------- * * Recv -- * * Receive proxy results. * * Results: * Standard Tcl result. * * Side effects: * Will append proxy results or error message to given interp. * *---------------------------------------------------------------------- */ static int Recv(Tcl_Interp *interp, Proxy *proxyPtr) { Pool *poolPtr = proxyPtr->poolPtr; Proc *procPtr = proxyPtr->procPtr; Tcl_DString out; int result; Err err = ENone; if (proxyPtr->state == Idle) { err = EIdle; } else if (proxyPtr->state == Busy) { err = ENoWait; } else { Tcl_DStringInit(&out); if (!RecvBuf(procPtr, poolPtr->trecv, &out)) { err = ERecv; } else if (!Import(interp, &out, &result)) { err = EImport; } else { proxyPtr->state = Idle; } Tcl_DStringFree(&out); Reset(proxyPtr); } if (err != ENone) { Tcl_AppendResult(interp, "could not receive result from proxy \"", proxyPtr->id, "\": ", ProxyError(interp, err), NULL); return TCL_ERROR; } return result; } /* *---------------------------------------------------------------------- * * SendBuf -- * * Send a dstring buffer. * * Results: * 1 if sent, 0 on error. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int SendBuf(Proc *procPtr, int ms, Tcl_DString *dsPtr) { int n; uint32_t ulen; struct iovec iov[2]; ulen = htonl(dsPtr->length); iov[0].iov_base = (caddr_t) &ulen; iov[0].iov_len = sizeof(ulen); iov[1].iov_base = dsPtr->string; iov[1].iov_len = dsPtr->length; while ((iov[0].iov_len + iov[1].iov_len) > 0) { n = writev(procPtr->wfd, iov, 2); if (n < 0 && errno == EAGAIN && WaitFd(procPtr->wfd, POLLOUT, ms)) { n = writev(procPtr->wfd, iov, 2); } if (n < 0) { return 0; } UpdateIov(iov, n); } return 1; } /* *---------------------------------------------------------------------- * * RecvBuf -- * * Receive a dstring buffer. * * Results: * 1 if received, 0 on error. * * Side effects: * Will resize output dstring as needed. * *---------------------------------------------------------------------- */ static int RecvBuf(Proc *procPtr, int ms, Tcl_DString *dsPtr) { uint32_t ulen; struct iovec iov[2]; char *ptr; int n, len, avail; avail = dsPtr->spaceAvl - 1; iov[0].iov_base = (caddr_t) &ulen; iov[0].iov_len = sizeof(ulen); iov[1].iov_base = dsPtr->string; iov[1].iov_len = avail; while (iov[0].iov_len > 0) { n = readv(procPtr->rfd, iov, 2); if (n < 0 && errno == EAGAIN && WaitFd(procPtr->rfd, POLLIN, ms)) { n = readv(procPtr->rfd, iov, 2); } if (n <= 0) { goto err; } UpdateIov(iov, n); } n = avail - iov[1].iov_len; Tcl_DStringSetLength(dsPtr, n); len = ntohl(ulen); Tcl_DStringSetLength(dsPtr, len); len -= n; ptr = dsPtr->string + n; while (len > 0) { n = read(procPtr->rfd, ptr, len); if (n < 0 && errno == EAGAIN && WaitFd(procPtr->rfd, POLLIN, ms)) { n = read(procPtr->rfd, ptr, len); } if (n <= 0) { goto err; } len -= n; ptr += n; } return 1; err: if (n == 0) { errno = EPIPE; } return 0; } /* *---------------------------------------------------------------------- * * WaitFd -- * * Wait for I/O on pipe file descriiptor. * * Results: * 1 if ready, 0 otherwise. * * Side effects: * May wait up to given ms. * *---------------------------------------------------------------------- */ static int WaitFd(int fd, int event, int ms) { struct pollfd pfd; int n; pfd.fd = fd; pfd.events = event; pfd.revents = 0; do { n = poll(&pfd, 1, ms); } while (n < 0 && errno == EINTR); if (n < 0 && errno != EINTR) { Ns_Fatal("nsproxy: poll failed: %s", strerror(errno)); } return n; } /* *---------------------------------------------------------------------- * * UpdateIov -- * * Update the base and len in given iovec based on bytes * already processed. * * Results: * None. * * Side effects: * Will update given iovec. * *---------------------------------------------------------------------- */ static void UpdateIov(struct iovec *iov, int n) { if (n >= iov[0].iov_len) { n -= iov[0].iov_len; iov[0].iov_base = NULL; iov[0].iov_len = 0; } else { iov[0].iov_len -= n; iov[0].iov_base += n; n = 0; } iov[1].iov_len -= n; iov[1].iov_base += n; } /* *---------------------------------------------------------------------- * * Export -- * * Export result of Tcl, include error, to given dstring. * * Results: * None. * * Side effects: * Given dstring will contain response header and data. * *---------------------------------------------------------------------- */ static void Export(Tcl_Interp *interp, int code, Tcl_DString *dsPtr) { Res hdr; char *einfo = NULL, *ecode = NULL, *result; int clen, ilen, rlen; clen = ilen = rlen = 0; if (interp != NULL) { if (code == TCL_OK) { einfo = ecode = NULL; } else { ecode = Tcl_GetVar(interp, "errorCode", TCL_GLOBAL_ONLY); einfo = Tcl_GetVar(interp, "errorInfo", TCL_GLOBAL_ONLY); } clen = ecode ? (strlen(ecode) + 1) : 0; ilen = einfo ? (strlen(einfo) + 1) : 0; result = Tcl_GetStringResult(interp); rlen = strlen(result); } hdr.code = htonl(code); hdr.clen = htonl(clen); hdr.ilen = htonl(ilen); hdr.rlen = htonl(rlen); Tcl_DStringAppend(dsPtr, (char *) &hdr, sizeof(hdr)); if (clen > 0) { Tcl_DStringAppend(dsPtr, ecode, clen); } if (ilen > 0) { Tcl_DStringAppend(dsPtr, einfo, ilen); } if (rlen > 0) { Tcl_DStringAppend(dsPtr, result, rlen); } } /* *---------------------------------------------------------------------- * * Import -- * * Import result of Tcl to given interp. * * Results: * Tcl result code from remote. * * Side effects: * Will set interp result and error data as needed. * *---------------------------------------------------------------------- */ static int Import(Tcl_Interp *interp, Tcl_DString *dsPtr, int *resultPtr) { Res *resPtr; char *str; int rlen, clen, ilen; if (dsPtr->length < sizeof(Res)) { return 0; } resPtr = (Res *) dsPtr->string; str = dsPtr->string + sizeof(Res); clen = ntohl(resPtr->clen); ilen = ntohl(resPtr->ilen); rlen = ntohl(resPtr->rlen); if ((clen + ilen + rlen) > (dsPtr->length - sizeof(Res))) { return 0; } if (clen > 0) { Tcl_SetErrorCode(interp, str, NULL); str += clen; } if (ilen > 0) { Tcl_AddErrorInfo(interp, str); str += ilen; } if (rlen > 0) { Tcl_SetResult(interp, str, TCL_VOLATILE); } *resultPtr = ntohl(resPtr->code); return 1; } /* *---------------------------------------------------------------------- * * Reset -- * * Reset a proxy for the next request. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void Reset(Proxy *proxyPtr) { if (proxyPtr->state != Idle) { Close(proxyPtr); proxyPtr->state = Idle; } Tcl_DStringTrunc(&proxyPtr->in, 0); } /* *---------------------------------------------------------------------- * * Close -- * * Add proxy process to list to be closed by background * close monitoring thread. * * Results: * None. * * Side effects: * Process will eventually die. * *---------------------------------------------------------------------- */ static void Close(Proxy *proxyPtr) { Proc *procPtr = proxyPtr->procPtr; static once = 0; if (procPtr != NULL) { close(procPtr->wfd); Ns_MutexLock(&plock); procPtr->nextPtr = firstClosePtr; firstClosePtr = procPtr; Ns_CondSignal(&pcond); if (!once) { Ns_ThreadCreate(CloseThread, NULL, 0, NULL); once = 1; } Ns_MutexUnlock(&plock); proxyPtr->procPtr = NULL; } } /* *---------------------------------------------------------------------- * * FreeProxy -- * * Close connection to proxy process and free proxy. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void FreeProxy(Proxy *proxyPtr) { Close(proxyPtr); Ns_DStringFree(&proxyPtr->in); ns_free(proxyPtr); } /* *---------------------------------------------------------------------- * * PutProxy -- * * Return a proxy to the pool. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void PutProxy(Proxy *proxyPtr) { Pool *poolPtr = proxyPtr->poolPtr; Proxy **nextPtrPtr; int nhave; nhave = (int) Tcl_GetHashValue(proxyPtr->cntPtr); --nhave; Tcl_SetHashValue(proxyPtr->cntPtr, nhave); Tcl_DeleteHashEntry(proxyPtr->idPtr); proxyPtr->idPtr = proxyPtr->cntPtr = NULL; Ns_MutexLock(&poolPtr->lock); ++poolPtr->avail; if (poolPtr->avail > 0) { nextPtrPtr = &poolPtr->firstPtr; while (*nextPtrPtr != NULL) { nextPtrPtr = &((*nextPtrPtr)->nextPtr); } proxyPtr->nextPtr = NULL; *nextPtrPtr = proxyPtr; proxyPtr = NULL; } Ns_CondBroadcast(&poolPtr->cond); Ns_MutexUnlock(&poolPtr->lock); if (proxyPtr != NULL) { FreeProxy(proxyPtr); } } /* *---------------------------------------------------------------------- * * ReleaseProxy -- * * Release a proxy from the per-interp table. * * Results: * Result of reinit call or TCL_OK if no reinit. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ReleaseProxy(Tcl_Interp *interp, Proxy *proxyPtr) { int result = TCL_OK; Reset(proxyPtr); if (proxyPtr->poolPtr->reinit != NULL) { result = Eval(interp, proxyPtr, proxyPtr->poolPtr->reinit, -1); } PutProxy(proxyPtr); return result; } /* *---------------------------------------------------------------------- * * ReleaseHandles -- * * Release any remaining handles in the per-interp table. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void ReleaseHandles(Tcl_Interp *interp, InterpData *idataPtr) { Tcl_HashEntry *hPtr; Tcl_HashSearch search; Proxy *proxyPtr; hPtr = Tcl_FirstHashEntry(&idataPtr->ids, &search); while (hPtr != NULL) { proxyPtr = Tcl_GetHashValue(hPtr); (void) ReleaseProxy(interp, proxyPtr); hPtr = Tcl_NextHashEntry(&search); } } /* *---------------------------------------------------------------------- * * DeleteData -- * * Tcl assoc data cleanup for ns_proxy. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void DeleteData(ClientData arg, Tcl_Interp *interp) { InterpData *idataPtr = arg; ReleaseHandles(interp, idataPtr); Tcl_DeleteHashTable(&idataPtr->ids); Tcl_DeleteHashTable(&idataPtr->cnts); ns_free(idataPtr); } /* *---------------------------------------------------------------------- * * CloseThread -- * * Background thread to close and wait for proxy process, killing * them if necessary. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void CloseThread(void *ignored) { Proc *procPtr; int ms, zombie; Ns_ThreadSetName("-nsproxy:close-"); while (1) { Ns_MutexLock(&plock); while (firstClosePtr == NULL) { Ns_CondWait(&pcond, &plock); } procPtr = firstClosePtr; firstClosePtr = procPtr->nextPtr; Ns_MutexUnlock(&plock); ms = procPtr->poolPtr->twait; zombie = 0; if (!WaitFd(procPtr->rfd, POLLIN, ms)) { Kill(procPtr, 15); if (!WaitFd(procPtr->rfd, POLLIN, ms)) { Kill(procPtr, 9); if (!WaitFd(procPtr->rfd, POLLIN, ms)) { zombie = 1; } } } close(procPtr->rfd); if (!zombie) { Ns_WaitProcess(procPtr->pid); } else { Ns_Log(Warning, "zombie: %d", procPtr->pid); } ns_free(procPtr); } } /* *---------------------------------------------------------------------- * * Kill -- * * Kill a proxy process that won't die. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void Kill(Proc *procPtr, int sig) { Ns_Log(Warning, "[%s]: process %d won't die - sending sig %d", procPtr->poolPtr->name, procPtr->pid, sig); if (kill(procPtr->pid, sig) != 0 && errno != ESRCH) { Ns_Fatal("kill(%d, %d) failed: %s", procPtr->pid, sig, strerror(errno)); } } /* *---------------------------------------------------------------------- * * FatalExit -- * * Exit on a fatal system error. * * Results: * None. * * Side effects: * Process will exit. * *---------------------------------------------------------------------- */ static void FatalExit(char *func) { fprintf(stderr, "proxy[%d]: %s failed: %s\n", getpid(), func, strerror(errno)); exit(1); } /* *---------------------------------------------------------------------- * * ProxyError -- * * Formats an extended error message. * * Results: * Pointer to error message string. * * Side effects: * Will set the errorCode global variable. * *---------------------------------------------------------------------- */ static char * ProxyError(Tcl_Interp *interp, Err err) { char *msg = NULL, *sysmsg = NULL, *code = NULL; switch (err) { case ENone: code = "ENone"; msg = "no error"; break; case EDeadlock: code = "EDeadlock"; msg = "allocation deadlock"; break; case EExec: code = "EExec"; msg = "could not create child process"; sysmsg = strerror(errno); break; case ERange: code = "ERange"; msg = "insufficient handles"; break; case EGetTimeout: code = "EGetTimeout"; msg = "timeout waiting for handle"; break; case EEvalTimeout: code = "EEvalTimeout"; msg = "timeout waiting for evaluation"; break; case ESend: code = "ESend"; msg = "script send failed"; sysmsg = strerror(errno); break; case ERecv: code = "ERecv"; msg = "result recv failed"; sysmsg = strerror(errno); break; case EIdle: code = "EIdle"; msg = "no script evaluating"; break; case EImport: code = "EImport"; msg = "invalided response"; break; case EInit: code = "EInit"; msg = "init script failed"; break; case EDead: code = "EDead"; msg = "child process died"; break; case ENoWait: code = "ENoWait"; msg = "no wait for script result"; break; case EBusy: code = "EBusy"; msg = "currently evaluating a script"; break; } Tcl_SetErrorCode(interp, "NSPROXY", code, msg, sysmsg, NULL); return msg; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsproxy/nsproxymod.c���������������������������������������������������������������0000755�0001750�0001750�00000003776�10421503615�017554� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsproxymod.c -- * * Loadable module for AOLserver to add the ns_proxy command * and cleanup trace. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsproxy/nsproxymod.c,v 1.1 2006/04/19 18:55:09 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "nsproxy.h" static Ns_TclTraceProc InitInterp; int NsProxy_ModInit(char *server, char *module) { Ns_TclRegisterTrace(server, InitInterp, NULL, NS_TCL_TRACE_CREATE); Ns_TclRegisterTrace(server, Ns_ProxyCleanup, NULL, NS_TCL_TRACE_DEALLOCATE); return NS_OK; } static int InitInterp(Tcl_Interp *interp, void *arg) { return Ns_ProxyInit(interp); } ��aolserver4-4.5.1/nstclsh/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015113� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nstclsh/Makefile�������������������������������������������������������������������0000644�0001750�0001750�00000002776�10300725026�016554� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nstclsh/Makefile,v 1.2 2005/08/17 21:20:22 jgdavidson Exp $ # PGM = nstclsh PGMOBJS = nstclsh.o include ../include/ns.mak ��aolserver4-4.5.1/nstclsh/nstclsh.c������������������������������������������������������������������0000644�0001750�0001750�00000003605�10276753575�016754� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nstclsh.c -- * * Simple Tcl shell with AOLserver commands. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nstclsh/nstclsh.c,v 1.2 2005/08/11 22:55:57 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" static Tcl_AppInitProc AppInit; int main(int argc, char **argv) { Tcl_Main(argc, argv, AppInit); return 0; } static int AppInit(Tcl_Interp *interp) { if (Tcl_Init(interp) != TCL_OK || Ns_TclInit(interp) != TCL_OK) { return TCL_ERROR; } return TCL_OK; } ���������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661376�015245� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/cslock.c������������������������������������������������������������������0000644�0001750�0001750�00000012752�07501630344�016672� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * cslock.c -- * * Support for critical sections. Critical sections differ * from mutexes in that a critical section can be repeatedly * locked by the same thread as long as each lock is matched with * a cooresponding unlock. Critical sections are used in cases * where the lock could be called recursively, e.g., for the * Ns_MasterLock. * * Note: Critical sections are almost always a bad idea. You'll * see below that the number of actual lock and unlock operations are * doubled and threads can end up in condition waits instead of spin * locks. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/cslock.c,v 1.2 2002/06/12 11:30:44 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * The following structure defines a critcal section including a mutex, * thread id of the owner, and a condition variable for waiting threads. */ typedef struct CsLock { Ns_Mutex mutex; Ns_Cond cond; int tid; int count; } CsLock; /* *---------------------------------------------------------------------- * * Ns_CsInit -- * * Initialize a critical section object. * * Results: * None. * * Side effects: * A critical section object is allocated from the heap. * *---------------------------------------------------------------------- */ void Ns_CsInit(Ns_Cs *csPtr) { CsLock *lockPtr; static unsigned int nextid = 0; lockPtr = ns_malloc(sizeof(CsLock)); NsMutexInitNext(&lockPtr->mutex, "cs", &nextid); Ns_CondInit(&lockPtr->cond); lockPtr->count = 0; *csPtr = (Ns_Cs) lockPtr; } /* *---------------------------------------------------------------------- * * Ns_CsDestroy -- * * Destroy a critical section object. Note that you would almost * never need to call this function as synchronization objects are * typically created at startup and exist until the server exits. * * Results: * None. * * Side effects: * The underly objects in the critical section are destroy and * the critical section memory returned to the heap. * *---------------------------------------------------------------------- */ void Ns_CsDestroy(Ns_Cs *csPtr) { CsLock *lockPtr = (CsLock *) *csPtr; /* * Destroy the condition only if it's not null, i.e., initialized * by the first use. */ if (lockPtr != NULL) { Ns_MutexDestroy(&lockPtr->mutex); Ns_CondDestroy(&lockPtr->cond); lockPtr->count = 0; ns_free(lockPtr); *csPtr = NULL; } } /* *---------------------------------------------------------------------- * * Ns_CsEnter -- * * Lock a critical section object, initializing it first if needed. * * Results: * None. * * Side effects: * Thread may wait on the critical section condition variable if * the critical section is already owned by another thread. * *---------------------------------------------------------------------- */ void Ns_CsEnter(Ns_Cs *csPtr) { CsLock *lockPtr; int tid = Ns_ThreadId(); /* * Initialize the critical section if it has never been used before. */ if (*csPtr == NULL) { Ns_MasterLock(); if (*csPtr == NULL) { Ns_CsInit(csPtr); } Ns_MasterUnlock(); } lockPtr = (CsLock *) *csPtr; /* * Wait on the condition if the critical section is owned by another * thread. */ Ns_MutexLock(&lockPtr->mutex); while (lockPtr->count > 0 && lockPtr->tid != tid) { Ns_CondWait(&lockPtr->cond, &lockPtr->mutex); } lockPtr->tid = tid; lockPtr->count++; Ns_MutexUnlock(&lockPtr->mutex); } /* *---------------------------------------------------------------------- * * Ns_CsLeave -- * * Unlock a critical section once. * * Results: * None. * * Side effects: * Condition is signaled if this is the final unlock of the critical * section. * *---------------------------------------------------------------------- */ void Ns_CsLeave(Ns_Cs *csPtr) { CsLock *lockPtr = (CsLock *) *csPtr; Ns_MutexLock(&lockPtr->mutex); if (--lockPtr->count == 0) { Ns_CondSignal(&lockPtr->cond); } Ns_MutexUnlock(&lockPtr->mutex); } ����������������������aolserver4-4.5.1/nsthread/Makefile������������������������������������������������������������������0000644�0001750�0001750�00000003360�10300725026�016674� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/nsthread/Makefile,v 1.8 2005/08/17 21:20:22 jgdavidson Exp $ # HDRS = thread.h PGM = nsthreadtest PGMOBJS = nsthreadtest.o DLL = nsthread DLLINIT = NsThreads_LibInit OBJS = error.o master.o memory.o mutex.o cslock.o\ rwlock.o reentrant.o sema.o thread.o tls.o \ compat.o time.o UNIXOBJS= pthread.o fork.o signal.o WINOBJS = winthread.o include ../include/ns.mak ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/nsthreadtest.c������������������������������������������������������������0000644�0001750�0001750�00000025524�10275641153�020127� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is AOLserver Code and related documentation distributed by * AOL. * * The Initial Developer of the Original Code is America Online, Inc. Portions * created by AOL are Copyright (C) 1999 America Online, Inc. All Rights * Reserved. * * Alternatively, the contents of this file may be used under the terms of the * GNU General Public License (the "GPL"), in which case the provisions of * GPL are applicable instead of those above. If you wish to allow use of * your version of this file only under the terms of the GPL and not to allow * others to use your version of this file under the License, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL. If you do not delete the * provisions above, a recipient may use your version of this file under * either the License or the GPL. */ /* * test.c - * * Collection of thread interface tests. This code is somewhat sloppy * but contains several examples of of using conditions, mutexes, * thread local storage, and creating/joining threads. */ #include "nsthread.h" /* * Special direct include of pthread.h for compatibility tests. */ #ifdef _WIN32 #define PTHREAD_TEST 0 #else #include <pthread.h> #define PTHREAD_TEST 1 #endif static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/nsthreadtest.c,v 1.6 2005/08/08 11:30:51 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; /* * Collection of synchronization objects for tests. */ static Ns_Mutex block; static Ns_Mutex mlock; static Ns_Mutex lock; static Ns_Cond cond; static Ns_Tls key; static Ns_RWLock rwlock; static Ns_Sema sema; static Ns_Cs cs; static Ns_Mutex dlock; static Ns_Cond dcond; static int dstop; /* * Msg - * * Simple message logger with thread id and name. */ void Msg(char *fmt,...) { va_list ap; char *s, *r; time_t now; time(&now); s = ns_ctime(&now); r = strchr(s, '\n'); if (r) { *r = '\0'; } va_start(ap, fmt); Ns_MutexLock(&mlock); printf("[%s][%s]: ", Ns_ThreadGetName(), s); vfprintf(stdout, fmt, ap); printf("\n"); Ns_MutexUnlock(&mlock); va_end(ap); } /* * TlsLogArg - * * Log and then free TLS slot data at thread exit. */ void TlsLogArg(void *arg) { int *ip = arg; Msg("tls cleanup %d", *ip); ns_free(ip); } /* * RecursiveStackCheck, CheckStackThread - * * Thread which recursively probes stack for max depth. */ int RecursiveStackCheck(int n) { if (Ns_CheckStack() == NS_OK) { n = RecursiveStackCheck(n); } ++n; return n; } void CheckStackThread(void *arg) { int n; Ns_ThreadSetName("checkstack"); n = RecursiveStackCheck(0); Ns_ThreadExit((void *) n); } /* * WorkThread - * * Thread which exercies a varity of sync objects and TLS. */ void WorkThread(void *arg) { int i = (int) arg; int *ip; time_t now; Ns_Thread self; char name[32]; sprintf(name, "-work:%d-", i); Ns_ThreadSetName(name); if (i == 2) { Ns_RWLockWrLock(&rwlock); Msg("rwlock write aquired"); sleep(2); } else { Ns_RWLockRdLock(&rwlock); Msg("rwlock read aquired aquired"); sleep(1); } Ns_CsEnter(&cs); Msg("enter critical section once"); Ns_CsEnter(&cs); Msg("enter critical section twice"); Ns_CsLeave(&cs); Ns_CsLeave(&cs); Ns_ThreadSelf(&self); arg = Ns_TlsGet(&key); Ns_SemaWait(&sema); Msg("got semaphore posted from main"); if (arg == NULL) { arg = ns_malloc(sizeof(int)); Ns_TlsSet(&key, arg); } ip = arg; *ip = i; if (i == 5) { Ns_Time to; int st; Ns_GetTime(&to); Msg("time: %ld %ld", to.sec, to.usec); Ns_IncrTime(&to, 5, 0); Msg("time: %ld %ld", to.sec, to.usec); Ns_MutexLock(&lock); time(&now); Msg("timed wait starts: %s", ns_ctime(&now)); st = Ns_CondTimedWait(&cond, &lock, &to); Ns_MutexUnlock(&lock); time(&now); Msg("timed wait ends: %s - status: %d", ns_ctime(&now), st); } if (i == 9) { Msg("sleep 4 seconds start"); sleep(4); Msg("sleep 4 seconds done"); } time(&now); Ns_RWLockUnlock(&rwlock); Msg("rwlock unlocked"); Msg("exiting"); Ns_ThreadExit((void *) i); } /* * AtExit - * * Test of atexit() handler. */ void AtExit(void) { Msg("atexit handler called!"); } /* * MemThread, MemTime - * * Time allocations of malloc and zippy ns_malloc. */ #define NA 10000 int nthreads = 10; int memstart; int nrunning; void MemThread(void *arg) { int i; void *ptr; Ns_ThreadSetName("memthread"); Ns_MutexLock(&lock); ++nrunning; Ns_CondBroadcast(&cond); while (!memstart) { Ns_CondWait(&cond, &lock); } Ns_MutexUnlock(&lock); ptr = NULL; for (i = 0; i < NA; ++i) { if (arg) { if (ptr) ns_free(ptr); ptr = ns_malloc(10); } else { if (ptr) free(ptr); ptr = malloc(10); } } } void MemTime(int ns) { Ns_Time start, end, diff; int i; Ns_Thread *tids; tids = ns_malloc(sizeof(Ns_Thread *) * nthreads); Ns_MutexLock(&lock); nrunning = 0; memstart = 0; Ns_MutexUnlock(&lock); printf("starting %d %smalloc threads...", nthreads, ns ? "ns_" : ""); fflush(stdout); Ns_GetTime(&start); for (i = 0; i < nthreads; ++i) { Ns_ThreadCreate(MemThread, (void *) ns, 0, &tids[i]); } Ns_MutexLock(&lock); while (nrunning < nthreads) { Ns_CondWait(&cond, &lock); } printf("waiting...."); fflush(stdout); memstart = 1; Ns_CondBroadcast(&cond); Ns_MutexUnlock(&lock); for (i = 0; i < nthreads; ++i) { Ns_ThreadJoin(&tids[i], NULL); } Ns_GetTime(&end); Ns_DiffTime(&end, &start, &diff); printf("done: %d seconds, %d usec\n", (int) diff.sec, (int) diff.usec); } void DumpString(Tcl_DString *dsPtr) { char **largv; int i, largc; if (Tcl_SplitList(NULL, dsPtr->string, &largc, (CONST char***)&largv) == TCL_OK) { for (i = 0; i < largc; ++i) { printf("\t%s\n", largv[i]); } ckfree((char *) largv); } Tcl_DStringTrunc(dsPtr, 0); } void DumperThread(void *arg) { Ns_Time to; Tcl_DString ds; Tcl_DStringInit(&ds); Ns_ThreadSetName("-dumper-"); Ns_MutexLock(&block); Ns_MutexLock(&dlock); while (!dstop) { Ns_GetTime(&to); Ns_IncrTime(&to, 1, 0); Ns_CondTimedWait(&dcond, &dlock, &to); Ns_MutexLock(&mlock); Ns_ThreadList(&ds, NULL); DumpString(&ds); Ns_MutexList(&ds); DumpString(&ds); #if !defined(_WIN32) && defined(USE_THREAD_ALLOC) && (STATIC_BUILD == 0) /* NB: Not yet exported in WIN32 Tcl. */ Tcl_GetMemoryInfo(&ds); #endif DumpString(&ds); Ns_MutexUnlock(&mlock); } Ns_MutexUnlock(&dlock); Ns_MutexUnlock(&block); } static void DetachedThread(void *ignored) { int i; for (i = 0; i < 10; ++i) { Msg("\n\ndetached! %d", i); sleep(1); } } #if PTHREAD_TEST /* * Routines to test compatibility with pthread-created * threads, i.e., that non-Ns_ThreadCreate'd threads * can call Ns API's which will cleanup at thread exit. */ static Ns_Mutex plock; static Ns_Cond pcond; static int pgo; void PthreadTlsCleanup(void *arg) { int i = (int) arg; printf("pthread[%d]: log: %d\n", (int) pthread_self(), i); } void * Pthread(void *arg) { static Ns_Tls tls; /* * Allocate TLS first time (this is recommended TLS * self-initialization style. */ Ns_ThreadSetName("pthread"); sleep(5); if (tls == NULL) { Ns_MasterLock(); if (tls == NULL) { Ns_TlsAlloc(&tls, PthreadTlsCleanup); } Ns_MasterUnlock(); } Ns_TlsSet(&tls, arg); /* * Wait for exit signal from main(). */ Ns_MutexLock(&plock); while (!pgo) { Ns_CondWait(&pcond, &plock); } Ns_MutexUnlock(&plock); return arg; } #endif /* * main - * * Fire off a bunch of weird threads to exercise the thread * interface. */ int main(int argc, char *argv[]) { int i, code; Ns_Thread threads[10]; Ns_Thread self, dumper; void *arg; char *p; #if PTHREAD_TEST pthread_t tids[10]; #endif NsThreads_LibInit(); Ns_ThreadSetName("-main-"); /* * Jump directly to memory test if requested. */ for (i = 1; i < argc; ++i) { p = argv[i]; switch (*p) { case 'n': break; case 'm': nthreads = atoi(p + 1); goto mem; break; } } Ns_ThreadCreate(DetachedThread, NULL, 0, NULL); Ns_ThreadCreate(DumperThread, NULL, 0, &dumper); Ns_MutexSetName(&lock, "startlock"); Ns_MutexSetName(&dlock, "dumplock"); Ns_MutexSetName(&mlock, "msglock"); Ns_MutexSetName(&block, "busylock"); Ns_ThreadStackSize(81920); Ns_SemaInit(&sema, 3); Msg("sema initialized to 3"); atexit(AtExit); Msg("pid = %d", getpid()); Ns_TlsAlloc(&key, TlsLogArg); for (i = 0; i < 10; ++i) { Msg("starting work thread %d", i); Ns_ThreadCreate(WorkThread, (void *) i, 0, &threads[i]); } sleep(1); /* Ns_CondSignal(&cond); */ Ns_SemaPost(&sema, 10); Msg("sema post 10"); Ns_RWLockWrLock(&rwlock); Msg("rwlock write locked (main thread)"); sleep(1); Ns_RWLockUnlock(&rwlock); Msg("rwlock write unlocked (main thread)"); for (i = 0; i < 10; ++i) { Msg("waiting for thread %d to exit", i); Ns_ThreadJoin(&threads[i], (void **) &code); Msg("thread %d exited - code: %d", i, code); } #if PTHREAD_TEST for (i = 0; i < 10; ++i) { pthread_create(&tids[i], NULL, Pthread, (void *) i); printf("pthread: create %d = %d\n", i, (int) tids[i]); Ns_ThreadYield(); } Ns_MutexLock(&plock); pgo = 1; Ns_MutexUnlock(&plock); Ns_CondBroadcast(&pcond); for (i = 0; i < 10; ++i) { pthread_join(tids[i], &arg); printf("pthread: join %d = %d\n", i, (int) arg); } #endif Ns_ThreadSelf(&self); Ns_MutexLock(&dlock); dstop = 1; Ns_CondSignal(&dcond); Ns_MutexUnlock(&dlock); Ns_ThreadJoin(&dumper, NULL); Msg("threads joined"); for (i = 0; i < 10; ++i) { Ns_ThreadCreate(CheckStackThread, NULL, 8192*(i+1), &threads[i]); } for (i = 0; i < 10; ++i) { Ns_ThreadJoin(&threads[i], &arg); printf("check stack %d = %d\n", i, (int) arg); } /*Ns_ThreadEnum(DumpThreads, NULL);*/ /*Ns_MutexEnum(DumpLocks, NULL);*/ mem: MemTime(0); MemTime(1); return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/pthread.c�����������������������������������������������������������������0000644�0001750�0001750�00000056131�10275641153�017044� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * pthread.c -- * * Interface routines for nsthreads using pthreads. * */ #include "thread.h" #include <pthread.h> /* TODO: Move to configure. */ #ifdef __APPLE__ #define HAVE_PTHREAD_GET_STACKADDR_NP 1 #endif #ifdef __linux #define HAVE_PTHREAD_GETATTR_NP 1 #endif #if defined(HAVE_PTHREAD_GETATTR_NP) && defined(GETATTRNP_NOT_DECLARED) extern int pthread_getattr_np(pthread_t tid, pthread_attr_t *attr); #endif /* * The following constants define an integer magic number for marking pages * at thread startup to be later checked at thread exit for stack usage and * possible overflow. */ #define STACK_MAGIC 0xefefefef typedef struct Thread { unsigned long uid; int marked; void *stackaddr; size_t stacksize; void *slots[NS_THREAD_MAXTLS]; } Thread; static void *ThreadMain(void *arg); static Thread *NewThread(void); static void FreeThread(void *arg); static void SetKey(char *func, void *arg); static void StackPages(Thread *thrPtr, int mark); static int StackDown(char **outer); static int PageRound(int size); static pthread_cond_t *GetCond(Ns_Cond *cond); static Thread *GetThread(void); static Ns_Mutex uidlock; /* * The following single Tls key is used to store the Thread struct * including stack info, startup args, and TLS slots. */ static pthread_key_t key; /* * The following variables are used to manage stack sizes, guardzones, and * size monitoring. */ static int stackdown; static int pagesize; static int guardsize; static int markpages; static FILE *logfp = NULL; static char *dumpdir = NULL; /* *---------------------------------------------------------------------- * * NsInitThreads -- * * Pthread library load time init routine. * * Results: * None. * * Side effects: * Creates pthread key and set various stack management values. * *---------------------------------------------------------------------- */ void NsInitThreads(void) { char *env; int err; err = pthread_key_create(&key, FreeThread); if (err != 0) { NsThreadFatal("NsPthreadsInit", "pthread_key_create", err); } stackdown = StackDown(&env); pagesize = getpagesize(); env = getenv("NS_THREAD_GUARDSIZE"); if (env == NULL || Tcl_GetInt(NULL, env, &guardsize) != TCL_OK || guardsize < 2) { guardsize = 2 * pagesize; } guardsize = PageRound(guardsize); markpages = getenv("NS_THREAD_MARKPAGES") ? 1 : 0; dumpdir = getenv("NS_THREAD_DUMPDIR"); env = getenv("NS_THREAD_LOGFILE"); if (env != NULL) { if (strcmp(env, "-") == 0) { logfp = stderr; } else { logfp = fopen(env, "a"); } } Ns_MutexSetName(&uidlock, "ns:uidlock"); } /* *---------------------------------------------------------------------- * * NsGetTls -- * * Return the TLS slots. * * Results: * Pointer to slots array. * * Side effects: * None. * *---------------------------------------------------------------------- */ void ** NsGetTls(void) { Thread *thrPtr = GetThread(); return thrPtr->slots; } /* *---------------------------------------------------------------------- * * NsGetStack -- * * Return information about the stack. * * Results: * 0: Could not return stack. * -1: Stack grows down. * 1: Stack grows up. * * Side effects: * Given addrPtr and sizePtr are updated with stack base * address and size. * *---------------------------------------------------------------------- */ int NsGetStack(void **addrPtr, size_t *sizePtr) { Thread *thrPtr = GetThread(); if (thrPtr->stackaddr == NULL) { return 0; } *addrPtr = thrPtr->stackaddr; *sizePtr = thrPtr->stacksize; return (stackdown ? -1 : 1); } /* *---------------------------------------------------------------------- * * NsThreadLibName -- * * Return the string name of the thread library. * * Results: * Pointer to static string. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * NsThreadLibName(void) { return "pthread"; } /* *---------------------------------------------------------------------- * * NsLockAlloc -- * * Allocate and initialize a mutex lock. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * NsLockAlloc(void) { pthread_mutex_t *lock; int err; lock = ns_malloc(sizeof(pthread_mutex_t)); err = pthread_mutex_init(lock, NULL); if (err != 0) { NsThreadFatal("NsLockAlloc", "pthread_mutex_init", err); } return lock; } /* *---------------------------------------------------------------------- * * NsLockFree -- * * Free a mutex lock. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsLockFree(void *lock) { int err; err = pthread_mutex_destroy((pthread_mutex_t *) lock); if (err != 0) { NsThreadFatal("NsLockFree", "pthread_mutex_destroy", err); } ns_free(lock); } /* *---------------------------------------------------------------------- * * NsLockSet -- * * Set a mutex lock. * * Results: * None. * * Side effects: * May wait wakeup event if lock already held. * *---------------------------------------------------------------------- */ void NsLockSet(void *lock) { int err; err = pthread_mutex_lock((pthread_mutex_t *) lock); if (err != 0) { NsThreadFatal("NsLockSet", "pthread_mutex_lock", err); } } /* *---------------------------------------------------------------------- * * NsLockTry -- * * Try to set a mutex lock once. * * Results: * 1 if lock set, 0 otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsLockTry(void *lock) { int err; err = pthread_mutex_trylock((pthread_mutex_t *) lock); if (err == EBUSY) { return 0; } else if (err != 0) { NsThreadFatal("NsLockTry", "pthread_mutex_trylock", err); } return 1; } /* *---------------------------------------------------------------------- * * NsLockUnset -- * * Unset a mutex lock. * * Results: * None. * * Side effects: * May signal wakeup event for a waiting thread. * *---------------------------------------------------------------------- */ void NsLockUnset(void *lock) { int err; err = pthread_mutex_unlock((pthread_mutex_t *) lock); if (err != 0) { NsThreadFatal("NsLockUnset", "pthread_mutex_unlock", err); } } /* *---------------------------------------------------------------------- * * NsCreateThread -- * * Pthread specific thread create function called by * Ns_ThreadCreate. * * Results: * None. * * Side effects: * Depends on thread startup routine. * *---------------------------------------------------------------------- */ void NsCreateThread(void *arg, long stacksize, Ns_Thread *resultPtr) { static char *func = "NsCreateThread"; pthread_attr_t attr; pthread_t tid; size_t size; int err; err = pthread_attr_init(&attr); if (err != 0) { NsThreadFatal(func, "pthread_attr_init", err); } /* * Round the stacksize to a pagesize and include the guardzone. */ size = PageRound(stacksize) + guardsize; err = pthread_attr_setstacksize(&attr, size); if (err != 0) { NsThreadFatal(func, "pthread_attr_setstacksize", err); } /* * System scope always preferred, ignore any unsupported error. */ err = pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM); if (err != 0 && err != ENOTSUP) { NsThreadFatal(func, "pthread_setscope", err); } err = pthread_create(&tid, &attr, ThreadMain, arg); if (err != 0) { NsThreadFatal(func, "pthread_create", err); } err = pthread_attr_destroy(&attr); if (err != 0) { NsThreadFatal(func, "pthread_attr_destroy", err); } if (resultPtr != NULL) { *resultPtr = (Ns_Thread) tid; } else { err = pthread_detach(tid); if (err != 0) { NsThreadFatal(func, "pthread_detach", err); } } } /* *---------------------------------------------------------------------- * * ThreadMain -- * * Pthread startup routine. * * Results: * Does not return. * * Side effects: * NsThreadMain will call Ns_ThreadExit. * *---------------------------------------------------------------------- */ static void * ThreadMain(void *arg) { Thread *thrPtr = GetThread(); if (thrPtr->stackaddr != NULL && markpages) { StackPages(thrPtr, 1); thrPtr->marked = 1; } NsThreadMain(arg); return NULL; } /* *---------------------------------------------------------------------- * * Ns_ThreadExit -- * * Terminate a thread. * * Results: * None. * * Side effects: * Cleanup will be handled by the pthread call to CleanupTls. * *---------------------------------------------------------------------- */ void Ns_ThreadExit(void *arg) { pthread_exit(arg); } /* *---------------------------------------------------------------------- * * Ns_ThreadJoin -- * * Wait for exit of a non-detached thread. * * Results: * None. * * Side effects: * Requested thread is destroyed after join. * *---------------------------------------------------------------------- */ void Ns_ThreadJoin(Ns_Thread *thread, void **argPtr) { pthread_t tid = (pthread_t) *thread; int err; err = pthread_join(tid, argPtr); if (err != 0) { NsThreadFatal("Ns_ThreadJoin", "pthread_join", err); } } /* *---------------------------------------------------------------------- * * Ns_ThreadYield -- * * Yield the cpu to another thread. * * Results: * None. * * Side effects: * See sched_yield(). * *---------------------------------------------------------------------- */ void Ns_ThreadYield(void) { sched_yield(); } /* *---------------------------------------------------------------------- * * Ns_ThreadId -- * * Return the numeric thread id. * * Results: * Integer thread id. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_ThreadId(void) { return (int) pthread_self(); } /* *---------------------------------------------------------------------- * * Ns_ThreadSelf -- * * Return thread handle suitable for Ns_ThreadJoin. * * Results: * None. * * Side effects: * Value at threadPtr is updated with thread's handle. * *---------------------------------------------------------------------- */ void Ns_ThreadSelf(Ns_Thread *threadPtr) { *threadPtr = (Ns_Thread) pthread_self(); } /* *---------------------------------------------------------------------- * * Ns_CondInit -- * * Pthread condition variable initialization. Note this routine * isn't used directly very often as static condition variables * are now self initialized when first used. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_CondInit(Ns_Cond *cond) { pthread_cond_t *condPtr; int err; condPtr = ns_malloc(sizeof(pthread_cond_t)); err = pthread_cond_init(condPtr, NULL); if (err != 0) { NsThreadFatal("Ns_CondInit", "pthread_cond_init", err); } *cond = (Ns_Cond) condPtr; } /* *---------------------------------------------------------------------- * * Ns_CondDestroy -- * * Pthread condition destroy. Note this routine is almost never * used as condition variables normally exist in memory until * the process exits. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_CondDestroy(Ns_Cond *cond) { pthread_cond_t *condPtr = (pthread_cond_t *) *cond; int err; if (condPtr != NULL) { err = pthread_cond_destroy(condPtr); if (err != 0) { NsThreadFatal("Ns_CondDestroy", "pthread_cond_destroy", err); } ns_free(condPtr); *cond = NULL; } } /* *---------------------------------------------------------------------- * * Ns_CondSignal -- * * Pthread condition signal. * * Results: * None. * * Side effects: * See pthread_cond_signal. * *---------------------------------------------------------------------- */ void Ns_CondSignal(Ns_Cond *cond) { int err; err = pthread_cond_signal(GetCond(cond)); if (err != 0) { NsThreadFatal("Ns_CondSignal", "pthread_cond_signal", err); } } /* *---------------------------------------------------------------------- * * Ns_CondBroadcast -- * * Pthread condition broadcast. * * Results: * None. * * Side effects: * See pthread_cond_broadcast. * *---------------------------------------------------------------------- */ void Ns_CondBroadcast(Ns_Cond *cond) { int err; err = pthread_cond_broadcast(GetCond(cond)); if (err != 0) { NsThreadFatal("Ns_CondBroadcast", "pthread_cond_broadcast", err); } } /* *---------------------------------------------------------------------- * * Ns_CondWait -- * * Pthread indefinite condition wait. * * Results: * None. * * Side effects: * See pthread_cond_wait. * *---------------------------------------------------------------------- */ void Ns_CondWait(Ns_Cond *cond, Ns_Mutex *mutex) { int err; err = pthread_cond_wait(GetCond(cond), NsGetLock(mutex)); if (err != 0) { NsThreadFatal("Ns_CondWait", "pthread_cond_wait", err); } } /* *---------------------------------------------------------------------- * * Ns_CondTimedWait -- * * Pthread absolute time wait. * * Results: * None. * * Side effects: * See pthread_cond_timewait. * *---------------------------------------------------------------------- */ int Ns_CondTimedWait(Ns_Cond *cond, Ns_Mutex *mutex, Ns_Time *timePtr) { int err, status = NS_ERROR; struct timespec ts; if (timePtr == NULL) { Ns_CondWait(cond, mutex); return NS_OK; } /* * Convert the microsecond-based Ns_Time to a nanosecond-based * struct timespec. */ ts.tv_sec = timePtr->sec; ts.tv_nsec = timePtr->usec * 1000; /* * As documented on Linux, pthread_cond_timedwait may return * EINTR if a signal arrives. We have noticed that * EINTR can be returned on Solaris as well although this * is not documented. We assume the wakeup is truely * spurious and simply restart the wait knowing that the * ts structure has not been modified. */ do { err = pthread_cond_timedwait(GetCond(cond), NsGetLock(mutex), &ts); } while (err == EINTR); if (err == ETIMEDOUT) { status = NS_TIMEOUT; } else if (err != 0) { NsThreadFatal("Ns_CondTimedWait", "pthread_cond_timedwait", err); } else { status = NS_OK; } return status; } /* *---------------------------------------------------------------------- * * GetCond -- * * Cast an Ns_Cond to pthread_cond_t, initializing if needed. * * Results: * Pointer to pthread_cond_t. * * Side effects: * Ns_Cond is initialized the first time. * *---------------------------------------------------------------------- */ static pthread_cond_t * GetCond(Ns_Cond *cond) { if (*cond == NULL) { Ns_MasterLock(); if (*cond == NULL) { Ns_CondInit(cond); } Ns_MasterUnlock(); } return (pthread_cond_t *) *cond; } /* *---------------------------------------------------------------------- * * GetThread -- * * Return the Thread struct for the current thread. * * Results: * Pointer to Thread. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Thread * GetThread(void) { Thread *thrPtr; thrPtr = pthread_getspecific(key); if (thrPtr == NULL) { thrPtr = NewThread(); SetKey("NsGetTls", thrPtr); } return thrPtr; } /* *---------------------------------------------------------------------- * * NewThread -- * * Create a new Thread struct for the current thread, determing * the stack addr and size if possible. * * Results: * Pointer to Thread. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Thread * NewThread(void) { Thread *thrPtr; static unsigned int nextuid = 0; pthread_t tid; #if defined(HAVE_PTHREAD_GETATTR_NP) static char *func = "NewThread"; pthread_attr_t attr; int err; #endif thrPtr = ns_calloc(1, sizeof(Thread)); Ns_MutexLock(&uidlock); thrPtr->uid = nextuid++; Ns_MutexUnlock(&uidlock); tid = pthread_self(); #if defined(HAVE_PTHREAD_GETATTR_NP) err = pthread_getattr_np(tid, &attr); if (err != 0) { NsThreadFatal(func, "pthread_getattr_np", err); } err = pthread_attr_getstackaddr(&attr, &thrPtr->stackaddr); if (err != 0) { NsThreadFatal(func, "pthread_attr_getstackaddr", err); } err = pthread_attr_getstacksize(&attr, &thrPtr->stacksize); if (err != 0) { NsThreadFatal(func, "pthread_attr_getstacksize", err); } thrPtr->stacksize -= guardsize; err = pthread_attr_destroy(&attr); if (err != 0) { NsThreadFatal(func, "pthread_attr_destroy", err); } #elif defined(HAVE_PTHREAD_GET_STACKADDR_NP) thrPtr->stackaddr = pthread_get_stackaddr_np(tid); thrPtr->stacksize = pthread_get_stacksize_np(tid) - guardsize; #endif return thrPtr; } /* *---------------------------------------------------------------------- * * FreeThread -- * * Pthread TLS cleanup. This routine is called during thread * exit. This routine could be called more than once if some * other pthread cleanup requires nsthreads TLS. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void FreeThread(void *arg) { Thread *thrPtr = arg; /* * Restore the current slots during cleanup so handlers can access * TLS in other slots. */ SetKey("FreeThread", arg); NsCleanupTls(thrPtr->slots); SetKey("FreeThread", NULL); if (thrPtr->marked) { StackPages(thrPtr, 0); } ns_free(thrPtr); } /* *---------------------------------------------------------------------- * * SetKey -- * * Set the pthread key. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void SetKey(char *func, void *arg) { int err; err = pthread_setspecific(key, arg); if (err != 0) { NsThreadFatal(func, "pthread_setspecific", err); } } /* *---------------------------------------------------------------------- * * StackDown -- * * Determine if the stack grows down. * * Results: * 1 if stack grows down, 0 otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int StackDown(char **outer) { char *local; return (&local < outer ? 1 : 0); } /* *---------------------------------------------------------------------- * * StackPages -- * * Mark or count used stack pages. * * Results: * Count of used pages. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void StackPages(Thread *thrPtr, int mark) { Ns_Time now; caddr_t start, end, guard, base; int fd, overflow, pagewords, pages, maxpage, bytes; uint32_t *ip; char file[100]; /* * Determine the range of pages to mark or check. Basically the first * page to be used is ignored assuming it's being used now and the * guard pages are marked completely to check for overflow. All pages * in between are marked on the first integer word to be later counted * to get a pages used count. */ if (stackdown) { start = thrPtr->stackaddr - thrPtr->stacksize + guardsize; end = thrPtr->stackaddr - pagesize; guard = start - guardsize; } else { start = thrPtr->stackaddr + pagesize; end = thrPtr->stackaddr + thrPtr->stacksize - guardsize; guard = end; } /* * Completely mark the guard page. */ overflow = 0; ip = (uint32_t *) guard; while (ip < (uint32_t *) (guard + guardsize)) { if (mark) { *ip = STACK_MAGIC; } else if (*ip != STACK_MAGIC) { overflow = 1; break; } ++ip; } /* * For each stack page, either mark with the magic number at thread * startup or count unmarked pages at thread cleanup. */ pagewords = pagesize / sizeof(uint32_t); maxpage = pages = 1; ip = (uint32_t *) start; if (stackdown) { /* NB: Mark last word, not first, of each page. */ ip += pagewords - 1; } while (ip < (uint32_t *) end) { if (mark) { *ip = STACK_MAGIC; } else if (*ip != STACK_MAGIC) { maxpage = pages; } ++pages; ip += pagewords; } if (!mark) { pages = maxpage; } bytes = pages * pagesize; if (!mark && dumpdir != NULL) { sprintf(file, "%s/nsstack.%lu", dumpdir, thrPtr->uid); fd = open(file, O_WRONLY|O_TRUNC|O_CREAT, 0644); if (fd >= 0) { base = thrPtr->stackaddr; if (stackdown) { base -= thrPtr->stacksize; } (void) write(fd, base, thrPtr->stacksize); close(fd); } } if (logfp) { Ns_GetTime(&now); fprintf(logfp, "%s: time: %ld:%ld, thread: %lu, %s: %d pages, %d bytes%s\n", mark ? "create" : "exit", now.sec, now.usec, thrPtr->uid, mark ? "stackavil" : "stackuse", pages, bytes, overflow ? " - possible overflow!" : ""); } } /* *---------------------------------------------------------------------- * * PageRound -- * * Round bytes up to next pagesize. * * Results: * Rounded size. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int PageRound(int size) { if (size % pagesize) { size += pagesize; } size = (size / pagesize) * pagesize; return size; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/tls.c���������������������������������������������������������������������0000644�0001750�0001750�00000011175�10220656737�016222� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * tls.c -- * * Thread local storage support for nsthreads. Note that the nsthread * library handles thread local storage directly. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/tls.c,v 1.4 2005/03/25 00:39:59 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * The following global variable specifies the maximum TLS id. Modifying * this value has no effect. */ int nsThreadMaxTls = NS_THREAD_MAXTLS; /* * Static functions defined in this file. */ static Ns_TlsCleanup *cleanupProcs[NS_THREAD_MAXTLS]; /* *---------------------------------------------------------------------- * * Ns_TlsAlloc -- * * Allocate the next tls id. * * Results: * None. * * Side effects: * Id is set in given tlsPtr. * *---------------------------------------------------------------------- */ void Ns_TlsAlloc(Ns_Tls *keyPtr, Ns_TlsCleanup *cleanup) { static int nextkey = 1; int key; Ns_MasterLock(); if (nextkey == NS_THREAD_MAXTLS) { Tcl_Panic("Ns_TlsAlloc: exceded max tls: %d", NS_THREAD_MAXTLS); } key = nextkey++; cleanupProcs[key] = cleanup; Ns_MasterUnlock(); *keyPtr = (void *) key; } /* *---------------------------------------------------------------------- * * Ns_TlsSet -- * * Set the value for a threads tls slot. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_TlsSet(Ns_Tls *keyPtr, void *value) { void **slots = NsGetTls(); int key = (int) (*keyPtr); if (key < 1 || key >= NS_THREAD_MAXTLS) { Tcl_Panic("Ns_TlsSet: invalid key: %d: should be between 1 and %d", key, NS_THREAD_MAXTLS); } slots[key] = value; } /* *---------------------------------------------------------------------- * * Ns_TlsGet -- * * Get this thread's value in a tls slot. * * Results: * Pointer in slot. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * Ns_TlsGet(Ns_Tls *keyPtr) { void **slots = NsGetTls(); int key = (int) (*keyPtr); if (key < 1 || key >= NS_THREAD_MAXTLS) { Tcl_Panic("Ns_TlsGet: invalid key: %d: should be between 1 and %d", key, NS_THREAD_MAXTLS); } return slots[key]; } /* *---------------------------------------------------------------------- * * NsCleanupTls -- * * Cleanup thread local storage in LIFO order for an exiting thread. * Note the careful use of the counters to keep iterating over the * list, up to 5 times, until all TLS values are NULL. This emulates * the Pthread TLS behavior which catches a destructor inadvertantly * calling a library which resets a TLS value after it's been destroyed. * * Results: * None. * * Side effects: * Cleanup procs are invoked for non-null values. * *---------------------------------------------------------------------- */ void NsCleanupTls(void **slots) { int i, trys, retry; void *arg; trys = 0; do { retry = 0; i = NS_THREAD_MAXTLS; while (i-- > 0) { if (cleanupProcs[i] != NULL && slots[i] != NULL) { arg = slots[i]; slots[i] = NULL; (*cleanupProcs[i])(arg); retry = 1; } } } while (retry && trys++ < 5); Tcl_FinalizeThread(); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/signal.c������������������������������������������������������������������0000644�0001750�0001750�00000006066�07501224200�016660� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * signal.c -- * * Routines for signal handling. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/signal.c,v 1.1 2002/06/10 22:30:24 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* *---------------------------------------------------------------------- * * ns_sigmask -- * * Set the thread's signal mask. * * Results: * 0 on success, otherwise an error code. * * Side effects: * See pthread_sigmask. * *---------------------------------------------------------------------- */ int ns_sigmask(int how, sigset_t *set, sigset_t *oset) { return pthread_sigmask(how, set, oset); } /* *---------------------------------------------------------------------- * * ns_signal -- * * Install a process-wide signal handler. Note that the handler * is shared among all threads (although the signal mask is * per-thread). * * Results: * 0 on success, -1 on error with specific error code set in errno. * * Side effects: * Handler will be called when signal is received in this thread. * *---------------------------------------------------------------------- */ int ns_signal(int sig, void (*proc) (int)) { struct sigaction sa; sa.sa_flags = 0; sa.sa_handler = (void (*)(int)) proc; sigemptyset(&sa.sa_mask); return sigaction(sig, &sa, NULL); } /* *---------------------------------------------------------------------- * * ns_sigwait -- * * Posix style sigwait(). * * Results: * 0 on success, otherwise an error code. * * Side effects: * None. * *---------------------------------------------------------------------- */ int ns_sigwait(sigset_t * set, int *sig) { return sigwait(set, sig); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/winthread.c���������������������������������������������������������������0000644�0001750�0001750�00000054264�10275641153�017407� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * win32.c -- * * Interface routines for nsthreads using WIN32 functions. * */ #include "thread.h" #include <io.h> /* * The following structure maintains the Win32-specific state of a * process thread and mutex and condition waits pointers. */ typedef struct WinThread { struct WinThread *nextPtr; struct WinThread *wakeupPtr; HANDLE self; HANDLE event; int condwait; void *slots[NS_THREAD_MAXTLS]; } WinThread; typedef struct ThreadArg { HANDLE self; void *arg; } ThreadArg; /* * The following structure defines a mutex as a spinlock and * wait queue. The custom lock code provides the speed of * a Win32 CriticalSection with the TryLock of a Mutex handle * (TryEnterCriticalSection is not yet available on all Win32 * platforms). */ typedef struct { int locked; LONG spinlock; WinThread *waitPtr; } Lock; /* * The following structure defines a condition variable as * a spinlock and wait queue. */ typedef struct { LONG spinlock; WinThread *waitPtr; } Cond; /* * The following structure is used to maintain state during * an open directory search. */ typedef struct Search { long handle; struct _finddata_t fdata; struct dirent ent; } Search; /* * Static functions defined in this file. */ static void Wakeup(WinThread *wPtr, char *func); static void Queue(WinThread **waitPtrPtr, WinThread *wPtr); static Cond *GetCond(Ns_Cond *cond); static unsigned __stdcall ThreadMain(void *arg); #define SPINLOCK(lPtr) \ while(InterlockedExchange((lPtr), 1)) Sleep(0) #define SPINUNLOCK(lPtr) \ InterlockedExchange((lPtr), 0) #define GETWINTHREAD() TlsGetValue(tlskey) /* * The following single Tls key is used to store the nsthread * structure. It's initialized in DllMain. */ static DWORD tlskey; /* *---------------------------------------------------------------------- * * DllMain -- * * Thread library DLL main, managing each thread's WinThread * structure and the master critical section lock. * * Results: * TRUE. * * Side effects: * On error will abort process. * *---------------------------------------------------------------------- */ BOOL APIENTRY DllMain(HANDLE hModule, DWORD why, LPVOID lpReserved) { WinThread *wPtr; switch (why) { case DLL_PROCESS_ATTACH: NsThreads_LibInit(); /* FALLTHROUGH */ case DLL_THREAD_ATTACH: wPtr = ns_calloc(1, sizeof(WinThread)); wPtr->event = CreateEvent(NULL, TRUE, FALSE, NULL); if (wPtr->event == NULL) { NsThreadFatal("DllMain", "CreateEvent", GetLastError()); } if (!TlsSetValue(tlskey, wPtr)) { NsThreadFatal("DllMain", "TlsSetValue", GetLastError()); } break; case DLL_THREAD_DETACH: /* * Note this code does not execute for the final thread on * exit because the TLS callbacks may invoke code from an * unloaded DLL, e.g., Tcl. */ wPtr = TlsGetValue(tlskey); if (wPtr) { NsCleanupTls(wPtr->slots); if (!CloseHandle(wPtr->event)) { NsThreadFatal("DllMain", "CloseHandle", GetLastError()); } if (!TlsSetValue(tlskey, NULL)) { NsThreadFatal("DllMain", "TlsSetValue", GetLastError()); } ns_free(wPtr); } break; case DLL_PROCESS_DETACH: if (!TlsFree(tlskey)) { NsThreadFatal("DllMain", "TlsFree", GetLastError()); } break; } return TRUE; } /* *---------------------------------------------------------------------- * * NsInitThreads -- * * Core threads init. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitThreads(void) { tlskey = TlsAlloc(); if (tlskey == 0xFFFFFFFF) { NsThreadFatal("NsInitThreads", "TlsAlloc", GetLastError()); } } /* *---------------------------------------------------------------------- * * NsGetStack -- * * Return stack info. * * Results: * Unsupport, always returns 0. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsGetStack(void **addrPtr, size_t *sizePtr) { return 0; } /* *---------------------------------------------------------------------- * * NsGetTls -- * * Return the TLS slots for this thread. * * Results: * Pointer to slots array. * * Side effects: * None. * *---------------------------------------------------------------------- */ void ** NsGetTls(void) { WinThread *wPtr = GETWINTHREAD(); return wPtr->slots; } /* *---------------------------------------------------------------------- * * NsThreadLibName -- * * Return the string name of the thread library. * * Results: * Pointer to static string. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * NsThreadLibName(void) { return "win32"; } /* *---------------------------------------------------------------------- * * NsLockAlloc -- * * Allocate and initialize a mutex lock. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * NsLockAlloc(void) { return ns_calloc(1, sizeof(Lock)); } /* *---------------------------------------------------------------------- * * NsLockFree -- * * Free a mutex lock. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsLockFree(void *lock) { ns_free(lock); } /* *---------------------------------------------------------------------- * * NsLockSet -- * * Set a mutex lock. * * Results: * None. * * Side effects: * May wait wakeup event if lock already held. * *---------------------------------------------------------------------- */ void NsLockSet(void *lock) { WinThread *wPtr = NULL; Lock *lockPtr = lock; int locked; do { SPINLOCK(&lockPtr->spinlock); locked = lockPtr->locked; if (!locked) { lockPtr->locked = 1; } else { if (wPtr == NULL) { wPtr = GETWINTHREAD(); } Queue(&lockPtr->waitPtr, wPtr); } SPINUNLOCK(&lockPtr->spinlock); if (locked && WaitForSingleObject(wPtr->event, INFINITE) != WAIT_OBJECT_0) { NsThreadFatal("NsLockTry", "WaitForSingleObject", GetLastError()); } } while (locked); } /* *---------------------------------------------------------------------- * * NsLockTry -- * * Try to set a mutex lock once. * * Results: * 1 if lock set, 0 otherwise. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsLockTry(Lock *lock) { Lock *lockPtr = lock; int busy; SPINLOCK(&lockPtr->spinlock); busy = lockPtr->locked; if (!busy) { lockPtr->locked = 1; } SPINUNLOCK(&lockPtr->spinlock); if (busy) { return 0; } return 1; } /* *---------------------------------------------------------------------- * * NsLockUnset -- * * Unset a mutex lock. * * Results: * None. * * Side effects: * May signal wakeup event for a waiting thread. * *---------------------------------------------------------------------- */ void NsLockUnset(void *lock) { Lock *lockPtr = lock; WinThread *wPtr; SPINLOCK(&lockPtr->spinlock); lockPtr->locked = 0; wPtr = lockPtr->waitPtr; if (wPtr != NULL) { lockPtr->waitPtr = wPtr->nextPtr; wPtr->nextPtr = NULL; } SPINUNLOCK(&lockPtr->spinlock); /* * NB: It's safe to send the Wakeup() signal after spin unlock * because the waiting thread is in an infiniate wait. */ if (wPtr != NULL) { Wakeup(wPtr, "NsLockUnset"); } } /* *---------------------------------------------------------------------- * * Ns_CondInit -- * * Initialize a condition variable. Note that this function is rarely * called directly as condition variables are now self initialized * when first accessed. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_CondInit(Ns_Cond *cond) { *cond = ns_calloc(1, sizeof(Cond)); } /* *---------------------------------------------------------------------- * * Ns_CondDestroy -- * * Destroy a previously initialized condition variable. Note this * function is almost never called as condition variables * normally exist until the process exits. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_CondDestroy(Ns_Cond *cond) { if (*cond != NULL) { ns_free(*cond); *cond = NULL; } } /* *---------------------------------------------------------------------- * * Ns_CondSignal -- * * Signal a condition variable, releasing a single thread if one * is waiting. * * Results: * None. * * Side effects: * A single waiting thread may be resumed. * *---------------------------------------------------------------------- */ void Ns_CondSignal(Ns_Cond *cond) { Cond *condPtr = GetCond(cond); WinThread *wPtr; SPINLOCK(&condPtr->spinlock); wPtr = condPtr->waitPtr; if (wPtr != NULL) { condPtr->waitPtr = wPtr->nextPtr; wPtr->nextPtr = NULL; wPtr->condwait = 0; /* * NB: Unlike with NsLockUnset, the Wakeup() must be done * before the spin unlock as the other thread may have * been in a timed wait which just timed out. */ Wakeup(wPtr, "Ns_CondSignal"); } SPINUNLOCK(&condPtr->spinlock); } /* *---------------------------------------------------------------------- * * Ns_CondBroadcast -- * * Broadcast a condition, resuming all waiting threads, if any. * * Results: * None. * * Side effects: * First thread, if any, is awoken. * *---------------------------------------------------------------------- */ void Ns_CondBroadcast(Ns_Cond *cond) { Cond *condPtr = GetCond(cond); WinThread *wPtr; SPINLOCK(&condPtr->spinlock); /* * Set each thread to wake up the next thread on the * waiting list. This results in a rolling wakeup * which should reduce lock contention as the threads * are awoken. */ wPtr = condPtr->waitPtr; while (wPtr != NULL) { wPtr->wakeupPtr = wPtr->nextPtr; wPtr->nextPtr = NULL; wPtr->condwait = 0; wPtr = wPtr->wakeupPtr; } /* * Wake up the first thread to start the rolling * wakeup. */ wPtr = condPtr->waitPtr; if (wPtr != NULL) { condPtr->waitPtr = NULL; /* NB: See Wakeup() comment in Ns_CondSignal(). */ Wakeup(wPtr, "Ns_CondBroadcast"); } SPINUNLOCK(&condPtr->spinlock); } /* *---------------------------------------------------------------------- * * Ns_CondWait -- * * Wait indefinitely for a condition to be signaled. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_CondWait(Ns_Cond *cond, Ns_Mutex *mutex) { (void) Ns_CondTimedWait(cond, mutex, NULL); } /* *---------------------------------------------------------------------- * * Ns_CondTimedWait -- * * Wait for a condition to be signaled up to a given absolute time * out. This code is very tricky to avoid the race condition * between locking and unlocking the coordinating mutex and catching * a wakeup signal. Be sure you understand how condition variables * work before screwing around with this code. * * Results: * NS_OK on signal being received within the timeout period, * otherwise NS_TIMEOUT. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_CondTimedWait(Ns_Cond *cond, Ns_Mutex *mutex, Ns_Time *timePtr) { int status; Cond *condPtr; WinThread *wPtr, **waitPtrPtr; Ns_Time now, wait; DWORD msec, w; /* * Convert to relative wait time and verify. */ if (timePtr == NULL) { msec = INFINITE; } else { Ns_GetTime(&now); Ns_DiffTime(timePtr, &now, &wait); wait.usec /= 1000; if (wait.sec < 0 || (wait.sec == 0 && wait.usec <= 0)) { return NS_TIMEOUT; } msec = wait.sec * 1000 + wait.usec; } /* * Lock the condition and add this thread to the end of * the wait list. */ condPtr = GetCond(cond); wPtr = GETWINTHREAD(); SPINLOCK(&condPtr->spinlock); wPtr->condwait = 1; Queue(&condPtr->waitPtr, wPtr); SPINUNLOCK(&condPtr->spinlock); /* * Release the outer mutex and wait for the signal to arrive * or timeout. */ Ns_MutexUnlock(mutex); w = WaitForSingleObject(wPtr->event, msec); if (w != WAIT_OBJECT_0 && w != WAIT_TIMEOUT) { NsThreadFatal("Ns_CondTimedWait", "WaitForSingleObject", GetLastError()); } /* * Lock the condition and check if wakeup was signalled. Note * that the signal may have arrived as the event was timing * out so the return of WaitForSingleObject can't be relied on. * If there was no wakeup, remove this thread from the list. */ SPINLOCK(&condPtr->spinlock); if (!wPtr->condwait) { status = NS_OK; } else { status = NS_TIMEOUT; waitPtrPtr = &condPtr->waitPtr; while (*waitPtrPtr != wPtr) { waitPtrPtr = &(*waitPtrPtr)->nextPtr; } *waitPtrPtr = wPtr->nextPtr; wPtr->nextPtr = NULL; wPtr->condwait = 0; } /* * Wakeup the next thread in a rolling broadcast if necessary. * Note, as with Ns_CondSignal, the wakeup must be sent while * the spin lock is held. */ if (wPtr->wakeupPtr != NULL) { Wakeup(wPtr->wakeupPtr, "Ns_CondTimedWait"); wPtr->wakeupPtr = NULL; } SPINUNLOCK(&condPtr->spinlock); /* * Re-aquire the outer lock and return. */ Ns_MutexLock(mutex); return status; } /* *---------------------------------------------------------------------- * * NsCreateThread -- * * WinThread specific thread create function called by * Ns_ThreadCreate. Note the use of _beginthreadex. CreateThread * does not initialize the C runtime library fully and could * lead to memory leaks on thread exit. * * Results: * None. * * Side effects: * Depends on thread startup routine. * *---------------------------------------------------------------------- */ void NsCreateThread(void *arg, long stacksize, Ns_Thread *resultPtr) { ThreadArg *argPtr; unsigned hdl, tid, flags; flags = (resultPtr ? CREATE_SUSPENDED : 0); argPtr = ns_malloc(sizeof(ThreadArg)); argPtr->arg = arg; argPtr->self = NULL; hdl = _beginthreadex(NULL, stacksize, ThreadMain, argPtr, flags, &tid); if (hdl == 0) { NsThreadFatal("NsCreateThread", "_beginthreadex", errno); } if (resultPtr == NULL) { CloseHandle((HANDLE) hdl); } else { argPtr->self = (HANDLE) hdl; ResumeThread(argPtr->self); *resultPtr = (Ns_Thread) hdl; } } /* *---------------------------------------------------------------------- * * Ns_ThreadExit -- * * Terminate a thread. Note the use of _endthreadex instead of * ExitThread which, as mentioned above, is correct. * * Results: * None. * * Side effects: * Thread will clean itself up via the DllMain thread detach code. * *---------------------------------------------------------------------- */ void Ns_ThreadExit(void *arg) { _endthreadex((unsigned) arg); } /* *---------------------------------------------------------------------- * * Ns_ThreadJoin -- * * Wait for exit of a non-detached thread. * * Results: * None. * * Side effects: * Requested thread is destroyed after join. * *---------------------------------------------------------------------- */ void Ns_ThreadJoin(Ns_Thread *thread, void **argPtr) { HANDLE hdl = (HANDLE) *thread; LONG exitcode; if (WaitForSingleObject(hdl, INFINITE) != WAIT_OBJECT_0) { NsThreadFatal("Ns_ThreadJoin", "WaitForSingleObject", GetLastError()); } if (!GetExitCodeThread(hdl, &exitcode)) { NsThreadFatal("Ns_ThreadJoin", "GetExitCodeThread", GetLastError()); } if (!CloseHandle(hdl)) { NsThreadFatal("Ns_ThreadJoin", "CloseHandle", GetLastError()); } if (argPtr != NULL) { *argPtr = (void *) exitcode; } } /* *---------------------------------------------------------------------- * * Ns_ThreadYield -- * * Yield the cpu to another thread. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ThreadYield(void) { Sleep(0); } /* *---------------------------------------------------------------------- * * Ns_ThreadId -- * * Return the numeric thread id. * * Results: * Integer thread id. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_ThreadId(void) { return (int) GetCurrentThreadId(); } /* *---------------------------------------------------------------------- * * Ns_ThreadSelf -- * * Return thread handle suitable for Ns_ThreadJoin. * * Results: * None. * * Side effects: * Value at threadPtr is updated with thread's handle. * *---------------------------------------------------------------------- */ void Ns_ThreadSelf(Ns_Thread *threadPtr) { WinThread *wPtr = GETWINTHREAD(); *threadPtr = (Ns_Thread) wPtr->self; } /* *---------------------------------------------------------------------- * * ThreadMain -- * * Win32 thread startup which simply calls NsThreadMain. * * Results: * Does not return. * * Side effects: * NsThreadMain will call Ns_ThreadExit. * *---------------------------------------------------------------------- */ static unsigned __stdcall ThreadMain(void *arg) { WinThread *wPtr = GETWINTHREAD(); ThreadArg *argPtr = arg; wPtr->self = argPtr->self; arg = argPtr->arg; ns_free(argPtr); NsThreadMain(arg); /* NOT REACHED */ return 0; } /* *---------------------------------------------------------------------- * * Queue -- * * Add a thread on a mutex or condition wait queue. * * Results: * None. * * Side effects: * Thread wakeup event is reset in case it's holding * a lingering wakeup. * *---------------------------------------------------------------------- */ static void Queue(WinThread **waitPtrPtr, WinThread *wPtr) { while (*waitPtrPtr != NULL) { waitPtrPtr = &(*waitPtrPtr)->nextPtr; } *waitPtrPtr = wPtr; wPtr->nextPtr = wPtr->wakeupPtr = NULL; if (!ResetEvent(wPtr->event)) { NsThreadFatal("Queue", "ResetEvent", GetLastError()); } } /* *---------------------------------------------------------------------- * * Wakeup -- * * Wakeup a thread waiting on a mutex or condition queue. * * Results: * None. * * Side effects: * Thread wakeup event is set. * *---------------------------------------------------------------------- */ static void Wakeup(WinThread *wPtr, char *func) { if (!SetEvent(wPtr->event)) { NsThreadFatal(func, "SetEvent", GetLastError()); } } /* *---------------------------------------------------------------------- * * GetCond -- * * Return the Cond struct for given Ns_Cond, initializing * if necessary. * * Results: * Pointer to Cond. * * Side effects: * Ns_Cond may be updated. * *---------------------------------------------------------------------- */ static Cond * GetCond(Ns_Cond *cond) { if (*cond == NULL) { Ns_MasterLock(); if (*cond == NULL) { Ns_CondInit(cond); } Ns_MasterUnlock(); } return (Cond *) *cond; } /* *---------------------------------------------------------------------- * * opendir -- * * Start a directory search. * * Results: * Pointer to DIR. * * Side effects: * None. * *---------------------------------------------------------------------- */ DIR * opendir(char *pathname) { Search *sPtr; char pattern[PATH_MAX]; if (strlen(pathname) > PATH_MAX - 3) { errno = EINVAL; return NULL; } sprintf(pattern, "%s/*", pathname); sPtr = ns_malloc(sizeof(Search)); sPtr->handle = _findfirst(pattern, &sPtr->fdata); if (sPtr->handle == -1) { ns_free(sPtr); return NULL; } sPtr->ent.d_name = NULL; return (DIR *) sPtr; } /* *---------------------------------------------------------------------- * * closedir -- * * Closes and active directory search. * * Results: * 0. * * Side effects: * None. * *---------------------------------------------------------------------- */ int closedir(DIR *dp) { Search *sPtr = (Search *) dp; _findclose(sPtr->handle); ns_free(sPtr); return 0; } /* *---------------------------------------------------------------------- * * readdir -- * * Returns the next file in an active directory search. * * Results: * Pointer to thread-local struct dirent. * * Side effects: * None. * *---------------------------------------------------------------------- */ struct dirent * readdir(DIR * dp) { Search *sPtr = (Search *) dp; if (sPtr->ent.d_name != NULL && _findnext(sPtr->handle, &sPtr->fdata) != 0) { return NULL; } sPtr->ent.d_name = sPtr->fdata.name; return &sPtr->ent; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/error.c�������������������������������������������������������������������0000644�0001750�0001750�00000004300�10302714024�016522� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * error.c -- * * Routines for dealing with fatal errors. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/error.c,v 1.3 2005/08/23 21:41:40 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* *---------------------------------------------------------------------- * * NsThreadFatal -- * * Call NsThreadAbort when an operating system function fails. * * Results: * None. * * Side effects: * Process is aborted through NsThreadAbort. * *---------------------------------------------------------------------- */ void NsThreadFatal(char *func, char *osfunc, int err) { #ifdef _WIN32 Tcl_Panic("nsthreads: %s failed in %s: win32 err: %d", osfunc, func, err); #else Tcl_Panic("nsthreads: %s failed in %s: %s", osfunc, func, strerror(err)); #endif abort(); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/compat.c������������������������������������������������������������������0000644�0001750�0001750�00000021471�07501224176�016677� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * compat.c -- * * Unsupported routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/compat.c,v 1.1 2002/06/10 22:30:22 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #ifdef NS_NOCOMPAT #undef NS_NOCOMPAT #endif #include "thread.h" /* *---------------------------------------------------------------------- * * AOLserver 2.x routines -- * * AOLserver 2.x nsthread compatibility routines. Basically, the new * routines abort the server instead of returning an error result code. * In addition, the relative time based Ns_Event functions have been * replaced with proper, absolute time based Ns_Cond objects. * * Results: * See new routines * * Side effects: * See new routines. * *---------------------------------------------------------------------- */ int Ns_InitializeMutex(Ns_Mutex *mutexPtr) { Ns_MutexInit(mutexPtr); return NS_OK; } int Ns_DestroyMutex(Ns_Mutex *mutexPtr) { Ns_MutexDestroy(mutexPtr); return NS_OK; } int Ns_LockMutex(Ns_Mutex *mutexPtr) { Ns_MutexLock(mutexPtr); return NS_OK; } int Ns_UnlockMutex(Ns_Mutex *mutexPtr) { Ns_MutexUnlock(mutexPtr); return NS_OK; } int Ns_InitializeCriticalSection(Ns_CriticalSection *cs) { Ns_CsInit((Ns_Cs *) cs); return NS_OK; } int Ns_DestroyCriticalSection(Ns_CriticalSection *cs) { Ns_CsDestroy((Ns_Cs *) cs); return NS_OK; } int Ns_EnterCriticalSection(Ns_CriticalSection *cs) { Ns_CsEnter((Ns_Cs *) cs); return NS_OK; } int Ns_LeaveCriticalSection(Ns_CriticalSection *cs) { Ns_CsLeave((Ns_Cs *) cs); return NS_OK; } int Ns_InitializeEvent(Ns_Event *event) { Ns_CondInit((Ns_Cond *) event); return NS_OK; } int Ns_DestroyEvent(Ns_Event *event) { Ns_CondDestroy((Ns_Cond *) event); return NS_OK; } int Ns_SetEvent(Ns_Event *event) { Ns_CondSignal((Ns_Cond *) event); return NS_OK; } int Ns_BroadcastEvent(Ns_Event *event) { Ns_CondBroadcast((Ns_Cond *) event); return NS_OK; } int Ns_WaitForEvent(Ns_Event *event, Ns_Mutex *lock) { return Ns_CondTimedWait((Ns_Cond *) event, lock, NULL); } int Ns_TimedWaitForEvent(Ns_Event *event, Ns_Mutex *lock, int timeout) { return Ns_UTimedWaitForEvent(event, lock, timeout, 0); } int Ns_AbsTimedWaitForEvent(Ns_Event *event, Ns_Mutex *lock, time_t abstime) { Ns_Time wait; wait.sec = abstime; wait.usec = 0; return Ns_CondTimedWait((Ns_Cond *) event, lock, &wait); } int Ns_UTimedWaitForEvent(Ns_Event *event, Ns_Mutex *lock, int seconds, int microseconds) { Ns_Time to, *timePtr; if (seconds <= 0 && microseconds <= 0) { timePtr = NULL; } else { Ns_GetTime(&to); Ns_IncrTime(&to, seconds, microseconds); timePtr = &to; } return Ns_CondTimedWait((Ns_Cond *) event, lock, timePtr); } int Ns_InitializeRWLock(Ns_RWLock *lock) { Ns_RWLockInit(lock); return NS_OK; } int Ns_DestroyRWLock(Ns_RWLock *lock) { Ns_RWLockDestroy(lock); return NS_OK; } int Ns_ReadLockRWLock(Ns_RWLock *lock) { Ns_RWLockRdLock(lock); return NS_OK; } int Ns_ReadUnlockRWLock(Ns_RWLock *lock) { Ns_RWLockUnlock(lock); return NS_OK; } int Ns_WriteLockRWLock(Ns_RWLock *lock) { Ns_RWLockWrLock(lock); return NS_OK; } int Ns_WriteUnlockRWLock(Ns_RWLock *lock) { Ns_RWLockUnlock(lock); return NS_OK; } int Ns_InitializeSemaphore(Ns_Semaphore *sema, int initCount) { Ns_SemaInit((Ns_Sema *) sema, initCount); return NS_OK; } int Ns_DestroySemaphore(Ns_Semaphore *sema) { Ns_SemaDestroy((Ns_Sema *) sema); return NS_OK; } int Ns_WaitForSemaphore(Ns_Semaphore *sema) { Ns_SemaWait((Ns_Sema *) sema); return NS_OK; } int Ns_ReleaseSemaphore(Ns_Semaphore *sema, int count) { Ns_SemaPost((Ns_Sema *) sema, count); return NS_OK; } int Ns_AllocThreadLocalStorage(Ns_ThreadLocalStorage *tls, Ns_TlsCleanup *cleanup) { Ns_TlsAlloc((Ns_Tls *) tls, cleanup); return NS_OK; } int Ns_SetThreadLocalStorage(Ns_ThreadLocalStorage *tls, void *p) { Ns_TlsSet((Ns_Tls *) tls, p); return NS_OK; } int Ns_GetThreadLocalStorage(Ns_ThreadLocalStorage *tls, void **p) { *p = Ns_TlsGet((Ns_Tls *) tls); return NS_OK; } int Ns_WaitForThread(Ns_Thread *thrPtr) { Ns_ThreadJoin(thrPtr, NULL); return NS_OK; } int Ns_WaitThread(Ns_Thread *thrPtr, int *exitCodePtr) { void *arg; Ns_ThreadJoin(thrPtr, &arg); if (exitCodePtr != NULL) { *exitCodePtr = (int) arg; } return NS_OK; } void Ns_ExitThread(int exitCode) { Ns_ThreadExit((void *) exitCode); } int Ns_BeginDetachedThread(Ns_ThreadProc *proc, void *arg) { Ns_ThreadCreate(proc, arg, 0, NULL); return NS_OK; } int Ns_BeginThread(Ns_ThreadProc *proc, void *arg, Ns_Thread *thrPtr) { Ns_Thread thr; Ns_ThreadCreate(proc, arg, 0, thrPtr ? thrPtr : &thr); return NS_OK; } int Ns_GetThreadId(void) { return Ns_ThreadId(); } void Ns_GetThread(Ns_Thread *threadPtr) { Ns_ThreadSelf(threadPtr); } /* *---------------------------------------------------------------------- * * Ns_Thread and Ns_Pool allocation routines -- * * This code, poorly documented in the past, now simply calls * the ns_malloc routines because improvements in the underlying * Tcl_Alloc code make them unnecessary. * * Results: * See ns_malloc routines * * Side effects: * None. * *---------------------------------------------------------------------- */ Ns_Pool * Ns_ThreadPool(void) { return (Ns_Pool *) -1; } void * Ns_ThreadMalloc(size_t size) { return ns_malloc(size); } void * Ns_ThreadRealloc(void *ptr, size_t size) { return ns_realloc(ptr, size); } void Ns_ThreadFree(void *ptr) { ns_free(ptr); } void * Ns_ThreadCalloc(size_t nelem, size_t elsize) { return ns_calloc(nelem, elsize); } char * Ns_ThreadStrDup(char *old) { return ns_strdup(old); } char * Ns_ThreadStrCopy(char *old) { return ns_strcopy(old); } Ns_Pool * Ns_PoolCreate(char *name) { return (Ns_Pool *) -1; } void Ns_PoolFlush(Ns_Pool *pool) { return; } void Ns_PoolDestroy(Ns_Pool *pool) { return; } void * Ns_PoolAlloc(Ns_Pool *pool, size_t reqsize) { return ns_malloc(reqsize); } void Ns_PoolFree(Ns_Pool *pool, void *ptr) { ns_free(ptr); } void * Ns_PoolRealloc(Ns_Pool *pool, void *ptr, size_t reqsize) { return ns_realloc(ptr, reqsize); } void * Ns_PoolCalloc(Ns_Pool *pool, size_t nelem, size_t elsize) { return ns_calloc(nelem, elsize); } char * Ns_PoolStrDup(Ns_Pool *pool, char *old) { return ns_strdup(old); } char * Ns_PoolStrCopy(Ns_Pool *pool, char *old) { return ns_strcopy(old); } int Ns_PoolBlockSize(void *ptr, int *reqPtr, int *usePtr) { return NS_ERROR; } /* * Backward compatible wrappers. */ #ifdef Ns_Malloc #undef Ns_Malloc #endif void * Ns_Malloc(size_t size) { return ns_malloc(size); } #ifdef Ns_Realloc #undef Ns_Realloc #endif void * Ns_Realloc(void *ptr, size_t size) { return ns_realloc(ptr, size); } #ifdef Ns_Calloc #undef Ns_Calloc #endif void * Ns_Calloc(size_t nelem, size_t elsize) { return ns_calloc(nelem, elsize); } #ifdef Ns_Free #undef Ns_Free #endif void Ns_Free(void *ptr) { ns_free(ptr); } #ifdef Ns_StrDup #undef Ns_StrDup #endif char * Ns_StrDup(char *str) { return ns_strdup(str); } #ifdef Ns_StrCopy #undef Ns_StrCopy #endif char * Ns_StrCopy(char *str) { return ns_strcopy(str); } #ifdef Ns_ThreadAlloc #undef Ns_ThreadAlloc #endif void * Ns_ThreadAlloc(size_t size) { return Ns_ThreadMalloc(size); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/reentrant.c���������������������������������������������������������������0000644�0001750�0001750�00000007735�10417741657�017435� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * reentrant.c -- * * Reentrant versions of common system utilities using per-thread * data buffers. See the corresponding manual page for details. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/reentrant.c,v 1.3 2006/04/14 15:45:51 shmooved Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * The following structure maintains state for the * reentrant wrappers. */ typedef struct Tls { char nabuf[16]; #ifndef _WIN32 char *stbuf; struct tm gtbuf; struct tm ltbuf; char ctbuf[27]; char asbuf[27]; struct { struct dirent ent; char name[PATH_MAX+1]; } rdbuf; #endif } Tls; static Ns_Tls tls; static Tls *GetTls(void); void NsInitReentrant(void) { Ns_TlsAlloc(&tls, ns_free); } char * ns_inet_ntoa(struct in_addr addr) { Tls *tlsPtr = GetTls(); union { unsigned int i; unsigned char b[4]; } u; u.i = (unsigned int) addr.s_addr; sprintf(tlsPtr->nabuf, "%u.%u.%u.%u", u.b[0], u.b[1], u.b[2], u.b[3]); return tlsPtr->nabuf; } #ifdef _WIN32 /* * Routines on WIN32 are thread safe. */ struct dirent * ns_readdir(DIR * dir) { return readdir(dir); } struct tm * ns_localtime(const time_t * clock) { return localtime(clock); } struct tm * ns_gmtime(const time_t * clock) { return gmtime(clock); } char * ns_ctime(const time_t * clock) { return ctime(clock); } char * ns_asctime(const struct tm *tmPtr) { return asctime(tmPtr); } char * ns_strtok(char *s1, const char *s2) { return strtok(s1, s2); } #else /* * Copy to per-thread buffers from reentrant routines. */ struct dirent * ns_readdir(DIR * dir) { struct dirent *ent; Tls *tlsPtr = GetTls(); ent = &tlsPtr->rdbuf.ent; if (readdir_r(dir, ent, &ent) != 0) { ent = NULL; } return ent; } struct tm * ns_localtime(const time_t * clock) { Tls *tlsPtr = GetTls(); return localtime_r(clock, &tlsPtr->ltbuf); } struct tm * ns_gmtime(const time_t * clock) { Tls *tlsPtr = GetTls(); return gmtime_r(clock, &tlsPtr->gtbuf); } char * ns_ctime(const time_t * clock) { Tls *tlsPtr = GetTls(); return ctime_r(clock, tlsPtr->ctbuf); } char * ns_asctime(const struct tm *tmPtr) { Tls *tlsPtr = GetTls(); return asctime_r(tmPtr, tlsPtr->asbuf); } char * ns_strtok(char *s1, const char *s2) { Tls *tlsPtr = GetTls(); return strtok_r(s1, s2, &tlsPtr->stbuf); } #endif static Tls * GetTls(void) { Tls *tlsPtr; tlsPtr = Ns_TlsGet(&tls); if (tlsPtr == NULL) { tlsPtr = ns_calloc(1, sizeof(Tls)); Ns_TlsSet(&tls, tlsPtr); } return tlsPtr; } �����������������������������������aolserver4-4.5.1/nsthread/master.c������������������������������������������������������������������0000644�0001750�0001750�00000004301�07501224177�016701� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * master.c -- * * Master lock critical section. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/master.c,v 1.1 2002/06/10 22:30:23 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" static Ns_Cs master; static int initialized; /* *---------------------------------------------------------------------- * * Ns_MasterLock, Ns_MasterUnlock -- * * Enter the single master critical section lock. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsInitMaster(void) { Ns_CsInit(&master); initialized = 1; } void Ns_MasterLock(void) { if (initialized) { Ns_CsEnter(&master); } } void Ns_MasterUnlock(void) { if (initialized) { Ns_CsLeave(&master); } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/fork.c��������������������������������������������������������������������0000644�0001750�0001750�00000004113�07501224177�016350� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * fork.c -- * * Implement ns_fork. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/fork.c,v 1.1 2002/06/10 22:30:23 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* *---------------------------------------------------------------------- * * ns_fork -- * * Posix style fork(), using fork1() on Solaris if needed. * * Results: * See fork(2) man page. * * Side effects: * See fork(2) man page. * *---------------------------------------------------------------------- */ int ns_fork(void) { #ifdef HAVE_FORK1 return fork1(); #else return fork(); #endif } #ifdef Ns_Fork #undef Ns_Fork #endif int Ns_Fork(void) { return ns_fork(); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/mutex.c�������������������������������������������������������������������0000644�0001750�0001750�00000020242�07632160063�016550� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * mutex.c -- * * Mutex locks with metering. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/mutex.c,v 1.4 2003/03/07 18:08:51 vasiljevic Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * The following structure defines a mutex with * string name and lock and busy counters. */ typedef struct Mutex { void *lock; struct Mutex *nextPtr; unsigned int id; unsigned long nlock; unsigned long nbusy; char name[NS_THREAD_NAMESIZE+1]; } Mutex; #define GETMUTEX(mutex) (*(mutex)?((Mutex *)*(mutex)):GetMutex((mutex))) static Mutex *GetMutex(Ns_Mutex *mutex); static Mutex *firstMutexPtr; /* *---------------------------------------------------------------------- * Ns_MutexInit -- * * Mutex initialization, often called the first time a mutex * is locked. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_MutexInit(Ns_Mutex *mutex) { Mutex *mutexPtr; static unsigned int nextid; mutexPtr = ns_calloc(1, sizeof(Mutex)); mutexPtr->lock = NsLockAlloc(); Ns_MasterLock(); mutexPtr->nextPtr = firstMutexPtr; firstMutexPtr = mutexPtr; mutexPtr->id = nextid++; sprintf(mutexPtr->name, "mu%d", mutexPtr->id); Ns_MasterUnlock(); *mutex = (Ns_Mutex) mutexPtr; } /* *---------------------------------------------------------------------- * * Ns_MutexSetName, Ns_MutexSetName2 -- * * Update the string name of a mutex. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_MutexSetName(Ns_Mutex *mutex, char *name) { Ns_MutexSetName2(mutex, name, NULL); } void Ns_MutexSetName2(Ns_Mutex *mutex, char *prefix, char *name) { Mutex *mutexPtr = GETMUTEX(mutex); int plen, nlen; char *p; plen = strlen(prefix); if (plen > NS_THREAD_NAMESIZE) { plen = NS_THREAD_NAMESIZE; nlen = 0; } else { nlen = name ? strlen(name) : 0; if ((nlen + plen + 1) > NS_THREAD_NAMESIZE) { nlen = NS_THREAD_NAMESIZE - plen - 1; } } Ns_MasterLock(); p = strncpy(mutexPtr->name, prefix, (size_t)plen) + plen; if (nlen > 0) { *p++ = ':'; p = strncpy(p, name, (size_t)nlen) + nlen; } *p = '\0'; Ns_MasterUnlock(); } /* *---------------------------------------------------------------------- * * Ns_MutexDestroy -- * * Mutex destroy. Note this routine is not used very often * as mutexes normally exists in memory until the process exits. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_MutexDestroy(Ns_Mutex *mutex) { Mutex **mutexPtrPtr; Mutex *mutexPtr = (Mutex *) *mutex; if (mutexPtr != NULL) { NsLockFree(mutexPtr->lock); Ns_MasterLock(); mutexPtrPtr = &firstMutexPtr; while ((*mutexPtrPtr) != mutexPtr) { mutexPtrPtr = &(*mutexPtrPtr)->nextPtr; } *mutexPtrPtr = mutexPtr->nextPtr; Ns_MasterUnlock(); ns_free(mutexPtr); *mutex = NULL; } } /* *---------------------------------------------------------------------- * * Ns_MutexLock -- * * Lock a mutex, tracking the number of locks and the number of * which were not aquired immediately. * * Results: * None. * * Side effects: * Thread may be suspended if the lock is held. * *---------------------------------------------------------------------- */ void Ns_MutexLock(Ns_Mutex *mutex) { Mutex *mutexPtr = GETMUTEX(mutex); if (!NsLockTry(mutexPtr->lock)) { NsLockSet(mutexPtr->lock); ++mutexPtr->nbusy; } ++mutexPtr->nlock; } /* *---------------------------------------------------------------------- * * Ns_MutexTryLock -- * * Attempt to lock a mutex. * * Results: * NS_OK if locked, NS_TIMEOUT if lock already held. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_MutexTryLock(Ns_Mutex *mutex) { Mutex *mutexPtr = GETMUTEX(mutex); if (!NsLockTry(mutexPtr->lock)) { return NS_TIMEOUT; } ++mutexPtr->nlock; return NS_OK; } /* *---------------------------------------------------------------------- * * Ns_MutexUnlock -- * * Unlock a mutex. * * Results: * None. * * Side effects: * Other waiting thread, if any, is resumed. * *---------------------------------------------------------------------- */ void Ns_MutexUnlock(Ns_Mutex *mutex) { Mutex *mutexPtr = (Mutex *) *mutex; NsLockUnset(mutexPtr->lock); } /* *---------------------------------------------------------------------- * * Ns_MutexList -- * * Append info on each lock. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_MutexList(Tcl_DString *dsPtr) { Mutex *mutexPtr; char buf[100]; Ns_MasterLock(); mutexPtr = firstMutexPtr; while (mutexPtr != NULL) { Tcl_DStringStartSublist(dsPtr); Tcl_DStringAppendElement(dsPtr, mutexPtr->name); Tcl_DStringAppendElement(dsPtr, ""); sprintf(buf, " %d %lu %lu", mutexPtr->id, mutexPtr->nlock, mutexPtr->nbusy); Tcl_DStringAppend(dsPtr, buf, -1); Tcl_DStringEndSublist(dsPtr); mutexPtr = mutexPtr->nextPtr; } Ns_MasterUnlock(); } /* *---------------------------------------------------------------------- * * NsMutexInitNext -- * * Initialize and name the next internal mutex. * * Results: * None. * * Side effects: * Given counter is updated. * *---------------------------------------------------------------------- */ void NsMutexInitNext(Ns_Mutex *mutex, char *prefix, unsigned int *nextPtr) { unsigned int id; char buf[20]; Ns_MasterLock(); id = *nextPtr; *nextPtr = id + 1; Ns_MasterUnlock(); sprintf(buf, "ns:%s:%u", prefix, id); Ns_MutexInit(mutex); Ns_MutexSetName(mutex, buf); } /* *---------------------------------------------------------------------- * * NsGetLock -- * * Return the private lock pointer for a Ns_Mutex. * * Results: * Pointer to lock. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * NsGetLock(Ns_Mutex *mutex) { Mutex *mutexPtr = GETMUTEX(mutex); return mutexPtr->lock; } /* *---------------------------------------------------------------------- * * GetMutex -- * * Cast an Ns_Mutex to a Mutex, initializing if needed. * * Results: * Pointer to Mutex. * * Side effects: * Mutex is initialized the first time. * *---------------------------------------------------------------------- */ static Mutex * GetMutex(Ns_Mutex *mutex) { Ns_MasterLock(); if (*mutex == NULL) { Ns_MutexInit(mutex); } Ns_MasterUnlock(); return (Mutex *) *mutex; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/sema.c��������������������������������������������������������������������0000644�0001750�0001750�00000011002�07501630344�016324� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * sema.c -- * * Couting semaphore routines. Semaphores differ from ordinary mutex * locks in that they maintain a count instead of a simple locked/unlocked * state. Threads block if the semaphore count is less than one. * * Note: In general, cleaner code can be implemented with condition variables. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/sema.c,v 1.2 2002/06/12 11:30:44 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * The following structure defines a counting semaphore using a lock * and condition. */ typedef struct { Ns_Mutex lock; Ns_Cond cond; int count; } Sema; /* *---------------------------------------------------------------------- * * Ns_SemaInit -- * * Initialize a semaphore. Note that because semaphores are * initialized with a starting count they cannot be automatically * created on first use as with other synchronization objects. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_SemaInit(Ns_Sema *semaPtr, int count) { static unsigned int nextid = 0; Sema *sPtr; sPtr = ns_malloc(sizeof(Sema)); sPtr->count = count; NsMutexInitNext(&sPtr->lock, "sm", &nextid); Ns_CondInit(&sPtr->cond); *semaPtr = (Ns_Sema) sPtr; } /* *---------------------------------------------------------------------- * * Ns_SemaDestroy -- * * Destroy a semaphore. This routine is almost never used as * synchronization objects are normally created at process startup * and exist until the process exits. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_SemaDestroy(Ns_Sema *semaPtr) { if (*semaPtr != NULL) { Sema *sPtr = (Sema *) *semaPtr; Ns_MutexDestroy(&sPtr->lock); Ns_CondDestroy(&sPtr->cond); ns_free(sPtr); *semaPtr = NULL; } } /* *---------------------------------------------------------------------- * * Ns_SemaWait -- * * Wait for a semaphore count to be greater than zero. * * Results: * None. * * Side effects: * Calling thread may wait on the condition. * *---------------------------------------------------------------------- */ void Ns_SemaWait(Ns_Sema *semaPtr) { Sema *sPtr = (Sema *) *semaPtr; Ns_MutexLock(&sPtr->lock); while (sPtr->count == 0) { Ns_CondWait(&sPtr->cond, &sPtr->lock); } sPtr->count--; Ns_MutexUnlock(&sPtr->lock); } /* *---------------------------------------------------------------------- * * Ns_SemaPost -- * * Increment a semaphore count, releasing waiting threads if needed. * * Results: * None. * * Side effects: * Threads waiting on the condition, if any, may be resumed. * *---------------------------------------------------------------------- */ void Ns_SemaPost(Ns_Sema *semaPtr, int count) { Sema *sPtr = (Sema *) *semaPtr; Ns_MutexLock(&sPtr->lock); sPtr->count += count; if (count == 1) { Ns_CondSignal(&sPtr->cond); } else { Ns_CondBroadcast(&sPtr->cond); } Ns_MutexUnlock(&sPtr->lock); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/time.c��������������������������������������������������������������������0000644�0001750�0001750�00000010760�07612330556�016354� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * time.c -- * * Ns_Time support routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/time.c,v 1.3 2003/01/18 19:56:30 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* *---------------------------------------------------------------------- * * Ns_GetTime -- * * Get the current time value. * * Results: * None. * * Side effects: * Ns_Time structure pointed to by timePtr is updated with currnet * time. * *---------------------------------------------------------------------- */ void Ns_GetTime(Ns_Time *timePtr) { #ifdef _WIN32 /* * Number of 100 nanosecond units from 1/1/1601 to 1/1/1970 */ #define EPOCH_BIAS 116444736000000000i64 union { unsigned __int64 i; FILETIME s; } ft; GetSystemTimeAsFileTime(&ft.s); timePtr->sec = (time_t)((ft.i - EPOCH_BIAS) / 10000000i64); timePtr->usec =(long)((ft.i / 10i64) % 1000000i64); #else struct timeval tv; gettimeofday(&tv, NULL); timePtr->sec = tv.tv_sec; timePtr->usec = tv.tv_usec; #endif } /* *---------------------------------------------------------------------- * * Ns_AdjTime -- * * Adjust an Ns_Time so the values are in range. * * Results: * None. * * Side effects: * Ns_Time structure pointed to by timePtr is adjusted as needed. * *---------------------------------------------------------------------- */ void Ns_AdjTime(Ns_Time *timePtr) { if (timePtr->usec < 0) { timePtr->sec += (timePtr->usec / 1000000L) - 1; timePtr->usec = (timePtr->usec % 1000000L) + 1000000L; } else if (timePtr->usec > 1000000L) { timePtr->sec += timePtr->usec / 1000000L; timePtr->usec = timePtr->usec % 1000000L; } } /* *---------------------------------------------------------------------- * * Ns_DiffTime -- * * Determine the difference between two Ns_Time structures. * * Results: * -1, 0, or 1 if t1 is before, same, or after t0. * * Side effects: * Ns_Time structure pointed to by timePtr is set with difference * between the two given times. * *---------------------------------------------------------------------- */ int Ns_DiffTime(Ns_Time *t1, Ns_Time *t0, Ns_Time *diffPtr) { Ns_Time diff; if (diffPtr == NULL) { diffPtr = &diff; } if (t1->usec >= t0->usec) { diffPtr->sec = t1->sec - t0->sec; diffPtr->usec = t1->usec - t0->usec; } else { diffPtr->sec = t1->sec - t0->sec - 1; diffPtr->usec = 1000000L + t1->usec - t0->usec; } Ns_AdjTime(diffPtr); if (diffPtr->sec < 0) { return -1; } else if (diffPtr->sec == 0 && diffPtr->usec == 0) { return 0; } else { return 1; } } /* *---------------------------------------------------------------------- * * Ns_IncrTime -- * * Increment the given Ns_Time structure with the given number of * seconds and microseconds. * * Results: * None. * * Side effects: * Ns_Time structure pointed to by timePtr is incremented as needed. * *---------------------------------------------------------------------- */ void Ns_IncrTime(Ns_Time *timePtr, time_t sec, long usec) { timePtr->usec += usec; timePtr->sec += sec; Ns_AdjTime(timePtr); } ����������������aolserver4-4.5.1/nsthread/rwlock.c������������������������������������������������������������������0000644�0001750�0001750�00000016024�07501630344�016711� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * rwlock.c -- * * Routines for read/write locks. Read/write locks differ from a mutex * in that multiple threads can aquire the read lock until a single * thread aquires a write lock. This code is adapted from that in * Steven's Unix Network Programming, Volume 3. * * Note: Read/write locks are not often a good idea. The reason * is, like critical sections, the number of actual lock operations * is doubled which makes them more expensive to use. Cases where the * overhead are justified are then often subject to read locks being * held longer than writer threads can wait and/or writer threads holding * the lock so long that many reader threads back up. In these cases, * specific reference counting techniques (e.g., the management of * the Req structures in op.c) normally work better. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/rwlock.c,v 1.2 2002/06/12 11:30:44 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * The following structure defines a read/write lock including a mutex * to protect access to the structure and condition variables for waiting * reader and writer threads. */ typedef struct RwLock { Ns_Mutex mutex; /* Mutex guarding lock structure. */ Ns_Cond rcond; /* Condition variable for waiting readers. */ Ns_Cond wcond; /* condition variable for waiting writers. */ int nreaders; /* Number of readers waiting for lock. */ int nwriters; /* Number of writers waiting for lock. */ int lockcnt; /* Lock count, > 0 indicates # of shared * readers, -1 indicates exclusive writer. */ } RwLock; static RwLock *GetRwLock(Ns_RWLock *rwPtr); /* *---------------------------------------------------------------------- * * Ns_RWLockInit -- * * Initialize a read/write lock. * * Results: * None. * * Side effects: * Lock memory is allocated from the heap and initialized. * *---------------------------------------------------------------------- */ void Ns_RWLockInit(Ns_RWLock *rwPtr) { RwLock *lockPtr; static unsigned int nextid = 0; lockPtr = ns_calloc(1, sizeof(RwLock)); NsMutexInitNext(&lockPtr->mutex, "rw", &nextid); Ns_CondInit(&lockPtr->rcond); Ns_CondInit(&lockPtr->wcond); lockPtr->nreaders = 0; lockPtr->nwriters = 0; lockPtr->lockcnt = 0; *rwPtr = (Ns_RWLock) lockPtr; } /* *---------------------------------------------------------------------- * * Ns_RWLockDestroy -- * * Destory a read/write lock if it was previously initialized. * * Results: * None. * * Side effects: * Read/write lock objects are destroy and the lock memory is * returned to the heap. * *---------------------------------------------------------------------- */ void Ns_RWLockDestroy(Ns_RWLock *rwPtr) { RwLock *lockPtr = (RwLock *) *rwPtr; if (lockPtr != NULL) { Ns_MutexDestroy(&lockPtr->mutex); Ns_CondDestroy(&lockPtr->rcond); Ns_CondDestroy(&lockPtr->wcond); ns_free(lockPtr); *rwPtr = NULL; } } /* *---------------------------------------------------------------------- * * Ns_RWLockRdLock -- * * Aquire a read lock. * * Results: * None. * * Side effects: * Thread may wait on a condition variable if the read/write lock * currently has a write lock. * *---------------------------------------------------------------------- */ void Ns_RWLockRdLock(Ns_RWLock *rwPtr) { RwLock *lockPtr = GetRwLock(rwPtr); Ns_MutexLock(&lockPtr->mutex); /* * Wait on the read condition while the lock is write-locked or * some other thread is waiting for a write lock. */ while (lockPtr->lockcnt < 0 || lockPtr->nwriters > 0) { lockPtr->nreaders++; Ns_CondWait(&lockPtr->rcond, &lockPtr->mutex); lockPtr->nreaders--; } lockPtr->lockcnt++; Ns_MutexUnlock(&lockPtr->mutex); } /* *---------------------------------------------------------------------- * * Ns_RWLockWrLock -- * * Aquire a write lock. * * Results: * None. * * Side effects: * Thread may wait on the write condition if other threads either * have the lock read or write locked. * *---------------------------------------------------------------------- */ void Ns_RWLockWrLock(Ns_RWLock *rwPtr) { RwLock *lockPtr = GetRwLock(rwPtr); Ns_MutexLock(&lockPtr->mutex); while (lockPtr->lockcnt != 0) { lockPtr->nwriters++; Ns_CondWait(&lockPtr->wcond, &lockPtr->mutex); lockPtr->nwriters--; } lockPtr->lockcnt = -1; Ns_MutexUnlock(&lockPtr->mutex); } /* *---------------------------------------------------------------------- * * Ns_RWLockUnlock -- * * Unlock a read/write lock. * * Results: * None. * * Side effects: * Read or write condition may be signaled. * *---------------------------------------------------------------------- */ void Ns_RWLockUnlock(Ns_RWLock *rwPtr) { RwLock *lockPtr = (RwLock *) *rwPtr; Ns_MutexLock(&lockPtr->mutex); if (--lockPtr->lockcnt < 0) { lockPtr->lockcnt = 0; } if (lockPtr->nwriters) { Ns_CondSignal(&lockPtr->wcond); } else if (lockPtr->nreaders) { Ns_CondBroadcast(&lockPtr->rcond); } Ns_MutexUnlock (&lockPtr->mutex); } /* *---------------------------------------------------------------------- * * GetRwLock -- * * Return the read/write lock structure, initializing it if needed. * * Results: * Pointer to lock. * * Side effects: * Lock may be initialized. * *---------------------------------------------------------------------- */ static RwLock * GetRwLock(Ns_RWLock *rwPtr) { if (*rwPtr == NULL) { Ns_MasterLock(); if (*rwPtr == NULL) { Ns_RWLockInit(rwPtr); } Ns_MasterUnlock(); } return (RwLock *) *rwPtr; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/thread.c������������������������������������������������������������������0000644�0001750�0001750�00000027375�10275641153�016674� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * thread.c -- * * Routines for creating, exiting, and joining threads. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/thread.c,v 1.11 2005/08/08 11:30:51 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* * Private flags for managing threads. */ #define FLAG_DETACHED 1 #define FLAG_HAVESTACK 2 #define FLAG_STACKDOWN 4 /* * The following structure is used as the startup arg for new threads. */ typedef struct ThreadArg { Ns_ThreadProc *proc; /* Thread startup routine. */ void *arg; /* Argument to startup proc. */ int flags; /* Thread is detached. */ char parent[NS_THREAD_NAMESIZE]; } ThreadArg; /* * The following structure maintains all state for a thread * including thread local storage slots. */ typedef struct Thread { struct Thread *nextPtr; /* Next in list of all threads. */ Ns_Time ctime; /* Thread structure create time. */ int flags; /* Detached, joined, etc. */ Ns_ThreadProc *proc; /* Thread startup routine. */ void *arg; /* Argument to startup proc. */ int tid; /* Id set by thread for logging. */ void *stackaddr; /* Thread stack address. */ size_t stacksize; /* Thread stack size. */ char name[NS_THREAD_NAMESIZE+1]; /* Thread name. */ char parent[NS_THREAD_NAMESIZE+1]; /* Parent name. */ } Thread; /* * Static functions defined in this file. */ static Thread *NewThread(ThreadArg *argPtr); static Thread *GetThread(void); static void CleanupThread(void *arg); /* * The following pointer and lock maintain a linked list of all threads. */ static Thread *firstThreadPtr; static Ns_Mutex threadlock; /* * The following int and lock maintain the default stack size which can * be changed dynamically at runtime. */ static int stackdef; static int stackmin; static Ns_Mutex sizelock; /* * The following maintains the tls key for the thread context. */ static Ns_Tls key; /* *---------------------------------------------------------------------- * * NsThreads_LibInit -- * * Initialize threads interface. * * Results: * None. * * Side effects: * Allocates pthread_key_t for thread context. * *---------------------------------------------------------------------- */ void NsThreads_LibInit(void) { static int once = 0; if (!once) { once = 1; NsInitThreads(); NsInitMaster(); NsInitReentrant(); Ns_MutexSetName(&threadlock, "ns:threads"); Ns_MutexSetName(&sizelock, "ns:stacksize"); Ns_TlsAlloc(&key, CleanupThread); stackdef = 64 * 1024; stackmin = 16 * 1024; } } /* *---------------------------------------------------------------------- * * Ns_ThreadCreate -- * * Create a new thread thread. * * Results: * None. * * Side effects: * A new thread is allocated and started. * *---------------------------------------------------------------------- */ void Ns_ThreadCreate(Ns_ThreadProc *proc, void *arg, long stacksize, Ns_Thread *resultPtr) { ThreadArg *argPtr; /* * Determine the stack size and add the guard. */ if (stacksize <= 0) { stacksize = Ns_ThreadStackSize(0); } if (stacksize < stackmin) { stacksize = stackmin; } /* * Create the thread. */ argPtr = ns_malloc(sizeof(ThreadArg)); argPtr->proc = proc; argPtr->arg = arg; argPtr->flags = resultPtr ? 0 : FLAG_DETACHED; strcpy(argPtr->parent, Ns_ThreadGetName()); NsCreateThread(argPtr, stacksize, resultPtr); } /* *---------------------------------------------------------------------- * * Ns_ThreadStackSize -- * * Set default stack size. * * Results: * Previous stack size. * * Side effects: * New threads will use default size. * *---------------------------------------------------------------------- */ long Ns_ThreadStackSize(long stacksize) { long prev; Ns_MutexLock(&sizelock); prev = stackdef; if (stacksize > 0) { stackdef = stacksize; } Ns_MutexUnlock(&sizelock); return prev; } /* *---------------------------------------------------------------------- * * ThreadMain -- * * Thread startup routine. Sets the given pre-allocated thread * structure and calls the user specified procedure. * * Results: * None. Will call Ns_ThreadExit if not called by the * user code. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsThreadMain(void *arg) { ThreadArg *argPtr = arg; Thread *thrPtr; thrPtr = NewThread(argPtr); ns_free(argPtr); (*thrPtr->proc) (thrPtr->arg); } /* *---------------------------------------------------------------------- * * Ns_ThreadGetName -- * * Return a pointer to calling thread's string name. * * Results: * Pointer to thread name string. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_ThreadGetName(void) { Thread *thrPtr = GetThread(); return thrPtr->name; } /* *---------------------------------------------------------------------- * * Ns_ThreadSetName -- * * Set the name of the calling thread. * * Results: * None. * * Side effects: * String is copied to thread data structure. * *---------------------------------------------------------------------- */ void Ns_ThreadSetName(char *name) { Thread *thrPtr = GetThread(); Ns_MutexLock(&threadlock); strncpy(thrPtr->name, name, NS_THREAD_NAMESIZE); Ns_MutexUnlock(&threadlock); } /* *---------------------------------------------------------------------- * * Ns_ThreadGetParent -- * * Return a pointer to calling thread's parent name. * * Results: * Pointer to thread parent name string. * * Side effects: * None. * *---------------------------------------------------------------------- */ char * Ns_ThreadGetParent(void) { Thread *thrPtr = GetThread(); return thrPtr->parent; } /* *---------------------------------------------------------------------- * * Ns_ThreadList -- * * Append info for each thread. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Ns_ThreadList(Tcl_DString *dsPtr, Ns_ThreadArgProc *proc) { Thread *thrPtr; char buf[100]; Ns_MutexLock(&threadlock); thrPtr = firstThreadPtr; while (thrPtr != NULL) { Tcl_DStringStartSublist(dsPtr); Tcl_DStringAppendElement(dsPtr, thrPtr->name); Tcl_DStringAppendElement(dsPtr, thrPtr->parent); sprintf(buf, " %d %d %ld", thrPtr->tid, (thrPtr->flags & FLAG_DETACHED) ? NS_THREAD_DETACHED : 0, thrPtr->ctime.sec); Tcl_DStringAppend(dsPtr, buf, -1); if (proc != NULL) { (*proc)(dsPtr, (void *) thrPtr->proc, thrPtr->arg); } else { sprintf(buf, " %p %p", thrPtr->proc, thrPtr->arg); Tcl_DStringAppend(dsPtr, buf, -1); } Tcl_DStringEndSublist(dsPtr); thrPtr = thrPtr->nextPtr; } Ns_MutexUnlock(&threadlock); } /* *---------------------------------------------------------------------- * * NewThread -- * * Allocate a new thread data structure and add it to the list * of all threads. The new thread is suitable for a detached, * unknown thread such as the initial thread but Ns_ThreadCreate * will update as necessary before creating the new threads. * * Results: * Pointer to new Thread. * * Side effects: * None. * *---------------------------------------------------------------------- */ static Thread * NewThread(ThreadArg *argPtr) { Thread *thrPtr; int stack; thrPtr = ns_calloc(1, sizeof(Thread)); Ns_GetTime(&thrPtr->ctime); thrPtr->tid = Ns_ThreadId(); sprintf(thrPtr->name, "-thread%d-", thrPtr->tid); if (argPtr == NULL) { thrPtr->flags = FLAG_DETACHED; } else { thrPtr->flags = argPtr->flags; thrPtr->proc = argPtr->proc; thrPtr->arg = argPtr->arg; strcpy(thrPtr->parent, argPtr->parent); } stack = NsGetStack(&thrPtr->stackaddr, &thrPtr->stacksize); if (stack) { thrPtr->flags |= FLAG_HAVESTACK; if (stack < 0) { thrPtr->flags |= FLAG_STACKDOWN; } } Ns_TlsSet(&key, thrPtr); Ns_MutexLock(&threadlock); thrPtr->nextPtr = firstThreadPtr; firstThreadPtr = thrPtr; Ns_MutexUnlock(&threadlock); return thrPtr; } /* *---------------------------------------------------------------------- * * GetThread -- * * Return this thread's nsthread data structure, initializing * it if necessary, normally for the first thread but also * for threads created without Ns_ThreadCreate. * * Results: * Pointer to per-thread data structure. * * Side effects: * Key is allocated the first time. * *---------------------------------------------------------------------- */ static Thread * GetThread(void) { Thread *thrPtr; thrPtr = Ns_TlsGet(&key); if (thrPtr == NULL) { thrPtr = NewThread(NULL); } return thrPtr; } /* *---------------------------------------------------------------------- * * CleanupThread -- * * TLS cleanup for the nsthread context. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ static void CleanupThread(void *arg) { Thread **thrPtrPtr; Thread *thrPtr = arg; Ns_MutexLock(&threadlock); thrPtrPtr = &firstThreadPtr; while (*thrPtrPtr != thrPtr) { thrPtrPtr = &(*thrPtrPtr)->nextPtr; } *thrPtrPtr = thrPtr->nextPtr; thrPtr->nextPtr = NULL; Ns_MutexUnlock(&threadlock); ns_free(thrPtr); } /* *---------------------------------------------------------------------- * * Ns_CheckStack -- * * Check a thread stack for overflow. * * Results: * NS_OK: Stack appears ok. * NS_BREAK: Overflow appears likely. * NS_ERROR: Stack address/size unknown. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Ns_CheckStack(void) { Thread *thrPtr = GetThread(); caddr_t limit; /* * Return error on no stack. */ if (!(thrPtr->flags & FLAG_HAVESTACK)) { return NS_ERROR; } /* * Check if the stack has grown into or beyond the guard. */ if (thrPtr->flags & FLAG_STACKDOWN) { limit = (caddr_t) thrPtr->stackaddr - thrPtr->stacksize; if ((caddr_t) &limit < limit) { return NS_BREAK; } } else { limit = (caddr_t) thrPtr->stackaddr + thrPtr->stacksize; if ((caddr_t) &limit > limit) { return NS_BREAK; } } return NS_OK; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/nsthread/thread.h������������������������������������������������������������������0000644�0001750�0001750�00000004664�10302714013�016660� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * thread.h -- * * Private nsthread library include. * * $Header: /cvsroot/aolserver/aolserver/nsthread/thread.h,v 1.8 2005/08/23 21:41:31 jgdavidson Exp $ */ #ifndef THREAD_H #define THREAD_H #define NSTHREAD_EXPORTS #include "nsthread.h" #ifdef WIN32 typedef char *caddr_t; #endif extern int NsGetStack(void **addrPtr, size_t *sizePtr); extern void NsthreadsInit(void); extern void NsInitThreads(void); extern void NsInitMaster(void); extern void NsInitReentrant(void); extern void NsMutexInitNext(Ns_Mutex *mutex, char *prefix, unsigned int *nextPtr); extern void *NsGetLock(Ns_Mutex *mutex); extern void *NsLockAlloc(void); extern void NsLockFree(void *lock); extern void NsLockSet(void *lock); extern int NsLockTry(void *lock); extern void NsLockUnset(void *lock); extern void NsCleanupTls(void **slots); extern void **NsGetTls(void); extern void NsThreadMain(void *arg); extern void NsCreateThread(void *arg, long stacksize, Ns_Thread *threadPtr); extern void NsThreadFatal(char *func, char *osfunc, int err) _nsnoreturn; #endif /* THREAD_H */ ����������������������������������������������������������������������������aolserver4-4.5.1/nsthread/memory.c������������������������������������������������������������������0000644�0001750�0001750�00000005226�07612330556�016727� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * memory.c -- * * Memory allocation routines. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsthread/memory.c,v 1.3 2003/01/18 19:56:30 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "thread.h" /* *---------------------------------------------------------------------- * * ns_realloc, ns_malloc, ns_calloc, ns_free, ns_strdup, ns_strcopy -- * * Memory allocation wrappers which either call the platform * versions or the fast pool allocator for a per-thread pool. * * Results: * As with system functions. * * Side effects: * None. * *---------------------------------------------------------------------- */ void * ns_realloc(void *ptr, size_t size) { return (ptr ? Tcl_Realloc(ptr, size) : Tcl_Alloc(size)); } void * ns_malloc(size_t size) { return Tcl_Alloc(size); } void ns_free(void *ptr) { if (ptr != NULL) { Tcl_Free(ptr); } } void * ns_calloc(size_t num, size_t esize) { void *new; size_t size; size = num * esize; new = ns_malloc(size); memset(new, 0, size); return new; } char * ns_strcopy(const char *old) { return (old == NULL ? NULL : ns_strdup(old)); } char * ns_strdup(const char *old) { char *new; new = ns_malloc(strlen(old) + 1); strcpy(new, old); return new; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/��������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661375�015252� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/mynsd/��������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661375�016404� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/mynsd/Makefile������������������������������������������������������������0000644�0001750�0001750�00000004702�10275646246�020056� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/examples/mynsd/Makefile,v 1.1 2005/08/08 12:14:30 jgdavidson Exp $ # # # Example simple Makefile to build a statically linked nsd. In addition # to building all the AOLserver libraries and code, Tcl must first be # built statically as well. This makefile is only known to work on Linux. # # Once built, you should verify all symbols are in "mynsd" with nm and # that no AOLserver or Tcl dynamic libraries will be used with "ldd". # And be sure to comment out the cooresponding ns/server/{server}/modules # section as the server will still attempt to load those modules which # will generally confuse things. # AOLSERVER ?= /usr/local/aolserver LIB = $(AOLSERVER)/lib BIN = $(AOLSERVER)/bin CFLAGS = -g -I$(AOLSERVER)/include NSD=mynsd OBJ=mynsd.o RM=/bin/rm -f CP=/bin/cp LIBS=-ldl -lm -lz -lpthread $(NSD): $(OBJ) $(CC) -o $(NSD) $(OBJ) \ $(LIB)/libnssock.a $(LIB)/libnscgi.a \ $(LIB)/libnsd.a $(LIB)/libnsthread.a \ $(LIB)/libnslog.a $(LIB)/libnsperm.a \ $(LIB)/libtcl8.4g.a \ $(LIBS) install: $(NSD) $(RM) $(BIN)/$(NSD) $(CP) $(NSD) $(BIN)/ clean: $(RM) $(NSD) $(OBJ) ��������������������������������������������������������������aolserver4-4.5.1/examples/mynsd/README��������������������������������������������������������������0000644�0001750�0001750�00000001433�10275646246�017274� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� mynsd ----- Example of building a custom static linked nsd binary. This could be useful to avoid distributing dynamic libraries and/or advanced debugging. To use: 1. Build Tcl normally with shared libraries. 2. Build and instal AOLserver normally. The install directory should include static and dynamic libaries in the lib/ subdirectory. 3. Build Tcl again with --disable-shared. 4. Modify the config structure in mynsd.c and Makefile for the modules you would like to use. 5. Comment out any AOLserver modules from the ns/server/{server}/modules section of your config file (the cooresponding config sections will continue to be used). 6. Type "make AOLSERVER=/you/install/dir install" 7. Use mynsd as you would nsd. $Id: README,v 1.1 2005/08/08 12:14:30 jgdavidson Exp $ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/mynsd/mynsd.c�������������������������������������������������������������0000644�0001750�0001750�00000006500�10275646246�017712� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * mynsd.c -- * * Example AOLserver main() startup routine using static-build * initialization approach. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/examples/mynsd/mynsd.c,v 1.1 2005/08/08 12:14:30 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" static Ns_ServerInitProc ServerInit; extern Ns_ModuleInitProc NsSock_ModInit; extern Ns_ModuleInitProc NsLog_ModInit; extern Ns_ModuleInitProc NsCgi_ModInit; extern Ns_ModuleInitProc NsPerm_ModInit; /* * The following structure is a static-build equivalent of the * ns/server/{server}/modules config section for a static * build which directly links the module code. Be sure to comment * out the the config section as the server will still attempt * to load and initialize listed modules resulting in confusion * of the static and dynamic code. */ static struct { char *module; Ns_ModuleInitProc *proc; } mods[] = { {"nssock", NsSock_ModInit}, {"nslog", NsLog_ModInit}, {"nscgi", NsCgi_ModInit}, {"nsperm", NsPerm_ModInit}, {NULL, NULL} }; /* *---------------------------------------------------------------------- * * main -- * * AOLserver startup routine which simply calls Ns_Main(). * Ns_Main() will later call ServerInit() if not NULL. * * Results: * Result of Ns_Main. * * Side effects: * Server runs. * *---------------------------------------------------------------------- */ int main(int argc, char **argv) { return Ns_Main(argc, argv, ServerInit); } /* *---------------------------------------------------------------------- * * ServerInit -- * * Initialize the staticly linked modules. * * Results: * NS_OK. * * Side effects: * None. * *---------------------------------------------------------------------- */ static int ServerInit(char *server) { int i; for (i = 0; mods[i].proc != NULL; ++i) { if (((*mods[i].proc)(server, mods[i].module)) != NS_OK) { return NS_ERROR; } } return NS_OK; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/config/�������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661375�016517� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/config/README�������������������������������������������������������������0000644�0001750�0001750�00000001270�10303075245�017371� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$Header: /cvsroot/aolserver/aolserver/examples/config/README,v 1.1 2005/08/24 13:48:21 shmooved Exp $ $Name: aolserver_v45_r1 $ README -- This directory contains examples showing how AOLserver, and many of the standard modules can be configured. The base.tcl file contains all of the parameters necessary to start up an AOLserver. The other example configuration files found in this directory can be used in conjunction with the base configuration, by simply concatinating the files together. Example: % cat base.tcl nscp.tcl > nsd.tcl The resulting nsd.tcl configuration file will contain everything necessary to start up the AOLserver, along with configuration for the control port. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/config/nscp.tcl�����������������������������������������������������������0000644�0001750�0001750�00000003306�10416524456�020172� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # $Header: /cvsroot/aolserver/aolserver/examples/config/nscp.tcl,v 1.2 2006/04/10 18:51:26 shmooved Exp $ # $Name: aolserver_v45_r1 $ # # nscp.tcl -- # # AOLserver control port configuration example. # # Results: # # A control port listening on port 8001 of localhost (127.0.0.1) # will be configured. The default user name and password are # left empty, so when prompted, simply hit enter. # # For security reasons, it is not recommended that you run a # control port on any address other then localhost. You should # also be sure to specify a user name and password for each user. # # Defining Users and Passwords: # # Users are specified using the following format: # # <userName>:<encryptedPassword> # # You can use the ns_crypt Tcl command to generate an encrypted # password. The ns_crypt command uses the same algorithm as the # Unix crypt(3) command. You could also use passwords from the # /etc/passwd file. # # The first two characters of the password are the salt - they can be # anything since the salt is used to simply introduce disorder into # the encoding algorithm. # # ns_crypt <key> <salt> # ns_crypt x t2 # # Additional Configuration Options: # # cpcmdlogging # # Boolean (default: false). If enabled, all commands entered via the # control port are logged to the server log. This can be useful for # debugging and auditing purposes. # ns_section "ns/server/server1/modules" ns_param nscp nscp.so ns_section "ns/server/server1/module/nscp" ns_param address "127.0.0.1" ns_param port 8001 ns_param cpcmdlogging "false" ns_section "ns/server/server1/module/nscp/users" ns_param user ":" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/config/stats.tcl����������������������������������������������������������0000644�0001750�0001750�00000001533�10303076512�020353� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # $Header: /cvsroot/aolserver/aolserver/examples/config/stats.tcl,v 1.1 2005/08/24 13:59:38 shmooved Exp $ # $Name: aolserver_v45_r1 $ # # stats.tcl -- # # AOLserver Web stats configuration example. # # Results: # # A Web based stats interface will configured: # # http://<address>:<port>/_stats/ # # The user name and password (aolserver/stats) are configured by # default. For security reasons, if you are enabling stats # in a production environment, you should change the default # user name and password. # ns_section "ns/server/stats" ns_param enabled true ns_param user "aolserver" ns_param password "stats" ns_param url "/_stats" # # Mutex metering must be enabled in order for lock contention # statistics to be collected and displayed. # ns_section "ns/threads" ns_param mutexmeter true ���������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/examples/config/base.tcl�����������������������������������������������������������0000644�0001750�0001750�00000004137�10654176236�020147� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # $Header: /cvsroot/aolserver/aolserver/examples/config/base.tcl,v 1.4 2007/08/01 21:35:26 michael_andrews Exp $ # $Name: aolserver_v45_r1 $ # # base.tcl -- # # A simple example of a Tcl based AOLserver configuration file. # # Results: # # HTTP (nssock): # # http://<address>:8000/ # # Server Page Root: # # $AOLSERVER/servers/server1/pages # # Server Access Log: # # $AOLSERVER/servers/server1/modules/nslog/access.log # # Notes: # # To start AOLserver, make sure you are in the AOLserver # installation directory, usually /usr/local/aolserver, and # execute the following command: # # % bin/nsd -ft sample-config.tcl # set home [file dirname [ns_info config]] set pageRoot $home/servers/server1/pages ns_section "ns/parameters" ns_param home $home ns_param logdebug true ns_section "ns/mimetypes" ns_param default "*/*" ns_param .adp "text/html; charset=iso-8859-1" ns_section "ns/encodings" ns_param adp "iso8859-1" ns_section "ns/threads" ns_param stacksize [expr 128 * 1024] ns_section "ns/servers" ns_param server1 "server1" ns_section "ns/server/server1" ns_param directoryfile "index.htm,index.html,index.adp" ns_param pageroot $pageRoot ns_param maxthreads 20 ns_param minthreads 5 ns_param maxconnections 20 ns_param urlcharset "utf-8" ns_param outputcharset "utf-8" ns_param inputcharset "utf-8" ns_section "ns/server/server1/adp" ns_param map "/*.adp" ns_section "ns/server/server1/modules" ns_param nssock nssock.so ns_param nslog nslog.so ns_param nscp nscp.so ns_section "ns/server/server1/module/nssock" ns_param hostname [ns_info hostname] ns_param address [ns_info address] ns_param port 8000 ns_section "ns/server/server1/module/nslog" ns_param rolllog true ns_param rollonsignal true ns_param rollhour 0 ns_param maxbackup 2 ns_section "ns/server/server1/module/nscp" ns_param address "127.0.0.1" ns_param port 8001 ns_param cpcmdlogging "false" ns_section "ns/server/server1/module/nscp/users" ns_param user ":" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/ChangeLog��������������������������������������������������������������������������0000644�0001750�0001750�00000434217�11141357676�015227� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2009-02-01 Gustaf Neumann <neumann@wu-wien.ac.at> *** AOLserver 4.5.1 RELEASED *** 2009-02-01 Gustaf Neumann <neumann@wu-wien.ac.at> * nsd/pools.c: 2009-02-01 tag aolserver_v45_r1 2009-01-29 Gustaf Neumann <neumann@wu-wien.ac.at> * nsd/pools.c: Fixed error message for 'ns_pools set' command * nsd/tclcache.c: Fixed behavior such that 'return' in 'ns_cache eval' works like described in the documentation and in the old nscache module. Example: ns_cache eval mycache mykey { return [expr {1+1}] } Before, 'return' raised a tcl error. * doc/ns_cache.n: added documentation of optional 'pattern' argument for 'ns_cache names'. * Updated Changelog. 2009-01-29 Gustaf Neumann neumann@wu-wien.ac.at * nsssl/ssltcl.c: Remove direct access to interp->result * Changelog: Completed Changelog entries from commits after the 4.5.0 release. 2009-01-19 Gustaf Neumann neumann@wu-wien.ac.at * tcl/fastpath.tcl, * tcl/file.tcl: * tcl/form.tcl: * tcl/http.tcl: * tcl/nsdb.tcl: * tcl/packages.tcl: * tcl/sendmail.tcl: Use Tcl 8.4 non-numeric comparison operators where appropriate 2008-12-27 Gustaf Neumann neumann@wu-wien.ac.at * nsd/nsd.h: * nsd/pools.c: * nsd/queue.c: * tcl/pools.tcl: New configure parameter "spread" for ns_pools: Background: Requests are distributed to idle threads via CondSignal, which delivers subsequent signals to idle threads in a circular manner (i.e. t1, t2, .. tn, then t1 again) determined by the scheduling policy of the operating system. This round robin behavior has the disadvantage that multiple threads terminate about at the same time, based on the maxconnections (or maxconns) value. The idle timeout will never be used on a sufficiently busy server. The mass termination of threads is performance-wise bad, especially when many connections threads are configured, since it is likely that about the same amount of threads will be recreated. The "spread" parameter introduces a random factor into threadtimeout and maxconnections to avoid these termination cycles. It adds +/- the specified percentage to maxconnections and threadtimeout (e.g. a spread of 20 means a random value between 0.80 to 1.20 of the specified value of maxconnections and threadtimeout for every connection thread). 2008-12-05 Gustaf Neumann neumann@wu-wien.ac.at * include/ns.h: * nsd/limits.c: * nsd/pools.c: * nsd/server.c: * nsext/nsext.c: - Provide names for all Ns_Mutex to report meaningful output in aolserver statistics - Set version number to 4.5.0p1 to differentiate from 4.5.0 unpatched release 2008-10-12 Gustaf Neumann neumann@wu-wien.ac.at * tcl/stats.tcl: Fixed Tcl expressions such they can be compiled into Tcl byte code 2008-09-24 Gustaf Neumann neumann@wu-wien.ac.at * nsd/queue.c: Fixed boundary condition for starting threads (there was a problem at least with keepwait > 0 and minthreads = 0) 2008-06-20 Gustaf Neumann neumann@wu-wien.ac.at * nscp/nscp.c: * nsd/tclloop.c: * nsd/tclshare.c: * nsproxy/nsproxylib.c: Remove direct access to interp->result * Initializing potentially uninitialized variables in nsproxy/nsproxylib.c: 2008-05-13 Jeff Rogers <dvrsn@diphi.com> * configure.in: Add -nostartfiles flag to link line when -shared is already there. Without this, build fails against tcl8.5 * configure: Regenerated 2008-05-10 Daniel P. Stasinski mooooooo@users.sourceforge.net * nsperm/nsperm.c: Fixed bug with netmask parsing 2008-05-06 Gustaf Neumann neumann@wu-wien.ac.at * nsd/tclfile.c: Adding missing variable declaration 2008-04-24 Gustaf Neumann neumann@wu-wien.ac.at * nsd/tclfile.c: Fix ns_tmpnam for WIN32 environments to return a path in the TMP directory. 2008-03-22 Gustaf Neumann neumann@wu-wien.ac.at * nsd/fd.c: Fix for Mac OS X Leopard: setrlimit with RLIM_INFINITY fails and causes Ns_Log to crash (fix was sketched by David Caruso on the aolserver mailing list on Jan 10, 2008) 2008-01-24 Dossy Shiobara <dossy@panoptic.com> * nscgi/nscgi.c: Added Tcl command "ns_register_cgi" which effectively does the same as "ns_param map" at startup, as it takes the same argument, the map string. Also, REQUEST_URI is now properly set in the env. for CGI executables. * nscgi/nscgi.c: Backported nscgi.c rev 1.33 change to aolserver_v40_bp branch. * nscgi/nscgi.c: Backported nscgi.c rev 1.34 change to aolserver_v40_bp branch. * nscgi/nscgi.c: Oops, REQUEST_URI should have only been the Request-URI, not including the query string. * nscgi/nscgi.c: Untabified source, no code changes. 2007-10-26 Gustaf Neumann neumann@wu-wien.ac.at * nsd/nsd.h: * nsd/pools.c: * nsd/queue.c: Keep track of connection thread state. Two new variables are introduced: - starting: keeps the number of currently starting threads - waiting: the number of threads in the cond waiting state These variables help to get a more precise understanding and allow for better knowledge for thread creation (especially under heavy load) 2007-10-22 Gustaf Neumann neumann@wu-wien.ac.at * nsd/queue.c: Remove old code for allowing to run more than maxconns requests in one thread (replaced by thread creation); Maintain min-threads threads when threads are exiting. 2007-10-21 Gustaf Neumann neumann@wu-wien.ac.at * nsd/queue.c: Protect poolptr condition by mutex 2007-10-20 Gustaf Neumann neumann@wu-wien.ac.at * nsd/nsd.h: * nsd/pools.c: * nsd/queue.c: Continuing work on BUG #1615787; instead of performing in boundary situations in the worst case more than the configured maxconns requests, a new connection thread is created automatically after the exit of a thread coming to the end of it work cycle, when jobs are pending and no other thread is able to process these. * tcl/util.tcl: using Tcl 8.4 string comparison operators 2007-10-19 Tom Jackson rmadilo@users.sourceforge.net * nsd/queue.c: Previous versions of AOLserver included the threadpool name in the name of the thread. This commit simply adds back that making it easier to figure out what threadpool was used for a request. 2007-10-19 Gustaf Neumann neumann@wu-wien.ac.at * nsd/driver.c: * nsd/queue.c: Better fix for BUG #1615787 in aolserver 4.5. Although the original fix apparently helped for www.openacs.org, it appears to simply change the timing, but did not fix the problem itself. The problem was that under limited resource configurations (e.g. maxthreads 5, maxconnections 3) and heavy traffic, incoming requests were queued but not processed in new connection threads. The situation was especially bad, when the number of queued requests was larger than maxconnections, since after processing n requests the server was idling with a high number of queued requests. New requests were put to the end of the queue while old (maybe already timed-out) requests are being served. The server appeared to hang. The current fix cares for queued requests even when maxconns is exceeded. A maybe better approach is to limit the number of queued requests or to restart automatically threads when a thread exists due to maxconns exceeded. 2007-09-29 Gustaf Neumann neumann@wu-wien.ac.at * nsd/conn.c: Extend ns_conn by two commands: - ns_conn channel: Return a Tcl channel from the current connection. This channel can be used to talk via Tcl I/O to the remote client afterwards. "ns_conn channel" was originally written by Zoran. - ns_conn contentsentlength ?number?: Query or set the number of octets sent to the client. This command can be used in connection with "ns_conn channel" to adjust the length entry in a log file in cases, the file was sent via Tcl I/O. * tcl/charsets.tcl: fix unbraced expressions and old style comparisons 2007-08-24 Michael Andrews michael_andrews@users.sourceforge.net * tcl/packages.tcl: Modified log message to better conform to AOLserver standards. 2007-08-17 Michael Andrews michael_andrews@users.sourceforge.net * tcl/packages.tcl: I changed the way this file works. It now reads the following from the server config: ns_section "ns/server/${serverName}/packages" ns_param library /some/path/here ns_param library /some/path/here ns_param library /some/path/here ns_param library /some/path/here ns_param require packageNameHere ns_param require packageNameHere ns_param require packageNameHere All "library" values are added to the ::auto_path All "require" values are executed by "ns_ictl package require" The "nsinit" and "nspostinit" procs are then run for each package. This allows you to specify packages to load at start up. 2007-08-01 Michael Andrews michael_andrews@users.sourceforge.net * tcl/packages.tcl: - Added License info - changed init commands to all lower case. * tcl/pools.tcl: Added pools.tcl file to set default pool params from server config. * tcl/pools.tcl: Changed caps in debug notice. * tcl/pools.tcl: Changed debug to notice * tcl/pools.tcl: Changed maxconns to maxconnections as it was in old AOLserver. * examples/config/base.tcl: Changed maxconns to maxconnections to be backward compatible 2007-06-13 Michael Andrews michael_andrews@users.sourceforge.net * examples/config/base.tcl: Added nscp to the base.tcl (We need to redo the filesystem layout and configs for the out of the box install). 2007-05-11 Nathan Folkman <nathan.folkman@gmail.com> * nsproxy/nsproxylib.c: Fixed crash bug that occurred when trying to create more then one proxy pool. The proxy id now takes the form of: <pool>-proxy-<number> 2007-05-08 Michael Andrews michael_andrews@users.sourceforge.net * tcl/init.tcl: No longer adds $AOLSERVER/lib to the auto_path if it already exists. * tcl/packages.tcl: Optimized the code. * tcl/packages.tcl: removed hard return used for testing. 2007-05-07 Michael Andrews michael_andrews@users.sourceforge.net * tcl/packages.tcl: Added packages.tcl: 1) Reads config to set lib paths. 2) Reads config to load packages using ns_ictl. 3) Runs nsInit procs. 4) Runs nsPostInit procs. 2007-03-12 Nathan Folkman <nathan.folkman@gmail.com> * nsd/tclhttp.c: Preliminary support added for getting and retrieving binary data. 2007-01-22 Tom Jackson rmadilo@users.sourceforge.net * nsd/tclresp.c: Bug where Tcl_SetBooleanObj accesses shared object, fixed with copy of obj 2006-12-15 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c: [BUG #1615787] Fix deadlock bug when driver thread stalls under specific conditions. Thanks to Jeff Rogers and Gustaf Neumann. 2006-08-17 Bas Scheffers basscheffers@users.sourceforge.net * nsd/tclfile.c: Changed file permissions of mkdir to 777 so it works properly with the system's umask. 2006-08-08 Dossy Shiobara <dossy@panoptic.com> * include/nsattributes.h: Provide default no-op defines for gcc attributes correctly to enable builds on older gcc to work. Previously, "may_alias" attribute resulted in gcc older than 3.3 to no longer build. This minor change fixes this. 2006-07-07 Jim Davidson <jgdavidson@ool.com> * include/ns.h: * nsd/return.c: Added Ns_RegisterRedirect as a replacement to Ns_RegisterReturn which did not require a virtual server argument as expected. * nsd/server.c: Updated to call new Ns_RegisterRedirect, fixing bug #1518426 * doc/Ns_ConnReturnStatus.3: Updated to document the new Ns_RegisterRedirect, removing reference to Ns_RegisterReturn. 2006-06-28 Nathan Folkman <nathan.folkman@gmail.com> * nsd/adpeval.c: Fixed crash bug in NsAdpLogError() when a NULL adp->framePtr is encountered. 2006-06-27 Dossy Shiobara <dossy@panoptic.com> *** AOLserver 4.5.0 RELEASED *** 2006-06-27 tag aolserver_v45_r0 2006-06-27 Jim Davidson <jgdavidson@ool.com> * Makefile: * util/install.sh (new file): Restored pre-4.5 Unix install script installed in bin/ directory again. * include/ns.mak.in: Restored various pre-4.5 Unix install variables. * nsd/adpeval.c: Removed some dead code. 2006-06-25 Jim Davidson <jgdavidson@ool.com> * RELEASE (new file): Release notes. * include/ns.h: Update for version 4.5 final. * nsd/adpcmds.c: * nsd/tclcmds.c: Added ns_adp_compress command present in version 4.0.x. * nsd/compress.c: Added Ns_Compress and Ns_CompressGzip routines present in version 4.0.x * nsd/driver.c: Fixed bug with pre-HTTP/1.0 request parsing. * tcl/sendmail.tcl: Updated with fixes in 4.0.x from atp@piskorski.com. * util/nsinstall.tcl: Updated to support installing from a lndir-created symbolic-link tree build directory and fixed bug logging file modes of installed files. * nsproxy/ns_proxy.n: * nsproxy/nsproxylib.c: Added the "send", "wait", and "recv" options to the ns_proxy command to support async requests. Also, updated the extended error response info. * doc/man.macros (deleted) * include/man.macros (new file): Moved man pages include file to the include directory where it's installed for use by extension man pages. * doc/Ns_ConnReturnStatus.3: Added details on the Ns_RegisterReturn(3) routine. 2006-06-22 Nathan Folkman <nathan.folkman@gmail.com> * nsd/adprequest.c: Fixed bug preventing ns_adp_stream from working correctly due to NsAdpReset() being called when it should not have been. 2006-06-19 Jim Davidson <jgdavidson@aol.com> * nsd/adprequest.c: * nsd/adpeval.c: * nsd/adpcmds.c: Fixes for bug #1389389 where calls to ADP outside a normal ADP request (e.g., within an ns_register_proc callback) caused the connection to close. * nsd/adpparse.c: Based on a patch from Alastair Young, restored the AOLserver 3.x ADP parsing order where registered tags, <% ... %> scripts, and <script> ... </script> tags all have the same precedence. Also, fixed the parser to handle nested sequences, e.g.: <% ns_adp_puts [ns_adp_eval {<% ... %>} %> 2006-06-02 Jim Davidson <jgdavidson@aol.com> * configure: * configure.in: Added check for Darwin (OS/X) to disable detection of poll which appears broken. Result is select is used instead. * nsd/driver.c: Fixed spurious "recv failed" messages when clients dropped which should only have shown up when the "debug" flag was set for a comm driver. * nsd/tclinit.c: * nsd/tclloop.c: Minor edits to silence compiler warnings. 2006-05-01 Zoran Vasiljevic <zv@archiware.com> * nsproxy/nsproxylib.c: CloseProxy() did not set "once" after creating the cleanup thread, resulting in many cleanup threads (needlessly) created. 2006-04-28 Jim Davidson <jgdavidson@aol.com> * nsd/adpcmds.c: * nsd/adprequest.c: Fixed crash bug with NsAdpAppend being called without an active ADP execution frame. * doc/Makefile: * util/nsinstall-man.sh: Makefile now installs man.macros into the AOLserver include/ directory. The install script will search there and other common locations to support installing man pages located outside the doc/ directory. 2006-04-19 Nathan Folkman <nathan.folkman@gmail.com> * include/ns.mak.in: Fixed to better support building 64-bit on Mac OS X. Assuming Tcl is built with 64-bit extensions enabled, it is no longer necessary to explicitly set CC. * nszlib/Makefile: Added optional ZLIB environment variable to allow user to define location of libz. Default is /usr/lib. 2006-04-19 Jim Davidson <jgdavidson@aol.com> * configure: * configure.in: Removed check for zlib now loadable by nszlib module. * doc/Ns_Conn.3: * doc/Ns_ConnClose.3 (new file): * doc/Ns_ConnContent.3: * doc/Ns_ConnCopy.3: * doc/Ns_ConnDriver.3: * doc/Ns_ConnFlush.3 (new file): * doc/Ns_ConnHeaders.3 (removed): * doc/Ns_ConnQuery.3: * doc/Ns_ConnQueueHeaders.3 (new file): * doc/Ns_ConnRead.3: * doc/Ns_ConnRedirect.3 (new file): * doc/Ns_ConnReturn.3: * doc/Ns_ConnReturnData.3 (new file): * doc/Ns_ConnReturnFile.3 (new file): * doc/Ns_ConnReturnOpen.3 (new file): * doc/Ns_ConnReturnStatus.3 (new file): * doc/Ns_ConnSend.3: * doc/Ns_ConnSetHeaders.3 (new file): * doc/Ns_ConnStatus.3 (new file): * doc/Ns_ConnType.3 (new file): * doc/Ns_ConnWrite.3 (removed): * doc/Ns_Gzip.3 (new file): * doc/Ns_Info.3: * doc/Ns_Pathname.3: Update various man pages. * include/ns.h: Added Ns_Gzip, Ns_SetGzipProc, and Ns_BinPath. * nsd/compress.c: Changed from Ns_Compress to Ns_Gzip and moved code to new nszlib module. * nsd/connio.c: Updated to call Ns_Gzip, added Ns_ConnFlushDirect, and fixed bug reading final line in Ns_ConnReadLine. * nsd/fastpath.c: Fixed bug with mapped content. * nsd/modload.c: Removed legacy pre-10.4 OS/X module loading code as dlopen, etc. is now supported. * nsd/pathname.c: Added Ns_BinPath. * nsd/return.c: Now uses Ns_ConnFlushDirect in ReturnData and changed Ns_ConnReturnHtml to call Ns_ConnReturnCharData to ensure text is encoded as needed. * nproxy/Makefile (new file): * nsproxy/nsproxy.c (new file): * nsproxy/nsproxy.h (new file): * nsproxy/nsproxylib.c (new file): * nsproxy/nsproxymod.c (new file): New AOLserver/Tcl pipe-based proxy support. * nszlib/ChangeLog (new file): * nszlib/Makefile (new file): * nszlib/README (new file): * nszlib/example.tcl (new file): * nszlib/ns_zlib.n (new file): * nszlib/nszlib.c (new file): * nszlib/nszlib.h (new file): New zlib extension for AOLserver 4.5. Provides both the "ns_zlib" command and enables the Ns_Gzip routine. Based on work by Vlad Seryakov <vlad@crystalballinc.com>. 2006-04-14 Nathan Folkman <nathan.folkman@gmail.com> * nsthread/reentrant.c: Updated ns_inet_ntoa() to be 64-bit safe. 2006-04-13 Jim Davidson <jgdavidson@aol.com> * include/Makefile.global: * include/Makefile.module: Backwards compatible makefiles which map variables and include the new ns.mak. * Makefile: Added install-tcl, install-skel, install-util, install-bins, and install-docs directives. * configure: * configure.in: Uses CC var on OS/X which can be set for 64bit build. Regenerated configure from configure.in * nscgi/nscgi.c: Removed minor memory leak when no CGI mappings are present. * nsd/Makefile: * nsd/tclloop.c: Added new ns_for, ns_foreach, ns_while, and ns_loop_ctl commands to support monitored Tcl loop structures. * nsd/adpparse.c: Clarified difference between script, proc, and adp registered tags. * nsd/conn.c: Added optional arg to ns_conn status to set result status if present. * nsd/connio.c: Switch to memchr to avoid running off the end of mmap'ed content. * nsd/driver.c: * nsd/queue.c: Moved free of various conn structures to driver where they were allocated to avoid illusion of driver constantly leaking memory freed in conn threads. * nsd/init.tcl: Init and interp dup code now makes better use of ns_ictl. * nsd/nsd.h: * nsd/server.c: Added support for ns_ictl package and once in the NsInterp struct. * nsd/nsmain.c: Added call to Tcl_Finalize on exit. * nsd/sockcallback.c: Switched to NsPoll from direct poll. * nsd/tclcmds.c: Added ns_adp_registerscript, ns_for, ns_foreach, and ns_while commands and removed the dummy ns_init and ns_cleanup commands. * nsd/tclinit.c: Updated trace execution order to be FIFO and LIFO for init and cleanup callbacks and moved more of the interp dup code to the bootstrap script. Also, added the ns_ictl package and once commands. * nsd/tclobj.c: Removed panic when compiling on 64bit machines and simplified int to time conversion code. * doc/Ns_Alloc.3: * doc/Ns_Exec.3: * doc/ns_addr.n * doc/ns_at.n * doc/ns_cache.n * doc/ns_chan.n * doc/ns_init.n * doc/ns_urlencode.n: Updated some man pages (much more to do). * doc/ns_adp.n: Modified to be an ADP overview only with commands in separate files. * doc/ns_proc.n (removed): Moved to ns_register_proc.n. * doc/ns_crash.n (removed): Not implemented. * doc/Makefile: Uses new simple man page install independent of section and added install of index.adp html browser. * doc/index.adp (new file): * doc/ns_adp_ctl.n (new file): * doc/ns_adp_debug.n (new file): * doc/ns_adp_exception.n (new file): * doc/ns_adp_include.n (new file): * doc/ns_adp_mimetype.n (new file): * doc/ns_adp_puts.n (new file): * doc/ns_adp_registertag.n (new file): * doc/ns_adp_stats.n (new file): * doc/ns_ictl.n (new file): * doc/ns_lctl.n (new file): * doc/ns_register_proc.n (new file): New man pages. * include/ns.mak.in: Simplified man page install and added support to convert man pages to html. * util/nsinstall-man.sh: Added -h option to generate html pages with groff instead of man pages and removed the -e, -s, and -z options not used. 2005-10-25 Nathan Folkman <shmooved@aol.com> * tcl/return.tcl (new file): Implements ns_returnmoved command. More information can be found here: http://panoptic.com/wiki/aolserver/Ns_returnmoved 2005-10-24 Daniel P. Stasinski <mooooooo@avenues.org> * nsd/compress.c: Fixed gzip compression of ADP files. 2005-10-09 Jim Davidson <jgdavidson@aol.com> * nsd/init.c: Fixed bug with NsInitFd called before NsInitLog. * nsd/fd.c: * nsd/nsmain.c: Moved code to increase open fd limit to NsInitFd and * nsd/sock.c: Added comments for NsPoll and renamed poll emulation function to ns_poll. * nsd/driver.c: Simplified code to reset a Conn after a connection, simply zero'ing all fields except the I/O buffers. This fixed a bug with recursionCount not being reset. * nsd/nsd.h: Fixed bug with large responses caused by 'sendwait' fields in Ns_Driver and Driver not being aligned due to addition of 'fullname' field in Ns_Driver alone. 2005-10-06 Dossy Shiobara <dossy@panoptic.com> * nsd/: op.c (1.15), return.c (1.48), tclcmds.c (1.54), tclresp.c (1.20): Add ns_internalredirect Tcl command to make Ns_ConnRedirect available from Tcl. Moved recursion detection into Ns_ConnRunRequest. Closes SF RFE #1315460. 2005-09-26 Nathan Folkman <shmooved@aol.com> * nsd/mimetypes.c: Updated with additional MIME types. 2005-08-24 Nathan Folkman <shmooved@aol.com> * examples/config/README (new file): * examples/config/base.tcl (new file): * examples/config/nscp.tcl (new file): * examples/config/stats.tcl (new file): Examples showing various configuration options for the core AOLserver, as well as other standard AOLserver modules. * sample-config.tcl (removed): This file has been replaced by examples/config/base.tcl. * full-config.tcl (removed): This file is being replaced by smaller, more specific, configuration example files. * Makefile: Updated to install examples/config/base.tcl as the default configuration example. * README: Updated to reflect changes made to default configuration file. 2005-08-23 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * nsd/fastpath.c: * nsd/nsd.h: * nsd/server.c: * nsd/tclcmds.c: * nsd/tclrequest.c: Applied patch from Stephen Deasey for new ns_register_fastpath command. 2005-08-23 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * include/nsattributes.h (new file): * include/nsthread.h: * nsd/info.c: * nsd/log.c: * nsd/queue.c: * nsd/tclfile.c: * nsd/tclinit.c: * nsd/tcljob.c: * nsd/tclmisc.c: * nsd/tclthread.c: * nsd/tclvar.c: * nsthread/thread.h: Applied patches from Stephen Deasey for better compile time error checking. * nsd/driver.c: * nsd/exec.c: Fixed bugs found by new compile time checks. * nsthread/error.c: Silence compiler warning from new compile time checks. 2005-08-21 Jim Davidson <jgdavidson@aol.com> Several updates to simplify maintenance of the build process. Basically, the makefiles support both gmake on Unix and nmake on Windows by including a platform-specific include/ns.mak created by the nsconfig.tcl script. See comments README for instructions. README: Updated with new build instructions. include/Makefile.global.in (removed): include/Makefile.module.in (removed): include/Makefile.build (removed): include/ns.mak.in (new file): include/ns-mak.inc (new file): Unix and Windows templates for include/ns.mak, replacing the previous include/Makefile.* files. nsconfig.tcl (new file): Tcl configure script which calls configure on Unix and creates include/ns.mak directly on Windows. util/nsinstall.sh (removed): util/nsmakeall.tcl (new file): util/nsinstall.tcl (new file): util/nsremove.tcl (new file): Tcl shell utility scripts called by include/ns.mak. ini2tcl.tcl (removed): tcl2ini.tcl (removed): util/ini2tcl.tcl (new file): util/tcl2ini.tcl (new file): Moved files from top level. util/nsinstall-man.sh: Updated to create directories as needed (Unix only). Makefile: aclocal.m4: configure.in: configure: doc/Makefile: nscgi/Makefile: nscgi/Makefile: nscp/Makefile: nsd/Makefile: nsdb/Makefile: nslog/Makefile: nsperm/Makefile: nssock/Makefile: nsthread/Makefile: nstclsh/Makefile: Updated to build using include/ns.mak. win32/ (removed): Removed previous Windows build enviornment. sample-config.tcl: Updated to change module file extension to .so on Windows to match Unix. include/nsdb.h: nsdb/db.h: nsthread/thread.h: Updated to export public functions on Windows. 2005-08-19 Nathan Folkman <shmooved@aol.com> * full-config.tcl (new file): Currently just a copy of the original sample-config.tcl. Over time this file will contain all of the configurable options for AOLserver along with detailed comments. * sample-config.tcl: Stripped away as much as possible in order to simplify the default configuration example. Also update to enable the Web statistics interface by default, as well as also enabling the control port. You should be sure to update the default user names and passwords for both the stats interface and control port before installing in a production environment. 2005-08-11 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * nsd/conn.c: Added Ns_ConnGet/SetGzipFlag API's. * nsd/adpeval.c * nsd/adprequest.c: * nsd/nsd.h: * nsd/server.c: Added autoabort config/flag to raise adp abort exception when a flush fails. * nsd/tclresp.c: Cleaned up error message on no conn. * nstclsh/nstclsh.c: Added call to fully initialize Tcl shell. * include/nsmodinit.c: * nsd/nswin32.c: Minor fixes for Win32. 2005-08-09 Jim Davidson <jgdavidson@aol.com> * nsd/adpeval.c: Updated to suppress multiple error log messages in stricterror mode * nsd/driver.c: * nsd/nsd.h: * nsd/request.c: * nsd/return.c: Updated to match response http version with client version. * nsd/init.tcl: * nsd/tclcmds.c: Removed ns_adp_include proc now in tclcmds.c. 2005-08-08 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * nsd/conn.c: * doc/Ns_ConnContent.3: Incorporated patch from Fred Cox to add the Ns_ConnContentOnDisk API. * include/nsmodinit.c (new file): * include/nslibinit.c (new file): * include/Makefile.global.in: * include/Makefile.module.in: New stubs and makefile targets to support building a library or module in a consistent way which separates the library code installed as both a static archive and dynamic lib from the library and/or module init calls. * nscp/Makefile: * nscp/nscp.c: * nsdb/Makefile: * nsdb/nsdb.c: * nslog/Makefile: * nslog/nslog.c * nsperm/Makefile: * nsperm/nsperm.c: * nssock/Makefile: * nssock/nssock.c: Updated to use init stubs described above. * include/ns.h * include/nsthread.h * nsthread/Makefile: * nsthread/thread.c: * nsthread/pthread.c: * nsthread/winthread.c: * nsthread/nsthreadtest.c: * nsd/Makefile: * nsd/init.c: * nsd/nsmain.c: * nsd/tclinit.c: Added Ns_LibInit and NsThreads_LibInit which, in addition to being called at dynamic library load time, are now also called at the Ns_Main and Ns_TclInit entry points to support initialization of static builds assuming code starts at the two supported entry points. * nscgi/Makefile * nscgi/nscgi.c: Updated to use new mod init stub and new Ns_DevNull and Ns_ContentFd API's. * nstclsh/: New simple Tcl shell with AOLserver commands. * examples/mynsd/: Example of building a custom static linked nsd binary. 2005-08-04 Jim Davidson <jgdavidson@aol.com> * doc/ns_adp.n: Updated docs, needs more work. * nsd/nsd.h: * nsd/adpeval.c: * nsd/adpcmds.c: * nsd/adprequest.c: Updated the init/re-init approach for adp options so they can be set before the first include. Also, fixed AdpRun so it detects parse/compile safe and/or singlescript options may have changed. 2005-08-05 Nathan Folkman <shmooved@aol.com> * nsd/log.c: * nsd/nsconf.c: * nsd/nsd.h: Fixed bug where NsLogConf() procedure was not defined or being called during server initialization. 2005-08-03 Jim Davidson <jgdavidson@aol.com> * adpeval.c: Moved frame management directly into AdpEval with better comments to describe how Tcl errors and ADP exceptions are treated. Also, further tweaked the error message format. * adpparse.c * adpcmds.c: * adprequest.c * nsd.h: * server.c: Moved remaining server-wide ADP flags to interp-level which can be set/unset via ns_adp_ctl and added "trimspace" option and config to trim leading whitespace from output (helpful when generating xml). 2005-08-02 Jim Davidson <jgdavidson@aol.com> Some updates to get code to compile on Win32. Unfortunately there is still no simple way to export the build environment so the project/workspace files in the win32/ directory will still be a struggle to use. * Makefile: * install-sh: Updated to not overwrite existing index.adp. * nsd/adpeval.c: Fixed bug checking result of Ns_CheckStack. * nsd/nsd.h * nsd/adpparse.c: * nsd/adprequest.c: * nsd/server.c: Separated adp server config and interp option flags. * nsd/connio.c: Ns_ConnSendFdEx disabled for Win32 (no pread). * nsd/queue.c: * nsd/pools.c: Connection threads are now joined and don't run detached. * nsthread/thread.h: * nsthread/thread.c: * nsthreadd/winthread.c: Updates for Win32 including adding NsGetStack (which, unfortunately does not actually get the stack). 2005-08-01 Jim Davidson <jgdavidson@aol.com> Work to enhance ADP error handling and reporting. * nsd/adpcmds.c: * nsd/nsd.h: * nsd/server.c: Added strict, display, and detail error options which can be set via server config and/or ns_adp_ctl. Example (with defaults): ns_section "ns/server/server1/adp" ns_param stricterror false; # Stop execution on error. ns_param detailerror true; # Include connection detail. ns_param displayerror false; # Return error message in page. * nsd/adpeval.c: Support for error options above plus inhibit cacheing of failed execution results (more work required here). 2005-08-01 Nathan Folkman <shmooved@aol.com> * nsd/adpeval.c: * nsd/nsd.h: * nsd/server.c: Added new configurable option which allows you to specify the max size (in characters) of the ADP trace output. Example (with defaults): ns_section "ns/server/server1/adp" ns_param trace false; # Enable text/script debug info. ns_param tracesize 40; # Max chars of each chunk to log. 2005-08-01 Jim Davidson <jgdavidson@aol.com> Quite a few changes, mostly to enable all commands to run outside a virtual server as a step toward enabling more effective unit testing of individual compontents. Also, updated ADP to enable much more detailed error messages on execeptions which includes line numbers, include file traces, and connection details. * nsd/Makefile: Added ctags target. * nsd/adpeval.c: * nsd/adprequest.c: New ADP frame management approach for enhanced error messages (file trace and connection details) and relocation of init/flush calls to top level frame. * nsd/adpcmds.c: Added ns_adp_ctl "channel" option and updated code for new ADP frame management. * nsd/adpparse.c: Updated parser to save line number info for possible error reporting. * nsd/conn.c: * nsd/tclresp.c: Standard usage of NsTclGetConn to verify and active connection and cleanup of ns_startcontent command. * nsd/auth.c: * nsd/encoding.c: * nsd/info.c: * nsd/tclrequest.c: * nsd/tclset.c: Use of NsTclGetServer call to verify when a server is required for a command. * nsd/config.c: * nsd/dns.c: * nsd/log.c: * nsd/nsconf.c: * nsd/nsconf.h: * nsd/nsd.h: * nsd/pidfile.c: Moved components of nsconf struct to cooresponding private code and added NsParam functions to simplify core parameter config. * nsd/driver.c: Added debug config option which will enable logging of unusual I/O or protocol errors. * nsd/fastpath.c: Minor edits. * nsd/fd.c: * nsd/nsmain.c: Moved core fd init code from Ns_Main to NsInitFd. * nsd/init.c: Re-ordered inits to ensure fds and log are initialized first. * nsd/queue.c: Disabled ns_server "keepalive" option as the cooresponding variable was no longer being maintained. * nsd/return.c: Cleaned up and isolated the complex keep-alive check and enabled configurable HTTP response version (default 1.1). * nsd/server.c: Enabled a global, psuedo-server, to support all Tcl commands outside the context of a virtual server. * nsd/task.c: * nsd/tclcache.c: * nsd/tclfile.c: * nsd/tclimg.c: Minor edits to silence the compiler. * nsd/tclcmds.c: Made all commands available outside a virtual server and moved ns_adp_include proc creation to C. * nsd/tclinit.c: Fixed async cancel support which is really the ability to send a thread a signal to cancel Tcl script eval in the currently active interp, if any. Also, updated code to support running outside a virtual server. * nsd/tcljob.c: * nsd/tclshare.c: * nsd/tclsock.c: * nsd/tclthread.c: Updated to work outside a virtual server. * nscgi/nscgi.c * nsd/tclhttp.c: Switched to strtol fromm atoi which evidently isnt always thread safe. 2005-07-22 Jim Davidson <jgdavidson@aol.com> * doc/Makefile: Fix install target bugs. 2005-07-21 Nathan Folkman <shmooved@aol.com> * Makefile: * index.adp: Created new default index.adp page which displays a number of AOLserver configuration settings. Updated the Makefile to install in the default page root. * nsd/dns.c: Fixed infinite recursion bug in GetAddr(). 2005-07-20 Nathan Folkman <shmooved@aol.com> * nsd/nsconf.c: * nsd/nsconf.h: Added new logdebug parameter for consistency. Supported parameters are: (debug or logdebug), logdev, and lognotice. Updated dnscachemaxentries to use new DNS_MAX_ENTRIES constant. 2005-07-19 Nathan Folkman <shmooved@aol.com> * nsd/log.c: Fixed bug where log level "Dev" wasn't supported. 2005-07-18 Jim Davidson <jgdavidson@aol.com> * Makefile: * doc/Makefile: * doc/mkLinks (removed): * doc/install-doc (removed): * doc/nsinstall-man-sh: New approach to installing man pages. * doc/Ns_ConnContent.3: * doc/Ns_ConnQuery.3: * doc/Ns_Conn.3: Broke out some Ns_Conn related man pages. * doc/Ns_Config.3: * doc/Ns_Exec.3: Cleaned out some trailing linefeeds. * nsd/Makefile: * nsd/tclcache.c: * nsd/tclcmds.c: * nsd/tclthread.c: New ns_cache command based on ideas from nscache module and made ns_thread an object command. * include/ns.h * nsd/conn.c: * nsd/connio.c: * nsd/driver.c: * nsd/fastpath.c * nsd/fd.c * nsd/form.c: * nsd/nsd.h * nsd/return.c: Finished up support for temp-file based content, allowing access via Ns_ConnContent or Ns_ConnContentFd. Also, added new Ns_ConnFile routines to access uploaded files and Ns_ConnSendFdEx and Ns_ConnReturnOpenFdEx routines to send open file descriptors using pread, allowing multi-threaded use. * nsd/queue.c: Moved code from Ns_ConnInit to the core as Ns_ConnInit is now a no-op to avoid confusing folks on whether it's required to call or not. * nsd/quotehtml.c: Fix to support UTF-8. * nsd/fd.c: * nsd/init.c: Support for new Ns_DevNull API which was going to be used by Ns_ConnContentFd. * nsd/server.c: * nsd/tclhttp.c: Removed old-style ns_http in favor of only the new Ns_Task-based code. * nsdb/nsdb.c: Fixed crash loading nsdb outside a virtual server. * nsd/adpcmds.c: * nsd/adpeval.c: * nsd/binder.c: * nsd/callbacks.c: * nsd/compress.c: * nsd/dns.c: * nsd/listen.c: * nsd/log.c: * nsd/nswin32.c: * nsd/rollfile.c: * nsd/sock.c: * nsd/sockcallback.c: * nsd/task.c: * nsd/tclinit.c: * nsd/tcljob.c: * nsd/tclsched.c: * nsd/tclsock.c: * nsd/tclvar.c: * nsd/unix.c: Code cleanup to avoid duplicate routine and struct names across files. 2005-06-21 Jim Davidson <jgdavidson@aol.com> * nsd/connio.c: Fixed bad return code for Ns_ConnReadLine. * nsd/task.c: Fixed to handle a return of POLLHUP from poll. 2005-03-27 Jim Davidson <jgdavidson@aol.com> * nsdb/dbtcl.c: Updated ns_db to be an object command. * nsd/driver.c: * nsd/limits.c: * nsd/pools.c: * nsd/tcljob.c: * nsd/tclrequest.c: Fixed usage of Tcl_GetIndexFromObj. * nsd/exec.c: Sets errno from child in parent for better error messaging. 2005-03-24 Jim Davidson <jgdavidson@aol.com> Several changes to cleanup and clarify Tcl resource management, add support for large content overflow to temp file (minimal testing, likley more work to be done), and simplify encoding management. Also, updated the version to 4.5 given the scope of changes since 4.0 * include/ns.h: Added Ns_FindCharset and Ns_GetCharsetEncodingEx. and bumped version to 4.5. * nsd/nsd.h: Simplified connection encoding config, renamed NsGetInterp to more clear NsGetInterpData. * nsd/tclshare.c: * nsd/tclset.c: * nsd/tclthread.c: Changed NsGetInterp to NsGetInterpData. * nsd/adprequest.c: Removed some connection setup code now part of Ns_GetConnInterp. * nsd/connio.c: Simplified Ns_WriteCharConn and added code to set the input encoding in Ns_ConnInit. * nsd/driver.c: * nsd/conn.c: Added support for large content requests spooled to a temp file. In these cases, the NS_CONN_FILECONTENT flag is set and the content can be accessed via the the new Ns_ConnContentFd routine or ns_conn contentchannel option (limited test, feedback appreciated). * nsd/form.c: Updated to use Ns_ConnGetUrlEncoding. * nsd/nsconf.c: Removed call to NsUpdateUrlEncode no longer required. * nsd/queue.c: Call to new private NsFreeConnInterp instead of Ns_FreeConnInterp which is now a no-op. * nsd/encoding.c: * nsd/urlencode.c: * nsd/request.c: * nsd/server.c: Simplified charset/encoding config for process-wide url decoding and per-virtual server defaults for dyanmic Tcl requests. * nsd/tclcmds.c: Made ns_atclose an object command. * nsthread/tls.c: * nsd/Makefile: * nsd/tclatclose.c: * nsd/tclinit.c: Restructured to be more clear and added detailed comments to help describe the Tcl management complexity. Also, incorporated code from tclatclose.c and moved call to Tcl_FinalizeThread directly into the nsthread library. * nsthread/pthread.c: Fixed comments. * nsd/tclrequest.c: * nsd/return.c: Some minor cleanup. 2005-03-04 Nathan Folkman <shmooved@aol.com> * nsd/limits.c: Fixed bug where limitsPtr->name was incorrectly being set to NULL. Updated FindLimits() to initialize all values in Limits structure. Renamed keys returned by LimitsResult() to distinguish between items which are counts (ntimeout, ndropped, noverflow, etc.) and items which are configuration parameters (maxwait, timeout, maxrun, etc.) 2005-01-18 Nathan Folkman <shmooved@aol.com> * nsd/tcljob.c: Minor clean up to "cannot wait on job" error message which wasn't correctly implemented. 2005-01-17 Jim Davidson <jgdavidson@aol.com> Some work fixing up the new thread pools and limits code. Quick background: Pools are designed to allow certain requests to be handled by specific collections of threads. This could, for example, ensure multiple long running requests don't block other short running requests. Pools are selected based on method/url pairs using url-specific data. By default, all requests are handled by a single unlimited "default" pool. There is also an "error" pool described below. You can create and configure additional pools with the ns_pools command. Limits are designed to manage resources before the connection is ready to run. They are also keyed on the method/url pair and include such items as max concurrent connections, max file upload size, and timeouts for I/O and run wait. When limits are exceeded, the driver thread will dispatch the connection to the "error" pool to generate a quick response. By default all requests share the same default limits. You can create and configure additional limits with the ns_limits command. * nsd/nsd.h: * nsd/driver.c: Renamed NsGetLimits and NsGetPool to NsGetRequestLimits and NsGetConnPool for a bit of clarity. * nsd/queue.c: Re-enabled ns_server command, now with optional thread arg to specify the thread pool to query (default is "default"). * nsd/pools.c: * nsd/limits.c: Cleaned up code and added comments. * nsd/encoding.c: Bug fix. 2005-01-17 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * nsd/connio.c: * nsd/conn.c: Added new Ns_ConnSetStatus and Ns_ConnGetStatus routines to set/get HTTP response status code to be sent in reponses by Ns_ConnFlush. * doc/mkLinks: * doc/Ns_ConnHeaders.3: Added placeholders for new Ns_ConnGetStatus and Ns_ConnSetStatus routines. * nsd/nsd.h: * nsd/encoding.c: Removed previous private type/encoding code now integrated into new public Ns_ConnSetType. * nsd/return.c: Updated ReturnCharData to use new Ns_ConnFlush. * nsd/server.c: Removed some config code to set encodings now determine when needed based on charsets. * nsd/form.c: New NsCheckQuery private routine to verify query form was decoded with current encoding. * nsd/queue.c: Fixed possible race in NsConnArgProc. * nsd/adprequest.c: * nsd/driver.c: Minor cleanup. 2005-01-15 Jim Davidson <jgdavidson@aol.com> Among some general code cleanup, several changes to factor out previous ADP-only code for encoding, compressing, and/or chunking output via a more general Ns_ConnFlush routine. ADP output semantics should now be closer to those of stdio including a specific "ns_adp_flush" mechanism to force a valid streamed response (likely in HTTP/1.1 "chunked" format) during execution as well as a buffer high-water mark which will force flushing on overflow (default 1meg). These changes should both be more flexible to use and allow ADP's which generate very large results to avoid consuming memory waiting to send a single, large response. Ordinary ADP's which generate a normal, relatively small responses, will behave as before. * include/ns.h: Added Ns_ConnFlush, Ns_ConnSend, Ns_ConnSetType, and Ns_ConnGetType along with some new NS_CONN constaints. * nsd/connio.c: Added Ns_ConnFlush which provides a general encoding, compressing, chunking response capbility which was mostly previous ADP-only code. * nsd/conn.c: Added Ns_ConnSetType and Ns_ConnGetType routines. * nsd/form.c: Added checks to better catch a change in URL encoding. * nsd/tclcmds.c: * nsd/adpcmds.c: Added ns_adp_ctl, ns_adp_flush, and ns_adp_close commands and simplified code with new NsAdpGetBuf routine. Also, use of new Ns_ConnSetType and Ns_ConnGetType to factor out previous ADP-only code. * nsd/nsd.h: Combined AdpParse and AdpCode structs, several new ADP_ and SERV_ flag bits, and several new ADP internal routines. * nsd/adpeval.c: * nsd/adpparse.c: Simplified code by combining AdpParse and AdpCode structs and added new AdpTrace facility to monitor ADP internals. * nsd/adprequest.c: Added NsAdpGetBuf API and factored out flush/close code to use new more general Ns_ConnFlush API. * nsd/driver.c: Now truncates instead of freeing I/O dstring bufs to avoid repeated realloc calls between connections (potential source of additional memory growth). * nsd/request.c: Added comment for for NsAppendRequest. * nsd/return.c: * nsd/server.c: Use of new flag bits instead of specific bool's and several new config options. Also, added * doc/ns_adp.n: * doc/mkLinks: * doc/Ns_ConnHeaders.3: * doc/Ns_ConnRead.3: * doc/Ns_ConnWrite.3: Added placeholders for new ns_adp_close, ns_adp_ctl, and ns_adp_flush commands and Ns_ConnFlush, Ns_ConnGetType and Ns_ConnSetType routines (unfortunately no actual documentation yet). * nsd/compress.c: * nsd/fastpath.c: * nsd/fd.c: * nsd/limits.c: nsd/nsmain.c nsd/quotehtml.c: Minor casts to silence compiler. 2005-01-03 Zoran Vasiljevic <zv@archiware.com> * nsd/tclfile.c: Certain command sequence with [ns_chan] may cause server to crash (see SF BUG #1094480). Fixed now. Also, fixed channel tables cleanup and channel-closing which also cored the server due to better Tcl library checking. 2004-12-06 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.73), nsd/dns.c (1.12), nsd/tclsock.c (1.21), tests/new/ns_addrbyhost.test (1.2): Implement Ns_GetAllAddrByHost() and [ns_addrbyhost -all]. Closes SF RFE #999452. 2004-12-01 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.72): Provide NS_VERSION_NUM definition to make conditionalized testing of AOLserver version at build time easy. 2004-11-20 Dossy Shiobara <dossy@panoptic.com> * nsd/tclsched.c (1.6): Option parsing needed to be more careful, leading to segfaults when a bad command like [ns_schedule_proc -thread -only] is executed. Closes SF Bug #1068836. 2004-11-19 Dossy Shiobara <dossy@panoptic.com> * configure (1.24), configure.in (1.19): autoconf now detects if libgcc is built shared, in which case LIBS needs -lgcc_s. Without it, the nsd binary will fail to link because of unresolved symbols __umoddi3 and __udivdi3 in nsd/dsprintf.c. 2004-11-19 Dossy Shiobara <dossy@panoptic.com> * nsd/Makefile (1.43): Adding -lz to LIBS is now redundant. 2004-11-19 Dossy Shiobara <dossy@panoptic.com> * include/nsthread.h (1.28): Need to include <inttypes.h> on some platforms (OS X, Solaris 10) to get C99 "uint32_t" and other types. 2004-11-19 Dossy Shiobara <dossy@panoptic.com> * configure (1.23), configure.in (1.18), include/Makefile.global.in (1.17), nsd/compress.c (1.2): Add --with-zlib configure option (on by default) and add ifdef's to nsd/compress.c. 2004-11-19 Dossy Shiobara <dossy@panoptic.com> * nsd/Makefile (1.42), nsd/compress.c (1.1), include/ns.h (1.71): Add new Ns_Compress() function to gzip data using Zlib. 2004-11-17 Dossy Shiobara <dossy@panoptic.com> * nsd/adprequest.c (1.18): Don't send Content-Length if streaming is on. 2004-11-15 Dossy Shiobara <dossy@panoptic.com> * nsd/nsmain.c (1.60): AOLserver will now allow setting the fd limit (via "ulimit -Hn", etc.) and only log a warning if it exceeds FD_SETSIZE. Do this at your own risk, as things which still use select(), i.e., Tcl, are likely to break. 2004-11-05 Dossy Shiobara <dossy@panoptic.com> * nsd/sockcallback.c (1.15): Dereferencing cbPtr->nextPtr is dangerous since cbPtr could have been freed. 2004-10-27 Jim Davidson <jgdavidson@aol.com> * include/nsd.h: * nsd/adpcmds.c: * nsd/adpeval.c: Updates to new ADP cache capability, changing ns_adp_include -ttl option to -cache and adding -nocache option. 2004-10-26 Jim Davidson <jgdavidson@aol.com> * ns.h: * nsd/adpcmds.c: * nsd/adpeval.c: * nsd/adprequest.c: * nsd/nsd.h: * nsd/server.c: Added new ADP caching capabilities enabled via configuration and/or ns_adp_include -ttl (work in progress). * nsd/queue.c: * nsd/driver.c: * nsd/request.c: Fixes to avoid thread race conditions when when using ns_info threads. 2004-10-06 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * nsd/task.c: * nsd/server.c: * nsd/tclcmds.c * nsd/tclnhttp.c: Added new I/O task API and a new implementation of ns_http which uses and has more flexible argument processing. A tcl/oldhttp server config option (default on) bypasses the new ns_http for the previous implementation based on the sock callback API. * nsd/nswin32.c: * nsd/unix.c: * nsd/sock.c: Moved duplicate poll() emulation code to sock.c and added the NsPoll() wrapper used in driver.c and task.c. * nsd/log.c: * nsd/nsmain.c: Ns_Fatal now calls abort() on Ns_Fatal when running in debugger mode (i.e., with the -d command line option). * nsd/nsd.h: Various updates to support the above additions. 2004-09-30 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.68), nsd/tclhttp.c (1.21), nsd/sockcallback.c (1.14): Implement Ns_SockCancelCallbackEx() in order to correctly cancel actions in the SockCallbackThread. Fix for SF Bug #1037196. 2004-09-29 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.67), nsd/tclhttp.c (1.20), nsd/sockcallback.c (1.13): Fix a thread hang issue when ns_http fails but HttpCancel() never executes because poll() returns revent == POLLPRI. Closes SF Bug #1037196. 2004-09-24 Dossy Shiobara <dossy@panoptic.com> * include/nsthread.h (1.27): Win32 supports the get{addr,name}info() API, so use it. 2004-09-24 Dossy Shiobara <dossy@panoptic.com> * nsd/dns.c (1.11): Small memory leak introduced on platforms w/ getaddrinfo. Closes SF Bug #1033575. 2004-09-22 Dossy Shiobara <dossy@panoptic.com> * configure (1.22), configure.in (1.17): get{addr,name}info on Solaris 9 is in -lsocket. 2004-09-21 Dossy Shiobara <dossy@panoptic.com> * configure (1.21), configure.in (1.16): Ensure we use the compiler from the Tcl build during AOLserver configure process, unless it's explicitly overrided during the AOLserver build. 2004-09-21 Dossy Shiobara <dossy@panoptic.com> * aclocal.m4 (1.4): Make detection of gethostby{addr,name}_r more robust. Closes SF Bug #1032231. 2004-09-20 Dossy Shiobara <dossy@panoptic.com> * nsd/: nsmain.c (1.58), nsd.h (1.91), unix.c (1.18): Need to set the dumpable flag on Linux in order to get a core file after uid/gid is changed. Closes SF Bug #1031599. 2004-09-17 Dossy Shiobara <dossy@panoptic.com> * nsd/connio.c (1.16): Ns_ConnSend() now bubbles up the error from NsSockSend() on first send, which is what the C API documentation says. Closes SF Bug #1029512. 2004-09-08 Dossy Shiobara <dossy@panoptic.com> * nslog/nslog.html (1.2): Updated nslog module documentation. Closes SF Bug #466236. 2004-09-08 Dossy Shiobara <dossy@panoptic.com> * nscgi/nscgi.html (1.3): Add datatype for config options to doc. 2004-09-07 Dossy Shiobara <dossy@panoptic.com> * tests/new/all.tcl (1.3): Fix test runner script to work when LD_LIBRARY_PATH isn't set. 2004-09-07 Dossy Shiobara <dossy@panoptic.com> * Makefile (1.52), tests/new/harness.tcl (1.3), tests/new/ns_addrbyhost.test (1.1), tests/new/ns_hostbyaddr.test (1.1), tests/new/test-ns_addrbyhost.adp (1.2), tests/new/test-ns_hostbyaddr.adp (1.2), tests/new/test-ns_hrefs.adp (1.2): Rework tests and harness to run in tclsh. 2004-09-03 Dossy Shiobara <dossy@panoptic.com> * nscgi/nscgi.html (1.2): Updated nscgi module documentation for 4.0. Closes SF Bug #465907. 2004-09-01 Dossy Shiobara <dossy@panoptic.com> * nsd/: info.c (1.17), nsd.h (1.90), nsmain.c (1.57): Expose "-s" cmdline arg to config interp via [ns_info server]. Fixes SF Bug #421740. 2004-08-27 Jim Davidson <jgdavidson@aol.com> * nsd/nsd.h * nsd/driver.c * nsd/tclrequest.c: Removed (the undocumented) Ns_RegisterPreQue in favor or a new NS_FILTER_PRE_QUEUE flag for Ns_RegisterFilter. * nsd/limits.c: Set more reasonable default limits. 2004-08-25 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.37): In the event of a SockRead() error, the connection is no longer eligible for HTTP Keep-Alive. Explicitly set the SOCK_CLOSEWAIT state. 2004-08-25 Dossy Shiobara <dossy@panoptic.com> * Makefile (1.51): Add install command to copy over the automated test config. 2004-08-21 Dossy Shiobara <dossy@panoptic.com> * tests/new/all.tcl (1.2): Non-threaded tclsh doesn't even set ::tcl_platform(threaded) at all. 2004-08-20 Jim Davidson <jgdavidson@aol.com> * nsd/op.c: Handled error case requests based on overflow flag instead of response status. * nsd/limits.c: Added some more info returned with the get option. * nsd/pools.c: Added "error" pool to handle overflows. * nsd/nsd.h: * nsd/queue.c: * nsd/tclcmds.c: * nsd/driver.c: Fixed shutdown bugs and further simplified code. Also, added a query mechanism to peek into the state of a driver via the new ns_driver command. 2004-08-20 Dossy Shiobara <dossy@panoptic.com> * Makefile (1.50), tests/new/all.tcl (1.1), tests/new/harness.tcl (1.2), tests/new/ns_hrefs.test (1.1): Implement automated tests that can be run from a stand-alone tclsh. New Makefile target added called "test" which runs the tests. 2004-08-17 Dossy Shiobara <dossy@panoptic.com> * tcl/fastpath.tcl (1.10): If _ns_dirlist gets an URL without a trailing slash, issue a 302 redirect back to the same url WITH the trailing slash. Fixes SF Bug #935907. 2004-08-17 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.35): Fix stupid crash bug on Win32 -- put the ns_free() in the wrong place. 2004-08-17 Dossy Shiobara <dossy@panoptic.com> * win32/build.tcl (1.6): Parse command line args at start. Attempt to build "debug" and "release" binaries. Still needs work. 2004-08-17 Dossy Shiobara <dossy@panoptic.com> * nsd/fastpath.c (1.21): Minor change to eliminate Win32 compile-time warning. Closes SF Bug #696806. 2004-08-16 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.34): Win32 platform doesn't support mmap(). Maybe should define HAVE_MMAP instead in the future. 2004-08-16 Dossy Shiobara <dossy@panoptic.com> * win32/build.tcl (1.5): Add new limits.c and pools.c to nsd.dll target. 2004-08-16 Dossy Shiobara <dossy@panoptic.com> * nsd/tclcmds.c (1.41): Alphabetize list of Tcl ObjCmd procs. 2004-08-14 Jim Davidson <jgdavidson@aol.com> * nsd/nsd.h * nsd/server.c * nsd/adpeval.c * nsd/adpparse.c: Updated ADP parser to allow post-processing text/script blocks into a single script block to allow incomplete scripts to span multiple blocks (e.g., <% if $cond %> ... <% } %>). The "singlescript" ADP config option enables this on a per-virtual server basis. Also, a "safeeval" config was added as well to enable safe evaluation of ADP files as is possible with ad-hoc ADP (safe Tcl ignores <% ... %> blocks, allowing only pre-configured ADP tags to execute). 2004-08-14 Dossy Shiobara <dossy@panoptic.com> * aclocal.m4 (1.3), configure (1.19), nsd/dns.c (1.10): Solaris 7 uses gethostbyaddr_r(), and the autoconf and GetHost() versions didn't work. Fixed now. 2004-08-13 Dossy Shiobara <dossy@panoptic.com> * configure (1.18), configure.in (1.15), aclocal.m4 (1.2), nsd/dns.c (1.9): gethostbyaddr() and gethostbyname() are not thread-safe. Use the new getaddrinfo() and getnameinfo() API where available, otherwise use gethostbyaddr_r() and gethostbyname_r() if available. Otherwise, continue to use the non-safe versions but emit a warning at configure time. Fixes SF Bug #1008721. 2004-08-13 Dossy Shiobara <dossy@panoptic.com> * Makefile (1.49): The CVS/ directory was getting included in install-tests-new target, oops. 2004-08-13 Dossy Shiobara <dossy@panoptic.com> * win32/: nscgi/nscgi.dsp (1.6), nscp/nscp.dsp (1.6), nsd/nsd.dsp (1.15), nsdb/nsdb.dsp (1.2), nslog/nslog.dsp (1.6), nsperm/nsperm.dsp (1.6), nssock/nssock.dsp (1.9), nsthread/nsthread.dsp (1.8), threadtest/threadtest.dsp (1.6): Change Win32 .dsp files to reflect change in Tcl from "tcl84td.lib" to "tcl84tg.lib". Fixes SF Bug #996342. 2004-08-13 Dossy Shiobara <dossy@panoptic.com> * nsd/tclmisc.c (1.31), tests/new/test-ns_hrefs.adp (1.1): ns_hrefs is now more robust. Fixes SF Bug #995078. 2004-08-13 Dossy Shiobara <dossy@panoptic.com> * Makefile (1.48): New "install-tests-new" target to install new automated tests. 2004-08-13 Dossy Shiobara <dossy@panoptic.com> * tests/new/harness.tcl (1.1): Really basic test harness for automating tests. 2004-08-11 Dossy Shiobara <dossy@panoptic.com> * nsd/nsconf.c (1.34): Inability to resolve nsconf.hostname to set nsconf.address is no longer fatal, and instead defaults to "0.0.0.0". Fixes SF Bug #994072. 2004-08-11 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.31): Ensure defMapPtr is initialized. 2004-08-11 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.30): Fixed crash bug when virtual servers are configured, but the "hostname" parameter didn't match any of the virtual servers. Fixed by introducing new "defaultserver" parameter in the comm. config that must refer to one of the virtual servers being defined. 2004-08-11 Dossy Shiobara <dossy@panoptic.com> * sample-config.tcl (1.14): Add "defaultserver" parameter in sample config. 2004-08-10 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.29): Crash due to FreeConn() happening twice, once from DriverThread() and once from SockClose(). Commented out call from SockClose() for now. Don't decrement limitPtr->nrunning if the connPtr->flags indicated overflow or timeout, since we didn't increment nrunning. Set responseStatus to 503 so requests actually overflow or timeout again. 2004-08-10 Jim Davidson <JGDavidson@aol.com> * nsd/driver.c (1.28): Restructured code (again) to better support overload and timeout conditions (work in progress). 2004-08-10 Jim Davidson <JGDavidson@aol.com> * nsd/: nsd.h (1.86), pools.c (1.4), queue.c (1.27): Moved pool selection to pools.c from queue.c and added timeout pool config option. 2004-08-10 Jim Davidson <JGDavidson@aol.com> * include/ns.h (1.65): Added conn flags to track overflow and timeout conditions. 2004-08-05 Rob Crittenden <rcrittenden0569@aol.com> * nsd/tclhttp.c: Add new option to ns_http wait, -servicetime, so you can capture how long the HTTP request took. Backported from aolserver_v40_bp. 2004-07-30 Dossy Shiobara <dossy@panoptic.com> * nsd/: limits.c (1.3), pools.c (1.3): Fixed mistake adding "default" pool to pools hashtable. Change ns_pools set options to include leading "-" just like ns_limits. 2004-07-30 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.27): Fixes nslog logging incorrect number of bytes sent in access.log. 2004-07-30 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.64), nsd/driver.c (1.26), nsd/limits.c (1.2), nsd/nsd.h (1.85), nsd/op.c (1.13), nsd/pools.c (1.2), nsd/queue.c (1.26), nsd/return.c (1.41): Implement the "maxwait" limit. Use connPtr->responseStatus to short circuit request processing, for returning HTTP 400 and 503 status responses indirectly from the driver thread. 2004-07-29 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.25): Missed incrementing connPtr->roff when applying Jim's changes. Oops. 2004-07-29 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.63), nsd/Makefile (1.40), nsd/connio.c (1.15), nsd/driver.c (1.24), nsd/fastpath.c (1.20), nsd/init.c (1.9), nsd/limits.c (1.1), nsd/nsd.h (1.84), nsd/nsmain.c (1.56), nsd/pools.c (1.1), nsd/queue.c (1.25), nsd/server.c (1.29), nsd/tclcmds.c (1.40): (These changes are actually Jim Davidson's, I just merged them and am checking them in on his behalf.) This commit completes (yet another) rewrite of the driver thread mechanism, along with implementing connection classes ("ns_limits") and request processing pools ("ns_pools"). The code compiles, but does NOT work yet. I will be correcting the few remaining issues, soon. 2004-07-29 Dossy Shiobara <dossy@panoptic.com> * doc/Ns_TclInit.3 (1.7): Change version number in doc header. 2004-07-29 Dossy Shiobara <dossy@panoptic.com> * nsd/return.c (1.40): Remove unused local variable. 2004-07-29 Dossy Shiobara <dossy@panoptic.com> * nsd/tcljob.c (1.26): Change mutex name to conform to naming standard. 2004-07-28 Dossy Shiobara <dossy@panoptic.com> * doc/Ns_TclInit.3 (1.6): Better documentation on Tcl interp init C API. 2004-07-28 Dossy Shiobara <dossy@panoptic.com> * configure (1.17): Forgot to re-run autoconf2.13 after the very last change to configure.in. 2004-07-28 Dossy Shiobara <dossy@panoptic.com> * include/ns.h (1.62): BUMP: 4.1.0a 2004-07-28 Dossy Shiobara <dossy@panoptic.com> * configure.in (1.14), configure (1.16): Clean up configure.in, regenerate configure with autoconf2.13, and clear CCRPATH/LDRPATH if CCRFLAGS/LDRFLAGS are empty. Closes SF Bug #640754. 2004-07-28 Dossy Shiobara <dossy@panoptic.com> * win32/build.tcl (1.4): DEBUG=2 now yields a really noisy build. 2004-07-26 Dossy Shiobara <dossy@panoptic.com> * win32/build.tcl (1.3): Now some build variables can be overrided from the command line. 2004-07-22 Dossy Shiobara <dossy@panoptic.com> * sample-config.tcl (1.13): Use [info sharedlibextension] so that we don't have to name DLLs under Win32 with a .so extension. 2004-07-22 Dossy Shiobara <dossy@panoptic.com> * win32/build.tcl (1.2): Ensure we're using the version of Tcl we built against by having the "install" target place it into the AOLserver install dirs. 2004-07-22 Dossy Shiobara <dossy@panoptic.com> * win32/build.tcl (1.1): Simple Tcl script to produce the Win32 build of AOLserver. 2004-07-19 tag aolserver_v40_r7 2004-07-19 Dossy Shiobara <dossy@panoptic.com> * nsd/init.c (1.8): While harmless, don't call NsInitInfo() twice. Oops. 2004-07-18 Dossy Shiobara <dossy@panoptic.com> * nsd/: nsd.h (1.83), nsconf.c (1.33), init.c (1.7): Ns_GetAddrByHost() reports errors via Ns_Log(), so calls to it should be done after Ns_Log has been initialized, otherwise very unhelpful error messages are produced. In particular, this happens when the server is started and the hostname as returned by gethostname() cannot be resolved, because the network interface is down AND no entry exists in /etc/hosts. Closes SF Bug #868362. 2004-07-16 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.23): Setting request->method to static storage, which later gets ns_free()'d in Ns_FreeRequest(), caused server to crash. 2004-07-16 tag aolserver_v40_r6 2004-07-13 Dossy Shiobara <dossy@panoptic.com> * nsd/: driver.c (1.22), op.c (1.12): Needed a more graceful way of taking a pre-queue socket and send it a 400 Bad Request. Still a hack, but I think it's safer this way. 2004-07-13 Dossy Shiobara <dossy@panoptic.com> * nsd/driver.c (1.21): Change to make HTTP request "Host:" header mandatory for HTTP/1.1 connections by returning 400 Bad Request response. Closes SF Bug #787728. Also, changed virtual server code to use the "hostname" param from the "ns/module/nssock" section to map the default virtual server based on the value (hostname) from the "ns/module/nssock/servers" section, when the "Host:" header is either not specified (HTTP/1.0) or is not found in the virtual server table. Closes SF Bug #812036. 2004-07-13 Dossy Shiobara <dossy@panoptic.com> * nslog/nslog.c (1.15): conn->headers can be NULL causing segfault. Closes SF Bug #990439. 2004-07-13 Dossy Shiobara <dossy@panoptic.com> * include/nsthread.h (1.26): OpenBSD 3.5 doesn't define ENOTSUP, so we'll define it ourselves. Closes SF Bug #985076. 2004-07-06 Dossy Shiobara <dossy@panoptic.com> * nsd/return.c (1.39): Fix bug where internal redirect for 401 omitted including the HTTP auth. "WWW-Authenticate:" header. Fixes bug #674033. 2004-07-02 Dossy Shiobara <dossy@panoptic.com> * nsd/mimetypes.c (1.12): Ns_GetMimeType() was returning defaultType instead of noextType if the path contained a directory with a "." but the filename component had no extension. Fixes bug #739049. 2004-07-02 Dossy Shiobara <dossy@panoptic.com> * nsd/: fastpath.c (1.19), return.c (1.38): Enable ADP/Tcl code to override Last-Modified: header from ns_respond when -headers AND -file are specified. Closes bug #879076. 2004-07-02 Dossy Shiobara <dossy@panoptic.com> * nsd/tclresp.c (1.17): lots of refactoring of ns_respond code to remove duplication 2004-07-02 Dossy Shiobara <dossy@panoptic.com> * nsd/init.tcl (1.31): ns_eval of script containing comments (i.e., lines starting with #) cause an error because is a list, which gets evaluated differently than a plain string script. Fixes bug #833940. 2004-07-01 Dossy Shiobara <dossy@panoptic.com> * nsd/: nsd.h (1.82), nsmain.c (1.55): Ensure that supplementary groups from /etc/group are set if -u username is specified, or dropped if a uid is specified so that the nsd doesn't run with root's supplementary groups. Closes bug #425401. 2004-07-01 Dossy Shiobara <dossy@panoptic.com> * nsd/: nsd.h (1.81), nsd.h (1.77.2.4): trivial - eliminate compiler warning for nsd/nsmain.c 2004-07-01 Dossy Shiobara <dossy@panoptic.com> * nsthread/tls.c (1.3): Make the Tcl_Panic() message from Ns_TlsGet() and Ns_TlsSet() include the full function name to aid in debugging. 2004-06-30 17:03 Dossy Shiobara <dossy@panoptic.com> * nsd/unix.c: Ensure synchronous signals are handled correctly under LinuxThreads. Possible fix for Bug #982955. 2004-06-30 01:16 Dossy Shiobara <dossy@panoptic.com> * include/ns.h: Fix build on alpha arch, removing extra INT64 typedef. Closes bug #896962. 2004-06-23 Zoran Vasiljevic <zv@archiware.com> * nsd/tclxkeylist.c: fixed improper handling of objects returned by reference in Tcl_GetKeyedListField wrapper. Also, fixed typo in the ckstrdup macro. Also, using correct size_t types in various places. 2004-06-23 Rob Crittenden <rcrittenden0569@aol.com> * nsd/log.c: ns_log now logs to a custom logger as well. 2004-06-22 Zoran Vasiljevic <zv@archiware.com> * nsd/tclxkeylist.c: added compatiblity layer for the following functions, since it broke some older code: Tcl_GetKeyedListKeys Tcl_GetKeyedListField Tcl_SetKeyedListField Tcl_DeleteKeyedListField The compatiblity layer for the string-based Tcl-API is not done. I will add this if requested. 2004-06-20 Zoran Vasiljevic <zv@archiware.com> * include/ns.h: * nsd/nsd.h: * nsd/tclcmds.c: * nsd/tclinit.c: * nsd/tclxkeylist.c: added objectified version of TclX keyed-list implementation (Patch #812522). 2004-06-19 Zoran Vasiljevic <zv@archiware.com> * nsd/tclsock.c: Improved NsTclSockOpenObjCmd() to accept two optional parameters: -localhost and -localport as per patch #815889 from Vlad Seryakov. The patch itself was used as a starting point but the implementation is different i.e. the command-option parsing is rewritten to be much more tight than in the patch and also in the previous implementation. 2004-06-14 20:28 Dossy Shiobara <dossy@panoptic.com> * nsd/connio.c: If nsend == 0, we would never call Ns_WriteConn to flush the queued headers. This could happen when we're sending zero bytes of data as a response. This fixes bug #971016 in the case where fastpath.cache=false and fastpath.mmap=false and a zero byte file is requested. 2004-06-14 20:25 Dossy Shiobara <dossy@panoptic.com> * nsd/return.c: unnecessary test for data != NULL actually caused part of bug #971016 when fastpath.cache=false and fastpath.mmap=true and the file requested is zero bytes, mmap() returns 0 which gets passed along as data == NULL, causing ReturnCharData() to not flush the queued headers. removing the if is safe as Ns_WriteConn will simply flush any queued data 2004-06-08 Rob Crittenden <rcrittenden0569@aol.com> * Makefile: remove Makefile.module on distclean. * include/ns.h, nsd/log.c: Allow users to override logging functions. * nsd/str.c: Fix crash bug in Ns_Trim* when trimming NULL strings. 2004-06-08 Rob Crittenden <rcrittenden0569@aol.com> * TAG aolserver_v40_r5 2004-03-09 13:35 Rob Crittenden <rcrittenden0569@aol.com> * nsd/tclhttp.c: The last header was being missed because the pointer was being advanced past the \r\n. 2004-02-26 14:37 Dossy Shiobara <dossy@panoptic.com> * nsd/unix.c: uid_t is supposed to be unsigned, but apparently isn't on OSX, apparently. 2004-02-25 19:56 Dossy Shiobara <dossy@panoptic.com> * nscgi/nscgi.c: Ns_ConnSetRequiredHeaders now requires length < 0 if you don't want a Content-Length header 2004-02-25 19:55 Dossy Shiobara <dossy@panoptic.com> * nsd/return.c: fix so that it's still possible to formulate a response with no Content-Length header (such as for nscgi, or HTTP streaming) where you don't know the Content-Length header in advance 2004-02-24 07:15 Dossy Shiobara <dossy@panoptic.com> * nsd/: nsmain.c, nsd.h, driver.c: fix race condition where DriverThreads are spawned but before they can Ns_SockListenEx, the main thread does its NsClosePreBound and closes the prebound sockets, making them unavailable to the DriverThreads if they require root priv to listen on 2004-02-18 01:30 Dossy Shiobara <dossy@panoptic.com> * nsperm/nsperm.c: fixed bug #899364, restoring old nsperm functionality as it was in 3.x. 2004-02-15 Jim Davidson <jgdavidson@aol.com> * nsd/conn.c: * include/ns.h: * nsd/return.c: Added new Ns_ConnGet/SetKeepAliveFlag APIs to allow custom request procedures to enable keep-alive directly. * nsd/driver.c: Minor updates to separate conn & driver structs. 2004-01-01 Scott S. Goodwin <scott@scottg.net> * nsd/adpparse.c: fixed bug #868600, where tag attribute values encapsulated within single quotes weren't being parsed properly. 2003-12-27 Scott S. Goodwin <scott@scottg.net> * nsd/urlopen.c: fixed bug #844809. * sample-config.tcl: fixed bug #805761. 2003-12-24 Scott S. Goodwin <scott@scottg.net> * include/nsthread.h: Bumped up NS_THREAD_NAMESIZE from 32 to 64. Mutex names were being truncated, making it impossible to distinguish mutexes with longer names when looking at stats. * nscgi/nscgi.c: Changed HTTPS env variable to be set to "on" or "off" instead of "1" or "0". There doesn't appear to be any standard for this, but Apache uses the on/off string in the environment. 2003-12-16 Scott S. Goodwin <scott@scottg.net> * nscgi/nscgi.c: Fixed issue with HTTPS environment variable not being set, and port not being set to 443 if connection is SSL'd. Manually applied these changes from a patch supplied by Vinod Kurup. 2003-11-16 Jim Davidson <jgdavidson@aol.com> * include/ns.h: Update version ids, added NS_SOCK_DROP and NS_TCL_TRACE constants and pre-queue function definitions. * nsd/nsd.h: Added new "times" struct to Conn for more fine-grained timing. Need to provide options to enable these time stamps plus ways to get the data. * nsd/driver.c: Restructured in a few ways: 1. Each loaded driver now has it's own thread. This should allow some more concurrency (if necessary) and generally made the code more manageable. 2. New pre-queue I/O callback API. The API will be documented with an example HTTP module later. 3. Conn allocation is handled by the driver threads and request buffers have been moved to the Conn from the Sock. 4. Reads for synchrounous drivers (i.e., SSL) are handled by a pool of reader threads instead of by the conn threads. The number of threads is set with a "maxreaders" config option. This change should enable both Host: header based virtual servers and pre-queue callbacks for SSL connections. 5. New "maxsocks" config for drivers is now used to manage the concurrency limit of the server. Conn's are now queued without limit into the connection pools and the previous "maxconns" virtual-server config is ignored. * nsd/queue.c: Cleaned up "connsperthread" code and updated NsQueueConn to support new driver code. * nsd/conn.c: * nsd/connio.c: * nsd/form.c: * nsd/nsd.h: * nsd/queue.c: * nsd/return.c: Moved connection request buffers from Sock to Conn structure. * nsd/server.c: Removed startup Conn pre-allocation as Conns are now allocated dynamically by the driver. Also, removed the "maxconns" parameter which is no longer used. * nssock/nssock.c: Added new "async" option (default on) mostly to test new reader thread capabilities of the core driver code. * nsd/tclinit.c: Added a new generalized Tcl interp tracing facility and cleaned up some previous init code. This should make it easier to support standard Tcl extensions and will be documented with an example module later. * nsd/nsmain.c: Fixed order of driver shutdown wait. * nsd/init.c: Fixed order of init calls. * nsd/binder.c: * nsd/dns.c: Named unnamed mutexes. * nsd/tclset.c: * nsd/tclsock.c: Removed unused functions. 2003-11-03 pkhincha <pkhincha@aol.com> * nsd/urlspace.c: removed initing of mutex * nsd/nsmain.c: calling NsWaitDriversShutdown 2003-11-01 Zoran Vasiljevic <zv@archiware.com> * tcl/file.tcl: fixed broken argument convention for the unused argument of ns_sourceproc. 2003-10-28 Zoran Vasiljevic <zv@archiware.com> * nsd/tclatclose.c: fixed typo in command usage text 2003-10-09 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_20 * doc/ns_job.n: * tests/api/ns_job.adp: * nsd/tcljob.c: Change timeout specification to be ns_time based. 2003-10-21 Elizabeth Thomas <eathomas93@aol.com> * nsd/init.tcl: Removing lazyproc code from 4.0 to enable it to be declared GM. Solution is being refined and may be added in later release or add-on module. 2003-10-14 Paul Moosman <pwmoosman@aol.com> * nsd/tcljob.c: Fix to ns_job, where it was attempting to access a deleted queue. 2003-10-09 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_18 2003-10-09 Elizabeth Thomas <eathomas93@aol.com> * nsd/init.tcl: Fix syntax error in check for null proc. 2003-10-08 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_17 * nsd/init.tcl (ns_eval): Minor change to track change to ns_job. 2003-10-08 Paul Moosman <pwmoosman@aol.com> * nsd/tcljob.c: Minor change to ns_job joblist return to be consistent with similar aolserver api's. 2003-10-07 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_16 * nsd/init.tcl (ns_eval): The early 4.0 ns_eval had been waiting for the completion of integrating script changes into the server's init script. This change adds the ability to return without waiting for the init script integration completion (as the default). A new switch modifies this behavior to force it to wait for the completion of init script integration. Added another switch to request a report of ns_eval backlog. * nsd/adpeval.c (LogError): Limit the amount of script text added into the errorInfo string, to keep from flowing adp script texts of unlimited length into the server log. 2003-10-06 Paul Moosman <pwmoosman@aol.com> * nsd/tcljob.c: Replaced ctime_r with ns_ctime to fix a win32 compile problem. This change should fix bug #811802. Fixed a potential deadlock case. Fixed a problem where the maxthreads option was getting ignored. 2003-10-01 Elizabeth Thomas <eathomas93@aol.com> * nsd/init.tcl: Fix to _ns_lzproc_load to handle subtle behavior with respect to namespaces and the test to see if the proc will be successfully recognized. Also, fix to protect against infinite loop on unknown processing if null command is executed. 2003-09-22 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_15 2003-09-22 Paul Moosman <pwmoosman@aol.com> * nsd/tcljob.c: Add options to ns_job Api, for waitany, delete(queue), listjobs, etc. 2003-09-19 Mark Page <mpagenva@aol.com> * nsd/adprequest.c: nsd/adpeval.c: Fix error where xxx.adp --> ns_adp_parse --> ns_adp_include --> ns_adp_puts results in the puts text going directly into the final result buffer, rather then to the intermediate buffer to be returned by ns_adp_parse to the xxx.adp page code. 2003-09-12 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_14 2003-09-11 Elizabeth Thomas <eathomas93@aol.com> * nsd/init.tcl: Add 'lazyproc' functionality. Controlled by ns/parameters config parm 'lazyprocdef' (defaults to 'false') When 'true', we do not put proc definitions in the interp init script, but instead wrap the tcl 'unknown' command and evaluate them on the first reference. Also wraps the tcl 'info' command to intercept queries about procs not yet in the interpreter. 2003-09-03 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_13 * nsd/tclinit.c (NsTclICtlObjCmd): Fix intermittant core dumps occurring during oncleanup processing. The error is in the Tcl_Obj for the script passed into ns_ictl on* callbacks was being saved and passed to the callbacks (this Tcl_Obj was then being shared amoung Interps, which is not allowed). Now, extract a copy of the script string, and pass that to the callbacks. 2003-08-27 Elizabeth Thomas <eathomas93@aol.com> * nsd/adprequest.c: Complete 8/12 fix of not logging error for ns_adp_break 2003-08-26 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_12 2003-08-26 Elizabeth Thomas <eathomas93@aol.com> * nsd/tclinit.c: Fix the 'oncleanup' option of ns_ictl. Modify behavior of Ns_RegisterAtDelete so callbacks are run before the interp is destroyed. Expose with new 'ondelete' option to ns_ictl. 2003-08-25 Mark Page <mpagenva@aol.com> * nsd/adprequest.c (): Suppress production of the result data for requests with SKIPBODY set. * nsd/return.c (ReturnCharData): Allow headers to be returned for requests with SKIPBODY; e.g., HEAD requests. 2003-08-21 Zoran Vasiljevic <zoran@archiware.com> * nsd/tclfile.c: properly detach and attach the Tcl channel out and in the current interpreter. 2003-08-19 Rahul Bhargava <rahul032213@aol.com> * nsd/return.c: Updated to support HTTP/1.1 Transfer Chunk Encoding Headers only. 2003-08-19 Nathan Folkman <shmooved@aol.com> * nsd/return.c: Updated to include status code from: RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1) and RFC 2518 (HTTP Extensions for Distributed Authoring -- WEBDAV). 2003-08-12 Elizabeth Thomas <eathomas93@aol.com> * nsd/adprequest.c: Don't log ns_adp_abort or ns_adp_break as errors. 2003-08-08 Elizabeth Thomas <eathomas93@aol.com> * nsd/mimetypes.c: * sample_config.tcl: Add support for xhtml mime type. (RFE #563417) * TAG aolserver_v4_r0_beta_11 2003-08-06 Elizabeth Thomas <eathomas93@aol.com> * nsd/tclset.c: Fix ns_set split argument checking. (#757849) 2003-08-05 Elizabeth Thomas <eathomas93@aol.com> * nsd/conn.c: * nslog/nslog.c: * include/ns.h: * sample-config.tcl: Merge in feature from 3.5 branch (with simpler implementation) for logging of request execution time in access log. To turn on feature add: ns_section "ns/server/${servername}/module/nslog" ns_param logreqtime true By default the option is disabled. If enabled the connection's request time will be appended to the access log before the extended headers (if configured). 2003-07-18 Elizabeth Thomas <eathomas93@aol.com> * nsd/tclinit.c: Add optional mutex to serialize interp initialization. With large init scripts and many threads, there is severe malloc lock contention while tcl evaluates the init script (and populates its memory pool). Serializing the initialization reduces the thrashing and results in faster startup. * nsd/nsconf.c, nsconf.h, nsd.h: Add config variable 'tclinitlock' which activates the above. Defaults to false if not specified. * TAG aolserver_v4_r0_beta_10 2003-07-18 Mark Page <mpagenva@aol.com> * nsd/adpeval.c (AdpEval): Check adp.outputPtr validity before use. It can get reset within this adp evaluation loop from commands like ns_respond (when it does an internal redirect for the file not found case). In this case, it's appropriate that further text from this page code is not appended to the result, as other code had determined that the result was complete. 2003-07-12 Zoran Vasiljevic <zoran@archiware.com> * nslog/nslog.c: the "X-Forwarded-For" header existence is examined when logging the remote user. This allows for logging the real remote user wnen it commes from some proxy and/or load balancer. Thanks for Gustaf Neumann of XOTcl for the patch. This implements the RFE #770054. 2003-07-10 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_9 2003-07-01 Mark Page <mpagenva@aol.com> * nsd/init.tcl (ns_eval): Protect against nested ns_eval calls, which would otherwise lead to deadlocks. 2003-06-26 Mark Page <mpagenva@aol.com> * nsd/adpeval.c: Fix problem where ns_adp_include was not propogating errors. 2003-06-25 Mark Page <mpagenva@aol.com> * nsd/init.tcl: (ns_eval) Fix thread-safety issue with ns_eval, where multiple simultanous usages can clobber a change. (_ns_getscript) suppress saving the Tcl global variable 'env' into the init script. Tcl's init takes care of 'env', and including it into the init script would cause SetEnvs at interp create that are unneeded and undesired. 2003-06-18 Mark Page <mpagenva@aol.com> * nsthread/thread.c (Ns_ThreadCreate): Fix typo in Ns_ThreadCreate that was causing it to ignore the stacksize parameter. * nsd/init.tcl (_ns_eval): Fix ns_eval to prevent it's bleeding of unintended Tcl environment change to the global interp state. 2003-06-06 Zoran Vasiljevic <zoran@archiware.com> * nsd/queue.c: fixed "connsperthread" config parameter as reported in bug item #749801. Default is set to "0" i.e. thread will perform unlimited number of connections (never exit) unless it's idle timer (if configured) expires. 2003-05-31 Zoran Vasiljevic <zoran@archiware.com> * nsd/config.c: uses Ns_TclDestroyInterp instead of the Tcl_DeleteInterp. * nsthread/nsthreadtest.c: * nsd/info.c: * nsd/nsmain.c: * include/Makefile.module.in: * configure: * configure.in: added --disable-shared so we can now build the nsd image statically. 2003-05-31 Zoran Vasiljevic <zoran@archiware.com> * nsd/cache.c: * include/ns.h: * doc/Ns_Cache.3: added C-API for Ns_CacheTryLock as in RFE #725704 2003-05-30 Mark Page <mpagenva@aol.com> * nsd/tclthread.c: fix problem in ns_thread begindetached api. This code was failing to create the new thread as detached. Also corrected for the Ns_TclDetachedThread C api. As a result of this change, non-detached threads will return their TclEval result to Ns_ThreadExit, making it available to a thread join. 2003-05-28 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_8 2003-05-28 Mark Page <mpagenva@aol.com> * nsd/tclimg.c: Use binary channel to read img (Thanks to Dossy). Eliminate double error string; Corrrect compiler warning on Seek. * tcl/form.c: Fix to ns_querygetall to suppress null sublists. Also, make the defaulting semantics work as described. 2003-05-24 Zoran Vasiljevic <zoran@archiware.com> * nsd/info.c: added workaround for Tcl_GetMemoryInfo() which is not defined in Tcl if somebody undefines USE_THREAD_ALLOC. Generally, this call should be avoided altogether. * nsd/tclinit.c: added call to Tcl_FinalizeThread() in the DeleteInterps() to properly finalize Tcl data on thread exit, thus closing the re-appearing memory leak from V3.3 nsd. 2003-05-20 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_7 2003-05-20 Mark Page <mpagenva@aol.com> * nsd/tclimg.c: Addition error checks in gif size read. * nsd/adpcmds.c: Error check calls to ns_adp funcs. * nsd/tclinit.c: Error check calls to Ns_TclGetConn and Ns_TclServerInterp. 2003-05-19 Mark Page <mpagenva@aol.com> * nsd/tclinit.c: suppress byte-compile for interp init scripts * nsd/tclthread.c: fix fmr. 2003-05-16 Zoran Vasiljevic <zoran@archiware.com> * nsdb/dbinit.c: fixed hash table initialization in IncrCount to TCL_ONE_WORD_KEYS instead of TCL_STRING_KEYS. Credits to Jean-Fabrice RABAUTE for the bug report. 2003-05-14 Zoran Vasiljevic <zoran@archiware.com> * nsd/tclthread.c: fixed NsTclCondObjCmd to be compatible to the 3.x pendant in way it threats the optional timeout argument. The 3.x reverted to indefinite (i.e. non-timewait) condvar waits when the optional "timeout" argument was given as zero. The 4.x version just exited with NS_TIMEOUT (= 0) in such cases breaking Tcl scripts written for 3.x. The corrective measure is to check the passed timeout value and if == 0, revert to non-timewait condition waits as the 3.x does (did). 2003-05-13 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_6 2003-05-12 Mark Page <mpagenva@aol.com> * nsd/urlencode.c : (bug fix) urlencode was passing through too many characters unencoded. In particular, the '+' was getting passed through, which causes unsymmetric encode/decode since '+' in encoded string translates to ' '(space). 2003-04-25 Mark Page <mpagenva@aol.com> * nsd/tclvar.c (NsTclNsvArrayObjCmd): (bug fix) nsv_array exists must return true if an nsv exists, regardless of the number of array elements in the nsv. 2003-04-24 Mark Page <mpagenva@aol.com> * nsd/queue.c (ConnRun): Ensure that a Internal Error status is returned to the client if an error status is returned from a pre-auth filter. Previously, the connection was simply closed, causing difficult to diagnose problems to the client. Also allow traces to run in this situation, so that access logging can occur. 2003-04-23 Mark Page <mpagenva@aol.com> * nsd/log.c (NsTclLogObjCmd): (bug fix) Tweeked previous fix to suppress trailing space on output. 2003-04-22 Nathan Folkman <shmooved@aol.com> * nsd/log.c: (bug fix) Fixed bug causing first two string args of "ns_log" to be improperly concatendated. 2003-04-16 Mark Page <mpagenva@aol.com> * nsd/modload.c (NsLoadModules): (bug) Failed parsing the explicit initialization specification properly. 2003-04-10 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_5 2003-04-07 Mark Page <mpagenva@aol.com> * nsd/tclthread.c (NsTclThread): ensure that the server has completed it's initializtion prior to initiating TclEval. * nsd/nsmain.c (Ns_WaitForStartup): add dirty-read of the conf.started flag. 2003-04-04 Mark Page <mpagenva@aol.com> * nsd/tclinit.c: * nsd/tclcmds.c: Moved interp tracing functionality into ns_ictl api as one of it's subfunctions, removing the ns_register_interptrace api previously created. 2003-04-03 Mark Page <mpagenva@aol.com> * nsd/tclinit.c: * nsd/tclcmds.c: Provide tcl api that exposes Ns_TclInitInterps and Ns_TclRegisterTrace. ns_register_interptrace. 2003-03-30 Scott S. Goodwin <scott@scottg.net> * include/ns.h: nsd/driver.c: nssock/nssock.c: nsssl/nsssl.c: Modified Ns_DriverInit. Instead of passing all args as parameters to Ns_DriverInit, a comm module must now create an Ns_DriverInitData structure and populate it with appropriate values (see include/ns.h) and pass that in the call to Ns_DriverInit. The Ns_DriverInitData structure is versioned so that we can extend it later without affecting other modules. 2003-03-28 Mark Page <mpagenva@aol.com> * nsd/tclhttp.c: (bug) Fix uninitialized hdrs var, was causing segfault. 2003-03-21 Mark Page <mpagenva@aol.com> * TAG aolserver_v4_r0_beta_4 2003-03-19 Mark Page <mpagenva@aol.com> * nsd/tclhttp.c: Added method argument to ns_http queue api to allow sending POSTs as well as GETs. 2003-03-19 Mark Page <mpagenva@aol.com> * nsext/nsext.c: Change back to using ns_socketpair for local proxies, to retain PEEK functionality. 2003-03-19 Zoran Vasiljevic <zoran@archiware.com> * nsd/modload.c: added fallback for loading regular shared libraries in addition to bundles on Darwin. * include/tcl.h: added set of version macros * nsd/config.c: added Ns_GetVersion API call. 2003-03-10 Scott S. Goodwin <scott@scottg.net> * nscgi/nscgi.c: (bug) SERVER_NAME is now set correctly. 2003-03-10 Mark Page <mpagenva@aol.com> * nsd/sched.c: (bug) Fix problem with shutting down event threads (these service detachted thread processing) on a server shutdown. 2003-03-07 Nathan Folkman <shmooved@aol.com> * TAG aolserver_v4_r0_beta_3 2003-03-07 Zoran Vasiljevic <zoran@archiware.com> * include/ns.h: * nscgi/nscgi.c: * nscp/nscp.c: * nsd/adpeval.c: * nsd/adpparse.c: * nsd/binder.c: * nsd/config.c: * nsd/conn.c: * nsd/connio.c: * nsd/dns.c: * nsd/driver.c: * nsd/dstring.c: * nsd/encoding.c: * nsd/fastpath.c: * nsd/index.c: * nsd/info.c: * nsd/lisp.c: * nsd/listen.c: * nsd/log.c: * nsd/modload.c: * nsd/nsmain.c: * nsd/pidfile.c: * nsd/queue.c: * nsd/request.c: * nsd/rollfile.c: * nsd/sched.c: * nsd/sockcallback.c: * nsd/tclatclose.c: * nsd/tclfile.c: * nsd/tclhttp.c: * nsd/tclimg.c: * nsd/tclinit.c: * nsd/tcljob.c: * nsd/tclmisc.c: * nsd/tclshare.c: * nsd/tclsock.c: * nsd/tclvar.c: * nsd/tclxkeylist.c: * nsd/urlencode.c: * nsd/urlspace.c: * nsdb/dbinit.c: * nsdb/dbtcl.c: * nsext/nsext.c: * nslog/nslog.c: * nspd/log.c: * nspd/main.c: * nsperm/nsperm.c: * nsthread/mutex.c: * nsthread/nsthreadtest.c: * nsthread/pthread.c: o. removed unused variables o. fixed warnings about non-initialized vars o. CONST-ified according to Tcl 8.4+ rules * bin/init.tcl: _ns_getscript forces import of namespaced commands * tcl/init.tcl: sets auto_path to start with our private library first * include/Makefile.global.in: allows for building with Solaris 2.6 and later 2003-03-06 Mark Page <mpagenva@aol.com> * nsd/adpeval.c: Change defn of objs field of InterpPage to size 1, since some compilers don't like 0 sized arrays. * nsd/urlencode.c: * nsd/queue.c: * nsd/server.c: * nsd/urlencode.c: * nsd/encoding.c: * nsd/nsd.h: * nsd/form.c: * nsd/conn.c: * include/ns.h: * tcl/form.tcl: * tcl/charsets.tcl(new): Added Tcl I18N support functions from OACS, with some changes to work within 4.0. 2003-03-05 Zoran Vasiljevic <zoran@archiware.com> * nsd/init.tcl: added handling of commands imported from other namespaces in _ns_getscript procedure. 2003-03-05 Mark Page <mpagenva@aol.com> * nsd/adpeval.c: (fix) Fixed handling of Tcl errors from script. 2003-03-05 Mark Page <mpagenva@aol.com> * nsd/adpeval.c: * nsd/adpcmds.c: * nsd/nsd.h: (patch) Added optional switches to ns_adp_parse; -cwd <path>, -savedresult <varname> -savedresult supports usages which require the adp script's result separate from the output buffer (which is the func result) -cwd supports prespecifying the initial cwd for which the script will be executed. 2003-03-03 Nathan Folkman <shmooved@aol.com> * nscgi/nscgi.c: (bug fix) Applied patch to set SCRIPT_NAME which is passed as an environment variable to the CGI script. SF bug 230479. 2003-02-25 Nathan Folkman <shmooved@aol.com> * nsd/init.tcl: (patch) Added logging of errorInfo and errorCode globals to _ns_sourcefile command. SF patch 690025. * sample-config.tcl: * tcl/fastpath.c: (bug fix) Added fast path configuration example. Fixed bug that was adding an extra slash to directory listings in _ns_dirlist. SF bug 682077. * nsd/tclimg.c: (bug fix) Fixed ns_jpegsize command for images which contained a DHT. Removed AppendDims command which has been replaced with AppendObjDims. SF bug 685055. 2003-02-07 Elizabeth Thomas <eathomas93@aol.com> * TAG aolserver_v4_r0_beta_2 * tcl/sendmail.tcl: (bug fix) SF bugs 669217/669844 Fix handling of addressees so we don't lose friendly address name * configure: fix additional defaults from cc to gcc 2003-02-06 Mark Page <mpagenva@aol.com> * nsd/return.c: (bug fix) SF bug 674033. (bug fix) Correct the status code for BadRequest returns. 2003-02-06 Jamie Rasmussen <jrasmuss@mle.ie> * nsthread/winthread.c: (bug fix) SF bug 675033. (bug fix) Fixed crash on second DLL_THREAD_DETACH. 2003-02-05 Elizabeth Thomas <eathomas93@aol.com> * nsext.c: Fix LocalProxy function to call Ns_CloseOnExec after the file descriptors have been opened instead of before 2003-02-04 Jamie Rasmussen <jrasmuss@mle.ie> * include/nsthread.h: * include/ns.h: * nscgi/nscgi.c: * nscp/nscp.c: * nsd/adpeval.c: * nsd/driver.c: * nsd/encoding.c: * nsd/exec.c: * nsd/fastpath.c: * nsd/fd.c: * nsd/info.c: * nsd/init.c: * nsd/listen.c: * nsd/modload.c: * nsd/nsd.h: * nsd/nsmain.c: * nsd/pathname.c: * nsd/request.c: * nsd/server.c: * nsd/sock.c: * nsd/sockcallback.c: * nsd/tclenv.c: * nsd/tclfile.c: * nsd/tclhttp.c: * nsd/tclimg.c: * nsd/tclsock.c: * nsd/tclxkeylist.c: * nsd/urlencode.c: * nsd/urlopen.c: * nsd/getopt.c: * nsd/getopt.h: * nsd/nswin32.c: * nssock/nssock.c: * win32: Added Win32 support and build files 2003-02-04 Nathan Folkman <shmooved@aol.com> * nsd/tclmisc.c: (bug fix) Fixed arg checking bug in NsTclStrftimeObjCmd (ns_fmttime) API. 2003-02-03 Jamie Rasmussen <jrasmuss@mle.ie> * tcl/sendmail.tcl: (bug fix) SF bug 632265. * Fixed minor spelling errors in comments. 2003-02-01 Nathan Folkman <shmooved@aol.com> * tcl/stats.tcl: Consolidated web based stats interface into a single Tcl file. * sample-config.tcl: Added web stats configuration. 2003-01-31 Mark Page <mpagenva@aol.com> * nsd/conn.c: * nsd/connio.c: * nsd/encoding.c: * nsd/form.c: * nsd/nsconf.c: * nsd/nsd.h: * nsd/queue.c: * nsd/return.c: * nsd/tclcmds.c: * nsd/tclresp.c: * nsd/urlencode.c: * include/ns.h: added in I18N capabilities derived from the OACS I18N design. This set of changes is just those which are supported within the nsd C-code. * sample-config.tcl: Add text for I18N specific config. 2003-01-28 Nathan Folkman <shmooved@aol.com> * nsd/server.c: * tcl/fastpath.tcl: (bug fix) Tcl code was updated to reflect a a change made earlier to server.c, in which all fast path related configuration was moved from ns/server/<server> to ns/server/<server>/fastpath. This change will require you to update your configuration file to reflect the new configuration path for any fast path options. *** INCOMPATIBILITY *** 2003-01-28 Nathan Folkman <shmooved@aol.com> * nsd/init.tcl: (bug fix) Updated ns_eval command to mark Tcl interp for deletion in the case of a TCL_ERROR only. Updated ns_eval to properly handle an arbitrarly long number of args. SF bug 675506. 2003-01-24 Elizabeth Thomas <eathomas93@aol.com> * include/Makefile.global.in: * README: Added $(PURIFY) variable back from 3.4 to facilitate easy purify compile. * configure: Made gcc the default value for $CC instead of cc. 2003-01-23 Elizabeth Thomas <eathomas93@aol.com> * Tagged first 4.0 beta: aolserver_v4_r0_beta_1 2003-01-19 Nathan Folkman <shmooved@aol.com> * nscp/nscp.c: Cleaned up log messages to be more consistent with other server messages. Moved user name from thread name into log notice. Control port logging now disabled by default. Added more detailed configuration instructions to sample-config.tcl. 2003-01-18 Jim Davidson <jgdavidson@aol.com> * nsd/auth.c: * nsd/conn.c: * nsd/form.c: * nsd/httptime.c: * nsd/info.c: * nsd/log.c: * nsd/mimetypes.c: * nsd/nsconf.c: * nsd/nsd.h: * nsd/nsmain.c: * nsd/pathname.c: * nsd/random.c: * nsd/tclcmds.c: * nsd/tclfile.c: * nsd/tclhttp.c: * nsd/tclimg.c: * nsd/tclinit.c: * nsd/tclmisc.c: * nsd/tclrequest.c: * nsd/tclresp.c: * nsd/tclset.c: * nsd/tclsock.c: * nsd/tclthread.c: * nsd/urlencode.c: * nsd/urlopen.c: Removed old string commands. * nsd/conn.c: * nsd/connio.c: * nsd/driver.c: * nsd/init.c: * nsd/nsd.h: * nsd/queue.c: * nsd/return.c: * nsd/server.c: * nsd/tclinit.c: Moved Host header mapping code from queue.c to driver.c to catch cases of unmapped Host's. Also, updated the Conn and Sock structures to maintain the servPtr and location correctly Host header based connections. * nsthread/Makefile: * nsthread/cond.c (removed): * nsthread/error.c: * nsthread/memory.c: * nsthread/mutex.c: * nsthread/nsthreadtest.c: * nsthread/pthread.c (added): * nsthread/reentrant.c: * nsthread/thread.c: * nsthread/thread.h: * nsthread/time.c: * nsthread/tls.c: * nsthread/winthread.c (added): * include/nsthread.h: Brought forward nsthread library from 3.5 which includes support for Win32. 2003-01-18 Zoran Vasiljevic <zoran@archiware.com> * nsd/init.tcl: Summary of changes: o. added _ns_getpackages to enable "package require". o. fixed various issues in ns_getscript proc related to loading Tcl modules which define namespaced versions of standard Tcl commands. o. fixed ns_eval to return value/error and made compatible with standard Tcl "eval" and AOLserver "ns_eval" from 3.x o. made the entire file little bit more readable. 2003-01-17 Mark Page <mpagenva@aol.com> * nsd/driver.c: Change to SockRead; if request has a content-length, null-terminate the content at the specified length. This fixes a problem when some browsers add extra CRLF characters beyond the specified content-length on a POST (see this by using IE to POST data). 2003-01-16 Elizabeth Thomas <eathomas93@aol.com> * nsd/tclmisc.c: Fix WordEndsInSemi so that ns_striphtml correctly * handles ampersands that are not followed by a space or semicolon 2002-11-06 Jeremy Collins <jcollins@phpsource.net> * nsd/adpparse.c: Changed ParseAtts to make it compatible with how parsing works in 3.x. * nsd/init.tcl: Fixed namespace bug. 2002-11-05 Jeremy Collins <jcollins@phpsource.net> * nsd/adpparse.c: Fixed a bug in Parse. It was not parsing registered tags inside of html tags (ex. <td bgcolor='<tag n='v'>'> ) * nsd/tclset.c: Fixed a bug with ns_set tcl commands. ns_set idelkey|delkey would not actually delete the key. 2002-11-02 Jim Davidson <jgdavidson@aol.com> * nsd/fastpath.c: Fixed bug with non-server specific cache names. 2002-11-01 Jeremy Collins <jcollins@phpsource.net> * nsd/adpparse.c: Fixed a small bug in ParseAtts. It failed to properly parse attribute values with spaces in them. 2002-10-29 Jim Davidson <jgdavidson@aol.com> * sample-config.tcl: Updated with examples for connection thread pools and Host header virtual servers. * Makefile: Uses /bin/sh to invoke install-doc. * doc/install-doc: Uses /bin/sh to invoke mkLinks. * nsd/form.c: * nsd/conn.c: * tcl/form.tcl: Changed "ns_conn files" command to just return names of file upload widgets, moving access to other meta data to new fileoffset, filelength, and fileheaders subcommands. Also, removed the ns_conn string command instead of updating. * nsd/nsd.h: * nsd/driver.c: * nsd/nsmain.c: * nsd/server.c: * nsd/queue.c: Implemented multiple named thread pools for virtual servers and Host header based virtual server selection. See sample-config.tcl for config example. * nsd/info.c: Fixed crash bug with NULL server. * nsd/tclcmds.c: Removed NsTclConnCmd and NsTclServerCmd string commands. 2002-10-14 Jim Davidson <jgdavidson@aol.com> * doc/install-doc (new): New script to install and cross link the man pages. * Makefile: * include/Makefile.module: Added .PHONY targets and man page install target. * nsd/conn.c: Made "ns_conn copy" use Tcl_Write instead of Tcl_WriteChars to fix binary file upload bug. * nsd/form.c: Fixed bug where Ns_ConnGetQuery (i.e., ns_conn form) could not handle binary data in multpart file uploads. Also, "ns_conn files" now returns file type. * nsd/log.c: Thread ids are now formatted as unsigned long. * include/ns.h: * nsd/config.c: * nsd/tclinit.c: * nsd/tclcmd.c: * nsd/tclsock.c: * nsd/main.c: Added support for libnsd.so to be loaded into a standard (thread enabled) tclsh or linked into a custom tclsh. Calling Ns_TclInit from a custom tclsh or loading libnsd.so via the load command will add many non-server AOLserver commands (e.g., adds ns_set but not ns_adp_puts). * nsd/server.c: * nsd/tcljob.c: Changed ns_job command to create and queue jobs to named queues instead of per-server queues. * nsd/tclthread.c: Added a special Tcl address object type to speed access to the object id's. * nsd/sched.c: Threaded events now use a thread pool instead of create/delete each time. * tcl/form.tcl: Fixed bug accessing uploaded binary files with the ns_getform proc and added ns_getformfile proc to address the ".tmpfile" security issue. 2002-09-28 Jim Davidson <jgdavidson@aol.com> * nsd/adpparse.c: * nsd/auth.c: * nsd/conn.c: * nsd/connio.c: * nsd/driver.c: * nsd/dstring.c: * nsd/filter.c: * nsd/init.c: * nsd/log.c: * nsd/main.c: * nsd/modload.c: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/return.c: * nsd/server.c: * nsd/tclenv.c: * nsd/tclinit.c: * nsd/tclthread.c: * include/ns.h: Added missing AOLserver 3.x API's including static module support, Ns_TclRegisterAt traces, connection I/O functions, loadable comm driver stubs, and more. * configure: * configure.in: * nsd/exec.c: Removed weird USE_PROCTHREAD code. * nsd/init.tcl: Uses "ns_ictl modules" for module list. * nscgi/nscgi.c: Uses Ns_CopyEnviron, renamed from Ns_GetEnvironment. * Makefile: Fixed install bug for install-sh. * README: Updated to match AOLserver 3.5. Various outdated docs removed. 2002-09-10 Jim Davidson <jgdavidson@aol.com> * Makefile: * INSTALL (new): * aclocal.m4 (new): * configure (new): * configure.in (new): * include/Makefile.global (removed): * include/Mkaefile.global.in (new): * include/Makefile.module: New autoconf-based configuration and build. * nsd/log.c: * nsd/tclenv.c: Updated to used new autoconf-based compile info. 2002-08-24 Jim Davidson <jgdavidson@aol.com> * nsd/filter.c: * nsd/server.c: * nsd/tclatclose.c: * nsd/tclvar.c: * nsd/tclinit.c: * nsd/tcljob.c: * nsd/nsd.h: Moved private struct definitions out of nsd.h back to files which depend on them, e.g., struct Filter. * nsd/tclatclose.c: * nsd/tclinit.c: Moved Ns_TclRegisterDeferred to tclinit.c. * nsd/adpeval.c: * nsd/tclsock.c: * nsd/tclinitc: Eliminated NsTclEval in favor of Tcl_EvalEx. * nsd/log.c: * nsd/nsconf.h: * nsd/nsconf.c: Removed complicated and dubious log buffering option. The new ns_logctl feature can be used to batch noisy requests. * nsd/tclinit.c: * nsd/tclcmds.c: * nsd/init.tcl: Added new ns_init command to replace the nsv-based namespace copy/update mechanism. The init.tcl is now called only at startup. * conn.c: * driver.c: * queue.c: * nsd.h: Connection times and timeouts now maintained with Ns_Time-based microsecond resolution. 2002-07-14 Jim Davidson <jgdavidson@aol.com> * nsd/log.c: * nsd/tclcmds.c: Added the ns_logctl command with options to hold, release, flush, etc. the log messages in a thread. * nsd/adpcmds.c: * nsd/urlopen.c: Switched to more object-correct Tcl_ObjSetVar2. 2002-07-08 Jim Davidson <jgdavidson@aol.com> * nsd/tclthread.c: Cleaned up the object-based commands by collecting common argument and new object allocation code into single GetArgs function. 2002-07-07 Jim Davidson <jgdavidson@aol.com> * nsd/tclvar.c: Removed string commands because it was messy maintaining both. * nsd/info.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/tclset.c: Added object commands. * nsd/tclobj.c: * nsd/tclmisc.c: Updated Ns_Time type code to handle simple single-integer times without microsecond resolution. * include/ns.h: * include/Makefile.global: * Makefile: Updated for AOLserver beta4 release to coincide with Tcl beta1 release. Otherwise, minor edits to new object commands in several places. 2002-07-05 Jim Davidson <jgdavidson@aol.com> * nsd/nsd.h: * nsd/adpcmds.c: * nsd/adpeval.c: * nsd/adprequest.c: * nsd/tclcmds.c: Updated remaining ADP commands to be object-based. Because the NsInterp->adp struct now uses Tcl_Obj's for call frame args, the string commands were just dumped. 2002-06-25 Scott S. Goodwin <scott@scottg.net> * nsd/tclvar.c: * nsd/tclcmds.c: Reimplemented nsv commands as object commands. 2002-06-19 Jim Davidson <jgdavidson@aol.com> * include/ns.h: * nsd/tclinit.c: Added new Ns_TclCreateInterp() which creates and initializes interps for server and non-server interps (e.g., the config interp). Interps are now initialized with a call to Tcl_Init() which enables the standard Tcl library procedures (e.g., unknown, http::, etc.). * nsd/tclthread.c: * nsd/tclcmds.c: Thread and cache related commands no longer require a server, exposing them in any interp created with Ns_TclCreateInterp. * nsd/server.c: NsGetServer handles NULL server. In general, the changes above are steps towards making the AOLserver API's more useful outside the context of a server. The idea is to enable use of libnsd for other applications, e.g., shells interps. 2002-06-12 Jeremy Collins <jeremy.collins@phpsource.net> * nsd/conn.c: * nsd/tclcmds.c: Reimplemented "ns_conn" as an obj based command. In the process I also modified NsTclConnObjCmd to use Tcl_GetIndexFromObj. This should improve performance as well as the readability of the code. * nsd/auth.c: * nsd/form.c: * nsd/httptime.c: * nsd/log.c: * nsd/mimetypes.c: * nsd/nsmain.c: * nsd/pathname.c: * nsd/random.c: * nsd/tclatclose.c: * nsd/tclfile.c: * nsd/tclhttp.c: * nsd/tclimg.c: * nsd/tclinit.c: * nsd/tclmisc.c: * nsd/tclrequest.c: * nsd/tclresp.c: * nsd/tclsock.c: * nsd/tclthread.c: * nsd/urlencode.c: * nsd/urlopen.c: Cleaned up the way we were setting the result on tcl errors. 2002-06-12 Jim Davidson <jgdavidson@aol.com> * include/nsthread.h: * nsthread/mutex.c: * nsthread/thread.c: * nsd/info.c: Rename Ns_MutexEnum and Ns_ThreadEnum to Ns_MutexList and Ns_ThreadList to not conflict with pre-4.0 definitions of removed functions. * nsthread/Makefile * nsthread/nshtreadtest.c (new file): Added simple program to test thread interface. * nsthread/thread.h: * nsthread/cslock.c: * nsthread/rwlock.c: Added new NsMutexInitNext function to consistantly name mutexes in internal objects. * nsthread/sema.c: Restored AOLserver 3.x implementation using Ns_Mutex and Ns_Cond objects. The API's in <semaphore.h> were not implemented on OS/X. 2002-06-10 Jim Davidson <jgdavidson@aol.com> * include/Makefile.global: * include/Makefile.module: Added support for dynamic library init procs set via the LIBINIT make variable. * Makefile: * nsthread/compat.c: * nsthread/cond.c: * nsthread/cslock.c * nsthread/error.c: * nsthread/fork.c: * nsthread/master.c: * nsthread/memory.c: * nsthread/mutex.c: * nsthread/osxcompat.c: * nsthread/osxcompat.h: * nsthread/reentrant.c: * nsthread/rwlock.c: * nsthread/sema.c: * nsthread/signal.c: * nsthread/thread.c: * nsthread/thread.h (new file): * nsthread/time.c: * nsthread/tls.c: Moved from nsd as separate nsthread library. * include/ns.h: * include/nsthread.h: Include of tcl.h moved to nsthread.h from ns.h. * nsd/Makefile * nsd/init.c (new file): * nsd/binder.c: * nsd/cache.c: * nsd/config.c: * nsd/encoding.c: * nsd/exec.c: * nsd/info.c: * nsd/listen.c: * nsd/log.c: * nsd/mimetypes.c: * nsd/modload.c: * nsd/nsd.h: * nsd/nsmain.c: * nsd/nsconf.c: * nsd/proc.c: * nsd/sched.c: * nsd/server.c: * nsd/tclinit.c: * nsd/urlspace.c: Various runtime initializations collected into dynamic library load time init via NsdInit in init.c. 2002-06-08 Jim Davidson <jgdavidson@aol.com> * include/Makefile.global * include/Makefile.module: Support for building programs along with dynamic libraries and modules. Also, fixed bug setting -install_name on OS/X. * nsd/Makefile: Use of updated Makefile.module and include osxcompat.o on OS/X. * nsd/nsd.h: * nsd/osxcompat.h: * nsd/osxcompat.c: Compat functions moved from ../nsosx. * nsosx/README (removed): * nsosx/Makefile (removed): * nsosx/nsosx.c (removed): Tcl no longer requires any compat functions, remainder moved into nsd. Otherwise, minor tweaks throughout to silence compiler warnings. 2002-06-05 Jim Davidson <jgdavidson@aol.com> * Makefile: * include/Makefile.global: Added tclmemdbg flag to compile Tcl and AOLserver with TCL_MEM_DEBUG option. * nsd/unix.o: * nsosx/README (new file): * nsosx/Makefile (new file): * nsosx/nsosx.o (new file): Hacks for Apple OS/X removed from nsd/unix.o and moved to nsosx.o as a Tcl compat object. See README for instructions. * nsd/nsd.h: * nsd/server.c: * nsd/adpparse.c: * nsd/adpcmds.c: * nsd/adpeval.c: Added support for new ns_adp_safeeval and ns_adp_registerproc commands. Also, registered tags can now be modified after startup. * include/Makefile.module: Updated to allow building of dynamic library of public routines to go with dynamic module, e.g., libnsdb.so with nsdb.so. * nsext/Makefile: * nspd/Makefile: * nspd/msg.c (removed): * nsext/msg.c (moved from nspd): Moved Ns_Ext API from libnspd.a static library to libnsext.so dynamic library as it's used by both nsext.so and proxy drivers. * nsdb/Makefile: * nsdb/nsext.c (new file): Moved public API for nsdb out of nsdb.so module and into libnsdb.so dynamic library. 2002-05-15 Jim Davidson <jgdavidson@aol.com> * Makefile: * include/Makefile.global: * tcl8.3.4 (removed): As of Tcl version 8.4., no modifications to the Tcl sources are required for AOLserver. Therefore, the hacked 8.3.4 sources have been removed. Going forward you'll need to checkout the Tcl source from Sourceforge into the directory specified in include/Makefile.global (currently ../tcl8.4). The top level Makefile includes the "tcl-checkout" and "tcl-update" targets which should help. * include/ns.h: * nsd/server.c: * nsd/nsd.h: * nsd/tclcmds.c: * nsd/tclinit.c: * nsd/init.tcl: * nsd/dbdrv.c (removed): * nsd/dbinit.c (removed): * nsd/dbtcl.c (removed): * nsd/dbutil.c (removed): * nsdb/dbinit.c (new): * nsdb/dbdrv.c (new): * nsdb/dbtcl.c (new): * nsdb/dbutil.c (new): * include/nsdb.h (new): Moved the NsDb interface from core to new nsdb module. Simply loading nsdb.so should work as before. Goal is to enable full replacement of NsDb in the future. * nsd/cache.c: * nsd/callbacks.c: * nsd/listen.c: * nsd/nsconf.c: * nsd/op.c: * nsd/sched.c: * nsd/server.c: * nsd/sockcallback.c: * nsd/urlspace.c: * nsext/nsext.c: * nslog/nslog.c: * nslog/nslog.c: Simple mutex name updates. * nscgi/nscgi.c: Minor bug fixes * nsd/adpeval.c: Fixed read of freed data. * nsd/tclinit.c: Fixed crash bug of null interp delete. * nsd/exec.c: * include/Makefile.global: Support for process manager thread enabled with -DUSE_PROCTHREAD to route all process create/wait through a single thread for Linux threads. 2002-02-24 Jim Davidson <jgdavidson@aol.com> * nsd/nsd.h * nsd/unix.c: * tcl8.3.4/unix/tclLoadDyld.c: Hacks for routines missing from OS/X. The implementation of sigwait() is not strictly correct but appears good enough for AOLserver's use. * Makefile: * nsd/Makefile: * nsmain/Makefile: * include/Makefile.global: * include/Makefile.module: * include/Makefile.library (removed): Updates for linking modules against the nsd shared library and for library filenames which don't end in .so. * nsext/Makefile * nspd/Makefile: Moved proxy message code from nsext to nspd, now a static library. * nsd/main.c: * nsd/init.c: * nsd/Makefile: * nsmain/*: * sample-config.tcl: * tcl2ini.tcl: * ini2tcl.tcl: * Makefile: Moved build and install of nsd and init.tcl into nsd directory and install of sample config to top level Makefile. Added tcl2ini.tcl and ini2tcl.tcl config file utilities. 2002-02-07 Jeff Hobbs <jeffh@ActiveState.com> * nsmain/init.tcl: * nsmain/sample-config.tcl: * nsssl/keygen.tcl: * tcl/debug.tcl: * tcl/fastpath.tcl: * tcl/file.tcl: * tcl/form.tcl: * tcl/http.tcl: * tcl/nsdb.tcl: * tcl/sendmail.tcl: * tcl/util.tcl: code cleanup to brace exprs and fix indentation 2001-12-05 Jim Davidson <jgdavidson@aol.com> * nsd/tclthread: Tcl threads now return their string result via ns_thread wait. 2001-12-20 Scott S. Goodwin <scott@scottg.net> * include/Makefile.library: Changed RFLAG to RPATH, and took out $(AOLSERVER)/lib: $(LDSO) -o $(LIB) $(OBJS) $(LIBS) $(RFLAG) $(AOLSERVER)/lib now reads: $(LDSO) -o $(LIB) $(OBJS) $(LIBS) $(RPATH) which is what I think was intended. Still have the problem that $(AOLSERVER)/lib must already exist. 2001-11-05 Jim Davidson <jgdavidson@aol.com> * Removed support for Win32, removing both the build/test environment and updating the code to be standard Unix style. Among other style changes such as changing SOCKET's to simple Unix style int's, the short lived Ns_Buf structure was also eliminated in favor of the Unix standard struct iovec. * Removed support for older non-pthread Unix platforms such as HP/10 and SGI native. * Updated Tcl to version to Tcl 8.3.4, replacing tclAlloc.c with a modified version of what was libnsthread's fast pool allocator including support for fast direct Tcl_Obj allocation. Also added a few functions to tclUnixThrd.c for thread safety (e.g., readdir_r and localtime_r support) and fixed up tcl.m4 for better FreeBSD 4.4 and Solaris thread builds. * ns_malloc, Ns_ThreadMalloc, and Ns_PoolAlloc all now simply call Tcl_Alloc which is always enabled. The previous -z (enable) and -p (disable) command line flags are ignored. * Integrated remainder of libnsthread, now standard pthreads and compatible with Tcl pthread code, into libnsd.so. * Updated libnsd.so to use poll() instead of select() where possible. * Removed the code which would attempt to determine when the sock callbacks and scheduler were idle before completing startup. The code was overly complex and not strictly correct. * Removed the -k and -K shutdown/restart options which was not entirely safe. * Removed the child-process privleged port Ns_SockListen code in nsd/binder.c. Binding privleged ports (e.g., port 80) now requires the -b or -B command line methods introduced in 3.4, e.g., "nsd -ft nsd.tcl -b myhost:80". The binder code, while clever, was a potential security risk. * Cleaned up some lingering sloppy uses of Ns_ConfigGet and other older macros. Old macro and function definitions can be disabled by defining NS_NOCOMPAT as is done when compiling the core server and modules. * Incremented version to 4.0b2. 2001-08-29 Scott S. Goodwin <scott@scottg.net> * https.tcl: made fixes to ns_httppost per Rick Lansky at bom.com. He also suggested I allow the Content-type to be passed in as a parameter, so I've added that too. 2001-08-27 Scott S. Goodwin <scott@scottg.net> * https.tcl: added ns_httppost, that is called with url, rqset, qsset and timeout. The qsset is an ns_set with key/values that will be turned into user=scottg&pass=1234, for example, and passed as content in the POST. 2001-08-17 Scott S. Goodwin <scott@scottg.net> * tcl/http.tcl: moved rqset to be the last arg passed to ns_httpget so it wouldn't break existing code. I should have done it that way in the first place. 2001-08-15 Scott S. Goodwin <scott@scottg.net> * tcl/http.tcl: add the rqset param as the second argument to ns_httpget, which in turn calls ns_httpsopen and passes the rqset to it. The change is for consistency so that you can use cookies with ns_httpget as well. 2001-07-16 Scott S. Goodwin <scott@scottg.net> * tcl/http.tcl: you can now do ns_httpopen GET /index.html; the script will automatically prepend http://hostname:port/ to the url. 2001-06-30 Dossy Shiobara <scott@scottg.net> * nsd/conn.c, tests/api/ns_conn.adp: fixed ns_conn outputheaders as per bug #433676 submitted by Yon Derek (yond). 2001-05-22 Scott S. Goodwin <scott@scottg.net> * nsd/conn.c: changed Ns_ConnDriverContext in 4.x to return the actual conn-specific, module-specific context back, which is how it works in 3.x. For some reason this API call was changed to always return NULL, but nsopenssl and potentially other comm drivers need to get their conn-specific info back. 2001-04-25 Dossy Shiobara <dossy@panoptic.com> * Implemented [ns_localtime ?tz?] as per "[ #418890 ] ns_localtime should accept timezone". 2001-03-15 Dossy Shiobara <dossy@panoptic.com> * include/Makefile.win32 win32/*/Makefile: initial attempts at Makefiles suitable for NMAKE for building on Win32 * include/ns.h: define typedef __int64 INT64 for Win32 2001-03-12 Scott S. Goodwin <scott@scottg.net> * nsmain.c: Segmentation fault when using -g <group> flag: line 294 should read Ns_GetGid(garg) instead of Ns_GetGid(optarg). 2001-03-12 Jim Davidson Initial checkin of AOLserver 4.0 (beta), now supporting vitual servers and (finally) removing supporting for Tcl 7.6. 2001-03-08 Kris Rehberg *** AOLserver 3.3 RELEASED *** 2001-03-08 Jim Davidson * Added NsTclFinalizeThread() at end of Tcl TLS cleanup to finalize Tcl 8.x thread data. This fix was the last hurdle for finalizing nsd8x. 2001-01-31 Kris Rehberg * Makefile (MODULES): nsunix, nsvhr, and nsodbc moved to the Module Collection. 2001-01-16 Jim Davidson * Cleaned up sloppy use of the nsServer global wherever it's used. 2001-01-04 Kris Rehberg * nsd/tclmisc.c: Ticket 13090. ns_striphtml crashing-bug in nsd8x fixed. 2000-12-14 Kris Rehberg * tcl/http.tcl: Corrected typo _ns_ns_http_readable. * nsd/dstring.c (Ns_DStringPrintf): Ticket 12765. Ns_DStringPrintf uses vsnprintf instead of vsprintf with specified buffer size. Thanks to "??". * nsd/return.c (Ns_ConnConstructHeaders): Ticket 12764. If-Modified-Since (304) works with keepalive now. Thanks to Jim "??". 2000-12-13 Kris Rehberg * include/Makefile.global: Builds with architecture-specific optimization options. Auto-detects architecture for most platforms. Auto-select compiler and Purify usage from command line, e.g.: gmake nativeme=1 (all non-free Unix) gmake gccme=1 (some non-free Unix) gmake PURIFY=/path/to/purify/executable (Solaris and Irix only) * nssock/Makefile*: now installs The Right Things in The Right Places. * nsd/Makefile: nsd8x is the default AOLserver now (nsd symlinks to nsd8x). * nsd/sample-config.tcl: Added some tuning parameters for easy reference. 2000-12-12 Kris Rehberg * nsvhr/nsvhr.c (UDSProxy): More type changes. * nslog/nslog.c (Ns_ModuleInit): pointer-to-function casted. * nscp/nscp.c (GetLine): buf changed to char *; casted AcceptProc. 2000-12-12 Jim Davidson * nssock/sock.cpp: Fixed multiple-load problems, added sndbuf, rcvbuf, sendwait, and recvwait options. Added configurable backlog via Ns_SockListenEx. Fixed compile bugs for ssl. Restructured the socket module to wait in server busy situations instead of sending the server busy message. Also, moved the graceful close burden to the SockThread from the connection thread. * thread/win32.cpp: Moved WinThread allocation to DllMain, eliminating GetWinThread function. Also, disabled thread cleanup for final thread to avoid any TLS cleanup callbacks attempting to invoke code in unloaded libraries like Tcl. Removed call to NsInitThread no longer needed. Switched to rolling condition broadcast wakeup as in the sproc code. More fixes for new Thread context model. * thread/tls.c: Changed NsLock API's to return 1/0 instead of NS_OK/NS_TIMEOUT and more use of Ns_MasterLock to keep things simple. * thread/thread.c: Changed thread enum to return Ns_Thread, not Ns_Thread pointer which didn't make much sense. Updated "ns_info pools" command to reflect change. Fixed bugs with Ns_ThreadEnum and pool counters. Update of the Ns_Pool API to support more stats gathering available via new Ns_PoolStats API. Remove Thread->etime and NsPool API's. Moved sprintf of default thread name from NsThreadMain to NsInitThread under protection of threads lock. Added comment for NsInitThread. More fixes for new Thread context model. Updated sproc.cpp code for new Thread management and removed the wait for thread startup which shouldn't be needed. * thread/test.c: Cleaned up code a bit to quiet compiler. Better test for PTHREAD_TEST. Fixed undefined var bug for sproc. Added some comments, a native pthread test, and a recursive stack checker. * thread/tcl8x.c: Added Tcl_JoinThread for benefit of Tcl8.4. * thread/sproc.cpp: Changed NsLock API's to return 1/0 instead of NS_OK/NS_TIMEOUT and more use of Ns_MasterLock to keep things simple. Fixed some comment bugs, update thrPtr->tid after fork. Added call the NsInitThread. Updated sproc.cpp code for new Thread management and removed the wait for thread startup which shouldn't be needed. * thread/pthread.cpp: Changed NsLock API's to return 1/0 instead of NS_OK/NS_TIMEOUT and more use of Ns_MasterLock to keep things simple. Fixed bug of not setting the tid correctly. Added call the NsInitThread. * thread/pool.c: Added Ns_PoolEnum to get at pool stats as with mutexes and threads, removing the old Ns_PoolStats API's and updating the "ns_info pools" command. Fixed bugs with Ns_ThreadEnum and pool counters. Update of the Ns_Pool API to support more stats gathering available via new Ns_PoolStats API. Removed <mutex.h> for sgi which shouldn't have been there. Removed the sbrk() code for now, was crashing SGI (probably not thread safe). Use sbrk() on Unix instead of malloc to avoid any malloc overhead or contention. Reduced the zippy allocator page size to 16k from 64k. * thread/pool.c, thread.c, sproc.cpp: Re-structured management of the Thread context to better support threads created without Ns_ThreadCreate (e.g., Java VM threads). * thread/mutex.c: Changed NsLock API's to return 1/0 instead of NS_OK/NS_TIMEOUT and more use of Ns_MasterLock to keep things simple. * thread/cs.c, memory.c, mutex.c, pool.c, pthread.cpp, reentrant.c, rwlock.c, sema.c, sproc.cpp, tcl8x.c, test.c, thread.c, win32.cpp: Restructured the thread interfaces, moving the master lock to the platform interface code, integrating the zippy allocator with Ns_Pool/Ns_ThreadAlloc and use of a new simple direct allocator for all thread objects. * win32/nsthread/nsthread.dsp: Removed master.c and oldpools.c. * nsd/unix.c: Made ns_eval command disabled by default to avoid using SIGUSR2. * nsd/tclthread.c: Changed SETOBJ macro to SetObj function which no longer sprintf's directly into interp->result. * nsd/tclmisc.c: Added Ns_PoolEnum to get at pool stats as with mutexes and threads, removing the old Ns_PoolStats API's and updating the "ns_info pools" command. Changed thread enum to return Ns_Thread, not Ns_Thread pointer which didn't make much sense. Updated "ns_info pools" command to reflect change. Added more info for "ns_info pools". Added "ns_info pools" command to dump memory pool stats. * nsd/tclinit.c: Added nsconf.quiet and nsconf.startuptimeout. Made ns_eval command disabled by default to avoid using SIGUSR2. Added nsConfQuiet flag to quiet down the startup messages with the -q flag. * nsd/sock.c: Added Ns_SockListenEx. * nsd/serv.c: Ensured the conn thread name was set first. Added Ns_RegisterAtReady callbacks for indicating server no longer busy. * nsd/sched.c, nsmain.c, serv.c, sockcallback.c: Added code to wait for conn thread, sock callback, and sched idle at startup to help alleviate code start problems. * nsd/nsmain.c: Shuffled initialization to ensure command line args are read before calling any Ns API's, ensuring zippy malloc can be set if needed. * nsd/nsconf.c: Added nsconf.quiet and nsconf.startuptimeout. Made ns_eval command disabled by default to avoid using SIGUSR2. * nsd/dstring.c: Remove unused vars. Uses ns_realloc to grow strings and maintains dstring stack in the staticSpace instead of the *addr pointer for compatibility with Tcl dstrings. * nsd/callbacks.c: Added Ns_RegisterAtReady callbacks for indicating server no longer busy. * nsd/binder.c: Added Ns_SockListenEx. 2000-12-12 Kris Rehberg * nsvhr/nsvhr.c (VHRProc): Matches hostnames regardless of case. * nssock: Supports Rainbow CryptoSwift SSL accelerators (compile-time option; requires the Swift SDK from http://www.rainbow.com/). * nsd/nsmain.c (Ns_Main): Changed order of some config default initialization. Config options cleaned up a lot. Usage message very less glib. SUNWspro dumped core on usage message due to nsconf.argv0 quigglyness. 2000-10-20 Kris Rehberg *** AOLserver 3.2 RELEASED *** 2000-10-20 Jim Davidson * win/tclWinSock.c: Fixed deadlock in sockets init code. * nsd/nswin32.c: Fixed service install code to allow long pathnames with spaces. Added/use ns_pipe which set's close-on-exec like ns_sockpair. 2000-10-17 Kris Rehberg * nssock/sock.cpp: extra padding on Server Busy message to defeat MSIE friendly error messages. * nsd/nsconf.h: All configuration option defaults have been moved to nsconf.h as #defines. * Makefile (install): Tcl library for nsd8x is now installed into $(PREFIX)/lib/tcl8.3. * tcl/http.tcl (ns_httpopen): Host:port is now sent to remote host if != 80. Suggested by Jerry Asher. * tcl/fastpath.tcl (_ns_dirlist): All kinds of Win32 pathnames should now be working. Thanks to Eric Klein. * nsd/return.c (Ns_ConnReturnNotice): New options "errorminsize", to pad error messages to defeat MSIE friendly errors (fix suggested by ArsDigita) and "noticedetail" to return more detailed information on notice pages. * nslog/nslog.c: suppressquery option added to suppress logging of query data. * nslog/nslog.c: LogExtendedHEaders option added. Contributed by ArsDigita. * nsd/tclfile.c: Input string to mktemp is copied, because mktemp edits the string in-place and that's generally a bad thing to do with argv's. Contributed by ArsDigita. * nsd/tclnsshare.cpp (ShareTraceProc): Patch to tclnsshare.cpp to avoid race conditions if the shared value is a list. Contributed by ArsDigita. * tcl/http.tcl (ns_httpopen): CRLF now returned in ns_httpopen. Contributed by ArsDigita. * tcl8.3.2/generic/tclCmdIL.c: Nonsense case of lsorting a list with length <= 0 caused a memory leak. Fixed. Contributed by ArsDigita. * nsd/adpfancy.c: We now use the Arsdigita version of adpfancy. Contributed by ArsDigita. * nsd/adp.c: Sundry ArsDigita changes. 2000-10-16 Kris Rehberg * tcl/init.tcl: Initialize errorCode and errorInfo like tclsh does. From ArsDigita. * nsd/nsd.h, nsd/tclcmds.c, nsd/tclvar.c: nsv_names Tcl command lists names of nsv's in memory. * tcl8.3.2: The complete Tcl 8.x distributions are now included. They aren't installed with AOLserver's "gmake install", but you can install them manually if you want to use them for the i18n encodings and stuff like that. It will install into the "lib/tcl8.3" directory of the binary distribution with AOLserver 3.3 and later. * nsd/nsmain.c (Ns_Main): Had to move Ns_ThreadSetName below the stdin/stdout/stderr reassignment to fix a fd problem with running nsd on Irix in "installed" or "daemon" mode that would prevent the server from starting up. Sigh. (Ns_Main): Took out little note about -k|-K being deprecated. 2000-10-13 Kris Rehberg * nsd/nsmain.c (Ns_Main): gid of the specified user is set even if it's not specified. (UsageError): -K and -k give a "deprecated" warning. (Ns_Main): -f gives a "deprecated" warning. * nsd/binder.c (PreBind): Didn't really tell us if it was successful at pre-binding. Helpful to know if you're wondering what happened to that port you wanted to pre-bind. (Binder): backlog variables (2) initialized to nsconf.backlog. * nssock/sock.cpp, nsd/return.c: Made an attempt at standardizing the error codes and error page content. 2000-10-13 Jim Davidson * sproc.cpp: Fixed Wakeup() error message and update child's sproc pid after fork. * nsd/random.c: Put back log message when generating seeds. * nsd/nsconf.c: Fixed memory overwrite bug in stats and increased the default buffer value. * nsd/keepalive.c: Fixed array overwrite with maxkeep=0 bug. Contributed by ArsDigita. * nsd/tclkeylist.c: A more modern version added that's compatible with Tcl 8.3.2 (nsd8x). * nsd/stamp.c: Forces the build date reported by AOLserver to be absolutely the last possible moment before the link step happens, not just the last time nsmain.c was built. * nsd/binder.c: New option "-b" to prebind ports as root (but not listen on them). This allows AOLserver to start up on MacOS X on ports 80 and 443 like this: "nsd ..blah.. -b 10.0.0.1:80". * nssock/: Building nsssl is much less of a debacle and doesn't rebuild itself three times anymore. * various: fork() calls in all kinds of code were changed to use ns_fork. ns_fork now lives in the thread library (thread/ directory). * tcl8.3.2/generic/tclIO.c: Fixed memory leak that leaks around 112 bytes each time a file descriptor is closed. Thanks to Rob Mayoff for finding this and proposing a solution. 2000-10-09 Kris Rehberg * sample-config.tcl: nsd.tcl is now sample-config.tcl so that existing users can look at the new reference configuration. * nsd/nsmain.c (Ns_InfoNameOfExecutable): new function just returns nsconf.nsd which is determined elsewhere. * nscp/nscp.c (Login): Tells you lots of harmless info about the machine once you log in. Also, nscp does not run unless configuration is explicitly set * nsd/nsmain.c: Some typo or other. * General: Files were re-arranged and some were renamed. The sample SSL key/cert files are sample-certfile, sample-keyfile. The nsd.tcl is now called sample-config.tcl (so that existing installations always have a current reference copy of the configuration). Other minor changes. * tests/: Moved from its hiding place in scripts/test. Install them with "gmake install-tests". * nsd/tclxkeylist.c, nsd/tclcmds.c, nsd/Makefile: Re-added TclX keyl* commands that were in AOLserver 2.x. These are inferior to ns_set which is why they were left out in the first place. 2000-10-04 Jim Davidson * binder.c: Set close-on-exec on received fd from binder. * sock.c: Removed cthread errno API's, Mac OS X now has thread-safe errno. * nsd/nsmain.c, include/Makefile.global, nsd/nsthread.h, nspd/main.c, nsunix/nsunix.c, nsvhr/nsvhr.c, thread/Makefile, thread/osthread, thread/reentrant.c, thread/signal.c: Updates for Mac OS X. Use MACOSX instead of APPLE; use HAVE_BSDSETPGRP, HAVE_CMMSG, use pthreads instead of cthreads. * nssock/sock.c: Removed setting bufsize to uninitialized value on ssl. * include/ns.h: Removed Ns_CacheTimedGetValue which was an odd interface not used anywhere. * nsd/nsd.h: Update to version 3.11. * tcl/namespace.tcl: Added namespace export to init script. * thread/pthread.cpp: Stopped using pthread_once as it appears to require a lock. 2000-10-04 Kris Rehberg * win32/nsssl/nsssl.dsp: nsssl project for win32. * win32/aolserver.dsw: main installation keeps DLL's as DLL's now. * scripts/nsd.tcl: shared library extension is now platform-dependent * nssock/ssltcl.c: Changed name of ReadFile adn WriteFile to avoid Win32 naming conflicts. 2000-09-28 Kris Rehberg * scripts/tests/nstelemetry.adp: added "Expires: now" header to ensure it gets run each time it's visitted. * nsd/serv.c (NsConnArgProc): Race condition when threads exit while [ns_info threads] is run; arg can be NULL. Seen mostly by people who regularly visit nstelemetry.adp. (AppendConn): same thing but with connPtr. This may be a losing battle. It appears to work on a busy Irix server, so I'm declaring victory for now. 2000-09-28 Jim Davidson * nssock/sock.c: Fixed bufferred read code in SockRead, resulting in a big performance boost and system load reduction. Special thanks to Zachary Girouard. 2000-09-05 Kris Rehberg *** AOLserver 3.1 Released *** 2000-09-05 (various: Jerry Asher, Jim Davidson, "Dossy," Curtis Galloway, Scott S. Goodwin, Rob Mayoff, Kris Rehberg) * thread/win32.cpp: Sets thread stack size as on other platforms. * thread/thread.c: NULL out thread arg at exit to avoid Ns_ThreadEnum checking arg info for possibly deallocated context as seen in ns_info threads. Also, moved read of firstPtr in Ns_ThreadEnum inside lock. Added Ns_ThreadCreate2 in thread.c needed for upgrade to Tcl 8.3.1 in tcl8x.c * thread/pthread.cpp: ETIME bug work around not causes wakeup in Ns_CondWait and Ns_CondTimeWait instead of waiting again. This is more conservative and should avoid problems some have had with threads missing wakeup. * thread/pool.c: Added a simple 1-byte range check to -z allocator. * thread/Makefile: Added dependency for osthread.o to Makefile. * tcl/namespace.tcl: Added namespace export to init script. * nsvhr/nsvhr.c: Switched to Ns_WriteConn in TimedSockDump to ensure all data was sent. * nssock(nsssl): SSL module includes a fake 40-bit/512-bit export-grade SSL keyfile.pem and certfile.pem for immediate use on installation. Adjusted for use with BSAFE 4 and 5. * nspd: Library now installed to binary distribution. * nsd/tclsock.c: Fixed crash bug in error message in ns_socknread. * nsd/tclcmds.c: Added ns_adp_registertag command as documented. * nsd/serv.c: Added missing break for unauthorized case in ConnRun. * nsd/random.c: Fixed deadlock between Ns_DRand/Ns_GenSeeds. * nsd/nsmain.c: Fixed some message formatting problems. * nsd/mimetypes.c: Added .png type, "image/png". * nsd/dbtcl.c: Removed unused variables in GetCsvCmd. Use a dstring to create the column list instead of incrementally setting the output variable with Tcl_SetVar. This was necessary to avoid conflicting definitions of the needed TCL_ flags between 7.6 and 8.x. * nsd/dbinit.c: MOdified current per-thread handle count to use a single TLS slot instead of a slot per pool. * nsd/tclinit.c,adp.c,conn.c: The use of thread-local storage (Tls) is now self-initializing in the conn, ADP, Tcl, etc. This allows ns_conn commands to be used outside a connection thread as well as other uses of Tls where it may not be ready for use. * nscp/nscp.c: Password non-echo code confuses Win32 and some free Unix telnet clients so it has been disabled by default for now, though it can be enabled by setting "echopassword" in the nscp module section of nsd.tcl. 2000-08-21 Kris Rehberg * nscp/nscp.c: Makes some attempt to recognize and handle telnet IAC codes like CTRL-C and CTRL-D to force a logout. This implementation of the telnet protocol is dirt-cheap, so only standard Unix telnet is supported. On Win32, IAC handling is completely disabled because the client is too chatty with its IAC codes. 2000-08-20 Kris Rehberg * nsftp, nspostgres, nssolid, nssybpd moved to $TOP level. 2000-08-17 Jim Davidson * nsd/dbtcl: Removed unused variables in GetCsvCmd. * nsd/adp.c: Fixed bug of not truncating output buffer when an error was thrown during an ns_adp_parse. Fix suggested by Rob Mayoff. * tcl7.6 and tcl8.2.3: Switched to blocking Tcl_WaitPid to avoid zombies as suggested by Rob Mayoff. * thread: NULL out thread arg at exit to avoid Ns_ThreadEnum checking arg info for possibly deallocated context as seen in ns_info threads. Also, moved read of firstPtr in Ns_ThreadEnum inside lock. 2000-08-17 Kris Rehberg * nssock/sock.c (SockThread): warning sent to log when Server Busy is returned. * All the Makefiles should be in line with each other. Typing "gmake", "gmake install" and "gmake clean" should work in any directory. NSHOME is paid attention to by all Makefiles. * nsd: Ns_Log and Ns_Fatal statements are hopefully more standardized and more useful to admins and developers. * Irix now builds as -o32 using the native compiler by default. See Makefile.global on how to change. 2000-08-15 Kris Rehberg * include/Makefile.global (INSTLOG): should have pointed to $(INST)/lib, not $(INST)/modules/lib. * Makefile: nsunix resurrected. All modules are built. If a module is missing a library, it is not built, but it won't stop the AOLserver build process (no error is thrown). The build will continue with the next module. * nsftp: guesses if you have TCP_WRAPPERS available. * nsext: Ten guesses why $(NSHOME)/include/nsextmsg.h was duplicated here. * nssybpd: Hopefully, the log statements will be easier to understand by both admins and developers. It's still messy since it uses syslog. Makefile redone to use standard AOLserver rules. RPATH is used a little more intelligently. Removed files that had no business living there. * include/Makefile.global: Took stab at RPATH support on Solaris to perhaps remove the need for LD_LIBRARY_PATH on an intelligenly-administered system. New rule for libnspd.a. 2000-08-14 Kris Rehberg * Makefile: nsvhr has been resurrected and enjoys our full support. * nsexample/Makefile: The include at the bottom wasn't using $(NSHOME). 2000-08-14 Jim Davidson * Tcl 8.x library upgraded to tcl8.3.2. * thread/pool.c: A spiffy range-checker added to the Zippy (-z) memory allocator. 2000-08-11 Kris Rehberg * nsvhr/nsvhr.c: Always add "Connection: close" to the request line to satisfy HTTP 1.1 RFC -- this would break MSIE in HTTP 1.1 mode. HTTP_EOL of "\r\n" used on all request lines for stupid web servers on the other end. Protocol "tcp" added as synonym of "http" for old-time Unix heads. Lots of folks lended a hand on this one -- Satyam Priyadarshy, Jerry Asher, Kriston Rehberg, and special thanks to Wanda G. at AOL for adding a CNAME in DNS so quickly. 2000-08-09 Kris Rehberg * nsd/serv.c: A whole lot less chatty about conns starting and exiting. If you want to see them, turn on the Debug flag. * doc/*: lots of updates. Title page extremely simplified. SSL docs updated. Release notes updated. NSV docs corrected (thanks to Todd Levy. 2000-08-09 Jim Davidson * tcl7.6/generic/tclFHandle.c: Removed needed fileTable which could result in crashes when fd's where reused quickly [fixes a rare multiple-exec crashing bug in nsd76 --kris]. * thread/tcl8x.c: Added a wrapper startup for Tcl_CreateThread for the benefit of Win32. * nsd/log.c: Removed severityRank array. * nsd/tclmisc.c: Fixed bug with ns_info pid. [I can't code --kris] * nsd: keepalive.c,nsmain.c,sched.c,serv.c: Re-ordered shutdowns to ensure connection threads are stopped before other shutdowns begin (e.g., sched, sockcallback). * tcl8.3.1 replaces tcl8.3.0. README.AOLSERVER added to tcl8.3.1 directory. Original copies of changed are named *.orig. * include/Makefile.global: Build environment now uses gcc -shared -nostartfiles as the default LDSO. * nsthread/thread.c: Added Ns_ThreadCreate2 with extra flags argument used by Tcl_CreateThread to create a detached thread. 2000-08-06 Scott S. Goodwin * nsd/log.c: Segmentation fault was occuring when writing to the log file because file pointer was being assigned to incorrectly - it wasn't NULL and it wasn't a valid address within processes memory. Fixed. 2000-08-06 Scott S. Goodwin * nssock: You can now compile with BSAFE versions 4 and 5. You'll need to specify the path to your BSAFE libaries and the BSAFE version in the nssock/Makefile before compiling. If you don't have BSAFE and want to compile without SSL at all, edit the toplevel Makefile and take out all the "SSL=1" text. The files changed were nssock/Makefile and nssock/t_stdlib.c. 2000-08-02 Kris Rehberg * Build process is a little more rule-oriented. The cleaning rules "distclean" and "clobber" were removed. The Tcl libraries are always distcleaned when "gmake clean" is invoked. Rules that can be used as dependencies were made for libnsthread and the Tcl libraries -- their names are "libnsthread," "libtcl76," and "libtcl8x," respectively. PREFIX is now used as the installation directory (along with INST), so the more familiar "gmake install PREFIX=/usr/local/aolserver" will work. Additionally, gmaking in a subdirectory with dependencies now works. * nsd/log.c: The sourge of modlog has been removed. All code included with AOLserver that used Ns_ModLog now doesn't. Many log statements are now hopefully more standardized. This will be a continuing improvement over the next several updates. I would like to use gcc's __FUNCTION__ macro but it doesn't work on native compilers, but we may start using __LINE__ and __FILE__ instead or replace Ns_Log with a smart macro that takes care of all this stuff for us. * nsd/tclmisc.c (NsTclInfoCmd): ns_info pid added to return the process id. 2000-08-01 Kris Rehberg * nsd/adp.c (Ns_AdpRequest): The enableexpire option was putting an Expires header even if it already existed. * nsd/return.c (Ns_ConnReturnNotice): Yikes, /face should have been /font. No more fonts, colors, etc, on default notice pages. * nsd/tclsock.c (NsTclSockOpenCmd): Removed spurious Ns_Log Notice from ns_sockopen. * tcl/form.tcl (ns_getform): MSIE presents the wrong stuff to the server when a multipart/formdata POST is redirected. Workaround contributed by Joseph Bank. * tcl/fastpath.tcl (_ns_dirlist): base href removed -- links are now fully-qualified. * Makefile (install): include and lib dirs are now included in binary distribution. * tcl/http.tcl (_ns_http_gets): \n replaced by \r in all but _ns_http_gets so that arbitrary headers get set correctly. * tcl7.6/generic/tclPosixStr.c (Tcl_SignalMsg): Patch to Tcl 7.6 for Red Hat on SPARC architectures. Contributed by Mike Chan. 2000-07-13 Kris Rehberg * scripts/nsd.tcl: nssslmodule names the nsssl/nsssle binary's filename. nscp_port tells nscp what port to listen. * nssock: nssock.c renamed sock.c, SSL support has been merged back with nssock so that both nsssl and nssock use identical socket code. * nsssl2: directory removed; nsssl is in the nssock directory now. 2000-05-09 Kris Rehberg * Re-added doc directory which has had the online docs removed. 2000-05-02 Kris Rehberg * Makefile, include/Makefile.global, include/Makefile.module, nsexample/Makefile: Now uses NSHOME variable to locate AOLserver. NSHOME is automatically figured out in the top-level Makefile and all the lower Makefiles still use relative directory paths. The intention of NSHOME is for modules that do NOT live in the AOLserver source directory tree. The nsexample/Makefile explains how this works. * nsftp module added. Contributed by Eric O'Laughlen. 2000-04-12 Kris Rehberg *** AOLserver 3.0 FINAL Released *** ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/���������������������������������������������������������������������������0000755�0001750�0001750�00000000000�11141661375�015057� 5����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/ns.h�����������������������������������������������������������������������0000644�0001750�0001750�00000134443�11141357676�015667� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * ns.h -- * * All the public types and function declarations for the core * AOLserver. * * $Header: /cvsroot/aolserver/aolserver/include/ns.h,v 1.88 2009/02/01 17:45:34 gneumann Exp $ */ #ifndef NS_H #define NS_H #define NS_MAJOR_VERSION 4 #define NS_MINOR_VERSION 5 #define NS_RELEASE_SERIAL 1 #define NS_VERSION_NUM (NS_MAJOR_VERSION * 10000 \ + NS_MINOR_VERSION * 100 \ + NS_RELEASE_SERIAL) #define NS_VERSION "4.5" #define NS_PATCH_LEVEL "4.5.1" #define NS_ALPHA_RELEASE 0 #define NS_BETA_RELEASE 1 #define NS_FINAL_RELEASE 2 /* * Be sure to move to NS_FINAL_RELEASE when * finished with non-production stages. */ #define NS_RELEASE_LEVEL NS_FINAL_RELEASE #include "nsthread.h" #ifdef NSD_EXPORTS #undef NS_EXTERN #ifdef __cplusplus #define NS_EXTERN extern "C" NS_EXPORT #else #define NS_EXTERN extern NS_EXPORT #endif #endif /* * Various constants. */ #define NS_CONN_CLOSED 0x1 #define NS_CONN_SKIPHDRS 0x2 #define NS_CONN_SKIPBODY 0x4 #define NS_CONN_READHDRS 0x8 #define NS_CONN_SENTHDRS 0x10 #define NS_CONN_KEEPALIVE 0x20 #define NS_CONN_WRITE_ENCODED 0x40 #define NS_CONN_FILECONTENT 0x80 #define NS_CONN_RUNNING 0x100 #define NS_CONN_OVERFLOW 0x200 #define NS_CONN_TIMEOUT 0x400 #define NS_CONN_GZIP 0x800 #define NS_CONN_CHUNK 0x1000 #define NS_CONN_MAXCLS 16 #define NS_AOLSERVER_3_PLUS #define NS_UNAUTHORIZED (-2) #define NS_FORBIDDEN (-3) #define NS_FILTER_BREAK (-4) #define NS_FILTER_RETURN (-5) #define NS_SHUTDOWN (-4) #define NS_TRUE 1 #define NS_FALSE 0 #define NS_FILTER_PRE_AUTH 1 #define NS_FILTER_POST_AUTH 2 #define NS_FILTER_TRACE 4 #define NS_FILTER_VOID_TRACE 8 #define NS_FILTER_PRE_QUEUE 16 #define NS_REGISTER_SERVER_TRACE 16 #define NS_OP_NOINHERIT 2 #define NS_OP_NODELETE 4 #define NS_OP_RECURSE 8 #define NS_SCHED_THREAD 1 #define NS_SCHED_ONCE 2 #define NS_SCHED_DAILY 4 #define NS_SCHED_WEEKLY 8 #define NS_SCHED_PAUSED 16 #define NS_SCHED_RUNNING 32 #define NS_SOCK_READ 0x01 #define NS_SOCK_WRITE 0x02 #define NS_SOCK_EXCEPTION 0x04 #define NS_SOCK_EXIT 0x08 #define NS_SOCK_DROP 0x10 #define NS_SOCK_CANCEL 0x20 #define NS_SOCK_TIMEOUT 0x40 #define NS_SOCK_INIT 0x80 #define NS_SOCK_ANY (NS_SOCK_READ|NS_SOCK_WRITE|NS_SOCK_EXCEPTION) #define NS_ENCRYPT_BUFSIZE 16 #define NS_DRIVER_ASYNC 1 /* Use async read-ahead. */ #define NS_DRIVER_SSL 2 /* Use SSL port, protocol defaults. */ #define NS_DRIVER_VERSION_1 1 /* * The following are valid Tcl traces. */ #define NS_TCL_TRACE_CREATE 1 #define NS_TCL_TRACE_DELETE 2 #define NS_TCL_TRACE_ALLOCATE 4 #define NS_TCL_TRACE_DEALLOCATE 8 #define NS_TCL_TRACE_GETCONN 16 #define NS_TCL_TRACE_FREECONN 32 #if defined(__alpha) typedef long ns_int64; typedef unsigned long ns_uint64; #define NS_INT_64_FORMAT_STRING "%ld" #elif defined(_WIN32) typedef int mode_t; /* Bug: #703061 */ typedef __int64 ns_int64; typedef unsigned __int64 ns_uint64; #define NS_INT_64_FORMAT_STRING "%I64d" #else typedef long long ns_int64; typedef unsigned long long ns_uint64; #define NS_INT_64_FORMAT_STRING "%lld" #endif typedef ns_int64 INT64; /* * The following flags define how Ns_Set's * are managed by Tcl: * * NS_TCL_SET_STATIC: Underlying Ns_Set managed * elsewhere, only maintain a * Tcl reference. * * NS_TCL_SET_DYNAMIC: Ownership of Ns_Set is given * entirely to Tcl, free the set * when no longer referenced in Tcl. * * In addition, the NS_TCL_SET_SHARED flag can be set * to make the set available to all interps. */ #define NS_TCL_SET_STATIC 0 #define NS_TCL_SET_DYNAMIC 1 #define NS_TCL_SET_SHARED 2 /* * Backwards compatible (and confusing) names. */ #define NS_TCL_SET_PERSISTENT NS_TCL_SET_SHARED #define NS_TCL_SET_TEMPORARY NS_TCL_SET_STATIC #define NS_DSTRING_STATIC_SIZE TCL_DSTRING_STATIC_SIZE #define NS_DSTRING_PRINTF_MAX 2048 #define NS_CACHE_FREE ((Ns_Callback *) (-1)) #ifdef _WIN32 NS_EXTERN char * NsWin32ErrMsg(int err); NS_EXTERN SOCKET ns_sockdup(SOCKET sock); NS_EXTERN int ns_socknbclose(SOCKET sock); NS_EXTERN int truncate(char *file, off_t size); NS_EXTERN int link(char *from, char *to); NS_EXTERN int symlink(char *from, char *to); NS_EXTERN int kill(int pid, int sig); #define ns_sockclose closesocket #define ns_sockioctl ioctlsocket #define ns_sockerrno GetLastError() #define ns_sockstrerror NsWin32ErrMsg #define strcasecmp _stricmp #define strncasecmp _strnicmp #define vsnprintf _vsnprintf #define snprintf _snprintf #define mkdir(d,m) _mkdir((d)) #define ftruncate(f,s) chsize((f),(s)) #define EINPROGRESS WSAEINPROGRESS #define EWOULDBLOCK WSAEWOULDBLOCK #define F_OK 0 #define W_OK 2 #define R_OK 4 #define X_OK R_OK #else #define O_TEXT 0 #define O_BINARY 0 #define SOCKET int #define INVALID_SOCKET (-1) #define SOCKET_ERROR (-1) #define NS_EXPORT #define ns_sockclose close #define ns_socknbclose close #define ns_sockioctl ioctl #define ns_sockerrno errno #define ns_sockstrerror strerror #define ns_sockdup dup #endif /* * C API macros. */ #define UCHAR(c) ((unsigned char)(c)) #define STREQ(a,b) (((*a) == (*b)) && (strcmp((a),(b)) == 0)) #define STRIEQ(a,b) (strcasecmp((a),(b)) == 0) #define Ns_IndexCount(X) ((X)->n) #define Ns_ListPush(elem,list) ((list)=Ns_ListCons((elem),(list))) #define Ns_ListFirst(list) ((list)->first) #define Ns_ListRest(list) ((list)->rest) #define Ns_SetSize(s) ((s)->size) #define Ns_SetName(s) ((s)->name) #define Ns_SetKey(s,i) ((s)->fields[(i)].name) #define Ns_SetValue(s,i) ((s)->fields[(i)].value) #define Ns_SetLast(s) (((s)->size)-1) /* * Ns_DString's are now equivalent to Tcl_DString's starting in 4.0. */ #define Ns_DString Tcl_DString #define Ns_DStringLength Tcl_DStringLength #define Ns_DStringValue Tcl_DStringValue #define Ns_DStringNAppend Tcl_DStringAppend #define Ns_DStringAppend(d,s) Tcl_DStringAppend((d), (s), -1) #define Ns_DStringAppendElement Tcl_DStringAppendElement #define Ns_DStringInit Tcl_DStringInit #define Ns_DStringFree Tcl_DStringFree #define Ns_DStringTrunc Tcl_DStringTrunc #define Ns_DStringSetLength Tcl_DStringSetLength /* * Typedefs of variables */ typedef struct _Ns_Cache *Ns_Cache; typedef struct _Ns_Entry *Ns_Entry; typedef Tcl_HashSearch Ns_CacheSearch; typedef struct _Ns_Cls *Ns_Cls; typedef void *Ns_OpContext; typedef struct _Ns_TaskQueue *Ns_TaskQueue; typedef struct _Ns_Task *Ns_Task; /* * This is used for logging messages. */ typedef enum { Notice, Warning, Error, Fatal, Bug, Debug, Dev } Ns_LogSeverity; /* * The following enum lists the possible HTTP headers * conversion options (default: Preserve). */ typedef enum { Preserve, ToLower, ToUpper } Ns_HeaderCaseDisposition; /* * Typedefs of functions */ typedef int (Ns_IndexCmpProc) (const void *, const void *); typedef int (Ns_SortProc) (void *, void *); typedef int (Ns_EqualProc) (void *, void *); typedef void (Ns_ElemVoidProc) (void *); typedef void *(Ns_ElemValProc) (void *); typedef int (Ns_ElemTestProc) (void *); typedef void (Ns_Callback) (void *arg); typedef int (Ns_TclInterpInitProc) (Tcl_Interp *interp, void *arg); typedef int (Ns_TclTraceProc) (Tcl_Interp *interp, void *arg); typedef void (Ns_TclDeferProc) (Tcl_Interp *interp, void *arg); typedef int (Ns_SockProc) (SOCKET sock, void *arg, int why); typedef void (Ns_TaskProc) (Ns_Task *task, SOCKET sock, void *arg, int why); typedef void (Ns_SchedProc) (void *arg, int id); typedef int (Ns_ServerInitProc) (char *server); typedef int (Ns_ModuleInitProc) (char *server, char *module); typedef int (Ns_RequestAuthorizeProc) (char *server, char *method, char *url, char *user, char *pass, char *peer); typedef void (Ns_AdpParserProc)(Ns_DString *outPtr, char *page); typedef int (Ns_UserAuthorizeProc) (char *user, char *passwd); typedef int (Ns_LogFlushProc) (char *msg, size_t len); typedef int (Ns_LogProc) (Ns_DString *dsPtr, Ns_LogSeverity severity, char * fmt, va_list ap); typedef int (Ns_GzipProc)(char *buf, int len, int level, Tcl_DString *dsPtr); /* * The field of a key-value data structure. */ typedef struct Ns_SetField { char *name; char *value; } Ns_SetField; /* * The key-value data structure. */ typedef struct Ns_Set { char *name; int size; int maxSize; Ns_SetField *fields; } Ns_Set; /* * The request structure. */ typedef struct Ns_Request { char *line; char *method; char *protocol; char *host; unsigned short port; char *url; char *query; int urlc; char **urlv; double version; } Ns_Request; /* * The connection structure. */ typedef struct Ns_Conn { Ns_Request *request; Ns_Set *headers; Ns_Set *outputheaders; char *authUser; char *authPasswd; int contentLength; int flags; /* Read-only: One or more NS_CONN_ bits which * specify the state of the connection. */ } Ns_Conn; /* * The following structure maintains data from an * updated form file. File content can be accessed * at the given offset and length from the bytes * returned by Ns_ConnContent. */ typedef struct Ns_ConnFile { char *name; Ns_Set *headers; off_t offset; off_t length; } Ns_ConnFile; /* * The index data structure. This is a linear array of values. */ typedef struct Ns_Index { void **el; Ns_IndexCmpProc *CmpEls; Ns_IndexCmpProc *CmpKeyWithEl; int n; int max; int inc; } Ns_Index; /* * A linked list data structure. */ typedef struct Ns_List { void *first; float weight; /* Between 0 and 1 */ struct Ns_List *rest; } Ns_List; /* * The following structure defines an I/O * scatter/gather buffer for WIN32. */ #ifdef _WIN32 struct iovec { u_long iov_len; /* the length of the buffer */ char FAR * iov_base; /* the pointer to the buffer */ }; #endif /* * The following structure defines a driver. */ typedef struct Ns_Driver { void *arg; /* Driver callback data. */ char *server; /* Virtual server name. */ char *module; /* Driver module. */ char *name; /* Driver name. */ char *location; /* Location, e.g, "http://foo:9090" */ char *address; /* Address in location. */ int sendwait; /* send() I/O timeout. */ int recvwait; /* recv() I/O timeout. */ int bufsize; /* Conn bufsize (0 for SSL) */ int sndbuf; /* setsockopt() SNDBUF option. */ int rcvbuf; /* setsockopt() RCVBUF option. */ } Ns_Driver; /* * The following structure defins the public * parts of the driver socket connection. */ typedef struct Ns_Sock { Ns_Driver *driver; SOCKET sock; void *arg; } Ns_Sock; /* * The following enum defines the commands which * the socket driver proc must handle. */ typedef enum { DriverRecv, DriverSend, DriverKeep, DriverClose } Ns_DriverCmd; /* * The following typedef defines a socket driver * callback. */ typedef int (Ns_DriverProc)(Ns_DriverCmd cmd, Ns_Sock *sock, struct iovec *bufs, int nbufs); /* * The following structure defines the values to initialize the driver. This is * passed to Ns_DriverInit. */ typedef struct Ns_DriverInitData { int version; /* Currently only version 1 exists */ char *name; /* This will show up in log file entries */ Ns_DriverProc *proc; int opts; void *arg; /* Module's driver callback data */ char *path; /* Path to find port, address, etc. */ } Ns_DriverInitData; /* * More typedefs of functions */ typedef void (Ns_ArgProc) (Tcl_DString *dsPtr, void *arg); typedef int (Ns_OpProc) (void *arg, Ns_Conn *conn); typedef void (Ns_TraceProc) (void *arg, Ns_Conn *conn); typedef int (Ns_FilterProc) (void *arg, Ns_Conn *conn, int why); typedef int (Ns_UrlToFileProc) (Ns_DString *dsPtr, char *server, char *url); typedef char *(Ns_LocationProc) (Ns_Conn *conn); typedef void (Ns_QueueWaitProc) (Ns_Conn *conn, SOCKET sock, void *arg, int why); /* * init.c: */ NS_EXTERN void Ns_LibInit(void); /* * adpparse.c: */ NS_EXTERN int Ns_AdpRegisterParser(char *extension, Ns_AdpParserProc *proc); /* * adprequest.c: */ NS_EXTERN int Ns_AdpRequest(Ns_Conn *conn, char *file); NS_EXTERN int Ns_AdpRequestEx(Ns_Conn *conn, char *file, Ns_Time *ttlPtr); /* * auth.c: */ NS_EXTERN int Ns_AuthorizeRequest(char *server, char *method, char *url, char *user, char *passwd, char *peer); NS_EXTERN void Ns_SetRequestAuthorizeProc(char *server, Ns_RequestAuthorizeProc *procPtr); NS_EXTERN void Ns_SetLocationProc(char *server, Ns_LocationProc *procPtr); NS_EXTERN void Ns_SetConnLocationProc(Ns_LocationProc *procPtr); NS_EXTERN void Ns_SetUserAuthorizeProc(Ns_UserAuthorizeProc *procPtr); NS_EXTERN int Ns_AuthorizeUser(char *user, char *passwd); /* * cache.c: */ NS_EXTERN Ns_Cache *Ns_CacheCreate(char *name, int keys, time_t timeout, Ns_Callback *freeProc); NS_EXTERN Ns_Cache *Ns_CacheCreateSz(char *name, int keys, size_t maxSize, Ns_Callback *freeProc); NS_EXTERN void Ns_CacheDestroy(Ns_Cache *cache); NS_EXTERN Ns_Cache *Ns_CacheFind(char *name); NS_EXTERN void *Ns_CacheMalloc(Ns_Cache *cache, size_t len) _nsmalloc; NS_EXTERN void Ns_CacheFree(Ns_Cache *cache, void *bytes); NS_EXTERN Ns_Entry *Ns_CacheFindEntry(Ns_Cache *cache, char *key); NS_EXTERN Ns_Entry *Ns_CacheCreateEntry(Ns_Cache *cache, char *key, int *newPtr); NS_EXTERN char *Ns_CacheName(Ns_Entry *entry); NS_EXTERN char *Ns_CacheKey(Ns_Entry *entry); NS_EXTERN void *Ns_CacheGetValue(Ns_Entry *entry); NS_EXTERN void Ns_CacheSetValue(Ns_Entry *entry, void *value); NS_EXTERN void Ns_CacheSetValueSz(Ns_Entry *entry, void *value, size_t size); NS_EXTERN void Ns_CacheUnsetValue(Ns_Entry *entry); NS_EXTERN void Ns_CacheDeleteEntry(Ns_Entry *entry); NS_EXTERN void Ns_CacheFlushEntry(Ns_Entry *entry); NS_EXTERN Ns_Entry *Ns_CacheFirstEntry(Ns_Cache *cache, Ns_CacheSearch *search); NS_EXTERN Ns_Entry *Ns_CacheNextEntry(Ns_CacheSearch *search); NS_EXTERN void Ns_CacheFlush(Ns_Cache *cache); NS_EXTERN void Ns_CacheLock(Ns_Cache *cache); NS_EXTERN int Ns_CacheTryLock(Ns_Cache *cache); NS_EXTERN void Ns_CacheUnlock(Ns_Cache *cache); NS_EXTERN int Ns_CacheTimedWait(Ns_Cache *cache, Ns_Time *timePtr); NS_EXTERN void Ns_CacheWait(Ns_Cache *cache); NS_EXTERN void Ns_CacheSignal(Ns_Cache *cache); NS_EXTERN void Ns_CacheBroadcast(Ns_Cache *cache); /* * callbacks.c: */ NS_EXTERN void *Ns_RegisterAtStartup(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterAtPreStartup(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterAtSignal(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterServerShutdown(char *server, Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterShutdown(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterAtServerShutdown(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterAtShutdown(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterAtReady(Ns_Callback *proc, void *arg); NS_EXTERN void *Ns_RegisterAtExit(Ns_Callback *proc, void *arg); /* * cls.c: */ NS_EXTERN void Ns_ClsAlloc(Ns_Cls *clsPtr, Ns_Callback *proc); NS_EXTERN void *Ns_ClsGet(Ns_Cls *clsPtr, Ns_Conn *conn); NS_EXTERN void Ns_ClsSet(Ns_Cls *clsPtr, Ns_Conn *conn, void *data); /* * compress.c: */ NS_EXTERN void Ns_SetGzipProc(Ns_GzipProc *procPtr); NS_EXTERN int Ns_Gzip(char *buf, int len, int level, Tcl_DString *dsPtr); /* * config.c: */ NS_EXTERN char *Ns_ConfigGetValue(char *section, char *key); NS_EXTERN char *Ns_ConfigGetValueExact(char *section, char *key); NS_EXTERN int Ns_ConfigGetInt(char *section, char *key, int *valuePtr); NS_EXTERN int Ns_ConfigGetInt64(char *section, char *key, ns_int64 *valuePtr); NS_EXTERN int Ns_ConfigGetBool(char *section, char *key, int *valuePtr); NS_EXTERN char *Ns_ConfigGetPath(char *server, char *module, ...); NS_EXTERN Ns_Set **Ns_ConfigGetSections(void); NS_EXTERN Ns_Set *Ns_ConfigGetSection(char *section); NS_EXTERN void Ns_GetVersion(int *major, int *minor, int *patch, int *type); /* * conn.c: */ NS_EXTERN int Ns_ConnClose(Ns_Conn *conn); NS_EXTERN int Ns_ConnInit(Ns_Conn *connPtr); NS_EXTERN int Ns_ConnId(Ns_Conn *connPtr); NS_EXTERN int Ns_ConnRead(Ns_Conn *conn, void *vbuf, int toread); NS_EXTERN int Ns_ConnWrite(Ns_Conn *conn, void *buf, int towrite); NS_EXTERN int Ns_ConnFlush(Ns_Conn *conn, char *buf, int len, int stream); NS_EXTERN int Ns_ConnFlushDirect(Ns_Conn *conn, char *buf, int len, int stream); NS_EXTERN int Ns_ConnContentFd(Ns_Conn *conn); NS_EXTERN int Ns_ConnContentOnDisk(Ns_Conn *conn); NS_EXTERN int Ns_ConnReadLine(Ns_Conn *conn, Ns_DString *dsPtr, int *nreadPtr); NS_EXTERN int Ns_WriteConn(Ns_Conn *conn, char *buf, int len); NS_EXTERN int Ns_WriteCharConn(Ns_Conn *conn, char *buf, int len); NS_EXTERN int Ns_ConnPuts(Ns_Conn *conn, char *string); NS_EXTERN int Ns_ConnSend(Ns_Conn *conn, struct iovec *bufs, int nbufs); NS_EXTERN int Ns_ConnSendDString(Ns_Conn *conn, Ns_DString *dsPtr); NS_EXTERN int Ns_ConnSendChannel(Ns_Conn *conn, Tcl_Channel chan, int nsend); NS_EXTERN int Ns_ConnSendFp(Ns_Conn *conn, FILE *fp, int nsend); NS_EXTERN int Ns_ConnSendFd(Ns_Conn *conn, int fd, int nsend); NS_EXTERN int Ns_ConnSendFdEx(Ns_Conn *conn, int fd, off_t off, int nsend); NS_EXTERN int Ns_ConnCopyToDString(Ns_Conn *conn, size_t ncopy, Ns_DString *dsPtr); NS_EXTERN int Ns_ConnCopyToChannel(Ns_Conn *conn, size_t ncopy, Tcl_Channel chan); NS_EXTERN int Ns_ConnCopyToFile(Ns_Conn *conn, size_t ncopy, FILE *fp); NS_EXTERN int Ns_ConnCopyToFd(Ns_Conn *conn, size_t ncopy, int fd); NS_EXTERN int Ns_ConnFlushContent(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetType(Ns_Conn *conn, char *type); NS_EXTERN char *Ns_ConnGetType(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetStatus(Ns_Conn *conn, int status); NS_EXTERN int Ns_ConnGetStatus(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetEncoding(Ns_Conn *conn, Tcl_Encoding encoding); NS_EXTERN Tcl_Encoding Ns_ConnGetEncoding(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetUrlEncoding(Ns_Conn *conn, Tcl_Encoding encoding); NS_EXTERN Tcl_Encoding Ns_ConnGetUrlEncoding(Ns_Conn *conn); NS_EXTERN int Ns_ConnModifiedSince(Ns_Conn *conn, time_t inTime); NS_EXTERN char *Ns_ConnGets(char *outBuffer, size_t inSize, Ns_Conn *conn); NS_EXTERN int Ns_ConnReadHeaders(Ns_Conn *conn, Ns_Set *set, int *nreadPtr); NS_EXTERN int Ns_ParseHeader(Ns_Set *set, char *header, Ns_HeaderCaseDisposition disp); NS_EXTERN int Ns_QueryToSet(char *query, Ns_Set *qset); NS_EXTERN Ns_Set *Ns_ConnHeaders(Ns_Conn *conn); NS_EXTERN Ns_Set *Ns_ConnOutputHeaders(Ns_Conn *conn); NS_EXTERN char *Ns_ConnAuthUser(Ns_Conn *conn); NS_EXTERN char *Ns_ConnAuthPasswd(Ns_Conn *conn); NS_EXTERN int Ns_ConnContentLength(Ns_Conn *conn); NS_EXTERN char *Ns_ConnContent(Ns_Conn *conn); NS_EXTERN char *Ns_ConnServer(Ns_Conn *conn); NS_EXTERN int Ns_ConnResponseStatus(Ns_Conn *conn); NS_EXTERN int Ns_ConnContentSent(Ns_Conn *conn); NS_EXTERN int Ns_ConnResponseLength(Ns_Conn *conn); NS_EXTERN Ns_Time *Ns_ConnStartTime(Ns_Conn *conn); NS_EXTERN char *Ns_ConnPeer(Ns_Conn *conn); NS_EXTERN int Ns_ConnPeerPort(Ns_Conn *conn); NS_EXTERN char *Ns_ConnLocation(Ns_Conn *conn); NS_EXTERN char *Ns_ConnHost(Ns_Conn *conn); NS_EXTERN int Ns_ConnPort(Ns_Conn *conn); NS_EXTERN int Ns_ConnSock(Ns_Conn *conn); NS_EXTERN char *Ns_ConnDriverName(Ns_Conn *conn); NS_EXTERN void *Ns_ConnDriverContext(Ns_Conn *conn); NS_EXTERN int Ns_ConnGetKeepAliveFlag(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetKeepAliveFlag(Ns_Conn *conn, int flag); NS_EXTERN int Ns_ConnGetWriteEncodedFlag(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetWriteEncodedFlag(Ns_Conn *conn, int flag); NS_EXTERN int Ns_ConnGetGzipFlag(Ns_Conn *conn); NS_EXTERN void Ns_ConnSetGzipFlag(Ns_Conn *conn, int flag); NS_EXTERN void Ns_ConnSetUrlEncoding(Ns_Conn *conn, Tcl_Encoding encoding); /* * crypt.c: */ NS_EXTERN char *Ns_Encrypt(char *pw, char *salt, char iobuf[ ]); /* * dns.c: */ NS_EXTERN int Ns_GetHostByAddr(Ns_DString *dsPtr, char *addr); NS_EXTERN int Ns_GetAddrByHost(Ns_DString *dsPtr, char *host); NS_EXTERN int Ns_GetAllAddrByHost(Ns_DString *dsPtr, char *host); /* * driver.c: */ NS_EXTERN int Ns_DriverInit(char *server, char *module, Ns_DriverInitData *init); NS_EXTERN void Ns_QueueWait(Ns_Conn *conn, SOCKET sock, Ns_QueueWaitProc *proc, void *arg, int when, Ns_Time *timePtr); /* * dstring.c: */ NS_EXTERN char **Ns_DStringAppendArgv(Ns_DString *dsPtr); NS_EXTERN char *Ns_DStringVarAppend(Ns_DString *dsPtr, ...); NS_EXTERN char *Ns_DStringExport(Ns_DString *dsPtr); NS_EXTERN char *Ns_DStringPrintf(Ns_DString *dsPtr, char *fmt,...) _nsprintflike(2,3); NS_EXTERN char *Ns_DStringVPrintf(Ns_DString *dsPtr, char *fmt, va_list ap); NS_EXTERN char *Ns_DStringAppendArg(Ns_DString *dsPtr, char *string); NS_EXTERN Ns_DString *Ns_DStringPop(void); NS_EXTERN void Ns_DStringPush(Ns_DString *dsPtr); /* * exec.c: */ NS_EXTERN int Ns_ExecProcess(char *exec, char *dir, int fdin, int fdout, char *args, Ns_Set *env); NS_EXTERN int Ns_ExecProc(char *exec, char **argv); NS_EXTERN int Ns_ExecArgblk(char *exec, char *dir, int fdin, int fdout, char *args, Ns_Set *env); NS_EXTERN int Ns_ExecArgv(char *exec, char *dir, int fdin, int fdout, char **argv, Ns_Set *env); NS_EXTERN int Ns_WaitProcess(int pid); NS_EXTERN int Ns_WaitForProcess(int pid, int *statusPtr); /* * fastpath.c: */ NS_EXTERN char *Ns_PageRoot(char *server); NS_EXTERN void Ns_SetUrlToFileProc(char *server, Ns_UrlToFileProc *procPtr); NS_EXTERN int Ns_UrlToFile(Ns_DString *dsPtr, char *server, char *url); NS_EXTERN int Ns_UrlIsFile(char *server, char *url); NS_EXTERN int Ns_UrlIsDir(char *server, char *url); NS_EXTERN int Ns_FastPathOp(void *arg, Ns_Conn *conn); /* * filter.c: */ NS_EXTERN void *Ns_RegisterFilter(char *server, char *method, char *URL, Ns_FilterProc *proc, int when, void *args); NS_EXTERN void *Ns_RegisterServerTrace(char *server, Ns_TraceProc *proc, void *arg); NS_EXTERN void *Ns_RegisterConnCleanup(char *server, Ns_TraceProc *proc, void *arg); NS_EXTERN void *Ns_RegisterCleanup(Ns_TraceProc *proc, void *arg); /* * htuu.c */ NS_EXTERN int Ns_HtuuEncode(unsigned char *string, unsigned int bufsize, char *buf); NS_EXTERN int Ns_HtuuDecode(char *string, unsigned char *buf, int bufsize); /* * index.c: */ NS_EXTERN void Ns_IndexInit(Ns_Index *indexPtr, int inc, int (*CmpEls) (const void *, const void *), int (*CmpKeyWithEl) (const void *, const void *)); NS_EXTERN void Ns_IndexTrunc(Ns_Index*indexPtr); NS_EXTERN void Ns_IndexDestroy(Ns_Index *indexPtr); NS_EXTERN Ns_Index *Ns_IndexDup(Ns_Index *indexPtr); NS_EXTERN void *Ns_IndexFind(Ns_Index *indexPtr, void *key); NS_EXTERN void *Ns_IndexFindInf(Ns_Index *indexPtr, void *key); NS_EXTERN void **Ns_IndexFindMultiple(Ns_Index *indexPtr, void *key); NS_EXTERN void Ns_IndexAdd(Ns_Index *indexPtr, void *el); NS_EXTERN void Ns_IndexDel(Ns_Index *indexPtr, void *el); NS_EXTERN void *Ns_IndexEl(Ns_Index *indexPtr, int i); NS_EXTERN void Ns_IndexStringInit(Ns_Index *indexPtr, int inc); NS_EXTERN Ns_Index *Ns_IndexStringDup(Ns_Index *indexPtr); NS_EXTERN void Ns_IndexStringAppend(Ns_Index *addtoPtr, Ns_Index *addfromPtr); NS_EXTERN void Ns_IndexStringDestroy(Ns_Index *indexPtr); NS_EXTERN void Ns_IndexStringTrunc(Ns_Index *indexPtr); NS_EXTERN void Ns_IndexIntInit(Ns_Index *indexPtr, int inc); /* * see macros above for: * * Ns_IndexCount(X) */ /* * lisp.c: */ NS_EXTERN Ns_List *Ns_ListNconc(Ns_List *l1Ptr, Ns_List *l2Ptr); NS_EXTERN Ns_List *Ns_ListCons(void *elem, Ns_List *lPtr); NS_EXTERN Ns_List *Ns_ListNreverse(Ns_List *lPtr); NS_EXTERN Ns_List *Ns_ListLast(Ns_List *lPtr); NS_EXTERN void Ns_ListFree(Ns_List *lPtr, Ns_ElemVoidProc *freeProc); NS_EXTERN void Ns_IntPrint(int d); NS_EXTERN void Ns_StringPrint(char *s); NS_EXTERN void Ns_ListPrint(Ns_List *lPtr, Ns_ElemVoidProc *printProc); NS_EXTERN Ns_List *Ns_ListCopy(Ns_List *lPtr); NS_EXTERN int Ns_ListLength(Ns_List *lPtr); NS_EXTERN Ns_List *Ns_ListWeightSort(Ns_List *wPtr); NS_EXTERN Ns_List *Ns_ListSort(Ns_List *wPtr, Ns_SortProc *sortProc); NS_EXTERN Ns_List *Ns_ListDeleteLowElements(Ns_List *mPtr, float minweight); NS_EXTERN Ns_List *Ns_ListDeleteWithTest(void *elem, Ns_List *lPtr, Ns_EqualProc *equalProc); NS_EXTERN Ns_List *Ns_ListDeleteIf(Ns_List *lPtr, Ns_ElemTestProc *testProc); NS_EXTERN Ns_List *Ns_ListDeleteDuplicates(Ns_List *lPtr, Ns_EqualProc *equalProc); NS_EXTERN Ns_List *Ns_ListNmapcar(Ns_List *lPtr, Ns_ElemValProc *valProc); NS_EXTERN Ns_List *Ns_ListMapcar(Ns_List *lPtr, Ns_ElemValProc *valProc); /* * see macros above for: * * Ns_ListPush(elem,list) * Ns_ListFirst(list) * Ns_ListRest(list) */ /* * rand.c: */ NS_EXTERN void Ns_GenSeeds(unsigned long *seedsPtr, int nseeds); NS_EXTERN double Ns_DRand(void); /* * task.c: */ NS_EXTERN Ns_TaskQueue *Ns_CreateTaskQueue(char *name); NS_EXTERN void Ns_DestroyTaskQueue(Ns_TaskQueue *queue); NS_EXTERN Ns_Task *Ns_TaskCreate(SOCKET sock, Ns_TaskProc *proc, void *arg); NS_EXTERN int Ns_TaskEnqueue(Ns_Task *task, Ns_TaskQueue *queue); NS_EXTERN void Ns_TaskRun(Ns_Task *task); NS_EXTERN void Ns_TaskCallback(Ns_Task *task, int when, Ns_Time *timeoutPtr); NS_EXTERN void Ns_TaskDone(Ns_Task *task); NS_EXTERN int Ns_TaskCancel(Ns_Task *task); NS_EXTERN int Ns_TaskWait(Ns_Task *task, Ns_Time *timeoutPtr); NS_EXTERN SOCKET Ns_TaskFree(Ns_Task *task); /* * tclobj.c: */ NS_EXTERN void Ns_TclSetTimeObj(Tcl_Obj *objPtr, Ns_Time *timePtr); NS_EXTERN int Ns_TclGetTimeFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Ns_Time *timePtr); /* * tclthread.c: */ NS_EXTERN int Ns_TclThread(Tcl_Interp *interp, char *script, Ns_Thread *thrPtr); NS_EXTERN int Ns_TclDetachedThread(Tcl_Interp *interp, char *script); /* * tclxkeylist.c: */ NS_EXTERN int TclX_KeyedListDelete (Tcl_Interp *interp, Tcl_Obj *keylPtr, char *key); NS_EXTERN int TclX_KeyedListGet (Tcl_Interp *interp, Tcl_Obj *keylPtr, char *key, Tcl_Obj **valuePtrPtr); NS_EXTERN int TclX_KeyedListGetKeys (Tcl_Interp *interp, Tcl_Obj *keylPtr, char *key, Tcl_Obj **listObjPtrPtr); NS_EXTERN int TclX_KeyedListSet (Tcl_Interp *interp, Tcl_Obj *keylPtr, char *key, Tcl_Obj *valuePtr); /* * listen.c: */ NS_EXTERN int Ns_SockListenCallback(char *addr, int port, Ns_SockProc *proc, void *arg); NS_EXTERN int Ns_SockPortBound(int port); /* * log.c: */ NS_EXTERN char *Ns_InfoErrorLog(void); NS_EXTERN int Ns_LogRoll(void); NS_EXTERN void Ns_Log(Ns_LogSeverity severity, char *fmt, ...) _nsprintflike(2,3); NS_EXTERN void Ns_Fatal(char *fmt, ...) _nsprintflike(1,2); NS_EXTERN char *Ns_LogTime(char *timeBuf); NS_EXTERN char *Ns_LogTime2(char *timeBuf, int gmt); NS_EXTERN int Ns_RollFile(char *file, int max); NS_EXTERN int Ns_PurgeFiles(char *file, int max); NS_EXTERN int Ns_RollFileByDate(char *file, int max); NS_EXTERN void Ns_SetLogFlushProc(Ns_LogFlushProc *procPtr); NS_EXTERN void Ns_SetNsLogProc(Ns_LogProc *procPtr); /* * nsmain.c: */ NS_EXTERN int Ns_Main(int argc, char **argv, Ns_ServerInitProc *initProc); NS_EXTERN int Ns_WaitForStartup(void); /* * info.c: */ NS_EXTERN char *Ns_InfoHomePath(void); NS_EXTERN char *Ns_InfoServerName(void); NS_EXTERN char *Ns_InfoServerVersion(void); NS_EXTERN char *Ns_InfoConfigFile(void); NS_EXTERN int Ns_InfoPid(void); NS_EXTERN char *Ns_InfoNameOfExecutable(void); NS_EXTERN char *Ns_InfoPlatform(void); NS_EXTERN int Ns_InfoUptime(void); NS_EXTERN int Ns_InfoBootTime(void); NS_EXTERN char *Ns_InfoHostname(void); NS_EXTERN char *Ns_InfoAddress(void); NS_EXTERN char *Ns_InfoBuildDate(void); NS_EXTERN int Ns_InfoShutdownPending(void); NS_EXTERN int Ns_InfoStarted(void); NS_EXTERN int Ns_InfoServersStarted(void); NS_EXTERN char *Ns_InfoLabel(void); NS_EXTERN char *Ns_InfoTag(void); /* * mimetypes.c: */ NS_EXTERN char *Ns_GetMimeType(char *file); /* * encoding.c: */ NS_EXTERN Tcl_Encoding Ns_GetEncoding(char *name); NS_EXTERN Tcl_Encoding Ns_GetFileEncoding(char *file); NS_EXTERN Tcl_Encoding Ns_GetTypeEncoding(char *type); NS_EXTERN char *Ns_FindCharset(char *type, int *lenPtr); NS_EXTERN Tcl_Encoding Ns_GetCharsetEncoding(char *charset); NS_EXTERN Tcl_Encoding Ns_GetCharsetEncodingEx(char *charset, int len); /* * modload.c: */ NS_EXTERN int Ns_ModuleLoad(char *server, char *module, char *file, char *init); NS_EXTERN void *Ns_ModuleSymbol(char *file, char *name); NS_EXTERN void *Ns_ModuleGetSymbol(char *name); NS_EXTERN void Ns_RegisterModule(char *name, Ns_ModuleInitProc *prco); /* * nsthread.c: */ NS_EXTERN void Ns_SetThreadServer(char *server); NS_EXTERN char *Ns_GetThreadServer(void); /* * op.c: */ NS_EXTERN void Ns_RegisterRequest(char *server, char *method, char *url, Ns_OpProc *procPtr, Ns_Callback *deleteProcPtr, void *arg, int flags); NS_EXTERN void Ns_GetRequest(char *server, char *method, char *url, Ns_OpProc **procPtrPtr, Ns_Callback **deleteProcPtrPtr, void **argPtr, int *flagsPtr); NS_EXTERN void Ns_UnRegisterRequest(char *server, char *method, char *url, int inherit); NS_EXTERN int Ns_ConnRunRequest(Ns_Conn *conn); NS_EXTERN int Ns_ConnRedirect(Ns_Conn *conn, char *url); /* * pathname.c: */ NS_EXTERN int Ns_PathIsAbsolute(char *path); NS_EXTERN char *Ns_HomePath(Ns_DString *dsPtr, ...); NS_EXTERN char *Ns_LibPath(Ns_DString *dsPtr, ...); NS_EXTERN char *Ns_BinPath(Ns_DString *dsPtr, ...); NS_EXTERN char *Ns_ModulePath(Ns_DString *dsPtr, char *server, char *module, ...); NS_EXTERN char *Ns_MakePath(Ns_DString *dsPtr, ...); NS_EXTERN char *Ns_NormalizePath(Ns_DString *dsPtr, char *path); /* * proc.c: */ NS_EXTERN void Ns_RegisterProcDesc(void *procAddr, char *desc); NS_EXTERN void Ns_RegisterProcInfo(void *procAddr, char *desc, Ns_ArgProc *argProc); NS_EXTERN void Ns_GetProcInfo(Tcl_DString *dsPtr, void *procAddr, void *arg); /* * queue.c: */ NS_EXTERN Ns_Conn *Ns_GetConn(void); /* * quotehtml.c: */ NS_EXTERN void Ns_QuoteHtml(Ns_DString *pds, char *string); /* * request.c: */ NS_EXTERN void Ns_FreeRequest(Ns_Request *request); NS_EXTERN Ns_Request *Ns_ParseRequest(char *line); NS_EXTERN Ns_Request *Ns_ParseRequestEx(char *line, Tcl_Encoding encoding); NS_EXTERN char *Ns_SkipUrl(Ns_Request *request, int n); NS_EXTERN void Ns_SetRequestUrl(Ns_Request *request, char *url); /* * return.c: */ NS_EXTERN void Ns_RegisterReturn(int status, char *url); NS_EXTERN void Ns_RegisterRedirect(char *server, int status, char *url); NS_EXTERN void Ns_ConnConstructHeaders(Ns_Conn *conn, Ns_DString *dsPtr); NS_EXTERN void Ns_ConnQueueHeaders(Ns_Conn *conn, int status); NS_EXTERN int Ns_ConnFlushHeaders(Ns_Conn *conn, int status); NS_EXTERN void Ns_ConnSetHeaders(Ns_Conn *conn, char *field, char *value); NS_EXTERN void Ns_ConnCondSetHeaders(Ns_Conn *conn, char *field, char *value); NS_EXTERN void Ns_ConnReplaceHeaders(Ns_Conn *conn, Ns_Set *newheaders); NS_EXTERN void Ns_ConnSetRequiredHeaders(Ns_Conn *conn, char *type, int length); NS_EXTERN void Ns_ConnSetTypeHeader(Ns_Conn *conn, char *type); NS_EXTERN void Ns_ConnSetLengthHeader(Ns_Conn *conn, int length); NS_EXTERN void Ns_ConnSetLastModifiedHeader(Ns_Conn *conn, time_t *mtime); NS_EXTERN void Ns_ConnSetExpiresHeader(Ns_Conn *conn, char *expires); NS_EXTERN int Ns_ConnPrintfHeader(Ns_Conn *conn, char *fmt,...) _nsprintflike(2,3); NS_EXTERN int Ns_ConnResetReturn(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnAdminNotice(Ns_Conn *conn, int status, char *title, char *notice); NS_EXTERN int Ns_ConnReturnNotice(Ns_Conn *conn, int status, char *title, char *notice); NS_EXTERN int Ns_ConnReturnData(Ns_Conn *conn, int status, char *data, int len, char *type); NS_EXTERN int Ns_ConnReturnCharData(Ns_Conn *conn, int status, char *data, int len, char *type); NS_EXTERN int Ns_ConnReturnHtml(Ns_Conn *conn, int status, char *html, int len); NS_EXTERN int Ns_ConnReturnOk(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnNoResponse(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnRedirect(Ns_Conn *conn, char *url); NS_EXTERN int Ns_ConnReturnBadRequest(Ns_Conn *conn, char *reason); NS_EXTERN int Ns_ConnReturnUnauthorized(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnForbidden(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnNotFound(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnNotModified(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnNotImplemented(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnInternalError(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnServiceUnavailable(Ns_Conn *conn); NS_EXTERN int Ns_ConnReturnStatus(Ns_Conn *conn, int status); NS_EXTERN int Ns_ConnReturnOpenChannel(Ns_Conn *conn, int status, char *type, Tcl_Channel chan, int len); NS_EXTERN int Ns_ConnReturnOpenFile(Ns_Conn *conn, int status, char *type, FILE *fp, int len); NS_EXTERN int Ns_ConnReturnOpenFd(Ns_Conn *conn, int status, char *type, int fd, int len); NS_EXTERN int Ns_ConnReturnOpenFdEx(Ns_Conn *conn, int status, char *type, int fd, off_t off, int len); NS_EXTERN int Ns_ConnReturnFile(Ns_Conn *conn, int status, char *type, char *filename); /* * sched.c: */ NS_EXTERN int Ns_After(int seconds, Ns_Callback *proc, void *arg, Ns_Callback *deleteProc); NS_EXTERN int Ns_Cancel(int id); NS_EXTERN int Ns_Pause(int id); NS_EXTERN int Ns_Resume(int id); NS_EXTERN int Ns_ScheduleProc(Ns_Callback *proc, void *arg, int thread, int interval); NS_EXTERN int Ns_ScheduleDaily(Ns_SchedProc *proc, void *arg, int flags, int hour, int minute, Ns_SchedProc *cleanupProc); NS_EXTERN int Ns_ScheduleWeekly(Ns_SchedProc *proc, void *arg, int flags, int day, int hour, int minute, Ns_SchedProc *cleanupProc); NS_EXTERN int Ns_ScheduleProcEx(Ns_SchedProc *proc, void *arg, int flags, int interval, Ns_SchedProc *cleanupProc); NS_EXTERN void Ns_UnscheduleProc(int id); /* * set.c: */ NS_EXTERN void Ns_SetUpdate(Ns_Set *set, char *key, char *value); NS_EXTERN Ns_Set *Ns_SetCreate(char *name); NS_EXTERN void Ns_SetFree(Ns_Set *set); NS_EXTERN int Ns_SetPut(Ns_Set *set, char *key, char *value); NS_EXTERN int Ns_SetUniqueCmp(Ns_Set *set, char *key, int (*cmp) (char *s1, char *s2)); NS_EXTERN int Ns_SetFindCmp(Ns_Set *set, char *key, int (*cmp) (char *s1, char *s2)); NS_EXTERN char *Ns_SetGetCmp(Ns_Set *set, char *key, int (*cmp) (char *s1, char *s2)); NS_EXTERN int Ns_SetUnique(Ns_Set *set, char *key); NS_EXTERN int Ns_SetIUnique(Ns_Set *set, char *key); NS_EXTERN int Ns_SetFind(Ns_Set *set, char *key); NS_EXTERN int Ns_SetIFind(Ns_Set *set, char *key); NS_EXTERN char *Ns_SetGet(Ns_Set *set, char *key); NS_EXTERN char *Ns_SetIGet(Ns_Set *set, char *key); NS_EXTERN void Ns_SetTrunc(Ns_Set *set, int size); NS_EXTERN void Ns_SetDelete(Ns_Set *set, int index); NS_EXTERN void Ns_SetPutValue(Ns_Set *set, int index, char *value); NS_EXTERN void Ns_SetDeleteKey(Ns_Set *set, char *key); NS_EXTERN void Ns_SetIDeleteKey(Ns_Set *set, char *key); NS_EXTERN Ns_Set *Ns_SetListFind(Ns_Set **sets, char *name); NS_EXTERN Ns_Set **Ns_SetSplit(Ns_Set *set, char sep); NS_EXTERN void Ns_SetListFree(Ns_Set **sets); NS_EXTERN void Ns_SetMerge(Ns_Set *high, Ns_Set *low); NS_EXTERN Ns_Set *Ns_SetCopy(Ns_Set *old); NS_EXTERN void Ns_SetMove(Ns_Set *to, Ns_Set *from); NS_EXTERN void Ns_SetPrint(Ns_Set *set); /* * see macros above for: * * Ns_SetSize(s) * Ns_SetName(s) * Ns_SetKey(s,i) * Ns_SetValue(s,i) * Ns_SetLast(s) */ /* * sock.c: */ NS_EXTERN int Ns_SockRecv(SOCKET sock, void *vbuf, int nrecv, int timeout); NS_EXTERN int Ns_SockSend(SOCKET sock, void *vbuf, int nsend, int timeout); NS_EXTERN int Ns_SockWait(SOCKET sock, int what, int timeout); NS_EXTERN int Ns_SockWaitEx(SOCKET sock, int what, int ms); NS_EXTERN SOCKET Ns_BindSock(struct sockaddr_in *psa); NS_EXTERN SOCKET Ns_SockBind(struct sockaddr_in *psa); NS_EXTERN SOCKET Ns_SockListen(char *address, int port); NS_EXTERN SOCKET Ns_SockListenEx(char *address, int port, int backlog); NS_EXTERN SOCKET Ns_SockAccept(SOCKET sock, struct sockaddr *psa, int *lenPtr); NS_EXTERN SOCKET Ns_SockConnect(char *host, int port); NS_EXTERN SOCKET Ns_SockConnect2(char *host, int port, char *lhost, int lport); NS_EXTERN SOCKET Ns_SockAsyncConnect(char *host, int port); NS_EXTERN SOCKET Ns_SockAsyncConnect2(char *host, int port, char *lhost, int lport); NS_EXTERN SOCKET Ns_SockTimedConnect(char *host, int port, int timeout); NS_EXTERN SOCKET Ns_SockTimedConnect2(char *host, int port, char *lhost, int lport, int timeout); NS_EXTERN int Ns_SockSetNonBlocking(SOCKET sock); NS_EXTERN int Ns_SockSetBlocking(SOCKET sock); NS_EXTERN int Ns_GetSockAddr(struct sockaddr_in *psa, char *host, int port); NS_EXTERN int Ns_SockCloseLater(SOCKET sock); NS_EXTERN char *Ns_SockError(void); NS_EXTERN int Ns_SockErrno(void); NS_EXTERN void Ns_ClearSockErrno(void); NS_EXTERN int Ns_GetSockErrno(void); NS_EXTERN void Ns_SetSockErrno(int err); NS_EXTERN char *Ns_SockStrError(int err); /* * sockcallback.c: */ NS_EXTERN int Ns_SockCallback(SOCKET sock, Ns_SockProc *proc, void *arg, int when); NS_EXTERN void Ns_SockCancelCallback(SOCKET sock); NS_EXTERN int Ns_SockCancelCallbackEx(SOCKET sock, Ns_SockProc *proc, void *arg); /* * str.c: */ NS_EXTERN char *Ns_StrTrim(char *string); NS_EXTERN char *Ns_StrTrimLeft(char *string); NS_EXTERN char *Ns_StrTrimRight(char *string); NS_EXTERN char *Ns_StrToLower(char *string); NS_EXTERN char *Ns_StrToUpper(char *string); NS_EXTERN char *Ns_StrCaseFind(char *s1, char *s2); NS_EXTERN char *Ns_Match(char *a, char *b); NS_EXTERN char *Ns_NextWord(char *line); NS_EXTERN char *Ns_StrNStr(char *pattern, char *expression); /* * tclenv.c: */ NS_EXTERN char **Ns_CopyEnviron(Ns_DString *dsPtr); NS_EXTERN char **Ns_GetEnviron(void); /* * tclfile.c: */ NS_EXTERN int Ns_TclGetOpenChannel(Tcl_Interp *interp, char *chanId, int write, int check, Tcl_Channel *chanPtr); NS_EXTERN int Ns_TclGetOpenFd(Tcl_Interp *interp, char *chanId, int write, int *fdPtr); /* * tclinit.c: */ NS_EXTERN int Ns_TclInit(Tcl_Interp *interp); NS_EXTERN int Nsd_Init(Tcl_Interp *interp); NS_EXTERN int Ns_TclInitInterps(char *server, Ns_TclInterpInitProc *proc, void *arg); NS_EXTERN int Ns_TclInitModule(char *server, char *module); NS_EXTERN void Ns_TclRegisterDeferred(Tcl_Interp *interp, Ns_TclDeferProc *proc, void *arg); NS_EXTERN void Ns_TclMarkForDelete(Tcl_Interp *interp); NS_EXTERN Tcl_Interp *Ns_TclCreateInterp(void); NS_EXTERN void Ns_TclDestroyInterp(Tcl_Interp *interp); NS_EXTERN Tcl_Interp *Ns_TclAllocateInterp(char *server); NS_EXTERN void Ns_TclDeAllocateInterp(Tcl_Interp *interp); NS_EXTERN char *Ns_TclLibrary(char *server); NS_EXTERN char *Ns_TclInterpServer(Tcl_Interp *interp); NS_EXTERN Ns_Conn *Ns_TclGetConn(Tcl_Interp *interp); NS_EXTERN int Ns_TclRegisterAtCreate(Ns_TclTraceProc *proc, void *arg); NS_EXTERN int Ns_TclRegisterAtCleanup(Ns_TclTraceProc *proc, void *arg); NS_EXTERN int Ns_TclRegisterAtDelete(Ns_TclTraceProc *proc, void *arg); NS_EXTERN int Ns_TclRegisterTrace(char *server, Ns_TclTraceProc *proc, void *arg, int when); /* * tclop.c: */ NS_EXTERN int Ns_TclRequest(Ns_Conn *conn, char *proc); NS_EXTERN int Ns_TclEval(Ns_DString *pds, char *server, char *script); NS_EXTERN char *Ns_TclLogError(Tcl_Interp *interp); NS_EXTERN char *Ns_TclLogErrorRequest(Tcl_Interp *interp, Ns_Conn *conn); NS_EXTERN Tcl_Interp *Ns_GetConnInterp(Ns_Conn *conn); NS_EXTERN void Ns_FreeConnInterp(Ns_Conn *conn); /* * tclset.c: */ NS_EXTERN int Ns_TclEnterSet(Tcl_Interp *interp, Ns_Set *set, int flags); NS_EXTERN Ns_Set *Ns_TclGetSet(Tcl_Interp *interp, char *setId); NS_EXTERN int Ns_TclGetSet2(Tcl_Interp *interp, char *setId, Ns_Set **setPtrPtr); NS_EXTERN int Ns_TclFreeSet(Tcl_Interp *interp, char *setId); /* * time.c: */ NS_EXTERN char *Ns_HttpTime(Ns_DString *pds, time_t *when); NS_EXTERN time_t Ns_ParseHttpTime(char *str); /* * url.c: */ NS_EXTERN char *Ns_RelativeUrl(char *url, char *location); NS_EXTERN int Ns_ParseUrl(char *url, char **pprotocol, char **phost, char **pport, char **ppath, char **ptail); NS_EXTERN int Ns_AbsoluteUrl(Ns_DString *pds, char *url, char *baseurl); /* * urlencode.c: */ NS_EXTERN char *Ns_EncodeUrlWithEncoding(Ns_DString *pds, char *string, Tcl_Encoding encoding); NS_EXTERN char *Ns_DecodeUrlWithEncoding(Ns_DString *pds, char *string, Tcl_Encoding encoding); NS_EXTERN char *Ns_EncodeUrlCharset(Ns_DString *pds, char *string, char *charset); NS_EXTERN char *Ns_DecodeUrlCharset(Ns_DString *pds, char *string, char *charset); /* * urlopen.c: */ NS_EXTERN int Ns_FetchPage(Ns_DString *pds, char *url, char *server); NS_EXTERN int Ns_FetchURL(Ns_DString *pds, char *url, Ns_Set *headers); /* * urlspace.c: */ NS_EXTERN int Ns_UrlSpecificAlloc(void); NS_EXTERN void Ns_UrlSpecificSet(char *handle, char *method, char *url, int id, void *data, int flags, void (*deletefunc) (void *)); NS_EXTERN void *Ns_UrlSpecificGet(char *handle, char *method, char *url, int id); NS_EXTERN void *Ns_UrlSpecificGetFast(char *handle, char *method, char *url, int id); NS_EXTERN void *Ns_UrlSpecificGetExact(char *handle, char *method, char *url, int id, int flags); NS_EXTERN void *Ns_UrlSpecificDestroy(char *handle, char *method, char *url, int id, int flags); NS_EXTERN int Ns_ServerSpecificAlloc(void); NS_EXTERN void Ns_ServerSpecificSet(char *handle, int id, void *data, int flags, void (*deletefunc) (void *)); NS_EXTERN void *Ns_ServerSpecificGet(char *handle, int id); NS_EXTERN void *Ns_ServerSpecificDestroy(char *handle, int id, int flags); /* * fd.c: */ NS_EXTERN int Ns_CloseOnExec(int fd); NS_EXTERN int Ns_NoCloseOnExec(int fd); NS_EXTERN int Ns_DupHigh(int *fdPtr); NS_EXTERN int Ns_DevNull(void); NS_EXTERN int Ns_GetTemp(void); NS_EXTERN void Ns_ReleaseTemp(int fd); NS_EXTERN int ns_sockpair(SOCKET *socks); NS_EXTERN int ns_pipe(int *fds); /* * unix.c, win32.c: */ NS_EXTERN int Ns_GetUserHome(Ns_DString *pds, char *user); NS_EXTERN int Ns_GetGid(char *group); NS_EXTERN int Ns_GetUserGid(char *user); NS_EXTERN int Ns_GetUid(char *user); /* * form.c: */ NS_EXTERN Ns_Set *Ns_ConnGetQuery(Ns_Conn *conn); NS_EXTERN void Ns_ConnClearQuery(Ns_Conn *conn); NS_EXTERN Ns_ConnFile *Ns_ConnGetFile(Ns_Conn *conn, char *file); NS_EXTERN Ns_ConnFile *Ns_ConnFirstFile(Ns_Conn *conn, Tcl_HashSearch *searchPtr); NS_EXTERN Ns_ConnFile *Ns_ConnNextFile(Tcl_HashSearch *searchPtr); /* * Compatibility macros. */ #ifndef NS_NOCOMPAT #define DllExport NS_EXPORT #define Ns_Select select #define Ns_InfoHome() Ns_InfoHomePath() #define Ns_InfoServer() Ns_InfoServerName() #define Ns_InfoVersion() Ns_InfoServerVersion() #define Ns_RequestAuthorize(s,m,u,au,ap,p) Ns_AuthorizeRequest(s,m,u,au,ap,p) #define Ns_RequestFree(r) Ns_FreeRequest(r) #define Ns_ResetReturn(c) Ns_ConnResetReturn(c) #define Ns_PutsConn(c,s) Ns_ConnPuts(c,s) #define Ns_PrintfHeader Ns_ConnPrintfHeader #define Ns_ExpiresHeader(c,h) Ns_ConnSetExpiresHeader(c,h) #define Ns_ReturnHtml(c,s,h,l) Ns_ConnReturnHtml(c,s,h,l) #define Ns_ReturnOk(c) Ns_ConnReturnOk(c) #define Ns_ReturnNoResponse(c) Ns_ConnReturnNoResponse(c) #define Ns_ReturnRedirect(c,l) Ns_ConnReturnRedirect(c,l) #define Ns_ReturnNotModified(c) Ns_ConnReturnNotModified(c) #define Ns_ReturnBadRequest(c,r) Ns_ConnReturnBadRequest(c,r) #define Ns_ReturnUnauthorized(c) Ns_ConnReturnUnauthorized(c) #define Ns_ReturnForbidden(c) Ns_ConnReturnForbidden(c) #define Ns_ReturnNotFound(c) Ns_ConnReturnNotFound(c) #define Ns_ReturnInternalError(c) Ns_ConnReturnInternalError(c) #define Ns_ReturnServiceUnavailable(c) Ns_ConnReturnServiceUnavailable(c) #define Ns_ReturnNotImplemented(c) Ns_ConnReturnNotImplemented(c) #define Ns_ReturnStatus(c,s) Ns_ConnReturnStatus(c,s) #define Ns_TypeHeader(c,t) Ns_ConnSetTypeHeader(c,t) #define Ns_LengthHeader(c,l) Ns_ConnSetLengthHeader(c,l) #define Ns_LastModifiedHeader(c,w) Ns_ConnSetLastModifiedHeader(c,w) #define Ns_ReturnFile(c,s,t,f) Ns_ConnReturnFile(c,s,t,f) #define Ns_ReturnOpenFile(c,s,t,f,l) Ns_ConnReturnOpenFile(c,s,t,f,l) #define Ns_ReturnNotice(c,s,t,m) Ns_ConnReturnNotice(c,s,t,m) #define Ns_ReturnAdminNotice(c,s,t,m) Ns_ConnReturnAdminNotice(c,s,t,m) #define Ns_HeadersFlush(c,s) Ns_ConnFlushHeaders(c,s) #define Ns_HeadersPut(Nc,f,v) Ns_ConnSetHeaders(Nc,f,v) #define Ns_HeadersCondPut(c,f,v) Ns_ConnCondSetHeaders(c,f,v) #define Ns_HeadersReplace(c,n) Ns_ConnReplaceHeaders(c,n) #define Ns_HeadersRequired(c,t,l) Ns_ConnSetRequiredHeaders(c,t,l) #define Ns_ConfigPath Ns_ConfigGetPath #define Ns_ConfigSection(s) Ns_ConfigGetSection(s) #define Ns_ConfigSections() Ns_ConfigGetSections() #define Ns_ConfigGet(s,k) Ns_ConfigGetValue(s,k) #define Ns_ConfigGetExact(s,k) Ns_ConfigGetValueExact(s,k) #define Ns_UrlEncode(p,u) Ns_EncodeUrlCharset(p,u,NULL) #define Ns_UrlDecode(p,u) Ns_DecodeUrlCharset(p,u,NULL) #define Ns_EncodeUrl(p,u) Ns_EncodeUrlCharset(p,u,NULL) #define Ns_DecodeUrl(p,u) Ns_DecodeUrlCharset(p,u,NULL) #endif #endif /* NS_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/ns-mak.inc�����������������������������������������������������������������0000644�0001750�0001750�00000014101�10301232124�016714� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/include/ns-mak.inc,v 1.3 2005/08/19 01:22:28 jgdavidson Exp $ # # ns.mak -- # # Common nmake file for AOLserver Win32 builds. # # Usage: # # Create a stub makefile which defines one or more of the following # and includes this file: # # DLL Basename of a DLL, e.g., "DLL=myapi" builds "myapi.dll" and # "myapi.lib". # # PGM Basename of a program, e.g., "PGM=mybin" builds "mybin.exe". # # MOD On Windows, equivalent to a DLL along with support of MODINIT. # # OBJS List of objects to be built for DLL or MOD. # # PGMOBJS List of objects for PGM. The program will also be linked # against a DLL, if any. # # MODINIT Name of module entry point, e.g., "MODINIT=MyMod_ModInit". # Causes $(MOD)-mod.obj to be added to OBJS list. # # In addition, you can also define: # # AOLSERVER # Installation directory of AOLserver (default "c:\aolserver"). # TCLINC Path to Tcl header files. # TCLLIB Path to Tcl library. # TCLSH Path to tclsh binary. # DEBUG Set to 1 for debug build, 0 for release (default 1). # DEFS Additional CFLAGS, e.g., "/D MYDLL_EXPORTS.". # LIBS Additional libraries, e.g., "/LIBPATH:c:\fun fun.lib" # INSTALL Additional install directives, e.g., "install-config". # SRCDIR Location of AOLserver sources used during build of core. # # # # Defaults from configure.bat # !ifndef AOLSERVER AOLSERVER = $(CONFIG_AOLSERVER) !endif !ifndef DEBUG DEBUG = $(CONFIG_DEBUG) !endif !ifndef TCLSH TCLSH =$(CONFIG_TCLSH) !endif !ifndef TCLINC TCLINC = $(CONFIG_TCLINC) !endif !ifndef TCLLIB TCLLIB =$(CONFIG_TCLLIB) !endif # # Install directories. # INSTBIN = "$(AOLSERVER)\bin" INSTLIB = "$(AOLSERVER)\lib" INSTINC = "$(AOLSERVER)\include" # # Common compiler and linker options. # COPTS = /EHsc /W3 /nologo /c DEFS = $(DEFS) /D "_WINDOWS" /D "TCL_THREADS=1" /D "WIN32" \ /D "FD_SETSIZE=128" /D "NO_CONST=1" /D "_MBCS" LOPTS = /NOLOGO /SUBSYSTEM:CONSOLE /OPT:NOREF /OPT:NOWIN98 /OPT:NOICF # # Variables for building a module with cooresponding DLL. # !ifdef MOD DLL = $(MOD) MODBIN = $(MOD)-mod.dll BUILD = $(BUILD) $(MODBIN) INSTALL = $(INSTALL) install-mod CLEAN = $(CLEAN) clean-mod !ifdef MODINIT MODOBJS = $(MODOBJS) $(MODOBJ) !endif !endif # # Variables for building a DLL. # !ifdef DLL DLLBIN = $(DLL).dll DLLLIB = $(DLL).lib BUILD = $(BUILD) $(DLLBIN) INSTALL = $(INSTALL) install-dll CLEAN = $(CLEAN) clean-dll OBJS = $(OBJS) $(WINOBJS) HDRS = $(HDRS) $(INCDIR)/ns.h $(INCDIR)/nsthread.h !ifdef MODINIT LOPTS = $(LOPTS) /EXPORT:$(MODINIT) !endif !endif # # Variables for building a program, optionally with cooresponding DLL. # !ifdef PGM PGMBIN = $(PGM).exe BUILD = $(BUILD) $(PGMBIN) INSTALL = $(INSTALL) install-pgm CLEAN = $(CLEAN) clean-pgm !ifdef DLL PGMLIBS = $(PGMLIBS) $(DLLLIB) !endif !endif # # Update options when building from sources or installed location. # !ifndef SRCDIR INCDIR = $(AOLSERVER)\include UTILDIR = $(INSTBIN) LIBS = $(LIBS) /LIBPATH:"$(AOLSERVER)\lib" nsd.lib nsthread.lib !else INCDIR = $(SRCDIR)\include UTILDIR = $(SRCDIR)\util !if "$(DLL)" != "nsthread" LIBS = $(LIBS) /LIBPATH:"$(SRCDIR)\nsthread" nsthread.lib !if "$(DLL)" != "nsd" LIBS = $(LIBS) /LIBPATH:"$(SRCDIR)\nsd" nsd.lib !endif !endif !endif MODSRC = $(INCDIR)\nsmodinit.c MODOBJ = $(MOD)-mod.obj # # Update options for release or debug build. # !if "$(DEBUG)" == "0" COPTS = $(COPTS) /MD /O2 DEFS = $(DEFS) /D "NDEBUG" !else COPTS = $(COPTS) /MDd /Od /Zi /RTCcsu DEFS = $(DEFS) /D "_DEBUG" LOPTS = $(LOPTS) /DEBUG !endif INCS = /I "$(INCDIR)" /I "$(TCLINC)" CFLAGS = $(COPTS) $(DEFS) $(INCS) LIBS = $(LIBS) $(TCLLIB) advapi32.lib ws2_32.lib # # Utility commands. # RM = $(TCLSH) $(UTILDIR)\nsremove.tcl MAKEALL = $(TCLSH) $(UTILDIR)\nsmakeall.tcl INST = $(TCLSH) $(UTILDIR)\nsinstall.tcl # # Rules. # all build: $(BUILD) install: $(INSTALL) clean: $(CLEAN) !ifdef DLL $(DLLBIN): $(OBJS) link.exe $(LOPTS) /DLL /OUT:$(DLLBIN) /IMPLIB:$(DLLLIB) $(OBJS) $(LIBS) !endif !ifdef MOD $(MODBIN): $(MODSRC) $(DLLBIN) $(CC) $(CFLAGS) /DNS_MODINIT=$(MODINIT) /c /Fo$(MODOBJ) $(MODSRC) link.exe $(LOPTS) /DLL /OUT:$(MODBIN) $(MODOBJS) $(MODLIBS) $(DLLLIB) $(LIBS) !endif !ifdef OBJS $(OBJS): $(HDRS) !endif .c.o: $(CC) $(CFLAGS) /c /Fo$*.o $*.c !ifdef PGM $(PGMBIN): $(PGMOBJS) $(DLLLIB) link.exe $(LOPTS) /OUT:$(PGMBIN) $(PGMOBJS) $(PGMLIBS) $(DLLLIB) $(LIBS) !endif install-dll: $(DLLBIN) $(DLLLIB) $(INST) -d $(INSTBIN) $(DLLBIN) $(INST) -d $(INSTLIB) $(DLLLIB) install-mod: $(MODBIN) $(INST) -f $(INSTBIN)/$(MOD).so $(MODBIN) install-pgm: $(PGMBIN) $(INST) -d $(INSTBIN) $(PGMBIN) clean-extra: $(RM) *.exp *.ilk *.pdb clean-dll: clean-extra $(RM) $(OBJS) $(DLLBIN) $(DLLLIB) clean-mod: clean-extra $(RM) $(MODOBJS) $(MODBIN) $(MODLIB) clean-pgm: $(RM) $(PGMBIN) $(PGMOBJS) .PHONY: clean-dll clean-pgm install-dll install-pgm ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/Makefile.global������������������������������������������������������������0000644�0001750�0001750�00000003133�10417530167�017755� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/include/Makefile.global,v 1.63 2006/04/13 20:11:35 jgdavidson Exp $ # # Makefile.global -- # # This is a backwards-compatible Makefile.global # which just includes the new ns.mak file. # include $(AOLSERVER)/include/ns.mak �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/Makefile.module������������������������������������������������������������0000644�0001750�0001750�00000003755�10417530167�020014� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/include/Makefile.module,v 1.13 2006/04/13 20:11:35 jgdavidson Exp $ # # Makefile.module -- # # This is a backwards-compatibility makefile which maps the old, # Unix-only style variables to the new combined Unix/Windows # variables. # # New Old # --- --- # MOD (incl .so) MOD (without .so) # DLL LIB # DLLLIBS LIBLIBS # DLLINIT LIBINIT # OBJS LIBOBJS # ifdef NSHOME AOLSERVER=$(NSHOME) endif ifdef MOD MOD := $(MOD:.so=) endif ifdef LIB DLL=$(LIB) endif ifdef LIBLIBS DLLLIBS=$(LIBLIBS) endif ifdef LIBINIT DLLINIT=$(LIBINIT) endif ifdef LIBOBJS OBJS=$(LIBOBJS) endif include $(AOLSERVER)/include/Makefile.global �������������������aolserver4-4.5.1/include/nslibinit.c����������������������������������������������������������������0000644�0001750�0001750�00000003252�10275675455�017233� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * libinit.c -- * * Dynamic library init. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/include/nslibinit.c,v 1.2 2005/08/08 15:33:01 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" void NS_INIT(void) { extern void NS_LIBINIT(void); NS_LIBINIT(); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/nsdb.h���������������������������������������������������������������������0000644�0001750�0001750�00000012722�10300725116�016150� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsdb.h -- * * Public types and function declarations for the nsdb module. * * $Header: /cvsroot/aolserver/aolserver/include/nsdb.h,v 1.2 2005/08/17 21:21:18 jgdavidson Exp $ */ #ifndef NSDB_H #define NSDB_H #include "ns.h" #ifdef NSDB_EXPORTS #undef NS_EXTERN #ifdef __cpluscplus #define NS_EXTERN extern "C" NS_EXPORT #else #define NS_EXTERN extern NS_EXPORT #endif #endif /* * The following are nsdb return codes. */ #define NS_DML 1 #define NS_ROWS 2 #define NS_END_DATA 4 #define NS_NO_DATA 8 /* * The following enum defines known nsdb driver function ids. */ typedef enum { DbFn_Name, DbFn_DbType, DbFn_ServerInit, DbFn_OpenDb, DbFn_CloseDb, DbFn_DML, DbFn_Select, DbFn_GetRow, DbFn_Flush, DbFn_Cancel, DbFn_GetTableInfo, DbFn_TableList, DbFn_BestRowId, DbFn_Exec, DbFn_BindRow, DbFn_ResetHandle, DbFn_SpStart, DbFn_SpSetParam, DbFn_SpExec, DbFn_SpReturnCode, DbFn_SpGetParams, DbFn_End } Ns_DbProcId; /* * Database procedure structure used when registering * a driver. */ typedef struct Ns_DbProc { Ns_DbProcId id; void *func; } Ns_DbProc; /* * Database handle structure. */ typedef struct Ns_DbHandle { char *driver; char *datasource; char *user; char *password; void *connection; char *poolname; int connected; int verbose; Ns_Set *row; char cExceptionCode[6]; Ns_DString dsExceptionMsg; void *context; void *statement; int fetchingRows; } Ns_DbHandle; /* * The following structure is no longer supported and only provided to * allow existing database modules to compile. All of the TableInfo * routines now log an unsupported use error and return an error result. */ typedef struct { Ns_Set *table; int size; int ncolumns; Ns_Set **columns; } Ns_DbTableInfo; /* * dbdrv.c: */ NS_EXTERN int Ns_DbRegisterDriver(char *driver, Ns_DbProc *procs); NS_EXTERN char *Ns_DbDriverName(Ns_DbHandle *handle); NS_EXTERN char *Ns_DbDriverDbType(Ns_DbHandle *handle); NS_EXTERN int Ns_DbDML(Ns_DbHandle *handle, char *sql); NS_EXTERN Ns_Set *Ns_DbSelect(Ns_DbHandle *handle, char *sql); NS_EXTERN int Ns_DbExec(Ns_DbHandle *handle, char *sql); NS_EXTERN Ns_Set *Ns_DbBindRow(Ns_DbHandle *handle); NS_EXTERN int Ns_DbGetRow(Ns_DbHandle *handle, Ns_Set *row); NS_EXTERN int Ns_DbFlush(Ns_DbHandle *handle); NS_EXTERN int Ns_DbCancel(Ns_DbHandle *handle); NS_EXTERN int Ns_DbResetHandle(Ns_DbHandle *handle); NS_EXTERN int Ns_DbSpStart(Ns_DbHandle *handle, char *procname); NS_EXTERN int Ns_DbSpSetParam(Ns_DbHandle *handle, char *paramname, char *paramtype, char *inout, char *value); NS_EXTERN int Ns_DbSpExec(Ns_DbHandle *handle); NS_EXTERN int Ns_DbSpReturnCode(Ns_DbHandle *handle, char *returnCode, int bufsize); NS_EXTERN Ns_Set *Ns_DbSpGetParams(Ns_DbHandle *handle); /* * dbinit.c: */ NS_EXTERN char *Ns_DbPoolDescription(char *pool); NS_EXTERN char *Ns_DbPoolDefault(char *server); NS_EXTERN char *Ns_DbPoolList(char *server); NS_EXTERN int Ns_DbPoolAllowable(char *server, char *pool); NS_EXTERN void Ns_DbPoolPutHandle(Ns_DbHandle *handle); NS_EXTERN Ns_DbHandle *Ns_DbPoolTimedGetHandle(char *pool, int wait); NS_EXTERN Ns_DbHandle *Ns_DbPoolGetHandle(char *pool); NS_EXTERN int Ns_DbPoolGetMultipleHandles(Ns_DbHandle **handles, char *pool, int nwant); NS_EXTERN int Ns_DbPoolTimedGetMultipleHandles(Ns_DbHandle **handles, char *pool, int nwant, int wait); NS_EXTERN int Ns_DbBouncePool(char *pool); /* * dbtcl.c: */ NS_EXTERN int Ns_TclDbGetHandle(Tcl_Interp *interp, char *handleId, Ns_DbHandle **handle); /* * dbutil.c: */ NS_EXTERN void Ns_DbQuoteValue(Ns_DString *pds, char *string); NS_EXTERN Ns_Set *Ns_Db0or1Row(Ns_DbHandle *handle, char *sql, int *nrows); NS_EXTERN Ns_Set *Ns_Db1Row(Ns_DbHandle *handle, char *sql); NS_EXTERN int Ns_DbInterpretSqlFile(Ns_DbHandle *handle, char *filename); NS_EXTERN void Ns_DbSetException(Ns_DbHandle *handle, char *code, char *msg); #endif /* NSDB_H */ ����������������������������������������������aolserver4-4.5.1/include/nspd.h���������������������������������������������������������������������0000644�0001750�0001750�00000010452�07142130361�016166� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ #ifndef NSPD_H #define NSPD_H #define DB_END_DATA 3 #define DB_ROWS 2 #define DB_DML 1 #define EXCEPTION_CODE_MAX 32 #define EXCEPTION_MSG_MAX 4096 #define END_DATA "-1\n" #define NS_OK 0 #define NS_ERROR (-1) typedef enum { Error, Notice, Trace } Ns_PdLogMsgType; typedef struct Ns_PdRowData { int elSize; char *elData; } Ns_PdRowData; typedef struct Ns_PdRowInfo { int numColumns; Ns_PdRowData *rowData; } Ns_PdRowInfo; extern int Ns_PdMain(int argc, char **argv); extern Ns_PdRowInfo *Ns_PdNewRowInfo(int ncols); extern void Ns_PdFreeRowInfo(Ns_PdRowInfo * rowInfo, int fFreeData); extern void Ns_PdSendRowInfo(Ns_PdRowInfo * rowInfo); extern void Ns_PdSetRowInfoNumColumns(Ns_PdRowInfo * rowInfo, int numColumns); extern void Ns_PdSetRowInfoItem(Ns_PdRowInfo * rowInfo, int index, char *data, int size); extern int Ns_PdGetRowInfoNumColumns(Ns_PdRowInfo * rowInfo); extern int Ns_PdFindRowInfoValue(Ns_PdRowInfo * rowInfo, char *value, int len); extern void Ns_PdGetRowInfoItem(Ns_PdRowInfo * rowInfo, int index, char **data, int *size); extern void *Ns_PdDbInit(void); extern void Ns_PdDbFlush(void *dbhandle); extern void Ns_PdDbCancel(void *dbhandle); extern void Ns_PdDbTableList(void *dbhandle, char *includeSystem); extern void Ns_PdDbExec(void *dbhandle, char *sql); extern void Ns_PdDbBindRow(void *dbhandle); extern void Ns_PdDbGetRow(void *dbhandle, char *columnCount); extern void Ns_PdDbGetTableInfo(void *dbhandle, char *tableName); extern void Ns_PdDbBestRowId(void *dbhandle, char *tableName); extern void Ns_PdDbClose(void *dbhandle); extern void Ns_PdDbOpen(void *dbhandle, char *datasource); extern void Ns_PdDbCleanup(void *dbhandle); extern void Ns_PdDbIdentify(void *dbhandle); extern void Ns_PdDbGetTypes(void *dbhandle); extern void Ns_PdDbResultId(void *dbhandle); extern void Ns_PdDbResultRows(void *dbhandle); extern void Ns_PdDbSetMaxRows(void *dbhandle, char *maxRows); extern void Ns_PdDbResetHandle(void *dbhandle); extern void Ns_PdSendString(char *rsp); extern void Ns_PdSendData(char *data, int len); extern void Ns_PdSendException(char *code, char *msg); extern int Ns_PdCloseonexec(int fd); extern void Ns_PdParseOpenArgs(char *openargs, char **datasource, char **user, char **password, char **param); extern int Ns_PdSqlbufEnough(char **sqlbuf, int *sqlbufsize, int howmuch); extern void Ns_PdLog(Ns_PdLogMsgType errtype, char *format,...); extern char *Ns_PdStringTrim(char *string); extern void Ns_PdDbSpReturnCode(void *handle); extern void Ns_PdDbSpStart(void *handle, char *procname); extern void Ns_PdDbSpSetParam (void *handle, char *args); extern void Ns_PdDbSpExec (void *handle); extern void Ns_PdDbSpGetParams(void *handle); #endif /* NSPD_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/nsthread.h�����������������������������������������������������������������0000644�0001750�0001750�00000027743�10302714013�017037� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsthread.h -- * * Core threading and system headers. * * $Header: /cvsroot/aolserver/aolserver/include/nsthread.h,v 1.31 2005/08/23 21:41:31 jgdavidson Exp $ */ #ifndef NSTHREAD_H #define NSTHREAD_H #include "nsattributes.h" #ifdef _WIN32 #define NS_EXPORT __declspec(dllexport) #define NS_IMPORT __declspec(dllimport) #else #define NS_EXPORT #define NS_IMPORT #ifndef _REENTRANT #define _REENTRANT #endif #if defined(__sgi) && !defined(_SGI_MP_SOURCE) #define _SGI_MP_SOURCE #endif #if defined(__sun) && !defined(_POSIX_PTHREAD_SEMANTICS) #define _POSIX_PTHREAD_SEMANTICS #endif #endif #ifdef NSTHREAD_EXPORTS #define NS_STORAGE_CLASS NS_EXPORT #else #define NS_STORAGE_CLASS NS_IMPORT #endif #ifdef __cplusplus #define NS_EXTERN extern "C" NS_STORAGE_CLASS #else #define NS_EXTERN extern NS_STORAGE_CLASS #endif #ifndef __linux #ifdef FD_SETSIZE #undef FD_SETSIZE #endif #define FD_SETSIZE 1024 #endif #ifdef __OpenBSD__ #ifndef ENOTSUP /* * Workaround until we have ENOTSUP in errno.h */ #define ENOTSUP EOPNOTSUPP #endif #endif #ifndef _WIN32 #include <sys/types.h> #include <dirent.h> #include <sys/time.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netdb.h> #include <sys/uio.h> #else #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include <windows.h> #include <winsock2.h> #include <sys/timeb.h> #include <sys/types.h> #include <io.h> #include <process.h> #include <direct.h> typedef struct DIR_ *DIR; struct dirent { char *d_name; }; NS_EXTERN DIR *opendir(char *pathname); NS_EXTERN struct dirent *readdir(DIR *dp); NS_EXTERN int closedir(DIR *dp); #define sleep(n) (Sleep((n)*1000)) #define HAVE_GETADDRINFO #define HAVE_GETNAMEINFO #include <ws2tcpip.h> #endif #include "tcl.h" #include <limits.h> #include <time.h> #include <fcntl.h> #include <signal.h> #include <errno.h> #include <ctype.h> #include <stdlib.h> #include <stddef.h> #include <stdio.h> #include <stdarg.h> #include <assert.h> #ifndef PATH_MAX #define PATH_MAX 1024 #endif #ifdef HAVE_INTTYPES_H #include <inttypes.h> #endif /* * Various constants. */ #define NS_OK 0 #define NS_ERROR (-1) #define NS_TIMEOUT (-2) #define NS_BREAK (-3) #define NS_THREAD_DETACHED 1 #define NS_THREAD_JOINED 2 #define NS_THREAD_EXITED 4 #define NS_THREAD_NAMESIZE 64 #define NS_THREAD_MAXTLS 100 /* * The following objects are defined as pointers to dummy structures * to ensure proper type checking. The actual objects underlying * objects are platform specific. */ typedef struct Ns_Thread_ *Ns_Thread; typedef struct Ns_Tls_ *Ns_Tls; typedef struct Ns_Mutex_ *Ns_Mutex; typedef struct Ns_Cond_ *Ns_Cond; typedef struct Ns_Cs_ *Ns_Cs; typedef struct Ns_Sema_ *Ns_Sema; typedef struct Ns_RWLock_ *Ns_RWLock; typedef struct Ns_Time { time_t sec; long usec; } Ns_Time; typedef void (Ns_ThreadProc) (void *arg); typedef void (Ns_TlsCleanup) (void *arg); typedef void (Ns_ThreadArgProc) (Tcl_DString *, void *proc, void *arg); /* * fork.c: */ NS_EXTERN int ns_fork(void); /* * master.c: */ NS_EXTERN void Ns_MasterLock(void); NS_EXTERN void Ns_MasterUnlock(void); /* * memory.c: */ NS_EXTERN void *ns_malloc(size_t size) _nsmalloc; NS_EXTERN void *ns_calloc(size_t num, size_t size) _nsmalloc; NS_EXTERN void ns_free(void *buf); NS_EXTERN void *ns_realloc(void *buf, size_t size); NS_EXTERN char *ns_strdup(const char *string) _nsmalloc; NS_EXTERN char *ns_strcopy(const char *string) _nsmalloc; /* * mutex.c: */ NS_EXTERN void Ns_MutexInit(Ns_Mutex *mutexPtr); NS_EXTERN void Ns_MutexDestroy(Ns_Mutex *mutexPtr); NS_EXTERN void Ns_MutexLock(Ns_Mutex *mutexPtr); NS_EXTERN int Ns_MutexTryLock(Ns_Mutex *mutexPtr); NS_EXTERN void Ns_MutexUnlock(Ns_Mutex *mutexPtr); NS_EXTERN void Ns_MutexSetName(Ns_Mutex *mutexPtr, char *name); NS_EXTERN void Ns_MutexSetName2(Ns_Mutex *mutexPtr, char *prefix, char *name); NS_EXTERN void Ns_MutexList(Tcl_DString *dsPtr); /* * rwlock.c: */ NS_EXTERN void Ns_RWLockInit(Ns_RWLock *lockPtr); NS_EXTERN void Ns_RWLockDestroy(Ns_RWLock *lockPtr); NS_EXTERN void Ns_RWLockRdLock(Ns_RWLock *lockPtr); NS_EXTERN void Ns_RWLockWrLock(Ns_RWLock *lockPtr); NS_EXTERN void Ns_RWLockUnlock(Ns_RWLock *lockPtr); /* * cslock.c; */ NS_EXTERN void Ns_CsInit(Ns_Cs *csPtr); NS_EXTERN void Ns_CsDestroy(Ns_Cs *csPtr); NS_EXTERN void Ns_CsEnter(Ns_Cs *csPtr); NS_EXTERN void Ns_CsLeave(Ns_Cs *csPtr); /* * cond.c: */ NS_EXTERN void Ns_CondInit(Ns_Cond *condPtr); NS_EXTERN void Ns_CondDestroy(Ns_Cond *condPtr); NS_EXTERN void Ns_CondSignal(Ns_Cond *condPtr); NS_EXTERN void Ns_CondBroadcast(Ns_Cond *condPtr); NS_EXTERN void Ns_CondWait(Ns_Cond *condPtr, Ns_Mutex *lockPtr); NS_EXTERN int Ns_CondTimedWait(Ns_Cond *condPtr, Ns_Mutex *lockPtr, Ns_Time *timePtr); /* * reentrant.c: */ NS_EXTERN struct dirent *ns_readdir(DIR * pDir); NS_EXTERN struct tm *ns_localtime(const time_t * clock); NS_EXTERN struct tm *ns_gmtime(const time_t * clock); NS_EXTERN char *ns_ctime(const time_t * clock); NS_EXTERN char *ns_asctime(const struct tm *tmPtr); NS_EXTERN char *ns_strtok(char *s1, const char *s2); NS_EXTERN char *ns_inet_ntoa(struct in_addr addr); /* * sema.c: */ NS_EXTERN void Ns_SemaInit(Ns_Sema *semaPtr, int initCount); NS_EXTERN void Ns_SemaDestroy(Ns_Sema *semaPtr); NS_EXTERN void Ns_SemaWait(Ns_Sema *semaPtr); NS_EXTERN void Ns_SemaPost(Ns_Sema *semaPtr, int count); /* * signal.c: */ #ifndef _WIN32 NS_EXTERN int ns_sigmask(int how, sigset_t * set, sigset_t * oset); NS_EXTERN int ns_sigwait(sigset_t * set, int *sig); NS_EXTERN int ns_signal(int sig, void (*proc)(int)); #endif /* * thread.c: */ NS_EXTERN void NsThreads_LibInit(void); NS_EXTERN void Ns_ThreadCreate(Ns_ThreadProc *proc, void *arg, long stackSize, Ns_Thread *resultPtr); NS_EXTERN void Ns_ThreadExit(void *arg); NS_EXTERN void Ns_ThreadJoin(Ns_Thread *threadPtr, void **argPtr); NS_EXTERN void Ns_ThreadYield(void); NS_EXTERN void Ns_ThreadSetName(char *name); NS_EXTERN int Ns_ThreadId(void); NS_EXTERN void Ns_ThreadSelf(Ns_Thread *threadPtr); NS_EXTERN char *Ns_ThreadGetName(void); NS_EXTERN char *Ns_ThreadGetParent(void); NS_EXTERN long Ns_ThreadStackSize(long size); NS_EXTERN void Ns_ThreadList(Tcl_DString *dsPtr, Ns_ThreadArgProc *proc); NS_EXTERN int Ns_CheckStack(void); /* * time.c: */ NS_EXTERN void Ns_GetTime(Ns_Time *timePtr); NS_EXTERN void Ns_AdjTime(Ns_Time *timePtr); NS_EXTERN int Ns_DiffTime(Ns_Time *t1, Ns_Time *t0, Ns_Time *resultPtr); NS_EXTERN void Ns_IncrTime(Ns_Time *timePtr, time_t sec, long usec); /* * tls.c: */ NS_EXTERN void Ns_TlsAlloc(Ns_Tls *tlsPtr, Ns_TlsCleanup *cleanup); NS_EXTERN void Ns_TlsSet(Ns_Tls *tlsPtr, void *value); NS_EXTERN void *Ns_TlsGet(Ns_Tls *tlsPtr); #ifndef NS_NOCOMPAT /* * Unsupported legacy API's and macros. */ /* * compat.c: */ typedef struct Ns_Semaphore_ *Ns_Semaphore; typedef struct Ns_CriticalSection_ *Ns_CriticalSection; typedef struct Ns_ThreadLocalStorage_ *Ns_ThreadLocalStorage; typedef struct Ns_Event_ *Ns_Event; NS_EXTERN int Ns_InitializeMutex(Ns_Mutex *mutexPtr); NS_EXTERN int Ns_DestroyMutex(Ns_Mutex *mutexPtr); NS_EXTERN int Ns_LockMutex(Ns_Mutex *mutexPtr); NS_EXTERN int Ns_UnlockMutex(Ns_Mutex *mutexPtr); NS_EXTERN int Ns_InitializeCriticalSection(Ns_CriticalSection *cs); NS_EXTERN int Ns_DestroyCriticalSection(Ns_CriticalSection *cs); NS_EXTERN int Ns_EnterCriticalSection(Ns_CriticalSection *cs); NS_EXTERN int Ns_LeaveCriticalSection(Ns_CriticalSection *cs); NS_EXTERN int Ns_InitializeEvent(Ns_Event *event); NS_EXTERN int Ns_DestroyEvent(Ns_Event *event); NS_EXTERN int Ns_SetEvent(Ns_Event *event); NS_EXTERN int Ns_BroadcastEvent(Ns_Event *event); NS_EXTERN int Ns_WaitForEvent(Ns_Event *event, Ns_Mutex *lock); NS_EXTERN int Ns_TimedWaitForEvent(Ns_Event *event, Ns_Mutex *lock, int timeout); NS_EXTERN int Ns_AbsTimedWaitForEvent(Ns_Event *event, Ns_Mutex *lock, time_t abstime); NS_EXTERN int Ns_UTimedWaitForEvent(Ns_Event *event, Ns_Mutex *lock, int seconds, int microseconds); NS_EXTERN int Ns_InitializeRWLock(Ns_RWLock *lock); NS_EXTERN int Ns_DestroyRWLock(Ns_RWLock *lock); NS_EXTERN int Ns_ReadLockRWLock(Ns_RWLock *lock); NS_EXTERN int Ns_ReadUnlockRWLock(Ns_RWLock *lock); NS_EXTERN int Ns_WriteLockRWLock(Ns_RWLock *lock); NS_EXTERN int Ns_WriteUnlockRWLock(Ns_RWLock *lock); NS_EXTERN int Ns_InitializeSemaphore(Ns_Semaphore *sema, int initCount); NS_EXTERN int Ns_DestroySemaphore(Ns_Semaphore *sema); NS_EXTERN int Ns_WaitForSemaphore(Ns_Semaphore *sema); NS_EXTERN int Ns_ReleaseSemaphore(Ns_Semaphore *sema, int count); NS_EXTERN int Ns_AllocThreadLocalStorage(Ns_ThreadLocalStorage *tls, Ns_TlsCleanup *cleanup); NS_EXTERN int Ns_SetThreadLocalStorage(Ns_ThreadLocalStorage *tls, void *p); NS_EXTERN int Ns_GetThreadLocalStorage(Ns_ThreadLocalStorage *tls, void **p); NS_EXTERN int Ns_WaitForThread(Ns_Thread *threadPtr); NS_EXTERN int Ns_WaitThread(Ns_Thread *threadPtr, int *exitCodePtr); NS_EXTERN void Ns_ExitThread(int exitCode); NS_EXTERN int Ns_BeginDetachedThread(Ns_ThreadProc *proc, void *arg); NS_EXTERN int Ns_BeginThread(Ns_ThreadProc *proc, void *arg, Ns_Thread *thrPtr); NS_EXTERN int Ns_GetThreadId(void); NS_EXTERN void Ns_GetThread(Ns_Thread *threadPtr); /* * pool.c: */ typedef struct Ns_Pool_ *Ns_Pool; NS_EXTERN int nsMemNumBuckets; NS_EXTERN Ns_Pool *Ns_PoolCreate(char *name); NS_EXTERN void Ns_PoolFlush(Ns_Pool *pool); NS_EXTERN void Ns_PoolDestroy(Ns_Pool *pool); NS_EXTERN void *Ns_PoolAlloc(Ns_Pool *pool, size_t size); NS_EXTERN void Ns_PoolFree(Ns_Pool *pool, void *cp); NS_EXTERN void *Ns_PoolRealloc(Ns_Pool *pool, void *ptr, size_t size); NS_EXTERN void *Ns_PoolCalloc(Ns_Pool *pool, size_t elsize, size_t nelem); NS_EXTERN char *Ns_PoolStrDup(Ns_Pool *pool, char *old); NS_EXTERN char *Ns_PoolStrCopy(Ns_Pool *pool, char *old); NS_EXTERN void *Ns_ThreadMalloc(size_t size); NS_EXTERN void *Ns_ThreadAlloc(size_t size); NS_EXTERN void *Ns_ThreadRealloc(void *ptr, size_t size); NS_EXTERN void Ns_ThreadFree(void *ptr); NS_EXTERN void *Ns_ThreadCalloc(size_t nelem, size_t elsize); NS_EXTERN char *Ns_ThreadStrDup(char *old); NS_EXTERN char *Ns_ThreadStrCopy(char *old); #define Ns_Readdir ns_readdir #define Ns_Localtime ns_localtime #define Ns_Gmtime ns_gmtime #define Ns_Ctime ns_ctime #define Ns_Asctime ns_asctime #define Ns_Strtok ns_strtok #define Ns_InetNtoa ns_inet_ntoa #define Ns_Signal ns_signal #define Ns_Sigmask ns_sigmask #define Ns_Sigwait ns_sigwait #define Ns_Malloc ns_malloc #define Ns_Realloc ns_realloc #define Ns_Free ns_free #define Ns_Calloc ns_calloc #define Ns_StrDup ns_strdup #define Ns_StrCopy ns_strcopy #define Ns_ThreadAlloc Ns_ThreadMalloc #define Ns_Fork ns_fork #endif /* NS_NOCOMPAT */ #endif /* NSTHREAD_H */ �����������������������������aolserver4-4.5.1/include/nsattributes.h�������������������������������������������������������������0000644�0001750�0001750�00000007214�10465762656�017777� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * nsattrs.h -- * * Type and programmer error checking attributes for GCC compiler. * * $Header: /cvsroot/aolserver/aolserver/include/nsattributes.h,v 1.4 2006/08/08 01:15:26 dossy Exp $ */ #ifndef NSATTRS_H #define NSATTRS_H # define _nsmalloc # define _nspure # define _nsconst # define _nslikely(x) x # define _nsunlikely(x) x # define _nsunused # define _nsnoreturn # define _nsprintflike(fmtarg, firstvararg) # define _nsscanflike(fmtarg, firstvararg) # define _nsfmtarg(x) # define _nsused # define _nsdeprecated # define _nsnonnull # define _nswarnunused # define _nsmayalias #ifdef __GNUC_MINOR__ #ifdef __GNUC_PREREQ #undef __GNUC_PREREQ #endif # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) #endif #ifdef __GNUC_PREREQ #if __GNUC_PREREQ(2,96) # undef _nsmalloc # define _nsmalloc __attribute__ ((malloc)) # undef _nspure # define _nspure __attribute__ ((pure)) # undef _nsconst # define _nsconst __attribute__ ((const)) # undef _nslikely # define _nslikely(x) __builtin_expect((x),1) # undef _nsunlikely # define _nsunlikely(x) __builtin_expect((x),0) #endif #if __GNUC_PREREQ(2,7) # undef _nsunused # define _nsunused __attribute__ ((unused)) # undef _nsnoreturn # define _nsnoreturn __attribute__ ((noreturn)) # undef _nsprintflike # define _nsprintflike(fmtarg, firstvararg) \ __attribute__((format (printf, fmtarg, firstvararg))) # undef _nsscanflike # define _nsscanflike(fmtarg, firstvararg) \ __attribute__((format (scanf, fmtarg, firstvararg))) #endif #if __GNUC_PREREQ(2,8) # undef _nsfmtarg # define _nsfmtarg(x) __attribute__ ((format_arg(x))) #endif #if __GNUC_PREREQ(3,1) # undef _nsused # define _nsused __attribute__ ((used)) #endif #if __GNUC_PREREQ(3,2) # undef _nsdeprecated # define _nsdeprecated __attribute__ ((deprecated)) #endif #if __GNUC_PREREQ(3,3) # undef _nsnonnull # define _nsnonnull __attribute__ ((nonnull)) # undef _nswarnunused # define _nswarnunused __attribute__ ((warn_unused_result)) # undef _nsmayalias # define _nsmayalias __attribute__ ((may_alias)) #endif #endif /* __GNUC__PREREQ */ #define NS_RCSID(string) static const char *RCSID _nsunused = string \ ", compiled: " __DATE__ " " __TIME__ #endif /* NSATTRS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/ns.mak.in������������������������������������������������������������������0000644�0001750�0001750�00000015131�10450262107�016567� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/aolserver/aolserver/include/ns.mak.in,v 1.5 2006/06/27 17:00:55 jgdavidson Exp $ # # ns.mak.in -- # # Makefile include for AOLserver modules, libraries, and programs. Variables to set # before including this file include: # # AOLSERVER AOLserver install directory # DLL Root name of dynamic library (without lib prefix or extension) # OBJS List of library object files (required with DLL) # DLLINIT Dynamic library entry point # DLLLIBS Extra dynamic library link libraries # MOD Name of module # MODOBJS List of module object files (required with MOD) # MODINIT Module entry point # MODLIBS Extra module link libraries # PGM Name of executable program # PGMOBJS List of program object files (required with PGM) # PGMLIBS Extra program link libraries # HDRS Header files which objects depend on # INSTALL Extra install directive(s) # CLEAN Extra clean directive(s) # # At least one of PGM, MOD, or DLL must be defined. # # See ../nsd/Makefile and ../nsdb/Makefile for examples. # # # Install directories. # AOLSERVER = @AOLSERVER@ TCLSH = @TCLSH@ INSTBIN = $(AOLSERVER)/bin INSTLIB = $(AOLSERVER)/lib INSTINC = $(AOLSERVER)/include INSTTCL = $(AOLSERVER)/modules/tcl INSTSRV = $(AOLSERVER)/servers/server1 INSTSRVMOD = $(INSTSRV)/modules INSTSRVPAG = $(INSTSRV)/pages SH = /bin/sh # # Compiler and linker options. # LIBEXT = @TCL_SHLIB_SUFFIX@ LDLIB = @LDLIB@ LDSO = @LDSO@ CCRFLAG = @CCRFLAG@ LDRFLAG = @LDRFLAG@ CCRPATH += @CCRPATH@ LDRPATH += @LDRPATH@ CC = $(PURIFY) @TCL_CC@ CFLAGS_DEBUG = @TCL_CFLAGS_DEBUG@ CFLAGS_OPTIMIZE = @TCL_CFLAGS_OPTIMIZE@ CFLAGS_WARNING = @TCL_CFLAGS_WARNING@ CFLAGS_INCLUDE = -I$(INCDIR) @TCL_INCLUDE_SPEC@ CFLAGS_EXTRA = @TCL_SHLIB_CFLAGS@ @TCL_EXTRA_CFLAGS@ DEFS = -DNO_CONST @TCL_DEFS@ @DEFS@ CFLAGS += @CFLAGS_DEFAULT@ $(CFLAGS_WARNING) $(CFLAGS_EXTRA) $(CFLAGS_INCLUDE) @CPPFLAGS@ $(DEFS) ifndef SRCDIR UTILS = $(AOLSERVER)/bin LIBS += -L$(AOLSERVER)/lib -lnsd -lnsthread INCDIR = $(AOLSERVER)/include else UTILS = $(SRCDIR)/util INCDIR = $(SRCDIR)/include ifneq (nsthread,$(DLL)) ifneq (nsd,$(DLL)) ifneq (nsthreadtest,$(PGM)) LIBS += -L$(SRCDIR)/nsd -lnsd endif endif LIBS += -L$(SRCDIR)/nsthread -lnsthread endif endif LIBS += @TCL_LIB_SPEC@ @TCL_LIBS@ @LDFLAGS@ @LIBS@ CCLIBS = $(LIBS) @TCL_LD_FLAGS@ # # Shell utilities. # RANLIB = @TCL_RANLIB@ MAKEALL = $(TCLSH) $(UTILS)/nsmakeall.tcl RM = $(TCLSH) $(UTILS)/nsremove.tcl INST = $(TCLSH) $(UTILS)/nsinstall.tcl INSTMAN = $(SH) $(UTILS)/nsinstall-man.sh -v -s INSTALL_SH = $(UTILS)/install-sh -c INSTALL_DATA = $(INSTALL_SH) -m 644 # # Platform-specific options. # uname = $(shell uname -a) # Solaris 2.6+ ifneq (,$(findstring SunOS,$(uname))) ifneq (,$(findstring 5.6,$(uname))) LIBS+=-lthread -lposix4 else LIBS+=-lrt endif endif # Mac OS X ifneq (,$(findstring Darwin,$(uname))) LDFLAGS += @TCL_EXTRA_CFLAGS@ endif # Add dynamic library entry point flags. ifdef DLLINIT ifneq (,$(findstring Darwin,$(uname))) INIT = _$(DLLINIT) LDLIB += -init _$(INIT) else INIT = _init endif endif ifdef MOD DLL = $(MOD) MODBIN = $(MOD).so BUILD += $(MODBIN) INSTALL += install-mod CLEAN += clean-mod ifdef MODINIT MODSRC = $(INCDIR)/nsmodinit.c MODOBJ = $(MOD)_modinit.o MODOBJS += $(MODOBJ) endif endif ifdef DLL DLLBIN = lib$(DLL)$(LIBEXT) DLLLIB = lib$(DLL).a OBJS += $(UNIXOBJS) ifdef DLLINIT LIBSRC = $(INCDIR)/nslibinit.c LIBOBJ = $(DLL)_libinit.o endif BUILD += $(DLLLIB) $(DLLBIN) INSTALL += install-dll CLEAN += clean-dll MODLIBS += -L. -l$(DLL) PGMLIBS += -L. -l$(DLL) endif ifdef PGM BUILD += $(PGM) INSTALL += install-pgm CLEAN += clean-pgm endif ifdef MAN INSTALL += install-man install-html endif all build: $(BUILD) install: $(INSTALL) clean: $(CLEAN) $(DLLBIN): $(OBJS) $(LIBOBJ) $(RM) $(DLLBIN) $(LDLIB) $(LDFLAGS) -o $(DLLBIN) $(OBJS) $(LIBOBJ) \ $(DLLLIBS) $(LIBS) @LDRPATHS@ $(DLLLIB): $(OBJS) $(AR) rv $(DLLLIB) $(OBJS) $(RANLIB) $(DLLLIB) $(MODBIN): $(MODOBJS) $(DLLBIN) $(RM) $(MODBIN) $(LDSO) $(LDFLAGS) -o $(MODBIN) $(MODOBJS) $(MODLIBS) $(LIBS) @LDRPATHS@ $(MODOBJ): $(MODSRC) $(CC) $(CFLAGS) -DNS_MODINIT=$(MODINIT) -c -o $(MODOBJ) $(MODSRC) $(LIBOBJ): $(LIBSRC) $(CC) $(CFLAGS) -DNS_INIT=$(INIT) -DNS_LIBINIT=$(DLLINIT) -c -o $(LIBOBJ) $(LIBSRC) $(PGM): $(PGMOBJS) $(DLLLIB) $(DLLBIN) $(RM) $(PGM) $(CC) $(LDFLAGS) -o $(PGM) $(PGMOBJS) \ $(PGMLIBS) $(CCLIBS) @CCRPATHS@ $(MODOBJS) $(OBJS) $(PGMOBJS): $(HDRS) $(INCDIR)/ns.h $(INCDIR)/nsthread.h install-mod: $(MODBIN) $(INST) -d $(INSTBIN) -e $(MODBIN) install-dll: $(DLLBIN) $(INST) -d $(INSTLIB) -e $(DLLBIN) $(INST) -d $(INSTLIB) $(DLLLIB) $(RANLIB) $(INSTLIB)/$(DLLLIB) install-pgm: $(PGM) $(INST) -d $(INSTBIN) -e $(PGM) install-man: for i in $(MAN); do \ $(INSTMAN) $$i $(AOLSERVER)/man; \ done install-html: for i in $(MAN); do \ $(INSTMAN) -h $$i $(AOLSERVER)/html; \ done clean-mod: $(RM) $(MODBIN) $(MODOBJS) clean-dll: $(RM) $(DLLBIN) $(DLLLIB) $(OBJS) $(LIBOBJ) clean-pgm: $(RM) $(PGM) $(PGMOBJS) .PHONY: clean-mod clean-dll clean-pgm install-man1 install-man3 install-mann ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/man.macros�����������������������������������������������������������������0000644�0001750�0001750�00000011533�10447625127�017046� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������'\" The definitions below are for supplemental macros used in Tcl/Tk '\" manual entries. '\" '\" .AP type name in/out ?indent? '\" Start paragraph describing an argument to a library procedure. '\" type is type of argument (int, etc.), in/out is either "in", "out", '\" or "in/out" to describe whether procedure reads or modifies arg, '\" and indent is equivalent to second arg of .IP (shouldn't ever be '\" needed; use .AS below instead) '\" '\" .AS ?type? ?name? '\" Give maximum sizes of arguments for setting tab stops. Type and '\" name are examples of largest possible arguments that will be passed '\" to .AP later. If args are omitted, default tab stops are used. '\" '\" .BS '\" Start box enclosure. From here until next .BE, everything will be '\" enclosed in one large box. '\" '\" .BE '\" End of box enclosure. '\" '\" .CS '\" Begin code excerpt. '\" '\" .CE '\" End code excerpt. '\" '\" .VS ?version? ?br? '\" Begin vertical sidebar, for use in marking newly-changed parts '\" of man pages. The first argument is ignored and used for recording '\" the version when the .VS was added, so that the sidebars can be '\" found and removed when they reach a certain age. If another argument '\" is present, then a line break is forced before starting the sidebar. '\" '\" .VE '\" End of vertical sidebar. '\" '\" .DS '\" Begin an indented unfilled display. '\" '\" .DE '\" End of indented unfilled display. '\" '\" .SO '\" Start of list of standard options for a Tk widget. The '\" options follow on successive lines, in four columns separated '\" by tabs. '\" '\" .SE '\" End of list of standard options for a Tk widget. '\" '\" .OP cmdName dbName dbClass '\" Start of description of a specific option. cmdName gives the '\" option's name as specified in the class command, dbName gives '\" the option's name in the option database, and dbClass gives '\" the option's class in the option database. '\" '\" .UL arg1 arg2 '\" Print arg1 underlined, then print arg2 normally. '\" '\" RCS: @(#) $Id: man.macros,v 1.1 2006/06/26 00:29:11 jgdavidson Exp $ '\" '\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. .if t .wh -1.3i ^B .nr ^l \n(.l .ad b '\" # Start an argument description .de AP .ie !"\\$4"" .TP \\$4 .el \{\ . ie !"\\$2"" .TP \\n()Cu . el .TP 15 .\} .ta \\n()Au \\n()Bu .ie !"\\$3"" \{\ \&\\$1 \\fI\\$2\\fP (\\$3) .\".b .\} .el \{\ .br .ie !"\\$2"" \{\ \&\\$1 \\fI\\$2\\fP .\} .el \{\ \&\\fI\\$1\\fP .\} .\} .. '\" # define tabbing values for .AP .de AS .nr )A 10n .if !"\\$1"" .nr )A \\w'\\$1'u+3n .nr )B \\n()Au+15n .\" .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n .nr )C \\n()Bu+\\w'(in/out)'u+2n .. .AS Tcl_Interp Tcl_CreateInterp in/out '\" # BS - start boxed text '\" # ^y = starting y location '\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. '\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ .\" Draw four-sided box normally, but don't draw top of .\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. '\" # VS - start vertical sidebar '\" # ^Y = starting y location '\" # ^v = 1 (for troff; for nroff this doesn't matter) .de VS .if !"\\$2"" .br .mk ^Y .ie n 'mc \s12\(br\s0 .el .nr ^v 1u .. '\" # VE - end of vertical sidebar .de VE .ie n 'mc .el \{\ .ev 2 .nf .ti 0 .mk ^t \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' .sp -1 .fi .ev .\} .nr ^v 0 .. '\" # Special macro to handle page bottom: finish off current '\" # box/sidebar if in box/sidebar mode, then invoked standard '\" # page bottom macro. .de ^B .ev 2 'ti 0 'nf .mk ^t .if \\n(^b \{\ .\" Draw three-sided box if this is the box's first page, .\" draw two sides but no top otherwise. .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .\} .if \\n(^v \{\ .nr ^x \\n(^tu+1v-\\n(^Yu \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c .\} .bp 'fi .ev .if \\n(^b \{\ .mk ^y .nr ^b 2 .\} .if \\n(^v \{\ .mk ^Y .\} .. '\" # DS - begin display .de DS .RS .nf .sp .. '\" # DE - end display .de DE .fi .RE .sp .. '\" # SO - start of list of standard options .de SO .SH "STANDARD OPTIONS" .LP .nf .ta 5.5c 11c .ft B .. '\" # SE - end of list of standard options .de SE .fi .ft R .LP See the \\fBoptions\\fR manual entry for details on the standard options. .. '\" # OP - start of full description for a single option .de OP .LP .nf .ta 4c Command-Line Name: \\fB\\$1\\fR Database Name: \\fB\\$2\\fR Database Class: \\fB\\$3\\fR .fi .IP .. '\" # CS - begin code excerpt .de CS .RS .nf .ta .25i .5i .75i 1i .. '\" # CE - end code excerpt .de CE .fi .RE .. .de UL \\$1\l'|0\(ul'\\$2 .. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/nsextmsg.h�����������������������������������������������������������������0000644�0001750�0001750�00000004633�07142130361�017076� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ #ifndef NSEXTMSG_H #define NSEXTMSG_H typedef enum { Exec = 0, BindRow = 1, GetRow = 2, Flush = 3, Cancel = 4, GetTableInfo = 5, TableList = 6, BestRowId = 7, ResultId = 8, ResultRows = 9, SetMaxRows = 10, Close = 11, Open = 12, Ping = 13, Identify = 14, TraceOn = 15, TraceOff = 16, GetTypes = 17, OpenF = 18, CloseF = 19, ReadF = 20, WriteF = 21, DeleteF = 22, CreateTmpF = 23, ResetHandle = 24, SpStart = 25, SpSetParam = 26, SpExec = 27, SpReturnCode = 28, SpGetParams = 29 } Ns_ExtDbCommandCode; #define OK_STATUS "ok" #define SILENT_ERROR_STATUS "silentError" #define NO_BESTROWID "__nobestrowid__" #define ARG_TOKEN_DELIMITER '#' #define EXEC_RET_ROWS "exec_rows" #define EXEC_RET_DML "exec_dml" extern int Ns_ExtDbMsgNameToCode(char *msgname); extern char *Ns_ExtDbMsgCodeToName(Ns_ExtDbCommandCode code); extern short Ns_ExtDbMsgRequiresArg(Ns_ExtDbCommandCode code); #endif /* NSEXTMSG_H */ �����������������������������������������������������������������������������������������������������aolserver4-4.5.1/include/nsmodinit.c����������������������������������������������������������������0000644�0001750�0001750�00000003507�10276754175�017245� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * modinit.c -- * * Dynamic module init. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/include/nsmodinit.c,v 1.2 2005/08/11 23:00:13 jgdavidson Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" NS_EXPORT int Ns_ModuleVersion; NS_EXPORT Ns_ModuleInitProc Ns_ModuleInit; int Ns_ModuleVersion = 1; int Ns_ModuleInit(char *server, char *module) { extern Ns_ModuleInitProc NS_MODINIT; return NS_MODINIT(server, module); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������aolserver4-4.5.1/RELEASE����������������������������������������������������������������������������0000644�0001750�0001750�00000057161�10447767156�014465� 0����������������������������������������������������������������������������������������������������ustar �frankie�������������������������frankie���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� AOLserver 4.5 - June 2006 ------------------------- AOLserver 4.5 is a major upgrade including several new Tcl commands, C API's, and resource management improvements. Contents: -------- New and Updated Binaries New Modules New and Updated Tcl Commands New and Updated C Routines Additional Updates Changes to the Build Process Bug Fixes Known Issues New and Updated Binaries: ------------------------ libnsd: The AOLserver library now includes an entry point suitable for loading into an ordinary, thread-enabled, tclsh, e.g.,: # tclsh % load /usr/local/aolserver/lib/libnsd.so % ns_time This provides the full set of Tcl commands within the AOLserver core although several commands will generate errors for lack of an HTTP request context (e.g., ns_conn). nstclsh: A simple Tcl-shell linked against libnsd. It's equivalent to loading libnsd into an ordinary tclsh as described above. New Modules: ----------- nszlib: The popular nszlib module written by Vlad Seryakov has been integrated into the core release with modifications to enable the new Ns_Gzip routine. The module also provides the "ns_zlib" command for compressing and uncompressing strings and files. nsproxy: The nsproxy modules provides the "ns_proxy" command which enables sending Tcl scripts to a proxy process connected via a pipe. The proxy includes core Tcl commands as well as AOLserver commands from the libnsd library. Evaluating scripts in a proxy process can be used to isolate and/or timeout thread-unsafe or otherwise unsafe 3rd party code. New and Updated Tcl Commands: ---------------------------- The following Tcl commands are new or updated from the last release. As few of the man pages have yet to be written, see the source code for usage details and options. ns_pools: The "ns_pools" command enables configuration of one or more pools of connection processing threads. The pools allow certain requests to be handled by specific threads. This could, for example, ensure multiple long running requests don't block other short running requests. Pools are selected based on method/url pairs similar to the mappings managed by the "ns_register_proc" command. By default, all requests are handled by a single, unlimited, "default" pool. There is also an "error" pool as described below. Coupled with the new "ns_limits" command, pools can provide for sophisticated resource management. ns_limit: The "ns_limit" command enables setting various resource limits for specified method/url combinations. These limits include such items as max concurrent connections, max file upload size, and timeouts waiting for connection processing. When limits are exceeded, connections are immediately dispatched to a dedicated "error" connection processing pool to generate a quick error response. By default all requests share the same default limits. Coupled with the new "ns_pools" command, URL-based limits can provide for sophisticated resource management. ns_register_fastpath: The new "ns_register_fastpath" command enables mapping of specific directories to the internal static file response code. See also the new Ns_FastPathOp API. ns_adp_flush: The "ns_adp_flush" command allows buffered ADP output to be immediately flushed to the client. If no output has been sent, the server will first generate the appropriate HTTP response headers for a streaming response. An implicit flush will also be performed when the ADP buffer overflows. ns_adp_close: The "ns_adp_close" command flushes content as with ns_adp_flush and then closes the connection so no additional content can be sent. This can be useful to keep the client from waiting while post-processing steps continue. ns_adp_registerscript The "ns_adp_registerscript" command is similar to the ns_adp_regsiteradp command except it registers an ordinary script instead of text/script ADP code to execute for a given tag. ns_adp_ictl: The new "ns_adp_ictl" command provides various options to manage the ADP execution environment for current Tcl interpreter, e.g.: ns_adp_ctl bufsize ?size?; # Max output before forced flush ns_adp_ctl autoabort ?bool?; # Abort execution on client drop? ns_adp_ctl singlescript ?bool?; # Compile pages as a single script? ns_adp_ctl gzip ?bool?; # Gzip output if enabled in server? ns_adp_ctl trimspace ?bool?; # Trim leading whitespace in response? ns_adp_ctl channel ?chan?; # Set channel for ADP output ns_adp_ctl trace ?bool?; # Trace ADP execution ns_adp_ctl detailerror ?bool?; # Generate detailed error messages ns_adp_ctl displayerror ?bool?; # Format error message in page output ns_adp_ctl stricterror ?bool?; # Abort ADP execution on flush error ns_adp_include: The "ns_adp_include" command has been enhanced with the new "-cache ttl" and "-nocache" options to support execution results caching. Applications which isolate fully dynamic page components (e.g., personalized content) from partially dynamic page components (e.g., slowly changing news headlines) can benefit from using these options to cache and reuse the results of slowly changing components. This approach has the potential to dramatically improve the performance of such applications. ns_adp_ident: The new "ns_adp_ident" command can be used to tag and query ADP file versions. ns_cache: The "ns_cache" command enables creation and management of memory-based caches utilizing the underlying Ns_Cache C API's. ns_driver The new "ns_driver" command provides a "list" option to enumerate all driver instances and a "query" option to return a Tcl list of various statistics for a given driver. ns_ictl: The "ns_ictl" command has been enhanced with several new options including: trace: Enables Tcl-script based callbacks at points defined by the Ns_TclRegisterTrace routine. threads: Returns a list of all threads with Tcl interps for current virtual server. cancel: Sends an async-cancel message to a given thread, interrupting any Tcl execution in any AOLserver-based interpreter executing on the thread. package: Registers a Tcl package to be automatically required in each interp for the current virtual server. once: Registers a script to be executed exactly once for a virtual server. ns_internalredirect: The "ns_internalredirect" command enables re-authorization and restart of a connection as if it where originally for a different URL. This command provides access to the previously private routines used internally for such purposes, e.g., by the fastpath to handle directory URL's mapped to an ADP index files such as "index.adp". ns_for: ns_foreach: ns_while: These commands are replacements for the standard "for", "foreach", and "while" command which have the same semantics but also allow for monitoring and control by the "ns_loop_ctl" command described below. ns_loop_ctl: The "ns_loop_ctl" command enables listing, pause, resume, cancel, and evaluation of a script within "ns_for", "ns_foreach", and "ns_while" loops executing in other threads. In addition, the "install" option can be used at to swap the "ns_for", "ns_foreach", and "ns_while" commands for the "for", "foreach", and "while" commands, enabling monitoring of all loops in unmodified code. ns_register_encoding The new "ns_register_encoding" command enables mapping of method/URL combinations to specific charset encodings used to decode the request. If no mapping exists for a given method/URL, the server will use that defined for the virtual server or process wide by the "urlcharset" config setting. This setting defaults to NULL, or no encoding, thus assuming UTF-8 characters in the request data. ns_returnmoved: The "ns_returnmoved" command is similar to the "ns_returnredirect" command but returns a 301 "permanently moved" HTTP status code along with the redirected location. New and Updated C Routines: -------------------------- The following routines are new or updated from the last release. As few of the man pages have yet to be written, see the source code for parameter and results details. Ns_BinPath: New routine to construct file pathnames relative to the bin/ subdirectory similar to the Ns_LibPath and Ns_HomePath routines. Ns_ConnContent: Return a pointer to request content. If the content is not in memory and has been spooled to a temp file, a new file mapping will be created and returned. Note that the content is likely, but not guaranteed, to be followed by a terminating null byte. See also the "content" option of the "ns_conn" command. Ns_ConnContentFd: Return a file descriptor open on a temp file containing request content. If the content is in memory only, it will first be copied to a newly allocated temp file. You must not close the returned fd as it is owned by the server core which will reuse the open file for subsequent requests. For an example, see nscgi/nscgi.c which has been updated to use Ns_ConnContentFd instead of spooling to a temp file directly. See also the "contentchannel" option to the "ns_conn" command which returns a duplicate of the fd returned via Ns_ConnContentFd registered as a Tcl channel. Ns_ConnContentOnDisk: Returns 1 if the request content is already located in a temp file or 0 if the content is located in memory. A call to Ns_ConnContent after Ns_ConnContentOnDisk has returned 1 will result in a new file memory mapping being created. Ns_ConnGetFile: Ns_ConnFirstFile: Ns_ConnNextFile: Routines to find a specific file or enumerate all file objects embedded within a multipart form. See also the "files" option to the "ns_conn" command. Ns_ConnSendFdEx: Send contents of an open file descriptor from a specific file offset. This routine uses pread on Unix to enable multiple simultaneous calls with the same open fd and is currently unsupported on Win32. Ns_ConnReturnOpenFdEx: Generate a complete response with content from open file descriptor at given offset. This routine uses Ns_ConnSendFdEx and as such is also unsupported on Win32. Ns_ConnReturnServiceUnavailable: New routine to return an HTTP 503 response. Ns_CheckStack: Checks if the stack appears to have overrun. Note that the ADP evaluation engine now calls Ns_CheckStack on entry to each call frame and will generate an exception in the case of an endlessly recursive ADP condition. Ns_ClsAlloc: Ns_ClsSet: Ns_ClsGet: New interface, similar to thread-local storage, which enables user data to be saved and retrieved within the connection structure. This interface is intended to be used with the Ns_QueueWait interface so that data can be saved in the driver thread and retrieved later in a connection processing thread. Ns_ConnSetStatus: Ns_ConnGetStatus: New routines to set and get the HTTP status code to be used in responses generated via Ns_ConnFlush. See also the "status" option to the "ns_conn" command. Ns_ConnSetType: Enhanced to more intelligently set the input and output character encodings based on intended output charset. See also the "ns_adp_mimetype" command and the "encoding" and "urlencoding" options to the "ns_conn" command. Ns_ConnGetGzipFlag: Ns_ConnSetGzipFlag: Ns_ConnGetKeepAliveFlag: Ns_ConnSetKeepAliveFlag: New utility routines to query or set the gzip and connection keep-alive advisory flags. Ns_ConnFlush: New general purpose routine to construct and return dynamically generated, text-based responses, e.g., as generated from ADP. The routine incorporates much of the logic previously embedded in the ADP interface including the ability to automatically covert from UTF-8 to the output encoding and/or gzip-compress the output. In addition, the routine supports streaming responses, generating headers on the first call followed by HTTP/1.1-style chunked-encoding blocks on subsequent calls. See also the "ns_adp_flush" and "ns_adp_close" commands. Ns_ConnFlushDirect: Similar to Ns_ConnFlush but without any modification of the given buffer, thus useful for non-text content. Ns_DevNull: Returns a shared file descriptor open on /dev/null. This fd is owned by the AOLserver process and must not be closed. Ns_FastPathOp: New request callback to utilize the internal "fastpath" caching-file response code. See also the new "ns_register_fastpath" command. Ns_AdpRequestEx: Extended version of Ns_AdpRequest with an additional Ns_Time argument, specifying the timeout of optional execution results caching. Ns_FindCharset Locates the charset string within a full mimetype string, e.g., locating "utf-8" in "text/html; charset=utf-8". Ns_Gzip: Ns_SetGzipProc: Routine to gzip-compress a buffer if a compression function has been registered with a call to Ns_SetGzipProc. The new "nszlib" module registers such a callback. Ns_GetAllAddrByHost: New routine to return all addresses for a given host. See also the "ns_addrbyhost -all" command. Ns_ParseRequestEx: New extended version of Ns_ParseRequest which takes an optional Tcl_Encoding argument specifying the charset to decode the URL. The default is based on the context of the request. Ns_TaskCreate: Ns_TaskEnqueue: Ns_TaskRun: Ns_TaskCancel: Ns_TaskWait: Ns_TaskCallback: Ns_TaskDone: Ns_TaskFree: Ns_CreateTaskQueue: Ns_DestroyTaskQueue: New facility for event-based callback queues designed to replace the legacy Ns_SockCallback interface. As an example, see the "ns_http" command which has been updated to use the task interface. Ns_TclRegisterTrace: New routine to registere callbacks at specific points in the lifetime of a Tcl interpreter. This routine is a replacement for the legacy Ns_TclRegisterAt* routines. See also the "trace", "runtraces", and "gettraces", options to the "ns_ictl" command. Ns_QueueWait: New interface to enable event-driven callbacks in the driver thread before dispatching to pools for processing. This allows drivers to augment data received from the client (headers, request, content) with additional data fetched over the network (likely stored in connection-local storage via Ns_Cls). An example would be to add certain personalization data received via a Web service. The benefit of this approach is to accumulate additional data efficiently with driver-thread based event callbacks instead of through potentially blocking calls within connection threads. Ns_SockWaitEx: New extended version of Ns_SockWait using higher-resolution millisecond timeouts instead of 1-second resolution. ns_poll: New wrapper around system-provided poll or an emulation based on select when poll isn't available (Win32) or broken (OS/X). Ns_LibInit: NsThreads_LibInit: New routines to initialize the libnsd and libnsthread libraries. It is normally not necessary to call these routines as the dynamic library entry points as well as the Ns_Main and Ns_TclInit routines call these init routines at startup. They are available if necessary to initialize specialized, statically linked applications. Additional Updates: ------------------ * Enabled a global, pseudo-server, to support all Tcl commands outside the context of a virtual server, e.g., when the libnsd.so library is loaded into a Tcl shell. * Updated Tcl trace execution order to be FIFO and LIFO for init and cleanup callbacks respectively. * Moved more of the legacy (and generally confusing) Tcl interp duplication code from C into the the bootstrap init.tcl script utilizing the ns_ictl command. * ADP output buffer is now configurable with a maximum size (see the "ns_adp_ctl" command above). Upon overflow, the current output will be flushed to the client immediately in streaming mode to avoid consuming unbounded memory. * Restored AOLserver 3.x ADP parsing order, based on a patch from Alastair Young, where registered tags, <% ... %> scripts, and <script> ... </script> tags all have the same precedence. The ADP parser now also properly handles nested sequences, e.g.: <% ns_adp_puts [ns_adp_eval {<% ... %>} %> * Enhanced ADP error messaging capabilities which can be managed on a per-interp basis with ns_adp_ctl or configured by default, e.g.: ns_section "ns/server/server1/adp" ns_param stricterror false ;# Stop execution on error ns_param detailerror true ;# Include connection detail ns_param displayerror false ;# Return error message to client When "detailerror" and/or "displayerror" are set, an error message similar to the following would be appended to the server log and/or included in the output sent to the client: This is an error. while executing "error "This is an error."" at line 4 of adp file "/aolserver/servers/server1/pages/error.adp" while processing connection #2: GET /error.adp HTTP/1.1 Accept: */* Accept-Language: en Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) ... Connection: keep-alive Host: 192.168.2.1:8000 * New ADP execution tracing which can be enabled for a request with the ns_adp_ctl command or configured by default, e.g.: ns_section "ns/server/server1/adp" ns_param trace false ;# Enable text/script debug info. ns_param tracesize 40 ;# Max chars of each chunk to log. The output of ADP tracing is somewhat limited and poorly formatted. * Communication driver threads are now dedicated to each instance of loaded drivers instead of a single thread multiplexing all I/O. This both simplified the code and enabled the new Ns_QueueWait API. * Communication driver threads now truncate instead of freeing I/O dstring buffers, avoiding repeated realloc calls between connections. * Re-ordered inits to ensure startup fds and log file are initialized first. * Communication drivers and connection data access routines have been updated to support large request content spooled to temp files instead of always copying to potentially large in-memory regions. See the Ns_ConnContentFd API for more details. * Updated to HTTP response version (1.0 or 1.1) to match client version. * Updated "ns_db" Tcl API to be a native Tcl_Obj command which should improve performance over the previous technique of multiple comparisons of command option strings. * Added debug driver configuration option which will enable logging of unusual I/O or protocol errors. * Simplified charset/encoding config for process-wide url decoding and per-virtual server defaults for dynamic Tcl requests. * Several new default file extension to mimetype mappings have been added in nsd/mimetype.c, e.g., .mp3 = audio/mpeg. * Created new default index.adp page which displays a number of AOLserver configuration settings. * The OS/X dynamic library loading code has been removed in favor of the more standard dlopen/dlsym API now provided by OS/X 10.4. Changes to the Build Process: ---------------------------- * The Unix and Win32 build environments have been tightly integrated. Basically, the makefiles support both gmake on Unix and nmake on Win32 by including a platform-specific include/ns.mak created by the nsconfig.tcl Tcl script. As a side effect, several makefile variable names had to be changed, e.g., "LIB" on Unix is now "DLL" on Unix and Win32. In addition, platform-independent Tcl scripts are used for file removal and copying, a further dependency on a working Tcl installation while building. * On Unix, backwards compatible Makefile.module and Makefile.global are provided which simply include the new ns.mak and map old variables to new names if present, e.g., "LIB" to "DLL". * On Win32, the legacy Visual Studio build directories have been removed entirely has their maintenance proved irritating and complicated. * A new util/nsinstall-man.sh script installs man pages and also optionally converts the pages to HTML using groff on Unix. * Several new makefile install directives have been added, including install-tcl, install-skel, install-util, install-bins, and install-docs. * Added new stubs and makefile targets to support building a library or module in a consistent way which separates the library code installed as both a static archive and dynamic lib from the library and/or module init calls. * Added mynsd example directory showing how to build a custom static linked nsd binary. The previous conditional startup code and makefile support has been removed. * Compiling for 64-bit is known to work in general on Unix. It is unclear if AOLserver has ever been successfully compiled on 64-bit Windows and there is a known issue with the Win32 thread interface which would appear to make this not possible (the thread exit status pointer is cast to an smaller-sized integer). In addition, while AOLserver runs on 64-bit Unix systems, the interfaces have not been scrubbed and updated to support all 64-bit features, e.g., large file offsets. A more extensive 64-bit certification effort is planned for the next release. * Applied patches from Stephen Deasey for better compile time error checking, e.g., now checking printf-style arguments in Ns_DStringPrintf. Bug Fixes: --------- * Fixed crash bug caused by certain command sequences generated when using the "ns_chan" Tcl API (SF #1094480). * Fixed crash bug in channel tables cleanup and closing code. * Fixed crash bug loading nsdb outside a virtual server. * Fixed invalid return code in Ns_ConnReadLine(). * Updated simple HTML response routines (e.g., Ns_ConnReturnNotice, ns_returnnotice) to properly encode output from UTF-8. * Fixed bug where log level "dev" wasn't properly supported. * Switched to strtol() from atoi() for improved thread safety. * Added check for Darwin (OS/X) to disable detection of poll() which appears broken, using the poll() emulation code based on select() instead. * Fixed infinite recursion crash bug in GetAddr(). * Removed minor memory leak when no CGI mappings are present. * Removed most panics when compiling on 64 bit machines. * A thread race condition which could lead to a crash when using "ns_server threads" has been fixed. Known Issues: ------------ * Documentation remains incomplete. We are still missing useful overview and getting started materials and, while significant progress has been made, most of the man pages are still empty stubs. * Loading libnsd into a tclsh and then creating new threads with the ns_thread command will result in a crash when those threads exit. The issues has to do with finalization of the async-cancel context used to support the new "ns_ictl cancel" feature. This bug is not present when using the "nstclsh" binary. * The Win32 port does not support all of the new features of temp-file based request content. In particular, while large requests will spool to a temp file, a subsequent call to Ns_ConnContent will fail as the corresponding file mapping code has not yet been written. * The build environment in general is annoying. As described, there was an effort in this release to support Unix and Win32 from the same makefiles which, while a bit clever, likely irritated more Unix developers than excited Win32 developers. In addition, the Unix configure script is weak, overly reliant on the context from a properly built Tcl installation, and the makefiles rely too much on GNU make features. Creating a proper Unix configure script which creates proper Makefiles is planned for the next release along with a possible shift in the Win32 strategy (see next note). * AOLserver does not compile with the latest Visual C++ 2005 from Microsoft. While some of the new safety and security features in Visual C++ are interesting and the debugger has always been excellent, the complexity of Visual Studio and incompatibility of the Microsoft command line tools with Unix equivalents makes supporting Win32 increasingly irritating. As such, we will be exploring a shift to Msys-based Win32 build in the next release, enabling us to utilize our Unix-based development approach while still allowing AOLserver to run against native Win32 libraries. Feedback is appreciated. For now, AOLserver can be compiled on Win32 as described in the README file using the previous release of Visual C++. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������