+CONTENTS000644 000000 000000 00000007472 11035140640 012273 0ustar00rootroot000000 000000 @cwd /usr/pkg @src /usr/pkg @name apr-1.2.12 @blddep gcc34-3.4.6nb1 @pkgdep gcc34>=3.4.6 @blddep digest-20070803 @blddep tnftp-20070806 @blddep libtool-base-1.5.24nb5 @blddep pkg-config-0.23 @comment $NetBSD: PLIST,v 1.8 2007/01/24 19:46:45 epg Exp $ bin/apr-1-config @comment MD5:08e9efd4392b80e31ed09ed995f16a9b include/apr-1/apr.h @comment MD5:7ba64eb428dd4a30086bc32aa1c78fde include/apr-1/apr_allocator.h @comment MD5:7e02d4bb3a42b503770e622403896c82 include/apr-1/apr_atomic.h @comment MD5:810285caec4b17d89ef8d79c8556963f include/apr-1/apr_dso.h @comment MD5:ef93e8c2dc8ab0d707e34e9f6df7c1aa include/apr-1/apr_env.h @comment MD5:81ebe3a2c09974b7d146b1202db17415 include/apr-1/apr_errno.h @comment MD5:71fcce7a6060632897c0ec0aeed558f5 include/apr-1/apr_file_info.h @comment MD5:5fb5250ff2b235dc4317b816251a4196 include/apr-1/apr_file_io.h @comment MD5:e2449e815420bc6e2b9e5c4793cc5885 include/apr-1/apr_fnmatch.h @comment MD5:0ea13e31ac2fb37ea3b1a9c0d1dcad6d include/apr-1/apr_general.h @comment MD5:592e92765b60ec27fa093b07782eccfc include/apr-1/apr_getopt.h @comment MD5:b2190538827036dd1e137fa62b190796 include/apr-1/apr_global_mutex.h @comment MD5:3afa4661dccf07b901366682f5a8129d include/apr-1/apr_hash.h @comment MD5:ea33d347709f3a0852de251297caf84b include/apr-1/apr_inherit.h @comment MD5:418de0ebe8e4fbe8f8f2e420f47beaa7 include/apr-1/apr_lib.h @comment MD5:a0d65a3a8680b6ea679f5afeecdc8091 include/apr-1/apr_mmap.h @comment MD5:9fd6a9ae3c969677cdee6f4338676bba include/apr-1/apr_network_io.h @comment MD5:1d13b181429e72d87682e099a2f0def2 include/apr-1/apr_poll.h @comment MD5:c032b425fd7eda7cc3d423d8eb4ae2ca include/apr-1/apr_pools.h @comment MD5:b7ab93da3b149b318c7fd4ad553f78b8 include/apr-1/apr_portable.h @comment MD5:c5c3d130dc459fb53e60fac0d4fb79e9 include/apr-1/apr_proc_mutex.h @comment MD5:46b95dee5a5ce3608d0a552523dea2a3 include/apr-1/apr_random.h @comment MD5:7a484c88a7922fb6825eae4cd1839d78 include/apr-1/apr_ring.h @comment MD5:b38f1a90b526276b7a996cf42554afe2 include/apr-1/apr_shm.h @comment MD5:ede350379ee257e41c134d4e4ec38892 include/apr-1/apr_signal.h @comment MD5:d8493fdefab3aec25b7826d6477cf5d7 include/apr-1/apr_strings.h @comment MD5:0989fa473b237b11c9053a647a36ccae include/apr-1/apr_support.h @comment MD5:c2365d3afa69c2a0740fce83811ab5cb include/apr-1/apr_tables.h @comment MD5:fa5bf422802aeda527c3504adfded190 include/apr-1/apr_thread_cond.h @comment MD5:0b35223378c8840008e0134d5abc5507 include/apr-1/apr_thread_mutex.h @comment MD5:8d1f794cd398a65f65b60997e8e05288 include/apr-1/apr_thread_proc.h @comment MD5:0aea00cc46f25263f57f5e164def77f1 include/apr-1/apr_thread_rwlock.h @comment MD5:29c3887ae451697e930897a7dad1040c include/apr-1/apr_time.h @comment MD5:3b23d78bcdd1f2d3e5a4c13239513cf3 include/apr-1/apr_user.h @comment MD5:28c348af2e4f3ba6db13713202ef27e2 include/apr-1/apr_version.h @comment MD5:c9261d39c7087a4fd6fc817f78cf1915 include/apr-1/apr_want.h @comment MD5:2fd6481a02b279c0ca050facfe1443a8 lib/apr.exp @comment MD5:8e38e53c9fa89de6bbfb678feb8bd01f lib/libapr-1.la @comment MD5:18da17c54b45b3405d5c73243575acd9 lib/libapr-1.a @comment MD5:3981d2dd94bac8ef766dc41a32b56b7a lib/libapr-1.so @comment Symlink:libapr-1.so.0.2.12 lib/libapr-1.so.0 @comment Symlink:libapr-1.so.0.2.12 lib/libapr-1.so.0.2.12 @comment MD5:e529850be8e527480604b26d08c6d423 lib/pkgconfig/apr-1.pc @comment MD5:c6355d72487be30a9aa5a50d0e3419de libexec/apr/apr_rules.mk @comment MD5:a25011b34a5cf355fa5ec145a20f9527 libexec/apr/libtool @comment MD5:b611becc4ba30bdd62cb9afaa19beb1a libexec/apr/make_exports.awk @comment MD5:b69554fa6fefee589c0637a85786e3d2 libexec/apr/make_var_export.awk @comment MD5:0f15daa748501970b84930e7b7d0157c libexec/apr/mkdir.sh @comment MD5:bef7046171622cf4c81818437728335a @dirrm libexec/apr @dirrm include/apr-1 @cwd . @ignore +COMMENT @ignore +DESC @ignore +BUILD_VERSION @ignore +BUILD_INFO @ignore +SIZE_PKG @ignore +SIZE_ALL +COMMENT000444 000000 000000 00000000030 11035140640 012115 0ustar00rootroot000000 000000 Apache Portable Runtime +DESC000444 000000 000000 00000000277 11035140640 011546 0ustar00rootroot000000 000000 The Apache Portable Run-time mission is to provide a library of routines that allows programmers to write a program once and be able to compile it anywhere. Homepage: http://apr.apache.org/ +BUILD_VERSION000644 000000 000000 00000000465 11035140633 013077 0ustar00rootroot000000 000000 devel/apr/buildlink3.mk: $NetBSD: buildlink3.mk,v 1.31 2007/06/30 15:04:55 joerg Exp $ devel/apr/distinfo: $NetBSD: distinfo,v 1.23 2007/12/09 22:08:32 jklos Exp $ devel/apr/Makefile: $NetBSD: Makefile,v 1.55 2007/12/09 22:08:32 jklos Exp $ devel/apr/PLIST: $NetBSD: PLIST,v 1.8 2007/01/24 19:46:45 epg Exp $ +BUILD_INFO000644 000000 000000 00000011156 11035140640 012502 0ustar00rootroot000000 000000 ABI= BUILD_DATE=2008-07-09 08:48:15 -0500 BUILD_HOST=SunOS marcie.christtrek.org 5.10 Generic_127127-11 sun4u sparc SUNW,Ultra-5_10 CATEGORIES=devel CC_VERSION=gcc-3.4.6 CFLAGS=-O -O2 -I/usr/pkg/gcc34/include -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include -I/usr/include -I/usr/pkg/include CMAKE_ARGS= CONFIGURE_ARGS=--with-devrandom=/dev/urandom --with-installbuilddir=/usr/pkg/libexec/apr --with-libintl-prefix="/usr/pkg" --with-libiconv-prefix=/usr/pkg --prefix=/usr/pkg --host=sparc-sun-solaris2 --mandir=/usr/pkg/man CONFIGURE_ENV=LIBS=-lnsl LIBTOOL="libtool " INSTALL_INFO= MAKEINFO=/usr/pkgsrc/devel/apr/work.sparc/.tools/bin/makeinfo AWK=/usr/pkg/bin/nawk CAT=/usr/bin/cat ac_cv_path_CAT=/usr/bin/cat CHMOD=/usr/bin/chmod CMP=/bin/cmp CP=/bin/cp DIFF=/bin/diff ECHO=/usr/ucb/echo ac_cv_path_ECHO=/usr/ucb/echo EGREP=/usr/xpg4/bin/grep\ -E ac_cv_path_EGREP=/usr/xpg4/bin/grep\ -E SETENV=/usr/bin/env ENV_PROG=/usr/bin/env ac_cv_path_ENV=/usr/bin/env FALSE=/usr/bin/false ac_cv_path_FALSE=/usr/bin/false FIND=/usr/bin/find GREP=/usr/xpg4/bin/grep ac_cv_path_GREP=/usr/xpg4/bin/grep HOSTNAME=/bin/hostname LN=/usr/bin/ln LS=/usr/bin/ls MKDIR=/usr/bin/mkdir\ -p MV=/usr/bin/mv RM=/usr/bin/rm RMDIR=/usr/bin/rmdir SED=/usr/pkg/bin/nbsed SORT=/usr/bin/sort TAR=/usr/pkg/bin/tar TEST=test ac_cv_path_TEST=test TOUCH=/usr/bin/touch TR=/usr/bin/tr TRUE=/usr/bin/true ac_cv_path_TRUE=/usr/bin/true PKG_CONFIG=/usr/pkgsrc/devel/apr/work.sparc/.tools/bin/pkg-config PKG_CONFIG_LIBDIR=/usr/pkgsrc/devel/apr/work.sparc/.buildlink/lib/pkgconfig:/usr/pkgsrc/devel/apr/work.sparc/.buildlink/share/pkgconfig PKG_CONFIG_LOG=/usr/pkgsrc/devel/apr/work.sparc/.pkg-config.log PKG_CONFIG_PATH= MAKE=make PTHREAD_CFLAGS=\ -D_REENTRANT PTHREAD_LDFLAGS= PTHREAD_LIBS=-lpthread\ -lrt PTHREADBASE=/usr WRAPPER_DEBUG=no WRAPPER_UPDATE_CACHE=yes CC=gcc CFLAGS=-O\ -O2\ -I/usr/pkg/gcc34/include\ -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include\ -I/usr/include\ -I/usr/pkg/include CPPFLAGS=-I/usr/pkg/gcc34/include\ -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include\ -I/usr/include\ -I/usr/pkg/include CXX=g++ CXXFLAGS=-O\ -O2\ -I/usr/pkg/gcc34/include\ -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include\ -I/usr/include\ -I/usr/pkg/include\ -O2 COMPILER_RPATH_FLAG=-Wl,-R F77=f77 FC=f77 FFLAGS=-O LANG=C LC_COLLATE=C LC_CTYPE=C LC_MESSAGES=C LC_MONETARY=C LC_NUMERIC=C LC_TIME=C LDFLAGS=-L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6\ -Wl,-R/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6\ -L/usr/pkg/gcc34/lib\ -Wl,-R/usr/pkg/gcc34/lib\ -L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/\ -Wl,-R/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/\ -L/usr/lib\ -Wl,-R/usr/lib\ -L/usr/pkg/lib\ -Wl,-R/usr/pkg/lib LINKER_RPATH_FLAG=-R PATH=/usr/pkgsrc/devel/apr/work.sparc/.wrapper/bin:/usr/pkgsrc/devel/apr/work.sparc/.buildlink/bin:/usr/pkgsrc/devel/apr/work.sparc/.gcc/bin:/usr/pkgsrc/devel/apr/work.sparc/.tools/bin:/usr/pkg/bin:/usr/sbin:/usr/bin:/usr/ucb:/usr/ccs/bin:/usr/X11/bin:/usr/pkg/sbin:/usr/pkg/bin:/usr/openwin/bin:/usr/sfw/sbin:/usr/sfw/bin:/usr/local/bin:/usr/pkg/bin:/usr/openwin/bin PREFIX=/usr/pkg PKG_SYSCONFDIR=/usr/pkg/etc CXXCPP=gcc\ -E HOME=/usr/pkgsrc/devel/apr/work.sparc/.home CONFIG_SHELL=/bin/ksh LIBS=-lnsl ac_given_INSTALL=/usr/ucb/install\ -c\ -o\ root\ -g\ root CPPFLAGS= -I/usr/pkg/gcc34/include -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include -I/usr/include -I/usr/pkg/include FFLAGS=-O HOMEPAGE=http://apr.apache.org/ LDFLAGS= -L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6 -Wl,-R/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6 -L/usr/pkg/gcc34/lib -Wl,-R/usr/pkg/gcc34/lib -L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/ -Wl,-R/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/ -L/usr/lib -Wl,-R/usr/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib LICENSE= LOCALBASE=/usr/pkg MACHINE_ARCH=sparc MACHINE_GNU_ARCH=sparc MAINTAINER=pkgsrc-users@NetBSD.org NO_BIN_ON_CDROM= NO_BIN_ON_FTP= NO_SRC_ON_CDROM= NO_SRC_ON_FTP= OBJECT_FMT=ELF OPSYS=SunOS OS_VERSION=5.10 PKGINFODIR=info PKGMANDIR=man PKGPATH=devel/apr PKG_SYSCONFBASEDIR=/usr/pkg/etc PKG_SYSCONFDIR=/usr/pkg/etc PKGTOOLS_VERSION=20080423 _PLIST_IGNORE_FILES= PROVIDES=/usr/pkg/lib/libapr-1.so.0 REQUIRES=/lib/libaio.so.1 REQUIRES=/lib/libc.so.1 REQUIRES=/lib/libdoor.so.1 REQUIRES=/lib/libgen.so.1 REQUIRES=/lib/libmd.so.1 REQUIRES=/lib/libmp.so.2 REQUIRES=/lib/libm.so.2 REQUIRES=/lib/libnsl.so.1 REQUIRES=/lib/libpthread.so.1 REQUIRES=/lib/librt.so.1 REQUIRES=/lib/libscf.so.1 REQUIRES=/lib/libsendfile.so.1 REQUIRES=/lib/libsocket.so.1 REQUIRES=/lib/libuuid.so.1 REQUIRES=/lib/libuutil.so.1 REQUIRES=/usr/pkg/gcc34/lib/libgcc_s.so.1 RESTRICTED= _USE_DESTDIR=no +SIZE_PKG000644 000000 000000 00000000010 11035140640 012266 0ustar00rootroot000000 000000 1030597 +SIZE_ALL000644 000000 000000 00000000012 11035140633 012261 0ustar00rootroot000000 000000 474809105 bin/apr-1-config000755 000000 000000 00000015550 11035140630 013714 0ustar00rootroot000000 000000 #!/bin/sh # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # APR script designed to allow easy command line access to APR configuration # parameters. APR_MAJOR_VERSION="1" APR_DOTTED_VERSION="1.2.12" prefix="/usr/pkg" exec_prefix="${prefix}" bindir="${exec_prefix}/bin" libdir="${exec_prefix}/lib" datadir="${prefix}" installbuilddir="/usr/pkg/libexec/apr" includedir="${prefix}/include/apr-${APR_MAJOR_VERSION}" CC="gcc" CPP="gcc -E" SHELL="/bin/ksh" CPPFLAGS=" -DSOLARIS2=sparc-sun-solaris2 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_LARGEFILE64_SOURCE" CFLAGS="" LDFLAGS="" LIBS="-luuid -lsendfile -lrt -lsocket -lpthread" EXTRA_INCLUDES="" SHLIBPATH_VAR="LD_LIBRARY_PATH" APR_SOURCE_DIR="/usr/pkgsrc/devel/apr/work.sparc/apr-1.2.12" APR_BUILD_DIR="/usr/pkgsrc/devel/apr/work.sparc/apr-1.2.12" APR_SO_EXT="lo" APR_LIB_TARGET="-rpath \$(libdir) \$(OBJECTS)" APR_LIBNAME="apr-${APR_MAJOR_VERSION}" # NOTE: the following line is modified during 'make install': alter with care! location=installed show_usage() { cat << EOF Usage: apr-$APR_MAJOR_VERSION-config [OPTION] Known values for OPTION are: --prefix[=DIR] change prefix to DIR --bindir print location where binaries are installed --includedir print location where headers are installed --cc print C compiler name --cpp print C preprocessor name and any required options --cflags print C compiler flags --cppflags print C preprocessor flags --includes print include information --ldflags print linker flags --libs print additional libraries to link against --srcdir print APR source directory --installbuilddir print APR build helper directory --link-ld print link switch(es) for linking to APR --link-libtool print the libtool inputs for linking to APR --shlib-path-var print the name of the shared library path env var --apr-la-file print the path to the .la file, if available --apr-so-ext print the extensions of shared objects on this platform --apr-lib-target print the libtool target information --apr-libtool print the path to APR's libtool --version print the APR's version as a dotted triple --help print this help When linking with libtool, an application should do something like: APR_LIBS="\`apr-$APR_MAJOR_VERSION-config --link-libtool --libs\`" or when linking directly: APR_LIBS="\`apr-$APR_MAJOR_VERSION-config --link-ld --libs\`" An application should use the results of --cflags, --cppflags, --includes, and --ldflags in their build process. EOF } if test $# -eq 0; then show_usage exit 1 fi if test "$location" = "installed"; then LA_FILE="$libdir/lib${APR_LIBNAME}.la" else LA_FILE="$APR_BUILD_DIR/lib${APR_LIBNAME}.la" fi flags="" while test $# -gt 0; do # Normalize the prefix. case "$1" in -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac case "$1" in # It is possible for the user to override our prefix. --prefix=*) prefix=$optarg ;; --prefix) echo $prefix exit 0 ;; --bindir) echo $bindir exit 0 ;; --includedir) if test "$location" = "installed"; then flags="$includedir" elif test "$location" = "source"; then flags="$APR_SOURCE_DIR/include" else # this is for VPATH builds flags="$APR_BUILD_DIR/include $APR_SOURCE_DIR/include" fi echo $flags exit 0 ;; --cc) echo $CC exit 0 ;; --cpp) echo $CPP exit 0 ;; --cflags) flags="$flags $CFLAGS" ;; --cppflags) flags="$flags $CPPFLAGS" ;; --libs) flags="$flags $LIBS" ;; --ldflags) flags="$flags $LDFLAGS" ;; --includes) if test "$location" = "installed"; then flags="$flags -I$includedir $EXTRA_INCLUDES" elif test "$location" = "source"; then flags="$flags -I$APR_SOURCE_DIR/include $EXTRA_INCLUDES" else # this is for VPATH builds flags="$flags -I$APR_BUILD_DIR/include -I$APR_SOURCE_DIR/include $EXTRA_INCLUDES" fi ;; --srcdir) echo $APR_SOURCE_DIR exit 0 ;; --installbuilddir) if test "$location" = "installed"; then echo "${installbuilddir}" elif test "$location" = "source"; then echo "$APR_SOURCE_DIR/build" else # this is for VPATH builds echo "$APR_BUILD_DIR/build" fi exit 0 ;; --version) echo $APR_DOTTED_VERSION exit 0 ;; --link-ld) if test "$location" = "installed"; then ### avoid using -L if libdir is a "standard" location like /usr/lib flags="$flags -L$libdir -l${APR_LIBNAME}" else ### this surely can't work since the library is in .libs? flags="$flags -L$APR_BUILD_DIR -l${APR_LIBNAME}" fi ;; --link-libtool) # If the LA_FILE exists where we think it should be, use it. If we're # installed and the LA_FILE does not exist, assume to use # (the LA_FILE may not have been installed). If we're building ourselves, # we'll assume that at some point the .la file be created. if test -f "$LA_FILE"; then flags="$flags $LA_FILE" elif test "$location" = "installed"; then ### avoid using -L if libdir is a "standard" location like /usr/lib # Since the user is specifying they are linking with libtool, we # *know* that -R will be recognized by libtool. flags="$flags -L$libdir -R$libdir -l${APR_LIBNAME}" else flags="$flags $LA_FILE" fi ;; --shlib-path-var) echo "$SHLIBPATH_VAR" exit 0 ;; --apr-la-file) if test -f "$LA_FILE"; then flags="$flags $LA_FILE" fi ;; --apr-so-ext) echo "$APR_SO_EXT" exit 0 ;; --apr-lib-target) echo "$APR_LIB_TARGET" exit 0 ;; --apr-libtool) if test "$location" = "installed"; then echo "${installbuilddir}/libtool" else echo "$APR_BUILD_DIR/libtool" fi exit 0 ;; --help) show_usage exit 0 ;; *) show_usage exit 1 ;; esac # Next please. shift done if test -n "$flags"; then echo "$flags" fi exit 0 include/apr-1/apr.h000444 000000 000000 00000030102 11035140625 014321 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_H #define APR_H /* GENERATED FILE WARNING! DO NOT EDIT apr.h * * You must modify apr.h.in instead. * * And please, make an effort to stub apr.hw and apr.hnw in the process. */ /** * @file apr.h * @brief APR Platform Definitions * @remark This is a generated header generated from include/apr.h.in by * ./configure, or copied from include/apr.hw or include/apr.hnw * for Win32 or Netware by those build environments, respectively. */ /** * @defgroup APR Apache Portability Runtime library * @{ */ /** * @defgroup apr_platform Platform Definitions * @{ * @warning * The actual values of macros and typedefs on this page
* are platform specific and should NOT be relied upon!
*/ /* So that we can use inline on some critical functions, and use * GNUC attributes (such as to get -Wall warnings for printf-like * functions). Only do this in gcc 2.7 or later ... it may work * on earlier stuff, but why chance it. * * We've since discovered that the gcc shipped with NeXT systems * as "cc" is completely broken. It claims to be __GNUC__ and so * on, but it doesn't implement half of the things that __GNUC__ * means. In particular it's missing inline and the __attribute__ * stuff. So we hack around it. PR#1613. -djg */ #if !defined(__GNUC__) || __GNUC__ < 2 || \ (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ||\ defined(NEXT) #ifndef __attribute__ #define __attribute__(__x) #endif #define APR_INLINE #define APR_HAS_INLINE 0 #else #define APR_INLINE __inline__ #define APR_HAS_INLINE 1 #endif #define APR_HAVE_ARPA_INET_H 1 #define APR_HAVE_CONIO_H 0 #define APR_HAVE_CRYPT_H 1 #define APR_HAVE_CTYPE_H 1 #define APR_HAVE_DIRENT_H 1 #define APR_HAVE_ERRNO_H 1 #define APR_HAVE_FCNTL_H 1 #define APR_HAVE_IO_H 0 #define APR_HAVE_LIMITS_H 1 #define APR_HAVE_NETDB_H 1 #define APR_HAVE_NETINET_IN_H 1 #define APR_HAVE_NETINET_SCTP_H 1 #define APR_HAVE_NETINET_SCTP_UIO_H 0 #define APR_HAVE_NETINET_TCP_H 1 #define APR_HAVE_PTHREAD_H 1 #define APR_HAVE_SEMAPHORE_H 1 #define APR_HAVE_SIGNAL_H 1 #define APR_HAVE_STDARG_H 1 #define APR_HAVE_STDINT_H 1 #define APR_HAVE_STDIO_H 1 #define APR_HAVE_STDLIB_H 1 #define APR_HAVE_STRING_H 1 #define APR_HAVE_STRINGS_H 1 #define APR_HAVE_SYS_IOCTL_H 1 #define APR_HAVE_SYS_SENDFILE_H 1 #define APR_HAVE_SYS_SIGNAL_H 1 #define APR_HAVE_SYS_SOCKET_H 1 #define APR_HAVE_SYS_SOCKIO_H 1 #define APR_HAVE_SYS_SYSLIMITS_H 0 #define APR_HAVE_SYS_TIME_H 1 #define APR_HAVE_SYS_TYPES_H 1 #define APR_HAVE_SYS_UIO_H 1 #define APR_HAVE_SYS_UN_H 1 #define APR_HAVE_SYS_WAIT_H 1 #define APR_HAVE_TIME_H 1 #define APR_HAVE_UNISTD_H 1 /** @} */ /* We don't include our conditional headers within the doxyblocks * or the extern "C" namespace */ #if APR_HAVE_SYS_TYPES_H #include #endif #if APR_HAVE_SYS_SOCKET_H #include #endif #if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) /* C99 7.18.4 requires that stdint.h only exposes INT64_C * and UINT64_C for C++ implementations if this is defined: */ #define __STDC_CONSTANT_MACROS #endif #if APR_HAVE_STDINT_H #include #endif #if APR_HAVE_SYS_WAIT_H #include #endif #ifdef OS2 #define INCL_DOS #define INCL_DOSERRORS #include #endif /* header files for PATH_MAX, _POSIX_PATH_MAX */ #if APR_HAVE_LIMITS_H #include #else #if APR_HAVE_SYS_SYSLIMITS_H #include #endif #endif #ifdef __cplusplus extern "C" { #endif /** * @addtogroup apr_platform * @ingroup APR * @{ */ #define APR_HAVE_SHMEM_MMAP_TMP 1 #define APR_HAVE_SHMEM_MMAP_SHM 1 #define APR_HAVE_SHMEM_MMAP_ZERO 1 #define APR_HAVE_SHMEM_SHMGET_ANON 1 #define APR_HAVE_SHMEM_SHMGET 1 #define APR_HAVE_SHMEM_MMAP_ANON 1 #define APR_HAVE_SHMEM_BEOS 0 #define APR_USE_SHMEM_MMAP_TMP 0 #define APR_USE_SHMEM_MMAP_SHM 0 #define APR_USE_SHMEM_MMAP_ZERO 0 #define APR_USE_SHMEM_SHMGET_ANON 0 #define APR_USE_SHMEM_SHMGET 1 #define APR_USE_SHMEM_MMAP_ANON 1 #define APR_USE_SHMEM_BEOS 0 #define APR_USE_FLOCK_SERIALIZE 0 #define APR_USE_SYSVSEM_SERIALIZE 0 #define APR_USE_POSIXSEM_SERIALIZE 0 #define APR_USE_FCNTL_SERIALIZE 1 #define APR_USE_PROC_PTHREAD_SERIALIZE 0 #define APR_USE_PTHREAD_SERIALIZE 1 #define APR_HAS_FLOCK_SERIALIZE 0 #define APR_HAS_SYSVSEM_SERIALIZE 1 #define APR_HAS_POSIXSEM_SERIALIZE 1 #define APR_HAS_FCNTL_SERIALIZE 1 #define APR_HAS_PROC_PTHREAD_SERIALIZE 1 #define APR_PROCESS_LOCK_IS_GLOBAL 0 #define APR_HAVE_CORKABLE_TCP 0 #define APR_HAVE_GETRLIMIT 1 #define APR_HAVE_IN_ADDR 1 #define APR_HAVE_INET_ADDR 1 #define APR_HAVE_INET_NETWORK 1 #define APR_HAVE_IPV6 1 #define APR_HAVE_MEMMOVE 1 #define APR_HAVE_SETRLIMIT 1 #define APR_HAVE_SIGACTION 1 #define APR_HAVE_SIGSUSPEND 1 #define APR_HAVE_SIGWAIT 1 #define APR_HAVE_SA_STORAGE 1 #define APR_HAVE_STRCASECMP 1 #define APR_HAVE_STRDUP 1 #define APR_HAVE_STRICMP 0 #define APR_HAVE_STRNCASECMP 1 #define APR_HAVE_STRNICMP 0 #define APR_HAVE_STRSTR 1 #define APR_HAVE_MEMCHR 1 #define APR_HAVE_STRUCT_RLIMIT 1 #define APR_HAVE_UNION_SEMUN 0 #define APR_HAVE_SCTP 1 /* APR Feature Macros */ #define APR_HAS_SHARED_MEMORY 1 #define APR_HAS_THREADS 1 #define APR_HAS_SENDFILE 1 #define APR_HAS_MMAP 1 #define APR_HAS_FORK 1 #define APR_HAS_RANDOM 1 #define APR_HAS_OTHER_CHILD 1 #define APR_HAS_DSO 1 #define APR_HAS_SO_ACCEPTFILTER 0 #define APR_HAS_UNICODE_FS 0 #define APR_HAS_PROC_INVOKED 0 #define APR_HAS_USER 1 #define APR_HAS_LARGE_FILES 1 #define APR_HAS_XTHREAD_FILES 0 #define APR_HAS_OS_UUID 1 #define APR_PROCATTR_USER_SET_REQUIRES_PASSWORD 0 /* APR sets APR_FILES_AS_SOCKETS to 1 on systems where it is possible * to poll on files/pipes. */ #define APR_FILES_AS_SOCKETS 1 /* This macro indicates whether or not EBCDIC is the native character set. */ #define APR_CHARSET_EBCDIC 0 /* If we have a TCP implementation that can be "corked", what flag * do we use? */ #define APR_TCP_NOPUSH_FLAG 0 /* Is the TCP_NODELAY socket option inherited from listening sockets? */ #define APR_TCP_NODELAY_INHERITED 1 /* Is the O_NONBLOCK flag inherited from listening sockets? */ #define APR_O_NONBLOCK_INHERITED 1 /* Typedefs that APR needs. */ typedef unsigned char apr_byte_t; typedef short apr_int16_t; typedef unsigned short apr_uint16_t; typedef int apr_int32_t; typedef unsigned int apr_uint32_t; typedef long long apr_int64_t; typedef unsigned long long apr_uint64_t; typedef size_t apr_size_t; typedef ssize_t apr_ssize_t; typedef off64_t apr_off_t; typedef socklen_t apr_socklen_t; typedef unsigned long apr_ino_t; /* As we don't want to break users who author for 1.2.x, we can't * present this type until they have included apr_file_info.h * where it was originally declared in release 1.2.0. * Mask it from accedental misuse here. */ #define apr_ino_t apr_ino_t__requires__apr_file_info_h #define APR_SIZEOF_VOIDP 4 /* Are we big endian? */ #define APR_IS_BIGENDIAN 1 /* Mechanisms to properly type numeric literals */ #define APR_INT64_C(val) INT64_C(val) #define APR_UINT64_C(val) UINT64_C(val) /* Definitions that APR programs need to work properly. */ /** * Thread callbacks from APR functions must be declared with APR_THREAD_FUNC, * so that they follow the platform's calling convention. * @example */ /** void* APR_THREAD_FUNC my_thread_entry_fn(apr_thread_t *thd, void *data); */ #define APR_THREAD_FUNC /** * The public APR functions are declared with APR_DECLARE(), so they may * use the most appropriate calling convention. Public APR functions with * variable arguments must use APR_DECLARE_NONSTD(). * * @remark Both the declaration and implementations must use the same macro. * @example */ /** APR_DECLARE(rettype) apr_func(args) * @see APR_DECLARE_NONSTD @see APR_DECLARE_DATA * @remark Note that when APR compiles the library itself, it passes the * symbol -DAPR_DECLARE_EXPORT to the compiler on some platforms (e.g. Win32) * to export public symbols from the dynamic library build.\n * The user must define the APR_DECLARE_STATIC when compiling to target * the static APR library on some platforms (e.g. Win32.) The public symbols * are neither exported nor imported when APR_DECLARE_STATIC is defined.\n * By default, compiling an application and including the APR public * headers, without defining APR_DECLARE_STATIC, will prepare the code to be * linked to the dynamic library. */ #define APR_DECLARE(type) type /** * The public APR functions using variable arguments are declared with * APR_DECLARE_NONSTD(), as they must follow the C language calling convention. * @see APR_DECLARE @see APR_DECLARE_DATA * @remark Both the declaration and implementations must use the same macro. * @example */ /** APR_DECLARE_NONSTD(rettype) apr_func(args, ...); */ #define APR_DECLARE_NONSTD(type) type /** * The public APR variables are declared with AP_MODULE_DECLARE_DATA. * This assures the appropriate indirection is invoked at compile time. * @see APR_DECLARE @see APR_DECLARE_NONSTD * @remark Note that the declaration and implementations use different forms, * but both must include the macro. * @example */ /** extern APR_DECLARE_DATA type apr_variable;\n * APR_DECLARE_DATA type apr_variable = value; */ #define APR_DECLARE_DATA /* Define APR_SSIZE_T_FMT. * If ssize_t is an integer we define it to be "d", * if ssize_t is a long int we define it to be "ld", * if ssize_t is neither we declare an error here. * I looked for a better way to define this here, but couldn't find one, so * to find the logic for this definition search for "ssize_t_fmt" in * configure.in. */ #define APR_SSIZE_T_FMT "d" /* And APR_SIZE_T_FMT */ #define APR_SIZE_T_FMT "d" /* And APR_OFF_T_FMT */ #define APR_OFF_T_FMT APR_INT64_T_FMT /* And APR_PID_T_FMT */ #define APR_PID_T_FMT "ld" /* And APR_INT64_T_FMT */ #define APR_INT64_T_FMT "lld" /* And APR_UINT64_T_FMT */ #define APR_UINT64_T_FMT "llu" /* And APR_UINT64_T_HEX_FMT */ #define APR_UINT64_T_HEX_FMT "llx" /* Does the proc mutex lock threads too */ #define APR_PROC_MUTEX_IS_GLOBAL 0 /* Local machine definition for console and log output. */ #define APR_EOL_STR "\n" #if APR_HAVE_SYS_WAIT_H #ifdef WEXITSTATUS #define apr_wait_t int #else #define apr_wait_t union wait #define WEXITSTATUS(status) (int)((status).w_retcode) #define WTERMSIG(status) (int)((status).w_termsig) #endif /* !WEXITSTATUS */ #endif /* HAVE_SYS_WAIT_H */ #if defined(PATH_MAX) #define APR_PATH_MAX PATH_MAX #elif defined(_POSIX_PATH_MAX) #define APR_PATH_MAX _POSIX_PATH_MAX #else #error no decision has been made on APR_PATH_MAX for your platform #endif /** @} */ #ifdef __cplusplus } #endif #endif /* APR_H */ include/apr-1/apr_allocator.h000444 000000 000000 00000012326 11035140625 016371 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_ALLOCATOR_H #define APR_ALLOCATOR_H /** * @file apr_allocator.h * @brief APR Internal Memory Allocation */ #include "apr.h" #include "apr_errno.h" #define APR_WANT_MEMFUNC /**< For no good reason? */ #include "apr_want.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup apr_allocator Internal Memory Allocation * @ingroup APR * @{ */ /** the allocator structure */ typedef struct apr_allocator_t apr_allocator_t; /** the structure which holds information about the allocation */ typedef struct apr_memnode_t apr_memnode_t; /** basic memory node structure * @note The next, ref and first_avail fields are available for use by the * caller of apr_allocator_alloc(), the remaining fields are read-only. * The next field has to be used with caution and sensibly set when the * memnode is passed back to apr_allocator_free(). See apr_allocator_free() * for details. * The ref and first_avail fields will be properly restored by * apr_allocator_free(). */ struct apr_memnode_t { apr_memnode_t *next; /**< next memnode */ apr_memnode_t **ref; /**< reference to self */ apr_uint32_t index; /**< size */ apr_uint32_t free_index; /**< how much free */ char *first_avail; /**< pointer to first free memory */ char *endp; /**< pointer to end of free memory */ }; /** The base size of a memory node - aligned. */ #define APR_MEMNODE_T_SIZE APR_ALIGN_DEFAULT(sizeof(apr_memnode_t)) /** Symbolic constants */ #define APR_ALLOCATOR_MAX_FREE_UNLIMITED 0 /** * Create a new allocator * @param allocator The allocator we have just created. * */ APR_DECLARE(apr_status_t) apr_allocator_create(apr_allocator_t **allocator); /** * Destroy an allocator * @param allocator The allocator to be destroyed * @remark Any memnodes not given back to the allocator prior to destroying * will _not_ be free()d. */ APR_DECLARE(void) apr_allocator_destroy(apr_allocator_t *allocator); /** * Allocate a block of mem from the allocator * @param allocator The allocator to allocate from * @param size The size of the mem to allocate (excluding the * memnode structure) */ APR_DECLARE(apr_memnode_t *) apr_allocator_alloc(apr_allocator_t *allocator, apr_size_t size); /** * Free a list of blocks of mem, giving them back to the allocator. * The list is typically terminated by a memnode with its next field * set to NULL. * @param allocator The allocator to give the mem back to * @param memnode The memory node to return */ APR_DECLARE(void) apr_allocator_free(apr_allocator_t *allocator, apr_memnode_t *memnode); #include "apr_pools.h" /** * Set the owner of the allocator * @param allocator The allocator to set the owner for * @param pool The pool that is to own the allocator * @remark Typically pool is the highest level pool using the allocator */ /* * XXX: see if we can come up with something a bit better. Currently * you can make a pool an owner, but if the pool doesn't use the allocator * the allocator will never be destroyed. */ APR_DECLARE(void) apr_allocator_owner_set(apr_allocator_t *allocator, apr_pool_t *pool); /** * Get the current owner of the allocator * @param allocator The allocator to get the owner from */ APR_DECLARE(apr_pool_t *) apr_allocator_owner_get(apr_allocator_t *allocator); /** * Set the current threshold at which the allocator should start * giving blocks back to the system. * @param allocator The allocator the set the threshold on * @param size The threshold. 0 == unlimited. */ APR_DECLARE(void) apr_allocator_max_free_set(apr_allocator_t *allocator, apr_size_t size); #include "apr_thread_mutex.h" #if APR_HAS_THREADS /** * Set a mutex for the allocator to use * @param allocator The allocator to set the mutex for * @param mutex The mutex */ APR_DECLARE(void) apr_allocator_mutex_set(apr_allocator_t *allocator, apr_thread_mutex_t *mutex); /** * Get the mutex currently set for the allocator * @param allocator The allocator */ APR_DECLARE(apr_thread_mutex_t *) apr_allocator_mutex_get( apr_allocator_t *allocator); #endif /* APR_HAS_THREADS */ /** @} */ #ifdef __cplusplus } #endif #endif /* !APR_ALLOCATOR_H */ include/apr-1/apr_atomic.h000444 000000 000000 00000007266 11035140625 015674 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_ATOMIC_H #define APR_ATOMIC_H /** * @file apr_atomic.h * @brief APR Atomic Operations */ #include "apr.h" #include "apr_pools.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup apr_atomic Atomic Operations * @ingroup APR * @{ */ /** * this function is required on some platforms to initialize the * atomic operation's internal structures * @param p pool * @return APR_SUCCESS on successful completion */ APR_DECLARE(apr_status_t) apr_atomic_init(apr_pool_t *p); /* * Atomic operations on 32-bit values * Note: Each of these functions internally implements a memory barrier * on platforms that require it */ /** * atomically read an apr_uint32_t from memory * @param mem the pointer */ APR_DECLARE(apr_uint32_t) apr_atomic_read32(volatile apr_uint32_t *mem); /** * atomically set an apr_uint32_t in memory * @param mem pointer to the object * @param val value that the object will assume */ APR_DECLARE(void) apr_atomic_set32(volatile apr_uint32_t *mem, apr_uint32_t val); /** * atomically add 'val' to an apr_uint32_t * @param mem pointer to the object * @param val amount to add * @return old value pointed to by mem */ APR_DECLARE(apr_uint32_t) apr_atomic_add32(volatile apr_uint32_t *mem, apr_uint32_t val); /** * atomically subtract 'val' from an apr_uint32_t * @param mem pointer to the object * @param val amount to subtract */ APR_DECLARE(void) apr_atomic_sub32(volatile apr_uint32_t *mem, apr_uint32_t val); /** * atomically increment an apr_uint32_t by 1 * @param mem pointer to the object * @return old value pointed to by mem */ APR_DECLARE(apr_uint32_t) apr_atomic_inc32(volatile apr_uint32_t *mem); /** * atomically decrement an apr_uint32_t by 1 * @param mem pointer to the atomic value * @return zero if the value becomes zero on decrement, otherwise non-zero */ APR_DECLARE(int) apr_atomic_dec32(volatile apr_uint32_t *mem); /** * compare an apr_uint32_t's value with 'cmp'. * If they are the same swap the value with 'with' * @param mem pointer to the value * @param with what to swap it with * @param cmp the value to compare it to * @return the old value of *mem */ APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint32_t with, apr_uint32_t cmp); /** * exchange an apr_uint32_t's value with 'val'. * @param mem pointer to the value * @param val what to swap it with * @return the old value of *mem */ APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val); /** * compare the pointer's value with cmp. * If they are the same swap the value with 'with' * @param mem pointer to the pointer * @param with what to swap it with * @param cmp the value to compare it to * @return the old value of the pointer */ APR_DECLARE(void*) apr_atomic_casptr(volatile void **mem, void *with, const void *cmp); /** @} */ #ifdef __cplusplus } #endif #endif /* !APR_ATOMIC_H */ include/apr-1/apr_dso.h000444 000000 000000 00000005214 11035140625 015174 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_DSO_DOT_H #define APR_DSO_DOT_H /** * @file apr_dso.h * @brief APR Dynamic Object Handling Routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup apr_dso Dynamic Object Handling * @ingroup APR * @{ */ #if APR_HAS_DSO || defined(DOXYGEN) /** * Structure for referencing dynamic objects */ typedef struct apr_dso_handle_t apr_dso_handle_t; /** * Structure for referencing symbols from dynamic objects */ typedef void * apr_dso_handle_sym_t; /** * Load a DSO library. * @param res_handle Location to store new handle for the DSO. * @param path Path to the DSO library * @param ctx Pool to use. * @bug We aught to provide an alternative to RTLD_GLOBAL, which * is the only supported method of loading DSOs today. */ APR_DECLARE(apr_status_t) apr_dso_load(apr_dso_handle_t **res_handle, const char *path, apr_pool_t *ctx); /** * Close a DSO library. * @param handle handle to close. */ APR_DECLARE(apr_status_t) apr_dso_unload(apr_dso_handle_t *handle); /** * Load a symbol from a DSO handle. * @param ressym Location to store the loaded symbol * @param handle handle to load the symbol from. * @param symname Name of the symbol to load. */ APR_DECLARE(apr_status_t) apr_dso_sym(apr_dso_handle_sym_t *ressym, apr_dso_handle_t *handle, const char *symname); /** * Report more information when a DSO function fails. * @param dso The dso handle that has been opened * @param buf Location to store the dso error * @param bufsize The size of the provided buffer */ APR_DECLARE(const char *) apr_dso_error(apr_dso_handle_t *dso, char *buf, apr_size_t bufsize); #endif /* APR_HAS_DSO */ /** @} */ #ifdef __cplusplus } #endif #endif include/apr-1/apr_env.h000444 000000 000000 00000004071 11035140625 015177 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_ENV_H #define APR_ENV_H /** * @file apr_env.h * @brief APR Environment functions */ #include "apr_errno.h" #include "apr_pools.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_env Functions for manupulating the environment * @ingroup APR * @{ */ /** * Get the value of an environment variable * @param value the returned value, allocated from @a pool * @param envvar the name of the environment variable * @param pool where to allocate @a value and any temporary storage from */ APR_DECLARE(apr_status_t) apr_env_get(char **value, const char *envvar, apr_pool_t *pool); /** * Set the value of an environment variable * @param envvar the name of the environment variable * @param value the value to set * @param pool where to allocate temporary storage from */ APR_DECLARE(apr_status_t) apr_env_set(const char *envvar, const char *value, apr_pool_t *pool); /** * Delete a variable from the environment * @param envvar the name of the environment variable * @param pool where to allocate temporary storage from */ APR_DECLARE(apr_status_t) apr_env_delete(const char *envvar, apr_pool_t *pool); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_ENV_H */ include/apr-1/apr_errno.h000444 000000 000000 00000144335 11035140625 015544 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_ERRNO_H #define APR_ERRNO_H /** * @file apr_errno.h * @brief APR Error Codes */ #include "apr.h" #if APR_HAVE_ERRNO_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_errno Error Codes * @ingroup APR * @{ */ /** * Type for specifying an error or status code. */ typedef int apr_status_t; /** * Return a human readable string describing the specified error. * @param statcode The error code the get a string for. * @param buf A buffer to hold the error string. * @param bufsize Size of the buffer to hold the string. */ APR_DECLARE(char *) apr_strerror(apr_status_t statcode, char *buf, apr_size_t bufsize); #if defined(DOXYGEN) /** * @def APR_FROM_OS_ERROR(os_err_type syserr) * Fold a platform specific error into an apr_status_t code. * @return apr_status_t * @param e The platform os error code. * @warning macro implementation; the syserr argument may be evaluated * multiple times. */ #define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR) /** * @def APR_TO_OS_ERROR(apr_status_t statcode) * @return os_err_type * Fold an apr_status_t code back to the native platform defined error. * @param e The apr_status_t folded platform os error code. * @warning macro implementation; the statcode argument may be evaluated * multiple times. If the statcode was not created by apr_get_os_error * or APR_FROM_OS_ERROR, the results are undefined. */ #define APR_TO_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR) /** @def apr_get_os_error() * @return apr_status_t the last platform error, folded into apr_status_t, on most platforms * @remark This retrieves errno, or calls a GetLastError() style function, and * folds it with APR_FROM_OS_ERROR. Some platforms (such as OS2) have no * such mechanism, so this call may be unsupported. Do NOT use this * call for socket errors from socket, send, recv etc! */ /** @def apr_set_os_error(e) * Reset the last platform error, unfolded from an apr_status_t, on some platforms * @param e The OS error folded in a prior call to APR_FROM_OS_ERROR() * @warning This is a macro implementation; the statcode argument may be evaluated * multiple times. If the statcode was not created by apr_get_os_error * or APR_FROM_OS_ERROR, the results are undefined. This macro sets * errno, or calls a SetLastError() style function, unfolding statcode * with APR_TO_OS_ERROR. Some platforms (such as OS2) have no such * mechanism, so this call may be unsupported. */ /** @def apr_get_netos_error() * Return the last socket error, folded into apr_status_t, on all platforms * @remark This retrieves errno or calls a GetLastSocketError() style function, * and folds it with APR_FROM_OS_ERROR. */ /** @def apr_set_netos_error(e) * Reset the last socket error, unfolded from an apr_status_t * @param e The socket error folded in a prior call to APR_FROM_OS_ERROR() * @warning This is a macro implementation; the statcode argument may be evaluated * multiple times. If the statcode was not created by apr_get_os_error * or APR_FROM_OS_ERROR, the results are undefined. This macro sets * errno, or calls a WSASetLastError() style function, unfolding * socketcode with APR_TO_OS_ERROR. */ #endif /* defined(DOXYGEN) */ /** * APR_OS_START_ERROR is where the APR specific error values start. */ #define APR_OS_START_ERROR 20000 /** * APR_OS_ERRSPACE_SIZE is the maximum number of errors you can fit * into one of the error/status ranges below -- except for * APR_OS_START_USERERR, which see. */ #define APR_OS_ERRSPACE_SIZE 50000 /** * APR_OS_START_STATUS is where the APR specific status codes start. */ #define APR_OS_START_STATUS (APR_OS_START_ERROR + APR_OS_ERRSPACE_SIZE) /** * APR_OS_START_USERERR are reserved for applications that use APR that * layer their own error codes along with APR's. Note that the * error immediately following this one is set ten times farther * away than usual, so that users of apr have a lot of room in * which to declare custom error codes. */ #define APR_OS_START_USERERR (APR_OS_START_STATUS + APR_OS_ERRSPACE_SIZE) /** * APR_OS_START_USEERR is obsolete, defined for compatibility only. * Use APR_OS_START_USERERR instead. */ #define APR_OS_START_USEERR APR_OS_START_USERERR /** * APR_OS_START_CANONERR is where APR versions of errno values are defined * on systems which don't have the corresponding errno. */ #define APR_OS_START_CANONERR (APR_OS_START_USERERR \ + (APR_OS_ERRSPACE_SIZE * 10)) /** * APR_OS_START_EAIERR folds EAI_ error codes from getaddrinfo() into * apr_status_t values. */ #define APR_OS_START_EAIERR (APR_OS_START_CANONERR + APR_OS_ERRSPACE_SIZE) /** * APR_OS_START_SYSERR folds platform-specific system error values into * apr_status_t values. */ #define APR_OS_START_SYSERR (APR_OS_START_EAIERR + APR_OS_ERRSPACE_SIZE) /** no error. */ #define APR_SUCCESS 0 /** * @defgroup APR_Error APR Error Values *
 * APR ERROR VALUES
 * APR_ENOSTAT      APR was unable to perform a stat on the file 
 * APR_ENOPOOL      APR was not provided a pool with which to allocate memory
 * APR_EBADDATE     APR was given an invalid date 
 * APR_EINVALSOCK   APR was given an invalid socket
 * APR_ENOPROC      APR was not given a process structure
 * APR_ENOTIME      APR was not given a time structure
 * APR_ENODIR       APR was not given a directory structure
 * APR_ENOLOCK      APR was not given a lock structure
 * APR_ENOPOLL      APR was not given a poll structure
 * APR_ENOSOCKET    APR was not given a socket
 * APR_ENOTHREAD    APR was not given a thread structure
 * APR_ENOTHDKEY    APR was not given a thread key structure
 * APR_ENOSHMAVAIL  There is no more shared memory available
 * APR_EDSOOPEN     APR was unable to open the dso object.  For more 
 *                  information call apr_dso_error().
 * APR_EGENERAL     General failure (specific information not available)
 * APR_EBADIP       The specified IP address is invalid
 * APR_EBADMASK     The specified netmask is invalid
 * APR_ESYMNOTFOUND Could not find the requested symbol
 * 
* *
 * APR STATUS VALUES
 * APR_INCHILD        Program is currently executing in the child
 * APR_INPARENT       Program is currently executing in the parent
 * APR_DETACH         The thread is detached
 * APR_NOTDETACH      The thread is not detached
 * APR_CHILD_DONE     The child has finished executing
 * APR_CHILD_NOTDONE  The child has not finished executing
 * APR_TIMEUP         The operation did not finish before the timeout
 * APR_INCOMPLETE     The operation was incomplete although some processing
 *                    was performed and the results are partially valid
 * APR_BADCH          Getopt found an option not in the option string
 * APR_BADARG         Getopt found an option that is missing an argument 
 *                    and an argument was specified in the option string
 * APR_EOF            APR has encountered the end of the file
 * APR_NOTFOUND       APR was unable to find the socket in the poll structure
 * APR_ANONYMOUS      APR is using anonymous shared memory
 * APR_FILEBASED      APR is using a file name as the key to the shared memory
 * APR_KEYBASED       APR is using a shared key as the key to the shared memory
 * APR_EINIT          Ininitalizer value.  If no option has been found, but 
 *                    the status variable requires a value, this should be used
 * APR_ENOTIMPL       The APR function has not been implemented on this 
 *                    platform, either because nobody has gotten to it yet, 
 *                    or the function is impossible on this platform.
 * APR_EMISMATCH      Two passwords do not match.
 * APR_EABSOLUTE      The given path was absolute.
 * APR_ERELATIVE      The given path was relative.
 * APR_EINCOMPLETE    The given path was neither relative nor absolute.
 * APR_EABOVEROOT     The given path was above the root path.
 * APR_EBUSY          The given lock was busy.
 * APR_EPROC_UNKNOWN  The given process wasn't recognized by APR
 * 
* @{ */ /** @see APR_STATUS_IS_ENOSTAT */ #define APR_ENOSTAT (APR_OS_START_ERROR + 1) /** @see APR_STATUS_IS_ENOPOOL */ #define APR_ENOPOOL (APR_OS_START_ERROR + 2) /* empty slot: +3 */ /** @see APR_STATUS_IS_EBADDATE */ #define APR_EBADDATE (APR_OS_START_ERROR + 4) /** @see APR_STATUS_IS_EINVALSOCK */ #define APR_EINVALSOCK (APR_OS_START_ERROR + 5) /** @see APR_STATUS_IS_ENOPROC */ #define APR_ENOPROC (APR_OS_START_ERROR + 6) /** @see APR_STATUS_IS_ENOTIME */ #define APR_ENOTIME (APR_OS_START_ERROR + 7) /** @see APR_STATUS_IS_ENODIR */ #define APR_ENODIR (APR_OS_START_ERROR + 8) /** @see APR_STATUS_IS_ENOLOCK */ #define APR_ENOLOCK (APR_OS_START_ERROR + 9) /** @see APR_STATUS_IS_ENOPOLL */ #define APR_ENOPOLL (APR_OS_START_ERROR + 10) /** @see APR_STATUS_IS_ENOSOCKET */ #define APR_ENOSOCKET (APR_OS_START_ERROR + 11) /** @see APR_STATUS_IS_ENOTHREAD */ #define APR_ENOTHREAD (APR_OS_START_ERROR + 12) /** @see APR_STATUS_IS_ENOTHDKEY */ #define APR_ENOTHDKEY (APR_OS_START_ERROR + 13) /** @see APR_STATUS_IS_EGENERAL */ #define APR_EGENERAL (APR_OS_START_ERROR + 14) /** @see APR_STATUS_IS_ENOSHMAVAIL */ #define APR_ENOSHMAVAIL (APR_OS_START_ERROR + 15) /** @see APR_STATUS_IS_EBADIP */ #define APR_EBADIP (APR_OS_START_ERROR + 16) /** @see APR_STATUS_IS_EBADMASK */ #define APR_EBADMASK (APR_OS_START_ERROR + 17) /* empty slot: +18 */ /** @see APR_STATUS_IS_EDSOPEN */ #define APR_EDSOOPEN (APR_OS_START_ERROR + 19) /** @see APR_STATUS_IS_EABSOLUTE */ #define APR_EABSOLUTE (APR_OS_START_ERROR + 20) /** @see APR_STATUS_IS_ERELATIVE */ #define APR_ERELATIVE (APR_OS_START_ERROR + 21) /** @see APR_STATUS_IS_EINCOMPLETE */ #define APR_EINCOMPLETE (APR_OS_START_ERROR + 22) /** @see APR_STATUS_IS_EABOVEROOT */ #define APR_EABOVEROOT (APR_OS_START_ERROR + 23) /** @see APR_STATUS_IS_EBADPATH */ #define APR_EBADPATH (APR_OS_START_ERROR + 24) /** @see APR_STATUS_IS_EPATHWILD */ #define APR_EPATHWILD (APR_OS_START_ERROR + 25) /** @see APR_STATUS_IS_ESYMNOTFOUND */ #define APR_ESYMNOTFOUND (APR_OS_START_ERROR + 26) /** @see APR_STATUS_IS_EPROC_UNKNOWN */ #define APR_EPROC_UNKNOWN (APR_OS_START_ERROR + 27) /** @see APR_STATUS_IS_ENOTENOUGHENTROPY */ #define APR_ENOTENOUGHENTROPY (APR_OS_START_ERROR + 28) /** @} */ /** * @defgroup APR_STATUS_IS Status Value Tests * @warning For any particular error condition, more than one of these tests * may match. This is because platform-specific error codes may not * always match the semantics of the POSIX codes these tests (and the * corresponding APR error codes) are named after. A notable example * are the APR_STATUS_IS_ENOENT and APR_STATUS_IS_ENOTDIR tests on * Win32 platforms. The programmer should always be aware of this and * adjust the order of the tests accordingly. * @{ */ /** * APR was unable to perform a stat on the file * @warning always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_ENOSTAT(s) ((s) == APR_ENOSTAT) /** * APR was not provided a pool with which to allocate memory * @warning always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_ENOPOOL(s) ((s) == APR_ENOPOOL) /** APR was given an invalid date */ #define APR_STATUS_IS_EBADDATE(s) ((s) == APR_EBADDATE) /** APR was given an invalid socket */ #define APR_STATUS_IS_EINVALSOCK(s) ((s) == APR_EINVALSOCK) /** APR was not given a process structure */ #define APR_STATUS_IS_ENOPROC(s) ((s) == APR_ENOPROC) /** APR was not given a time structure */ #define APR_STATUS_IS_ENOTIME(s) ((s) == APR_ENOTIME) /** APR was not given a directory structure */ #define APR_STATUS_IS_ENODIR(s) ((s) == APR_ENODIR) /** APR was not given a lock structure */ #define APR_STATUS_IS_ENOLOCK(s) ((s) == APR_ENOLOCK) /** APR was not given a poll structure */ #define APR_STATUS_IS_ENOPOLL(s) ((s) == APR_ENOPOLL) /** APR was not given a socket */ #define APR_STATUS_IS_ENOSOCKET(s) ((s) == APR_ENOSOCKET) /** APR was not given a thread structure */ #define APR_STATUS_IS_ENOTHREAD(s) ((s) == APR_ENOTHREAD) /** APR was not given a thread key structure */ #define APR_STATUS_IS_ENOTHDKEY(s) ((s) == APR_ENOTHDKEY) /** Generic Error which can not be put into another spot */ #define APR_STATUS_IS_EGENERAL(s) ((s) == APR_EGENERAL) /** There is no more shared memory available */ #define APR_STATUS_IS_ENOSHMAVAIL(s) ((s) == APR_ENOSHMAVAIL) /** The specified IP address is invalid */ #define APR_STATUS_IS_EBADIP(s) ((s) == APR_EBADIP) /** The specified netmask is invalid */ #define APR_STATUS_IS_EBADMASK(s) ((s) == APR_EBADMASK) /* empty slot: +18 */ /** * APR was unable to open the dso object. * For more information call apr_dso_error(). */ #if defined(WIN32) #define APR_STATUS_IS_EDSOOPEN(s) ((s) == APR_EDSOOPEN \ || APR_TO_OS_ERROR(s) == ERROR_MOD_NOT_FOUND) #else #define APR_STATUS_IS_EDSOOPEN(s) ((s) == APR_EDSOOPEN) #endif /** The given path was absolute. */ #define APR_STATUS_IS_EABSOLUTE(s) ((s) == APR_EABSOLUTE) /** The given path was relative. */ #define APR_STATUS_IS_ERELATIVE(s) ((s) == APR_ERELATIVE) /** The given path was neither relative nor absolute. */ #define APR_STATUS_IS_EINCOMPLETE(s) ((s) == APR_EINCOMPLETE) /** The given path was above the root path. */ #define APR_STATUS_IS_EABOVEROOT(s) ((s) == APR_EABOVEROOT) /** The given path was bad. */ #define APR_STATUS_IS_EBADPATH(s) ((s) == APR_EBADPATH) /** The given path contained wildcards. */ #define APR_STATUS_IS_EPATHWILD(s) ((s) == APR_EPATHWILD) /** Could not find the requested symbol. * For more information call apr_dso_error(). */ #if defined(WIN32) #define APR_STATUS_IS_ESYMNOTFOUND(s) ((s) == APR_ESYMNOTFOUND \ || APR_TO_OS_ERROR(s) == ERROR_PROC_NOT_FOUND) #else #define APR_STATUS_IS_ESYMNOTFOUND(s) ((s) == APR_ESYMNOTFOUND) #endif /** The given process was not recognized by APR. */ #define APR_STATUS_IS_EPROC_UNKNOWN(s) ((s) == APR_EPROC_UNKNOWN) /** APR could not gather enough entropy to continue. */ #define APR_STATUS_IS_ENOTENOUGHENTROPY(s) ((s) == APR_ENOTENOUGHENTROPY) /** @} */ /** * @addtogroup APR_Error * @{ */ /** @see APR_STATUS_IS_INCHILD */ #define APR_INCHILD (APR_OS_START_STATUS + 1) /** @see APR_STATUS_IS_INPARENT */ #define APR_INPARENT (APR_OS_START_STATUS + 2) /** @see APR_STATUS_IS_DETACH */ #define APR_DETACH (APR_OS_START_STATUS + 3) /** @see APR_STATUS_IS_NOTDETACH */ #define APR_NOTDETACH (APR_OS_START_STATUS + 4) /** @see APR_STATUS_IS_CHILD_DONE */ #define APR_CHILD_DONE (APR_OS_START_STATUS + 5) /** @see APR_STATUS_IS_CHILD_NOTDONE */ #define APR_CHILD_NOTDONE (APR_OS_START_STATUS + 6) /** @see APR_STATUS_IS_TIMEUP */ #define APR_TIMEUP (APR_OS_START_STATUS + 7) /** @see APR_STATUS_IS_INCOMPLETE */ #define APR_INCOMPLETE (APR_OS_START_STATUS + 8) /* empty slot: +9 */ /* empty slot: +10 */ /* empty slot: +11 */ /** @see APR_STATUS_IS_BADCH */ #define APR_BADCH (APR_OS_START_STATUS + 12) /** @see APR_STATUS_IS_BADARG */ #define APR_BADARG (APR_OS_START_STATUS + 13) /** @see APR_STATUS_IS_EOF */ #define APR_EOF (APR_OS_START_STATUS + 14) /** @see APR_STATUS_IS_NOTFOUND */ #define APR_NOTFOUND (APR_OS_START_STATUS + 15) /* empty slot: +16 */ /* empty slot: +17 */ /* empty slot: +18 */ /** @see APR_STATUS_IS_ANONYMOUS */ #define APR_ANONYMOUS (APR_OS_START_STATUS + 19) /** @see APR_STATUS_IS_FILEBASED */ #define APR_FILEBASED (APR_OS_START_STATUS + 20) /** @see APR_STATUS_IS_KEYBASED */ #define APR_KEYBASED (APR_OS_START_STATUS + 21) /** @see APR_STATUS_IS_EINIT */ #define APR_EINIT (APR_OS_START_STATUS + 22) /** @see APR_STATUS_IS_ENOTIMPL */ #define APR_ENOTIMPL (APR_OS_START_STATUS + 23) /** @see APR_STATUS_IS_EMISMATCH */ #define APR_EMISMATCH (APR_OS_START_STATUS + 24) /** @see APR_STATUS_IS_EBUSY */ #define APR_EBUSY (APR_OS_START_STATUS + 25) /** @} */ /** * @addtogroup APR_STATUS_IS * @{ */ /** * Program is currently executing in the child * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_INCHILD(s) ((s) == APR_INCHILD) /** * Program is currently executing in the parent * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_INPARENT(s) ((s) == APR_INPARENT) /** * The thread is detached * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_DETACH(s) ((s) == APR_DETACH) /** * The thread is not detached * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_NOTDETACH(s) ((s) == APR_NOTDETACH) /** * The child has finished executing * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_CHILD_DONE(s) ((s) == APR_CHILD_DONE) /** * The child has not finished executing * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_CHILD_NOTDONE(s) ((s) == APR_CHILD_NOTDONE) /** * The operation did not finish before the timeout * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_TIMEUP(s) ((s) == APR_TIMEUP) /** * The operation was incomplete although some processing was performed * and the results are partially valid. * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_INCOMPLETE(s) ((s) == APR_INCOMPLETE) /* empty slot: +9 */ /* empty slot: +10 */ /* empty slot: +11 */ /** * Getopt found an option not in the option string * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_BADCH(s) ((s) == APR_BADCH) /** * Getopt found an option not in the option string and an argument was * specified in the option string * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_BADARG(s) ((s) == APR_BADARG) /** * APR has encountered the end of the file * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_EOF(s) ((s) == APR_EOF) /** * APR was unable to find the socket in the poll structure * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_NOTFOUND(s) ((s) == APR_NOTFOUND) /* empty slot: +16 */ /* empty slot: +17 */ /* empty slot: +18 */ /** * APR is using anonymous shared memory * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_ANONYMOUS(s) ((s) == APR_ANONYMOUS) /** * APR is using a file name as the key to the shared memory * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_FILEBASED(s) ((s) == APR_FILEBASED) /** * APR is using a shared key as the key to the shared memory * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_KEYBASED(s) ((s) == APR_KEYBASED) /** * Ininitalizer value. If no option has been found, but * the status variable requires a value, this should be used * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_EINIT(s) ((s) == APR_EINIT) /** * The APR function has not been implemented on this * platform, either because nobody has gotten to it yet, * or the function is impossible on this platform. * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_ENOTIMPL(s) ((s) == APR_ENOTIMPL) /** * Two passwords do not match. * @warning * always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_EMISMATCH(s) ((s) == APR_EMISMATCH) /** * The given lock was busy * @warning always use this test, as platform-specific variances may meet this * more than one error code */ #define APR_STATUS_IS_EBUSY(s) ((s) == APR_EBUSY) /** @} */ /** * @addtogroup APR_Error APR Error Values * @{ */ /* APR CANONICAL ERROR VALUES */ /** @see APR_STATUS_IS_EACCES */ #ifdef EACCES #define APR_EACCES EACCES #else #define APR_EACCES (APR_OS_START_CANONERR + 1) #endif /** @see APR_STATUS_IS_EXIST */ #ifdef EEXIST #define APR_EEXIST EEXIST #else #define APR_EEXIST (APR_OS_START_CANONERR + 2) #endif /** @see APR_STATUS_IS_ENAMETOOLONG */ #ifdef ENAMETOOLONG #define APR_ENAMETOOLONG ENAMETOOLONG #else #define APR_ENAMETOOLONG (APR_OS_START_CANONERR + 3) #endif /** @see APR_STATUS_IS_ENOENT */ #ifdef ENOENT #define APR_ENOENT ENOENT #else #define APR_ENOENT (APR_OS_START_CANONERR + 4) #endif /** @see APR_STATUS_IS_ENOTDIR */ #ifdef ENOTDIR #define APR_ENOTDIR ENOTDIR #else #define APR_ENOTDIR (APR_OS_START_CANONERR + 5) #endif /** @see APR_STATUS_IS_ENOSPC */ #ifdef ENOSPC #define APR_ENOSPC ENOSPC #else #define APR_ENOSPC (APR_OS_START_CANONERR + 6) #endif /** @see APR_STATUS_IS_ENOMEM */ #ifdef ENOMEM #define APR_ENOMEM ENOMEM #else #define APR_ENOMEM (APR_OS_START_CANONERR + 7) #endif /** @see APR_STATUS_IS_EMFILE */ #ifdef EMFILE #define APR_EMFILE EMFILE #else #define APR_EMFILE (APR_OS_START_CANONERR + 8) #endif /** @see APR_STATUS_IS_ENFILE */ #ifdef ENFILE #define APR_ENFILE ENFILE #else #define APR_ENFILE (APR_OS_START_CANONERR + 9) #endif /** @see APR_STATUS_IS_EBADF */ #ifdef EBADF #define APR_EBADF EBADF #else #define APR_EBADF (APR_OS_START_CANONERR + 10) #endif /** @see APR_STATUS_IS_EINVAL */ #ifdef EINVAL #define APR_EINVAL EINVAL #else #define APR_EINVAL (APR_OS_START_CANONERR + 11) #endif /** @see APR_STATUS_IS_ESPIPE */ #ifdef ESPIPE #define APR_ESPIPE ESPIPE #else #define APR_ESPIPE (APR_OS_START_CANONERR + 12) #endif /** * @see APR_STATUS_IS_EAGAIN * @warning use APR_STATUS_IS_EAGAIN instead of just testing this value */ #ifdef EAGAIN #define APR_EAGAIN EAGAIN #elif defined(EWOULDBLOCK) #define APR_EAGAIN EWOULDBLOCK #else #define APR_EAGAIN (APR_OS_START_CANONERR + 13) #endif /** @see APR_STATUS_IS_EINTR */ #ifdef EINTR #define APR_EINTR EINTR #else #define APR_EINTR (APR_OS_START_CANONERR + 14) #endif /** @see APR_STATUS_IS_ENOTSOCK */ #ifdef ENOTSOCK #define APR_ENOTSOCK ENOTSOCK #else #define APR_ENOTSOCK (APR_OS_START_CANONERR + 15) #endif /** @see APR_STATUS_IS_ECONNREFUSED */ #ifdef ECONNREFUSED #define APR_ECONNREFUSED ECONNREFUSED #else #define APR_ECONNREFUSED (APR_OS_START_CANONERR + 16) #endif /** @see APR_STATUS_IS_EINPROGRESS */ #ifdef EINPROGRESS #define APR_EINPROGRESS EINPROGRESS #else #define APR_EINPROGRESS (APR_OS_START_CANONERR + 17) #endif /** * @see APR_STATUS_IS_ECONNABORTED * @warning use APR_STATUS_IS_ECONNABORTED instead of just testing this value */ #ifdef ECONNABORTED #define APR_ECONNABORTED ECONNABORTED #else #define APR_ECONNABORTED (APR_OS_START_CANONERR + 18) #endif /** @see APR_STATUS_IS_ECONNRESET */ #ifdef ECONNRESET #define APR_ECONNRESET ECONNRESET #else #define APR_ECONNRESET (APR_OS_START_CANONERR + 19) #endif /** @see APR_STATUS_IS_ETIMEDOUT * @deprecated */ #ifdef ETIMEDOUT #define APR_ETIMEDOUT ETIMEDOUT #else #define APR_ETIMEDOUT (APR_OS_START_CANONERR + 20) #endif /** @see APR_STATUS_IS_EHOSTUNREACH */ #ifdef EHOSTUNREACH #define APR_EHOSTUNREACH EHOSTUNREACH #else #define APR_EHOSTUNREACH (APR_OS_START_CANONERR + 21) #endif /** @see APR_STATUS_IS_ENETUNREACH */ #ifdef ENETUNREACH #define APR_ENETUNREACH ENETUNREACH #else #define APR_ENETUNREACH (APR_OS_START_CANONERR + 22) #endif /** @see APR_STATUS_IS_EFTYPE */ #ifdef EFTYPE #define APR_EFTYPE EFTYPE #else #define APR_EFTYPE (APR_OS_START_CANONERR + 23) #endif /** @see APR_STATUS_IS_EPIPE */ #ifdef EPIPE #define APR_EPIPE EPIPE #else #define APR_EPIPE (APR_OS_START_CANONERR + 24) #endif /** @see APR_STATUS_IS_EXDEV */ #ifdef EXDEV #define APR_EXDEV EXDEV #else #define APR_EXDEV (APR_OS_START_CANONERR + 25) #endif /** @see APR_STATUS_IS_ENOTEMPTY */ #ifdef ENOTEMPTY #define APR_ENOTEMPTY ENOTEMPTY #else #define APR_ENOTEMPTY (APR_OS_START_CANONERR + 26) #endif /** @} */ #if defined(OS2) && !defined(DOXYGEN) #define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR) #define APR_TO_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR) #define INCL_DOSERRORS #define INCL_DOS /* Leave these undefined. * OS2 doesn't rely on the errno concept. * The API calls always return a result codes which * should be filtered through APR_FROM_OS_ERROR(). * * #define apr_get_os_error() (APR_FROM_OS_ERROR(GetLastError())) * #define apr_set_os_error(e) (SetLastError(APR_TO_OS_ERROR(e))) */ /* A special case, only socket calls require this; */ #define apr_get_netos_error() (APR_FROM_OS_ERROR(errno)) #define apr_set_netos_error(e) (errno = APR_TO_OS_ERROR(e)) /* And this needs to be greped away for good: */ #define APR_OS2_STATUS(e) (APR_FROM_OS_ERROR(e)) /* These can't sit in a private header, so in spite of the extra size, * they need to be made available here. */ #define SOCBASEERR 10000 #define SOCEPERM (SOCBASEERR+1) /* Not owner */ #define SOCESRCH (SOCBASEERR+3) /* No such process */ #define SOCEINTR (SOCBASEERR+4) /* Interrupted system call */ #define SOCENXIO (SOCBASEERR+6) /* No such device or address */ #define SOCEBADF (SOCBASEERR+9) /* Bad file number */ #define SOCEACCES (SOCBASEERR+13) /* Permission denied */ #define SOCEFAULT (SOCBASEERR+14) /* Bad address */ #define SOCEINVAL (SOCBASEERR+22) /* Invalid argument */ #define SOCEMFILE (SOCBASEERR+24) /* Too many open files */ #define SOCEPIPE (SOCBASEERR+32) /* Broken pipe */ #define SOCEOS2ERR (SOCBASEERR+100) /* OS/2 Error */ #define SOCEWOULDBLOCK (SOCBASEERR+35) /* Operation would block */ #define SOCEINPROGRESS (SOCBASEERR+36) /* Operation now in progress */ #define SOCEALREADY (SOCBASEERR+37) /* Operation already in progress */ #define SOCENOTSOCK (SOCBASEERR+38) /* Socket operation on non-socket */ #define SOCEDESTADDRREQ (SOCBASEERR+39) /* Destination address required */ #define SOCEMSGSIZE (SOCBASEERR+40) /* Message too long */ #define SOCEPROTOTYPE (SOCBASEERR+41) /* Protocol wrong type for socket */ #define SOCENOPROTOOPT (SOCBASEERR+42) /* Protocol not available */ #define SOCEPROTONOSUPPORT (SOCBASEERR+43) /* Protocol not supported */ #define SOCESOCKTNOSUPPORT (SOCBASEERR+44) /* Socket type not supported */ #define SOCEOPNOTSUPP (SOCBASEERR+45) /* Operation not supported on socket */ #define SOCEPFNOSUPPORT (SOCBASEERR+46) /* Protocol family not supported */ #define SOCEAFNOSUPPORT (SOCBASEERR+47) /* Address family not supported by protocol family */ #define SOCEADDRINUSE (SOCBASEERR+48) /* Address already in use */ #define SOCEADDRNOTAVAIL (SOCBASEERR+49) /* Can't assign requested address */ #define SOCENETDOWN (SOCBASEERR+50) /* Network is down */ #define SOCENETUNREACH (SOCBASEERR+51) /* Network is unreachable */ #define SOCENETRESET (SOCBASEERR+52) /* Network dropped connection on reset */ #define SOCECONNABORTED (SOCBASEERR+53) /* Software caused connection abort */ #define SOCECONNRESET (SOCBASEERR+54) /* Connection reset by peer */ #define SOCENOBUFS (SOCBASEERR+55) /* No buffer space available */ #define SOCEISCONN (SOCBASEERR+56) /* Socket is already connected */ #define SOCENOTCONN (SOCBASEERR+57) /* Socket is not connected */ #define SOCESHUTDOWN (SOCBASEERR+58) /* Can't send after socket shutdown */ #define SOCETOOMANYREFS (SOCBASEERR+59) /* Too many references: can't splice */ #define SOCETIMEDOUT (SOCBASEERR+60) /* Connection timed out */ #define SOCECONNREFUSED (SOCBASEERR+61) /* Connection refused */ #define SOCELOOP (SOCBASEERR+62) /* Too many levels of symbolic links */ #define SOCENAMETOOLONG (SOCBASEERR+63) /* File name too long */ #define SOCEHOSTDOWN (SOCBASEERR+64) /* Host is down */ #define SOCEHOSTUNREACH (SOCBASEERR+65) /* No route to host */ #define SOCENOTEMPTY (SOCBASEERR+66) /* Directory not empty */ /* APR CANONICAL ERROR TESTS */ #define APR_STATUS_IS_EACCES(s) ((s) == APR_EACCES \ || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED \ || (s) == APR_OS_START_SYSERR + ERROR_SHARING_VIOLATION) #define APR_STATUS_IS_EEXIST(s) ((s) == APR_EEXIST \ || (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED \ || (s) == APR_OS_START_SYSERR + ERROR_FILE_EXISTS \ || (s) == APR_OS_START_SYSERR + ERROR_ALREADY_EXISTS \ || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED) #define APR_STATUS_IS_ENAMETOOLONG(s) ((s) == APR_ENAMETOOLONG \ || (s) == APR_OS_START_SYSERR + ERROR_FILENAME_EXCED_RANGE \ || (s) == APR_OS_START_SYSERR + SOCENAMETOOLONG) #define APR_STATUS_IS_ENOENT(s) ((s) == APR_ENOENT \ || (s) == APR_OS_START_SYSERR + ERROR_FILE_NOT_FOUND \ || (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \ || (s) == APR_OS_START_SYSERR + ERROR_NO_MORE_FILES \ || (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED) #define APR_STATUS_IS_ENOTDIR(s) ((s) == APR_ENOTDIR) #define APR_STATUS_IS_ENOSPC(s) ((s) == APR_ENOSPC \ || (s) == APR_OS_START_SYSERR + ERROR_DISK_FULL) #define APR_STATUS_IS_ENOMEM(s) ((s) == APR_ENOMEM) #define APR_STATUS_IS_EMFILE(s) ((s) == APR_EMFILE \ || (s) == APR_OS_START_SYSERR + ERROR_TOO_MANY_OPEN_FILES) #define APR_STATUS_IS_ENFILE(s) ((s) == APR_ENFILE) #define APR_STATUS_IS_EBADF(s) ((s) == APR_EBADF \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_HANDLE) #define APR_STATUS_IS_EINVAL(s) ((s) == APR_EINVAL \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_PARAMETER \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_FUNCTION) #define APR_STATUS_IS_ESPIPE(s) ((s) == APR_ESPIPE \ || (s) == APR_OS_START_SYSERR + ERROR_NEGATIVE_SEEK) #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN \ || (s) == APR_OS_START_SYSERR + ERROR_NO_DATA \ || (s) == APR_OS_START_SYSERR + SOCEWOULDBLOCK \ || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION) #define APR_STATUS_IS_EINTR(s) ((s) == APR_EINTR \ || (s) == APR_OS_START_SYSERR + SOCEINTR) #define APR_STATUS_IS_ENOTSOCK(s) ((s) == APR_ENOTSOCK \ || (s) == APR_OS_START_SYSERR + SOCENOTSOCK) #define APR_STATUS_IS_ECONNREFUSED(s) ((s) == APR_ECONNREFUSED \ || (s) == APR_OS_START_SYSERR + SOCECONNREFUSED) #define APR_STATUS_IS_EINPROGRESS(s) ((s) == APR_EINPROGRESS \ || (s) == APR_OS_START_SYSERR + SOCEINPROGRESS) #define APR_STATUS_IS_ECONNABORTED(s) ((s) == APR_ECONNABORTED \ || (s) == APR_OS_START_SYSERR + SOCECONNABORTED) #define APR_STATUS_IS_ECONNRESET(s) ((s) == APR_ECONNRESET \ || (s) == APR_OS_START_SYSERR + SOCECONNRESET) /* XXX deprecated */ #define APR_STATUS_IS_ETIMEDOUT(s) ((s) == APR_ETIMEDOUT \ || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT) #undef APR_STATUS_IS_TIMEUP #define APR_STATUS_IS_TIMEUP(s) ((s) == APR_TIMEUP \ || (s) == APR_OS_START_SYSERR + SOCETIMEDOUT) #define APR_STATUS_IS_EHOSTUNREACH(s) ((s) == APR_EHOSTUNREACH \ || (s) == APR_OS_START_SYSERR + SOCEHOSTUNREACH) #define APR_STATUS_IS_ENETUNREACH(s) ((s) == APR_ENETUNREACH \ || (s) == APR_OS_START_SYSERR + SOCENETUNREACH) #define APR_STATUS_IS_EFTYPE(s) ((s) == APR_EFTYPE) #define APR_STATUS_IS_EPIPE(s) ((s) == APR_EPIPE \ || (s) == APR_OS_START_SYSERR + ERROR_BROKEN_PIPE \ || (s) == APR_OS_START_SYSERR + SOCEPIPE) #define APR_STATUS_IS_EXDEV(s) ((s) == APR_EXDEV \ || (s) == APR_OS_START_SYSERR + ERROR_NOT_SAME_DEVICE) #define APR_STATUS_IS_ENOTEMPTY(s) ((s) == APR_ENOTEMPTY \ || (s) == APR_OS_START_SYSERR + ERROR_DIR_NOT_EMPTY \ || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED) /* Sorry, too tired to wrap this up for OS2... feel free to fit the following into their best matches. { ERROR_NO_SIGNAL_SENT, ESRCH }, { SOCEALREADY, EALREADY }, { SOCEDESTADDRREQ, EDESTADDRREQ }, { SOCEMSGSIZE, EMSGSIZE }, { SOCEPROTOTYPE, EPROTOTYPE }, { SOCENOPROTOOPT, ENOPROTOOPT }, { SOCEPROTONOSUPPORT, EPROTONOSUPPORT }, { SOCESOCKTNOSUPPORT, ESOCKTNOSUPPORT }, { SOCEOPNOTSUPP, EOPNOTSUPP }, { SOCEPFNOSUPPORT, EPFNOSUPPORT }, { SOCEAFNOSUPPORT, EAFNOSUPPORT }, { SOCEADDRINUSE, EADDRINUSE }, { SOCEADDRNOTAVAIL, EADDRNOTAVAIL }, { SOCENETDOWN, ENETDOWN }, { SOCENETRESET, ENETRESET }, { SOCENOBUFS, ENOBUFS }, { SOCEISCONN, EISCONN }, { SOCENOTCONN, ENOTCONN }, { SOCESHUTDOWN, ESHUTDOWN }, { SOCETOOMANYREFS, ETOOMANYREFS }, { SOCELOOP, ELOOP }, { SOCEHOSTDOWN, EHOSTDOWN }, { SOCENOTEMPTY, ENOTEMPTY }, { SOCEPIPE, EPIPE } */ #elif defined(WIN32) && !defined(DOXYGEN) /* !defined(OS2) */ #define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR) #define APR_TO_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR) #define apr_get_os_error() (APR_FROM_OS_ERROR(GetLastError())) #define apr_set_os_error(e) (SetLastError(APR_TO_OS_ERROR(e))) /* A special case, only socket calls require this: */ #define apr_get_netos_error() (APR_FROM_OS_ERROR(WSAGetLastError())) #define apr_set_netos_error(e) (WSASetLastError(APR_TO_OS_ERROR(e))) /* APR CANONICAL ERROR TESTS */ #define APR_STATUS_IS_EACCES(s) ((s) == APR_EACCES \ || (s) == APR_OS_START_SYSERR + ERROR_ACCESS_DENIED \ || (s) == APR_OS_START_SYSERR + ERROR_CANNOT_MAKE \ || (s) == APR_OS_START_SYSERR + ERROR_CURRENT_DIRECTORY \ || (s) == APR_OS_START_SYSERR + ERROR_DRIVE_LOCKED \ || (s) == APR_OS_START_SYSERR + ERROR_FAIL_I24 \ || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION \ || (s) == APR_OS_START_SYSERR + ERROR_LOCK_FAILED \ || (s) == APR_OS_START_SYSERR + ERROR_NOT_LOCKED \ || (s) == APR_OS_START_SYSERR + ERROR_NETWORK_ACCESS_DENIED \ || (s) == APR_OS_START_SYSERR + ERROR_SHARING_VIOLATION) #define APR_STATUS_IS_EEXIST(s) ((s) == APR_EEXIST \ || (s) == APR_OS_START_SYSERR + ERROR_FILE_EXISTS \ || (s) == APR_OS_START_SYSERR + ERROR_ALREADY_EXISTS) #define APR_STATUS_IS_ENAMETOOLONG(s) ((s) == APR_ENAMETOOLONG \ || (s) == APR_OS_START_SYSERR + ERROR_FILENAME_EXCED_RANGE \ || (s) == APR_OS_START_SYSERR + WSAENAMETOOLONG) #define APR_STATUS_IS_ENOENT(s) ((s) == APR_ENOENT \ || (s) == APR_OS_START_SYSERR + ERROR_FILE_NOT_FOUND \ || (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \ || (s) == APR_OS_START_SYSERR + ERROR_OPEN_FAILED \ || (s) == APR_OS_START_SYSERR + ERROR_NO_MORE_FILES) #define APR_STATUS_IS_ENOTDIR(s) ((s) == APR_ENOTDIR \ || (s) == APR_OS_START_SYSERR + ERROR_PATH_NOT_FOUND \ || (s) == APR_OS_START_SYSERR + ERROR_BAD_NETPATH \ || (s) == APR_OS_START_SYSERR + ERROR_BAD_NET_NAME \ || (s) == APR_OS_START_SYSERR + ERROR_BAD_PATHNAME \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DRIVE) #define APR_STATUS_IS_ENOSPC(s) ((s) == APR_ENOSPC \ || (s) == APR_OS_START_SYSERR + ERROR_DISK_FULL) #define APR_STATUS_IS_ENOMEM(s) ((s) == APR_ENOMEM \ || (s) == APR_OS_START_SYSERR + ERROR_ARENA_TRASHED \ || (s) == APR_OS_START_SYSERR + ERROR_NOT_ENOUGH_MEMORY \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_BLOCK \ || (s) == APR_OS_START_SYSERR + ERROR_NOT_ENOUGH_QUOTA \ || (s) == APR_OS_START_SYSERR + ERROR_OUTOFMEMORY) #define APR_STATUS_IS_EMFILE(s) ((s) == APR_EMFILE \ || (s) == APR_OS_START_SYSERR + ERROR_TOO_MANY_OPEN_FILES) #define APR_STATUS_IS_ENFILE(s) ((s) == APR_ENFILE) #define APR_STATUS_IS_EBADF(s) ((s) == APR_EBADF \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_HANDLE \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_TARGET_HANDLE) #define APR_STATUS_IS_EINVAL(s) ((s) == APR_EINVAL \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_ACCESS \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DATA \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_FUNCTION \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_HANDLE \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_PARAMETER \ || (s) == APR_OS_START_SYSERR + ERROR_NEGATIVE_SEEK) #define APR_STATUS_IS_ESPIPE(s) ((s) == APR_ESPIPE \ || (s) == APR_OS_START_SYSERR + ERROR_SEEK_ON_DEVICE \ || (s) == APR_OS_START_SYSERR + ERROR_NEGATIVE_SEEK) #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN \ || (s) == APR_OS_START_SYSERR + ERROR_NO_DATA \ || (s) == APR_OS_START_SYSERR + ERROR_NO_PROC_SLOTS \ || (s) == APR_OS_START_SYSERR + ERROR_NESTING_NOT_ALLOWED \ || (s) == APR_OS_START_SYSERR + ERROR_MAX_THRDS_REACHED \ || (s) == APR_OS_START_SYSERR + ERROR_LOCK_VIOLATION \ || (s) == APR_OS_START_SYSERR + WSAEWOULDBLOCK) #define APR_STATUS_IS_EINTR(s) ((s) == APR_EINTR \ || (s) == APR_OS_START_SYSERR + WSAEINTR) #define APR_STATUS_IS_ENOTSOCK(s) ((s) == APR_ENOTSOCK \ || (s) == APR_OS_START_SYSERR + WSAENOTSOCK) #define APR_STATUS_IS_ECONNREFUSED(s) ((s) == APR_ECONNREFUSED \ || (s) == APR_OS_START_SYSERR + WSAECONNREFUSED) #define APR_STATUS_IS_EINPROGRESS(s) ((s) == APR_EINPROGRESS \ || (s) == APR_OS_START_SYSERR + WSAEINPROGRESS) #define APR_STATUS_IS_ECONNABORTED(s) ((s) == APR_ECONNABORTED \ || (s) == APR_OS_START_SYSERR + WSAECONNABORTED) #define APR_STATUS_IS_ECONNRESET(s) ((s) == APR_ECONNRESET \ || (s) == APR_OS_START_SYSERR + ERROR_NETNAME_DELETED \ || (s) == APR_OS_START_SYSERR + WSAECONNRESET) /* XXX deprecated */ #define APR_STATUS_IS_ETIMEDOUT(s) ((s) == APR_ETIMEDOUT \ || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \ || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT) #undef APR_STATUS_IS_TIMEUP #define APR_STATUS_IS_TIMEUP(s) ((s) == APR_TIMEUP \ || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \ || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT) #define APR_STATUS_IS_EHOSTUNREACH(s) ((s) == APR_EHOSTUNREACH \ || (s) == APR_OS_START_SYSERR + WSAEHOSTUNREACH) #define APR_STATUS_IS_ENETUNREACH(s) ((s) == APR_ENETUNREACH \ || (s) == APR_OS_START_SYSERR + WSAENETUNREACH) #define APR_STATUS_IS_EFTYPE(s) ((s) == APR_EFTYPE \ || (s) == APR_OS_START_SYSERR + ERROR_EXE_MACHINE_TYPE_MISMATCH \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_DLL \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_MODULETYPE \ || (s) == APR_OS_START_SYSERR + ERROR_BAD_EXE_FORMAT \ || (s) == APR_OS_START_SYSERR + ERROR_INVALID_EXE_SIGNATURE \ || (s) == APR_OS_START_SYSERR + ERROR_FILE_CORRUPT \ || (s) == APR_OS_START_SYSERR + ERROR_BAD_FORMAT) #define APR_STATUS_IS_EPIPE(s) ((s) == APR_EPIPE \ || (s) == APR_OS_START_SYSERR + ERROR_BROKEN_PIPE) #define APR_STATUS_IS_EXDEV(s) ((s) == APR_EXDEV \ || (s) == APR_OS_START_SYSERR + ERROR_NOT_SAME_DEVICE) #define APR_STATUS_IS_ENOTEMPTY(s) ((s) == APR_ENOTEMPTY \ || (s) == APR_OS_START_SYSERR + ERROR_DIR_NOT_EMPTY) #elif defined(NETWARE) && defined(USE_WINSOCK) && !defined(DOXYGEN) /* !defined(OS2) && !defined(WIN32) */ #define APR_FROM_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e + APR_OS_START_SYSERR) #define APR_TO_OS_ERROR(e) (e == 0 ? APR_SUCCESS : e - APR_OS_START_SYSERR) #define apr_get_os_error() (errno) #define apr_set_os_error(e) (errno = (e)) /* A special case, only socket calls require this: */ #define apr_get_netos_error() (APR_FROM_OS_ERROR(WSAGetLastError())) #define apr_set_netos_error(e) (WSASetLastError(APR_TO_OS_ERROR(e))) /* APR CANONICAL ERROR TESTS */ #define APR_STATUS_IS_EACCES(s) ((s) == APR_EACCES) #define APR_STATUS_IS_EEXIST(s) ((s) == APR_EEXIST) #define APR_STATUS_IS_ENAMETOOLONG(s) ((s) == APR_ENAMETOOLONG) #define APR_STATUS_IS_ENOENT(s) ((s) == APR_ENOENT) #define APR_STATUS_IS_ENOTDIR(s) ((s) == APR_ENOTDIR) #define APR_STATUS_IS_ENOSPC(s) ((s) == APR_ENOSPC) #define APR_STATUS_IS_ENOMEM(s) ((s) == APR_ENOMEM) #define APR_STATUS_IS_EMFILE(s) ((s) == APR_EMFILE) #define APR_STATUS_IS_ENFILE(s) ((s) == APR_ENFILE) #define APR_STATUS_IS_EBADF(s) ((s) == APR_EBADF) #define APR_STATUS_IS_EINVAL(s) ((s) == APR_EINVAL) #define APR_STATUS_IS_ESPIPE(s) ((s) == APR_ESPIPE) #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN \ || (s) == EWOULDBLOCK \ || (s) == APR_OS_START_SYSERR + WSAEWOULDBLOCK) #define APR_STATUS_IS_EINTR(s) ((s) == APR_EINTR \ || (s) == APR_OS_START_SYSERR + WSAEINTR) #define APR_STATUS_IS_ENOTSOCK(s) ((s) == APR_ENOTSOCK \ || (s) == APR_OS_START_SYSERR + WSAENOTSOCK) #define APR_STATUS_IS_ECONNREFUSED(s) ((s) == APR_ECONNREFUSED \ || (s) == APR_OS_START_SYSERR + WSAECONNREFUSED) #define APR_STATUS_IS_EINPROGRESS(s) ((s) == APR_EINPROGRESS \ || (s) == APR_OS_START_SYSERR + WSAEINPROGRESS) #define APR_STATUS_IS_ECONNABORTED(s) ((s) == APR_ECONNABORTED \ || (s) == APR_OS_START_SYSERR + WSAECONNABORTED) #define APR_STATUS_IS_ECONNRESET(s) ((s) == APR_ECONNRESET \ || (s) == APR_OS_START_SYSERR + WSAECONNRESET) /* XXX deprecated */ #define APR_STATUS_IS_ETIMEDOUT(s) ((s) == APR_ETIMEDOUT \ || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \ || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT) #undef APR_STATUS_IS_TIMEUP #define APR_STATUS_IS_TIMEUP(s) ((s) == APR_TIMEUP \ || (s) == APR_OS_START_SYSERR + WSAETIMEDOUT \ || (s) == APR_OS_START_SYSERR + WAIT_TIMEOUT) #define APR_STATUS_IS_EHOSTUNREACH(s) ((s) == APR_EHOSTUNREACH \ || (s) == APR_OS_START_SYSERR + WSAEHOSTUNREACH) #define APR_STATUS_IS_ENETUNREACH(s) ((s) == APR_ENETUNREACH \ || (s) == APR_OS_START_SYSERR + WSAENETUNREACH) #define APR_STATUS_IS_ENETDOWN(s) ((s) == APR_OS_START_SYSERR + WSAENETDOWN) #define APR_STATUS_IS_EFTYPE(s) ((s) == APR_EFTYPE) #define APR_STATUS_IS_EPIPE(s) ((s) == APR_EPIPE) #define APR_STATUS_IS_EXDEV(s) ((s) == APR_EXDEV) #define APR_STATUS_IS_ENOTEMPTY(s) ((s) == APR_ENOTEMPTY) #else /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */ /* * os error codes are clib error codes */ #define APR_FROM_OS_ERROR(e) (e) #define APR_TO_OS_ERROR(e) (e) #define apr_get_os_error() (errno) #define apr_set_os_error(e) (errno = (e)) /* A special case, only socket calls require this: */ #define apr_get_netos_error() (errno) #define apr_set_netos_error(e) (errno = (e)) /** * @addtogroup APR_STATUS_IS * @{ */ /** permission denied */ #define APR_STATUS_IS_EACCES(s) ((s) == APR_EACCES) /** file exists */ #define APR_STATUS_IS_EEXIST(s) ((s) == APR_EEXIST) /** path name is too long */ #define APR_STATUS_IS_ENAMETOOLONG(s) ((s) == APR_ENAMETOOLONG) /** * no such file or directory * @remark * EMVSCATLG can be returned by the automounter on z/OS for * paths which do not exist. */ #ifdef EMVSCATLG #define APR_STATUS_IS_ENOENT(s) ((s) == APR_ENOENT \ || (s) == EMVSCATLG) #else #define APR_STATUS_IS_ENOENT(s) ((s) == APR_ENOENT) #endif /** not a directory */ #define APR_STATUS_IS_ENOTDIR(s) ((s) == APR_ENOTDIR) /** no space left on device */ #ifdef EDQUOT #define APR_STATUS_IS_ENOSPC(s) ((s) == APR_ENOSPC \ || (s) == EDQUOT) #else #define APR_STATUS_IS_ENOSPC(s) ((s) == APR_ENOSPC) #endif /** not enough memory */ #define APR_STATUS_IS_ENOMEM(s) ((s) == APR_ENOMEM) /** too many open files */ #define APR_STATUS_IS_EMFILE(s) ((s) == APR_EMFILE) /** file table overflow */ #define APR_STATUS_IS_ENFILE(s) ((s) == APR_ENFILE) /** bad file # */ #define APR_STATUS_IS_EBADF(s) ((s) == APR_EBADF) /** invalid argument */ #define APR_STATUS_IS_EINVAL(s) ((s) == APR_EINVAL) /** illegal seek */ #define APR_STATUS_IS_ESPIPE(s) ((s) == APR_ESPIPE) /** operation would block */ #if !defined(EWOULDBLOCK) || !defined(EAGAIN) #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN) #elif (EWOULDBLOCK == EAGAIN) #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN) #else #define APR_STATUS_IS_EAGAIN(s) ((s) == APR_EAGAIN \ || (s) == EWOULDBLOCK) #endif /** interrupted system call */ #define APR_STATUS_IS_EINTR(s) ((s) == APR_EINTR) /** socket operation on a non-socket */ #define APR_STATUS_IS_ENOTSOCK(s) ((s) == APR_ENOTSOCK) /** Connection Refused */ #define APR_STATUS_IS_ECONNREFUSED(s) ((s) == APR_ECONNREFUSED) /** operation now in progress */ #define APR_STATUS_IS_EINPROGRESS(s) ((s) == APR_EINPROGRESS) /** * Software caused connection abort * @remark * EPROTO on certain older kernels really means ECONNABORTED, so we need to * ignore it for them. See discussion in new-httpd archives nh.9701 & nh.9603 * * There is potentially a bug in Solaris 2.x x<6, and other boxes that * implement tcp sockets in userland (i.e. on top of STREAMS). On these * systems, EPROTO can actually result in a fatal loop. See PR#981 for * example. It's hard to handle both uses of EPROTO. */ #ifdef EPROTO #define APR_STATUS_IS_ECONNABORTED(s) ((s) == APR_ECONNABORTED \ || (s) == EPROTO) #else #define APR_STATUS_IS_ECONNABORTED(s) ((s) == APR_ECONNABORTED) #endif /** Connection Reset by peer */ #define APR_STATUS_IS_ECONNRESET(s) ((s) == APR_ECONNRESET) /** Operation timed out * @deprecated */ #define APR_STATUS_IS_ETIMEDOUT(s) ((s) == APR_ETIMEDOUT) /** no route to host */ #define APR_STATUS_IS_EHOSTUNREACH(s) ((s) == APR_EHOSTUNREACH) /** network is unreachable */ #define APR_STATUS_IS_ENETUNREACH(s) ((s) == APR_ENETUNREACH) /** inappropiate file type or format */ #define APR_STATUS_IS_EFTYPE(s) ((s) == APR_EFTYPE) /** broken pipe */ #define APR_STATUS_IS_EPIPE(s) ((s) == APR_EPIPE) /** cross device link */ #define APR_STATUS_IS_EXDEV(s) ((s) == APR_EXDEV) /** Directory Not Empty */ #define APR_STATUS_IS_ENOTEMPTY(s) ((s) == APR_ENOTEMPTY || \ (s) == APR_EEXIST) /** @} */ #endif /* !defined(NETWARE) && !defined(OS2) && !defined(WIN32) */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_ERRNO_H */ include/apr-1/apr_file_info.h000444 000000 000000 00000042423 11035140625 016344 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_FILE_INFO_H #define APR_FILE_INFO_H /** * @file apr_file_info.h * @brief APR File Information */ #include "apr.h" #include "apr_user.h" #include "apr_pools.h" #include "apr_tables.h" #include "apr_time.h" #include "apr_errno.h" #if APR_HAVE_SYS_UIO_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_file_info File Information * @ingroup APR * @{ */ /* Many applications use the type member to determine the * existance of a file or initialization of the file info, * so the APR_NOFILE value must be distinct from APR_UNKFILE. */ /** apr_filetype_e values for the filetype member of the * apr_file_info_t structure * @warning: Not all of the filetypes below can be determined. * For example, a given platform might not correctly report * a socket descriptor as APR_SOCK if that type isn't * well-identified on that platform. In such cases where * a filetype exists but cannot be described by the recognized * flags below, the filetype will be APR_UNKFILE. If the * filetype member is not determined, the type will be APR_NOFILE. */ typedef enum { APR_NOFILE = 0, /**< no file type determined */ APR_REG, /**< a regular file */ APR_DIR, /**< a directory */ APR_CHR, /**< a character device */ APR_BLK, /**< a block device */ APR_PIPE, /**< a FIFO / pipe */ APR_LNK, /**< a symbolic link */ APR_SOCK, /**< a [unix domain] socket */ APR_UNKFILE = 127 /**< a file of some other unknown type */ } apr_filetype_e; /** * @defgroup apr_file_permissions File Permissions flags * @{ */ #define APR_FPROT_USETID 0x8000 /**< Set user id */ #define APR_FPROT_UREAD 0x0400 /**< Read by user */ #define APR_FPROT_UWRITE 0x0200 /**< Write by user */ #define APR_FPROT_UEXECUTE 0x0100 /**< Execute by user */ #define APR_FPROT_GSETID 0x4000 /**< Set group id */ #define APR_FPROT_GREAD 0x0040 /**< Read by group */ #define APR_FPROT_GWRITE 0x0020 /**< Write by group */ #define APR_FPROT_GEXECUTE 0x0010 /**< Execute by group */ #define APR_FPROT_WSTICKY 0x2000 /**< Sticky bit */ #define APR_FPROT_WREAD 0x0004 /**< Read by others */ #define APR_FPROT_WWRITE 0x0002 /**< Write by others */ #define APR_FPROT_WEXECUTE 0x0001 /**< Execute by others */ #define APR_FPROT_OS_DEFAULT 0x0FFF /**< use OS's default permissions */ /* additional permission flags for apr_file_copy and apr_file_append */ #define APR_FPROT_FILE_SOURCE_PERMS 0x1000 /**< Copy source file's permissions */ /* backcompat */ #define APR_USETID APR_FPROT_USETID /**< @deprecated @see APR_FPROT_USETID */ #define APR_UREAD APR_FPROT_UREAD /**< @deprecated @see APR_FPROT_UREAD */ #define APR_UWRITE APR_FPROT_UWRITE /**< @deprecated @see APR_FPROT_UWRITE */ #define APR_UEXECUTE APR_FPROT_UEXECUTE /**< @deprecated @see APR_FPROT_UEXECUTE */ #define APR_GSETID APR_FPROT_GSETID /**< @deprecated @see APR_FPROT_GSETID */ #define APR_GREAD APR_FPROT_GREAD /**< @deprecated @see APR_FPROT_GREAD */ #define APR_GWRITE APR_FPROT_GWRITE /**< @deprecated @see APR_FPROT_GWRITE */ #define APR_GEXECUTE APR_FPROT_GEXECUTE /**< @deprecated @see APR_FPROT_GEXECUTE */ #define APR_WSTICKY APR_FPROT_WSTICKY /**< @deprecated @see APR_FPROT_WSTICKY */ #define APR_WREAD APR_FPROT_WREAD /**< @deprecated @see APR_FPROT_WREAD */ #define APR_WWRITE APR_FPROT_WWRITE /**< @deprecated @see APR_FPROT_WWRITE */ #define APR_WEXECUTE APR_FPROT_WEXECUTE /**< @deprecated @see APR_FPROT_WEXECUTE */ #define APR_OS_DEFAULT APR_FPROT_OS_DEFAULT /**< @deprecated @see APR_FPROT_OS_DEFAULT */ #define APR_FILE_SOURCE_PERMS APR_FPROT_FILE_SOURCE_PERMS /**< @deprecated @see APR_FPROT_FILE_SOURCE_PERMS */ /** @} */ /** * Structure for referencing directories. */ typedef struct apr_dir_t apr_dir_t; /** * Structure for determining file permissions. */ typedef apr_int32_t apr_fileperms_t; #if (defined WIN32) || (defined NETWARE) /** * Structure for determining the device the file is on. */ typedef apr_uint32_t apr_dev_t; #else /** * Structure for determining the device the file is on. */ typedef dev_t apr_dev_t; #endif /* See apr.h.in (.hw or .hnw) for the declaration of apr_ino_t, * but as we don't want to break users who author for 1.2.x, we * can't present this type until they have included apr_file_info.h * where it was originally declared in release 1.2.0. * Unmask it for use here. */ #undef apr_ino_t /** * @defgroup apr_file_stat Stat Functions * @{ */ /** file info structure */ typedef struct apr_finfo_t apr_finfo_t; #define APR_FINFO_LINK 0x00000001 /**< Stat the link not the file itself if it is a link */ #define APR_FINFO_MTIME 0x00000010 /**< Modification Time */ #define APR_FINFO_CTIME 0x00000020 /**< Creation or inode-changed time */ #define APR_FINFO_ATIME 0x00000040 /**< Access Time */ #define APR_FINFO_SIZE 0x00000100 /**< Size of the file */ #define APR_FINFO_CSIZE 0x00000200 /**< Storage size consumed by the file */ #define APR_FINFO_DEV 0x00001000 /**< Device */ #define APR_FINFO_INODE 0x00002000 /**< Inode */ #define APR_FINFO_NLINK 0x00004000 /**< Number of links */ #define APR_FINFO_TYPE 0x00008000 /**< Type */ #define APR_FINFO_USER 0x00010000 /**< User */ #define APR_FINFO_GROUP 0x00020000 /**< Group */ #define APR_FINFO_UPROT 0x00100000 /**< User protection bits */ #define APR_FINFO_GPROT 0x00200000 /**< Group protection bits */ #define APR_FINFO_WPROT 0x00400000 /**< World protection bits */ #define APR_FINFO_ICASE 0x01000000 /**< if dev is case insensitive */ #define APR_FINFO_NAME 0x02000000 /**< ->name in proper case */ #define APR_FINFO_MIN 0x00008170 /**< type, mtime, ctime, atime, size */ #define APR_FINFO_IDENT 0x00003000 /**< dev and inode */ #define APR_FINFO_OWNER 0x00030000 /**< user and group */ #define APR_FINFO_PROT 0x00700000 /**< all protections */ #define APR_FINFO_NORM 0x0073b170 /**< an atomic unix apr_stat() */ #define APR_FINFO_DIRENT 0x02000000 /**< an atomic unix apr_dir_read() */ /** * The file information structure. This is analogous to the POSIX * stat structure. */ struct apr_finfo_t { /** Allocates memory and closes lingering handles in the specified pool */ apr_pool_t *pool; /** The bitmask describing valid fields of this apr_finfo_t structure * including all available 'wanted' fields and potentially more */ apr_int32_t valid; /** The access permissions of the file. Mimics Unix access rights. */ apr_fileperms_t protection; /** The type of file. One of APR_REG, APR_DIR, APR_CHR, APR_BLK, APR_PIPE, * APR_LNK or APR_SOCK. If the type is undetermined, the value is APR_NOFILE. * If the type cannot be determined, the value is APR_UNKFILE. */ apr_filetype_e filetype; /** The user id that owns the file */ apr_uid_t user; /** The group id that owns the file */ apr_gid_t group; /** The inode of the file. */ apr_ino_t inode; /** The id of the device the file is on. */ apr_dev_t device; /** The number of hard links to the file. */ apr_int32_t nlink; /** The size of the file */ apr_off_t size; /** The storage size consumed by the file */ apr_off_t csize; /** The time the file was last accessed */ apr_time_t atime; /** The time the file was last modified */ apr_time_t mtime; /** The time the file was created, or the inode was last changed */ apr_time_t ctime; /** The pathname of the file (possibly unrooted) */ const char *fname; /** The file's name (no path) in filesystem case */ const char *name; /** The file's handle, if accessed (can be submitted to apr_duphandle) */ struct apr_file_t *filehand; }; /** * get the specified file's stats. The file is specified by filename, * instead of using a pre-opened file. * @param finfo Where to store the information about the file, which is * never touched if the call fails. * @param fname The name of the file to stat. * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values * @param pool the pool to use to allocate the new file. * * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may * not be filled in, and you need to check the @c finfo->valid bitmask * to verify that what you're looking for is there. */ APR_DECLARE(apr_status_t) apr_stat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *pool); /** @} */ /** * @defgroup apr_dir Directory Manipulation Functions * @{ */ /** * Open the specified directory. * @param new_dir The opened directory descriptor. * @param dirname The full path to the directory (use / on all systems) * @param pool The pool to use. */ APR_DECLARE(apr_status_t) apr_dir_open(apr_dir_t **new_dir, const char *dirname, apr_pool_t *pool); /** * close the specified directory. * @param thedir the directory descriptor to close. */ APR_DECLARE(apr_status_t) apr_dir_close(apr_dir_t *thedir); /** * Read the next entry from the specified directory. * @param finfo the file info structure and filled in by apr_dir_read * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values * @param thedir the directory descriptor returned from apr_dir_open * @remark No ordering is guaranteed for the entries read. * * @note If @c APR_INCOMPLETE is returned all the fields in @a finfo may * not be filled in, and you need to check the @c finfo->valid bitmask * to verify that what you're looking for is there. */ APR_DECLARE(apr_status_t) apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted, apr_dir_t *thedir); /** * Rewind the directory to the first entry. * @param thedir the directory descriptor to rewind. */ APR_DECLARE(apr_status_t) apr_dir_rewind(apr_dir_t *thedir); /** @} */ /** * @defgroup apr_filepath Filepath Manipulation Functions * @{ */ /** Cause apr_filepath_merge to fail if addpath is above rootpath */ #define APR_FILEPATH_NOTABOVEROOT 0x01 /** internal: Only meaningful with APR_FILEPATH_NOTABOVEROOT */ #define APR_FILEPATH_SECUREROOTTEST 0x02 /** Cause apr_filepath_merge to fail if addpath is above rootpath, * even given a rootpath /foo/bar and an addpath ../bar/bash */ #define APR_FILEPATH_SECUREROOT 0x03 /** Fail apr_filepath_merge if the merged path is relative */ #define APR_FILEPATH_NOTRELATIVE 0x04 /** Fail apr_filepath_merge if the merged path is absolute */ #define APR_FILEPATH_NOTABSOLUTE 0x08 /** Return the file system's native path format (e.g. path delimiters * of ':' on MacOS9, '\' on Win32, etc.) */ #define APR_FILEPATH_NATIVE 0x10 /** Resolve the true case of existing directories and file elements * of addpath, (resolving any aliases on Win32) and append a proper * trailing slash if a directory */ #define APR_FILEPATH_TRUENAME 0x20 /** * Extract the rootpath from the given filepath * @param rootpath the root file path returned with APR_SUCCESS or APR_EINCOMPLETE * @param filepath the pathname to parse for its root component * @param flags the desired rules to apply, from *
 *      APR_FILEPATH_NATIVE    Use native path seperators (e.g. '\' on Win32)
 *      APR_FILEPATH_TRUENAME  Tests that the root exists, and makes it proper
 * 
* @param p the pool to allocate the new path string from * @remark on return, filepath points to the first non-root character in the * given filepath. In the simplest example, given a filepath of "/foo", * returns the rootpath of "/" and filepath points at "foo". This is far * more complex on other platforms, which will canonicalize the root form * to a consistant format, given the APR_FILEPATH_TRUENAME flag, and also * test for the validity of that root (e.g., that a drive d:/ or network * share //machine/foovol/). * The function returns APR_ERELATIVE if filepath isn't rooted (an * error), APR_EINCOMPLETE if the root path is ambigious (but potentially * legitimate, e.g. "/" on Windows is incomplete because it doesn't specify * the drive letter), or APR_EBADPATH if the root is simply invalid. * APR_SUCCESS is returned if filepath is an absolute path. */ APR_DECLARE(apr_status_t) apr_filepath_root(const char **rootpath, const char **filepath, apr_int32_t flags, apr_pool_t *p); /** * Merge additional file path onto the previously processed rootpath * @param newpath the merged paths returned * @param rootpath the root file path (NULL uses the current working path) * @param addpath the path to add to the root path * @param flags the desired APR_FILEPATH_ rules to apply when merging * @param p the pool to allocate the new path string from * @remark if the flag APR_FILEPATH_TRUENAME is given, and the addpath * contains wildcard characters ('*', '?') on platforms that don't support * such characters within filenames, the paths will be merged, but the * result code will be APR_EPATHWILD, and all further segments will not * reflect the true filenames including the wildcard and following segments. */ APR_DECLARE(apr_status_t) apr_filepath_merge(char **newpath, const char *rootpath, const char *addpath, apr_int32_t flags, apr_pool_t *p); /** * Split a search path into separate components * @param pathelts the returned components of the search path * @param liststr the search path (e.g., getenv("PATH")) * @param p the pool to allocate the array and path components from * @remark empty path componenta do not become part of @a pathelts. * @remark the path separator in @a liststr is system specific; * e.g., ':' on Unix, ';' on Windows, etc. */ APR_DECLARE(apr_status_t) apr_filepath_list_split(apr_array_header_t **pathelts, const char *liststr, apr_pool_t *p); /** * Merge a list of search path components into a single search path * @param liststr the returned search path; may be NULL if @a pathelts is empty * @param pathelts the components of the search path * @param p the pool to allocate the search path from * @remark emtpy strings in the source array are ignored. * @remark the path separator in @a liststr is system specific; * e.g., ':' on Unix, ';' on Windows, etc. */ APR_DECLARE(apr_status_t) apr_filepath_list_merge(char **liststr, apr_array_header_t *pathelts, apr_pool_t *p); /** * Return the default file path (for relative file names) * @param path the default path string returned * @param flags optional flag APR_FILEPATH_NATIVE to retrieve the * default file path in os-native format. * @param p the pool to allocate the default path string from */ APR_DECLARE(apr_status_t) apr_filepath_get(char **path, apr_int32_t flags, apr_pool_t *p); /** * Set the default file path (for relative file names) * @param path the default path returned * @param p the pool to allocate any working storage */ APR_DECLARE(apr_status_t) apr_filepath_set(const char *path, apr_pool_t *p); /** The FilePath character encoding is unknown */ #define APR_FILEPATH_ENCODING_UNKNOWN 0 /** The FilePath character encoding is locale-dependent */ #define APR_FILEPATH_ENCODING_LOCALE 1 /** The FilePath character encoding is UTF-8 */ #define APR_FILEPATH_ENCODING_UTF8 2 /** * Determine the encoding used internally by the FilePath functions * @param style points to a variable which receives the encoding style flag * @param p the pool to allocate any working storage * @remark Use @c apr_os_locale_encoding and/or @c apr_os_default_encoding * to get the name of the path encoding if it's not UTF-8. */ APR_DECLARE(apr_status_t) apr_filepath_encoding(int *style, apr_pool_t *p); /** @} */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_FILE_INFO_H */ include/apr-1/apr_file_io.h000444 000000 000000 00000102542 11035140625 016017 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_FILE_IO_H #define APR_FILE_IO_H /** * @file apr_file_io.h * @brief APR File I/O Handling */ #include "apr.h" #include "apr_pools.h" #include "apr_time.h" #include "apr_errno.h" #include "apr_file_info.h" #include "apr_inherit.h" #define APR_WANT_STDIO /**< for SEEK_* */ #define APR_WANT_IOVEC /**< for apr_file_writev */ #include "apr_want.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_file_io File I/O Handling Functions * @ingroup APR * @{ */ /** * @defgroup apr_file_open_flags File Open Flags/Routines * @{ */ /* Note to implementors: Values in the range 0x00100000--0x80000000 are reserved for platform-specific values. */ #define APR_FOPEN_READ 0x00001 /**< Open the file for reading */ #define APR_FOPEN_WRITE 0x00002 /**< Open the file for writing */ #define APR_FOPEN_CREATE 0x00004 /**< Create the file if not there */ #define APR_FOPEN_APPEND 0x00008 /**< Append to the end of the file */ #define APR_FOPEN_TRUNCATE 0x00010 /**< Open the file and truncate to 0 length */ #define APR_FOPEN_BINARY 0x00020 /**< Open the file in binary mode */ #define APR_FOPEN_EXCL 0x00040 /**< Open should fail if APR_CREATE and file exists. */ #define APR_FOPEN_BUFFERED 0x00080 /**< Open the file for buffered I/O */ #define APR_FOPEN_DELONCLOSE 0x00100 /**< Delete the file after close */ #define APR_FOPEN_XTHREAD 0x00200 /**< Platform dependent tag to open the file for use across multiple threads */ #define APR_FOPEN_SHARELOCK 0x00400 /**< Platform dependent support for higher level locked read/write access to support writes across process/machines */ #define APR_FOPEN_NOCLEANUP 0x00800 /**< Do not register a cleanup when the file is opened */ #define APR_FOPEN_SENDFILE_ENABLED 0x01000 /**< Advisory flag that this file should support apr_socket_sendfile operation */ #define APR_FOPEN_LARGEFILE 0x04000 /**< Platform dependent flag to enable large file support; WARNING see below. */ /* backcompat */ #define APR_READ APR_FOPEN_READ /**< @deprecated @see APR_FOPEN_READ */ #define APR_WRITE APR_FOPEN_WRITE /**< @deprecated @see APR_FOPEN_WRITE */ #define APR_CREATE APR_FOPEN_CREATE /**< @deprecated @see APR_FOPEN_CREATE */ #define APR_APPEND APR_FOPEN_APPEND /**< @deprecated @see APR_FOPEN_APPEND */ #define APR_TRUNCATE APR_FOPEN_TRUNCATE /**< @deprecated @see APR_FOPEN_TRUNCATE */ #define APR_BINARY APR_FOPEN_BINARY /**< @deprecated @see APR_FOPEN_BINARY */ #define APR_EXCL APR_FOPEN_EXCL /**< @deprecated @see APR_FOPEN_EXCL */ #define APR_BUFFERED APR_FOPEN_BUFFERED /**< @deprecated @see APR_FOPEN_BUFFERED */ #define APR_DELONCLOSE APR_FOPEN_DELONCLOSE /**< @deprecated @see APR_FOPEN_DELONCLOSE */ #define APR_XTHREAD APR_FOPEN_XTHREAD /**< @deprecated @see APR_FOPEN_XTHREAD */ #define APR_SHARELOCK APR_FOPEN_SHARELOCK /**< @deprecated @see APR_FOPEN_SHARELOCK */ #define APR_FILE_NOCLEANUP APR_FOPEN_NOCLEANUP /**< @deprecated @see APR_FOPEN_NOCLEANUP */ #define APR_SENDFILE_ENABLED APR_FOPEN_SENDFILE_ENABLED /**< @deprecated @see APR_FOPEN_SENDFILE_ENABLED */ #define APR_LARGEFILE APR_FOPEN_LARGEFILE /**< @deprecated @see APR_FOPEN_LARGEFILE */ /** @warning The APR_LARGEFILE flag only has effect on some platforms * where sizeof(apr_off_t) == 4. Where implemented, it allows opening * and writing to a file which exceeds the size which can be * represented by apr_off_t (2 gigabytes). When a file's size does * exceed 2Gb, apr_file_info_get() will fail with an error on the * descriptor, likewise apr_stat()/apr_lstat() will fail on the * filename. apr_dir_read() will fail with APR_INCOMPLETE on a * directory entry for a large file depending on the particular * APR_FINFO_* flags. Generally, it is not recommended to use this * flag. */ /** @} */ /** * @defgroup apr_file_seek_flags File Seek Flags * @{ */ /* flags for apr_file_seek */ /** Set the file position */ #define APR_SET SEEK_SET /** Current */ #define APR_CUR SEEK_CUR /** Go to end of file */ #define APR_END SEEK_END /** @} */ /** * @defgroup apr_file_attrs_set_flags File Attribute Flags * @{ */ /* flags for apr_file_attrs_set */ #define APR_FILE_ATTR_READONLY 0x01 /**< File is read-only */ #define APR_FILE_ATTR_EXECUTABLE 0x02 /**< File is executable */ #define APR_FILE_ATTR_HIDDEN 0x04 /**< File is hidden */ /** @} */ /** * @defgroup apr_file_writev{_full} max iovec size * @{ */ #if defined(DOXYGEN) #define APR_MAX_IOVEC_SIZE 1024 /**< System dependent maximum size of an iovec array */ #elif defined(IOV_MAX) #define APR_MAX_IOVEC_SIZE IOV_MAX #elif defined(MAX_IOVEC) #define APR_MAX_IOVEC_SIZE MAX_IOVEC #else #define APR_MAX_IOVEC_SIZE 1024 #endif /** @} */ /** File attributes */ typedef apr_uint32_t apr_fileattrs_t; /** Type to pass as whence argument to apr_file_seek. */ typedef int apr_seek_where_t; /** * Structure for referencing files. */ typedef struct apr_file_t apr_file_t; /* File lock types/flags */ /** * @defgroup apr_file_lock_types File Lock Types * @{ */ #define APR_FLOCK_SHARED 1 /**< Shared lock. More than one process or thread can hold a shared lock at any given time. Essentially, this is a "read lock", preventing writers from establishing an exclusive lock. */ #define APR_FLOCK_EXCLUSIVE 2 /**< Exclusive lock. Only one process may hold an exclusive lock at any given time. This is analogous to a "write lock". */ #define APR_FLOCK_TYPEMASK 0x000F /**< mask to extract lock type */ #define APR_FLOCK_NONBLOCK 0x0010 /**< do not block while acquiring the file lock */ /** @} */ /** * Open the specified file. * @param newf The opened file descriptor. * @param fname The full path to the file (using / on all systems) * @param flag Or'ed value of: *
 *         APR_READ              open for reading
 *         APR_WRITE             open for writing
 *         APR_CREATE            create the file if not there
 *         APR_APPEND            file ptr is set to end prior to all writes
 *         APR_TRUNCATE          set length to zero if file exists
 *         APR_BINARY            not a text file (This flag is ignored on 
 *                               UNIX because it has no meaning)
 *         APR_BUFFERED          buffer the data.  Default is non-buffered
 *         APR_EXCL              return error if APR_CREATE and file exists
 *         APR_DELONCLOSE        delete the file after closing.
 *         APR_XTHREAD           Platform dependent tag to open the file
 *                               for use across multiple threads
 *         APR_SHARELOCK         Platform dependent support for higher
 *                               level locked read/write access to support
 *                               writes across process/machines
 *         APR_FILE_NOCLEANUP    Do not register a cleanup with the pool 
 *                               passed in on the pool argument (see below).
 *                               The apr_os_file_t handle in apr_file_t will not
 *                               be closed when the pool is destroyed.
 *         APR_SENDFILE_ENABLED  Open with appropriate platform semantics
 *                               for sendfile operations.  Advisory only,
 *                               apr_socket_sendfile does not check this flag.
 * 
* @param perm Access permissions for file. * @param pool The pool to use. * @remark If perm is APR_OS_DEFAULT and the file is being created, * appropriate default permissions will be used. * @remark By default, the returned file descriptor will not be * inherited by child processes created by apr_proc_create(). This * can be changed using apr_file_inherit_set(). */ APR_DECLARE(apr_status_t) apr_file_open(apr_file_t **newf, const char *fname, apr_int32_t flag, apr_fileperms_t perm, apr_pool_t *pool); /** * Close the specified file. * @param file The file descriptor to close. */ APR_DECLARE(apr_status_t) apr_file_close(apr_file_t *file); /** * Delete the specified file. * @param path The full path to the file (using / on all systems) * @param pool The pool to use. * @remark If the file is open, it won't be removed until all * instances are closed. */ APR_DECLARE(apr_status_t) apr_file_remove(const char *path, apr_pool_t *pool); /** * Rename the specified file. * @param from_path The full path to the original file (using / on all systems) * @param to_path The full path to the new file (using / on all systems) * @param pool The pool to use. * @warning If a file exists at the new location, then it will be * overwritten. Moving files or directories across devices may not be * possible. */ APR_DECLARE(apr_status_t) apr_file_rename(const char *from_path, const char *to_path, apr_pool_t *pool); /** * Copy the specified file to another file. * @param from_path The full path to the original file (using / on all systems) * @param to_path The full path to the new file (using / on all systems) * @param perms Access permissions for the new file if it is created. * In place of the usual or'd combination of file permissions, the * value APR_FILE_SOURCE_PERMS may be given, in which case the source * file's permissions are copied. * @param pool The pool to use. * @remark The new file does not need to exist, it will be created if required. * @warning If the new file already exists, its contents will be overwritten. */ APR_DECLARE(apr_status_t) apr_file_copy(const char *from_path, const char *to_path, apr_fileperms_t perms, apr_pool_t *pool); /** * Append the specified file to another file. * @param from_path The full path to the source file (use / on all systems) * @param to_path The full path to the destination file (use / on all systems) * @param perms Access permissions for the destination file if it is created. * In place of the usual or'd combination of file permissions, the * value APR_FILE_SOURCE_PERMS may be given, in which case the source * file's permissions are copied. * @param pool The pool to use. * @remark The new file does not need to exist, it will be created if required. */ APR_DECLARE(apr_status_t) apr_file_append(const char *from_path, const char *to_path, apr_fileperms_t perms, apr_pool_t *pool); /** * Are we at the end of the file * @param fptr The apr file we are testing. * @remark Returns APR_EOF if we are at the end of file, APR_SUCCESS otherwise. */ APR_DECLARE(apr_status_t) apr_file_eof(apr_file_t *fptr); /** * Open standard error as an apr file pointer. * @param thefile The apr file to use as stderr. * @param pool The pool to allocate the file out of. * * @remark The only reason that the apr_file_open_std* functions exist * is that you may not always have a stderr/out/in on Windows. This * is generally a problem with newer versions of Windows and services. * * @remark The other problem is that the C library functions generally work * differently on Windows and Unix. So, by using apr_file_open_std* * functions, you can get a handle to an APR struct that works with * the APR functions which are supposed to work identically on all * platforms. */ APR_DECLARE(apr_status_t) apr_file_open_stderr(apr_file_t **thefile, apr_pool_t *pool); /** * open standard output as an apr file pointer. * @param thefile The apr file to use as stdout. * @param pool The pool to allocate the file out of. * * @remark See remarks for apr_file_open_stdout. */ APR_DECLARE(apr_status_t) apr_file_open_stdout(apr_file_t **thefile, apr_pool_t *pool); /** * open standard input as an apr file pointer. * @param thefile The apr file to use as stdin. * @param pool The pool to allocate the file out of. * * @remark See remarks for apr_file_open_stdout. */ APR_DECLARE(apr_status_t) apr_file_open_stdin(apr_file_t **thefile, apr_pool_t *pool); /** * Read data from the specified file. * @param thefile The file descriptor to read from. * @param buf The buffer to store the data to. * @param nbytes On entry, the number of bytes to read; on exit, the number * of bytes read. * * @remark apr_file_read will read up to the specified number of * bytes, but never more. If there isn't enough data to fill that * number of bytes, all of the available data is read. The third * argument is modified to reflect the number of bytes read. If a * char was put back into the stream via ungetc, it will be the first * character returned. * * @remark It is not possible for both bytes to be read and an APR_EOF * or other error to be returned. APR_EINTR is never returned. */ APR_DECLARE(apr_status_t) apr_file_read(apr_file_t *thefile, void *buf, apr_size_t *nbytes); /** * Write data to the specified file. * @param thefile The file descriptor to write to. * @param buf The buffer which contains the data. * @param nbytes On entry, the number of bytes to write; on exit, the number * of bytes written. * * @remark apr_file_write will write up to the specified number of * bytes, but never more. If the OS cannot write that many bytes, it * will write as many as it can. The third argument is modified to * reflect the * number of bytes written. * * @remark It is possible for both bytes to be written and an error to * be returned. APR_EINTR is never returned. */ APR_DECLARE(apr_status_t) apr_file_write(apr_file_t *thefile, const void *buf, apr_size_t *nbytes); /** * Write data from iovec array to the specified file. * @param thefile The file descriptor to write to. * @param vec The array from which to get the data to write to the file. * @param nvec The number of elements in the struct iovec array. This must * be smaller than APR_MAX_IOVEC_SIZE. If it isn't, the function * will fail with APR_EINVAL. * @param nbytes The number of bytes written. * * @remark It is possible for both bytes to be written and an error to * be returned. APR_EINTR is never returned. * * @remark apr_file_writev is available even if the underlying * operating system doesn't provide writev(). */ APR_DECLARE(apr_status_t) apr_file_writev(apr_file_t *thefile, const struct iovec *vec, apr_size_t nvec, apr_size_t *nbytes); /** * Read data from the specified file, ensuring that the buffer is filled * before returning. * @param thefile The file descriptor to read from. * @param buf The buffer to store the data to. * @param nbytes The number of bytes to read. * @param bytes_read If non-NULL, this will contain the number of bytes read. * * @remark apr_file_read will read up to the specified number of * bytes, but never more. If there isn't enough data to fill that * number of bytes, then the process/thread will block until it is * available or EOF is reached. If a char was put back into the * stream via ungetc, it will be the first character returned. * * @remark It is possible for both bytes to be read and an error to be * returned. And if *bytes_read is less than nbytes, an accompanying * error is _always_ returned. * * @remark APR_EINTR is never returned. */ APR_DECLARE(apr_status_t) apr_file_read_full(apr_file_t *thefile, void *buf, apr_size_t nbytes, apr_size_t *bytes_read); /** * Write data to the specified file, ensuring that all of the data is * written before returning. * @param thefile The file descriptor to write to. * @param buf The buffer which contains the data. * @param nbytes The number of bytes to write. * @param bytes_written If non-NULL, set to the number of bytes written. * * @remark apr_file_write will write up to the specified number of * bytes, but never more. If the OS cannot write that many bytes, the * process/thread will block until they can be written. Exceptional * error such as "out of space" or "pipe closed" will terminate with * an error. * * @remark It is possible for both bytes to be written and an error to * be returned. And if *bytes_written is less than nbytes, an * accompanying error is _always_ returned. * * @remark APR_EINTR is never returned. */ APR_DECLARE(apr_status_t) apr_file_write_full(apr_file_t *thefile, const void *buf, apr_size_t nbytes, apr_size_t *bytes_written); /** * Write data from iovec array to the specified file, ensuring that all of the * data is written before returning. * @param thefile The file descriptor to write to. * @param vec The array from which to get the data to write to the file. * @param nvec The number of elements in the struct iovec array. This must * be smaller than APR_MAX_IOVEC_SIZE. If it isn't, the function * will fail with APR_EINVAL. * @param nbytes The number of bytes written. * * @remark apr_file_writev_full is available even if the underlying * operating system doesn't provide writev(). */ APR_DECLARE(apr_status_t) apr_file_writev_full(apr_file_t *thefile, const struct iovec *vec, apr_size_t nvec, apr_size_t *nbytes); /** * Write a character into the specified file. * @param ch The character to write. * @param thefile The file descriptor to write to */ APR_DECLARE(apr_status_t) apr_file_putc(char ch, apr_file_t *thefile); /** * Read a character from the specified file. * @param ch The character to read into * @param thefile The file descriptor to read from */ APR_DECLARE(apr_status_t) apr_file_getc(char *ch, apr_file_t *thefile); /** * Put a character back onto a specified stream. * @param ch The character to write. * @param thefile The file descriptor to write to */ APR_DECLARE(apr_status_t) apr_file_ungetc(char ch, apr_file_t *thefile); /** * Read a string from the specified file. * @param str The buffer to store the string in. * @param len The length of the string * @param thefile The file descriptor to read from * @remark The buffer will be NUL-terminated if any characters are stored. */ APR_DECLARE(apr_status_t) apr_file_gets(char *str, int len, apr_file_t *thefile); /** * Write the string into the specified file. * @param str The string to write. * @param thefile The file descriptor to write to */ APR_DECLARE(apr_status_t) apr_file_puts(const char *str, apr_file_t *thefile); /** * Flush the file's buffer. * @param thefile The file descriptor to flush */ APR_DECLARE(apr_status_t) apr_file_flush(apr_file_t *thefile); /** * Duplicate the specified file descriptor. * @param new_file The structure to duplicate into. * @param old_file The file to duplicate. * @param p The pool to use for the new file. * @remark *new_file must point to a valid apr_file_t, or point to NULL. */ APR_DECLARE(apr_status_t) apr_file_dup(apr_file_t **new_file, apr_file_t *old_file, apr_pool_t *p); /** * Duplicate the specified file descriptor and close the original * @param new_file The old file that is to be closed and reused * @param old_file The file to duplicate * @param p The pool to use for the new file * * @remark new_file MUST point at a valid apr_file_t. It cannot be NULL. */ APR_DECLARE(apr_status_t) apr_file_dup2(apr_file_t *new_file, apr_file_t *old_file, apr_pool_t *p); /** * Move the specified file descriptor to a new pool * @param new_file Pointer in which to return the new apr_file_t * @param old_file The file to move * @param p The pool to which the descriptor is to be moved * @remark Unlike apr_file_dup2(), this function doesn't do an * OS dup() operation on the underlying descriptor; it just * moves the descriptor's apr_file_t wrapper to a new pool. * @remark The new pool need not be an ancestor of old_file's pool. * @remark After calling this function, old_file may not be used */ APR_DECLARE(apr_status_t) apr_file_setaside(apr_file_t **new_file, apr_file_t *old_file, apr_pool_t *p); /** * Move the read/write file offset to a specified byte within a file. * @param thefile The file descriptor * @param where How to move the pointer, one of: *
 *            APR_SET  --  set the offset to offset
 *            APR_CUR  --  add the offset to the current position 
 *            APR_END  --  add the offset to the current file size 
 * 
* @param offset The offset to move the pointer to. * @remark The third argument is modified to be the offset the pointer was actually moved to. */ APR_DECLARE(apr_status_t) apr_file_seek(apr_file_t *thefile, apr_seek_where_t where, apr_off_t *offset); /** * Create an anonymous pipe. * @param in The file descriptor to use as input to the pipe. * @param out The file descriptor to use as output from the pipe. * @param pool The pool to operate on. * @remark By default, the returned file descriptors will be inherited * by child processes created using apr_proc_create(). This can be * changed using apr_file_inherit_unset(). */ APR_DECLARE(apr_status_t) apr_file_pipe_create(apr_file_t **in, apr_file_t **out, apr_pool_t *pool); /** * Create a named pipe. * @param filename The filename of the named pipe * @param perm The permissions for the newly created pipe. * @param pool The pool to operate on. */ APR_DECLARE(apr_status_t) apr_file_namedpipe_create(const char *filename, apr_fileperms_t perm, apr_pool_t *pool); /** * Get the timeout value for a pipe or manipulate the blocking state. * @param thepipe The pipe we are getting a timeout for. * @param timeout The current timeout value in microseconds. */ APR_DECLARE(apr_status_t) apr_file_pipe_timeout_get(apr_file_t *thepipe, apr_interval_time_t *timeout); /** * Set the timeout value for a pipe or manipulate the blocking state. * @param thepipe The pipe we are setting a timeout on. * @param timeout The timeout value in microseconds. Values < 0 mean wait * forever, 0 means do not wait at all. */ APR_DECLARE(apr_status_t) apr_file_pipe_timeout_set(apr_file_t *thepipe, apr_interval_time_t timeout); /** file (un)locking functions. */ /** * Establish a lock on the specified, open file. The lock may be advisory * or mandatory, at the discretion of the platform. The lock applies to * the file as a whole, rather than a specific range. Locks are established * on a per-thread/process basis; a second lock by the same thread will not * block. * @param thefile The file to lock. * @param type The type of lock to establish on the file. */ APR_DECLARE(apr_status_t) apr_file_lock(apr_file_t *thefile, int type); /** * Remove any outstanding locks on the file. * @param thefile The file to unlock. */ APR_DECLARE(apr_status_t) apr_file_unlock(apr_file_t *thefile); /**accessor and general file_io functions. */ /** * return the file name of the current file. * @param new_path The path of the file. * @param thefile The currently open file. */ APR_DECLARE(apr_status_t) apr_file_name_get(const char **new_path, apr_file_t *thefile); /** * Return the data associated with the current file. * @param data The user data associated with the file. * @param key The key to use for retreiving data associated with this file. * @param file The currently open file. */ APR_DECLARE(apr_status_t) apr_file_data_get(void **data, const char *key, apr_file_t *file); /** * Set the data associated with the current file. * @param file The currently open file. * @param data The user data to associate with the file. * @param key The key to use for assocaiteing data with the file. * @param cleanup The cleanup routine to use when the file is destroyed. */ APR_DECLARE(apr_status_t) apr_file_data_set(apr_file_t *file, void *data, const char *key, apr_status_t (*cleanup)(void *)); /** * Write a string to a file using a printf format. * @param fptr The file to write to. * @param format The format string * @param ... The values to substitute in the format string * @return The number of bytes written */ APR_DECLARE_NONSTD(int) apr_file_printf(apr_file_t *fptr, const char *format, ...) __attribute__((format(printf,2,3))); /** * set the specified file's permission bits. * @param fname The file (name) to apply the permissions to. * @param perms The permission bits to apply to the file. * * @warning Some platforms may not be able to apply all of the * available permission bits; APR_INCOMPLETE will be returned if some * permissions are specified which could not be set. * * @warning Platforms which do not implement this feature will return * APR_ENOTIMPL. */ APR_DECLARE(apr_status_t) apr_file_perms_set(const char *fname, apr_fileperms_t perms); /** * Set attributes of the specified file. * @param fname The full path to the file (using / on all systems) * @param attributes Or'd combination of *
 *            APR_FILE_ATTR_READONLY   - make the file readonly
 *            APR_FILE_ATTR_EXECUTABLE - make the file executable
 *            APR_FILE_ATTR_HIDDEN     - make the file hidden
 * 
* @param attr_mask Mask of valid bits in attributes. * @param pool the pool to use. * @remark This function should be used in preference to explict manipulation * of the file permissions, because the operations to provide these * attributes are platform specific and may involve more than simply * setting permission bits. * @warning Platforms which do not implement this feature will return * APR_ENOTIMPL. */ APR_DECLARE(apr_status_t) apr_file_attrs_set(const char *fname, apr_fileattrs_t attributes, apr_fileattrs_t attr_mask, apr_pool_t *pool); /** * Set the mtime of the specified file. * @param fname The full path to the file (using / on all systems) * @param mtime The mtime to apply to the file. * @param pool The pool to use. * @warning Platforms which do not implement this feature will return * APR_ENOTIMPL. */ APR_DECLARE(apr_status_t) apr_file_mtime_set(const char *fname, apr_time_t mtime, apr_pool_t *pool); /** * Create a new directory on the file system. * @param path the path for the directory to be created. (use / on all systems) * @param perm Permissions for the new direcoty. * @param pool the pool to use. */ APR_DECLARE(apr_status_t) apr_dir_make(const char *path, apr_fileperms_t perm, apr_pool_t *pool); /** Creates a new directory on the file system, but behaves like * 'mkdir -p'. Creates intermediate directories as required. No error * will be reported if PATH already exists. * @param path the path for the directory to be created. (use / on all systems) * @param perm Permissions for the new direcoty. * @param pool the pool to use. */ APR_DECLARE(apr_status_t) apr_dir_make_recursive(const char *path, apr_fileperms_t perm, apr_pool_t *pool); /** * Remove directory from the file system. * @param path the path for the directory to be removed. (use / on all systems) * @param pool the pool to use. * @remark Removing a directory which is in-use (e.g., the current working * directory, or during apr_dir_read, or with an open file) is not portable. */ APR_DECLARE(apr_status_t) apr_dir_remove(const char *path, apr_pool_t *pool); /** * get the specified file's stats. * @param finfo Where to store the information about the file. * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values * @param thefile The file to get information about. */ APR_DECLARE(apr_status_t) apr_file_info_get(apr_finfo_t *finfo, apr_int32_t wanted, apr_file_t *thefile); /** * Truncate the file's length to the specified offset * @param fp The file to truncate * @param offset The offset to truncate to. * @remark The read/write file offset is repositioned to offset. */ APR_DECLARE(apr_status_t) apr_file_trunc(apr_file_t *fp, apr_off_t offset); /** * Retrieve the flags that were passed into apr_file_open() * when the file was opened. * @return apr_int32_t the flags */ APR_DECLARE(apr_int32_t) apr_file_flags_get(apr_file_t *f); /** * Get the pool used by the file. */ APR_POOL_DECLARE_ACCESSOR(file); /** * Set a file to be inherited by child processes. * */ APR_DECLARE_INHERIT_SET(file); /** * Unset a file from being inherited by child processes. */ APR_DECLARE_INHERIT_UNSET(file); /** * Open a temporary file * @param fp The apr file to use as a temporary file. * @param templ The template to use when creating a temp file. * @param flags The flags to open the file with. If this is zero, * the file is opened with * APR_CREATE | APR_READ | APR_WRITE | APR_EXCL | APR_DELONCLOSE * @param p The pool to allocate the file out of. * @remark * This function generates a unique temporary file name from template. * The last six characters of template must be XXXXXX and these are replaced * with a string that makes the filename unique. Since it will be modified, * template must not be a string constant, but should be declared as a character * array. * */ APR_DECLARE(apr_status_t) apr_file_mktemp(apr_file_t **fp, char *templ, apr_int32_t flags, apr_pool_t *p); /** * Find an existing directory suitable as a temporary storage location. * @param temp_dir The temp directory. * @param p The pool to use for any necessary allocations. * @remark * This function uses an algorithm to search for a directory that an * an application can use for temporary storage. Once such a * directory is found, that location is cached by the library. Thus, * callers only pay the cost of this algorithm once if that one time * is successful. * */ APR_DECLARE(apr_status_t) apr_temp_dir_get(const char **temp_dir, apr_pool_t *p); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_FILE_IO_H */ include/apr-1/apr_fnmatch.h000444 000000 000000 00000010124 11035140625 016023 0ustar00rootroot000000 000000 /* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. * * 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. * * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93 */ /* This file has been modified by the Apache Software Foundation. */ #ifndef _APR_FNMATCH_H_ #define _APR_FNMATCH_H_ /** * @file apr_fnmatch.h * @brief APR FNMatch Functions */ #include "apr_errno.h" #include "apr_tables.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup apr_fnmatch Filename Matching Functions * @ingroup APR * @{ */ #define APR_FNM_NOMATCH 1 /**< Match failed. */ #define APR_FNM_NOESCAPE 0x01 /**< Disable backslash escaping. */ #define APR_FNM_PATHNAME 0x02 /**< Slash must be matched by slash. */ #define APR_FNM_PERIOD 0x04 /**< Period must be matched by period. */ #define APR_FNM_CASE_BLIND 0x08 /**< Compare characters case-insensitively. * @remark This flag is an Apache addition */ /** * Try to match the string to the given pattern, return APR_SUCCESS if * match, else return APR_FNM_NOMATCH. * @param pattern The pattern to match to * @param strings The string we are trying to match * @param flags flags to use in the match. Bitwise OR of: *
 *              APR_FNM_NOESCAPE       Disable backslash escaping
 *              APR_FNM_PATHNAME       Slash must be matched by slash
 *              APR_FNM_PERIOD         Period must be matched by period
 *              APR_FNM_CASE_BLIND     Compare characters case-insensitively.
 * 
*/ APR_DECLARE(apr_status_t) apr_fnmatch(const char *pattern, const char *strings, int flags); /** * Determine if the given pattern is a regular expression. * @param pattern The pattern to search for glob characters. * @return non-zero if pattern has any glob characters in it */ APR_DECLARE(int) apr_fnmatch_test(const char *pattern); /** * Find all files that match a specified pattern. * @param pattern The pattern to use for finding files. * @param result Array to use when storing the results * @param p The pool to use. * @return non-zero if pattern has any glob characters in it */ APR_DECLARE(apr_status_t) apr_match_glob(const char *pattern, apr_array_header_t **result, apr_pool_t *p); /** @} */ #ifdef __cplusplus } #endif #endif /* !_APR_FNMATCH_H_ */ include/apr-1/apr_general.h000444 000000 000000 00000015530 11035140625 016026 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_GENERAL_H #define APR_GENERAL_H /** * @file apr_general.h * This is collection of oddballs that didn't fit anywhere else, * and might move to more appropriate headers with the release * of APR 1.0. * @brief APR Miscellaneous library routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #if APR_HAVE_SIGNAL_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_general Miscellaneous library routines * @ingroup APR * This is collection of oddballs that didn't fit anywhere else, * and might move to more appropriate headers with the release * of APR 1.0. * @{ */ /** FALSE */ #ifndef FALSE #define FALSE 0 #endif /** TRUE */ #ifndef TRUE #define TRUE (!FALSE) #endif /** a space */ #define APR_ASCII_BLANK '\040' /** a carrige return */ #define APR_ASCII_CR '\015' /** a line feed */ #define APR_ASCII_LF '\012' /** a tab */ #define APR_ASCII_TAB '\011' /** signal numbers typedef */ typedef int apr_signum_t; /** * Finding offsets of elements within structures. * Taken from the X code... they've sweated portability of this stuff * so we don't have to. Sigh... * @param p_type pointer type name * @param field data field within the structure pointed to * @return offset */ #if defined(CRAY) || (defined(__arm) && !defined(LINUX)) #ifdef __STDC__ #define APR_OFFSET(p_type,field) _Offsetof(p_type,field) #else #ifdef CRAY2 #define APR_OFFSET(p_type,field) \ (sizeof(int)*((unsigned int)&(((p_type)NULL)->field))) #else /* !CRAY2 */ #define APR_OFFSET(p_type,field) ((unsigned int)&(((p_type)NULL)->field)) #endif /* !CRAY2 */ #endif /* __STDC__ */ #else /* ! (CRAY || __arm) */ #define APR_OFFSET(p_type,field) \ ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) #endif /* !CRAY */ /** * Finding offsets of elements within structures. * @param s_type structure type name * @param field data field within the structure * @return offset */ #if defined(offsetof) && !defined(__cplusplus) #define APR_OFFSETOF(s_type,field) offsetof(s_type,field) #else #define APR_OFFSETOF(s_type,field) APR_OFFSET(s_type*,field) #endif #ifndef DOXYGEN /* A couple of prototypes for functions in case some platform doesn't * have it */ #if (!APR_HAVE_STRCASECMP) && (APR_HAVE_STRICMP) #define strcasecmp(s1, s2) stricmp(s1, s2) #elif (!APR_HAVE_STRCASECMP) int strcasecmp(const char *a, const char *b); #endif #if (!APR_HAVE_STRNCASECMP) && (APR_HAVE_STRNICMP) #define strncasecmp(s1, s2, n) strnicmp(s1, s2, n) #elif (!APR_HAVE_STRNCASECMP) int strncasecmp(const char *a, const char *b, size_t n); #endif #endif /** * Alignment macros */ /* APR_ALIGN() is only to be used to align on a power of 2 boundary */ #define APR_ALIGN(size, boundary) \ (((size) + ((boundary) - 1)) & ~((boundary) - 1)) /** Default alignment */ #define APR_ALIGN_DEFAULT(size) APR_ALIGN(size, 8) /** * String and memory functions */ /* APR_STRINGIFY is defined here, and also in apr_release.h, so wrap it */ #ifndef APR_STRINGIFY /** Properly quote a value as a string in the C preprocessor */ #define APR_STRINGIFY(n) APR_STRINGIFY_HELPER(n) /** Helper macro for APR_STRINGIFY */ #define APR_STRINGIFY_HELPER(n) #n #endif #if (!APR_HAVE_MEMMOVE) #define memmove(a,b,c) bcopy(b,a,c) #endif #if (!APR_HAVE_MEMCHR) void *memchr(const void *s, int c, size_t n); #endif /** @} */ /** * @defgroup apr_library Library initialization and termination * @{ */ /** * Setup any APR internal data structures. This MUST be the first function * called for any APR library. * @remark See apr_app_initialize if this is an application, rather than * a library consumer of apr. */ APR_DECLARE(apr_status_t) apr_initialize(void); /** * Set up an application with normalized argc, argv (and optionally env) in * order to deal with platform-specific oddities, such as Win32 services, * code pages and signals. This must be the first function called for any * APR program. * @param argc Pointer to the argc that may be corrected * @param argv Pointer to the argv that may be corrected * @param env Pointer to the env that may be corrected, may be NULL * @remark See apr_initialize if this is a library consumer of apr. * Otherwise, this call is identical to apr_initialize, and must be closed * with a call to apr_terminate at the end of program execution. */ APR_DECLARE(apr_status_t) apr_app_initialize(int *argc, char const * const * *argv, char const * const * *env); /** * Tear down any APR internal data structures which aren't torn down * automatically. * @remark An APR program must call this function at termination once it * has stopped using APR services. The APR developers suggest using * atexit to ensure this is called. When using APR from a language * other than C that has problems with the calling convention, use * apr_terminate2() instead. */ APR_DECLARE_NONSTD(void) apr_terminate(void); /** * Tear down any APR internal data structures which aren't torn down * automatically, same as apr_terminate * @remark An APR program must call either the apr_terminate or apr_terminate2 * function once it it has finished using APR services. The APR * developers suggest using atexit(apr_terminate) to ensure this is done. * apr_terminate2 exists to allow non-c language apps to tear down apr, * while apr_terminate is recommended from c language applications. */ APR_DECLARE(void) apr_terminate2(void); /** @} */ /** * @defgroup apr_random Random Functions * @{ */ #if APR_HAS_RANDOM || defined(DOXYGEN) /* TODO: I'm not sure this is the best place to put this prototype...*/ /** * Generate random bytes. * @param buf Buffer to fill with random bytes * @param length Length of buffer in bytes */ APR_DECLARE(apr_status_t) apr_generate_random_bytes(unsigned char * buf, apr_size_t length); #endif /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_GENERAL_H */ include/apr-1/apr_getopt.h000444 000000 000000 00000013417 11035140625 015715 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_GETOPT_H #define APR_GETOPT_H /** * @file apr_getopt.h * @brief APR Command Arguments (getopt) */ #include "apr_pools.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_getopt Command Argument Parsing * @ingroup APR * @{ */ /** * defintion of a error function */ typedef void (apr_getopt_err_fn_t)(void *arg, const char *err, ...); /** @see apr_getopt_t */ typedef struct apr_getopt_t apr_getopt_t; /** * Structure to store command line argument information. */ struct apr_getopt_t { /** context for processing */ apr_pool_t *cont; /** function to print error message (NULL == no messages) */ apr_getopt_err_fn_t *errfn; /** user defined first arg to pass to error message */ void *errarg; /** index into parent argv vector */ int ind; /** character checked for validity */ int opt; /** reset getopt */ int reset; /** count of arguments */ int argc; /** array of pointers to arguments */ const char **argv; /** argument associated with option */ char const* place; /** set to nonzero to support interleaving options with regular args */ int interleave; /** start of non-option arguments skipped for interleaving */ int skip_start; /** end of non-option arguments skipped for interleaving */ int skip_end; }; /** @see apr_getopt_option_t */ typedef struct apr_getopt_option_t apr_getopt_option_t; /** * Structure used to describe options that getopt should search for. */ struct apr_getopt_option_t { /** long option name, or NULL if option has no long name */ const char *name; /** option letter, or a value greater than 255 if option has no letter */ int optch; /** nonzero if option takes an argument */ int has_arg; /** a description of the option */ const char *description; }; /** * Initialize the arguments for parsing by apr_getopt(). * @param os The options structure created for apr_getopt() * @param cont The pool to operate on * @param argc The number of arguments to parse * @param argv The array of arguments to parse * @remark Arguments 2 and 3 are most commonly argc and argv from main(argc, argv) * The errfn is initialized to fprintf(stderr... but may be overridden. */ APR_DECLARE(apr_status_t) apr_getopt_init(apr_getopt_t **os, apr_pool_t *cont, int argc, const char * const *argv); /** * Parse the options initialized by apr_getopt_init(). * @param os The apr_opt_t structure returned by apr_getopt_init() * @param opts A string of characters that are acceptable options to the * program. Characters followed by ":" are required to have an * option associated * @param option_ch The next option character parsed * @param option_arg The argument following the option character: * @return There are four potential status values on exit. They are: *
 *             APR_EOF      --  No more options to parse
 *             APR_BADCH    --  Found a bad option character
 *             APR_BADARG   --  No argument followed the option flag
 *             APR_SUCCESS  --  The next option was found.
 * 
*/ APR_DECLARE(apr_status_t) apr_getopt(apr_getopt_t *os, const char *opts, char *option_ch, const char **option_arg); /** * Parse the options initialized by apr_getopt_init(), accepting long * options beginning with "--" in addition to single-character * options beginning with "-". * @param os The apr_getopt_t structure created by apr_getopt_init() * @param opts A pointer to a list of apr_getopt_option_t structures, which * can be initialized with { "name", optch, has_args }. has_args * is nonzero if the option requires an argument. A structure * with an optch value of 0 terminates the list. * @param option_ch Receives the value of "optch" from the apr_getopt_option_t * structure corresponding to the next option matched. * @param option_arg Receives the argument following the option, if any. * @return There are four potential status values on exit. They are: *
 *             APR_EOF      --  No more options to parse
 *             APR_BADCH    --  Found a bad option character
 *             APR_BADARG   --  No argument followed the option flag
 *             APR_SUCCESS  --  The next option was found.
 * 
* When APR_SUCCESS is returned, os->ind gives the index of the first * non-option argument. On error, a message will be printed to stdout unless * os->err is set to 0. If os->interleave is set to nonzero, options can come * after arguments, and os->argv will be permuted to leave non-option arguments * at the end (the original argv is unaffected). */ APR_DECLARE(apr_status_t) apr_getopt_long(apr_getopt_t *os, const apr_getopt_option_t *opts, int *option_ch, const char **option_arg); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_GETOPT_H */ include/apr-1/apr_global_mutex.h000444 000000 000000 00000013060 11035140625 017067 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_GLOBAL_MUTEX_H #define APR_GLOBAL_MUTEX_H /** * @file apr_global_mutex.h * @brief APR Global Locking Routines */ #include "apr.h" #include "apr_proc_mutex.h" /* only for apr_lockmech_e */ #include "apr_pools.h" #include "apr_errno.h" #if APR_PROC_MUTEX_IS_GLOBAL #include "apr_proc_mutex.h" #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup APR_GlobalMutex Global Locking Routines * @ingroup APR * @{ */ #if !APR_PROC_MUTEX_IS_GLOBAL || defined(DOXYGEN) /** Opaque global mutex structure. */ typedef struct apr_global_mutex_t apr_global_mutex_t; /* Function definitions */ /** * Create and initialize a mutex that can be used to synchronize both * processes and threads. Note: There is considerable overhead in using * this API if only cross-process or cross-thread mutual exclusion is * required. See apr_proc_mutex.h and apr_thread_mutex.h for more * specialized lock routines. * @param mutex the memory address where the newly created mutex will be * stored. * @param fname A file name to use if the lock mechanism requires one. This * argument should always be provided. The lock code itself will * determine if it should be used. * @param mech The mechanism to use for the interprocess lock, if any; one of *
 *            APR_LOCK_FCNTL
 *            APR_LOCK_FLOCK
 *            APR_LOCK_SYSVSEM
 *            APR_LOCK_POSIXSEM
 *            APR_LOCK_PROC_PTHREAD
 *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
 * 
* @param pool the pool from which to allocate the mutex. * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports * APR_LOCK_foo. Only APR_LOCK_DEFAULT is portable. */ APR_DECLARE(apr_status_t) apr_global_mutex_create(apr_global_mutex_t **mutex, const char *fname, apr_lockmech_e mech, apr_pool_t *pool); /** * Re-open a mutex in a child process. * @param mutex The newly re-opened mutex structure. * @param fname A file name to use if the mutex mechanism requires one. This * argument should always be provided. The mutex code itself will * determine if it should be used. This filename should be the * same one that was passed to apr_global_mutex_create(). * @param pool The pool to operate on. * @remark This function must be called to maintain portability, even * if the underlying lock mechanism does not require it. */ APR_DECLARE(apr_status_t) apr_global_mutex_child_init( apr_global_mutex_t **mutex, const char *fname, apr_pool_t *pool); /** * Acquire the lock for the given mutex. If the mutex is already locked, * the current thread will be put to sleep until the lock becomes available. * @param mutex the mutex on which to acquire the lock. */ APR_DECLARE(apr_status_t) apr_global_mutex_lock(apr_global_mutex_t *mutex); /** * Attempt to acquire the lock for the given mutex. If the mutex has already * been acquired, the call returns immediately with APR_EBUSY. Note: it * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine * if the return value was APR_EBUSY, for portability reasons. * @param mutex the mutex on which to attempt the lock acquiring. */ APR_DECLARE(apr_status_t) apr_global_mutex_trylock(apr_global_mutex_t *mutex); /** * Release the lock for the given mutex. * @param mutex the mutex from which to release the lock. */ APR_DECLARE(apr_status_t) apr_global_mutex_unlock(apr_global_mutex_t *mutex); /** * Destroy the mutex and free the memory associated with the lock. * @param mutex the mutex to destroy. */ APR_DECLARE(apr_status_t) apr_global_mutex_destroy(apr_global_mutex_t *mutex); /** * Get the pool used by this global_mutex. * @return apr_pool_t the pool */ APR_POOL_DECLARE_ACCESSOR(global_mutex); #else /* APR_PROC_MUTEX_IS_GLOBAL */ /* Some platforms [e.g. Win32] have cross process locks that are truly * global locks, since there isn't the concept of cross-process locks. * Define these platforms in terms of an apr_proc_mutex_t. */ #define apr_global_mutex_t apr_proc_mutex_t #define apr_global_mutex_create apr_proc_mutex_create #define apr_global_mutex_child_init apr_proc_mutex_child_init #define apr_global_mutex_lock apr_proc_mutex_lock #define apr_global_mutex_trylock apr_proc_mutex_trylock #define apr_global_mutex_unlock apr_proc_mutex_unlock #define apr_global_mutex_destroy apr_proc_mutex_destroy #define apr_global_mutex_pool_get apr_proc_mutex_pool_get #endif /** @} */ #ifdef __cplusplus } #endif #endif /* ndef APR_GLOBAL_MUTEX_H */ include/apr-1/apr_hash.h000444 000000 000000 00000017627 11035140625 015345 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_HASH_H #define APR_HASH_H /** * @file apr_hash.h * @brief APR Hash Tables */ #include "apr_pools.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup apr_hash Hash Tables * @ingroup APR * @{ */ /** * When passing a key to apr_hash_set or apr_hash_get, this value can be * passed to indicate a string-valued key, and have apr_hash compute the * length automatically. * * @remark apr_hash will use strlen(key) for the length. The NUL terminator * is not included in the hash value (why throw a constant in?). * Since the hash table merely references the provided key (rather * than copying it), apr_hash_this() will return the NUL-term'd key. */ #define APR_HASH_KEY_STRING (-1) /** * Abstract type for hash tables. */ typedef struct apr_hash_t apr_hash_t; /** * Abstract type for scanning hash tables. */ typedef struct apr_hash_index_t apr_hash_index_t; /** * Callback functions for calculating hash values. * @param key The key. * @param klen The length of the key, or APR_HASH_KEY_STRING to use the string * length. If APR_HASH_KEY_STRING then returns the actual key length. */ typedef unsigned int (*apr_hashfunc_t)(const char *key, apr_ssize_t *klen); /** * The default hash function. */ APR_DECLARE_NONSTD(unsigned int) apr_hashfunc_default(const char *key, apr_ssize_t *klen); /** * Create a hash table. * @param pool The pool to allocate the hash table out of * @return The hash table just created */ APR_DECLARE(apr_hash_t *) apr_hash_make(apr_pool_t *pool); /** * Create a hash table with a custom hash function * @param pool The pool to allocate the hash table out of * @param hash_func A custom hash function. * @return The hash table just created */ APR_DECLARE(apr_hash_t *) apr_hash_make_custom(apr_pool_t *pool, apr_hashfunc_t hash_func); /** * Make a copy of a hash table * @param pool The pool from which to allocate the new hash table * @param h The hash table to clone * @return The hash table just created * @remark Makes a shallow copy */ APR_DECLARE(apr_hash_t *) apr_hash_copy(apr_pool_t *pool, const apr_hash_t *h); /** * Associate a value with a key in a hash table. * @param ht The hash table * @param key Pointer to the key * @param klen Length of the key. Can be APR_HASH_KEY_STRING to use the string length. * @param val Value to associate with the key * @remark If the value is NULL the hash entry is deleted. */ APR_DECLARE(void) apr_hash_set(apr_hash_t *ht, const void *key, apr_ssize_t klen, const void *val); /** * Look up the value associated with a key in a hash table. * @param ht The hash table * @param key Pointer to the key * @param klen Length of the key. Can be APR_HASH_KEY_STRING to use the string length. * @return Returns NULL if the key is not present. */ APR_DECLARE(void *) apr_hash_get(apr_hash_t *ht, const void *key, apr_ssize_t klen); /** * Start iterating over the entries in a hash table. * @param p The pool to allocate the apr_hash_index_t iterator. If this * pool is NULL, then an internal, non-thread-safe iterator is used. * @param ht The hash table * @remark There is no restriction on adding or deleting hash entries during * an iteration (although the results may be unpredictable unless all you do * is delete the current entry) and multiple iterations can be in * progress at the same time. * @example */ /** *
 * 
 * int sum_values(apr_pool_t *p, apr_hash_t *ht)
 * {
 *     apr_hash_index_t *hi;
 *     void *val;
 *     int sum = 0;
 *     for (hi = apr_hash_first(p, ht); hi; hi = apr_hash_next(hi)) {
 *         apr_hash_this(hi, NULL, NULL, &val);
 *         sum += *(int *)val;
 *     }
 *     return sum;
 * }
 * 
*/ APR_DECLARE(apr_hash_index_t *) apr_hash_first(apr_pool_t *p, apr_hash_t *ht); /** * Continue iterating over the entries in a hash table. * @param hi The iteration state * @return a pointer to the updated iteration state. NULL if there are no more * entries. */ APR_DECLARE(apr_hash_index_t *) apr_hash_next(apr_hash_index_t *hi); /** * Get the current entry's details from the iteration state. * @param hi The iteration state * @param key Return pointer for the pointer to the key. * @param klen Return pointer for the key length. * @param val Return pointer for the associated value. * @remark The return pointers should point to a variable that will be set to the * corresponding data, or they may be NULL if the data isn't interesting. */ APR_DECLARE(void) apr_hash_this(apr_hash_index_t *hi, const void **key, apr_ssize_t *klen, void **val); /** * Get the number of key/value pairs in the hash table. * @param ht The hash table * @return The number of key/value pairs in the hash table. */ APR_DECLARE(unsigned int) apr_hash_count(apr_hash_t *ht); /** * Merge two hash tables into one new hash table. The values of the overlay * hash override the values of the base if both have the same key. Both * hash tables must use the same hash function. * @param p The pool to use for the new hash table * @param overlay The table to add to the initial table * @param base The table that represents the initial values of the new table * @return A new hash table containing all of the data from the two passed in */ APR_DECLARE(apr_hash_t *) apr_hash_overlay(apr_pool_t *p, const apr_hash_t *overlay, const apr_hash_t *base); /** * Merge two hash tables into one new hash table. If the same key * is present in both tables, call the supplied merge function to * produce a merged value for the key in the new table. Both * hash tables must use the same hash function. * @param p The pool to use for the new hash table * @param h1 The first of the tables to merge * @param h2 The second of the tables to merge * @param merger A callback function to merge values, or NULL to * make values from h1 override values from h2 (same semantics as * apr_hash_overlay()) * @param data Client data to pass to the merger function * @return A new hash table containing all of the data from the two passed in */ APR_DECLARE(apr_hash_t *) apr_hash_merge(apr_pool_t *p, const apr_hash_t *h1, const apr_hash_t *h2, void * (*merger)(apr_pool_t *p, const void *key, apr_ssize_t klen, const void *h1_val, const void *h2_val, const void *data), const void *data); /** * Get a pointer to the pool which the hash table was created in */ APR_POOL_DECLARE_ACCESSOR(hash); /** @} */ #ifdef __cplusplus } #endif #endif /* !APR_HASH_H */ include/apr-1/apr_inherit.h000444 000000 000000 00000004131 11035140625 016046 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_INHERIT_H #define APR_INHERIT_H /** * @file apr_inherit.h * @brief APR File Handle Inheritance Helpers * @remark This internal header includes internal declaration helpers * for other headers to declare apr_foo_inherit_[un]set functions. */ /** * Prototype for type-specific declarations of apr_foo_inherit_set * functions. * @remark Doxygen unwraps this macro (via doxygen.conf) to provide * actual help for each specific occurance of apr_foo_inherit_set. * @remark the linkage is specified for APR. It would be possible to expand * the macros to support other linkages. */ #define APR_DECLARE_INHERIT_SET(type) \ APR_DECLARE(apr_status_t) apr_##type##_inherit_set( \ apr_##type##_t *the##type) /** * Prototype for type-specific declarations of apr_foo_inherit_unset * functions. * @remark Doxygen unwraps this macro (via doxygen.conf) to provide * actual help for each specific occurance of apr_foo_inherit_unset. * @remark the linkage is specified for APR. It would be possible to expand * the macros to support other linkages. */ #define APR_DECLARE_INHERIT_UNSET(type) \ APR_DECLARE(apr_status_t) apr_##type##_inherit_unset( \ apr_##type##_t *the##type) #endif /* ! APR_INHERIT_H */ include/apr-1/apr_lib.h000444 000000 000000 00000017367 11035140625 015171 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_LIB_H #define APR_LIB_H /** * @file apr_lib.h * This is collection of oddballs that didn't fit anywhere else, * and might move to more appropriate headers with the release * of APR 1.0. * @brief APR general purpose library routines */ #include "apr.h" #include "apr_errno.h" #if APR_HAVE_CTYPE_H #include #endif #if APR_HAVE_STDARG_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_lib General Purpose Library Routines * @ingroup APR * This is collection of oddballs that didn't fit anywhere else, * and might move to more appropriate headers with the release * of APR 1.0. * @{ */ /** A constant representing a 'large' string. */ #define HUGE_STRING_LEN 8192 /* * Define the structures used by the APR general-purpose library. */ /** @see apr_vformatter_buff_t */ typedef struct apr_vformatter_buff_t apr_vformatter_buff_t; /** * Structure used by the variable-formatter routines. */ struct apr_vformatter_buff_t { /** The current position */ char *curpos; /** The end position of the format string */ char *endpos; }; /** * return the final element of the pathname * @param pathname The path to get the final element of * @return the final element of the path * @remark *
 * For example:
 *                 "/foo/bar/gum"    -> "gum"
 *                 "/foo/bar/gum/"   -> ""
 *                 "gum"             -> "gum"
 *                 "bs\\path\\stuff" -> "stuff"
 * 
*/ APR_DECLARE(const char *) apr_filepath_name_get(const char *pathname); /** * apr_killpg * Small utility macros to make things easier to read. Not usually a * goal, to be sure.. */ #ifdef WIN32 #define apr_killpg(x, y) #else /* WIN32 */ #ifdef NO_KILLPG #define apr_killpg(x, y) (kill (-(x), (y))) #else /* NO_KILLPG */ #define apr_killpg(x, y) (killpg ((x), (y))) #endif /* NO_KILLPG */ #endif /* WIN32 */ /** * apr_vformatter() is a generic printf-style formatting routine * with some extensions. * @param flush_func The function to call when the buffer is full * @param c The buffer to write to * @param fmt The format string * @param ap The arguments to use to fill out the format string. * * @remark *
 * The extensions are:
 *
 * %%pA	takes a struct in_addr *, and prints it as a.b.c.d
 * %%pI	takes an apr_sockaddr_t * and prints it as a.b.c.d:port or
 *      [ipv6-address]:port
 * %%pT takes an apr_os_thread_t * and prints it in decimal
 *      ('0' is printed if !APR_HAS_THREADS)
 * %%pt takes an apr_os_thread_t * and prints it in hexadecimal
 *      ('0' is printed if !APR_HAS_THREADS)
 * %%pp takes a void * and outputs it in hex
 *
 * The %%p hacks are to force gcc's printf warning code to skip
 * over a pointer argument without complaining.  This does
 * mean that the ANSI-style %%p (output a void * in hex format) won't
 * work as expected at all, but that seems to be a fair trade-off
 * for the increased robustness of having printf-warnings work.
 *
 * Additionally, apr_vformatter allows for arbitrary output methods
 * using the apr_vformatter_buff and flush_func.
 *
 * The apr_vformatter_buff has two elements curpos and endpos.
 * curpos is where apr_vformatter will write the next byte of output.
 * It proceeds writing output to curpos, and updating curpos, until
 * either the end of output is reached, or curpos == endpos (i.e. the
 * buffer is full).
 *
 * If the end of output is reached, apr_vformatter returns the
 * number of bytes written.
 *
 * When the buffer is full, the flush_func is called.  The flush_func
 * can return -1 to indicate that no further output should be attempted,
 * and apr_vformatter will return immediately with -1.  Otherwise
 * the flush_func should flush the buffer in whatever manner is
 * appropriate, re apr_pool_t nitialize curpos and endpos, and return 0.
 *
 * Note that flush_func is only invoked as a result of attempting to
 * write another byte at curpos when curpos >= endpos.  So for
 * example, it's possible when the output exactly matches the buffer
 * space available that curpos == endpos will be true when
 * apr_vformatter returns.
 *
 * apr_vformatter does not call out to any other code, it is entirely
 * self-contained.  This allows the callers to do things which are
 * otherwise "unsafe".  For example, apr_psprintf uses the "scratch"
 * space at the unallocated end of a block, and doesn't actually
 * complete the allocation until apr_vformatter returns.  apr_psprintf
 * would be completely broken if apr_vformatter were to call anything
 * that used this same pool.  Similarly http_bprintf() uses the "scratch"
 * space at the end of its output buffer, and doesn't actually note
 * that the space is in use until it either has to flush the buffer
 * or until apr_vformatter returns.
 * 
*/ APR_DECLARE(int) apr_vformatter(int (*flush_func)(apr_vformatter_buff_t *b), apr_vformatter_buff_t *c, const char *fmt, va_list ap); /** * Display a prompt and read in the password from stdin. * @param prompt The prompt to display * @param pwbuf Buffer to store the password * @param bufsize The length of the password buffer. * @remark If the password entered must be truncated to fit in * the provided buffer, APR_ENAMETOOLONG will be returned. * Note that the bufsize paramater is passed by reference for no * reason; its value will never be modified by the apr_password_get() * function. */ APR_DECLARE(apr_status_t) apr_password_get(const char *prompt, char *pwbuf, apr_size_t *bufsize); /** @} */ /** * @defgroup apr_ctype ctype functions * These macros allow correct support of 8-bit characters on systems which * support 8-bit characters. Pretty dumb how the cast is required, but * that's legacy libc for ya. These new macros do not support EOF like * the standard macros do. Tough. * @{ */ /** @see isalnum */ #define apr_isalnum(c) (isalnum(((unsigned char)(c)))) /** @see isalpha */ #define apr_isalpha(c) (isalpha(((unsigned char)(c)))) /** @see iscntrl */ #define apr_iscntrl(c) (iscntrl(((unsigned char)(c)))) /** @see isdigit */ #define apr_isdigit(c) (isdigit(((unsigned char)(c)))) /** @see isgraph */ #define apr_isgraph(c) (isgraph(((unsigned char)(c)))) /** @see islower*/ #define apr_islower(c) (islower(((unsigned char)(c)))) /** @see isascii */ #ifdef isascii #define apr_isascii(c) (isascii(((unsigned char)(c)))) #else #define apr_isascii(c) (((c) & ~0x7f)==0) #endif /** @see isprint */ #define apr_isprint(c) (isprint(((unsigned char)(c)))) /** @see ispunct */ #define apr_ispunct(c) (ispunct(((unsigned char)(c)))) /** @see isspace */ #define apr_isspace(c) (isspace(((unsigned char)(c)))) /** @see isupper */ #define apr_isupper(c) (isupper(((unsigned char)(c)))) /** @see isxdigit */ #define apr_isxdigit(c) (isxdigit(((unsigned char)(c)))) /** @see tolower */ #define apr_tolower(c) (tolower(((unsigned char)(c)))) /** @see toupper */ #define apr_toupper(c) (toupper(((unsigned char)(c)))) /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_LIB_H */ include/apr-1/apr_mmap.h000444 000000 000000 00000012012 11035140625 015333 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_MMAP_H #define APR_MMAP_H /** * @file apr_mmap.h * @brief APR MMAP routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #include "apr_ring.h" #include "apr_file_io.h" /* for apr_file_t */ #ifdef BEOS #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_mmap MMAP (Memory Map) Routines * @ingroup APR * @{ */ /** MMap opened for reading */ #define APR_MMAP_READ 1 /** MMap opened for writing */ #define APR_MMAP_WRITE 2 /** @see apr_mmap_t */ typedef struct apr_mmap_t apr_mmap_t; /** * @remark * As far as I can tell the only really sane way to store an MMAP is as a * void * and a length. BeOS requires this area_id, but that's just a little * something extra. I am exposing this type, because it doesn't make much * sense to keep it private, and opening it up makes some stuff easier in * Apache. */ /** The MMAP structure */ struct apr_mmap_t { /** The pool the mmap structure was allocated out of. */ apr_pool_t *cntxt; #ifdef BEOS /** An area ID. Only valid on BeOS */ area_id area; #endif #ifdef WIN32 /** The handle of the file mapping */ HANDLE mhandle; /** The start of the real memory page area (mapped view) */ void *mv; /** The physical start, size and offset */ apr_off_t pstart; apr_size_t psize; apr_off_t poffset; #endif /** The start of the memory mapped area */ void *mm; /** The amount of data in the mmap */ apr_size_t size; /** ring of apr_mmap_t's that reference the same * mmap'ed region; acts in place of a reference count */ APR_RING_ENTRY(apr_mmap_t) link; }; #if APR_HAS_MMAP || defined(DOXYGEN) /** @def APR_MMAP_THRESHOLD * Files have to be at least this big before they're mmap()d. This is to deal * with systems where the expense of doing an mmap() and an munmap() outweighs * the benefit for small files. It shouldn't be set lower than 1. */ #ifdef MMAP_THRESHOLD # define APR_MMAP_THRESHOLD MMAP_THRESHOLD #else # ifdef SUNOS4 # define APR_MMAP_THRESHOLD (8*1024) # else # define APR_MMAP_THRESHOLD 1 # endif /* SUNOS4 */ #endif /* MMAP_THRESHOLD */ /** @def APR_MMAP_LIMIT * Maximum size of MMap region */ #ifdef MMAP_LIMIT # define APR_MMAP_LIMIT MMAP_LIMIT #else # define APR_MMAP_LIMIT (4*1024*1024) #endif /* MMAP_LIMIT */ /** Can this file be MMaped */ #define APR_MMAP_CANDIDATE(filelength) \ ((filelength >= APR_MMAP_THRESHOLD) && (filelength < APR_MMAP_LIMIT)) /* Function definitions */ /** * Create a new mmap'ed file out of an existing APR file. * @param newmmap The newly created mmap'ed file. * @param file The file turn into an mmap. * @param offset The offset into the file to start the data pointer at. * @param size The size of the file * @param flag bit-wise or of: *
 *          APR_MMAP_READ       MMap opened for reading
 *          APR_MMAP_WRITE      MMap opened for writing
 * 
* @param cntxt The pool to use when creating the mmap. */ APR_DECLARE(apr_status_t) apr_mmap_create(apr_mmap_t **newmmap, apr_file_t *file, apr_off_t offset, apr_size_t size, apr_int32_t flag, apr_pool_t *cntxt); /** * Duplicate the specified MMAP. * @param new_mmap The structure to duplicate into. * @param old_mmap The mmap to duplicate. * @param p The pool to use for new_mmap. */ APR_DECLARE(apr_status_t) apr_mmap_dup(apr_mmap_t **new_mmap, apr_mmap_t *old_mmap, apr_pool_t *p); /** * Remove a mmap'ed. * @param mm The mmap'ed file. */ APR_DECLARE(apr_status_t) apr_mmap_delete(apr_mmap_t *mm); /** * Move the pointer into the mmap'ed file to the specified offset. * @param addr The pointer to the offset specified. * @param mm The mmap'ed file. * @param offset The offset to move to. */ APR_DECLARE(apr_status_t) apr_mmap_offset(void **addr, apr_mmap_t *mm, apr_off_t offset); #endif /* APR_HAS_MMAP */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_MMAP_H */ include/apr-1/apr_network_io.h000444 000000 000000 00000076142 11035140625 016577 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_NETWORK_IO_H #define APR_NETWORK_IO_H /** * @file apr_network_io.h * @brief APR Network library */ #include "apr.h" #include "apr_pools.h" #include "apr_file_io.h" #include "apr_errno.h" #include "apr_inherit.h" #if APR_HAVE_NETINET_IN_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_network_io Network Routines * @ingroup APR * @{ */ #ifndef APR_MAX_SECS_TO_LINGER /** Maximum seconds to linger */ #define APR_MAX_SECS_TO_LINGER 30 #endif #ifndef APRMAXHOSTLEN /** Maximum hostname length */ #define APRMAXHOSTLEN 256 #endif #ifndef APR_ANYADDR /** Default 'any' address */ #define APR_ANYADDR "0.0.0.0" #endif /** * @defgroup apr_sockopt Socket option definitions * @{ */ #define APR_SO_LINGER 1 /**< Linger */ #define APR_SO_KEEPALIVE 2 /**< Keepalive */ #define APR_SO_DEBUG 4 /**< Debug */ #define APR_SO_NONBLOCK 8 /**< Non-blocking IO */ #define APR_SO_REUSEADDR 16 /**< Reuse addresses */ #define APR_SO_SNDBUF 64 /**< Send buffer */ #define APR_SO_RCVBUF 128 /**< Receive buffer */ #define APR_SO_DISCONNECTED 256 /**< Disconnected */ #define APR_TCP_NODELAY 512 /**< For SCTP sockets, this is mapped * to STCP_NODELAY internally. */ #define APR_TCP_NOPUSH 1024 /**< No push */ #define APR_RESET_NODELAY 2048 /**< This flag is ONLY set internally * when we set APR_TCP_NOPUSH with * APR_TCP_NODELAY set to tell us that * APR_TCP_NODELAY should be turned on * again when NOPUSH is turned off */ #define APR_INCOMPLETE_READ 4096 /**< Set on non-blocking sockets * (timeout != 0) on which the * previous read() did not fill a buffer * completely. the next apr_socket_recv() * will first call select()/poll() rather than * going straight into read(). (Can also * be set by an application to force a * select()/poll() call before the next * read, in cases where the app expects * that an immediate read would fail.) */ #define APR_INCOMPLETE_WRITE 8192 /**< like APR_INCOMPLETE_READ, but for write * @see APR_INCOMPLETE_READ */ #define APR_IPV6_V6ONLY 16384 /**< Don't accept IPv4 connections on an * IPv6 listening socket. */ #define APR_TCP_DEFER_ACCEPT 32768 /**< Delay accepting of new connections * until data is available. * @see apr_socket_accept_filter */ /** @} */ /** Define what type of socket shutdown should occur. */ typedef enum { APR_SHUTDOWN_READ, /**< no longer allow read request */ APR_SHUTDOWN_WRITE, /**< no longer allow write requests */ APR_SHUTDOWN_READWRITE /**< no longer allow read or write requests */ } apr_shutdown_how_e; #define APR_IPV4_ADDR_OK 0x01 /**< @see apr_sockaddr_info_get() */ #define APR_IPV6_ADDR_OK 0x02 /**< @see apr_sockaddr_info_get() */ #if (!APR_HAVE_IN_ADDR) /** * We need to make sure we always have an in_addr type, so APR will just * define it ourselves, if the platform doesn't provide it. */ struct in_addr { apr_uint32_t s_addr; /**< storage to hold the IP# */ }; #endif /** @def APR_INADDR_NONE * Not all platforms have a real INADDR_NONE. This macro replaces * INADDR_NONE on all platforms. */ #ifdef INADDR_NONE #define APR_INADDR_NONE INADDR_NONE #else #define APR_INADDR_NONE ((unsigned int) 0xffffffff) #endif /** * @def APR_INET * Not all platforms have these defined, so we'll define them here * The default values come from FreeBSD 4.1.1 */ #define APR_INET AF_INET /** @def APR_UNSPEC * Let the system decide which address family to use */ #ifdef AF_UNSPEC #define APR_UNSPEC AF_UNSPEC #else #define APR_UNSPEC 0 #endif #if APR_HAVE_IPV6 /** @def APR_INET6 * IPv6 Address Family. Not all platforms may have this defined. */ #define APR_INET6 AF_INET6 #endif /** * @defgroup IP_Proto IP Protocol Definitions for use when creating sockets * @{ */ #define APR_PROTO_TCP 6 /**< TCP */ #define APR_PROTO_UDP 17 /**< UDP */ #define APR_PROTO_SCTP 132 /**< SCTP */ /** @} */ /** * Enum to tell us if we're interested in remote or local socket */ typedef enum { APR_LOCAL, APR_REMOTE } apr_interface_e; /** * The specific declaration of inet_addr's ... some platforms fall back * inet_network (this is not good, but necessary) */ #if APR_HAVE_INET_ADDR #define apr_inet_addr inet_addr #elif APR_HAVE_INET_NETWORK /* only DGUX, as far as I know */ /** * @warning * not generally safe... inet_network() and inet_addr() perform * different functions */ #define apr_inet_addr inet_network #endif /** A structure to represent sockets */ typedef struct apr_socket_t apr_socket_t; /** * A structure to encapsulate headers and trailers for apr_socket_sendfile */ typedef struct apr_hdtr_t apr_hdtr_t; /** A structure to represent in_addr */ typedef struct in_addr apr_in_addr_t; /** A structure to represent an IP subnet */ typedef struct apr_ipsubnet_t apr_ipsubnet_t; /** @remark use apr_uint16_t just in case some system has a short that isn't 16 bits... */ typedef apr_uint16_t apr_port_t; /** @remark It's defined here as I think it should all be platform safe... * @see apr_sockaddr_t */ typedef struct apr_sockaddr_t apr_sockaddr_t; /** * APRs socket address type, used to ensure protocol independence */ struct apr_sockaddr_t { /** The pool to use... */ apr_pool_t *pool; /** The hostname */ char *hostname; /** Either a string of the port number or the service name for the port */ char *servname; /** The numeric port */ apr_port_t port; /** The family */ apr_int32_t family; /** How big is the sockaddr we're using? */ apr_socklen_t salen; /** How big is the ip address structure we're using? */ int ipaddr_len; /** How big should the address buffer be? 16 for v4 or 46 for v6 * used in inet_ntop... */ int addr_str_len; /** This points to the IP address structure within the appropriate * sockaddr structure. */ void *ipaddr_ptr; /** If multiple addresses were found by apr_sockaddr_info_get(), this * points to a representation of the next address. */ apr_sockaddr_t *next; /** Union of either IPv4 or IPv6 sockaddr. */ union { /** IPv4 sockaddr structure */ struct sockaddr_in sin; #if APR_HAVE_IPV6 /** IPv6 sockaddr structure */ struct sockaddr_in6 sin6; #endif #if APR_HAVE_SA_STORAGE /** Placeholder to ensure that the size of this union is not * dependent on whether APR_HAVE_IPV6 is defined. */ struct sockaddr_storage sas; #endif } sa; }; #if APR_HAS_SENDFILE /** * Support reusing the socket on platforms which support it (from disconnect, * specifically Win32. * @remark Optional flag passed into apr_socket_sendfile() */ #define APR_SENDFILE_DISCONNECT_SOCKET 1 #endif /** A structure to encapsulate headers and trailers for apr_socket_sendfile */ struct apr_hdtr_t { /** An iovec to store the headers sent before the file. */ struct iovec* headers; /** number of headers in the iovec */ int numheaders; /** An iovec to store the trailers sent after the file. */ struct iovec* trailers; /** number of trailers in the iovec */ int numtrailers; }; /* function definitions */ /** * Create a socket. * @param new_sock The new socket that has been set up. * @param family The address family of the socket (e.g., APR_INET). * @param type The type of the socket (e.g., SOCK_STREAM). * @param protocol The protocol of the socket (e.g., APR_PROTO_TCP). * @param cont The pool to use */ APR_DECLARE(apr_status_t) apr_socket_create(apr_socket_t **new_sock, int family, int type, int protocol, apr_pool_t *cont); /** * Shutdown either reading, writing, or both sides of a socket. * @param thesocket The socket to close * @param how How to shutdown the socket. One of: *
 *            APR_SHUTDOWN_READ         no longer allow read requests
 *            APR_SHUTDOWN_WRITE        no longer allow write requests
 *            APR_SHUTDOWN_READWRITE    no longer allow read or write requests 
 * 
* @see apr_shutdown_how_e * @remark This does not actually close the socket descriptor, it just * controls which calls are still valid on the socket. */ APR_DECLARE(apr_status_t) apr_socket_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how); /** * Close a socket. * @param thesocket The socket to close */ APR_DECLARE(apr_status_t) apr_socket_close(apr_socket_t *thesocket); /** * Bind the socket to its associated port * @param sock The socket to bind * @param sa The socket address to bind to * @remark This may be where we will find out if there is any other process * using the selected port. */ APR_DECLARE(apr_status_t) apr_socket_bind(apr_socket_t *sock, apr_sockaddr_t *sa); /** * Listen to a bound socket for connections. * @param sock The socket to listen on * @param backlog The number of outstanding connections allowed in the sockets * listen queue. If this value is less than zero, the listen * queue size is set to zero. */ APR_DECLARE(apr_status_t) apr_socket_listen(apr_socket_t *sock, apr_int32_t backlog); /** * Accept a new connection request * @param new_sock A copy of the socket that is connected to the socket that * made the connection request. This is the socket which should * be used for all future communication. * @param sock The socket we are listening on. * @param connection_pool The pool for the new socket. */ APR_DECLARE(apr_status_t) apr_socket_accept(apr_socket_t **new_sock, apr_socket_t *sock, apr_pool_t *connection_pool); /** * Issue a connection request to a socket either on the same machine * or a different one. * @param sock The socket we wish to use for our side of the connection * @param sa The address of the machine we wish to connect to. */ APR_DECLARE(apr_status_t) apr_socket_connect(apr_socket_t *sock, apr_sockaddr_t *sa); /** * Create apr_sockaddr_t from hostname, address family, and port. * @param sa The new apr_sockaddr_t. * @param hostname The hostname or numeric address string to resolve/parse, or * NULL to build an address that corresponds to 0.0.0.0 or :: * @param family The address family to use, or APR_UNSPEC if the system should * decide. * @param port The port number. * @param flags Special processing flags: *
 *       APR_IPV4_ADDR_OK          first query for IPv4 addresses; only look
 *                                 for IPv6 addresses if the first query failed;
 *                                 only valid if family is APR_UNSPEC and hostname
 *                                 isn't NULL; mutually exclusive with
 *                                 APR_IPV6_ADDR_OK
 *       APR_IPV6_ADDR_OK          first query for IPv6 addresses; only look
 *                                 for IPv4 addresses if the first query failed;
 *                                 only valid if family is APR_UNSPEC and hostname
 *                                 isn't NULL and APR_HAVE_IPV6; mutually exclusive
 *                                 with APR_IPV4_ADDR_OK
 * 
* @param p The pool for the apr_sockaddr_t and associated storage. */ APR_DECLARE(apr_status_t) apr_sockaddr_info_get(apr_sockaddr_t **sa, const char *hostname, apr_int32_t family, apr_port_t port, apr_int32_t flags, apr_pool_t *p); /** * Look up the host name from an apr_sockaddr_t. * @param hostname The hostname. * @param sa The apr_sockaddr_t. * @param flags Special processing flags. */ APR_DECLARE(apr_status_t) apr_getnameinfo(char **hostname, apr_sockaddr_t *sa, apr_int32_t flags); /** * Parse hostname/IP address with scope id and port. * * Any of the following strings are accepted: * 8080 (just the port number) * www.apache.org (just the hostname) * www.apache.org:8080 (hostname and port number) * [fe80::1]:80 (IPv6 numeric address string only) * [fe80::1%eth0] (IPv6 numeric address string and scope id) * * Invalid strings: * (empty string) * [abc] (not valid IPv6 numeric address string) * abc:65536 (invalid port number) * * @param addr The new buffer containing just the hostname. On output, *addr * will be NULL if no hostname/IP address was specfied. * @param scope_id The new buffer containing just the scope id. On output, * *scope_id will be NULL if no scope id was specified. * @param port The port number. On output, *port will be 0 if no port was * specified. * ### FIXME: 0 is a legal port (per RFC 1700). this should * ### return something besides zero if the port is missing. * @param str The input string to be parsed. * @param p The pool from which *addr and *scope_id are allocated. * @remark If scope id shouldn't be allowed, check for scope_id != NULL in * addition to checking the return code. If addr/hostname should be * required, check for addr == NULL in addition to checking the * return code. */ APR_DECLARE(apr_status_t) apr_parse_addr_port(char **addr, char **scope_id, apr_port_t *port, const char *str, apr_pool_t *p); /** * Get name of the current machine * @param buf A buffer to store the hostname in. * @param len The maximum length of the hostname that can be stored in the * buffer provided. The suggested length is APRMAXHOSTLEN + 1. * @param cont The pool to use. * @remark If the buffer was not large enough, an error will be returned. */ APR_DECLARE(apr_status_t) apr_gethostname(char *buf, int len, apr_pool_t *cont); /** * Return the data associated with the current socket * @param data The user data associated with the socket. * @param key The key to associate with the user data. * @param sock The currently open socket. */ APR_DECLARE(apr_status_t) apr_socket_data_get(void **data, const char *key, apr_socket_t *sock); /** * Set the data associated with the current socket. * @param sock The currently open socket. * @param data The user data to associate with the socket. * @param key The key to associate with the data. * @param cleanup The cleanup to call when the socket is destroyed. */ APR_DECLARE(apr_status_t) apr_socket_data_set(apr_socket_t *sock, void *data, const char *key, apr_status_t (*cleanup)(void*)); /** * Send data over a network. * @param sock The socket to send the data over. * @param buf The buffer which contains the data to be sent. * @param len On entry, the number of bytes to send; on exit, the number * of bytes sent. * @remark *
 * This functions acts like a blocking write by default.  To change 
 * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
 * socket option.
 *
 * It is possible for both bytes to be sent and an error to be returned.
 *
 * APR_EINTR is never returned.
 * 
*/ APR_DECLARE(apr_status_t) apr_socket_send(apr_socket_t *sock, const char *buf, apr_size_t *len); /** * Send multiple packets of data over a network. * @param sock The socket to send the data over. * @param vec The array of iovec structs containing the data to send * @param nvec The number of iovec structs in the array * @param len Receives the number of bytes actually written * @remark *
 * This functions acts like a blocking write by default.  To change 
 * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
 * socket option.
 * The number of bytes actually sent is stored in argument 3.
 *
 * It is possible for both bytes to be sent and an error to be returned.
 *
 * APR_EINTR is never returned.
 * 
*/ APR_DECLARE(apr_status_t) apr_socket_sendv(apr_socket_t *sock, const struct iovec *vec, apr_int32_t nvec, apr_size_t *len); /** * @param sock The socket to send from * @param where The apr_sockaddr_t describing where to send the data * @param flags The flags to use * @param buf The data to send * @param len The length of the data to send */ APR_DECLARE(apr_status_t) apr_socket_sendto(apr_socket_t *sock, apr_sockaddr_t *where, apr_int32_t flags, const char *buf, apr_size_t *len); /** * Read data from a socket. On success, the address of the peer from * which the data was sent is copied into the @param from parameter, * and the @param len parameter is updated to give the number of bytes * written to @param buf. * @param from Updated with the address from which the data was received * @param sock The socket to use * @param flags The flags to use * @param buf The buffer to use * @param len The length of the available buffer */ APR_DECLARE(apr_status_t) apr_socket_recvfrom(apr_sockaddr_t *from, apr_socket_t *sock, apr_int32_t flags, char *buf, apr_size_t *len); #if APR_HAS_SENDFILE || defined(DOXYGEN) /** * Send a file from an open file descriptor to a socket, along with * optional headers and trailers * @param sock The socket to which we're writing * @param file The open file from which to read * @param hdtr A structure containing the headers and trailers to send * @param offset Offset into the file where we should begin writing * @param len (input) - Number of bytes to send from the file * (output) - Number of bytes actually sent, * including headers, file, and trailers * @param flags APR flags that are mapped to OS specific flags * @remark This functions acts like a blocking write by default. To change * this behavior, use apr_socket_timeout_set() or the * APR_SO_NONBLOCK socket option. * The number of bytes actually sent is stored in the len parameter. * The offset parameter is passed by reference for no reason; its * value will never be modified by the apr_socket_sendfile() function. */ APR_DECLARE(apr_status_t) apr_socket_sendfile(apr_socket_t *sock, apr_file_t *file, apr_hdtr_t *hdtr, apr_off_t *offset, apr_size_t *len, apr_int32_t flags); #endif /* APR_HAS_SENDFILE */ /** * Read data from a network. * @param sock The socket to read the data from. * @param buf The buffer to store the data in. * @param len On entry, the number of bytes to receive; on exit, the number * of bytes received. * @remark *
 * This functions acts like a blocking read by default.  To change 
 * this behavior, use apr_socket_timeout_set() or the APR_SO_NONBLOCK
 * socket option.
 * The number of bytes actually received is stored in argument 3.
 *
 * It is possible for both bytes to be received and an APR_EOF or
 * other error to be returned.
 *
 * APR_EINTR is never returned.
 * 
*/ APR_DECLARE(apr_status_t) apr_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len); /** * Setup socket options for the specified socket * @param sock The socket to set up. * @param opt The option we would like to configure. One of: *
 *            APR_SO_DEBUG      --  turn on debugging information 
 *            APR_SO_KEEPALIVE  --  keep connections active
 *            APR_SO_LINGER     --  lingers on close if data is present
 *            APR_SO_NONBLOCK   --  Turns blocking on/off for socket
 *                                  When this option is enabled, use
 *                                  the APR_STATUS_IS_EAGAIN() macro to
 *                                  see if a send or receive function
 *                                  could not transfer data without
 *                                  blocking.
 *            APR_SO_REUSEADDR  --  The rules used in validating addresses
 *                                  supplied to bind should allow reuse
 *                                  of local addresses.
 *            APR_SO_SNDBUF     --  Set the SendBufferSize
 *            APR_SO_RCVBUF     --  Set the ReceiveBufferSize
 * 
* @param on Value for the option. */ APR_DECLARE(apr_status_t) apr_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on); /** * Setup socket timeout for the specified socket * @param sock The socket to set up. * @param t Value for the timeout. *
 *   t > 0  -- read and write calls return APR_TIMEUP if specified time
 *             elapsess with no data read or written
 *   t == 0 -- read and write calls never block
 *   t < 0  -- read and write calls block
 * 
*/ APR_DECLARE(apr_status_t) apr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t); /** * Query socket options for the specified socket * @param sock The socket to query * @param opt The option we would like to query. One of: *
 *            APR_SO_DEBUG      --  turn on debugging information 
 *            APR_SO_KEEPALIVE  --  keep connections active
 *            APR_SO_LINGER     --  lingers on close if data is present
 *            APR_SO_NONBLOCK   --  Turns blocking on/off for socket
 *            APR_SO_REUSEADDR  --  The rules used in validating addresses
 *                                  supplied to bind should allow reuse
 *                                  of local addresses.
 *            APR_SO_SNDBUF     --  Set the SendBufferSize
 *            APR_SO_RCVBUF     --  Set the ReceiveBufferSize
 *            APR_SO_DISCONNECTED -- Query the disconnected state of the socket.
 *                                  (Currently only used on Windows)
 * 
* @param on Socket option returned on the call. */ APR_DECLARE(apr_status_t) apr_socket_opt_get(apr_socket_t *sock, apr_int32_t opt, apr_int32_t *on); /** * Query socket timeout for the specified socket * @param sock The socket to query * @param t Socket timeout returned from the query. */ APR_DECLARE(apr_status_t) apr_socket_timeout_get(apr_socket_t *sock, apr_interval_time_t *t); /** * Query the specified socket if at the OOB/Urgent data mark * @param sock The socket to query * @param atmark Is set to true if socket is at the OOB/urgent mark, * otherwise is set to false. */ APR_DECLARE(apr_status_t) apr_socket_atmark(apr_socket_t *sock, int *atmark); /** * Return an apr_sockaddr_t from an apr_socket_t * @param sa The returned apr_sockaddr_t. * @param which Which interface do we want the apr_sockaddr_t for? * @param sock The socket to use */ APR_DECLARE(apr_status_t) apr_socket_addr_get(apr_sockaddr_t **sa, apr_interface_e which, apr_socket_t *sock); /** * Return the IP address (in numeric address string format) in * an APR socket address. APR will allocate storage for the IP address * string from the pool of the apr_sockaddr_t. * @param addr The IP address. * @param sockaddr The socket address to reference. */ APR_DECLARE(apr_status_t) apr_sockaddr_ip_get(char **addr, apr_sockaddr_t *sockaddr); /** * See if the IP addresses in two APR socket addresses are * equivalent. Appropriate logic is present for comparing * IPv4-mapped IPv6 addresses with IPv4 addresses. * * @param addr1 One of the APR socket addresses. * @param addr2 The other APR socket address. * @remark The return value will be non-zero if the addresses * are equivalent. */ APR_DECLARE(int) apr_sockaddr_equal(const apr_sockaddr_t *addr1, const apr_sockaddr_t *addr2); /** * Return the type of the socket. * @param sock The socket to query. * @param type The returned type (e.g., SOCK_STREAM). */ APR_DECLARE(apr_status_t) apr_socket_type_get(apr_socket_t *sock, int *type); /** * Given an apr_sockaddr_t and a service name, set the port for the service * @param sockaddr The apr_sockaddr_t that will have its port set * @param servname The name of the service you wish to use */ APR_DECLARE(apr_status_t) apr_getservbyname(apr_sockaddr_t *sockaddr, const char *servname); /** * Build an ip-subnet representation from an IP address and optional netmask or * number-of-bits. * @param ipsub The new ip-subnet representation * @param ipstr The input IP address string * @param mask_or_numbits The input netmask or number-of-bits string, or NULL * @param p The pool to allocate from */ APR_DECLARE(apr_status_t) apr_ipsubnet_create(apr_ipsubnet_t **ipsub, const char *ipstr, const char *mask_or_numbits, apr_pool_t *p); /** * Test the IP address in an apr_sockaddr_t against a pre-built ip-subnet * representation. * @param ipsub The ip-subnet representation * @param sa The socket address to test * @return non-zero if the socket address is within the subnet, 0 otherwise */ APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub, apr_sockaddr_t *sa); #if APR_HAS_SO_ACCEPTFILTER || defined(DOXYGEN) /** * Set an OS level accept filter. * @param sock The socket to put the accept filter on. * @param name The accept filter * @param args Any extra args to the accept filter. Passing NULL here removes * the accept filter. */ apr_status_t apr_socket_accept_filter(apr_socket_t *sock, char *name, char *args); #endif /** * Return the protocol of the socket. * @param sock The socket to query. * @param protocol The returned protocol (e.g., APR_PROTO_TCP). */ APR_DECLARE(apr_status_t) apr_socket_protocol_get(apr_socket_t *sock, int *protocol); /** * Get the pool used by the socket. */ APR_POOL_DECLARE_ACCESSOR(socket); /** * Set a socket to be inherited by child processes. */ APR_DECLARE_INHERIT_SET(socket); /** * Unset a socket from being inherited by child processes. */ APR_DECLARE_INHERIT_UNSET(socket); /** * @defgroup apr_mcast IP Multicast * @{ */ /** * Join a Multicast Group * @param sock The socket to join a multicast group * @param join The address of the multicast group to join * @param iface Address of the interface to use. If NULL is passed, the * default multicast interface will be used. (OS Dependent) * @param source Source Address to accept transmissions from (non-NULL * implies Source-Specific Multicast) */ APR_DECLARE(apr_status_t) apr_mcast_join(apr_socket_t *sock, apr_sockaddr_t *join, apr_sockaddr_t *iface, apr_sockaddr_t *source); /** * Leave a Multicast Group. All arguments must be the same as * apr_mcast_join. * @param sock The socket to leave a multicast group * @param addr The address of the multicast group to leave * @param iface Address of the interface to use. If NULL is passed, the * default multicast interface will be used. (OS Dependent) * @param source Source Address to accept transmissions from (non-NULL * implies Source-Specific Multicast) */ APR_DECLARE(apr_status_t) apr_mcast_leave(apr_socket_t *sock, apr_sockaddr_t *addr, apr_sockaddr_t *iface, apr_sockaddr_t *source); /** * Set the Multicast Time to Live (ttl) for a multicast transmission. * @param sock The socket to set the multicast ttl * @param ttl Time to live to Assign. 0-255, default=1 * @remark If the TTL is 0, packets will only be seen by sockets on * the local machine, and only when multicast loopback is enabled. */ APR_DECLARE(apr_status_t) apr_mcast_hops(apr_socket_t *sock, apr_byte_t ttl); /** * Toggle IP Multicast Loopback * @param sock The socket to set multicast loopback * @param opt 0=disable, 1=enable */ APR_DECLARE(apr_status_t) apr_mcast_loopback(apr_socket_t *sock, apr_byte_t opt); /** * Set the Interface to be used for outgoing Multicast Transmissions. * @param sock The socket to set the multicast interface on * @param iface Address of the interface to use for Multicast */ APR_DECLARE(apr_status_t) apr_mcast_interface(apr_socket_t *sock, apr_sockaddr_t *iface); /** @} */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_NETWORK_IO_H */ include/apr-1/apr_poll.h000444 000000 000000 00000017127 11035140625 015363 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_POLL_H #define APR_POLL_H /** * @file apr_poll.h * @brief APR Poll interface */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #include "apr_inherit.h" #include "apr_file_io.h" #include "apr_network_io.h" #if APR_HAVE_NETINET_IN_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_poll Poll Routines * @ingroup APR * @{ */ /** * Poll options */ #define APR_POLLIN 0x001 /**< Can read without blocking */ #define APR_POLLPRI 0x002 /**< Priority data available */ #define APR_POLLOUT 0x004 /**< Can write without blocking */ #define APR_POLLERR 0x010 /**< Pending error */ #define APR_POLLHUP 0x020 /**< Hangup occurred */ #define APR_POLLNVAL 0x040 /**< Descriptior invalid */ /** * Pollset Flags */ #define APR_POLLSET_THREADSAFE 0x001 /**< Adding or Removing a Descriptor is thread safe */ /** Used in apr_pollfd_t to determine what the apr_descriptor is */ typedef enum { APR_NO_DESC, /**< nothing here */ APR_POLL_SOCKET, /**< descriptor refers to a socket */ APR_POLL_FILE, /**< descriptor refers to a file */ APR_POLL_LASTDESC /**< descriptor is the last one in the list */ } apr_datatype_e ; /** Union of either an APR file or socket. */ typedef union { apr_file_t *f; /**< file */ apr_socket_t *s; /**< socket */ } apr_descriptor; /** @see apr_pollfd_t */ typedef struct apr_pollfd_t apr_pollfd_t; /** Poll descriptor set. */ struct apr_pollfd_t { apr_pool_t *p; /**< associated pool */ apr_datatype_e desc_type; /**< descriptor type */ apr_int16_t reqevents; /**< requested events */ apr_int16_t rtnevents; /**< returned events */ apr_descriptor desc; /**< @see apr_descriptor */ void *client_data; /**< allows app to associate context */ }; /* General-purpose poll API for arbitrarily large numbers of * file descriptors */ /** Opaque structure used for pollset API */ typedef struct apr_pollset_t apr_pollset_t; /** * Setup a pollset object * @param pollset The pointer in which to return the newly created object * @param size The maximum number of descriptors that this pollset can hold * @param p The pool from which to allocate the pollset * @param flags Optional flags to modify the operation of the pollset. * * @remark If flags equals APR_POLLSET_THREADSAFE, then a pollset is * created on which it is safe to make concurrent calls to * apr_pollset_add(), apr_pollset_remove() and apr_pollset_poll() from * separate threads. This feature is only supported on some * platforms; the apr_pollset_create() call will fail with * APR_ENOTIMPL on platforms where it is not supported. */ APR_DECLARE(apr_status_t) apr_pollset_create(apr_pollset_t **pollset, apr_uint32_t size, apr_pool_t *p, apr_uint32_t flags); /** * Destroy a pollset object * @param pollset The pollset to destroy */ APR_DECLARE(apr_status_t) apr_pollset_destroy(apr_pollset_t *pollset); /** * Add a socket or file descriptor to a pollset * @param pollset The pollset to which to add the descriptor * @param descriptor The descriptor to add * @remark If you set client_data in the descriptor, that value * will be returned in the client_data field whenever this * descriptor is signalled in apr_pollset_poll(). * @remark If the pollset has been created with APR_POLLSET_THREADSAFE * and thread T1 is blocked in a call to apr_pollset_poll() for * this same pollset that is being modified via apr_pollset_add() * in thread T2, the currently executing apr_pollset_poll() call in * T1 will either: (1) automatically include the newly added descriptor * in the set of descriptors it is watching or (2) return immediately * with APR_EINTR. Option (1) is recommended, but option (2) is * allowed for implementations where option (1) is impossible * or impractical. */ APR_DECLARE(apr_status_t) apr_pollset_add(apr_pollset_t *pollset, const apr_pollfd_t *descriptor); /** * Remove a descriptor from a pollset * @param pollset The pollset from which to remove the descriptor * @param descriptor The descriptor to remove * @remark If the pollset has been created with APR_POLLSET_THREADSAFE * and thread T1 is blocked in a call to apr_pollset_poll() for * this same pollset that is being modified via apr_pollset_remove() * in thread T2, the currently executing apr_pollset_poll() call in * T1 will either: (1) automatically exclude the newly added descriptor * in the set of descriptors it is watching or (2) return immediately * with APR_EINTR. Option (1) is recommended, but option (2) is * allowed for implementations where option (1) is impossible * or impractical. */ APR_DECLARE(apr_status_t) apr_pollset_remove(apr_pollset_t *pollset, const apr_pollfd_t *descriptor); /** * Block for activity on the descriptor(s) in a pollset * @param pollset The pollset to use * @param timeout Timeout in microseconds * @param num Number of signalled descriptors (output parameter) * @param descriptors Array of signalled descriptors (output parameter) */ APR_DECLARE(apr_status_t) apr_pollset_poll(apr_pollset_t *pollset, apr_interval_time_t timeout, apr_int32_t *num, const apr_pollfd_t **descriptors); /** * Poll the descriptors in the poll structure * @param aprset The poll structure we will be using. * @param numsock The number of descriptors we are polling * @param nsds The number of descriptors signalled. * @param timeout The amount of time in microseconds to wait. This is * a maximum, not a minimum. If a descriptor is signalled, we * will wake up before this time. A negative number means * wait until a descriptor is signalled. * @remark The number of descriptors signalled is returned in the third argument. * This is a blocking call, and it will not return until either a * descriptor has been signalled, or the timeout has expired. * @remark The rtnevents field in the apr_pollfd_t array will only be filled- * in if the return value is APR_SUCCESS. */ APR_DECLARE(apr_status_t) apr_poll(apr_pollfd_t *aprset, apr_int32_t numsock, apr_int32_t *nsds, apr_interval_time_t timeout); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_POLL_H */ include/apr-1/apr_pools.h000444 000000 000000 00000056624 11035140625 015556 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_POOLS_H #define APR_POOLS_H /** * @file apr_pools.h * @brief APR memory allocation * * Resource allocation routines... * * designed so that we don't have to keep track of EVERYTHING so that * it can be explicitly freed later (a fundamentally unsound strategy --- * particularly in the presence of die()). * * Instead, we maintain pools, and allocate items (both memory and I/O * handlers) from the pools --- currently there are two, one for per * transaction info, and one for config info. When a transaction is over, * we can delete everything in the per-transaction apr_pool_t without fear, * and without thinking too hard about it either. */ #include "apr.h" #include "apr_errno.h" #include "apr_general.h" /* for APR_STRINGIFY */ #define APR_WANT_MEMFUNC /**< for no good reason? */ #include "apr_want.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup apr_pools Memory Pool Functions * @ingroup APR * @{ */ /** The fundamental pool type */ typedef struct apr_pool_t apr_pool_t; /** * Declaration helper macro to construct apr_foo_pool_get()s. * * This standardized macro is used by opaque (APR) data types to return * the apr_pool_t that is associated with the data type. * * APR_POOL_DECLARE_ACCESSOR() is used in a header file to declare the * accessor function. A typical usage and result would be: *
 *    APR_POOL_DECLARE_ACCESSOR(file);
 * becomes:
 *    APR_DECLARE(apr_pool_t *) apr_file_pool_get(apr_file_t *ob);
 * 
* @remark Doxygen unwraps this macro (via doxygen.conf) to provide * actual help for each specific occurance of apr_foo_pool_get. * @remark the linkage is specified for APR. It would be possible to expand * the macros to support other linkages. */ #define APR_POOL_DECLARE_ACCESSOR(type) \ APR_DECLARE(apr_pool_t *) apr_##type##_pool_get \ (const apr_##type##_t *the##type) /** * Implementation helper macro to provide apr_foo_pool_get()s. * * In the implementation, the APR_POOL_IMPLEMENT_ACCESSOR() is used to * actually define the function. It assumes the field is named "pool". */ #define APR_POOL_IMPLEMENT_ACCESSOR(type) \ APR_DECLARE(apr_pool_t *) apr_##type##_pool_get \ (const apr_##type##_t *the##type) \ { return the##type->pool; } /** * Pool debug levels * *
 * | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
 * ---------------------------------
 * |   |   |   |   |   |   |   | x |  General debug code enabled (useful in
 *                                    combination with --with-efence).
 *
 * |   |   |   |   |   |   | x |   |  Verbose output on stderr (report
 *                                    CREATE, CLEAR, DESTROY).
 *
 * |   |   |   | x |   |   |   |   |  Verbose output on stderr (report
 *                                    PALLOC, PCALLOC).
 *
 * |   |   |   |   |   | x |   |   |  Lifetime checking. On each use of a
 *                                    pool, check its lifetime.  If the pool
 *                                    is out of scope, abort().
 *                                    In combination with the verbose flag
 *                                    above, it will output LIFE in such an
 *                                    event prior to aborting.
 *
 * |   |   |   |   | x |   |   |   |  Pool owner checking.  On each use of a
 *                                    pool, check if the current thread is the
 *                                    pools owner.  If not, abort().  In
 *                                    combination with the verbose flag above,
 *                                    it will output OWNER in such an event
 *                                    prior to aborting.  Use the debug
 *                                    function apr_pool_owner_set() to switch
 *                                    a pools ownership.
 *
 * When no debug level was specified, assume general debug mode.
 * If level 0 was specified, debugging is switched off
 * 
*/ #if defined(APR_POOL_DEBUG) /* If APR_POOL_DEBUG is blank, we get 1; if it is a number, we get -1. */ #if (APR_POOL_DEBUG - APR_POOL_DEBUG -1 == 1) #undef APR_POOL_DEBUG #define APR_POOL_DEBUG 1 #endif #else #define APR_POOL_DEBUG 0 #endif /** the place in the code where the particular function was called */ #define APR_POOL__FILE_LINE__ __FILE__ ":" APR_STRINGIFY(__LINE__) /** A function that is called when allocation fails. */ typedef int (*apr_abortfunc_t)(int retcode); /* * APR memory structure manipulators (pools, tables, and arrays). */ /* * Initialization */ /** * Setup all of the internal structures required to use pools * @remark Programs do NOT need to call this directly. APR will call this * automatically from apr_initialize. * @internal */ APR_DECLARE(apr_status_t) apr_pool_initialize(void); /** * Tear down all of the internal structures required to use pools * @remark Programs do NOT need to call this directly. APR will call this * automatically from apr_terminate. * @internal */ APR_DECLARE(void) apr_pool_terminate(void); /* * Pool creation/destruction */ #include "apr_allocator.h" /** * Create a new pool. * @param newpool The pool we have just created. * @param parent The parent pool. If this is NULL, the new pool is a root * pool. If it is non-NULL, the new pool will inherit all * of its parent pool's attributes, except the apr_pool_t will * be a sub-pool. * @param abort_fn A function to use if the pool cannot allocate more memory. * @param allocator The allocator to use with the new pool. If NULL the * allocator of the parent pool will be used. */ APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool, apr_pool_t *parent, apr_abortfunc_t abort_fn, apr_allocator_t *allocator); /** * Debug version of apr_pool_create_ex. * @param newpool @see apr_pool_create. * @param parent @see apr_pool_create. * @param abort_fn @see apr_pool_create. * @param allocator @see apr_pool_create. * @param file_line Where the function is called from. * This is usually APR_POOL__FILE_LINE__. * @remark Only available when APR_POOL_DEBUG is defined. * Call this directly if you have you apr_pool_create_ex * calls in a wrapper function and wish to override * the file_line argument to reflect the caller of * your wrapper function. If you do not have * apr_pool_create_ex in a wrapper, trust the macro * and don't call apr_pool_create_ex_debug directly. */ APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool, apr_pool_t *parent, apr_abortfunc_t abort_fn, apr_allocator_t *allocator, const char *file_line); #if APR_POOL_DEBUG #define apr_pool_create_ex(newpool, parent, abort_fn, allocator) \ apr_pool_create_ex_debug(newpool, parent, abort_fn, allocator, \ APR_POOL__FILE_LINE__) #endif /** * Create a new pool. * @param newpool The pool we have just created. * @param parent The parent pool. If this is NULL, the new pool is a root * pool. If it is non-NULL, the new pool will inherit all * of its parent pool's attributes, except the apr_pool_t will * be a sub-pool. */ #if defined(DOXYGEN) APR_DECLARE(apr_status_t) apr_pool_create(apr_pool_t **newpool, apr_pool_t *parent); #else #if APR_POOL_DEBUG #define apr_pool_create(newpool, parent) \ apr_pool_create_ex_debug(newpool, parent, NULL, NULL, \ APR_POOL__FILE_LINE__) #else #define apr_pool_create(newpool, parent) \ apr_pool_create_ex(newpool, parent, NULL, NULL) #endif #endif /** * Find the pools allocator * @param pool The pool to get the allocator from. */ APR_DECLARE(apr_allocator_t *) apr_pool_allocator_get(apr_pool_t *pool); /** * Clear all memory in the pool and run all the cleanups. This also destroys all * subpools. * @param p The pool to clear * @remark This does not actually free the memory, it just allows the pool * to re-use this memory for the next allocation. * @see apr_pool_destroy() */ APR_DECLARE(void) apr_pool_clear(apr_pool_t *p); /** * Debug version of apr_pool_clear. * @param p See: apr_pool_clear. * @param file_line Where the function is called from. * This is usually APR_POOL__FILE_LINE__. * @remark Only available when APR_POOL_DEBUG is defined. * Call this directly if you have you apr_pool_clear * calls in a wrapper function and wish to override * the file_line argument to reflect the caller of * your wrapper function. If you do not have * apr_pool_clear in a wrapper, trust the macro * and don't call apr_pool_destroy_clear directly. */ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *p, const char *file_line); #if APR_POOL_DEBUG #define apr_pool_clear(p) \ apr_pool_clear_debug(p, APR_POOL__FILE_LINE__) #endif /** * Destroy the pool. This takes similar action as apr_pool_clear() and then * frees all the memory. * @param p The pool to destroy * @remark This will actually free the memory */ APR_DECLARE(void) apr_pool_destroy(apr_pool_t *p); /** * Debug version of apr_pool_destroy. * @param p See: apr_pool_destroy. * @param file_line Where the function is called from. * This is usually APR_POOL__FILE_LINE__. * @remark Only available when APR_POOL_DEBUG is defined. * Call this directly if you have you apr_pool_destroy * calls in a wrapper function and wish to override * the file_line argument to reflect the caller of * your wrapper function. If you do not have * apr_pool_destroy in a wrapper, trust the macro * and don't call apr_pool_destroy_debug directly. */ APR_DECLARE(void) apr_pool_destroy_debug(apr_pool_t *p, const char *file_line); #if APR_POOL_DEBUG #define apr_pool_destroy(p) \ apr_pool_destroy_debug(p, APR_POOL__FILE_LINE__) #endif /* * Memory allocation */ /** * Allocate a block of memory from a pool * @param p The pool to allocate from * @param size The amount of memory to allocate * @return The allocated memory */ APR_DECLARE(void *) apr_palloc(apr_pool_t *p, apr_size_t size); /** * Debug version of apr_palloc * @param p See: apr_palloc * @param size See: apr_palloc * @param file_line Where the function is called from. * This is usually APR_POOL__FILE_LINE__. * @return See: apr_palloc */ APR_DECLARE(void *) apr_palloc_debug(apr_pool_t *p, apr_size_t size, const char *file_line); #if APR_POOL_DEBUG #define apr_palloc(p, size) \ apr_palloc_debug(p, size, APR_POOL__FILE_LINE__) #endif /** * Allocate a block of memory from a pool and set all of the memory to 0 * @param p The pool to allocate from * @param size The amount of memory to allocate * @return The allocated memory */ #if defined(DOXYGEN) APR_DECLARE(void *) apr_pcalloc(apr_pool_t *p, apr_size_t size); #elif !APR_POOL_DEBUG #define apr_pcalloc(p, size) memset(apr_palloc(p, size), 0, size) #endif /** * Debug version of apr_pcalloc * @param p See: apr_pcalloc * @param size See: apr_pcalloc * @param file_line Where the function is called from. * This is usually APR_POOL__FILE_LINE__. * @return See: apr_pcalloc */ APR_DECLARE(void *) apr_pcalloc_debug(apr_pool_t *p, apr_size_t size, const char *file_line); #if APR_POOL_DEBUG #define apr_pcalloc(p, size) \ apr_pcalloc_debug(p, size, APR_POOL__FILE_LINE__) #endif /* * Pool Properties */ /** * Set the function to be called when an allocation failure occurs. * @remark If the program wants APR to exit on a memory allocation error, * then this function can be called to set the callback to use (for * performing cleanup and then exiting). If this function is not called, * then APR will return an error and expect the calling program to * deal with the error accordingly. */ APR_DECLARE(void) apr_pool_abort_set(apr_abortfunc_t abortfunc, apr_pool_t *pool); /** * Get the abort function associated with the specified pool. * @param pool The pool for retrieving the abort function. * @return The abort function for the given pool. */ APR_DECLARE(apr_abortfunc_t) apr_pool_abort_get(apr_pool_t *pool); /** * Get the parent pool of the specified pool. * @param pool The pool for retrieving the parent pool. * @return The parent of the given pool. */ APR_DECLARE(apr_pool_t *) apr_pool_parent_get(apr_pool_t *pool); /** * Determine if pool a is an ancestor of pool b. * @param a The pool to search * @param b The pool to search for * @return True if a is an ancestor of b, NULL is considered an ancestor * of all pools. * @remark if compiled with APR_POOL_DEBUG, this function will also * return true if A is a pool which has been guaranteed by the caller * (using apr_pool_join) to have a lifetime at least as long as some * ancestor of pool B. */ APR_DECLARE(int) apr_pool_is_ancestor(apr_pool_t *a, apr_pool_t *b); /** * Tag a pool (give it a name) * @param pool The pool to tag * @param tag The tag */ APR_DECLARE(void) apr_pool_tag(apr_pool_t *pool, const char *tag); /* * User data management */ /** * Set the data associated with the current pool * @param data The user data associated with the pool. * @param key The key to use for association * @param cleanup The cleanup program to use to cleanup the data (NULL if none) * @param pool The current pool * @warning The data to be attached to the pool should have a life span * at least as long as the pool it is being attached to. * * Users of APR must take EXTREME care when choosing a key to * use for their data. It is possible to accidentally overwrite * data by choosing a key that another part of the program is using. * Therefore it is advised that steps are taken to ensure that unique * keys are used for all of the userdata objects in a particular pool * (the same key in two different pools or a pool and one of its * subpools is okay) at all times. Careful namespace prefixing of * key names is a typical way to help ensure this uniqueness. * */ APR_DECLARE(apr_status_t) apr_pool_userdata_set( const void *data, const char *key, apr_status_t (*cleanup)(void *), apr_pool_t *pool); /** * Set the data associated with the current pool * @param data The user data associated with the pool. * @param key The key to use for association * @param cleanup The cleanup program to use to cleanup the data (NULL if none) * @param pool The current pool * @note same as apr_pool_userdata_set(), except that this version doesn't * make a copy of the key (this function is useful, for example, when * the key is a string literal) * @warning This should NOT be used if the key could change addresses by * any means between the apr_pool_userdata_setn() call and a * subsequent apr_pool_userdata_get() on that key, such as if a * static string is used as a userdata key in a DSO and the DSO could * be unloaded and reloaded between the _setn() and the _get(). You * MUST use apr_pool_userdata_set() in such cases. * @warning More generally, the key and the data to be attached to the * pool should have a life span at least as long as the pool itself. * */ APR_DECLARE(apr_status_t) apr_pool_userdata_setn( const void *data, const char *key, apr_status_t (*cleanup)(void *), apr_pool_t *pool); /** * Return the data associated with the current pool. * @param data The user data associated with the pool. * @param key The key for the data to retrieve * @param pool The current pool. */ APR_DECLARE(apr_status_t) apr_pool_userdata_get(void **data, const char *key, apr_pool_t *pool); /** * @defgroup PoolCleanup Pool Cleanup Functions * * Cleanups are performed in the reverse order they were registered. That is: * Last In, First Out. A cleanup function can safely allocate memory from * the pool that is being cleaned up. It can also safely register additional * cleanups which will be run LIFO, directly after the current cleanup * terminates. Cleanups have to take caution in calling functions that * create subpools. Subpools, created during cleanup will NOT automatically * be cleaned up. In other words, cleanups are to clean up after themselves. * * @{ */ /** * Register a function to be called when a pool is cleared or destroyed * @param p The pool register the cleanup with * @param data The data to pass to the cleanup function. * @param plain_cleanup The function to call when the pool is cleared * or destroyed * @param child_cleanup The function to call when a child process is about * to exec - this function is called in the child, obviously! */ APR_DECLARE(void) apr_pool_cleanup_register( apr_pool_t *p, const void *data, apr_status_t (*plain_cleanup)(void *), apr_status_t (*child_cleanup)(void *)); /** * Remove a previously registered cleanup function. * * The cleanup most recently registered with @a p having the same values of * @a data and @a cleanup will be removed. * * @param p The pool to remove the cleanup from * @param data The data of the registered cleanup * @param cleanup The function to remove from cleanup * @remarks For some strange reason only the plain_cleanup is handled by this * function */ APR_DECLARE(void) apr_pool_cleanup_kill(apr_pool_t *p, const void *data, apr_status_t (*cleanup)(void *)); /** * Replace the child cleanup function of a previously registered cleanup. * * The cleanup most recently registered with @a p having the same values of * @a data and @a plain_cleanup will have the registered child cleanup * function replaced with @a child_cleanup. * * @param p The pool of the registered cleanup * @param data The data of the registered cleanup * @param plain_cleanup The plain cleanup function of the registered cleanup * @param child_cleanup The function to register as the child cleanup */ APR_DECLARE(void) apr_pool_child_cleanup_set( apr_pool_t *p, const void *data, apr_status_t (*plain_cleanup)(void *), apr_status_t (*child_cleanup)(void *)); /** * Run the specified cleanup function immediately and unregister it. * * The cleanup most recently registered with @a p having the same values of * @a data and @a cleanup will be removed and @a cleanup will be called * with @a data as the argument. * * @param p The pool to remove the cleanup from * @param data The data to remove from cleanup * @param cleanup The function to remove from cleanup */ APR_DECLARE(apr_status_t) apr_pool_cleanup_run( apr_pool_t *p, void *data, apr_status_t (*cleanup)(void *)); /** * An empty cleanup function. * * Passed to apr_pool_cleanup_register() when no cleanup is required. * * @param data The data to cleanup, will not be used by this function. */ APR_DECLARE_NONSTD(apr_status_t) apr_pool_cleanup_null(void *data); /** * Run all registered child cleanups, in preparation for an exec() * call in a forked child -- close files, etc., but *don't* flush I/O * buffers, *don't* wait for subprocesses, and *don't* free any * memory. */ APR_DECLARE(void) apr_pool_cleanup_for_exec(void); /** @} */ /** * @defgroup PoolDebug Pool Debugging functions. * * pools have nested lifetimes -- sub_pools are destroyed when the * parent pool is cleared. We allow certain liberties with operations * on things such as tables (and on other structures in a more general * sense) where we allow the caller to insert values into a table which * were not allocated from the table's pool. The table's data will * remain valid as long as all the pools from which its values are * allocated remain valid. * * For example, if B is a sub pool of A, and you build a table T in * pool B, then it's safe to insert data allocated in A or B into T * (because B lives at most as long as A does, and T is destroyed when * B is cleared/destroyed). On the other hand, if S is a table in * pool A, it is safe to insert data allocated in A into S, but it * is *not safe* to insert data allocated from B into S... because * B can be cleared/destroyed before A is (which would leave dangling * pointers in T's data structures). * * In general we say that it is safe to insert data into a table T * if the data is allocated in any ancestor of T's pool. This is the * basis on which the APR_POOL_DEBUG code works -- it tests these ancestor * relationships for all data inserted into tables. APR_POOL_DEBUG also * provides tools (apr_pool_find, and apr_pool_is_ancestor) for other * folks to implement similar restrictions for their own data * structures. * * However, sometimes this ancestor requirement is inconvenient -- * sometimes it's necessary to create a sub pool where the sub pool is * guaranteed to have the same lifetime as the parent pool. This is a * guarantee implemented by the *caller*, not by the pool code. That * is, the caller guarantees they won't destroy the sub pool * individually prior to destroying the parent pool. * * In this case the caller must call apr_pool_join() to indicate this * guarantee to the APR_POOL_DEBUG code. * * These functions are only implemented when #APR_POOL_DEBUG is set. * * @{ */ #if APR_POOL_DEBUG || defined(DOXYGEN) /** * Guarantee that a subpool has the same lifetime as the parent. * @param p The parent pool * @param sub The subpool */ APR_DECLARE(void) apr_pool_join(apr_pool_t *p, apr_pool_t *sub); /** * Find a pool from something allocated in it. * @param mem The thing allocated in the pool * @return The pool it is allocated in */ APR_DECLARE(apr_pool_t *) apr_pool_find(const void *mem); /** * Report the number of bytes currently in the pool * @param p The pool to inspect * @param recurse Recurse/include the subpools' sizes * @return The number of bytes */ APR_DECLARE(apr_size_t) apr_pool_num_bytes(apr_pool_t *p, int recurse); /** * Lock a pool * @param pool The pool to lock * @param flag The flag */ APR_DECLARE(void) apr_pool_lock(apr_pool_t *pool, int flag); /* @} */ #else /* APR_POOL_DEBUG or DOXYGEN */ #ifdef apr_pool_join #undef apr_pool_join #endif #define apr_pool_join(a,b) #ifdef apr_pool_lock #undef apr_pool_lock #endif #define apr_pool_lock(pool, lock) #endif /* APR_POOL_DEBUG or DOXYGEN */ /** @} */ #ifdef __cplusplus } #endif #endif /* !APR_POOLS_H */ include/apr-1/apr_portable.h000444 000000 000000 00000044106 11035140625 016222 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* This header file is where you should put ANY platform specific information. * This should be the only header file that programs need to include that * actually has platform dependant code which refers to the . */ #ifndef APR_PORTABLE_H #define APR_PORTABLE_H /** * @file apr_portable.h * @brief APR Portability Routines */ #include "apr.h" #include "apr_pools.h" #include "apr_thread_proc.h" #include "apr_file_io.h" #include "apr_network_io.h" #include "apr_errno.h" #include "apr_global_mutex.h" #include "apr_proc_mutex.h" #include "apr_time.h" #include "apr_dso.h" #include "apr_shm.h" #if APR_HAVE_DIRENT_H #include #endif #if APR_HAVE_FCNTL_H #include #endif #if APR_HAVE_PTHREAD_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_portabile Portability Routines * @ingroup APR * @{ */ #ifdef WIN32 /* The primitives for Windows types */ typedef HANDLE apr_os_file_t; typedef HANDLE apr_os_dir_t; typedef SOCKET apr_os_sock_t; typedef HANDLE apr_os_proc_mutex_t; typedef HANDLE apr_os_thread_t; typedef HANDLE apr_os_proc_t; typedef DWORD apr_os_threadkey_t; typedef FILETIME apr_os_imp_time_t; typedef SYSTEMTIME apr_os_exp_time_t; typedef HANDLE apr_os_dso_handle_t; typedef HANDLE apr_os_shm_t; #elif defined(OS2) typedef HFILE apr_os_file_t; typedef HDIR apr_os_dir_t; typedef int apr_os_sock_t; typedef HMTX apr_os_proc_mutex_t; typedef TID apr_os_thread_t; typedef PID apr_os_proc_t; typedef PULONG apr_os_threadkey_t; typedef struct timeval apr_os_imp_time_t; typedef struct tm apr_os_exp_time_t; typedef HMODULE apr_os_dso_handle_t; typedef void* apr_os_shm_t; #elif defined(__BEOS__) #include #include struct apr_os_proc_mutex_t { sem_id sem; int32 ben; }; typedef int apr_os_file_t; typedef DIR apr_os_dir_t; typedef int apr_os_sock_t; typedef struct apr_os_proc_mutex_t apr_os_proc_mutex_t; typedef thread_id apr_os_thread_t; typedef thread_id apr_os_proc_t; typedef int apr_os_threadkey_t; typedef struct timeval apr_os_imp_time_t; typedef struct tm apr_os_exp_time_t; typedef image_id apr_os_dso_handle_t; typedef void* apr_os_shm_t; #elif defined(NETWARE) typedef int apr_os_file_t; typedef DIR apr_os_dir_t; typedef int apr_os_sock_t; typedef NXMutex_t apr_os_proc_mutex_t; typedef NXThreadId_t apr_os_thread_t; typedef long apr_os_proc_t; typedef NXKey_t apr_os_threadkey_t; typedef struct timeval apr_os_imp_time_t; typedef struct tm apr_os_exp_time_t; typedef void * apr_os_dso_handle_t; typedef void* apr_os_shm_t; #else /* Any other OS should go above this one. This is the lowest common * denominator typedefs for all UNIX-like systems. :) */ /** Basic OS process mutex structure. */ struct apr_os_proc_mutex_t { #if APR_HAS_SYSVSEM_SERIALIZE || APR_HAS_FCNTL_SERIALIZE || APR_HAS_FLOCK_SERIALIZE /** Value used for SYS V Semaphore, FCNTL and FLOCK serialization */ int crossproc; #endif #if APR_HAS_PROC_PTHREAD_SERIALIZE /** Value used for PTHREAD serialization */ pthread_mutex_t *pthread_interproc; #endif #if APR_HAS_THREADS /* If no threads, no need for thread locks */ #if APR_USE_PTHREAD_SERIALIZE /** This value is currently unused within APR and Apache */ pthread_mutex_t *intraproc; #endif #endif }; typedef int apr_os_file_t; /**< native file */ typedef DIR apr_os_dir_t; /**< native dir */ typedef int apr_os_sock_t; /**< native dir */ typedef struct apr_os_proc_mutex_t apr_os_proc_mutex_t; /**< native proces * mutex */ #if APR_HAS_THREADS && APR_HAVE_PTHREAD_H typedef pthread_t apr_os_thread_t; /**< native thread */ typedef pthread_key_t apr_os_threadkey_t; /**< native thread address * space */ #endif typedef pid_t apr_os_proc_t; /**< native pid */ typedef struct timeval apr_os_imp_time_t; /**< native timeval */ typedef struct tm apr_os_exp_time_t; /**< native tm */ /** @var apr_os_dso_handle_t * native dso types */ #if defined(HPUX) || defined(HPUX10) || defined(HPUX11) #include typedef shl_t apr_os_dso_handle_t; #elif defined(DARWIN) #include typedef NSModule apr_os_dso_handle_t; #else typedef void * apr_os_dso_handle_t; #endif typedef void* apr_os_shm_t; /**< native SHM */ #endif /** * @typedef apr_os_sock_info_t * @brief alias for local OS socket */ /** * everything APR needs to know about an active socket to construct * an APR socket from it; currently, this is platform-independent */ struct apr_os_sock_info_t { apr_os_sock_t *os_sock; /**< always required */ struct sockaddr *local; /**< NULL if not yet bound */ struct sockaddr *remote; /**< NULL if not connected */ int family; /**< always required (APR_INET, APR_INET6, etc.) */ int type; /**< always required (SOCK_STREAM, SOCK_DGRAM, etc.) */ int protocol; /**< 0 or actual protocol (APR_PROTO_SCTP, APR_PROTO_TCP, etc.) */ }; typedef struct apr_os_sock_info_t apr_os_sock_info_t; #if APR_PROC_MUTEX_IS_GLOBAL || defined(DOXYGEN) /** Opaque global mutex type */ #define apr_os_global_mutex_t apr_os_proc_mutex_t /** @return apr_os_global_mutex */ #define apr_os_global_mutex_get apr_os_proc_mutex_get #else /** Thread and process mutex for those platforms where process mutexes * are not held in threads. */ struct apr_os_global_mutex_t { apr_pool_t *pool; apr_proc_mutex_t *proc_mutex; #if APR_HAS_THREADS apr_thread_mutex_t *thread_mutex; #endif /* APR_HAS_THREADS */ }; typedef struct apr_os_global_mutex_t apr_os_global_mutex_t; APR_DECLARE(apr_status_t) apr_os_global_mutex_get(apr_os_global_mutex_t *ospmutex, apr_global_mutex_t *pmutex); #endif /** * convert the file from apr type to os specific type. * @param thefile The os specific file we are converting to * @param file The apr file to convert. * @remark On Unix, it is only possible to get a file descriptor from * an apr file type. */ APR_DECLARE(apr_status_t) apr_os_file_get(apr_os_file_t *thefile, apr_file_t *file); /** * convert the dir from apr type to os specific type. * @param thedir The os specific dir we are converting to * @param dir The apr dir to convert. */ APR_DECLARE(apr_status_t) apr_os_dir_get(apr_os_dir_t **thedir, apr_dir_t *dir); /** * Convert the socket from an apr type to an OS specific socket * @param thesock The socket to convert. * @param sock The os specifc equivelant of the apr socket.. */ APR_DECLARE(apr_status_t) apr_os_sock_get(apr_os_sock_t *thesock, apr_socket_t *sock); /** * Convert the proc mutex from os specific type to apr type * @param ospmutex The os specific proc mutex we are converting to. * @param pmutex The apr proc mutex to convert. */ APR_DECLARE(apr_status_t) apr_os_proc_mutex_get(apr_os_proc_mutex_t *ospmutex, apr_proc_mutex_t *pmutex); /** * Get the exploded time in the platforms native format. * @param ostime the native time format * @param aprtime the time to convert */ APR_DECLARE(apr_status_t) apr_os_exp_time_get(apr_os_exp_time_t **ostime, apr_time_exp_t *aprtime); /** * Get the imploded time in the platforms native format. * @param ostime the native time format * @param aprtime the time to convert */ APR_DECLARE(apr_status_t) apr_os_imp_time_get(apr_os_imp_time_t **ostime, apr_time_t *aprtime); /** * convert the shm from apr type to os specific type. * @param osshm The os specific shm representation * @param shm The apr shm to convert. */ APR_DECLARE(apr_status_t) apr_os_shm_get(apr_os_shm_t *osshm, apr_shm_t *shm); #if APR_HAS_THREADS || defined(DOXYGEN) /** * @defgroup apr_os_thread Thread portability Routines * @{ */ /** * convert the thread to os specific type from apr type. * @param thethd The apr thread to convert * @param thd The os specific thread we are converting to */ APR_DECLARE(apr_status_t) apr_os_thread_get(apr_os_thread_t **thethd, apr_thread_t *thd); /** * convert the thread private memory key to os specific type from an apr type. * @param thekey The apr handle we are converting from. * @param key The os specific handle we are converting to. */ APR_DECLARE(apr_status_t) apr_os_threadkey_get(apr_os_threadkey_t *thekey, apr_threadkey_t *key); /** * convert the thread from os specific type to apr type. * @param thd The apr thread we are converting to. * @param thethd The os specific thread to convert * @param cont The pool to use if it is needed. */ APR_DECLARE(apr_status_t) apr_os_thread_put(apr_thread_t **thd, apr_os_thread_t *thethd, apr_pool_t *cont); /** * convert the thread private memory key from os specific type to apr type. * @param key The apr handle we are converting to. * @param thekey The os specific handle to convert * @param cont The pool to use if it is needed. */ APR_DECLARE(apr_status_t) apr_os_threadkey_put(apr_threadkey_t **key, apr_os_threadkey_t *thekey, apr_pool_t *cont); /** * Get the thread ID */ APR_DECLARE(apr_os_thread_t) apr_os_thread_current(void); /** * Compare two thread id's * @param tid1 1st Thread ID to compare * @param tid2 2nd Thread ID to compare */ APR_DECLARE(int) apr_os_thread_equal(apr_os_thread_t tid1, apr_os_thread_t tid2); /** @} */ #endif /* APR_HAS_THREADS */ /** * convert the file from os specific type to apr type. * @param file The apr file we are converting to. * @param thefile The os specific file to convert * @param flags The flags that were used to open this file. * @param cont The pool to use if it is needed. * @remark On Unix, it is only possible to put a file descriptor into * an apr file type. */ APR_DECLARE(apr_status_t) apr_os_file_put(apr_file_t **file, apr_os_file_t *thefile, apr_int32_t flags, apr_pool_t *cont); /** * convert the file from os specific type to apr type. * @param file The apr file we are converting to. * @param thefile The os specific pipe to convert * @param cont The pool to use if it is needed. * @remark On Unix, it is only possible to put a file descriptor into * an apr file type. */ APR_DECLARE(apr_status_t) apr_os_pipe_put(apr_file_t **file, apr_os_file_t *thefile, apr_pool_t *cont); /** * convert the file from os specific type to apr type. * @param file The apr file we are converting to. * @param thefile The os specific pipe to convert * @param register_cleanup A cleanup will be registered on the apr_file_t * to issue apr_file_close(). * @param cont The pool to use if it is needed. * @remark On Unix, it is only possible to put a file descriptor into * an apr file type. */ APR_DECLARE(apr_status_t) apr_os_pipe_put_ex(apr_file_t **file, apr_os_file_t *thefile, int register_cleanup, apr_pool_t *cont); /** * convert the dir from os specific type to apr type. * @param dir The apr dir we are converting to. * @param thedir The os specific dir to convert * @param cont The pool to use when creating to apr directory. */ APR_DECLARE(apr_status_t) apr_os_dir_put(apr_dir_t **dir, apr_os_dir_t *thedir, apr_pool_t *cont); /** * Convert a socket from the os specific type to the apr type * @param sock The pool to use. * @param thesock The socket to convert to. * @param cont The socket we are converting to an apr type. * @remark If it is a true socket, it is best to call apr_os_sock_make() * and provide APR with more information about the socket. */ APR_DECLARE(apr_status_t) apr_os_sock_put(apr_socket_t **sock, apr_os_sock_t *thesock, apr_pool_t *cont); /** * Create a socket from an existing descriptor and local and remote * socket addresses. * @param apr_sock The new socket that has been set up * @param os_sock_info The os representation of the socket handle and * other characteristics of the socket * @param cont The pool to use * @remark If you only know the descriptor/handle or if it isn't really * a true socket, use apr_os_sock_put() instead. */ APR_DECLARE(apr_status_t) apr_os_sock_make(apr_socket_t **apr_sock, apr_os_sock_info_t *os_sock_info, apr_pool_t *cont); /** * Convert the proc mutex from os specific type to apr type * @param pmutex The apr proc mutex we are converting to. * @param ospmutex The os specific proc mutex to convert. * @param cont The pool to use if it is needed. */ APR_DECLARE(apr_status_t) apr_os_proc_mutex_put(apr_proc_mutex_t **pmutex, apr_os_proc_mutex_t *ospmutex, apr_pool_t *cont); /** * Put the imploded time in the APR format. * @param aprtime the APR time format * @param ostime the time to convert * @param cont the pool to use if necessary */ APR_DECLARE(apr_status_t) apr_os_imp_time_put(apr_time_t *aprtime, apr_os_imp_time_t **ostime, apr_pool_t *cont); /** * Put the exploded time in the APR format. * @param aprtime the APR time format * @param ostime the time to convert * @param cont the pool to use if necessary */ APR_DECLARE(apr_status_t) apr_os_exp_time_put(apr_time_exp_t *aprtime, apr_os_exp_time_t **ostime, apr_pool_t *cont); /** * convert the shared memory from os specific type to apr type. * @param shm The apr shm representation of osshm * @param osshm The os specific shm identity * @param cont The pool to use if it is needed. * @remark On fork()ed architectures, this is typically nothing more than * the memory block mapped. On non-fork architectures, this is typically * some internal handle to pass the mapping from process to process. */ APR_DECLARE(apr_status_t) apr_os_shm_put(apr_shm_t **shm, apr_os_shm_t *osshm, apr_pool_t *cont); #if APR_HAS_DSO || defined(DOXYGEN) /** * @defgroup apr_os_dso DSO (Dynamic Loading) Portabiliity Routines * @{ */ /** * convert the dso handle from os specific to apr * @param dso The apr handle we are converting to * @param thedso the os specific handle to convert * @param pool the pool to use if it is needed */ APR_DECLARE(apr_status_t) apr_os_dso_handle_put(apr_dso_handle_t **dso, apr_os_dso_handle_t thedso, apr_pool_t *pool); /** * convert the apr dso handle into an os specific one * @param aprdso The apr dso handle to convert * @param dso The os specific dso to return */ APR_DECLARE(apr_status_t) apr_os_dso_handle_get(apr_os_dso_handle_t *dso, apr_dso_handle_t *aprdso); #if APR_HAS_OS_UUID /** * Private: apr-util's apr_uuid module when supported by the platform */ APR_DECLARE(apr_status_t) apr_os_uuid_get(unsigned char *uuid_data); #endif /** @} */ #endif /* APR_HAS_DSO */ /** * Get the name of the system default characer set. * @param pool the pool to allocate the name from, if needed */ APR_DECLARE(const char*) apr_os_default_encoding(apr_pool_t *pool); /** * Get the name of the current locale character set. * @param pool the pool to allocate the name from, if needed * @remark Defers to apr_os_default_encoding if the current locale's * data can't be retreved on this system. */ APR_DECLARE(const char*) apr_os_locale_encoding(apr_pool_t *pool); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_PORTABLE_H */ include/apr-1/apr_proc_mutex.h000444 000000 000000 00000013562 11035140625 016601 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_PROC_MUTEX_H #define APR_PROC_MUTEX_H /** * @file apr_proc_mutex.h * @brief APR Process Locking Routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_proc_mutex Process Locking Routines * @ingroup APR * @{ */ /** * Enumerated potential types for APR process locking methods * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports * APR_LOCK_foo. Only APR_LOCK_DEFAULT is portable. */ typedef enum { APR_LOCK_FCNTL, /**< fcntl() */ APR_LOCK_FLOCK, /**< flock() */ APR_LOCK_SYSVSEM, /**< System V Semaphores */ APR_LOCK_PROC_PTHREAD, /**< POSIX pthread process-based locking */ APR_LOCK_POSIXSEM, /**< POSIX semaphore process-based locking */ APR_LOCK_DEFAULT /**< Use the default process lock */ } apr_lockmech_e; /** Opaque structure representing a process mutex. */ typedef struct apr_proc_mutex_t apr_proc_mutex_t; /* Function definitions */ /** * Create and initialize a mutex that can be used to synchronize processes. * @param mutex the memory address where the newly created mutex will be * stored. * @param fname A file name to use if the lock mechanism requires one. This * argument should always be provided. The lock code itself will * determine if it should be used. * @param mech The mechanism to use for the interprocess lock, if any; one of *
 *            APR_LOCK_FCNTL
 *            APR_LOCK_FLOCK
 *            APR_LOCK_SYSVSEM
 *            APR_LOCK_POSIXSEM
 *            APR_LOCK_PROC_PTHREAD
 *            APR_LOCK_DEFAULT     pick the default mechanism for the platform
 * 
* @param pool the pool from which to allocate the mutex. * @see apr_lockmech_e * @warning Check APR_HAS_foo_SERIALIZE defines to see if the platform supports * APR_LOCK_foo. Only APR_LOCK_DEFAULT is portable. */ APR_DECLARE(apr_status_t) apr_proc_mutex_create(apr_proc_mutex_t **mutex, const char *fname, apr_lockmech_e mech, apr_pool_t *pool); /** * Re-open a mutex in a child process. * @param mutex The newly re-opened mutex structure. * @param fname A file name to use if the mutex mechanism requires one. This * argument should always be provided. The mutex code itself will * determine if it should be used. This filename should be the * same one that was passed to apr_proc_mutex_create(). * @param pool The pool to operate on. * @remark This function must be called to maintain portability, even * if the underlying lock mechanism does not require it. */ APR_DECLARE(apr_status_t) apr_proc_mutex_child_init(apr_proc_mutex_t **mutex, const char *fname, apr_pool_t *pool); /** * Acquire the lock for the given mutex. If the mutex is already locked, * the current thread will be put to sleep until the lock becomes available. * @param mutex the mutex on which to acquire the lock. */ APR_DECLARE(apr_status_t) apr_proc_mutex_lock(apr_proc_mutex_t *mutex); /** * Attempt to acquire the lock for the given mutex. If the mutex has already * been acquired, the call returns immediately with APR_EBUSY. Note: it * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine * if the return value was APR_EBUSY, for portability reasons. * @param mutex the mutex on which to attempt the lock acquiring. */ APR_DECLARE(apr_status_t) apr_proc_mutex_trylock(apr_proc_mutex_t *mutex); /** * Release the lock for the given mutex. * @param mutex the mutex from which to release the lock. */ APR_DECLARE(apr_status_t) apr_proc_mutex_unlock(apr_proc_mutex_t *mutex); /** * Destroy the mutex and free the memory associated with the lock. * @param mutex the mutex to destroy. */ APR_DECLARE(apr_status_t) apr_proc_mutex_destroy(apr_proc_mutex_t *mutex); /** * Destroy the mutex and free the memory associated with the lock. * @param mutex the mutex to destroy. * @note This function is generally used to kill a cleanup on an already * created mutex */ APR_DECLARE(apr_status_t) apr_proc_mutex_cleanup(void *mutex); /** * Return the name of the lockfile for the mutex, or NULL * if the mutex doesn't use a lock file */ APR_DECLARE(const char *) apr_proc_mutex_lockfile(apr_proc_mutex_t *mutex); /** * Display the name of the mutex, as it relates to the actual method used. * This matches the valid options for Apache's AcceptMutex directive * @param mutex the name of the mutex */ APR_DECLARE(const char *) apr_proc_mutex_name(apr_proc_mutex_t *mutex); /** * Display the name of the default mutex: APR_LOCK_DEFAULT */ APR_DECLARE(const char *) apr_proc_mutex_defname(void); /** * Get the pool used by this proc_mutex. * @return apr_pool_t the pool */ APR_POOL_DECLARE_ACCESSOR(proc_mutex); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_PROC_MUTEX_H */ include/apr-1/apr_random.h000444 000000 000000 00000006303 11035140626 015670 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_RANDOM_H #define APR_RANDOM_H #include typedef struct apr_crypto_hash_t apr_crypto_hash_t; typedef void apr_crypto_hash_init_t(apr_crypto_hash_t *hash); typedef void apr_crypto_hash_add_t(apr_crypto_hash_t *hash,const void *data, apr_size_t bytes); typedef void apr_crypto_hash_finish_t(apr_crypto_hash_t *hash, unsigned char *result); /* FIXME: make this opaque */ struct apr_crypto_hash_t { apr_crypto_hash_init_t *init; apr_crypto_hash_add_t *add; apr_crypto_hash_finish_t *finish; apr_size_t size; void *data; }; APR_DECLARE(apr_crypto_hash_t *) apr_crypto_sha256_new(apr_pool_t *p); typedef struct apr_random_t apr_random_t; APR_DECLARE(void) apr_random_init(apr_random_t *g,apr_pool_t *p, apr_crypto_hash_t *pool_hash, apr_crypto_hash_t *key_hash, apr_crypto_hash_t *prng_hash); APR_DECLARE(apr_random_t *) apr_random_standard_new(apr_pool_t *p); APR_DECLARE(void) apr_random_add_entropy(apr_random_t *g, const void *entropy_, apr_size_t bytes); APR_DECLARE(apr_status_t) apr_random_insecure_bytes(apr_random_t *g, void *random, apr_size_t bytes); APR_DECLARE(apr_status_t) apr_random_secure_bytes(apr_random_t *g, void *random, apr_size_t bytes); APR_DECLARE(void) apr_random_barrier(apr_random_t *g); APR_DECLARE(apr_status_t) apr_random_secure_ready(apr_random_t *r); APR_DECLARE(apr_status_t) apr_random_insecure_ready(apr_random_t *r); /* Call this in the child after forking to mix the randomness pools. Note that its generally a bad idea to fork a process with a real PRNG in it - better to have the PRNG externally and get the randomness from there. However, if you really must do it, then you should supply all your entropy to all the PRNGs - don't worry, they won't produce the same output. Note that apr_proc_fork() calls this for you, so only weird applications need ever call it themselves. */ struct apr_proc_t; APR_DECLARE(void) apr_random_after_fork(struct apr_proc_t *proc); #endif /* ndef APR_RANDOM_H */ include/apr-1/apr_ring.h000444 000000 000000 00000043034 11035140626 015351 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * This code draws heavily from the 4.4BSD macros * and Dean Gaudet's "splim/ring.h". * * * * We'd use Dean's code directly if we could guarantee the * availability of inline functions. */ #ifndef APR_RING_H #define APR_RING_H /** * @file apr_ring.h * @brief APR Rings */ /* * for offsetof() */ #include "apr_general.h" /** * @defgroup apr_ring Ring Macro Implementations * @ingroup APR * A ring is a kind of doubly-linked list that can be manipulated * without knowing where its head is. * @{ */ /** * The Ring Element * * A ring element struct is linked to the other elements in the ring * through its ring entry field, e.g. *
 *      struct my_element_t {
 *          APR_RING_ENTRY(my_element_t) link;
 *          int foo;
 *          char *bar;
 *      };
 * 
* * An element struct may be put on more than one ring if it has more * than one APR_RING_ENTRY field. Each APR_RING_ENTRY has a corresponding * APR_RING_HEAD declaration. * * @warning For strict C standards compliance you should put the APR_RING_ENTRY * first in the element struct unless the head is always part of a larger * object with enough earlier fields to accommodate the offsetof() used * to compute the ring sentinel below. You can usually ignore this caveat. */ #define APR_RING_ENTRY(elem) \ struct { \ struct elem *next; \ struct elem *prev; \ } /** * The Ring Head * * Each ring is managed via its head, which is a struct declared like this: *
 *      APR_RING_HEAD(my_ring_t, my_element_t);
 *      struct my_ring_t ring, *ringp;
 * 
* * This struct looks just like the element link struct so that we can * be sure that the typecasting games will work as expected. * * The first element in the ring is next after the head, and the last * element is just before the head. */ #define APR_RING_HEAD(head, elem) \ struct head { \ struct elem * volatile next; \ struct elem * volatile prev; \ } /** * The Ring Sentinel * * This is the magic pointer value that occurs before the first and * after the last elements in the ring, computed from the address of * the ring's head. The head itself isn't an element, but in order to * get rid of all the special cases when dealing with the ends of the * ring, we play typecasting games to make it look like one. * * Here is a diagram to illustrate the arrangements of the next and * prev pointers of each element in a single ring. Note that they point * to the start of each element, not to the APR_RING_ENTRY structure. * *
 *     +->+------+<-+  +->+------+<-+  +->+------+<-+
 *     |  |struct|  |  |  |struct|  |  |  |struct|  |
 *    /   | elem |   \/   | elem |   \/   | elem |  \
 * ...    |      |   /\   |      |   /\   |      |   ...
 *        +------+  |  |  +------+  |  |  +------+
 *   ...--|prev  |  |  +--|ring  |  |  +--|prev  |
 *        |  next|--+     | entry|--+     |  next|--...
 *        +------+        +------+        +------+
 *        | etc. |        | etc. |        | etc. |
 *        :      :        :      :        :      :
 * 
* * The APR_RING_HEAD is nothing but a bare APR_RING_ENTRY. The prev * and next pointers in the first and last elements don't actually * point to the head, they point to a phantom place called the * sentinel. Its value is such that last->next->next == first because * the offset from the sentinel to the head's next pointer is the same * as the offset from the start of an element to its next pointer. * This also works in the opposite direction. * *
 *        last                            first
 *     +->+------+<-+  +->sentinel<-+  +->+------+<-+
 *     |  |struct|  |  |            |  |  |struct|  |
 *    /   | elem |   \/              \/   | elem |  \
 * ...    |      |   /\              /\   |      |   ...
 *        +------+  |  |  +------+  |  |  +------+
 *   ...--|prev  |  |  +--|ring  |  |  +--|prev  |
 *        |  next|--+     |  head|--+     |  next|--...
 *        +------+        +------+        +------+
 *        | etc. |                        | etc. |
 *        :      :                        :      :
 * 
* * Note that the offset mentioned above is different for each kind of * ring that the element may be on, and each kind of ring has a unique * name for its APR_RING_ENTRY in each element, and has its own type * for its APR_RING_HEAD. * * Note also that if the offset is non-zero (which is required if an * element has more than one APR_RING_ENTRY), the unreality of the * sentinel may have bad implications on very perverse implementations * of C -- see the warning in APR_RING_ENTRY. * * @param hp The head of the ring * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_SENTINEL(hp, elem, link) \ (struct elem *)((char *)(hp) - APR_OFFSETOF(struct elem, link)) /** * The first element of the ring * @param hp The head of the ring */ #define APR_RING_FIRST(hp) (hp)->next /** * The last element of the ring * @param hp The head of the ring */ #define APR_RING_LAST(hp) (hp)->prev /** * The next element in the ring * @param ep The current element * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_NEXT(ep, link) (ep)->link.next /** * The previous element in the ring * @param ep The current element * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_PREV(ep, link) (ep)->link.prev /** * Initialize a ring * @param hp The head of the ring * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_INIT(hp, elem, link) do { \ APR_RING_FIRST((hp)) = APR_RING_SENTINEL((hp), elem, link); \ APR_RING_LAST((hp)) = APR_RING_SENTINEL((hp), elem, link); \ } while (0) /** * Determine if a ring is empty * @param hp The head of the ring * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct * @return true or false */ #define APR_RING_EMPTY(hp, elem, link) \ (APR_RING_FIRST((hp)) == APR_RING_SENTINEL((hp), elem, link)) /** * Initialize a singleton element * @param ep The element * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_ELEM_INIT(ep, link) do { \ APR_RING_NEXT((ep), link) = (ep); \ APR_RING_PREV((ep), link) = (ep); \ } while (0) /** * Splice the sequence ep1..epN into the ring before element lep * (..lep.. becomes ..ep1..epN..lep..) * @warning This doesn't work for splicing before the first element or on * empty rings... see APR_RING_SPLICE_HEAD for one that does * @param lep Element in the ring to splice before * @param ep1 First element in the sequence to splice in * @param epN Last element in the sequence to splice in * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_SPLICE_BEFORE(lep, ep1, epN, link) do { \ APR_RING_NEXT((epN), link) = (lep); \ APR_RING_PREV((ep1), link) = APR_RING_PREV((lep), link); \ APR_RING_NEXT(APR_RING_PREV((lep), link), link) = (ep1); \ APR_RING_PREV((lep), link) = (epN); \ } while (0) /** * Splice the sequence ep1..epN into the ring after element lep * (..lep.. becomes ..lep..ep1..epN..) * @warning This doesn't work for splicing after the last element or on * empty rings... see APR_RING_SPLICE_TAIL for one that does * @param lep Element in the ring to splice after * @param ep1 First element in the sequence to splice in * @param epN Last element in the sequence to splice in * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_SPLICE_AFTER(lep, ep1, epN, link) do { \ APR_RING_PREV((ep1), link) = (lep); \ APR_RING_NEXT((epN), link) = APR_RING_NEXT((lep), link); \ APR_RING_PREV(APR_RING_NEXT((lep), link), link) = (epN); \ APR_RING_NEXT((lep), link) = (ep1); \ } while (0) /** * Insert the element nep into the ring before element lep * (..lep.. becomes ..nep..lep..) * @warning This doesn't work for inserting before the first element or on * empty rings... see APR_RING_INSERT_HEAD for one that does * @param lep Element in the ring to insert before * @param nep Element to insert * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_INSERT_BEFORE(lep, nep, link) \ APR_RING_SPLICE_BEFORE((lep), (nep), (nep), link) /** * Insert the element nep into the ring after element lep * (..lep.. becomes ..lep..nep..) * @warning This doesn't work for inserting after the last element or on * empty rings... see APR_RING_INSERT_TAIL for one that does * @param lep Element in the ring to insert after * @param nep Element to insert * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_INSERT_AFTER(lep, nep, link) \ APR_RING_SPLICE_AFTER((lep), (nep), (nep), link) /** * Splice the sequence ep1..epN into the ring before the first element * (..hp.. becomes ..hp..ep1..epN..) * @param hp Head of the ring * @param ep1 First element in the sequence to splice in * @param epN Last element in the sequence to splice in * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_SPLICE_HEAD(hp, ep1, epN, elem, link) \ APR_RING_SPLICE_AFTER(APR_RING_SENTINEL((hp), elem, link), \ (ep1), (epN), link) /** * Splice the sequence ep1..epN into the ring after the last element * (..hp.. becomes ..ep1..epN..hp..) * @param hp Head of the ring * @param ep1 First element in the sequence to splice in * @param epN Last element in the sequence to splice in * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_SPLICE_TAIL(hp, ep1, epN, elem, link) \ APR_RING_SPLICE_BEFORE(APR_RING_SENTINEL((hp), elem, link), \ (ep1), (epN), link) /** * Insert the element nep into the ring before the first element * (..hp.. becomes ..hp..nep..) * @param hp Head of the ring * @param nep Element to insert * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_INSERT_HEAD(hp, nep, elem, link) \ APR_RING_SPLICE_HEAD((hp), (nep), (nep), elem, link) /** * Insert the element nep into the ring after the last element * (..hp.. becomes ..nep..hp..) * @param hp Head of the ring * @param nep Element to insert * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_INSERT_TAIL(hp, nep, elem, link) \ APR_RING_SPLICE_TAIL((hp), (nep), (nep), elem, link) /** * Concatenate ring h2 onto the end of ring h1, leaving h2 empty. * @param h1 Head of the ring to concatenate onto * @param h2 Head of the ring to concatenate * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_CONCAT(h1, h2, elem, link) do { \ if (!APR_RING_EMPTY((h2), elem, link)) { \ APR_RING_SPLICE_BEFORE(APR_RING_SENTINEL((h1), elem, link), \ APR_RING_FIRST((h2)), \ APR_RING_LAST((h2)), link); \ APR_RING_INIT((h2), elem, link); \ } \ } while (0) /** * Prepend ring h2 onto the beginning of ring h1, leaving h2 empty. * @param h1 Head of the ring to prepend onto * @param h2 Head of the ring to prepend * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_PREPEND(h1, h2, elem, link) do { \ if (!APR_RING_EMPTY((h2), elem, link)) { \ APR_RING_SPLICE_AFTER(APR_RING_SENTINEL((h1), elem, link), \ APR_RING_FIRST((h2)), \ APR_RING_LAST((h2)), link); \ APR_RING_INIT((h2), elem, link); \ } \ } while (0) /** * Unsplice a sequence of elements from a ring * @warning The unspliced sequence is left with dangling pointers at either end * @param ep1 First element in the sequence to unsplice * @param epN Last element in the sequence to unsplice * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_UNSPLICE(ep1, epN, link) do { \ APR_RING_NEXT(APR_RING_PREV((ep1), link), link) = \ APR_RING_NEXT((epN), link); \ APR_RING_PREV(APR_RING_NEXT((epN), link), link) = \ APR_RING_PREV((ep1), link); \ } while (0) /** * Remove a single element from a ring * @warning The unspliced element is left with dangling pointers at either end * @param ep Element to remove * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_REMOVE(ep, link) \ APR_RING_UNSPLICE((ep), (ep), link) /* Debugging tools: */ #ifdef APR_RING_DEBUG #include #include #define APR_RING_CHECK_ONE(msg, ptr) \ fprintf(stderr, "*** %s %p\n", msg, ptr) #define APR_RING_CHECK(hp, elem, link, msg) \ APR_RING_CHECK_ELEM(APR_RING_SENTINEL(hp, elem, link), elem, link, msg) #define APR_RING_CHECK_ELEM(ep, elem, link, msg) do { \ struct elem *start = (ep); \ struct elem *here = start; \ fprintf(stderr, "*** ring check start -- %s\n", msg); \ do { \ fprintf(stderr, "\telem %p\n", here); \ fprintf(stderr, "\telem->next %p\n", \ APR_RING_NEXT(here, link)); \ fprintf(stderr, "\telem->prev %p\n", \ APR_RING_PREV(here, link)); \ fprintf(stderr, "\telem->next->prev %p\n", \ APR_RING_PREV(APR_RING_NEXT(here, link), link)); \ fprintf(stderr, "\telem->prev->next %p\n", \ APR_RING_NEXT(APR_RING_PREV(here, link), link)); \ if (APR_RING_PREV(APR_RING_NEXT(here, link), link) != here) { \ fprintf(stderr, "\t*** elem->next->prev != elem\n"); \ break; \ } \ if (APR_RING_NEXT(APR_RING_PREV(here, link), link) != here) { \ fprintf(stderr, "\t*** elem->prev->next != elem\n"); \ break; \ } \ here = APR_RING_NEXT(here, link); \ } while (here != start); \ fprintf(stderr, "*** ring check end\n"); \ } while (0) #define APR_RING_CHECK_CONSISTENCY(hp, elem, link) \ APR_RING_CHECK_ELEM_CONSISTENCY(APR_RING_SENTINEL(hp, elem, link),\ elem, link) #define APR_RING_CHECK_ELEM_CONSISTENCY(ep, elem, link) do { \ struct elem *start = (ep); \ struct elem *here = start; \ do { \ assert(APR_RING_PREV(APR_RING_NEXT(here, link), link) == here); \ assert(APR_RING_NEXT(APR_RING_PREV(here, link), link) == here); \ here = APR_RING_NEXT(here, link); \ } while (here != start); \ } while (0) #else /** * Print a single pointer value to STDERR * (This is a no-op unless APR_RING_DEBUG is defined.) * @param msg Descriptive message * @param ptr Pointer value to print */ #define APR_RING_CHECK_ONE(msg, ptr) /** * Dump all ring pointers to STDERR, starting with the head and looping all * the way around the ring back to the head. Aborts if an inconsistency * is found. * (This is a no-op unless APR_RING_DEBUG is defined.) * @param hp Head of the ring * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct * @param msg Descriptive message */ #define APR_RING_CHECK(hp, elem, link, msg) /** * Loops around a ring and checks all the pointers for consistency. Pops * an assertion if any inconsistency is found. Same idea as APR_RING_CHECK() * except that it's silent if all is well. * (This is a no-op unless APR_RING_DEBUG is defined.) * @param hp Head of the ring * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_CHECK_CONSISTENCY(hp, elem, link) /** * Dump all ring pointers to STDERR, starting with the given element and * looping all the way around the ring back to that element. Aborts if * an inconsistency is found. * (This is a no-op unless APR_RING_DEBUG is defined.) * @param ep The element * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct * @param msg Descriptive message */ #define APR_RING_CHECK_ELEM(ep, elem, link, msg) /** * Loops around a ring, starting with the given element, and checks all * the pointers for consistency. Pops an assertion if any inconsistency * is found. Same idea as APR_RING_CHECK_ELEM() except that it's silent * if all is well. * (This is a no-op unless APR_RING_DEBUG is defined.) * @param ep The element * @param elem The name of the element struct * @param link The name of the APR_RING_ENTRY in the element struct */ #define APR_RING_CHECK_ELEM_CONSISTENCY(ep, elem, link) #endif /** @} */ #endif /* !APR_RING_H */ include/apr-1/apr_shm.h000444 000000 000000 00000012510 11035140626 015174 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_SHM_H #define APR_SHM_H /** * @file apr_shm.h * @brief APR Shared Memory Routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_shm Shared Memory Routines * @ingroup APR * @{ */ /** * Private, platform-specific data struture representing a shared memory * segment. */ typedef struct apr_shm_t apr_shm_t; /** * Create and make accessable a shared memory segment. * @param m The shared memory structure to create. * @param reqsize The desired size of the segment. * @param filename The file to use for shared memory on platforms that * require it. * @param pool the pool from which to allocate the shared memory * structure. * @remark A note about Anonymous vs. Named shared memory segments: * Not all plaforms support anonymous shared memory segments, but in * some cases it is prefered over other types of shared memory * implementations. Passing a NULL 'file' parameter to this function * will cause the subsystem to use anonymous shared memory segments. * If such a system is not available, APR_ENOTIMPL is returned. * @remark A note about allocation sizes: * On some platforms it is necessary to store some metainformation * about the segment within the actual segment. In order to supply * the caller with the requested size it may be necessary for the * implementation to request a slightly greater segment length * from the subsystem. In all cases, the apr_shm_baseaddr_get() * function will return the first usable byte of memory. * */ APR_DECLARE(apr_status_t) apr_shm_create(apr_shm_t **m, apr_size_t reqsize, const char *filename, apr_pool_t *pool); /** * Remove named resource associated with a shared memory segment, * preventing attachments to the resource, but not destroying it. * @param filename The filename associated with shared-memory segment which * needs to be removed * @param pool The pool used for file operations * @remark This function is only supported on platforms which support * name-based shared memory segments, and will return APR_ENOTIMPL on * platforms without such support. Removing the file while the shm * is in use is not entirely portable, caller may use this to enhance * obscurity of the resource, but be prepared for the the call to fail, * and for concurrent attempts to create a resource of the same name * to also fail. The pool cleanup of apr_shm_create (apr_shm_destroy) * also removes the named resource. */ APR_DECLARE(apr_status_t) apr_shm_remove(const char *filename, apr_pool_t *pool); /** * Destroy a shared memory segment and associated memory. * @param m The shared memory segment structure to destroy. */ APR_DECLARE(apr_status_t) apr_shm_destroy(apr_shm_t *m); /** * Attach to a shared memory segment that was created * by another process. * @param m The shared memory structure to create. * @param filename The file used to create the original segment. * (This MUST match the original filename.) * @param pool the pool from which to allocate the shared memory * structure for this process. */ APR_DECLARE(apr_status_t) apr_shm_attach(apr_shm_t **m, const char *filename, apr_pool_t *pool); /** * Detach from a shared memory segment without destroying it. * @param m The shared memory structure representing the segment * to detach from. */ APR_DECLARE(apr_status_t) apr_shm_detach(apr_shm_t *m); /** * Retrieve the base address of the shared memory segment. * NOTE: This address is only usable within the callers address * space, since this API does not guarantee that other attaching * processes will maintain the same address mapping. * @param m The shared memory segment from which to retrieve * the base address. * @return address, aligned by APR_ALIGN_DEFAULT. */ APR_DECLARE(void *) apr_shm_baseaddr_get(const apr_shm_t *m); /** * Retrieve the length of a shared memory segment in bytes. * @param m The shared memory segment from which to retrieve * the segment length. */ APR_DECLARE(apr_size_t) apr_shm_size_get(const apr_shm_t *m); /** * Get the pool used by this shared memory segment. */ APR_POOL_DECLARE_ACCESSOR(shm); /** @} */ #ifdef __cplusplus } #endif #endif /* APR_SHM_T */ include/apr-1/apr_signal.h000444 000000 000000 00000005304 11035140626 015665 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_SIGNAL_H #define APR_SIGNAL_H /** * @file apr_signal.h * @brief APR Signal Handling */ #include "apr.h" #include "apr_pools.h" #if APR_HAVE_SIGNAL_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_signal Handling * @ingroup APR * @{ */ #if APR_HAVE_SIGACTION || defined(DOXYGEN) #if defined(DARWIN) && !defined(__cplusplus) && !defined(_ANSI_SOURCE) /* work around Darwin header file bugs * http://www.opensource.apple.com/bugs/X/BSD%20Kernel/2657228.html */ #undef SIG_DFL #undef SIG_IGN #undef SIG_ERR #define SIG_DFL (void (*)(int))0 #define SIG_IGN (void (*)(int))1 #define SIG_ERR (void (*)(int))-1 #endif /** Function prototype for signal handlers */ typedef void apr_sigfunc_t(int); /** * Set the signal handler function for a given signal * @param signo The signal (eg... SIGWINCH) * @param func the function to get called */ APR_DECLARE(apr_sigfunc_t *) apr_signal(int signo, apr_sigfunc_t * func); #if defined(SIG_IGN) && !defined(SIG_ERR) #define SIG_ERR ((apr_sigfunc_t *) -1) #endif #else /* !APR_HAVE_SIGACTION */ #define apr_signal(a, b) signal(a, b) #endif /** * Get the description for a specific signal number * @param signum The signal number * @return The description of the signal */ APR_DECLARE(const char *) apr_signal_description_get(int signum); /** * APR-private function for initializing the signal package * @internal * @param pglobal The internal, global pool */ void apr_signal_init(apr_pool_t *pglobal); /** * Block the delivery of a particular signal * @param signum The signal number * @return status */ APR_DECLARE(apr_status_t) apr_signal_block(int signum); /** * Enable the delivery of a particular signal * @param signum The signal number * @return status */ APR_DECLARE(apr_status_t) apr_signal_unblock(int signum); /** @} */ #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* APR_SIGNAL_H */ include/apr-1/apr_strings.h000444 000000 000000 00000033035 11035140626 016103 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* Portions of this file are covered by */ /* -*- mode: c; c-file-style: "k&r" -*- strnatcmp.c -- Perform 'natural order' comparisons of strings in C. Copyright (C) 2000 by Martin Pool This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ #ifndef APR_STRINGS_H #define APR_STRINGS_H /** * @file apr_strings.h * @brief APR Strings library */ #include "apr.h" #include "apr_errno.h" #include "apr_pools.h" #define APR_WANT_IOVEC #include "apr_want.h" #if APR_HAVE_STDARG_H #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_strings String routines * @ingroup APR * @{ */ /** * Do a natural order comparison of two strings. * @param a The first string to compare * @param b The second string to compare * @return Either <0, 0, or >0. If the first string is less than the second * this returns <0, if they are equivalent it returns 0, and if the * first string is greater than second string it retuns >0. */ APR_DECLARE(int) apr_strnatcmp(char const *a, char const *b); /** * Do a natural order comparison of two strings ignoring the case of the * strings. * @param a The first string to compare * @param b The second string to compare * @return Either <0, 0, or >0. If the first string is less than the second * this returns <0, if they are equivalent it returns 0, and if the * first string is greater than second string it retuns >0. */ APR_DECLARE(int) apr_strnatcasecmp(char const *a, char const *b); /** * duplicate a string into memory allocated out of a pool * @param p The pool to allocate out of * @param s The string to duplicate * @return The new string */ APR_DECLARE(char *) apr_pstrdup(apr_pool_t *p, const char *s); /** * Create a null-terminated string by making a copy of a sequence * of characters and appending a null byte * @param p The pool to allocate out of * @param s The block of characters to duplicate * @param n The number of characters to duplicate * @return The new string * @remark This is a faster alternative to apr_pstrndup, for use * when you know that the string being duplicated really * has 'n' or more characters. If the string might contain * fewer characters, use apr_pstrndup. */ APR_DECLARE(char *) apr_pstrmemdup(apr_pool_t *p, const char *s, apr_size_t n); /** * Duplicate at most n characters of a string into memory allocated * out of a pool; the new string will be NUL-terminated * @param p The pool to allocate out of * @param s The string to duplicate * @param n The maximum number of characters to duplicate * @return The new string * @remark The amount of memory allocated from the pool is the length * of the returned string including the NUL terminator */ APR_DECLARE(char *) apr_pstrndup(apr_pool_t *p, const char *s, apr_size_t n); /** * Duplicate a block of memory. * * @param p The pool to allocate from * @param m The memory to duplicate * @param n The number of bytes to duplicate * @return The new block of memory */ APR_DECLARE(void *) apr_pmemdup(apr_pool_t *p, const void *m, apr_size_t n); /** * Concatenate multiple strings, allocating memory out a pool * @param p The pool to allocate out of * @param ... The strings to concatenate. The final string must be NULL * @return The new string */ APR_DECLARE_NONSTD(char *) apr_pstrcat(apr_pool_t *p, ...); /** * Concatenate multiple strings specified in a writev-style vector * @param p The pool from which to allocate * @param vec The strings to concatenate * @param nvec The number of strings to concatenate * @param nbytes (output) strlen of new string (pass in NULL to omit) * @return The new string */ APR_DECLARE(char *) apr_pstrcatv(apr_pool_t *p, const struct iovec *vec, apr_size_t nvec, apr_size_t *nbytes); /** * printf-style style printing routine. The data is output to a string * allocated from a pool * @param p The pool to allocate out of * @param fmt The format of the string * @param ap The arguments to use while printing the data * @return The new string */ APR_DECLARE(char *) apr_pvsprintf(apr_pool_t *p, const char *fmt, va_list ap); /** * printf-style style printing routine. The data is output to a string * allocated from a pool * @param p The pool to allocate out of * @param fmt The format of the string * @param ... The arguments to use while printing the data * @return The new string */ APR_DECLARE_NONSTD(char *) apr_psprintf(apr_pool_t *p, const char *fmt, ...) __attribute__((format(printf,2,3))); /** * Copy up to dst_size characters from src to dst; does not copy * past a NUL terminator in src, but always terminates dst with a NUL * regardless. * @param dst The destination string * @param src The source string * @param dst_size The space available in dst; dst always receives * NUL termination, so if src is longer than * dst_size, the actual number of characters copied is * dst_size - 1. * @return Pointer to the NUL terminator of the destination string, dst * @remark *
 * Note the differences between this function and strncpy():
 *  1) strncpy() doesn't always NUL terminate; apr_cpystrn() does.
 *  2) strncpy() pads the destination string with NULs, which is often 
 *     unnecessary; apr_cpystrn() does not.
 *  3) strncpy() returns a pointer to the beginning of the dst string;
 *     apr_cpystrn() returns a pointer to the NUL terminator of dst, 
 *     to allow a check for truncation.
 * 
*/ APR_DECLARE(char *) apr_cpystrn(char *dst, const char *src, apr_size_t dst_size); /** * Strip spaces from a string * @param dest The destination string. It is okay to modify the string * in place. Namely dest == src * @param src The string to rid the spaces from. * @return The destination string, dest. */ APR_DECLARE(char *) apr_collapse_spaces(char *dest, const char *src); /** * Convert the arguments to a program from one string to an array of * strings terminated by a NULL pointer * @param arg_str The arguments to convert * @param argv_out Output location. This is a pointer to an array of strings. * @param token_context Pool to use. */ APR_DECLARE(apr_status_t) apr_tokenize_to_argv(const char *arg_str, char ***argv_out, apr_pool_t *token_context); /** * Split a string into separate null-terminated tokens. The tokens are * delimited in the string by one or more characters from the sep * argument. * @param str The string to separate; this should be specified on the * first call to apr_strtok() for a given string, and NULL * on subsequent calls. * @param sep The set of delimiters * @param last Internal state saved by apr_strtok() between calls. * @return The next token from the string */ APR_DECLARE(char *) apr_strtok(char *str, const char *sep, char **last); /** * @defgroup APR_Strings_Snprintf snprintf implementations * @warning * These are snprintf implementations based on apr_vformatter(). * * Note that various standards and implementations disagree on the return * value of snprintf, and side-effects due to %n in the formatting string. * apr_snprintf (and apr_vsnprintf) behaves as follows: * * Process the format string until the entire string is exhausted, or * the buffer fills. If the buffer fills then stop processing immediately * (so no further %n arguments are processed), and return the buffer * length. In all cases the buffer is NUL terminated. It will return the * number of characters inserted into the buffer, not including the * terminating NUL. As a special case, if len is 0, apr_snprintf will * return the number of characters that would have been inserted if * the buffer had been infinite (in this case, *buffer can be NULL) * * In no event does apr_snprintf return a negative number. * @{ */ /** * snprintf routine based on apr_vformatter. This means it understands the * same extensions. * @param buf The buffer to write to * @param len The size of the buffer * @param format The format string * @param ... The arguments to use to fill out the format string. */ APR_DECLARE_NONSTD(int) apr_snprintf(char *buf, apr_size_t len, const char *format, ...) __attribute__((format(printf,3,4))); /** * vsnprintf routine based on apr_vformatter. This means it understands the * same extensions. * @param buf The buffer to write to * @param len The size of the buffer * @param format The format string * @param ap The arguments to use to fill out the format string. */ APR_DECLARE(int) apr_vsnprintf(char *buf, apr_size_t len, const char *format, va_list ap); /** @} */ /** * create a string representation of an int, allocated from a pool * @param p The pool from which to allocate * @param n The number to format * @return The string representation of the number */ APR_DECLARE(char *) apr_itoa(apr_pool_t *p, int n); /** * create a string representation of a long, allocated from a pool * @param p The pool from which to allocate * @param n The number to format * @return The string representation of the number */ APR_DECLARE(char *) apr_ltoa(apr_pool_t *p, long n); /** * create a string representation of an apr_off_t, allocated from a pool * @param p The pool from which to allocate * @param n The number to format * @return The string representation of the number */ APR_DECLARE(char *) apr_off_t_toa(apr_pool_t *p, apr_off_t n); /** * Convert a numeric string into an apr_off_t numeric value. * @param offset The value of the parsed string. * @param buf The string to parse. It may contain optional whitespace, * followed by an optional '+' (positive, default) or '-' (negative) * character, followed by an optional '0x' prefix if base is 0 or 16, * followed by numeric digits appropriate for base. * @param end A pointer to the end of the valid character in buf. If * not NULL, it is set to the first invalid character in buf. * @param base A numeric base in the range between 2 and 36 inclusive, * or 0. If base is zero, buf will be treated as base ten unless its * digits are prefixed with '0x', in which case it will be treated as * base 16. */ APR_DECLARE(apr_status_t) apr_strtoff(apr_off_t *offset, const char *buf, char **end, int base); /** * parse a numeric string into a 64-bit numeric value * @param buf The string to parse. It may contain optional whitespace, * followed by an optional '+' (positive, default) or '-' (negative) * character, followed by an optional '0x' prefix if base is 0 or 16, * followed by numeric digits appropriate for base. * @param end A pointer to the end of the valid character in buf. If * not NULL, it is set to the first invalid character in buf. * @param base A numeric base in the range between 2 and 36 inclusive, * or 0. If base is zero, buf will be treated as base ten unless its * digits are prefixed with '0x', in which case it will be treated as * base 16. * @return The numeric value of the string. On overflow, errno is set * to ERANGE. */ APR_DECLARE(apr_int64_t) apr_strtoi64(const char *buf, char **end, int base); /** * parse a base-10 numeric string into a 64-bit numeric value. * Equivalent to apr_strtoi64(buf, (char**)NULL, 10). * @param buf The string to parse * @return The numeric value of the string */ APR_DECLARE(apr_int64_t) apr_atoi64(const char *buf); /** * Format a binary size (magnitiudes are 2^10 rather than 10^3) from an apr_off_t, * as bytes, K, M, T, etc, to a four character compacted human readable string. * @param size The size to format * @param buf The 5 byte text buffer (counting the trailing null) * @return The buf passed to apr_strfsize() * @remark All negative sizes report ' - ', apr_strfsize only formats positive values. */ APR_DECLARE(char *) apr_strfsize(apr_off_t size, char *buf); /** @} */ #ifdef __cplusplus } #endif #endif /* !APR_STRINGS_H */ include/apr-1/apr_support.h000444 000000 000000 00000002603 11035140626 016123 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_SUPPORT_H #define APR_SUPPORT_H /** * @file apr_support.h * @brief APR Support functions */ #include "apr.h" #include "apr_network_io.h" #include "apr_file_io.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_support Internal APR support functions * @ingroup APR * @{ */ /** * Wait for IO to occur or timeout. * * Uses POOL for temporary allocations. */ apr_status_t apr_wait_for_io_or_timeout(apr_file_t *f, apr_socket_t *s, int for_read); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_SUPPORT_H */ include/apr-1/apr_tables.h000444 000000 000000 00000036522 11035140626 015670 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_TABLES_H #define APR_TABLES_H /** * @file apr_tables.h * @brief APR Table library */ #include "apr.h" #include "apr_pools.h" #if APR_HAVE_STDARG_H #include /* for va_list */ #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_tables Table and Array Functions * @ingroup APR * Tables are used to store entirely opaque structures * for applications, while Arrays are usually used to * deal with string lists. * @{ */ /** the table abstract data type */ typedef struct apr_table_t apr_table_t; /** @see apr_array_header_t */ typedef struct apr_array_header_t apr_array_header_t; /** An opaque array type */ struct apr_array_header_t { /** The pool the array is allocated out of */ apr_pool_t *pool; /** The amount of memory allocated for each element of the array */ int elt_size; /** The number of active elements in the array */ int nelts; /** The number of elements allocated in the array */ int nalloc; /** The elements in the array */ char *elts; }; /** * The (opaque) structure for string-content tables. */ typedef struct apr_table_entry_t apr_table_entry_t; /** The type for each entry in a string-content table */ struct apr_table_entry_t { /** The key for the current table entry */ char *key; /* maybe NULL in future; * check when iterating thru table_elts */ /** The value for the current table entry */ char *val; /** A checksum for the key, for use by the apr_table internals */ apr_uint32_t key_checksum; }; /** * Get the elements from a table * @param t The table * @return An array containing the contents of the table */ APR_DECLARE(const apr_array_header_t *) apr_table_elts(const apr_table_t *t); /** * Determine if the table is empty * @param t The table to check * @return True if empty, False otherwise */ APR_DECLARE(int) apr_is_empty_table(const apr_table_t *t); /** * Determine if the array is empty * @param a The array to check * @return True if empty, False otherwise */ APR_DECLARE(int) apr_is_empty_array(const apr_array_header_t *a); /** * Create an array * @param p The pool to allocate the memory out of * @param nelts the number of elements in the initial array * @param elt_size The size of each element in the array. * @return The new array */ APR_DECLARE(apr_array_header_t *) apr_array_make(apr_pool_t *p, int nelts, int elt_size); /** * Add a new element to an array (as a first-in, last-out stack) * @param arr The array to add an element to. * @return Location for the new element in the array. * @remark If there are no free spots in the array, then this function will * allocate new space for the new element. */ APR_DECLARE(void *) apr_array_push(apr_array_header_t *arr); /** * Remove an element from an array (as a first-in, last-out stack) * @param arr The array to remove an element from. * @return Location of the element in the array. * @remark If there are no elements in the array, NULL is returned. */ APR_DECLARE(void *) apr_array_pop(apr_array_header_t *arr); /** * Concatenate two arrays together * @param dst The destination array, and the one to go first in the combined * array * @param src The source array to add to the destination array */ APR_DECLARE(void) apr_array_cat(apr_array_header_t *dst, const apr_array_header_t *src); /** * Copy the entire array * @param p The pool to allocate the copy of the array out of * @param arr The array to copy * @return An exact copy of the array passed in * @remark The alternate apr_array_copy_hdr copies only the header, and arranges * for the elements to be copied if (and only if) the code subsequently * does a push or arraycat. */ APR_DECLARE(apr_array_header_t *) apr_array_copy(apr_pool_t *p, const apr_array_header_t *arr); /** * Copy the headers of the array, and arrange for the elements to be copied if * and only if the code subsequently does a push or arraycat. * @param p The pool to allocate the copy of the array out of * @param arr The array to copy * @return An exact copy of the array passed in * @remark The alternate apr_array_copy copies the *entire* array. */ APR_DECLARE(apr_array_header_t *) apr_array_copy_hdr(apr_pool_t *p, const apr_array_header_t *arr); /** * Append one array to the end of another, creating a new array in the process. * @param p The pool to allocate the new array out of * @param first The array to put first in the new array. * @param second The array to put second in the new array. * @return A new array containing the data from the two arrays passed in. */ APR_DECLARE(apr_array_header_t *) apr_array_append(apr_pool_t *p, const apr_array_header_t *first, const apr_array_header_t *second); /** * Generates a new string from the apr_pool_t containing the concatenated * sequence of substrings referenced as elements within the array. The string * will be empty if all substrings are empty or null, or if there are no * elements in the array. If sep is non-NUL, it will be inserted between * elements as a separator. * @param p The pool to allocate the string out of * @param arr The array to generate the string from * @param sep The separator to use * @return A string containing all of the data in the array. */ APR_DECLARE(char *) apr_array_pstrcat(apr_pool_t *p, const apr_array_header_t *arr, const char sep); /** * Make a new table * @param p The pool to allocate the pool out of * @param nelts The number of elements in the initial table. * @return The new table. * @warning This table can only store text data */ APR_DECLARE(apr_table_t *) apr_table_make(apr_pool_t *p, int nelts); /** * Create a new table and copy another table into it * @param p The pool to allocate the new table out of * @param t The table to copy * @return A copy of the table passed in */ APR_DECLARE(apr_table_t *) apr_table_copy(apr_pool_t *p, const apr_table_t *t); /** * Delete all of the elements from a table * @param t The table to clear */ APR_DECLARE(void) apr_table_clear(apr_table_t *t); /** * Get the value associated with a given key from the table. After this call, * The data is still in the table * @param t The table to search for the key * @param key The key to search for * @return The value associated with the key, or NULL if the key does not exist. */ APR_DECLARE(const char *) apr_table_get(const apr_table_t *t, const char *key); /** * Add a key/value pair to a table, if another element already exists with the * same key, this will over-write the old data. * @param t The table to add the data to. * @param key The key fo use * @param val The value to add * @remark When adding data, this function makes a copy of both the key and the * value. */ APR_DECLARE(void) apr_table_set(apr_table_t *t, const char *key, const char *val); /** * Add a key/value pair to a table, if another element already exists with the * same key, this will over-write the old data. * @param t The table to add the data to. * @param key The key to use * @param val The value to add * @warning When adding data, this function does not make a copy of the key or * the value, so care should be taken to ensure that the values will * not change after they have been added.. */ APR_DECLARE(void) apr_table_setn(apr_table_t *t, const char *key, const char *val); /** * Remove data from the table * @param t The table to remove data from * @param key The key of the data being removed */ APR_DECLARE(void) apr_table_unset(apr_table_t *t, const char *key); /** * Add data to a table by merging the value with data that has already been * stored * @param t The table to search for the data * @param key The key to merge data for * @param val The data to add * @remark If the key is not found, then this function acts like apr_table_add */ APR_DECLARE(void) apr_table_merge(apr_table_t *t, const char *key, const char *val); /** * Add data to a table by merging the value with data that has already been * stored * @param t The table to search for the data * @param key The key to merge data for * @param val The data to add * @remark If the key is not found, then this function acts like apr_table_addn */ APR_DECLARE(void) apr_table_mergen(apr_table_t *t, const char *key, const char *val); /** * Add data to a table, regardless of whether there is another element with the * same key. * @param t The table to add to * @param key The key to use * @param val The value to add. * @remark When adding data, this function makes a copy of both the key and the * value. */ APR_DECLARE(void) apr_table_add(apr_table_t *t, const char *key, const char *val); /** * Add data to a table, regardless of whether there is another element with the * same key. * @param t The table to add to * @param key The key to use * @param val The value to add. * @remark When adding data, this function does not make a copy of the key or the * value, so care should be taken to ensure that the values will not * change after they have been added.. */ APR_DECLARE(void) apr_table_addn(apr_table_t *t, const char *key, const char *val); /** * Merge two tables into one new table * @param p The pool to use for the new table * @param overlay The first table to put in the new table * @param base The table to add at the end of the new table * @return A new table containing all of the data from the two passed in */ APR_DECLARE(apr_table_t *) apr_table_overlay(apr_pool_t *p, const apr_table_t *overlay, const apr_table_t *base); /** * Declaration prototype for the iterator callback function of apr_table_do() * and apr_table_vdo(). * @param rec The data passed as the first argument to apr_table_[v]do() * @param key The key from this iteration of the table * @param value The value from this iteration of the table * @remark Iteration continues while this callback function returns non-zero. * To export the callback function for apr_table_[v]do() it must be declared * in the _NONSTD convention. */ typedef int (apr_table_do_callback_fn_t)(void *rec, const char *key, const char *value); /** * Iterate over a table running the provided function once for every * element in the table. If there is data passed in as a vararg, then the * function is only run on those elements whose key matches something in * the vararg. If the vararg is NULL, then every element is run through the * function. Iteration continues while the function returns non-zero. * @param comp The function to run * @param rec The data to pass as the first argument to the function * @param t The table to iterate over * @param ... The vararg. If this is NULL, then all elements in the table are * run through the function, otherwise only those whose key matches * are run. * @return FALSE if one of the comp() iterations returned zero; TRUE if all * iterations returned non-zero * @see apr_table_do_callback_fn_t */ APR_DECLARE_NONSTD(int) apr_table_do(apr_table_do_callback_fn_t *comp, void *rec, const apr_table_t *t, ...); /** * Iterate over a table running the provided function once for every * element in the table. If there is data passed in as a vararg, then the * function is only run on those element's whose key matches something in * the vararg. If the vararg is NULL, then every element is run through the * function. Iteration continues while the function returns non-zero. * @param comp The function to run * @param rec The data to pass as the first argument to the function * @param t The table to iterate over * @param vp The vararg table. If this is NULL, then all elements in the * table are run through the function, otherwise only those * whose key matches are run. * @return FALSE if one of the comp() iterations returned zero; TRUE if all * iterations returned non-zero * @see apr_table_do_callback_fn_t */ APR_DECLARE(int) apr_table_vdo(apr_table_do_callback_fn_t *comp, void *rec, const apr_table_t *t, va_list vp); /** flag for overlap to use apr_table_setn */ #define APR_OVERLAP_TABLES_SET (0) /** flag for overlap to use apr_table_mergen */ #define APR_OVERLAP_TABLES_MERGE (1) /** * For each element in table b, either use setn or mergen to add the data * to table a. Which method is used is determined by the flags passed in. * @param a The table to add the data to. * @param b The table to iterate over, adding its data to table a * @param flags How to add the table to table a. One of: * APR_OVERLAP_TABLES_SET Use apr_table_setn * APR_OVERLAP_TABLES_MERGE Use apr_table_mergen * @remark This function is highly optimized, and uses less memory and CPU cycles * than a function that just loops through table b calling other functions. */ /** *
 * Conceptually, apr_table_overlap does this:
 *
 *  apr_array_header_t *barr = apr_table_elts(b);
 *  apr_table_entry_t *belt = (apr_table_entry_t *)barr->elts;
 *  int i;
 *
 *  for (i = 0; i < barr->nelts; ++i) {
 *      if (flags & APR_OVERLAP_TABLES_MERGE) {
 *          apr_table_mergen(a, belt[i].key, belt[i].val);
 *      }
 *      else {
 *          apr_table_setn(a, belt[i].key, belt[i].val);
 *      }
 *  }
 *
 *  Except that it is more efficient (less space and cpu-time) especially
 *  when b has many elements.
 *
 *  Notice the assumptions on the keys and values in b -- they must be
 *  in an ancestor of a's pool.  In practice b and a are usually from
 *  the same pool.
 * 
*/ APR_DECLARE(void) apr_table_overlap(apr_table_t *a, const apr_table_t *b, unsigned flags); /** * Eliminate redundant entries in a table by either overwriting * or merging duplicates * * @param t Table. * @param flags APR_OVERLAP_TABLES_MERGE to merge, or * APR_OVERLAP_TABLES_SET to overwrite */ APR_DECLARE(void) apr_table_compress(apr_table_t *t, unsigned flags); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_TABLES_H */ include/apr-1/apr_thread_cond.h000444 000000 000000 00000012110 11035140626 016653 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_THREAD_COND_H #define APR_THREAD_COND_H /** * @file apr_thread_cond.h * @brief APR Condition Variable Routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #include "apr_time.h" #include "apr_thread_mutex.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if APR_HAS_THREADS || defined(DOXYGEN) /** * @defgroup apr_thread_cond Condition Variable Routines * @ingroup APR * @{ */ /** Opaque structure for thread condition variables */ typedef struct apr_thread_cond_t apr_thread_cond_t; /** * Note: destroying a condition variable (or likewise, destroying or * clearing the pool from which a condition variable was allocated) if * any threads are blocked waiting on it gives undefined results. */ /** * Create and initialize a condition variable that can be used to signal * and schedule threads in a single process. * @param cond the memory address where the newly created condition variable * will be stored. * @param pool the pool from which to allocate the mutex. */ APR_DECLARE(apr_status_t) apr_thread_cond_create(apr_thread_cond_t **cond, apr_pool_t *pool); /** * Put the active calling thread to sleep until signaled to wake up. Each * condition variable must be associated with a mutex, and that mutex must * be locked before calling this function, or the behavior will be * undefined. As the calling thread is put to sleep, the given mutex * will be simultaneously released; and as this thread wakes up the lock * is again simultaneously acquired. * @param cond the condition variable on which to block. * @param mutex the mutex that must be locked upon entering this function, * is released while the thread is asleep, and is again acquired before * returning from this function. */ APR_DECLARE(apr_status_t) apr_thread_cond_wait(apr_thread_cond_t *cond, apr_thread_mutex_t *mutex); /** * Put the active calling thread to sleep until signaled to wake up or * the timeout is reached. Each condition variable must be associated * with a mutex, and that mutex must be locked before calling this * function, or the behavior will be undefined. As the calling thread * is put to sleep, the given mutex will be simultaneously released; * and as this thread wakes up the lock is again simultaneously acquired. * @param cond the condition variable on which to block. * @param mutex the mutex that must be locked upon entering this function, * is released while the thread is asleep, and is again acquired before * returning from this function. * @param timeout The amount of time in microseconds to wait. This is * a maximum, not a minimum. If the condition is signaled, we * will wake up before this time, otherwise the error APR_TIMEUP * is returned. */ APR_DECLARE(apr_status_t) apr_thread_cond_timedwait(apr_thread_cond_t *cond, apr_thread_mutex_t *mutex, apr_interval_time_t timeout); /** * Signals a single thread, if one exists, that is blocking on the given * condition variable. That thread is then scheduled to wake up and acquire * the associated mutex. Although it is not required, if predictable scheduling * is desired, that mutex must be locked while calling this function. * @param cond the condition variable on which to produce the signal. */ APR_DECLARE(apr_status_t) apr_thread_cond_signal(apr_thread_cond_t *cond); /** * Signals all threads blocking on the given condition variable. * Each thread that was signaled is then scheduled to wake up and acquire * the associated mutex. This will happen in a serialized manner. * @param cond the condition variable on which to produce the broadcast. */ APR_DECLARE(apr_status_t) apr_thread_cond_broadcast(apr_thread_cond_t *cond); /** * Destroy the condition variable and free the associated memory. * @param cond the condition variable to destroy. */ APR_DECLARE(apr_status_t) apr_thread_cond_destroy(apr_thread_cond_t *cond); /** * Get the pool used by this thread_cond. * @return apr_pool_t the pool */ APR_POOL_DECLARE_ACCESSOR(thread_cond); #endif /* APR_HAS_THREADS */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_THREAD_COND_H */ include/apr-1/apr_thread_mutex.h000444 000000 000000 00000007374 11035140626 017112 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_THREAD_MUTEX_H #define APR_THREAD_MUTEX_H /** * @file apr_thread_mutex.h * @brief APR Thread Mutex Routines */ #include "apr.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if APR_HAS_THREADS || defined(DOXYGEN) /** * @defgroup apr_thread_mutex Thread Mutex Routines * @ingroup APR * @{ */ /** Opaque thread-local mutex structure */ typedef struct apr_thread_mutex_t apr_thread_mutex_t; #define APR_THREAD_MUTEX_DEFAULT 0x0 /**< platform-optimal lock behavior */ #define APR_THREAD_MUTEX_NESTED 0x1 /**< enable nested (recursive) locks */ #define APR_THREAD_MUTEX_UNNESTED 0x2 /**< disable nested locks */ /* Delayed the include to avoid a circular reference */ #include "apr_pools.h" /** * Create and initialize a mutex that can be used to synchronize threads. * @param mutex the memory address where the newly created mutex will be * stored. * @param flags Or'ed value of: *
 *           APR_THREAD_MUTEX_DEFAULT   platform-optimal lock behavior.
 *           APR_THREAD_MUTEX_NESTED    enable nested (recursive) locks.
 *           APR_THREAD_MUTEX_UNNESTED  disable nested locks (non-recursive).
 * 
* @param pool the pool from which to allocate the mutex. * @warning Be cautious in using APR_THREAD_MUTEX_DEFAULT. While this is the * most optimial mutex based on a given platform's performance charateristics, * it will behave as either a nested or an unnested lock. */ APR_DECLARE(apr_status_t) apr_thread_mutex_create(apr_thread_mutex_t **mutex, unsigned int flags, apr_pool_t *pool); /** * Acquire the lock for the given mutex. If the mutex is already locked, * the current thread will be put to sleep until the lock becomes available. * @param mutex the mutex on which to acquire the lock. */ APR_DECLARE(apr_status_t) apr_thread_mutex_lock(apr_thread_mutex_t *mutex); /** * Attempt to acquire the lock for the given mutex. If the mutex has already * been acquired, the call returns immediately with APR_EBUSY. Note: it * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine * if the return value was APR_EBUSY, for portability reasons. * @param mutex the mutex on which to attempt the lock acquiring. */ APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex); /** * Release the lock for the given mutex. * @param mutex the mutex from which to release the lock. */ APR_DECLARE(apr_status_t) apr_thread_mutex_unlock(apr_thread_mutex_t *mutex); /** * Destroy the mutex and free the memory associated with the lock. * @param mutex the mutex to destroy. */ APR_DECLARE(apr_status_t) apr_thread_mutex_destroy(apr_thread_mutex_t *mutex); /** * Get the pool used by this thread_mutex. * @return apr_pool_t the pool */ APR_POOL_DECLARE_ACCESSOR(thread_mutex); #endif /* APR_HAS_THREADS */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_THREAD_MUTEX_H */ include/apr-1/apr_thread_proc.h000444 000000 000000 00000101235 11035140626 016702 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_THREAD_PROC_H #define APR_THREAD_PROC_H /** * @file apr_thread_proc.h * @brief APR Thread and Process Library */ #include "apr.h" #include "apr_file_io.h" #include "apr_pools.h" #include "apr_errno.h" #if APR_HAVE_STRUCT_RLIMIT #include #include #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_thread_proc Threads and Process Functions * @ingroup APR * @{ */ typedef enum { APR_SHELLCMD, /**< use the shell to invoke the program */ APR_PROGRAM, /**< invoke the program directly, no copied env */ APR_PROGRAM_ENV, /**< invoke the program, replicating our environment */ APR_PROGRAM_PATH, /**< find program on PATH, use our environment */ APR_SHELLCMD_ENV /**< use the shell to invoke the program, * replicating our environment */ } apr_cmdtype_e; typedef enum { APR_WAIT, /**< wait for the specified process to finish */ APR_NOWAIT /**< do not wait -- just see if it has finished */ } apr_wait_how_e; /* I am specifically calling out the values so that the macros below make * more sense. Yes, I know I don't need to, but I am hoping this makes what * I am doing more clear. If you want to add more reasons to exit, continue * to use bitmasks. */ typedef enum { APR_PROC_EXIT = 1, /**< process exited normally */ APR_PROC_SIGNAL = 2, /**< process exited due to a signal */ APR_PROC_SIGNAL_CORE = 4 /**< process exited and dumped a core file */ } apr_exit_why_e; /** did we exit the process */ #define APR_PROC_CHECK_EXIT(x) (x & APR_PROC_EXIT) /** did we get a signal */ #define APR_PROC_CHECK_SIGNALED(x) (x & APR_PROC_SIGNAL) /** did we get core */ #define APR_PROC_CHECK_CORE_DUMP(x) (x & APR_PROC_SIGNAL_CORE) /** @see apr_procattr_io_set */ #define APR_NO_PIPE 0 /** @see apr_procattr_io_set */ #define APR_FULL_BLOCK 1 /** @see apr_procattr_io_set */ #define APR_FULL_NONBLOCK 2 /** @see apr_procattr_io_set */ #define APR_PARENT_BLOCK 3 /** @see apr_procattr_io_set */ #define APR_CHILD_BLOCK 4 /** @see apr_procattr_limit_set */ #define APR_LIMIT_CPU 0 /** @see apr_procattr_limit_set */ #define APR_LIMIT_MEM 1 /** @see apr_procattr_limit_set */ #define APR_LIMIT_NPROC 2 /** @see apr_procattr_limit_set */ #define APR_LIMIT_NOFILE 3 /** * @defgroup APR_OC Other Child Flags * @{ */ #define APR_OC_REASON_DEATH 0 /**< child has died, caller must call * unregister still */ #define APR_OC_REASON_UNWRITABLE 1 /**< write_fd is unwritable */ #define APR_OC_REASON_RESTART 2 /**< a restart is occuring, perform * any necessary cleanup (including * sending a special signal to child) */ #define APR_OC_REASON_UNREGISTER 3 /**< unregister has been called, do * whatever is necessary (including * kill the child) */ #define APR_OC_REASON_LOST 4 /**< somehow the child exited without * us knowing ... buggy os? */ #define APR_OC_REASON_RUNNING 5 /**< a health check is occuring, * for most maintainence functions * this is a no-op. */ /** @} */ /** The APR process type */ typedef struct apr_proc_t { /** The process ID */ pid_t pid; /** Parent's side of pipe to child's stdin */ apr_file_t *in; /** Parent's side of pipe to child's stdout */ apr_file_t *out; /** Parent's side of pipe to child's stdouterr */ apr_file_t *err; #if APR_HAS_PROC_INVOKED || defined(DOXYGEN) /** Diagnositics/debugging string of the command invoked for * this process [only present if APR_HAS_PROC_INVOKED is true] * @remark Only enabled on Win32 by default. * @bug This should either always or never be present in release * builds - since it breaks binary compatibility. We may enable * it always in APR 1.0 yet leave it undefined in most cases. */ char *invoked; #endif #if defined(WIN32) || defined(DOXYGEN) /** (Win32 only) Creator's handle granting access to the process * @remark This handle is closed and reset to NULL in every case * corresponding to a waitpid() on Unix which returns the exit status. * Therefore Win32 correspond's to Unix's zombie reaping characteristics * and avoids potential handle leaks. */ HANDLE hproc; #endif } apr_proc_t; /** * The prototype for APR child errfn functions. (See the description * of apr_procattr_child_errfn_set() for more information.) * It is passed the following parameters: * @param pool Pool associated with the apr_proc_t. If your child * error function needs user data, associate it with this * pool. * @param err APR error code describing the error * @param description Text description of type of processing which failed */ typedef void (apr_child_errfn_t)(apr_pool_t *proc, apr_status_t err, const char *description); /** Opaque Thread structure. */ typedef struct apr_thread_t apr_thread_t; /** Opaque Thread attributes structure. */ typedef struct apr_threadattr_t apr_threadattr_t; /** Opaque Process attributes structure. */ typedef struct apr_procattr_t apr_procattr_t; /** Opaque control variable for one-time atomic variables. */ typedef struct apr_thread_once_t apr_thread_once_t; /** Opaque thread private address space. */ typedef struct apr_threadkey_t apr_threadkey_t; /** Opaque record of child process. */ typedef struct apr_other_child_rec_t apr_other_child_rec_t; /** * The prototype for any APR thread worker functions. */ typedef void *(APR_THREAD_FUNC *apr_thread_start_t)(apr_thread_t*, void*); typedef enum { APR_KILL_NEVER, /**< process is never sent any signals */ APR_KILL_ALWAYS, /**< process is sent SIGKILL on apr_pool_t cleanup */ APR_KILL_AFTER_TIMEOUT, /**< SIGTERM, wait 3 seconds, SIGKILL */ APR_JUST_WAIT, /**< wait forever for the process to complete */ APR_KILL_ONLY_ONCE /**< send SIGTERM and then wait */ } apr_kill_conditions_e; /* Thread Function definitions */ #if APR_HAS_THREADS /** * Create and initialize a new threadattr variable * @param new_attr The newly created threadattr. * @param cont The pool to use */ APR_DECLARE(apr_status_t) apr_threadattr_create(apr_threadattr_t **new_attr, apr_pool_t *cont); /** * Set if newly created threads should be created in detached state. * @param attr The threadattr to affect * @param on Non-zero if detached threads should be created. */ APR_DECLARE(apr_status_t) apr_threadattr_detach_set(apr_threadattr_t *attr, apr_int32_t on); /** * Get the detach state for this threadattr. * @param attr The threadattr to reference * @return APR_DETACH if threads are to be detached, or APR_NOTDETACH * if threads are to be joinable. */ APR_DECLARE(apr_status_t) apr_threadattr_detach_get(apr_threadattr_t *attr); /** * Set the stack size of newly created threads. * @param attr The threadattr to affect * @param stacksize The stack size in bytes */ APR_DECLARE(apr_status_t) apr_threadattr_stacksize_set(apr_threadattr_t *attr, apr_size_t stacksize); /** * Set the stack guard area size of newly created threads. * @param attr The threadattr to affect * @param guardsize The stack guard area size in bytes * @note Thread library implementations commonly use a "guard area" * after each thread's stack which is not readable or writable such that * stack overflows cause a segfault; this consumes e.g. 4K of memory * and increases memory management overhead. Setting the guard area * size to zero hence trades off reliable behaviour on stack overflow * for performance. */ APR_DECLARE(apr_status_t) apr_threadattr_guardsize_set(apr_threadattr_t *attr, apr_size_t guardsize); /** * Create a new thread of execution * @param new_thread The newly created thread handle. * @param attr The threadattr to use to determine how to create the thread * @param func The function to start the new thread in * @param data Any data to be passed to the starting function * @param cont The pool to use */ APR_DECLARE(apr_status_t) apr_thread_create(apr_thread_t **new_thread, apr_threadattr_t *attr, apr_thread_start_t func, void *data, apr_pool_t *cont); /** * stop the current thread * @param thd The thread to stop * @param retval The return value to pass back to any thread that cares */ APR_DECLARE(apr_status_t) apr_thread_exit(apr_thread_t *thd, apr_status_t retval); /** * block until the desired thread stops executing. * @param retval The return value from the dead thread. * @param thd The thread to join */ APR_DECLARE(apr_status_t) apr_thread_join(apr_status_t *retval, apr_thread_t *thd); /** * force the current thread to yield the processor */ APR_DECLARE(void) apr_thread_yield(void); /** * Initialize the control variable for apr_thread_once. If this isn't * called, apr_initialize won't work. * @param control The control variable to initialize * @param p The pool to allocate data from. */ APR_DECLARE(apr_status_t) apr_thread_once_init(apr_thread_once_t **control, apr_pool_t *p); /** * Run the specified function one time, regardless of how many threads * call it. * @param control The control variable. The same variable should * be passed in each time the function is tried to be * called. This is how the underlying functions determine * if the function has ever been called before. * @param func The function to call. */ APR_DECLARE(apr_status_t) apr_thread_once(apr_thread_once_t *control, void (*func)(void)); /** * detach a thread * @param thd The thread to detach */ APR_DECLARE(apr_status_t) apr_thread_detach(apr_thread_t *thd); /** * Return the pool associated with the current thread. * @param data The user data associated with the thread. * @param key The key to associate with the data * @param thread The currently open thread. */ APR_DECLARE(apr_status_t) apr_thread_data_get(void **data, const char *key, apr_thread_t *thread); /** * Return the pool associated with the current thread. * @param data The user data to associate with the thread. * @param key The key to use for associating the data with the thread * @param cleanup The cleanup routine to use when the thread is destroyed. * @param thread The currently open thread. */ APR_DECLARE(apr_status_t) apr_thread_data_set(void *data, const char *key, apr_status_t (*cleanup) (void *), apr_thread_t *thread); /** * Create and initialize a new thread private address space * @param key The thread private handle. * @param dest The destructor to use when freeing the private memory. * @param cont The pool to use */ APR_DECLARE(apr_status_t) apr_threadkey_private_create(apr_threadkey_t **key, void (*dest)(void *), apr_pool_t *cont); /** * Get a pointer to the thread private memory * @param new_mem The data stored in private memory * @param key The handle for the desired thread private memory */ APR_DECLARE(apr_status_t) apr_threadkey_private_get(void **new_mem, apr_threadkey_t *key); /** * Set the data to be stored in thread private memory * @param priv The data to be stored in private memory * @param key The handle for the desired thread private memory */ APR_DECLARE(apr_status_t) apr_threadkey_private_set(void *priv, apr_threadkey_t *key); /** * Free the thread private memory * @param key The handle for the desired thread private memory */ APR_DECLARE(apr_status_t) apr_threadkey_private_delete(apr_threadkey_t *key); /** * Return the pool associated with the current threadkey. * @param data The user data associated with the threadkey. * @param key The key associated with the data * @param threadkey The currently open threadkey. */ APR_DECLARE(apr_status_t) apr_threadkey_data_get(void **data, const char *key, apr_threadkey_t *threadkey); /** * Return the pool associated with the current threadkey. * @param data The data to set. * @param key The key to associate with the data. * @param cleanup The cleanup routine to use when the file is destroyed. * @param threadkey The currently open threadkey. */ APR_DECLARE(apr_status_t) apr_threadkey_data_set(void *data, const char *key, apr_status_t (*cleanup) (void *), apr_threadkey_t *threadkey); #endif /** * Create and initialize a new procattr variable * @param new_attr The newly created procattr. * @param cont The pool to use */ APR_DECLARE(apr_status_t) apr_procattr_create(apr_procattr_t **new_attr, apr_pool_t *cont); /** * Determine if any of stdin, stdout, or stderr should be linked to pipes * when starting a child process. * @param attr The procattr we care about. * @param in Should stdin be a pipe back to the parent? * @param out Should stdout be a pipe back to the parent? * @param err Should stderr be a pipe back to the parent? */ APR_DECLARE(apr_status_t) apr_procattr_io_set(apr_procattr_t *attr, apr_int32_t in, apr_int32_t out, apr_int32_t err); /** * Set the child_in and/or parent_in values to existing apr_file_t values. * @param attr The procattr we care about. * @param child_in apr_file_t value to use as child_in. Must be a valid file. * @param parent_in apr_file_t value to use as parent_in. Must be a valid file. * @remark This is NOT a required initializer function. This is * useful if you have already opened a pipe (or multiple files) * that you wish to use, perhaps persistently across multiple * process invocations - such as a log file. You can save some * extra function calls by not creating your own pipe since this * creates one in the process space for you. */ APR_DECLARE(apr_status_t) apr_procattr_child_in_set(struct apr_procattr_t *attr, apr_file_t *child_in, apr_file_t *parent_in); /** * Set the child_out and parent_out values to existing apr_file_t values. * @param attr The procattr we care about. * @param child_out apr_file_t value to use as child_out. Must be a valid file. * @param parent_out apr_file_t value to use as parent_out. Must be a valid file. * @remark This is NOT a required initializer function. This is * useful if you have already opened a pipe (or multiple files) * that you wish to use, perhaps persistently across multiple * process invocations - such as a log file. */ APR_DECLARE(apr_status_t) apr_procattr_child_out_set(struct apr_procattr_t *attr, apr_file_t *child_out, apr_file_t *parent_out); /** * Set the child_err and parent_err values to existing apr_file_t values. * @param attr The procattr we care about. * @param child_err apr_file_t value to use as child_err. Must be a valid file. * @param parent_err apr_file_t value to use as parent_err. Must be a valid file. * @remark This is NOT a required initializer function. This is * useful if you have already opened a pipe (or multiple files) * that you wish to use, perhaps persistently across multiple * process invocations - such as a log file. */ APR_DECLARE(apr_status_t) apr_procattr_child_err_set(struct apr_procattr_t *attr, apr_file_t *child_err, apr_file_t *parent_err); /** * Set which directory the child process should start executing in. * @param attr The procattr we care about. * @param dir Which dir to start in. By default, this is the same dir as * the parent currently resides in, when the createprocess call * is made. */ APR_DECLARE(apr_status_t) apr_procattr_dir_set(apr_procattr_t *attr, const char *dir); /** * Set what type of command the child process will call. * @param attr The procattr we care about. * @param cmd The type of command. One of: *
 *            APR_SHELLCMD     --  Anything that the shell can handle
 *            APR_PROGRAM      --  Executable program   (default) 
 *            APR_PROGRAM_ENV  --  Executable program, copy environment
 *            APR_PROGRAM_PATH --  Executable program on PATH, copy env
 * 
*/ APR_DECLARE(apr_status_t) apr_procattr_cmdtype_set(apr_procattr_t *attr, apr_cmdtype_e cmd); /** * Determine if the child should start in detached state. * @param attr The procattr we care about. * @param detach Should the child start in detached state? Default is no. */ APR_DECLARE(apr_status_t) apr_procattr_detach_set(apr_procattr_t *attr, apr_int32_t detach); #if APR_HAVE_STRUCT_RLIMIT /** * Set the Resource Utilization limits when starting a new process. * @param attr The procattr we care about. * @param what Which limit to set, one of: *
 *                 APR_LIMIT_CPU
 *                 APR_LIMIT_MEM
 *                 APR_LIMIT_NPROC
 *                 APR_LIMIT_NOFILE
 * 
* @param limit Value to set the limit to. */ APR_DECLARE(apr_status_t) apr_procattr_limit_set(apr_procattr_t *attr, apr_int32_t what, struct rlimit *limit); #endif /** * Specify an error function to be called in the child process if APR * encounters an error in the child prior to running the specified program. * @param attr The procattr describing the child process to be created. * @param errfn The function to call in the child process. * @remark At the present time, it will only be called from apr_proc_create() * on platforms where fork() is used. It will never be called on other * platforms, on those platforms apr_proc_create() will return the error * in the parent process rather than invoke the callback in the now-forked * child process. */ APR_DECLARE(apr_status_t) apr_procattr_child_errfn_set(apr_procattr_t *attr, apr_child_errfn_t *errfn); /** * Specify that apr_proc_create() should do whatever it can to report * failures to the caller of apr_proc_create(), rather than find out in * the child. * @param attr The procattr describing the child process to be created. * @param chk Flag to indicate whether or not extra work should be done * to try to report failures to the caller. * @remark This flag only affects apr_proc_create() on platforms where * fork() is used. This leads to extra overhead in the calling * process, but that may help the application handle such * errors more gracefully. */ APR_DECLARE(apr_status_t) apr_procattr_error_check_set(apr_procattr_t *attr, apr_int32_t chk); /** * Determine if the child should start in its own address space or using the * current one from its parent * @param attr The procattr we care about. * @param addrspace Should the child start in its own address space? Default * is no on NetWare and yes on other platforms. */ APR_DECLARE(apr_status_t) apr_procattr_addrspace_set(apr_procattr_t *attr, apr_int32_t addrspace); /** * Set the username used for running process * @param attr The procattr we care about. * @param username The username used * @param password User password if needed. Password is needed on WIN32 * or any other platform having * APR_PROCATTR_USER_SET_REQUIRES_PASSWORD set. */ APR_DECLARE(apr_status_t) apr_procattr_user_set(apr_procattr_t *attr, const char *username, const char *password); /** * Set the group used for running process * @param attr The procattr we care about. * @param groupname The group name used */ APR_DECLARE(apr_status_t) apr_procattr_group_set(apr_procattr_t *attr, const char *groupname); #if APR_HAS_FORK /** * This is currently the only non-portable call in APR. This executes * a standard unix fork. * @param proc The resulting process handle. * @param cont The pool to use. * @remark returns APR_INCHILD for the child, and APR_INPARENT for the parent * or an error. */ APR_DECLARE(apr_status_t) apr_proc_fork(apr_proc_t *proc, apr_pool_t *cont); #endif /** * Create a new process and execute a new program within that process. * @param new_proc The resulting process handle. * @param progname The program to run * @param args the arguments to pass to the new program. The first * one should be the program name. * @param env The new environment table for the new process. This * should be a list of NULL-terminated strings. This argument * is ignored for APR_PROGRAM_ENV, APR_PROGRAM_PATH, and * APR_SHELLCMD_ENV types of commands. * @param attr the procattr we should use to determine how to create the new * process * @param pool The pool to use. * @note This function returns without waiting for the new process to terminate; * use apr_proc_wait for that. */ APR_DECLARE(apr_status_t) apr_proc_create(apr_proc_t *new_proc, const char *progname, const char * const *args, const char * const *env, apr_procattr_t *attr, apr_pool_t *pool); /** * Wait for a child process to die * @param proc The process handle that corresponds to the desired child process * @param exitcode The returned exit status of the child, if a child process * dies, or the signal that caused the child to die. * On platforms that don't support obtaining this information, * the status parameter will be returned as APR_ENOTIMPL. * @param exitwhy Why the child died, the bitwise or of: *
 *            APR_PROC_EXIT         -- process terminated normally
 *            APR_PROC_SIGNAL       -- process was killed by a signal
 *            APR_PROC_SIGNAL_CORE  -- process was killed by a signal, and
 *                                     generated a core dump.
 * 
* @param waithow How should we wait. One of: *
 *            APR_WAIT   -- block until the child process dies.
 *            APR_NOWAIT -- return immediately regardless of if the 
 *                          child is dead or not.
 * 
* @remark The childs status is in the return code to this process. It is one of: *
 *            APR_CHILD_DONE     -- child is no longer running.
 *            APR_CHILD_NOTDONE  -- child is still running.
 * 
*/ APR_DECLARE(apr_status_t) apr_proc_wait(apr_proc_t *proc, int *exitcode, apr_exit_why_e *exitwhy, apr_wait_how_e waithow); /** * Wait for any current child process to die and return information * about that child. * @param proc Pointer to NULL on entry, will be filled out with child's * information * @param exitcode The returned exit status of the child, if a child process * dies, or the signal that caused the child to die. * On platforms that don't support obtaining this information, * the status parameter will be returned as APR_ENOTIMPL. * @param exitwhy Why the child died, the bitwise or of: *
 *            APR_PROC_EXIT         -- process terminated normally
 *            APR_PROC_SIGNAL       -- process was killed by a signal
 *            APR_PROC_SIGNAL_CORE  -- process was killed by a signal, and
 *                                     generated a core dump.
 * 
* @param waithow How should we wait. One of: *
 *            APR_WAIT   -- block until the child process dies.
 *            APR_NOWAIT -- return immediately regardless of if the 
 *                          child is dead or not.
 * 
* @param p Pool to allocate child information out of. * @bug Passing proc as a *proc rather than **proc was an odd choice * for some platforms... this should be revisited in 1.0 */ APR_DECLARE(apr_status_t) apr_proc_wait_all_procs(apr_proc_t *proc, int *exitcode, apr_exit_why_e *exitwhy, apr_wait_how_e waithow, apr_pool_t *p); #define APR_PROC_DETACH_FOREGROUND 0 /**< Do not detach */ #define APR_PROC_DETACH_DAEMONIZE 1 /**< Detach */ /** * Detach the process from the controlling terminal. * @param daemonize set to non-zero if the process should daemonize * and become a background process, else it will * stay in the foreground. */ APR_DECLARE(apr_status_t) apr_proc_detach(int daemonize); /** * Register an other_child -- a child associated to its registered * maintence callback. This callback is invoked when the process * dies, is disconnected or disappears. * @param proc The child process to register. * @param maintenance maintenance is a function that is invoked with a * reason and the data pointer passed here. * @param data Opaque context data passed to the maintenance function. * @param write_fd An fd that is probed for writing. If it is ever unwritable * then the maintenance is invoked with reason * OC_REASON_UNWRITABLE. * @param p The pool to use for allocating memory. * @bug write_fd duplicates the proc->out stream, it's really redundant * and should be replaced in the APR 1.0 API with a bitflag of which * proc->in/out/err handles should be health checked. * @bug no platform currently tests the pipes health. */ APR_DECLARE(void) apr_proc_other_child_register(apr_proc_t *proc, void (*maintenance) (int reason, void *, int status), void *data, apr_file_t *write_fd, apr_pool_t *p); /** * Stop watching the specified other child. * @param data The data to pass to the maintenance function. This is * used to find the process to unregister. * @warning Since this can be called by a maintenance function while we're * scanning the other_children list, all scanners should protect * themself by loading ocr->next before calling any maintenance * function. */ APR_DECLARE(void) apr_proc_other_child_unregister(void *data); /** * Notify the maintenance callback of a registered other child process * that application has detected an event, such as death. * @param proc The process to check * @param reason The reason code to pass to the maintenance function * @param status The status to pass to the maintenance function * @remark An example of code using this behavior; *
 * rv = apr_proc_wait_all_procs(&proc, &exitcode, &status, APR_WAIT, p);
 * if (APR_STATUS_IS_CHILD_DONE(rv)) {
 * #if APR_HAS_OTHER_CHILD
 *     if (apr_proc_other_child_alert(&proc, APR_OC_REASON_DEATH, status)
 *             == APR_SUCCESS) {
 *         ;  (already handled)
 *     }
 *     else
 * #endif
 *         [... handling non-otherchild processes death ...]
 * 
*/ APR_DECLARE(apr_status_t) apr_proc_other_child_alert(apr_proc_t *proc, int reason, int status); /** * Test one specific other child processes and invoke the maintenance callback * with the appropriate reason code, if still running, or the appropriate reason * code if the process is no longer healthy. * @param ocr The registered other child * @param reason The reason code (e.g. APR_OC_REASON_RESTART) if still running */ APR_DECLARE(void) apr_proc_other_child_refresh(apr_other_child_rec_t *ocr, int reason); /** * Test all registered other child processes and invoke the maintenance callback * with the appropriate reason code, if still running, or the appropriate reason * code if the process is no longer healthy. * @param reason The reason code (e.g. APR_OC_REASON_RESTART) to running processes */ APR_DECLARE(void) apr_proc_other_child_refresh_all(int reason); /** * Terminate a process. * @param proc The process to terminate. * @param sig How to kill the process. */ APR_DECLARE(apr_status_t) apr_proc_kill(apr_proc_t *proc, int sig); /** * Register a process to be killed when a pool dies. * @param a The pool to use to define the processes lifetime * @param proc The process to register * @param how How to kill the process, one of: *
 *         APR_KILL_NEVER         -- process is never sent any signals
 *         APR_KILL_ALWAYS        -- process is sent SIGKILL on apr_pool_t cleanup
 *         APR_KILL_AFTER_TIMEOUT -- SIGTERM, wait 3 seconds, SIGKILL
 *         APR_JUST_WAIT          -- wait forever for the process to complete
 *         APR_KILL_ONLY_ONCE     -- send SIGTERM and then wait
 * 
*/ APR_DECLARE(void) apr_pool_note_subprocess(apr_pool_t *a, apr_proc_t *proc, apr_kill_conditions_e how); #if APR_HAS_THREADS #if (APR_HAVE_SIGWAIT || APR_HAVE_SIGSUSPEND) && !defined(OS2) /** * Setup the process for a single thread to be used for all signal handling. * @warning This must be called before any threads are created */ APR_DECLARE(apr_status_t) apr_setup_signal_thread(void); /** * Make the current thread listen for signals. This thread will loop * forever, calling a provided function whenever it receives a signal. That * functions should return 1 if the signal has been handled, 0 otherwise. * @param signal_handler The function to call when a signal is received * apr_status_t apr_signal_thread((int)(*signal_handler)(int signum)) */ APR_DECLARE(apr_status_t) apr_signal_thread(int(*signal_handler)(int signum)); #endif /* (APR_HAVE_SIGWAIT || APR_HAVE_SIGSUSPEND) && !defined(OS2) */ /** * Get the child-pool used by the thread from the thread info. * @return apr_pool_t the pool */ APR_POOL_DECLARE_ACCESSOR(thread); #endif /* APR_HAS_THREADS */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_THREAD_PROC_H */ include/apr-1/apr_thread_rwlock.h000444 000000 000000 00000011236 11035140626 017241 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_THREAD_RWLOCK_H #define APR_THREAD_RWLOCK_H /** * @file apr_thread_rwlock.h * @brief APR Reader/Writer Lock Routines */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if APR_HAS_THREADS /** * @defgroup apr_thread_rwlock Reader/Writer Lock Routines * @ingroup APR * @{ */ /** Opaque read-write thread-safe lock. */ typedef struct apr_thread_rwlock_t apr_thread_rwlock_t; /** * Note: The following operations have undefined results: unlocking a * read-write lock which is not locked in the calling thread; write * locking a read-write lock which is already locked by the calling * thread; destroying a read-write lock more than once; clearing or * destroying the pool from which a locked read-write lock is * allocated. */ /** * Create and initialize a read-write lock that can be used to synchronize * threads. * @param rwlock the memory address where the newly created readwrite lock * will be stored. * @param pool the pool from which to allocate the mutex. */ APR_DECLARE(apr_status_t) apr_thread_rwlock_create(apr_thread_rwlock_t **rwlock, apr_pool_t *pool); /** * Acquire a shared-read lock on the given read-write lock. This will allow * multiple threads to enter the same critical section while they have acquired * the read lock. * @param rwlock the read-write lock on which to acquire the shared read. */ APR_DECLARE(apr_status_t) apr_thread_rwlock_rdlock(apr_thread_rwlock_t *rwlock); /** * Attempt to acquire the shared-read lock on the given read-write lock. This * is the same as apr_thread_rwlock_rdlock(), only that the function fails * if there is another thread holding the write lock, or if there are any * write threads blocking on the lock. If the function fails for this case, * APR_EBUSY will be returned. Note: it is important that the * APR_STATUS_IS_EBUSY(s) macro be used to determine if the return value was * APR_EBUSY, for portability reasons. * @param rwlock the rwlock on which to attempt the shared read. */ APR_DECLARE(apr_status_t) apr_thread_rwlock_tryrdlock(apr_thread_rwlock_t *rwlock); /** * Acquire an exclusive-write lock on the given read-write lock. This will * allow only one single thread to enter the critical sections. If there * are any threads currently holding the read-lock, this thread is put to * sleep until it can have exclusive access to the lock. * @param rwlock the read-write lock on which to acquire the exclusive write. */ APR_DECLARE(apr_status_t) apr_thread_rwlock_wrlock(apr_thread_rwlock_t *rwlock); /** * Attempt to acquire the exclusive-write lock on the given read-write lock. * This is the same as apr_thread_rwlock_wrlock(), only that the function fails * if there is any other thread holding the lock (for reading or writing), * in which case the function will return APR_EBUSY. Note: it is important * that the APR_STATUS_IS_EBUSY(s) macro be used to determine if the return * value was APR_EBUSY, for portability reasons. * @param rwlock the rwlock on which to attempt the exclusive write. */ APR_DECLARE(apr_status_t) apr_thread_rwlock_trywrlock(apr_thread_rwlock_t *rwlock); /** * Release either the read or write lock currently held by the calling thread * associated with the given read-write lock. * @param rwlock the read-write lock to be released (unlocked). */ APR_DECLARE(apr_status_t) apr_thread_rwlock_unlock(apr_thread_rwlock_t *rwlock); /** * Destroy the read-write lock and free the associated memory. * @param rwlock the rwlock to destroy. */ APR_DECLARE(apr_status_t) apr_thread_rwlock_destroy(apr_thread_rwlock_t *rwlock); /** * Get the pool used by this thread_rwlock. * @return apr_pool_t the pool */ APR_POOL_DECLARE_ACCESSOR(thread_rwlock); #endif /* APR_HAS_THREADS */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_THREAD_RWLOCK_H */ include/apr-1/apr_time.h000444 000000 000000 00000016331 11035140626 015350 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_TIME_H #define APR_TIME_H /** * @file apr_time.h * @brief APR Time Library */ #include "apr.h" #include "apr_pools.h" #include "apr_errno.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_time Time Routines * @ingroup APR * @{ */ /** month names */ APR_DECLARE_DATA extern const char apr_month_snames[12][4]; /** day names */ APR_DECLARE_DATA extern const char apr_day_snames[7][4]; /** number of microseconds since 00:00:00 january 1, 1970 UTC */ typedef apr_int64_t apr_time_t; /** mechanism to properly type apr_time_t literals */ #define APR_TIME_C(val) APR_INT64_C(val) /** mechanism to properly print apr_time_t values */ #define APR_TIME_T_FMT APR_INT64_T_FMT /** intervals for I/O timeouts, in microseconds */ typedef apr_int64_t apr_interval_time_t; /** short interval for I/O timeouts, in microseconds */ typedef apr_int32_t apr_short_interval_time_t; /** number of microseconds per second */ #define APR_USEC_PER_SEC APR_TIME_C(1000000) /** @return apr_time_t as a second */ #define apr_time_sec(time) ((time) / APR_USEC_PER_SEC) /** @return apr_time_t as a usec */ #define apr_time_usec(time) ((time) % APR_USEC_PER_SEC) /** @return apr_time_t as a msec */ #define apr_time_msec(time) (((time) / 1000) % 1000) /** @return apr_time_t as a msec */ #define apr_time_as_msec(time) ((time) / 1000) /** @return a second as an apr_time_t */ #define apr_time_from_sec(sec) ((apr_time_t)(sec) * APR_USEC_PER_SEC) /** @return a second and usec combination as an apr_time_t */ #define apr_time_make(sec, usec) ((apr_time_t)(sec) * APR_USEC_PER_SEC \ + (apr_time_t)(usec)) /** * @return the current time */ APR_DECLARE(apr_time_t) apr_time_now(void); /** @see apr_time_exp_t */ typedef struct apr_time_exp_t apr_time_exp_t; /** * a structure similar to ANSI struct tm with the following differences: * - tm_usec isn't an ANSI field * - tm_gmtoff isn't an ANSI field (it's a bsdism) */ struct apr_time_exp_t { /** microseconds past tm_sec */ apr_int32_t tm_usec; /** (0-61) seconds past tm_min */ apr_int32_t tm_sec; /** (0-59) minutes past tm_hour */ apr_int32_t tm_min; /** (0-23) hours past midnight */ apr_int32_t tm_hour; /** (1-31) day of the month */ apr_int32_t tm_mday; /** (0-11) month of the year */ apr_int32_t tm_mon; /** year since 1900 */ apr_int32_t tm_year; /** (0-6) days since sunday */ apr_int32_t tm_wday; /** (0-365) days since jan 1 */ apr_int32_t tm_yday; /** daylight saving time */ apr_int32_t tm_isdst; /** seconds east of UTC */ apr_int32_t tm_gmtoff; }; /** * convert an ansi time_t to an apr_time_t * @param result the resulting apr_time_t * @param input the time_t to convert */ APR_DECLARE(apr_status_t) apr_time_ansi_put(apr_time_t *result, time_t input); /** * convert a time to its human readable components using an offset * from GMT * @param result the exploded time * @param input the time to explode * @param offs the number of seconds offset to apply */ APR_DECLARE(apr_status_t) apr_time_exp_tz(apr_time_exp_t *result, apr_time_t input, apr_int32_t offs); /** * convert a time to its human readable components in GMT timezone * @param result the exploded time * @param input the time to explode */ APR_DECLARE(apr_status_t) apr_time_exp_gmt(apr_time_exp_t *result, apr_time_t input); /** * convert a time to its human readable components in local timezone * @param result the exploded time * @param input the time to explode */ APR_DECLARE(apr_status_t) apr_time_exp_lt(apr_time_exp_t *result, apr_time_t input); /** * Convert time value from human readable format to a numeric apr_time_t * e.g. elapsed usec since epoch * @param result the resulting imploded time * @param input the input exploded time */ APR_DECLARE(apr_status_t) apr_time_exp_get(apr_time_t *result, apr_time_exp_t *input); /** * Convert time value from human readable format to a numeric apr_time_t that * always represents GMT * @param result the resulting imploded time * @param input the input exploded time */ APR_DECLARE(apr_status_t) apr_time_exp_gmt_get(apr_time_t *result, apr_time_exp_t *input); /** * Sleep for the specified number of micro-seconds. * @param t desired amount of time to sleep. * @warning May sleep for longer than the specified time. */ APR_DECLARE(void) apr_sleep(apr_interval_time_t t); /** length of a RFC822 Date */ #define APR_RFC822_DATE_LEN (30) /** * apr_rfc822_date formats dates in the RFC822 * format in an efficient manner. It is a fixed length * format which requires the indicated amount of storage, * including the trailing NUL terminator. * @param date_str String to write to. * @param t the time to convert */ APR_DECLARE(apr_status_t) apr_rfc822_date(char *date_str, apr_time_t t); /** length of a CTIME date */ #define APR_CTIME_LEN (25) /** * apr_ctime formats dates in the ctime() format * in an efficient manner. it is a fixed length format * and requires the indicated amount of storage including * the trailing NUL terminator. * Unlike ANSI/ISO C ctime(), apr_ctime() does not include * a \n at the end of the string. * @param date_str String to write to. * @param t the time to convert */ APR_DECLARE(apr_status_t) apr_ctime(char *date_str, apr_time_t t); /** * formats the exploded time according to the format specified * @param s string to write to * @param retsize The length of the returned string * @param max The maximum length of the string * @param format The format for the time string * @param tm The time to convert */ APR_DECLARE(apr_status_t) apr_strftime(char *s, apr_size_t *retsize, apr_size_t max, const char *format, apr_time_exp_t *tm); /** * Improve the clock resolution for the lifetime of the given pool. * Generally this is only desireable on benchmarking and other very * time-sensitive applications, and has no impact on most platforms. * @param p The pool to associate the finer clock resolution */ APR_DECLARE(void) apr_time_clock_hires(apr_pool_t *p); /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_TIME_H */ include/apr-1/apr_user.h000444 000000 000000 00000012273 11035140626 015371 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_USER_H #define APR_USER_H /** * @file apr_user.h * @brief APR User ID Services */ #include "apr.h" #include "apr_errno.h" #include "apr_pools.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /** * @defgroup apr_user User and Group ID Services * @ingroup APR * @{ */ /** * Structure for determining user ownership. */ #ifdef WIN32 typedef PSID apr_uid_t; #else typedef uid_t apr_uid_t; #endif /** * Structure for determining group ownership. */ #ifdef WIN32 typedef PSID apr_gid_t; #else typedef gid_t apr_gid_t; #endif #if APR_HAS_USER /** * Get the userid (and groupid) of the calling process * @param userid Returns the user id * @param groupid Returns the user's group id * @param p The pool from which to allocate working space * @remark This function is available only if APR_HAS_USER is defined. */ APR_DECLARE(apr_status_t) apr_uid_current(apr_uid_t *userid, apr_gid_t *groupid, apr_pool_t *p); /** * Get the user name for a specified userid * @param username Pointer to new string containing user name (on output) * @param userid The userid * @param p The pool from which to allocate the string * @remark This function is available only if APR_HAS_USER is defined. */ APR_DECLARE(apr_status_t) apr_uid_name_get(char **username, apr_uid_t userid, apr_pool_t *p); /** * Get the userid (and groupid) for the specified username * @param userid Returns the user id * @param groupid Returns the user's group id * @param username The username to lookup * @param p The pool from which to allocate working space * @remark This function is available only if APR_HAS_USER is defined. */ APR_DECLARE(apr_status_t) apr_uid_get(apr_uid_t *userid, apr_gid_t *groupid, const char *username, apr_pool_t *p); /** * Get the home directory for the named user * @param dirname Pointer to new string containing directory name (on output) * @param username The named user * @param p The pool from which to allocate the string * @remark This function is available only if APR_HAS_USER is defined. */ APR_DECLARE(apr_status_t) apr_uid_homepath_get(char **dirname, const char *username, apr_pool_t *p); /** * Compare two user identifiers for equality. * @param left One uid to test * @param right Another uid to test * @return APR_SUCCESS if the apr_uid_t strutures identify the same user, * APR_EMISMATCH if not, APR_BADARG if an apr_uid_t is invalid. * @remark This function is available only if APR_HAS_USER is defined. */ #if defined(WIN32) APR_DECLARE(apr_status_t) apr_uid_compare(apr_uid_t left, apr_uid_t right); #else #define apr_uid_compare(left,right) (((left) == (right)) ? APR_SUCCESS : APR_EMISMATCH) #endif /** * Get the group name for a specified groupid * @param groupname Pointer to new string containing group name (on output) * @param groupid The groupid * @param p The pool from which to allocate the string * @remark This function is available only if APR_HAS_USER is defined. */ APR_DECLARE(apr_status_t) apr_gid_name_get(char **groupname, apr_gid_t groupid, apr_pool_t *p); /** * Get the groupid for a specified group name * @param groupid Pointer to the group id (on output) * @param groupname The group name to look up * @param p The pool from which to allocate the string * @remark This function is available only if APR_HAS_USER is defined. */ APR_DECLARE(apr_status_t) apr_gid_get(apr_gid_t *groupid, const char *groupname, apr_pool_t *p); /** * Compare two group identifiers for equality. * @param left One gid to test * @param right Another gid to test * @return APR_SUCCESS if the apr_gid_t strutures identify the same group, * APR_EMISMATCH if not, APR_BADARG if an apr_gid_t is invalid. * @remark This function is available only if APR_HAS_USER is defined. */ #if defined(WIN32) APR_DECLARE(apr_status_t) apr_gid_compare(apr_gid_t left, apr_gid_t right); #else #define apr_gid_compare(left,right) (((left) == (right)) ? APR_SUCCESS : APR_EMISMATCH) #endif #endif /* ! APR_HAS_USER */ /** @} */ #ifdef __cplusplus } #endif #endif /* ! APR_USER_H */ include/apr-1/apr_version.h000444 000000 000000 00000010563 11035140626 016100 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APR_VERSION_H #define APR_VERSION_H /** * @file apr_version.h * @brief APR Versioning Interface * * APR's Version * * There are several different mechanisms for accessing the version. There * is a string form, and a set of numbers; in addition, there are constants * which can be compiled into your application, and you can query the library * being used for its actual version. * * Note that it is possible for an application to detect that it has been * compiled against a different version of APR by use of the compile-time * constants and the use of the run-time query function. * * APR version numbering follows the guidelines specified in: * * http://apr.apache.org/versioning.html */ /* The numeric compile-time version constants. These constants are the * authoritative version numbers for APR. */ /** major version * Major API changes that could cause compatibility problems for older * programs such as structure size changes. No binary compatibility is * possible across a change in the major version. */ #define APR_MAJOR_VERSION 1 /** minor version * Minor API changes that do not cause binary compatibility problems. * Reset to 0 when upgrading APR_MAJOR_VERSION */ #define APR_MINOR_VERSION 2 /** patch level * The Patch Level never includes API changes, simply bug fixes. * Reset to 0 when upgrading APR_MINOR_VERSION */ #define APR_PATCH_VERSION 12 /** * The symbol APR_IS_DEV_VERSION is only defined for internal, * "development" copies of APR. It is undefined for released versions * of APR. */ /* #undef APR_IS_DEV_VERSION */ #if defined(APR_IS_DEV_VERSION) || defined(DOXYGEN) /** Internal: string form of the "is dev" flag */ #define APR_IS_DEV_STRING "-dev" #else #define APR_IS_DEV_STRING "" #endif /* APR_STRINGIFY is defined here, and also in apr_general.h, so wrap it */ #ifndef APR_STRINGIFY /** Properly quote a value as a string in the C preprocessor */ #define APR_STRINGIFY(n) APR_STRINGIFY_HELPER(n) /** Helper macro for APR_STRINGIFY */ #define APR_STRINGIFY_HELPER(n) #n #endif /** The formatted string of APR's version */ #define APR_VERSION_STRING \ APR_STRINGIFY(APR_MAJOR_VERSION) "." \ APR_STRINGIFY(APR_MINOR_VERSION) "." \ APR_STRINGIFY(APR_PATCH_VERSION) \ APR_IS_DEV_STRING /** An alternative formatted string of APR's version */ /* macro for Win32 .rc files using numeric csv representation */ #define APR_VERSION_STRING_CSV APR_MAJOR_VERSION ##, \ ##APR_MINOR_VERSION ##, \ ##APR_PATCH_VERSION #ifndef APR_VERSION_ONLY /* The C language API to access the version at run time, * as opposed to compile time. APR_VERSION_ONLY may be defined * externally when preprocessing apr_version.h to obtain strictly * the C Preprocessor macro declarations. */ #include "apr.h" #ifdef __cplusplus extern "C" { #endif /** * The numeric version information is broken out into fields within this * structure. */ typedef struct { int major; /**< major number */ int minor; /**< minor number */ int patch; /**< patch number */ int is_dev; /**< is development (1 or 0) */ } apr_version_t; /** * Return APR's version information information in a numeric form. * * @param pvsn Pointer to a version structure for returning the version * information. */ APR_DECLARE(void) apr_version(apr_version_t *pvsn); /** Return APR's version information as a string. */ APR_DECLARE(const char *) apr_version_string(void); #ifdef __cplusplus } #endif #endif /* ndef APR_VERSION_ONLY */ #endif /* ndef APR_VERSION_H */ include/apr-1/apr_want.h000444 000000 000000 00000005304 11035140626 015361 0ustar00rootroot000000 000000 /* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "apr.h" /* configuration data */ /** * @file apr_want.h * @brief APR Standard Headers Support * *
 * Features:
 *
 *   APR_WANT_STRFUNC:  strcmp, strcat, strcpy, etc
 *   APR_WANT_MEMFUNC:  memcmp, memcpy, etc
 *   APR_WANT_STDIO:     and related bits
 *   APR_WANT_IOVEC:    struct iovec
 *   APR_WANT_BYTEFUNC: htons, htonl, ntohl, ntohs
 *
 * Typical usage:
 *
 *   #define APR_WANT_STRFUNC
 *   #define APR_WANT_MEMFUNC
 *   #include "apr_want.h"
 *
 * The appropriate headers will be included.
 *
 * Note: it is safe to use this in a header (it won't interfere with other
 *       headers' or source files' use of apr_want.h)
 * 
*/ /* --------------------------------------------------------------------- */ #ifdef APR_WANT_STRFUNC #if APR_HAVE_STRING_H #include #endif #if APR_HAVE_STRINGS_H #include #endif #undef APR_WANT_STRFUNC #endif /* --------------------------------------------------------------------- */ #ifdef APR_WANT_MEMFUNC #if APR_HAVE_STRING_H #include #endif #undef APR_WANT_MEMFUNC #endif /* --------------------------------------------------------------------- */ #ifdef APR_WANT_STDIO #if APR_HAVE_STDIO_H #include #endif #undef APR_WANT_STDIO #endif /* --------------------------------------------------------------------- */ #ifdef APR_WANT_IOVEC #if APR_HAVE_SYS_UIO_H #include #endif #undef APR_WANT_IOVEC #endif /* --------------------------------------------------------------------- */ #ifdef APR_WANT_BYTEFUNC /* Single Unix says they are in arpa/inet.h. Linux has them in * netinet/in.h. FreeBSD has them in arpa/inet.h but requires that * netinet/in.h be included first. */ #if APR_HAVE_NETINET_IN_H #include #endif #if APR_HAVE_ARPA_INET_H #include #endif #undef APR_WANT_BYTEFUNC #endif /* --------------------------------------------------------------------- */ lib/apr.exp000444 000000 000000 00000016775 11035140630 013111 0ustar00rootroot000000 000000 #! libapr-1.so * This file was AUTOGENERATED at build time. * Please do not edit by hand. apr_thread_mutex_create apr_thread_mutex_lock apr_thread_mutex_trylock apr_thread_mutex_unlock apr_thread_mutex_destroy apr_thread_mutex_pool_get apr_env_get apr_env_set apr_env_delete apr_pollset_create apr_pollset_destroy apr_pollset_add apr_pollset_remove apr_pollset_poll apr_poll apr_fnmatch apr_fnmatch_test apr_match_glob apr_global_mutex_create apr_global_mutex_child_init apr_global_mutex_lock apr_global_mutex_trylock apr_global_mutex_unlock apr_global_mutex_destroy apr_global_mutex_pool_get apr_pool_initialize apr_pool_terminate apr_pool_create_ex apr_pool_create_ex_debug apr_pool_allocator_get apr_pool_clear apr_pool_clear_debug apr_pool_destroy apr_pool_destroy_debug apr_palloc apr_palloc_debug apr_pcalloc_debug apr_pool_abort_set apr_pool_abort_get apr_pool_parent_get apr_pool_is_ancestor apr_pool_tag apr_pool_userdata_set apr_pool_userdata_setn apr_pool_userdata_get apr_pool_cleanup_register apr_pool_cleanup_kill apr_pool_child_cleanup_set apr_pool_cleanup_run apr_pool_cleanup_null apr_pool_cleanup_for_exec apr_file_open apr_file_close apr_file_remove apr_file_rename apr_file_copy apr_file_append apr_file_eof apr_file_open_stderr apr_file_open_stdout apr_file_open_stdin apr_file_read apr_file_write apr_file_writev apr_file_read_full apr_file_write_full apr_file_writev_full apr_file_putc apr_file_getc apr_file_ungetc apr_file_gets apr_file_puts apr_file_flush apr_file_dup apr_file_dup2 apr_file_setaside apr_file_seek apr_file_pipe_create apr_file_namedpipe_create apr_file_pipe_timeout_get apr_file_pipe_timeout_set apr_file_lock apr_file_unlock apr_file_name_get apr_file_data_get apr_file_data_set apr_file_printf apr_file_perms_set apr_file_attrs_set apr_file_mtime_set apr_dir_make apr_dir_make_recursive apr_dir_remove apr_file_info_get apr_file_trunc apr_file_flags_get apr_file_pool_get apr_file_inherit_set apr_file_inherit_unset apr_file_mktemp apr_temp_dir_get apr_version apr_version_string apr_mmap_create apr_mmap_dup apr_mmap_delete apr_mmap_offset apr_dso_load apr_dso_unload apr_dso_sym apr_dso_error apr_threadattr_create apr_threadattr_detach_set apr_threadattr_detach_get apr_threadattr_stacksize_set apr_threadattr_guardsize_set apr_thread_create apr_thread_exit apr_thread_join apr_thread_yield apr_thread_once_init apr_thread_once apr_thread_detach apr_thread_data_get apr_thread_data_set apr_threadkey_private_create apr_threadkey_private_get apr_threadkey_private_set apr_threadkey_private_delete apr_threadkey_data_get apr_threadkey_data_set apr_procattr_create apr_procattr_io_set apr_procattr_child_in_set apr_procattr_child_out_set apr_procattr_child_err_set apr_procattr_dir_set apr_procattr_cmdtype_set apr_procattr_detach_set apr_procattr_limit_set apr_procattr_child_errfn_set apr_procattr_error_check_set apr_procattr_addrspace_set apr_procattr_user_set apr_procattr_group_set apr_proc_fork apr_proc_create apr_proc_wait apr_proc_wait_all_procs apr_proc_detach apr_proc_other_child_register apr_proc_other_child_unregister apr_proc_other_child_alert apr_proc_other_child_refresh apr_proc_other_child_refresh_all apr_proc_kill apr_pool_note_subprocess apr_setup_signal_thread apr_signal_thread apr_thread_pool_get apr_strerror apr_shm_create apr_shm_remove apr_shm_destroy apr_shm_attach apr_shm_detach apr_shm_baseaddr_get apr_shm_size_get apr_shm_pool_get apr_socket_create apr_socket_shutdown apr_socket_close apr_socket_bind apr_socket_listen apr_socket_accept apr_socket_connect apr_sockaddr_info_get apr_getnameinfo apr_parse_addr_port apr_gethostname apr_socket_data_get apr_socket_data_set apr_socket_send apr_socket_sendv apr_socket_sendto apr_socket_recvfrom apr_socket_sendfile apr_socket_recv apr_socket_opt_set apr_socket_timeout_set apr_socket_opt_get apr_socket_timeout_get apr_socket_atmark apr_socket_addr_get apr_sockaddr_ip_get apr_sockaddr_equal apr_socket_type_get apr_getservbyname apr_ipsubnet_create apr_ipsubnet_test apr_socket_protocol_get apr_socket_pool_get apr_socket_inherit_set apr_socket_inherit_unset apr_mcast_join apr_mcast_leave apr_mcast_hops apr_mcast_loopback apr_mcast_interface apr_signal apr_signal_description_get apr_signal_block apr_signal_unblock apr_uid_current apr_uid_name_get apr_uid_get apr_uid_homepath_get apr_gid_name_get apr_gid_get apr_atomic_init apr_atomic_read32 apr_atomic_set32 apr_atomic_add32 apr_atomic_sub32 apr_atomic_inc32 apr_atomic_dec32 apr_atomic_cas32 apr_atomic_xchg32 apr_atomic_casptr apr_crypto_sha256_new apr_random_init apr_random_standard_new apr_random_add_entropy apr_random_insecure_bytes apr_random_secure_bytes apr_random_barrier apr_random_secure_ready apr_random_insecure_ready apr_random_after_fork apr_thread_cond_create apr_thread_cond_wait apr_thread_cond_timedwait apr_thread_cond_signal apr_thread_cond_broadcast apr_thread_cond_destroy apr_thread_cond_pool_get apr_thread_rwlock_create apr_thread_rwlock_rdlock apr_thread_rwlock_tryrdlock apr_thread_rwlock_wrlock apr_thread_rwlock_trywrlock apr_thread_rwlock_unlock apr_thread_rwlock_destroy apr_thread_rwlock_pool_get apr_getopt_init apr_getopt apr_getopt_long apr_strnatcmp apr_strnatcasecmp apr_pstrdup apr_pstrmemdup apr_pstrndup apr_pmemdup apr_pstrcat apr_pstrcatv apr_pvsprintf apr_psprintf apr_cpystrn apr_collapse_spaces apr_tokenize_to_argv apr_strtok apr_snprintf apr_vsnprintf apr_itoa apr_ltoa apr_off_t_toa apr_strtoff apr_strtoi64 apr_atoi64 apr_strfsize apr_initialize apr_app_initialize apr_terminate apr_terminate2 apr_generate_random_bytes apr_proc_mutex_create apr_proc_mutex_child_init apr_proc_mutex_lock apr_proc_mutex_trylock apr_proc_mutex_unlock apr_proc_mutex_destroy apr_proc_mutex_cleanup apr_proc_mutex_lockfile apr_proc_mutex_name apr_proc_mutex_defname apr_proc_mutex_pool_get apr_table_elts apr_is_empty_table apr_is_empty_array apr_array_make apr_array_push apr_array_pop apr_array_cat apr_array_copy apr_array_copy_hdr apr_array_append apr_array_pstrcat apr_table_make apr_table_copy apr_table_clear apr_table_get apr_table_set apr_table_setn apr_table_unset apr_table_merge apr_table_mergen apr_table_add apr_table_addn apr_table_overlay apr_table_do apr_table_vdo apr_table_overlap apr_table_compress apr_stat apr_dir_open apr_dir_close apr_dir_read apr_dir_rewind apr_filepath_root apr_filepath_merge apr_filepath_list_split apr_filepath_list_merge apr_filepath_get apr_filepath_set apr_filepath_encoding apr_allocator_create apr_allocator_destroy apr_allocator_alloc apr_allocator_free apr_allocator_owner_set apr_allocator_owner_get apr_allocator_max_free_set apr_allocator_mutex_set apr_allocator_mutex_get apr_os_global_mutex_get apr_os_file_get apr_os_dir_get apr_os_sock_get apr_os_proc_mutex_get apr_os_exp_time_get apr_os_imp_time_get apr_os_shm_get apr_os_thread_get apr_os_threadkey_get apr_os_thread_put apr_os_threadkey_put apr_os_thread_current apr_os_thread_equal apr_os_file_put apr_os_pipe_put apr_os_pipe_put_ex apr_os_dir_put apr_os_sock_put apr_os_sock_make apr_os_proc_mutex_put apr_os_imp_time_put apr_os_exp_time_put apr_os_shm_put apr_os_dso_handle_put apr_os_dso_handle_get apr_os_uuid_get apr_os_default_encoding apr_os_locale_encoding apr_hashfunc_default apr_hash_make apr_hash_make_custom apr_hash_copy apr_hash_set apr_hash_get apr_hash_first apr_hash_next apr_hash_this apr_hash_count apr_hash_overlay apr_hash_merge apr_hash_pool_get apr_time_now apr_time_ansi_put apr_time_exp_tz apr_time_exp_gmt apr_time_exp_lt apr_time_exp_get apr_time_exp_gmt_get apr_sleep apr_rfc822_date apr_ctime apr_strftime apr_time_clock_hires apr_filepath_name_get apr_vformatter apr_password_get apr_month_snames apr_day_snames lib/libapr-1.la000755 000000 000000 00000002013 11035140627 013525 0ustar00rootroot000000 000000 # libapr-1.la - a libtool library file # Generated by ltmain.sh - GNU libtool 1.5.24 (1.1220.2.455 2007/06/24 02:13:29) # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='libapr-1.so.0' # Names of this library. library_names='libapr-1.so.0.2.12 libapr-1.so.0 libapr-1.so' # The name of the static archive. old_library='libapr-1.a' # Libraries that this one depends upon. dependency_libs='-L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6 -L/usr/pkg/gcc34/lib -L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/ -L/usr/pkg/lib -lnsl -luuid -lsendfile -lrt -lsocket -lpthread' # Version information for libapr-1. current=2 age=2 revision=12 # Is this an already installed library? installed=yes # Should we warn about portability when linking against -modules? shouldnotlink=no # Files to dlopen/dlpreopen dlopen='' dlpreopen='' # Directory that this library needs to be installed in: libdir='/usr/pkg/lib' # This file has been modified by buildlink3. lib/libapr-1.a000644 000000 000000 00000627160 11035140627 013366 0ustar00rootroot000000 000000 ! / 1215611269 0 0 0 10016 ` µ'Ô+L+L+L+L4|4|:”:”:”:”:”:”:”:”:”:”:”:”:”H¤KÄKÄKÄWÄWÄWÄ„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<„<©Ä©Ä©Ä©Ä©Ä©Ä©Ä©Ä©Ä©Ä©Ä©Ä©Ä¶¤¶¤¶¤¶¤¶¤¶¤¶¤¶¤¶¤¶¤Â      ÉDÉD̈́̈́̈́̈́̈́̈́̈́̈́̈́̈́̈́àôàôæÜæÜíœíœíœíœíœíœíœíœíœùœýôýôýô ,,,,,,,ÜÜÜÜÜÜ"„"„"„"„"„"„"„"„"„"„"„"„"„"„"„0|0|0|0|0|0|;t;t@ü@ü@ü@ü@ü@üF$F$F$J\J\J\J\J\J\J\J\Q´Q´Q´Q´Q´Q´Y|Y|Y|Y|Y|Y|Y|aaaaaaaaaaaaaa´´´´´´´´‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<‹<º,º,½Ä½Ä½ÄÁ,Á,Ä4Ä4É$É$É$É$ÏTã|ã|ã|ò,ò,ò,ò,ò,ùÄùÄùÄT´´´´´´´´´´TTTTTT%d%d%d%d%d%d6¬6¬6¬6¬6¬?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?Ü?ÜSŒ[,fÌklklklklkl{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü{ü¡´¡´¡´¡´¡´¡´¡´¡´¡´°d´ä´ä´ä´ä´ä´ä´ä´ä´ä´äÂ|Æ4̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤Ú\Ú\Ú\Ú\Ú\Ú\Ú\Ú\êÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜêÜ|||||||| ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤44444%Ô%Ô%Ô%Ô*¤*¤apr_password_getapr_collapse_spacesapr_cpystrnapr_tokenize_to_argvapr_filepath_name_getapr_strnatcasecmpapr_strnatcmpapr_itoaapr_strtoffapr_atoi64apr_off_t_toaapr_pmemdupapr_pstrmemdupapr_pstrcatapr_strfsizeapr_ltoaapr_pstrdupapr_pstrcatvapr_pstrndupapr_strtoi64apr_strtokapr_fnmatchapr_match_globapr_fnmatch_testapr_snprintfapr_vsnprintfapr_vformatterapr_table_setnapr_table_makeapr_table_doapr_array_appendapr_table_clearapr_table_getapr_array_copyapr_array_pstrcatapr_array_catapr_table_overlapapr_table_overlayapr_table_unsetapr_array_popapr_table_addapr_table_compressapr_is_empty_arrayapr_table_setapr_table_addnapr_table_mergeapr_table_mergenapr_table_vdoapr_array_makeapr_array_pushapr_table_copyapr_is_empty_tableapr_array_copy_hdrapr_table_eltsapr_hash_firstapr_hash_make_customapr_hash_pool_getapr_hash_thisapr_hash_countapr_hash_makeapr_hash_mergeapr_hashfunc_defaultapr_hash_getapr_hash_setapr_hash_overlayapr_hash_nextapr_hash_copyapr_atomic_inc32apr_atomic_sub32apr_atomic_dec32apr_atomic_read32apr_atomic_set32apr_atomic_xchg32apr_atomic_casptrapr_atomic_initapr_atomic_cas32apr_atomic_add32apr_dso_loadapr_os_dso_handle_putapr_os_dso_handle_getapr_dso_errorapr_dso_symapr_dso_unloadapr_file_unlockapr_file_lockapr_file_writeapr_file_flushapr_file_flush_lockedapr_file_printfapr_file_readapr_file_writevapr_file_getcapr_file_getsapr_file_ungetcapr_file_putcapr_file_putsapr_filepath_list_merge_implapr_filepath_list_split_implapr_file_seekapr_file_truncapr_dir_closeapr_dir_make_recursiveapr_dir_removeapr_os_dir_putapr_dir_makeapr_os_dir_getapr_dir_rewindapr_dir_readapr_dir_openapr_file_mktempapr_file_setasideapr_file_dupapr_file_dup2apr_temp_dir_getapr_filepath_list_mergeapr_filepath_getapr_filepath_list_splitapr_filepath_mergeapr_filepath_setapr_filepath_encodingapr_filepath_rootapr_os_pipe_putapr_file_namedpipe_createapr_os_pipe_put_exapr_file_pipe_createapr_file_pipe_timeout_getapr_file_pipe_timeout_setapr_file_open_stdinapr_file_removeapr_file_inherit_setapr_unix_child_file_cleanupapr_file_openapr_os_file_putapr_unix_file_cleanupapr_file_renameapr_os_file_getapr_file_open_stderrapr_file_eofapr_file_pool_getapr_file_closeapr_file_inherit_unsetapr_file_open_stdoutapr_file_info_get_lockedapr_file_mtime_setapr_statapr_file_attrs_setapr_file_perms_setapr_file_info_getapr_file_copyapr_file_appendapr_file_flags_getapr_file_name_getapr_unix_perms2modeapr_file_data_setapr_unix_mode2permsapr_file_data_getapr_file_read_fullapr_file_write_fullapr_file_writev_fullapr_thread_rwlock_tryrdlockapr_thread_rwlock_unlockapr_thread_rwlock_trywrlockapr_thread_rwlock_destroyapr_thread_rwlock_rdlockapr_thread_rwlock_wrlockapr_thread_rwlock_createapr_thread_rwlock_pool_getapr_thread_mutex_pool_getapr_thread_mutex_trylockapr_thread_mutex_destroyapr_thread_mutex_unlockapr_thread_mutex_createapr_thread_mutex_lockapr_thread_cond_createapr_thread_cond_waitapr_thread_cond_signalapr_thread_cond_timedwaitapr_thread_cond_pool_getapr_thread_cond_broadcastapr_thread_cond_destroyapr_proc_mutex_trylockapr_proc_mutex_unlockapr_proc_mutex_pool_getapr_proc_mutex_cleanupapr_os_proc_mutex_putapr_proc_mutex_defnameapr_proc_mutex_unix_setup_lockapr_proc_mutex_lockfileapr_proc_mutex_destroyapr_proc_mutex_createapr_proc_mutex_lockapr_proc_mutex_nameapr_os_proc_mutex_getapr_proc_mutex_child_initapr_global_mutex_trylockapr_global_mutex_unlockapr_global_mutex_createapr_os_global_mutex_getapr_global_mutex_child_initapr_global_mutex_destroyapr_global_mutex_pool_getapr_global_mutex_lockapr_allocator_freeapr_psprintfapr_pool_cleanup_runapr_pool_cleanup_nullapr_pool_destroyapr_pool_parent_getapr_pool_clearapr_pcallocapr_pool_clear_debugapr_pool_initializeapr_pool_destroy_debugapr_pvsprintfapr_pool_abort_getapr_allocator_owner_getapr_allocator_owner_setapr_allocator_mutex_getapr_allocator_mutex_setapr_pool_cleanup_for_execapr_palloc_debugapr_pool_cleanup_killapr_pcalloc_debugapr_pool_is_ancestorapr_pool_create_exapr_pool_terminateapr_pool_userdata_setnapr_allocator_max_free_setapr_pool_cleanup_registerapr_allocator_allocapr_pool_abort_setapr_pool_allocator_getapr_pallocapr_allocator_createapr_pool_create_ex_debugapr_allocator_destroyapr_pool_child_cleanup_setapr_pool_userdata_getapr_pool_tagapr_pool_userdata_setapr_pool_note_subprocessapr_os_default_encodingapr_os_locale_encodingapr_env_getapr_env_deleteapr_env_setapr_version_stringapr_versionapr_os_uuid_getapr_generate_random_bytesapr_terminate2apr_initializeapr_terminateapr_app_initializeapr_strerrorapr_getoptapr_getopt_longapr_getopt_initapr_proc_other_child_refresh_allapr_proc_other_child_registerapr_proc_other_child_alertapr_proc_other_child_refreshapr_proc_other_child_unregisterapr_mmap_dupapr_mmap_deleteapr_mmap_createapr_mmap_offsetapr_sockaddr_equalapr_sockaddr_info_getapr_ipsubnet_testapr_getservbynameapr_socket_addr_getapr_getnameinfoapr_parse_addr_portapr_sockaddr_ip_getapr_sockaddr_vars_setapr_ipsubnet_createapr_socket_opt_setapr_socket_timeout_getapr_gethostnameapr_socket_opt_getapr_socket_atmarkapr_socket_timeout_setapr_socket_recvfromapr_socket_sendfileapr_socket_recvapr_socket_sendtoapr_socket_sendvapr_socket_sendapr_mcast_leaveapr_mcast_joinapr_mcast_hopsapr_mcast_loopbackapr_mcast_interfaceapr_socket_inherit_setapr_socket_connectapr_socket_type_getapr_os_sock_putapr_socket_shutdownapr_socket_listenapr_socket_protocol_getapr_socket_closeapr_os_sock_makeapr_socket_pool_getapr_socket_acceptapr_os_sock_getapr_socket_inherit_unsetapr_socket_data_getapr_socket_data_setapr_socket_bindapr_socket_createapr_inet_ntopapr_inet_ptonapr_pollapr_pollset_pollapr_pollset_removeapr_pollset_createapr_pollset_destroyapr_pollset_addapr__SHA512_Transformapr__SHA256_Initapr__SHA384_Finalapr__SHA384_Endapr__SHA256_Transformapr__SHA256_Updateapr__SHA512_Dataapr__SHA384_Dataapr__SHA256_Finalapr__SHA256_Endapr__SHA512_Initapr__SHA512_Endapr__SHA384_Initapr__SHA512_Finalapr__SHA384_Updateapr__SHA256_Dataapr__SHA512_Updateapr__SHA512_Lastapr_random_insecure_readyapr_random_standard_newapr_random_insecure_bytesapr_random_add_entropyapr_random_barrierapr_random_secure_bytesapr_random_secure_readyapr_random_initapr_random_after_forkapr_crypto_sha256_newapr_os_shm_getapr_shm_detachapr_shm_size_getapr_shm_baseaddr_getapr_shm_pool_getapr_shm_removeapr_shm_attachapr_os_shm_putapr_shm_createapr_shm_destroyapr_wait_for_io_or_timeoutapr_proc_detachapr_threadattr_guardsize_setapr_threadattr_stacksize_setapr_thread_joinapr_thread_createapr_thread_data_getapr_thread_data_setapr_threadattr_createapr_thread_yieldapr_threadattr_detach_setapr_thread_detachapr_os_thread_putapr_os_thread_equalapr_os_thread_getapr_thread_exitapr_thread_onceapr_threadattr_detach_getapr_os_thread_currentapr_thread_pool_getapr_thread_once_initapr_signal_initapr_proc_killapr_signal_blockapr_signal_threadapr_signal_unblockapr_signalapr_signal_description_getapr_setup_signal_threadapr_procattr_child_errfn_setapr_procattr_child_err_setapr_proc_forkapr_proc_waitapr_procattr_io_setapr_procattr_addrspace_setapr_procattr_child_in_setapr_procattr_error_check_setapr_procattr_limit_setapr_procattr_user_setapr_procattr_group_setapr_procattr_child_out_setapr_proc_wait_all_procsapr_procattr_cmdtype_setapr_proc_createapr_procattr_detach_setapr_procattr_createapr_procattr_dir_setapr_threadkey_private_deleteapr_threadkey_data_setapr_threadkey_data_getapr_threadkey_private_setapr_threadkey_private_createapr_os_threadkey_putapr_os_threadkey_getapr_threadkey_private_getapr_sleepapr_os_imp_time_getapr_time_exp_getapr_time_exp_gmtapr_time_exp_tzapr_os_exp_time_getapr_time_clock_hiresapr_time_exp_ltapr_unix_setup_timeapr_time_nowapr_os_imp_time_putapr_time_ansi_putapr_time_exp_gmt_getapr_os_exp_time_putapr_ctimeapr_month_snamesapr_rfc822_dateapr_strftimeapr_day_snamesapr_uid_homepath_getapr_uid_name_getapr_uid_getapr_uid_currentapr_gid_getapr_gid_name_get// 1215611269 0 0 0 52 ` apr_strnatcmp.o/ filepath_util.o/ thread_rwlock.o/ apr_getpass.o/ 1215610915 0 0 100644 828 ` ELF 4(.shstrtab.text.symtab.strtab.rela.text.commentã¿@ ’ ¢ €° @€€¢’”€ @°@”@’ 0€¿ÿ÷¢ NÇàèÿñp.<apr_getpass.cstrlenmemsetapr_password_getgetpassphraseapr_cpystrn<DTas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lpÜ€\H!¤< ,à? apr_cpystrn.o/ 1215610920 0 0 100644 2292 ` ELFØ4(.shstrtab.text.symtab.strtab.rela.text.comment€¢ €‚‚@ ”ÿ€¢ :€ À*Ú @ƒ+`’`€ `€Ú* €¢ *¿ÿùÚ @À*Ãàã¿ÂNš` €  ˜`?ÿ‚` € š`?ÿ€“ € Ö° ÂNš` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿ÷Öƒ*à€ `¤€R  ƒ8`€ `"€ò’ € `'"€ò¤ Ö €ƒ*à€ `"€-ƒ8`€¢`"€ ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ 2€Ò¤ ƒ*àƒ8`€ `\"€¾ÔL €¢`€Ì€¢`ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ € ƒ*à€¢`€˜ƒ*à¤ Ö €ƒ*à€ `¿ÿÚ€¢`ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“   €ƒ*ठÂL€š` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿ÷Ö €ƒ*à€ `¿ÿ³ƒ8`@“, ª?ÿ¦Ð&@€¥`€¨ €Èƒ- ° ÂNš` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿ÷Öƒ*àƒ8`€ `"€¯’ € `'"€°° ƒ*à€ `€+¤€¢`"€ ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ 2€° ƒ*àƒ8`€ `\"€wÔN €¢`€„€¢`ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ 2€ ° €¢`€ƒ*à° Öƒ*à€ `¿ÿÚ€¢`° ¢&’@¡- Â@Ð$ÀÐ@”@’Â@Ö@Ú Àƒ+`€ `˜ €” €¢ ˜ ƒ8`€” € `\"€Ú Ú*À–à” Ú ƒ+`€ `¿ÿó€¢ ¨ €¥@€^À*À¿ÿ™æ@ƒ8`€ `'2¿ÿi¤ ƒ*à€ `¿ÿkƒ*à¤ Ö €ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿg  ‚  € ˜`?ÿ‚  € š`?ÿ€“ 2€¤ €¢ "€€¢ '¿ÿ9€¢`¤ ¿ÿG¤ ¿ÿB€¢`ƒ*àƒ8`€ `"2¿ÿ@¤ ¿ÿ؃*ठ¿ÿ’ ¿ÿ’ ‚  € ˜`?ÿ‚  € š`?ÿ€“ 2¿ÿ•° €¢ "€€¢ '¿ÿ€€¢`¿ÿް ¿ÿŠ€¢`ƒ*àƒ8`€ `"¿ÿˆ° ¿ÿ¢&ƒ8`€ `'¿ÿ‚° ¿ÿ‡¢&° ’ ¿ÿTÖ’ ¿ÿQÖæ@ƒ- À$ÀÇà‘è ã¿@’ / €¢ €° °ÇàèÂJ@€ `€Ø @–`‚ ÿÚ@ €‹`€’`Ø* ÂJ@€ `¿ÿ÷Ø @ÃàÀ*ÿñ€L#+X7?XüTT,japr_cpystrn.capr_collapse_spaces__ctypeapr_cpystrnstrrchrapr_tokenize_to_argvapr_filepath_name_getapr_palloc < X\ ” as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lÌ8 Øu!PH ,˜? /0 1215610924 0 0 100644 1500 ` ELFÀ4(.shstrtab.text.symtab.strtab.rela.text.comment㿬`¸¦ ¤ ®º¶àž ÿ À€ˆ`€ Ð@š¤ à €ž ÿ À €ˆ`2¿ÿü¤ ¢ ÿ @€ˆ`"€  Àš¦àÐ À¢ ÿ @ €ˆ`2¿ÿü¦à À€ˆ`€2‚ @€ˆ`€.‚ƒ, ƒ8`‚`0›* € ›;`˜`?ÿš`0€  ‚`?ÿ€“"€9”–”@€¨ €›(`‚`ÿØ@›;`€‹ €e” €¢@ &€j°?ÿ4€h°  À›(`‚`ÿØ@“;`€‹ ¿ÿí–à €Ú@€‹`2€[°?ÿ‚ƒ(`€ `€S€¦ 2€ ƒ, ›* ƒ8`‘;`€ @&€M°?ÿ€C¤ ¿ÿ¢¦à@ @¿ÿñƒ, ’@¨Ö €‚ àÿÚ@€‹`€ª Ø @‚ ÿÚ@€‹`€.ƒ*à›+ ƒ8`›;`€ @ €€¥`"€ª?ÿ” ’`Ö €‚ àÿÚ@€‹`2¿ÿìØ @ @Ú@€‹`€‚?ÿ‚•`"¿ÿ€°€€ `€¥`¿ÿì” ª ¿ÿê’`2¿ÿç” €£`¿ÿð’`¿ÿã” €° ‚ €°€° °ÇàèÀ`” À`” ÿñÈØ.6>Èapr_strnatcmp.cstrnatcmp0apr_strnatcasecmptoupper__ctypeapr_strnatcmp  ¤°È Ì Ø Ü as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lèT€ÔL! ` ,€? apr_strings.o/ 1215610929 0 0 100644 3540 ` ELF 4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿–`€ ¢ @  ’@¢’@”Çà‘èã¿’ ”€¦`€  @‚€ `€´ @@’  ’@”À,Çà‘èã¿’ €¦`€   @ ’@”À,Çà‘èã¿’€¦`€  @ ’@”Çà‘èã¿xô' Lö' Pø' T ú' Xò' H€¦`´ ¸ ¢ H€¶ Lº¿Ø@²¸€¦ €¶àÐ'@´ º`à@€¤ ¿ÿô@’ ú@°€§` ´ €¶`€²¿Ô²`ø@’@”úÀ´  €§`€¶à€¦ ¿ÿó@¸’@”úÀ €§`¿ÿó¶àÀ,Çàèã¿¢€¦ ’ € Â ’@¢„ÿ¿ÿý  €¦à2€Ò&À@’`°¢ €¦ €¶Ò@Ô Â ¶À¢„ÿ€   Ò@Ô Â ¶À¢„ÿ¿ÿð  À.ÀÇàèã¿@À"”@’@Ð>ðÇàèÀ`’ À`” ã¿@’ ° €¦`€  À.@’  0°?ÿÐ.@’ ²’ 2¿ÿ÷€¤ €‚ -°?ÿ€Â.² ¿ÿì  Çàèã¿@’ ° €¦`€  À.@’  0°?ÿÐ.@’ ²’ 2¿ÿ÷€¤ €‚ -°?ÿ€Â.² ¿ÿì  Çàèã¿@’ ¢ ° €¦`€´ À.’” @– ’`0°?ÿÒ.’” @–  €” ¿ÿñ¢ €¦ € ‚ -°?ÿ€Â.¢  `¿ÿæ´ Çàè㿈š`Ø`Ö `Â`Ø'¿èÂ7¿ìÖ/¿î€¦ €H¿è€¦ €L  *—. ƒ6` ™> šÀ’cÿ° €£ € ² —. ƒ6` ™> šÀ’cÿ ° €£ ¿ÿø² €£ €€£cÌ¿ÿô—. €¦ €N€š €¦` "€š €¢cÌ€‚ ‚ €‹@€7€¢aÿƒ*`‚@ ‚a›8`›3`‚@ “8` €¢` €²†`’ ˜ ÚJ” –@’ €¢ €3à. à.€à. à. €-À. š ‚ -Â. Ú. Ú.€¿ÿùÚ. €€¦cÌ¿ÿ´  *” –@’ €¢ €‚ *Â. Â.€Â. ¿ÿçÂ. 4€²†`ØJ” –@’ ¿ÿÖ€¢ ¿ÿÁƒ*`€¦`¿ÿ¿‚@ ¿ÿ¯€¦ Çà‘èKMGTPE%d.%d%c%3d %3d%cÿñ#,10€:Ø4FQ0 _fovØ8‚œ<‘Ðüª°€³@¿ÇÒÛ(°èí@\ú apr_strings.capr_snprintfstrlen__moddi3.divapr_itoaapr_strtoffapr_atoi64apr_off_t_toamemchr__divdi3memcpyapr_pmemdupapr_pstrmemdupapr_pstrcatapr_strfsizeapr_ltoaapr_pstrdupstrtollapr_palloc___errnoapr_pstrcatv.remapr_pstrndupapr_strtoi64 0\ xˆ´ÄðH„ÀìdŒ°Üðø     $ 8Xp¸Øð8hˆ Ô Ø Ü Ì à ìD H Tˆ Œ ˜as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= tÌ@`À! ) (( 4 P? apr_strtok.o/ 1215610933 0 0 100644 740 ` ELFÈ4(.shstrtab.text.symtab.strtab.rela.text.commentã¿€¦ 2€ ÂN€ð€@€¢ €   ° ÂN’`¿ÿø€° à&€ÂL’`€@€¢ "¿ÿø  À,€‚`€Â&€¿ÿìÂNÇàèÿñ”apr_strtok.capr_strtokstrchr\as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l”PP !p ,ˆ? apr_fnmatch.o/ 1215610938 0 0 100644 3012 ` ELF €4(.shstrtab.text.rodata.symtab.strtab.rela.text.comment㿬àƒ* ƒ8`€ `?€O° € `?€€ `[€ `€€ `*"€(à€Ž €ƒ* ƒ8`ÚN@€£@2€6° ¿ÿè²`€T€ `\¿ÿô€Ž €Ž ¿ÿñ€Ž Â›(`€£`¿ÿê° °?ÿ€Ž ¿ÿé \@ ÿ @Ð@€¤"¿ÿϲ`€° ›, ƒ;`€ `*2€ ÂN@° à›, ƒ;`€ `*"¿ÿü° ÂN@€ `.€ËÖ@ƒ;`€ `€û€ `/€ß€Ž €Ý@’ /²’ ¿ÿ²€ú° ÂN@€ `¿ÿüÖ@€ `/€€Ž ƒ*àƒ8`€ `.2¿ÿ¢²`€Ž "¿ÿŸ²`€¦@¿ÿ "¿ÿš²`ÂNÿ€ `/"€â° ¿ÿ”²`ÂN@€ `¿ÿâÖ@€ `/€‡ƒ*àƒ8`€ `.€Š€Ž ÂNš`!€  ˜`?ÿ‚`^€ ›*à‚`?ÿ¨“¥;`€¢¢ Ú @ƒ+`ƒ8`€ `]¢`€9¦ €ª  ÿ€! ÂL@€ `-€6Ø @ƒ:à€ @€&€Ž €š ƒ+`ƒ8`€ `]€%¢`—+`ƒ:à€ `\¿ÿë€¢à€Ž ¿ÿ耢à @—(`š€¢à¿ÿä¢` °’ 2¿ÿO²`€™° @ `ÿ @  ÿ€¤¿ÿàØ @š ƒ+`ƒ8`¦ € `]¿ÿߢ`€¤À¿ÿê¿ÿê°’ ð `•. ƒ: € `"¿ÿɃ:à€ `]¿ÿÅ€ `\€J¢`™: €£ ¿ÿÙƒ:à€ @€€Ž €£6€¦ €Ž €¿ÿºØ @@ `ÿ @€¤4¿ÿ²Ø @@ @ ÿ€¤4¿ÿªØ @¦ ¿ÿ§Ø @¿ÿfƒ*à€T° €Ž ¿ÿWƒ8`€ `.2¿ÿ|ÂN€Ž "¿ÿyÂN€¦@¿ÿN€Ž "¿ÿtÂNÂNÿ€ `/2¿ÿpÂN€@° €Ž ¿ÿ7ƒ;`€¦@¿ÿ@€Ž ¿ÿ3€ `ÂNÿ€ `/¿ÿ.ƒ;`€2° €Ž ¿ÿ¸™:  @°¢`¿ÿ²•(`ÂN@€ €&°@ ¡*à€¤ ¿ÿ(¢¿û€’¡(`€¤ "€° ’@”²`€¢ €ƒ< € `/2¿ÿóÂ@€Ž "¿ÿðÂ@€ ° €Ž € ° @’ /€ €°@ ° Çàè ƒ(`€ `€š ƒ8`€ `["€ š`€€ `\€ `*€€ `?"€   ƒ(`€ `2¿ÿòƒ8`€  € € `]2¿ÿ÷ €£`"¿ÿô € ¿ÿï Ãàã¿(@’ / ’ "€4’”$@¢° ’ ” @Ð&@’¿Œ@”€¢ € ¢¿0€)@Ð@ @Ò¿äÐ$Ô¿Œ€@€¢ ” €@ҿ䀢 ¿ÿîÔ¿Œ€@€¢ ” ¿ÿö@пŒ€  @’ \ €¢ ¿ÿÉ¢`¿ÿÎ’ Çà‘è.ÿñ@)Ô8@OVc@”t€ˆ•¤apr_fnmatch.capr_dir_closeapr_fnmatchapr_match_globstrrchrapr_array_makestrchrapr_dir_readapr_fnmatch_testapr_pstrduptolowerapr_dir_openapr_array_pushapr_pstrndup´ À < Ü è ”   ´ À Ø Üø$<L ` x ¨¸À Ð as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= täX\!l±)   4 @? apr_snprintf.o/ 1215610948 0 0 100644 11324 ` ELF*ü4(.shstrtab.rodata.text.symtab.strtab.rela.text.comment@$?ž¸Që…¸?ð0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF(null)bogus %pnanã¿pð?¿ðÕ¿ð€¦ N€ð \´ NÙ`¢ ªŠÌ€M²‚ Â'• ªÕ?¿ðÙ?¿Ðпð@”¿è¸ PÑ¿èٿЕ  — !ª L€K €§€,€¤€)Ù`‘¢ ÌÑ?¿ðÕ?¿ØÐ¿ð@”¿èÙ`‘ LÙ`‘¢ L‘ HÑ'¿ð¿ð¸?ÿÁ?¿à‚`0Â/¢`€§€Õ¿ØÑ¿èÙ`ª L¿ÿ〤€ €§`ÂÂ.@¸ ²`€¤8¿ÿü€§`€¸¸€§€,€¦@‚ Â&À€iÀ.À'Õ?¿ðÙ?¿Ðпð@”¿è¸ PÑ¿èٿЕ  — !ª L¿ÿ¹ ªŠÌ¿ÿäÝ`‘¢‰NÙ` (€ƒ )— !‘¢‰N (ƒ )¢ÿª Ì)¿ÿù•  ¿ÿÑÑ?¿à€â&À€¤€Ñ`•¢‰HÕ?¿ðпð@”¿àÑ¿à‘ HÑ'¿ð¿ð‚`0Â.@²`•  €¦@¿ÿî— !€¤8€Ú€(À. Oš`ƒ+`ƒ8`€ `9€ ²– 0š 0€ ˜ 1¸?ÿ‚`Â/ÂO€ `9$€À.@€§8¿ÿ÷Ú/Ø/ÂÀ‚`€§`¿ÿõÂ&À€¦@8€Ö.@ÂO€ `9¿ÿò²`€À.@Ú/À.@Çàè㿈ú# \’”–˜ÿÿ7š Çà‘èã¿€¦`€²À&€@’ ƒ* ‚@‚@‚&²ÿ‚`0°€¢ ¿ÿõÂ.@€‚&Àƒ6 € `¿ÿïÂ&€¿ÿí° Â'Çà‘èã¿ ¢€¦ ¤€š €¦ 2€š €¦ÿ(€š € ‚@ €‹@€  š†@ ˜ ˜F €£ € – € ‚`?ÿ€ŠÀ€€¦ °²´¶ÿÿ™è€€ €£ÿ¿ÿó€ – ‚`?ÿ€ŠÀ2¿ÿ󰀦 €ƒ6 À&À’– @” —*`–‚À šÀ ‚$@ ¤¿ÿ‚`0 ¢ €” ¿ÿòÂ,€€‚'€ `¿ÿíÂ&À¢ ¿ÿê `Â'@Çà‘è㿵. µ> º ž»/@€¦ Xš¸ÿ¶`€´¶`‚´¿ÿú@±6€¦ ¿ÿûú.€‚#ÀÂ#@Çà‘è㿃.àƒ8`š € `X›+@ ’²ÿ¢`´€°¢`€¢ €‚@ €¢ €€¢ÿ8€ Ú@µ. ¶° ²µ> ÿÿÈ™èÚ@°?ÿÚ.@”€’ ¿ÿú‚@ ‚'Â'@Çàèã¼XÔ€ƒ* ð' D€ `° ¢ ¨ ¸ À'¼Üæ@€ê`ƒ8`€ `%€€¤à€€¤À:€æ&@Ô,À¦à° ´ Ô€ƒ* € `2¿ÿòƒ8`æ&@€˜Â DŸÀ@€¢ €˜?ÿæ@ê`Ô€Ô,À¿ÿì¦à´ Ô€š ‚  ÿØ@ 𠀋 Ú'¼ÐÚ'¼ðÀ'¼Ø® ¬ ¤ À/¼ïÀ'¼Ô€6º ƒ* ƒ8`€ `-"€´ € `+€€ `#€€ ` €€ `0€À´ ¤ 0Ô€ƒ* ƒ8`€ `-¿ÿò€ `+´ À'¼ð¿ÿùÔ€´ ® ¿ÿõÔ€´ ¬ ¿ÿñÔ€‚ ´ Â'¼Ø¿ÿìÔ€ƒ* ƒ8`€ `*€ ¸ ÔÀ¶à´ €¢ €¸ ¸ Ô€ƒ* ƒ8`€ `l"€zÂN ƒ* ƒ8`€ `q€—€ `l€˜€ `h€Ò– ƒ* ƒ8`€ `x8€ ‚ %ƒ(`š`Ø@ %Â/½è‚ Ô/½éÂ'½ ¢½è¤ ¼ï—(`€¢à€Ú¼Ô‚`€¤@€ ‚½è€ @€Ø¼ï¢ÿØ,@½ ‚`Â'½ Ú¼Ô¼ð€‹@€)Â¼ÐØ½ €¥ €&€ `‚  0‚`0€ š`?ÿ€  ‚@ €‹@€€¤à€€¤À:€ æ&@ @Â,À¦àؽ ‚?ÿÂ'½ ° ¢`¨?ÿ€¤à€€¤À:€Ræ&@ä,À¦à¨?ÿ½ €¥¿ÿö° ¼Ѐ `€%འڼð¼Ԁ¨@ "¿ÿB´ Ø½ €¥ ¿ÿ=€¤à€€¤À:€æ&@ä,À¦àؽ ¨?ÿ¿ÿõ° Ø DŸÃ€¢ 2€K˜?ÿæ@¿ÿóê`€ `l¿ÿˆƒ* ´ – ¿ÿŒÔ€€¤ € €¤à¿ÿÛÚ¼ð @Â,À¦à°  „?ÿ¿ÿÓ¢`€¤à¿ÿû€¤À*¿ÿ÷ @æ&@Ø DŸÃ€¢ €)˜?ÿæ@¿ÿìê`´ ¿ÿâ– ´ – ¿ÿjÔ€Ú DŸÃ@€¢ €˜?ÿæ@¿ÿ©ê`€¢à€p€¢à€€¢à€û‚‚¶àÐ@•* •: ’ –¿ðÿþŠ˜½ ¢€§`€Ú¼Ü‚ € aÿ€šš!ÿ½ € @ :€ ڼܘ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ ڼ܀  ‚@ €€¿ÿI¼ï€¢ÿÂ,@¢ÿš 0Ú,@½ ‚`¿ÿ>Â'½ €¢à€V€¢à€€¢à€Í‚‚¶àÂ@Â'¼Üмܒ ”½$–¿ðÿý똽 ¢€§`¿ÿ*Â¼ï‚ € aÿ€šš!ÿ½ € @ ¿ÿ ˜ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ ¿ÿ¼ïâÀ€¤`€;¶à€§`€J˜ @¿ÿ Ð'½ ´ ÂN€€ `T€ôÔ€€ `T€W€ `p€ `A"€ÒÂÀ€€ `I€ `¿þ„ƒ* ‚ Â'½ ¢`¶à¿þõÀ/¼ï€¢à€Ñ€¢à€€¢à€š‚‚¶àÐ@•* •: ’ –¿ðÿþ ˜½ ¢€§`€€¥ ‚ € aÿ€šš!ÿ½ € @ € €¥ ˜ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ €¥ ¿þμïÂL@€ `0¿þÉš 0¢ÿÚ,@½ ‚`¿þÃÂ'½ €¢à"€ŒÖÀ€¢à€€¢à"€èÚÀÚÀð#@¶à¿þ¶À'¼Ð€¢à€Á€¢à€€¢à€^‚‚¶àÂ@Â'¼Üмܒ ”½$–¿ðÿýc˜½ ¢€§`€Â½$‚ € aÿ€šš!ÿ½ € @ € ˜ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ ½$€ `€ ˜ -€¥à€óš +¼؀ `¿þ‡Â¼ï˜ ¿þƒØ/¼ï€§`€W€§ ¸ ØàÂÀÂ'½ØØ'½Ü˜½ нؔ–½ÿý(š½(º½ñ½ € `¶à˜€¢‚ -Â/½ñ¢½òš?ÿ€£`€ à½ÂJ € `0€à½šÿ€£`¿ÿú˜?ÿཀ¤ €‚$ € `4€ ?ÿ€¤?ý€º€¤  ?ÿà'½ Â,@¢`‚ .Â,@€š  Â,@š` €£@ ¿ÿû¢`‚ eÂ,@½€ `€Ñ¢`‚ +Â,@à½@’ d€¢ €¢`‚ 0Â,@¢`à½@’ €¢ € @’ d@’  0Ð,@¢`à½@’  0Ð,@¢`ÂLÿ‚`.€ š`?ÿš+@¢$@ À,@ÂO@€ `-¢€uÂ@€¥à€]ؼ؂ +Â/¼ï@ €¥ €Ð'½ @’ .€¢ €‚ .ÂN€€ `G¿ýþ¼ï@’ e€¢ ¿ý÷‚ E¿ýõÂ*ØàÚÀÚ'½ØØ'½ÜѽØÑ?¼à@Ð¼à€¢ €¼¶à€§`€Â/¼Ï€ºº ؼϙ+ ƒ; Ø'¼Ä€ `f€¢½ñмà”`–½˜½$ÿüŠš½ˆ‚`Ö š àÿØ @€‹ €h Ø¼Äƒ; € `f€|ƒ?`‚ @ƒ0`š½ñ€@Ö/½ñ  €¢`‚ .Â/½ò¢`ÂL€€ `Â,@  ÂL€ `¢`¿ÿû Ø¼Äƒ; € `f€Ú¼ÏÚ,@½ÿ¢`€¢ €Ð'½‚ +Â,@¢`‚ 0Â,@¢`Â,@¢`˜½ñ‚$@ Â'½ ½$€ `€#¢½ñš -¿ý—Ú/¼ïÚÀ‚ Ú/½èÂ'½ ¶à¿ý¢½è‚ %š Â/½èÚ'½ ¿ý‰¢½èš  ÿ–  @ €ˆ`€ƒ* ´ Ô€˜  ÿƒ8`Ú €‹`€¨Л* ƒ- ´ ‚@Ô€¨@›;`˜  ÿš@ €ˆ`¿ÿõ¨К €Ú'¼Ôƒ8`€ `*€*À'¼Ôƒ* ƒ8`€ `.¿ýCº ´ Ô€š  ÿ–` @ €ˆ`¿ý-º ƒ* ´ Ô€˜  ÿƒ8`Ú €‹`¸Ð¿ý0›* ƒ/ ´ ‚@Ô€¸@›;`˜  ÿš@ €ˆ`¿ÿô¸д – ¿ý.Ô€ÂÀ˜ ¶à´ ¨€ `€Ø'¼Ô¿ÿÐÔ€š™> Ø:À¶à¿ý0À'¼Ð‚ Â'½ ¿ý+¢`"¿þ¬¸ ¿þ«Øà¨ À'¼ð¿ÿ½Ô€ØàÂÀØ'½äÂ'½à—* —:àÐ½à” ˜¿ðÿüYš½ ¢¿þ3¶àÂÀ€ `€9¶àÐ@’ ”¼ô–¿ðÿûɘ½ €§`¿ý¢Â½ €§*¿ýø'½ ¿ý¤ ØàÂÀØ'½äÂ'½à—* —:àÐ½à” ˜¿ðÿü8š½ ¢¿ý”¶àØàÚÀÚ'½àØ'½äÐ½à” –½$˜¿ðÿûÅš½ ¢¿þE¶àØàÚÀÚ'½àØ'½äÐ½à” –½$˜¿ðÿû¸š½ ¢¿ý°¶à‚ Â'½ ¿üÔ¢`ð3@¶à¿üÑÀ'¼ÐØ DŸÃ€¢ €n˜?ÿæ@¿üðê`À'½ €£¿üÚÂL@€ `¿üÀ¤ ‚ ˜š`€ @¿ü¹Â'½ ÂK@€ `¿ÿù‚ ¿ü´¤ €£ ¿þ¦š ¿þ¤Ú/¼ï€þ€ `t¿ý²‚ ÂÀ€ `¿ÿ϶àÐ@’ ” x–¿ðÿûȘ½ ¿ÿ—€§`¿þ‘¢`$€ÙÂJš €£@ €– .€ š`€£@ € འÂ,@ཀ£@ ¿ÿ÷¢`Ö,@¿ÿô¢`€£6¿þiÂLÿ˜ – 0Ö,@½€£¢`¿ÿü˜ ‚ .¿þ\Â,@€¥à€Aؼ؂ +¿üsÂ/¼ï¶à¿ý Ð`  à'½¿þ0‚ -¶à¿ý7Â`@Ð'½ ” ’@½ñ¿þÄÀ'½$‚½ˆÂ# \Ð¼à”–½˜½$ÿúIš ¿þ‚¶à¿ýjÐ`¶à¿ý¦ÂP`ؽ€£ €Î‚?ÿÂ'½ Â,@Ú½‚ šÿÚ'½€ `  ¿ÿø¢`ƒ?`‚ @ƒ0`€@"¿þÂL‚ .Â,@¿þz¢`€£ ¿ü5Â¼ïš ¿ü1Ú/¼ï€ `¿ÿV¶àâ@¤¿ð–’ ”¼ü˜¼øÿúä `ÿ‚?ÿ?#  . @–à(@’ ”¼ü˜¼øÿúØ‘2 ‚?ÿ‘4`–à(@’ ”¼ü˜¼øÿúÏ ÿ‚?ÿ‘4`à(@–’ ”¼üÿúǘ¼ø¤$€€§`ä'½ ¿ü¢¿þþ€§Â,š Ú'½ ¿ýþÀ,@ ¿ý‚ àÀ€¤ ¿ÿ¶à¤¿ð”½–˜½’ ÿú®Ð ‚ :¢?ÿÂ,@’@½@н € `€aÐ'½?Ú 8‚cÿ€£@€ ‚ ] 4€ `€‚ ] 0€ `"€T¢$@‚ ]Â,ÿÚ½š$@ ‚ [Â+þÿ¢þÒ½Ô½@‚$€€§`¿ûÅÂ'½ ¿þÀ€§€ `0€‚ .Â,@¢`ཀ¤ ¿ÿ#š ‚ 0  à'½Â,@ཀ¤ ¿ÿû¢`¿ÿš ÐÀ’ ” x–¿ðÿúÒ˜½ ¢¿û§¶à’ ”½–½‚ÿúa˜½Â½€ š@?ÿš þš`-Ú,@½ € `€¢`‚ÿ€ ÿÂ'½"¿ýõ˜½ñ Â,@Ú½šÿ€£ÿ  ¢`¿ÿ÷Ú'½‚ 0Â,@¢`¿ÿï½¢$@”¿ÿ¶Ò½‚ 0š½ñÂ/½ñ€§`€¢`‚ .Â/½òš ‚½ñÚ'½€£ ¿ýµ¢`˜ 0Ø,@½š‚`Â'½€£`¿ÿú¢`¿ý«ÂL€¥ "¿ý¨ÂL‚ .˜½ñÂ/½ò¿ý¢¢ Çà‘è Ãà?ÿ㿈‚ö' Pø' Tú' X€¦`”€‚ÿÀ'¿èÀ'¿ì ’¿è@– P€¦`€°ÿ¿èÀ(@€¢?ÿ2€°0€Â'¿ì¿ÿñð'¿èÇàè㿈‚€¦`”–€‚ÿÀ'¿èÀ'¿ì @’¿è€¦`€°ÿ¿èÀ(@€¢?ÿ2€°0€Â'¿ì¿ÿòð'¿èÇàèÿñ,´(4t0@°=hL8[¨0hØhpxP… ’¼xŸ©°µ4lÃËÐ×ÝçîðÄýapr_snprintf.capr_ecvtsnprintf_flushconv_10conv_p2_quadupper_digits.1upper_digits.3conv_10_quadconv_p2apr_cvtlow_digits.0low_digits.2apr_snprintf__lshrdi3strlen.divapr_vsnprintf__ctypemodfmemcpy.udiv__udivdi3strchrapr_vformatterapr_sockaddr_ip_getisnan.rem P ” ¨° ´ ¼ À ô ü  t° ´ ¼ À    Lxø 8 8  d hl h| P€ P̨ °    Ð ÐP €T €  X ˆ ` ˆX€”œ¸,Tˆè ì   ¼ È ˆ ˜” ˜à €ì € ´è ”œÐ XÔ  Ø  Ü  à  ä  è  ì  ð  ô  ø  ü                    $  (  ,  0  4  8  <  @  D  H  L  P  T  X  \  `  d h  l  p  t  x  |  €  „  ˆ  Œ    ”  ˜  œ     ¤  ¨  ¬  °  ´  ¸  ¼  À  Ä  È  Ì  Ð  Ô  Ø  Ü  à  ä pè  ì 8ð  ô  ø  ü                    $  (  ,  0  x4  8  <  @  D  H  L  P  T  X  \ è`  ld ph pl 8p  t  lx  |  €  „  ˆ  8Œ  p  ”  ˜  œ  è   ¤  L¨  ¬  °  xè ´ì ´ôX ´\ ´`as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= xœ ´à! ”)!°  4*¼?apr_tables.o/ 1215610956 0 0 100644 9548 ` ELF$ 4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿€¦ €’€§ € @ ’@”@’ € Ð& ’@’@€Ð& ¿ÿê´ ô& ò&ö& À& Çà耢 €š  € `€š Ãà ã¿’ @ °’”–ÿÿ˘ Çàèã¿@€¢ € ‚ Ò ’ÿÒ& @Ð Â ‚@Çà‘èã¿Ò  €¢@€¨@ €#æ €¢`$€¨ Ð @’’@Ð¦Ò @Ð ”Ò @à â ’%@¤’@’ @”è& æ& Ò ‚`Â& @Ð Çà‘ìÀã¿Ò  €¢@€¢@ €à €¢`$€¢ Ð @’’@Ð Ò @Ð ”Ò @â& à& Ò ‚`Â& @Ð Çà‘ìã¿Ð ä`‚Ò € @ €!è €¢`€ ¢@ ‚€ @4¿ÿÿ¢@’@ ’@Д@’  Ð @’”@Ò ¦â& à& Ð €ä`€æ ¿ÿ⢠@’ ’@”À@Ò`Ú` ‚@ Â& Çàèã¿’ @ °Ö`˜ ’ÿÿ#Ô` Ò`@Ð`”Ò`@Ð à`â Ò ’"@à& @¤’@ @”@’ Çàèã¿@’ Â`Â" Ø`Â`Ú`ð"Â" Ú" Ø" Çà‘èã¿@’°@’Çàèã¿â`€¤`€HªÚ`€£`€Eƒ.   µ8`¦ €¤ € ¦@€¤ € ¤ Â`€€¤€@¦À€¤€¿ÿó  @’àƒ-`°©8`¢¤ à`€¤ €¤ ô– €Â`€¤€€  €¥ ¿ÿõ€¤ ê,@¢`¿ÿ÷¤ ô– "¿ÿôÂ`@  ¦’@”Â`€¤€¿ÿì¢@À,@€@’ À*Çà‘èÃà€¢ €š  € `€š Ãà ã¿’!@ °’”– ÿþŠ˜ À& Çàèã¿’!@ °– ˜ ’ÿþ|Ô` Â`”@”€•* Ò`@Ð Â`Â& ’`” €@  ˜’`˜@” €Â`Â& Çàèã¿Þ À& €£àø €² š úÂ@‚`»(`¶@ƒ+@ú ¸ ´@€@€ò&à˜ò&àô& ²`€£À4¿ÿñúÇàèÀ" ÃàÀ" ã¿”€¦`€A° Ö@˜ à‚ ƒ(@ Ú €‹@€9ƒ*à¡8`‚¡, € `€)š€ `€¡, š`ÂK@ € `€¡, ÂK` ƒ+ ‚@ Ø`Ö`˜š ‚À š@ ‚@ Ø ƒ(`¢›+`7÷÷° ‚c߀¦€    € @€ ’° €¦(¿ÿû € ° ÂN` ¿ÿך`@Ѐ¢ 2¿ÿô° ð Çàèã¿âN@‚£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €8¢ @§+ ‚ÀÚ`Ô`˜˜@ Ò ˜ –€ –À š@  ™+ —*àš@  @ ¤@ ›+`€¤€¨@ ‚ÀÒ `˜ÿþB ’@ÐÐ$Ð@’â$ €WÐ$ @Ѐ¢ €’  €¤8¿ÿêÒ Â € @¿ÿõ’  €¤(¿ÿû ¿ÿàÒ §+ š@ ‚ÀÒ Ò `¿ÿÚÚ& @ÐÐ$   €¤´ €¦ 0€3€¤à"€   ÂÂ$ÀÚ Ú$à Â$à¦à ´   €¤€€¤à € @¿ÿï’@Ѐ¢ ¿ÿ뀤à ’ÿ¿ÿñÒ& ¿ÿï¦2€ €¤€€¦ Â$ÀÚ Ú$à Â$à  ¦à €¤*¿ÿøÂÿÿ è€ÿÿèÇàèã¿âN@‚£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €1¢ @§+ ‚ÀÚ`Ô`˜˜@ Ò ˜ –€ –À š@  ™+ —*àš@  @ ¤@ ›+`€¤€¨@ ‚ÀÒ `˜ÿý¨â" ò"€Tô" @Ѐ¢ "€ô$   €¤8¿ÿñÒ Â € @¿ÿõ’  €¤(¿ÿû ¿ÿçÒ §+ š@ ‚ÀÒ Ò `¿ÿáÚ&   €¤´ €¦ 0€3€¤à"€   ÂÂ$ÀÚ Ú$à Â$à¦à ´   €¤€€¤à € @¿ÿï’@Ѐ¢ ¿ÿ뀤à ’ÿ¿ÿñÒ& ¿ÿï¦2€ €¤€€¦ Â$ÀÚ Ú$à Â$à  ¦à €¤*¿ÿøÂÿþzè€ÿþvèÇàèã¿Ø@– ‚ ƒ(@ Ú €‹@€gƒ+ £8`‚£,`€ `€Gš€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@ƒ*à‚@Ø`Ö`˜š ‚À š@ ‚@ ƒ(`Ø ¤›+`7÷÷  ‚c߀¤€¢ @0€B  €¤€? € @¿ÿú’@Ѐ¢ 2¿ÿö  Ø š š@ ¦›+`˜?ÿ   ¨@ Ø& €¤€€¤Â € @€’ÂÂ$ÀÚ Ú$à Â$à¦à ¿ÿò  ÂN`¢@¿ÿ¹š`Â$ÀÚ Ú$à Â$à  ¦à €¤*¿ÿøÂÿþè@Ѐ¢ 2¿ÿå ‚ÿÂ& ¿ÿØ  Çàèã¿âN@‚£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €7¢ @§+ ‚ÀØ`Ö`˜š ‚À š@ ‚@ Ø ›+`ƒ(`¤  €¤8€ Ø Â € @€’  €¤(¿ÿûÂ Ø ‚ÀØ `˜ÿü£ ’@ÐÐ$Ð@’€â$ @Ѐ¢ 2¿ÿë  Ð” –Ò @˜ € Ð$ §+ š@ ‚ÀØ Ø `¿ÿàÚ& Ð$ Çàèã¿âN@‚£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €1¢ @§+ ‚ÀØ`Ö`˜š ‚À š@ ‚@ Ø ›+`ƒ(`¤  €¤8€ Ø Â € @€’  €¤(¿ÿûÂ Ø ‚ÀØ `˜ÿüEâ" ò"€ô" @Ѐ¢ 2¿ÿñ  Д –Ò @˜ € Ð$ §+ š@ ‚ÀØ Ø `¿ÿæÚ& Çàèã¿Â@‚`š ›+@™(` ˜Ö ”@ €ˆ@ Ö# ˜€šÖ# Ô& âN@‚”`€£,`ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@7÷÷‚cßÿü¢ @ ’@ÐÐ$Ð@’â$ Ð$ Çàèã¿Â@‚`š ›+@™(` ˜Ö ”@ €ˆ@ Ö# ˜€šÖ# Ô& ðN@‚– €±. ÂN`°š`€ `€±. š`ÂK@°€ `€±. ÂK`°7÷÷‚cßÿûаð" ò"ô" Çàèã¿’!@Â`Â"  Ø`Â`Ú`°à"Â" Ú" Ø" @’ÿüÜÇàè㿚¸7÷÷¶àæ@ºcßê ° €¤à€F® Ø À– ›-À  €ˆ@ €6€¤àƒ+ ¥8`‚¥, € `€šÂLऀšà€ `€¥, š`ÂK@¤€€ `€¥, ÂK`¤€ƒ*àš@à`Â`˜€ @€¤ €‚‚@¬ £(`Ð@¨@€¢ €   € @€/’€¥à€¢`  ˜€ @6¿ÿóÐ@€¥à"€° €¤à€,æÀ€¤à¿ÿ¿¶à0€&¿ÿø°  € `€!  € ¢ €¥à"¿ÿï° Â € @¿ÿ逥àÂ@š@’€ `  ¿ÿó¢` ŸÇÔ`¿ÿï®@€¢ ¿ÿÐÔ ŸÇÒ@¿ÿË®Çàèã¿ö' Pø' Tú' X’”@– PÇà‘èã¿€Ò ð'¿ì€¢`€ò'¿èÐ@“*`ð¿ìö  ¦Ø šØ$˜ šƒÿ¿ÿý  ¿ìÐ@@“.àÐ'¿ä€¦àº€'  ² €¦@€Zڿ쀦@ä¿ä´ €C°@®¸À€§¦€¢¸­. ¡-à€¤À€¹€¤@€.€¤ÀÚ€Ð@@Ò@€¢ $€Â@Â@Â$€¢`  ¿ÿ鸞£, ¤@ÂÀÚ Ð@@Ò@  €¢ €˜ ÚÀ Â$ÀÚ$ €£ ¿ÿñ£, ¿ÿʲ Â$€¦à¬ ¿ÿÖ¤ Â$€¦à¤ ¬ €¤À*¿ÿû€´€®€€¥À ¿ÿøÀØ¿ä‚$€ €¡8`Â@ Ø¿ä  Â# €¤ ¿ÿû›, ¿äú'¿ä²€¦@ ¿ÿ¬ºÚ¿ìÂ`ƒ(`ª@ `¨€¤ €¸ €bð¿ì  €¤€5¨ÐÒÚ Â`€£@¿ÿ÷‚Ð@Ò@€¢ ¿ÿñ‚¦ ¬€¸ ÒÚ Â`€£@€ ¿èÐ@Ò@€¢ €Â¿è¦à€¤À*¿ÿòÐÀ¿耠`€I¦ÿüÂÀØ`Ú€Ø#`¬  €¥€¿ÿüÀ @€¤*¿ÿÐЀ§ €(ð¿ì¿ìÚ`‚@ Ø¿ì‚@ Ö ƒ(`”@ ˜ € `"€ ˜ Â"À Â"àÚ Ú"à–à ˜ €£ *¿ÿõš"€ ›;`ƒ+`‚@ ™(`‚@ ›(`‚@ ™(`‚@ Ø¿ìÚ š@Ú# ð¿ìÿûuèÂ$€¢`¤   €¤@*¿ÿû´€®€€¥À*¿ÿ9¸À¿ÿwØ¿ä¢ ¤Â€@Ð`¢@¤ €¤€¿ÿú¢`Ø¿ì’@Т¶¤® ,€º î,@¢`ú,@¢`€Ò`@€@Ð`¤ €¤€¿ÿó¢@À,@¿ÿšö `Çàèã¿à Â`‚€ `€+@’€¤ €˜ Ð`Ò ž ƒ+ ›+À ”@˜ €Š € –@ ˜‚@€Š@ €Â"à˜Â ‚@Â"à€£ ¿ÿñƒ+ ‚@Â& @“è’`” €@ ’`˜ ˜@” €Ò`¿ÿõÒ& Çàè, ÿñlp܈3ˆC h@R´8aà,n$Ü è¤P³º@DÌdìÚ|Èì¸Tþ ¨Àä<#<Ì1 pDˆ(Whe°thx„à\• Ô£¯°4¾ÉÐÜç ¼ö쀌(à<1„apr_tables.ctable_reindexapr_array_push_noclearmake_array_coreapr_table_setnapr_table_makeapr_table_doapr_array_appendapr_table_clearapr_table_getstrlenapr_array_copymemsetapr_array_pstrcatapr_array_catapr_table_overlapapr_table_overlayapr_table_unsetapr_array_popmemcpyapr_table_addapr_table_compressapr_is_empty_arrayapr_table_setapr_table_addnapr_table_mergeapr_table_mergenapr_table_vdoapr_pstrcatapr_array_makestrcasecmpstrcpyapr_pstrdupapr_pallocapr_array_pushapr_table_copyapr_is_empty_table.umulapr_array_copy_hdrapr_table_elts(,$8L(X$¸$è(P(\$l(|( (°Ì( ($((8T(¤(´$ÀÐ(à( (0X$€(¬(¼(Ðè$$)0  ¼$4 Hp$¼$ô$,DTà!ä#ô# ! p# à! T! ! |!8!`#p#€!” œ ¨à!ô ü à#ð#À$ô°!ü($d$è!(!H!ˆ!ä $@"L ˜(as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= tD¸¼°!l@)¬  4#Ì?apr_hash.o/ 1215610961 0 0 100644 3236 ` ELF ˆ4(.shstrtab.text.symtab.strtab.rela.text.comment㿵.`´ Ð@’°@“è ã¿’ (@‚  °Â" à"À" $À" ÿÿë’ ‚`Ð& Â& Çàèã¿@ò" Çà‘è € `€Â" ÔØ  š —+ €£€ ˜  Â@ Ú" € `¿ÿöÂ" Â@€Â"  Ãàã¿€¦ ’ €°`@°ò&À& À& À& @耢`€€¢ Â Ú`Ú"@€€¢à Ú` Ú"€€Â Ú`Ú"ÀÃàÂ@”€ ÿ€ ˜€ `€– ƒ* Ú À‚@@ ˜ƒ?ÿ¿ÿû–à0€ €€ `€ – šƒ* ‚@@ –àÚ À€£`¿ÿûƒ* ‚"À Â"@Ãàã¿Â ô' LŸÀ@’ L ‚@ƒ(`Ú ¤ô@ €¦ €°@€â L°ô€€¦ €€ Â € @2¿ÿú°Â  ’€ @¿ÿô”@Р€¢ 2¿ÿð°€ š@ € ‚`?ÿ€“@€ô $€¦ "€Ð€Â€Â$ $Ú Là& Ú&   À&€‚`Â$ ò& ö& €ô&@’ ¿ÿó´Çàèã¿Ú`“+`Â`’@ ’@“*`@’`,Ö`Ö" Â`¤ (ƒ(`ä" Ú`Ø` ‚@ð"à`Ú" Ø" À" $¢`,° ² ƒ. Þ€£à€‚€’@Ò @” ’`ÂàÚàØà ÖàÞÀÂ"ðÚ"ôØ"øÖ"ü²`€£à¿ÿò‚ Ö ° €¢À¿ÿçÀ @Çà‘èã¿’”ÿÿ– Ѐ¢ €° ð Çàèã¿’”ÿÿt–Ø€£ €)€¦à"€ ÂÂ Ú € @ €"ö# ‚@ ´`’ÿþå¶’@ € €¢ Âà‚@ƒ(`ÚÀÚ"ÀØ @Ø&À€¢ 2¿ÿ÷Ö ô& € ö& Â"Ú $ Ú#‚ÿÂ& Ø& $ÇàèÃàÐ ã¿@’ (ºÂ  Ú Ö`Ø °Â" Ú" ú"À" $€£ €¬ ˜  Ú`‚@ € @ (€{Ø& ‚ ‚`Â& ÿþ©Ò Ú Â`šƒ@€xÐ&   ® Ú ä ž ƒ-à ¤`"€®àÐ ’Ô` ‚ €™(` š€ Â"@Ú" Â` Ø`Ö`â@Â#` Ø#`Ö#`Ô#`  žà€¤`¿ÿí’`Ú ®à€£@¿ÿâƒ-àƒ, ‚@«(`® Ø`Ú`ƒ-àâ@€¤`€Q¨Â`Ú ‚@ §(` à@€¤ "€ ˜€€ä` à€¤ €˜€ô €¦€¿ÿú”Ð @Ò`€¢ 2¿ÿõà€¦à€2”Ò`Ö`Ø ŸÆÀšÐ$ €¤ 2€â@˜€Â` Ú`Â# Ô Â€Ú# Â%Ú š`Â`Ö`Ø"€Â# Ö# Ú& ª`¨ â@€¤`2¿ÿÇÂ`€Ø`ÿþ3Ò Ú Â`šƒ@¿ÿŒÐ& “+`’@ “*`@¿ÿ…¬Â`¿ÿÖÂ$ ®à€£:¿ÿªÚ`Çàè– À`˜ ÃàÐÿñ (ü #ì@2tGN¤`,Hnuè„(L’ð ¡tˆ¶è4ÃÌÐáìŒ`úàapr_hash.calloc_arrayfind_entryapr_hash_firstapr_hash_make_custommemsetapr_hash_pool_getapr_hash_thismemcmpapr_hash_countapr_hash_makeapr_hash_mergeapr_hashfunc_defaultapr_hash_getapr_hash_setapr_hash_overlayapr_pallocapr_hash_nextapr_hash_copy0\ ` x  | ð(|¤øŒ \” ˜ as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l¬P h! pØ , H? apr_atomic.o/ 1215610966 0 0 100644 2860 ` ELF è4(.shstrtab.text.bss.symtab.strtab.rela.text.commentÂ`€ @€À#`Ãà ã¿#Â`€ `€ ’ @’Ð$`” –à@  ƒ, Ð`@’ @”€¢ €  €¤ ¿ÿ÷ƒ, Çà‘èã¿’ @‘6 Ú`‘* à@@€¢ € à‚@Â&@€¢ €@Çà‘èã¿’ @‘6 Ú`‘* à@@€¢ € ‚ @Â&@€¢ €@Çàèã¿’ @‘6 Ú`‘* à@@€¢ €ò&@€¢ €@ÇàèÀ`’ ã¿’ @‘6 Ú`‘* à@@€¢ € ‚ÿÂ&ð@€¢ €@Çàèã¿’ @‘6 Ú`‘* à@@€¢ ¢€ð€¦€@€¢ €0€ò$@0¿ÿù@Çàèã¿’ @‘6 Ú`‘* à@@€¢ ¢€ ðò$@@€¢ €@Çàèã¿’ @‘6 Ú`‘* à@@€¢ ¢€ ð€¦"€ò$@@€¢ €@ÇàèÐÃàÿñ (.Ð?EhVl„œàh­ ¿p`ÐæÀdø$l $/ €?HxP hapr_atomic.chash_mutexatomic_cleanupabortapr_atomic_inc32.uremapr_atomic_sub32apr_pool_cleanup_nullapr_thread_mutex_unlockapr_thread_mutex_createapr_atomic_dec32apr_atomic_read32apr_atomic_set32apr_thread_mutex_lockapr_atomic_xchg32apr_atomic_casptrapr_pool_cleanup_registerapr_pallocapr_atomic_initapr_atomic_cas32apr_atomic_add32   $ ( <H L P T X \l x ¨° ´ Àä ø  (H \x€ „ ¨ ¼Ð Ô èð ô $ 8PX \ h °ÈÐ Ô à ,4 8 Dl €as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64: pœ  €Œa&ð¸ 1 ¨? dso.o/ 1215610971 0 0 100644 1788 ` ELF¸4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿@’ À* À* À* À* À* À* À* À* À* À* Ð&ô"ò" Çà‘è Â`Â"Ãà ã¿Â  `€ ° @D€¢ €°a†À$ ° Çàèã¿@’! ’ @²À*À* À* À* À* À* À* À* À* À* À* À* ’” –à€¤ €ò&à&`ô&@@À&`€° @Ð&`°b3Çàè’” À`Ðã¿’@Ð`€¢ €Ð&€° @Ð&`°b:Çàèã¿Ú  ’ °`€£`€”@ð ÇàèNo Errorÿñ\@(>œ¬KLamLƒ¨<‘˜ dD¬²Ì×ßHdso.cdso_cleanupapr_pool_cleanup_runapr_pool_cleanup_nullapr_dso_loadapr_os_dso_handle_putapr_cpystrnapr_os_dso_handle_getapr_dso_errordlopendlcloseapr_dso_symdlsymapr_pool_cleanup_registerapr_pallocdlerrorapr_dso_unloadt ¤ ´ð \ô  \ ,L \P \T X lŒ´ ¼ Ð as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= täX d@!¤î)”ä 4x? flock.o/ 1215610975 0 0 100644 1028 ` ELFì4(.shstrtab.text.symtab.strtab.rela.text.commentã¿h˜ š Ø?¿ÈØ?¿Ð‚`Ø?¿àØ?¿ØÀ'¿èÀ7¿ÊÀ'¿Ì€ `€À'¿Ð‚ Â7¿È‚`€ š`?ÿ `¢¿È’”@Ð ²’ €€¦ÿ@€ `¿ÿõ€¦ÿ€ ° @° € ` €@ðÇàèã¿h˜ š Ø?¿ÈØ?¿Ð‚ Ø?¿àÂ7¿ÈØ?¿ØÀ'¿èÀ7¿ÊÀ'¿ÌÀ'¿Ð¢¿È’ ”@Ð  ’ €€¤?ÿ@€ `¿ÿõ€¤?ÿ€° @ðÇàèÿñ ¼ˆ¼'-flock.capr_file_unlockapr_file_lockfcntl___errno\p¨ü0as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lD°p 6!XT ,¬?readwrite.o/ 1215610981 0 0 100644 4916 ` ELF4(.shstrtab.text.symtab.strtab.rela.text.commentã¿Â 8€ `€   0€ `€Ò ,Ô 0@Ð €¢?ÿ2€ Ô @@€ `"¿ÿöÒ ,@€à–‚À™: ”B€ Ô> @À& 0Çà‘èã¿Ú€Â 8€ `¤ ¦ €P¨Â (€ ÿ€ª Â.@¦„ÿÿ‚?ÿ¤D¿ÿÂ& (¨`€”€€‚ ‚ € `€5‚%Ú 0Ð 4€£@:€Ð ‚"   €¤€€¢€¤€€€¤À ¢Ò ,’@ @” 0‚@¦¤À¤d€Â& 0¿ÿà¨8¿ÿõÒ ,¿ÿñ Ò ,@€¢ €€¢?ÿ€ Ø @šƒ@˜C Ø> @Ð& 4À& 0¿ÿØš @ê‚%€ š@?ÿÂ&€€ª @ ‚ DÂ& ¿ÿ÷ªa~@ª’ €À& 0À& 8¿ÿ«À& 4Çà‘èã¿Â€€ `€ À&€€q  € `2€1Ð H (€ ÿ€ ¢ Â.@€‚ÿÂ&€š?ÿÚ& (€€ `²`€0¢ ’Ô€@Ð €¢?ÿ€°@€ `¿ÿö’@€ ` "€'Ú @€ ` "€!Ú €¦ €=€¦ €7‚@¿ÿÍÂ&€€¢ €’”ÿÿ_°Ð H€¢ € €0¿ÿ½â&€@¿ÿò’@€& €“@¿ÿà€¦ ’ @” €¢ €’€â&€Ô€@Ð €¢?ÿ¿ÿа@€ `¿ÿö’¿ÿÉ€¦ @â&€€Ðâ&€‚ DÂ$ a~Çà‘èã¿Â € `€C’Ð H€¢ €[ô€Â 8€ `€€¦ Â 0–•8` 4Ø @š£@˜c šƒ@ ˜C  @€ @ "€X D’ ” Ð @– ‚ Â& 8À& 4À& 0€¦ €B¢ €% $€€¤€’ Ð ,@”´&€ƒ> € Ú 0‚ @š@˜`?ÿƒ0`€‹Ú& 0€+²@ 0€ @¿ÿé@¢¿ÿä 0Ô€@Ð €¢?ÿ€Y¢@€ `¿ÿö’@€ ` "€Ú @€ ` "€Ú @À&€€EÐ@¿ÿ¦Â 8Ð H€¢ €€;@€7€ @ ¿ÿª’ ¿ÿ­‚  €“@¿ÿç’ @” €¢ €’€&À&€Ô€@Ð €¢?ÿ€¢@€ `¿ÿö’@€ ` "€ €@€ ` ¿ÿÇ€ƒ0`Â&€’Ô€@Ð €¢?ÿ¿ÿæ¢â&€ Çà‘èã¿Â € `€8 Ð H€¢ € @°’ "€Â 8Ð H€¢ €:0€2@@°’ 2¿ÿ÷Ð H 8€ `2€Ð H 0–•8` 4Ø @š£@˜c šƒ@ ˜C  @€ @ €’  D€ @ "€À$ 4” Ð @– À$ 4À$ 0Ð H€¢ "€Ð @Ð ’@”€¢ €° €Ð&À@0€@À&ÀðÇàè㿈‚ ð/ DÂ'¿ì’ D@”¿ìÇà‘è ÿÐ"`(Ãà 㿈‚ ’Â'¿ì@”¿ìÇà‘èã¿ @°²´@—è ã¿Â € `€  Ð H€¢ € @ Â H`"€°@°0€ @@ Â H`¿ÿö°Çàè㿈‚€¦`²ÿ  ¤€g‚   € `€+€¦Ð H€¢ €K 8€ `€K€¦€8¢ €Ú 0ÿýÚâ'¿ì ’ 2€2РHÂN€ ` €-° €¦:€+РHÚ 0 4’€£@¿ÿì (€ ÿ¿ÿë˜`Ø& 0 ,Ú @¿ÿëÚ.€€¦¢ â'¿ì’@”¿ì ’ € €¦ÂN€ ` €° €¦*¿ÿôâ'¿ì€¦À.€$‚ €"‚РH€¢ ¿ÿù€¦@€¦À.€‚ €‚@¿ÿ¶Â 8@ ’ "€ À& 8РH€¢ "€ ‚@€‚À& 0¿ÿ©À& 4Çà‘èã¿Ò Ô”"€ Ð @– €¢ €‚?ÿ Â&‚ Çà‘èã¿€ô' Lö' Pø' Tú' X@š‚ ¿à˜ ’– L€£`”Ú'¿ì€ °?ÿÂ'¿äØ'¿è@Ú'¿à°’ €ÿÿÕ@пìÇàèÿñ „„ t<2ìœA\ck<|z„– °ˆ¦ä´ÌÓéðÿˆ0#ð$1¸¼?DMà]b¸(p(~readwrite.cfile_read_bufferedfile_printf_flushapr_file_writeapr_wait_for_io_or_timeoutstrlenlseek64apr_file_flushapr_file_flush_lockedwriteapr_file_printfapr_file_readapr_thread_mutex_unlockmemcpyapr_thread_mutex_lockmallocapr_vformatterapr_file_writevapr_file_write_fullapr_file_getcapr_file_getsfree___errnoapr_file_ungetcreadapr_file_putcapr_file_putswritev, @X0h¤Ü |¨À4DlŒ À`¨ð  4LdtœÔô  8d ¬ ÔÜ Ll|˜¤Ð 0` |ˆ  ¤  ü  ,  P ˆ Ä Ü t ä t  (as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l 8 ¤à „…! Ð ,Ü?/17 1215610985 0 0 100644 1452 ` ELF4(.shstrtab.text.symtab.strtab.rela.text.commentã¿€À7¿è’ô/¿è@ Ð'¿ä€¢ €² ƒ. €µ8`Ð'¿ä€¢ € ²`пä@’€¢ 2¿ÿø À'¿ä€¢ ¿ÿø²`’@” ´²¿è’@”¿ä¶€¦à€ÂNÀ€ `"¿ÿ÷@  ö"’@”¿ä¶€¦à¿ÿóô&Çà‘è ã¿Â`¨€ `¦ €<° ä`€¤ €*¢ à`ƒ,`@Т`€¤€¿ÿû¦À€¤à"€À%€¤`€‚@¦ÿ@’àä`Ð%°€¤ €¢ Â`›,`à@ @¶”’ € ’¢`€¤€4¿ÿöÂ`À.€° ¿ÿþÀ%€¤`€ô.° @ä`¢`°¿ÿ€Çàèÿñ#*ð GV]itƒðfilepath_util.cstrlenapr_strtokmemcpyapr_filepath_list_merge_implapr_array_makestrchrapr_pstrdupapr_pallocapr_array_pushapr_filepath_list_split_impl Lx¸ Ì$\ ˆØas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lühÐ8 !Øx ,P? seek.o/ 1215610990 0 0 100644 1668 ` ELFl4(.shstrtab.text.symtab.strtab.rela.text.commentã¿Â 8€ ` €)¢Ø @ 4š£@” ˜c š¤@ ˜d €£ €€£ €Ð ’”@– €¢?ÿ€€¢ÿà> @À& 4À& 0€ €€£@¿ÿüÚ& 08¿ÿðÐ ¿ÿøÚ& 02¿ÿôà> @@€ Ð@€¢ €À& 4À& 8¿ÿÒÀ& 0Çà‘èã¿0 € `€9À& Ð H€¢ €  €¦`"€  0€¦`€D€¦`€I¿Â 0š™8`Ô @ 4–¢À”b –‚À ”B€ Ð H€¢ €Ô>€€E@€A@€¦`¿ÿæÂ 0–•8`Ø @ 4š£@˜c šƒ@ ˜C Ѐšƒ@ ˜C’ ” ÿÿ¿ÿ× Ð –Ò€@Ô €¢?ÿ€€¢ÿÐ>€€ 2¿ÿþÐ>€?ÿÿ?ÿÿ˜#ÿšcÿ@Ø>€€Ð€¦`2¿ÿÀ 0Ò€¿ÿâÔ ’!@” ’ 2¿ÿ¶Â 0Ԁؿ¸šƒ@ ¿ÿÔ˜C Çà‘è㿈’”ò'¿èô'¿ì@Ð €¢?ÿ’ ”¿è€@0€@ÐÇà‘èÿñà(0FRjà”xŽ—tPseek.csetptrapr_file_info_get_lockedlseek64apr_file_flush_lockedftruncate64apr_thread_mutex_unlockapr_file_seekapr_thread_mutex_lock___errnoapr_file_truncT¤ ´`p Ü Dˆ¤ ° as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lÄ0Ц!¨„ ,,?dir.o/ 1215610995 0 0 100644 3012 ` ELF ¨4(.shstrtab.text.symtab.strtab.rela.text.commentã¿@Ð €¢ €° @ðÇàèã¿@¤€¢ ’ €@Ð& ô"’@âÐ$ ’! ä$`@’ @”! ÂÐ$` ’” –à@Ð@€° @ðÇàè’” À`Ð㻈РҠ @”»ì€¢ € €¢ Ú  »쀣@€€¢  €¢ €À& P€bÀ& ¿ÿú€¢ ¿ÿüÀ& PÒ  Â@€ ˜@ ‚8€ š@ €‹ €€².@€²®@€ »ðÖ@€  ˜@ ‚8 € š@ €€‹ €Â&Ö& Â& Ѐ@’`  €‚@ Â& Ð& TD€¦`€5ax€3 ¿ÿòÀ& Ò ”$@@‚¿ð˜@ÚK;ÿ€£`/€š €£cÿ€”$‚ /Â+< ”$”"€Ò  ’` @’”`@Ö€€¦`€À& PD€ ‚ax˜`?ÿ‚€ š`?ÿ€“ ¿ÿ»Ò   ¿ÿŲ.@¿ÿ¶Ò  Çà‘èã¿Ð @’ Çà‘è ã¿@’@€¢ €° @ðÇàèã¿’”@ €¢ €?° €¢ €<°@€¢ €˜‚ÚHÿ€£`/€ €¢ ‚?ÿ€‚ÂHÿ€ `/"¿ÿü‚?ÿ€¢ €‚”@’‚@”‚?ÿ € ‚8 ÂL € `/€‚8 ”‚¿ÿ<¿ÿüÂL ‚8 ƒ8`” €@’ÂJ€ `€ ° ’@”€¢ 2€°’@”°Çàèã¿@€¢ €° @ðÇà蚀¢`€b(Â`Â#@ Ãàã¿Â’ € `€ @’ @” ‚Ð&ô"ò `Çà‘è ÿñ,Ð! 8@GMTi0,Ž„D£¬Ø8¹ÅÍ\(ÜÀëýìÔ'3,¤@Zendir.cdir_cleanupapr_dir_closeapr_dir_make_recursiveseekdirstrlenmkdirmemsetapr_pool_cleanup_runapr_pool_cleanup_nullapr_dir_removeapr_os_dir_putrmdirapr_statapr_dir_makeapr_cpystrnopendirapr_os_dir_getapr_dir_rewind__posix_readdir_rapr_unix_perms2modeclosedirapr_dir_readapr_pstrdupapr_dir_openapr_pool_cleanup_registerapr_palloc___errnoapr_pstrndup0Ld|ˆ ˜ œ ¤ ¨ ¬¼Ô Ø Ü à øÀ ThÈÜèü @˜¤ä4Hœ¨ as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lÈ4ð${! È , h? mktemp.o/ 1215610999 0 0 100644 1052 ` ELF4(.shstrtab.text.symtab.strtab.rela.text.comment㿈€¦ €´!G@‚”–’¿ì€ ÿ€Â'¿ì@à’@Ð$ €Ž¨” €–à€ ° Â’@Ð@€° @ðÇàèÿñ &6L¤\h‚‹mktemp.capr_unix_child_file_cleanupapr_os_file_putapr_unix_file_cleanupapr_file_mktempapr_pstrdupapr_pool_cleanup_register___errnomkstemp64 <LT X d l € as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l¤°À•!Xl ,Ä?filedup.o/ 1215611004 0 0 100644 2268 ` ELFÄ4(.shstrtab.text.symtab.strtab.rela.text.commentã¿€¦à€=¤@Ð`€¢?ÿ€B¢€¦à€H’ Pà€@Ò`Ð$ Â` à€€ `€Â$ Â`$Ú`(Â$ $Ú$ (€¦à€A° Ú` @‚+@Â$ ’” –à@Ð0€4 H€ `2€Â Â`H€ `€ H € `"¿ÿäÂ`$ ,€ `2¿ÿàÂ`$@Ð$ ,¿ÿÙà€Â€ `€° Ò`@Ð`€¢?ÿ¿ÿ¢@€ð’ @”¿ÿáà€@’ @” P â" Ð$€¿ÿ³ô"ÇàèÀ`– ã¿ð' D’” Dÿÿ™– Çà‘èã¿@’ PÐ&Ø@Ø:Ô`Ô: Ø`Ø: Ô`Ô: Ø` Ø: Ô`(Ô: (Ø`0Ø: 0Ô`8Ô: 8Ø`@Ø: @Ô`HÔ: HàÂ` € `€ô$Ò`€¢`2€àÂ` €ˆh€5!ÂØ` @€‹ €–`–`!Ò@” €&‚?ÿ@¿ÿêÐ$ @Â`8€ `€Ð$ ,ÂÐ`,Ò`,Ô`4@Â`H€ `"¿ÿÖÒ`Ð’ ”@ H@Ð`H¿ÿÍÒ`ÂÐ`,Ò`,¿ÿîÔ`0‚?ÿÂ&`’” @Ð@Çà‘è ÿñ x¬„&BI_x}“«²¶xÃÙˆ$çó filedup.cfile_dupapr_file_setasideapr_unix_child_file_cleanupmemsetapr_pool_cleanup_nullapr_thread_mutex_destroydup2apr_unix_file_cleanupapr_thread_mutex_creatememcpydupapr_file_dupapr_pool_cleanup_killapr_file_dup2apr_pstrdupapr_pool_cleanup_registerapr_palloc___errno 8€ „ ” ˜è $8 HTx | ´@ P \ ` d h tx „˜À ä ì  as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l0œPì!!t ,„?tempdir.o/ 1215611008 0 0 100644 1764 ` ELF 4(.shstrtab.rodata.text.symtab.strtab.rela.text.comment/apr-tmp.XXXXXX/tmp/usr/tmp/var/tmpTMPTEMPTMPDIR/var/tmp/㿈’” – @’–” @¿ì€¢ € !€ ° @ҿ쀢 €° @п쀢 ¿ÿö° Çàèã¿h‚`š`Â'¿àÚ'¿ä‚`š`Â'¿èÚ'¿Ð‚`š`Â'¿ÔÚ'¿Ø¤ ¦¿ð¢¿ÐÒ@”@¿Ì¤ €¢ € ¢`à¿Ì” € €¤ @‚?ÿ’€ cþ€(€¤ (¿ÿíÒ@¢¤  ÿðÐÿÿ³’¤ €¢ €&  €¤ ¿ÿø¢`!’ÿÿ¨ €¢ €’ ¿È’ @”€¢ €Ð¿Èÿÿœ’€¢ 2€ Ò¿È€°b.ÿÿ”€¢ ¿ÿØ€¤ Ò¿Ì@Ð&€° ¿ÿûÒðÇàèÿñ t$+tx<M]iu„tempdir.ctest_tempdirapr_env_getstrlenapr_temp_dir_getapr_filepath_getapr_file_mktempapr_pstrcatapr_pstrdupapr_file_closeapr_file_putc   ( D X x | € „  (” 8˜ (œ 8¨ @¬ H° @´ HÔüX Pd Pp P|È as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= xZÔìÀà! ’)4, 4`? filepath.o/ 1215611013 0 0 100644 2932 ` ELF 04(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã» »ð’$@€¢ ’€ @° N€ `"€ @€ð@Ð&° Çàèã¿@€¢ €° @ðÇàèã¿Â@ÚH@ €£`/€°b5@’`Ð$Ø@š ‚ ˜ Ú&@ÚH`€£`/¿ÿûš ° Çàè㿈€¦ €âªÂN€€ `/€Â€Žà€v€¦`"€~¿ì@¦@’ €¢d€î° N@ÂN€€ `/€½¤ÂN@€ `/€€Žà€á°b5’@”€¤à€ ¨‚€ÚHÿ€£`/€‚ /Â,€¨à¢Â€ƒ(`€ `€1€¥1ƒ8`€ ˜@ ‚`/€ š@ €‹ € ¸¸ ÂO€ ˜@ ‚`/€ š@ €‹ 2¿ÿù¸  §"€ÂO€¤ €C€¤ "€GÂN€ÂO€  @€’@”¢@ÂO€ `€Â¸ ƒ(`€ `¿ÿÕ´€¥‚@ €ŽÀ€À,€’@”€¢ €’°b7‚@ÚHÿ€£`/"€ä%@ÐL€€¢ €h€¢ /ä%@€†° €iÂN@€ `/€€°b4€¦`¿ÿ‡¿ì’@”€¢ ¿ÿ€ò¿ì@€rðÂN€€ `.¿ÿÀÂO¿ÿÇ€ `€ `.2¿ÿ»ÂOÂN € `.2¿ÿ·ÂO€¤`€R€¤`€€Žà€¤`€V(€C¢„ÿ€?ü’`@” €¢ 2€:¢„ÿ€Žà€M” ÂO€ ”B¿ÿ€@’ ÂO€ `"€¢`¢`€¤@:¿ÿ›ÂO€Žà€<¨¿ÿ–ÂO€Žà€8°b7€Žà€5°b4€¦`¿ÿ<€Žà¿ÿ9²`¿ÿ³¿ì¨ ´ ÂN€€ `/"¿ÿþ´ ‚ /Â,€¿ÿS¢ "¿ÿ›ä%@0€¿ÿ´`¿ÿ$²`¿ÿÖ‚€ÂHÿ€ `/2¿ÿü¢„ÿ¿ÿÑ€¤@ÂL€€ `/2¿ÿö¢„ÿ€Žà€ ¨ ¿ÿcÂO’ @” ¿ÿ²€¢ °b7Çàè– À`” :– À`” :‚ Â"Ãà /..//../ÿñ ")AdRou|ˆ «´ôÇd,Ø,îdfilepath.cstrlenstrncmpmemcmpmemcpyapr_filepath_list_mergeapr_filepath_getapr_filepath_list_merge_implchdirgetcwdapr_pstrdupapr_filepath_list_splitapr_palloc___errnoapr_filepath_mergeapr_filepath_setapr_filepath_encodingapr_filepath_rootapr_filepath_list_split_impl $<L h |´ ¸ ¼ $0LˆÐ T¤ ,œ ¤ ¨ØÜ 8 D „ Œ  ˜ à ä     as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= t<°Ì`!,)L¤ 4 ð? pipe.o/ 1215611018 0 0 100644 2156 ` ELFT4(.shstrtab.text.symtab.strtab.rela.text.commentã¿â  ˜š€¤`€)° €¦`€Ø<  $€ `€ ” ’ @Ð ” €Ð @’ €¢?ÿ€â$ $€°  $€ `¿ÿü” ’ @Ð ” ?Ð @’ €¢?ÿ€‚ ¿ÿðÂ$ $@ðÇàè š€ `€ Ø`Ø:@ Ãàã¿’ P@’ @” Pš?ÿ‚ Ú" (Â" À" ?ÿÿ?ÿÿÂ@˜#ÿšcÿ’” –àö"Ð&Ø: Â" €¦ €À" $‚(Â" €¦ À" €À" H@ÐÇà‘è – À`” 㿈@¿è!?ÿÿ#?ÿÿ€¢?ÿ¦ ¨  #ÿ¢cÿ%@+-’ P€3@” P@’ ¿èš?ÿÂ" Ú" (Ð&À" Hô"æ" À" À" è" $à: ä" ’ P@’ @” P¿ìÐ&@ÚÂ" ô"æ" è" $ä" à: À" HÀ" À" ’ Ð@”`@– Â@’”`– @Ð@€° @ðÇàèã¿@’@€¢?ÿ€° @ðÇàèÿñ%ˆ5´8Oìœbx~ƒ—žœ³ÍØáÄ(ûÄpipe.cmemsetapr_pool_cleanup_nullapr_os_pipe_putapr_file_namedpipe_createapr_os_pipe_put_exapr_unix_file_cleanupfcntlpipeapr_unix_perms2modemkfifoapr_file_pipe_createapr_pool_cleanup_registerapr_palloc___errnoapr_file_pipe_timeout_getapr_file_pipe_timeout_set@ P „ ” °ô( , < @ xŒ    È Ì Üè(4t x| ˆ Œ  ¸ Ä Øas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lìX0ˆ! t ,?open.o/ 1215611023 0 0 100644 3516 ` ELF ¤4(.shstrtab.text.symtab.strtab.rela.text.commentã¿@Ð €¢ €  Ú ‚?ÿ€‹a€Â&  H`€0€@Ð Â H`€ @€ @àÇà‘èã¿Â € `€  ÿÿÛ€¢ "€0€@¿ÿø Çà‘èÀ`㿈€Ž €T  €Ž €VšŽ €V  ‚ @€ `€€Ž €£`€s €Ž 2€  €Ž 2€ "¢Ž €€ €Ž¢€`¿ì’€¦ïÿ€”!¶@”’@ ’ €M’ P@’ @” P¶à" Ð&ø"ô" ’@€ Ð&àš@ ö‚ Â&à$€£`€+Ú&à À&à,?ÿÿ?ÿÿ˜#ÿšcÿØ>à‚?ÿ˜ š Â&à(Ø>à@€Ž¨À&àÀ&àÀ&à0À&à4€À&à8€-  €Ž €)  šŽ ¿ÿ¯‚ @‚Ž @¿ÿ² !¿ÿª $’” –à@ÐÀ€ @Ð&à,öÂà €ˆb¿ÿÒ?ÿÿ¿ì¿ÿÏÂ&àH@€Ð’ @”€¢ ¿ÿŸ’Çà‘è’” À`Ðã¿@€¢ €° @ðÇàèã¿@’€¢ €° @ðÇàèÂ`Â"Ãà ã¿’ P@’ @” P š?ÿ‚ €Ú$ (€ À$ ?ÿÿ?ÿÿÖ@‚@ ´¨˜#ÿšcÿ€ `Ø< Ö$ ô$ à&ö$À$ $€Â$ € @ÂÚ` Ð$ ,”’ €‹b¿ÿö`H@€¢ "€ Çà‘è D€ `€a~ Ãà㿈‚ Â'¿ì–’¿ì@” Çà‘è㿈‚ Â'¿ì–’¿ì@” Çà‘è㿈À'¿ì–’¿ì@” Çà‘èã¿Â @€ˆh€° ˜@ €ˆ@ ’” €–à€° Ø" @а Çàèã¿Ø €‹(€° @@š+ €‹’” €–à€° Ú" @а ÇàèÃàÐÿñ| $.ü,>Ä\SÄo~…š°Ô ¾hÈÎç|Hý/(0?XOP(dp0 }€©à¸ÃÌçî ` x(open.cfile_cleanupopenapr_file_open_stdinapr_file_removeapr_file_inherit_setapr_unix_child_file_cleanupapr_file_flushmemsetapr_pool_cleanup_runapr_pool_cleanup_nullapr_file_openapr_os_file_putapr_thread_mutex_destroyapr_unix_file_cleanupapr_thread_mutex_createcloseapr_unix_perms2modeapr_file_renameapr_os_file_getapr_file_open_stderrapr_pstrdupapr_file_eofapr_file_pool_getapr_pool_cleanup_registerapr_file_closeapr_palloc___errnoapr_pool_child_cleanup_setrenameapr_file_inherit_unsetunlinkapr_file_open_stdout@!Xh¬ Ä È \p„ °\ ` h l p„°Ää è ì ð !0Dp| ìh´à ä ô ü  @ D T \ las: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lˆô0$!! H , d?filestat.o/ 1215611028 0 0 100644 2748 ` ELF  4(.shstrtab.text.symtab.strtab.rela.text.commentã¿ü‚apÂ& @Ð`<Ø`š Ð& €£@€#– €£@€(€£@€– €£@– €<‚ ‚@ € š` – `z€–à€£@€ – €£@€0 €£@¿ÿî– €£@¿ÿë– Â` Ø`8Â& Ø> (Â`$Ú`Â& Ú& Â@Â& Ú`Ö& Ú& Ò`@@ 8Ð`D@’#èØ 8’šƒ@ ‘: ˜CØ> 8Ò`H@ @Ð`L@’#èØ @’šƒ@ ‘: ˜CØ> @Ò`P@ H’#è@Ð`T’Ø Hšƒ@ ‘: ˜CØ> HÔ``ƒ*  “2à˜@ ›*à ‚bÂ& Ø> 0Çàèã¾øÂ   ¿X€ `€@€¢ €’@Р€¢ ’”€@€ Ðڠ€Â&ÿÿ{Ú& P D€®@€ax Çà‘èã¾øÂ   ¿X€ `€@€¢ €’@Р€¢ ’”€@€ Ðڠ€Â&ÿÿWÚ& P D€®@€ax Çà‘èã¿@’@€¢?ÿ€° @ðÇàèã¾ø¢Ž € ¿X@’€¢ €ö&ò& P’ÿÿ1”€¤`2€´¿þ D€®€€ °ax€ ° @’€¢ "¿ÿíö&@ðÇàèã¿ –” @’@¿Д –â@€¢ €%¶à¿È@’Ò'¿€Д –â@@’Ò'¿„Д –â@@’Ò'¿ˆД –â@@’Ò'¿Œ@’¿€€¢?ÿ€ @ÐÇà‘èã¿0–€Ž €" ¿’@€¢ €€Ž €€Ž €Ž`€Â¿˜‚}ÝÂ'¿˜€Ž €€Ž`€Â¿˜‚aÂ'¿˜@Ò¿˜0€‚~î¿ÿûÂ'¿˜‚b"¿ÿðÂ'¿˜Çà‘èÿñ ¬¬4:˜ÄMV^mrˆ”˜¡\œ´»ÏãõÌ8<#filestat.cfill_out_finfoapr_file_info_get_lockedchmodapr_file_mtime_set__moddi3fstat64apr_file_flush.divapr_file_flush_lockedutimesapr_stat__divdi3apr_file_attrs_setstat64apr_unix_perms2modeapr_unix_mode2permsapr_time_ansi_putapr_file_perms_set___errnoapr_file_info_getlstat64ô $0 T` Ä ÜøT lˆÐÜðp„¨ Ðì$4 Hx Ìas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lød€ä+!P , `? copy.o/ 1215611032 0 0 100644 1356 ` ELF04(.shstrtab.text.symtab.strtab.rela.text.commentã» –/ÿ’»Œ” @˜€¢ €M–€¦À€,¿’”˜@»ˆ°’ €:D´a~¶»²$’ò'»„”»„@лŒ€ ˜@ š€  ‚@ °’€‹€!– лˆ@Ô»„¸’ €$€¦¿ÿì’@лŒ°’ 2€Ð»ˆ@лˆ0€@Ô»ŒD€ šax‚@ š €  ˜@ €ˆ@ € °¿ÿÉÖ¿˜@лŒÐ»ˆ@€ ¿ÿüлŒ@лŒ@лˆÇà‘è˜ – À`” ˜ – À`” ÿñ\#1?\Mt]q€copy.capr_file_transfer_contentsapr_file_openapr_file_readapr_file_copyapr_file_appendapr_file_write_fullapr_file_closeapr_file_info_getDp¤À Ô ä  ( @ H d h | € as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lŒø°¨’!<´ ,ð? fileacc.o/ 1215611037 0 0 100644 1260 ` ELFÔ4(.shstrtab.text.symtab.strtab.rela.text.commentÂ`Â"Ãà ÃàÐ  š€Š€ (€‹d2€!€‹b2€ €€‹a2€ @€‹@2€$€‹`@2€ €‹` 2€ €‹`2€ €‹@2€"€‹`2€ €‹`2€ €‹`2€ Ãàš€Š(€  €‹a2€$€‹`€2€"€‹`@2€!€‹d€€‹` 2€ @€‹`2€ €‹`2€ €‹b€€‹`2€ €‹`2€ €‹`2€ ÃàÀ`Ô€‚ ’ ” Ö@À`ÿñ 0¬D|$VĨj€l’fileacc.capr_file_flags_getapr_file_name_getapr_unix_perms2modeapr_file_data_setapr_unix_mode2permsapr_pool_userdata_getapr_file_data_getapr_pool_userdata_setl p  ” as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l  °¼¨!d0 ,”?fullrw.o/ 1215611041 0 0 100644 1020 ` ELFà4(.shstrtab.text.symtab.strtab.rela.text.comment㿈  ô'¿ì’@”¿ì¿쀠˜`?ÿ´&€€ š@ €‹  ¿ÿó²@€¦à€à&ÀÇà‘è㿈  ô'¿ì’@”¿ì¿쀠˜`?ÿ´&€€ š@ €‹  ¿ÿó²@€¦à€à&ÀÇà‘è㿈À'¿ì€¦ ¢   € ƒ, š@Ò@Ô`@–¿ì  €¤˜@ € ‚`?ÿڿ쀋¿ÿò¢@ €¦à€â&ÀÇà‘èÿñ '\:\\N¸tfullrw.capr_file_writeapr_file_readapr_file_read_fullapr_file_write_fullapr_file_writev_fullpèas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l,˜€c!|$ , ? /34 1215611045 0 0 100644 1820 ` ELF4(.shstrtab.text.symtab.strtab.rela.text.commentÀ` ã¿’ H@ ò"’ @ ” –à€¢ €’@Ðà& Çà‘èÀ` ã¿@ €¢ €Da‰Çà‘èÀ` ã¿@ €¢ €Da‰Çà‘èÀ` ’” À`ÐÃàÐÿñ'=x$Yn„г¬$Ïàéh2œKepX‰ü¤ºÎthread_rwlock.cthread_rwlock_cleanuppthread_rwlock_wrlockapr_thread_rwlock_tryrdlockapr_pool_cleanup_runapr_pool_cleanup_nullapr_thread_rwlock_unlockpthread_rwlock_rdlockapr_thread_rwlock_trywrlockapr_thread_rwlock_destroyapr_thread_rwlock_rdlockpthread_rwlock_tryrdlockpthread_rwlock_destroyapr_thread_rwlock_wrlockapr_pool_cleanup_registerapr_pallocapr_thread_rwlock_createapr_thread_rwlock_pool_getpthread_rwlock_unlockpthread_rwlock_initpthread_rwlock_trywrlock  ,4 8 < @ Ph l | œ   °Ð Ô ä è ì ð as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lppàç!Èü ,Ä?thread_mutex.o/ 1215611049 0 0 100644 1932 ` ELFp4(.shstrtab.text.symtab.strtab.rela.text.commentÀ` 㿈@’ ’ @”  ô$¿ì’ €Ž`€ ´@°’ €¦ €"¿ì0€@ °” –à€¦ €’@Ѐà&€@° €¦ €’¿ì@ 0€@°@¿ì¿ÿçÇàèÀ` ã¿@ ‚’ €° € `€°D‚a‰°ÇàèÀ` ’” À`ÐÃàÐÿñ%8`RYn„›ü8´ÊßDø4Ü(ì>Xnˆ¢µthread_mutex.cthread_mutex_cleanuppthread_mutex_lockapr_thread_mutex_pool_getmemsetapr_pool_cleanup_runapr_pool_cleanup_nullpthread_mutexattr_initapr_thread_mutex_trylockpthread_mutex_trylockpthread_mutex_unlockapr_thread_mutex_destroyapr_thread_mutex_unlockapr_thread_mutex_createapr_thread_mutex_lockpthread_mutexattr_settypepthread_mutex_destroypthread_mutexattr_destroyapr_pool_cleanup_registerpthread_mutex_initapr_palloc  $H ht x | €  ¼ÈÔà ì ð  4 8 H L P T as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lhÔpDÀ!, ,0? thread_cond.o/ 1215611053 0 0 100644 1884 ` ELFD4(.shstrtab.text.symtab.strtab.rela.text.commentÀ` ã¿’ @ ò"’ @ ” –à€¢ €’@Ðà& Çà‘è À`’`㿈@¢‚@ BД –â@@’Ò'¿èД –â@@’›*`š£@ —+`–‚À ›*à Ú'¿ì’`@”¿èD€¢ ‘€°aw°ÇàèÀ` À` ’” À`ÐÃàÐÿñ#5XLcl—h¬Ã×à|Œú D%?(Wn{•ªthread_cond.cthread_cond_cleanuppthread_cond_waitapr_thread_cond_createpthread_cond_timedwait__moddi3apr_pool_cleanup_runapr_pool_cleanup_nullapr_thread_cond_waitapr_thread_cond_signalpthread_cond_signal__divdi3apr_thread_cond_timedwaitpthread_cond_initapr_thread_cond_pool_getapr_thread_cond_broadcastapr_thread_cond_destroypthread_cond_broadcastapr_time_nowapr_pool_cleanup_registerpthread_cond_destroyapr_palloc  ,4 8 < @ Pl p €  ¼ä    , 0 4 8 as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lL¸€8µ!ð ,?proc_mutex.o/ 1215611060 0 0 100644 8292 ` ELFÔ4( .shstrtab.rodata.text.bss.symtab.strtab.rela.rodata.rela.text.commentfcntlpthreadposixsemsysvsem/ApR.%lxZ%lx/dev/zero/tmp/aprXXXXXXunknown’” À`ÐDÃà!‡Ãà ã¿@Ð €¢ €° @ðÇàèã¿p’ P@Ð@Ð& Р¢ ” @–â@¦ Ð’” @–â@˜ ¢¿Ð” –’ @”!¤– @’!€¢?ÿ€ @à& ’@ÐÐ& ’Д @–à€° @”!¤– ’!€ `N€@€ð@À/¿Ý€¢?ÿ¿ÿà 0¿ÿ÷Çàèã¿@Ð €¢ €‚ Â& €° @ðÇàèã¿À& @Ð €¢ €° @ðÇàè㿈Ú Â`’ ” € ÿ€–¿ìÀ'¿ì@Ð`Çà‘è 㿈’ P@РÐ& ’ ”#€@ Ð$ Ú Â`’ ” € `€–¿ì‚ Â'¿ì@Ð`’” €¢ €–àÀ& @Ѐ° @àÿÿΰÇàèã¿! Ð`’ @” €¢ € ‚ @€ `"¿ÿõ @€ðÂ& ° Çàèã¿À& ! Ð`’ @” €¢ 6€ ° @€ `"¿ÿõ @ðÇàèã¿Â € `€€ ÿ"€Ð @Ð €¢ €Ð @’ €¢ €  @€Ð@Ð €¢ "¿ÿë Çà‘è㿈 @’  €¢ €@¢ ’ ” – ˜@š €¢?ÿ€4Ð& @‚?ÿÂ& @¿ì°’ "€¿ìÿÿÆ€2@’ °’ €(¿ì@’ @°’ €"¿ì@’ °’ €Ð`@’¿ì°’ €À$` @¿ì°’ ¿ÿáÐ@’” @–à€  @@€Ðÿÿ—@¿ìÇà‘èã¿@Ð €¢ €‚ Â& Çà‘èã¿À& @Ð Çà‘èã¿€¦`€’`’@Ð’Ð&  ” F–&D@Ø€¢ €À& @Ð Ð’” @–à€  @Ð’Ð& ” FÖ@ ¿ÿꀢ Çà‘èã¿À& ! Ð`’ @” €¢ 6€ ° @€ `"¿ÿõ @ðÇàèã¿Â € `€ð @èÿÿ• "¿ÿûð Çà‘èã¿! Ð`’ @” €¢ € ‚ @€ `"¿ÿõ @€ðÂ& ° Çàèã¿5‚ Â6 ž ‚?ÿ3Â3ภ¶`1šàº ‚ ð3`ú6`À3 ð3àÀ2àÂ3`À' À&àÀ7 À' À' À6àÀ&àÀ&àÇàè–D€¢`€a‡ƒ*`š`Ø@Â`Â"à€ ¿ÿü‚`¿ÿù‚`D€a‡¿ÿó‚`Ãà ÃàÐ`ã¿p ¿Ð’ ÿÿÖ€¢ €°`¿Ø@Â'¿Ô°Çàèã¿’ @” @’  ’ÿÿÀö"‚€ `€’`€à&€  Ú Â`ŸÀ@Ú$ ‚’ ¿ÿö`à& Çà‘èã¿ÂÚ`Ø`’ŸÃ”Çà‘èã¿Â Ú`ŸÃ@Çà‘èã¿Â Ú` ŸÃ@Çà‘èã¿Â Ú`ŸÃ@Çà‘èã¿Â Ú`ŸÃ@Çà‘èÚ ˜‚`€£@€ Ð ÃàÃàÐÚ`Ø`Â`Â" Ø"Ãà ã¿ €¦ €°b"Â’ € `€ `–’@” ÚÂ`Â#`€ ° @’ @” ‚Ð$¿ÿïô"ÇàèÿñX'(@ˆ S\ k}–0,¯t<È $Û ï0$8$$ =xx]0 x´0‘ X©°`Â|8Û\ûÀ`ä4+<¨SðHr\ ‰t¨¡´¹ÂÏÖßè 4ÿ1 PG^ °v{ l’  Ô€¶ËÔä 6=CN,@eu€” ˆ(¬Ãl„Ùïü 6 J ¸`z‰œ§°ð(ÊÑÛâproc_mutex.cproc_mutex_fcntl_releaseproc_mutex_no_child_initmutex_sysv_methodsproc_mutex_posix_createproc_mutex_op_offproc_mutex_choose_methodproc_mutex_posix_cleanupproc_mutex_fcntl_cleanupproc_mutex_lock_itmutex_fcntl_methodsproc_mutex_unlock_itproc_mutex_proc_pthread_acquireproc_mutex_no_tryacquireproc_mutex_proc_pthread_cleanupmutex_proc_pthread_methodsproc_mutex_posix_releaseproc_mutex_sysv_releaseproc_mutex_fcntl_acquireproc_mutex_posix_acquireproc_mutex_proc_pthread_releaseproc_mutex_sysv_acquireproc_mutex_sysv_cleanupproc_mutex_op_onproc_mutex_sysv_createproc_mutex_proc_pthread_createmutex_posixsem_methodsproc_mutex_fcntl_createpthread_mutex_lockopensem_waitapr_snprintfsemgetsem_post__moddi3apr_proc_mutex_trylockmemsetapr_pool_cleanup_runapr_pool_cleanup_nullapr_proc_mutex_unlockpthread_mutexattr_initapr_proc_mutex_pool_getmmapapr_proc_mutex_cleanupapr_file_openapr_os_proc_mutex_putpthread_mutex_unlocksem_openapr_os_file_putpthread_mutexattr_setrobust_npfcntlsemop__divdi3pthread_mutexattr_setprotocolmunmapclosesem_unlinkapr_proc_mutex_defnameapr_file_mktempapr_proc_mutex_unix_setup_lockapr_proc_mutex_lockfileapr_proc_mutex_destroyapr_proc_mutex_createpthread_mutex_destroyapr_time_nowapr_pstrdupapr_proc_mutex_lockpthread_mutexattr_destroyapr_proc_mutex_nameapr_os_proc_mutex_getapr_pool_cleanup_registerapr_file_closepthread_mutex_initapr_palloc___errnoapr_proc_mutex_child_initunlinksem_closesemctlpthread_mutexattr_setpshared t°t ($4ð88<@\DxH(L(`\d|hl´p0t(xPŒÀ”˜ œä (¤€/ / ) ) 4QHNdMlD„8 &° ¨´ ¨À#Ô3è<øE/ * / J* (NLN\3€" N¼%ÐNR M8$hRp/ t* |/ ˆ* J NÄ Ð Ô7èNN( 4 87LNdN˜C°:ÄNÔ2ô ¸ø ¸ü!(.<;L,pSˆ5 9¸LÐGà/ ä* ð/ ôJø* ; N$G< d2x È„ ÈŒE¨0ÀPÈ/ Ì* Ø/ ÜJà* ìE>$ 468 HN`NŒK´ Ä6È ØNðN   $ , 0 8 < D T X ` ¤ ¬ ¼ À Ð \Ø \Ü ˆä ˆô 0ü 0¼ èÜôмD ØP ØXHtM€( ˆ  ”  4 (M 4(as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64O ˆàh T ¼T ¼@ &üÿ.üP ;LH F”?global_mutex.o/ 1215611064 0 0 100644 2380 ` ELF44(.shstrtab.text.symtab.strtab.rela.text.commentã¿@Ð Â € `€  €¤ €@°0€@ °Çàèã¿’ @ö" ’”–@ €¢ €’  Ú`Â@€ˆ`€  À$ Д –à@’à&€  @Ô€¢ ¿ÿôð @èÇà‘èÐÀ` ã¿Â `€ @°’ € @Ð °’ €Â `€@Çàèã¿Â `€ @°’ € @Ð °’ €Â `€@Çàèã¿@Ð Â € `€  €¤ €@°0€@ °ÇàèÂ`Ú@Ø`Â" Ú"Ø" Ãà ’” À`ÐÃàÐÿñL%`\>¼LVm‚˜®ÇàøL¤(>Uk ƒðŸ³(ÌDæ %\global_mutex.cglobal_mutex_cleanupapr_global_mutex_trylockapr_global_mutex_unlockapr_proc_mutex_trylockapr_pool_cleanup_runapr_pool_cleanup_nullapr_proc_mutex_unlockapr_thread_mutex_trylockapr_thread_mutex_destroyapr_thread_mutex_unlockapr_thread_mutex_createapr_global_mutex_createapr_thread_mutex_lockapr_proc_mutex_destroyapr_proc_mutex_createapr_os_global_mutex_getapr_global_mutex_child_initapr_proc_mutex_lockapr_global_mutex_destroyapr_global_mutex_pool_getapr_pool_cleanup_registerapr_pallocapr_proc_mutex_child_initapr_global_mutex_lock( 4 Tp  ¤ ¬ ° ´È Ø àô ø ,P t ˆ¬ À ä ð , 0 4 8 as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lL¸°h;!¤P ,ô?apr_pools.o/ 1215611073 0 0 100644 11956 ` ELF-H4( .shstrtab.text.rodata.bss.symtab.strtab.rela.text.commentã¿À&@ h¢ ’ ” h€¢ €° @° à$@À$ Çàèã¿ €¢ @Â$ Ð €¢ 2¿ÿü¢„ÿ¿ÿû  @èÃàÒ" ÃàÐ ÃàÒ" ÃàÐ ã¿@ ’ €@‚oÿ³0` Ú Â š@š#@€£@€ò& ò& °” €@èÚ& °” ¿ÿüÇàèã¿‚`²@²p‚cÿ€¦@(€3ƒ6` ¢ÿÒ€¢@*€?Ð ä €¤ €_›,`š@Â`€ ˜`?ÿ€¤@ ‚@ ž €‹”`€d–” Ø€€  š`?ÿ–à€¢À ‚@ €‹@2¿ÿù”  “ €B€¤ Ø€£ €Ø"€€¢À *€Ú ”¿ü€€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù”¿üÞ&Ú Â ‚@Ø € @ (€Â& Ø& €¤ €C‚ Â$ À$€R°€¢ 2€ ä @ ’ €J° š‚ â$ Â$ ¿ÿñÚ$ €¤ €' ’ ” € €¤ Â € @€-€¤ ”à€¤ 2¿ÿú €¤ ¿ÿä@0¿ÿà@›,`š@Â`€ Ò˜`?ÿ€¤@ ‚@ ä ž €‹”`¿ÿ –¿ÿ¨Ø€@Ð ä  ’ ¿ÿØ” @‚ ¿ÿ½Â$ ¿ÿ·Â& ¿ÿÛ€¤ Ú  ‚@ ØÚ € @ ¿ÿöØ"€¿ÿ«Ú& Çàèã¿Ð €¢ €?   € @ Þ€Ö à&@ ²’`"€Ð Ø`€¢À ‚@ €Š¿ÿ÷Ò@€£ 8€! •+ ‚€Ú`€£`€Ú&@€£8€ž ‚€€¢À €ò `²’`¿ÿé–"À Ð Þ&€¢ €Ö& €¤ €²à@€¤ 2¿ÿü²0€Â&@€¢À ¿ÿìò& ¿ÿÑ– @¿ÿ @¿ÿ Çàèã¿€¦`€ÂÀ&€ š`?ÿ€ ‚@ €‹@2€ô` €¦à"€ö`ÒÀ€¢` €;¤ âà €¤`€”ž Âà€ š`?ÿ€¤€ ‚@ €‹@–à€™” –àØÀ€  š`?ÿ” €¢€ ‚@ €‹@2¿ÿù–à “ €n€¤`Ø€£ €Ø"À€¢€ *€Úà–ÿüÂÀ€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù–ÿüÞ&ÀÚà ‚@Øà€ @ (€Â&àØ&à€¤`€x‚ €Â$ Ðà€¢ 2€:âà @ ’ €P€¦ ‚š ä$ Ú$ Â$ ” €FÀ$à ‚ 8Â$ 4Ð"Â" ö$ Ð$ ,ô$ Ð" Ð$ 0À$ À$ À$ À$ À$ $À$ (€¦`€[ò$@Ð`¶’ "€Ú`@Ú`€£`€Ú$ ‚ Â#` ‚`Â$ €¦à€à&`@à&€S° €¤`€0 ’ –à€ €¤` € `€<€¤ –à€¤ 2¿ÿú €¤`¿ÿ·@@ ’ ¿ÿ¶€¦ "€6° ŸÆ€ €2° @Âà€ ÒÀš`?ÿ€¤€ ‚@ âà ž €‹@–à¿ÿk” ¿ÿsØÀ@Ðàâà  ’ ¿ÿÏ–à@‚ ¿ÿ˜Â$ ¿ÿ?ò`¿ÿÂ&àÀ$ ¿ÿºÀ$ ¿ÿÌ€¤`Ú Âà‚@ ØÚà€ @ ¿ÿóØ"À¿ÿpÚ&àÇàèÃàÒ" (㿈! ‚`#š`ÿ`€£`Â, €+° @%°” ’ €¦ € €!À, @Ö`°€¢ €’`@Ð`À$`€À, @Р@Р°’ €¦ € ¿ì@Ô °’ €Ð`@Ò¿ìÐ`@Ò Çàèã¿â ,²`Ò`Ú`²ø‚"@ € @(€Ö@‚@” Â$`€×° ÂàÔà‚ @ € @€,ÂàÚÀÚ @ØÀÂ# š€Ú"àÂ`‚"@Ú`‚ pÖ#@‚pÚ"àâ"À‚pÀ"à ›8` ˜ Ö& ,Ö@Ú$` Âà € @ Ø$`’ €µ° ÖÀÂà € @ 8¿ÿþÖÀÒ#Â@Ø `Úàâ#@Ú$`â"à¿ÿÐÖ$@‚`‚@ªpšcÿ€¥@ €=ä ƒ5` ¦ÿÒ€€¢@*€?Ð è  €¥ €|›,àš@Â`€ ˜`?ÿ€¤À ‚@ ž €‹”`€l–” Ø€€  š`?ÿ–à€¢À ‚@ €‹@2¿ÿù”  “ €5€¥ Ø€£ €@Ø"€Ú Â ‚@Ø € @ (€Â$ Ø$ €¥ €D‚ Â$ À$˜–“ "€_ð Ò`¿ÿšÔà+ƒ5` ¦ÿÒ€€¢@:¿ÿÇè  Ð €¢ €è  €¥ €1 ’ ” € €¥  € @:€9€¤ ”à¿ÿø€¤ €@@ ’ ¿ÿؘ š‚ æ$ Â$ ¿ÿÐÚ$ €¢À *¿ÿÂÚ ”¿ü€€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù”¿ü¿ÿµÞ$€@‚ ¿ÿ¼Â$ @Ð è   ’ ¿ÿΔ ¿ÿ Ø€¿ÿ­Â$ @Ò€¿ÿƒè  ¿ÿÍ€¥ Ú Â ‚@ ØÚ € @ ¿ÿñØ"€¿ÿœÚ$ €¦ €€° ŸÆ ° Çàè㿲`²ø@’°”€¢ €’ @Çàèã¿Ú€£`€ Â@Â&Â`ŸÀ@Ð`Ú€£`2¿ÿúÂ@Çàèã¿æ ÂÒà® @ ˜À¬€£ €Ö ˜   € `€2àÀÂ Ú ‚ @ € @ €-Ø ÂÂ#ÚÂàØ#`‚ @ Úà‚ pà#@‚pÚ$ æ$‚p˜À$ ›8` à"à,àÀÚ$à  € @ Ø$à‚ €”à € @ 8¿ÿþàÔ#ÂÀØ `Ú æ#@Ú$àà$Àæ$ Âà,€P ‚`‚ªpšcÿ€¥@ €Sâàƒ5` ¤ÿÒ@€¢@*€UÐ`è` €¥ €›, š@Â`€ ˜`?ÿ€¤€ ‚@ ž €‹”`€u–” Ø€€  š`?ÿ–à€¢À ‚@ €‹@2¿ÿù”  “ €W€¥ Ø€£ €Ø"€€¢À :€t”¿üÚ` ‚@Ø`€ @ (€Â$`Ø$`€¥ €Q‚ Â$ À$‚ `€p°?ÿ  € `€‚  Â$Àæ% ‚ Â- ÒàÐ @” ‚@Â%€Ú šÿÚ% à% €Z° +ƒ5` ¤ÿÒ@€¢@:¿ÿ±è` Ð`€¢ 2€ è` @ ’ ¿ÿÙ‚ š‚ ä$ Â$ ¿ÿÑÚ$ €¥ € ’ ”`€ €¥  € @€€¤ ”à€¤ 2¿ÿú €¥ ¿ÿä@0¿ÿà@Ð`è`  ’ ¿ÿê”`@‚ ¿ÿ¯Â$ ¿ÿ—Ø€¿ÿ퀥 Ú Â`‚@ ØÚ`€ @ €Ø"€¿ÿÂ$`@Ò@¿ÿpè` €€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù”¿ü¿ÿ…Þ$@¿ÿ‹Ú$`Çàèã¿xÖ ,ÚàÚ'¿ØÂà‚ÿÂ'¿ÜÀ/¿èÚàÂঀ @ Ö'¿àð'¿äÀ'¿ì€{ ¿Ø ’”@–€¢?ÿ€wÚ¿ØÀ+@Ø¿àâ ‚#@‚`‚øš@п쀢 €7Ú# ààä ´€¤ €p²  € ž@ Ð€Ö ò&€²´’`"€Ö$ Ø €¢À ‚@ €‹À¿ÿ÷Ò€€£ 8€G •+ ‚€Ú`€£`€Ú&€€£8€ ‚€€¢À €>ô `´’`¿ÿé–"À Ö$ €¤ €Ð$0€Bò@@€¦`2¿ÿü´Â¿è€ `€D°Öà,ÚàÂà‚ @ Ø¿àÚà‚ pØ#@‚pÚ# Ö#‚pÀ# ›8` ” Ø$à,ØÀÚ"à  € @ Ô"à€-’ ØÂ € @ 8¿ÿþØÒ"€ÂÀÔ `Ú Ö#@Ú"àÖ# Ø"À€°Â&€€¢À ¿ÿÆô$ ¿ÿ«– ÿþƒ€¢?ÿ¿ÿ…ðà €¦ € € ° @¿ÿÁ€¦`@¿ÿä ŸÆ ° Çàèã¿ô' Lö' Pø' Tú' X’@” LÇà‘èÃàÐ"` ÃàÐ ÃàÐÃàÐ €¢ €‚ 0€€‚ Ò@€¢`¿ÿü€¢ ‚ Ãàã¿€¦ €Â š€ `€ ’ Â@Â&  Â#@Ú& ò#`ô#`€ö#` @¿ÿ÷šÇàèã¿Âà$€ `€’”?ÿ@Ðà$€¢ ’”?ÿ€–@’Ðà$”?ÿ–@”’€¦ € –@° 0€¿ÿõÐà$@¿ÿáÐ&à$° Çàèã¿Âà$€ `€’Ðà$”?ÿ@–”’€¦ € –@° 0€@¿ÿðÐ&à$° Çàèã¿Â $”?ÿ€ `€’€À&@Ð&Çà‘è €¢ €Ø €£ €š 0€Ø€£ €Â € @ 2¿ÿúš  € @ 2¿ÿöš ÂÂ#@Ú Ú#Ø" Ãà€¢ €Ð €¢ 2€Â 0€ €¢ €  € @ 2¿ÿûР€ @ 2¿ÿ÷ÐÖ" Ãàã¿’@”ŸÆ€Çà‘èã¿Ú €£`€   Â@Â$Â` ŸÀ@Ð`Ú€£`2¿ÿúÂ@𠀦 €ÿÿî𠀦 ¿ÿüÇàèÐ`À`Ãà ã¿@’  Â" Ð& ò"ô" Çàèã¿€¦ €‘¨ D¤av Ð’ ” @– €¢2€À$ à €¤ 2¿ÿ÷Р– 2€ Ø 0€}€£ €B’ à €¤ €€¥ Ø ‚ € š`?ÿ‚ € ‚`?ÿ€“@¿ÿñ’ @Ѐ¢ ¿ÿðà €¤ ¿ÿ𨠀¥ €-'- – 2€Â 0€]à €¤ "€  –  € `¿ÿú’ @Ðà €¤ 2¿ÿù  – 2€Â 0€Kà €¤ €H € `’ ” ¿ÿø– @Ðà €¤ 2¿ÿ÷ 0€:@пÿ¿à ¤ ¦ã@’D qªav¬b¿ – €+¨ €¢à €¤ €€¥  ’ ” € `¿ÿø– @Ѐ¢"¿ÿó¨ À$ à €¤ 2¿ÿó €¥ ¿ÿ²€¤ 4¿ÿ± – €€¤À¿ÿ­ – @’—4à‚€˜ÀšÀ¤ ¿ÿÖ¦ Çàè㿤 € `€@Р € `¿ÿüÿüÊ ÿÿ]Р€€ `"€à 0@Ð` ’ "€Â @ ڠ € `€Â#@Â Ú ` €¤ "€à 0@à 0 ð À @@€¢€Kæ €¤à€=¢  € ž@ Ð€Ö â$¢ ’`"€Ð&Ø €¢À ‚@ €‹À¿ÿ÷Ò€£ 8€# •+ ‚€Ú`€£`€Ú$€£8€ ‚€€¢À €à ` ’`¿ÿé–"À Ð&€¤à€Ö& 0€â@@€¤`2¿ÿü @€¢€0€Â$€¢À ¿ÿêà& ¿ÿÏ– @¿ÿÃæ @¿ÿ쀤`@è@’ ¿ÿ¶æ Çàèã¿ € `€ šÿ!€‹`ÿ€Ú+ @Ð À$ À `Çàèã¿Â € `€@Ð Â € `¿ÿüÿü; À& À& ÿþÌÐ ä 0ä& , 4Ú€Â$ €£@À& €JÀ& $ð  À @æ €¤àà€€:¢  € ž@ Ð€Ö â$¢ ’`"€Ö& Ø €¢À ‚@ €‹À¿ÿ÷Ò€£ 8€  •+ ‚€Ú`€£`€Ú$€£8€ ‚€€¢À €à ` ’`¿ÿé–"À Ö& €¤à€Ð&0€â@@€¤`2¿ÿü ä$ €ä$€Â$€¢À ¿ÿíà& ¿ÿÒ– @¿ÿÆæ @¿ÿ`ÇàèÀ`À`À`À`À`apr_global_poolÿñ $T3phIZ Ìi Ð@v‚Œ” Ÿd,¬³L$ÈðÞxüïý ¸ ”<,hA$ØUm…“š¨¾xÕ܈ã˜öœ”-ŒE„]jØ„H•¢ˆl¸ÇXÙå°4ú´h tD èh7¤tRWä`q|…˜¨¯ü˜ºDÏ߈øD@ôX)P8?LD¤bø,apr_pools.cfree_proc_chainapr_pools_initializedcleanup_pool_for_execglobal_allocatorpsprintf_flushrun_cleanupsglobal_poolapr_sleepapr_allocator_freeapr_psprintfmemsetapr_pool_cleanup_runapr_pool_cleanup_nullapr_pool_destroyapr_proc_waitapr_pool_parent_getapr_pool_clearapr_pcallocapr_pool_clear_debugapr_pool_initializeapr_thread_mutex_unlockapr_thread_mutex_createapr_proc_killmemcpyapr_hash_makeapr_thread_mutex_lockapr_pool_destroy_debugapr_pvsprintfapr_pool_abort_getapr_allocator_owner_getmallocapr_allocator_owner_setapr_allocator_mutex_getapr_allocator_mutex_setapr_hash_getapr_pool_cleanup_for_execapr_palloc_debugapr_hash_setapr_pool_cleanup_killapr_vformatterapr_pcalloc_debugapr_pstrdupapr_pool_is_ancestorapr_pool_create_exapr_pool_terminateapr_pool_userdata_setnapr_allocator_max_free_setfreeapr_pool_cleanup_registerapr_allocator_allocapr_pool_abort_setapr_pool_allocator_getapr_pallocapr_allocator_createapr_atomic_initapr_pool_create_ex_debugapr_allocator_destroyapr_pool_child_cleanup_setapr_pool_userdata_getapr_pool_tagapr_pool_userdata_setapr_pool_note_subprocess#,T4x4¨%¼øX#ÐÜ$@\4Œœð#t%ˆ¼$#T”°Ä Ì ( , 4 < D P:T l t x0| €  ”=˜ œ ¤ ¨@¬ °;´ ÌÐ Ü à&è ì$ð x €# è ü ( ¤9 ÀH #$@Œ  $ 0,04 0@€ ,9`'€.˜*¸5Ì*(54t'X+Ø Ü à pä p9LÄ pŒ¨ üL È%Ü $"ð4"4DT=\&x | Œ ˜ œ  ¤ ¨ ¬ Ìè4 0H9 L9 X \ h l x | ˆ0 Œ0 as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64B x˜  0 &"P{.&Ì< 9-? charset.o/ 1215611078 0 0 100644 860 ` ELF4(.shstrtab.rodata.text.symtab.strtab.rela.text.commentISO-8859-1Ãà ã¿@ 1€¢ €šÂJ€ `€²@‘è @èÿñ # <:Fcharset.capr_os_default_encodingapr_os_locale_encodingnl_langinfoapr_pstrdup  4<as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= x „HÌ€!LR) < 4Ü?env.o/ 1215611082 0 0 100644 812 ` ELF4(.shstrtab.text.symtab.strtab.rela.text.commentã¿@‚€¢ €° Ð @° Çàèã¿’@” 8‘:  ?ôÇà‘ê ã¿@Çà‘è ÿñ,#T29,(env.capr_env_getunsetenvgetenvapr_env_deletesetenvapr_env_set8Xas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lhÔdE!¬$ ,Ð? version.o/ 1215611085 0 0 100644 716 ` ELFŒ4(.shstrtab.text.rodata.symtab.strtab.rela.text.comment‚ Â"š ‚ Ú" Â" ÃàÀ" Ãà 1.2.12ÿñ  version.capr_version_stringapr_version  ( as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= t, ¨`!*)4 4L?rand.o/ 1215611090 0 0 100644 1204 ` ELFp4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿€ ¿à@’@” Çà‘è ã¿¢?ÿ!€¤ÿ€" ’”@€¢?ÿ€€¢ @€ `¿ÿö’@à@0€¿ÿú€¢ €²&@°€¦`¿ÿ䀤ÿ@€  @’ €¢?ÿ¿ÿÝ¢@€à@¿ÿî¢?ÿÇà‘è/dev/urandomÿñ ($(Ô>DM[rand.copenapr_os_uuid_getmemcpyapr_generate_random_bytesclose___errnouuid_generateread 0 < H \ t €°ÀÔ äas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= tüp €À!@`)  40? start.o/ 1215611094 0 0 100644 1524 ` ELFˆ4( .shstrtab.text.rodata.bss.symtab.strtab.rela.text.comment㿈Â`‚`€ `Â#`€‚ @@@‚” – ’ € `€¿ì@’`€¢ €‚b"@пì@Ð¿ì‚ Çà‘èÀ`Â`‚ÿ€ `€Â#`À`ÃàÀ`apr_initializeÿñ %9ÐHg{а 0¾Ñstart.cinitializedapr_signal_initapr_pool_initializeapr_terminate2apr_proc_mutex_unix_setup_lockapr_unix_setup_timeapr_initializeapr_pool_create_exapr_pool_terminateapr_terminateapr_app_initializeapr_pool_tag   ( 0T \ d t| ”   ¤ ´ ¸ ¼ Ð Ô as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64B xàXhh&xÞ.Xð 9H? errorcodes.o/ 1215611100 0 0 100644 5100 ` ELF¨4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿’”@Çàè㿂…€P u‚`¿€¦€4Ž˜â8€¦ €+´`€¦ 4€QDšâ,€¦ €#´`€¦ €nšâ'šâ1€¦ €´`€¦ €’šâ5šâ.€¦ €´`€¦ €´`‚â/€¦€ ´`‚â0€¦´`€°´`°²ÿÿ¾è‚a/€¦€¿‚`€¦€<?ý@‚c€€¢ ¿ÿð´`€¢ ¿ÿì´`°´`¿ÿé²’@”€¢ €Í€T°²5ÿÿ™•î š!x€¦ ¿ÿÔ´`€¦ €3š!ƒš!s€¦ ¿ÿÌ´`€¦ €wš!ušâ;€¦ ¿ÿÄ´`€¦ €œ‚!q‚â9€¦¿ÿ¸´`?ýq"Ð@°²ÿÿt•耦 ¿ÿ°´`€¦ €8šâ)šâ$€¦ ¿ÿ¨´`€¦ €n‚â%‚â"€¦¿ÿœ´`€¦ ¿ÿœ´`€¦ €6š!†š!}€¦ ¿ÿ”´`€¦ €Q‚!~‚!|€¦¿ÿˆ´`’ÿÿI” 0€t€¦ ¿ÿ„´`€¦ €S‚â6‚â3€¦¿ÿ|´`‚â4€¦¿ÿs´`€¦ ¿ÿs´`€¦ ¿ÿo´`‚â*€¦¿ÿj´`‚â+€¦¿ÿa´`€¦ ¿ÿa´`€¦ €B‚!‡‚!„€¦¿ÿY´`‚!…€¦¿ÿP´`€¦ ¿ÿP´`€¦ ¿ÿL´`‚!v€¦¿ÿG´`‚!w€¦¿ÿ>´`€¦¿ÿ>´`‚!€¦¿ÿ5´`€¦¿ÿ5´`‚â&€¦¿ÿ,´`€¦¿ÿ,´`‚â7€¦¿ÿ#´`€¦¿ÿ#´`‚!r€¦¿ÿ´`€¦¿ÿ´`‚!ˆ€¦¿ÿ´`Çà‘èThe given path misformatted or contained invalid charactersNo thread was provided and one was required.The specified network mask is invalid.Internal errorNo thread key structure was provided and one was required.No shared memory is currently availableThe specified IP address is invalid.Error string not specified yetUnknown hostNo address for hostUnrecognized resolver errorAPR does not understand this error codePartial results are valid but processing is incompleteThe specified thread is detachedThe process is not recognized.The given path contained wildcard charactersNo time was provided and one was required.An invalid date has been providedA new pool could not be created.Shared memory is implemented anonymouslyMissing parameter for the specified command line optionBad character specified on command lineThe given path is relativeDSO load failedThe given path is absoluteNo lock was provided and one was required.No directory was provided and one was required.No poll structure was provided and one was required.No socket was provided and one was required.There is no error, this value signifies an initialized error codeShared memory is implemented using filesShared memory is implemented using a key systemThe specified child process is done executingThe specified thread is not detachedThe specified child process is not done executingThe timeout specified has expiredEnd of file foundCould not find specified socket in poll list.An invalid socket was returnedNo process was provided and one was required.The given path is incompleteThe given path was above the root pathYour code just forked, and you are currently executing in the child processYour code just forked, and you are currently executing in the parent processThis function has not been implemented on this platformpasswords do not matchÿñ' 4@errorcodes.cstuffbuffergai_strerrorapr_strerrorapr_cpystrnstrerror_r L X l @x @Œ p˜ p¬ ˜¸ ˜¼ ¨È ¨Ð èÜ èä ì ø 8ü 88 XD XH hT hX €` €tŒ  ˜     ¨ È´ ÈÈ Ô è (ô ( H H$8 xD xX ¨d ¨x Є Ј ø” ø¨ (´ (È `Ô `à  è ˆô ˆ ¨ ¨ ¸( ¸, Ø8 Ø< H P 8\ 8d pp pt  €  ” è  è¨ ´ ¸ HÄ HÈ xÔ xÜ  è  ð Øü Ø      $ H0 H8 hD hH ˜T ˜\ ¸h ¸l àx à€ 0Œ 0 €œ €¤ ¸° ¸as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= t¼0Ï ! K) ÜŒ 4h? getopt.o/ 1215611105 0 0 100644 3700 ` ELF 44(.shstrtab.rodata.text.symtab.strtab.rela.text.comment%s: option requires an argument -- %c %s: illegal option -- %c %s: %s: %s %s: %s: %c invalid option characterinvalid optionmissing argumenterroneous argumentã¿’ 0@‚`Â" š`‚`Ú" Â" ¡. Ð&ô" ò"À" ’ @¢’@”š À$@Ú `,â `À `$Ú ` Ú `(Çà‘è ã¿Â € `2€$Ö à ÂL€ `"€Ö âL  à& â& €¤`:€_¤@’€¢ €Z€¤`-ÂJ € `:"€1ÂLÀ&À ÚH@€£`2€â.€Â –`Ö& â.€€t°  €¢À€ À&  ›*àà@ à& ÂL€ `-€ š `à&  DÂ.€€`°a~ÂL € `"¿ÿÎâL  à& ÂK`€ `-2¿ÿÈâL–à `¿ÿíÖ& € `2€?à&À –`Ú €£@ 4€B  `Ö& à& ÂN@€ `:€>D € `€D @Ð@”’` РŸÀ@Ö ä Dä.€€-°a|€¤`-€DÂL€ `2€Â  –`Ö&  € `¿ÿñDÂN@€ `:¿ÿíD @Ð@”¿ÿà’`â.€€°a~Ö šà‚`Ú& Â& â.€€° ›*àØ@ ¿ÿöØ&Àâ.€°a}Çà耢 €š@ ›+`™*`š@Ö ÂüÂ" ”¿þÖ#ü€¢ ¿ÿö’`Ãàã¿Ö ,Ø (Ú Â $ #@ ¢"À ’ € `€”@ÿÿäÐ Ð Ò (ÿÿà”Ò (’@”ÿÿÛÐ Ö ,Ø (‚ÀšÂ& ,Ú& (Çàèã¿Â € `€  @Ð@”Ð ’`– ŸÀ@˜Çà‘èã¿Â € `€  @Ð@”Ð ’`– ŸÀ@˜Çà‘èã¿Â € `¦€4ª`– Ö& Ð& À& ÂJ¤€ `€ô  $€ `€'Ö Ô €¢À €ƒ*àè ØÚK€£`-€G–àÖ (Ö& D€´°a~™.   µ; €‚à€¦€ "€&ô%@Ú@³, ‚`€£`¿ÿù  37Dµ; ¶á|ÿÿ¸“î`¿ÿÔÐ Ô €¢À €ƒ*àÒ Ú@ØK@€£ -"¿ÿÔÖ& ,–àƒ*à€¢À €Ö& Â@ÚH@€£`-2¿ÿù–à¿ÿÈÖ& ,‚ÀÚ`€£`€ ¤ ÂL€€ `"€ Ö ä&À`€Ð& À&Àä& ÿÿ^€t° Ö& ÂK € `-€¤ ÂL€€ `-€cô €€ `¿ÿ·™. 37D²`´¶á|ÿÿgè €¢À€ƒ*àÚ Ø@–àØ&À¿ÿÛÖ& 37D¶á}ÿÿj“î`ÂL € `"¿ÿâÂL€¤   ³, ‚ÀÚ`€£`€/  âÀ”`"¿ÿù³, @´’@”€¢ 2¿ÿï³, ÂL€€ ˜`?ÿ‚`=€ š`?ÿ€“ "¿ÿæ³, ‚ÀÚ`Ú%@Ø`€£ "€À&ÀÂL€€ `=€ 3Ø Â €£€²`ƒ+ Ú– Ú&À¿ÿ£Ö& 37D²`´¿þ¿ÿ²¶á|ÂL€€ `=¿ÿ™3²`7D¶á}ÿÿ•ì¿þÿþð¿ÿPÖ (‚€‚`¿ÿŒÂ&ÀÇàèÿñ øDüH<x´H$*Œl5=DLD`\cj€Œgetopt.creversecerrpermuteserr__iobapr_getoptfprintfstrlenstrncmpapr_getopt_longmemcpystrchrapr_filepath_name_getapr_getopt_initapr_palloc    $ ( L\ÔX \ ¤ ¨ Ø Ü    ˜ 0¤ 0¸ À ÌØ Pà P  `( `\ `   p  p¬ °    H  X  œ °   $  @ H d ¸h ¸as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= xËD¤è0! ›) ´@ 4 ô?otherchild.o/ 1215611110 0 0 100644 1884 ` ELF4(.shstrtab.text.bss.symtab.strtab.rela.text.commentã¿Â`€ `€¢`Ú@Ò`€¢@"€à`Â`€ `¿ÿù¢`0€Â`  ŸÀ@”?ÿà$@Çà‘è ã¿’ @ô" ð" ò" ø"€¦à€‚?ÿÂàÂ" Â`Â" 57Ð#`°ò ´ @—îàã¿€Ð`€ @"€Ò Ð €¢ 2¿ÿûÂ Ò ” @ÐÿÿÀèã¿Ø`€£ € ”ð Ú@€£@€Â ˜`2¿ÿû €°b;À#  ŸÀ@Ò ° Çàè㿈Ð ’¿ì€¢ €” @@ÐÚ ˜Â@€ @ € €£ €”?ÿ€£?ÿ€  À&  ŸÀ@Ò 0€À& Ò Â ŸÀ@Ô¿ìÇàèã¿à`€¤ €à @’€¤ ¿ÿüÇàèÿñ\1ü8R\dp† h¡·tˆÔîùÀLotherchild.cother_childrenother_child_cleanupapr_proc_other_child_refresh_allapr_proc_other_child_registerapr_pool_cleanup_nullapr_proc_other_child_alertapr_pool_cleanup_killapr_proc_other_child_refreshapr_pool_cleanup_registerapr_pallocapr_proc_other_child_unregisterwaitpid   d Œ ” œ   ¤ ° ´ ¸ Ä Ì ð ô ø   Œ   as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64: p4¤¤¤!&È 1Ü?mmap.o/ 1215611115 0 0 100644 1620 ` ELF84(.shstrtab.text.symtab.strtab.rela.text.commentã¿à Ú à#` Â Ú `€¤À& À& € ° Ò @Ð ‚?ÿ€¢ €Â$ @ðÇàè㿈¢€§ ä \  €7° €¦`€4° Â`€ ÿ€0Â` € `€,’ @’ @” €`€Ð$@  €`2€  ö# \š”Ø` ’@– €¢?ÿ€Ú@Ú#` Â@ `Â@ä#@Ð#`ø#`’” –à@Ð@€° @À$@ðÇàèã¿’” @Ð&ò" ÚÂ` Â#` ÂØ` Â# ÚÚ&` ô"Ò” @–àÇà‘è ’” À`Ðÿñ\1GTdT[g¸w‘\ø¡¬µmmap.cmmap_cleanupmemsetapr_pool_cleanup_runapr_pool_cleanup_nullapr_mmap_dupmunmapapr_pmemdupapr_mmap_deleteapr_pool_cleanup_registerapr_mmap_createapr_palloc___errnommap640H¤ °ìü  ( , 0 @` ” ˜ ¤ ¨ ¬ ¼ À Ä È as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lÔ@@¼!üü ,ø? common.o/ 1215611118 0 0 100644 548 ` ELF44(.shstrtab.text.symtab.strtab.commentš€¢ €  Â`€ @ €Â`‚@ Â#@ Ãàÿñ 8common.capr_mmap_offsetas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64* `8˜@Ø!ò?sockaddr.o/ 1215611125 0 0 100644 5988 ` ELFH4(.shstrtab.text.symtab.strtab.rela.text.commentã¿Ò`@Ð@”Ð&Ð`Ò` @Ö`Â`€ `€?Ð` Ú ‚cÿ€£@€  € `€ € `€Â‚`Â&Çà‘è ƒ* ˜ š ,€ `Ò" €Ò2 (Ô2 Ô2 *€¢`€€¢`€˜ 0€‚ ‚ Â" Ø" Ú" €Ø" Â" š ‚ .Ú" Â" Ø" Ãàã¿€¦`€€¦` $€ `2€Ò Â  € `"€Â Ò ‚!Â"`”`Р@’`(€¢ €$Ú À& $À&  Â`*Â3`  Â&€+‚ 2€À& (€ `2€Ò ¿ÿ÷ ‚!Â"`”`Р@’`(€¢ €Ú À& (Â`*Â3` ¿ÿè €‚ @€ `€ ¿ÿÞ @€ `€¿ÿÖ Çà‘èã¿€À&À&@À6€@¢?ÿ¨€¤@ €:  ?ÿ–`Ø@ €‹ € €¤ ?ÿ€¤ €/ Ú@ €‹`2¿ÿú ?ÿ€¤ €'ÂL‚`:€ š`?ÿ€¤‚@ €‹@"€ $@€¤€^° @ ?š?ÿ‚cþ€£@€V¢?ÿÐ6€ $@ÂNÀ€ `[€¤ ’ @Ð%’@”ÂÀ(@€E° @?š?ÿ‚cþ€£@€=° ¿ÿöÐ6€’ ]@”€ ‚`?ÿš€  ˜@ €@ €*¦”@’ %¢’ €&‚ÿÿ€ @€ ‚$@ $À¤ÿ’@Ð&@’`@”?ÿÂ@‚@À(ÿ’ @’à”@Ð%ÂÀ(@ Ò@”¿à€¢ "€ ° À%À&@À6€€° ¿ÿë¤?ÿÇàèã¿h˜ š Ø?¿ÐØ?¿Ø‚ Ø?¿èÂ'¿ØØ?¿àô'¿Ô€¦ €  ‚ Â'¿Ð€¦`€^¿Т¿Ð’”@–¿Ì‚ € š`?ÿ€ ‚`?ÿ€‹@2€=À'¿Ð€¢ €ô¿ÌŽ‚a0€¢ €P°0€:€¦ €-¢ €·.àô €¦ €' š`€  ˜@ ‚`€ š@ €‹ ¿ÿó’!(@’ @”!( ú"Ò Ô @ (Ò @•6à€¤`€’–`Â`à$`$Â$ ¢ô €¦ 2¿ÿÞ @п̀° ’”@–¿Ì¿ÿÁ€¢ @€ð€@Ð$ à&¿ÿ碂`“.àÂ'¿Ð“2`@¿ÿž Çàèã¿”˜ € À&€ š`?ÿ€ ‚@ €“@€)€£ €( € € € €µ.à’—6 ˜ÿÿqš0€µ.à” ’—6 ˜ÿÿhš€¢ €” ¿ÿï” ’—6 ˜ÿÿ\š€¢ €” ¿ÿã Çà‘èã»pÂ`#€ `€ À$`€¦ `(€ »èô# \Ò`”–$˜ @š €¢ € ŽÀ&‚a0€¢ €3°€&¿¿ÿï´ ’@Ð@Ð&`Ð&€(° ?Ú`8‚cÿ€£@¿ÿ߀¦ Â`4€ `¿ÿÛ€¦ Â`0€ `¿ÿ×€¦ Â` Ú` ‚ Â7»ØÚ'»ÜÀ7»Ú€ »è´ ô# \»Ø¿ÿÏ’ Ú`‚`€€£`€°@@¿Ú‚`€°@Çàèã¿¢’ €¦`€° @ €¢ € ’ Â4` @Ð@ Â4`*Ð$`€° @ðÇàèã¿Ô Â`€¢€"€*Ð Â (€ `€/¢à`(ƒ, ƒ0`€ `"€ƒ,`€A‚ ƒ0`€ `€=‚ Ò ?Ú`‚cÿ€£@€6‚ Â`€ `€2‚ Â@€ `€.‚ ’` Ô`@Ð` €¢ €'‚ €%‚ @Ò` €¢ € ‚  (€ `¿ÿÕ¢Â`(€ `¿ÿÒ Ò` ?Ú`‚cÿ€£@¿ÿ̃, Â`€ `¿ÿȃ, Â@€ `¿ÿă, ’` Ð @Ô €¢ ¿ÿ¼‚ Çà‘èã¿x@’ :€¢ ¤¦ €Ž–@’ $’ @” $Ð$€‚?ÿÂ" Â" Â" Â"    `¶`?ÿ ’@”€¢ €” @’€¢ €f€¦à€Ì°b0@€¢ €ˆ‚°`€Ä€¦ 0€ ?Ú` ‚cÿ€£@"€VÂ`‚ Â$@€¦ "€5؀€Ú@€£`"€¦ €’¿Ü@” Ú¿ÜØK@ƒ: €  ‚ @š`?ÿƒ0`€‹@€-€¢4€,Ԁ€À ` À `À `À `€¢ €Z𠨀–?ÿ‚ Ö @?àš`€¢ ¿ÿü‚`€¢ €  “+`”@  ›2à‚@ šÀ Â" ‚?ÿ¿ÿú—;` ˜ Â Ú ‚@ Â" ˜ƒ?ÿ¿ÿû €z° Ô€’” @ €¢ €Ø€Â€ `¿ÿê€k°b1¿ÿ¯‚ € `¿ÿ¬‚ Â`€ `€a°b0¿ÿ¥‚ ÂN@€ `.€ Â@‚`ÿš Ø@ €‹ "€Ú@˜`–àÂJÀ€ `.Ú À¿ÿü‚ `ÿÂ@ €ˆ`2¿ÿù–àƒ+`€ `¿ÿ[° 0€B¿ÿ±Ø€ ¿à@’À$`À$`  ÂJ€ `€1Ú š `ÿ˜  @ €ˆ`€'¶– ¶àØÀ‚ ÿÚ@ €‹`2¿ÿü¶àƒ+ ƒ8`€ `.€€ `2€€¤ €@€¢ ÿ€˜ ÿ—*™+Â`Ú`‚@ š@ Â$`Ú$`¿ÿÕ ?øÀ.À¿ÿì¶à¿ÿA‚b0‚ Â$@¿ÿ=‚ ÇàèÂ`(€ `€?Ò` Ú`‚cÿ€£@"€Â`Â@Ú ‚@ Ø € @ "€"Â`€4 € `2€0 Ú Â`,Ø ‚@ € @ ¿ÿõ 0€'€ `¿ÿëÂ@€ `2¿ÿéÚ Â€ `2€ Ú Â` Ø ‚@ € @ ¿ÿã 0€Ú ‚@ Ø € @ 2€ Â`Ú ‚@ Ø € @ 2€  Ú Â` Ø ‚@ € @ ¿ÿÎ Ãàÿñ HàœL-4;(ØQZ ¼l0l~†ü(š¡­´»ÉÕ0åìô$$"„6BN\joz‡„x¦ èÔsockaddr.ccall_resolverapr_sockaddr_equalstrlenmemsetapr_sockaddr_info_getapr_itoaapr_ipsubnet_testapr_getservbyname__ctypeapr_socket_addr_getmemchrgetsocknamememcmpmemcpyapr_inet_ntopgetnameinfoapr_getnameinfostrtolh_errnogetaddrinfoapr_parse_addr_portstrchrstrcpyapr_sockaddr_ip_getapr_pstrdupgetpeernamegetservbynameapr_inet_ptonatoiapr_pallocfreeaddrinfo___errnoapr_sockaddr_vars_setapr_ipsubnet_create  @¨Ü"ü"4T \ Ð 4d ” À Ðè ø < H`p#¤!ÀÐ"è  <xü "Llˆ" 8 T Ì ð    T l Œ ø à P  X  l  p  À è  ð  Las: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lØDP”º!P¸ ,? sockopt.o/ 1215611131 0 0 100644 2772 ` ELF ¼4(.shstrtab.text.symtab.strtab.rela.text.commentã¿’ ” @” ?@’ €¢?ÿ€° @ðÇàèã¿’ ” @” €@’ €¢?ÿ€° @ðÇàèã¿ €¦`€¢Â € `€%€¦`€ € `€¤ €à> €*  € `¿ÿù€¤  ,€ˆ`¿ÿõ€¤ ÿÿÅÐ €¢ €Â ,‚÷¿ÿëÂ& ,2€Ú ,€¤`8¿ÿêà> Ú ,‚+@¿ÿäÂ& , ,€ˆ`¿ÿÞ€¤ ÿÿ¿Ð €¢ €Â ,‚`¿ÿÔÂ& ,Çà‘èã¿€€¦ €ô' L‚ €¦`@€Â'¿ä€¦`@€ €¦`D€¦d€ôa‡€¦d4€8€¦`€€€¦b"€] ,€ê €¦`@¿ÿïÀ'¿ä?Ð ’cÿ” – L@˜ €¢?ÿ€’€Ú €_€¦`€.€¦`€¦`€¦€¦`€Ñ  ,ƒ0`‚`€ @¿ÿñ?’cÿÐ ” –¿ä@˜ €¢?ÿ€x L€ `€¹Â ,‚`Â& ,€» €¦@"€_Ð €R €¦@€² €¦ 2€b ,Ú ,‚+@¿ÿïÂ& ,€h€¦`€¦  ,ƒ0`‚`€ @¿ÿÆ?’cÿÐ ” –¿ä@˜ €¢?ÿ€M L€ `€‘ ,‚`¿ÿÖÂ& ,ƒ0` ‚`€ @¿ÿ²’  € `„€y” Ð – L@˜ €¢?ÿ€7 L€ `€l ,‚b¿ÿÀÂ& , ,ƒ0`‚`€ @¿ÿ›?’cÿÐ ” –¿ä@˜ €¢?ÿ€" L€ `€# ,‚`¿ÿ«Â& ,D€¦@¿ÿxa‡0€`?Ð ’cÿ¿ÿ{” ’ )” '– L@˜ €¢?ÿ€  L€ `"€ Ú , ,‚@¿ÿ‘Â& ,@€HЂû¿ÿŠÂ& ,¿ÿ˜‚+@ ,ƒ0`‚`€ @¿ÿb€¦ €$ÿþëÐ €¢ €5 L€ `€) ,‚`¿ÿtÂ& , ,‚`€ @¿ÿP‚ ô'¿èÂ'¿ì?’cÿÐ ” €–¿è@˜ €¢?ÿ¿ÿÔ L€ `€Â ,‚`¿ÿ]Â& ,ÿþ¸Ð ¿ÿ߀¢ ‚}ÿ¿ÿVÂ& ,’ „¿ÿˆ” ‚þ¿ÿPÂ& ,‚÷¿ÿMÂ& ,‚ý¿ÿJÂ& ,‚ï¿ÿGÂ& ,Çà‘èØ Ø:@Ãà  ,‚*@€ š`?ÿÚ"€Ãà 㿈Ð ’c@”¿ì€¢ €Â¿ì€ š@ Ú&@€° @ðÇàèã¿’@€¢  ”’ €@À.€ ð@° €¢ €À,° NÇàèÿñ DDDt 1€HNU`ø\pƒ¬L•ž¤°ˆìsockopt.csononblocksoblockapr_socket_opt_setapr_socket_timeout_getfcntlmemchrsetsockoptapr_gethostnameapr_socket_opt_getapr_socket_atmark___errnoioctlgethostnameapr_socket_timeout_set 0 P`t ü d  h ¼  P ô ¼ä  0as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lTÀÐÇ!˜ä , |?sendrecv.o/ 1215611136 0 0 100644 4364 ` ELFÌ4(.shstrtab.text.bss.symtab.strtab.rela.text.commentã¿Ú ,€‹@€ ’‚+@Â& , ’@” €¢ € ’€RÀ&€Ô€@Ð €¢?ÿ2€6 @€ `¿ÿö’@€ ` "€Â @€ ` "€Â @À&€€6ÐÔ€@Ð €¢?ÿ2€Â @€ `¿ÿö’@€ ` ¿ÿæÂ € `¿ÿÈ € `¿ÿå € `¿ÿÂ’0¿ÿ߀ `€ €€¢:€Ð&€Â ,‚@ Â& ,Ð&€€  2¿ÿþÐ&€Â € `8¿ÿò€Ð&€ Çà‘èã¿Ú ,€‹@€ ’‚+@Â& , ’@” €¢ € ’€VÀ&€Ô€@Ð €¢?ÿ2€6 @€ `¿ÿö’@€ ` "€Â @€ ` "€Â @À&€€:ÐÔ€@Ð €¢?ÿ2€Â @€ `¿ÿö’@€ ` ¿ÿæÂ € `¿ÿÈ € `¿ÿå € `¿ÿÂ’0¿ÿ߀ `€Â€€¢:€Ð&€Â ,‚@ Â& ,Ð&€€¢ D€ a~€  2¿ÿúÐ&€Â € `(¿ÿöÐ&€¿ÿì€Çà‘èã¿¢`(’Ô–˜Ú`@Ð €¢?ÿ€  @€ `¿ÿ󒀤?ÿ€à'€4 @€ ` "€  @€ ` €% € `€ ’@” €¢ € ’€À'@€ `¿ÿä’Ô–˜Ú`@Ð €¢?ÿ¿ÿó ¿ÿ×à'€Â € `8¿ÿã @À'ÐÇà‘èã¿‚!Â& ¤ (¢ ’Ô–˜š@Ð`€¢?ÿ€  @€ `¿ÿ󒀤?ÿ€Ò (@Ô *€¤ €à'Â`D€ `€6a~€4 @€ ` "€ Â`@€ ` €%Â`€ `€ ’@” €¢ € ’€À'@€ `¿ÿä’Ô–˜š@Ð`€¢?ÿ¿ÿó ¿ÿÌ€Â`€ `8¿ÿã @À'ÐÇà‘èã¿  €¤€ ˜ š`Â@˜  €£¿ÿüš`Ú ,€‹@€ ’‚+@Â& , ’@” €¢ € ’€TÀ&À”@Ð €¢?ÿ2€6 @€ `¿ÿö’@€ ` "€Â @€ ` "€Â @À&À€8Д@Ð €¢?ÿ2€Â @€ `¿ÿö’@€ ` ¿ÿæÂ € `¿ÿÈ € `¿ÿå € `¿ÿÂ’0¿ÿ߀ `€š š €¢‚@ €‹@"€Ð&À ,‚@ Â& ,Ð&À€  ¿ÿõ€¢Â € `8¿ÿðš ¿ÿÇà‘è㿈ª€¦ €™¦  ڠ ‚@ ¨`’’@“*`@Ð@  € `¤ €ž ‰?þ •+à‚@ –Ò`Ø@ ð"š Ò"àÀ"à˜ žà Ø:à¦À € @¤ ¿ÿð € `"€¨?ÿ‚€‚@ƒ(`Ú`–Ú$À"àÂØÀØ:àÂ"à¦À¤ Â  € `€ž ‚€‚@‘(`ö ¢?þ•+à‚À –Ò`ØÀ â"š Ò"àÀ"à˜ žà  Ø:à¦À € @¿ÿñ Ú`,€‹@€!‚+@° Ð`’”@–¿ì¶€¢?ÿ€>¢ @€ ` €Â¿ì@€ `¿ÿ퀤`2¿ÿìÐ`€¦ÿÿ2€.Ú`@À'€?ÐÂ%`, ’@” °’ "¿ÿܰ À'€4€ `€€¦ ¿ÿãÂ`€ `€  ’@” €¢ €$¢ ¿ÿ×° ¿ÿÕÂ`€ `¿ÿÑ ¿ÿó’¿ÿh´`Ú`¿쀣`€ Â'€ @€ Â`,‚@ € Â%`,€ Â`€ `8¿ÿôÂ0€À'Çà‘èÿñ Xh(4OU€ÜiŒœy(0‹ÀÀœŒ¬µ¼ÇÐæësendrecv.cno_hdtrapr_socket_recvfromsendfilev64apr_wait_for_io_or_timeoutwriteapr_socket_sendfileapr_socket_recvapr_socket_sendtoapr_socket_sendvapr_socket_sendrecvfromsendtoapr_palloc___errnoapr_sockaddr_vars_setreadwritev(H\tŒ¤¸Ìä´Ôè0DXpDXˆ ÌèD€”Àð4Px¬4H`x¤¸Ð°ô  $ P l ´ ð ø as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64: p \ Ì ÌP ò& | 1Œ?multicast.o/ 1215611141 0 0 100644 2292 ` ELFØ4(.shstrtab.text.symtab.strtab.rela.text.comment㿈@’¿ì€¢ € ¿ìš`€  ˜`?ÿ‚`€ š`?ÿ€“ €Da‡Çà‘èÃà Ú Â`‚`€ Ãà`?ÿÚ Â`‚`€ Ãà`?ÿã½hÿÿÞ¢ €¢ €i°€§ €,ÿÿ逢 € ¤ ÿÿêD°a‡€¢ €Z¤ )€¤`€CD€¤`€T°a‡¢ .ÿÿÔÐ'½ÈÒ  ”!@½ÐÒ ”!@¾ÐÐ`’”–½È˜"@€¢?ÿ€%€<°ÿÿ¿€¢ 2€% ,ÿÿÀ€¢ €+D€¤`€-€¤`€-°a‡¢ ¤¿ÐÒ  @” €¦à"€À'¿àÿÿ¥Ð'¿àÐ`”–’ )¿ÿÚ˜ @à€°¿ÿâ -€¦à€ Â'¿èÂà,Â'¿ìÐ`”’ –¿è¿ÿȘ  a‡€°¿ÿ÷À'¿ì¿ÿØ¢ Çàè㿈ô/ Lÿÿl ´€¢ €2°ÿÿz€¢ 2€#Ð`ÿÿ{€¢ €€¤ ÿÿv€¢ €D€¤ € °a‡Ð`’ )” – L˜ @€¢?ÿ€°0€¿ÿí LÂ'¿ìÐ`’ )” –¿ì¿ÿó˜ ”¿ÿî’ ´a‡€°@ô°Çàè‚ š ˜ ’”– À` ‚ š ˜ ’”– À` ” `ÿ’À` ” `ÿ’À` 㿈ÿÿ'€¢ ’ ” ˜ –`,€  ÿÿ#€¢ €D€ a‡ÿÿÐ'¿ìÐ ’ )” –¿ì˜ @€¢?ÿ€@€à¿ÿ÷Ð Çà‘èÿñ LL,Hì9„ÄBTOl\\(l€4(„ž¥œ¸Ã´ ×multicast.cfind_if_indexmcast_check_typedo_mcast_optdo_mcastsock_is_ipv4sock_is_ipv6apr_mcast_leaveapr_socket_type_getapr_mcast_joinapr_mcast_hopsmemcpyapr_mcast_loopbacksetsockoptapr_mcast_interface___errno   <¤ ÜÈL „P „t „x „Œ H H¤ H¨ H 4as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lTÀ  àà!ÀØ ,˜? sockets.o/ 1215611147 0 0 100644 4980 ` ELF04(.shstrtab.text.bss.symtab.strtab.rela.text.commentã¿Ð @ €¢ €° ‚?ÿ€Â$ @ðÇàèã¿Ð ’” @ô> ’Ð @” À& ,Çàèã¿’ 8@” 8@’ ¢Ð&ò"’!(@”!(@’ àÐ$` ò @’!(@Ð’ @”!(ØÐ$  š ò @Ú# (Çàè Â"@Ãà ã¿¢€¦`€’¢ ÿÿÓà’”@Ð$ à€ Ú ›3`‚`?ÿ’”€‹@€  ’”€ `€–ÿÿ­?ÿÿ?ÿÿ” ˜#ÿšcÿØ8`À `0’Ð@@– €° @¢ Ð$ à ’”€ `¿ÿæ–@ðÇàèã¿Ð @’€¢?ÿ€° @ðÇàè’” À`Ðã¿’`(Ô`@Ð €¢?ÿ€ ò& Â`*€ `€‚ €° ¿ÿþÂ& @ðÇàèã¿Ð @’€¢?ÿ€° @ðÇàèã¿ÿÿb’Â`Ò`(Д ÿÿOÖ` àÒ ?ÿÿ?ÿÿšcÿ˜#ÿ”`Ø< Ð`@’`(Ð$ ÚÂ`€ `€AÀ#`(Ð`Ò`@”!(àÖ`Ú Âà(€ `€2ô#@€ `€6‚`0 Ú`*Ø` €£ €Ú0` ‚ Â$ Â`,€ˆb€€ˆ` ,‚bÂ$ ,Â`,€ˆ`"€Â`$ ,‚`Â$ ,Â`$€ `€ ‚ ’`Ôà@Ðà €¢ €‚ Â$ $” À$ 0’Ð@– € ° ‚`,¿ÿÒÂ#` @€ð¿ÿÌÂ#` Çàè㿈¢ `(’Ô`@Ð`€¢?ÿ2€:!@€ `¿ÿö’@€ `–"€Â`@€ `•"€ Â`@€ `…"€"!@€?ð€ `€4 ’@” °’ €6‚ ?Â'¿è’cÿ” Ð`–¿ì@˜¿è€¢ ¿ÿéð¿ì€¦ €&€¢?ÿ¿ÿÝ!Ð` ’ @Ô`€¢ "€Ú`ò$`À$`(Ú`Â` € `€’ ‚ Â$` Ô`@Ð` €¢ € ° ‚ € Â$`$¿ÿÁÂ`€ `¿ÿ½ ¿ÿÉ’Çàè Â"@Ãà ã¿ô 4€À&@’€¢ "€Â ô€€¦ 2¿ÿùР0€Â&Çà‘è ã¿’ @Р’@Р4Â$”’–Ð$ à& 4€¦à€ò$ @ÐÇà‘è Â`Â"Ãà ã¿’ÿþlÐÒ` Ö`ÿþZÔ`Â@Ö@Â`?ÿÿ?ÿÿÐ’˜#ÿšcÿ€ `Ö" Ø: € ‚ Â" Â" $Â`’`2€Ð ‚ €Â" (Ð Ô @ (ÐÚ Â`*Â3` Â`’`¿ÿô‚ Ð Ô @ (ÐÚ Â`*Â3` ” À" 0’Ð@– Çà‘è ã¿Ö€¢à€’ÿþ+– Ð’ ÿþ” ?ÿÿ?ÿÿÖ˜#ÿšcÿØ:à‚ Â"à(Â"à$Â"à Ú@Ú"àÇà‘è ÃàÐã¿Â 0@€ˆh€° ˜@ €ˆ@ ’” €–à€° Ø" 0@а Çàèã¿Ú 0€‹h€° @” ˜+@€‹@’€– €° Ø" 0@а Çàèÿñ <4.pˆ;<J \ah”ty”œü°·Ìâé¬lù 0 °0&ø>E<V\c¸ôtˆ”àˆ¦¨¶ÐÛâë|X5 DITPXhXXxŠ“sockets.cgeneric_inaddr_anyset_socket_varsalloc_socketsocket_cleanupapr_socket_inherit_setapr_socket_connectbindapr_wait_for_io_or_timeoutconnectapr_socket_type_getmemsetapr_pool_cleanup_runapr_pool_cleanup_nullsocketapr_os_sock_putapr_socket_shutdownapr_socket_listenmemcmpapr_socket_protocol_getmemcpyapr_socket_closeclosestrcmpapr_os_sock_makeapr_socket_pool_getapr_pstrdupapr_socket_acceptapr_os_sock_getapr_pool_cleanup_registerapr_palloclisten___errnoapr_sockaddr_vars_setapr_socket_inherit_unsetapr_pool_child_cleanup_setapr_socket_data_getgetsockoptapr_socket_data_setapr_socket_bindapr_socket_createshutdownaccept(#L$\$x!„œ!¨Ä!Ð8   ¼ Ìø#,(#@ D H L d œ#¸"Ì#,-Xð ô ü    , H#| Œ #¨#À#Ø#ì ð# @(l t x¤ ´X!h˜ @pˆ Œ œ < @ P X h&” œ À&as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64: pÔ H Dà $š&À0 1ð? inet_ntop.o/ 1215611152 0 0 100644 1892 ` ELF 4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿€¦ ¢ ´€/¤ . `ÿ’ d€¤ c€ ° @ 0Ð.€@’ d  ÿ’ @´  0Ð.€@’ ‚´ ‚`0Â.€´ ä.€¢`€¤`¿ÿà´ À.¿ÿ€°’ €¤ ¿ÿó@¿ÿé 0@° ‚ Â"Çàèã¿0€¦ €¡€¦ €›˜?ÿØ'¿°Ø'¿¸À'¿¼À'¿´–`’¿° € ž Ô¿°€¢¿ÿ€`¿´‚`Â'¿´€¢À€°  À–àÚ Àƒ(`‚@ Â"@€ `–à¿ÿï’`Ô¿°€¢¿ÿ¿ÿñØ¿¸€£?ÿ€”?ÿÚ¿´Â¿¼€£@$€Ô'¿°Ø¿°Ø?¿¸Ô'¿°€¢À ¿ÿæ° €¢¿ÿ€ Ø¿¸€£?ÿ€=Ú¿´Â¿¼€£@4€:Ø¿°€£?ÿ€Â¿¼€ `$€e˜?ÿ¢¿À €"° €€¦ ‚ :Â,  € ƒ. ¿¸€ `€ ƒ. ¿¼€ `€)€ `€"?ƒ. š$˜€’ .’"@ ” @Ö? ° €¦ €$Ø¿¸€£¿ÿ߀¦ ‚ :Â,Ú¿¼° ¿ÿö  ð'¿°Þ'¿´¿ÿ¢”Ø¿°Ø?¿¸¿ÿÇØ¿¸Ú¿¤‚cÿ€£@¿ÿÞƒ. ‚$” .”"€` ÿÿD’€¢ €+ @ Ú¿¸€£ÿ€Â¿¼‚@€ `€‚ :À,  ‚$€ @€’@‚ Â"€ @¿ÿû‚ |’ÿÿ"”0€ ¿ÿØ'¿¸@€Â,¿ÿä  Çà‘è%xÿñ ä%,2äÌ@FMinet_ntop.cinet_ntop4apr_snprintfstrlen.uremapr_inet_ntop.udivstrcpy___errno4 HX p¼ Ì \ h lH ` Œ as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= t°(,À!ìV)Dœ 4à? inet_pton.o/ 1215611157 0 0 100644 1876 ` ELF4(.shstrtab.rodata.text.symtab.strtab.rela.text.comment01234567890123456789abcdef0123456789ABCDEF㿈àNÀ/¿è° €¤ ¤ ¦ €9¢¿è)€ª Ú @ƒ+`‚@ ‚@‚@‚ @€ `ÿ€-€¤ €Â,@¦à€¤à€'¤ àN€¤ €° ’@ €¢ ¿ÿé’ .€  ‚`?ÿ€ˆ@¢`€¤ €¤à"€° À,@àN€¤ ¿ÿî° €¤à$€ ° Ú¿èØ¿éÖ¿ê¿ëÂ.`Ú.@Ø.`Ö.`€° ° Çàèã¿€€¦ €l€¦ €c¨¿à’ @” ÂN@Ú@€ `:¦¬¿ð€P® ƒ+`±8`¸²`€¦ ¤ €1¢ ?ºcÿ+ `@’€¢ €O‚"£,`¢@€¤@€6¤ ðN@€¦ ¿ÿñ²`€¤ € €¥à‚à€ @€Z ƒ4`Â,À¦àâ,À¦à€¥à€€¤À’$À€– š  Â-€ –àÀ+€¢À ¿ÿú˜"@ ¦€¤À€C ’@” €= €¦ .€:  à€¤€6’ÿÿd€¢ ¿ÿÞ¦€/ ²`ÂN@€ `:Ú@€) ¿ÿ­ƒ+`@‚ |Â"€!?ÿÿÿO’0€ `@’€¢ ¿ÿ¯‚"€¦ :¿ÿÙ€¤ €¸€¥à2€ ¿ÿª®‚à€ @¿ÿÚƒ4`Â,À¦àâ,À¦à¤ ¿ÿŸ¢ Çà‘èÿñ (% . 9@GN <\inet_pton.cxdigits_u.2xdigits_l.1digits.0inet_pton4memsetmemcpystrchrapr_inet_pton___errno$ , € „ 0| € ˆ ˜ (D ¬ Ð (Ø as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= x9´HüÐ!Ìe)4œ 4Ð? epoll.o/ 1215611161 0 0 100644 460 ` ELFØ4(.shstrtab.text.symtab.strtab.commentÿñepoll.cas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64* ^`0 !™? select.o/ 1215611165 0 0 100644 460 ` ELFÜ4(.shstrtab.text.symtab.strtab.commentÿñselect.cas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64* ^`0 !š?poll.o/ 1215611170 0 0 100644 1124 ` ELFH4(.shstrtab.text.symtab.strtab.rela.text.commentã¿¢ƒ.`œ#€  ¦¤€¤€'¸ `˜Â € `€€ `€!€¤ Â Ú`ƒ, Ú'Ú –€‹`€‚ ‚ €‹`2€‚`€‹`2€‚`€‹`2€‚`€‹` 2€‚`€‹`@2€‚`   Â2à€¤¿ÿÞ˜ €¤ €6’” @–#è¦ ’”@˜€¢ €"Ð&€  €¤€€£ °  €ˆ`€š š €ˆ`2€š`€ˆ`2€š`€ˆ`2€š`€ˆ`2€š` €ˆ` 2€š`@Ú6   €¤¿ÿè° €£ €€£ €‚ €œ€¤ ¿ÿÑ’€¤à¿ÿÏ”¿ÿÆ’@€œD‚awœÇà‘èÿñàpoll.c__divdi3apr_pollpoll___errnoÐä¸as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 làLp¼(!ä$ ,? port.o/ 1215611176 0 0 100644 3660 ` ELF 04(.shstrtab.text.symtab.strtab.rela.text.comment‘* ‘2 €Š €‚ ‚ €Š 2€‚`€Š 2€‚`€Š 2€‚`€Š 2€‚`€Š @2€‚` ‘(`Ãà‘: ã¿@Ð Çà‘è ã¿’ @@‚ ”’ ¤€ŽàÂ&€ ¦ @€ ¦@ €¤à€1°à€“.`ö$ À$ ò$ ô$@â€@Ð$ Ð$` Ú€Â` ” –à’ € `€° @“.`’@à€@“*`€š` Ú ` Ú `$˜`(Ø `(Ø `,š`0Ú `0Ú `4˜`8Ø `8Ð$ Ø `<€°À$€Çàè’” À`Ðã¿Â €ˆ`€4¦ ¤ 0 0€ @"€=Ðà 0 ÚÚ @ØÂ# Â@Â$ Ú`Ú$ Â`Â$ Ú` Ú$ Â`Â$ Â` â`ÿÿzÐV`—* ”—:àÐ ’ @˜€¢ &€Â 4 $Â$ ‚ Ú Â$ $š`Ú& à @à& $ €ˆ`€0€@Ð ¿ÿͤ 0@Ð 0€Â$  4ä$à @à& 4¿ÿï¦ @’  Ð$¿ÿÇÐ$ Çà‘èã¿Â €ˆ`€3  Â` Ô`Ð @’ €¢ €6D˜  € @ "€˜ (Ö €£ "€ ˜ (Ú` Âà€£@"€*ØàÖÀ€£ 2¿ÿûÂà˜ ( (€ @ "€Â Ö (€£ "€  Ú` Âà€£@"€'ØàÖÀ€£ 2¿ÿûÂà €ˆ`€+0€@Ð Â` Ô`Ð @’ €¢ ¿ÿИ D¿ÿÌ aÂÀÂ#ÚÀØ#` <Â"àš 8 <Ú"ÀÖ @¿ÿÒÖ& <@Ð 0€ ÂÀÂ#ÚÀØ#` <Â"àš 8 <Ú"ÀÖ @¿ÿÕÖ& <Çà‘èã¿€€¦`¦ €¤ Д –â@@’Ò'¿èÐ’” @–â@ƒ*`‚ @ ƒ(`‚@ ƒ(`Â'¿ì¤¿è ´ €ˆ`€±ô'¿ä¢ ( (€ @"€Â   ô (ؠ€Â#Ú€Ø#` ò`ÿþ½ÐV —* ”—:àÐ ’ @˜Â $Â& à&€Â $ô @Ú (€£@¿ÿèô& $ €ˆ`€t˜Ð Ò Ô @–¿ä€¢?ÿ€wô¿ä€¦ €Mô&Àö €Žà€…  €¤€9€Žàä ò ž —, @ Ø Â Â#À ’€Â"`Ú Ú"` Â"` Â Ú Â"`€‹`€” ” €‹`2€” €‹`2€” €‹`2€” €‹`2€”  €‹` 2€” @Ø Ö ÂÂ"ÀÚÖ#` ,Â#  ,â#  Ô2` Ø @Ø& ,€¤ ¿ÿÏžà€Žà€M€§ € €Žà € Â'@Ð €ö D¦awö €Žà¿ÿø– 8 8€ @ €€ŽàÚ <‚ 0Â#@Ø 8 4Â# Ú 8 4Ú @Ø <Ö& 8Ø& 4Ö& <€Žà€,0€@Ð ˜Ð Ò Ô @–¿ä€¢?ÿ¿ÿô¿ä@À&À€ `>¿ÿÖD@€ `¿ÿÏ¿ÿϦb.@Ð ¿ÿP¢ (@Ð 0€ @Ð ô¿ä¿ÿzö @Ð ¿ÿ³ö Çà‘èÿñ``"+@V\|gÜ€z’ª³ÃÉßtòŒ,7¨4GPZport.cbackend_cleanupget_event__moddi3apr_pool_cleanup_runapr_pool_cleanup_nullapr_pollset_pollapr_pollset_removeapr_thread_mutex_unlockapr_thread_mutex_create__divdi3port_dissociatecloseapr_thread_mutex_lockapr_pollset_createapr_pollset_destroyport_createapr_pool_cleanup_registerapr_pallocapr_pollset_add___errnoport_getnport_associated|¨ Üèø `ü  `  8 `” `˜ œ 4„” ¼ü ´È  € œ(p¬, DXp  ¬À as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lØD Ôi! @° , ð? kqueue.o/ 1215611180 0 0 100644 460 ` ELFÜ4(.shstrtab.text.symtab.strtab.commentÿñkqueue.cas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64* ^`0 !š?sha2.o/ 1215611187 0 0 100644 9596 ` ELF#è4( .shstrtab.rodata.data.text.symtab.strtab.rela.data.rela.text.comment0123456789abcdefË»]ÁžØbš)*6|Õ‘YZ0pÝ/ìØ÷Y9g3&gÿÀ 1Ž´J‡hXÛ . dù§GµH¾úO¤BŠ/˜×(®"q7D‘#ïe͵ÀûÏìM;/éµÛ¥‰Û¼9VÂ[óHµ8Yññ¶Ð’?‚¤¯O›«^ÕÚmت˜£Bƒ[Epo¾$1…¾N䲌U }ÃÕÿ´âr¾]tò{‰o€Þ±þ;–±›Ü§%Ç5Á›ñtÏi&”ä›iÁžñJÒï¾G†8O%ãÁÆ‹ŒÕµ$ ¡Ìw¬œe-é,oY+uJt„ªn¦äƒ\°©Ü½AûÔvùˆÚƒSµ˜>QRîfß«¨1Æm-´2°'Șû!?¿YǾïäÆà ó=¨ÂÕ§‘G“ §%ÊcQà‚o))g np'· …FÒ/ü.!8\&É&M,müZÄ*íS8 •³ße sT‹¯cÞvj »Îê&aœÑ†¸Ç!ÀÂêÚ}ÖÍàëõ}OînÑxðgªroº c}ŢȘ¦?˜¾ù ®q 5G(Ûwõ#}„2Ê«{@Ç$“<ž¾ ɾ¼CgÄœ LLÅÔ¾Ë>B¶Y)œüe~*_Ëo«:ÖúìlDŒJGXj ægó¼É»g®…„ʧ;lƒÙ«ûA½k[àÍ~!yBŠ/˜q7D‘µÀûÏéµÛ¥9VÂ[Yññ’?‚¤«^ÕØª˜ƒ[$1…¾U }Ãr¾]t€Þ±þ›Ü§Á›ñtä›iÁï¾G†ÁÆ$ ¡Ì-é,oJt„ª\°©ÜvùˆÚ˜>QR¨1Æm°'È¿YÇÆà óÕ§‘GÊcQ))g'· ….!8M,müS8 e sTvj »ÂÉ.’r,…¢¿è¡¨fKÂK‹pÇlQ£Ñ’èÖ™$ô5…j p¤Á7l'HwL4°¼µ9 ³NتJ[œÊOh.oót‚îx¥co„ÈxŒÇ¾ÿú¤Plë¾ù£÷Æqxòj æg»g®… ²@´&€@’ (€¦ ?€€¦ ’@Ø šƒb˜C ´¿ÀØ> €¦ ?¿ÿ÷²`@€¦ €’€  ( ’`@”!Ì¿ÿÌØ @”Ô ™. š‚À ˜B Ø> Çàèã¿€¦`€S€¦ "€XÀ&@Ð` —* ƒ2`šÀ˜‹`?"€˜ š˜ ‚?€€£ 8€;Â+`(€£ ?(€1@  `(@’˜ š Ø>`XØ>`(Ø>`0Ø>`8Ø>`@Ø>`HØ>`P€ Ð` š Ø>`(‚?€Ø>`XÂ.`(Ø>`0Ø>`8Ø>`@Ø>`HØ>`P `(Ð>``’@Â@Â&Ú`Ú& Â`Â& Ú` Ú& Â`Â& Ú`Ú& Â`Â& Ú`€Ú& ” @”"€ ’ @ (¿ÿÍ `(@ ” 8’ ”"€ @ (¿ÿÝÐ`  ’`@”!ù¿ÿ«€¦ À&@Çàèã¿p °€¤ €²¿Ð€¦ €’@” Ø@Ö`ƒ3 Ú@ Ú.Â`˜ ° Ú Ú.° ”‚¿ÿ¿ÿô²`€ À.€ À$ ’`@”"9¿ÿ… Çàèã¿( ¿ˆ@’@”@’Çà‘è㿈–`’ ” €‚€¦ € Pô`Øàðà8ààäàèà ìà(øà0Ø8`ô8@à8`ä8`è8` ì8`(ø8`0ð8`8@Â'¿ì˜ š ¿ìØ8`@Ø8`HÇàèã¾ÈÔØ ð' Dò' H‚ Pð ö DÔ?¿èØ?¿àð?¿ØÀ'¿À'¿”À'¿ˆÀ'¿ŒÀ'¿€À'¿„À'¿xÀ'¿|À'¿pÀ'¿tÀ'¿hÀ'¿lÀ'¿`À'¿dÀ'¿XÀ'¿\À'¿PÀ'¿TÀ'¿HÀ'¿LÀ'¿@À'¿DÂ'¿œôàô?¿Ðú DÖ DÚ Dò Dø` Ôà(Ø`0ð`8ø?¿ÈÔ?¿ÀØ?¿¸ð?¿°À'¿˜ô¿Ìø¿È»7 ·. Ô¿È¶À¹. ƒ2 ö'¿˜¬·6 µ* »3 ¹3 ƒ* ®€¨³* ²@»2  ƒ+ Ô¿ÈØ¿Àª@ò'¿”𿸠€ º À Ø¿¸´¶@°+ ²+@ Ô¿°¶À¶†À Ø?¿°´€´F€ º@Ö¿˜¸Ÿ*ආÀ˜ ´F€˜øð¿À¶†Àð?¿¸´F€ò HØ@ø¿ì¿è³/ »0`¤@ð¿È–†À ”F€ ð?¿À¹7 ƒ(` ô¿ìò¿è·6 ø¿è³.`¿ìò'¿<µ7 »(`¹0`ò¿èƒ.`ð¿Ð²†@ °F ð?¿Èò¿<¦@¢€ø¿Øð¿à¶@ò¿è´»6`ð¿èø¿ìƒ/ ´€¶Àô?¿0’@ô¿Øø¿à°²@¸€ºÀø?¿(ø¿0ô?¿Ð´¶@ð¿(º@ ¸¶‡@´G–‚Àø¿è”B€ð¿àø?¿àÔ?¿èú¿˜Ô H¿œº`‚@” ð?¿Øú'¿˜Ø8@€§`¿ÿ{Ô' H– Ö'¿˜Ø¿˜º º`® »/`⿜à@‚ àà?¿ ƒ(`濜äÀ迤ä?¿¨ê¿ ³4 ø¿¤ú¿ÌŸ,` ±5 Ô¿¬µ-`©-`§7 ¿Èп̞À·/`Ö¿¨ò¿ »0`°«2 ¹* ¥* £* ô¿¤¶À¡2à‘2àƒ0`Þ'¿x­*à“.` •6`ú¿È¸—6 ³. ð'¿pž ¿̘ö'¿hø'¿`±/`µ/`·0`»0`¹0` ƒ+ °š¸ð'¿l迨’@ ”€ð¿¬ø'¿X¤€¢@´€³6 ø¿¬—- æ¿ ·7 ú¿Èп̖Àä'¿ˆâ'¿€Ò'¿|Ô'¿tô'¿d±- Ö'¿Œ°Ô¿xà¿pð'¿„™4àƒ* °€²Àµ7` º€¹5 ´€° ²@ è¿`ä¿hô'¿\ð?¿ ð¿X¶ÀØ¿ÀпȶÀ࿸´€² @ ž à’,@ Ÿ+à꿜´€ª@° ⿘Ô@,ž `迀࿰俈¶†À˜€šÀä¿ ´F€–‚À”B€²@ ¶†À°´F€ð¿¸š@ð?¿°–‚À ˜Ÿ+àò¿œ”B€ 濘²@)Ø@ƒ,ਠšƒ@ ¨ø˜C ¶†À´F€ø¿Àø?¿¸ú¿ì¿è³/`п쒻0`¹2 ƒ(`–†À ²@¸”F€ ò'¿Pø'¿H·2 ¨»* ° ƒ*`³*`µ2`¹2 пВ‚@ à¿ÈB ´€¸à?¿ÀÐ?¿È²@»6 ƒ- à¿Øä¿àò'¿Tº@ð¿è¶@ø'¿@ú'¿Dø¿àô'¿L¶À²@´à?¿Ð´€à¿Pä¿H°è¿@º@¶Àº@¸¶‡@´€¸´Gø¿èð¿àø?¿à–‚Àú¿œ”B€º@ð?¿ØÔ?¿èî'¿˜€¥àO¿ÿØ?@è Dø 8РDôè¿è¶†À´F€ð è¿à²†@°FØ è¿Øšƒ@˜CÔ è¿Ð–‚À”B€Ð è¿È’‚@Bä Dà (è¿À¢„@ Dä 0迸¦„À¤D€è¿°º‡@ê D¸Gø=`8ô=@ð=`Ø=`Ô=`Ð=` à=`(ä=`0Çàèã¿€¦ €Š€ š@ € ‚@ €‹@€NØ @—+ ƒ3`šÀš‹`€'€¦ ‚ €  @ €¦€ €I ” P@’ƒ, Ø @šƒ@” ˜C –Ø> @ @€ @ *€ Ø H€ @ 2€ ²@ D€ @ :€²@Ø Hšƒ`˜C Ø> H²@´&€@’ P€¦ €€¦ ’@Ø @šƒd˜C Ø> @ @´¿€€ `¿ÿó²`€€ `2€Ø H D€ cÿ¿ÿ퀦 Ø Hšƒ`˜C €¦ ¿ÿéØ> H€¦ €:”€$’ ’`@”#¿ÿ°Ø @” P@’ƒ. Ø @šƒ@” ˜C –Ø> @ @€ @ *€ Ø H€ @ €Â D€ @ €Ø Hšƒ`˜C €Ø> H@ Pƒ. Ø @šƒ@” ˜C –Ø> @ @€ @ *¿ÿñØ H€ @ €Â D€ @ *¿ÿêØ HÇàèã¿Ð @—* ƒ2`šÀš‹`˜@” – € š` ” p‚?€² P”"€  P’ €£`p€Â+ P ” €”"€ €£`€% P@’’ ” ~@Ð @Ø HØ> ÀÐ> È@èÔ> P‚?€Ø HÔ> ¸Â. PÔ> XÔ> `Ô> hÔ> pÔ> xÔ> €Ô> ˆÔ> Ô> ˜Ô>  Ô> ¨Ô> °Ø> ÀÐ> È@“î P@¿ÿÜã¿€¦` ’`€”#f€¦ €@Ø@Ø>Ô`Ô> Ø`Ø> Ô`Ô> Ø` Ø> Ô`(Ô> (Ø`0Ø> 0Ô`8€Ô> 8@¿ÿ逦 À&@Çàèã¿P °€¤ €²¿°€¦ €’@” ?Ø@Ö`ƒ3 Ú@ Ú.Â`˜ ° Ú Ú.° ”‚¿ÿ¿ÿô²`€ À.€ À$ ’`@”#„¿ÿ… Çàèã¾À ¿ @’@”@’Çà‘è㿈–`’ ” €‚€¦ € Pô`Øàðà8ààäàèà ìà(øà0Ø8`ô8@à8`ä8`è8` ì8`(ø8`0ð8`8@Â'¿ì˜ š ¿ìØ8`@Ø8`HÇàèÀ`ã¿€¦` ’`€”#±€¦ €@Ø@Ø>Ô`Ô> Ø`Ø> Ô`Ô> Ø` Ø> Ô`(€Ô> (@¿ÿ퀦 À&@Çàèã¿` °€¤ €²¿À€¦ €’@” /Ø@Ö`ƒ3 Ú@ Ú.Â`˜ ° Ú Ú.° ”‚¿ÿ¿ÿô²`€ À.€ À$ ’`@”#Ï¿ÿ… Çàèã¾À ¿ @’@”@’Çà‘èÿñ@7X€<Ø@V ptL†Œ—ž„°ˆ¤ÀŒäÖp(éð84,4˜|$¤4ìˆEN”¤^lˆo”ô”¸4¥À8¸øsha2.csha2_hex_digitsK256sha384_initial_hash_valueK512sha512_initial_hash_valuesha256_initial_hash_valueapr__SHA512_Transformapr__SHA256_Initmemsetapr__SHA384_Finalapr__SHA384_Endapr__SHA256_Transformapr__SHA256_Updatememcpyapr__SHA512_Dataapr__SHA384_Dataapr__SHA256_Finalapr__SHA256_Endapr__SHA512_Init__assertapr__SHA512_Endapr__SHA384_Initapr__SHA512_Finalapr__SHA384_Updateapr__SHA256_Dataapr__SHA512_Updateapr__SHA512_Last     ” X l ” 8ÜX p\ 8` pdt¤ ˆüd¼ Ü ì pð ˆô pø8@ L \  ˆ” p˜ ˆœ p À ÐÜð Øô Ø ØP à Xð X ° X ¼ Xä ¨ Œ ¤  p ¨ p$< h | ” è ð  à p à p,x¸À Ì Ü  à p à p @P\p t  Ð ô ø   p  p0l¬´ À Ð   p  p4DPas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64N ˆ¤¨` 'É/Ô  :àÈ E#¨? apr_random.o/ 1215611193 0 0 100644 3700 ` ELF 4( .shstrtab.text.rodata.bss.symtab.strtab.rela.text.commentã¿‚ Â& ô& ö& ø& $ò&@’!€Â € `Ð& € ˜ š ‚ À `À `À#@˜  € @ ¿ÿùš` ‚$Â&  À& À& à` ’@#ÿ’@‘2 ¢ Ð& Ú $Ø â&  à`  ’@”@’ Ú $Ø Â à`  Ð& (’@”@’  $Ð& ,Ò` @ D š(@ Øà‚+@Â& DØ& H‚!@ð"àÐ& 0â& 8Â& <À& 4À& @Çàèã¿Ú  Â@ŸÀ@ô' LÚ Â $Ø` Ô` ”  Â`ŸÀ@’Ú  Â`’ LŸÀ@” Ú  Â`ŸÀ@’Çàèã¿à`€¤ €)0€' â (’ÿÿØ”Ò (€¢@”€ÿÿÑ ‚ÿÂ$ À$ 4à H€¤ €  D‚@€ @¿ÿéä¿ÿèâ ,Çàèã¿’ L@ °@¤@¢@˜’”@–Çàè㿨 €¥:€$  š@š@§+`š`ä  €£@€»¢€Ú& Ò`š`Â`€ @ *€~’@ Â@à€Â*@’`Ò$` €¢@"€‰ƒ2`€¢@€k¨ €¥*¿ÿâ  Ø`Ú €£ €¬0 D‚@  € @ "€æ ,æ (Ú Â@ŸÀ@ Ú Â $Ø` Ô` ”  Ø`ŸÃ’ € `€¢ Ö ¤   ˜ÀÚ ÒÀÂ` ŸÀ@Ô Ö ‚ÀÀ `¢`‚ÿÚ ™,€€£@€   €¤`"¿ÿï˜À €ˆ@ ¿ÿë˜À $Ú Ò`  Â`ŸÀ@’@Ú –`Ø D€£ € Ö&  8€¢À€ ƒ3  ‚›0`€‹`Â& D€U˜ƒ3 €ˆ`€] @Ú <‚@ €¢À€W‚Â& DÚ $ Ø` ô` ò ,ð (@•ë ’`@” ä¿ÿ“¨ ’`@РҀ@Ô`Ò`‚@ ‚`Â$`à$€Â@Â*@’`Ò$` €¢@¿ÿ|ƒ2`€ `€  Ø ÂŸÀ@ Ú ‚Ò@Ô` ’@ Â`ŸÀ@”€ Ú Ò@’@Â`ŸÀ@ Ø Ú Ò`  ƒ2`€ @8¿ÿé“2`Ò$`¿ÿY ¿ÿHÀ&  $Ú Ø` Ô` ” Ð ,@Ò (Ö Ö& @¿ÿ£Ø DÇàèã¿¢ €¤@€@€Ú 4‚&€@€£@€   Â Ò 0’@’"@ @” 4‚ @¢@š€¤@€+Â& 4€£`2¿ÿìØ $Ú $ Â@ŸÀ@à 0Ú $ Ø` Ô` ”€  Â`ŸÀ@Ò (Ú $ Â`ŸÀ@Ò (Ú $Â@ŸÀ@ Ú $ Ô` Â`ŸÀ@Ò (Ú $ Â`ŸÀ@’Ø $Ú ¿ÿÆÚ& 4Çàèã¿Â Dƒ0`€ˆ`°b<’€”ÿÿ±° Çàèã¿Â D€ `°b<’€”ÿÿ¤° ÇàèØ D‚+Ú Ú" @ÃàÂ" D Dƒ0`€ˆ`€b< Ãà D€ `€b< Ãàp->bytes < g->rehash_sizerandom/unix/apr_random.cÿñ`t! 29à ShXkl4…À`œ ¯¶¼48Ô¼$ìõ`&,Ô”apr_random.cmix_pidall_randomapr_random_bytesmemsetapr_random_insecure_readyapr_random_standard_newapr_random_insecure_bytesapr_random_add_entropyapr_random_barriermemcpy.udivapr_random_secure_bytesapr_random_secure_ready__assertapr_random_initapr_crypto_sha256_newapr_palloc.umulapr_random_after_fork „ÀÌðü$ , @ Ø Ü p€Œ˜°D äì ð ô ø das: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64B xx9´´€& 4B. xP 9 È? sha2_glue.o/ 1215611196 0 0 100644 1092 ` ELF(4(.shstrtab.text.symtab.strtab.rela.text.commentÀ`Ð À`Ð ‚ Ò`À`ã¿’ @ °@’ h‚`š`Â&Ú& ‚`š Ð& Â& Ú& Çàèÿñ &2CVh<\~sha2_glue.csha256_finishsha256_addsha256_initapr__SHA256_Initapr__SHA256_Updateapr__SHA256_Finalapr_crypto_sha256_newapr_palloc    , 0 D X ` d h l x | as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l˜°´‰!@¨ ,è? shm.o/ 1215611202 0 0 100644 3420 ` ELF @4(.shstrtab.text.symtab.strtab.rela.text.commentã¿Â ’ € `€ ” Ò @Ð €¢?ÿ€° 0€@Ð €¢?ÿ€ @Ð €¢?ÿ€òð @è@ðÇàèã¿€¦ €Tò' H’ @ H²Â" ö"’@Ð&` HÂ&`¿|’” F–/ÿ@˜€¢ €^@’ €¢?ÿ€4Ò`@”'€‚’ €.Â&`’ @” €¢?ÿ€(Ð&`Ð&`´¿€Ð`’ @”€¢?ÿ€”’¿t@¿x¿xÚ¿tÂ'¿€Ú'¿„”Ð`@’ €¢?ÿ€‚ Â'¿pп|’ H@”¿p€¢ €-@п|€¢ €(€@€"Ð’ @ H’`²ö"Â" Ò" À"  ” –!˜?ÿ@š €¢?ÿ¿ÿëÐ&`š Â`Â"Ú&`Ð@” –à@’ò& Çà‘è㿈’–/ÿ˜” @¿ì¢°’ €¦ €!@€¢?ÿ€ @Ð¿ì’ ”!€@” €¢ € ’ @€¢?ÿ’€@€°@ð@’Çàè’” À`Ðã¿Â š€ `€ ° @Ð`€¢?ÿ€° @ðÇàè㿈€¦`€A ’ @ ¿ì’” –/ÿ@˜€¢ €4‚ Â'¿èÐ¿ì’ @”¿è€¢ €,@п쀢 €'’@Ð$ ô$@’ €¢?ÿ€’ @”!€€¢?ÿ€Ð$ ’ @” €¢?ÿ€Ð$  Ð$ ÐÂ$ ” –à@’à&€ @ÐÇà‘èã¿ÿÿª °’” @ÐÇàèÃàÐ ÃàÐ ÃàÐDÃà!‡DÃà!‡ÿñ4@€,Ð ;Jˆ0Yi~”À¥¸º¿ÍÔâòÈ `¸ 6BHNhw‚‹tšÜ ©®€à½shm.cshm_cleanup_attachshm_cleanup_ownerapr_os_shm_getapr_file_writeapr_shm_detachapr_file_removeapr_pool_cleanup_runapr_pool_cleanup_nullapr_shm_size_getapr_shm_baseaddr_getmmapapr_file_openshmctlapr_file_readapr_uid_currentapr_shm_pool_getmunmapshmgetapr_shm_removeapr_pool_cleanup_killapr_pstrdupshmatshmdtapr_pool_cleanup_registerapr_file_closeapr_palloc___errnoapr_shm_attachapr_os_shm_putftokapr_shm_createapr_shm_destroy4Hdl”°Ôì @Xx˜¬¼ Ä ÈÜ 4 8 @ D Ht” ¨¸Ðèø   $ ( L`ˆ¤ÄØì ,H 4L X 4\ `tœ 4¤ 4¨as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lèT0„Í! T¬ , ? waitio.o/ 1215611206 0 0 100644 892 ` ELFd4(.shstrtab.text.symtab.strtab.rela.text.comment㿈€¦ €*” Ð @–#è  ð € ‚@?ÿ‚`‚`ð'¿èÂ7¿ì²¿è’ ”@€¢?ÿ€ ´@€ `¿ÿö’ €¦ €° 0€D€¢ €°aw€¦ € ° @€ðÐ`@–#è  ¿ÿÙð`Çàèÿñ Ð%.3waitio.capr_wait_for_io_or_timeout__divdi3poll___errnoH\ ´as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lÐ<p¬<!è< ,$?procsup.o/ 1215611211 0 0 100644 1588 ` ELFô4(.shstrtab.rodata.text.symtab.strtab.rela.text.comment//dev/nullrwforkunable to fork new process ã¿@ €¢?ÿ€€¦ € @€¢?ÿ2€1€¦ €1’`” @ €¢ € !”  @’ €¢ €@€ð@€¢ €€¢?ÿ¿ÿÝ@  –à’ @” @  ’ @” €¢ €° 0¿ÿã@ Çàèÿñ .5<CINprocsup.c__iobfreopenexitapr_proc_detachsetsidfwriteperrorchdirfork___errno    $4 D H L P T X\ h l p t x| ˆ Œ œ ´ (¸ ¼ (À 0Ä È 0Ì Ô Üä è ìð as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= xLÄØà!¸W)¤ 4´?thread.o/ 1215611215 0 0 100644 3452 ` ELF <4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentÀ` ã¿’ @Ð&ò"@  °” €¦ €–à@ÒÇàèã¿€ ’@  @“*`Çà‘è㿈 @’¿ì¿ìD€ `€°as°atÇàèã¿ @’Çà‘èã¿ @’Çà‘èã¿Â ŸÀ@Ò Çà‘èã¿’ @’ @”  ¢à&’ €¤ €&° @À*À* À* À* Ð$ Ú@Â`’” – € `€ `ô#` €¦`ö#`€ø#@@Ð@°’€¢ € ” Â@–@Ð`€°¿ÿò  ÇàèÀ`À`ã¿Ð@ò& @ 㿈Â`Ð@@’¿ì€¢ €Â`Â&Çà‘èã¿Â @Ð@Çà‘èÃàÀ`Ô€À`ÖÀÂ`Â"Ãà ã¿ €¦ €°b"Â’ € `€ò `€ ° @’ @” ‚Ð$¿ÿöô"Çàèã¿@’ ‚àäàØ`Ô`à`Ð&Ø: ä:Ô: à: Çà‘è À`ÃàÐÿñ ä* 6ÌS´p†œ®¿0ÏÔá`õp #T9XJd dr@„d–䪀¼ôÌ8Ü„0öÔ (;Hbmz–Hª·ôDÌâï .thread.cdummy_workerthreadattr_cleanuponce_init.0apr_threadattr_guardsize_setapr_threadattr_stacksize_setpthread_detachmemsetapr_pool_cleanup_nullpthread_attr_initapr_pool_destroyapr_thread_joinapr_thread_createapr_thread_data_getapr_thread_data_setpthread_attr_setguardsizeapr_threadattr_createapr_thread_yieldapr_threadattr_detach_setpthread_equalapr_thread_detachapr_os_thread_putapr_os_thread_equalapr_os_thread_getapr_thread_exitapr_thread_onceapr_threadattr_detach_getapr_os_thread_currentpthread_attr_getdetachstateapr_pool_create_expthread_onceapr_pool_cleanup_registerapr_pallocpthread_selfpthread_attr_setdetachstateapr_thread_pool_getpthread_exitapr_thread_once_initapr_pool_userdata_getpthread_joinpthread_attr_setstacksizeapr_pool_userdata_setpthread_createpthread_attr_destroy. . #( 8 < D P T"t%Œ¼+Ô# <#Œ ” ä¨ ä´-Ô$ Ø$ ä è ü '*H `) d) p, t, È#Ô ü#    8! <! as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= tPÈ èð!ØC) à 4 ü?signals.o/ 1215611220 0 0 100644 4164 ` ELFØ4( .shstrtab.text.rodata.bss.symtab.strtab.rela.text.commentã¿Ð@’€¢?ÿ€° @ðÇàèã¿Pò'¿Ô@¿ØÀ'¿Ð’¿Ð@”¿°€¢ €°?ÿð¿´Çàè㿘à‚`š`Â"àÚ# ‚`š`Â# Ú# ‚`š`Â# Ú# ‚`š`Â# Ú# ‚`š`Â# Ú# $‚`š`Â# (Ú# ,‚`š`Â# 0Ú# 4‚`š`Â# 8Ú# <‚`š`Â# @Ú# D‚`š`Â# HÚ# L‚`š`Â# PÚ# T‚`š`Â# XÚ# \‚`š`Â# `Ú# d‚`š`Â# hÚ# l‚`š`Â# pÚ# t‚`š`Â# xÚ# |¤   '£, €”  € `€’à@Ð$€€¤ 0¿ÿõ£, Çà耢 0‚`€‘* ‚`Â@Ãàã¿’ @’ @’ @’ @’ @’ @’ @’ @’ @@’ @“è ã¿x ¿à@’ @’ @’ @@’ ÿÿÎ’¿Ü@ŸÆÐ¿Ü€¢ ¿ÿû’¿ÜÇà‘è ã¿€ ¿à@ÿÿ¾’ @” Çà‘èã¿€ ¿à@’@’ @” Çà‘èã¿€ ¿à@’@’ @” Çà‘èSignal 0HangupInterruptQuitIllegal instructionTrace/BPT trapAbortEmulator trapArithmetic exceptionKilledBus errorSegmentation faultBad system callBroken pipeAlarm clockTerminatedUser defined signal 1User defined signal 2Child status changePower-fail restartWindow changedurgent socket conditionsocket I/O possibleStopped (signal)StoppedContinuedStopped (tty input)Stopped (tty output)virtual timer expiredprofiling timer expiredexceeded cpu limitexceeded file size limitsignal #%dunknown signal (number)ÿñ Älˆ/<lØLX0f”4w|ôpŽÈ4¡±0<¼Ì×D(òüd0'signals.csignal_descriptionremove_sync_sigsapr_psprintfapr_signal_initsigemptysetapr_proc_killapr_signal_blockkillapr_signal_threadapr_signal_unblockpthread_sigmaskapr_signal__posix_sigwaitsigfillsetapr_signal_description_getsigdelsetsigaddset___errnoapr_setup_signal_threadsigaction 8 Lp t x | € „ ˆ  ” (˜ œ (¨ 0¬ H° 0´ HÀ XÄ `È XÌ `Ø pÜ ˆà pä ˆð ô  ø ü   ¸  È ¸ È  Ø$ è( Ø, è8 ø< @ øD P (T @X (\ @h Xl hp Xt h€ €„ ˜ˆ €Œ ˜˜ °œ ¸  °¤ ¸° È´ ภȼ àÈ øÌ Ð øÔ à (ä @è (ì @ `  `$D pL pX \ t€Œ˜¤°¼ÈÔàèü ,@l„œ ¨¸Ð Üìas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64B xüxˆÄ&1. ÄÔ 9˜? proc.o/ 1215611227 0 0 100644 7012 ` ELF$4(.shstrtab.text.rodata.symtab.strtab.rela.text.commentã¿’ D@’ @” DÐ&š?ÿ€¢ €° ‚ Ú" <ò"Â" Ú" @° Çàèã¿€¦`€€¦ €- €¦à€S  ’ @Ô€¢ €L€¦à"€ Ð €E€¦à€¦à"€Ð ’ ” @Ð Ð ’ @” €;  ’ @Ô€¢ €4€¦`"€&Ð €€¦`€¦`€’ ¿ÿÕ€¦ ’ @Ô€¢ €%€¦ "€ Ð €€¦ €¦ "¿ÿË€¦à’ ” @Ð Ð ’ @” ¿ÿÁ€¦à€’ ” @Ð Ð ’ @” ¿ÿ³€¦ ¿ÿì’ ¿ÿïÐ ¿ÿÁ’  Çà‘èã¿Â € `€˜  ’ € `€ € š@ €  ‚`?ÿ€‹@€’€ š@ €  ‚`?ÿ€‹@€’Ô@Ð € ˜Ô@Ð ¿ÿñ˜@Ô¿ÿæ˜Çà‘è ã¿Â € `€˜  ’ € `€ € š@ €  ‚`?ÿ€‹@€’€ š@ €  ‚`?ÿ€‹@€’Ô@Ð € ˜Ô@Ð ¿ÿñ˜@Ô¿ÿæ˜Çà‘è ã¿Â € `€˜  ’ € `€ € š@ €  ‚`?ÿ€‹@€’€ š@ €  ‚`?ÿ€‹@€’Ô@Ð € ˜Ô@Ð ¿ÿñ˜@Ô¿ÿæ˜Çà‘è ã¿Ð@’€ ‚@?ÿÐ& °` ÇàèÒ" Ãà Ò" $Ãà ã¿@‚’ €€ `€ Â&À& À& À& D€ °arÀ&À& À& @À& D€°aq@ðÇàèÒ" 4Ãà Ò" 8Ãà Ãà 㿈” <’¿ì@Ö€¢ "€Â @‚?ÿ€Â& <€ ÿ€ ¿ìÂ& @Çà‘èã¿’ @@Ô€¢ €‚?ÿÂ& @Çà‘èã¿x€¦à€µÀ'¿Ü Â& Ú Ú& Â Ú 8€£`€Â& Ð €¢ €Z ‚ÿ€ `€kÂN@€ `/€g@€¢ €QÐ&€¢ €RÐ €¢ €éÐ €¢ €­Ð €¢ €³@ € `€¹Â € `€Á € `€É @’ Ð €¢ €Â @€ ÿ"€Â <@€¢ €H <€ ÿ"€Ò (@€¢ €RÒ (€¢`€¾Ò 0€¢`€ÀÒ ,€¢`€* €¢ "€ÉÖ Â 4€ `€»@?ÿ@’ €¢?ÿ2¿ÿ¦Â @€Eð€¢ €JÐ €¢ €BÐ €¢ € €8° @’ €¢?ÿ¿ÿ˜0¿ÿê@° 0€.@ €¢ "¿ÿÕ @¿ÿÑÐ@Ð @€¢ "¿ÿ¸Â < 4€ `¿ÿÏ@‚Ú 4Ò@ŸÃ@” 0¿ÿÄ@Ð <€¢ "¿ÿ®Ò ( 4€ `¿ÿ¼@‚Ú 4Ò@ŸÃ@” 0¿ÿ±¿ÿM¶¿Ü@¿ÿ¿Ð @¿ÿ·Ð @€¢?ÿ2¿ÿ @ 4€ `¿ÿŸ@‚Ú 4Ò@ŸÃ@” 0¿ÿ”@” @Ò Ð €¢ ¿ÿQ@” @Ò @ € `"¿ÿL @Ð Â Ð`@’ @Ð Â € `"¿ÿD @Ð Â Ð`@’ @Ð Â € `"¿ÿ< @Ð Â Ð`@’ @Ð ¿ÿ2 @” @Ò ¿ÿÐ @ €¢ "¿ÿBÒ 00¿ÿt@ €¢ "¿ÿ@Ò ,0¿ÿn@‚Ú 4Ò@ŸÃ@” 0¿ÿ>€  ‚`?ÿšà€  ˜`?ÿ€@ €=€¢à+š`䀂`Ú'¿àÂ'¿ä€¤   €¢ ° Ѐ@¢`±,` Â€€ `¿ÿù  €¤`"€Â $€¤`€J’ä'¿è $€ `€6À'¿ì `”€ `€,’¿à`’¿à@ 4€ `¿ÿ ”’`@@ ‚Ú 4Ò@ŸÃ@”0¿þû€ €¢à€Â $€ `€?’@¿ÿæÂ 4 $€ `€’@ ’”@¿ÿÙ 4@ ¿ÿË € `€’¿ÿÌ@ ’¿ÿÇ@€¦€ `¤€¢ ° ¨ @Ѐ Ò€@”¤€¢`è,€±,`€€ `¿ÿó¤ À,¿ÿ¿ÿŸæ'¿è@ ¿ÿÂ’Çàèã¿€€¦`€8  €¦ "€´¿è€¦à2€  D’¿ä”@ж’ € €¦à@€ `¿ÿö’¿ä€¦à€Ú¿ä‚‹`ÿ€!ö&€ `€?‚c€‹@€€‹`€€‚ Â&€‚ `Â&@D€°auD€¦à€°av@€ð¿ÿò‚ € °b.¿ÿʲ¿ìƒ;`š ‚`ÿ¿ÿêÚ&€Çàè‚?ÿÂ"À`€¢`€ š€¢`€ D€¢`€ a‡€¢`"€Ô#`0€ ¿ÿþÔ" ,€¢`"¿ÿûÔ" ( Ãàsetting of group failedsetting of user failedchange of working directory failedsetting of resource limits failed/bin/sh-cexec of '%s' failedÿñP % @GOàp]jq} Ä ‹PpŸ©hÄÉßÀ ù \ -9 èXPpLfmsˆ“¼,ªÄÉßíùÿ ` ;F Ð^gÈ €èÜ—Ô ¯¶½×ßåPù ($proc.capr_procattr_child_errfn_setapr_procattr_child_err_setstrlengeteuidapr_proc_forkapr_psprintfmemsetapr_uid_getapr_proc_waitapr_procattr_io_setsetrlimitapr_procattr_addrspace_setdup2apr_unix_file_cleanupapr_procattr_child_in_setapr_proc_detachmemcpyapr_procattr_error_check_setapr_gid_getapr_procattr_limit_setapr_procattr_user_setsetuidchdirapr_file_pipe_createapr_signalapr_procattr_group_setapr_pool_cleanup_for_execforkapr_pool_cleanup_killapr_file_dup2apr_pstrdup_exitapr_file_pool_getapr_file_closeapr_procattr_child_out_setapr_pallocapr_proc_wait_all_procs___errnoapr_procattr_cmdtype_setapr_proc_createsetgidapr_procattr_detach_setexecveexecvpapr_file_pipe_timeout_setwaitpidexecvapr_procattr_createapr_random_after_forkapr_procattr_dir_setaccess' |´0Ä0ÜP0`0|0Œ0$!8!HÄ!Ø!èd!x!ˆ¨"ä(4<)€ ÈPœØ$„#Œ6 )ä6ü%),,P)\ p xœ)¨ ¼ Ì%Ü%ì) 00 08$@ D H `$h l p x% ¨%À%ÐØ%ð%  % $  $ (  8 P h) t X ˆ X ° € ´ ˆ ¸ € À ˆ ä 4 € H € P2 d l p  x) ¼/ Ü ð.  ( <' d x ¬ ô1 ) ˆ) Ø Ü as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= t @ ¸¤\p!Ì+)øì 4ä?threadpriv.o/ 1215611231 0 0 100644 1516 ` ELFÐ4(.shstrtab.text.symtab.strtab.rela.text.commentã¿@’ À* À* À* À* À* À* À* Ð&ô"@‘ê ã¿@Ð`Ð&Çà‘è ã¿’@Ð`Çà‘èã¿@Ð Çà‘èÀ`Ô€À`ÖÀÂ`Â"Ãà ã¿ €¦ €°b"Ú€£`€’ Â@Â#`€° @À*À* À* À* À* À* À* À* šÐ$¿ÿðô"Çàèÿñp+”B„YXs@¤´|¹̤áôÿ)@Cthreadpriv.capr_threadkey_private_deleteapr_threadkey_data_setapr_threadkey_data_getapr_threadkey_private_setapr_threadkey_private_createpthread_setspecificapr_os_threadkey_putpthread_key_deleteapr_os_threadkey_getpthread_key_createapr_pallocapr_pool_userdata_getpthread_getspecificapr_threadkey_private_getapr_pool_userdata_set 4 D`t „ ˆ ” ˜ ð as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l0œ ¼Y!x ,? time.o/ 1215611237 0 0 100644 3668 ` ELF è4( .shstrtab.text.rodata.bss.symtab.strtab.rela.text.commentã¿™>`»6`ƒ+ ·.`¶¦À´@´f€ š³6àƒ. ».ວ@¸@¸g³7`ƒ/ ·/`´@¶†À ´F€ ³6àƒ. ¸@».àø>Çà‘è 㿈’ @¿è¿蒑8`›0`ƒ* —*`–¢À ”@”b€Ÿ2àƒ* ›*àš£@ ˜À˜c Ÿ3`ƒ+ —+`–‚À ”À”B€Þ¿ì“2àƒ* ›*à˜@±;ಃ@°CÇàèã¿`Д –â@@’¶À Ðö'¿Ä’” @–â@Ò&¿Ä€§ €’¿È@à¿èÚ¿ÌØ¿ÐÖ¿ÔÔ¿ØÒ¿ÜпàÞ¿ä¿ÈÂ& Ú& Ø& Ö& Ô& Ò& Ð& Þ& €¤ € à& $Ú`€šn@’¿È¿ÿçà¿èÚ`Ú& (Çàèã¿’”–ÿÿĘ ö& (Çà‘è À`– ã¿’”– ÿÿ¶˜ Çà‘è ã¿Â`ì`ª©8`€¥ €®—5`ƒ- ›-`šƒ@˜À˜C“3`ƒ+ £+`¢„@ @—=  D—2à–…@ ” ”E ƒ, ›4`“,`@Ÿ2à¥* ¢„@ š€ D¢„@ ™:  D ” – d@’¦‚`¤B ›< ›3`¦„À ˜ ¤D€ •- ‚`Ø@ Ö`¢¤@ ˜ ƒ4àŸ, –À d¢„@ ˜?ÿ•< š  D ¢„@ ™; ?ÿç D –à\?ÿÿ¢„@ ”£ÿ D “4`‚š@šƒ@˜@˜CÐ` “3`ƒ+ —+`–‚À”@™: ”B€ “2àƒ* ›*àš£@ ˜@˜c Ð`“3`ƒ+ —+`–‚À”@™: ”B€ “2àƒ* ›*àš£@ ˜@˜c ƒ+ Ð`“3`—+`”@¢‚À™:  B€ €¤ €"°b$›4`ƒ, —,`–¢À”@”b€“2àƒ* ›*àš£@ ˜@˜c “3`ƒ+ —+`–‚À”@”B€Þ@›2àƒ* “*à’‚@@™;àB Ð=À€° ª€ÿ¿ÿr¨E?ÿÇàèã¿’@¬°’ €Â`(’‘8`›0`ƒ* ”@—*`š¢À ˜b€—3`ƒ+ £+`š¤@  À˜d —3`ƒ+ §+`š„À ¤À˜D€—3`ƒ+ «+`Ø€š£@¨À˜cØ=€Çàèã¿à@Д –â@@’äÒ$ Ð’” @–â@Ò$€Çà‘è ØÂ`Â#Ú`Ú# Â` Â# Ú`Ú# Â`Â# Ú`Ú# Â`Â# Ú` Ú# Â`$Â# Ãà ã¿Þ@ÂÀš™8`»0`ƒ+ ·+`¶¦À ´@´f€ ³6àƒ. ».ວ@¸@¸g³7`ƒ/ ·/`¶†À ´@´F€ òà»6àƒ. ›.àšƒ@˜@¹>`˜CØ>Çà‘è Ø@ÂÂ" Ú Ú"  Â" Ú Ú"  Â" Ú Ú"  Â" Ú Ú"  Â" $Ãà 㿈Д –â@@’Ò'¿ìД –â@@’Ò'¿è ’ ” – @˜¿èÇàèã¿X’ @¿è¿蠿ÀÂ'¿¼’@¿¼À'¿à@’@п¼‘ @Ñ `ÇàèÃà2Q=\z™¸Öõÿñ0&üÜ3´`=DMT8Lh4hy‚“Ø(£„T·hÌ$ÜTðýpŒ ؈p0<œœQZ`Tntime.cdayoffset.0server_gmt_offsetexplode_timeapr_sleepmktime__moddi3selectapr_os_imp_time_getapr_time_exp_get__divdi3apr_time_exp_gmtapr_time_exp_tzapr_os_exp_time_getapr_time_clock_hiresapr_time_exp_ltapr_unix_setup_timegettimeofdayapr_time_nowapr_os_imp_time_putapr_time_ansi_putlocaltime_rapr_time_exp_gmt_getgmtime_rapr_os_exp_time_putdifftimex0 L¤ ¨ ´Ä È   Ôô  ¨ P pÈ ä 4@ LX \ as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64B xpè0à& øw. p8 9 ¨? timestr.o/ 1215611241 0 0 100644 2660 ` ELF 4(.shstrtab.rodata.text.symtab.strtab.rela.text.commentSunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecã¿`”’@¿ÀÚ¿Ü‚`›+`Ø @š@Ø.š` @° Â.Ú `° Ú.‚ ,° Â.à¿Ð¤ ° ä.’ @°  0Ð.@’ °  0Ð.Ú¿Ô° ä.‚`›+`Ø @° š@Ø.š` @° Â.Ú `° Ú.à¿Ø 'l° ä.’#è@°  0Ð.’#è@@’ d°  0Ð.’ d@@’ °  0Ð.@’ °  0Ð.à¿Ì° ä.’ @°  0Ð.@’ °  0Ð.à¿È° ¢ :â.’ @°  0Ð.@’ °  0Ð.à¿Ä° â.’ @°  0Ð.@’ °  0Ð.° ä.° ‚ GÂ.° ‚ MÂ.° ‚ TÂ.À. Çà‘è ã¿`”’@¿ÀÚ¿Ü‚`›+`Ø @š@Ø.š` @° Â.Ú `° Ú.Ú¿Ô¤ ° ä.‚`›+`Ø @° š@Ø.š` @° Â.Ú `° Ú.à¿Ð° ä.’ @°  0Ð.@’ °  0Ð.à¿Ì° ä.’ @°  0Ð.@’ °  0Ð.à¿È° ¢ :â.’ @°  0Ð.@’ °  0Ð.à¿Ä° â.’ @°  0Ð.@’ °  0Ð.à¿Ø 'l° ä.’#è@°  0Ð.’#è@@’ d°  0Ð.’ d@@’ °  0Ð.@’ °  0Ð.À. Çà‘è ã¿h˜ š Ø?¿àØ?¿ÈØ?¿ÐØ?¿ØÖ Ô Ò Ð à $Â Ú Ø Þ Ö'¿ÔÔ'¿ØÒ'¿ÜÐ'¿àÂ'¿ÈÚ'¿ÌØ'¿ÐÞ'¿äà'¿è’”@–¿ÈÐ&@Çà‘è ÿñ L0+<EULe`„rwtimestr.capr_ctime.divapr_month_snamesapr_time_exp_gmtstrftimeapr_time_exp_ltapr_rfc822_dateapr_strftime.remapr_day_snames   l„   ¨ ð ( 0H l„ ¬Ä è X d h ¤ ¬ ð ,D l„ ¨À è  (@ Ðas: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.64= qLÀä¤à!„†) Ô 4à? userinfo.o/ 1215611246 0 0 100644 1172 ` ELFx4(.shstrtab.text.symtab.strtab.rela.text.comment㿈’”–(@˜¿ì€¢ €Â¿ì€ š`?ÿ@ Çà‘èã·h’¿Èÿÿî”·È‚’ €@Ò¿äÐ&‚ Çà‘èã¿@@Ð&Ð&@Çà‘è ã·h’¿ÈÿÿØ”·È€¢ €Â¿ÐÂ&Ú¿ÔÚ&@Çà‘èã·`’¿È”·È–(@˜·Ä‚’ € Ò·Ä€¢`€‚ @Ò@Ð&‚ Çà‘èÿñ <<8/ÈP@”4Lt \cv‰•userinfo.cgetpwnam_safeapr_uid_homepath_getapr_uid_name_getapr_uid_getapr_uid_currentgetuid__posix_getpwuid_r__posix_getpwnam_rapr_pstrdupgetgid \ x€ Ü  as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 l„ÐTœ!ðH ,8? groupinfo.o/ 1215611250 0 0 100644 912 ` ELFx4(.shstrtab.text.symtab.strtab.rela.text.comment?ÿ÷‚cxã€?ÿ÷ £Ü‚¿ð”£ð”@ ’¿à@˜€‚’ € Ò€€¢`€‚ @Ò@Ð&‚ Çà‘è?ÿ÷‚cxã€?ÿ÷ £Ü‚¿ð”£ð”@ ’¿à@˜€€¢ € Ô€€¢ €  Â& Çà‘èÿñ  hd,?Khgroupinfo.c__posix_getgrnam_rapr_gid_get__posix_getgrgid_rapr_pstrdupapr_gid_name_get,P”as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.645 lÌ8€¸\!$ ,8?lib/libapr-1.so000777 000000 000000 00000000000 11035140627 016241 2libapr-1.so.0.2.12ustar00rootroot000000 000000 lib/libapr-1.so.0000777 000000 000000 00000000000 11035140627 016377 2libapr-1.so.0.2.12ustar00rootroot000000 000000 lib/libapr-1.so.0.2.12000755 000000 000000 00000521114 11035140627 014301 0ustar00rootroot000000 000000 ELF4ì4 (è\TT‡… !"%&'(*+-/2346789:<=@ACDEHIJKLNPRTVWY[\^_acfgjklmnopqrtvxyz|}~‚ƒ„…‡‰Š‹Œ•—˜™š›œžŸ ¡¢£¤¦§©ª¬®°±²´µ·¹º¼½¿ÁÂÅÇÉÊÍÏÐÒÔÕØÙÚÛÞßáâãäæçèêëìíðñòóôõö÷øúûüþÿ      !#$&'()*+,-/013456789;<>?ABCFKMOQRSTXZ\`abdghijlnopqrtvxyz{|}~€„†‰‹Ž‘“”•–˜šœž ¡£¤¦§¨ª«¬®¯²³µ·¸¹½¾¿ÀÂÃÄÅÇÈÊËÌÍÎÑÓÔÖרÙÚÛÜßáäéêëíñõøþÿ   !"#%&')+-./014678:;<>@BCDEFHIJLMOPQRTWY[]^_`bdehijmoqruvwy{|~€‚  #$),.015;>?BFGMOQSUXZ]`bdehisuw{€†ˆŽ‘’“”–¥¨«­¯³¶¸»¾ÀÃÄÆÈËÌÎÑÓÖ×ÜÝàåéîïùý"%.2:=@DEGHIJLNPUVWY[]^_cefkmsuw‚ƒ…‡ˆŠŒ’—™›Ÿ¢¥©­°±´¶º»¼ÁÆÉÏÐÒÕÝÞàâãåæçèìîïðòóôö÷ùúûüý   $(*,2359=?AGKNSUVXZ\acfgklnpstxz}ƒ„ WL” ã€` "t  5Ap8 KRR¬¨ bî( p²$À €Œ“› p ²C$ È[X€ æë¨ ó¸8Œ  ° %›D| 6È 0 Fî\( T(È€ kq?„, ~ÑÜ  —Ä ·¾(L Õ$0 î÷µ4 î„| \¸ˆ ?FT``x jLØ }ùD ŒÈøT ¡Â€ °˜`0 ă8, ÔÏÔ  î÷@0 üù”  †`0 'Bl$ <’0€ EÍ p W™Ä€ js»¨| ‘°€ Š’°  ˜¾ì §¯µƸ Òb8 4‡0 æÅèh ü h¨ !*°0 BÄ Xä muœ  ‚à  Ñ4, ûD ¬ôp” º\<| Õì íô,l Û¬¤ '0³À” BŒ¼p YØ( s%¬œ ’™³º Ì0p áf Ø ÷þ)éø4 5,L M\cŒ o›ä ~†ˆ –½`$ ®Þ°  ¾E¬ Ï h, ßTèñ,à| ßP| ‹D 'é 8 <€0 VXcT uŒ¢ª·[Ød ××0 ìI¨ ýÀ î( "ìÐ0 29öˆ¸ F—8( Y¼( nz¦(˜ ‹t  ’„X ®'Ð( ÈØ8 áÒd  þÐt  J´ (" @ê4œ O VJ$< m wͬ4 ˆ ™ žl ·l Ð_t0 è í  àÐ| $ :ðÐ U,T ê m$$  Ä BX ª›H” »¼Ø8 ÓÒp  ðŠÀ,  L0¨ ( >Éd0 Lä@0 [ m ƒ Št  –ÕÜÈ ¨‘ˆ µ ¾öP Í ÕÚØÌ âÛ¼ ü Ñè  '(0 =LèD Kˆ b xÏT Š°Ä ·àX µÛ¤ Ä£l¬ Ó êÆ  ²ä4 ,\ 0°$ Cœ ] rÉ\ † 80 •Çð ¥½< ¾ Æ/\  ÙÞ¸ ê ü|ìì JÈ  ÞP -:OV·8¨ lü …Ò„L ›&üP ²¸( ÏÖá˜4 ñ…lX ý   -„üp >‡Hœ PVtœ iä  xÌl ‰éØ  ™ƒ , ¨¸STŒ ÃÚ¤4  ÐׯŒ@ æ, ÷)œ¸ %âP€ 7¤ HÆp0 b…Äü w?È Ž´ ¡À@$ ²,d Ê]@L ëúy¼h -4HNp„  a…L sƒœ  ‡Šˆ ›(¤ ³ ¸H ÉÔÃ@@ ãàHt ô^üx ù\8 (<Dã( Z×H` h•t” sð0 ŠÈ ›ÍˆÌ ©J`, µÀdD ÇÝ Œ ÔÙè  âýØœ ôIÈ  ³˜ #o˜ì :Üœp L`{$À q–@ }޼\ Š_Ü„ žÿÌ ­´G°h ÇÍÔèæH„ þã,T ý  &*T Bñ” RÆìä ÔdH$ €ÉØh   ¬ßÌ| ½ÏÛåÁ¨ ôxŒ0  †ÀX +ÈD 0+0 IÔð aÛÔ ~âPT ’¡½D ´JŒ( AÀÁ¨0 ÐÑ´( åÄ$h ó`Ø(  ”0 ?¸ /6KDä PÈ„ báhœ wã€À „œ*l\ ´º¿Ò'L„ èŠÜX ü³° )‹4 9?äpD KÈ< ]C,, vŽT „Óä ŸÈ”d ±ÇÐ ÇÍÓêïÖÔ\  Ÿd à÷pÔ #Çà 7@JŒHl Zxl qIè Š²˜ŸÑ  ºÈT ËÀð¸ ýu\ Ú?Ð4 ïú½„   'Í|0 ?Ø0ˆ ]bƒ€ uå¼ ƒl ‘ £´TÀ ³¼¬ ÇäH ÜÈÌÀ ìä( H Š˜D $8JP5 ˜ [µPt k…ÉL I•›áØx ­Ô ÅÛd@ â» ˆ ï” øÿáLŒ  ³ˆä¤ .êäd :AK'ø _¥ô4 p4 ‰ÙÄà Bø, ·<ì˜ ÅÏXÜ "ÓÙ ñ $ à î8$ ,¢h< ?½D¼ NÞðx _f༠w¦Àl ”Œ´ ¨Šôh ¼¼¬( Ϥ\ ãJð$ öÒÐ,  ï¼ #¾ˆì 1ä8 D$ `udŒ pÊ”ˆ €úà( èPä ¦ñ”ð ÃÈüŒ âÎT° ñÈp +K( ;ƒd JZI¸ ltÀ< ‡Žò„  «T8 ·Ž„Ü ÅäføL ôÒ| ¥4À %-“X j: GB½ðt ‘XÄ \ƒ| q”Üà –ä´P ¤‘˜ ¯t¼L Á]ð  ÑÞh ãê*È\ £¤   "æ¸( ,&ð  @iüø TåÀˆ dÑ`| w⤈ ‹< šÍà4 ­4 ÁûT¸ Ñ ÙÚô ñh°L +!‘! âÜL ! !+à  !;ê|h !L!_Îdp !s!}!…!•"!«!Á!ÍIØ !ä?À !øAh Ž|@ "+$L "'âL ";ãàh "O½4 "iÈ\ "}ú´, "ŒäX` "œÌ@D "·Û¤ "ÑÁ°( "ä"ýŽh ##ÁØ8 è#(¿t #7 ÔÈ #G±€¤ #Yÿè0 #j0„| #}#št #±#ÍhDl #ß° #òÛè $ J$ $!$($1 $E$O$[$`8¤< $p$y_¤8 $‰Ü | $ž$µ¤ $Ç$ΑT4 $Ú ý´$ $è$î%(h< %ƒ˜ %ĈD %/@d¤ %Evðœ %UÞÌ$ %eA¨l %{%ƒ%ŠT $lèà„ %¤<t %¶¤d %ÇÎP %ÛÞ( I%ëÜ &°x &¸ &!M`D &.É”< &9…4 &Q&Zmô &l@` &†,lt &¡Â( &°†0 &Á?° &ÔÛ X &ëÛü 'ר@ ', @ ''¤° #Ñ'4ÆP  'NØ  ']'j+p  TÑôp '‚âÐ  '”+À '®¼Ô4 '½Ã 'ÎH\ 'áÐ4 'ö 8 (ê,P (!®,L (4ÿ(9M, (H×èH (V(i(¬ (žÈœ ((—4 (¤_etextapr_getopt_longapr_sleepapr_socket_opt_getapr_pool_userdata_getstrchrapr_getopt_initapr_file_putcapr__SHA512_Endgetpeernameaccessstrtollapr_file_inherit_unsetapr_pool_cleanup_nullapr_proc_other_child_register_lib_versionapr_random_add_entropyapr_thread_rwlock_pool_getapr_pollset_pollapr_thread_joinapr_file_putsapr_os_proc_mutex_putfwriteapr_psprintfapr_procattr_cmdtype_setsemopapr_file_pipe_timeout_setmemcmpapr_proc_mutex_cleanupapr_thread_mutex_destroyclosedirapr__SHA384_Dataapr_file_flushapr_proc_other_child_refreshapr_socket_listenuuid_generateapr_sockaddr_vars_setapr_app_initializeapr_dir_rewindapr_thread_once_initapr_table_copyapr_pollset_destroyapr_mcast_leaveapr_procattr_child_in_setapr_dir_closeapr_dir_make_recursiveapr_socket_shutdownapr_pool_cleanup_runapr_ltoaapr_signal_threadapr_pollset_removesem_waitapr_vsnprintfapr_itoaapr_off_t_toaapr_shm_createopendirfcntlapr_threadattr_guardsize_setapr_parse_addr_portapr_threadattr_createmkstemp64mmap64apr_unix_mode2permsdifftimeapr_thread_cond_destroyapr_thread_mutex_lockapr_thread_cond_waittoupperapr_file_eofapr_table_getapr_table_doapr_os_dir_putapr_file_seekapr_proc_other_child_alertapr_filepath_list_mergestrcmpapr_socket_inherit_unsetsem_unlinkapr_hash_merge__moddi3apr__SHA384_Finalapr_socket_inherit_setapr_file_pipe_timeout_getapr_proc_mutex_unix_setup_lockshmctlpthread_mutexattr_settypememcpyapr_file_pool_getapr_file_inherit_setapr_sockaddr_info_getmallocpthread_mutex_initsigactiongetpassphraseapr_uid_getapr_allocator_mutex_setport_associategetenvapr_pstrcatapr_match_globlseek64apr_file_appendapr_random_secure_readyapr_atomic_initapr_pool_destroyapr_file_remove_DYNAMICunsetenvapr_allocator_allocapr_atomic_add32apr_os_sock_makeapr_uid_homepath_getapr_thread_rwlock_destroy__dso_handleapr_file_info_getpthread_cond_broadcastpthread_mutex_trylock__ctypegettimeofdayapr_proc_other_child_unregisterapr_hash_make_customapr_palloc_debugapr_shm_baseaddr_getapr_file_ungetcapr_file_writevmemsetapr_dir_openapr_pollset_createapr_file_open_stderrgetaddrinfoapr__SHA512_Initapr_file_writev_fullapr_inet_ptonapr_proc_mutex_child_initapr_thread_mutex_trylockapr_procattr_child_errfn_setapr_procattr_child_out_setapr_env_delete__deregister_frame_infoapr_file_writestrcpyapr_os_locale_encodingport_getnapr_signal_blockstrncmpapr_file_dup2apr_thread_rwlock_createapr_thread_rwlock_unlockapr_mmap_deleteapr_dir_readpthread_rwlock_trywrlockpthread_onceapr_atomic_dec32pthread_mutex_destroyapr_wait_for_io_or_timeoutapr_allocator_mutex_getapr_file_data_setapr_os_file_getapr_pool_child_cleanup_setapr_fnmatch_testapr_random_secure_bytesapr_procattr_error_check_setapr_filepath_name_get__posix_getpwuid_rapr_initialize_GLOBAL_OFFSET_TABLE_apr_proc_killapr_dso_unload__posix_readdir_rapr_filepath_encodingsemctl_endutimesapr_table_overlapapr_strtoi64__divdi3apr_file_truncstrrchrapr_hash_setapr_threadkey_private_setpthread_mutex_lockapr_procattr_detach_setapr_proc_mutex_unlockapr_terminateapr_thread_cond_signalpthread_rwlock_rdlockapr_table_overlayapr_file_mtime_setapr_random_standard_newapr_hash_countapr_vformatterpthread_rwlock_destroyapr_threadattr_stacksize_setapr__SHA512_Dataapr_allocator_owner_setapr_filepath_mergeapr_thread_cond_broadcastpthread_attr_destroyapr_thread_pool_getapr_file_closeapr_thread_exitapr_array_popapr_socket_connectapr_allocator_freeapr_time_exp_gmtpthread_attr_initapr_socket_sendfileapr_versionapr_hash_overlayfreeaddrinfopthread_cond_destroyselectapr_random_after_forkapr_thread_rwlock_rdlockapr_procattr_user_setapr_proc_mutex_defname.umulapr_proc_mutex_trylockgetuidstrcasecmpapr_pollset_addapr_cpystrnpthread_mutex_unlockpthread_joinapr_file_openapr_password_getapr_socket_acceptchmodapr_file_attrs_setapr_os_shm_putapr_table_mergenapr_uid_currentapr_mcast_joinpthread_sigmaskapr_getoptapr_hash_getshmgetapr_table_setnapr_filepath_setapr_global_mutex_createpthread_rwlock_unlockapr_atomic_casptrapr_temp_dir_getapr_threadattr_detach_getapr_tokenize_to_argvapr_pool_allocator_getapr_file_flags_getapr_array_appendapr_allocator_owner_getapr_proc_other_child_refresh_allpthread_createapr_socket_recvfromnl_langinfo__posix_getgrgid_rsetuidpthread_selfpthread_exitapr_socket_opt_setapr_socket_createapr_mcast_interfaceapr_socket_type_getapr_proc_mutex_pool_getapr_unix_file_cleanupgetsockoptapr_shm_detachapr_atomic_set32apr_mmap_dupapr_dir_makepthread_attr_setstacksizepthread_cond_signalh_errnoapr_os_dso_handle_getapr_hash_nextapr_strtokapr_proc_mutex_destroyapr_shm_size_getapr_table_addapr_env_getapr_array_pstrcatapr_time_nowapr_proc_waitapr_file_setasideapr_pool_clear_debugapr__SHA384_Init__assertapr_socket_timeout_setapr_time_ansi_putpthread_getspecificapr_socket_sendvapr_fnmatchapr_pstrndupapr_sockaddr_ip_getapr_day_snamesmktimeapr_pool_terminate.udivsemgetpthread_rwlock_initapr_file_flush_lockedapr_os_exp_time_putapr_file_dupstrlenapr_global_mutex_child_initapr_file_printfapr_thread_createapr_thread_rwlock_trywrlockapr_signal_initapr_unix_child_file_cleanupapr_atomic_sub32pthread_cond_waitgetsockname__udivdi3apr_table_eltsapr_socket_sendtopipeapr_socket_bindapr_allocator_createapr_global_mutex_destroyapr_thread_mutex_createapr_threadkey_private_deleteapr_os_exp_time_getpthread_detachapr_random_barrierapr_env_setapr_shm_destroyapr_procattr_dir_setapr_table_setapr_socket_addr_getapr_file_renameftokapr_pool_abort_getgetcwdapr_generate_random_bytesapr_os_thread_getapr_time_exp_gmt_getapr_dso_loadftruncate64sigemptysetapr_global_mutex_lockdlclose.div__posix_getpwnam_rapr_proc_mutex_createapr_socket_data_setpthread_attr_setguardsizeapr__SHA384_Updateapr_os_sock_getmkdirapr_dso_symapr_thread_detachapr_pool_note_subprocessapr_strnatcmpstrerror_rapr_proc_createapr_os_thread_putapr_os_thread_currentioctldlsympthread_mutexattr_initmodfapr_hash_makeapr_gethostnameapr__SHA256_Transformapr_os_thread_equalsem_open__lshrdi3apr_os_sock_putapr_thread_cond_createapr_pool_create_ex_debug__iobfstat64setsidapr_procattr_child_err_setapr_thread_yieldapr_shm_removeapr_pool_is_ancestorsigfillsetapr_random_insecure_readyapr_pstrdupdlopenapr_setup_signal_threadapr_hashfunc_defaultapr_proc_forkapr_mcast_loopbackapr_file_lockapr_file_copyapr_file_data_getapr__SHA384_Endapr_unix_perms2modeapr_time_clock_hiresapr_table_unsetapr_file_open_stdoutapr_pool_clearapr_socket_data_getpthread_setspecificpthread_cond_initchdirapr_pallocapr_random_init_PROCEDURE_LINKAGE_TABLE_apr_thread_onceabortapr_atomic_xchg32apr_filepath_list_splitapr_threadkey_private_createapr_snprintfapr_statsocketapr_atomic_cas32pthread_mutexattr_setprotocolapr_gid_getmkfifosem_closeapr_proc_mutex_lockapr__SHA256_Dataapr_thread_rwlock_wrlockrmdirapr_hash_copyapr_pool_cleanup_for_execapr_pvsprintfapr_table_vdoshmatapr_thread_mutex_unlockapr_file_open_stdinapr_thread_cond_pool_getapr_file_getcapr__SHA256_Updateapr_array_pushapr_time_exp_getperrorapr_atomic_inc32apr__SHA512_Transformmunmapapr_socket_pool_getapr_collapse_spacesapr_is_empty_arrayapr_file_write_fullapr_version_stringapr_procattr_group_setgeteuidapr_file_getsapr_array_catapr_file_perms_setapr_thread_rwlock_tryrdlockapr_socket_sendapr_table_mergeapr_os_dir_getapr_file_read___errnoapr_filepath_list_split_implmmapapr_thread_cond_timedwaitapr_table_addnapr_thread_data_setport_createpthread_mutexattr_destroyapr_os_uuid_getapr_mcast_hops__posix_sigwaitapr_pcalloc_debugfreopenapr_array_copy_hdrexecveapr_filepath_list_merge_implapr_pmemdupapr_inet_ntoppthread_mutexattr_setrobust_npapr_getnameinfoapr_procattr_addrspace_setapr__SHA256_Endshmdtwaitpidapr_strfsizelstat64apr_crypto_sha256_newapr_file_info_get_lockedpthread_attr_getdetachstateapr_pollapr_dso_errorapr_atoi64apr_socket_atmarkapr_mmap_createapr_hash_pool_getexecvpapr_global_mutex_trylockapr__SHA256_Finalgetgidexecvapr_ctimeapr_proc_mutex_nameapr_ipsubnet_createapr_file_unlockapr_table_compressapr_os_imp_time_putapr_pstrmemdupapr_signal_unblockapr_pool_initializeapr_file_mktempfprintfapr_proc_wait_all_procsapr_sockaddr_equalisnanapr_os_dso_handle_putsetsockoptapr_table_clearapr_gid_name_getpthread_key_deleteapr_procattr_io_setsigdelsetseekdirport_dissociate__register_frame_infopthread_rwlock_wrlocklocaltime_rapr_pool_destroy_debugapr_pool_parent_getapr_pool_userdata_setnapr_global_mutex_unlockapr_os_imp_time_getapr_unix_setup_timeapr_random_insecure_bytesapr_thread_data_getapr_dir_removeapr_rfc822_dateapr_signal_description_getapr_threadkey_private_getapr_is_empty_tablepthread_rwlock_tryrdlockapr_strnatcasecmpsigaddsetapr_table_makeapr_array_copyapr_os_file_putapr__SHA512_Finalapr_month_snamesapr_pool_create_expthread_mutexattr_setpsharedapr_socket_timeout_getpthread_attr_setdetachstateapr_getservbynameapr_os_pipe_put_exapr_threadkey_data_getapr_os_default_encodingsetgidgmtime_r_Jv_RegisterClassessetrlimitsendfilev64atoiapr_pcallocapr_strftimeapr_mmap_offsetapr_os_threadkey_putpthread_cond_timedwaitapr_file_name_getstrtolapr_strtoffpthread_equal.urempthread_key_createapr_proc_mutex_lockfile_finiapr_proc_detachapr_pool_userdata_setapr_socket_recvapr_time_exp_ltapr_pool_cleanup_killtolowermemchrapr_thread_mutex_pool_getapr_filepath_rootapr_filepath_getapr_procattr_createapr_time_exp_tzapr_os_threadkey_getapr__SHA512_Lastapr_os_pipe_putapr_strerrorapr_signalapr_socket_protocol_getsem_postapr_ipsubnet_testapr_pool_cleanup_registerapr_allocator_max_free_setapr_shm_attachapr_socket_closeapr_pool_abort_setapr_procattr_limit_setapr_threadkey_data_setapr_hash_firstapr_allocator_destroyapr_pstrcatvapr_threadattr_detach_setapr_os_shm_getgai_strerrorapr_os_global_mutex_getapr_atomic_read32apr_global_mutex_pool_getapr_array_makeapr_shm_pool_getapr_file_read_fullapr_file_pipe_createapr_file_namedpipe_createapr_uid_name_getapr__SHA512_Update.remapr_terminate2apr_hash_this__posix_getgrnam_rapr_os_proc_mutex_getapr__SHA256_Init_edataapr_pool_tagdlerrorlibnsl.so.1SUNW_0.7SUNWprivate_1.1libuuid.so.1SUNW_1.1libsendfile.so.1librt.so.1SUNW_1.2libsocket.so.1SUNW_1.4libpthread.so.1SUNW_1.3libc.so.1SUNW_1.22libgcc_s.so.1GCC_3.0libapr-1.so.0/usr/pkg/gcc34/lib:/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6:/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/:/usr/pkg/lib(¬0 =(—(¸ NÌq(Á(Ñ ='‘(Þ(ç ='‘(Þ(ø ='’))  ='”))$ ='“)4)= Òyò)G)Q y&P)_p $(x,t0ë°4ëÈ8ë¸<ëÀ@ëÐD»Hì@LìPëØTëàXëè\ëð`ìXdìphì`lì(pëøtìxx|Þx€ì€„ã8ˆð¼ŒöTì”젘쨜츠ìȤìÐ¨ìØ¬ìà°ìð´í¸ìø¼íÀtĸÈ\ÌàÐ&Ô,Ø€ÜPàí8äíHèíXìíhð ô øÀü)H|ípx 9 tí€íí˜ í¨$€(íø,î`0î 4óˆ8îÈ<î(@ôPDô Hï¸LòPñèTò@Xòx\ï€`ñdðàhõ@lõXpð°tñˆxñ¸|ñ@€ó¸„óðˆó˜Œóhô”ô(˜í¸œð ïà¤îP¨îð¬ï°ï ´ï8¸ïX¼ðˆÀð`ÄôðÈõÌð0ÐòÐÔò ØóÜó8àõˆäõ¸èõìõØðõèôöøö(üö@õø„Zè ]Œˆ˜„<öX öˆ$öp(ö`,—0|4ù¸8ö¸<öø@úØDûHû(LûHPû€Tû Xùx\ú¸`¨dûÀhûàl½Ìp½¸t½¤xÁØ|¾d€ü„ü(ˆü0Œüü”ü ˜ÆÐœÅÌ üP¤¬¨üø¬ý°ý´ý(¸ý8¼ýHÀýXÄýhÈý€Ìý˜Ðý°ÔýÈØýØÜýðàþäþ èþ(ìþ8ðþPôþhøþ€üþ˜þ°þÐþà üpü€üˆü˜ü  ü¸$üÈ(üÐ,üà0ÿ(4þø8ÿ<ÿP@ÿxDÿ€HÿˆLÿœPpTdŒ8|‡Xt9h \lˆ-p)`xxy€d„xl|ö „#܈%<Œ $˜”%˜,œí¤"@¨# ¬ °#Ä´!ȸ,¼íÄ`È˜Ì ÐÐÔ4Ø,Üí ä 4è ðì ð!`ô ø,üí0ÀÌØ8ä`ð2üဗ µ,F8YDQPÍ\ h²t{€[ŒR˜³¤ °¼PÈ&Ô'àtìø¸r-(n4,@=LuXd(pÂ|܈À”ڠƬ߸eİÐÜýèoô iQ$b0D<GHDT³`œlpxz„…„œ0¨l´:À̘Ø/äðgüŽÌ Á,]86DPë\WhKt€9Œ¬˜¡¤°Ž¼bÈÔ.à¬ì?ø+„”(O4@LËXdUpR|–ˆ“”Πܬ3¸@ħÐZÜPè!ô± W ¢ A $# 0{ <ç Hç Tê `° lÇ xä „u  œL ¨Ã ´. À½ Ì% Ø ä™ ðõ üœ m ^ X ,Ô 8¸ Dw Pâ \Ö h• t; € ŒA ˜ ¤v °¨ ¼t Èð Ô4 à` ì® ø-  ½ Ï (/ 4ß @¤ Lú X d] pˆ |© ˆ‰ ”Ý  º ¬ž ¸B Ä. Ðj ܃ èj ôb Æ ¯ ï $¶ 0 <ª H Tk `ý l< x’ „ 5 œd ¨Ÿ ´n À$ ÌV Ø ä ð8 ü¨ + » g ,o 8¦ Dä P" \@ hÝ tÞ €< Œ  ˜; ¤‡ °„ ¼% ÈÕ Ô6 à) ìl øC kp(|4@:L X¢d@p|#ˆY”Π ¬N¸ÄÓÐcÜè‘ôq! ö$·0â<¼H[T,`…lzx „S œ`¨´éÀ˜ÌWØãälðPüñ²ë |,Ù8ˆDºPæ\›hÉtÑ€1Œí˜¤_°ÿ¼ÈEÔJàãìGøšèX_(4@‚L×Xíd'pw|ˆF”Ø a¬¦¸®Ä^ÐÄÜè ô96 Z$Û0ô<øHKTH`$l”x „yœ7¨X´¹À×Ì*ØBäÐðNü=\Þ ÷,§8Dã¿ @;@YòÇàèã¿ @ÇàèÃà®Àã¿#/Ÿÿÿû®àX‚` ÚÀØ @€£ € ‚`ÂÀÚ@Ú@€£`"€  Â‚`ŸÃ@Â$ÂÚ@€£`¿ÿû‚`‚cLÚÀ€£`€‚`@ŸàÐÀ‚` ØÀš Ú+Çàèã¿Çàèã¿/žÿÿͮ㠂clÚÀ˜ €£`€–àÐÀ @ŸÊÒÀ ‚`ðÀ€ `€šctÂÀ € `€@Ÿ¿èÇàèã¿Çàèã¿@Ÿ¹ ’ ¢ €° @Ÿ¶Â€€¢’”€ @Ÿ±°@Ÿ¬”@Ÿ®’ 0€¿ÿ÷¢ NÇà耢 €‚‚@ ”ÿ€¢ :€ À*Ú @ƒ+`’`€ `€Ú* €¢ *¿ÿùÚ @À*Ãàã¿ÂNš` €  ˜`?ÿ‚` € š`?ÿ€“ € Ö° ÂNš` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿ÷Öƒ*à€ `¤€R  ƒ8`€ `"€ò’ € `'"€ò¤ Ö €ƒ*à€ `"€-ƒ8`€¢`"€ ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ 2€Ò¤ ƒ*àƒ8`€ `\"€¾ÔL €¢`€Ì€¢`ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ € ƒ*à€¢`€˜ƒ*à¤ Ö €ƒ*à€ `¿ÿÚ€¢`ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“   €ƒ*ठÂL€š` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿ÷Ö €ƒ*à€ `¿ÿ³ƒ8`@Ÿ(“, ª?ÿ¦Ð&@€¥`€¨ €Èƒ- ° ÂNš` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿ÷Öƒ*àƒ8`€ `"€¯’ € `'"€°° ƒ*à€ `€+¤€¢`"€ ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ 2€° ƒ*àƒ8`€ `\"€wÔN €¢`€„€¢`ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ 2€ ° €¢`€ƒ*à° Öƒ*à€ `¿ÿÚ€¢`° ¢&’@žÛ¡- Â@Ð$ÀÐ@”@žÎ’Â@Ö@Ú Àƒ+`€ `˜ €” €¢ ˜ ƒ8`€” € `\"€Ú Ú*À–à” Ú ƒ+`€ `¿ÿó€¢ ¨ €¥@€^À*À¿ÿ™æ@ƒ8`€ `'2¿ÿi¤ ƒ*à€ `¿ÿkƒ*à¤ Ö €ƒ*àƒ8`š` €  ˜`?ÿ‚` € š`?ÿ€“ ¿ÿg  ‚  € ˜`?ÿ‚  € š`?ÿ€“ 2€¤ €¢ "€€¢ '¿ÿ9€¢`¤ ¿ÿG¤ ¿ÿB€¢`ƒ*àƒ8`€ `"2¿ÿ@¤ ¿ÿ؃*ठ¿ÿ’ ¿ÿ’ ‚  € ˜`?ÿ‚  € š`?ÿ€“ 2¿ÿ•° €¢ "€€¢ '¿ÿ€€¢`¿ÿް ¿ÿŠ€¢`ƒ*àƒ8`€ `"¿ÿˆ° ¿ÿ¢&ƒ8`€ `'¿ÿ‚° ¿ÿ‡¢&° ’ ¿ÿTÖ’ ¿ÿQÖæ@ƒ- À$ÀÇà‘è ã¿@žV’ / €¢ €° °ÇàèÃà®Àã¿/ÿÿü®áÂN@€ `€Þ@‚cHúÀš`‚ àÿú@ €`€²`Þ.° ÂN@€ `¿ÿ÷Þ@À.ÇàèÃà®Àã¿/ÿÿû®ਂcHÚÀ¸`¶¦ ¤ ¬ºàž ÿ À€ˆ`€ Ð@š¤ à €ž ÿ À €ˆ`2¿ÿü¤ ¢ ÿ @€ˆ`"€  Àš¦àÐ À¢ ÿ @ €ˆ`2¿ÿü¦à À€ˆ`€5‚ @€ˆ`€1‚ƒ, ƒ8`‚`0›* € ›;`˜`?ÿš`0€  ‚`?ÿ€“"€<”–”@)¨#HèÀ€¨  €›(`‚`ÿØ@›;`€‹ €h” €¢@ &€m°?ÿ4€k°  À›(`‚`ÿØ@“;`€‹ ¿ÿí–à €Ú@€‹`2€^°?ÿ‚ƒ(`€ `€V€¦ 2€ ƒ, ›* ƒ8`‘;`€ @&€P°?ÿ€F¤ ¿ÿŸ¦à@ @¿¿ÿñƒ, ’@)¨#HèÀÖ €¨ ‚ àÿÚ@€‹`€ª Ø @‚ ÿÚ@€‹`€.ƒ*à›+ ƒ8`›;`€ @ €€¥`"€ª?ÿ” ’`Ö €‚ àÿÚ@€‹`2¿ÿìØ @ @Ú@€‹`€‚?ÿ‚•`"¿ÿÀ‚€°€€ `€¥`¿ÿì” ª ¿ÿê’`2¿ÿç” €£`¿ÿð’`¿ÿã” €° ‚ €°€° °Çàè” ‚ÀÿÿBž@” ‚Àÿÿ=ž@ã¿–`€ ¢ @Y  ’@^¢’@c”Çà‘èã¿’ ”€¦`€  @[‚€ `€´ @@H’  ’@M”À,Çà‘èã¿’ €¦`€   @9 ’@>”À,Çà‘èã¿’€¦`€  @* ’@/”Çà‘èã¿xô' Lö' Pø' T ú' Xò' H€¦`´ ¸ ¢ H€¶ Lº¿Ø@ ²¸€¦ €¶àÐ'@´ º`à@€¤ ¿ÿô@’ ú@°€§` ´ €¶`€²¿Ô²`ø@’@œÿ”úÀ´  €§`€¶à€¦ ¿ÿó@œâ¸’@œï”úÀ €§`¿ÿó¶àÀ,Çàèã¿¢€¦ ’ € Â ’@¢„ÿ¿ÿý  €¦à2€Ò&À@œÍ’`°¢ €¦ €¶Ò@œÌÔ Â ¶À¢„ÿ€   Ò@œÃÔ Â ¶À¢„ÿ¿ÿð  À.ÀÇàèã¿@œ¾À"”@œ¼’@œ·Ð>ðÇàè‚À@œ´ž@’ ” ‚À@œ±ž@ã¿@œ—’ ° €¦`€  À.@œ§’  0°?ÿÐ.@œ¤’ ²’ 2¿ÿ÷€¤ €‚ -°?ÿ€Â.² ¿ÿì  Çàèã¿@œw’ ° €¦`€  À.@œ‡’  0°?ÿÐ.@œ„’ ²’ 2¿ÿ÷€¤ €‚ -°?ÿ€Â.² ¿ÿì  Çàèã¿@œW’ ¢ ° €¦`€´ À.’” @œi– ’`0°?ÿÒ.’” @œd–  €” ¿ÿñ¢ €¦ € ‚ -°?ÿ€Â.¢  `¿ÿæ´ ÇàèÃà®À㿈/›ÿÿû®à´‚`ÚÀÖ `Â@Ø`Â'¿èØ7¿ìÖ/¿î€¦ €L¿è€¦ €Zžà ” $  *—. ƒ6` ™> šÀ’cÿ° €£ € ² —. ƒ6` ™> šÀ’cÿ ° €£ ¿ÿø² €£ €€£cÌ¿ÿô—. €¦ €N€š €¦` "€š €¢cÌ€‚ ‚ €‹@€%€¢aÿƒ*`‚@ ‚a›8`›3`‚@ “8` €¢` €˜ ²†`’ ˜ ÚJÔÀ–@œ’ €¢ €3à. à.€à. à. €-À. š ‚ -Â. Ú. Ú.€¿ÿùÚ. 4€²†`ØJÔÀ –@›ì’ ¿ÿ逢 €€¦cÌ¿ÿ¦‚`ÔÀ–@›ß’ €¢ €‚ *Â. Â.€Â. ¿ÿÜÂ. ¿ÿÁƒ*`€¦`¿ÿ¿‚@ ¿ÿ¯€¦ Çà‘èã¿€¦ 2€ ÂN€ð€@›É€¢ €   ° ÂN’`¿ÿø€° à&€ÂL’`€@›¸€¢ "¿ÿø  À,€‚`€Â&€¿ÿìÂNÇàè㿬àƒ* ƒ8`€ `?€O° € `?€€ `[€ `€€ `*"€(à€Ž €ƒ* ƒ8`ÚN@€£@2€6° ¿ÿè²`€T€ `\¿ÿô€Ž €Ž ¿ÿñ€Ž Â›(`€£`¿ÿê° °?ÿ€Ž ¿ÿé \@›€ ÿ @›}Ð@€¤"¿ÿϲ`€° ›, ƒ;`€ `*2€ ÂN@° à›, ƒ;`€ `*"¿ÿü° ÂN@€ `.€ËÖ@ƒ;`€ `€û€ `/€ß€Ž €Ý@›[’ /²’ ¿ÿ²€ú° ÂN@€ `¿ÿüÖ@€ `/€€Ž ƒ*àƒ8`€ `.2¿ÿ¢²`€Ž "¿ÿŸ²`€¦@¿ÿ "¿ÿš²`ÂNÿ€ `/"€â° ¿ÿ”²`ÂN@€ `¿ÿâÖ@€ `/€‡ƒ*àƒ8`€ `.€Š€Ž ÂNš`!€  ˜`?ÿ‚`^€ ›*à‚`?ÿ¨“¥;`€¢¢ Ú @ƒ+`ƒ8`€ `]¢`€9¦ €ª  ÿ€! ÂL@€ `-€6Ø @ƒ:à€ @€&€Ž €š ƒ+`ƒ8`€ `]€%¢`—+`ƒ:à€ `\¿ÿë€¢à€Ž ¿ÿ耢à @—(`š€¢à¿ÿä¢` °’ 2¿ÿO²`€™° @šö `ÿ @šó  ÿ€¤¿ÿàØ @š ƒ+`ƒ8`¦ € `]¿ÿߢ`€¤À¿ÿê¿ÿê°’ ð `•. ƒ: € `"¿ÿɃ:à€ `]¿ÿÅ€ `\€J¢`™: €£ ¿ÿÙƒ:à€ @€€Ž €£6€¦ €Ž €¿ÿºØ @@šÈ `ÿ @šÅ€¤4¿ÿ²Ø @@šÀ @š½ ÿ€¤4¿ÿªØ @¦ ¿ÿ§Ø @¿ÿfƒ*à€T° €Ž ¿ÿWƒ8`€ `.2¿ÿ|ÂN€Ž "¿ÿyÂN€¦@¿ÿN€Ž "¿ÿtÂNÂNÿ€ `/2¿ÿpÂN€@° €Ž ¿ÿ7ƒ;`€¦@¿ÿ@€Ž ¿ÿ3€ `ÂNÿ€ `/¿ÿ.ƒ;`€2° €Ž ¿ÿ¸™:  @°¢`¿ÿ²•(`ÂN@€ €&°@ ¡*à€¤ ¿ÿ(¢¿û€’¡(`€¤ "€° ’@šz”²`€¢ €ƒ< € `/2¿ÿóÂ@€Ž "¿ÿðÂ@€ ° €Ž € ° @šb’ /€ €°@ ° Çàè ƒ(`€ `€š ƒ8`€ `["€ š`€€ `\€ `*€€ `?"€   ƒ(`€ `2¿ÿòƒ8`€  € € `]2¿ÿ÷ €£`"¿ÿô € ¿ÿï ÃàÃà®Àã¿(/™ÿÿü®à,@š ’ / ’ "€4’”$@š0¢° ’ ” @š-Ð&@’¿Œ@š+”€¢ € ¢¿0€)@š(Ð@ @š'Ò¿äÐ$Ô¿Œ€@š%€¢ ” €@š ҿ䀢 ¿ÿîÔ¿Œ€@š€¢ ” ¿ÿö@šÐ¿Œ€  @™Ó’ \ ’ ¿ÿÌ’‚`(¿ÿÍâÀÇà‘èÃà®Àã¿pð?¿ð/˜ÿÿû®ãÕ¿ð€¦ N€ð \´ N‚`8ÚÀÙ@¢ ªŠÌ€U²‚ Â'• ªÕ?¿ðÙ?¿Ðпð@™ï”¿è¸ PÑ¿èٿЕ  — !ª L€S €§€4€¤€1‚`<ÂÀÙ@‘¢ ÌÑ?¿ðÕ?¿ØÐ¿ð@™×”¿è‚`@ÂÀÙ@‚`<‘ LÂÀÙ@‘¢ L‘ HÑ'¿ð¿ð¸?ÿÁ?¿à‚`0Â/¢`€§€Õ¿Ø‚`8ÂÀÑ¿èÙ@ª L¿ÿÛ€¤€ €§`ÂÂ.@¸ ²`€¤8¿ÿü€§`€¸¸€§€0€¦@‚ Â&À€oÀ.À'Õ?¿ðÙ?¿Ðпð@™ž”¿è¸ PÑ¿èٿЕ  — !ª L¿ÿ± ªŠÌ¿ÿä‚ <ÚÀÝ@‚`D‘¢‰NÚÀÙ@ (€ƒ )— !‘¢‰N (ƒ )¢ÿª Ì)¿ÿù•  ¿ÿÍÑ?¿à€â&À€¤€‚`<ÂÀÑ@•¢‰HÕ?¿ðпð@™m”¿àÑ¿à‘ HÑ'¿ð¿ð‚`0Â.@²`•  €¦@¿ÿì— !€¤8€Ú€(À. Oš`ƒ+`ƒ8`€ `9€ ²– 0š 0€ ˜ 1¸?ÿ‚`Â/ÂO€ `9$€À.@€§8¿ÿ÷Ú/Ø/ÂÀ‚`€§`¿ÿõÂ&À€¦@8€Ö.@ÂO€ `9¿ÿò²`€À.@Ú/À.@Çàè㿈ú# \’”–˜ÿÿ$š Çà‘èã¿€¦`€²À&€@™%’ ƒ* ‚@‚@‚&²ÿ‚`0°€¢ ¿ÿõÂ.@€‚&Àƒ6 € `¿ÿïÂ&€¿ÿí° Â'Çà‘èã¿ ¢€¦ ¤€š €¦ 2€š €¦ÿ(€š € ‚@ €‹@€  š†@ ˜ ˜F €£ € – € ‚`?ÿ€ŠÀ€€¦ °²´¶ÿÿ™è€€ €£ÿ¿ÿó€ – ‚`?ÿ€ŠÀ2¿ÿ󰀦 €ƒ6 À&À’– @˜Ý” —*`–‚À šÀ ‚$@ ¤¿ÿ‚`0 ¢ €” ¿ÿòÂ,€€‚'€ `¿ÿíÂ&À¢ ¿ÿê `Â'@Çà‘è㿵. µ> ‚ /—ÿþ°®á؃(@€¦ Xžÿ€´‚`XÚÀ‚´¿ÿú@ ±6€¦ ¿ÿûú.€€‚&À¿ÿõ‚`4Â'Çà‘è㿃.àš ›+@ ƒ8`’/—ÿþŽ®áP€ `X²ÿ´€°‚`T€¢ €âÀ€¢ €€¢ÿ€ ‚@ µ. ¶° ²µ> ÿÿÙè‚@ Ú@°?ÿÚ.@˜…”€’ 2¿ÿú‚@ €‚'¿ÿå‚`0Â'@Çàèã¼8Ô€ƒ* ð' D/—ÿþ`®à˜€ `° ¢ ¨ À'¼ðÀ'¼Ôæ@€ê`ƒ8`€ `%€€¤à€€¤À:€æ&@Ô,À¦à° ´ Ô€ƒ* € `2¿ÿòƒ8`æ&@€N˜Â DŸÀ@€¢ €H˜?ÿæ@ê`Ô€Ô,À¿ÿì¦à;‚cH´ ÚÀÔ€š`‚  ÿØ@ – €‹ Ö'¼ÄÖ'¼ìÀ'¼Ð¸ ¬ ¤ À/¼çÀ'¼È€5À'¼Ìƒ* ƒ8`€ `-"€´ € `+€€ `#€€ ` €€ `0€Õ‚cH´ ¤ 0Ô€ƒ* ƒ8`€ `-¿ÿò€ `+´ À'¼ì¿ÿùÔ€´ ¸ ¿ÿõÔ€´ ¬ ¿ÿñÔ€˜ ´ Ø'¼Ð¿ÿìÔ€ƒ* ƒ8`€ `*€ À'¼ðÔÀ¶à€¢ €–´ Ô'¼ðÔ€ƒ* ƒ8`€ `l"€|ÂN ƒ* ƒ8`€ `q€™€ `l€š€ `h€î– ƒ* ›8`€£`x€ ‚ %‘‚bä˜%À›+` À@ ‚ %Â/½è‚ Ô/½éÂ'½ ¢½è¤ ¼ç—(`€¢à€Ú¼È‚`HÚÀ€¤@ € ‚½è€ @€Ø¼ç¢ÿØ,@½ ‚`Â'½ ڼȼ쀋@€)Ú¼ÄØ½ €¥ €&€£`‚  0‚`0€ š`?ÿ€  ‚@ €‹@€€¤à€€¤À:€,æ&@ @Â,À¦àؽ ‚?ÿÂ'½ ° ¢`¨?ÿ€¤à€€¤À:€Ræ&@ä,À¦à¨?ÿ½ €¥¿ÿö° ڼĀ£`€%à½ Ö¼ìØ¼È€« "¿ÿ?´ Ø½ €¥ ¿ÿ:€¤à€€¤À:€æ&@ä,À¦àؽ ¨?ÿ¿ÿõ° Ú DŸÃ@€¢ 2€˜?ÿæ@¿ÿóê`€ `l¿ÿ†ƒ* ´ – ¿ÿŠÔ€€¤ € €¤à¿ÿÛÖ¼ì @Â,À¦à°  „?ÿ¿ÿÓ¢`€¤à¿ÿû€¤À*¿ÿ÷ @æ&@ DŸÀ@€¢ €]˜?ÿæ@¿ÿìê`´ ¿ÿâ– ´ – ¿ÿhԀؠDŸÃ€¢ €M˜?ÿæ@¿ÿ©ê`€¢à€€¢à€€¢à€2‚‚¶àÐ@•* •: ’ –¿ðÿþz˜½ ¢Ø¼Ì€£ €Â¼ÔÚ¼ð‚`€ aÿ8€š!ÿ½ € @ € ¼Ԙ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ ¼Ԁ ‚@ €€¿ÿG¼ç€¢ÿÂ,@¢ÿš 0Ú,@½ ‚`¿ÿ<Â'½ €¢à€h€¢à€€¢à€‚‚¶àÂ@Â'¼ÔмԒ ”½$–¿ðÿýÚ˜½ ¢Ú¼Ì€£`¿ÿ'¼çÖ¼ð‚à€ aÿ€š š!ÿ½ € @ ¿ÿ˜ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ ¿ÿ¼çâÀ€¤`€X¶àּ̀¢à€lÚ¼ð@–’¿ÿÐ'½ ´ ÂN€€ `T€ Ô€€ `T€{€ `p€ `A"€ìÂÀ€5€ `I€ `¿þ}ƒ* ‚`Pš Ú'½ âÀ¶à¿þïÀ/¼ç€¢à€逢à€€¢à€²‚‚¶àÐ@•* •: ’ –¿ðÿý÷˜½ ¢Â¼Ì€ `€€¥ Ö¼ð‚à€ aÿ€š š!ÿ½ € @ € €¥ ˜ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ €¥ ¿þÆÂ¼çÂL@€ `0¿þÁš 0¢ÿÚ,@½ ‚`¿þ»Â'½ €¢à"€ŸÖÀ€¢à€€¢à"€ÚÀÚÀð#@¶à¿þ®À'¼Ä€¢à€瀢à€€¢à€t‚‚¶àÂ@Â'¼ÔмԒ ”½$–¿ðÿýL˜½ ¢Ø¼Ì€£ €Â½$Ú¼ð‚`€ aÿ8€š!ÿ½ € @ € ½$˜ 0¢ÿØ,@½ ‚`€ @ ¿ÿûÂ'½ ½$€ `€߀§ ‚ -¿þ€Â/¼çڼ̀£`€oÖ¼ð‚ Â'¼ðØàÂÀÂ'½ØØ'½Ü˜½ нØÔ¼ð–½ÿýš½(º½ñ½ € `¶àØ¼ð€¢‚ -Â/½ñ¢½ò¼ðšÿ€£`€ à½ÂJ € `0€à½šÿ€£`¿ÿú˜?ÿཀ¤ €‚$ € `4€ ?ÿ€¤?ý€瀤  ?ÿà'½ Â,@¢`‚ .Â,@€š  Â,@š` €£@ ¿ÿû¢`‚ eÂ,@½€ `€ ¢`‚ +Â,@à½@•à’ d€¢ €¢`‚ 0Â,@¢`à½@•Ö’ €¢ € @•Î’ d@•Ï’  0Ð,@¢`à½@•Å’  0Ð,@¢`ÂLÿ‚`.€ š`?ÿš+@¢$@ À,@ÂO@€ `-¢€¡Â@€§ €€Ø¼Ð– +Ö/¼ç@•Ž €¥ €Ð'½ @•·’ .€¢ €æ‚ .ÂN€€ `G¿ýøÂ¼ç@•­’ e€¢ ¿ýñ‚ E¿ýïÂ*ØàÚÀÚ'½ØØ'½ÜѽØÑ?¼Ø@•Êм؀¢ €Ñ¶à¼Ìրؼð€ `Ö/¼¿€Ø'¼´š Ú'¼´Â¼¿ƒ(`Â'¼¤–½ñƒ8`˜½$š½ Ö'¼¬€ `fØ'¼°Ú'¼¨€°¢ ¼´Ð¼Ø”`–½Ø¼°ÿükš½ˆ‚cHÚÀÖ š`‚ àÿØ@ €‹ €• Ú¼¤ƒ;`€ `f€ÚÚ¼´ƒ;`‚ @ ƒ0`€@¼¬Ö(@  ¢`"€ÂLÖ¼¬‚ .Â*à¢àÂL€€ `Â,@  ÂL€ `¢`¿ÿû Ø¼¤ƒ; € `f€Ú¼¿Ú,@½ÿ¢`€¢ €Ð'½‚ +Â,@¢`‚ 0Â,@¢`Â,@¢`Ö¼¬‚$@ ؼ¨Â#½$€ `€A⼬š -¿ý‚Ú/¼çÚÀ‚ Ú/½èÂ'½ ¶à¿ýz¢½è‚ %š Â/½èÚ'½ ¿ýt¢½èÚÀ–`‚  ÿÚ@ €‹`€ƒ* ´ Ô€˜  ÿƒ8`Ú €‹`€¨Л* ƒ- ´ ‚@Ô€¨@›;`˜  ÿš@ €ˆ`¿ÿõ¨К €Ú'¼Èƒ8`€ `*€/À'¼Èƒ* ƒ8`€ `.¿ý,À'¼Ì‚cH´ ÚÀÔ€–`‚  ÿÚ@ ˜ €‹`¿ýØ'¼Ìƒ* ´ Ô€˜  ÿƒ8`Ú ‚Ѐ‹`Â'¼ð¿ýؼðƒ+ ›* ‚@ ´ ‚@Ô€›;`š@˜  ÿ šЀˆ`¿ÿòÚ'¼ð´ – ¿ýÔ€ÂÀ– ¶à´ ¨€ `€Ö'¼È¿ÿËÔ€š™> Ø:À¶à¿ýÀ'¼Ä‚`Lš Ú'½ ¿ýâÀ€¢à2¿þ•Øà˜ ¿þ‘Ø'¼ð¨ À'¼ì¿ÿµÔ€ØàÂÀØ'½äÂ'½à—* —:àÐ½à” ˜¿ðÿü0š½ ¢¿þ¶àÂÀ€ `€<¶àÐ@’ ”¼ô–¿ðÿûœ˜½ ¢Â¼Ì€ `¿üè¤ Â½ Ö¼ð€¢À*¿üãÖ'½ ¿üâ¼çØàÂÀØ'½äÂ'½à—* —:àÐ½à” ˜¿ðÿü š½ ¢¿ýt¶àØàÚÀÚ'½àØ'½äÐ½à” –½$˜¿ðÿû•š½ ¢¿ýž¶àØàÚÀÚ'½àØ'½äÐ½à” –½$˜¿ðÿûˆš½ ¢¿þ¶à‚`Hš Ú'½ ¿ü²âÀð3@¶à¿ü¯À'¼ÄÖ DŸÂÀ€¢ €˜?ÿæ@¿üÏê`€fؼЖ +¿ü¡Ö/¼ç˜ €£ À'½ ¿ü›šÂL@€ `¿ü˜¤ ‚ ˜Â'½ Â¼ð€£¿üš`ÂK@€ `¿ÿø‚ ¿ü‹¤ €£ ¿þƒš ¿þÚ/¼ç€ý€ `t¿ýŽÂÀ€ `¿ÿǶà˜½ Ð@’ ” xÿû–¿ðؼ̀£ ¿üs¢Â½ Ú¼ð€£@*¿ünÚ'½ ¿üm¤ ¢`¿þeÂ/¼ç$€ÂJš €£@ €– .€ š`€£@ € འÂ,@ཀ£@ ¿ÿ÷¢`Ö,@¿ÿô¢`€£6¿þ<ÂLÿ˜ – 0Ö,@½€£¢`¿ÿü˜ ‚ .¿þ/Â,@€§ €¶Ö¼Ð‚ +¿ü@Â/¼ç€£ ¿ü=š ¿ü;Ú/¼ç¶à¿üÒÐ`¶à¿ýRÐ`¶à¿ýÂP`¶à¿üÿÂ`  à'½¿ýõ‚ -@“²Ö¼¨Ð"À” ’@“¾Ð¼¬Ø¼°¿þ™À#‚½ˆÂ# \мØÔ¼´–½ÿùèš ¿þS‚cHÂ,š Ú'½ ¿þÀ,@ € `¿ÿX¶àâ@¤¿ð–’ ”¼ü˜¼øÿú¶ `ÿ‚?ÿ?#  . @–à(@’ ”¼ü˜¼øÿúª‘2 ‚?ÿ‘4`–à(@’ ”¼ü˜¼øÿú¡ ÿ‚?ÿ‘4`˜¼øà(@–’ ÿú™”¼ü¤$€Ø¼Ì€£ ä'½ ¿ûã¢Ú¼ð¿ÿr€£@ؽ€£ €š‚?ÿÂ'½ Â,@Ú½‚ šÿÚ'½€ `  ¿ÿø¢`ؼ´ƒ; ‚ @ ƒ0`€@"¿þ#ÂL‚ .Â,@¿þ¢`¿üÑàÀ€¤ ¿ÿ ¶à¤¿ð”½–˜½’ ÿúiÐ ‚ :¢?ÿÂ,@’@“š½@“;н € `€fÐ'½?Ú 8‚cÿ€£@€ ‚ ] 4€ `€‚ ] 0€ `"€Y¢$@‚ ]Â,ÿÚ½š$@ ‚ [Â+þÿ¢þÒ½Ô½@“/‚$€¿þ§Â'½ ¿ûnÔ€€¢à¿ûÂ¼ç˜ ¿û‰Ø/¼çÐÀ’ ” x–¿ðÿú›˜½ ¢¿û¶à’ ”½–½‚ÿú*˜½Â½€ š@?ÿš þš`-Ú,@½ € `€#¢`‚ÿ€ ÿÂ'½¿ýáÖ¼¬Â Â,@Ú½šÿ€£ÿ  ¢`¿ÿ÷Ú'½€ `0€‚ .Â,@¢`ཀ¤ ¿þôš ‚ 0  à'½Â,@ཀ¤ ¿ÿû¢`¿þêš ‚ 0Â,@¢`¿ÿܽ¢$@”¿ÿ±Ò½Ö¼¬‚ 0Â*ÀÚ¼´€£`€¢à‚ .š Â*àÚ'½€£ ¿ýŽ¢à˜ 0Ø,@½š‚`Â'½€£`¿ÿú¢`¿ý„ÂL¿ý{€¥ Çà‘è ÿÿê¬ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿö´ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿôäÿÿì|ÿÿò ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿîØÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿö˜ÿÿñèÿÿôäÿÿôäÿÿò ÿÿì|ÿÿñèÿÿì|ÿÿì|ÿÿì|ÿÿì|ÿÿñ´ÿÿðäÿÿð„ÿÿì|ÿÿì|ÿÿðTÿÿì|ÿÿï°ÿÿì|ÿÿì|ÿÿîØÃà?ÿ㿈‚/‘ÿøu®àìö' Pø' Tú' X€¦`”€‚ÿÀ'¿èÀ'¿ì‚`,ÐÀ’¿è@’‚– P€¦`€°ÿ¿èÀ(@€¢?ÿ2€°0€Â'¿ì¿ÿðð'¿èÇàè㿈‚/‘ÿøS®àd€¦`”–€‚ÿÀ'¿èÀ'¿ì‚`,ÐÀ@’c’¿è€¦`€°ÿ¿èÀ(@€¢?ÿ2€°0€Â'¿ì¿ÿñð'¿èÇàèã¿€¦ €’€§ € @’O ’@‘ñ”@‘ë’ € Ð& ’@’C’@‘æ€Ð& ¿ÿê´ ô& ò&ö& À& Çà耢 €š  € `€š Ãà ã¿’ @‘Π°’”–ÿÿ˘ Çàèã¿@’€¢ € ‚ Ò ’ÿÒ& @’Ð Â ‚@Çà‘èã¿Ò  €¢@€¨@ €#æ €¢`$€¨ Ð @’’’@‘¥Ð¦Ò @‘ûÐ ”Ò @‘¦à â ’%@‘ò¤’@‘î’ @‘”è& æ& Ò ‚`Â& @‘ãÐ Çà‘ìÀã¿Ò  €¢@€¢@ €à €¢`$€¢ Ð @‘Ó’’@‘vÐ Ò @‘ÌÐ ”Ò @‘wâ& à& Ò ‚`Â& @‘ÁÐ Çà‘ìã¿Ð ä`‚Ò € @ €!è €¢`€ ¢@ ‚€ @4¿ÿÿ¢@’@‘­ ’@‘OД@‘I’  Ð @‘¢’”@‘MÒ ¦â& à& Ð €ä`€æ ¿ÿ⢠@‘’’ ’@‘Ž”À@‘9Ò`Ú` ‚@ Â& Çàèã¿’ @‘& °Ö`˜ ’ÿÿ#Ô` Ò`@‘vÐ`”Ò`@‘!Ð à`â Ò ’"@à& @‘k¤’@‘g @”@‘’ Çàèã¿@‘’ Â`Â" Ø`Â`Ú`ð"Â" Ú" Ø" Çà‘èã¿@‘S’°@‘S’Çàèã¿â`€¤`€HªÚ`€£`€Eƒ.   µ8`¦ €¤ € ¦@€¤ € ¤ Â`€€¤€@˦À€¤€¿ÿó  @Í’àƒ-`°©8`¢¤ à`€¤ €¤ ô– €Â`€¤€€  €¥ ¿ÿõ€¤ ê,@¢`¿ÿ÷¤ ô– "¿ÿôÂ`@¦  ¦’@³”Â`€¤€¿ÿì¢@À,@€@ ’ À*Çà‘èÃà€¢ €š  € `€š Ãà ã¿’!@ °’”– ÿþŠ˜ À& Çàèã¿’!@ °– ˜ ’ÿþ|Ô` Â`”@”€•* Ò`@zÐ Â`Â& ’`” €@t  ˜’`˜@p” €Â`Â& Çàèã¿Þ À& €£àø €² š úÂ@‚`»(`¶@ƒ+@ú ¸ ´@€@€ò&à˜ò&àô& ²`€£À4¿ÿñúÇàèÀ" ÃàÀ" ã¿”€¦`€A° Ö@˜ à‚ ƒ(@ Ú €‹@€9ƒ*à¡8`‚¡, € `€)š€ `€¡, š`ÂK@ € `€¡, ÂK` ƒ+ ‚@ Ø`Ö`˜š ‚À š@ ‚@ Ø ƒ(`¢›+`7÷÷° ‚c߀¦€    € @€ ’° €¦(¿ÿû € ° ÂN` ¿ÿך`@jЀ¢ 2¿ÿô° ð Çàèã¿âN@‚£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €8¢ @§+ ‚ÀÚ`Ô`˜˜@ Ò ˜ –€ –À š@  ™+ —*àš@  @ ¤@ ›+`€¤€¨@ ‚ÀÒ `˜ÿþB ’@ÿÐÐ$Ð@û’â$ €WÐ$ @ Ѐ¢ €’  €¤8¿ÿêÒ Â € @¿ÿõ’  €¤(¿ÿû ¿ÿàÒ §+ š@ ‚ÀÒ Ò `¿ÿÚÚ& @ÜÐÐ$   €¤´ €¦ 0€3€¤à"€   ÂÂ$ÀÚ Ú$à Â$à¦à ´   €¤€€¤à € @¿ÿï’@êЀ¢ ¿ÿ뀤à ’ÿ¿ÿñÒ& ¿ÿï¦2€ €¤€€¦ Â$ÀÚ Ú$à Â$à  ¦à €¤*¿ÿøÂÿÿ è€ÿÿèÇàèã¿âN@‚£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €1¢ @§+ ‚ÀÚ`Ô`˜˜@ Ò ˜ –€ –À š@  ™+ —*àš@  @ ¤@ ›+`€¤€¨@ ‚ÀÒ `˜ÿý¨â" ò"€Tô" @Ѐ¢ "€ô$   €¤8¿ÿñÒ Â € @¿ÿõ’  €¤(¿ÿû ¿ÿçÒ §+ š@ ‚ÀÒ Ò `¿ÿáÚ&   €¤´ €¦ 0€3€¤à"€   ÂÂ$ÀÚ Ú$à Â$à¦à ´   €¤€€¤à € @¿ÿï’@ZЀ¢ ¿ÿ뀤à ’ÿ¿ÿñÒ& ¿ÿï¦2€ €¤€€¦ Â$ÀÚ Ú$à Â$à  ¦à €¤*¿ÿøÂÿþzè€ÿþvèÇàèã¿Ø@– ‚ ƒ(@ Ú €‹@€gƒ+ £8`‚£,`€ `€Gš€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@ƒ*à‚@Ø`Ö`˜š ‚À š@ ‚@ ƒ(`Ø ¤›+`7÷÷  ‚c߀¤€¢ @0€B  €¤€? € @¿ÿú’@Ѐ¢ 2¿ÿö  Ø š š@ ¦›+`˜?ÿ   ¨@ Ø& €¤€€¤Â € @€’ÂÂ$ÀÚ Ú$à Â$à¦à ¿ÿò  ÂN`¢@¿ÿ¹š`Â$ÀÚ Ú$à Â$à  ¦à €¤*¿ÿøÂÿþè@ŽÔЀ¢ 2¿ÿå ‚ÿÂ& ¿ÿØ  ÇàèÃà®Àã¿âN@‚/ÿÿú®át£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €8¢ @§+ ‚ÀØ`Ö`˜š ‚À š@ ‚@ Ø ›+`ƒ(`¤  €¤8€ Ø Â € @€’  €¤(¿ÿûÂ Ø ‚ÀØ `˜ÿüž ’@Ž[ÐÐ$Ð@ŽW’€â$ @Ž}Ѐ¢ 2¿ÿë  ‚`\ÐÔÀ–Ò @Žu˜ € Ð$ §+ š@ ‚ÀØ Ø `¿ÿßÚ& Ð$ Çàèã¿âN@‚/Œÿÿ˜®ãì£,`€ `š€Ø@ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@‚ ˜ —(@ 7÷÷Ú ‚c߀‹@ €2¢ @§+ ‚ÀØ`Ö`˜š ‚À š@ ‚@ Ø ›+`ƒ(`¤  €¤8€ Ø Â € @€’  €¤(¿ÿûÂ Ø ‚ÀØ `˜ÿü<â" ò"€ô" @Ž!Ѐ¢ 2¿ÿñ  ‚`\ÐÔÀ–Ò @Ž˜ € Ð$ §+ š@ ‚ÀØ Ø `¿ÿåÚ& Çàèã¿Â@‚`š ›+@™(` ˜Ö ”@ €ˆ@ Ö# ˜€šÖ# Ô& âN@‚”`€£,`ÂN`¢@š`€ `€£,`š`ÂK@¢@€ `€£,`ÂK`¢@7÷÷‚cßÿûù¢ @ ’@¶ÐÐ$Ð@²’â$ Ð$ Çàèã¿Â@‚`š ›+@™(` ˜Ö ”@ €ˆ@ Ö# ˜€šÖ# Ô& ðN@‚– €±. ÂN`°š`€ `€±. š`ÂK@°€ `€±. ÂK`°7÷÷‚cßÿûưð" ò"ô" Çàèã¿’!@BÂ`Â"  Ø`Â`Ú`°à"Â" Ú" Ø" @˜’ÿüÒÇàè㿚ð' D7÷÷¶àæ@¸cßê ° €¤à€Fº Ø À– ›/@  €ˆ@ €6€¤àƒ+ ¥8`‚¥, € `€šÂLऀšà€ `€¥, š`ÂK@¤€€ `€¥, ÂK`¤€ƒ*àš@à`Â`˜€ @€¤ €‚‚@¬ £(`Ð@¨@€¢ €   € @€0’€§`€¢`  ˜€ @6¿ÿóÐ@€§`"€° €¤à€.æÀ€¤à¿ÿ¿¶à0€(¿ÿø°  € `€#  € ¢ €§`"¿ÿï° Â € @¿ÿ逧`Â@š@’€ `  ¿ÿó¢`  DŸÀ@Ô`¿ÿîº@+€¢ ¿ÿÏÔ Â DŸÀ@Ò@¿ÿɺÇàèã¿ö' Pø' Tú' X’”@– PÇà‘èã¿€Ò ð'¿ì€¢`€ò'¿èÐ@Œ¦“*`ð¿ìô  ¦Ø šØ$˜ šƒÿ¿ÿý  ¿ìÐ@@Œ—“. Ð'¿ä€¦ ¸€(  ° €¦€\ڿ였¦ä¿ä² €DØ'¿àº¶@€¦À¦€¢¶­.`¡/`€¤À€º€¤@€.€¤ÀÚ€Ð@@ŒÛÒ@€¢ $€ÂÂÂ$€¢`  ¿ÿ鸞£, ¤@ÂÀÚ Ð@@ŒËÒ@  €¢ €˜ ÚÀ Â$ÀÚ$ €£ ¿ÿñ£, ¿ÿɰ Â$€¦à¬ ¿ÿÖ¤ Â$€¦à¤ ¬ €¤À*¿ÿû€¿à²@º@€§@ ¿ÿ¶@Ø¿ä‚$€ €¡8`Â Ø¿ä  Â# €¤ ¿ÿû›, ¿äø'¿äð¿à€¦ ¿ÿ©¸Ú¿ìÂ`ƒ(`ª@  ¨€¤ €¶ €bð¿ì  €¤€5¨ÐÒÚ Â`€£@¿ÿ÷‚Ð@Œ‚Ò@€¢ ¿ÿñ‚¦ ¬€¶ ÒÚ Â`€£@€ ¿èÐ@ŒrÒ@€¢ €Â¿è¦à€¤À*¿ÿòÐÀ¿耠`€J¦ÿüÂÀØ`Ú€Ø#`¬  €¥€¿ÿüÀ @€¤*¿ÿÐЀ¦à€(ð¿ì¿ìÚ`‚@ Ø¿ì‚@ Ö ƒ(`”@ ˜ € `"€ ˜ Â"À Â"àÚ Ú"à–à ˜ €£ *¿ÿõš"€ ›;`ƒ+`‚@ ™(`‚@ ›(`‚@ ™(`‚@ Ø¿ìÚ š@Ú# ð¿ìÿûgèÂ$€¢`¤   €¤@*¿ÿû¿à²@º@€§@*¿ÿ7¶@¿ÿvØ¿ä¢ ¤Â€@‹«Ð`¢@¤ €¤€¿ÿú¢`Ø¿ì’@‹«Ð¢´¤º ,€¸ ú,@¢`ø,@¢`€Ò`@Œ €@‹‘Ð`¤ €¤€¿ÿó¢@À,@¿ÿ™ô `Çàèã¿à Â`‚€ `€+@‹ê’€¤ €˜ Ð`Ò ž ƒ+ ›+À ”@˜ €Š € –@ ˜‚@€Š@ €Â"à˜Â ‚@Â"à€£ ¿ÿñƒ+ ‚@Â& @‹Ý“è’`” €@‹p ’`˜ ˜@‹l” €Ò`¿ÿõÒ& Çàè㿵.`´ Ð@‹X’°@‹R“è Ãà®Àã¿/Šÿÿü®á<’ (@‹K‚  °Â" à"À" $À" ÿÿæ’ ‚cdÚÀÐ& Ú& Çàèã¿@‹­ò" Çà‘è € `€Â" ÔØ  š —+ €£€ ˜  Â@ Ú" € `¿ÿöÂ" Â@€Â"  Ãàã¿€¦ ’ €°`@‹°ò&À& À& À& @‹†è€¢`€€¢ Â Ú`Ú"@€€¢à Ú` Ú"€€Â Ú`Ú"ÀÃàÂ@”€ ÿ€ ˜€ `€– ƒ* Ú À‚@@ ˜ƒ?ÿ¿ÿû–à0€ €€ `€ – šƒ* ‚@@ –àÚ À€£`¿ÿûƒ* ‚"À Â"@Ãàã¿Â ô' LŸÀ@’ L ‚@ƒ(`Ú ¤ô@ €¦ €°@€â L°ô€€¦ €€ Â € @2¿ÿú°Â  ’€ @¿ÿô”@‹2Р€¢ 2¿ÿð°€ š@ € ‚`?ÿ€“@€ô $€¦ "€Ð€Â€Â$ $Ú Là& Ú&   À&€‚`Â$ ò& ö& €ô&@Šš’ ¿ÿó´Çàèã¿Ú`“+`Â`’@ ’@“*`@ŠŒ’`,Ö`Ö" Â`¤ (ƒ(`ä" Ú`Ø` ‚@ð"à`Ú" Ø" À" $¢`,° ² ƒ. Þ€£à€‚€’@Ò @” ’`ÂàÚàØà ÖàÞÀÂ"ðÚ"ôØ"øÖ"ü²`€£à¿ÿò‚ Ö ° €¢À¿ÿçÀ @Çà‘èã¿’”ÿÿ– Ѐ¢ €° ð Çàèã¿’”ÿÿt–Ø€£ €)€¦à"€ ÂÂ Ú € @ €"ö# ‚@ ´`’ÿþß¶’@е € €¢ Âà‚@ƒ(`ÚÀÚ"ÀØ @Š¥Ø&À€¢ 2¿ÿ÷Ö ô& € ö& Â"Ú $ Ú#‚ÿÂ& Ø& $ÇàèÃàÐ ã¿ð' D@Š’ (  Â" Ú Ö`ؠ D°Ú" Â"À" $€£ €¬ ˜  Ú`‚@ € @ (€{Ø& ‚ ‚`Â& ÿþ¢Ò Ú Â`šƒ@€xÐ&   º Ú ä ž ƒ/` ¤`"€º`Ð ’Ô` ‚ €™(` š€ Â"@Ú" Â` Ø`Ö`â@Â#` Ø#`Ö#`Ô#`  žà€¤`¿ÿí’`Ú º`€£@¿ÿâƒ/`ƒ, ‚@«(`º Ø`Ú`ƒ/`â@€¤`€Q¨Â`Ú ‚@ §(` à@€¤ "€ ˜€€ä` à€¤ €˜€ô €¦€¿ÿú”Ð @Š-Ò`€¢ 2¿ÿõà€¦à€2”РDÒ`Ö`Ø ŸÆÀšÐ$ €¤ 2€â@˜€Â` Ú`Â# Ô Â€Ú# Â%Ú š`Â`Ö`Ø"€Â# Ö# Ú& ª`¨ â@€¤`2¿ÿÇÂ`€Ø`ÿþ,Ò Ú Â`šƒ@¿ÿŒÐ& “+`’@ “*`@‰~РD¿ÿ…¬Â`¿ÿÖÂ$ º`€£:¿ÿªÚ`Çàè– ˜ ‚À@‰ïž@ÃàÐÃà®Àã¿/ˆÿÿû®ᔂ``ÂÀú@€§@€À @Çà‘è ã¿/ˆÿÿí®á\‚``àÀÚ€£`€ ’ @‰MÐ$’‚`dšc@ÔÀÖÀ @‰Æ¢  ƒ, Ð@@’ @‰Â”€¢ €  €¤ ¿ÿ÷ƒ, Çà‘èã¿/ˆÿÿÆ®àÀ’ @‰¶‘6 ‚``ÚÀØ@‘* à@‰±€¢ € à‚@Â&@‰«€¢ €@‰©Çà‘èã¿/ˆÿÿ§®àD’ @‰—‘6 ‚``ÚÀØ@‘* à@‰’€¢ € ‚ @Â&@‰€¢ €@‰‹Çàèã¿/‡ÿÿˆ®ãÈ’ @‰x‘6 ‚``ÚÀØ@‘* à@‰s€¢ €ò&@‰p€¢ €@‰nÇàè’ ‚À@‰jž@ã¿/‡ÿÿf®ã@’ @‰V‘6 ‚``ÚÀØ@‘* à@‰Q€¢ € ‚ÿÂ&ð@‰K€¢ €@‰IÇàèã¿/‡ÿÿG®âÄ’ @‰7‘6 ‚``ÚÀØ@‘* à@‰2€¢ ¢€ð€¦€@‰+€¢ €0€ò$@0¿ÿù@‰&Çàèã¿/‡ÿÿ$®â8’ @‰‘6 ‚``ÚÀØ@‘* à@‰€¢ ¢€ ðò$@@‰ €¢ €@‰Çàèã¿/‡ÿÿ®áÀ’ @ˆö‘6 ‚``ÚÀØ@‘* à@ˆñ€¢ ¢€ ð€¦"€ò$@@ˆê€¢ €@ˆèÇàèÐÃàã¿@ˆL’ À* À* À* À* À* À* À* À* À* À* Ð&ô"ò" Çà‘è Â`Â"Ãà ã¿Â  `€ ° @ˆÊD€¢ €°a†À$ ° ÇàèÃà®Àã¿/‡ÿÿü®à@ˆ¼’! ’ @ˆ²À*À* À* À* À* À* À* À* À* À* À* À* ‚`lšc@’€¤ € ò&à&`ô&@À&`ÔÀ@ˆ„ÖÀ €° @ˆ›Ð&`°b3Çàèã¿/†ÿÿË®ãÌ‚`l²ôÀð@ˆŽèã¿’@ˆŒÐ`€¢ €Ð&€° @ˆ~Ð&`°b:Çàèã¿Â  1/†ÿÿ¬®ãP’”€ `€° h€ðÀ@‡Ãð Çàèã¿h˜ š Ø?¿ÈØ?¿Ð‚`Ø?¿àØ?¿ØÀ'¿èÀ7¿ÊÀ'¿Ì€ `€À'¿Ð‚ Â7¿È‚`€ š`?ÿ `¢¿È’”@ˆUÐ ²’ €€¦ÿ@‡·Â€ `¿ÿõ€¦ÿ€ ° @‡¯° € ` €@‡©ðÇàèã¿h˜ š Ø?¿ÈØ?¿Ð‚ Ø?¿àÂ7¿ÈØ?¿ØÀ'¿èÀ7¿ÊÀ'¿ÌÀ'¿Ð¢¿È’ ”@ˆ-Ð  ’ €€¤?ÿ@‡Â€ `¿ÿõ€¤?ÿ€° @‡‡ðÇàèã¿Â 8€ `€   0€ `€Ò ,Ô 0@ˆÐ €¢?ÿ2€ Ô @@‡r€ `"¿ÿöÒ ,@‡l€à–‚À™: ”B€ Ô> @À& 0Çà‘èã¿Ú€Â 8€ `¤ ¦ €P¨Â (€ ÿ€ª Â.@¦„ÿÿ‚?ÿ¤D¿ÿÂ& (¨`€”€€‚ ‚ € `€5‚%Ú 0Ð 4€£@:€Ð ‚"   €¤€€¢€¤€€€¤À ¢Ò ,’@ @‡0” 0‚@¦¤À¤d€Â& 0¿ÿà¨8¿ÿõÒ ,¿ÿñ Ò ,@‡Ç€¢ €€¢?ÿ€ Ø @šƒ@˜C Ø> @Ð& 4À& 0¿ÿØš @‡ê‚%€ š@?ÿÂ&€€ª @ ‚ DÂ& ¿ÿ÷ªa~@‡­ª’ €À& 0À& 8¿ÿ«À& 4Çà‘èã¿Â€€ `€ À&€€q  € `2€1Ð H (€ ÿ€ ¢ Â.@€‚ÿÂ&€š?ÿÚ& (€€ `²`€0¢ ’Ô€@‡‚Ð €¢?ÿ€°@†Þ€ `¿ÿö’@†ØÂ€ ` "€'Ú @†Ò€ ` "€!Ú €¦ €=€¦ €7‚@¿ÿÍÂ&€€¢ €’”ÿÿ_°Ð H€¢ € €0¿ÿ½â&€@‡3¿ÿò’@‡2€& €“@¿ÿà€¦ ’ @‡L” €¢ €’€â&€Ô€@‡>Ð €¢?ÿ¿ÿа@†šÂ€ `¿ÿö’¿ÿÉ€¦ @†’â&€€Ðâ&€‚ DÂ$ a~Çà‘èã¿Â € `€C’Ð H€¢ €[ô€Â 8€ `€€¦ Â 0–•8` 4Ø @š£@˜c šƒ@ ˜C  @€ @ "€X D’ ” Ð @‡– ‚ Â& 8À& 4À& 0€¦ €B¢ €% $€€¤€’ Ð ,@†R”´&€ƒ> € Ú 0‚ @š@˜`?ÿƒ0`€‹Ú& 0€+²@ 0€ @¿ÿé@†è¢¿ÿä 0Ô€@†ÜÐ €¢?ÿ€Y¢@†;€ `¿ÿö’@†5€ ` "€Ú @†/€ ` "€Ú @†)À&€€EÐ@†£¿ÿ¦Â 8Ð H€¢ €€;@†œ€7€ @ ¿ÿª’ ¿ÿ­‚  €“@¿ÿç’ @†²” €¢ €’€&À&€Ô€@†¡Ð €¢?ÿ€¢@†Â€ `¿ÿö’@…ú€ ` "€ €@…ô€ ` ¿ÿÇ€ƒ0`Â&€’Ô€@†…Ð €¢?ÿ¿ÿæ¢â&€ Çà‘èã¿Â € `€8 Ð H€¢ € @†y°’ "€Â 8Ð H€¢ €:0€2@†K@†m°’ 2¿ÿ÷Ð H 8€ `2€Ð H 0–•8` 4Ø @š£@˜c šƒ@ ˜C  @€ @ €’  D€ @ "€À$ 4” Ð @†W– À$ 4À$ 0Ð H€¢ "€Ð @†(Ð ’@†N”€¢ €° €Ð&À@†0€@…™À&ÀðÇàè㿈‚ ð/ DÂ'¿ì’ D@†<”¿ìÇà‘è ÿÐ"`(Ãà 㿈‚ ’Â'¿ì@†2”¿ìÇà‘èã¿ @…c°²´@†*—è ã¿Â € `€  Ð H€¢ € @†  Â H`"€°@…ä°0€ @…Þ@† Â H`¿ÿö°Çàè㿈‚€¦`²ÿ  ¤€g‚   € `€+€¦Ð H€¢ €K 8€ `€K€¦€8¢ €Ú 0ÿýÚâ'¿ì ’ 2€2РHÂN€ ` €-° €¦:€+РHÚ 0 4’€£@¿ÿì (€ ÿ¿ÿë˜`Ø& 0 ,Ú @¿ÿëÚ.€€¦¢ â'¿ì’@…Ê”¿ì ’ € €¦ÂN€ ` €° €¦*¿ÿôâ'¿ì€¦À.€$‚ €"‚РH€¢ ¿ÿù€¦@…„€¦À.€‚ €‚@…y¿ÿ¶Â 8@…™ ’ "€ À& 8РH€¢ "€ ‚@…o€‚À& 0¿ÿ©À& 4Çà‘èã¿Ò Ô”"€ Ð @…”– €¢ €‚?ÿ Â&‚ Çà‘èÃà®Àã¿€/ƒÿÿü®ãô' Lö' Pø' Tú' X@…ƒ ¿à˜‚š`p’– L€¢ ”Ð'¿ì€°?ÿÐ'¿àÂ'¿äØ'¿è@…ÐÀ °’ €ÿÿÐ@…mпìÇàèã¿€À7¿è’ô/¿è@„Ø Ð'¿ä€¢ €² ƒ. €µ8`Ð'¿ä€¢ € ²`пä@„´’€¢ 2¿ÿø À'¿ä€¢ ¿ÿø²`’@„µ” ´²¿è’@…H”¿ä¶€¦à€ÂNÀ€ `"¿ÿ÷@„«  ö"’@…9”¿ä¶€¦à¿ÿóô&Çà‘è ã¿Â`¨€ `¦ €<° ä`€¤ €*¢ à`ƒ,`@„NТ`€¤€¿ÿû¦À€¤à"€À%€¤`€‚@¦ÿ@„I’àä`Ð%°€¤ €¢ Â`›,`à@ @„5¶”’ € ’¢`€¤€4¿ÿöÂ`À.€° ¿ÿþÀ%€¤`€ô.° @„3ä`¢`°¿ÿ€Çàèã¿Â 8€ ` €)¢Ø @ 4š£@” ˜c š¤@ ˜d €£ €€£ €Ð ’”@„Ö €¢?ÿ€€¢ÿà> @À& 4À& 0€ €€£@¿ÿüÚ& 08¿ÿðÐ ¿ÿøÚ& 02¿ÿôà> @@„€ Ð@„¥€¢ €À& 4À& 8¿ÿÒÀ& 0Çà‘èã¿0 € `€9À& Ð H€¢ €  €¦`"€  0€¦`€D€¦`€I¿Â 0š™8`Ô @ 4–¢À”b –‚À ”B€ Ð H€¢ €Ô>€€E@„Y€A@„R€¦`¿ÿæÂ 0–•8`Ø @ 4š£@˜c šƒ@ ˜C Ѐšƒ@ ˜C’ ” ÿÿ¿ÿ× Ð –Ò€@„aÔ €¢?ÿ€€¢ÿÐ>€€ 2¿ÿþÐ>€?ÿÿ?ÿÿ˜#ÿšcÿ@ƒ«Ø>€€Ð€¦`2¿ÿÀ 0Ò€¿ÿâÔ ’!@„_” ’ 2¿ÿ¶Â 0Ԁؿ¸šƒ@ ¿ÿÔ˜C Çà‘è㿈’”ò'¿èô'¿ì@„QÐ €¢?ÿ’ ”¿è€@„M0€@ƒ„ÐÇà‘èã¿@„GÐ €¢ €° @ƒyðÇàèÃà®Àã¿/‚ÿÿü®áˆ@„:¤€¢ ’ € @ƒXÐ& ô"’@ƒŽâÐ$ ’! ä$`@ƒL’ @ƒF”! ØÐ$` ‚`tšc@’ ÔÀÖÀ @ƒÂЀ° @ƒIðÇàèã¿/‚ÿÿÍ®àÌ‚`t²ôÀð@ƒÎè㻈РҠ @„”»ì€¢ € €¢ Ú  »쀣@€€¢  €¢ €À& P€bÀ& ¿ÿú€¢ ¿ÿüÀ& PÒ  Â@€ ˜@ ‚8€ š@ €‹ €€².@€²®@€ »ðÖ@€  ˜@ ‚8 € š@ €€‹ €Â&Ö& Â& Ѐ@ƒ0’`  €‚@ Â& Ð& TD€¦`€5ax€3 ¿ÿòÀ& Ò ”$@‚Ý@‚Ø‚¿ð˜@ÚK;ÿ€£`/€š €£cÿ€”$‚ /Â+< ”$”"€Ò  ’` @‚É’”`@ƒ«Ö€€¦`€À& PD€ ‚ax˜`?ÿ‚€ š`?ÿ€“ ¿ÿ»Ò   ¿ÿŲ.@¿ÿ¶Ò  Çà‘èã¿Ð @ƒ–’ Çà‘è ã¿@ƒ”’@ƒ”€¢ €° @‚´ðÇàèã¿’”@ƒ‰ €¢ €?° €¢ €<°@‚‹€¢ €˜‚ÚHÿ€£`/€ €¢ ‚?ÿ€‚ÂHÿ€ `/"¿ÿü‚?ÿ€¢ €‚”@‚®’‚@‚r”‚?ÿ € ‚8 ÂL € `/€‚8 ”‚¿ÿ<¿ÿüÂL ‚8 ƒ8`” €@‚›’ÂJ€ `€ ° ’@ƒT”€¢ 2€°’@ƒJ”°Çàèã¿@ƒJ€¢ €° @‚aðÇà蚀¢`€b(Â`Â#@ Ãàã¿Â’ € `€ @‚=’ @‚7” ‚Ð&ô"ò `Çà‘è Ãà®À㿈/ÿÿü®ༀ¦ €´!G@ƒ‚”–’¿ì€ ÿ€Â'¿ì@ƒà’@‚VšcP˜#\€Ž¨€Ð$ € ° Â’ÔÀ ÖÀ @‚Ð@€° @‚ðÇàèÃà®Àã¿/€ÿÿü®ãü€¦à€?¤@‚õÐ`€¢?ÿ€D¢€¦à€J’ Pà€@‚+Ò`Ð$ Â` à€€ `€Â$ Â`$Ú`(Â$ $Ú$ (€¦à€C° Ö` @‚*ÀšcP˜#\Â$ ’ÔÀ ÖÀ @‚YÐ0€4 H€ `2€Â Â`H€ `€ H € `"¿ÿâÂ`$ ,€ `2¿ÿÞÂ`$@ÁÐ$ ,¿ÿ×à€Â€ `€° Ò`@‚¶Ð`€¢?ÿ¿ÿÀ¢@Á€ð’ @‚4”¿ÿáà€@©’ @£” P â" Ð$€¿ÿ±ô"Çàè– ‚Àÿÿ›ž@ã¿ð' D’” Dÿÿ“– Çà‘èã¿/€ÿÿ‹®â8@Š’ PÐ&Ø@Ø:Ô`Ô: Ø`Ø: Ô`Ô: Ø` Ø: Ô`(Ô: (Ø`0Ø: 0Ô`8Ô: 8Ø`@Ø: @Ô`HÔ: HàÂ` € `€ ô$Ò`€¢`2€àÂ` €ˆh€7!ÂØ` @€‹ €‚c@‚c\ÖÀ!‚#PÒ@ÜÔÀ€&š#P@¿ÿèÐ$ @OÂ`8€ `€Ð$ ,ÂÐ`,Ò`,Ô`4@NÂ`H€ `"¿ÿÔÒ`Ð’ ”@à H@‚<Ð`H¿ÿËÒ`ÂÐ`,Ò`,¿ÿîÔ`0š#P‚?ÿÂ&`’ÔÀ @‚1Ð@Çà‘è Ãà®À㿈/€ÿÿû®à‚`xÔÀ’– @†’–” @‚ ¿ì€¢ € !€ ° @‚ҿ쀢 €° @‚п쀢 ¿ÿö° Çàèã¿h/€ÿÿÙ®à‚`|š`€˜ „–àˆÐÀÞÀ ÂÀ ÚÀ ” Œ’`ØÀ ÖÀ Ð'¿àÞ'¿äÂ'¿èÚ'¿ÐØ'¿ÔÖ'¿Ø¤ ¦¿ð¢¿ÐÒ@”@õ¿Ì¤ €¢ € ¢`à¿Ì” € €¤ @€Ñ‚?ÿ’€ cþ€*€¤ (¿ÿíÒ@¢¤  ÿðÐÿÿ¦’¤ €¢ €(  €¤ ¿ÿø¢`‚`”àÀ’ÿÿ™€¢ €’¿È’ @Ì”€¢ €Ð¿Èÿÿ’€¢ 2€ Ò¿È€°b.ÿÿ…€¢ ¿ÿÖ€¤ Ò¿Ì@€áÐ&€° ¿ÿûÒðÇàèã» »ð’$@°€¢ ’€ @€¢° N€ `"€ @€œ€ð@€ÅÐ&° Çàèã¿@œ€¢ €° @€ŒðÇàèÃà®Àã¿Â@ÚH@ /ÿÿø®áÄ€£`/€°b5‚`˜@€¤ÒÀÐ$Ø@š ‚ ˜ Ú&@ÚH`€£`/¿ÿûš ° Çàè㿈/ÿÿß®á`€¦ €æºÂN€€ `/€Å€Žà€z€¦`"€‚¿ì@€A¦@€>’ €¢d€ð° N@€@ÂN€€ `/€Á¤ÂN@€ `/€€Žà€ã°b5’@€:”€¤à€ ¨‚€ÚHÿ€£`/€‚ /Â,€¨à¢Â€ƒ(`€ `€5€¥+ª` -¬ ¤°ƒ8`€ ˜@ ‚`/€ š@ €‹ € ¸¸ ÂO€ ˜@ ‚`/€ š@ €‹ 2¿ÿù¸  §"€ÂO€¤ €C€¤ "€GÂN€ÂO€  @€’@€”¢@ÂO€ `€Â¸ ƒ(`€ `¿ÿÕ´€¥‚@ €ŽÀ€À,€’@”€¢ €°b7‚@ÚHÿ€£`/"€ä'@ÐL€€¢ €h€¢ /ä'@€„° €UÂN@€ `/€~°b4€¦`¿ÿƒ¿ì’@€Ý”€¢ ¿ÿ|ò¿ì@Ó€pðÂN€€ `.¿ÿÀÂO¿ÿÇ€ `€ `.2¿ÿ»ÂOÂN € `.2¿ÿ·ÂO€¤`€P€¤`€€Žà€¤`€T(€A¢„ÿ€?üÒÀ@€!” €¢ 2€9¢„ÿ€Žà€L” ÂO€ ”B¿ÿ€@£ÒÀÂO€ `"€¢`¢`€¤@:¿ÿœÂO€Žà€;¨¿ÿ—ÂO€Žà€7°b7€Žà€4°b4€¦`¿ÿ9€Žà2¿ÿ·¿ì‚`œ¿ÿ3òÀ¨ ´ ÂN€€ `/"¿ÿþ´ ‚ /Â,€¿ÿO¢ "¿ÿ›ä'@0€‚`œ¿ÿôÀ¿ÿׂ€ÂHÿ€ `/2¿ÿü¢„ÿ¿ÿÒ€¤@ÂL€€ `/2¿ÿö¢„ÿ€Žà€ ¨ ¿ÿeÂOÒÀ@Ó” ¿ÿ³€¢ °b7Çàè– ” :‚À@€mž@– ” :‚À@€jž@‚ Â"Ãà ã¿â  ˜š€¤`€)° €¦`€Ø<  $€ `€ ” ’ @ØÐ ” €Ð @Ô’ €¢?ÿ€â$ $€°  $€ `¿ÿü” ’ @ÇÐ ” ?Ð @Ã’ €¢?ÿ€‚ ¿ÿðÂ$ $@#ðÇàè š€ `€ Ø`Ø:@ ÃàÃà®Àã¿/~ÿÿü®à’ P@~þ’ @~ø” Pš?ÿ‚ Ú" (Â" À" ?ÿÿ?ÿÿÂ@˜#ÿšcÿ–ãPžã@’ö"Ð&Ø: Â" €¦ €À" $‚(Â" €¦ À" €À" HÔÀ ÖÀ@_ÐÇà‘è – ” ‚À@úž@㿈/}ÿÿÊ®ã@@ö¿è%?ÿÿ'?ÿÿ€¢?ÿª ¬ ¤£ÿ¦ãÿ)@’ P€9@~À” P@~º’ ¿èš?ÿÂ" Ú" (Ð&À" Hô"ê" À" À" ì" $ä: è" ’ P@~­’ @~§” P‚cPàÀ¿ìÐ&@šc@ØâÀ Â" ô"ê" ì" $è" ä: À" HÀ" À" ’ Д@–Â@’”–@Ð@€° @~˜ðÇàèã¿@j’@¬€¢?ÿ€° @~ŠðÇàèã¿@¤Ð €¢ €  Ú ‚?ÿ€‹a€Â&  H`€0€@˜Ð  H`€ @b€ @~kàÇà‘èã¿Â € `€  ÿÿÛ€¢ "€0€@€¿ÿø Çà‘è‚ÀÿÿΞ@Ãà®À㿈/}ÿÿü®àø€Ž €T  €Ž €VšŽ €V  ‚ @€ `€€Ž €£`€u €Ž 2€  €Ž 2€ "¢Ž €€ €Ž¢€b¿ì’€¦ïÿ€”!¶@”’@M ’ €O’ P@~’ @~ ” P¶à" Ð&ø"ô" ’@~A€ Ð&àš@ ö‚ Â&à$€£`€-Ú&à À&à,?ÿÿ?ÿÿ˜#ÿšcÿØ>à‚?ÿ˜ š Â&à(Ø>à@€Ž¨À&àÀ&àÀ&à0À&à4€À&à8€/  €Ž €+  šŽ ¿ÿ¯‚ @‚Ž @¿ÿ² !¿ÿª $‚cPšc\’ÔÀÖÀ @~WÐÀ€ @}ÎÐ&à,öÂà €ˆb¿ÿÐ?ÿÿ¿ì¿ÿÍÂ&àH@}ҀВ @~E”€¢ ¿ÿ’Çà‘èã¿/|ÿÿs®âÔ‚cP²ôÀð@~Pèã¿@~Ü€¢ €° @}´ðÇàèã¿@~Ù’€¢ €° @}¨ðÇàèÂ`Â"Ãà ã¿’ P@}Ž’ @}ˆ” P š?ÿ‚ €Ú$ (€ À$ ?ÿÿ?ÿÿÖ@‚@ ´¨˜#ÿšcÿ€ `Ø< Ö$ ô$ à&ö$À$ $€Â$ € @}oÂÚ` Ð$ ,”’ €‹b¿ÿö`H@}쀢 "€ Çà‘è D€ `€a~ Ãà㿈‚ Â'¿ì–’¿ì@~I” Çà‘è㿈‚ Â'¿ì–’¿ì@~?” Çà‘è㿈À'¿ì–’¿ì@~6” Çà‘èã¿Â /|ÿþô®àØ@€ˆh€° –@ šcP˜#@€ˆ@ €’€° Ö" ÔÀ ÖÀ @~`а Çàèã¿Ú /|ÿþØ®àh€‹h€° @”+@˜#P–ã\€‹@€’€° Ô" ÔÀ ÖÀ @~Dа ÇàèÃàÐã¿ü‚apÂ& @~<Ð`<Ø`š Ð& €£@€#– €£@€(€£@€– €£@– €<‚ ‚@ € š` – `z€–à€£@€ – €£@€0 €£@¿ÿî– €£@¿ÿë– Â` Ø`8Â& Ø> (Â`$Ú`Â& Ú& Â@Â& Ú`Ö& Ú& Ò`@@~ 8Ð`D@|Ú’#èØ 8’šƒ@ ‘: ˜CØ> 8Ò`H@}ú @Ð`L@|Î’#èØ @’šƒ@ ‘: ˜CØ> @Ò`P@}î H’#è@|ÂÐ`T’Ø Hšƒ@ ‘: ˜CØ> HÔ``ƒ*  “2à˜@ ›*à ‚bÂ& Ø> 0Çàèã¾øÂ   ¿X€ `€@}?€¢ €’@}ÏР€¢ ’”€@|€ Ðڠ€Â&ÿÿ{Ú& P D€®@€ax Çà‘èã¾øÂ   ¿X€ `€@}Ÿ€¢ €’@}«Ð €¢ ’”€@|l€ Ðڠ€Â&ÿÿWÚ& P D€®@€ax Çà‘èã¿@}2’@}’€¢?ÿ€° @|RðÇàèã¾ø¢Ž € ¿X@}†’€¢ €ö&ò& P’ÿÿ1”€¤`2€´¿þ D€®€€ °ax€ ° @}s’€¢ "¿ÿíö&@|-ðÇàèã¿ –” @’@|ö¿Д –â@€¢ €%¶à¿È@|,’Ò'¿€Д –â@@|"’Ò'¿„Д –â@@|’Ò'¿ˆД –â@@|’Ò'¿Œ@}E’¿€€¢?ÿ€ @{üÐÇà‘èã¿0–€Ž €" ¿’@|€¢ €€Ž €€Ž €Ž`€Â¿˜‚}ÝÂ'¿˜€Ž €€Ž`€Â¿˜‚aÂ'¿˜@}"Ò¿˜0€‚~î¿ÿûÂ'¿˜‚b"¿ÿðÂ'¿˜Çà‘èã» –/ÿ’»Œ” @}˜€¢ €M–€¦À€,¿’”˜@} »ˆ°’ €:D´a~¶»²$’ò'»„”»„@|eлŒ€ ˜@ š€  ‚@ °’€‹€!– лˆ@|[Ô»„¸’ €$€¦¿ÿì’@|ŸÐ»Œ°’ 2€Ð»ˆ@|šÐ»ˆ0€@|äÔ»ŒD€ šax‚@ š €  ˜@ €ˆ@ € °¿ÿÉÖ¿˜@|ˆÐ»ŒÐ»ˆ@|…€ ¿ÿüлŒ@|лŒ@|}лˆÇà‘è˜ – ” ‚Àÿÿ¥ž@˜ – ” ‚Àÿÿžž@Â`Â"Ãà ÃàÐ  š€Š€ (€‹d2€!€‹b2€ €€‹a2€ @€‹@2€$€‹`@2€ €‹` 2€ €‹`2€ €‹@2€"€‹`2€ €‹`2€ €‹`2€ Ãàš€Š(€  €‹a2€$€‹`€2€"€‹`@2€!€‹d€€‹` 2€ @€‹`2€ €‹`2€ €‹b€€‹`2€ €‹`2€ €‹`2€ ÃàÔ€‚À@|^ž@‚ ’ ” Ö@‚À@|Xž@㿈  ô'¿ì’@{®”¿ì¿쀠˜`?ÿ´&€€ š@ €‹  ¿ÿó²@€¦à€à&ÀÇà‘è㿈  ô'¿ì’@{””¿ì¿쀠˜`?ÿ´&€€ š@ €‹  ¿ÿó²@€¦à€à&ÀÇà‘è㿈À'¿ì€¦ ¢   € ƒ, š@Ò@Ô`@{|–¿ì  €¤˜@ € ‚`?ÿڿ쀋¿ÿò¢@ €¦à€â&ÀÇà‘è ‚À@| ž@Ãà®Àã¿/yÿÿü®‒ H@zœ ò"’ @{ÿ ‚`¨šc@€¢ €’ÐÔÀ@{ÖÀ à& Çà‘è ‚À@{ïž@ã¿@{î €¢ €Da‰Çà‘è ‚À@{çž@ã¿@{æ €¢ €Da‰Çà‘è ‚À@{ßž@ã¿/yÿÿ¿®ጂ`¨²ôÀð@zþèÃàÐ ‚À@{Ïž@Ãà®À㿈/yÿÿü®á<@zK’ ’ @zE”  ô$¿ì’ €Ž`€ ´@{¼°’ €¦ €$¿ì0€@{· °‚`¬šc@€¦ €’ÔÀÖÀ @z¯Ð€à&€@{ª° €¦ €’¿ì@{¦ 0€@{°@{ ¿ì¿ÿåÇàè ‚À@{›ž@ã¿@{š ‚’ €° € `€°D‚a‰°Çàè ‚À@{Žž@ã¿/xÿÿ§®ãè‚`¬²ôÀð@z•èÃàÐ ‚À@{~ž@Ãà®Àã¿/xÿÿü®㘒 @yâ ò"’ @{r ‚`°šc@€¢ €’ÐÔÀ@zVÖÀ à& Çà‘è ’`‚À@{až@㿈@{`¢‚@ BД –â@@yÞ’Ò'¿èД –â@@yÔ’›*`š£@ —+`–‚À ›*à Ú'¿ì’`@{J”¿èD€¢ ‘€°aw°Çàè ‚À@{Bž@ ‚À@{@ž@ã¿/xÿÿ­®â\‚`°²ôÀð@z2èÃàÐÃà®Àã¿/xÿÿû®â‚cD²ôÀð@z"èDÃà!‡Ãà ã¿@{Ð €¢ €° @yðÇàèã¿p/xÿÿà®á°’ P@yhÐ@{Ð& Р¢ ” @y–â@¦ Ð’” @yw–â@‚`Ș ¢¿ÐÔÀ–’ @yt”!¤– @zõ’!€¢?ÿ€ @zóà& ’@y~ÐÐ& ‚cDšc@’ÐÔÀ@y¼ÖÀ €° @yC”!¤– ’!€ `N€@y:€ð@zÑÀ/¿Ý€¢?ÿ¿ÿÞ 0¿ÿ÷Çàèã¿@zÎÐ €¢ €‚ Â& €° @y%ðÇàèã¿À& @zÂÐ €¢ €° @yðÇàè㿈Ú Â`’ ” € ÿ€–¿ìÀ'¿ì@z²Ð`Çà‘è 㿈/wÿÿk®ãÜ’ P@xóРÐ& ’ ”#€@z¦ Ð$ Ú Â`’ ” € `€–¿ì‚ Â'¿ì@z—Ð`‚cDšc@€¢ € ’À& ÐÔÀ@yYÖÀ €° @xààÿÿɰÇàèã¿!  Ü/wÿÿ:®ã Ð`ÒÀ@z|” €¢ € ‚ @xÊ€ `"¿ÿõ @xÄ€ðÂ& ° Çàèã¿!À&   ¸/wÿÿ®â¤Â Ð`ÒÀ@z_” €¢ 6€ ° @x­Â€ `"¿ÿõ @x§ðÇàèã¿Â € `€€ ÿ"€Ð @zÐ €¢ €Ð @zD’ €¢ €  @x€Ð@z Ð €¢ "¿ÿë Çà‘è㿈/wÿþç®áÌ‚`ÌÐÀ@y¦’  €¢ €B¢ ’ ” – ˜@z%š €¢?ÿ€6Ð& @y‚?ÿÂ& @y׿찒 "€¿ìÿÿ€4@z’ °’ €*¿ì@z’ @°’ €$¿ì@z’ °’ €Ð`@y¿’¿ì°’ €À$` @y¿¿ì°’ ¿ÿá‚cDšc@Ð@’ÔÀ@x²ÖÀ €  @yY@x7€Ðÿÿ‘@y¨¿ìÇà‘èã¿@y¥Ð €¢ €‚ Â& Çà‘èã¿À& @y¡Ð Çà‘èã¿/wÿþ€®à0’–`€‚`Ð@xBÐ’Ð&  ” F–&D@yXØ€¢ €À& @y+Ð ‚cDšc@Ð’ÔÀ@xtÖÀ €  ÒÀ@x'Ð’Ð& ” FÖ@xí ¿ÿ瀢 Çà‘èã¿!À&   Ä/vÿþO®ãl Ð`’ @x}ÔÀ€¢ 6€ ° @w߀ `"¿ÿõ @wÙðÇàèã¿Â € `€ð @xÍèÿÿÞ€¢ "¿ÿûð Çà‘èã¿!  ¼/vÿþ'®âÌ Ð`’ @xUÔÀ€¢ € ‚ @w·Â€ `"¿ÿõ @w±€ðÂ& ° Çàèã¿/vÿþ ®â`‚`¼9ôÀ;¸ ÜòÀº`Ä‚?ÿ7ÞÀ¶à¸Â6`ðÀ;‚ ú6 ú6`Â6 º ‚ ú6€À& Â3ÀÀ#àÀ6@À6À6 À& À& À3àÀ#àÀ#àÇàèã¿/vÿýæ®áÈžD€¦`€°a‡v‚a@¸%À».`ÂÀ@‚`ÀúÀú#à€° ¿ÿû‚`à¿ÿø‚`´D€°a‡¿ÿò‚`ØÇàèÿÿÿ°ÿÿÿàÿÿÿÔÿÿÿìÿÿÿÈÿÿÿ°Â ÃàÐ`ã¿p ¿Ð/vÿý¸®á’ ÿÿÍ1€¢ ° Ô€€ÐÀ¿Ø@yÂ'¿ÔÇà‘èã¿’ @w0” @w*’  ’ÿÿ¶ö"‚€ `€’`€à&€  Ú Â`ŸÀ@Ú$ ‚’ ¿ÿö`à& Çà‘èã¿ÂÚ`Ø`’ŸÃ”Çà‘èã¿Â Ú`ŸÃ@Çà‘èã¿Â Ú` ŸÃ@Çà‘èã¿Â Ú`ŸÃ@Çà‘èã¿Â Ú`ŸÃ@Çà‘èã¿/uÿý]®㤂`Àú žøÀ€§@€° ðàÇàèÃàÐÚ`Ø`Â`Â" Ø"Ãà ã¿ €¦ €°b"Â’ € `€ `–’@w¾” ÚÂ`Â#`€ ° @v¾’ @v¸” ‚Ð$¿ÿïô"Çàèã¿@xƒÐ  € `€  €¤ €@w«°0€@w¨ °ÇàèÃà®Àã¿/uÿÿü®ât’ @v™ö" ’”–@xf €¢ €’  Ú`Â@€ˆ`€ À$ ‚`äšc@ÐÔÀÖÀ @w’à&€  @wÔ€¢ ¿ÿòð @xEèÇà‘èÐ ‚À@xDž@ã¿Â `€ @vò°’ € @x:Ð °’ €Â `€@vçÇàèã¿Â `€ @x+°’ € @x)Ð °’ €Â `€@vÐÇàèã¿@xÐ Â € `€  €¤ €@v°0€@v¿ °ÇàèÂ`Ú@Ø`Â" Ú"Ø" Ãà ã¿/uÿÿ~®à|‚`ä²ôÀð@vºèÃàÐã¿À&@v× h¢ ’ ” h€¢ €° @v° à$@À$ Çàèã¿ €¢ @vÇÂ$ Ð €¢ 2¿ÿü¢„ÿ¿ÿû  @v¾èÃàÒ" ÃàÐ ÃàÒ" ÃàÐ ã¿@wÏ ’ €‚oÿ@vq‚oÿ³0` Ú Â š@š#@€£@€ò& ò& °” €@veèÚ& °” ¿ÿüÇàèã¿‚`²@²p‚cÿ€¦@(€3ƒ6` ¢ÿÒ€¢@*€?Ð ä €¤ €_›,`š@Â`€ ˜`?ÿ€¤@ ‚@ ž €‹”`€d–” Ø€€  š`?ÿ–à€¢À ‚@ €‹@2¿ÿù”  “ €B€¤ Ø€£ €Ø"€€¢À *€Ú ”¿ü€€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù”¿üÞ&Ú Â ‚@Ø € @ (€Â& Ø& €¤ €C‚ Â$ À$€R°€¢ 2€ ä @vC ’ €J° š‚ â$ Â$ ¿ÿñÚ$ €¤ €' ’ ” € €¤ Â € @€-€¤ ”à€¤ 2¿ÿú €¤ ¿ÿä@uï0¿ÿà@ué›,`š@Â`€ Ò˜`?ÿ€¤@ ‚@ ä ž €‹”`¿ÿ –¿ÿ¨Ø€@u×Ð ä  ’ ¿ÿØ” @uÓ‚ ¿ÿ½Â$ ¿ÿ·Â& ¿ÿÛ€¤ Ú  ‚@ ØÚ € @ ¿ÿöØ"€¿ÿ«Ú& Çàèã¿Ð €¢ €?   € @ Þ€Ö à&@ ²’`"€Ð Ø`€¢À ‚@ €Š¿ÿ÷Ò@€£ 8€! •+ ‚€Ú`€£`€Ú&@€£8€ž ‚€€¢À €ò `²’`¿ÿé–"À Ð Þ&€¢ €Ö& €¤ €²à@uÅ€¤ 2¿ÿü²0€Â&@€¢À ¿ÿìò& ¿ÿÑ– @u€¿ÿ @uy¿ÿ ÇàèÃà®Àã¿/sÿÿü®㌀¦`€ÅÀ&€ š`?ÿ€ ‚@ €‹@2€ô` €¦à"€ö`ÒÀ€¢` €;¤ âà €¤`€—ž Âà€ š`?ÿ€¤€ ‚@ €‹@–à€œ” –àØÀ€  š`?ÿ” €¢€ ‚@ €‹@2¿ÿù–à “ €n€¤`Ø€£ €Ø"À€¢€ *€Úà–ÿüÂÀ€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù–ÿüÞ&ÀÚà ‚@Øà€ @ (€Â&àØ&à€¤`€{‚ €Â$ Ðà€¢ 2€:âà @uX ’ €P€¦ ‚š ä$ Ú$ Â$ ” €FÀ$à ‚ 8Â$ 4Ð"Â" ö$ Ð$ ,ô$ Ð" Ð$ 0À$ À$ À$ À$ À$ $À$ (€¦`€:ò$@vWÐ`¶’ "€Ú`@tùÚ`€£`€Ú$ ‚ Â#` ‚`Â$ €¦à€à&`@tïà&€U° €¤`€3 ’ –à€ €¤` € `€>€¤ –à€¤ 2¿ÿú €¤`¿ÿ·@t×@u  ’ ¿ÿ¶€¦ "€8° ŸÆ€ €4° À$ ¿ÿÛÀ$ @tÃÂà€ ÒÀš`?ÿ€¤€ ‚@ âà ž €‹@–à¿ÿh” ¿ÿpØÀ@t³Ðàâà  ’ ¿ÿÌ–à@t¯‚ ¿ÿ•Â$ ‚`øÚÀ¿ÿ:ò@¿ÿzÂ&à¿ÿÊ€¤`Ú Âà‚@ ØÚà€ @ ¿ÿöØ"À¿ÿnÚ&àÇàèÃàÒ" (㿈/sÿÿ®à‚`èàÀÚ š`‚ `ÿ€ `Ú,€3° ‚`ðâÀ@uÛ°” €¢ €’ €'À,‚`øäÀÖ@@uѰ€¢ €‚`ì@uÍÐ@À$@€À,ÒÀ@uÊЀ@uËЀ°’ €¦ € ¿ì@tVÔ€°’ €Ð@@uÁÒ¿ìÐ@@uÁÒ€Çàèã¿â ,²`Ò`Ú`²ø‚"@ € @(€Ö@‚@” Â$`€×° ÂàÔà‚ @ € @€,ÂàÚÀÚ @ØÀÂ# š€Ú"àÂ`‚"@Ú`‚ pÖ#@‚pÚ"àâ"À‚pÀ"à ›8` ˜ Ö& ,Ö@Ú$` Âà € @ Ø$`’ €µ° ÖÀÂà € @ 8¿ÿþÖÀÒ#Â@Ø `Úàâ#@Ú$`â"à¿ÿÐÖ$@‚`‚@ªpšcÿ€¥@ €=ä ƒ5` ¦ÿÒ€€¢@*€?Ð è  €¥ €|›,àš@Â`€ ˜`?ÿ€¤À ‚@ ž €‹”`€l–” Ø€€  š`?ÿ–à€¢À ‚@ €‹@2¿ÿù”  “ €5€¥ Ø€£ €@Ø"€Ú Â ‚@Ø € @ (€Â$ Ø$ €¥ €D‚ Â$ À$˜–“ "€_ð Ò`¿ÿšÔà+ƒ5` ¦ÿÒ€€¢@:¿ÿÇè  Ð €¢ €è  €¥ €1 ’ ” € €¥  € @:€9€¤ ”à¿ÿø€¤ €@s³@sç ’ ¿ÿؘ š‚ æ$ Â$ ¿ÿÐÚ$ €¢À *¿ÿÂÚ ”¿ü€€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù”¿ü¿ÿµÞ$€@s—‚ ¿ÿ¼Â$ @sÐ è   ’ ¿ÿΔ ¿ÿ Ø€¿ÿ­Â$ @s„Ò€¿ÿƒè  ¿ÿÍ€¥ Ú Â ‚@ ØÚ € @ ¿ÿñØ"€¿ÿœÚ$ €¦ €€° ŸÆ ° Çàè㿲`²ø@rØ’°”€¢ €’ @rÎÇàèã¿Ú€£`€ Â@Â&Â`ŸÀ@Ð`Ú€£`2¿ÿúÂ@Çàèã¿æ ÂÒຠ@ ˜@¬€£ €Ö ˜   € `€2àÀÂ Ú ‚ @ € @ €-Ø ÂÂ#ÚÂàØ#`‚ @ Úà‚ pà#@‚pÚ$ æ$‚p˜À$ ›8` à"à,àÀÚ$à  € @ Ø$à‚ €”à € @ 8¿ÿþàÔ#ÂÀØ `Ú æ#@Ú$àà$Àæ$ Âà,€P ‚`‚ªpšcÿ€¥@ €Sâàƒ5` ¤ÿÒ@€¢@*€UÐ`è` €¥ €›, š@Â`€ ˜`?ÿ€¤€ ‚@ ž €‹”`€u–” Ø€€  š`?ÿ–à€¢À ‚@ €‹@2¿ÿù”  “ €W€¥ Ø€£ €Ø"€€¢À :€t”¿üÚ` ‚@Ø`€ @ (€Â$`Ø$`€¥ €Q‚ Â$ À$‚ `€p°?ÿ  € `€‚  Â$Àæ% ‚ Â- ÒàÐ @r8” ‚@Â%€Ú šÿÚ% à% €Z° +ƒ5` ¤ÿÒ@€¢@:¿ÿ±è` Ð`€¢ 2€ è` @rß ’ ¿ÿÙ‚ š‚ ä$ Â$ ¿ÿÑÚ$ €¥ € ’ ”`€ €¥  € @€€¤ ”à€¤ 2¿ÿú €¥ ¿ÿä@r‹0¿ÿà@r…Ð`è`  ’ ¿ÿê”`@r‚ ¿ÿ¯Â$ ¿ÿ—Ø€¿ÿ퀥 Ú Â`‚@ ØÚ`€ @ €Ø"€¿ÿÂ$`@rkÒ@¿ÿpè` €€ š`?ÿžÿÿ€ ‚@ €‹@2¿ÿù”¿ü¿ÿ…Þ$@¿ÿ‹Ú$`Çàèã¿xÖ ,ÚàÚ'¿ØÂà‚ÿÂ'¿ÜÀ/¿èÚàÂà/pÿüٮ㦀 @ Ö'¿àð'¿äÀ'¿ì€| ¿Ø‚`ôÐÀ’”@r–€¢?ÿ€wÚ¿ØÀ+@Ø¿àâ ‚#@‚`‚øš@п쀢 €7Ú# ààä ´€¤ €p²  € ž@ Ð€Ö ò&€²´’`"€Ö$ Ø €¢À ‚@ €‹À¿ÿ÷Ò€€£ 8€G •+ ‚€Ú`€£`€Ú&€€£8€ ‚€€¢À €>ô `´’`¿ÿé–"À Ö$ €¤ €Ð$0€Bò@@r:€¦`2¿ÿü´Â¿è€ `€D°Öà,ÚàÂà‚ @ Ø¿àÚà‚ pØ#@‚pÚ# Ö#‚pÀ# ›8` ” Ø$à,ØÀÚ"à  € @ Ô"à€-’ ØÂ € @ 8¿ÿþØÒ"€ÂÀÔ `Ú Ö#@Ú"àÖ# Ø"À€°Â&€€¢À ¿ÿÆô$ ¿ÿ«– ÿþ€¢?ÿ¿ÿ„ðà €¦ € € ° @qÁ¿ÿÁ€¦`@qº¿ÿä ŸÆ ° Çàèã¿ô' Lö' Pø' Tú' X’@s” LÇà‘èÃàÐ"` ÃàÐ ÃàÐÃàÐ €¢ €‚ 0€€‚ Ò@€¢`¿ÿü€¢ ‚ Ãàã¿€¦ €Â š€ `€ ’ Â@Â&  Â#@Ú& ò#`ô#`€ö#` @pò¿ÿ÷šÇàèã¿Âà$€ `€’”?ÿ@ræÐà$€¢ ’”?ÿ€–@q’Ðà$”?ÿ–@rÛ”’€¦ € –@qS° 0€¿ÿõÐà$@q?¿ÿáÐ&à$° Çàèã¿Âà$€ `€’Ðà$”?ÿ@r¿–”’€¦ € –@q7° 0€@q%¿ÿðÐ&à$° Çàèã¿Â $”?ÿ€ `€’€À&@r¡Ð&Çà‘è €¢ €Ø €£ €š 0€Ø€£ €Â € @ 2¿ÿúš  € @ 2¿ÿöš ÂÂ#@Ú Ú#Ø" Ãà€¢ €Ð €¢ 2€Â 0€ €¢ €  € @ 2¿ÿûР€ @ 2¿ÿ÷ÐÖ" Ãàã¿’@ql”ŸÆ€Çà‘èã¿Ú €£`€   Â@Â$Â` ŸÀ@Ð`Ú€£`2¿ÿúÂ@𠀦 €ÿÿî𠀦 ¿ÿüÇàèã¿/oÿû^®á‚`øúÀð@ÿÿÞèÃà ã¿@p8’  Â" Ð& ò"ô" Çàèã¿€¦ €‘¨ D¤av Ð’ ” @r,– €¢2€À$ à €¤ 2¿ÿ÷Р– 2€ Ø 0€}€£ €B’ à €¤ €€¥ Ø ‚ € š`?ÿ‚ € ‚`?ÿ€“@¿ÿñ’ @rЀ¢ ¿ÿðà €¤ ¿ÿ𨠀¥ €-'- – 2€Â 0€]à €¤ "€  –  € `¿ÿú’ @qúÐà €¤ 2¿ÿù  – 2€Â 0€Kà €¤ €H € `’ ” ¿ÿø– @qãÐà €¤ 2¿ÿ÷ 0€:@qßпÿ¿à ¤ ¦ã@qÛ’D qªav¬b¿ – €+¨ €¢à €¤ €€¥  ’ ” € `¿ÿø– @qÀЀ¢"¿ÿó¨ À$ à €¤ 2¿ÿó €¥ ¿ÿ²€¤ 4¿ÿ± – €€¤À¿ÿ­ – @q²’—4à‚€˜ÀšÀ¤ ¿ÿÖ¦ Çàè㿤 € `€@q¤Ð Â € `¿ÿüÿüÁ ÿÿ]Р€€ `€Nà 0ð Â À @@q•€¢€`æ €¤à€=¢  € ž@ Ð€Ö â$¢ ’`"€Ð&Ø €¢À ‚@ €‹À¿ÿ÷Ò€£ 8€# •+ ‚€Ú`€£`€Ú$€£8€ ‚€€¢À €à ` ’`¿ÿé–"À Ð&€¤à€Ö& 0€,â@@p€¤`2¿ÿü @q]€¢€,0€$Â$€¢À ¿ÿêà& ¿ÿÏ– @oË¿ÿÃæ @q Ð` ’ "€Â @o ڠ € `€Â#@Â Ú ` €¤ "¿ÿ¦à 0@o¹¿ÿ¢à 0@oµ¿ÿ×€¤`@qè@q’ ¿ÿ¡æ Çàèã¿/nÿú0®à\‚`èØÀÚ €£`€‚ÿš`ø€ˆ`ÿ€ Â+àÀ @qЂ`ðÚÀÀ$À#@Çàèã¿Â € `€@q Ð Â € `¿ÿüÿü' À& À& ÿþÁÐ ä 0ä& , 4Ú€Â$ €£@À& €JÀ& $ð  À @æ €¤àà€€:¢  € ž@ Ð€Ö â$¢ ’`"€Ö& Ø €¢À ‚@ €‹À¿ÿ÷Ò€£ 8€  •+ ‚€Ú`€£`€Ú$€£8€ ‚€€¢À €à ` ’`¿ÿé–"À Ö& €¤à€Ð&0€â@@o|€¤`2¿ÿü ä$ €ä$€Â$€¢À ¿ÿíà& ¿ÿÒ– @o2¿ÿÆæ @o1¿ÿ`Çàè‚À@nšž@‚À@p¬ž@‚À@p«ž@‚À@pžž@‚À@pvž@Ãà®Àã¿/mÿÿû®â ‚`üðÀÇàèã¿@p— 1€¢ €šÂJ€ `€²@p‘‘è @n¬èã¿@pŽ‚€¢ €° Ð @° Çàèã¿’@p„” 8‘:  ?ôÇà‘ê ã¿@pÇà‘è ‚ Â"š ‚ Ú" Â" ÃàÀ" Ãà®Àã¿/mÿÿû®á‚aðÀÇàèã¿€ ¿à@pi’@nC” Çà‘è Ãà®Àã¿! !¢?ÿ/mÿÿù®àÀ€¤ÿ"€"ÐÀ’”@nÖ€¢?ÿ€€¢ @n2€ `¿ÿö’@n,à@oI0€¿ÿú€¢ €²&@°€¦`¿ÿ䀤ÿ@o=€  @oB’ €¢?ÿ¿ÿÝ¢@n€à@o0¿ÿî¢?ÿÇà‘èÃà®À㿈/lÿÿû®ãÜ‚a ØÀÚš`€£`Ú#€‚ @p@p@p‚” – ’ € `€¿ì@oËša€¢ €‚b"ÒÀ @oÈпì@p Ð¿ì‚ Çà‘è‚À@pž@ã¿/lÿÿÍ®ã$‚a øÀúºÿ€§`€ú'@oüèÇàè‚À@oùž@ã¿’”@m­ÇàèÃà®Àã¿‚b/lÿÿú®⨀¦€C u‚`¿€¦€%Ž‚b8€¦€c€HD‚b,€¦€Œ€d‚b'‚b1€¦€Ó€½‚b5‚b.€¦"€€ñ‚b/€¦€#‚b0€¦"€t€‚a‚a/€¦€ ¿‚`€¦€>?ýq?ý@‚c€€¢ €‚a”€¢ €‚a˜‚aœ°ôÀÿÿ¯“è’@o¤”€¢ €€U°‚a ²ôÀÿÿŸè‚!x€¦€H€0‚!ƒ‚!s€¦€€W‚!u‚b;€¦€Í€¡‚!q‚b9€¦2¿ÿÁ¿ÿÕ‚a„¿ÿÓ‚a€"Ð@o|°²ÿÿ}•耦€p€L‚b)‚b$€¦€¨€’‚b%‚b"€¦2¿ÿ¦¿ÿº‚a¤€¦€\€‚!†‚!}€¦€¤€Š‚!~‚!|€¦2¿ÿ”¿ÿ¨‚aH¿ÿ¦‚a ¿ÿ¤‚a¿ÿ¢‚aD‚a ’ÿÿOÔÀ0€¥€¦€‡€I‚!‡‚!„€¦€‚!…€¦2¿ÿy¿ÿ‚a`€¦"€u€7‚!v€¦€‚!w€¦2¿ÿi¿ÿ}‚a@€¦"€a€%‚b*€¦€s‚b+€¦2¿ÿY¿ÿm‚aÄ€¦€S€#‚b6‚b3€¦€k‚b4€¦2¿ÿI¿ÿ]‚ap¿ÿ[‚aX¿ÿY‚a´¿ÿW‚a$¿ÿU‚a0¿ÿS‚a¸¿ÿQ‚a4€¦€O‚!ˆ€¦2¿ÿ3¿ÿG‚al€¦€G‚b7€¦2¿ÿ)¿ÿ=‚a|€¦€/‚!r€¦2¿ÿ¿ÿ3‚a,¿ÿ1‚a€¦€%‚b&€¦2¿ÿ¿ÿ'‚a°€¦€‚!€¦2¿ÿ ¿ÿ‚aT¿ÿ‚a¨¿ÿ‚a¼¿ÿ‚at¿ÿ‚a8¿ÿ‚ad¿ÿ‚aˆ¿ÿ‚aŒ¿ÿ ‚aL¿ÿ ‚a(¿ÿ ‚a¬¿ÿ‚aP¿ÿ‚a\¿ÿ‚a<¿ÿ‚aÀ¿þÿ‚ah¿þý‚ax¿þû‚a¿þù‚aÇà‘èÃà®Àã¿/kÿÿü®ád’ 0@lU‚c`ØÀšchÂÀ –áÈÚÀ ˜ Â" Ú" ¡. Ø" Ð&ô" ò"À" ’ @l@¢’@lE”š À$@Ú `,â `À `$Ú ` Ú `(Çà‘è ã¿Â /kÿÿÑ®฀ `2€Ö à ÂL€ `2€#âLÖ Â €¢À€ À&  ›*àà@ à& ÂL€ `-€ š‚aÈàÀà&  DÂ.€€€°a~ÂL € `"€ âL  à& ÂK`€ `-€kâL  à& â& €¤`:€>¤@l"’€¢ €9€¤`-ÂJ € `:"€ÂLÀ&À ÚH@€£`2€â.€Â –`Ö& â.€€Y° € `2€Aà&À –`Ú €£@ 4€J ‚aÈàÀÖ& à& ÂN@€ `:€ED € `€D @nÐ@”‚aÐÒÀ РŸÀ@Ö ä Dä.€€3°a|€¤`-€DÂL€ `2€Â  –`Ö&  € `¿ÿñDÂN@€ `:"¿ÿíD @möÐ@”¿ÿß‚aÌâ.€€°a~Ö ‚aÈØÀšàÚ& Ø& â.€€ ° ‚aÈ–ààÀ¿ÿ„Ö& ›*àØ@ ¿ÿðØ&Àâ.€°a}Çà耢 €š@ ›+`™*`š@Ö ÂüÂ" ”¿þÖ#ü€¢ ¿ÿö’`Ãàã¿Ö ,Ø (Ú Â $ #@ ¢"À ’ € `€”@ÿÿäÐ Ð Ò (ÿÿà”Ò (’@”ÿÿÛÐ Ö ,Ø (‚ÀšÂ& ,Ú& (Çàèã¿Â /jÿþÿ®áp€ `€Â @mžÐ@‚aÔ”ÒÀÐ – ŸÀ@˜Çà‘èã¿Â /jÿþé®á€ `€Â @mˆÐ@‚aØ”ÒÀÐ – ŸÀ@˜Çà‘èã¿Â /jÿþÓ®àÀ€ `¦€7ª‚aÈÐÀ– Ö& Ð& À& ÂJ¤€ `€ô  $€ `€)Ö Ô €¢À €ƒ*àè ØÚK€£`-€J–àÖ (Ö& D€½°a~—. ˜!è  µ:à€‚à€¦€ "€&ô%@Ú@³, ‚`€£`¿ÿù  7DòÀ µ:à¶á|ÿÿ®è¿ÿÒÐ Ô €¢À €ƒ*àÒ Ú@ØK@€£ -"¿ÿÒÖ& ,–àƒ*à€¢À €Ö& Â@ÚH@€£`-2¿ÿù–à¿ÿÆÖ& ,‚ÀÚ`€£`€ ¤ ÂL€€ `"€"Ö ä&À‚aÈÐÀ€Ð& À&Àä& ÿÿO€z° Ö& ÂK € `-€"¤ ÂL€€ `-€hô €€ `¿ÿ´—. ‚aÜ7DòÀ´¶á|ÿÿWè €¢À€ƒ*àÚ Ø@–àØ&À¿ÿÙÖ& ‚aà7DòÀ¶á}ÿÿ\èÂL € `"¿ÿßÂL€-¤ ¬¡Ü  ³, ‚ÀÚ`€£`€/  âÀ”`"¿ÿù³, @j‡´’@k¨”€¢ 2¿ÿï³, ÂL€€ ˜`?ÿ‚`=€ š`?ÿ€“ "¿ÿæ³, ‚ÀÚ`Ú%@Ø`€£ "€À&ÀÂL€€ `=€ ‚€Ø  €£€ƒ+ Ú– Ú&À¿ÿžÖ& 7DòÀ´¿þ¿ÿ¯¶á|ÂL€€ `=¿ÿ•‚aä7DòÀ¶á}ÿþü•ì¿þÿþÜ¿ÿHÖ (‚`¿ÿˆÂ&À¿ÿô‚aàÇàèÃà®Àã¿/iÿÿû®á$‚aìâÀÚ@€£`2€Ò`0€€ `€ ¢`šÒ`€¢@2¿ÿúÂ`à`Â`  ŸÀ@”?ÿà$@Çà‘è ã¿/iÿÿà®ฒ @j*ô" ð" ò" ø"€¦à€‚?ÿÂàÂ" ‚aìÖÀØÀØ" ‚aðšc@Ð"Àò ôÀöÀ @j–‘èã¿/iÿÿ¿®à4‚aìÚÀ€Ð@€ @€Ð €¢ 2¿ÿû ‚aðÒ ÔÀ@kÐÿÿ®èã¿/hÿÿ¦®ãЂaìÚÀØ@€£ € ”ð Ú@€£@€Â ˜`2¿ÿû €°b;À#  ŸÀ@Ò ° Çàè㿈Ð ’¿ì€¢ €” @@lÐÚ ˜Â@€ @ € €£ €”?ÿ€£?ÿ€  À&  ŸÀ@Ò 0€À& Ò Â ŸÀ@Ô¿ìÇàèã¿/hÿÿe®âÌ‚aìÚÀà@€¤ €à @kø’€¤ ¿ÿüÇàèã¿à Ú à#` Â Ú `€¤À& À& € ° Ò @kUÐ ‚?ÿ€¢ €Â$ @iŸðÇàèÃà®À㿈¢/hÿÿû®â€§ ä \  €9° €¦`€6° Â`€ ÿ€2Â` € `€.’ @it’ @in” €`€Ð$@  €`2€  ö# \š”Ø` ’@k´– €¢?ÿ€Ú@Ú#` Â@ `à@ä#@˜!ô‚c@Ð#`ø#`’ÔÀ ÖÀ@iÓЀ° @iZÀ$@ðÇàèã¿/hÿÿ¹®á’” @k•Ð&ò" ÚÂ` Â#` ÂØ` Â# ÖÖ&` ‚aôšc@ô"ÒÔÀ@i°ÖÀ Çà‘è ã¿/hÿÿš®à˜‚aô²ôÀð@iÁ蚀¢ €  Â`€ @ €Â`‚@ Â#@ Ãàã¿Ò`@i Ð@”Ð&Ð`Ò` @k^Ö`Â`€ `€?Ð` Ú ‚cÿ€£@€  € `€ € `€Â‚`Â&Çà‘è ƒ* ˜ š ,€ `Ò" €Ò2 (Ô2 Ô2 *€¢`€€¢`€˜ 0€‚ ‚ Â" Ø" Ú" €Ø" Â" š ‚ .Ú" Â" Ø" Ãàã¿€¦`€€¦` $€ `2€Ò Â  € `"€Â Ò ‚!Â"`”`Р@k’`(€¢ €$Ú À& $À&  Â`*Â3`  Â&€+‚ 2€À& (€ `2€Ò ¿ÿ÷ ‚!Â"`”`Р@k’`(€¢ €Ú À& (Â`*Â3` ¿ÿè €‚ @h¦Â€ `€ ¿ÿÞ @hžÂ€ `€¿ÿÖ Çà‘èÃà®Àã¿€À&/gÿÿû®âÀ&@À6€@hs¢?ÿ¨€¤@ € ‚cHÚÀØ ?ÿš` €ˆ`€ €¤˜  ?ÿ€¤ €  Ú@ €‹`2¿ÿú ?ÿ€¤:€ ÂL@j¿?š?ÿ‚cþ€£@€a° Ð6€€^° ‚`:€ š`?ÿ€¤‚@ €‹@"€ $@€¤€S° @j© ?š?ÿ‚cþ€£@€K¢?ÿÐ6€ $@ÂNÀ€ `[€ ¤ ’ @h9Ð%’@h>”¿ÿÝÀ(@’ ]@h:”€ ‚`?ÿš€  ˜@ €@ €*¦”@h.’ %¢’ €&‚ÿÿ€ @€ ‚$@ $À¤ÿ’@hÐ&@’`@h”?ÿÂ@‚@À(ÿ’ @h ’à”@hÐ%ÂÀ(@ Ò@jg”¿à€¢ "€ ° À%À&@À6€€° ¿ÿë¤?ÿÇàèã¿h˜ š Ø?¿ÐØ?¿Ø‚ Ø?¿èÂ'¿ØØ?¿àô'¿Ô€¦ €  ‚ Â'¿Ð€¦`€^¿Т¿Ð’”@jF–¿Ì‚ € š`?ÿ€ ‚`?ÿ€‹@2€=À'¿Ð€¢ €ô¿ÌŽ‚a0€¢ €P°0€:€¦ €-¢ €·.àô €¦ €' š`€  ˜@ ‚`€ š@ €‹ ¿ÿó’!(@g¸’ @g²”!( ú"Ò Ô @g¸ (Ò @j•6à€¤`€’–`Â`à$`$Â$ ¢ô €¦ 2¿ÿÞ @j п̀° ’”@iþ–¿Ì¿ÿÁ€¢ @g¢€ð€@gÉÐ$ à&¿ÿ碂`“.àÂ'¿Ð“2`@ió¿ÿž Çàèã¿”˜ € À&€ š`?ÿ€ ‚@ €“@€)€£ €( € € € €µ.à’—6 ˜ÿÿqš0€µ.à” ’—6 ˜ÿÿhš€¢ €” ¿ÿï” ’—6 ˜ÿÿ\š€¢ €” ¿ÿã Çà‘èã»p#/fÿþ¿®á‚cTØ`ÚÀ€£ € À#@€¦ `(€ »èô# \Ò`”–$˜ @i¦š €¢ € ŽÀ&‚a0€¢ €5°€&‚cT¿ÿï´ ’@g`Ð@Ð&`Ð&€*° ?Ú`8‚cÿ€£@¿ÿ߀¦ Â`4€ `¿ÿÛ€¦ Â`0€ `¿ÿ×€¦ Â` Ú` ‚ Â7»ØÚ'»ÜÀ7»Ú€ »è´ ô# \»Ø¿ÿÏ’ ÚÀ¿Ø@‚`€€£ €°@g ¿Ú‚`€°@Çàèã¿¢’ €¦`€° @ic €¢ € ’ Â4` @g!Ð@ Â4`*Ð$`€° @fíðÇàèã¿Ô Â`€¢€"€*Ð Â (€ `€/¢à`(ƒ, ƒ0`€ `"€ƒ,`€A‚ ƒ0`€ `€=‚ Ò ?Ú`‚cÿ€£@€6‚ Â`€ `€2‚ Â@€ `€.‚ ’` Ô`@g-Ð` €¢ €'‚ €%‚ @g&Ò` €¢ € ‚  (€ `¿ÿÕ¢Â`(€ `¿ÿÒ Ò` ?Ú`‚cÿ€£@¿ÿ̃, Â`€ `¿ÿȃ, Â@€ `¿ÿă, ’` Ð @gÔ €¢ ¿ÿ¼‚ Çà‘èã¿x/eÿýÿ®â@f¨’ :€¢ ¤¦ €Ž–@fy’ $’ @fs” $Ð$€‚?ÿÂ" Â" Â" Â"    `¶`?ÿ ’@hÌ”€¢ €” @hÆ’€¢ €f€¦à€Ò°b0@fQ€¢ €Œ‚°`€Ê€¦ 0€ ?Ú` ‚cÿ€£@"€VÂ`‚ Â$@€¦ "€5؀€Ú@€£`"€¦ €’¿Ü@h¸” Ú¿ÜØK@ƒ: €  ‚ @š`?ÿƒ0`€‹@€-€¢4€,Ԁ€À ` À `À `À `€¢ €^𠨀–?ÿ‚ Ö @?àš`€¢ ¿ÿü‚`€¢ €  “+`”@  ›2à‚@ šÀ Â" ‚?ÿ¿ÿú—;` ˜ Â Ú ‚@ Â" ˜ƒ?ÿ¿ÿû €€° Ô€’” @hi €¢ €Ø€Â€ `¿ÿê€q°b1¿ÿ¯‚ € `¿ÿ¬‚ Â`€ `€g°b0¿ÿ¥‚ ÂN@€ `.€ Ø@šcHÂÀ ˜ ÿ‚`Ú €‹`"€Ø@‚cHÚÀš`–àÂJÀ€ `.Ø À¿ÿü‚ ÿÂ@ €ˆ`2¿ÿù–àƒ+ € `¿ÿW° 0€D¿ÿ­Ø€ ¿à@f8’À$`À$`  ÂJ€ `€3Ø ‚cHÚÀ˜ ÿš` €ˆ`€'¶– ¶àØÀ‚ ÿÚ@ €‹`2¿ÿü¶àƒ+ ƒ8`€ `.€€ `2€€¤ €@h€¢ ÿ€˜ ÿ—*™+Â`Ú`‚@ š@ Â$`Ú$`¿ÿÓ ?øÀ.À¿ÿì¶à¿ÿ;‚b0‚ Â$@¿ÿ7‚ ÇàèÂ`(€ `€?Ò` Ú`‚cÿ€£@"€Â`Â@Ú ‚@ Ø € @ "€"Â`€4 € `2€0 Ú Â`,Ø ‚@ € @ ¿ÿõ 0€'€ `¿ÿëÂ@€ `2¿ÿéÚ Â€ `2€ Ú Â` Ø ‚@ € @ ¿ÿã 0€Ú ‚@ Ø € @ 2€ Â`Ú ‚@ Ø € @ 2€  Ú Â` Ø ‚@ € @ ¿ÿÎ Ãàã¿’ ” @eæ” ?@eâ’ €¢?ÿ€° @eDðÇàèã¿’ ” @eÕ” €@eÑ’ €¢?ÿ€° @e3ðÇàèã¿ €¦`€¢Â € `€%€¦`€ € `€¤ €à> €*  € `¿ÿù€¤  ,€ˆ`¿ÿõ€¤ ÿÿÅÐ €¢ €Â ,‚÷¿ÿëÂ& ,2€Ú ,€¤`8¿ÿêà> Ú ,‚+@¿ÿäÂ& , ,€ˆ`¿ÿÞ€¤ ÿÿ¿Ð €¢ €Â ,‚`¿ÿÔÂ& ,Çà‘èã¿€€¦ €ô' L‚ €¦`@€Â'¿ä€¦`@€ €¦`D€¦d€ôa‡€¦d4€8€¦`€€€¦b"€] ,€ê €¦`@¿ÿïÀ'¿ä?Ð ’cÿ” – L@g>˜ €¢?ÿ€’€Ú €_€¦`€.€¦`€¦`€¦€¦`€Ñ  ,ƒ0`‚`€ @¿ÿñ?’cÿÐ ” –¿ä@g$˜ €¢?ÿ€x L€ `€¹Â ,‚`Â& ,€» €¦@"€_Ð €R €¦@€² €¦ 2€b ,Ú ,‚+@¿ÿïÂ& ,€h€¦`€¦  ,ƒ0`‚`€ @¿ÿÆ?’cÿÐ ” –¿ä@fù˜ €¢?ÿ€M L€ `€‘ ,‚`¿ÿÖÂ& ,ƒ0` ‚`€ @¿ÿ²’  € `„€y” Ð – L@f㘠€¢?ÿ€7 L€ `€l ,‚b¿ÿÀÂ& , ,ƒ0`‚`€ @¿ÿ›?’cÿÐ ” –¿ä@fΘ €¢?ÿ€" L€ `€# ,‚`¿ÿ«Â& ,D€¦@¿ÿxa‡0€`?Ð ’cÿ¿ÿ{” ’ )” '– L@fµ˜ €¢?ÿ€  L€ `"€ Ú , ,‚@¿ÿ‘Â& ,@d<€HЂû¿ÿŠÂ& ,¿ÿ˜‚+@ ,ƒ0`‚`€ @¿ÿb€¦ €$ÿþëÐ €¢ €5 L€ `€) ,‚`¿ÿtÂ& , ,‚`€ @¿ÿP‚ ô'¿èÂ'¿ì?’cÿÐ ” €–¿è@f€˜ €¢?ÿ¿ÿÔ L€ `€Â ,‚`¿ÿ]Â& ,ÿþ¸Ð ¿ÿ߀¢ ‚}ÿ¿ÿVÂ& ,’ „¿ÿˆ” ‚þ¿ÿPÂ& ,‚÷¿ÿMÂ& ,‚ý¿ÿJÂ& ,‚ï¿ÿGÂ& ,Çà‘èØ Ø:@Ãà  ,‚*@€ š`?ÿÚ"€Ãà 㿈Ð ’c@fQ”¿ì€¢ €Â¿ì€ š@ Ú&@€° @c×ðÇàèã¿’@fC€¢  ”’ €@cÈÀ.€ ð@cÁ° €¢ €À,° NÇàèã¿Ú ,€‹@€ ’‚+@Â& , ’@dV” €¢ € ’€RÀ&€Ô€@dEÐ €¢?ÿ2€6 @c¤Â€ `¿ÿö’@cžÂ€ ` "€Â @c˜Â€ ` "€Â @c’À&€€6ÐÔ€@d)Ð €¢?ÿ2€Â @cˆÂ€ `¿ÿö’@c‚€ ` ¿ÿæÂ € `¿ÿÈ € `¿ÿå € `¿ÿÂ’0¿ÿ߀ `€ €€¢:€Ð&€Â ,‚@ Â& ,Ð&€€  2¿ÿþÐ&€Â € `8¿ÿò€Ð&€ Çà‘èã¿Ú ,€‹@€ ’‚+@Â& , ’@có” €¢ € ’€VÀ&€Ô€@cåÐ €¢?ÿ2€6 @cA€ `¿ÿö’@c;€ ` "€Â @c5€ ` "€Â @c/À&€€:ÐÔ€@cÉÐ €¢?ÿ2€Â @c%€ `¿ÿö’@c€ ` ¿ÿæÂ € `¿ÿÈ € `¿ÿå € `¿ÿÂ’0¿ÿ߀ `€Â€€¢:€Ð&€Â ,‚@ Â& ,Ð&€€¢ D€ a~€  2¿ÿúÐ&€Â € `(¿ÿöÐ&€¿ÿì€Çà‘èã¿¢`(’Ô–˜Ú`@e`Ð €¢?ÿ€  @b倠`¿ÿ󒀤?ÿ€à'€4 @bÙ€ ` "€  @bÓ€ ` €% € `€ ’@cm” €¢ € ’€À'@bÁ€ `¿ÿä’Ô–˜Ú`@e-Ð €¢?ÿ¿ÿó ¿ÿ×à'€Â € `8¿ÿã @bªÀ'ÐÇà‘èã¿‚!Â& ¤ (¢ ’Ô–˜š@eÐ`€¢?ÿ€  @b–€ `¿ÿ󒀤?ÿ€Ò (@dæÔ *€¤ €à'Â`D€ `€6a~€4 @b€ ` "€ Â`@by€ ` €%Â`€ `€ ’@c” €¢ € ’€À'@bg€ `¿ÿä’Ô–˜š@dÖÐ`€¢?ÿ¿ÿó ¿ÿÌ€Â`€ `8¿ÿã @bPÀ'ÐÇà‘èã¿  €¤€ ˜ š`Â@˜  €£¿ÿüš`Ú ,€‹@€ ’‚+@Â& , ’@bÛ” €¢ € ’€TÀ&À”@bÙÐ €¢?ÿ2€6 @b)€ `¿ÿö’@b#€ ` "€Â @b€ ` "€Â @bÀ&À€8Д@b½Ð €¢?ÿ2€Â @b € `¿ÿö’@b€ ` ¿ÿæÂ € `¿ÿÈ € `¿ÿå € `¿ÿÂ’0¿ÿ߀ `€š š €¢‚@ €‹@"€Ð&À ,‚@ Â& ,Ð&À€  ¿ÿõ€¢Â € `8¿ÿðš ¿ÿÇà‘èÃà®À㿈/`ÿÿü®ã$ª€¦ €™¦  ڠ ‚@ ¨`’’@“*`@a»Ð@  € `¤ €ž ‰?þ •+à‚@ –Ò`Ø@ ð"š Ò"àÀ"à˜ žà Ø:à¦À € @¤ ¿ÿð € `"€¨?ÿ‚€‚@ƒ(`Ú`–Ú$À"àÂØÀØ:àÂ"à¦À¤ Â  € `€ž ‚€‚@‘(`ö ¢?þ•+à‚À –Ò`ØÀ â"š Ò"àÀ"à˜ žà  Ø:à¦À € @¿ÿñ Ú`,€‹@€!‚+@° Ð`’”@cõ–¿ì¶€¢?ÿ€?¢ @as€ ` €Â¿ì@am€ `¿ÿ퀤`2¿ÿìÐ`€¦ÿÿ2€/Ú`@abÀ'€@ÐÂ%`, ’@b” °’ "¿ÿܰ À'€5€ `€€¦ ¿ÿãÂ`€ `€  ’@aî” €¢ €%¢ ¿ÿ×° ¿ÿÕÂ`€ `¿ÿÑ ¿ÿó’‚aø¿ÿgôÀÚ`¿쀣`€ Â'€ @€ Â`,‚@ € Â%`,€ Â`€ `8¿ÿôÂ0€À'Çà‘è㿈@c›’¿ì€¢ € ¿ìš`€  ˜`?ÿ‚`€ š`?ÿ€“ €Da‡Çà‘èÃà Ú Â`‚`€ Ãà`?ÿÚ Â`‚`€ Ãà`?ÿã½hÿÿÞ¢ €¢ €i°€§ €,ÿÿ逢 € ¤ ÿÿêD°a‡€¢ €Z¤ )€¤`€CD€¤`€T°a‡¢ .ÿÿÔÐ'½ÈÒ  ”!@`Ô½ÐÒ ”!@`оÐÐ`’”–½È˜"@c<€¢?ÿ€%€<°ÿÿ¿€¢ 2€% ,ÿÿÀ€¢ €+D€¤`€-€¤`€-°a‡¢ ¤¿ÐÒ  @`¯” €¦à"€À'¿àÿÿ¥Ð'¿àÐ`”–’ )¿ÿÚ˜ @`§à€°¿ÿâ -€¦à€ Â'¿èÂà,Â'¿ìÐ`”’ –¿è¿ÿȘ  a‡€°¿ÿ÷À'¿ì¿ÿØ¢ Çàè㿈ô/ Lÿÿl ´€¢ €2°ÿÿz€¢ 2€#Ð`ÿÿ{€¢ €€¤ ÿÿv€¢ €D€¤ € °a‡Ð`’ )” – L˜ @bÙ€¢?ÿ€°0€¿ÿí LÂ'¿ìÐ`’ )” –¿ì¿ÿó˜ ”¿ÿî’ ´a‡€°@`Wô°Çàè‚ š ˜ ’”–  ‚ÀÿÿLž@‚ š ˜ ’”–  ‚ÀÿÿAž@” `ÿ’ ‚Àÿÿ«ž@” `ÿ’ ‚Àÿÿ¤ž@㿈ÿÿ#€¢ ’ ” ˜ –`,€  ÿÿ€¢ €D€ a‡ÿÿÐ'¿ìÐ ’ )” –¿ì˜ @b€¢?ÿ€@` €à¿ÿ÷Ð Çà‘èã¿Ð @a# €¢ €° ‚?ÿ€Â$ @_ûðÇàèã¿Ð ’” @bMô> ’Ð @bI” À& ,Çàèã¿’ 8@_Ø” 8@_Ò’ ¢Ð&ò"’!(@_Ï”!(@_É’ àÐ$` ò @’!(@_ÅÐ’ @_¿”!(ØÐ$  š ò @Ú# (Çàè Â"@Ãà Ãà®Àã¿/^ÿÿü®âÄ¢€¦`€’¢ ÿÿÎà’”@b4Ð$ à€ Ú ›3`‚`?ÿ’”€‹@€  ’”€ `€–ÿÿ¨?ÿÿ?ÿÿÖ‚b˜#ÿšcÿÔÀØ:àÀ"à0’ ÐÀ@`– €° @b¢ Ð$ à ’”€ `¿ÿå–@_ðÇàèã¿Ð @aÿ’€¢?ÿ€° @_uðÇàèã¿/^ÿÿª®á|‚b²ôÀð@_úèã¿’`(Ô`@aéÐ €¢?ÿ€ ò& Â`*€ `€‚ €° ¿ÿþÂ& @_SðÇàèã¿Ð @a×’€¢?ÿ€° @_GðÇàèã¿/^ÿÿ}®àÈÿÿT’Â`Ò`(Д ÿÿAÖ` àÒ ?ÿÿ?ÿÿšcÿ˜#ÿ”`Ø< Ð`@aº’`(Ð$ ÚÂ`€ `€CÀ#`(Ð`Ò`@_”!(àÖ`Ú Âà(€ `€4ô#@€ `€8‚`0 Ú`*Ø` €£ €Ú0` ‚ Â$ Â`,€ˆb€€ˆ` ,‚bÂ$ ,Â`,€ˆ`"€Â`$ ,‚`Â$ ,Â`$€ `€ ‚ ‚aüÒÀÔà@_cÐà €¢ €‚ Â$ $‚bÔÀÀ$ 0’Ð@__– € ° ‚`,¿ÿÐÂ#` @^ã€ð¿ÿÊÂ#` Çàè㿈¢ `(/]ÿÿ®ã$’Ô`@adÐ`€¢?ÿ€9@^΀ `¿ÿö’@^È€ `–"€Â`@^€ `•"€ Â`@^¼Â€ `…€!@^¶€@ð€ `€5 ’@_S” °’ €7‚ ?Â'¿è’cÿ” Ð`–¿ì@a6˜¿è€¢ ¿ÿéð¿ì€¦ €'€¢?ÿ¿ÿÝ‚aüàÀÐ` ’@^ÿÔ`€¢ "€Ú`ò$`À$`(Ú`Â` € `€’‚ Â$` Ô`@^ðÐ` €¢ € ° ‚ € Â$`$¿ÿÀÂ`€ `¿ÿ¼ ¿ÿÈ’Çàè Â"@Ãà ã¿ô 4€À&@a’€¢ "€Â ô€€¦ 2¿ÿùР0€Â&Çà‘è ã¿’ @^LР’@^„Р4Â$”’–Ð$ à& 4€¦à€ò$ @^ÀÐÇà‘è Â`Â"Ãà ã¿/]ÿþ~®àÌ’ÿþUÐÒ` Ö`ÿþCÔ`Â@Ö@Â`?ÿÿ?ÿÿÐ’˜#ÿšcÿ€ `Ö" Ø: € ‚ Â" Â" $Â`’`2€Ð ‚ €Â" (Ð Ô @^ (ÐÚ Â`*Â3` Â`’`¿ÿô‚ Ð Ô @^  (ÐÚ Â`*Â3` ‚bÔÀÀ" 0’Ð@^{– Çà‘è ã¿Ö€¢à€’ÿþ– Ð’ ÿþ” ?ÿÿ?ÿÿÖ˜#ÿšcÿØ:à‚ Â"à(Â"à$Â"à Ú@Ú"àÇà‘è ÃàÐã¿Â 0/\ÿþ®ãL@€ˆh€° –@ šb˜#@€ˆ@ €’€° Ö" 0ÔÀ ÖÀ @^ýа Çàèã¿Ø 0/\ÿþ®âÜ€‹(€° @@–âš+ €‹€’€° ÔÀ Ú" 0Ð@^â– ° Çàèã¿€¦ ¢ ´€/¤ . `ÿ’ d€¤ c€ ° @]Ú 0Ð.€@^’ d  ÿ’ @]Ñ´  0Ð.€@^ ’ ‚´ ‚`0Â.€´ ä.€¢`€¤`¿ÿà´ À.¿ÿ€°’ €¤ ¿ÿó@]¸¿ÿé 0@]{° ‚ Â"ÇàèÃà®Àã¿0/\ÿÿü®ጀ¦ €¢€¦ €œ˜?ÿØ'¿°Ø'¿¸À'¿¼À'¿´–`’¿° € ž Ô¿°€¢¿ÿ€a¿´‚`Â'¿´€¢À€°  À–àÚ Àƒ(`‚@ Â"@€ `–à¿ÿï’`Ô¿°€¢¿ÿ¿ÿñØ¿¸€£?ÿ€”?ÿÚ¿´Â¿¼€£@$€Ô'¿°Ø¿°Ø?¿¸Ô'¿°€¢À ¿ÿæ° €¢¿ÿ€ Ø¿¸€£?ÿ€>Ú¿´Â¿¼€£@4€;Ø¿°€£?ÿ€Â¿¼€ `$€f˜?ÿ¢¿À €#° €€¦ ‚ :Â,  € ›. ¿¸€ `€ ˜€ ¿¼€ `€*€ `€#?›. ˜€ š$‚b’ .’"@ ÔÀ@]"Ö? ° €¦ €$Ø¿¸€£¿ÿÞ€¦ ‚ :Â,Ú¿¼° ¿ÿö  ð'¿°Þ'¿´¿ÿ¡”Ø¿°Ø?¿¸¿ÿÆØ¿¸Ú¿¤‚cÿ€£@¿ÿÝ›. ‚$” .”"€` ÿÿ>’€¢ €+ @\Ï Ú¿¸€£ÿ€Â¿¼‚@€ `€‚ :À,  ‚$€ @€’@\Ö‚ Â"€ @\пÿû‚ |’ÿÿ”0€ ¿ÿœØ'¿¸@]%€Â,¿ÿä  Çà‘èÃà®À㿈àN/[ÿÿû®â¤À/¿è° €¤ ¤ ¦ €:¢¿è‚b€èÀÚ @ƒ+`‚@ ‚@‚@‚ @€ `ÿ€-€¤ €Â,@¦à€¤à€'¤ àN€¤ €° ’@\®€¢ ¿ÿé’ .€  ‚`?ÿ€ˆ@¢`€¤ €¤à"€° À,@àN€¤ ¿ÿî° €¤à$€ ° Ú¿èØ¿éÖ¿ê¿ëÂ.`Ú.@Ø.`Ö.`€° ° Çàèã¿€/[ÿÿµ®áŒ€¦ €oô' L€¦ €fª¿à’ @\T” ÂN@Ú@€ `:¦¬¿ð€S¸ ƒ+`±8`´²`€¦ ¤ €4¢ )?¨"ºcÿ7‚â àÀ@\e’€¢ €O7‚"£,`¢@€¤@€6¤ ðN@€¦ ¿ÿð²`€¤ € €§ ‚à€ @€Z ƒ4`Â,À¦àâ,À¦à€§ €€¤À’$À€– š  Â-€ –àÀ+€¢À ¿ÿú˜"@ ¦€¤À€C РL’@\” €= €¦ .€:  à€¤€6’ÿÿY€¢ ¿ÿÞ¦€/ ²`ÂN@€ `:Ú@€) ¿ÿªƒ+`@\‚ |Â"€!?ÿÿÿDÒ L0€àÀ@\’€¢ ¿ÿ¯‚"€¦ :¿ÿÙ€¤ €´€§ 2€ ¿ÿª¸‚à€ @¿ÿÚƒ4`Â,À¦àâ,À¦à¤ ¿ÿŸ¢ Çà‘èã¿¢ƒ.`œ#€  ¦¤€¤€'¸ `˜Â € `€€ `€!€¤ Â Ú`ƒ, Ú'Ú –€‹`€‚ ‚ €‹`2€‚`€‹`2€‚`€‹`2€‚`€‹` 2€‚`€‹`@2€‚`   Â2à€¤¿ÿÞ˜ €¤ €6’” @[»–#è¦ ’”@^>˜€¢ €"Ð&€  €¤€€£ °  €ˆ`€š š €ˆ`2€š`€ˆ`2€š`€ˆ`2€š`€ˆ`2€š` €ˆ` 2€š`@Ú6   €¤¿ÿè° €£ €€£ €‚ €œ€¤ ¿ÿÑ’€¤à¿ÿÏ”¿ÿÆ’@[o€œD‚awœÇà‘è‘* ‘2 €Š €‚ ‚ €Š 2€‚`€Š 2€‚`€Š 2€‚`€Š 2€‚`€Š @2€‚` ‘(`Ãà‘: ã¿@\lÐ Çà‘è Ãà®Àã¿/Zÿÿü®àØ’ @@[2‚ ”’ ¤€ŽàÂ&€ ¦ @[®€ ¦@ €¤à€2°à€“.`ö$ À$ ò$ ô$@[â€@]ÃÐ$ Ð$` Ú€Â` ˜"–ã@’ € `€° ÔÀ @[ŒÖÀ “.`’@à€@[“*`€š` Ú ` Ú `$˜`(Ø `(Ø `,š`0Ú `0Ú `4˜`8Ø `8Ð$ Ø `<€°À$€Çàèã¿/Yÿÿ±®㬂b²ôÀð@[†èã¿Â €ˆ`€4¦ ¤ 0 0€ @"€=Ðà 0 ÚÚ @ØÂ# Â@Â$ Ú`Ú$ Â`Â$ Ú` Ú$ Â`Â$ Â` â`ÿÿoÐV`—* ”—:àÐ ’ @]m˜€¢ &€Â 4 $Â$ ‚ Ú Â$ $š`Ú& à @à& $ €ˆ`€0€@[7Ð ¿ÿͤ 0@[6Ð 0€Â$  4ä$à @à& 4¿ÿï¦ @Zœ’  Ð$¿ÿÇÐ$ Çà‘èã¿Â €ˆ`€3  Â` Ô`Ð @]>’ €¢ €6D˜  € @ "€˜ (Ö €£ "€ ˜ (Ú` Âà€£@"€*ØàÖÀ€£ 2¿ÿûÂà˜ ( (€ @ "€Â Ö (€£ "€  Ú` Âà€£@"€'ØàÖÀ€£ 2¿ÿûÂà €ˆ`€+0€@ZëÐ Â` Ô`Ð @] ’ €¢ ¿ÿИ D¿ÿÌ aÂÀÂ#ÚÀØ#` <Â"àš 8 <Ú"ÀÖ @¿ÿÒÖ& <@ZÕÐ 0€ ÂÀÂ#ÚÀØ#` <Â"àš 8 <Ú"ÀÖ @¿ÿÕÖ& <Çà‘èã¿€€¦`¦ €¤ Д –â@@ZL’Ò'¿èÐ’” @ZB–â@ƒ*`‚ @ ƒ(`‚@ ƒ(`Â'¿ì¤¿è ´ €ˆ`€±ô'¿ä¢ ( (€ @"€Â   ô (ؠ€Â#Ú€Ø#` ò`ÿþ²ÐV —* ”—:àÐ ’ @\°˜Â $Â& à&€Â $ô @Ú (€£@¿ÿèô& $ €ˆ`€t˜Ð Ò Ô @\¤–¿ä€¢?ÿ€wô¿ä€¦ €Mô&Àö €Žà€…  €¤€9€Žàä ò ž —, @ Ø Â Â#À ’€Â"`Ú Ú"` Â"` Â Ú Â"`€‹`€” ” €‹`2€” €‹`2€” €‹`2€” €‹`2€”  €‹` 2€” @Ø Ö ÂÂ"ÀÚÖ#` ,Â#  ,â#  Ô2` Ø @Ø& ,€¤ ¿ÿÏžà€Žà€M€§ € €Žà € Â'@Z-Ð €ö D¦awö €Žà¿ÿø– 8 8€ @ €€ŽàÚ <‚ 0Â#@Ø 8 4Â# Ú 8 4Ú @Ø <Ö& 8Ø& 4Ö& <€Žà€,0€@ZÐ ˜Ð Ò Ô @\/–¿ä€¢?ÿ¿ÿô¿ä@Y„À&À€ `>¿ÿÖD@Y~€ `¿ÿÏ¿ÿϦb.@YôÐ ¿ÿP¢ (@YóÐ 0€ @YíÐ ô¿ä¿ÿzö @YëÐ ¿ÿ³ö Çà‘èÃà®Àã¿/Xÿÿû®áD‚bD˜” €¦ €– ÂÀÚ`ú@ø`ö`ô` ò`ð`Þ`Ô; ú#ø# ö# ô# ò# ð# Þ# Ú# Ô; (Ô; 0Ô; 8Ô; @Ô; HÔ; PÔ; XÔ; `Çàèã¿€/XÿÿÔ®ਂbØÀÂ Ö ð' Dž” (Ðæ ä Â'¿ìÒ ì ê Ö'¿è¨ ƒ2`·2` »*`¹*`¸º@·2`ƒ*`‚@º@º@‚-@ ¸ @ڿ踱- º@ º@º@òÀš@¹2 »2 ƒ* ·* ¶À‚@¸€Ö¿ì»* µ2 ‚@¶ À¸ê'¿èº@ä'¿ìª‚@¸¤¬ ‚@¦¨ ’À ò"€@€¥ ¿ÿΞਠ˜ º ‚ º`»/`ƒ(`â€à€·2`»2` ƒ*`¹*`³4`µ4`¸±,`Ÿ,` ‚@Ø'¿äš °žÀ‚@™4 ³4 —2`µ, », ·*`°¹4` š `º@¶À ¢´€ ›+`´€ø€ ‚@¶-@ º @Ú¿èº@³4 ° ‚@ –â €·- ±. ‚@¸ÖÀ úÀ¸ò€²@‚@š@¹2 »2 ƒ* ·* ¶À‚@¸€Ø¿ì»* µ2 ‚@¶ À¸ê'¿èº@ä'¿ìª‚@¸¤¬ ‚@¦è¿ä’ ò"€€¥ ?¿ÿ¨@Ú Dú@ø`ö`ô` ò`ð`Þ`Â`Ö¿ìØ¿èº@¸¶À´€ ²@ °žÀ‚@ Â#`ú#@ø#`ö#`ô#` ò#`ð#`Þ#`Çàèã¿/Wÿÿ®ᨀ¦ €H€ š@ € ‚@ €‹@€2Ø —+ ƒ3`šÀš‹`?€€¦ ?‚ @  @   (€¦€ €-’ ’”@XV (Ô ™, š‚À ˜B Ø> ²@´&€@Zû’ (€¦ ?€€¦ ’@ZõØ šƒb˜C ´¿ÀØ> €¦ ?¿ÿ÷²`@€¦ €’€  (‚b(šb,ÐÀÒÀ @Zä”!Ì¿ÿÊØ @X.”Ô ™. š‚À ˜B Ø> Çàèã¿/WÿþÅ®àl€¦`€S€¦ "€ZÀ&@Ð` —* ƒ2`šÀ˜‹`?"€˜ š˜ ‚?€€£ 8€;Â+`(€£ ?(€1@  `(@Z¸’˜ š Ø>`XØ>`(Ø>`0Ø>`8Ø>`@Ø>`HØ>`P€ Ð` š Ø>`(‚?€Ø>`XÂ.`(Ø>`0Ø>`8Ø>`@Ø>`HØ>`P `(Ð>``’@ZžÂ@Â&Ú`Ú& Â`Â& Ú` Ú& Â`Â& Ú`Ú& Â`Â& Ú`€Ú& ” @”"€ ’ @WÍ (¿ÿÍ `(@ ” 8’ ”"€ @WÅ (¿ÿÝÐ` ‚b0šb,ÐÀÒÀ @Zz”!ù¿ÿ©€¦ À&@Çàèã¿p °/Vÿþ_®âÔ€¤ €²¿Ð€¦ €’@Zj‚bÒÀ” Ø@Ö@ƒ3 Ú@ Ú.Â@˜ ° Ú Ú.° ”‚¿ÿ¿ÿô²`€À.€ À$‚b0šb,ÐÀÒÀ @ZI”"9¿ÿÞ€¦ Çàèã¿( ¿ˆ@ZG’@ZF”@ZF’Çà‘è㿈/Vÿþ#®áä‚b@’ ” €¬€¦ € PÂÀØ`8Ø?¿èØ@à`ä`è`ø` ô`(ð`0Ø=€à= ä= è= ø=  ô= (ð= 0Ø¿è@WZØ= 8˜ š Ø= @Ø= HÇàè㾸ÔØ ð' D‚ P¬ð ö DÔ?¿èØ?¿àð?¿ØÀ'¿À'¿”À'¿ˆÀ'¿ŒÀ'¿xÀ'¿|À'¿pÀ'¿tÀ'¿hÀ'¿lÀ'¿`À'¿dÀ'¿XÀ'¿\À'¿PÀ'¿TÀ'¿HÀ'¿LÀ'¿@À'¿DÀ'¿8À'¿<À'¿0À'¿4Â'¿œôàô?¿Ðú DÖ DÚ Dò Dø` Ôà(Ø`0ð`8ø?¿ÈÔ?¿ÀØ?¿¸ð?¿°À'¿˜/VÿýÌ®àˆô¿Ìø¿ÈÔ¿È»7 ·. ƒ2 ¶À¹. ö'¿¸˜ø'¿ˆ·6 »3 ¹3 ƒ* µ* ´€¨³* ²@»2  ƒ+ ô'¿Œª@ò'¿”ð¿ø¿ˆÔ¿ÈØ¿À´¶@¸ € º À Ø¿¸°+ ²+@ Ô¿°Ø?¿°¶À¶†À ´€´F€ º@Ö¿˜˜"$¸Ÿ*ආÀØÀ ´F€˜ø¶†Àð¿À´F€ð?¿¸ø¿ì¿è³/ »0`Ø€¤@ð¿È–†À ”F€ ð?¿À¹7 ƒ(` ô¿ìò¿è·6 ø¿è³.`¿ìò'¿,µ7 »(`¹0`ò¿èƒ.`ð¿Ð²†@ °F ð?¿Èò¿,¦@¢€ø¿Øð¿à¶@ò¿è´»6`ð¿èø¿ìƒ/ ´€¶Àô?¿ ’@ô¿Øø¿à°²@¸€ºÀø?¿ø¿ ô?¿Ð´¶@ð¿º@ ¸¶‡@´Gø¿èð¿àø?¿à–‚Àú¿˜Â¿œ”B€º`‚@ð?¿ØÔ?¿èú'¿˜Ø8@€§`¿ÿz¬  Ð'¿˜Ò¿˜º`º`”`»/`Ú¿œØ@‚  Ø?¿ ³3 ƒ(`⿜Ÿ+` à@俤濠žÀÔ'¿„à?¿¨µ,à©,àø¿Ì¿ÈÔ¿˜±4 Þ'¿hÖ¿¨ò¿ §4 »0`°·/ ž  Ø¿¬ô¿¤¶À¡2à‘2àƒ0`¥,`­*à“.` •6`¹/ ú¿È¸«3 —6 ³. ð'¿`£+ ¿̘ö'¿Xø'¿P±/`µ/`·0`»0`¹0` ƒ+ °š¸ð'¿\迨’@ ”€ð¿¬ø'¿H¤€¢@´€³6 ø¿¬—- æ¿ ·7 ú¿Èп̖Àä'¿xâ'¿pÒ'¿lÔ'¿dô'¿T±- Ö'¿|°Ô¿hà¿`ð'¿t™4àƒ* °€²Àµ7` º€¹5 ´€° ²@ è¿Pä¿Xô'¿Lð?¿ ð¿H¶ÀÐ¿ÈØ¿À¶À࿸´€² @ ž à’,@ Ÿ+à꿜´€ª@° ⿘Ô@,ž `è¿pà¿°ä¿x¶†À˜€šÀä¿ ´F€–‚À”B€²@ ¶†À°´F€ð¿¸š@ð?¿°–‚À ˜Ÿ+àò¿œ)”B€ 濘²@¨"$Ø@ƒ,àèÀšƒ@ ¨ø˜C ¶†À´F€ø¿Àø?¿¸ú¿ì¿è³/`п쒻0`¹2 ƒ(`–†À ¸”F€ ²@ø'¿8»* ƒ*`ò'¿@à¿Èµ2`¹2 à?¿À·2 ¨° ´€¸³*`пв@ƒ- »6 à¿Ø’‚@ ä¿àº@ò'¿Dð¿èB ¶@ø'¿0ú'¿4ø¿àô'¿<¶ÀÐ?¿È²@´à?¿Ð´€à¿@ä¿8°è¿0º@¶Àº@¸¶‡@´€¸´Gø¿èð¿à–‚Àø?¿à¿œ”B€ú¿„‚@ð?¿ØÔ?¿èú'¿˜€§`O¿ÿØ8@è Dø 8РDôè¿è¶†À´F€ð è¿à²†@°FØ è¿Øšƒ@˜CÔ è¿Ð–‚À”B€Ð è¿È’‚@Bä Dà (è¿À¢„@ Dä 0迸¦„À¤D€è¿°º‡@ê D¸Gø=`8ô=@ð=`Ø=`Ô=`Ð=` à=`(ä=`0Çàèã¿/Tÿü#®á䀦 €Œ€ š@ € ‚@ €‹@€NØ @—+ ƒ3`šÀš‹`€'€¦ ‚ €  @ €¦€ €K ” P@Uh’ƒ, Ø @šƒ@” ˜C –Ø> @ @€ @ *€ Ø H€ @ 2€ ²@ D€ @ :€²@Ø Hšƒ`˜C Ø> H²@´&€@X’ P€¦ €€¦ ’@XØ @šƒd˜C Ø> @ @´¿€€ `¿ÿó²`€€ `2€Ø H D€ cÿ¿ÿ퀦 Ø Hšƒ`˜C €¦ ¿ÿéØ> H€¦ €<”€&’‚b4šb,ÐÀÒÀ @W×”#¿ÿ®Ø @” P@U’ƒ. Ø @šƒ@” ˜C –Ø> @ @€ @ *€ Ø H€ @ €Â D€ @ €Ø Hšƒ`˜C €Ø> H@U Pƒ. Ø @šƒ@” ˜C –Ø> @ @€ @ *¿ÿñØ H€ @ €Â D€ @ *¿ÿêØ HÇàèã¿Ð @—* ƒ2`šÀš‹`˜@” – € š` ” p‚?€² P”"€  P’ €£`p€Â+ P ” €”"€ €£`€% P@W•’’ ” ~@TÃÐ @Ø HØ> ÀÐ> È@WŠèÔ> P‚?€Ø HÔ> ¸Â. PÔ> XÔ> `Ô> hÔ> pÔ> xÔ> €Ô> ˆÔ> Ô> ˜Ô>  Ô> ¨Ô> °Ø> ÀÐ> È@Wu“î P@T¦¿ÿÜã¿/SÿûL®∂b8šb,€¦`€”#f€¦ €@WdØ@Ø>Ô`Ô> Ø`Ø> Ô`Ô> Ø` Ø> Ô`(Ô> (Ø`0Ø> 0Ô`8€Ô> 8ÐÀ@W>ÒÀ ¿ÿ耦 À&@Çàèã¿P °/Sÿû#®á䀤 €²¿°€¦ €’@W@‚bÒÀ” ?Ø@Ö@ƒ3 Ú@ Ú.Â@˜ ° Ú Ú.° ”‚¿ÿ¿ÿô²`€À.€ À$‚b8šb,ÐÀÒÀ @W ”#„¿ÿÞ€¦ Çàèã¾À ¿ @W’@W”@W’Çà‘è㿈/Sÿúç®àô‚b ’ ” €¬€¦ € PÂÀØ`8Ø?¿èØ@à`ä`è`ø` ô`(ð`0Ø=€à= ä= è= ø=  ô= (ð= 0Ø¿è@TØ= 8˜ š Ø= @Ø= HÇàè‚À@Vîž@ã¿/Sÿú¼®àH‚b<šb,€¦`€”#±€¦ €@VÔØ@Ø>Ô`Ô> Ø`Ø> Ô`Ô> Ø` Ø> Ô`(€Ô> (ÐÀ@V²ÒÀ ¿ÿ쀦 À&@Çàèã¿` °/Rÿú—®ã´€¤ €²¿À€¦ €’@VÀ‚bÒÀ” /Ø@Ö@ƒ3 Ú@ Ú.Â@˜ ° Ú Ú.° ”‚¿ÿ¿ÿô²`€À.€ À$‚b<šb,ÐÀÒÀ @V”#Ï¿ÿÞ€¦ Çàèã¾À ¿ @V’@Vœ”@Vœ’Çà‘èÃà®Àã¿‚ /Rÿÿû®â¼Â& ô& ö& ø& $ò&@S¦’!€Â € `Ð& € ˜ š ‚ À `À `À#@˜  € @ ¿ÿùš` ‚$Â&  À& À& à` ’@SÕ#ÿ’@Sä‘2 ¢ Ð& Ú $Ø â&  à`  ’@S~”@Sx’ Ú $Ø Â à`  Ð& (’@Sr”@Sl’  $Ð& ,Ò` @Sj D ˜"Hš(@ ÖÀ ØÀ‚+@Â& DØ& H‚!@ð"ÀÐ& 0â& 8Â& <À& 4À& @Çàèã¿Ú  Â@ŸÀ@ô' LÚ Â $Ø` Ô` ”  Â`ŸÀ@’Ú  Â`’ LŸÀ@” Ú  Â`ŸÀ@’Çàèã¿/Rÿÿ®àÔ‚bHÚÀà@€¤ €)0€' â (’ÿÿÓ”Ò (€¢@”€ÿÿÌ ‚ÿÂ$ À$ 4à H€¤ €  D‚@€ @¿ÿéä¿ÿèâ ,Çàèã¿’ L@S  °@Uï¤@Uì¢@U阒”@Uæ–Çàè㿨 /QÿÿA®ãÔ€¥:€i +-ªbL€¬¢Pà€Â*@’`Ò$` €¢@"€/ƒ2`€¢@:€QÐÀ¨ €¥:€U  š@š@§+`š`ä  €£@€¯¢€Ú& Ò`š`Â`€ @ :¿ÿâÂ@’@ ’`@RÈРҀ@RÍÔ`Ò`‚@ ‚`Â$`à$€Â@Â*@’`Ò$` €¢@¿ÿÖƒ2`€ `€  Ø ÂŸÀ@ Ú ‚Ò@Ô` ’@ Â`ŸÀ@”€ Ú Ò@’@Â`ŸÀ@ Ø Ú Ò`  ƒ2`€ @8¿ÿé“2`Ò$` €¢@*¿ÿµ¨ ÐÀÒÀ@UJ” ä¨ €¥*¿ÿ±Â  Ø`Ú €£ €o0 D‚@  € @ "€æ ,æ (Ú Â@ŸÀ@ Ú Â $Ø` Ô` ”  Ø`ŸÃ’ € `€¢ Ö ¤   ˜ÀÚ ÒÀÂ` ŸÀ@Ô Ö ‚ÀÀ `¢`‚ÿÚ ™,€€£@€   €¤`"¿ÿï˜À €ˆ@ ¿ÿë˜À $Ú Ò`  Â`ŸÀ@’@Ú –`Ø D€£ € Ö&  8€¢À€ ƒ3  ‚›0`€‹`Â& D€˜ƒ3 €ˆ`€  @Ú <‚@ €¢À€‚Â& DÚ $ Ø` ô` ò ,ð (@R/•ë¿ÿTÀ&  $Ú Ø` Ô` ” Ð ,@R%Ò (Ö Ö& @¿ÿàØ DÇàèã¿¢ €¤@€@€Ú 4‚&€@€£@€   Â Ò 0’@’"@ @R ” 4‚ @¢@š€¤@€+Â& 4€£`2¿ÿìØ $Ú $ Â@ŸÀ@à 0Ú $ Ø` Ô` ”€  Â`ŸÀ@Ò (Ú $ Â`ŸÀ@Ò (Ú $Â@ŸÀ@ Ú $ Ô` Â`ŸÀ@Ò (Ú $ Â`ŸÀ@’Ø $Ú ¿ÿÆÚ& 4Çàèã¿Â Dƒ0`€ˆ`°b<’€”ÿÿ±° Çàèã¿Â D€ `°b<’€”ÿÿ¤° ÇàèØ D‚+Ú Ú" @ÃàÂ" D Dƒ0`€ˆ`€b< Ãà D€ `€b< ÃàÐ ‚À@T[ž@Ð ‚À@TYž@‚ Ò`‚À@TLž@Ãà®Àã¿/Pÿÿü®â ’ @Q„ °’ h@Q‚b\ÖÀšbX˜"TÔÀ ÒÀ ‚ Ð& Ö&Ô& Ò& Â& Çàèã¿Â ’ € `€ ” Ò @S$Ð €¢?ÿ€° 0€@TMÐ €¢?ÿ€ @TKÐ €¢?ÿ€òð @TGè@Q`ðÇàèÃà®Àã¿/Pÿÿü®á$€¦ €Xò' H’ @QB H²Â" ö"’@QwÐ&` HÂ&`¿|’” F–/ÿ@R‹˜€¢ €d@T#’ €¢?ÿ€8Ò`@T ”'€‚’ €2Â&`’ @T” €¢?ÿ€,Ð&`Ð&`´¿€Ð`’ @T”€¢?ÿ€#”’¿t@T¿x¿xÚ¿tÂ'¿€Ú'¿„”Ð`@S÷’ €¢?ÿ€‚ Â'¿pп|’ H@Q¾”¿p€¢ €3@R п|€¢ €.‚bdšc@ÔÀ€#ÖÀ @Q€$Ð’ @Pì H’`²ö"Â" Ò" À"  ” –!˜?ÿ@R¡š €¢?ÿ¿ÿëÐ&`– šbd˜#@Â`Ö&`Â"ÔÀ ÖÀ Ð@@QS’ò& Çà‘è㿈’–/ÿ˜” @R¿ì¢°’ €¦ €!@S³€¢?ÿ€ @QÅÐ¿ì’ ”!€@S­” €¢ € ’ @S›€¢?ÿ’€@S›€°@P²ð@S“’Çàèã¿/OÿÿL®âd‚bd²ôÀð@Q4èã¿Â š€ `€ ° @SzÐ`€¢?ÿ€° @P“ðÇàè㿈/Oÿÿ1®áø€¦`€C ’ @Pw ¿ì’” –/ÿ@Qɘ€¢ €6‚ Â'¿èÐ¿ì’ @Q(”¿è€¢ €.@Qqп쀢 €)’@PšÐ$ ô$@SP’ €¢?ÿ€’ @SN”!€€¢?ÿ€Ð$ ’ @SK” €¢?ÿ€Ð$ ‚b`šc@Ø Ð$ ÐØ$ ÔÀÖÀ @PÃ’à&€ @PIÐÇà‘èã¿/Oÿþç®àÐÿÿ¢ °‚b`’ÔÀ@Q.ÐÇàèÃàÐ ÃàÐ ÃàÐDÃà!‡DÃà!‡ã¿ˆ€¦ €*” Ð @P5–#è  ð € ‚@?ÿ‚`‚`ð'¿èÂ7¿ì²¿è’ ”@R°€¢?ÿ€ ´@P€ `¿ÿö’ €¦ €° 0€D€¢ €°aw€¦ € ° @P€ðÐ`@P –#è  ¿ÿÙð`ÇàèÃà®Àã¿/Nÿÿû®ã„‚bh@P÷ÐÀ€¢?ÿ€#€¦ €%@RÙ€¢?ÿ€€¦ €šbtðÀ šc`‚bxàÀ ÒÀ@RË”€¢ € ‚b|âÀ’@R” €¢ €@OÆ€!ð@R¼€¢ €€¢?ÿ¿ÿØ‚bl@R·ÐÀšc`‚bpÖÀ ÐÀ–à ’ @R°” @R± ’@R¢” €¢ €° 0¿ÿà@R¨ Çàè ‚À@R¥ž@Ãà®Àã¿/Nÿÿü®â(’ @O†Ð&ò"@Rš  °‚b„šc@€¦ €ÒÔÀ@OùÖÀ Çàèã¿€ ’@  @Rˆ“*`Çà‘è㿈 @R…’¿ì¿ìD€ `€°as°atÇàèã¿ @R|’Çà‘èã¿ @Ry’Çà‘èã¿Â ŸÀ@Ò Çà‘èã¿/Nÿÿ»®á$’ @OE’ @O?”  ¢à&’ €¤ €'° @O8À*À* À* À* Ð$ Ú@Â`’” – € `€ `ô#` €¦`ö#`€ø#@@QÐ@šb€°€¢ € ’Â@ÔÀ –@R@Ð`€°¿ÿñ  Çàè‚À@R:ž@‚À@R9ž@ã¿Ð@Qò& @R5 㿈Â`Ð@@R2’¿ì€¢ €Â`Â&Çà‘èã¿Â @R*Ð@Çà‘èÃàÔ€‚À@PKž@ÖÀ‚À@PIž@Â`Â"Ãà ã¿ €¦ €°b"Â’ € `€ò `€ ° @NÒ’ @NÌ” ‚Ð$¿ÿöô"Çàèã¿/Mÿÿ8®ã@NÂ’ ‚bˆÚÀÔ`à@ä`è`Ð&Ô: à:ä: è: Çà‘è ‚À@Qêž@ÃàÐã¿Ð@Qæ’€¢?ÿ€° @N´ðÇàèã¿Pò'¿Ô@QÝ¿ØÀ'¿Ð’¿Ð@QÛ”¿°€¢ €°?ÿð¿´ÇàèÃà®Àã¿/Mÿÿû®â4šbŒÂÀ ˜"ô–âøÚÀ òÀ ”¢ü’cØÀ ÖÀ #žã!#ÔÀÒÀ # ¢c%'ÐÀÞÀ¤£¦â)+àÀâÀ¨"”ªb˜-;äÀæÀ¬¢œºb 97èÀêÀ¸"¤¶â¨5ìÀúÀÚ `Ø `´¢¬Ö ` Ô `Ò `Ð `Þ `à ` â `$ä `(æ `,è `0ê `4ì `8ú `<øÀò @ø `@šb°˜"´–⸔¢¼øÀ öÀ ’bÀ"ÄÚÀ ØÀ !žâÈ "ÌÖÀ ÔÀ#%¢bФ¢ÔÒÀÐÀ')àÀ¦âب"ÜÞÀ+-äÀªbଢäâÀ;æÀèÀºbèêÀ-à `hä `pø `Dö `HÚ `LØ `PÖ `TÔ `XÒ `\Ð ``Þ `dâ `læ `tè `xê `|¤¬¢ì  £, €”  € `€@QBÒÀÐ$€€¤ 0¿ÿö£, Çàèã¿/Lÿÿb®ãО⌛. €¦ 0€‚bðÂÀ€ð@ ðÀÇàèã¿’ @Q*’ @Q'’ @Q$’ @Q!’ @Q’ @Q’ @Q’ @Q’ @Q@Q’ @Q “è ã¿x ¿à@Q ’ @Q’ @Q’ @Pÿ@Pü’ ÿÿÎ’¿Ü@PýŸÆÐ¿Ü€¢ ¿ÿû’¿ÜÇà‘è ã¿€ ¿à@Pïÿÿ¾’ @Pï” Çà‘èã¿€ ¿à@P×’@Pé’ @Pâ” Çà‘èã¿€ ¿à@PÊ’@PÜ’ @PÕ” Çà‘èã¿’ D@M~’ @Mx” DÐ&š?ÿ€¢ €° ‚ Ú" <ò"Â" Ú" @° Çàèã¿€¦`€€¦ €- €¦à€S  ’ @P¸Ô€¢ €L€¦à"€ Ð €E€¦à€¦à"€Ð ’ ” @P­Ð Ð ’ @P©” €;  ’ @P Ô€¢ €4€¦`"€&Ð €€¦`€¦`€’ ¿ÿÕ€¦ ’ @P‘Ô€¢ €%€¦ "€ Ð €€¦ €¦ "¿ÿË€¦à’ ” @P†Ð Ð ’ @P‚” ¿ÿÁ€¦à€’ ” @P{Ð Ð ’ @Pw” ¿ÿ³€¦ ¿ÿì’ ¿ÿïÐ ¿ÿÁ’  Çà‘èã¿Â € `€˜  ’ € `€ € š@ €  ‚`?ÿ€‹@€’€ š@ €  ‚`?ÿ€‹@€’Ô@PTÐ € ˜Ô@POÐ ¿ÿñ˜@PEÔ¿ÿæ˜Çà‘è ã¿Â € `€˜  ’ € `€ € š@ €  ‚`?ÿ€‹@€’€ š@ €  ‚`?ÿ€‹@€’Ô@P,Ð € ˜Ô@P'Ð ¿ÿñ˜@PÔ¿ÿæ˜Çà‘è ã¿Â € `€˜  ’ € `€ € š@ €  ‚`?ÿ€‹@€’€ š@ €  ‚`?ÿ€‹@€’Ô@PÐ € ˜Ô@OÿÐ ¿ÿñ˜@OõÔ¿ÿæ˜Çà‘è ã¿Ð@LÒ’€ ‚@?ÿÐ& °` ÇàèÒ" Ãà Ò" $Ãà ã¿@O‚’ €€ `€ Â&À& À& À& D€ °arÀ&À& À& @OÖÀ& D€°aq@L€ðÇàèÒ" 4Ãà Ò" 8Ãà Ãà 㿈” <’¿ì@OÃÖ€¢ "€Â @‚?ÿ€Â& <€ ÿ€ ¿ìÂ& @Çà‘èã¿’ @@O´Ô€¢ €‚?ÿÂ& @Çà‘èÃà®Àã¿x/Kÿÿü®á €¦à€­À'¿Ü Â& Ú Ú& Â Ú 8€£`€Â& Ð €¢ €Z ‚ÿ€ `€kÂN@€ `/€g@O0€¢ €QÐ&€¢ €RÐ €¢ €ßÐ €¢ €¡Ð €¢ €¨@O} € `€¯Â € `€·Â € `€¿ @Oq’ Ð €¢ €y @€ ÿ"€Â <@Oj€¢ €H <€ ÿ"€Ò (@Oa€¢ €NÒ (€¢`€µÒ 0€¢`€·Ò ,€¢`€* €¢ "€ÁÖ Â 4€ `€²@OL?ÿ@OM’ €¢?ÿ2¿ÿ¦Â @Kâ€Dð€¢ €BÐ €¢ €:Ð €¢ € €7° @O7’ €¢?ÿ¿ÿ˜0¿ÿê@Lʰ 0€-@O1 €¢ "¿ÿÕ @KÿÿÑÐ@O+Ð @€¢ "¿ÿ¸Â < 4€ `¿ÿÏ@K¶‚€~šc@OÐ <€¢ "¿ÿ²Ò ( 4€ `¿ÿÀ@K§‚€ošc ¿ÿU¶¿Ü@Lž¿ÿÇÐ @Lš¿ÿ¿Ð @L¢€¢?ÿ2¿ÿ‡Â @ 4€ `¿ÿ§@KŽ‚€Všc@Nú‚cPÔÀ@LyÒ Ð €¢ ¿ÿ\@Nï‚cPÔÀ@LnÒ @NР€ `"¿ÿV @LoÐ Â Ð`@L\’ @LiÐ Â € `"¿ÿN @LcÐ Â Ð`@LP’ @L]Ð Â € `"¿ÿF @LWÐ Â Ð`@LD’ @LQÐ ¿ÿ< @NÀ‚cPÔÀ@L?Ò ¿ÿÐ @N® €¢ "¿ÿKÒ 00¿ÿ}@N¨ €¢ "¿ÿIÒ ,0¿ÿw@K9‚šc$Ø 4Ò@ŸÃÔÀ 0¿ÿF€  ‚`?ÿšà€  ˜`?ÿ€@ €?€¢à+‚c,šc(ØÀ ÖÀ䀨'¿àÖ'¿ä€¤   €¢ ° Ѐ@Jÿ¢`±,` Â€€ `¿ÿù  €¤`"€Â $€¤`€O’ä'¿è $€ `€.À'¿ì € `€%‚c(ÐÀ”’¿à@Nr 4€ `¿ÿ‚c0ÒÀ”@N*@Jò ‚Ú 4Ò@ŸÃ@”0¿ÿ€€¢à€Â $€ `€D’@NY¿ÿå 4ÐÀ@NW’¿à¿ÿà 4@NV ¿ÿÓ  $€ `"€’@NN ’”¿ÿÏ€ `€’@N@¿ÿÉ 4@N? ’¿ÿù@J­Â€¦€ `¤€¢ ° ¨ @JšÐ€ Ò€@J§”¤€¢`è,€±,`€€ `¿ÿó¤ À,¿ÿ¿ÿšæ'¿è@N ¿ÿ½’Çàèã¿€€¦`€8  €¦ "€´¿è€¦à2€  D’¿ä”@LËж’ € €¦à@J‰Â€ `¿ÿö’¿ä€¦à€Ú¿ä‚‹`ÿ€!ö&€ `€?‚c€‹@€€‹`€€‚ Â&€‚ `Â&@D€°auD€¦à€°av@Ji€ð¿ÿò‚ € °b.¿ÿʲ¿ìƒ;`š ‚`ÿ¿ÿêÚ&€Çàè‚?ÿÂ"‚À@LLž@€¢`€ š€¢`€ D€¢`€ a‡€¢`"€Ô#`0€ ¿ÿþÔ" ,€¢`"¿ÿûÔ" ( Ãàã¿@J*’ À* À* À* À* À* À* À* Ð&ô"@M¯‘ê ã¿@M®Ð`Ð&Çà‘è ã¿’@MªÐ`Çà‘èã¿@M¨Ð Çà‘èÔ€‚À@Khž@ÖÀ‚À@Kfž@Â`Â"Ãà ã¿ €¦ €°b"Ú€£`€’ Â@Â#`€° @IîÀ*À* À* À* À* À* À* À* šÐ$¿ÿðô"Çàèã¿™>`»6`ƒ+ ·.`¶¦À´@´f€ š³6àƒ. ».ວ@¸@¸g³7`ƒ/ ·/`´@¶†À ´F€ ³6àƒ. ¸@».àø>Çà‘è 㿈’ @M\¿è¿蒑8`›0`ƒ* —*`–¢À ”@”b€Ÿ2àƒ* ›*àš£@ ˜À˜c Ÿ3`ƒ+ —+`–‚À ”À”B€Þ¿ì“2àƒ* ›*à˜@±;ಃ@°CÇàèÃà®Àã¿`Ð/Hÿÿû®âl” –â@@I¶’¶À Ðö'¿Ä’” @I«–â@Ò&¿Ä€§ €’¿È@M%à¿è7Ú¿ÌØ¿ÐÖ¿ÔÔ¿ØÒ¿ÜпàÞ¿ä¿ȶã8Â& Ú& Ø& Ö& Ô& Ò& Ð& Þ& €¤ € à& $ÂÀÚ@€‚n@M ’¿È¿ÿåà¿èÂÀÂ@Â& (Çàèã¿’”–ÿÿ¿˜ ö& (Çà‘è – ‚À@Lúž@ã¿’”– ÿÿ°˜ Çà‘è ã¿Â`ì`/Hÿÿ¦®áª©8`€¥ €ºƒ- —5`›-`šƒ@˜À˜C“3`ƒ+ £+`¢„@ @—=  D—2à–…@ ” ”E ƒ, ›4`“,`@Ÿ2à¥* ¢„@ š€ D¢„@ ™:  D ” – d@I?’¦‚`¤B ›< ‚c4›3`èÀŸ- ¦„À ˜ ÔÂ`¤D€ ”€¢¤@ ƒ4àŸ, šÀ d¢„@ ”¿ÿ™< –  D ¢„@ •: ?ÿç D š`\?ÿÿ¢„@ ˜#ÿ D —4`‚š@šƒ@˜À˜CÐ` “3`ƒ+ —+`–‚À”@™: ”B€ “2àƒ* ›*àš£@ ˜@˜c Ð`“3`ƒ+ —+`–‚À”@™: ”B€ “2àƒ* ›*àš£@ ˜@˜c ƒ+ Ð`“3`—+`”@¢‚À™:  B€ €¤ €"°b$›4`ƒ, —,`–¢À”@”b€“2àƒ* ›*àš£@ ˜@˜c “3`ƒ+ —+`–‚À”@”B€Þ@›2àƒ* “*à’‚@@™;àB Ð?@€° ª€ÿ¿ÿq¨E?ÿÇàèã¿’@LP¬°’ €Â`(’‘8`›0`ƒ* ”@—*`š¢À ˜b€—3`ƒ+ £+`š¤@  À˜d —3`ƒ+ §+`š„À ¤À˜D€—3`ƒ+ «+`Ø€š£@¨À˜cØ=€Çàèã¿à@Д –â@@Hœ’äÒ$ Ð’” @H—–â@Ò$€Çà‘è ØÂ`Â#Ú`Ú# Â` Â# Ú`Ú# Â`Â# Ú`Ú# Â`Â# Ú` Ú# Â`$Â# Ãà ã¿Þ@ÂÀš™8`»0`ƒ+ ·+`¶¦À ´@´f€ ³6àƒ. ».ວ@¸@¸g³7`ƒ/ ·/`¶†À ´@´F€ òà»6àƒ. ›.àšƒ@˜@¹>`˜CØ>Çà‘è Ø@ÂÂ" Ú Ú"  Â" Ú Ú"  Â" Ú Ú"  Â" Ú Ú"  Â" $Ãà 㿈Д –â@@H>’Ò'¿ìД –â@@H:’Ò'¿è ’ ” – @K½˜¿èÇàèã¿X/Gÿþl®à0’ @K¤¿è¿蠿À’Â'¿¼@K¤¿¼@K­À'¿à’‚c8àÀ@KªÐ¿¼‘ @Ñ$ÇàèÃàÃà®Àã¿`/Fÿÿü®㸔’@K¿ÀÚ¿Ü‚cXØÀ›+`Ö @ š@ Ö.š` @° Â.Ú `° Ú.‚ ,° Â.à¿Ð¤ ° ä.’ @Gë°  0Ð.@Gâ’ °  0Ð.¿԰ šcpØÀ ä.ƒ(`Ö@ š@ ° Ö.š` @° Â.Ú `° Ú.à¿Ø 'l° ä.’#è@Gɰ  0Ð.’#è@GÀ@GÁ’ d°  0Ð.’ d@G¸@G¹’ °  0Ð.@G°’ °  0Ð.à¿Ì° ä.’ @Gª°  0Ð.@G¡’ °  0Ð.à¿È° ¢ :â.’ @Gš°  0Ð.@G‘’ °  0Ð.à¿Ä° â.’ @G‹°  0Ð.@G‚’ °  0Ð.° ä.° ‚ GÂ.° ‚ MÂ.° ‚ TÂ.À. Çà‘è ã¿`/Fÿÿd®áX”’@K¿ÀÚ¿Ü‚cXØÀ›+`Ö @ š@ Ö.š` @° Â.Ø `° Ø.¿Ԥ ° šcpØÀ ä.ƒ(`Ö@ š@ ° Ö.š` @° Â.Ú `° Ú.à¿Ð° ä.’ @GD°  0Ð.@G;’ °  0Ð.à¿Ì° ä.’ @G5°  0Ð.@G,’ °  0Ð.à¿È° ¢ :â.’ @G%°  0Ð.@G’ °  0Ð.à¿Ä° â.’ @G°  0Ð.@G ’ °  0Ð.à¿Ø 'l° ä.’#è@G°  0Ð.’#è@Fý@Fþ’ d°  0Ð.’ d@Fõ@Fö’ °  0Ð.@Fí’ °  0Ð.À. Çà‘è ã¿h˜ š Ø?¿àØ?¿ÈØ?¿ÐØ?¿ØÖ Ô Ò Ð à $Â Ú Ø Þ Ö'¿ÔÔ'¿ØÒ'¿ÜÐ'¿àÂ'¿ÈÚ'¿ÌØ'¿ÐÞ'¿äà'¿è’”@Jk–¿ÈÐ&@Çà‘è 㿈’”–(@Jd˜¿ì€¢ €Â¿ì€ š`?ÿ@ Çà‘èã·h’¿Èÿÿî”·È‚’ €@FÑÒ¿äÐ&‚ Çà‘èã¿@JN@JOÐ&Ð&@Çà‘è ã·h’¿ÈÿÿØ”·È€¢ €Â¿ÐÂ&Ú¿ÔÚ&@Çà‘èã·`’¿È”·È–(@J;˜·Ä‚’ € Ò·Ä€¢`€‚ @F¨Ò@Ð&‚ Çà‘è?ÿ÷‚cxã€?ÿ÷ £Ü‚¿ð”£ð”@ ’¿à@J$˜€‚’ € Ò€€¢`€‚ @FŽÒ@Ð&‚ Çà‘è?ÿ÷‚cxã€?ÿ÷ £Ü‚¿ð”£ð”@ ’¿à@J ˜€€¢ € Ô€€¢ €  Â& Çà‘èÃà®Àã¿/Eÿÿû®༂c<ÚÀÂü€ ÿ€ üŸÀ@ ?ü€ ÿ¿ÿüÇàèã¿ÇàèKMGTPE%d.%d%c%3d%c%3d .@$?ž¸Që…¸?ð0123456789abcdef0123456789ABCDEF0123456789abcdef0123456789ABCDEF(null)bogus %pnan, No Error/apr-tmp.XXXXXX/tmp/usr/tmp/var/tmpTMPTEMPTMPDIR/var/tmp//..//../fcntlpthreadposixsemsysvsem/ApR.%lxZ%lx/dev/zero/tmp/aprXXXXXXunknownapr_global_poolISO-8859-11.2.12/dev/urandomapr_initializeThe given path misformatted or contained invalid charactersNo thread was provided and one was required.The specified network mask is invalid.Internal errorNo thread key structure was provided and one was required.No shared memory is currently availableThe specified IP address is invalid.Error string not specified yetUnknown hostNo address for hostUnrecognized resolver errorAPR does not understand this error codePartial results are valid but processing is incompleteThe specified thread is detachedThe process is not recognized.The given path contained wildcard charactersNo time was provided and one was required.An invalid date has been providedA new pool could not be created.Shared memory is implemented anonymouslyMissing parameter for the specified command line optionBad character specified on command lineThere is no error, this value signifies an initialized error codeShared memory is implemented using filesShared memory is implemented using a key systemThe specified child process is done executingThe specified thread is not detachedThe specified child process is not done executingThe timeout specified has expiredNo lock was provided and one was required.No directory was provided and one was required.No poll structure was provided and one was required.No socket was provided and one was required.The given path is relativeDSO load failedThe given path is absoluteThis function has not been implemented on this platformpasswords do not matchThe given path is incompleteThe given path was above the root pathYour code just forked, and you are currently executing in the child processYour code just forked, and you are currently executing in the parent processAn invalid socket was returnedNo process was provided and one was required.End of file foundCould not find specified socket in poll list.%s: option requires an argument -- %c %s: illegal option -- %c %s: %s: %s %s: %s: %c invalid option characterinvalid optionmissing argumenterroneous argument%x01234567890123456789abcdef0123456789ABCDEF0123456789abcdefË»]ÁžØbš)*6|Õ‘YZ0pÝ/ìØ÷Y9g3&gÿÀ 1Ž´J‡hXÛ . dù§GµH¾úO¤BŠ/˜×(®"q7D‘#ïe͵ÀûÏìM;/éµÛ¥‰Û¼9VÂ[óHµ8Yññ¶Ð’?‚¤¯O›«^ÕÚmت˜£Bƒ[Epo¾$1…¾N䲌U }ÃÕÿ´âr¾]tò{‰o€Þ±þ;–±›Ü§%Ç5Á›ñtÏi&”ä›iÁžñJÒï¾G†8O%ãÁÆ‹ŒÕµ$ ¡Ìw¬œe-é,oY+uJt„ªn¦äƒ\°©Ü½AûÔvùˆÚƒSµ˜>QRîfß«¨1Æm-´2°'Șû!?¿YǾïäÆà ó=¨ÂÕ§‘G“ §%ÊcQà‚o))g np'· …FÒ/ü.!8\&É&M,müZÄ*íS8 •³ße sT‹¯cÞvj »Îê&aœÑ†¸Ç!ÀÂêÚ}ÖÍàëõ}OînÑxðgªroº c}ŢȘ¦?˜¾ù ®q 5G(Ûwõ#}„2Ê«{@Ç$“<ž¾ ɾ¼CgÄœ LLÅÔ¾Ë>B¶Y)œüe~*_Ëo«:ÖúìlDŒJGXj ægó¼É»g®…„ʧ;lƒÙ«ûA½k[àÍ~!yBŠ/˜q7D‘µÀûÏéµÛ¥9VÂ[Yññ’?‚¤«^ÕØª˜ƒ[$1…¾U }Ãr¾]t€Þ±þ›Ü§Á›ñtä›iÁï¾G†ÁÆ$ ¡Ì-é,oJt„ª\°©ÜvùˆÚ˜>QR¨1Æm°'È¿YÇÆà óÕ§‘GÊcQ))g'· ….!8M,müS8 e sTvj »ÂÉ.’r,…¢¿è¡¨fKÂK‹pÇlQ£Ñ’èÖ™$ô5…j p¤Á7l'HwL4°¼µ9 ³NتJ[œÊOh.oót‚îx¥co„ÈxŒÇ¾ÿú¤Plë¾ù£÷Æqxòj æg»g®…bytes < g->rehash_sizerandom/unix/apr_random.c//dev/nullrwforkunable to fork new process Signal 0HangupInterruptQuitIllegal instructionTrace/BPT trapAbortEmulator trapArithmetic exceptionKilledBus errorSegmentation faultBad system callBroken pipeAlarm clockTerminatedUser defined signal 1User defined signal 2Child status changePower-fail restartWindow changedurgent socket conditionsocket I/O possibleStopped (signal)StoppedContinuedStopped (tty input)Stopped (tty output)virtual timer expiredprofiling timer expiredexceeded cpu limitexceeded file size limitsignal #%dunknown signal (number)setting of group failedsetting of user failedchange of working directory failedsetting of resource limits failed/bin/sh-cexec of '%s' failed2Q=\z™¸ÖõSunMonTueWedThuFriSatJanFebMarAprMayJunJulAugSepOctNovDecT00¿ÿó<0¿ÿðH0¿ÿíT0¿ÿê`0¿ÿçl0¿ÿäx0¿ÿá„0¿ÿÞ0¿ÿÛœ0¿ÿب0¿ÿÕ´0¿ÿÒÀ0¿ÿÏÌ0¿ÿÌØ0¿ÿÉä0¿ÿÆð0¿ÿÃü0¿ÿÀ0¿ÿ½0¿ÿº 0¿ÿ·,0¿ÿ´80¿ÿ±D0¿ÿ®P0¿ÿ«\0¿ÿ¨h0¿ÿ¥t0¿ÿ¢€0¿ÿŸŒ0¿ÿœ˜0¿ÿ™¤0¿ÿ–°0¿ÿ“¼0¿ÿÈ0¿ÿÔ0¿ÿŠà0¿ÿ‡ì0¿ÿ„ø0¿ÿ0¿ÿ~0¿ÿ{0¿ÿx(0¿ÿu40¿ÿr@0¿ÿoL0¿ÿlX0¿ÿid0¿ÿfp0¿ÿc|0¿ÿ`ˆ0¿ÿ]”0¿ÿZ 0¿ÿW¬0¿ÿT¸0¿ÿQÄ0¿ÿNÐ0¿ÿKÜ0¿ÿHè0¿ÿEô0¿ÿB0¿ÿ? 0¿ÿ<0¿ÿ9$0¿ÿ600¿ÿ3<0¿ÿ0H0¿ÿ-T0¿ÿ*`0¿ÿ'l0¿ÿ$x0¿ÿ!„0¿ÿ0¿ÿœ0¿ÿ¨0¿ÿ´0¿ÿÀ0¿ÿÌ0¿ÿ Ø0¿ÿ ä0¿ÿð0¿ÿü0¿ÿ0¿þý0¿þú 0¿þ÷,0¿þô80¿þñD0¿þîP0¿þë\0¿þèh0¿þåt0¿þâ€0¿þߌ0¿þܘ0¿þÙ¤0¿þÖ°0¿þÓ¼0¿þÐÈ0¿þÍÔ0¿þÊà0¿þÇì0¿þÄø0¿þÁ0¿þ¾0¿þ»0¿þ¸(0¿þµ40¿þ²@0¿þ¯L0¿þ¬X0¿þ©d0¿þ¦p0¿þ£|0¿þ ˆ0¿þ”0¿þš 0¿þ—¬0¿þ”¸0¿þ‘Ä0¿þŽÐ0¿þ‹Ü0¿þˆè0¿þ…ô0¿þ‚0¿þ 0¿þ|0¿þy$0¿þv00¿þs<0¿þpH0¿þmT0¿þj`0¿þgl0¿þdx0¿þa„0¿þ^0¿þ[œ0¿þX¨0¿þU´0¿þRÀ0¿þOÌ0¿þLØ0¿þIä0¿þFð0¿þCü0¿þ@0¿þ=0¿þ: 0¿þ7,0¿þ480¿þ1D0¿þ.P0¿þ+\0¿þ(h0¿þ%t0¿þ"€0¿þŒ0¿þ˜0¿þ¤0¿þ°0¿þ¼0¿þÈ0¿þ Ô0¿þ à0¿þì0¿þø0¿þ0¿ýþ0¿ýû0¿ýø(0¿ýõ40¿ýò@0¿ýïL0¿ýìX0¿ýéd0¿ýæp0¿ýã|0¿ýàˆ0¿ýÝ”0¿ýÚ 0¿ý׬0¿ýÔ¸0¿ýÑÄ0¿ýÎÐ0¿ýËÜ0¿ýÈè0¿ýÅô0¿ý 0¿ý¿ 0¿ý¼ 0¿ý¹ $0¿ý¶ 00¿ý³ <0¿ý° H0¿ý­ T0¿ýª `0¿ý§ l0¿ý¤ x0¿ý¡ „0¿ýž 0¿ý› œ0¿ý˜ ¨0¿ý• ´0¿ý’ À0¿ý Ì0¿ýŒ Ø0¿ý‰ ä0¿ý† ð0¿ýƒ ü0¿ý€ 0¿ý} 0¿ýz 0¿ýw ,0¿ýt 80¿ýq D0¿ýn P0¿ýk \0¿ýh h0¿ýe t0¿ýb €0¿ý_ Œ0¿ý\ ˜0¿ýY ¤0¿ýV °0¿ýS ¼0¿ýP È0¿ýM Ô0¿ýJ à0¿ýG ì0¿ýD ø0¿ýA 0¿ý> 0¿ý; 0¿ý8 (0¿ý5 40¿ý2 @0¿ý/ L0¿ý, X0¿ý) d0¿ý& p0¿ý# |0¿ý  ˆ0¿ý ”0¿ý  0¿ý ¬0¿ý ¸0¿ý Ä0¿ý Ð0¿ý  Ü0¿ý è0¿ý ô0¿ý 0¿üÿ 0¿üü 0¿üù $0¿üö 00¿üó <0¿üð H0¿üí T0¿üê `0¿üç l0¿üä x0¿üá „0¿üÞ 0¿üÛ œ0¿üØ ¨0¿üÕ ´0¿üÒ À0¿üÏ Ì0¿üÌ Ø0¿üÉ ä0¿üÆ ð0¿üà ü0¿üÀ 0¿ü½ 0¿üº 0¿ü· ,0¿ü´ 80¿ü± D0¿ü® P0¿ü« \0¿ü¨ h0¿ü¥ t0¿ü¢ €0¿üŸ Œ0¿üœ ˜0¿ü™ ¤0¿ü– °0¿ü“ ¼0¿ü È0¿ü Ô0¿üŠ à0¿ü‡ ì0¿ü„ ø0¿ü0¿ü~0¿ü{0¿üx(0¿üu40¿ür@0¿üoL0¿ülX0¿üid0¿üfp0¿üc|0¿ü`ˆ0¿ü]”0¿üZ 0¿üW¬0¿üT¸0¿üQÄ0¿üNÐ0¿üKÜ0¿üHè0¿üEô0¿üB0¿ü? 0¿ü<0¿ü9$0¿ü600¿ü3<0¿ü0H0¿ü-T0¿ü*`0¿ü'l0¿ü$x0¿ü!„0¿ü0¿üœ0¿ü¨0¿ü´0¿ü(¬(Ñ(ç(ø) )$)=)Q ƒ| ƒ˜)g)u)u”= )üÌ oÿýø…Ioÿÿþgoÿÿÿsìh(T oÿýüoÿÿûÿÿÿÿÿÿÿÿÿñ”Ì=gh(r„rœsìƒ| ƒ˜ ƒ¬ ë¨  TT`hptx€ Öt Üÿñ!ÿñ-6TAë¨ Pÿñ`ƒ´ {„l [„` ‡T•`£h±pv„ð ÄÍÙxÝtêÿñøÿñÿñ‹dð !ÿñ/ë° 5ëÈ ;ë¸ AëÀ GÿñTÿñ/ëÐ bÿñq \, z» ‰ ˆt ‘¢¤È žì@ ­ì ¼ ü0 É¢,x /ëØ 5ëà ;ëè Aëð ÑìX ×ìp Ýì` ãT ëì( øëø ÿñÂp  ¾ˆ /ìx 7¼$ˆ GÿñRÖ¤( ^ظ  iÿñvÞx8 ÿñ/ì€ –ã8@ ¢ÿñªÿñ¶æÌ„ Éð¼< Ûÿñëÿñòóà ýÿñöT, ÿñÿñ&üŒ ùÿñ/ì 5ì  ;ì¨ Aì¸ ÑìÈ ×ìÐ ÝìØ /ìà 5ÿ|„ Bÿñ/ìð 5í ;ìø Aí MÿñTÿñd <| qÿñ|¬ ‹ÿñ’\ ­ÿñ·ÿñÀÿñÐt æÿñõ¸  ÿñ\ ,ÿñ9$˜h R, kà ~`8 –&¨&H¨ Á4, Ú%< ó,$€ P$/# $ O  Ñí8 ×íH ÝíX /íh h!Èx ˆ  £Ð0 ¼!`h Ô%<p í˜8 #Ä & ðp > 4 V g 4¼ ~"@` À ´#ܼ ÌÿñÛ)HL ðÿñüCXT  |"Bh /íp 8xI9 Ì X8à@ etqÿñ/í€ {ÿñÿñ/í ‹ÿñ/í˜ ’ÿñ/í¨ €šÿñ§íø ®î` µî  ¼óˆ ÃîÈ Êî( ÑôP Øô  ßï¸ æò íñè ôò@ ûòx ï€  ñ ðà õ@ õX %ð° ,ñˆ 3ñ¸ :ñ@ Aó¸ Hóð Oó˜ Vóh ]ô dô( kí¸ rð yïà €îP ‡îð Žï •ï œï8 £M< /ïX 5ðˆ ;ð` Aôð Ñõ ×ð0 ÝòÐ /ò  ¯ó µó8 »ÿñ/õˆ 5õ¸ ;õ AõØ Ñõè ×ö Ýö( /ö@ ¯õø ÄUàD ÌVôX ÑV$x ÙVœX Þÿñë„úZèp ÿñ ]Œ\ "ÿñ +ÿñ 6d@à Dÿñ NoTD YoD aÿñ lˆ tÿñ €€$ ŽØL Ÿ‚ ì ¬€\Ä µ€, €D Ïÿñ Ù˜ ì„x4 ü„¬ˆ „<< ÿñ $˜ä /öX /ÿñ ;öˆ Göp ïö`  S‘h ^ÿñ fÿñ _ÿñ oÿñ v— †–¼` ÿñ ™ÿñ  | °ù¸ µö¸@ Ïöø€ 5úØ ;û Aû( ÑûH ×û€ Ýû  Ôùx@ îú¸  ÿñ ¶Ät ¨/ûÀ 5ûà (»Ä 9ÿñ E½Ì S½¸ ^½¤ jÿñ pÁØ@ ƒ¾d€ •ÿñ žÿñ/ü 5ü( ;ü0 Aü Ñü ×ü ¨ÿñ ±ÆÐ ¾ÅÌ ÑüP  Ýÿñ ç¬Ä§üø ®ý µý ¼ý( Ãý8 ÊýH ÑýX Øýh ßý€ æý˜ íý° ôýÈ ûýØ  ýð þ þ þ( %þ8 ,þP 3þh :þ€ Aþ˜ Hþ° OþÐ Vþà úÌ„ˆ /üp 5ü€ ;üˆ Aü˜ Ñü  ×ü¸ /üÈ ¯üÐ µüà ÿñ/ÿ( 5þø ;ÿ AÿP Ñÿx ×ÿ€ Ýÿˆ ÿñ ÿñ &ÿœ0 2p DÝ ð Qÿñ [ÿñ féd< tÿñPÿñ €l ’ëP ëœ ¨d‡\ µt Áp Ïÿñ ä ëWL” ûã€` t  Ap8 . 5R¬¨ Eî( S²$À c o v ~ p •C$ «[X€ Éë¨ Ö¸8Œ í° ›D| È 0 )î\( 7(È€ NT?„, aÑÜ  z€Ä š¡(L ¸$0 ÑÚµ4 ëî„| ú\¸ˆ ")7``x MLØ `ùD oÈøT „€ “˜`0 §ƒ8, ·ÏÔ  Ñ÷@0 ßù”  ö†`0  Bl$ ’0€ (Í p :™Ä€ MV»¨| d‘°€ m’°  {¾ì Š’˜Ƹ µb8 ‡0 ÉÅèh ßéðh¨  °0 %Ä ;ä PXœ  eà  sÑ4, €ûD ôp” \<| ¸ì Ð×,l ôûÛ¬¤  ³À” %Œ¼p <Ø( V%¬œ u|– ¯0p Äf Ø Úáôþ éø4 ,L 0?FŒ R›ä aiˆ y½`$ ‘Þ°  ¡E¬ ² h, ÂTËÔ,à| èßP| ù‹D  é 8 €0 9XFT Xo…š[Ød º×0 ÏI¨ àÀ õî( ìÐ0 öˆ¸ )—8( <¼( Q]¦(˜ nt ƒ’„X ‘'Ð( «Ø8 ÄÒd  áÐt  üJ´  "#ê4œ 29J$< PZͬ4 k|l šl ³_t0 ËÐéöàÐ| ðÐ 8,T ÍP$$ b Ä rBX ›H” ž¼Ø8 ¶Òp  ÓŠÀ, éüL0¨   !Éd0 /ä@0 >P fmtryÕÜÈ ‹‘ˆ ˜¡öP °¸ÚØÌ ÅÛ¼ ßòÑè   (0  LèD .ˆ E[ÏT m°Ä €·àX ˜Û¤ §£l¬ ¶ÍÆ  ê²ä4 û,\ °$ &œ @UÉ\ i 80 xÇ𠈽< ¡©/\  ¼Þ¸ Íß|ìì óJÈ  ÿÞP 29·8¨ Oü hÒ„L ~&üP •›( ²¹Ä˜4 Ô…lX àõ   „üp !‡Hœ 39tœ Lä  [Ìl léØ  |ƒ , ‹›STŒ ¦Ú¤4 ð³ºÆŒ@ É, Ú)œ¸ òâP€ ¤ +Æp0 E…Äü Z?È q´ „À@$ •,d ­]@L ŽÎy¼h âî"p„  5…L Gƒœ  [Šˆ o(¤ [ ¸H ‡’Ã@@ ¡àHt ²^üx ¿ù\8 Ìæúã( ×H` &•t” 1ð0 HÈ Y͈Ì gJ`, sÀdD …Ý Œ ’Ùè   ýØœ ²IÈ Ç³˜ Øáo˜ì øÜœp  {$À /–@ ;޼\ H_Ü„ \ÿÌ k rG°h … ‹ ’ ¦æH„ ¼ã,T "ý  Ð ×*T óñ” !Æìä ·!H$ !1ÉØh !A  !]ßÌ| !n!€!Œ!–Á¨ !¥xŒ0 !·!¼†ÀX !Ì+ÈD !á+0 !úÔð "ÛÔ "/âPT "C"R½D "eJŒ( "qÁ¨0 "Ñ´( "–Ä$h "¤`Ø( "¸ ”0 "È"Í?¸ "à"çKDä #È„ #áhœ #(ã€À #5#A#M*l\ #e#k#p#ƒ'L„ #™ŠÜX #­#dz° #Ú‹4 #ê#ðäpD #üÈ< $C,, $'ŽT $5$@Óä $PÈ”d $bÇÐ $x$~$„$›$ ÖÔ\ $²$¾Ÿd Ã÷pÔ $ÔÇà $è$ñ$ûŒHl % xl %"Iè %;#c%A%I%PÑ  %kÈT %|Àð¸ $®u\ %‹?Ð4 % %«½„  +%Å%ÌÍ|0 %äØ0ˆ &&ƒ€ &å¼ &(l &6 &H´TÀ &X¼¬ &läH &ÈÌÀ &‘ä( &¦H &µŠ˜D &É&Ý&ï&õ5 ˜ 'µPt ''*ÉL ':'@áØx 'RÔ 'jÛd@ '‡» ˆ '”” 'áLŒ '®–ˆä¤ 'Ìêäd 'Ø'ß'é'ø 'ý¥ô4 (4 ('(-ÙÄà (;Bø, (U<ì˜ (cÏXÜ %Ç(q(w ( $ (£à (¼î8$ (Ê¢h< (ݽD¼ (ìÞðx (ý)༠)¦Àl )+)2Œ´ )FŠôh )Z¼¬( )m¤\ )Jð$ )”ÒÐ, )«)³ï¼ )Á¾ˆì )Ïä8 )â$ )þudŒ *Ê”ˆ *úà( *-èPä *;*Dñ”ð *a*füŒ *€ÎT° *Èp *£*¯*ÉK( *Ùƒd *è*øI¸ + +À< +%+,ò„  +IT8 +UŽ„Ü +c+‚føL +’Ò| +­¥4À +½+Ã+Ë“X M+Ø*+à½ðt %B+öÄ dƒ| ,,+”Üà ,4ä´P ,B‘˜ ,Mt¼L ,_]ð  ,oÞh ,,ˆ*È\ ,¡£¤ ,³,º,Àæ¸( ,Ê&ð  ,Þiüø ,òåÀˆ -Ñ`| -⤈ -)< -8Íà4 -K4 -_ûT¸ -o-wÚô -h°L -¢,/-¨âÜL -¾-Éà  -Ùê|h -ê-ýÎdp ...#.3"Ù.I._.kIØ .‚?À .–Ah .­Ž|@ .¹+$L .ÑâL !Ç.åãàh .ù½4 /È\ /'ú´, /6äX` /FÌ@D /aÛ¤ /{Á°( /Ž/§Žh /¹/ÃÁØ8 +†/Ò¿t /á ÔÈ /ñ±€¤ 0ÿè0 00„| 0'0Dt 0[0whDl 0‰° 0œÛè 0³J$ 0Ë0Ò0Û 0ï0ù11 8¤< 11#_¤8 13Ü | 1H1_¤ 1q1x‘T4 1„sý´$ 1’1˜1«(h< 1Ø 1ÉĈD 1Ù@d¤ 1ïvðœ 1ÿÞÌ$ 2A¨l 2%2-24T 1èà„ 2N<t 2`¤d 2qÎP "Á2…Þ( ,2•Ü 2ª°x 2»¸ 2ËM`D 2ØÉ”< 2ã…4 2û3mô 3@` 30,lt 3KÂ( 3Z†0 3k?° 3~Û X 3•Ûü 3¬×¨@ 3», @ 3Ѥ° 0{3ÞÆP  3øØ  44+p  %ùÑôp 4,âÐ  4>+À 4X¼Ô4 4gà 4xH\ 4‹Ð4 4  8 4ºê,P 4Ë®,L 4Þ!°4ãM, 4ò×èH 55(¬ 5)žÈœ 5:5A4 5N.libs/libapr-1.so.0.2.12crti.svalues-Xa.cBbss.bssDdata.dataDrodata.rodatacrtstuff.ccall___do_global_dtors_auxcall_frame_dummyforce_to_data__CTOR_LIST____DTOR_LIST____EH_FRAME_BEGIN__object.2completed.1p.0__JCR_LIST__apr_getpass.capr_cpystrn.capr_strnatcmp.cstrnatcmp0apr_strings.c.LLC0.LLC1.LLC2.LLC3apr_strtok.capr_fnmatch.capr_snprintf.capr_ecvtsnprintf_flushconv_10conv_p2_quadupper_digits.1upper_digits.3conv_10_quadconv_p2.LLC4.LLC5.LLC6apr_cvtlow_digits.0low_digits.2apr_tables.ctable_reindexapr_array_push_noclearmake_array_coreapr_hash.calloc_arrayfind_entryapr_atomic.chash_mutexatomic_cleanupdso.cdso_cleanupflock.creadwrite.cfile_read_bufferedfile_printf_flushfilepath_util.cseek.csetptrtempdir.cdir_cleanupmktemp.cfiledup.capr_file_dup.LLC7test_tempdirfilepath.cpipe.copen.capr_unix_file_cleanupfilestat.cfill_out_finfocopy.capr_file_transfer_contentsfileacc.cfullrw.cthread_rwlock.cthread_rwlock_cleanupthread_mutex.cthread_mutex_cleanupthread_cond.cthread_cond_cleanupproc_mutex.cproc_mutex_fcntl_releaseproc_mutex_no_child_initmutex_sysv_methodsproc_mutex_posix_createproc_mutex_op_offproc_mutex_choose_methodproc_mutex_posix_cleanupproc_mutex_fcntl_cleanupproc_mutex_lock_itmutex_fcntl_methodsproc_mutex_unlock_itproc_mutex_proc_pthread_acquireproc_mutex_no_tryacquireproc_mutex_proc_pthread_cleanupmutex_proc_pthread_methodsproc_mutex_posix_releaseproc_mutex_sysv_releaseproc_mutex_fcntl_acquireproc_mutex_posix_acquireproc_mutex_proc_pthread_releaseproc_mutex_sysv_acquireproc_mutex_sysv_cleanupproc_mutex_op_onproc_mutex_sysv_createproc_mutex_proc_pthread_createmutex_posixsem_methodsproc_mutex_fcntl_createglobal_mutex.cglobal_mutex_cleanupapr_pools.cfree_proc_chainapr_pools_initializedcleanup_pool_for_execglobal_allocatorpsprintf_flushrun_cleanupsglobal_poolcharset.cenv.cversion.crand.cstart.cerrorcodes.c.LLC10.LLC11.LLC12.LLC13.LLC14.LLC15.LLC16.LLC17.LLC18.LLC19.LLC20.LLC21.LLC22.LLC23.LLC24.LLC25.LLC26.LLC27.LLC28.LLC29.LLC30.LLC31.LLC32.LLC33.LLC34.LLC35.LLC36.LLC37.LLC38.LLC39.LLC40.LLC41.LLC42.LLC43.LLC44.LLC45stuffbuffer.LLC8.LLC9getopt.creversecerrpermuteserrotherchild.cother_childrenother_child_cleanupmmap.cmmap_cleanupcommon.csockaddr.ccall_resolversockopt.csononblocksoblocksendrecv.cno_hdtrmulticast.cfind_if_indexmcast_check_typedo_mcast_optdo_mcastsock_is_ipv4sock_is_ipv6sockets.cgeneric_inaddr_anyset_socket_varsalloc_socketsocket_cleanupinet_ntop.cinet_ntop4inet_pton.cxdigits_u.2xdigits_l.1inet_pton4epoll.cselect.cport.cbackend_cleanupget_eventkqueue.csha2.csha2_hex_digitsK256sha384_initial_hash_valueK512sha512_initial_hash_valuesha256_initial_hash_valueapr_random.cmix_pidall_randomapr_random_bytessha2_glue.csha256_finishsha256_addsha256_initshm.cshm_cleanup_attachshm_cleanup_ownerwaitio.cprocsup.cthread.cdummy_workerthreadattr_cleanuponce_init.0signals.csignal_descriptionremove_sync_sigsproc.cthreadpriv.ctime.cdayoffset.0server_gmt_offsetexplode_timetimestr.cuserinfo.cgetpwnam_safegroupinfo.c__DTOR_END__call___do_global_ctors_aux__CTOR_END____JCR_END____FRAME_END__crtn.s_END__START__etextapr_getopt_longapr_sleepapr_socket_opt_getapr_pool_userdata_getstrchrapr_getopt_initapr_file_putcapr__SHA512_Endgetpeernameaccessstrtollapr_file_inherit_unsetapr_pool_cleanup_nullapr_proc_other_child_register_lib_versionapr_random_add_entropyapr_thread_rwlock_pool_getapr_pollset_pollapr_thread_joinapr_file_putsapr_os_proc_mutex_putfwriteapr_psprintfapr_procattr_cmdtype_setsemopapr_file_pipe_timeout_setmemcmpapr_proc_mutex_cleanupapr_thread_mutex_destroyclosedirapr__SHA384_Dataapr_file_flushapr_proc_other_child_refreshapr_socket_listenuuid_generateapr_sockaddr_vars_setapr_app_initializeapr_dir_rewindapr_thread_once_initapr_table_copyapr_pollset_destroyapr_mcast_leaveapr_procattr_child_in_setapr_dir_closeapr_dir_make_recursiveapr_socket_shutdownapr_pool_cleanup_runapr_ltoaapr_signal_threadapr_pollset_removesem_waitapr_vsnprintfapr_itoaapr_off_t_toaapr_shm_createopendirfcntlapr_threadattr_guardsize_setapr_parse_addr_portapr_threadattr_createmkstemp64mmap64apr_unix_mode2permsdifftimeapr_thread_cond_destroyapr_thread_mutex_lockapr_thread_cond_waittoupperapr_file_eofapr_table_getapr_table_doapr_os_dir_putapr_file_seekapr_proc_other_child_alertapr_filepath_list_mergestrcmpapr_socket_inherit_unsetsem_unlinkapr_hash_merge__moddi3apr__SHA384_Finalapr_socket_inherit_setapr_file_pipe_timeout_getapr_proc_mutex_unix_setup_lockshmctlpthread_mutexattr_settypememcpyapr_file_pool_getapr_file_inherit_setapr_sockaddr_info_getmallocpthread_mutex_initsigactiongetpassphraseapr_uid_getapr_allocator_mutex_setport_associategetenvapr_pstrcatapr_match_globlseek64apr_file_appendapr_random_secure_readyapr_atomic_initapr_pool_destroyapr_file_remove_DYNAMICunsetenvapr_allocator_allocapr_atomic_add32apr_os_sock_makeapr_uid_homepath_getapr_thread_rwlock_destroy__dso_handleapr_file_info_getpthread_cond_broadcastpthread_mutex_trylock__ctypegettimeofdayapr_proc_other_child_unregisterapr_hash_make_customapr_palloc_debugapr_shm_baseaddr_getapr_file_ungetcapr_file_writevmemsetapr_dir_openapr_pollset_createapr_file_open_stderrgetaddrinfoapr__SHA512_Initapr_file_writev_fullapr_inet_ptonapr_proc_mutex_child_initapr_thread_mutex_trylockapr_procattr_child_errfn_setapr_procattr_child_out_setapr_env_delete__deregister_frame_infoapr_file_writestrcpyapr_os_locale_encodingport_getnapr_signal_blockstrncmpapr_file_dup2apr_thread_rwlock_createapr_thread_rwlock_unlockapr_mmap_deleteapr_dir_readpthread_rwlock_trywrlockpthread_onceapr_atomic_dec32pthread_mutex_destroyapr_wait_for_io_or_timeoutapr_allocator_mutex_getapr_file_data_setapr_os_file_getapr_pool_child_cleanup_setapr_fnmatch_testapr_random_secure_bytesapr_procattr_error_check_setapr_filepath_name_get__posix_getpwuid_rapr_initialize_GLOBAL_OFFSET_TABLE_apr_proc_killapr_dso_unload__posix_readdir_rapr_filepath_encodingsemctl_endutimesapr_table_overlapapr_strtoi64__divdi3apr_file_truncstrrchrapr_hash_setapr_threadkey_private_setpthread_mutex_lockapr_procattr_detach_setapr_proc_mutex_unlockapr_terminateapr_thread_cond_signalpthread_rwlock_rdlockapr_table_overlayapr_file_mtime_setapr_random_standard_newapr_hash_countapr_vformatterpthread_rwlock_destroyapr_threadattr_stacksize_setapr__SHA512_Dataapr_allocator_owner_setapr_filepath_mergeapr_thread_cond_broadcastpthread_attr_destroyapr_thread_pool_getapr_file_closeapr_thread_exitapr_array_popapr_socket_connectapr_allocator_freeapr_time_exp_gmtpthread_attr_initapr_socket_sendfileapr_versionapr_hash_overlayfreeaddrinfopthread_cond_destroyselectapr_random_after_forkapr_thread_rwlock_rdlockapr_procattr_user_setapr_proc_mutex_defname.umulapr_proc_mutex_trylockgetuidstrcasecmpapr_pollset_addapr_cpystrnpthread_mutex_unlockpthread_joinapr_file_openapr_password_getapr_socket_acceptchmodapr_file_attrs_setapr_os_shm_putapr_table_mergenapr_uid_currentapr_mcast_joinpthread_sigmaskapr_getoptapr_hash_getshmgetapr_table_setnapr_filepath_setapr_global_mutex_createpthread_rwlock_unlockapr_atomic_casptrapr_temp_dir_getapr_threadattr_detach_getapr_tokenize_to_argvapr_pool_allocator_getapr_file_flags_getapr_array_appendapr_allocator_owner_getapr_proc_other_child_refresh_allapr_socket_recvfromnl_langinfo__posix_getgrgid_rsetuidpthread_selfpthread_exitapr_socket_opt_setapr_socket_createapr_mcast_interfaceapr_socket_type_getapr_proc_mutex_pool_getgetsockoptapr_shm_detachapr_atomic_set32apr_mmap_dupapr_dir_makepthread_attr_setstacksizepthread_cond_signalh_errnoapr_os_dso_handle_getapr_hash_nextapr_strtokapr_proc_mutex_destroyapr_shm_size_getapr_table_addapr_env_getapr_array_pstrcatapr_time_nowapr_proc_waitapr_file_setasideapr_pool_clear_debugapr__SHA384_Init__assertapr_socket_timeout_setapr_time_ansi_putpthread_getspecificapr_socket_sendvapr_fnmatchapr_pstrndupapr_sockaddr_ip_getapr_day_snamesmktimeapr_pool_terminate.udivsemgetpthread_rwlock_initapr_file_flush_lockedapr_os_exp_time_putstrlenapr_global_mutex_child_initapr_file_printfapr_thread_createapr_thread_rwlock_trywrlockapr_signal_initapr_unix_child_file_cleanupapr_atomic_sub32pthread_cond_waitgetsockname__udivdi3apr_table_eltsapr_socket_sendtopipeapr_socket_bindapr_allocator_createapr_global_mutex_destroyapr_thread_mutex_createapr_threadkey_private_deleteapr_os_exp_time_getpthread_detachapr_random_barrierapr_env_setapr_shm_destroyapr_procattr_dir_setapr_table_setapr_socket_addr_getapr_file_renameftokapr_pool_abort_getgetcwdapr_generate_random_bytesapr_os_thread_getapr_time_exp_gmt_getapr_dso_loadftruncate64sigemptysetapr_global_mutex_lockdlclose.div__posix_getpwnam_rapr_proc_mutex_createapr_socket_data_setpthread_attr_setguardsizeapr__SHA384_Updateapr_os_sock_getmkdirapr_dso_symapr_thread_detachapr_pool_note_subprocessapr_strnatcmpstrerror_rapr_proc_createapr_os_thread_putapr_os_thread_currentioctldlsympthread_mutexattr_initmodfapr_hash_makeapr_gethostnameapr__SHA256_Transformapr_os_thread_equalsem_open__lshrdi3apr_os_sock_putapr_thread_cond_createapr_pool_create_ex_debug__iobfstat64setsidapr_procattr_child_err_setapr_thread_yieldapr_shm_removeapr_pool_is_ancestorsigfillsetapr_random_insecure_readydlopenapr_setup_signal_threadapr_hashfunc_defaultapr_proc_forkapr_mcast_loopbackapr_file_lockapr_file_copyapr_file_data_getapr__SHA384_Endapr_unix_perms2modeapr_time_clock_hiresapr_table_unsetapr_file_open_stdoutapr_pool_clearapr_socket_data_getpthread_setspecificpthread_cond_initchdirapr_pallocapr_random_init_PROCEDURE_LINKAGE_TABLE_apr_thread_onceabortapr_atomic_xchg32apr_filepath_list_splitapr_threadkey_private_createapr_snprintfapr_statapr_atomic_cas32pthread_mutexattr_setprotocolapr_gid_getmkfifosem_closeapr_proc_mutex_lockapr__SHA256_Dataapr_thread_rwlock_wrlockrmdirapr_hash_copyapr_pool_cleanup_for_execapr_pvsprintfapr_table_vdoshmatapr_thread_mutex_unlockapr_file_open_stdinapr_thread_cond_pool_getapr_file_getcapr__SHA256_Updateapr_array_pushapr_time_exp_getperrorapr_atomic_inc32apr__SHA512_Transformmunmapapr_socket_pool_getapr_collapse_spacesapr_is_empty_arrayapr_file_write_fullapr_version_stringapr_procattr_group_setgeteuidapr_file_getsapr_array_catapr_file_perms_setapr_thread_rwlock_tryrdlockapr_socket_sendapr_table_mergeapr_os_dir_getapr_file_read___errnoapr_filepath_list_split_implmmapapr_thread_cond_timedwaitapr_table_addnapr_thread_data_setport_createpthread_mutexattr_destroyapr_os_uuid_getapr_mcast_hops__posix_sigwaitapr_pcalloc_debugfreopenapr_array_copy_hdrexecveapr_filepath_list_merge_implapr_pmemdupapr_inet_ntoppthread_mutexattr_setrobust_npapr_getnameinfoapr_procattr_addrspace_setapr__SHA256_Endshmdtwaitpidapr_strfsizelstat64apr_crypto_sha256_newapr_file_info_get_lockedpthread_attr_getdetachstateapr_pollapr_dso_errorapr_atoi64apr_socket_atmarkapr_mmap_createapr_hash_pool_getexecvpapr_global_mutex_trylockapr__SHA256_Finalgetgidexecvapr_ctimeapr_proc_mutex_nameapr_ipsubnet_createapr_file_unlockapr_table_compressapr_os_imp_time_putapr_pstrmemdupapr_signal_unblockapr_pool_initializeapr_file_mktempfprintfapr_proc_wait_all_procsapr_sockaddr_equalisnanapr_os_dso_handle_putsetsockoptapr_table_clearapr_gid_name_getpthread_key_deleteapr_procattr_io_setsigdelsetseekdirport_dissociate__register_frame_infopthread_rwlock_wrlocklocaltime_rapr_pool_destroy_debugapr_pool_parent_getapr_pool_userdata_setnapr_pstrdupapr_global_mutex_unlockapr_os_imp_time_getapr_unix_setup_timeapr_random_insecure_bytesapr_thread_data_getapr_dir_removeapr_rfc822_dateapr_signal_description_getapr_threadkey_private_getapr_is_empty_tablepthread_rwlock_tryrdlockapr_strnatcasecmpsigaddsetapr_table_makeapr_array_copyapr_os_file_putapr__SHA512_Finalapr_month_snamesapr_pool_create_expthread_mutexattr_setpsharedapr_socket_timeout_getpthread_attr_setdetachstateapr_getservbynameapr_os_pipe_put_exapr_threadkey_data_getapr_os_default_encodingsetgidgmtime_r_Jv_RegisterClassessetrlimitsendfilev64atoiapr_pcallocapr_strftimeapr_mmap_offsetapr_os_threadkey_putpthread_cond_timedwaitapr_file_name_getstrtolapr_strtoffpthread_equal.urempthread_key_createapr_proc_mutex_lockfile_finiapr_proc_detachapr_pool_userdata_setapr_socket_recvapr_time_exp_ltapr_pool_cleanup_killtolowermemchrapr_thread_mutex_pool_getapr_filepath_rootapr_filepath_getapr_procattr_createapr_time_exp_tzapr_os_threadkey_getapr__SHA512_Lastapr_os_pipe_putapr_strerrorapr_signalapr_socket_protocol_getsem_postapr_ipsubnet_testapr_pool_cleanup_registerapr_allocator_max_free_setapr_shm_attachapr_socket_closeapr_pool_abort_setapr_procattr_limit_setapr_threadkey_data_setapr_hash_firstapr_allocator_destroyapr_pstrcatvapr_threadattr_detach_setapr_os_shm_getgai_strerrorapr_os_global_mutex_getapr_atomic_read32apr_global_mutex_pool_getapr_array_makeapr_shm_pool_getapr_file_read_fullapr_file_pipe_createapr_file_namedpipe_createapr_uid_name_getapr__SHA512_Update.remapr_terminate2apr_hash_this__posix_getgrnam_rapr_os_proc_mutex_getapr__SHA256_Init_edataapr_pool_tagdlerroras: Sun Compiler Common 10 Patch 09/04/2007 @(#)SunOS 5.10 Generic January 2005as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 GCC: (GNU) 3.4.6as: Sun Compiler Common 10 Patch 09/04/2007 ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.489.hash.dynsym.dynstr.SUNW_version.rela.got.rela.data.rel.local.rela.data.rel.ro.local.rela.plt.init.fini.text.rodata.dynamic.data.ctors.dtors.eh_frame.jcr.bss.symtab.strtab.comment.shstrtab””8 ÌÌ(P"==)üoÿÿþgg%Bh(h( \  /Br„r„ DBrœrœP \Bsìsì fƒ|ƒ|lƒ˜ƒ˜rƒ¬ƒ¬güxë¨ë¨p*xaÄ €TT‰TT ``–hhpp§tt4xxI€€€¬t±@Àˆ¹ UÀ5VÁ‹Ê Ôlib/pkgconfig/apr-1.pc000444 000000 000000 00000000664 11035140630 015012 0ustar00rootroot000000 000000 prefix=/usr/pkg exec_prefix=${prefix} libdir=${exec_prefix}/lib APR_MAJOR_VERSION=1 includedir=${prefix}/include/apr-${APR_MAJOR_VERSION} Name: APR Description: The Apache Portable Runtime library Version: 1.2.12 Libs: -Wl,-R${libdir} -L${libdir} -lapr-${APR_MAJOR_VERSION} -luuid -lsendfile -lrt -lsocket -lpthread Cflags: -DSOLARIS2=sparc-sun-solaris2 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_LARGEFILE64_SOURCE -I${includedir} libexec/apr/apr_rules.mk000444 000000 000000 00000015160 11035140630 015550 0ustar00rootroot000000 000000 # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # # # rules.mk: standard rules for APR # # # Configuration variables # apr_builddir=/usr/pkg/libexec/apr apr_builders=/usr/pkg/libexec/apr # Some layouts require knowing what version we are at. APR_MAJOR_VERSION=1 APR_DOTTED_VERSION=1.2.12 CC=gcc RM=/usr/bin/rm AWK=/usr/pkg/bin/nawk SHELL=/bin/ksh LIBTOOL=$(SHELL) $(apr_builddir)/libtool # compilation and linking flags that are supposed to be set only by the user. # configure adds to them for tests, but we restore them at the end. # CFLAGS=-O -O2 -I/usr/pkg/gcc34/include -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include -I/usr/include -I/usr/pkg/include CPPFLAGS=-I/usr/pkg/gcc34/include -I/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/include -I/usr/include -I/usr/pkg/include LDFLAGS=-L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6 -Wl,-R/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6 -L/usr/pkg/gcc34/lib -Wl,-R/usr/pkg/gcc34/lib -L/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/ -Wl,-R/usr/pkg/gcc34/lib/gcc/sparc-sun-solaris2.10/3.4.6/ -L/usr/lib -Wl,-R/usr/lib -L/usr/pkg/lib -Wl,-R/usr/pkg/lib LIBS=-lnsl DEFS=-DHAVE_CONFIG_H # anything added to the standard flags by configure is moved to EXTRA_* # at the end of the process. # EXTRA_CFLAGS= EXTRA_CPPFLAGS= -DSOLARIS2=sparc-sun-solaris2 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_LARGEFILE64_SOURCE EXTRA_LDFLAGS= EXTRA_LIBS=-luuid -lsendfile -lrt -lsocket -lpthread EXTRA_INCLUDES= # NOTEST_* are flags and libraries that can be added by the user without # causing them to be used in configure tests (necessary for things like # -Werror and other strict warnings that maintainers like to use). # NOTEST_CFLAGS= NOTEST_CPPFLAGS= NOTEST_LDFLAGS= NOTEST_LIBS= # Finally, combine all of the flags together in the proper order so that # the user-defined flags can always override the configure ones, if needed. # Note that includes are listed after the flags because -I options have # left-to-right precedence and CPPFLAGS may include user-defined overrides. # ALL_CFLAGS = $(EXTRA_CFLAGS) $(NOTEST_CFLAGS) $(CFLAGS) ALL_CPPFLAGS = $(DEFS) $(EXTRA_CPPFLAGS) $(NOTEST_CPPFLAGS) $(CPPFLAGS) ALL_LDFLAGS = $(EXTRA_LDFLAGS) $(NOTEST_LDFLAGS) $(LDFLAGS) ALL_LIBS = $(LIBS) $(NOTEST_LIBS) $(EXTRA_LIBS) ALL_INCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) LTFLAGS = --silent LT_LDFLAGS = # The set of object files that will be linked into the target library. # The build-outputs.mk specifies a different set for each platform. The # configure script will select the appropriate set. # OBJECTS = $(OBJECTS_unix) # # Basic macro setup # COMPILE = $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(ALL_INCLUDES) LT_COMPILE = $(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE) -o $@ -c $< && touch $@ LINK = $(LIBTOOL) $(LTFLAGS) --mode=link $(LT_LDFLAGS) $(COMPILE) -version-info 2:12:2 $(ALL_LDFLAGS) -o $@ APR_MKDIR = $(apr_builders)/mkdir.sh APR_MKEXPORT = $(AWK) -f $(apr_builders)/make_exports.awk APR_MKVAREXPORT = $(AWK) -f $(apr_builders)/make_var_export.awk MKDEP = $(CC) -MM # # Standard build rules # all: all-recursive depend: depend-recursive clean: clean-recursive distclean: distclean-recursive extraclean: extraclean-recursive install: all-recursive all-recursive depend-recursive: @otarget=`echo $@ | sed s/-recursive//`; \ list='$(SOURCE_DIRS)'; \ for i in $$list; do \ if test -f "$$i/Makefile"; then \ target="$$otarget"; \ echo "Making $$target in $$i"; \ if test "$$i" = "."; then \ made_local=yes; \ target="local-$$target"; \ fi; \ (cd $$i && $(MAKE) $$target) || exit 1; \ fi; \ done; \ if test "$$otarget" = "all" && test -z "$(TARGETS)"; then \ made_local=yes; \ fi; \ if test "$$made_local" != "yes"; then \ $(MAKE) "local-$$otarget" || exit 1; \ fi clean-recursive distclean-recursive extraclean-recursive: @otarget=`echo $@ | sed s/-recursive//`; \ list='$(CLEAN_SUBDIRS)'; \ for i in $$list; do \ if test -f "$$i/Makefile"; then \ target="$$otarget"; \ echo "Making $$target in $$i"; \ if test "$$i" = "."; then \ made_local=yes; \ target="local-$$target"; \ fi; \ (cd $$i && $(MAKE) $$target); \ fi; \ done; \ if test "$$otarget" = "all" && test -z "$(TARGETS)"; then \ made_local=yes; \ fi; \ if test "$$made_local" != "yes"; then \ $(MAKE) "local-$$otarget"; \ fi # autoconf 2.5x is creating a 'autom4te.cache' directory # In case someone ran autoconf by hand, get rid of that directory # as well. local-clean: x-local-clean @list='. $(SOURCE_DIRS)'; \ for i in $$list; do \ echo $(RM) -f $$i/*.o $$i/*.lo $$i/*.a $$i/*.la $$i/*.so $$i/*.obj; \ $(RM) -f $$i/*.o $$i/*.lo $$i/*.a $$i/*.la $$i/*.so $$i/*.obj; \ echo $(RM) -rf $$i/.libs; \ $(RM) -rf $$i/.libs; \ done $(RM) -f $(CLEAN_TARGETS) $(PROGRAMS) $(RM) -rf autom4te.cache local-distclean: local-clean x-local-distclean $(RM) -f Makefile $(DISTCLEAN_TARGETS) local-extraclean: local-distclean x-local-extraclean @if test -n "$(EXTRACLEAN_TARGETS)"; then \ echo $(RM) -f $(EXTRACLEAN_TARGETS) ; \ $(RM) -f $(EXTRACLEAN_TARGETS) ; \ fi local-all: $(TARGETS) local-depend: x-local-depend @if test -n "`ls $(srcdir)/*.c 2> /dev/null`"; then \ $(RM) -f .deps; \ list='$(srcdir)/*.c'; \ for i in $$list; do \ $(MKDEP) $(ALL_CPPFLAGS) $(ALL_INCLUDES) $$i | sed 's/\.o:/.lo:/' >> .deps; \ done; \ fi # to be filled in by the actual Makefile x-local-depend x-local-clean x-local-distclean x-local-extraclean: # # Implicit rules for creating outputs from input files # .SUFFIXES: .SUFFIXES: .c .lo .o .c.o: $(COMPILE) -c $< .c.lo: $(LT_COMPILE) .PHONY: all all-recursive local-all install \ depend depend-recursive local-depend x-local-depend \ clean clean-recursive local-clean x-local-clean \ distclean distclean-recursive local-distclean x-local-distclean \ extraclean extraclean-recursive local-extraclean x-local-extraclean libexec/apr/libtool000555 000000 000000 00000701742 11035140630 014625 0ustar00rootroot000000 000000 #! /bin/sh # libtoolT - Provide generalized library-building support services. # Generated automatically by (GNU libtool 1.5.24) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # A sed program that does not truncate output. SED="/usr/pkg/bin/nbsed" # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="/usr/pkg/bin/nbsed -e 1s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # The names of the tagged configurations supported by this script. available_tags="available_tags= CXX F77" # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host marcie.christtrek.org: # Shell to use when invoking shell scripts. SHELL="/bin/sh" # Whether or not to build shared libraries. build_libtool_libs=yes # Whether or not to build static libraries. build_old_libs=yes # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=yes # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=no # Whether or not to optimize for fast installation. fast_install=needless # The host system. host_alias=sparc-sun-solaris2 host=sparc-sun-solaris2 host_os=solaris2 # The build system. build_alias= build=sparc-sun-solaris2.10 build_os=solaris2.10 # An echo program that does not interpret backslashes. echo="/usr/ucb/echo" # The archiver. AR="ar" AR_FLAGS="cru" # A C compiler. LTCC="gcc" # LTCC compiler flags. LTCFLAGS="-O -I/usr/include" # A language-specific compiler. CC="gcc" # Is the compiler the GNU C compiler? with_gcc=yes # An ERE matcher. EGREP="/usr/xpg4/bin/grep -E" # The linker used to build libraries. LD="ld" # Whether we need hard or soft links. LN_S="ln -s" # A BSD-compatible nm program. NM="nm -p" # A symbol stripping program STRIP="strip" # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=file # Used on cygwin: DLL creation program. DLLTOOL="dlltool" # Used on cygwin: object dumper. OBJDUMP="objdump" # Used on cygwin: assembler. AS="as" # The name of the directory that contains temporary libtool files. objdir=.libs # How to create reloadable object files. reload_flag=" -r" reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" # How to pass a linker flag through the compiler. wl="-Wl," # Object file suffix (normally "o"). objext="o" # Old archive suffix (normally "a"). libext="a" # Shared library suffix (normally ".so"). shrext_cmds='.so' # Executable file suffix (normally ""). exeext="" # Additional compiler flags for building library objects. pic_flag=" -fPIC -DPIC" pic_mode=default # What is the maximum length of a command? max_cmd_len=786240 # Does compiler simultaneously support -c and -o options? compiler_c_o="yes" # Must we lock files when doing compilation? need_locks="no" # Do we need the lib prefix for modules? need_lib_prefix=no # Do we need a version for libraries? need_version=no # Whether dlopen is supported. dlopen_support=yes # Whether dlopen of programs is supported. dlopen_self=yes # Whether dlopen of statically linked programs is supported. dlopen_self_static=yes # Compiler flag to prevent dynamic linking. link_static_flag="" # Compiler flag to turn off builtin functions. no_builtin_flag=" -fno-builtin" # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec="" # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec="\${wl}-z \${wl}allextract\$convenience \${wl}-z \${wl}defaultextract" # Compiler flag to generate thread-safe objects. thread_safe_flag_spec="" # Library versioning type. version_type=linux # Format of library name prefix. libname_spec="lib\$name" # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" # The coded name of the library, if different from the real name. soname_spec="\${libname}\${release}\${shared_ext}\$major" # Commands used to build and install an old-style archive. RANLIB="ranlib" old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib" old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib" old_postuninstall_cmds="" # Create an old-style archive from a shared archive. old_archive_from_new_cmds="" # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds="" # Commands used to build and install a shared archive. archive_cmds="\$CC -shared \${wl}-h \${wl}\$soname -o \$lib \$libobjs \$deplibs \$compiler_flags" archive_expsym_cmds="\$echo \\\"{ global:\\\" > \$lib.exp~cat \$export_symbols | \$SED -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$lib.exp~\$echo \\\"local: *; };\\\" >> \$lib.exp~ \$CC -shared \${wl}-M \${wl}\$lib.exp \${wl}-h \${wl}\$soname -o \$lib \$libobjs \$deplibs \$compiler_flags~\$rm \$lib.exp" postinstall_cmds="chmod +x \$lib" postuninstall_cmds="" # Commands used to build a loadable module (assumed same as above if empty) module_cmds="" module_expsym_cmds="" # Commands to strip libraries. old_striplib="" striplib="" # Dependencies to place before the objects being linked to create a # shared library. predep_objects="" # Dependencies to place after the objects being linked to create a # shared library. postdep_objects="" # Dependencies to place before the objects being linked to create a # shared library. predeps="" # Dependencies to place after the objects being linked to create a # shared library. postdeps="" # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path="" # Method to check whether dependent libraries are shared objects. deplibs_check_method="pass_all" # Command to use when deplibs_check_method == file_magic. file_magic_cmd="\$MAGIC_CMD" # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag="" # Flag that forces no undefined symbols. no_undefined_flag=" -z text" # Commands used to finish a libtool library installation in a directory. finish_cmds="" # Same as above, but a single script fragment to be evaled but not shown. finish_eval="" # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe="sed -n -e 's/^.*[ ]\\([BDRT][BDRT]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'" # Transform the output of nm in a proper C declaration global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'" # Transform the output of nm in a C name address pair global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" # This is the shared library runtime path variable. runpath_var= # This is the shared library path variable. shlibpath_var=LD_LIBRARY_PATH # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=yes # How to hardcode a shared library path into an executable. hardcode_action=immediate # Whether we should hardcode library paths into libraries. hardcode_into_libs=yes # Flag to hardcode $libdir into a binary during linking. # This must work even if $libdir does not exist. hardcode_libdir_flag_spec="-R\$libdir" # If ld is used when linking, flag to hardcode $libdir into # a binary during linking. This must work even if $libdir does # not exist. hardcode_libdir_flag_spec_ld="" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="" # Set to yes if using DIR/libNAME during linking hardcodes DIR into the # resulting binary. hardcode_direct=no # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=no # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=no # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=no # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="PATH LD_LIBRARY_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=yes # Compile-time system search path for libraries sys_lib_search_path_spec="/usr/local/lib/gcc/sparc-sun-solaris2.10/3.4.6 /usr/ccs/bin /usr/ccs/lib /usr/local/lib /lib /usr/lib" # Run-time system search path for libraries sys_lib_dlsearch_path_spec="/lib /usr/lib" # Fix the shell variable $srcfile for the compiler. fix_srcfile_path="" # Set to yes if exported symbols are required. always_export_symbols=no # The commands to list exported symbols. export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds="" # Symbols that should not be listed in the preloaded symbols. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Symbols that must always be exported. include_expsyms="" # ### END LIBTOOL CONFIG # ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007 Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.24 TIMESTAMP=" (1.1220.2.455 2007/06/24 02:13:29)" # Be Bourne compatible (taken from Autoconf:_AS_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+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= duplicate_deps=no preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 ##################################### # Shell function definitions: # This seems to be the best place for them # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $mkdir "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || { $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2 exit $EXIT_FAILURE } fi $echo "X$my_tmpdir" | $Xsed } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ $SED -n -e '1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { # Set the commonly-used compilers for some tags. tag_compilers_CC="*cc *xlc" tag_compilers_CXX="*++ *CC" tag_compilers_F77="*77 *fort" base_compiler=`set -- "$@"; $echo $1` # If $tagname still isn't set, then try to infer if the default # "CC" tag applies by matching up the base compile command to some # compilers commonly used for the "CC" tag. if test -z "$tagname"; then z=CC eval "tag_compilers=\$tag_compilers_${z}" if test -n "$tag_compilers"; then for zp in $tag_compilers; do case $base_compiler in $zp) # The compiler in the base compile command matches # one of the common compilers for the current tag. # Assume this is the tagged configuration we want. tagname=$z break ;; esac done fi fi if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac # If $tagname still isn't set, then try to infer it by # matching up the base compile command to some compilers # commonly used for certain tags. base_compiler=`set -- "$@"; $echo $1` eval "tag_compilers=\$tag_compilers_${z}" if test -n "$tag_compilers"; then for zp in $tag_compilers; do case $base_compiler in $zp) # The compiler in the base compile command matches # one of the common compilers for the current tag. # Assume this is the tagged configuration we want. tagname=$z break ;; esac done if test -n "$tagname"; then break fi fi fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)" $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $? if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2 exit $EXIT_FAILURE fi } # func_extract_archives gentop oldlib ... func_extract_archives () { my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" my_status="" $show "${rm}r $my_gentop" $run ${rm}r "$my_gentop" $show "$mkdir $my_gentop" $run $mkdir "$my_gentop" my_status=$? if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then exit $my_status fi for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'` my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) extracted_serial=`expr $extracted_serial + 1` my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" $show "${rm}r $my_xdir" $run ${rm}r "$my_xdir" $show "$mkdir $my_xdir" $run $mkdir "$my_xdir" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then exit $exit_status fi case $host in *-darwin*) $show "Extracting $my_xabs" # Do not bother doing anything if just a dry run if test -z "$run"; then darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'` darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null` if test -n "$darwin_arches"; then darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= $show "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}" lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we have a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` lipo -create -output "$darwin_file" $darwin_files done # $darwin_filelist ${rm}r unfat-$$ cd "$darwin_orig_dir" else cd "$darwin_orig_dir" func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches fi # $run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # End of Shell function definitions ##################################### # Darwin sucks eval std_shrext=\"$shrext_cmds\" disable_libs=no # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) echo "\ $PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP Copyright (C) 2007 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $? ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $? ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $? ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag preserve_args="$preserve_args --tag" ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi case $disable_libs in no) ;; shared) build_libtool_libs=no build_old_libs=yes ;; static) build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ;; esac # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc* | *CC) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, and some SunOS ksh mistreat backslash-escaping # in scan sets (worked around with variable expansion), # and furthermore cannot handle '|' '&' '(' ')' in scan sets # at all, so we specify them separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.[fF][09]?) xform=[fF][09]. ;; *.for) xform=for ;; *.java) xform=java ;; *.obj) xform=obj ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"` case $qlibobj in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qlibobj="\"$qlibobj\"" ;; esac test "X$libobj" != "X$qlibobj" \ && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' &()|`$[]' \ && $echo "$modename: libobj name \`$libobj' may not contain shell special characters." objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo "$srcfile" > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"` case $qsrcfile in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qsrcfile="\"$qsrcfile\"" ;; esac $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac # Canonicalise the pathname tmp="" while test "$arg" != "$tmp" do tmp=$arg arg=`$echo "X$arg" | $Xsed -e 's%[^/.][^/.]*/\.\.%%g' -e 's%/\./%/%g' -e 's%//*%/%g' -e 's%/$%%g'` done if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; darwin_framework|darwin_framework_skip) test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework|-arch|-isysroot) case " $CC " in *" ${arg} ${1} "* | *" ${arg} ${1} "*) prev=darwin_framework_skip ;; *) compiler_flags="$compiler_flags $arg" prev=darwin_framework ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" notinst_path="$notinst_path $dir" fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. -model) compile_command="$compile_command $arg" compiler_flags="$compiler_flags $arg" finalize_command="$finalize_command $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" case $host:$arg in *-*-dragonfly*:-pthread) # pkgsrc hack to use -pthread in .la file for final linking deplibs="$deplibs $arg" ;; esac continue ;; -module) module=yes continue ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m* pass through architecture-specific compiler args for GCC # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" compiler_flags="$compiler_flags $arg" continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then exit $exit_status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" fi case $host:$deplib in *-*-dragonfly*:-pthread) # pkgsrc hack to use -pthread in .la file for final linking case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi ;; esac ;; esac continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` if eval $echo \"$deplib\" 2>/dev/null \ | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $absdir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes ; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP ": [^:]* bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= versuffix2= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then major=`expr $current - $age` else major=`expr $current - $age + 1` fi case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" versuffix2="$major.$age" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= versuffix2= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"` # deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"` # dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name=`expr $a_deplib : '-l\(.*\)'` # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then case $archive_cmds in *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;; *) eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;; esac else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$echo "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$output_la-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext k=`expr $k + 1` output=$output_objdir/$output_la-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadable object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$output_la-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then $show "${rm}r $gentop" $run ${rm}r "$gentop" fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac else $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* ) $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ " case $host in *cygwin* | *mingw* ) $echo >> "$output_objdir/$dlsyms" "\ /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs */ struct { " ;; * ) $echo >> "$output_objdir/$dlsyms" "\ const struct { " ;; esac $echo >> "$output_objdir/$dlsyms" "\ const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. case $host in *cygwin* | *mingw* ) if test -f "$output_objdir/${outputname}.def" ; then compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP` else compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` fi ;; * ) compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP` ;; esac ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" exit_status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $exit_status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) output_name=`basename $output` output_path=`dirname $output` cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) /* -DDEBUG is fairly common in CFLAGS. */ #undef DEBUG #if defined DEBUGWRAPPER # define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__) #else # define DEBUG(format, ...) #endif const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); const char * base_name (const char *name); char * find_executable(const char *wrapper); int check_executable(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup (base_name (argv[0])); DEBUG("(main) argv[0] : %s\n",argv[0]); DEBUG("(main) program_name : %s\n",program_name); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = find_executable(argv[0]); if (newargz[1] == NULL) lt_fatal("Couldn't find %s", argv[0]); DEBUG("(main) found exe at : %s\n",newargz[1]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; for (i=0; i> $cwrappersource <> $cwrappersource <> $cwrappersource <<"EOF" return 127; } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char)name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable(const char * path) { struct stat st; DEBUG("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!"); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && ( /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */ #if defined (S_IXOTH) ((st.st_mode & S_IXOTH) == S_IXOTH) || #endif #if defined (S_IXGRP) ((st.st_mode & S_IXGRP) == S_IXGRP) || #endif ((st.st_mode & S_IXUSR) == S_IXUSR)) ) return 1; else return 0; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise */ char * find_executable (const char* wrapper) { int has_slash = 0; const char* p; const char* p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char* concat_name; DEBUG("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char* path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char* q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR(*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable(concat_name)) return concat_name; XFREE(concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen(tmp); concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable(concat_name)) return concat_name; XFREE(concat_name); return NULL; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible (taken from Autoconf:_AS_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+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \$*\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "copying selected object files to avoid basename conflicts..." if test -z "$gentop"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" exit_status=$? if test "$exit_status" -ne 0 && test ! -d "$gentop"; then exit $exit_status fi fi save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase counter=`expr $counter + 1` case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" $run ln "$obj" "$gentop/$newobj" || $run cp "$obj" "$gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*" 2>/dev/null` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Canonicalise the pathname: # - remove foo/../ # - replace // # - remove /./ # - strip any trailing / tmp="" while test "$dest" != "$tmp"; do tmp=$dest dest=`$echo "X$dest" | $Xsed -e 's%[^/.][^/.]*/\.\.%%g' -e 's%/\./%/%g' -e 's%//*%/%g' -e 's%/$%%g'` done # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP` else relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)' fi exit $lt_exit } done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # Note that it is not necessary on cygwin/mingw to append a dot to # foo even if both foo and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. # # If there is no directory component, then add one. case $wrapper in */* | *\\*) . ${wrapper} ;; *) . ./${wrapper} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir=`func_mktempdir` file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "X----------------------------------------------------------------------" | $Xsed $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eva